diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..b03eebae --- /dev/null +++ b/404.html @@ -0,0 +1,1050 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + + +
+
+ +

404 - Not found

+ + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/about/license/index.html b/about/license/index.html new file mode 100644 index 00000000..bf86a84c --- /dev/null +++ b/about/license/index.html @@ -0,0 +1,1094 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + License - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + + +
+
+ + + + + +

License

+ +

License

+

MIT License

+

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

+

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/about/release-notes/index.html b/about/release-notes/index.html new file mode 100644 index 00000000..eb1c5b6b --- /dev/null +++ b/about/release-notes/index.html @@ -0,0 +1,5334 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Release notes - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

Releases

+

3.18.0

+

Enhancements

+
    +
  • SharePoint Framework v1.19.0 support
  • +
+

3.17.1

+

Fixes

+
    +
  • Fixes for Webpack 5: #621
  • +
+

3.17.0

+

New control(s)

+
    +
  • PropertyFieldButton: New Control PropertyFieldButton #613
  • +
  • PropertyFieldGrid: New Control PropertyFieldGrid #614
  • +
+

Enhancements

+
    +
  • fast-serve: ast-serve update to match the most recent changes. #606
  • +
  • PropertyFieldContentTypePicker: PropertyFieldContentTypePicker control #611
  • +
  • PropertyFieldFilePicker : add a delete button to the selected file #579
  • +
  • PropertyFieldFilePicker: Fix root site org asset library showing no items in file picker (https://github.com/pnp/sp-dev-fx-property-controls/pull/603)
  • +
  • PropertyFieldFolderPicker: added siteAbsoluteUrl to FOlderPicker (https://github.com/pnp/sp-dev-fx-property-controls/pull/602)
  • +
+

Fixes

+
    +
  • General Helper: toRelativeUrl returns proper relative url in case of root site (https://github.com/pnp/sp-dev-fx-property-controls/pull/609)
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Daniel Lindén, Jake, João Mendes, Nishkalank Bezawada, ramonitor, Russell gove, Sergei Sergeev.

+

3.16.0

+

Enhancements

+
    +
  • PropertyFieldSitePicker: disabled property not implemented in UI #577
  • +
+

Fixes

+
    +
  • PropertyFieldMonacoEditor and PropertyFieldCodeEditor: fix text selection in code editor #590
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Luna Heyman, srpmtt.

+

3.15.1

+

Fixes

+
    +
  • PropertyFieldChoiceGroupWithCallout deletes properties #592
  • +
+

3.15.0

+

Enhancements

+
    +
  • SharePoint Framework v1.18.2 support
  • +
+

Fixes

+
    +
  • Localization: Errors in en-gb loc file #582
  • +
  • Localization: Errors in german language #589
  • +
  • PropertyFieldFilePicker: fix Tiles view #562
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): andrew-lott, Clem S-K, Tom F..

+

3.14.0

+

Enhancements

+
    +
  • PropertyFieldListPicker: Implemented functionality to select multiple base templates #568
  • +
  • fast-serve: Fast-serve updated to the latest version and serve warnings fixed. #579
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Chandani Prajapati, Sergei Sergeev.

+

3.13.0

+

Enhancements

+
    +
  • PropertyFieldCollectionData: add panelProps property to collection data #546
  • +
  • SharePoint Framework v1.17.1 support
  • +
+

Fixes

+
    +
  • Italian localization updated #549
  • +
  • Fixed multiple typos #550
  • +
  • Swedish localization updated #553
  • +
  • PropertyPanePropertyEditor: crash when property undefined/null #552
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Chad Eiserloh, Gitwey, Jake Stanger, Luca3082, Valeras Narbutas.

+

3.12.0

+

Enhancements

+
    +
  • PropertyFieldFilePicker: Site Tab - Adding scrolling for many libraries #525
  • +
  • SPListPickerService: add ContentTypes/Name to the query #521
  • +
  • Czech localization added #527
  • +
+

Fixes

+
    +
  • Documentations fix for PropertyPaneHelpers #536
  • +
  • ColorPicker: localization for Fluent UI ColorPicker #535
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Brian Krainer Jacobsen, Chad Eiserloh, krishna-vijas, Martin Zamazal.

+

3.11.0

+

Enhancements

+
    +
  • SharePoint Framework v1.16.0 support
  • +
+

Fixes

+
    +
  • TermPicker: missed documentation for anchorId property #496
  • +
  • FilePicker: Operations not working for 100+ Items #497
  • +
  • FilePicker: File Sorting not working on file size properly #501
  • +
  • PropertyFieldMessage: documentation typos fix #504
  • +
  • FilePicker: Sorting on Large Libraries / Folders Must do Server-Side Sorting #503
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Chad Eiserloh, Chandani Prajapati, Hilton Giesenow.

+

3.10.0

+

Enhancements

+
    +
  • Arabic locale is missing #461
  • +
  • PropertyFieldTermPicker: anchorId support #491
  • +
+

Fixes

+
    +
  • FilePicker: Fixed an internal typo in the codebase #474
  • +
  • ListPicker: documentation updates #490
  • +
  • PropertyFieldCollectionData: Adding new translation for Field Issues label #486
  • +
  • FilePicker: Page Type icons not appearing in the Site Pages library view #475
  • +
  • FilePicker: Tiles are Missing for Site Pages #478
  • +
  • FilePicker: Sorting Does Not Work #487
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Chad Eiserloh, JeanNetryValere, Hilton Giesenow, nviolero, Paul Schaeflein.

+

3.9.0

+

Enhancements

+
    +
  • SharePoint Framework v1.15.2 support
  • +
+

3.8.0

+

New control(s)

+
    +
  • Localizations for en-gb #454
  • +
+

Enhancements

+
    +
  • PropertyFieldSitePicker: Site Picker search for any input string #386
  • +
  • fast-serve: bump support to 1.14.0 #386
  • +
  • PropertyFieldCollectionData: allow to conditionally disable specific field in the item #464
  • +
+

Fixes

+
    +
  • PropertyFieldListPicker: Remove debugger #455
  • +
  • PropertyFieldCollectionData: Add button is invisible on a root site #462
  • +
  • PropertyFieldCollectionData: fieldValidation for custom fields did not get called if no onGetErrorMessage had been defined #446
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Gautam Sheth, Jasey Waegebaert, IRRDC, Markus Langer, Milan Holemans, Peter Cox.

+

3.7.0

+

Enhancements

+
    +
  • PropertyFieldListPicker: ability to provide content type id #441
  • +
  • PropertyFieldColorPicker: provide preview of the current selected color #447
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Milan Holemans, Russell gove.

+

3.6.0

+

New control(s)

+
    +
  • PropertyFieldMonacoEditor: new control - Monaco editor #439
  • +
+

Enhancements

+
    +
  • SharePoint Framework v1.14.0 support
  • +
  • Improved documentation
  • +
+

Fixes

+
    +
  • PropertyFieldCollectionData: Add button is disabled when it should not be #436
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Chad Eiserloh, GuidoZam, João Mendes.

+

3.5.0

+

Fixes

+
    +
  • Multiple controls: Update imports to support controls in ACEs #431
  • +
+

3.4.0

+

Enhancements

+
    +
  • PropertyFieldFilePicker: ability to set default tab #412
  • +
  • PropertyFieldCollectionData: ability to use IconPicker for icon field #423
  • +
  • PropertyFieldFilePicker: Added a feature to allow external links / Added a feature to show the Site Pages in the Site tab #421
  • +
+

Fixes

+
    +
  • PropertyFieldSearch: documentation fix #417
  • +
  • FilePicker: cannot find library by its name in multilingual sites #389
  • +
  • PropertyFieldDateTimePicker: formatDate property doesn't apply to the textbox value in the property pane #388
  • +
  • PropertyFieldCollectionData: number input shows placeholder instead of 0 #379
  • +
  • PropertyFieldChoiceGroupWithCallout: iconProps not working #424
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): 19ahmed99, Christian Frizell, GuidoZam.

+

3.3.0

+

Enhancements

+
    +
  • SharePoint Framework v1.13.* support
  • +
  • PropertyPanePropertyEditor: Add translations for property editor control button and header #399
  • +
  • PropertyFieldCollectionData: Adds conditional column visibility #394
  • +
  • Include mystrings.d.ts in definition output #393
  • +
  • PropertyFieldCollectionData: onGetErrorMessage support for boolean, custom and color fields. #395
  • +
  • PropertyFieldCodeEditor: Added panelWidth property #404
  • +
  • PropertyFieldCollectionData: Allow falsey keys as dropdown options #397
  • +
  • PropertyFieldFilePicker: Add a handler to close a filepicker #401
  • +
+

Fixes

+
    +
  • PropertyPanePropertyEditor: Minor fix to allow PropertyEditor control to update properties when their current value is blank #384
  • +
  • PropertyFieldSitePicker: Some sites do not show up in Property Field Site Picker control #402
  • +
  • PropertyFieldOrder: Not working with array of objects #396
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): ellinge, M365Bass, Patrik Hellgren.

+

3.2.0

+

Enhancements

+
    +
  • PropertyFieldColorPicker: Add debounce property to color picker control #352
  • +
  • fast-serve: Add fast-serve support #370
  • +
+

Fixes

+
    +
  • PropertyFieldFilePicker: Stock images url is getting a 404 server error #364
  • +
  • PropertyFieldColumnPicker: Filter not working properly #356
  • +
  • PropertyFieldTextWithCallout: Fix TextWithCallout read-only in SPFx 1.12.1 #372
  • +
  • PropertyFieldFilePicker: React crash on large folders #371
  • +
  • PropertyFieldFilePicker: documentation formatting fix #368
  • +
  • PropertyFieldCollectionData: PropertyFieldCollectionData is not setting sortIdx on resulting collection when using Add and Save #369
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Ari Gunawan, Chrisrb05, Gautam Sheth, Konrad K., Mark Bice, Sergei Sergeev.

+

3.1.0

+

Enhancements

+
    +
  • SharePoint Framework v1.12.1 support
  • +
  • PropertyFieldColumnPicker: Multiselect dropdown option #354
  • +
+

Fixes

+
    +
  • PropertyFieldSitePicker: Site Picker doesn't return sites with title starting from the typed string #355
  • +
+

Contributors

+

Special thanks to our contributor: Sudharsan Kesavanarayanan.

+

3.0.0

+

Enhancements

+
    +
  • SharePoint Framework v1.12 support (Breaking change)
  • +
  • FLuent UI v7 support
  • +
+

2.7.0

+

Enhancements

+
    +
  • PropertyFieldColorPicker: Add debounce property to color picker control #352
  • +
+

Fixes

+
    +
  • PropertyFieldFilePicker: Stock images url is getting a 404 server error #364
  • +
  • PropertyFieldColumnPicker: Filter not working properly #356
  • +
  • PropertyFieldFilePicker: React crash on large folders #371
  • +
  • PropertyFieldCollectionData: PropertyFieldCollectionData is not setting sortIdx on resulting collection when using Add and Save #369
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Chrisrb05, Konrad K., Mark Bice.

+

2.6.0

+

Fixes

+
    +
  • PropertyFieldSitePicker: Site Picker doesn't return sites with title starting from the typed string #355
  • +
+

2.5.0

+

New control(s)

+
    +
  • PropertyFieldEditableComboBox: new editable combobox control based on Fluent ComboBox. #339
  • +
  • PropertyFieldColumnPicker: new column picker control #343
  • +
+

Fixes

+
    +
  • PropertyFieldNumber: The property field number is loosing decimal value on futher edits of the properties. #344
  • +
  • PropertyFieldCollectionData: validation error persists after item deletion #341
  • +
  • FolderPicker: Correct FolderPicker link alignment
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Mike Homol, Sudharsan Kesavanarayanan, Victor Pollet.

+

2.4.0

+

Enhancements

+
    +
  • PropertyFieldCodeEditor: Added an options property to the CodeEditor. Allows setting of any of the Ace Editor options outlined here #322
  • +
  • PropertyFieldCollectionData: Support for a Color Picker control #326
  • +
  • Support for nested web part properties (example: targetProperty: 'a.b.c') in all controls
  • +
  • PropertyFieldSitePicker: display site URL #330
  • +
  • PropertyPanePropertyEditor: Support of dynamic properties (DynamicData) #331
  • +
+

Fixes

+
    +
  • Documentation fix for PropertyFIeldPassword: value is of type string, not number. #324
  • +
  • PropertyFieldCollectionData: Dropdown validation not working as expected #321
  • +
  • PropertyFieldPeoplePicker: targetProperty is not updated properly when using nested/complex attributes #221
  • +
  • PropertyFieldSitePicker: if a single subsite is selected all others are selected as well #329
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Corey Roth, kflogdev.

+

2.3.0

+

New control(s)

+
    +
  • PropertyFieldIconPicker: new icon picker control #319
  • +
+

Enhancements

+
    +
  • PropertyFieldTermPicker: two properties: areTermsSelectable and areTermsHidden #313
  • +
  • PropertyFieldListPicker: ability to return Title and relative URL of the list #281
  • +
+

Fixes

+
    +
  • Documentation fix: spelling fix on index.md #320
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Corey Roth, Gautam Sheth, Jonathan Cardy, Konrad K..

+

2.2.0

+

New control(s)

+
    +
  • PropertyFieldTeamPicker: new Teams picker control #303
  • +
+

Contributors

+

Special thanks to our contributor: João Mendes.

+

2.1.1

+

Fixes

+
    +
  • Localizations fix #311
  • +
+

2.1.0

+

Enhancements

+
    +
  • Auto-generated localizations
  • +
  • PropertyFieldNumber: ability to set float values #299
  • +
  • PropertyFieldGuid: new GUID editor control #300
  • +
  • FolderExplorerService: support special characters if folder name #305
  • +
  • FilePicker: Stock Images support #306
  • +
+

Fixes

+
    +
  • Documentation: Fixed formatting of list of Controls #298
  • +
  • PropertyFieldNumber: gives "Maximum update depth exceeded" error #282
  • +
  • Documentation fix: PropertyFieldCollectionData - required custom field should call onUpdate before onError to correctly display required error message #284
  • +
  • PropertyFieldNumber: Improper handling of falsey minValue or maxValue #150
  • +
  • PropertyFieldFilePicker: Org Assets library is not displayed #295
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Anoop Tatti, Gautam Sheth, Jim Love.

+

2.0.0

+

New control(s)

+
    +
  • Office UI Fabric version 6 support
  • +
+

1.20.0

+

New control(s)

+
    +
  • PropertyFieldRoleDefinitionPicker: new Role Definition Picker control #268
  • +
  • PropertyFieldFolderPicker: new Folder Picker control #272
  • +
  • PropertyPaneMarkdownContent: new Markdown Content control #162
  • +
+

Enhancements

+
    +
  • PropertyFieldCollectionData: Dynamic options #260
  • +
+

Fixes

+
    +
  • Documentation fix: Link to PropertyFieldListPicker control points to PropertyFieldMessage #269
  • +
  • Readme fix: fixed link to project guides #271
  • +
  • PropertyFieldViewPicker: Unable to load Views from another site #263
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Gautam Sheth, Hugo Bernier, Lars Fernhomberg.

+

1.19.0

+

New control(s)

+
    +
  • PropertyFieldMessage: new Message control #248
  • +
  • PropertyFieldSearch: new Search control #248
  • +
  • PropertyFieldSpinner: new Spinner control #248
  • +
  • PropertyFieldFilePicker: new File Picker control #265
  • +
+

Enhancements

+
    +
  • PropertyFieldDateTimePicker: Add ability to hide Date and show only Time field #195
  • +
  • PropertyFieldCodeEditor: Format code #165
  • +
+

Fixes

+
    +
  • Documentation fix for PropertyFieldDateTimePicker: The link for OnGetErrorMessage documentation is broken in this page
  • +
  • Documentation: Added PnPTelemetry import example #259
  • +
  • PropertyPanePropertyEditor:Fix for dynamic data properties #200
  • +
  • PropertyFieldPeoplePicker: People Picker doesn't search for groups #239
  • +
  • Controls with callout: control's label should be disabled if the disabled prop is set to true
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Lars Fernhomberg, João Mendes, Nanddeep Nachan, Ram, Gautam Sheth.

+

1.18.0

+

New control(s)

+
    +
  • PropertyFieldViewPicker: View picker control #230
  • +
  • PropertyFieldPassword: password editor control #237
  • +
+

Fixes

+
    +
  • PropertyFieldSitePicker documentation title fix #229
  • +
  • PropertyFieldSitePicker: doesn't work at root site #231
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Ari Gunawan, Gautam Sheth, Hugo Bernier, João Mendes.

+

1.17.0

+

New control(s)

+
    +
  • PropertyFieldSitePicker: New control that allows the user to select one or multiple sites from the SharePoint Search API. Similar to the SitePicker in the official "News" Web Part #208, #215
  • +
  • Telemetry: Provide a way to opt-out for PnP Telemetry #222
  • +
  • PropertyPaneHelpers: Allows to show a spinner while loading resources
  • +
+

Enhancements

+
    +
  • Add norwegian language file #125
  • +
  • PropertyFieldSliderWithCallout: debounce property added #209
  • +
  • Replace full lodash with only used functions. #213
  • +
+

Fixes

+
    +
  • Documentation update for PropertyFieldCollectionData #196
  • +
  • PropertyFieldOrder: When items is an empty array, component renders the text '0' #152
  • +
  • Documentation update for PropertyFieldCodeEditor #194
  • +
  • PropertyFieldTermPicker: Tags icon styling issue on IE11 #193
  • +
  • PropertyPanePropertyEditor: Unable to download json export #210
  • +
  • PropertyFieldCollectionData: Fix Data Grid Dragging Issues #217
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Antonio Monserrate, rocketboy1908, Piotr Siatka, Ben, Niels Söth, araver.

+

1.16.0

+

Enhancements

+
    +
  • PropertyFieldCollectionData: Add the ability for field validation to the custom fields #187
  • +
  • PropertyFieldCollectionData: Ability to provide custom labels for the save and cancel buttons #187
  • +
  • PropertyFieldListPicker: add ability to filter the control via OData #184
  • +
+

Fixes

+
    +
  • Documentation getting started links fixed #191
  • +
  • Fix for callout controls missing icon since SPFx 1.8.2 #182
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): araver, Chad Eiserloh.

+

1.15.0

+

Enhancements

+
    +
  • PropertyFieldCollectionData: Add a property to be able to set a custom class on the collection data panel #180
  • +
  • PropertyFieldListPicker: Added listsToExclude property to the control #176
  • +
  • PropertyFieldDateTimePicker: Add ability to hide the date and time labels #77
  • +
+

Fixes

+
    +
  • Callout icons missing with SPFx 1.8.2 web part #178
  • +
  • PropertyFieldTextWithCallout: still persists property value when error occurred #172
  • +
  • PropertyFieldNumber: not handling changes correctly #170
  • +
  • PropertyFieldChoiceGroupWithCallout: iconProps not working #154
  • +
  • PropertyFieldDropdownWithCallout: Options of type Divider and Header are ignored #145
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Alex Terentiev, Ward Wilmsen.

+

1.14.1

+

Fixes

+
    +
  • TaxonomyPicker: Terms are sorted incorrectly under the wrong parent #153
  • +
  • EnterpriseTermPicker: Terms are sorted incorrectly under the wrong parent #156
  • +
+

1.14.0

+

New control(s)

+
    +
  • PropertyFieldEnterpriseTermPicker: New control to load term sets by using @pnp/pnpjs #70 #120
  • +
+

Enhancements

+
    +
  • PropertyFieldCollectionData: Setting to specify if item creation is enabled/disabled #130
  • +
  • PropertyFieldCollectionData: Setting to specify if item deletion is enabled/disabled #131
  • +
  • PropertyFieldCollectionData: Implemented a property to specify if field editing is enabled/disabled #132
  • +
  • Added Chinese localization #137
  • +
  • PropertyFieldColorPicker: Added a isHidden property #138
  • +
  • PropertyFieldCollectionData: return the item in the custom renderer #147
  • +
  • Added Russian localization #142
  • +
+

Fixes

+
    +
  • PropertyFieldTermPicker: fix sort order with lowercased terms #133
  • +
  • PropertyFieldCollectionData: Bug with onCustomRender() #135
  • +
  • PropertyFieldCollectionData: Fixed bug with dropdown rendering in IE #136
  • +
  • PropertyFieldNumber: Min/max number check fix + localization label fixes #141
  • +
  • PropertyFieldTermPicker: Fix layout issues in IE11 #143
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Simon-Pierre Plante, Yannick Plenevaux, Alex Terentiev, Roger Zhang.

+

1.13.1

+

Fixes

+
    +
  • PropertyFieldCollectionData: Fixed issue for loading the control in the local workbench #128
  • +
+

1.13.0

+

Enhancements

+
    +
  • Updated the office-ui-fabric-react to the same version as in SPFx 1.7.0 #105
  • +
  • PropertyFieldPeoplePicker: Ability to select only from a specific site #9
  • +
  • PropertyFieldCollectionData: Added support for custom field rendering #122
  • +
  • PropertyFieldCollectionData: Added the functionality to sort the items in the collection #123
  • +
+

Fixes

+
    +
  • PropertyFieldDateTimePicker: Fix for the hours dropdown not showing values #112
  • +
  • PropertyFieldCollectionData: Issue with debounce validation overriding the inserted values #113
  • +
  • PropertyPaneWebPartInformation: Remove redundant 'Description' label #119
  • +
  • PropertyFieldCodeEditor: Handle initial value after updating properties #121
  • +
+

Contributors

+

Special thanks to our contributor: Erwin van Hunen.

+

1.12.0

+

New control(s)

+
    +
  • PropertyPaneWebPartInformation: New control to show more information about the current web part #108
  • +
  • PropertyPanePropertyEditor: New control that allows you to export/import property pane settings #114
  • +
+

Enhancements

+
    +
  • Dutch localization added #82
  • +
  • French localization added #84
  • +
  • PropertyFieldCollectionData: Allow the user to specify a deferred validation time for each field #98
  • +
  • PropertyFieldCollectionData: added a onRenderOption option to allow custom option rendering #102
  • +
  • PropertyFieldNumber: Introduced the aria label #104
  • +
  • Hide callout from the controls with callout if no message is provided #107
  • +
  • PropertyFieldListPicker: Add the ability to refresh target site while pane is open #109
  • +
+

Fixes

+
    +
  • PropertyFieldCollectionData: Fixed catastrophic backtracking regex issue for URL validation #99
  • +
+

Contributors

+

Special thanks to our contributors (in alphabetical order): Paul Bullock, Junle Li, PooLP, Erwin van Hunen.

+

1.11.0

+

Enhancements

+
    +
  • PropertyFieldCollectionData: Show error messages #96
  • +
+

Fixes

+
    +
  • Fixes based on SonarCloud analysis
  • +
+

1.10.0

+

Enhancements

+
    +
  • PropertyFieldPeoplePicker: Security groups come back with EntityType of FormsRole rather then SecGroup #93
  • +
  • PropertyFieldCollectionData: Add the current row's information in the onGetErrorMessage callback #92
  • +
+

Fixes

+
    +
  • PropertyFieldPeoplePicker: No suggestions returned when using Security Groups, Multi-select and NO duplicates. #90
  • +
  • PropertyFieldTermPicker: Terms which are set as unavailable for tagging are still selectable #94
  • +
+

1.9.0

+

Enhancements

+
    +
  • PropertyFieldCollectionData: Added custom validation for string, number, icon, and URL field types #74
  • +
  • PropertyFieldCollectionData: Add an option to specify a default value #86
  • +
  • PropertyFieldCollectionData: override placeholder for the inputs #87
  • +
  • PropertyFieldCollectionData: Hide save button when "Add and save" is shown #88
  • +
+

Fixes

+
    +
  • PropertyFieldMultiSelect: fixed an issue where the control didn't retain the preselected values when dropdown options were provided async #85
  • +
  • PropertyFieldOrder: fixed an issue where items where provided async #81
  • +
+

1.8.0

+

Enhancements

+
    +
  • New telemetry approach which allows you to use Application Insights instance #79
  • +
  • PropertyFieldListPicker: add optional property for target site #21
  • +
+

Contributors

+

Special thanks to our contributor: Joel Rodrigues.

+

1.7.0

+

Enhancements

+
    +
  • Add npm postinstall script to automatically add the localization config #64
  • +
  • Add a description to the PropertyFieldCollectionData panel #67
  • +
  • Added a font field type for the PropertyFieldCollectionData control #66
  • +
  • Added a URL field type for the PropertyFieldCollectionData control #72
  • +
  • Field validation implemented to enable/disable save buttons in PropertyFieldCollectionData control. Related to previous enhancement.
  • +
  • Added properties to the TaxonomyPicker to specify which terms are disabled/not-selectable #69
  • +
+

Fixes

+
    +
  • PropertyFieldPeoplePicker validation error does not clear as expected #68
  • +
+

1.6.0

+

New control(s)

+
    +
  • PropertyFieldCollectionData was added #58
  • +
  • PropertyFieldOrder was added #19
  • +
  • PropertyFieldSwatchColorPicker was added #55
  • +
+

Enhancements

+
    +
  • Allow the term set to be selectable in the PropertyFieldTermPicker #60
  • +
+

Fixes

+
    +
  • Fix for PropertyFieldColorPicker Palette Icon alignment issue in IE11 #56
  • +
+

1.5.1

+

Enhancements

+
    +
  • Color Pickers optionally return Color Objects #55
  • +
+

Fixes

+
    +
  • Undefined web part context fixed in the PropertyFieldPeoplePicker #47
  • +
  • Taxonomy service fix for working with term set GUID #48
  • +
  • Added focus intercepting input for Full style #52
  • +
+

1.5.0

+

Enhancements

+
    +
  • PropertyFieldListPicker control extended with select all lists option #8
  • +
  • PropertyFieldTermPicker control extended with the ability to search terms by typing in the textbox #11 #42 #44 #45
  • +
  • SPTermStorePickerService has a new interface which contains only the required properties
  • +
+

1.4.2

+

Enhancements

+
    +
  • Introduced the onGetErrorMessage property for the PropertyFieldNumber field control (#36)
  • +
+

1.4.1

+

Enhancements

+
    +
  • Optimized telemetry so that it only pushes control data
  • +
+

Fixes

+
    +
  • Fixes for issue #30
  • +
  • PropertyFieldPeoplePicker Validation does not work as expected #33
  • +
+

1.4.0

+

New control(s)

+
    +
  • PropertyFieldMultiSelect got added
  • +
  • PropertyFieldNumber got added
  • +
+

Enhancements

+
    +
  • PropertyFieldTermPicker new introduced property to specify to show or hide the term store name: hideTermStoreName.
  • +
  • PropertyFieldTermPicker updated process when terms were unselected based on ID instead of path.
  • +
+

1.3.0

+

New control(s)

+
    +
  • PropertyFieldCodeEditor got added
  • +
+

Enhancements

+
    +
  • PropertyFieldTermPicker improved with save and cancel button
  • +
  • PropertyFieldTermPicker improved with onClick event on input field
  • +
+

1.2.0

+

Enhancements

+
    +
  • Added the option to the people picker to allow you to specify single or multi-selection
  • +
+

Fixes

+
    +
  • People picker accidentally picked the wrong person
  • +
  • Improved telemetry with some object checks
  • +
+

1.1.1

+

Enhancements

+
    +
  • Removed operation name from telemetry
  • +
+

1.1.0

+

New control(s)

+
    +
  • Added the PropertyFieldButtonWithCallout control
  • +
  • Added the PropertyFieldCheckboxWithCallout control
  • +
  • Added the PropertyFieldChoiceGroupWithCallout control
  • +
  • Added the PropertyFieldWithCallout control
  • +
  • Added the PropertyLabelWithCallout control
  • +
  • Added the PropertyLinkWithCallout control
  • +
  • Added the PropertySliderWithCallout control
  • +
+

Enhancements

+
    +
  • Telemetry added
  • +
  • Term picker control has now the option to scope on term set or group
  • +
+

1.0.0

+

New control(s)

+
    +
  • Added the PropertyFieldDropdownWithCallout control
  • +
  • Added the PropertyFieldTextWithCallout control
  • +
  • Added the PropertyFieldToggleWithCallout control
  • +
+

1.0.0-beta.3

+

Enhancements

+
    +
  • Added firstDayOfWeek option to the date picker control
  • +
+

1.0.0-beta.2

+

New control(s)

+
    +
  • Initial release
  • +
+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/assets/FieldMultiSelect.gif b/assets/FieldMultiSelect.gif new file mode 100644 index 00000000..d2e05f20 Binary files /dev/null and b/assets/FieldMultiSelect.gif differ diff --git a/assets/FilePickerBreadcrumb.gif b/assets/FilePickerBreadcrumb.gif new file mode 100644 index 00000000..0e58e9f0 Binary files /dev/null and b/assets/FilePickerBreadcrumb.gif differ diff --git a/assets/FilePickerOverview.png b/assets/FilePickerOverview.png new file mode 100644 index 00000000..d08b16a3 Binary files /dev/null and b/assets/FilePickerOverview.png differ diff --git a/assets/FilePickerPaging.gif b/assets/FilePickerPaging.gif new file mode 100644 index 00000000..03fc8149 Binary files /dev/null and b/assets/FilePickerPaging.gif differ diff --git a/assets/FilePickerViews.gif b/assets/FilePickerViews.gif new file mode 100644 index 00000000..d3b47e8a Binary files /dev/null and b/assets/FilePickerViews.gif differ diff --git a/assets/IconPickerOverview.png b/assets/IconPickerOverview.png new file mode 100644 index 00000000..ee647884 Binary files /dev/null and b/assets/IconPickerOverview.png differ diff --git a/assets/IconPickerPanel.gif b/assets/IconPickerPanel.gif new file mode 100644 index 00000000..5466287c Binary files /dev/null and b/assets/IconPickerPanel.gif differ diff --git a/assets/PropertyFieldGrid.png b/assets/PropertyFieldGrid.png new file mode 100644 index 00000000..adab1b78 Binary files /dev/null and b/assets/PropertyFieldGrid.png differ diff --git a/assets/PropertyFieldGuid.gif b/assets/PropertyFieldGuid.gif new file mode 100644 index 00000000..2ac2d403 Binary files /dev/null and b/assets/PropertyFieldGuid.gif differ diff --git a/assets/PropertyFieldNumber.gif b/assets/PropertyFieldNumber.gif new file mode 100644 index 00000000..5002dba3 Binary files /dev/null and b/assets/PropertyFieldNumber.gif differ diff --git a/assets/Search1.png b/assets/Search1.png new file mode 100644 index 00000000..2983211d Binary files /dev/null and b/assets/Search1.png differ diff --git a/assets/Search2.png b/assets/Search2.png new file mode 100644 index 00000000..45993fbf Binary files /dev/null and b/assets/Search2.png differ diff --git a/assets/TermPicker-autocomplete.png b/assets/TermPicker-autocomplete.png new file mode 100644 index 00000000..18b31720 Binary files /dev/null and b/assets/TermPicker-autocomplete.png differ diff --git a/assets/badmarkdown.png b/assets/badmarkdown.png new file mode 100644 index 00000000..fc5be4ca Binary files /dev/null and b/assets/badmarkdown.png differ diff --git a/assets/buttonfieldwithcallout-open.png b/assets/buttonfieldwithcallout-open.png new file mode 100644 index 00000000..c707f2cb Binary files /dev/null and b/assets/buttonfieldwithcallout-open.png differ diff --git a/assets/buttonfieldwithcallout.png b/assets/buttonfieldwithcallout.png new file mode 100644 index 00000000..ad8145ae Binary files /dev/null and b/assets/buttonfieldwithcallout.png differ diff --git a/assets/checkboxfieldwithcallout-open.png b/assets/checkboxfieldwithcallout-open.png new file mode 100644 index 00000000..a537e92e Binary files /dev/null and b/assets/checkboxfieldwithcallout-open.png differ diff --git a/assets/checkboxfieldwithcallout.png b/assets/checkboxfieldwithcallout.png new file mode 100644 index 00000000..106e8ae7 Binary files /dev/null and b/assets/checkboxfieldwithcallout.png differ diff --git a/assets/choicegroupfieldwithcallout-open.png b/assets/choicegroupfieldwithcallout-open.png new file mode 100644 index 00000000..c1e312d5 Binary files /dev/null and b/assets/choicegroupfieldwithcallout-open.png differ diff --git a/assets/choicegroupfieldwithcallout.png b/assets/choicegroupfieldwithcallout.png new file mode 100644 index 00000000..ea375e48 Binary files /dev/null and b/assets/choicegroupfieldwithcallout.png differ diff --git a/assets/codeeditor-editing.png b/assets/codeeditor-editing.png new file mode 100644 index 00000000..ffe3923c Binary files /dev/null and b/assets/codeeditor-editing.png differ diff --git a/assets/codeeditor-initial.png b/assets/codeeditor-initial.png new file mode 100644 index 00000000..4e4ce3a2 Binary files /dev/null and b/assets/codeeditor-initial.png differ diff --git a/assets/collectiondata.gif b/assets/collectiondata.gif new file mode 100644 index 00000000..ad3f47e5 Binary files /dev/null and b/assets/collectiondata.gif differ diff --git a/assets/colorpicker-initial.png b/assets/colorpicker-initial.png new file mode 100644 index 00000000..08ad70f5 Binary files /dev/null and b/assets/colorpicker-initial.png differ diff --git a/assets/colorpicker-selector.png b/assets/colorpicker-selector.png new file mode 100644 index 00000000..1cba5353 Binary files /dev/null and b/assets/colorpicker-selector.png differ diff --git a/assets/contentTypePicker-Error.png b/assets/contentTypePicker-Error.png new file mode 100644 index 00000000..dd0cd5ad Binary files /dev/null and b/assets/contentTypePicker-Error.png differ diff --git a/assets/contentTypePicker.png b/assets/contentTypePicker.png new file mode 100644 index 00000000..21c02c88 Binary files /dev/null and b/assets/contentTypePicker.png differ diff --git a/assets/contentTypePicker1.png b/assets/contentTypePicker1.png new file mode 100644 index 00000000..762a8eb6 Binary files /dev/null and b/assets/contentTypePicker1.png differ diff --git a/assets/contentTypes-for-Site.gif b/assets/contentTypes-for-Site.gif new file mode 100644 index 00000000..3439afad Binary files /dev/null and b/assets/contentTypes-for-Site.gif differ diff --git a/assets/date-and-time.png b/assets/date-and-time.png new file mode 100644 index 00000000..b72edad2 Binary files /dev/null and b/assets/date-and-time.png differ diff --git a/assets/date-only.png b/assets/date-only.png new file mode 100644 index 00000000..87a6125f Binary files /dev/null and b/assets/date-only.png differ diff --git a/assets/date-picker.png b/assets/date-picker.png new file mode 100644 index 00000000..1d8f91cf Binary files /dev/null and b/assets/date-picker.png differ diff --git a/assets/dropdownwithcallout-open.png b/assets/dropdownwithcallout-open.png new file mode 100644 index 00000000..ec9558e3 Binary files /dev/null and b/assets/dropdownwithcallout-open.png differ diff --git a/assets/dropdownwithcallout.png b/assets/dropdownwithcallout.png new file mode 100644 index 00000000..28aab550 Binary files /dev/null and b/assets/dropdownwithcallout.png differ diff --git a/assets/filePicker.gif b/assets/filePicker.gif new file mode 100644 index 00000000..1b0619c9 Binary files /dev/null and b/assets/filePicker.gif differ diff --git a/assets/folderPicker.gif b/assets/folderPicker.gif new file mode 100644 index 00000000..f09c3ef9 Binary files /dev/null and b/assets/folderPicker.gif differ diff --git a/assets/fonts/font-awesome.css b/assets/fonts/font-awesome.css new file mode 100644 index 00000000..b476b53e --- /dev/null +++ b/assets/fonts/font-awesome.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url("specimen/FontAwesome.woff2") format("woff2"),url("specimen/FontAwesome.woff") format("woff"),url("specimen/FontAwesome.ttf") format("truetype")}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} \ No newline at end of file diff --git a/assets/fonts/material-icons.css b/assets/fonts/material-icons.css new file mode 100644 index 00000000..d23d365e --- /dev/null +++ b/assets/fonts/material-icons.css @@ -0,0 +1,13 @@ +/*! + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE + * DISTRIBUTED UNDER THE LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + * SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING PERMISSIONS AND + * LIMITATIONS UNDER THE LICENSE. + */@font-face{font-family:"Material Icons";font-style:normal;font-weight:400;src:local("Material Icons"),local("MaterialIcons-Regular"),url("specimen/MaterialIcons-Regular.woff2") format("woff2"),url("specimen/MaterialIcons-Regular.woff") format("woff"),url("specimen/MaterialIcons-Regular.ttf") format("truetype")} \ No newline at end of file diff --git a/assets/fonts/specimen/FontAwesome.ttf b/assets/fonts/specimen/FontAwesome.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/assets/fonts/specimen/FontAwesome.ttf differ diff --git a/assets/fonts/specimen/FontAwesome.woff b/assets/fonts/specimen/FontAwesome.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/assets/fonts/specimen/FontAwesome.woff differ diff --git a/assets/fonts/specimen/FontAwesome.woff2 b/assets/fonts/specimen/FontAwesome.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/assets/fonts/specimen/FontAwesome.woff2 differ diff --git a/assets/fonts/specimen/MaterialIcons-Regular.ttf b/assets/fonts/specimen/MaterialIcons-Regular.ttf new file mode 100644 index 00000000..7015564a Binary files /dev/null and b/assets/fonts/specimen/MaterialIcons-Regular.ttf differ diff --git a/assets/fonts/specimen/MaterialIcons-Regular.woff b/assets/fonts/specimen/MaterialIcons-Regular.woff new file mode 100644 index 00000000..b648a3ee Binary files /dev/null and b/assets/fonts/specimen/MaterialIcons-Regular.woff differ diff --git a/assets/fonts/specimen/MaterialIcons-Regular.woff2 b/assets/fonts/specimen/MaterialIcons-Regular.woff2 new file mode 100644 index 00000000..9fa21125 Binary files /dev/null and b/assets/fonts/specimen/MaterialIcons-Regular.woff2 differ diff --git a/assets/goodmarkdown.png b/assets/goodmarkdown.png new file mode 100644 index 00000000..769fe8a4 Binary files /dev/null and b/assets/goodmarkdown.png differ diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 00000000..76d17f57 Binary files /dev/null and b/assets/images/favicon.png differ diff --git a/assets/images/icons/bitbucket.1b09e088.svg b/assets/images/icons/bitbucket.1b09e088.svg new file mode 100644 index 00000000..a25435af --- /dev/null +++ b/assets/images/icons/bitbucket.1b09e088.svg @@ -0,0 +1,20 @@ + + + diff --git a/assets/images/icons/github.f0b8504a.svg b/assets/images/icons/github.f0b8504a.svg new file mode 100644 index 00000000..c009420a --- /dev/null +++ b/assets/images/icons/github.f0b8504a.svg @@ -0,0 +1,18 @@ + + + diff --git a/assets/images/icons/gitlab.6dd19c00.svg b/assets/images/icons/gitlab.6dd19c00.svg new file mode 100644 index 00000000..9e3d6f05 --- /dev/null +++ b/assets/images/icons/gitlab.6dd19c00.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/javascripts/application.9e1f3b71.js b/assets/javascripts/application.9e1f3b71.js new file mode 100644 index 00000000..42353902 --- /dev/null +++ b/assets/javascripts/application.9e1f3b71.js @@ -0,0 +1 @@ +!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=6)}([function(e,t,n){"use strict";t.__esModule=!0,t.default={createElement:function(e,t){var n=document.createElement(e);t&&Array.prototype.forEach.call(Object.keys(t),function(e){n.setAttribute(e,t[e])});for(var r=arguments.length,i=Array(r>2?r-2:0),o=2;o pre, pre > code");Array.prototype.forEach.call(n,function(t,n){var r="__code_"+n,i=e.createElement("button",{class:"md-clipboard",title:h("clipboard.copy"),"data-clipboard-target":"#"+r+" pre, #"+r+" code"},e.createElement("span",{class:"md-clipboard__message"})),o=t.parentNode;o.id=r,o.insertBefore(i,t)});new c.default(".md-clipboard").on("success",function(e){var t=e.trigger.querySelector(".md-clipboard__message");if(!(t instanceof HTMLElement))throw new ReferenceError;e.clearSelection(),t.dataset.mdTimer&&clearTimeout(parseInt(t.dataset.mdTimer,10)),t.classList.add("md-clipboard__message--active"),t.innerHTML=h("clipboard.copied"),t.dataset.mdTimer=setTimeout(function(){t.classList.remove("md-clipboard__message--active"),t.dataset.mdTimer=""},2e3).toString()})}if(!Modernizr.details){var r=document.querySelectorAll("details > summary");Array.prototype.forEach.call(r,function(e){e.addEventListener("click",function(e){var t=e.target.parentNode;t.hasAttribute("open")?t.removeAttribute("open"):t.setAttribute("open","")})})}var i=function(){if(document.location.hash){var e=document.getElementById(document.location.hash.substring(1));if(!e)return;for(var t=e.parentNode;t&&!(t instanceof HTMLDetailsElement);)t=t.parentNode;if(t&&!t.open){t.open=!0;var n=location.hash;location.hash=" ",location.hash=n}}};if(window.addEventListener("hashchange",i),i(),Modernizr.ios){var o=document.querySelectorAll("[data-md-scrollfix]");Array.prototype.forEach.call(o,function(e){e.addEventListener("touchstart",function(){var t=e.scrollTop;0===t?e.scrollTop=1:t+e.offsetHeight===e.scrollHeight&&(e.scrollTop=t-1)})})}}).listen(),new d.default.Event.Listener(window,["scroll","resize","orientationchange"],new d.default.Header.Shadow("[data-md-component=container]","[data-md-component=header]")).listen(),new d.default.Event.Listener(window,["scroll","resize","orientationchange"],new d.default.Header.Title("[data-md-component=title]",".md-typeset h1")).listen(),document.querySelector("[data-md-component=hero]")&&new d.default.Event.Listener(window,["scroll","resize","orientationchange"],new d.default.Tabs.Toggle("[data-md-component=hero]")).listen(),document.querySelector("[data-md-component=tabs]")&&new d.default.Event.Listener(window,["scroll","resize","orientationchange"],new d.default.Tabs.Toggle("[data-md-component=tabs]")).listen(),new d.default.Event.MatchMedia("(min-width: 1220px)",new d.default.Event.Listener(window,["scroll","resize","orientationchange"],new d.default.Sidebar.Position("[data-md-component=navigation]","[data-md-component=header]"))),document.querySelector("[data-md-component=toc]")&&new d.default.Event.MatchMedia("(min-width: 960px)",new d.default.Event.Listener(window,["scroll","resize","orientationchange"],new d.default.Sidebar.Position("[data-md-component=toc]","[data-md-component=header]"))),new d.default.Event.MatchMedia("(min-width: 960px)",new d.default.Event.Listener(window,"scroll",new d.default.Nav.Blur("[data-md-component=toc] [href]")));var n=document.querySelectorAll("[data-md-component=collapsible]");Array.prototype.forEach.call(n,function(e){new d.default.Event.MatchMedia("(min-width: 1220px)",new d.default.Event.Listener(e.previousElementSibling,"click",new d.default.Nav.Collapse(e)))}),new d.default.Event.MatchMedia("(max-width: 1219px)",new d.default.Event.Listener("[data-md-component=navigation] [data-md-toggle]","change",new d.default.Nav.Scrolling("[data-md-component=navigation] nav"))),document.querySelector("[data-md-component=search]")&&(new d.default.Event.MatchMedia("(max-width: 959px)",new d.default.Event.Listener("[data-md-toggle=search]","change",new d.default.Search.Lock("[data-md-toggle=search]"))),new d.default.Event.Listener("[data-md-component=query]",["focus","keyup","change"],new d.default.Search.Result("[data-md-component=result]",function(){return fetch(t.url.base+"/"+(t.version<"0.17"?"mkdocs":"search")+"/search_index.json",{credentials:"same-origin"}).then(function(e){return e.json()}).then(function(e){return e.docs.map(function(e){return e.location=t.url.base+"/"+e.location,e})})})).listen(),new d.default.Event.Listener("[data-md-component=reset]","click",function(){setTimeout(function(){var e=document.querySelector("[data-md-component=query]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.focus()},10)}).listen(),new d.default.Event.Listener("[data-md-toggle=search]","change",function(e){setTimeout(function(e){if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=document.querySelector("[data-md-component=query]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t.focus()}},400,e.target)}).listen(),new d.default.Event.MatchMedia("(min-width: 960px)",new d.default.Event.Listener("[data-md-component=query]","focus",function(){var e=document.querySelector("[data-md-toggle=search]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.checked||(e.checked=!0,e.dispatchEvent(new CustomEvent("change")))})),new d.default.Event.Listener(window,"keydown",function(e){var t=document.querySelector("[data-md-toggle=search]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;var n=document.querySelector("[data-md-component=query]");if(!(n instanceof HTMLInputElement))throw new ReferenceError;if(!e.metaKey&&!e.ctrlKey)if(t.checked){if(13===e.keyCode){if(n===document.activeElement){e.preventDefault();var r=document.querySelector("[data-md-component=search] [href][data-md-state=active]");r instanceof HTMLLinkElement&&(window.location=r.getAttribute("href"),t.checked=!1,t.dispatchEvent(new CustomEvent("change")),n.blur())}}else if(9===e.keyCode||27===e.keyCode)t.checked=!1,t.dispatchEvent(new CustomEvent("change")),n.blur();else if(-1!==[8,37,39].indexOf(e.keyCode))n!==document.activeElement&&n.focus();else if(-1!==[38,40].indexOf(e.keyCode)){var i=e.keyCode,o=Array.prototype.slice.call(document.querySelectorAll("[data-md-component=query], [data-md-component=search] [href]")),a=o.find(function(e){if(!(e instanceof HTMLElement))throw new ReferenceError;return"active"===e.dataset.mdState});a&&(a.dataset.mdState="");var s=Math.max(0,(o.indexOf(a)+o.length+(38===i?-1:1))%o.length);return o[s]&&(o[s].dataset.mdState="active",o[s].focus()),e.preventDefault(),e.stopPropagation(),!1}}else document.activeElement&&!document.activeElement.form&&(70!==e.keyCode&&83!==e.keyCode||(n.focus(),e.preventDefault()))}).listen(),new d.default.Event.Listener(window,"keypress",function(){var e=document.querySelector("[data-md-toggle=search]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=document.querySelector("[data-md-component=query]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t!==document.activeElement&&t.focus()}}).listen()),new d.default.Event.Listener(document.body,"keydown",function(e){if(9===e.keyCode){var t=document.querySelectorAll("[data-md-component=navigation] .md-nav__link[for]:not([tabindex])");Array.prototype.forEach.call(t,function(e){e.offsetHeight&&(e.tabIndex=0)})}}).listen(),new d.default.Event.Listener(document.body,"mousedown",function(){var e=document.querySelectorAll("[data-md-component=navigation] .md-nav__link[tabindex]");Array.prototype.forEach.call(e,function(e){e.removeAttribute("tabIndex")})}).listen(),document.body.addEventListener("click",function(){"tabbing"===document.body.dataset.mdState&&(document.body.dataset.mdState="")}),new d.default.Event.MatchMedia("(max-width: 959px)",new d.default.Event.Listener("[data-md-component=navigation] [href^='#']","click",function(){var e=document.querySelector("[data-md-toggle=drawer]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.checked&&(e.checked=!1,e.dispatchEvent(new CustomEvent("change")))})),function(){var e=document.querySelector("[data-md-source]");if(!e)return a.default.resolve([]);if(!(e instanceof HTMLAnchorElement))throw new ReferenceError;switch(e.dataset.mdSource){case"github":return new d.default.Source.Adapter.GitHub(e).fetch();default:return a.default.resolve([])}}().then(function(e){var t=document.querySelectorAll("[data-md-source]");Array.prototype.forEach.call(t,function(t){new d.default.Source.Repository(t).initialize(e)})})}t.__esModule=!0,t.app=void 0,n(7),n(8),n(9),n(10),n(11),n(12),n(13);var o=n(14),a=r(o),s=n(19),c=r(s),u=n(20),l=r(u),f=n(21),d=r(f);window.Promise=window.Promise||a.default;var h=function(e){var t=document.getElementsByName("lang:"+e)[0];if(!(t instanceof HTMLMetaElement))throw new ReferenceError;return t.content},p={initialize:i};t.app=p}).call(t,n(0))},function(e,t,n){e.exports=n.p+"assets/images/icons/bitbucket.1b09e088.svg"},function(e,t,n){e.exports=n.p+"assets/images/icons/github.f0b8504a.svg"},function(e,t,n){e.exports=n.p+"assets/images/icons/gitlab.6dd19c00.svg"},function(e,t){},function(e,t){},function(e,t){!function(){if("undefined"!=typeof window)try{var e=new window.CustomEvent("test",{cancelable:!0});if(e.preventDefault(),!0!==e.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var t=function(e,t){var n,r;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},n=document.createEvent("CustomEvent"),n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),r=n.preventDefault,n.preventDefault=function(){r.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};t.prototype=window.Event.prototype,window.CustomEvent=t}}()},function(e,t,n){window.fetch||(window.fetch=n(2).default||n(2))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){function r(){}function i(e,t){return function(){e.apply(t,arguments)}}function o(e){if(!(this instanceof o))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],f(e,this)}function a(e,t){for(;3===e._state;)e=e._value;if(0===e._state)return void e._deferreds.push(t);e._handled=!0,o._immediateFn(function(){var n=1===e._state?t.onFulfilled:t.onRejected;if(null===n)return void(1===e._state?s:c)(t.promise,e._value);var r;try{r=n(e._value)}catch(e){return void c(t.promise,e)}s(t.promise,r)})}function s(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if(t instanceof o)return e._state=3,e._value=t,void u(e);if("function"==typeof n)return void f(i(n,t),e)}e._state=1,e._value=t,u(e)}catch(t){c(e,t)}}function c(e,t){e._state=2,e._value=t,u(e)}function u(e){2===e._state&&0===e._deferreds.length&&o._immediateFn(function(){e._handled||o._unhandledRejectionFn(e._value)});for(var t=0,n=e._deferreds.length;t=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},n(16),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(t,n(1))},function(e,t,n){(function(e,t){!function(e,n){"use strict";function r(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n1)for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===c(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=(0,m.default)(e,"click",function(e){return t.onClick(e)})}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new f.default({action:this.action(t),target:this.target(t),text:this.text(t),container:this.container,trigger:t,emitter:this})}},{key:"defaultAction",value:function(e){return s("action",e)}},{key:"defaultTarget",value:function(e){var t=s("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return s("text",e)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach(function(e){n=n&&!!document.queryCommandSupported(e)}),n}}]),t}(h.default);e.exports=y},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action=e.action,this.container=e.container,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var e=this,t="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,s.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,s.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(e){this.emitter.emit(e?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(e){if(void 0!==e){if(!e||"object"!==(void 0===e?"undefined":i(e))||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=e}},get:function(){return this._target}}]),e}();e.exports=c},function(e,t){function n(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var r=window.getSelection(),i=document.createRange();i.selectNodeContents(e),r.removeAllRanges(),r.addRange(i),t=r.toString()}return t}e.exports=n},function(e,t){function n(){}n.prototype={on:function(e,t,n){var r=this.e||(this.e={});return(r[e]||(r[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){function r(){i.off(e,r),t.apply(n,arguments)}var i=this;return r._=t,this.on(e,r,n)},emit:function(e){var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),r=0,i=n.length;for(r;r=0,a=navigator.userAgent.indexOf("Android")>0&&!o,s=/iP(ad|hone|od)/.test(navigator.userAgent)&&!o,c=s&&/OS 4_\d(_\d)?/.test(navigator.userAgent),u=s&&/OS [6-7]_\d/.test(navigator.userAgent),l=navigator.userAgent.indexOf("BB10")>0;i.prototype.needsClick=function(e){switch(e.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(e.disabled)return!0;break;case"input":if(s&&"file"===e.type||e.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(e.className)},i.prototype.needsFocus=function(e){switch(e.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!a;case"input":switch(e.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!e.disabled&&!e.readOnly;default:return/\bneedsfocus\b/.test(e.className)}},i.prototype.sendClick=function(e,t){var n,r;document.activeElement&&document.activeElement!==e&&document.activeElement.blur(),r=t.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(e),!0,!0,window,1,r.screenX,r.screenY,r.clientX,r.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,e.dispatchEvent(n)},i.prototype.determineEventType=function(e){return a&&"select"===e.tagName.toLowerCase()?"mousedown":"click"},i.prototype.focus=function(e){var t;s&&e.setSelectionRange&&0!==e.type.indexOf("date")&&"time"!==e.type&&"month"!==e.type?(t=e.value.length,e.setSelectionRange(t,t)):e.focus()},i.prototype.updateScrollParent=function(e){var t,n;if(!(t=e.fastClickScrollParent)||!t.contains(e)){n=e;do{if(n.scrollHeight>n.offsetHeight){t=n,e.fastClickScrollParent=n;break}n=n.parentElement}while(n)}t&&(t.fastClickLastScrollTop=t.scrollTop)},i.prototype.getTargetElementFromEventTarget=function(e){return e.nodeType===Node.TEXT_NODE?e.parentNode:e},i.prototype.onTouchStart=function(e){var t,n,r;if(e.targetTouches.length>1)return!0;if(t=this.getTargetElementFromEventTarget(e.target),n=e.targetTouches[0],s){if(r=window.getSelection(),r.rangeCount&&!r.isCollapsed)return!0;if(!c){if(n.identifier&&n.identifier===this.lastTouchIdentifier)return e.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(t)}}return this.trackingClick=!0,this.trackingClickStart=e.timeStamp,this.targetElement=t,this.touchStartX=n.pageX,this.touchStartY=n.pageY,e.timeStamp-this.lastClickTimen||Math.abs(t.pageY-this.touchStartY)>n},i.prototype.onTouchMove=function(e){return!this.trackingClick||((this.targetElement!==this.getTargetElementFromEventTarget(e.target)||this.touchHasMoved(e))&&(this.trackingClick=!1,this.targetElement=null),!0)},i.prototype.findControl=function(e){return void 0!==e.control?e.control:e.htmlFor?document.getElementById(e.htmlFor):e.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},i.prototype.onTouchEnd=function(e){var t,n,r,i,o,l=this.targetElement;if(!this.trackingClick)return!0;if(e.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=e.timeStamp,n=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,u&&(o=e.changedTouches[0],l=document.elementFromPoint(o.pageX-window.pageXOffset,o.pageY-window.pageYOffset)||l,l.fastClickScrollParent=this.targetElement.fastClickScrollParent),"label"===(r=l.tagName.toLowerCase())){if(t=this.findControl(l)){if(this.focus(l),a)return!1;l=t}}else if(this.needsFocus(l))return e.timeStamp-n>100||s&&window.top!==window&&"input"===r?(this.targetElement=null,!1):(this.focus(l),this.sendClick(l,e),s&&"select"===r||(this.targetElement=null,e.preventDefault()),!1);return!(!s||c||!(i=l.fastClickScrollParent)||i.fastClickLastScrollTop===i.scrollTop)||(this.needsClick(l)||(e.preventDefault(),this.sendClick(l,e)),!1)},i.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},i.prototype.onMouse=function(e){return!this.targetElement||(!!e.forwardedTouchEvent||(!e.cancelable||(!(!this.needsClick(this.targetElement)||this.cancelNextClick)||(e.stopImmediatePropagation?e.stopImmediatePropagation():e.propagationStopped=!0,e.stopPropagation(),e.preventDefault(),!1))))},i.prototype.onClick=function(e){var t;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===e.target.type&&0===e.detail||(t=this.onMouse(e),t||(this.targetElement=null),t)},i.prototype.destroy=function(){var e=this.layer;a&&(e.removeEventListener("mouseover",this.onMouse,!0),e.removeEventListener("mousedown",this.onMouse,!0),e.removeEventListener("mouseup",this.onMouse,!0)),e.removeEventListener("click",this.onClick,!0),e.removeEventListener("touchstart",this.onTouchStart,!1),e.removeEventListener("touchmove",this.onTouchMove,!1),e.removeEventListener("touchend",this.onTouchEnd,!1),e.removeEventListener("touchcancel",this.onTouchCancel,!1)},i.notNeeded=function(e){var t,n,r;if(void 0===window.ontouchstart)return!0;if(n=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!a)return!0;if(t=document.querySelector("meta[name=viewport]")){if(-1!==t.content.indexOf("user-scalable=no"))return!0;if(n>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(l&&(r=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),r[1]>=10&&r[2]>=3&&(t=document.querySelector("meta[name=viewport]")))){if(-1!==t.content.indexOf("user-scalable=no"))return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===e.style.msTouchAction||"manipulation"===e.style.touchAction||(!!(+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]>=27&&(t=document.querySelector("meta[name=viewport]"))&&(-1!==t.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth))||("none"===e.style.touchAction||"manipulation"===e.style.touchAction))},i.attach=function(e,t){return new i(e,t)},void 0!==(r=function(){return i}.call(t,n,t,e))&&(e.exports=r)}()},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(22),o=r(i),a=n(24),s=r(a),c=n(27),u=r(c),l=n(31),f=r(l),d=n(37),h=r(d),p=n(39),m=r(p),y=n(45),v=r(y);t.default={Event:o.default,Header:s.default,Nav:u.default,Search:f.default,Sidebar:h.default,Source:m.default,Tabs:v.default}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(3),o=r(i),a=n(23),s=r(a);t.default={Listener:o.default,MatchMedia:s.default}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=n(3),o=(function(e){e&&e.__esModule}(i),function e(t,n){r(this,e),this.handler_=function(e){e.matches?n.listen():n.unlisten()};var i=window.matchMedia(t);i.addListener(this.handler_),this.handler_(i)});t.default=o},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(25),o=r(i),a=n(26),s=r(a);t.default={Shadow:o.default,Title:s.default}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(t,n){r(this,e);var i="string"==typeof t?document.querySelector(t):t;if(!(i instanceof HTMLElement&&i.parentNode instanceof HTMLElement))throw new ReferenceError;if(this.el_=i.parentNode,!((i="string"==typeof n?document.querySelector(n):n)instanceof HTMLElement))throw new ReferenceError;this.header_=i,this.height_=0,this.active_=!1}return e.prototype.setup=function(){for(var e=this.el_;e=e.previousElementSibling;){if(!(e instanceof HTMLElement))throw new ReferenceError;this.height_+=e.offsetHeight}this.update()},e.prototype.update=function(e){if(!e||"resize"!==e.type&&"orientationchange"!==e.type){var t=window.pageYOffset>=this.height_;t!==this.active_&&(this.header_.dataset.mdState=(this.active_=t)?"shadow":"")}else this.height_=0,this.setup()},e.prototype.reset=function(){this.header_.dataset.mdState="",this.height_=0,this.active_=!1},e}();t.default=i},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(t,n){r(this,e);var i="string"==typeof t?document.querySelector(t):t;if(!(i instanceof HTMLElement))throw new ReferenceError;if(this.el_=i,!((i="string"==typeof n?document.querySelector(n):n)instanceof HTMLHeadingElement))throw new ReferenceError;this.header_=i,this.active_=!1}return e.prototype.setup=function(){var e=this;Array.prototype.forEach.call(this.el_.children,function(t){t.style.width=e.el_.offsetWidth-20+"px"})},e.prototype.update=function(e){var t=this,n=window.pageYOffset>=this.header_.offsetTop;n!==this.active_&&(this.el_.dataset.mdState=(this.active_=n)?"active":""),"resize"!==e.type&&"orientationchange"!==e.type||Array.prototype.forEach.call(this.el_.children,function(e){e.style.width=t.el_.offsetWidth-20+"px"})},e.prototype.reset=function(){this.el_.dataset.mdState="",this.el_.style.width="",this.active_=!1},e}();t.default=i},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(28),o=r(i),a=n(29),s=r(a),c=n(30),u=r(c);t.default={Blur:o.default,Collapse:s.default,Scrolling:u.default}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(t){r(this,e),this.els_="string"==typeof t?document.querySelectorAll(t):t,this.index_=0,this.offset_=window.pageYOffset,this.dir_=!1,this.anchors_=[].reduce.call(this.els_,function(e,t){return e.concat(document.getElementById(t.hash.substring(1))||[])},[])}return e.prototype.setup=function(){this.update()},e.prototype.update=function(){var e=window.pageYOffset,t=this.offset_-e<0;if(this.dir_!==t&&(this.index_=this.index_=t?0:this.els_.length-1),0!==this.anchors_.length){if(this.offset_<=e)for(var n=this.index_+1;n0&&(this.els_[n-1].dataset.mdState="blur"),this.index_=n;else for(var r=this.index_;r>=0;r--){if(!(this.anchors_[r].offsetTop-80>e)){this.index_=r;break}r>0&&(this.els_[r-1].dataset.mdState="")}this.offset_=e,this.dir_=t}},e.prototype.reset=function(){Array.prototype.forEach.call(this.els_,function(e){e.dataset.mdState=""}),this.index_=0,this.offset_=window.pageYOffset},e}();t.default=i},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(t){r(this,e);var n="string"==typeof t?document.querySelector(t):t;if(!(n instanceof HTMLElement))throw new ReferenceError;this.el_=n}return e.prototype.setup=function(){var e=this.el_.getBoundingClientRect().height;this.el_.style.display=e?"block":"none",this.el_.style.overflow=e?"visible":"hidden"},e.prototype.update=function(){var e=this,t=this.el_.getBoundingClientRect().height;if(this.el_.style.display="block",this.el_.style.overflow="",t)this.el_.style.maxHeight=t+"px",requestAnimationFrame(function(){e.el_.setAttribute("data-md-state","animate"),e.el_.style.maxHeight="0px"});else{this.el_.setAttribute("data-md-state","expand"),this.el_.style.maxHeight="";var n=this.el_.getBoundingClientRect().height;this.el_.removeAttribute("data-md-state"),this.el_.style.maxHeight="0px",requestAnimationFrame(function(){e.el_.setAttribute("data-md-state","animate"),e.el_.style.maxHeight=n+"px"})}var r=function e(n){var r=n.target;if(!(r instanceof HTMLElement))throw new ReferenceError;r.removeAttribute("data-md-state"),r.style.maxHeight="",r.style.display=t?"none":"block",r.style.overflow=t?"hidden":"visible",r.removeEventListener("transitionend",e)};this.el_.addEventListener("transitionend",r,!1)},e.prototype.reset=function(){this.el_.dataset.mdState="",this.el_.style.maxHeight="",this.el_.style.display="",this.el_.style.overflow=""},e}();t.default=i},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(t){r(this,e);var n="string"==typeof t?document.querySelector(t):t;if(!(n instanceof HTMLElement))throw new ReferenceError;this.el_=n}return e.prototype.setup=function(){this.el_.children[this.el_.children.length-1].style.webkitOverflowScrolling="touch";var e=this.el_.querySelectorAll("[data-md-toggle]");Array.prototype.forEach.call(e,function(e){if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=e.nextElementSibling;if(!(t instanceof HTMLElement))throw new ReferenceError;for(;"NAV"!==t.tagName&&t.nextElementSibling;)t=t.nextElementSibling;if(!(e.parentNode instanceof HTMLElement&&e.parentNode.parentNode instanceof HTMLElement))throw new ReferenceError;var n=e.parentNode.parentNode,r=t.children[t.children.length-1];n.style.webkitOverflowScrolling="",r.style.webkitOverflowScrolling="touch"}})},e.prototype.update=function(e){var t=e.target;if(!(t instanceof HTMLElement))throw new ReferenceError;var n=t.nextElementSibling;if(!(n instanceof HTMLElement))throw new ReferenceError;for(;"NAV"!==n.tagName&&n.nextElementSibling;)n=n.nextElementSibling;if(!(t.parentNode instanceof HTMLElement&&t.parentNode.parentNode instanceof HTMLElement))throw new ReferenceError;var r=t.parentNode.parentNode,i=n.children[n.children.length-1];if(r.style.webkitOverflowScrolling="",i.style.webkitOverflowScrolling="",!t.checked){var o=function e(){n instanceof HTMLElement&&(r.style.webkitOverflowScrolling="touch",n.removeEventListener("transitionend",e))};n.addEventListener("transitionend",o,!1)}if(t.checked){var a=function e(){n instanceof HTMLElement&&(i.style.webkitOverflowScrolling="touch",n.removeEventListener("transitionend",e))};n.addEventListener("transitionend",a,!1)}},e.prototype.reset=function(){this.el_.children[1].style.webkitOverflowScrolling="";var e=this.el_.querySelectorAll("[data-md-toggle]");Array.prototype.forEach.call(e,function(e){if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=e.nextElementSibling;if(!(t instanceof HTMLElement))throw new ReferenceError;for(;"NAV"!==t.tagName&&t.nextElementSibling;)t=t.nextElementSibling;if(!(e.parentNode instanceof HTMLElement&&e.parentNode.parentNode instanceof HTMLElement))throw new ReferenceError;var n=e.parentNode.parentNode,r=t.children[t.children.length-1];n.style.webkitOverflowScrolling="",r.style.webkitOverflowScrolling=""}})},e}();t.default=i},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(32),o=r(i),a=n(33),s=r(a);t.default={Lock:o.default,Result:s.default}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(t){r(this,e);var n="string"==typeof t?document.querySelector(t):t;if(!(n instanceof HTMLInputElement))throw new ReferenceError;if(this.el_=n,!document.body)throw new ReferenceError;this.lock_=document.body}return e.prototype.setup=function(){this.update()},e.prototype.update=function(){var e=this;this.el_.checked?(this.offset_=window.pageYOffset,setTimeout(function(){window.scrollTo(0,0),e.el_.checked&&(e.lock_.dataset.mdState="lock")},400)):(this.lock_.dataset.mdState="",setTimeout(function(){void 0!==e.offset_&&window.scrollTo(0,e.offset_)},100))},e.prototype.reset=function(){"lock"===this.lock_.dataset.mdState&&window.scrollTo(0,this.offset_),this.lock_.dataset.mdState=""},e}();t.default=i},function(e,t,n){"use strict";(function(e){function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var o=n(34),a=r(o),s=n(35),c=r(s),u=function(e){var t=document.createTextNode(e),n=document.createElement("p");return n.appendChild(t),n.innerHTML},l=function(e,t){var n=t;if(e.length>n){for(;" "!==e[n]&&--n>0;);return e.substring(0,n)+"..."}return e},f=function(e){var t=document.getElementsByName("lang:"+e)[0];if(!(t instanceof HTMLMetaElement))throw new ReferenceError;return t.content},d=function(){function t(e,n){i(this,t);var r="string"==typeof e?document.querySelector(e):e;if(!(r instanceof HTMLElement))throw new ReferenceError;this.el_=r;var o=Array.prototype.slice.call(this.el_.children),a=o[0],s=o[1];this.data_=n,this.meta_=a,this.list_=s,this.message_={placeholder:this.meta_.textContent,none:f("search.result.none"),one:f("search.result.one"),other:f("search.result.other")};var u=f("search.tokenizer");u.length&&(c.default.tokenizer.separator=u),this.lang_=f("search.language").split(",").filter(Boolean).map(function(e){return e.trim()})}return t.prototype.update=function(t){var n=this;if("focus"!==t.type||this.index_){if("focus"===t.type||"keyup"===t.type){var r=t.target;if(!(r instanceof HTMLInputElement))throw new ReferenceError;if(!this.index_||r.value===this.value_)return;for(;this.list_.firstChild;)this.list_.removeChild(this.list_.firstChild);if(this.value_=r.value,0===this.value_.length)return void(this.meta_.textContent=this.message_.placeholder);var i=this.index_.query(function(e){n.value_.toLowerCase().split(" ").filter(Boolean).forEach(function(t){e.term(t,{wildcard:c.default.Query.wildcard.TRAILING})})}).reduce(function(e,t){var r=n.docs_.get(t.ref);if(r.parent){var i=r.parent.location;e.set(i,(e.get(i)||[]).concat(t))}else{var o=r.location;e.set(o,e.get(o)||[])}return e},new Map),o=(0,a.default)(this.value_.trim()).replace(new RegExp(c.default.tokenizer.separator,"img"),"|"),s=new RegExp("(^|"+c.default.tokenizer.separator+")("+o+")","img"),d=function(e,t,n){return t+""+n+""};this.stack_=[],i.forEach(function(t,r){var i,o=n.docs_.get(r),a=e.createElement("li",{class:"md-search-result__item"},e.createElement("a",{href:o.location,title:o.title,class:"md-search-result__link",tabindex:"-1"},e.createElement("article",{class:"md-search-result__article md-search-result__article--document"},e.createElement("h1",{class:"md-search-result__title"},{__html:o.title.replace(s,d)}),o.text.length?e.createElement("p",{class:"md-search-result__teaser"},{__html:o.text.replace(s,d)}):{}))),c=t.map(function(t){return function(){var r=n.docs_.get(t.ref);a.appendChild(e.createElement("a",{href:r.location,title:r.title,class:"md-search-result__link","data-md-rel":"anchor",tabindex:"-1"},e.createElement("article",{class:"md-search-result__article"},e.createElement("h1",{class:"md-search-result__title"},{__html:r.title.replace(s,d)}),r.text.length?e.createElement("p",{class:"md-search-result__teaser"},{__html:l(r.text.replace(s,d),400)}):{})))}});(i=n.stack_).push.apply(i,[function(){return n.list_.appendChild(a)}].concat(c))});var h=this.el_.parentNode;if(!(h instanceof HTMLElement))throw new ReferenceError;for(;this.stack_.length&&h.offsetHeight>=h.scrollHeight-16;)this.stack_.shift()();var p=this.list_.querySelectorAll("[data-md-rel=anchor]");switch(Array.prototype.forEach.call(p,function(e){["click","keydown"].forEach(function(t){e.addEventListener(t,function(n){if("keydown"!==t||13===n.keyCode){var r=document.querySelector("[data-md-toggle=search]");if(!(r instanceof HTMLInputElement))throw new ReferenceError;r.checked&&(r.checked=!1,r.dispatchEvent(new CustomEvent("change"))),n.preventDefault(),setTimeout(function(){document.location.href=e.href},100)}})})}),i.size){case 0:this.meta_.textContent=this.message_.none;break;case 1:this.meta_.textContent=this.message_.one;break;default:this.meta_.textContent=this.message_.other.replace("#",i.size)}}}else{var m=function(e){n.docs_=e.reduce(function(e,t){var n=t.location.split("#"),r=n[0],i=n[1];return t.title=u(t.title),t.text=u(t.text),i&&(t.parent=e.get(r),t.parent&&!t.parent.done&&(t.parent.title=t.title,t.parent.text=t.text,t.parent.done=!0)),t.text=t.text.replace(/\n/g," ").replace(/\s+/g," ").replace(/\s+([,.:;!?])/g,function(e,t){return t}),t.parent&&t.parent.title===t.title||e.set(t.location,t),e},new Map);var t=n.docs_,r=n.lang_;n.stack_=[],n.index_=(0,c.default)(function(){var e,n=this,i={"search.pipeline.trimmer":c.default.trimmer,"search.pipeline.stopwords":c.default.stopWordFilter},o=Object.keys(i).reduce(function(e,t){return f(t).match(/^false$/i)||e.push(i[t]),e},[]);this.pipeline.reset(),o&&(e=this.pipeline).add.apply(e,o),1===r.length&&"en"!==r[0]&&c.default[r[0]]?this.use(c.default[r[0]]):r.length>1&&this.use(c.default.multiLanguage.apply(c.default,r)),this.field("title",{boost:10}),this.field("text"),this.ref("location"),t.forEach(function(e){return n.add(e)})});var i=n.el_.parentNode;if(!(i instanceof HTMLElement))throw new ReferenceError;i.addEventListener("scroll",function(){for(;n.stack_.length&&i.scrollTop+i.offsetHeight>=i.scrollHeight-16;)n.stack_.splice(0,10).forEach(function(e){return e()})})};setTimeout(function(){return"function"==typeof n.data_?n.data_().then(m):m(n.data_)},250)}},t}();t.default=d}).call(t,n(0))},function(e,t,n){"use strict";var r=/[|\\{}()[\]^$+*?.]/g;e.exports=function(e){if("string"!=typeof e)throw new TypeError("Expected a string");return e.replace(r,"\\$&")}},function(e,t,n){(function(t){e.exports=t.lunr=n(36)}).call(t,n(1))},function(e,t,n){var r,i;!function(){var o=function(e){var t=new o.Builder;return t.pipeline.add(o.trimmer,o.stopWordFilter,o.stemmer),t.searchPipeline.add(o.stemmer),e.call(t,t),t.build()};o.version="2.3.5",o.utils={},o.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),o.utils.asString=function(e){return void 0===e||null===e?"":e.toString()},o.utils.clone=function(e){if(null===e||void 0===e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r0){var l=o.utils.clone(t)||{};l.position=[s,u],l.index=i.length,i.push(new o.Token(n.slice(s,a),l))}s=a+1}}return i},o.tokenizer.separator=/[\s\-]+/,o.Pipeline=function(){this._stack=[]},o.Pipeline.registeredFunctions=Object.create(null),o.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&o.utils.warn("Overwriting existing registered function: "+t),e.label=t,o.Pipeline.registeredFunctions[e.label]=e},o.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||o.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},o.Pipeline.load=function(e){var t=new o.Pipeline;return e.forEach(function(e){var n=o.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)}),t},o.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(e){o.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},o.Pipeline.prototype.after=function(e,t){o.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},o.Pipeline.prototype.before=function(e,t){o.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},o.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},o.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n1&&(oe&&(n=i),o!=e);)r=n-t,i=t+Math.floor(r/2),o=this.elements[2*i];return o==e?2*i:o>e?2*i:os?u+=2:a==s&&(t+=n[c+1]*r[u+1],c+=2,u+=2);return t},o.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},o.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t0){var a,s=i.str.charAt(0);s in i.node.edges?a=i.node.edges[s]:(a=new o.TokenSet,i.node.edges[s]=a),1==i.str.length&&(a.final=!0),r.push({node:a,editsRemaining:i.editsRemaining,str:i.str.slice(1)})}if(i.editsRemaining>0&&i.str.length>1){var c,s=i.str.charAt(1);s in i.node.edges?c=i.node.edges[s]:(c=new o.TokenSet,i.node.edges[s]=c),i.str.length<=2?c.final=!0:r.push({node:c,editsRemaining:i.editsRemaining-1,str:i.str.slice(2)})}if(i.editsRemaining>0&&1==i.str.length&&(i.node.final=!0),i.editsRemaining>0&&i.str.length>=1){if("*"in i.node.edges)var u=i.node.edges["*"];else{var u=new o.TokenSet;i.node.edges["*"]=u}1==i.str.length?u.final=!0:r.push({node:u,editsRemaining:i.editsRemaining-1,str:i.str.slice(1)})}if(i.editsRemaining>0){if("*"in i.node.edges)var l=i.node.edges["*"];else{var l=new o.TokenSet;i.node.edges["*"]=l}0==i.str.length?l.final=!0:r.push({node:l,editsRemaining:i.editsRemaining-1,str:i.str})}if(i.editsRemaining>0&&i.str.length>1){var f,d=i.str.charAt(0),h=i.str.charAt(1);h in i.node.edges?f=i.node.edges[h]:(f=new o.TokenSet,i.node.edges[h]=f),1==i.str.length?f.final=!0:r.push({node:f,editsRemaining:i.editsRemaining-1,str:d+i.str.slice(2)})}}return n},o.TokenSet.fromString=function(e){for(var t=new o.TokenSet,n=t,r=0,i=e.length;r=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},o.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},o.Index.prototype.search=function(e){return this.query(function(t){new o.QueryParser(e,t).parse()})},o.Index.prototype.query=function(e){for(var t=new o.Query(this.fields),n=Object.create(null),r=Object.create(null),i=Object.create(null),a=Object.create(null),s=Object.create(null),c=0;c1?1:e},o.Builder.prototype.k1=function(e){this._k1=e},o.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var i=0;i=this.length)return o.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},o.QueryLexer.prototype.width=function(){return this.pos-this.start},o.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},o.QueryLexer.prototype.backup=function(){this.pos-=1},o.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{e=this.next(),t=e.charCodeAt(0)}while(t>47&&t<58);e!=o.QueryLexer.EOS&&this.backup()},o.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(o.QueryLexer.TERM)),e.ignore(),e.more())return o.QueryLexer.lexText},o.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(o.QueryLexer.EDIT_DISTANCE),o.QueryLexer.lexText},o.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(o.QueryLexer.BOOST),o.QueryLexer.lexText},o.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(o.QueryLexer.TERM)},o.QueryLexer.termSeparator=o.tokenizer.separator,o.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==o.QueryLexer.EOS)return o.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return o.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(o.QueryLexer.TERM),o.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(o.QueryLexer.TERM),o.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(o.QueryLexer.PRESENCE),o.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(o.QueryLexer.PRESENCE),o.QueryLexer.lexText;if(t.match(o.QueryLexer.termSeparator))return o.QueryLexer.lexTerm}else e.escapeCharacter()}},o.QueryParser=function(e,t){this.lexer=new o.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},o.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=o.QueryParser.parseClause;e;)e=e(this);return this.query},o.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},o.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},o.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},o.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(void 0!=t)switch(t.type){case o.QueryLexer.PRESENCE:return o.QueryParser.parsePresence;case o.QueryLexer.FIELD:return o.QueryParser.parseField;case o.QueryLexer.TERM:return o.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new o.QueryParseError(n,t.start,t.end)}},o.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(void 0!=t){switch(t.str){case"-":e.currentClause.presence=o.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=o.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new o.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(void 0==r){var n="expecting term or field, found nothing";throw new o.QueryParseError(n,t.start,t.end)}switch(r.type){case o.QueryLexer.FIELD:return o.QueryParser.parseField;case o.QueryLexer.TERM:return o.QueryParser.parseTerm;default:var n="expecting term or field, found '"+r.type+"'";throw new o.QueryParseError(n,r.start,r.end)}}},o.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(void 0!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new o.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var i=e.peekLexeme();if(void 0==i){var r="expecting term, found nothing";throw new o.QueryParseError(r,t.start,t.end)}switch(i.type){case o.QueryLexer.TERM:return o.QueryParser.parseTerm;default:var r="expecting term, found '"+i.type+"'";throw new o.QueryParseError(r,i.start,i.end)}}},o.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(void 0!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(void 0==n)return void e.nextClause();switch(n.type){case o.QueryLexer.TERM:return e.nextClause(),o.QueryParser.parseTerm;case o.QueryLexer.FIELD:return e.nextClause(),o.QueryParser.parseField;case o.QueryLexer.EDIT_DISTANCE:return o.QueryParser.parseEditDistance;case o.QueryLexer.BOOST:return o.QueryParser.parseBoost;case o.QueryLexer.PRESENCE:return e.nextClause(),o.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new o.QueryParseError(r,n.start,n.end)}}},o.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(void 0!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new o.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var i=e.peekLexeme();if(void 0==i)return void e.nextClause();switch(i.type){case o.QueryLexer.TERM:return e.nextClause(),o.QueryParser.parseTerm;case o.QueryLexer.FIELD:return e.nextClause(),o.QueryParser.parseField;case o.QueryLexer.EDIT_DISTANCE:return o.QueryParser.parseEditDistance;case o.QueryLexer.BOOST:return o.QueryParser.parseBoost;case o.QueryLexer.PRESENCE:return e.nextClause(),o.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+i.type+"'";throw new o.QueryParseError(r,i.start,i.end)}}},o.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(void 0!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new o.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var i=e.peekLexeme();if(void 0==i)return void e.nextClause();switch(i.type){case o.QueryLexer.TERM:return e.nextClause(),o.QueryParser.parseTerm;case o.QueryLexer.FIELD:return e.nextClause(),o.QueryParser.parseField;case o.QueryLexer.EDIT_DISTANCE:return o.QueryParser.parseEditDistance;case o.QueryLexer.BOOST:return o.QueryParser.parseBoost;case o.QueryLexer.PRESENCE:return e.nextClause(),o.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+i.type+"'";throw new o.QueryParseError(r,i.start,i.end)}}},function(o,a){r=a,void 0!==(i="function"==typeof r?r.call(t,n,t,e):r)&&(e.exports=i)}(0,function(){return o})}()},function(e,t,n){"use strict";t.__esModule=!0;var r=n(38),i=function(e){return e&&e.__esModule?e:{default:e}}(r);t.default={Position:i.default}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(t,n){r(this,e);var i="string"==typeof t?document.querySelector(t):t;if(!(i instanceof HTMLElement&&i.parentNode instanceof HTMLElement))throw new ReferenceError;if(this.el_=i,this.parent_=i.parentNode,!((i="string"==typeof n?document.querySelector(n):n)instanceof HTMLElement))throw new ReferenceError;this.header_=i,this.height_=0,this.pad_="fixed"===window.getComputedStyle(this.header_).position}return e.prototype.setup=function(){var e=Array.prototype.reduce.call(this.parent_.children,function(e,t){return Math.max(e,t.offsetTop)},0);this.offset_=e-(this.pad_?this.header_.offsetHeight:0),this.update()},e.prototype.update=function(e){var t=window.pageYOffset,n=window.innerHeight;e&&"resize"===e.type&&this.setup();var r={top:this.pad_?this.header_.offsetHeight:0,bottom:this.parent_.offsetTop+this.parent_.offsetHeight},i=n-r.top-Math.max(0,this.offset_-t)-Math.max(0,t+n-r.bottom);i!==this.height_&&(this.el_.style.height=(this.height_=i)+"px"),t>=this.offset_?"lock"!==this.el_.dataset.mdState&&(this.el_.dataset.mdState="lock"):"lock"===this.el_.dataset.mdState&&(this.el_.dataset.mdState="")},e.prototype.reset=function(){this.el_.dataset.mdState="",this.el_.style.height="",this.height_=0},e}();t.default=i},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(40),o=r(i),a=n(44),s=r(a);t.default={Adapter:o.default,Repository:s.default}},function(e,t,n){"use strict";t.__esModule=!0;var r=n(41),i=function(e){return e&&e.__esModule?e:{default:e}}(r);t.default={GitHub:i.default}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}t.__esModule=!0;var a=n(42),s=function(e){return e&&e.__esModule?e:{default:e}}(a),c=function(e){function t(n){r(this,t);var o=i(this,e.call(this,n)),a=/^.+github\.com\/([^\/]+)\/?([^\/]+)?.*$/.exec(o.base_);if(a&&3===a.length){var s=a[1],c=a[2];o.base_="https://api.github.com/users/"+s+"/repos",o.name_=c}return o}return o(t,e),t.prototype.fetch_=function(){var e=this;return function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return fetch(e.base_+"?per_page=30&page="+n).then(function(e){return e.json()}).then(function(r){if(!(r instanceof Array))throw new TypeError;if(e.name_){var i=r.find(function(t){return t.name===e.name_});return i||30!==r.length?i?[e.format_(i.stargazers_count)+" Stars",e.format_(i.forks_count)+" Forks"]:[]:t(n+1)}return[r.length+" Repositories"]})}()},t}(s.default);t.default=c},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=n(43),o=function(e){return e&&e.__esModule?e:{default:e}}(i),a=function(){function e(t){r(this,e);var n="string"==typeof t?document.querySelector(t):t;if(!(n instanceof HTMLAnchorElement))throw new ReferenceError;this.el_=n,this.base_=this.el_.href,this.salt_=this.hash_(this.base_)}return e.prototype.fetch=function(){var e=this;return new Promise(function(t){var n=o.default.getJSON(e.salt_+".cache-source");void 0!==n?t(n):e.fetch_().then(function(n){o.default.set(e.salt_+".cache-source",n,{expires:1/96}),t(n)})})},e.prototype.fetch_=function(){throw new Error("fetch_(): Not implemented")},e.prototype.format_=function(e){return e>1e4?(e/1e3).toFixed(0)+"k":e>1e3?(e/1e3).toFixed(1)+"k":""+e},e.prototype.hash_=function(e){var t=0;if(0===e.length)return t;for(var n=0,r=e.length;n1){if(o=e({path:"/"},r.defaults,o),"number"==typeof o.expires){var s=new Date;s.setMilliseconds(s.getMilliseconds()+864e5*o.expires),o.expires=s}o.expires=o.expires?o.expires.toUTCString():"";try{a=JSON.stringify(i),/^[\{\[]/.test(a)&&(i=a)}catch(e){}i=n.write?n.write(i,t):encodeURIComponent(String(i)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)),t=t.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent),t=t.replace(/[\(\)]/g,escape);var c="";for(var u in o)o[u]&&(c+="; "+u,!0!==o[u]&&(c+="="+o[u]));return document.cookie=t+"="+i+c}t||(a={});for(var l=document.cookie?document.cookie.split("; "):[],f=/(%[0-9A-Z]{2})+/g,d=0;d=this.el_.children[0].offsetTop+-43;e!==this.active_&&(this.el_.dataset.mdState=(this.active_=e)?"hidden":"")},e.prototype.reset=function(){this.el_.dataset.mdState="",this.active_=!1},e}();t.default=i}])); \ No newline at end of file diff --git a/assets/javascripts/lunr/lunr.da.js b/assets/javascripts/lunr/lunr.da.js new file mode 100644 index 00000000..34910dfe --- /dev/null +++ b/assets/javascripts/lunr/lunr.da.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,m,i;e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=(r=e.stemmerSupport.Among,m=e.stemmerSupport.SnowballProgram,i=new function(){var i,t,n,s=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],o=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],a=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],u=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],c=new m;function l(){var e,r=c.limit-c.cursor;c.cursor>=t&&(e=c.limit_backward,c.limit_backward=t,c.ket=c.cursor,c.find_among_b(o,4)?(c.bra=c.cursor,c.limit_backward=e,c.cursor=c.limit-r,c.cursor>c.limit_backward&&(c.cursor--,c.bra=c.cursor,c.slice_del())):c.limit_backward=e)}this.setCurrent=function(e){c.setCurrent(e)},this.getCurrent=function(){return c.getCurrent()},this.stem=function(){var e,r=c.cursor;return function(){var e,r=c.cursor+3;if(t=c.limit,0<=r&&r<=c.limit){for(i=r;;){if(e=c.cursor,c.in_grouping(d,97,248)){c.cursor=e;break}if((c.cursor=e)>=c.limit)return;c.cursor++}for(;!c.out_grouping(d,97,248);){if(c.cursor>=c.limit)return;c.cursor++}(t=c.cursor)=t&&(r=c.limit_backward,c.limit_backward=t,c.ket=c.cursor,e=c.find_among_b(s,32),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del();break;case 2:c.in_grouping_b(u,97,229)&&c.slice_del()}}(),c.cursor=c.limit,l(),c.cursor=c.limit,function(){var e,r,i,n=c.limit-c.cursor;if(c.ket=c.cursor,c.eq_s_b(2,"st")&&(c.bra=c.cursor,c.eq_s_b(2,"ig")&&c.slice_del()),c.cursor=c.limit-n,c.cursor>=t&&(r=c.limit_backward,c.limit_backward=t,c.ket=c.cursor,e=c.find_among_b(a,5),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del(),i=c.limit-c.cursor,l(),c.cursor=c.limit-i;break;case 2:c.slice_from("løs")}}(),c.cursor=c.limit,c.cursor>=t&&(e=c.limit_backward,c.limit_backward=t,c.ket=c.cursor,c.out_grouping_b(d,97,248)?(c.bra=c.cursor,n=c.slice_to(n),c.limit_backward=e,c.eq_v_b(n)&&c.slice_del()):c.limit_backward=e),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/lunr.de.js b/assets/javascripts/lunr/lunr.de.js new file mode 100644 index 00000000..1529892c --- /dev/null +++ b/assets/javascripts/lunr/lunr.de.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var _,p,r;e.de=function(){this.pipeline.reset(),this.pipeline.add(e.de.trimmer,e.de.stopWordFilter,e.de.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.de.stemmer))},e.de.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.de.trimmer=e.trimmerSupport.generateTrimmer(e.de.wordCharacters),e.Pipeline.registerFunction(e.de.trimmer,"trimmer-de"),e.de.stemmer=(_=e.stemmerSupport.Among,p=e.stemmerSupport.SnowballProgram,r=new function(){var r,n,i,s=[new _("",-1,6),new _("U",0,2),new _("Y",0,1),new _("ä",0,3),new _("ö",0,4),new _("ü",0,5)],o=[new _("e",-1,2),new _("em",-1,1),new _("en",-1,2),new _("ern",-1,1),new _("er",-1,1),new _("s",-1,3),new _("es",5,2)],c=[new _("en",-1,1),new _("er",-1,1),new _("st",-1,2),new _("est",2,1)],u=[new _("ig",-1,1),new _("lich",-1,1)],a=[new _("end",-1,1),new _("ig",-1,2),new _("ung",-1,1),new _("lich",-1,3),new _("isch",-1,2),new _("ik",-1,2),new _("heit",-1,3),new _("keit",-1,4)],t=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32,8],d=[117,30,5],l=[117,30,4],m=new p;function h(e,r,n){return!(!m.eq_s(1,e)||(m.ket=m.cursor,!m.in_grouping(t,97,252)))&&(m.slice_from(r),m.cursor=n,!0)}function w(){for(;!m.in_grouping(t,97,252);){if(m.cursor>=m.limit)return!0;m.cursor++}for(;!m.out_grouping(t,97,252);){if(m.cursor>=m.limit)return!0;m.cursor++}return!1}function f(){return i<=m.cursor}function b(){return n<=m.cursor}this.setCurrent=function(e){m.setCurrent(e)},this.getCurrent=function(){return m.getCurrent()},this.stem=function(){var e=m.cursor;return function(){for(var e,r,n,i,s=m.cursor;;)if(e=m.cursor,m.bra=e,m.eq_s(1,"ß"))m.ket=m.cursor,m.slice_from("ss");else{if(e>=m.limit)break;m.cursor=e+1}for(m.cursor=s;;)for(r=m.cursor;;){if(n=m.cursor,m.in_grouping(t,97,252)){if(i=m.cursor,m.bra=i,h("u","U",n))break;if(m.cursor=i,h("y","Y",n))break}if(n>=m.limit)return m.cursor=r;m.cursor=n+1}}(),m.cursor=e,function(){i=m.limit,n=i;var e=m.cursor+3;0<=e&&e<=m.limit&&(r=e,w()||((i=m.cursor)=m.limit)return;m.cursor++}}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return r.setCurrent(e),r.stem(),r.getCurrent()}):(r.setCurrent(e),r.stem(),r.getCurrent())}),e.Pipeline.registerFunction(e.de.stemmer,"stemmer-de"),e.de.stopWordFilter=e.generateStopWordFilter("aber alle allem allen aller alles als also am an ander andere anderem anderen anderer anderes anderm andern anderr anders auch auf aus bei bin bis bist da damit dann das dasselbe dazu daß dein deine deinem deinen deiner deines dem demselben den denn denselben der derer derselbe derselben des desselben dessen dich die dies diese dieselbe dieselben diesem diesen dieser dieses dir doch dort du durch ein eine einem einen einer eines einig einige einigem einigen einiger einiges einmal er es etwas euch euer eure eurem euren eurer eures für gegen gewesen hab habe haben hat hatte hatten hier hin hinter ich ihm ihn ihnen ihr ihre ihrem ihren ihrer ihres im in indem ins ist jede jedem jeden jeder jedes jene jenem jenen jener jenes jetzt kann kein keine keinem keinen keiner keines können könnte machen man manche manchem manchen mancher manches mein meine meinem meinen meiner meines mich mir mit muss musste nach nicht nichts noch nun nur ob oder ohne sehr sein seine seinem seinen seiner seines selbst sich sie sind so solche solchem solchen solcher solches soll sollte sondern sonst um und uns unse unsem unsen unser unses unter viel vom von vor war waren warst was weg weil weiter welche welchem welchen welcher welches wenn werde werden wie wieder will wir wird wirst wo wollen wollte während würde würden zu zum zur zwar zwischen über".split(" ")),e.Pipeline.registerFunction(e.de.stopWordFilter,"stopWordFilter-de")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/lunr.du.js b/assets/javascripts/lunr/lunr.du.js new file mode 100644 index 00000000..588548a6 --- /dev/null +++ b/assets/javascripts/lunr/lunr.du.js @@ -0,0 +1 @@ +!function(r,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():e()(r.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var v,q,e;r.du=function(){this.pipeline.reset(),this.pipeline.add(r.du.trimmer,r.du.stopWordFilter,r.du.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(r.du.stemmer))},r.du.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.du.trimmer=r.trimmerSupport.generateTrimmer(r.du.wordCharacters),r.Pipeline.registerFunction(r.du.trimmer,"trimmer-du"),r.du.stemmer=(v=r.stemmerSupport.Among,q=r.stemmerSupport.SnowballProgram,e=new function(){var e,i,u,o=[new v("",-1,6),new v("á",0,1),new v("ä",0,1),new v("é",0,2),new v("ë",0,2),new v("í",0,3),new v("ï",0,3),new v("ó",0,4),new v("ö",0,4),new v("ú",0,5),new v("ü",0,5)],n=[new v("",-1,3),new v("I",0,2),new v("Y",0,1)],t=[new v("dd",-1,-1),new v("kk",-1,-1),new v("tt",-1,-1)],c=[new v("ene",-1,2),new v("se",-1,3),new v("en",-1,2),new v("heden",2,1),new v("s",-1,3)],a=[new v("end",-1,1),new v("ig",-1,2),new v("ing",-1,1),new v("lijk",-1,3),new v("baar",-1,4),new v("bar",-1,5)],l=[new v("aa",-1,-1),new v("ee",-1,-1),new v("oo",-1,-1),new v("uu",-1,-1)],m=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],d=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],f=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],_=new q;function s(r){return(_.cursor=r)>=_.limit||(_.cursor++,!1)}function w(){for(;!_.in_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}for(;!_.out_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}return!1}function b(){return i<=_.cursor}function p(){return e<=_.cursor}function g(){var r=_.limit-_.cursor;_.find_among_b(t,3)&&(_.cursor=_.limit-r,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del()))}function h(){var r;u=!1,_.ket=_.cursor,_.eq_s_b(1,"e")&&(_.bra=_.cursor,b()&&(r=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-r,_.slice_del(),u=!0,g())))}function k(){var r;b()&&(r=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-r,_.eq_s_b(3,"gem")||(_.cursor=_.limit-r,_.slice_del(),g())))}this.setCurrent=function(r){_.setCurrent(r)},this.getCurrent=function(){return _.getCurrent()},this.stem=function(){var r=_.cursor;return function(){for(var r,e,i,n=_.cursor;;){if(_.bra=_.cursor,r=_.find_among(o,11))switch(_.ket=_.cursor,r){case 1:_.slice_from("a");continue;case 2:_.slice_from("e");continue;case 3:_.slice_from("i");continue;case 4:_.slice_from("o");continue;case 5:_.slice_from("u");continue;case 6:if(_.cursor>=_.limit)break;_.cursor++;continue}break}for(_.cursor=n,_.bra=n,_.eq_s(1,"y")?(_.ket=_.cursor,_.slice_from("Y")):_.cursor=n;;)if(e=_.cursor,_.in_grouping(m,97,232)){if(i=_.cursor,_.bra=i,_.eq_s(1,"i"))_.ket=_.cursor,_.in_grouping(m,97,232)&&(_.slice_from("I"),_.cursor=e);else if(_.cursor=i,_.eq_s(1,"y"))_.ket=_.cursor,_.slice_from("Y"),_.cursor=e;else if(s(e))break}else if(s(e))break}(),_.cursor=r,i=_.limit,e=i,w()||((i=_.cursor)<3&&(i=3),w()||(e=_.cursor)),_.limit_backward=r,_.cursor=_.limit,function(){var r,e,i,n,o,t,s=_.limit-_.cursor;if(_.ket=_.cursor,r=_.find_among_b(c,5))switch(_.bra=_.cursor,r){case 1:b()&&_.slice_from("heid");break;case 2:k();break;case 3:b()&&_.out_grouping_b(f,97,232)&&_.slice_del()}if(_.cursor=_.limit-s,h(),_.cursor=_.limit-s,_.ket=_.cursor,_.eq_s_b(4,"heid")&&(_.bra=_.cursor,p()&&(e=_.limit-_.cursor,_.eq_s_b(1,"c")||(_.cursor=_.limit-e,_.slice_del(),_.ket=_.cursor,_.eq_s_b(2,"en")&&(_.bra=_.cursor,k())))),_.cursor=_.limit-s,_.ket=_.cursor,r=_.find_among_b(a,6))switch(_.bra=_.cursor,r){case 1:if(p()){if(_.slice_del(),i=_.limit-_.cursor,_.ket=_.cursor,_.eq_s_b(2,"ig")&&(_.bra=_.cursor,p()&&(n=_.limit-_.cursor,!_.eq_s_b(1,"e")))){_.cursor=_.limit-n,_.slice_del();break}_.cursor=_.limit-i,g()}break;case 2:p()&&(o=_.limit-_.cursor,_.eq_s_b(1,"e")||(_.cursor=_.limit-o,_.slice_del()));break;case 3:p()&&(_.slice_del(),h());break;case 4:p()&&_.slice_del();break;case 5:p()&&u&&_.slice_del()}_.cursor=_.limit-s,_.out_grouping_b(d,73,232)&&(t=_.limit-_.cursor,_.find_among_b(l,4)&&_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-t,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del())))}(),_.cursor=_.limit_backward,function(){for(var r;;)if(_.bra=_.cursor,r=_.find_among(n,3))switch(_.ket=_.cursor,r){case 1:_.slice_from("y");break;case 2:_.slice_from("i");break;case 3:if(_.cursor>=_.limit)return;_.cursor++}}(),!0}},function(r){return"function"==typeof r.update?r.update(function(r){return e.setCurrent(r),e.stem(),e.getCurrent()}):(e.setCurrent(r),e.stem(),e.getCurrent())}),r.Pipeline.registerFunction(r.du.stemmer,"stemmer-du"),r.du.stopWordFilter=r.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),r.Pipeline.registerFunction(r.du.stopWordFilter,"stopWordFilter-du")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/lunr.es.js b/assets/javascripts/lunr/lunr.es.js new file mode 100644 index 00000000..9de6c09c --- /dev/null +++ b/assets/javascripts/lunr/lunr.es.js @@ -0,0 +1 @@ +!function(e,s){"function"==typeof define&&define.amd?define(s):"object"==typeof exports?module.exports=s():s()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var C,P,s;e.es=function(){this.pipeline.reset(),this.pipeline.add(e.es.trimmer,e.es.stopWordFilter,e.es.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.es.stemmer))},e.es.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.es.trimmer=e.trimmerSupport.generateTrimmer(e.es.wordCharacters),e.Pipeline.registerFunction(e.es.trimmer,"trimmer-es"),e.es.stemmer=(C=e.stemmerSupport.Among,P=e.stemmerSupport.SnowballProgram,s=new function(){var r,n,i,a=[new C("",-1,6),new C("á",0,1),new C("é",0,2),new C("í",0,3),new C("ó",0,4),new C("ú",0,5)],t=[new C("la",-1,-1),new C("sela",0,-1),new C("le",-1,-1),new C("me",-1,-1),new C("se",-1,-1),new C("lo",-1,-1),new C("selo",5,-1),new C("las",-1,-1),new C("selas",7,-1),new C("les",-1,-1),new C("los",-1,-1),new C("selos",10,-1),new C("nos",-1,-1)],o=[new C("ando",-1,6),new C("iendo",-1,6),new C("yendo",-1,7),new C("ándo",-1,2),new C("iéndo",-1,1),new C("ar",-1,6),new C("er",-1,6),new C("ir",-1,6),new C("ár",-1,3),new C("ér",-1,4),new C("ír",-1,5)],s=[new C("ic",-1,-1),new C("ad",-1,-1),new C("os",-1,-1),new C("iv",-1,1)],u=[new C("able",-1,1),new C("ible",-1,1),new C("ante",-1,1)],w=[new C("ic",-1,1),new C("abil",-1,1),new C("iv",-1,1)],c=[new C("ica",-1,1),new C("ancia",-1,2),new C("encia",-1,5),new C("adora",-1,2),new C("osa",-1,1),new C("ista",-1,1),new C("iva",-1,9),new C("anza",-1,1),new C("logía",-1,3),new C("idad",-1,8),new C("able",-1,1),new C("ible",-1,1),new C("ante",-1,2),new C("mente",-1,7),new C("amente",13,6),new C("ación",-1,2),new C("ución",-1,4),new C("ico",-1,1),new C("ismo",-1,1),new C("oso",-1,1),new C("amiento",-1,1),new C("imiento",-1,1),new C("ivo",-1,9),new C("ador",-1,2),new C("icas",-1,1),new C("ancias",-1,2),new C("encias",-1,5),new C("adoras",-1,2),new C("osas",-1,1),new C("istas",-1,1),new C("ivas",-1,9),new C("anzas",-1,1),new C("logías",-1,3),new C("idades",-1,8),new C("ables",-1,1),new C("ibles",-1,1),new C("aciones",-1,2),new C("uciones",-1,4),new C("adores",-1,2),new C("antes",-1,2),new C("icos",-1,1),new C("ismos",-1,1),new C("osos",-1,1),new C("amientos",-1,1),new C("imientos",-1,1),new C("ivos",-1,9)],m=[new C("ya",-1,1),new C("ye",-1,1),new C("yan",-1,1),new C("yen",-1,1),new C("yeron",-1,1),new C("yendo",-1,1),new C("yo",-1,1),new C("yas",-1,1),new C("yes",-1,1),new C("yais",-1,1),new C("yamos",-1,1),new C("yó",-1,1)],l=[new C("aba",-1,2),new C("ada",-1,2),new C("ida",-1,2),new C("ara",-1,2),new C("iera",-1,2),new C("ía",-1,2),new C("aría",5,2),new C("ería",5,2),new C("iría",5,2),new C("ad",-1,2),new C("ed",-1,2),new C("id",-1,2),new C("ase",-1,2),new C("iese",-1,2),new C("aste",-1,2),new C("iste",-1,2),new C("an",-1,2),new C("aban",16,2),new C("aran",16,2),new C("ieran",16,2),new C("ían",16,2),new C("arían",20,2),new C("erían",20,2),new C("irían",20,2),new C("en",-1,1),new C("asen",24,2),new C("iesen",24,2),new C("aron",-1,2),new C("ieron",-1,2),new C("arán",-1,2),new C("erán",-1,2),new C("irán",-1,2),new C("ado",-1,2),new C("ido",-1,2),new C("ando",-1,2),new C("iendo",-1,2),new C("ar",-1,2),new C("er",-1,2),new C("ir",-1,2),new C("as",-1,2),new C("abas",39,2),new C("adas",39,2),new C("idas",39,2),new C("aras",39,2),new C("ieras",39,2),new C("ías",39,2),new C("arías",45,2),new C("erías",45,2),new C("irías",45,2),new C("es",-1,1),new C("ases",49,2),new C("ieses",49,2),new C("abais",-1,2),new C("arais",-1,2),new C("ierais",-1,2),new C("íais",-1,2),new C("aríais",55,2),new C("eríais",55,2),new C("iríais",55,2),new C("aseis",-1,2),new C("ieseis",-1,2),new C("asteis",-1,2),new C("isteis",-1,2),new C("áis",-1,2),new C("éis",-1,1),new C("aréis",64,2),new C("eréis",64,2),new C("iréis",64,2),new C("ados",-1,2),new C("idos",-1,2),new C("amos",-1,2),new C("ábamos",70,2),new C("áramos",70,2),new C("iéramos",70,2),new C("íamos",70,2),new C("aríamos",74,2),new C("eríamos",74,2),new C("iríamos",74,2),new C("emos",-1,1),new C("aremos",78,2),new C("eremos",78,2),new C("iremos",78,2),new C("ásemos",78,2),new C("iésemos",78,2),new C("imos",-1,2),new C("arás",-1,2),new C("erás",-1,2),new C("irás",-1,2),new C("ís",-1,2),new C("ará",-1,2),new C("erá",-1,2),new C("irá",-1,2),new C("aré",-1,2),new C("eré",-1,2),new C("iré",-1,2),new C("ió",-1,2)],d=[new C("a",-1,1),new C("e",-1,2),new C("o",-1,1),new C("os",-1,1),new C("á",-1,1),new C("é",-1,2),new C("í",-1,1),new C("ó",-1,1)],b=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,4,10],f=new P;function _(){if(f.out_grouping(b,97,252)){for(;!f.in_grouping(b,97,252);){if(f.cursor>=f.limit)return!0;f.cursor++}return!1}return!0}function h(){var e,s=f.cursor;if(function(){if(f.in_grouping(b,97,252)){var e=f.cursor;if(_()){if(f.cursor=e,!f.in_grouping(b,97,252))return!0;for(;!f.out_grouping(b,97,252);){if(f.cursor>=f.limit)return!0;f.cursor++}}return!1}return!0}()){if(f.cursor=s,!f.out_grouping(b,97,252))return;if(e=f.cursor,_()){if(f.cursor=e,!f.in_grouping(b,97,252)||f.cursor>=f.limit)return;f.cursor++}}i=f.cursor}function v(){for(;!f.in_grouping(b,97,252);){if(f.cursor>=f.limit)return!1;f.cursor++}for(;!f.out_grouping(b,97,252);){if(f.cursor>=f.limit)return!1;f.cursor++}return!0}function p(){return i<=f.cursor}function g(){return r<=f.cursor}function k(e,s){if(!g())return!0;f.slice_del(),f.ket=f.cursor;var r=f.find_among_b(e,s);return r&&(f.bra=f.cursor,1==r&&g()&&f.slice_del()),!1}function y(e){return!g()||(f.slice_del(),f.ket=f.cursor,f.eq_s_b(2,e)&&(f.bra=f.cursor,g()&&f.slice_del()),!1)}function q(){var e;if(f.ket=f.cursor,e=f.find_among_b(c,46)){switch(f.bra=f.cursor,e){case 1:if(!g())return!1;f.slice_del();break;case 2:if(y("ic"))return!1;break;case 3:if(!g())return!1;f.slice_from("log");break;case 4:if(!g())return!1;f.slice_from("u");break;case 5:if(!g())return!1;f.slice_from("ente");break;case 6:if(!(n<=f.cursor))return!1;f.slice_del(),f.ket=f.cursor,(e=f.find_among_b(s,4))&&(f.bra=f.cursor,g()&&(f.slice_del(),1==e&&(f.ket=f.cursor,f.eq_s_b(2,"at")&&(f.bra=f.cursor,g()&&f.slice_del()))));break;case 7:if(k(u,3))return!1;break;case 8:if(k(w,3))return!1;break;case 9:if(y("at"))return!1}return!0}return!1}this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var e,s=f.cursor;return e=f.cursor,i=f.limit,r=n=i,h(),f.cursor=e,v()&&(n=f.cursor,v()&&(r=f.cursor)),f.limit_backward=s,f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,f.find_among_b(t,13)&&(f.bra=f.cursor,(e=f.find_among_b(o,11))&&p()))switch(e){case 1:f.bra=f.cursor,f.slice_from("iendo");break;case 2:f.bra=f.cursor,f.slice_from("ando");break;case 3:f.bra=f.cursor,f.slice_from("ar");break;case 4:f.bra=f.cursor,f.slice_from("er");break;case 5:f.bra=f.cursor,f.slice_from("ir");break;case 6:f.slice_del();break;case 7:f.eq_s_b(1,"u")&&f.slice_del()}}(),f.cursor=f.limit,q()||(f.cursor=f.limit,function(){var e,s;if(f.cursor>=i&&(s=f.limit_backward,f.limit_backward=i,f.ket=f.cursor,e=f.find_among_b(m,12),f.limit_backward=s,e)){if(f.bra=f.cursor,1==e){if(!f.eq_s_b(1,"u"))return!1;f.slice_del()}return!0}return!1}()||(f.cursor=f.limit,function(){var e,s,r,n;if(f.cursor>=i&&(s=f.limit_backward,f.limit_backward=i,f.ket=f.cursor,e=f.find_among_b(l,96),f.limit_backward=s,e))switch(f.bra=f.cursor,e){case 1:r=f.limit-f.cursor,f.eq_s_b(1,"u")?(n=f.limit-f.cursor,f.eq_s_b(1,"g")?f.cursor=f.limit-n:f.cursor=f.limit-r):f.cursor=f.limit-r,f.bra=f.cursor;case 2:f.slice_del()}}())),f.cursor=f.limit,function(){var e,s;if(f.ket=f.cursor,e=f.find_among_b(d,8))switch(f.bra=f.cursor,e){case 1:p()&&f.slice_del();break;case 2:p()&&(f.slice_del(),f.ket=f.cursor,f.eq_s_b(1,"u")&&(f.bra=f.cursor,s=f.limit-f.cursor,f.eq_s_b(1,"g")&&(f.cursor=f.limit-s,p()&&f.slice_del())))}}(),f.cursor=f.limit_backward,function(){for(var e;;){if(f.bra=f.cursor,e=f.find_among(a,6))switch(f.ket=f.cursor,e){case 1:f.slice_from("a");continue;case 2:f.slice_from("e");continue;case 3:f.slice_from("i");continue;case 4:f.slice_from("o");continue;case 5:f.slice_from("u");continue;case 6:if(f.cursor>=f.limit)break;f.cursor++;continue}break}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return s.setCurrent(e),s.stem(),s.getCurrent()}):(s.setCurrent(e),s.stem(),s.getCurrent())}),e.Pipeline.registerFunction(e.es.stemmer,"stemmer-es"),e.es.stopWordFilter=e.generateStopWordFilter("a al algo algunas algunos ante antes como con contra cual cuando de del desde donde durante e el ella ellas ellos en entre era erais eran eras eres es esa esas ese eso esos esta estaba estabais estaban estabas estad estada estadas estado estados estamos estando estar estaremos estará estarán estarás estaré estaréis estaría estaríais estaríamos estarían estarías estas este estemos esto estos estoy estuve estuviera estuvierais estuvieran estuvieras estuvieron estuviese estuvieseis estuviesen estuvieses estuvimos estuviste estuvisteis estuviéramos estuviésemos estuvo está estábamos estáis están estás esté estéis estén estés fue fuera fuerais fueran fueras fueron fuese fueseis fuesen fueses fui fuimos fuiste fuisteis fuéramos fuésemos ha habida habidas habido habidos habiendo habremos habrá habrán habrás habré habréis habría habríais habríamos habrían habrías habéis había habíais habíamos habían habías han has hasta hay haya hayamos hayan hayas hayáis he hemos hube hubiera hubierais hubieran hubieras hubieron hubiese hubieseis hubiesen hubieses hubimos hubiste hubisteis hubiéramos hubiésemos hubo la las le les lo los me mi mis mucho muchos muy más mí mía mías mío míos nada ni no nos nosotras nosotros nuestra nuestras nuestro nuestros o os otra otras otro otros para pero poco por porque que quien quienes qué se sea seamos sean seas seremos será serán serás seré seréis sería seríais seríamos serían serías seáis sido siendo sin sobre sois somos son soy su sus suya suyas suyo suyos sí también tanto te tendremos tendrá tendrán tendrás tendré tendréis tendría tendríais tendríamos tendrían tendrías tened tenemos tenga tengamos tengan tengas tengo tengáis tenida tenidas tenido tenidos teniendo tenéis tenía teníais teníamos tenían tenías ti tiene tienen tienes todo todos tu tus tuve tuviera tuvierais tuvieran tuvieras tuvieron tuviese tuvieseis tuviesen tuvieses tuvimos tuviste tuvisteis tuviéramos tuviésemos tuvo tuya tuyas tuyo tuyos tú un una uno unos vosotras vosotros vuestra vuestras vuestro vuestros y ya yo él éramos".split(" ")),e.Pipeline.registerFunction(e.es.stopWordFilter,"stopWordFilter-es")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/lunr.fi.js b/assets/javascripts/lunr/lunr.fi.js new file mode 100644 index 00000000..2f9bf5ae --- /dev/null +++ b/assets/javascripts/lunr/lunr.fi.js @@ -0,0 +1 @@ +!function(i,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():e()(i.lunr)}(this,function(){return function(i){if(void 0===i)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===i.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var v,C,e;i.fi=function(){this.pipeline.reset(),this.pipeline.add(i.fi.trimmer,i.fi.stopWordFilter,i.fi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(i.fi.stemmer))},i.fi.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",i.fi.trimmer=i.trimmerSupport.generateTrimmer(i.fi.wordCharacters),i.Pipeline.registerFunction(i.fi.trimmer,"trimmer-fi"),i.fi.stemmer=(v=i.stemmerSupport.Among,C=i.stemmerSupport.SnowballProgram,e=new function(){var n,t,l,o,r=[new v("pa",-1,1),new v("sti",-1,2),new v("kaan",-1,1),new v("han",-1,1),new v("kin",-1,1),new v("hän",-1,1),new v("kään",-1,1),new v("ko",-1,1),new v("pä",-1,1),new v("kö",-1,1)],s=[new v("lla",-1,-1),new v("na",-1,-1),new v("ssa",-1,-1),new v("ta",-1,-1),new v("lta",3,-1),new v("sta",3,-1)],a=[new v("llä",-1,-1),new v("nä",-1,-1),new v("ssä",-1,-1),new v("tä",-1,-1),new v("ltä",3,-1),new v("stä",3,-1)],u=[new v("lle",-1,-1),new v("ine",-1,-1)],c=[new v("nsa",-1,3),new v("mme",-1,3),new v("nne",-1,3),new v("ni",-1,2),new v("si",-1,1),new v("an",-1,4),new v("en",-1,6),new v("än",-1,5),new v("nsä",-1,3)],i=[new v("aa",-1,-1),new v("ee",-1,-1),new v("ii",-1,-1),new v("oo",-1,-1),new v("uu",-1,-1),new v("ää",-1,-1),new v("öö",-1,-1)],m=[new v("a",-1,8),new v("lla",0,-1),new v("na",0,-1),new v("ssa",0,-1),new v("ta",0,-1),new v("lta",4,-1),new v("sta",4,-1),new v("tta",4,9),new v("lle",-1,-1),new v("ine",-1,-1),new v("ksi",-1,-1),new v("n",-1,7),new v("han",11,1),new v("den",11,-1,q),new v("seen",11,-1,j),new v("hen",11,2),new v("tten",11,-1,q),new v("hin",11,3),new v("siin",11,-1,q),new v("hon",11,4),new v("hän",11,5),new v("hön",11,6),new v("ä",-1,8),new v("llä",22,-1),new v("nä",22,-1),new v("ssä",22,-1),new v("tä",22,-1),new v("ltä",26,-1),new v("stä",26,-1),new v("ttä",26,9)],w=[new v("eja",-1,-1),new v("mma",-1,1),new v("imma",1,-1),new v("mpa",-1,1),new v("impa",3,-1),new v("mmi",-1,1),new v("immi",5,-1),new v("mpi",-1,1),new v("impi",7,-1),new v("ejä",-1,-1),new v("mmä",-1,1),new v("immä",10,-1),new v("mpä",-1,1),new v("impä",12,-1)],_=[new v("i",-1,-1),new v("j",-1,-1)],k=[new v("mma",-1,1),new v("imma",0,-1)],b=[17,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],e=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],f=[17,97,24,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],h=new C;function p(){for(var i;i=h.cursor,!h.in_grouping(d,97,246);){if((h.cursor=i)>=h.limit)return!0;h.cursor++}for(h.cursor=i;!h.out_grouping(d,97,246);){if(h.cursor>=h.limit)return!0;h.cursor++}return!1}function g(){var i,e;if(h.cursor>=o)if(e=h.limit_backward,h.limit_backward=o,h.ket=h.cursor,i=h.find_among_b(r,10)){switch(h.bra=h.cursor,h.limit_backward=e,i){case 1:if(!h.in_grouping_b(f,97,246))return;break;case 2:if(!(l<=h.cursor))return}h.slice_del()}else h.limit_backward=e}function j(){return h.find_among_b(i,7)}function q(){return h.eq_s_b(1,"i")&&h.in_grouping_b(e,97,246)}this.setCurrent=function(i){h.setCurrent(i)},this.getCurrent=function(){return h.getCurrent()},this.stem=function(){var i,e=h.cursor;return o=h.limit,l=o,p()||(o=h.cursor,p()||(l=h.cursor)),n=!1,h.limit_backward=e,h.cursor=h.limit,g(),h.cursor=h.limit,function(){var i,e,r;if(h.cursor>=o)if(e=h.limit_backward,h.limit_backward=o,h.ket=h.cursor,i=h.find_among_b(c,9))switch(h.bra=h.cursor,h.limit_backward=e,i){case 1:r=h.limit-h.cursor,h.eq_s_b(1,"k")||(h.cursor=h.limit-r,h.slice_del());break;case 2:h.slice_del(),h.ket=h.cursor,h.eq_s_b(3,"kse")&&(h.bra=h.cursor,h.slice_from("ksi"));break;case 3:h.slice_del();break;case 4:h.find_among_b(s,6)&&h.slice_del();break;case 5:h.find_among_b(a,6)&&h.slice_del();break;case 6:h.find_among_b(u,2)&&h.slice_del()}else h.limit_backward=e}(),h.cursor=h.limit,function(){var i,e,r;if(h.cursor>=o)if(e=h.limit_backward,h.limit_backward=o,h.ket=h.cursor,i=h.find_among_b(m,30)){switch(h.bra=h.cursor,h.limit_backward=e,i){case 1:if(!h.eq_s_b(1,"a"))return;break;case 2:case 9:if(!h.eq_s_b(1,"e"))return;break;case 3:if(!h.eq_s_b(1,"i"))return;break;case 4:if(!h.eq_s_b(1,"o"))return;break;case 5:if(!h.eq_s_b(1,"ä"))return;break;case 6:if(!h.eq_s_b(1,"ö"))return;break;case 7:if(r=h.limit-h.cursor,!j()&&(h.cursor=h.limit-r,!h.eq_s_b(2,"ie"))){h.cursor=h.limit-r;break}if(h.cursor=h.limit-r,h.cursor<=h.limit_backward){h.cursor=h.limit-r;break}h.cursor--,h.bra=h.cursor;break;case 8:if(!h.in_grouping_b(d,97,246)||!h.out_grouping_b(d,97,246))return}h.slice_del(),n=!0}else h.limit_backward=e}(),h.cursor=h.limit,function(){var i,e,r;if(h.cursor>=l)if(e=h.limit_backward,h.limit_backward=l,h.ket=h.cursor,i=h.find_among_b(w,14)){if(h.bra=h.cursor,h.limit_backward=e,1==i){if(r=h.limit-h.cursor,h.eq_s_b(2,"po"))return;h.cursor=h.limit-r}h.slice_del()}else h.limit_backward=e}(),h.cursor=h.limit,h.cursor=(n?h.cursor>=o&&(i=h.limit_backward,h.limit_backward=o,h.ket=h.cursor,h.find_among_b(_,2)?(h.bra=h.cursor,h.limit_backward=i,h.slice_del()):h.limit_backward=i):(h.cursor=h.limit,function(){var i,e,r,n,t,s;if(h.cursor>=o){if(e=h.limit_backward,h.limit_backward=o,h.ket=h.cursor,h.eq_s_b(1,"t")&&(h.bra=h.cursor,r=h.limit-h.cursor,h.in_grouping_b(d,97,246)&&(h.cursor=h.limit-r,h.slice_del(),h.limit_backward=e,n=h.limit-h.cursor,h.cursor>=l&&(h.cursor=l,t=h.limit_backward,h.limit_backward=h.cursor,h.cursor=h.limit-n,h.ket=h.cursor,i=h.find_among_b(k,2))))){if(h.bra=h.cursor,h.limit_backward=t,1==i){if(s=h.limit-h.cursor,h.eq_s_b(2,"po"))return;h.cursor=h.limit-s}return h.slice_del()}h.limit_backward=e}}()),h.limit),function(){var i,e,r,n;if(h.cursor>=o){for(i=h.limit_backward,h.limit_backward=o,e=h.limit-h.cursor,j()&&(h.cursor=h.limit-e,h.ket=h.cursor,h.cursor>h.limit_backward&&(h.cursor--,h.bra=h.cursor,h.slice_del())),h.cursor=h.limit-e,h.ket=h.cursor,h.in_grouping_b(b,97,228)&&(h.bra=h.cursor,h.out_grouping_b(d,97,246)&&h.slice_del()),h.cursor=h.limit-e,h.ket=h.cursor,h.eq_s_b(1,"j")&&(h.bra=h.cursor,r=h.limit-h.cursor,h.eq_s_b(1,"o")?h.slice_del():(h.cursor=h.limit-r,h.eq_s_b(1,"u")&&h.slice_del())),h.cursor=h.limit-e,h.ket=h.cursor,h.eq_s_b(1,"o")&&(h.bra=h.cursor,h.eq_s_b(1,"j")&&h.slice_del()),h.cursor=h.limit-e,h.limit_backward=i;;){if(n=h.limit-h.cursor,h.out_grouping_b(d,97,246)){h.cursor=h.limit-n;break}if(h.cursor=h.limit-n,h.cursor<=h.limit_backward)return;h.cursor--}h.ket=h.cursor,h.cursor>h.limit_backward&&(h.cursor--,h.bra=h.cursor,t=h.slice_to(),h.eq_v_b(t)&&h.slice_del())}}(),!0}},function(i){return"function"==typeof i.update?i.update(function(i){return e.setCurrent(i),e.stem(),e.getCurrent()}):(e.setCurrent(i),e.stem(),e.getCurrent())}),i.Pipeline.registerFunction(i.fi.stemmer,"stemmer-fi"),i.fi.stopWordFilter=i.generateStopWordFilter("ei eivät emme en et ette että he heidän heidät heihin heille heillä heiltä heissä heistä heitä hän häneen hänelle hänellä häneltä hänen hänessä hänestä hänet häntä itse ja johon joiden joihin joiksi joilla joille joilta joina joissa joista joita joka joksi jolla jolle jolta jona jonka jos jossa josta jota jotka kanssa keiden keihin keiksi keille keillä keiltä keinä keissä keistä keitä keneen keneksi kenelle kenellä keneltä kenen kenenä kenessä kenestä kenet ketkä ketkä ketä koska kuin kuka kun me meidän meidät meihin meille meillä meiltä meissä meistä meitä mihin miksi mikä mille millä miltä minkä minkä minua minulla minulle minulta minun minussa minusta minut minuun minä minä missä mistä mitkä mitä mukaan mutta ne niiden niihin niiksi niille niillä niiltä niin niin niinä niissä niistä niitä noiden noihin noiksi noilla noille noilta noin noina noissa noista noita nuo nyt näiden näihin näiksi näille näillä näiltä näinä näissä näistä näitä nämä ole olemme olen olet olette oli olimme olin olisi olisimme olisin olisit olisitte olisivat olit olitte olivat olla olleet ollut on ovat poikki se sekä sen siihen siinä siitä siksi sille sillä sillä siltä sinua sinulla sinulle sinulta sinun sinussa sinusta sinut sinuun sinä sinä sitä tai te teidän teidät teihin teille teillä teiltä teissä teistä teitä tuo tuohon tuoksi tuolla tuolle tuolta tuon tuona tuossa tuosta tuota tähän täksi tälle tällä tältä tämä tämän tänä tässä tästä tätä vaan vai vaikka yli".split(" ")),i.Pipeline.registerFunction(i.fi.stopWordFilter,"stopWordFilter-fi")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/lunr.fr.js b/assets/javascripts/lunr/lunr.fr.js new file mode 100644 index 00000000..078d0cab --- /dev/null +++ b/assets/javascripts/lunr/lunr.fr.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,y,s;e.fr=function(){this.pipeline.reset(),this.pipeline.add(e.fr.trimmer,e.fr.stopWordFilter,e.fr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.fr.stemmer))},e.fr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.fr.trimmer=e.trimmerSupport.generateTrimmer(e.fr.wordCharacters),e.Pipeline.registerFunction(e.fr.trimmer,"trimmer-fr"),e.fr.stemmer=(r=e.stemmerSupport.Among,y=e.stemmerSupport.SnowballProgram,s=new function(){var s,i,t,n=[new r("col",-1,-1),new r("par",-1,-1),new r("tap",-1,-1)],u=[new r("",-1,4),new r("I",0,1),new r("U",0,2),new r("Y",0,3)],o=[new r("iqU",-1,3),new r("abl",-1,3),new r("Ièr",-1,4),new r("ièr",-1,4),new r("eus",-1,2),new r("iv",-1,1)],c=[new r("ic",-1,2),new r("abil",-1,1),new r("iv",-1,3)],a=[new r("iqUe",-1,1),new r("atrice",-1,2),new r("ance",-1,1),new r("ence",-1,5),new r("logie",-1,3),new r("able",-1,1),new r("isme",-1,1),new r("euse",-1,11),new r("iste",-1,1),new r("ive",-1,8),new r("if",-1,8),new r("usion",-1,4),new r("ation",-1,2),new r("ution",-1,4),new r("ateur",-1,2),new r("iqUes",-1,1),new r("atrices",-1,2),new r("ances",-1,1),new r("ences",-1,5),new r("logies",-1,3),new r("ables",-1,1),new r("ismes",-1,1),new r("euses",-1,11),new r("istes",-1,1),new r("ives",-1,8),new r("ifs",-1,8),new r("usions",-1,4),new r("ations",-1,2),new r("utions",-1,4),new r("ateurs",-1,2),new r("ments",-1,15),new r("ements",30,6),new r("issements",31,12),new r("ités",-1,7),new r("ment",-1,15),new r("ement",34,6),new r("issement",35,12),new r("amment",34,13),new r("emment",34,14),new r("aux",-1,10),new r("eaux",39,9),new r("eux",-1,1),new r("ité",-1,7)],l=[new r("ira",-1,1),new r("ie",-1,1),new r("isse",-1,1),new r("issante",-1,1),new r("i",-1,1),new r("irai",4,1),new r("ir",-1,1),new r("iras",-1,1),new r("ies",-1,1),new r("îmes",-1,1),new r("isses",-1,1),new r("issantes",-1,1),new r("îtes",-1,1),new r("is",-1,1),new r("irais",13,1),new r("issais",13,1),new r("irions",-1,1),new r("issions",-1,1),new r("irons",-1,1),new r("issons",-1,1),new r("issants",-1,1),new r("it",-1,1),new r("irait",21,1),new r("issait",21,1),new r("issant",-1,1),new r("iraIent",-1,1),new r("issaIent",-1,1),new r("irent",-1,1),new r("issent",-1,1),new r("iront",-1,1),new r("ît",-1,1),new r("iriez",-1,1),new r("issiez",-1,1),new r("irez",-1,1),new r("issez",-1,1)],w=[new r("a",-1,3),new r("era",0,2),new r("asse",-1,3),new r("ante",-1,3),new r("ée",-1,2),new r("ai",-1,3),new r("erai",5,2),new r("er",-1,2),new r("as",-1,3),new r("eras",8,2),new r("âmes",-1,3),new r("asses",-1,3),new r("antes",-1,3),new r("âtes",-1,3),new r("ées",-1,2),new r("ais",-1,3),new r("erais",15,2),new r("ions",-1,1),new r("erions",17,2),new r("assions",17,3),new r("erons",-1,2),new r("ants",-1,3),new r("és",-1,2),new r("ait",-1,3),new r("erait",23,2),new r("ant",-1,3),new r("aIent",-1,3),new r("eraIent",26,2),new r("èrent",-1,2),new r("assent",-1,3),new r("eront",-1,2),new r("ât",-1,3),new r("ez",-1,2),new r("iez",32,2),new r("eriez",33,2),new r("assiez",33,3),new r("erez",32,2),new r("é",-1,2)],f=[new r("e",-1,3),new r("Ière",0,2),new r("ière",0,2),new r("ion",-1,1),new r("Ier",-1,2),new r("ier",-1,2),new r("ë",-1,4)],m=[new r("ell",-1,-1),new r("eill",-1,-1),new r("enn",-1,-1),new r("onn",-1,-1),new r("ett",-1,-1)],_=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,128,130,103,8,5],b=[1,65,20,0,0,0,0,0,0,0,0,0,0,0,0,0,128],d=new y;function k(e,r,s){return!(!d.eq_s(1,e)||(d.ket=d.cursor,!d.in_grouping(_,97,251)))&&(d.slice_from(r),d.cursor=s,!0)}function p(e,r,s){return!!d.eq_s(1,e)&&(d.ket=d.cursor,d.slice_from(r),d.cursor=s,!0)}function g(){for(;!d.in_grouping(_,97,251);){if(d.cursor>=d.limit)return!0;d.cursor++}for(;!d.out_grouping(_,97,251);){if(d.cursor>=d.limit)return!0;d.cursor++}return!1}function q(){return t<=d.cursor}function v(){return i<=d.cursor}function h(){return s<=d.cursor}function z(){if(!function(){var e,r;if(d.ket=d.cursor,e=d.find_among_b(a,43)){switch(d.bra=d.cursor,e){case 1:if(!h())return!1;d.slice_del();break;case 2:if(!h())return!1;d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"ic")&&(d.bra=d.cursor,h()?d.slice_del():d.slice_from("iqU"));break;case 3:if(!h())return!1;d.slice_from("log");break;case 4:if(!h())return!1;d.slice_from("u");break;case 5:if(!h())return!1;d.slice_from("ent");break;case 6:if(!q())return!1;if(d.slice_del(),d.ket=d.cursor,e=d.find_among_b(o,6))switch(d.bra=d.cursor,e){case 1:h()&&(d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"at")&&(d.bra=d.cursor,h()&&d.slice_del()));break;case 2:h()?d.slice_del():v()&&d.slice_from("eux");break;case 3:h()&&d.slice_del();break;case 4:q()&&d.slice_from("i")}break;case 7:if(!h())return!1;if(d.slice_del(),d.ket=d.cursor,e=d.find_among_b(c,3))switch(d.bra=d.cursor,e){case 1:h()?d.slice_del():d.slice_from("abl");break;case 2:h()?d.slice_del():d.slice_from("iqU");break;case 3:h()&&d.slice_del()}break;case 8:if(!h())return!1;if(d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"at")&&(d.bra=d.cursor,h()&&(d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"ic")))){d.bra=d.cursor,h()?d.slice_del():d.slice_from("iqU");break}break;case 9:d.slice_from("eau");break;case 10:if(!v())return!1;d.slice_from("al");break;case 11:if(h())d.slice_del();else{if(!v())return!1;d.slice_from("eux")}break;case 12:if(!v()||!d.out_grouping_b(_,97,251))return!1;d.slice_del();break;case 13:return q()&&d.slice_from("ant"),!1;case 14:return q()&&d.slice_from("ent"),!1;case 15:return r=d.limit-d.cursor,d.in_grouping_b(_,97,251)&&q()&&(d.cursor=d.limit-r,d.slice_del()),!1}return!0}return!1}()&&(d.cursor=d.limit,!function(){var e,r;if(d.cursor=t){if(s=d.limit_backward,d.limit_backward=t,d.ket=d.cursor,e=d.find_among_b(f,7))switch(d.bra=d.cursor,e){case 1:if(h()){if(i=d.limit-d.cursor,!d.eq_s_b(1,"s")&&(d.cursor=d.limit-i,!d.eq_s_b(1,"t")))break;d.slice_del()}break;case 2:d.slice_from("i");break;case 3:d.slice_del();break;case 4:d.eq_s_b(2,"gu")&&d.slice_del()}d.limit_backward=s}}();d.cursor=d.limit,d.ket=d.cursor,d.eq_s_b(1,"Y")?(d.bra=d.cursor,d.slice_from("i")):(d.cursor=d.limit,d.eq_s_b(1,"ç")&&(d.bra=d.cursor,d.slice_from("c")))}this.setCurrent=function(e){d.setCurrent(e)},this.getCurrent=function(){return d.getCurrent()},this.stem=function(){var e,r=d.cursor;return function(){for(var e,r;;){if(e=d.cursor,d.in_grouping(_,97,251)){if(d.bra=d.cursor,r=d.cursor,k("u","U",e))continue;if(d.cursor=r,k("i","I",e))continue;if(d.cursor=r,p("y","Y",e))continue}if(d.cursor=e,!k("y","Y",d.bra=e)){if(d.cursor=e,d.eq_s(1,"q")&&(d.bra=d.cursor,p("u","U",e)))continue;if((d.cursor=e)>=d.limit)return;d.cursor++}}}(),d.cursor=r,function(){var e=d.cursor;if(t=d.limit,s=i=t,d.in_grouping(_,97,251)&&d.in_grouping(_,97,251)&&d.cursor=d.limit){d.cursor=t;break}d.cursor++}while(!d.in_grouping(_,97,251))}t=d.cursor,d.cursor=e,g()||(i=d.cursor,g()||(s=d.cursor))}(),d.limit_backward=r,d.cursor=d.limit,z(),d.cursor=d.limit,e=d.limit-d.cursor,d.find_among_b(m,5)&&(d.cursor=d.limit-e,d.ket=d.cursor,d.cursor>d.limit_backward&&(d.cursor--,d.bra=d.cursor,d.slice_del())),d.cursor=d.limit,function(){for(var e,r=1;d.out_grouping_b(_,97,251);)r--;if(r<=0){if(d.ket=d.cursor,e=d.limit-d.cursor,!d.eq_s_b(1,"é")&&(d.cursor=d.limit-e,!d.eq_s_b(1,"è")))return;d.bra=d.cursor,d.slice_from("e")}}(),d.cursor=d.limit_backward,function(){for(var e,r;r=d.cursor,d.bra=r,e=d.find_among(u,4);)switch(d.ket=d.cursor,e){case 1:d.slice_from("i");break;case 2:d.slice_from("u");break;case 3:d.slice_from("y");break;case 4:if(d.cursor>=d.limit)return;d.cursor++}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return s.setCurrent(e),s.stem(),s.getCurrent()}):(s.setCurrent(e),s.stem(),s.getCurrent())}),e.Pipeline.registerFunction(e.fr.stemmer,"stemmer-fr"),e.fr.stopWordFilter=e.generateStopWordFilter("ai aie aient aies ait as au aura aurai auraient aurais aurait auras aurez auriez aurions aurons auront aux avaient avais avait avec avez aviez avions avons ayant ayez ayons c ce ceci celà ces cet cette d dans de des du elle en es est et eu eue eues eurent eus eusse eussent eusses eussiez eussions eut eux eûmes eût eûtes furent fus fusse fussent fusses fussiez fussions fut fûmes fût fûtes ici il ils j je l la le les leur leurs lui m ma mais me mes moi mon même n ne nos notre nous on ont ou par pas pour qu que quel quelle quelles quels qui s sa sans se sera serai seraient serais serait seras serez seriez serions serons seront ses soi soient sois soit sommes son sont soyez soyons suis sur t ta te tes toi ton tu un une vos votre vous y à étaient étais était étant étiez étions été étée étées étés êtes".split(" ")),e.Pipeline.registerFunction(e.fr.stopWordFilter,"stopWordFilter-fr")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/lunr.hu.js b/assets/javascripts/lunr/lunr.hu.js new file mode 100644 index 00000000..56a4b0dc --- /dev/null +++ b/assets/javascripts/lunr/lunr.hu.js @@ -0,0 +1 @@ +!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var p,_,n;e.hu=function(){this.pipeline.reset(),this.pipeline.add(e.hu.trimmer,e.hu.stopWordFilter,e.hu.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hu.stemmer))},e.hu.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.hu.trimmer=e.trimmerSupport.generateTrimmer(e.hu.wordCharacters),e.Pipeline.registerFunction(e.hu.trimmer,"trimmer-hu"),e.hu.stemmer=(p=e.stemmerSupport.Among,_=e.stemmerSupport.SnowballProgram,n=new function(){var r,i=[new p("cs",-1,-1),new p("dzs",-1,-1),new p("gy",-1,-1),new p("ly",-1,-1),new p("ny",-1,-1),new p("sz",-1,-1),new p("ty",-1,-1),new p("zs",-1,-1)],n=[new p("á",-1,1),new p("é",-1,2)],a=[new p("bb",-1,-1),new p("cc",-1,-1),new p("dd",-1,-1),new p("ff",-1,-1),new p("gg",-1,-1),new p("jj",-1,-1),new p("kk",-1,-1),new p("ll",-1,-1),new p("mm",-1,-1),new p("nn",-1,-1),new p("pp",-1,-1),new p("rr",-1,-1),new p("ccs",-1,-1),new p("ss",-1,-1),new p("zzs",-1,-1),new p("tt",-1,-1),new p("vv",-1,-1),new p("ggy",-1,-1),new p("lly",-1,-1),new p("nny",-1,-1),new p("tty",-1,-1),new p("ssz",-1,-1),new p("zz",-1,-1)],t=[new p("al",-1,1),new p("el",-1,2)],e=[new p("ba",-1,-1),new p("ra",-1,-1),new p("be",-1,-1),new p("re",-1,-1),new p("ig",-1,-1),new p("nak",-1,-1),new p("nek",-1,-1),new p("val",-1,-1),new p("vel",-1,-1),new p("ul",-1,-1),new p("nál",-1,-1),new p("nél",-1,-1),new p("ból",-1,-1),new p("ról",-1,-1),new p("tól",-1,-1),new p("bõl",-1,-1),new p("rõl",-1,-1),new p("tõl",-1,-1),new p("ül",-1,-1),new p("n",-1,-1),new p("an",19,-1),new p("ban",20,-1),new p("en",19,-1),new p("ben",22,-1),new p("képpen",22,-1),new p("on",19,-1),new p("ön",19,-1),new p("képp",-1,-1),new p("kor",-1,-1),new p("t",-1,-1),new p("at",29,-1),new p("et",29,-1),new p("ként",29,-1),new p("anként",32,-1),new p("enként",32,-1),new p("onként",32,-1),new p("ot",29,-1),new p("ért",29,-1),new p("öt",29,-1),new p("hez",-1,-1),new p("hoz",-1,-1),new p("höz",-1,-1),new p("vá",-1,-1),new p("vé",-1,-1)],s=[new p("án",-1,2),new p("én",-1,1),new p("ánként",-1,3)],c=[new p("stul",-1,2),new p("astul",0,1),new p("ástul",0,3),new p("stül",-1,2),new p("estül",3,1),new p("éstül",3,4)],w=[new p("á",-1,1),new p("é",-1,2)],o=[new p("k",-1,7),new p("ak",0,4),new p("ek",0,6),new p("ok",0,5),new p("ák",0,1),new p("ék",0,2),new p("ök",0,3)],l=[new p("éi",-1,7),new p("áéi",0,6),new p("ééi",0,5),new p("é",-1,9),new p("ké",3,4),new p("aké",4,1),new p("eké",4,1),new p("oké",4,1),new p("áké",4,3),new p("éké",4,2),new p("öké",4,1),new p("éé",3,8)],u=[new p("a",-1,18),new p("ja",0,17),new p("d",-1,16),new p("ad",2,13),new p("ed",2,13),new p("od",2,13),new p("ád",2,14),new p("éd",2,15),new p("öd",2,13),new p("e",-1,18),new p("je",9,17),new p("nk",-1,4),new p("unk",11,1),new p("ánk",11,2),new p("énk",11,3),new p("ünk",11,1),new p("uk",-1,8),new p("juk",16,7),new p("ájuk",17,5),new p("ük",-1,8),new p("jük",19,7),new p("éjük",20,6),new p("m",-1,12),new p("am",22,9),new p("em",22,9),new p("om",22,9),new p("ám",22,10),new p("ém",22,11),new p("o",-1,18),new p("á",-1,19),new p("é",-1,20)],m=[new p("id",-1,10),new p("aid",0,9),new p("jaid",1,6),new p("eid",0,9),new p("jeid",3,6),new p("áid",0,7),new p("éid",0,8),new p("i",-1,15),new p("ai",7,14),new p("jai",8,11),new p("ei",7,14),new p("jei",10,11),new p("ái",7,12),new p("éi",7,13),new p("itek",-1,24),new p("eitek",14,21),new p("jeitek",15,20),new p("éitek",14,23),new p("ik",-1,29),new p("aik",18,26),new p("jaik",19,25),new p("eik",18,26),new p("jeik",21,25),new p("áik",18,27),new p("éik",18,28),new p("ink",-1,20),new p("aink",25,17),new p("jaink",26,16),new p("eink",25,17),new p("jeink",28,16),new p("áink",25,18),new p("éink",25,19),new p("aitok",-1,21),new p("jaitok",32,20),new p("áitok",-1,22),new p("im",-1,5),new p("aim",35,4),new p("jaim",36,1),new p("eim",35,4),new p("jeim",38,1),new p("áim",35,2),new p("éim",35,3)],k=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,52,14],f=new _;function b(){return r<=f.cursor}function d(){var e=f.limit-f.cursor;return!!f.find_among_b(a,23)&&(f.cursor=f.limit-e,!0)}function g(){if(f.cursor>f.limit_backward){f.cursor--,f.ket=f.cursor;var e=f.cursor-1;f.limit_backward<=e&&e<=f.limit&&(f.cursor=e,f.bra=e,f.slice_del())}}function h(){f.ket=f.cursor,f.find_among_b(e,44)&&(f.bra=f.cursor,b()&&(f.slice_del(),function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(n,2))&&(f.bra=f.cursor,b()))switch(e){case 1:f.slice_from("a");break;case 2:f.slice_from("e")}}()))}this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var e=f.cursor;return function(){var e,n=f.cursor;if(r=f.limit,f.in_grouping(k,97,252))for(;;){if(e=f.cursor,f.out_grouping(k,97,252))return f.cursor=e,f.find_among(i,8)||(f.cursor=e)=f.limit)return r=e;f.cursor++}if(f.cursor=n,f.out_grouping(k,97,252)){for(;!f.in_grouping(k,97,252);){if(f.cursor>=f.limit)return;f.cursor++}r=f.cursor}}(),f.limit_backward=e,f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(t,2))&&(f.bra=f.cursor,b())){if((1==e||2==e)&&!d())return;f.slice_del(),g()}}(),f.cursor=f.limit,h(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(s,3))&&(f.bra=f.cursor,b()))switch(e){case 1:f.slice_from("e");break;case 2:case 3:f.slice_from("a")}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(c,6))&&(f.bra=f.cursor,b()))switch(e){case 1:case 2:f.slice_del();break;case 3:f.slice_from("a");break;case 4:f.slice_from("e")}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(w,2))&&(f.bra=f.cursor,b())){if((1==e||2==e)&&!d())return;f.slice_del(),g()}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(l,12))&&(f.bra=f.cursor,b()))switch(e){case 1:case 4:case 7:case 9:f.slice_del();break;case 2:case 5:case 8:f.slice_from("e");break;case 3:case 6:f.slice_from("a")}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(u,31))&&(f.bra=f.cursor,b()))switch(e){case 1:case 4:case 7:case 8:case 9:case 12:case 13:case 16:case 17:case 18:f.slice_del();break;case 2:case 5:case 10:case 14:case 19:f.slice_from("a");break;case 3:case 6:case 11:case 15:case 20:f.slice_from("e")}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(m,42))&&(f.bra=f.cursor,b()))switch(e){case 1:case 4:case 5:case 6:case 9:case 10:case 11:case 14:case 15:case 16:case 17:case 20:case 21:case 24:case 25:case 26:case 29:f.slice_del();break;case 2:case 7:case 12:case 18:case 22:case 27:f.slice_from("a");break;case 3:case 8:case 13:case 19:case 23:case 28:f.slice_from("e")}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(o,7))&&(f.bra=f.cursor,b()))switch(e){case 1:f.slice_from("a");break;case 2:f.slice_from("e");break;case 3:case 4:case 5:case 6:case 7:f.slice_del()}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}),e.Pipeline.registerFunction(e.hu.stemmer,"stemmer-hu"),e.hu.stopWordFilter=e.generateStopWordFilter("a abban ahhoz ahogy ahol aki akik akkor alatt amely amelyek amelyekben amelyeket amelyet amelynek ami amikor amit amolyan amíg annak arra arról az azok azon azonban azt aztán azután azzal azért be belül benne bár cikk cikkek cikkeket csak de e ebben eddig egy egyes egyetlen egyik egyre egyéb egész ehhez ekkor el ellen elsõ elég elõ elõször elõtt emilyen ennek erre ez ezek ezen ezt ezzel ezért fel felé hanem hiszen hogy hogyan igen ill ill. illetve ilyen ilyenkor ismét ison itt jobban jó jól kell kellett keressünk keresztül ki kívül között közül legalább legyen lehet lehetett lenne lenni lesz lett maga magát majd majd meg mellett mely melyek mert mi mikor milyen minden mindenki mindent mindig mint mintha mit mivel miért most már más másik még míg nagy nagyobb nagyon ne nekem neki nem nincs néha néhány nélkül olyan ott pedig persze rá s saját sem semmi sok sokat sokkal szemben szerint szinte számára talán tehát teljes tovább továbbá több ugyanis utolsó után utána vagy vagyis vagyok valaki valami valamint való van vannak vele vissza viszont volna volt voltak voltam voltunk által általában át én éppen és így õ õk õket össze úgy új újabb újra".split(" ")),e.Pipeline.registerFunction(e.hu.stopWordFilter,"stopWordFilter-hu")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/lunr.it.js b/assets/javascripts/lunr/lunr.it.js new file mode 100644 index 00000000..50dddaa0 --- /dev/null +++ b/assets/javascripts/lunr/lunr.it.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var z,P,r;e.it=function(){this.pipeline.reset(),this.pipeline.add(e.it.trimmer,e.it.stopWordFilter,e.it.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.it.stemmer))},e.it.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.it.trimmer=e.trimmerSupport.generateTrimmer(e.it.wordCharacters),e.Pipeline.registerFunction(e.it.trimmer,"trimmer-it"),e.it.stemmer=(z=e.stemmerSupport.Among,P=e.stemmerSupport.SnowballProgram,r=new function(){var o,t,s,a=[new z("",-1,7),new z("qu",0,6),new z("á",0,1),new z("é",0,2),new z("í",0,3),new z("ó",0,4),new z("ú",0,5)],u=[new z("",-1,3),new z("I",0,1),new z("U",0,2)],c=[new z("la",-1,-1),new z("cela",0,-1),new z("gliela",0,-1),new z("mela",0,-1),new z("tela",0,-1),new z("vela",0,-1),new z("le",-1,-1),new z("cele",6,-1),new z("gliele",6,-1),new z("mele",6,-1),new z("tele",6,-1),new z("vele",6,-1),new z("ne",-1,-1),new z("cene",12,-1),new z("gliene",12,-1),new z("mene",12,-1),new z("sene",12,-1),new z("tene",12,-1),new z("vene",12,-1),new z("ci",-1,-1),new z("li",-1,-1),new z("celi",20,-1),new z("glieli",20,-1),new z("meli",20,-1),new z("teli",20,-1),new z("veli",20,-1),new z("gli",20,-1),new z("mi",-1,-1),new z("si",-1,-1),new z("ti",-1,-1),new z("vi",-1,-1),new z("lo",-1,-1),new z("celo",31,-1),new z("glielo",31,-1),new z("melo",31,-1),new z("telo",31,-1),new z("velo",31,-1)],w=[new z("ando",-1,1),new z("endo",-1,1),new z("ar",-1,2),new z("er",-1,2),new z("ir",-1,2)],r=[new z("ic",-1,-1),new z("abil",-1,-1),new z("os",-1,-1),new z("iv",-1,1)],n=[new z("ic",-1,1),new z("abil",-1,1),new z("iv",-1,1)],i=[new z("ica",-1,1),new z("logia",-1,3),new z("osa",-1,1),new z("ista",-1,1),new z("iva",-1,9),new z("anza",-1,1),new z("enza",-1,5),new z("ice",-1,1),new z("atrice",7,1),new z("iche",-1,1),new z("logie",-1,3),new z("abile",-1,1),new z("ibile",-1,1),new z("usione",-1,4),new z("azione",-1,2),new z("uzione",-1,4),new z("atore",-1,2),new z("ose",-1,1),new z("ante",-1,1),new z("mente",-1,1),new z("amente",19,7),new z("iste",-1,1),new z("ive",-1,9),new z("anze",-1,1),new z("enze",-1,5),new z("ici",-1,1),new z("atrici",25,1),new z("ichi",-1,1),new z("abili",-1,1),new z("ibili",-1,1),new z("ismi",-1,1),new z("usioni",-1,4),new z("azioni",-1,2),new z("uzioni",-1,4),new z("atori",-1,2),new z("osi",-1,1),new z("anti",-1,1),new z("amenti",-1,6),new z("imenti",-1,6),new z("isti",-1,1),new z("ivi",-1,9),new z("ico",-1,1),new z("ismo",-1,1),new z("oso",-1,1),new z("amento",-1,6),new z("imento",-1,6),new z("ivo",-1,9),new z("ità",-1,8),new z("istà",-1,1),new z("istè",-1,1),new z("istì",-1,1)],l=[new z("isca",-1,1),new z("enda",-1,1),new z("ata",-1,1),new z("ita",-1,1),new z("uta",-1,1),new z("ava",-1,1),new z("eva",-1,1),new z("iva",-1,1),new z("erebbe",-1,1),new z("irebbe",-1,1),new z("isce",-1,1),new z("ende",-1,1),new z("are",-1,1),new z("ere",-1,1),new z("ire",-1,1),new z("asse",-1,1),new z("ate",-1,1),new z("avate",16,1),new z("evate",16,1),new z("ivate",16,1),new z("ete",-1,1),new z("erete",20,1),new z("irete",20,1),new z("ite",-1,1),new z("ereste",-1,1),new z("ireste",-1,1),new z("ute",-1,1),new z("erai",-1,1),new z("irai",-1,1),new z("isci",-1,1),new z("endi",-1,1),new z("erei",-1,1),new z("irei",-1,1),new z("assi",-1,1),new z("ati",-1,1),new z("iti",-1,1),new z("eresti",-1,1),new z("iresti",-1,1),new z("uti",-1,1),new z("avi",-1,1),new z("evi",-1,1),new z("ivi",-1,1),new z("isco",-1,1),new z("ando",-1,1),new z("endo",-1,1),new z("Yamo",-1,1),new z("iamo",-1,1),new z("avamo",-1,1),new z("evamo",-1,1),new z("ivamo",-1,1),new z("eremo",-1,1),new z("iremo",-1,1),new z("assimo",-1,1),new z("ammo",-1,1),new z("emmo",-1,1),new z("eremmo",54,1),new z("iremmo",54,1),new z("immo",-1,1),new z("ano",-1,1),new z("iscano",58,1),new z("avano",58,1),new z("evano",58,1),new z("ivano",58,1),new z("eranno",-1,1),new z("iranno",-1,1),new z("ono",-1,1),new z("iscono",65,1),new z("arono",65,1),new z("erono",65,1),new z("irono",65,1),new z("erebbero",-1,1),new z("irebbero",-1,1),new z("assero",-1,1),new z("essero",-1,1),new z("issero",-1,1),new z("ato",-1,1),new z("ito",-1,1),new z("uto",-1,1),new z("avo",-1,1),new z("evo",-1,1),new z("ivo",-1,1),new z("ar",-1,1),new z("ir",-1,1),new z("erà",-1,1),new z("irà",-1,1),new z("erò",-1,1),new z("irò",-1,1)],m=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2,1],f=[17,65,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2],v=[17],b=new P;function d(e,r,n){return!(!b.eq_s(1,e)||(b.ket=b.cursor,!b.in_grouping(m,97,249)))&&(b.slice_from(r),b.cursor=n,!0)}function _(e){if(b.cursor=e,!b.in_grouping(m,97,249))return!1;for(;!b.out_grouping(m,97,249);){if(b.cursor>=b.limit)return!1;b.cursor++}return!0}function g(){var e,r=b.cursor;if(!function(){if(b.in_grouping(m,97,249)){var e=b.cursor;if(b.out_grouping(m,97,249)){for(;!b.in_grouping(m,97,249);){if(b.cursor>=b.limit)return _(e);b.cursor++}return!0}return _(e)}return!1}()){if(b.cursor=r,!b.out_grouping(m,97,249))return;if(e=b.cursor,b.out_grouping(m,97,249)){for(;!b.in_grouping(m,97,249);){if(b.cursor>=b.limit)return b.cursor=e,void(b.in_grouping(m,97,249)&&b.cursor=b.limit)return;b.cursor++}s=b.cursor}function p(){for(;!b.in_grouping(m,97,249);){if(b.cursor>=b.limit)return!1;b.cursor++}for(;!b.out_grouping(m,97,249);){if(b.cursor>=b.limit)return!1;b.cursor++}return!0}function k(){return s<=b.cursor}function h(){return o<=b.cursor}function q(){var e;if(b.ket=b.cursor,!(e=b.find_among_b(i,51)))return!1;switch(b.bra=b.cursor,e){case 1:if(!h())return!1;b.slice_del();break;case 2:if(!h())return!1;b.slice_del(),b.ket=b.cursor,b.eq_s_b(2,"ic")&&(b.bra=b.cursor,h()&&b.slice_del());break;case 3:if(!h())return!1;b.slice_from("log");break;case 4:if(!h())return!1;b.slice_from("u");break;case 5:if(!h())return!1;b.slice_from("ente");break;case 6:if(!k())return!1;b.slice_del();break;case 7:if(!(t<=b.cursor))return!1;b.slice_del(),b.ket=b.cursor,(e=b.find_among_b(r,4))&&(b.bra=b.cursor,h()&&(b.slice_del(),1==e&&(b.ket=b.cursor,b.eq_s_b(2,"at")&&(b.bra=b.cursor,h()&&b.slice_del()))));break;case 8:if(!h())return!1;b.slice_del(),b.ket=b.cursor,(e=b.find_among_b(n,3))&&(b.bra=b.cursor,1==e&&h()&&b.slice_del());break;case 9:if(!h())return!1;b.slice_del(),b.ket=b.cursor,b.eq_s_b(2,"at")&&(b.bra=b.cursor,h()&&(b.slice_del(),b.ket=b.cursor,b.eq_s_b(2,"ic")&&(b.bra=b.cursor,h()&&b.slice_del())))}return!0}function C(){var e;e=b.limit-b.cursor,b.ket=b.cursor,b.in_grouping_b(f,97,242)&&(b.bra=b.cursor,k()&&(b.slice_del(),b.ket=b.cursor,b.eq_s_b(1,"i")&&(b.bra=b.cursor,k())))?b.slice_del():b.cursor=b.limit-e,b.ket=b.cursor,b.eq_s_b(1,"h")&&(b.bra=b.cursor,b.in_grouping_b(v,99,103)&&k()&&b.slice_del())}this.setCurrent=function(e){b.setCurrent(e)},this.getCurrent=function(){return b.getCurrent()},this.stem=function(){var e,r,n,i=b.cursor;return function(){for(var e,r,n,i,o=b.cursor;;){if(b.bra=b.cursor,e=b.find_among(a,7))switch(b.ket=b.cursor,e){case 1:b.slice_from("à");continue;case 2:b.slice_from("è");continue;case 3:b.slice_from("ì");continue;case 4:b.slice_from("ò");continue;case 5:b.slice_from("ù");continue;case 6:b.slice_from("qU");continue;case 7:if(b.cursor>=b.limit)break;b.cursor++;continue}break}for(b.cursor=o;;)for(r=b.cursor;;){if(n=b.cursor,b.in_grouping(m,97,249)){if(b.bra=b.cursor,i=b.cursor,d("u","U",n))break;if(b.cursor=i,d("i","I",n))break}if(b.cursor=n,b.cursor>=b.limit)return b.cursor=r;b.cursor++}}(),b.cursor=i,e=b.cursor,s=b.limit,o=t=s,g(),b.cursor=e,p()&&(t=b.cursor,p()&&(o=b.cursor)),b.limit_backward=i,b.cursor=b.limit,function(){var e;if(b.ket=b.cursor,b.find_among_b(c,37)&&(b.bra=b.cursor,(e=b.find_among_b(w,5))&&k()))switch(e){case 1:b.slice_del();break;case 2:b.slice_from("e")}}(),b.cursor=b.limit,q()||(b.cursor=b.limit,b.cursor>=s&&(n=b.limit_backward,b.limit_backward=s,b.ket=b.cursor,(r=b.find_among_b(l,87))&&(b.bra=b.cursor,1==r&&b.slice_del()),b.limit_backward=n)),b.cursor=b.limit,C(),b.cursor=b.limit_backward,function(){for(var e;b.bra=b.cursor,e=b.find_among(u,3);)switch(b.ket=b.cursor,e){case 1:b.slice_from("i");break;case 2:b.slice_from("u");break;case 3:if(b.cursor>=b.limit)return;b.cursor++}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return r.setCurrent(e),r.stem(),r.getCurrent()}):(r.setCurrent(e),r.stem(),r.getCurrent())}),e.Pipeline.registerFunction(e.it.stemmer,"stemmer-it"),e.it.stopWordFilter=e.generateStopWordFilter("a abbia abbiamo abbiano abbiate ad agl agli ai al all alla alle allo anche avemmo avendo avesse avessero avessi avessimo aveste avesti avete aveva avevamo avevano avevate avevi avevo avrai avranno avrebbe avrebbero avrei avremmo avremo avreste avresti avrete avrà avrò avuta avute avuti avuto c che chi ci coi col come con contro cui da dagl dagli dai dal dall dalla dalle dallo degl degli dei del dell della delle dello di dov dove e ebbe ebbero ebbi ed era erano eravamo eravate eri ero essendo faccia facciamo facciano facciate faccio facemmo facendo facesse facessero facessi facessimo faceste facesti faceva facevamo facevano facevate facevi facevo fai fanno farai faranno farebbe farebbero farei faremmo faremo fareste faresti farete farà farò fece fecero feci fosse fossero fossi fossimo foste fosti fu fui fummo furono gli ha hai hanno ho i il in io l la le lei li lo loro lui ma mi mia mie miei mio ne negl negli nei nel nell nella nelle nello noi non nostra nostre nostri nostro o per perché più quale quanta quante quanti quanto quella quelle quelli quello questa queste questi questo sarai saranno sarebbe sarebbero sarei saremmo saremo sareste saresti sarete sarà sarò se sei si sia siamo siano siate siete sono sta stai stando stanno starai staranno starebbe starebbero starei staremmo staremo stareste staresti starete starà starò stava stavamo stavano stavate stavi stavo stemmo stesse stessero stessi stessimo steste stesti stette stettero stetti stia stiamo stiano stiate sto su sua sue sugl sugli sui sul sull sulla sulle sullo suo suoi ti tra tu tua tue tuo tuoi tutti tutto un una uno vi voi vostra vostre vostri vostro è".split(" ")),e.Pipeline.registerFunction(e.it.stopWordFilter,"stopWordFilter-it")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/lunr.jp.js b/assets/javascripts/lunr/lunr.jp.js new file mode 100644 index 00000000..ed2b3d25 --- /dev/null +++ b/assets/javascripts/lunr/lunr.jp.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(n){if(void 0===n)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===n.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==n.version[0];n.jp=function(){this.pipeline.reset(),this.pipeline.add(n.jp.stopWordFilter,n.jp.stemmer),i?this.tokenizer=n.jp.tokenizer:(n.tokenizer&&(n.tokenizer=n.jp.tokenizer),this.tokenizerFn&&(this.tokenizerFn=n.jp.tokenizer))};var o=new n.TinySegmenter;n.jp.tokenizer=function(e){if(!arguments.length||null==e||null==e)return[];if(Array.isArray(e))return e.map(function(e){return i?new n.Token(e.toLowerCase()):e.toLowerCase()});for(var r=e.toString().toLowerCase().replace(/^\s+/,""),t=r.length-1;0<=t;t--)if(/\S/.test(r.charAt(t))){r=r.substring(0,t+1);break}return o.segment(r).filter(function(e){return!!e}).map(function(e){return i?new n.Token(e):e})},n.jp.stemmer=function(e){return e},n.Pipeline.registerFunction(n.jp.stemmer,"stemmer-jp"),n.jp.wordCharacters="一二三四五六七八九十百千万億兆一-龠々〆ヵヶぁ-んァ-ヴーア-ン゙a-zA-Za-zA-Z0-90-9",n.jp.stopWordFilter=function(e){if(-1===n.jp.stopWordFilter.stopWords.indexOf(i?e.toString():e))return e},n.jp.stopWordFilter=n.generateStopWordFilter("これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし".split(" ")),n.Pipeline.registerFunction(n.jp.stopWordFilter,"stopWordFilter-jp")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/lunr.multi.js b/assets/javascripts/lunr/lunr.multi.js new file mode 100644 index 00000000..8a145c91 --- /dev/null +++ b/assets/javascripts/lunr/lunr.multi.js @@ -0,0 +1 @@ +!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(o){o.multiLanguage=function(){for(var e=Array.prototype.slice.call(arguments),i=e.join("-"),t="",r=[],n=[],s=0;s=c.limit)return;c.cursor=e+1}for(;!c.out_grouping(u,97,248);){if(c.cursor>=c.limit)return;c.cursor++}(s=c.cursor)=s&&(r=c.limit_backward,c.limit_backward=s,c.ket=c.cursor,e=c.find_among_b(a,29),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del();break;case 2:n=c.limit-c.cursor,c.in_grouping_b(d,98,122)?c.slice_del():(c.cursor=c.limit-n,c.eq_s_b(1,"k")&&c.out_grouping_b(u,97,248)&&c.slice_del());break;case 3:c.slice_from("er")}}(),c.cursor=c.limit,r=c.limit-c.cursor,c.cursor>=s&&(e=c.limit_backward,c.limit_backward=s,c.ket=c.cursor,c.find_among_b(m,2)?(c.bra=c.cursor,c.limit_backward=e,c.cursor=c.limit-r,c.cursor>c.limit_backward&&(c.cursor--,c.bra=c.cursor,c.slice_del())):c.limit_backward=e),c.cursor=c.limit,c.cursor>=s&&(i=c.limit_backward,c.limit_backward=s,c.ket=c.cursor,(n=c.find_among_b(l,11))?(c.bra=c.cursor,c.limit_backward=i,1==n&&c.slice_del()):c.limit_backward=i),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/lunr.pt.js b/assets/javascripts/lunr/lunr.pt.js new file mode 100644 index 00000000..f50fc9fa --- /dev/null +++ b/assets/javascripts/lunr/lunr.pt.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var j,C,r;e.pt=function(){this.pipeline.reset(),this.pipeline.add(e.pt.trimmer,e.pt.stopWordFilter,e.pt.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.pt.stemmer))},e.pt.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.pt.trimmer=e.trimmerSupport.generateTrimmer(e.pt.wordCharacters),e.Pipeline.registerFunction(e.pt.trimmer,"trimmer-pt"),e.pt.stemmer=(j=e.stemmerSupport.Among,C=e.stemmerSupport.SnowballProgram,r=new function(){var s,n,i,o=[new j("",-1,3),new j("ã",0,1),new j("õ",0,2)],a=[new j("",-1,3),new j("a~",0,1),new j("o~",0,2)],r=[new j("ic",-1,-1),new j("ad",-1,-1),new j("os",-1,-1),new j("iv",-1,1)],t=[new j("ante",-1,1),new j("avel",-1,1),new j("ível",-1,1)],u=[new j("ic",-1,1),new j("abil",-1,1),new j("iv",-1,1)],w=[new j("ica",-1,1),new j("ância",-1,1),new j("ência",-1,4),new j("ira",-1,9),new j("adora",-1,1),new j("osa",-1,1),new j("ista",-1,1),new j("iva",-1,8),new j("eza",-1,1),new j("logía",-1,2),new j("idade",-1,7),new j("ante",-1,1),new j("mente",-1,6),new j("amente",12,5),new j("ável",-1,1),new j("ível",-1,1),new j("ución",-1,3),new j("ico",-1,1),new j("ismo",-1,1),new j("oso",-1,1),new j("amento",-1,1),new j("imento",-1,1),new j("ivo",-1,8),new j("aça~o",-1,1),new j("ador",-1,1),new j("icas",-1,1),new j("ências",-1,4),new j("iras",-1,9),new j("adoras",-1,1),new j("osas",-1,1),new j("istas",-1,1),new j("ivas",-1,8),new j("ezas",-1,1),new j("logías",-1,2),new j("idades",-1,7),new j("uciones",-1,3),new j("adores",-1,1),new j("antes",-1,1),new j("aço~es",-1,1),new j("icos",-1,1),new j("ismos",-1,1),new j("osos",-1,1),new j("amentos",-1,1),new j("imentos",-1,1),new j("ivos",-1,8)],m=[new j("ada",-1,1),new j("ida",-1,1),new j("ia",-1,1),new j("aria",2,1),new j("eria",2,1),new j("iria",2,1),new j("ara",-1,1),new j("era",-1,1),new j("ira",-1,1),new j("ava",-1,1),new j("asse",-1,1),new j("esse",-1,1),new j("isse",-1,1),new j("aste",-1,1),new j("este",-1,1),new j("iste",-1,1),new j("ei",-1,1),new j("arei",16,1),new j("erei",16,1),new j("irei",16,1),new j("am",-1,1),new j("iam",20,1),new j("ariam",21,1),new j("eriam",21,1),new j("iriam",21,1),new j("aram",20,1),new j("eram",20,1),new j("iram",20,1),new j("avam",20,1),new j("em",-1,1),new j("arem",29,1),new j("erem",29,1),new j("irem",29,1),new j("assem",29,1),new j("essem",29,1),new j("issem",29,1),new j("ado",-1,1),new j("ido",-1,1),new j("ando",-1,1),new j("endo",-1,1),new j("indo",-1,1),new j("ara~o",-1,1),new j("era~o",-1,1),new j("ira~o",-1,1),new j("ar",-1,1),new j("er",-1,1),new j("ir",-1,1),new j("as",-1,1),new j("adas",47,1),new j("idas",47,1),new j("ias",47,1),new j("arias",50,1),new j("erias",50,1),new j("irias",50,1),new j("aras",47,1),new j("eras",47,1),new j("iras",47,1),new j("avas",47,1),new j("es",-1,1),new j("ardes",58,1),new j("erdes",58,1),new j("irdes",58,1),new j("ares",58,1),new j("eres",58,1),new j("ires",58,1),new j("asses",58,1),new j("esses",58,1),new j("isses",58,1),new j("astes",58,1),new j("estes",58,1),new j("istes",58,1),new j("is",-1,1),new j("ais",71,1),new j("eis",71,1),new j("areis",73,1),new j("ereis",73,1),new j("ireis",73,1),new j("áreis",73,1),new j("éreis",73,1),new j("íreis",73,1),new j("ásseis",73,1),new j("ésseis",73,1),new j("ísseis",73,1),new j("áveis",73,1),new j("íeis",73,1),new j("aríeis",84,1),new j("eríeis",84,1),new j("iríeis",84,1),new j("ados",-1,1),new j("idos",-1,1),new j("amos",-1,1),new j("áramos",90,1),new j("éramos",90,1),new j("íramos",90,1),new j("ávamos",90,1),new j("íamos",90,1),new j("aríamos",95,1),new j("eríamos",95,1),new j("iríamos",95,1),new j("emos",-1,1),new j("aremos",99,1),new j("eremos",99,1),new j("iremos",99,1),new j("ássemos",99,1),new j("êssemos",99,1),new j("íssemos",99,1),new j("imos",-1,1),new j("armos",-1,1),new j("ermos",-1,1),new j("irmos",-1,1),new j("ámos",-1,1),new j("arás",-1,1),new j("erás",-1,1),new j("irás",-1,1),new j("eu",-1,1),new j("iu",-1,1),new j("ou",-1,1),new j("ará",-1,1),new j("erá",-1,1),new j("irá",-1,1)],c=[new j("a",-1,1),new j("i",-1,1),new j("o",-1,1),new j("os",-1,1),new j("á",-1,1),new j("í",-1,1),new j("ó",-1,1)],l=[new j("e",-1,1),new j("ç",-1,2),new j("é",-1,1),new j("ê",-1,1)],f=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,3,19,12,2],d=new C;function v(){if(d.out_grouping(f,97,250)){for(;!d.in_grouping(f,97,250);){if(d.cursor>=d.limit)return!0;d.cursor++}return!1}return!0}function p(){var e,r,s=d.cursor;if(d.in_grouping(f,97,250))if(e=d.cursor,v()){if(d.cursor=e,function(){if(d.in_grouping(f,97,250))for(;!d.out_grouping(f,97,250);){if(d.cursor>=d.limit)return!1;d.cursor++}return i=d.cursor,!0}())return}else i=d.cursor;if(d.cursor=s,d.out_grouping(f,97,250)){if(r=d.cursor,v()){if(d.cursor=r,!d.in_grouping(f,97,250)||d.cursor>=d.limit)return;d.cursor++}i=d.cursor}}function _(){for(;!d.in_grouping(f,97,250);){if(d.cursor>=d.limit)return!1;d.cursor++}for(;!d.out_grouping(f,97,250);){if(d.cursor>=d.limit)return!1;d.cursor++}return!0}function h(){return i<=d.cursor}function b(){return s<=d.cursor}function g(){var e;if(d.ket=d.cursor,!(e=d.find_among_b(w,45)))return!1;switch(d.bra=d.cursor,e){case 1:if(!b())return!1;d.slice_del();break;case 2:if(!b())return!1;d.slice_from("log");break;case 3:if(!b())return!1;d.slice_from("u");break;case 4:if(!b())return!1;d.slice_from("ente");break;case 5:if(!(n<=d.cursor))return!1;d.slice_del(),d.ket=d.cursor,(e=d.find_among_b(r,4))&&(d.bra=d.cursor,b()&&(d.slice_del(),1==e&&(d.ket=d.cursor,d.eq_s_b(2,"at")&&(d.bra=d.cursor,b()&&d.slice_del()))));break;case 6:if(!b())return!1;d.slice_del(),d.ket=d.cursor,(e=d.find_among_b(t,3))&&(d.bra=d.cursor,1==e&&b()&&d.slice_del());break;case 7:if(!b())return!1;d.slice_del(),d.ket=d.cursor,(e=d.find_among_b(u,3))&&(d.bra=d.cursor,1==e&&b()&&d.slice_del());break;case 8:if(!b())return!1;d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"at")&&(d.bra=d.cursor,b()&&d.slice_del());break;case 9:if(!h()||!d.eq_s_b(1,"e"))return!1;d.slice_from("ir")}return!0}function k(e,r){if(d.eq_s_b(1,e)){d.bra=d.cursor;var s=d.limit-d.cursor;if(d.eq_s_b(1,r))return d.cursor=d.limit-s,h()&&d.slice_del(),!1}return!0}function q(){if(!g()&&(d.cursor=d.limit,!function(){var e,r;if(d.cursor>=i){if(r=d.limit_backward,d.limit_backward=i,d.ket=d.cursor,e=d.find_among_b(m,120))return d.bra=d.cursor,1==e&&d.slice_del(),d.limit_backward=r,!0;d.limit_backward=r}return!1}()))return d.cursor=d.limit,d.ket=d.cursor,void((e=d.find_among_b(c,7))&&(d.bra=d.cursor,1==e&&h()&&d.slice_del()));var e;d.cursor=d.limit,d.ket=d.cursor,d.eq_s_b(1,"i")&&(d.bra=d.cursor,d.eq_s_b(1,"c")&&(d.cursor=d.limit,h()&&d.slice_del()))}this.setCurrent=function(e){d.setCurrent(e)},this.getCurrent=function(){return d.getCurrent()},this.stem=function(){var e,r=d.cursor;return function(){for(var e;;){if(d.bra=d.cursor,e=d.find_among(o,3))switch(d.ket=d.cursor,e){case 1:d.slice_from("a~");continue;case 2:d.slice_from("o~");continue;case 3:if(d.cursor>=d.limit)break;d.cursor++;continue}break}}(),d.cursor=r,e=d.cursor,i=d.limit,s=n=i,p(),d.cursor=e,_()&&(n=d.cursor,_()&&(s=d.cursor)),d.limit_backward=r,d.cursor=d.limit,q(),d.cursor=d.limit,function(){var e;if(d.ket=d.cursor,e=d.find_among_b(l,4))switch(d.bra=d.cursor,e){case 1:h()&&(d.slice_del(),d.ket=d.cursor,d.limit,d.cursor,k("u","g")&&k("i","c"));break;case 2:d.slice_from("c")}}(),d.cursor=d.limit_backward,function(){for(var e;;){if(d.bra=d.cursor,e=d.find_among(a,3))switch(d.ket=d.cursor,e){case 1:d.slice_from("ã");continue;case 2:d.slice_from("õ");continue;case 3:if(d.cursor>=d.limit)break;d.cursor++;continue}break}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return r.setCurrent(e),r.stem(),r.getCurrent()}):(r.setCurrent(e),r.stem(),r.getCurrent())}),e.Pipeline.registerFunction(e.pt.stemmer,"stemmer-pt"),e.pt.stopWordFilter=e.generateStopWordFilter("a ao aos aquela aquelas aquele aqueles aquilo as até com como da das de dela delas dele deles depois do dos e ela elas ele eles em entre era eram essa essas esse esses esta estamos estas estava estavam este esteja estejam estejamos estes esteve estive estivemos estiver estivera estiveram estiverem estivermos estivesse estivessem estivéramos estivéssemos estou está estávamos estão eu foi fomos for fora foram forem formos fosse fossem fui fôramos fôssemos haja hajam hajamos havemos hei houve houvemos houver houvera houveram houverei houverem houveremos houveria houveriam houvermos houverá houverão houveríamos houvesse houvessem houvéramos houvéssemos há hão isso isto já lhe lhes mais mas me mesmo meu meus minha minhas muito na nas nem no nos nossa nossas nosso nossos num numa não nós o os ou para pela pelas pelo pelos por qual quando que quem se seja sejam sejamos sem serei seremos seria seriam será serão seríamos seu seus somos sou sua suas são só também te tem temos tenha tenham tenhamos tenho terei teremos teria teriam terá terão teríamos teu teus teve tinha tinham tive tivemos tiver tivera tiveram tiverem tivermos tivesse tivessem tivéramos tivéssemos tu tua tuas tém tínhamos um uma você vocês vos à às éramos".split(" ")),e.Pipeline.registerFunction(e.pt.stopWordFilter,"stopWordFilter-pt")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/lunr.ro.js b/assets/javascripts/lunr/lunr.ro.js new file mode 100644 index 00000000..b19627e1 --- /dev/null +++ b/assets/javascripts/lunr/lunr.ro.js @@ -0,0 +1 @@ +!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var h,z,i;e.ro=function(){this.pipeline.reset(),this.pipeline.add(e.ro.trimmer,e.ro.stopWordFilter,e.ro.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ro.stemmer))},e.ro.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.ro.trimmer=e.trimmerSupport.generateTrimmer(e.ro.wordCharacters),e.Pipeline.registerFunction(e.ro.trimmer,"trimmer-ro"),e.ro.stemmer=(h=e.stemmerSupport.Among,z=e.stemmerSupport.SnowballProgram,i=new function(){var r,n,t,a,o=[new h("",-1,3),new h("I",0,1),new h("U",0,2)],s=[new h("ea",-1,3),new h("aţia",-1,7),new h("aua",-1,2),new h("iua",-1,4),new h("aţie",-1,7),new h("ele",-1,3),new h("ile",-1,5),new h("iile",6,4),new h("iei",-1,4),new h("atei",-1,6),new h("ii",-1,4),new h("ului",-1,1),new h("ul",-1,1),new h("elor",-1,3),new h("ilor",-1,4),new h("iilor",14,4)],c=[new h("icala",-1,4),new h("iciva",-1,4),new h("ativa",-1,5),new h("itiva",-1,6),new h("icale",-1,4),new h("aţiune",-1,5),new h("iţiune",-1,6),new h("atoare",-1,5),new h("itoare",-1,6),new h("ătoare",-1,5),new h("icitate",-1,4),new h("abilitate",-1,1),new h("ibilitate",-1,2),new h("ivitate",-1,3),new h("icive",-1,4),new h("ative",-1,5),new h("itive",-1,6),new h("icali",-1,4),new h("atori",-1,5),new h("icatori",18,4),new h("itori",-1,6),new h("ători",-1,5),new h("icitati",-1,4),new h("abilitati",-1,1),new h("ivitati",-1,3),new h("icivi",-1,4),new h("ativi",-1,5),new h("itivi",-1,6),new h("icităi",-1,4),new h("abilităi",-1,1),new h("ivităi",-1,3),new h("icităţi",-1,4),new h("abilităţi",-1,1),new h("ivităţi",-1,3),new h("ical",-1,4),new h("ator",-1,5),new h("icator",35,4),new h("itor",-1,6),new h("ător",-1,5),new h("iciv",-1,4),new h("ativ",-1,5),new h("itiv",-1,6),new h("icală",-1,4),new h("icivă",-1,4),new h("ativă",-1,5),new h("itivă",-1,6)],u=[new h("ica",-1,1),new h("abila",-1,1),new h("ibila",-1,1),new h("oasa",-1,1),new h("ata",-1,1),new h("ita",-1,1),new h("anta",-1,1),new h("ista",-1,3),new h("uta",-1,1),new h("iva",-1,1),new h("ic",-1,1),new h("ice",-1,1),new h("abile",-1,1),new h("ibile",-1,1),new h("isme",-1,3),new h("iune",-1,2),new h("oase",-1,1),new h("ate",-1,1),new h("itate",17,1),new h("ite",-1,1),new h("ante",-1,1),new h("iste",-1,3),new h("ute",-1,1),new h("ive",-1,1),new h("ici",-1,1),new h("abili",-1,1),new h("ibili",-1,1),new h("iuni",-1,2),new h("atori",-1,1),new h("osi",-1,1),new h("ati",-1,1),new h("itati",30,1),new h("iti",-1,1),new h("anti",-1,1),new h("isti",-1,3),new h("uti",-1,1),new h("işti",-1,3),new h("ivi",-1,1),new h("ităi",-1,1),new h("oşi",-1,1),new h("ităţi",-1,1),new h("abil",-1,1),new h("ibil",-1,1),new h("ism",-1,3),new h("ator",-1,1),new h("os",-1,1),new h("at",-1,1),new h("it",-1,1),new h("ant",-1,1),new h("ist",-1,3),new h("ut",-1,1),new h("iv",-1,1),new h("ică",-1,1),new h("abilă",-1,1),new h("ibilă",-1,1),new h("oasă",-1,1),new h("ată",-1,1),new h("ită",-1,1),new h("antă",-1,1),new h("istă",-1,3),new h("ută",-1,1),new h("ivă",-1,1)],w=[new h("ea",-1,1),new h("ia",-1,1),new h("esc",-1,1),new h("ăsc",-1,1),new h("ind",-1,1),new h("ând",-1,1),new h("are",-1,1),new h("ere",-1,1),new h("ire",-1,1),new h("âre",-1,1),new h("se",-1,2),new h("ase",10,1),new h("sese",10,2),new h("ise",10,1),new h("use",10,1),new h("âse",10,1),new h("eşte",-1,1),new h("ăşte",-1,1),new h("eze",-1,1),new h("ai",-1,1),new h("eai",19,1),new h("iai",19,1),new h("sei",-1,2),new h("eşti",-1,1),new h("ăşti",-1,1),new h("ui",-1,1),new h("ezi",-1,1),new h("âi",-1,1),new h("aşi",-1,1),new h("seşi",-1,2),new h("aseşi",29,1),new h("seseşi",29,2),new h("iseşi",29,1),new h("useşi",29,1),new h("âseşi",29,1),new h("işi",-1,1),new h("uşi",-1,1),new h("âşi",-1,1),new h("aţi",-1,2),new h("eaţi",38,1),new h("iaţi",38,1),new h("eţi",-1,2),new h("iţi",-1,2),new h("âţi",-1,2),new h("arăţi",-1,1),new h("serăţi",-1,2),new h("aserăţi",45,1),new h("seserăţi",45,2),new h("iserăţi",45,1),new h("userăţi",45,1),new h("âserăţi",45,1),new h("irăţi",-1,1),new h("urăţi",-1,1),new h("ârăţi",-1,1),new h("am",-1,1),new h("eam",54,1),new h("iam",54,1),new h("em",-1,2),new h("asem",57,1),new h("sesem",57,2),new h("isem",57,1),new h("usem",57,1),new h("âsem",57,1),new h("im",-1,2),new h("âm",-1,2),new h("ăm",-1,2),new h("arăm",65,1),new h("serăm",65,2),new h("aserăm",67,1),new h("seserăm",67,2),new h("iserăm",67,1),new h("userăm",67,1),new h("âserăm",67,1),new h("irăm",65,1),new h("urăm",65,1),new h("ârăm",65,1),new h("au",-1,1),new h("eau",76,1),new h("iau",76,1),new h("indu",-1,1),new h("ându",-1,1),new h("ez",-1,1),new h("ească",-1,1),new h("ară",-1,1),new h("seră",-1,2),new h("aseră",84,1),new h("seseră",84,2),new h("iseră",84,1),new h("useră",84,1),new h("âseră",84,1),new h("iră",-1,1),new h("ură",-1,1),new h("âră",-1,1),new h("ează",-1,1)],i=[new h("a",-1,1),new h("e",-1,1),new h("ie",1,1),new h("i",-1,1),new h("ă",-1,1)],m=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,2,32,0,0,4],l=new z;function f(e,i){l.eq_s(1,e)&&(l.ket=l.cursor,l.in_grouping(m,97,259)&&l.slice_from(i))}function p(){if(l.out_grouping(m,97,259)){for(;!l.in_grouping(m,97,259);){if(l.cursor>=l.limit)return!0;l.cursor++}return!1}return!0}function d(){var e,i,r=l.cursor;if(l.in_grouping(m,97,259)){if(e=l.cursor,!p())return void(a=l.cursor);if(l.cursor=e,!function(){if(l.in_grouping(m,97,259))for(;!l.out_grouping(m,97,259);){if(l.cursor>=l.limit)return!0;l.cursor++}return!1}())return void(a=l.cursor)}l.cursor=r,l.out_grouping(m,97,259)&&(i=l.cursor,p()&&(l.cursor=i,l.in_grouping(m,97,259)&&l.cursor=l.limit)return!1;l.cursor++}for(;!l.out_grouping(m,97,259);){if(l.cursor>=l.limit)return!1;l.cursor++}return!0}function v(){return t<=l.cursor}function _(){var e,i=l.limit-l.cursor;if(l.ket=l.cursor,(e=l.find_among_b(c,46))&&(l.bra=l.cursor,v())){switch(e){case 1:l.slice_from("abil");break;case 2:l.slice_from("ibil");break;case 3:l.slice_from("iv");break;case 4:l.slice_from("ic");break;case 5:l.slice_from("at");break;case 6:l.slice_from("it")}return r=!0,l.cursor=l.limit-i,!0}return!1}function g(){var e,i;for(r=!1;;)if(i=l.limit-l.cursor,!_()){l.cursor=l.limit-i;break}if(l.ket=l.cursor,(e=l.find_among_b(u,62))&&(l.bra=l.cursor,n<=l.cursor)){switch(e){case 1:l.slice_del();break;case 2:l.eq_s_b(1,"ţ")&&(l.bra=l.cursor,l.slice_from("t"));break;case 3:l.slice_from("ist")}r=!0}}function k(){var e;l.ket=l.cursor,(e=l.find_among_b(i,5))&&(l.bra=l.cursor,a<=l.cursor&&1==e&&l.slice_del())}this.setCurrent=function(e){l.setCurrent(e)},this.getCurrent=function(){return l.getCurrent()},this.stem=function(){var e,i=l.cursor;return function(){for(var e,i;e=l.cursor,l.in_grouping(m,97,259)&&(i=l.cursor,l.bra=i,f("u","U"),l.cursor=i,f("i","I")),l.cursor=e,!(l.cursor>=l.limit);)l.cursor++}(),l.cursor=i,e=l.cursor,a=l.limit,n=t=a,d(),l.cursor=e,b()&&(t=l.cursor,b()&&(n=l.cursor)),l.limit_backward=i,l.cursor=l.limit,function(){var e,i;if(l.ket=l.cursor,(e=l.find_among_b(s,16))&&(l.bra=l.cursor,v()))switch(e){case 1:l.slice_del();break;case 2:l.slice_from("a");break;case 3:l.slice_from("e");break;case 4:l.slice_from("i");break;case 5:i=l.limit-l.cursor,l.eq_s_b(2,"ab")||(l.cursor=l.limit-i,l.slice_from("i"));break;case 6:l.slice_from("at");break;case 7:l.slice_from("aţi")}}(),l.cursor=l.limit,g(),l.cursor=l.limit,r||(l.cursor=l.limit,function(){var e,i,r;if(l.cursor>=a){if(i=l.limit_backward,l.limit_backward=a,l.ket=l.cursor,e=l.find_among_b(w,94))switch(l.bra=l.cursor,e){case 1:if(r=l.limit-l.cursor,!l.out_grouping_b(m,97,259)&&(l.cursor=l.limit-r,!l.eq_s_b(1,"u")))break;case 2:l.slice_del()}l.limit_backward=i}}(),l.cursor=l.limit),k(),l.cursor=l.limit_backward,function(){for(var e;;){if(l.bra=l.cursor,e=l.find_among(o,3))switch(l.ket=l.cursor,e){case 1:l.slice_from("i");continue;case 2:l.slice_from("u");continue;case 3:if(l.cursor>=l.limit)break;l.cursor++;continue}break}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}),e.Pipeline.registerFunction(e.ro.stemmer,"stemmer-ro"),e.ro.stopWordFilter=e.generateStopWordFilter("acea aceasta această aceea acei aceia acel acela acele acelea acest acesta aceste acestea aceşti aceştia acolo acord acum ai aia aibă aici al ale alea altceva altcineva am ar are asemenea asta astea astăzi asupra au avea avem aveţi azi aş aşadar aţi bine bucur bună ca care caut ce cel ceva chiar cinci cine cineva contra cu cum cumva curând curînd când cât câte câtva câţi cînd cît cîte cîtva cîţi că căci cărei căror cărui către da dacă dar datorită dată dau de deci deja deoarece departe deşi din dinaintea dintr- dintre doi doilea două drept după dă ea ei el ele eram este eu eşti face fata fi fie fiecare fii fim fiu fiţi frumos fără graţie halbă iar ieri la le li lor lui lângă lîngă mai mea mei mele mereu meu mi mie mine mult multă mulţi mulţumesc mâine mîine mă ne nevoie nici nicăieri nimeni nimeri nimic nişte noastre noastră noi noroc nostru nouă noştri nu opt ori oricare orice oricine oricum oricând oricât oricînd oricît oriunde patra patru patrulea pe pentru peste pic poate pot prea prima primul prin puţin puţina puţină până pînă rog sa sale sau se spate spre sub sunt suntem sunteţi sută sînt sîntem sînteţi să săi său ta tale te timp tine toate toată tot totuşi toţi trei treia treilea tu tăi tău un una unde undeva unei uneia unele uneori unii unor unora unu unui unuia unul vi voastre voastră voi vostru vouă voştri vreme vreo vreun vă zece zero zi zice îi îl îmi împotriva în înainte înaintea încotro încât încît între întrucât întrucît îţi ăla ălea ăsta ăstea ăştia şapte şase şi ştiu ţi ţie".split(" ")),e.Pipeline.registerFunction(e.ro.stopWordFilter,"stopWordFilter-ro")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/lunr.ru.js b/assets/javascripts/lunr/lunr.ru.js new file mode 100644 index 00000000..ac992480 --- /dev/null +++ b/assets/javascripts/lunr/lunr.ru.js @@ -0,0 +1 @@ +!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var h,g,n;e.ru=function(){this.pipeline.reset(),this.pipeline.add(e.ru.trimmer,e.ru.stopWordFilter,e.ru.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ru.stemmer))},e.ru.wordCharacters="Ѐ-҄҇-ԯᴫᵸⷠ-ⷿꙀ-ꚟ︮︯",e.ru.trimmer=e.trimmerSupport.generateTrimmer(e.ru.wordCharacters),e.Pipeline.registerFunction(e.ru.trimmer,"trimmer-ru"),e.ru.stemmer=(h=e.stemmerSupport.Among,g=e.stemmerSupport.SnowballProgram,n=new function(){var n,e,r=[new h("в",-1,1),new h("ив",0,2),new h("ыв",0,2),new h("вши",-1,1),new h("ивши",3,2),new h("ывши",3,2),new h("вшись",-1,1),new h("ившись",6,2),new h("ывшись",6,2)],t=[new h("ее",-1,1),new h("ие",-1,1),new h("ое",-1,1),new h("ые",-1,1),new h("ими",-1,1),new h("ыми",-1,1),new h("ей",-1,1),new h("ий",-1,1),new h("ой",-1,1),new h("ый",-1,1),new h("ем",-1,1),new h("им",-1,1),new h("ом",-1,1),new h("ым",-1,1),new h("его",-1,1),new h("ого",-1,1),new h("ему",-1,1),new h("ому",-1,1),new h("их",-1,1),new h("ых",-1,1),new h("ею",-1,1),new h("ою",-1,1),new h("ую",-1,1),new h("юю",-1,1),new h("ая",-1,1),new h("яя",-1,1)],w=[new h("ем",-1,1),new h("нн",-1,1),new h("вш",-1,1),new h("ивш",2,2),new h("ывш",2,2),new h("щ",-1,1),new h("ющ",5,1),new h("ующ",6,2)],i=[new h("сь",-1,1),new h("ся",-1,1)],u=[new h("ла",-1,1),new h("ила",0,2),new h("ыла",0,2),new h("на",-1,1),new h("ена",3,2),new h("ете",-1,1),new h("ите",-1,2),new h("йте",-1,1),new h("ейте",7,2),new h("уйте",7,2),new h("ли",-1,1),new h("или",10,2),new h("ыли",10,2),new h("й",-1,1),new h("ей",13,2),new h("уй",13,2),new h("л",-1,1),new h("ил",16,2),new h("ыл",16,2),new h("ем",-1,1),new h("им",-1,2),new h("ым",-1,2),new h("н",-1,1),new h("ен",22,2),new h("ло",-1,1),new h("ило",24,2),new h("ыло",24,2),new h("но",-1,1),new h("ено",27,2),new h("нно",27,1),new h("ет",-1,1),new h("ует",30,2),new h("ит",-1,2),new h("ыт",-1,2),new h("ют",-1,1),new h("уют",34,2),new h("ят",-1,2),new h("ны",-1,1),new h("ены",37,2),new h("ть",-1,1),new h("ить",39,2),new h("ыть",39,2),new h("ешь",-1,1),new h("ишь",-1,2),new h("ю",-1,2),new h("ую",44,2)],s=[new h("а",-1,1),new h("ев",-1,1),new h("ов",-1,1),new h("е",-1,1),new h("ие",3,1),new h("ье",3,1),new h("и",-1,1),new h("еи",6,1),new h("ии",6,1),new h("ами",6,1),new h("ями",6,1),new h("иями",10,1),new h("й",-1,1),new h("ей",12,1),new h("ией",13,1),new h("ий",12,1),new h("ой",12,1),new h("ам",-1,1),new h("ем",-1,1),new h("ием",18,1),new h("ом",-1,1),new h("ям",-1,1),new h("иям",21,1),new h("о",-1,1),new h("у",-1,1),new h("ах",-1,1),new h("ях",-1,1),new h("иях",26,1),new h("ы",-1,1),new h("ь",-1,1),new h("ю",-1,1),new h("ию",30,1),new h("ью",30,1),new h("я",-1,1),new h("ия",33,1),new h("ья",33,1)],o=[new h("ост",-1,1),new h("ость",-1,1)],c=[new h("ейше",-1,1),new h("н",-1,2),new h("ейш",-1,1),new h("ь",-1,3)],m=[33,65,8,232],l=new g;function f(){for(;!l.in_grouping(m,1072,1103);){if(l.cursor>=l.limit)return!1;l.cursor++}return!0}function a(){for(;!l.out_grouping(m,1072,1103);){if(l.cursor>=l.limit)return!1;l.cursor++}return!0}function p(e,n){var r,t;if(l.ket=l.cursor,r=l.find_among_b(e,n)){switch(l.bra=l.cursor,r){case 1:if(t=l.limit-l.cursor,!l.eq_s_b(1,"а")&&(l.cursor=l.limit-t,!l.eq_s_b(1,"я")))return!1;case 2:l.slice_del()}return!0}return!1}function d(e,n){var r;return l.ket=l.cursor,!!(r=l.find_among_b(e,n))&&(l.bra=l.cursor,1==r&&l.slice_del(),!0)}function _(){return!!d(t,26)&&(p(w,8),!0)}function b(){var e;l.ket=l.cursor,(e=l.find_among_b(o,2))&&(l.bra=l.cursor,n<=l.cursor&&1==e&&l.slice_del())}this.setCurrent=function(e){l.setCurrent(e)},this.getCurrent=function(){return l.getCurrent()},this.stem=function(){return e=l.limit,n=e,f()&&(e=l.cursor,a()&&f()&&a()&&(n=l.cursor)),l.cursor=l.limit,!(l.cursor>3]&1<<(7&s))return this.cursor++,!0}return!1},in_grouping_b:function(r,t,i){if(this.cursor>this.limit_backward){var s=b.charCodeAt(this.cursor-1);if(s<=i&&t<=s&&r[(s-=t)>>3]&1<<(7&s))return this.cursor--,!0}return!1},out_grouping:function(r,t,i){if(this.cursor>3]&1<<(7&s)))return this.cursor++,!0}return!1},out_grouping_b:function(r,t,i){if(this.cursor>this.limit_backward){var s=b.charCodeAt(this.cursor-1);if(i>3]&1<<(7&s)))return this.cursor--,!0}return!1},eq_s:function(r,t){if(this.limit-this.cursor>1),a=0,f=u=(l=r[i]).s_size){if(this.cursor=e+l.s_size,!l.method)return l.result;var m=l.method();if(this.cursor=e+l.s_size,m)return l.result}if((i=l.substring_i)<0)return 0}},find_among_b:function(r,t){for(var i=0,s=t,e=this.cursor,n=this.limit_backward,u=0,o=0,h=!1;;){for(var c=i+(s-i>>1),a=0,f=u=(_=r[i]).s_size){if(this.cursor=e-_.s_size,!_.method)return _.result;var m=_.method();if(this.cursor=e-_.s_size,m)return _.result}if((i=_.substring_i)<0)return 0}},replace_s:function(r,t,i){var s=i.length-(t-r);return b=b.substring(0,r)+i+b.substring(t),this.limit+=s,this.cursor>=t?this.cursor+=s:this.cursor>r&&(this.cursor=r),s},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>b.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),b.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/lunr.sv.js b/assets/javascripts/lunr/lunr.sv.js new file mode 100644 index 00000000..6daf5f9d --- /dev/null +++ b/assets/javascripts/lunr/lunr.sv.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,l,n;e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=(r=e.stemmerSupport.Among,l=e.stemmerSupport.SnowballProgram,n=new function(){var n,t,i=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],s=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],a=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],o=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],u=[119,127,149],m=new l;this.setCurrent=function(e){m.setCurrent(e)},this.getCurrent=function(){return m.getCurrent()},this.stem=function(){var e,r=m.cursor;return function(){var e,r=m.cursor+3;if(t=m.limit,0<=r||r<=m.limit){for(n=r;;){if(e=m.cursor,m.in_grouping(o,97,246)){m.cursor=e;break}if(m.cursor=e,m.cursor>=m.limit)return;m.cursor++}for(;!m.out_grouping(o,97,246);){if(m.cursor>=m.limit)return;m.cursor++}(t=m.cursor)=t&&(m.limit_backward=t,m.cursor=m.limit,m.ket=m.cursor,e=m.find_among_b(i,37),m.limit_backward=r,e))switch(m.bra=m.cursor,e){case 1:m.slice_del();break;case 2:m.in_grouping_b(u,98,121)&&m.slice_del()}}(),m.cursor=m.limit,e=m.limit_backward,m.cursor>=t&&(m.limit_backward=t,m.cursor=m.limit,m.find_among_b(s,7)&&(m.cursor=m.limit,m.ket=m.cursor,m.cursor>m.limit_backward&&(m.bra=--m.cursor,m.slice_del())),m.limit_backward=e),m.cursor=m.limit,function(){var e,r;if(m.cursor>=t){if(r=m.limit_backward,m.limit_backward=t,m.cursor=m.limit,m.ket=m.cursor,e=m.find_among_b(a,5))switch(m.bra=m.cursor,e){case 1:m.slice_del();break;case 2:m.slice_from("lös");break;case 3:m.slice_from("full")}m.limit_backward=r}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/lunr.tr.js b/assets/javascripts/lunr/lunr.tr.js new file mode 100644 index 00000000..e8fb5a7d --- /dev/null +++ b/assets/javascripts/lunr/lunr.tr.js @@ -0,0 +1 @@ +!function(r,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(r.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var mr,dr,i;r.tr=function(){this.pipeline.reset(),this.pipeline.add(r.tr.trimmer,r.tr.stopWordFilter,r.tr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(r.tr.stemmer))},r.tr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.tr.trimmer=r.trimmerSupport.generateTrimmer(r.tr.wordCharacters),r.Pipeline.registerFunction(r.tr.trimmer,"trimmer-tr"),r.tr.stemmer=(mr=r.stemmerSupport.Among,dr=r.stemmerSupport.SnowballProgram,i=new function(){var t,r=[new mr("m",-1,-1),new mr("n",-1,-1),new mr("miz",-1,-1),new mr("niz",-1,-1),new mr("muz",-1,-1),new mr("nuz",-1,-1),new mr("müz",-1,-1),new mr("nüz",-1,-1),new mr("mız",-1,-1),new mr("nız",-1,-1)],i=[new mr("leri",-1,-1),new mr("ları",-1,-1)],e=[new mr("ni",-1,-1),new mr("nu",-1,-1),new mr("nü",-1,-1),new mr("nı",-1,-1)],n=[new mr("in",-1,-1),new mr("un",-1,-1),new mr("ün",-1,-1),new mr("ın",-1,-1)],u=[new mr("a",-1,-1),new mr("e",-1,-1)],o=[new mr("na",-1,-1),new mr("ne",-1,-1)],s=[new mr("da",-1,-1),new mr("ta",-1,-1),new mr("de",-1,-1),new mr("te",-1,-1)],c=[new mr("nda",-1,-1),new mr("nde",-1,-1)],l=[new mr("dan",-1,-1),new mr("tan",-1,-1),new mr("den",-1,-1),new mr("ten",-1,-1)],a=[new mr("ndan",-1,-1),new mr("nden",-1,-1)],m=[new mr("la",-1,-1),new mr("le",-1,-1)],d=[new mr("ca",-1,-1),new mr("ce",-1,-1)],f=[new mr("im",-1,-1),new mr("um",-1,-1),new mr("üm",-1,-1),new mr("ım",-1,-1)],b=[new mr("sin",-1,-1),new mr("sun",-1,-1),new mr("sün",-1,-1),new mr("sın",-1,-1)],w=[new mr("iz",-1,-1),new mr("uz",-1,-1),new mr("üz",-1,-1),new mr("ız",-1,-1)],_=[new mr("siniz",-1,-1),new mr("sunuz",-1,-1),new mr("sünüz",-1,-1),new mr("sınız",-1,-1)],k=[new mr("lar",-1,-1),new mr("ler",-1,-1)],p=[new mr("niz",-1,-1),new mr("nuz",-1,-1),new mr("nüz",-1,-1),new mr("nız",-1,-1)],g=[new mr("dir",-1,-1),new mr("tir",-1,-1),new mr("dur",-1,-1),new mr("tur",-1,-1),new mr("dür",-1,-1),new mr("tür",-1,-1),new mr("dır",-1,-1),new mr("tır",-1,-1)],y=[new mr("casına",-1,-1),new mr("cesine",-1,-1)],z=[new mr("di",-1,-1),new mr("ti",-1,-1),new mr("dik",-1,-1),new mr("tik",-1,-1),new mr("duk",-1,-1),new mr("tuk",-1,-1),new mr("dük",-1,-1),new mr("tük",-1,-1),new mr("dık",-1,-1),new mr("tık",-1,-1),new mr("dim",-1,-1),new mr("tim",-1,-1),new mr("dum",-1,-1),new mr("tum",-1,-1),new mr("düm",-1,-1),new mr("tüm",-1,-1),new mr("dım",-1,-1),new mr("tım",-1,-1),new mr("din",-1,-1),new mr("tin",-1,-1),new mr("dun",-1,-1),new mr("tun",-1,-1),new mr("dün",-1,-1),new mr("tün",-1,-1),new mr("dın",-1,-1),new mr("tın",-1,-1),new mr("du",-1,-1),new mr("tu",-1,-1),new mr("dü",-1,-1),new mr("tü",-1,-1),new mr("dı",-1,-1),new mr("tı",-1,-1)],h=[new mr("sa",-1,-1),new mr("se",-1,-1),new mr("sak",-1,-1),new mr("sek",-1,-1),new mr("sam",-1,-1),new mr("sem",-1,-1),new mr("san",-1,-1),new mr("sen",-1,-1)],v=[new mr("miş",-1,-1),new mr("muş",-1,-1),new mr("müş",-1,-1),new mr("mış",-1,-1)],q=[new mr("b",-1,1),new mr("c",-1,2),new mr("d",-1,3),new mr("ğ",-1,4)],C=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,8,0,0,0,0,0,0,1],P=[1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,1],F=[65],S=[65],W=[["a",[1,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],97,305],["e",[17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130],101,252],["ı",[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],97,305],["i",[17],101,105],["o",F,111,117],["ö",S,246,252],["u",F,111,117]],L=new dr;function x(r,i,e){for(;;){var n=L.limit-L.cursor;if(L.in_grouping_b(r,i,e)){L.cursor=L.limit-n;break}if(L.cursor=L.limit-n,L.cursor<=L.limit_backward)return!1;L.cursor--}return!0}function A(){var r,i;r=L.limit-L.cursor,x(C,97,305);for(var e=0;eL.limit_backward&&(L.cursor--,e=L.limit-L.cursor,i()))?(L.cursor=L.limit-e,!0):(L.cursor=L.limit-n,r()?(L.cursor=L.limit-n,!1):(L.cursor=L.limit-n,!(L.cursor<=L.limit_backward)&&(L.cursor--,!!i()&&(L.cursor=L.limit-n,!0))))}function j(r){return E(r,function(){return L.in_grouping_b(C,97,305)})}function T(){return j(function(){return L.eq_s_b(1,"n")})}function Z(){return j(function(){return L.eq_s_b(1,"y")})}function B(){return L.find_among_b(r,10)&&E(function(){return L.in_grouping_b(P,105,305)},function(){return L.out_grouping_b(C,97,305)})}function D(){return A()&&L.in_grouping_b(P,105,305)&&j(function(){return L.eq_s_b(1,"s")})}function G(){return L.find_among_b(i,2)}function H(){return A()&&L.find_among_b(n,4)&&T()}function I(){return A()&&L.find_among_b(s,4)}function J(){return A()&&L.find_among_b(c,2)}function K(){return A()&&L.find_among_b(f,4)&&Z()}function M(){return A()&&L.find_among_b(b,4)}function N(){return A()&&L.find_among_b(w,4)&&Z()}function O(){return L.find_among_b(_,4)}function Q(){return A()&&L.find_among_b(k,2)}function R(){return A()&&L.find_among_b(g,8)}function U(){return A()&&L.find_among_b(z,32)&&Z()}function V(){return L.find_among_b(h,8)&&Z()}function X(){return A()&&L.find_among_b(v,4)&&Z()}function Y(){var r=L.limit-L.cursor;return!(X()||(L.cursor=L.limit-r,U()||(L.cursor=L.limit-r,V()||(L.cursor=L.limit-r,L.eq_s_b(3,"ken")&&Z()))))}function $(){if(L.find_among_b(y,2)){var r=L.limit-L.cursor;if(O()||(L.cursor=L.limit-r,Q()||(L.cursor=L.limit-r,K()||(L.cursor=L.limit-r,M()||(L.cursor=L.limit-r,N()||(L.cursor=L.limit-r))))),X())return!1}return!0}function rr(){if(!A()||!L.find_among_b(p,4))return!0;var r=L.limit-L.cursor;return!U()&&(L.cursor=L.limit-r,!V())}function ir(){var r,i,e,n=L.limit-L.cursor;if(L.ket=L.cursor,t=!0,Y()&&(L.cursor=L.limit-n,$()&&(L.cursor=L.limit-n,function(){if(Q()){L.bra=L.cursor,L.slice_del();var r=L.limit-L.cursor;return L.ket=L.cursor,R()||(L.cursor=L.limit-r,U()||(L.cursor=L.limit-r,V()||(L.cursor=L.limit-r,X()||(L.cursor=L.limit-r)))),t=!1}return!0}()&&(L.cursor=L.limit-n,rr()&&(L.cursor=L.limit-n,e=L.limit-L.cursor,!(O()||(L.cursor=L.limit-e,N()||(L.cursor=L.limit-e,M()||(L.cursor=L.limit-e,K()))))||(L.bra=L.cursor,L.slice_del(),i=L.limit-L.cursor,L.ket=L.cursor,X()||(L.cursor=L.limit-i),0)))))){if(L.cursor=L.limit-n,!R())return;L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,r=L.limit-L.cursor,O()||(L.cursor=L.limit-r,Q()||(L.cursor=L.limit-r,K()||(L.cursor=L.limit-r,M()||(L.cursor=L.limit-r,N()||(L.cursor=L.limit-r))))),X()||(L.cursor=L.limit-r)}L.bra=L.cursor,L.slice_del()}function er(){var r,i,e,n;if(L.ket=L.cursor,L.eq_s_b(2,"ki")){if(r=L.limit-L.cursor,I())return L.bra=L.cursor,L.slice_del(),i=L.limit-L.cursor,L.ket=L.cursor,Q()?(L.bra=L.cursor,L.slice_del(),er()):(L.cursor=L.limit-i,B()&&(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er()))),!0;if(L.cursor=L.limit-r,H()){if(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,e=L.limit-L.cursor,G())L.bra=L.cursor,L.slice_del();else{if(L.cursor=L.limit-e,L.ket=L.cursor,!B()&&(L.cursor=L.limit-e,!D()&&(L.cursor=L.limit-e,!er())))return!0;L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er())}return!0}if(L.cursor=L.limit-r,J()){if(n=L.limit-L.cursor,G())L.bra=L.cursor,L.slice_del();else if(L.cursor=L.limit-n,D())L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er());else if(L.cursor=L.limit-n,!er())return!1;return!0}}return!1}function nr(r){if(L.ket=L.cursor,!J()&&(L.cursor=L.limit-r,!A()||!L.find_among_b(o,2)))return!1;var i=L.limit-L.cursor;if(G())L.bra=L.cursor,L.slice_del();else if(L.cursor=L.limit-i,D())L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er());else if(L.cursor=L.limit-i,!er())return!1;return!0}function tr(r){if(L.ket=L.cursor,!(A()&&L.find_among_b(a,2)||(L.cursor=L.limit-r,A()&&L.find_among_b(e,4))))return!1;var i=L.limit-L.cursor;return!(!D()&&(L.cursor=L.limit-i,!G()))&&(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er()),!0)}function ur(){var r,i=L.limit-L.cursor;return L.ket=L.cursor,!!(H()||(L.cursor=L.limit-i,A()&&L.find_among_b(m,2)&&Z()))&&(L.bra=L.cursor,L.slice_del(),r=L.limit-L.cursor,L.ket=L.cursor,!(!Q()||(L.bra=L.cursor,L.slice_del(),!er()))||(L.cursor=L.limit-r,L.ket=L.cursor,(B()||(L.cursor=L.limit-r,D()||(L.cursor=L.limit-r,er())))&&(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er())),!0))}function or(){var r,i,e=L.limit-L.cursor;if(L.ket=L.cursor,!(I()||(L.cursor=L.limit-e,A()&&L.in_grouping_b(P,105,305)&&Z()||(L.cursor=L.limit-e,A()&&L.find_among_b(u,2)&&Z()))))return!1;if(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,r=L.limit-L.cursor,B())L.bra=L.cursor,L.slice_del(),i=L.limit-L.cursor,L.ket=L.cursor,Q()||(L.cursor=L.limit-i);else if(L.cursor=L.limit-r,!Q())return!0;return L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,er(),!0}function sr(){var r,i,e=L.limit-L.cursor;if(L.ket=L.cursor,Q())return L.bra=L.cursor,L.slice_del(),void er();if(L.cursor=L.limit-e,L.ket=L.cursor,A()&&L.find_among_b(d,2)&&T())if(L.bra=L.cursor,L.slice_del(),r=L.limit-L.cursor,L.ket=L.cursor,G())L.bra=L.cursor,L.slice_del();else{if(L.cursor=L.limit-r,L.ket=L.cursor,!B()&&(L.cursor=L.limit-r,!D())){if(L.cursor=L.limit-r,L.ket=L.cursor,!Q())return;if(L.bra=L.cursor,L.slice_del(),!er())return}L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er())}else if(L.cursor=L.limit-e,!nr(e)&&(L.cursor=L.limit-e,!tr(e))){if(L.cursor=L.limit-e,L.ket=L.cursor,A()&&L.find_among_b(l,4))return L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,i=L.limit-L.cursor,void(B()?(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er())):(L.cursor=L.limit-i,Q()?(L.bra=L.cursor,L.slice_del()):L.cursor=L.limit-i,er()));if(L.cursor=L.limit-e,!ur()){if(L.cursor=L.limit-e,G())return L.bra=L.cursor,void L.slice_del();L.cursor=L.limit-e,er()||(L.cursor=L.limit-e,or()||(L.cursor=L.limit-e,L.ket=L.cursor,(B()||(L.cursor=L.limit-e,D()))&&(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er()))))}}}function cr(r,i,e){if(L.cursor=L.limit-r,function(){for(;;){var r=L.limit-L.cursor;if(L.in_grouping_b(C,97,305)){L.cursor=L.limit-r;break}if(L.cursor=L.limit-r,L.cursor<=L.limit_backward)return!1;L.cursor--}return!0}()){var n=L.limit-L.cursor;if(!L.eq_s_b(1,i)&&(L.cursor=L.limit-n,!L.eq_s_b(1,e)))return!0;L.cursor=L.limit-r;var t=L.cursor;return L.insert(L.cursor,L.cursor,e),L.cursor=t,!1}return!0}function lr(r,i,e){for(;!L.eq_s(i,e);){if(L.cursor>=L.limit)return!0;L.cursor++}return i!=L.limit||(L.cursor=r,!1)}function ar(){var r,i,e=L.cursor;return!(!lr(r=L.cursor,2,"ad")||!lr(L.cursor=r,5,"soyad"))&&(L.limit_backward=e,L.cursor=L.limit,i=L.limit-L.cursor,(L.eq_s_b(1,"d")||(L.cursor=L.limit-i,L.eq_s_b(1,"g")))&&cr(i,"a","ı")&&cr(i,"e","i")&&cr(i,"o","u")&&cr(i,"ö","ü"),L.cursor=L.limit,function(){var r;if(L.ket=L.cursor,r=L.find_among_b(q,4))switch(L.bra=L.cursor,r){case 1:L.slice_from("p");break;case 2:L.slice_from("ç");break;case 3:L.slice_from("t");break;case 4:L.slice_from("k")}}(),!0)}this.setCurrent=function(r){L.setCurrent(r)},this.getCurrent=function(){return L.getCurrent()},this.stem=function(){return!!(function(){for(var r,i=L.cursor,e=2;;){for(r=L.cursor;!L.in_grouping(C,97,305);){if(L.cursor>=L.limit)return L.cursor=r,!(0c;c++)if(m=e[c],v=j.style[m],u(m,"-")&&(m=p(m)),j.style[m]!==n){if(i||r(o,"undefined"))return a(),"pfx"!=t||m;try{j.style[m]=o}catch(e){}if(j.style[m]!=v)return a(),"pfx"!=t||m}return a(),!1}function m(e,t){return function(){return e.apply(t,arguments)}}function v(e,t,n){var o;for(var i in e)if(e[i]in t)return!1===n?e[i]:(o=t[e[i]],r(o,"function")?m(o,n||t):o);return!1}function y(e,t,n,o,i){var s=e.charAt(0).toUpperCase()+e.slice(1),a=(e+" "+k.join(s+" ")+s).split(" ");return r(t,"string")||r(t,"undefined")?h(a,t,o,i):(a=(e+" "+A.join(s+" ")+s).split(" "),v(a,t,n))}function g(e,t,r){return y(e,n,n,t,r)}var S=[],C={_version:"3.6.0",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var n=this;setTimeout(function(){t(n[e])},0)},addTest:function(e,t,n){S.push({name:e,fn:t,options:n})},addAsyncTest:function(e){S.push({name:null,fn:e})}},w=function(){};w.prototype=C,w=new w;var b,_=[],x=t.documentElement,T="svg"===x.nodeName.toLowerCase();!function(){var e={}.hasOwnProperty;b=r(e,"undefined")||r(e.call,"undefined")?function(e,t){return t in e&&r(e.constructor.prototype[t],"undefined")}:function(t,n){return e.call(t,n)}}(),C._l={},C.on=function(e,t){this._l[e]||(this._l[e]=[]),this._l[e].push(t),w.hasOwnProperty(e)&&setTimeout(function(){w._trigger(e,w[e])},0)},C._trigger=function(e,t){if(this._l[e]){var n=this._l[e];setTimeout(function(){var e;for(e=0;epnp-spfx-controls diff --git a/assets/propertyFieldButton.gif b/assets/propertyFieldButton.gif new file mode 100644 index 00000000..9a2d2864 Binary files /dev/null and b/assets/propertyFieldButton.gif differ diff --git a/assets/propertyFieldPassword.png b/assets/propertyFieldPassword.png new file mode 100644 index 00000000..11aa1307 Binary files /dev/null and b/assets/propertyFieldPassword.png differ diff --git a/assets/propertyPaneMarkdownContent.png b/assets/propertyPaneMarkdownContent.png new file mode 100644 index 00000000..23548846 Binary files /dev/null and b/assets/propertyPaneMarkdownContent.png differ diff --git a/assets/propertyeditorexpanded.png b/assets/propertyeditorexpanded.png new file mode 100644 index 00000000..928e974c Binary files /dev/null and b/assets/propertyeditorexpanded.png differ diff --git a/assets/propertyeditorinpane.png b/assets/propertyeditorinpane.png new file mode 100644 index 00000000..1bea241f Binary files /dev/null and b/assets/propertyeditorinpane.png differ diff --git a/assets/roleDef1.PNG b/assets/roleDef1.PNG new file mode 100644 index 00000000..71568afa Binary files /dev/null and b/assets/roleDef1.PNG differ diff --git a/assets/roleDefPicker1.gif b/assets/roleDefPicker1.gif new file mode 100644 index 00000000..3838d260 Binary files /dev/null and b/assets/roleDefPicker1.gif differ diff --git a/assets/sharepoint.png b/assets/sharepoint.png new file mode 100644 index 00000000..2406dddb Binary files /dev/null and b/assets/sharepoint.png differ diff --git a/assets/single-list-picker.png b/assets/single-list-picker.png new file mode 100644 index 00000000..63ad1047 Binary files /dev/null and b/assets/single-list-picker.png differ diff --git a/assets/singleColumnPicker.png b/assets/singleColumnPicker.png new file mode 100644 index 00000000..b2178348 Binary files /dev/null and b/assets/singleColumnPicker.png differ diff --git a/assets/sitepicker-selected.png b/assets/sitepicker-selected.png new file mode 100644 index 00000000..3844cac5 Binary files /dev/null and b/assets/sitepicker-selected.png differ diff --git a/assets/sitepicker.png b/assets/sitepicker.png new file mode 100644 index 00000000..9f0c4bc9 Binary files /dev/null and b/assets/sitepicker.png differ diff --git a/assets/sliderfieldwithcallout-open.png b/assets/sliderfieldwithcallout-open.png new file mode 100644 index 00000000..d0555fcd Binary files /dev/null and b/assets/sliderfieldwithcallout-open.png differ diff --git a/assets/sliderfieldwithcallout.png b/assets/sliderfieldwithcallout.png new file mode 100644 index 00000000..7d23196a Binary files /dev/null and b/assets/sliderfieldwithcallout.png differ diff --git a/assets/spinbutton-increment.png b/assets/spinbutton-increment.png new file mode 100644 index 00000000..db8385cd Binary files /dev/null and b/assets/spinbutton-increment.png differ diff --git a/assets/spinbutton-initial.png b/assets/spinbutton-initial.png new file mode 100644 index 00000000..70f4dc3a Binary files /dev/null and b/assets/spinbutton-initial.png differ diff --git a/assets/spinner.png b/assets/spinner.png new file mode 100644 index 00000000..78e4d6c2 Binary files /dev/null and b/assets/spinner.png differ diff --git a/assets/stylesheets/application-palette.22915126.css b/assets/stylesheets/application-palette.22915126.css new file mode 100644 index 00000000..3c8766e2 --- /dev/null +++ b/assets/stylesheets/application-palette.22915126.css @@ -0,0 +1,1176 @@ +button[data-md-color-primary], +button[data-md-color-accent] { + width: 13rem; + margin-bottom: 0.4rem; + padding: 2.4rem 0.8rem 0.4rem; + transition: background-color 0.25s, opacity 0.25s; + border-radius: 0.2rem; + color: white; + font-size: 1.28rem; + text-align: left; + cursor: pointer; } + button[data-md-color-primary]:hover, + button[data-md-color-accent]:hover { + opacity: 0.75; } + +button[data-md-color-primary="red"] { + background-color: #ef5350; } + +[data-md-color-primary="red"] .md-typeset a { + color: #ef5350; } + +[data-md-color-primary="red"] .md-header { + background-color: #ef5350; } + +[data-md-color-primary="red"] .md-hero { + background-color: #ef5350; } + +[data-md-color-primary="red"] .md-nav__link:active, +[data-md-color-primary="red"] .md-nav__link--active { + color: #ef5350; } + +[data-md-color-primary="red"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="pink"] { + background-color: #e91e63; } + +[data-md-color-primary="pink"] .md-typeset a { + color: #e91e63; } + +[data-md-color-primary="pink"] .md-header { + background-color: #e91e63; } + +[data-md-color-primary="pink"] .md-hero { + background-color: #e91e63; } + +[data-md-color-primary="pink"] .md-nav__link:active, +[data-md-color-primary="pink"] .md-nav__link--active { + color: #e91e63; } + +[data-md-color-primary="pink"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="purple"] { + background-color: #ab47bc; } + +[data-md-color-primary="purple"] .md-typeset a { + color: #ab47bc; } + +[data-md-color-primary="purple"] .md-header { + background-color: #ab47bc; } + +[data-md-color-primary="purple"] .md-hero { + background-color: #ab47bc; } + +[data-md-color-primary="purple"] .md-nav__link:active, +[data-md-color-primary="purple"] .md-nav__link--active { + color: #ab47bc; } + +[data-md-color-primary="purple"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="deep-purple"] { + background-color: #7e57c2; } + +[data-md-color-primary="deep-purple"] .md-typeset a { + color: #7e57c2; } + +[data-md-color-primary="deep-purple"] .md-header { + background-color: #7e57c2; } + +[data-md-color-primary="deep-purple"] .md-hero { + background-color: #7e57c2; } + +[data-md-color-primary="deep-purple"] .md-nav__link:active, +[data-md-color-primary="deep-purple"] .md-nav__link--active { + color: #7e57c2; } + +[data-md-color-primary="deep-purple"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="indigo"] { + background-color: #3f51b5; } + +[data-md-color-primary="indigo"] .md-typeset a { + color: #3f51b5; } + +[data-md-color-primary="indigo"] .md-header { + background-color: #3f51b5; } + +[data-md-color-primary="indigo"] .md-hero { + background-color: #3f51b5; } + +[data-md-color-primary="indigo"] .md-nav__link:active, +[data-md-color-primary="indigo"] .md-nav__link--active { + color: #3f51b5; } + +[data-md-color-primary="indigo"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="blue"] { + background-color: #2196f3; } + +[data-md-color-primary="blue"] .md-typeset a { + color: #2196f3; } + +[data-md-color-primary="blue"] .md-header { + background-color: #2196f3; } + +[data-md-color-primary="blue"] .md-hero { + background-color: #2196f3; } + +[data-md-color-primary="blue"] .md-nav__link:active, +[data-md-color-primary="blue"] .md-nav__link--active { + color: #2196f3; } + +[data-md-color-primary="blue"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="light-blue"] { + background-color: #03a9f4; } + +[data-md-color-primary="light-blue"] .md-typeset a { + color: #03a9f4; } + +[data-md-color-primary="light-blue"] .md-header { + background-color: #03a9f4; } + +[data-md-color-primary="light-blue"] .md-hero { + background-color: #03a9f4; } + +[data-md-color-primary="light-blue"] .md-nav__link:active, +[data-md-color-primary="light-blue"] .md-nav__link--active { + color: #03a9f4; } + +[data-md-color-primary="light-blue"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="cyan"] { + background-color: #00bcd4; } + +[data-md-color-primary="cyan"] .md-typeset a { + color: #00bcd4; } + +[data-md-color-primary="cyan"] .md-header { + background-color: #00bcd4; } + +[data-md-color-primary="cyan"] .md-hero { + background-color: #00bcd4; } + +[data-md-color-primary="cyan"] .md-nav__link:active, +[data-md-color-primary="cyan"] .md-nav__link--active { + color: #00bcd4; } + +[data-md-color-primary="cyan"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="teal"] { + background-color: #009688; } + +[data-md-color-primary="teal"] .md-typeset a { + color: #009688; } + +[data-md-color-primary="teal"] .md-header { + background-color: #009688; } + +[data-md-color-primary="teal"] .md-hero { + background-color: #009688; } + +[data-md-color-primary="teal"] .md-nav__link:active, +[data-md-color-primary="teal"] .md-nav__link--active { + color: #009688; } + +[data-md-color-primary="teal"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="green"] { + background-color: #4caf50; } + +[data-md-color-primary="green"] .md-typeset a { + color: #4caf50; } + +[data-md-color-primary="green"] .md-header { + background-color: #4caf50; } + +[data-md-color-primary="green"] .md-hero { + background-color: #4caf50; } + +[data-md-color-primary="green"] .md-nav__link:active, +[data-md-color-primary="green"] .md-nav__link--active { + color: #4caf50; } + +[data-md-color-primary="green"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="light-green"] { + background-color: #7cb342; } + +[data-md-color-primary="light-green"] .md-typeset a { + color: #7cb342; } + +[data-md-color-primary="light-green"] .md-header { + background-color: #7cb342; } + +[data-md-color-primary="light-green"] .md-hero { + background-color: #7cb342; } + +[data-md-color-primary="light-green"] .md-nav__link:active, +[data-md-color-primary="light-green"] .md-nav__link--active { + color: #7cb342; } + +[data-md-color-primary="light-green"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="lime"] { + background-color: #c0ca33; } + +[data-md-color-primary="lime"] .md-typeset a { + color: #c0ca33; } + +[data-md-color-primary="lime"] .md-header { + background-color: #c0ca33; } + +[data-md-color-primary="lime"] .md-hero { + background-color: #c0ca33; } + +[data-md-color-primary="lime"] .md-nav__link:active, +[data-md-color-primary="lime"] .md-nav__link--active { + color: #c0ca33; } + +[data-md-color-primary="lime"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="yellow"] { + background-color: #f9a825; } + +[data-md-color-primary="yellow"] .md-typeset a { + color: #f9a825; } + +[data-md-color-primary="yellow"] .md-header { + background-color: #f9a825; } + +[data-md-color-primary="yellow"] .md-hero { + background-color: #f9a825; } + +[data-md-color-primary="yellow"] .md-nav__link:active, +[data-md-color-primary="yellow"] .md-nav__link--active { + color: #f9a825; } + +[data-md-color-primary="yellow"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="amber"] { + background-color: #ffa000; } + +[data-md-color-primary="amber"] .md-typeset a { + color: #ffa000; } + +[data-md-color-primary="amber"] .md-header { + background-color: #ffa000; } + +[data-md-color-primary="amber"] .md-hero { + background-color: #ffa000; } + +[data-md-color-primary="amber"] .md-nav__link:active, +[data-md-color-primary="amber"] .md-nav__link--active { + color: #ffa000; } + +[data-md-color-primary="amber"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="orange"] { + background-color: #fb8c00; } + +[data-md-color-primary="orange"] .md-typeset a { + color: #fb8c00; } + +[data-md-color-primary="orange"] .md-header { + background-color: #fb8c00; } + +[data-md-color-primary="orange"] .md-hero { + background-color: #fb8c00; } + +[data-md-color-primary="orange"] .md-nav__link:active, +[data-md-color-primary="orange"] .md-nav__link--active { + color: #fb8c00; } + +[data-md-color-primary="orange"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="deep-orange"] { + background-color: #ff7043; } + +[data-md-color-primary="deep-orange"] .md-typeset a { + color: #ff7043; } + +[data-md-color-primary="deep-orange"] .md-header { + background-color: #ff7043; } + +[data-md-color-primary="deep-orange"] .md-hero { + background-color: #ff7043; } + +[data-md-color-primary="deep-orange"] .md-nav__link:active, +[data-md-color-primary="deep-orange"] .md-nav__link--active { + color: #ff7043; } + +[data-md-color-primary="deep-orange"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="brown"] { + background-color: #795548; } + +[data-md-color-primary="brown"] .md-typeset a { + color: #795548; } + +[data-md-color-primary="brown"] .md-header { + background-color: #795548; } + +[data-md-color-primary="brown"] .md-hero { + background-color: #795548; } + +[data-md-color-primary="brown"] .md-nav__link:active, +[data-md-color-primary="brown"] .md-nav__link--active { + color: #795548; } + +[data-md-color-primary="brown"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="grey"] { + background-color: #757575; } + +[data-md-color-primary="grey"] .md-typeset a { + color: #757575; } + +[data-md-color-primary="grey"] .md-header { + background-color: #757575; } + +[data-md-color-primary="grey"] .md-hero { + background-color: #757575; } + +[data-md-color-primary="grey"] .md-nav__link:active, +[data-md-color-primary="grey"] .md-nav__link--active { + color: #757575; } + +[data-md-color-primary="grey"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="blue-grey"] { + background-color: #546e7a; } + +[data-md-color-primary="blue-grey"] .md-typeset a { + color: #546e7a; } + +[data-md-color-primary="blue-grey"] .md-header { + background-color: #546e7a; } + +[data-md-color-primary="blue-grey"] .md-hero { + background-color: #546e7a; } + +[data-md-color-primary="blue-grey"] .md-nav__link:active, +[data-md-color-primary="blue-grey"] .md-nav__link--active { + color: #546e7a; } + +[data-md-color-primary="blue-grey"] .md-nav__item--nested > .md-nav__link { + color: inherit; } + +button[data-md-color-primary="white"] { + background-color: white; + color: rgba(0, 0, 0, 0.87); + box-shadow: 0 0 0.1rem rgba(0, 0, 0, 0.54) inset; } + +[data-md-color-primary="white"] .md-header { + background-color: white; + color: rgba(0, 0, 0, 0.87); } + +[data-md-color-primary="white"] .md-hero { + background-color: white; + color: rgba(0, 0, 0, 0.87); } + [data-md-color-primary="white"] .md-hero--expand { + border-bottom: 0.1rem solid rgba(0, 0, 0, 0.07); } + +button[data-md-color-accent="red"] { + background-color: #ff1744; } + +[data-md-color-accent="red"] .md-typeset a:hover, +[data-md-color-accent="red"] .md-typeset a:active { + color: #ff1744; } + +[data-md-color-accent="red"] .md-typeset pre code::-webkit-scrollbar-thumb:hover, +[data-md-color-accent="red"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover { + background-color: #ff1744; } + +[data-md-color-accent="red"] .md-typeset .md-clipboard:hover::before, +[data-md-color-accent="red"] .md-typeset .md-clipboard:active::before { + color: #ff1744; } + +[data-md-color-accent="red"] .md-typeset .footnote li:hover .footnote-backref:hover, +[data-md-color-accent="red"] .md-typeset .footnote li:target .footnote-backref { + color: #ff1744; } + +[data-md-color-accent="red"] .md-typeset [id]:hover .headerlink:hover, +[data-md-color-accent="red"] .md-typeset [id]:target .headerlink, +[data-md-color-accent="red"] .md-typeset [id] .headerlink:focus { + color: #ff1744; } + +[data-md-color-accent="red"] .md-nav__link:focus, +[data-md-color-accent="red"] .md-nav__link:hover { + color: #ff1744; } + +[data-md-color-accent="red"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #ff1744; } + +[data-md-color-accent="red"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="red"] .md-search-result__link:hover { + background-color: rgba(255, 23, 68, 0.1); } + +[data-md-color-accent="red"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #ff1744; } + +[data-md-color-accent="red"] .md-source-file:hover::before { + background-color: #ff1744; } + +button[data-md-color-accent="pink"] { + background-color: #f50057; } + +[data-md-color-accent="pink"] .md-typeset a:hover, +[data-md-color-accent="pink"] .md-typeset a:active { + color: #f50057; } + +[data-md-color-accent="pink"] .md-typeset pre code::-webkit-scrollbar-thumb:hover, +[data-md-color-accent="pink"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover { + background-color: #f50057; } + +[data-md-color-accent="pink"] .md-typeset .md-clipboard:hover::before, +[data-md-color-accent="pink"] .md-typeset .md-clipboard:active::before { + color: #f50057; } + +[data-md-color-accent="pink"] .md-typeset .footnote li:hover .footnote-backref:hover, +[data-md-color-accent="pink"] .md-typeset .footnote li:target .footnote-backref { + color: #f50057; } + +[data-md-color-accent="pink"] .md-typeset [id]:hover .headerlink:hover, +[data-md-color-accent="pink"] .md-typeset [id]:target .headerlink, +[data-md-color-accent="pink"] .md-typeset [id] .headerlink:focus { + color: #f50057; } + +[data-md-color-accent="pink"] .md-nav__link:focus, +[data-md-color-accent="pink"] .md-nav__link:hover { + color: #f50057; } + +[data-md-color-accent="pink"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #f50057; } + +[data-md-color-accent="pink"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="pink"] .md-search-result__link:hover { + background-color: rgba(245, 0, 87, 0.1); } + +[data-md-color-accent="pink"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #f50057; } + +[data-md-color-accent="pink"] .md-source-file:hover::before { + background-color: #f50057; } + +button[data-md-color-accent="purple"] { + background-color: #e040fb; } + +[data-md-color-accent="purple"] .md-typeset a:hover, +[data-md-color-accent="purple"] .md-typeset a:active { + color: #e040fb; } + +[data-md-color-accent="purple"] .md-typeset pre code::-webkit-scrollbar-thumb:hover, +[data-md-color-accent="purple"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover { + background-color: #e040fb; } + +[data-md-color-accent="purple"] .md-typeset .md-clipboard:hover::before, +[data-md-color-accent="purple"] .md-typeset .md-clipboard:active::before { + color: #e040fb; } + +[data-md-color-accent="purple"] .md-typeset .footnote li:hover .footnote-backref:hover, +[data-md-color-accent="purple"] .md-typeset .footnote li:target .footnote-backref { + color: #e040fb; } + +[data-md-color-accent="purple"] .md-typeset [id]:hover .headerlink:hover, +[data-md-color-accent="purple"] .md-typeset [id]:target .headerlink, +[data-md-color-accent="purple"] .md-typeset [id] .headerlink:focus { + color: #e040fb; } + +[data-md-color-accent="purple"] .md-nav__link:focus, +[data-md-color-accent="purple"] .md-nav__link:hover { + color: #e040fb; } + +[data-md-color-accent="purple"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #e040fb; } + +[data-md-color-accent="purple"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="purple"] .md-search-result__link:hover { + background-color: rgba(224, 64, 251, 0.1); } + +[data-md-color-accent="purple"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #e040fb; } + +[data-md-color-accent="purple"] .md-source-file:hover::before { + background-color: #e040fb; } + +button[data-md-color-accent="deep-purple"] { + background-color: #7c4dff; } + +[data-md-color-accent="deep-purple"] .md-typeset a:hover, +[data-md-color-accent="deep-purple"] .md-typeset a:active { + color: #7c4dff; } + +[data-md-color-accent="deep-purple"] .md-typeset pre code::-webkit-scrollbar-thumb:hover, +[data-md-color-accent="deep-purple"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover { + background-color: #7c4dff; } + +[data-md-color-accent="deep-purple"] .md-typeset .md-clipboard:hover::before, +[data-md-color-accent="deep-purple"] .md-typeset .md-clipboard:active::before { + color: #7c4dff; } + +[data-md-color-accent="deep-purple"] .md-typeset .footnote li:hover .footnote-backref:hover, +[data-md-color-accent="deep-purple"] .md-typeset .footnote li:target .footnote-backref { + color: #7c4dff; } + +[data-md-color-accent="deep-purple"] .md-typeset [id]:hover .headerlink:hover, +[data-md-color-accent="deep-purple"] .md-typeset [id]:target .headerlink, +[data-md-color-accent="deep-purple"] .md-typeset [id] .headerlink:focus { + color: #7c4dff; } + +[data-md-color-accent="deep-purple"] .md-nav__link:focus, +[data-md-color-accent="deep-purple"] .md-nav__link:hover { + color: #7c4dff; } + +[data-md-color-accent="deep-purple"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #7c4dff; } + +[data-md-color-accent="deep-purple"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="deep-purple"] .md-search-result__link:hover { + background-color: rgba(124, 77, 255, 0.1); } + +[data-md-color-accent="deep-purple"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #7c4dff; } + +[data-md-color-accent="deep-purple"] .md-source-file:hover::before { + background-color: #7c4dff; } + +button[data-md-color-accent="indigo"] { + background-color: #536dfe; } + +[data-md-color-accent="indigo"] .md-typeset a:hover, +[data-md-color-accent="indigo"] .md-typeset a:active { + color: #536dfe; } + +[data-md-color-accent="indigo"] .md-typeset pre code::-webkit-scrollbar-thumb:hover, +[data-md-color-accent="indigo"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover { + background-color: #536dfe; } + +[data-md-color-accent="indigo"] .md-typeset .md-clipboard:hover::before, +[data-md-color-accent="indigo"] .md-typeset .md-clipboard:active::before { + color: #536dfe; } + +[data-md-color-accent="indigo"] .md-typeset .footnote li:hover .footnote-backref:hover, +[data-md-color-accent="indigo"] .md-typeset .footnote li:target .footnote-backref { + color: #536dfe; } + +[data-md-color-accent="indigo"] .md-typeset [id]:hover .headerlink:hover, +[data-md-color-accent="indigo"] .md-typeset [id]:target .headerlink, +[data-md-color-accent="indigo"] .md-typeset [id] .headerlink:focus { + color: #536dfe; } + +[data-md-color-accent="indigo"] .md-nav__link:focus, +[data-md-color-accent="indigo"] .md-nav__link:hover { + color: #536dfe; } + +[data-md-color-accent="indigo"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #536dfe; } + +[data-md-color-accent="indigo"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="indigo"] .md-search-result__link:hover { + background-color: rgba(83, 109, 254, 0.1); } + +[data-md-color-accent="indigo"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #536dfe; } + +[data-md-color-accent="indigo"] .md-source-file:hover::before { + background-color: #536dfe; } + +button[data-md-color-accent="blue"] { + background-color: #448aff; } + +[data-md-color-accent="blue"] .md-typeset a:hover, +[data-md-color-accent="blue"] .md-typeset a:active { + color: #448aff; } + +[data-md-color-accent="blue"] .md-typeset pre code::-webkit-scrollbar-thumb:hover, +[data-md-color-accent="blue"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover { + background-color: #448aff; } + +[data-md-color-accent="blue"] .md-typeset .md-clipboard:hover::before, +[data-md-color-accent="blue"] .md-typeset .md-clipboard:active::before { + color: #448aff; } + +[data-md-color-accent="blue"] .md-typeset .footnote li:hover .footnote-backref:hover, +[data-md-color-accent="blue"] .md-typeset .footnote li:target .footnote-backref { + color: #448aff; } + +[data-md-color-accent="blue"] .md-typeset [id]:hover .headerlink:hover, +[data-md-color-accent="blue"] .md-typeset [id]:target .headerlink, +[data-md-color-accent="blue"] .md-typeset [id] .headerlink:focus { + color: #448aff; } + +[data-md-color-accent="blue"] .md-nav__link:focus, +[data-md-color-accent="blue"] .md-nav__link:hover { + color: #448aff; } + +[data-md-color-accent="blue"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #448aff; } + +[data-md-color-accent="blue"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="blue"] .md-search-result__link:hover { + background-color: rgba(68, 138, 255, 0.1); } + +[data-md-color-accent="blue"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #448aff; } + +[data-md-color-accent="blue"] .md-source-file:hover::before { + background-color: #448aff; } + +button[data-md-color-accent="light-blue"] { + background-color: #0091ea; } + +[data-md-color-accent="light-blue"] .md-typeset a:hover, +[data-md-color-accent="light-blue"] .md-typeset a:active { + color: #0091ea; } + +[data-md-color-accent="light-blue"] .md-typeset pre code::-webkit-scrollbar-thumb:hover, +[data-md-color-accent="light-blue"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover { + background-color: #0091ea; } + +[data-md-color-accent="light-blue"] .md-typeset .md-clipboard:hover::before, +[data-md-color-accent="light-blue"] .md-typeset .md-clipboard:active::before { + color: #0091ea; } + +[data-md-color-accent="light-blue"] .md-typeset .footnote li:hover .footnote-backref:hover, +[data-md-color-accent="light-blue"] .md-typeset .footnote li:target .footnote-backref { + color: #0091ea; } + +[data-md-color-accent="light-blue"] .md-typeset [id]:hover .headerlink:hover, +[data-md-color-accent="light-blue"] .md-typeset [id]:target .headerlink, +[data-md-color-accent="light-blue"] .md-typeset [id] .headerlink:focus { + color: #0091ea; } + +[data-md-color-accent="light-blue"] .md-nav__link:focus, +[data-md-color-accent="light-blue"] .md-nav__link:hover { + color: #0091ea; } + +[data-md-color-accent="light-blue"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #0091ea; } + +[data-md-color-accent="light-blue"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="light-blue"] .md-search-result__link:hover { + background-color: rgba(0, 145, 234, 0.1); } + +[data-md-color-accent="light-blue"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #0091ea; } + +[data-md-color-accent="light-blue"] .md-source-file:hover::before { + background-color: #0091ea; } + +button[data-md-color-accent="cyan"] { + background-color: #00b8d4; } + +[data-md-color-accent="cyan"] .md-typeset a:hover, +[data-md-color-accent="cyan"] .md-typeset a:active { + color: #00b8d4; } + +[data-md-color-accent="cyan"] .md-typeset pre code::-webkit-scrollbar-thumb:hover, +[data-md-color-accent="cyan"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover { + background-color: #00b8d4; } + +[data-md-color-accent="cyan"] .md-typeset .md-clipboard:hover::before, +[data-md-color-accent="cyan"] .md-typeset .md-clipboard:active::before { + color: #00b8d4; } + +[data-md-color-accent="cyan"] .md-typeset .footnote li:hover .footnote-backref:hover, +[data-md-color-accent="cyan"] .md-typeset .footnote li:target .footnote-backref { + color: #00b8d4; } + +[data-md-color-accent="cyan"] .md-typeset [id]:hover .headerlink:hover, +[data-md-color-accent="cyan"] .md-typeset [id]:target .headerlink, +[data-md-color-accent="cyan"] .md-typeset [id] .headerlink:focus { + color: #00b8d4; } + +[data-md-color-accent="cyan"] .md-nav__link:focus, +[data-md-color-accent="cyan"] .md-nav__link:hover { + color: #00b8d4; } + +[data-md-color-accent="cyan"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #00b8d4; } + +[data-md-color-accent="cyan"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="cyan"] .md-search-result__link:hover { + background-color: rgba(0, 184, 212, 0.1); } + +[data-md-color-accent="cyan"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #00b8d4; } + +[data-md-color-accent="cyan"] .md-source-file:hover::before { + background-color: #00b8d4; } + +button[data-md-color-accent="teal"] { + background-color: #00bfa5; } + +[data-md-color-accent="teal"] .md-typeset a:hover, +[data-md-color-accent="teal"] .md-typeset a:active { + color: #00bfa5; } + +[data-md-color-accent="teal"] .md-typeset pre code::-webkit-scrollbar-thumb:hover, +[data-md-color-accent="teal"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover { + background-color: #00bfa5; } + +[data-md-color-accent="teal"] .md-typeset .md-clipboard:hover::before, +[data-md-color-accent="teal"] .md-typeset .md-clipboard:active::before { + color: #00bfa5; } + +[data-md-color-accent="teal"] .md-typeset .footnote li:hover .footnote-backref:hover, +[data-md-color-accent="teal"] .md-typeset .footnote li:target .footnote-backref { + color: #00bfa5; } + +[data-md-color-accent="teal"] .md-typeset [id]:hover .headerlink:hover, +[data-md-color-accent="teal"] .md-typeset [id]:target .headerlink, +[data-md-color-accent="teal"] .md-typeset [id] .headerlink:focus { + color: #00bfa5; } + +[data-md-color-accent="teal"] .md-nav__link:focus, +[data-md-color-accent="teal"] .md-nav__link:hover { + color: #00bfa5; } + +[data-md-color-accent="teal"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #00bfa5; } + +[data-md-color-accent="teal"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="teal"] .md-search-result__link:hover { + background-color: rgba(0, 191, 165, 0.1); } + +[data-md-color-accent="teal"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #00bfa5; } + +[data-md-color-accent="teal"] .md-source-file:hover::before { + background-color: #00bfa5; } + +button[data-md-color-accent="green"] { + background-color: #00c853; } + +[data-md-color-accent="green"] .md-typeset a:hover, +[data-md-color-accent="green"] .md-typeset a:active { + color: #00c853; } + +[data-md-color-accent="green"] .md-typeset pre code::-webkit-scrollbar-thumb:hover, +[data-md-color-accent="green"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover { + background-color: #00c853; } + +[data-md-color-accent="green"] .md-typeset .md-clipboard:hover::before, +[data-md-color-accent="green"] .md-typeset .md-clipboard:active::before { + color: #00c853; } + +[data-md-color-accent="green"] .md-typeset .footnote li:hover .footnote-backref:hover, +[data-md-color-accent="green"] .md-typeset .footnote li:target .footnote-backref { + color: #00c853; } + +[data-md-color-accent="green"] .md-typeset [id]:hover .headerlink:hover, +[data-md-color-accent="green"] .md-typeset [id]:target .headerlink, +[data-md-color-accent="green"] .md-typeset [id] .headerlink:focus { + color: #00c853; } + +[data-md-color-accent="green"] .md-nav__link:focus, +[data-md-color-accent="green"] .md-nav__link:hover { + color: #00c853; } + +[data-md-color-accent="green"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #00c853; } + +[data-md-color-accent="green"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="green"] .md-search-result__link:hover { + background-color: rgba(0, 200, 83, 0.1); } + +[data-md-color-accent="green"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #00c853; } + +[data-md-color-accent="green"] .md-source-file:hover::before { + background-color: #00c853; } + +button[data-md-color-accent="light-green"] { + background-color: #64dd17; } + +[data-md-color-accent="light-green"] .md-typeset a:hover, +[data-md-color-accent="light-green"] .md-typeset a:active { + color: #64dd17; } + +[data-md-color-accent="light-green"] .md-typeset pre code::-webkit-scrollbar-thumb:hover, +[data-md-color-accent="light-green"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover { + background-color: #64dd17; } + +[data-md-color-accent="light-green"] .md-typeset .md-clipboard:hover::before, +[data-md-color-accent="light-green"] .md-typeset .md-clipboard:active::before { + color: #64dd17; } + +[data-md-color-accent="light-green"] .md-typeset .footnote li:hover .footnote-backref:hover, +[data-md-color-accent="light-green"] .md-typeset .footnote li:target .footnote-backref { + color: #64dd17; } + +[data-md-color-accent="light-green"] .md-typeset [id]:hover .headerlink:hover, +[data-md-color-accent="light-green"] .md-typeset [id]:target .headerlink, +[data-md-color-accent="light-green"] .md-typeset [id] .headerlink:focus { + color: #64dd17; } + +[data-md-color-accent="light-green"] .md-nav__link:focus, +[data-md-color-accent="light-green"] .md-nav__link:hover { + color: #64dd17; } + +[data-md-color-accent="light-green"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #64dd17; } + +[data-md-color-accent="light-green"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="light-green"] .md-search-result__link:hover { + background-color: rgba(100, 221, 23, 0.1); } + +[data-md-color-accent="light-green"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #64dd17; } + +[data-md-color-accent="light-green"] .md-source-file:hover::before { + background-color: #64dd17; } + +button[data-md-color-accent="lime"] { + background-color: #aeea00; } + +[data-md-color-accent="lime"] .md-typeset a:hover, +[data-md-color-accent="lime"] .md-typeset a:active { + color: #aeea00; } + +[data-md-color-accent="lime"] .md-typeset pre code::-webkit-scrollbar-thumb:hover, +[data-md-color-accent="lime"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover { + background-color: #aeea00; } + +[data-md-color-accent="lime"] .md-typeset .md-clipboard:hover::before, +[data-md-color-accent="lime"] .md-typeset .md-clipboard:active::before { + color: #aeea00; } + +[data-md-color-accent="lime"] .md-typeset .footnote li:hover .footnote-backref:hover, +[data-md-color-accent="lime"] .md-typeset .footnote li:target .footnote-backref { + color: #aeea00; } + +[data-md-color-accent="lime"] .md-typeset [id]:hover .headerlink:hover, +[data-md-color-accent="lime"] .md-typeset [id]:target .headerlink, +[data-md-color-accent="lime"] .md-typeset [id] .headerlink:focus { + color: #aeea00; } + +[data-md-color-accent="lime"] .md-nav__link:focus, +[data-md-color-accent="lime"] .md-nav__link:hover { + color: #aeea00; } + +[data-md-color-accent="lime"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #aeea00; } + +[data-md-color-accent="lime"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="lime"] .md-search-result__link:hover { + background-color: rgba(174, 234, 0, 0.1); } + +[data-md-color-accent="lime"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #aeea00; } + +[data-md-color-accent="lime"] .md-source-file:hover::before { + background-color: #aeea00; } + +button[data-md-color-accent="yellow"] { + background-color: #ffd600; } + +[data-md-color-accent="yellow"] .md-typeset a:hover, +[data-md-color-accent="yellow"] .md-typeset a:active { + color: #ffd600; } + +[data-md-color-accent="yellow"] .md-typeset pre code::-webkit-scrollbar-thumb:hover, +[data-md-color-accent="yellow"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover { + background-color: #ffd600; } + +[data-md-color-accent="yellow"] .md-typeset .md-clipboard:hover::before, +[data-md-color-accent="yellow"] .md-typeset .md-clipboard:active::before { + color: #ffd600; } + +[data-md-color-accent="yellow"] .md-typeset .footnote li:hover .footnote-backref:hover, +[data-md-color-accent="yellow"] .md-typeset .footnote li:target .footnote-backref { + color: #ffd600; } + +[data-md-color-accent="yellow"] .md-typeset [id]:hover .headerlink:hover, +[data-md-color-accent="yellow"] .md-typeset [id]:target .headerlink, +[data-md-color-accent="yellow"] .md-typeset [id] .headerlink:focus { + color: #ffd600; } + +[data-md-color-accent="yellow"] .md-nav__link:focus, +[data-md-color-accent="yellow"] .md-nav__link:hover { + color: #ffd600; } + +[data-md-color-accent="yellow"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #ffd600; } + +[data-md-color-accent="yellow"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="yellow"] .md-search-result__link:hover { + background-color: rgba(255, 214, 0, 0.1); } + +[data-md-color-accent="yellow"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #ffd600; } + +[data-md-color-accent="yellow"] .md-source-file:hover::before { + background-color: #ffd600; } + +button[data-md-color-accent="amber"] { + background-color: #ffab00; } + +[data-md-color-accent="amber"] .md-typeset a:hover, +[data-md-color-accent="amber"] .md-typeset a:active { + color: #ffab00; } + +[data-md-color-accent="amber"] .md-typeset pre code::-webkit-scrollbar-thumb:hover, +[data-md-color-accent="amber"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover { + background-color: #ffab00; } + +[data-md-color-accent="amber"] .md-typeset .md-clipboard:hover::before, +[data-md-color-accent="amber"] .md-typeset .md-clipboard:active::before { + color: #ffab00; } + +[data-md-color-accent="amber"] .md-typeset .footnote li:hover .footnote-backref:hover, +[data-md-color-accent="amber"] .md-typeset .footnote li:target .footnote-backref { + color: #ffab00; } + +[data-md-color-accent="amber"] .md-typeset [id]:hover .headerlink:hover, +[data-md-color-accent="amber"] .md-typeset [id]:target .headerlink, +[data-md-color-accent="amber"] .md-typeset [id] .headerlink:focus { + color: #ffab00; } + +[data-md-color-accent="amber"] .md-nav__link:focus, +[data-md-color-accent="amber"] .md-nav__link:hover { + color: #ffab00; } + +[data-md-color-accent="amber"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #ffab00; } + +[data-md-color-accent="amber"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="amber"] .md-search-result__link:hover { + background-color: rgba(255, 171, 0, 0.1); } + +[data-md-color-accent="amber"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #ffab00; } + +[data-md-color-accent="amber"] .md-source-file:hover::before { + background-color: #ffab00; } + +button[data-md-color-accent="orange"] { + background-color: #ff9100; } + +[data-md-color-accent="orange"] .md-typeset a:hover, +[data-md-color-accent="orange"] .md-typeset a:active { + color: #ff9100; } + +[data-md-color-accent="orange"] .md-typeset pre code::-webkit-scrollbar-thumb:hover, +[data-md-color-accent="orange"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover { + background-color: #ff9100; } + +[data-md-color-accent="orange"] .md-typeset .md-clipboard:hover::before, +[data-md-color-accent="orange"] .md-typeset .md-clipboard:active::before { + color: #ff9100; } + +[data-md-color-accent="orange"] .md-typeset .footnote li:hover .footnote-backref:hover, +[data-md-color-accent="orange"] .md-typeset .footnote li:target .footnote-backref { + color: #ff9100; } + +[data-md-color-accent="orange"] .md-typeset [id]:hover .headerlink:hover, +[data-md-color-accent="orange"] .md-typeset [id]:target .headerlink, +[data-md-color-accent="orange"] .md-typeset [id] .headerlink:focus { + color: #ff9100; } + +[data-md-color-accent="orange"] .md-nav__link:focus, +[data-md-color-accent="orange"] .md-nav__link:hover { + color: #ff9100; } + +[data-md-color-accent="orange"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #ff9100; } + +[data-md-color-accent="orange"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="orange"] .md-search-result__link:hover { + background-color: rgba(255, 145, 0, 0.1); } + +[data-md-color-accent="orange"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #ff9100; } + +[data-md-color-accent="orange"] .md-source-file:hover::before { + background-color: #ff9100; } + +button[data-md-color-accent="deep-orange"] { + background-color: #ff6e40; } + +[data-md-color-accent="deep-orange"] .md-typeset a:hover, +[data-md-color-accent="deep-orange"] .md-typeset a:active { + color: #ff6e40; } + +[data-md-color-accent="deep-orange"] .md-typeset pre code::-webkit-scrollbar-thumb:hover, +[data-md-color-accent="deep-orange"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover { + background-color: #ff6e40; } + +[data-md-color-accent="deep-orange"] .md-typeset .md-clipboard:hover::before, +[data-md-color-accent="deep-orange"] .md-typeset .md-clipboard:active::before { + color: #ff6e40; } + +[data-md-color-accent="deep-orange"] .md-typeset .footnote li:hover .footnote-backref:hover, +[data-md-color-accent="deep-orange"] .md-typeset .footnote li:target .footnote-backref { + color: #ff6e40; } + +[data-md-color-accent="deep-orange"] .md-typeset [id]:hover .headerlink:hover, +[data-md-color-accent="deep-orange"] .md-typeset [id]:target .headerlink, +[data-md-color-accent="deep-orange"] .md-typeset [id] .headerlink:focus { + color: #ff6e40; } + +[data-md-color-accent="deep-orange"] .md-nav__link:focus, +[data-md-color-accent="deep-orange"] .md-nav__link:hover { + color: #ff6e40; } + +[data-md-color-accent="deep-orange"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #ff6e40; } + +[data-md-color-accent="deep-orange"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="deep-orange"] .md-search-result__link:hover { + background-color: rgba(255, 110, 64, 0.1); } + +[data-md-color-accent="deep-orange"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #ff6e40; } + +[data-md-color-accent="deep-orange"] .md-source-file:hover::before { + background-color: #ff6e40; } + +@media only screen and (max-width: 59.9375em) { + [data-md-color-primary="red"] .md-nav__source { + background-color: rgba(190, 66, 64, 0.9675); } + [data-md-color-primary="pink"] .md-nav__source { + background-color: rgba(185, 24, 79, 0.9675); } + [data-md-color-primary="purple"] .md-nav__source { + background-color: rgba(136, 57, 150, 0.9675); } + [data-md-color-primary="deep-purple"] .md-nav__source { + background-color: rgba(100, 69, 154, 0.9675); } + [data-md-color-primary="indigo"] .md-nav__source { + background-color: rgba(50, 64, 144, 0.9675); } + [data-md-color-primary="blue"] .md-nav__source { + background-color: rgba(26, 119, 193, 0.9675); } + [data-md-color-primary="light-blue"] .md-nav__source { + background-color: rgba(2, 134, 194, 0.9675); } + [data-md-color-primary="cyan"] .md-nav__source { + background-color: rgba(0, 150, 169, 0.9675); } + [data-md-color-primary="teal"] .md-nav__source { + background-color: rgba(0, 119, 108, 0.9675); } + [data-md-color-primary="green"] .md-nav__source { + background-color: rgba(60, 139, 64, 0.9675); } + [data-md-color-primary="light-green"] .md-nav__source { + background-color: rgba(99, 142, 53, 0.9675); } + [data-md-color-primary="lime"] .md-nav__source { + background-color: rgba(153, 161, 41, 0.9675); } + [data-md-color-primary="yellow"] .md-nav__source { + background-color: rgba(198, 134, 29, 0.9675); } + [data-md-color-primary="amber"] .md-nav__source { + background-color: rgba(203, 127, 0, 0.9675); } + [data-md-color-primary="orange"] .md-nav__source { + background-color: rgba(200, 111, 0, 0.9675); } + [data-md-color-primary="deep-orange"] .md-nav__source { + background-color: rgba(203, 89, 53, 0.9675); } + [data-md-color-primary="brown"] .md-nav__source { + background-color: rgba(96, 68, 57, 0.9675); } + [data-md-color-primary="grey"] .md-nav__source { + background-color: rgba(93, 93, 93, 0.9675); } + [data-md-color-primary="blue-grey"] .md-nav__source { + background-color: rgba(67, 88, 97, 0.9675); } + [data-md-color-primary="white"] .md-nav__source { + background-color: rgba(0, 0, 0, 0.07); + color: rgba(0, 0, 0, 0.87); } } + +@media only screen and (max-width: 76.1875em) { + html [data-md-color-primary="red"] .md-nav--primary .md-nav__title--site { + background-color: #ef5350; } + html [data-md-color-primary="pink"] .md-nav--primary .md-nav__title--site { + background-color: #e91e63; } + html [data-md-color-primary="purple"] .md-nav--primary .md-nav__title--site { + background-color: #ab47bc; } + html [data-md-color-primary="deep-purple"] .md-nav--primary .md-nav__title--site { + background-color: #7e57c2; } + html [data-md-color-primary="indigo"] .md-nav--primary .md-nav__title--site { + background-color: #3f51b5; } + html [data-md-color-primary="blue"] .md-nav--primary .md-nav__title--site { + background-color: #2196f3; } + html [data-md-color-primary="light-blue"] .md-nav--primary .md-nav__title--site { + background-color: #03a9f4; } + html [data-md-color-primary="cyan"] .md-nav--primary .md-nav__title--site { + background-color: #00bcd4; } + html [data-md-color-primary="teal"] .md-nav--primary .md-nav__title--site { + background-color: #009688; } + html [data-md-color-primary="green"] .md-nav--primary .md-nav__title--site { + background-color: #4caf50; } + html [data-md-color-primary="light-green"] .md-nav--primary .md-nav__title--site { + background-color: #7cb342; } + html [data-md-color-primary="lime"] .md-nav--primary .md-nav__title--site { + background-color: #c0ca33; } + html [data-md-color-primary="yellow"] .md-nav--primary .md-nav__title--site { + background-color: #f9a825; } + html [data-md-color-primary="amber"] .md-nav--primary .md-nav__title--site { + background-color: #ffa000; } + html [data-md-color-primary="orange"] .md-nav--primary .md-nav__title--site { + background-color: #fb8c00; } + html [data-md-color-primary="deep-orange"] .md-nav--primary .md-nav__title--site { + background-color: #ff7043; } + html [data-md-color-primary="brown"] .md-nav--primary .md-nav__title--site { + background-color: #795548; } + html [data-md-color-primary="grey"] .md-nav--primary .md-nav__title--site { + background-color: #757575; } + html [data-md-color-primary="blue-grey"] .md-nav--primary .md-nav__title--site { + background-color: #546e7a; } + html [data-md-color-primary="white"] .md-nav--primary .md-nav__title--site { + background-color: white; + color: rgba(0, 0, 0, 0.87); } + [data-md-color-primary="white"] .md-hero { + border-bottom: 0.1rem solid rgba(0, 0, 0, 0.07); } } + +@media only screen and (min-width: 76.25em) { + [data-md-color-primary="red"] .md-tabs { + background-color: #ef5350; } + [data-md-color-primary="pink"] .md-tabs { + background-color: #e91e63; } + [data-md-color-primary="purple"] .md-tabs { + background-color: #ab47bc; } + [data-md-color-primary="deep-purple"] .md-tabs { + background-color: #7e57c2; } + [data-md-color-primary="indigo"] .md-tabs { + background-color: #3f51b5; } + [data-md-color-primary="blue"] .md-tabs { + background-color: #2196f3; } + [data-md-color-primary="light-blue"] .md-tabs { + background-color: #03a9f4; } + [data-md-color-primary="cyan"] .md-tabs { + background-color: #00bcd4; } + [data-md-color-primary="teal"] .md-tabs { + background-color: #009688; } + [data-md-color-primary="green"] .md-tabs { + background-color: #4caf50; } + [data-md-color-primary="light-green"] .md-tabs { + background-color: #7cb342; } + [data-md-color-primary="lime"] .md-tabs { + background-color: #c0ca33; } + [data-md-color-primary="yellow"] .md-tabs { + background-color: #f9a825; } + [data-md-color-primary="amber"] .md-tabs { + background-color: #ffa000; } + [data-md-color-primary="orange"] .md-tabs { + background-color: #fb8c00; } + [data-md-color-primary="deep-orange"] .md-tabs { + background-color: #ff7043; } + [data-md-color-primary="brown"] .md-tabs { + background-color: #795548; } + [data-md-color-primary="grey"] .md-tabs { + background-color: #757575; } + [data-md-color-primary="blue-grey"] .md-tabs { + background-color: #546e7a; } + [data-md-color-primary="white"] .md-tabs { + border-bottom: 0.1rem solid rgba(0, 0, 0, 0.07); + background-color: white; + color: rgba(0, 0, 0, 0.87); } } + +@media only screen and (min-width: 60em) { + [data-md-color-primary="white"] .md-search__input { + background-color: rgba(0, 0, 0, 0.07); } + [data-md-color-primary="white"] .md-search__input::-webkit-input-placeholder { + color: rgba(0, 0, 0, 0.54); } + [data-md-color-primary="white"] .md-search__input:-ms-input-placeholder { + color: rgba(0, 0, 0, 0.54); } + [data-md-color-primary="white"] .md-search__input::-ms-input-placeholder { + color: rgba(0, 0, 0, 0.54); } + [data-md-color-primary="white"] .md-search__input::placeholder { + color: rgba(0, 0, 0, 0.54); } } + +/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJhc3NldHMvc3R5bGVzaGVldHMvYXBwbGljYXRpb24tcGFsZXR0ZS4yMjkxNTEyNi5jc3MiLCJzb3VyY2VSb290IjoiIn0=*/ \ No newline at end of file diff --git a/assets/stylesheets/application.11e41852.css b/assets/stylesheets/application.11e41852.css new file mode 100644 index 00000000..01456b44 --- /dev/null +++ b/assets/stylesheets/application.11e41852.css @@ -0,0 +1,2563 @@ +@charset "UTF-8"; +html { + box-sizing: border-box; } + +*, +*::before, +*::after { + box-sizing: inherit; } + +html { + -webkit-text-size-adjust: none; + -moz-text-size-adjust: none; + -ms-text-size-adjust: none; + text-size-adjust: none; } + +body { + margin: 0; } + +hr { + overflow: visible; + box-sizing: content-box; } + +a { + -webkit-text-decoration-skip: objects; } + +a, +button, +label, +input { + -webkit-tap-highlight-color: transparent; } + +a { + color: inherit; + text-decoration: none; } + +small { + font-size: 80%; } + +sub, +sup { + position: relative; + font-size: 80%; + line-height: 0; + vertical-align: baseline; } + +sub { + bottom: -0.25em; } + +sup { + top: -0.5em; } + +img { + border-style: none; } + +table { + border-collapse: separate; + border-spacing: 0; } + +td, +th { + font-weight: normal; + vertical-align: top; } + +button { + margin: 0; + padding: 0; + border: 0; + outline-style: none; + background: transparent; + font-size: inherit; } + +input { + border: 0; + outline: 0; } + +.md-icon, .md-clipboard::before, .md-nav__title::before, .md-nav__button, .md-nav__link::after, .md-search-result__article--document::before, .md-source-file::before, .md-typeset .admonition > .admonition-title::before, .md-typeset details > .admonition-title::before, .md-typeset .admonition > summary::before, .md-typeset details > summary::before, .md-typeset .footnote-backref, .md-typeset .critic.comment::before, .md-typeset summary::after, .md-typeset .task-list-control .task-list-indicator::before { + font-family: "Material Icons"; + font-style: normal; + font-variant: normal; + font-weight: normal; + line-height: 1; + text-transform: none; + white-space: nowrap; + speak: none; + word-wrap: normal; + direction: ltr; } + .md-content__icon, .md-header-nav__button, .md-footer-nav__button, .md-nav__title::before, .md-nav__button, .md-search-result__article--document::before { + display: inline-block; + margin: 0.4rem; + padding: 0.8rem; + font-size: 2.4rem; + cursor: pointer; } + +.md-icon--arrow-back::before { + content: "\E5C4"; } + +.md-icon--arrow-forward::before { + content: "\E5C8"; } + +.md-icon--menu::before { + content: "\E5D2"; } + +.md-icon--search::before { + content: "\E8B6"; } + +[dir="rtl"] .md-icon--arrow-back::before { + content: "\E5C8"; } + +[dir="rtl"] .md-icon--arrow-forward::before { + content: "\E5C4"; } + +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +body, +input { + color: rgba(0, 0, 0, 0.87); + -webkit-font-feature-settings: "kern", "liga"; + font-feature-settings: "kern", "liga"; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } + +pre, +code, +kbd { + color: rgba(0, 0, 0, 0.87); + -webkit-font-feature-settings: "kern"; + font-feature-settings: "kern"; + font-family: "Courier New", Courier, monospace; } + +.md-typeset { + font-size: 1.6rem; + line-height: 1.6; + -webkit-print-color-adjust: exact; } + .md-typeset p, + .md-typeset ul, + .md-typeset ol, + .md-typeset blockquote { + margin: 1em 0; } + .md-typeset h1 { + margin: 0 0 4rem; + color: rgba(0, 0, 0, 0.54); + font-size: 3.125rem; + font-weight: 300; + letter-spacing: -0.01em; + line-height: 1.3; } + .md-typeset h2 { + margin: 4rem 0 1.6rem; + font-size: 2.5rem; + font-weight: 300; + letter-spacing: -0.01em; + line-height: 1.4; } + .md-typeset h3 { + margin: 3.2rem 0 1.6rem; + font-size: 2rem; + font-weight: 400; + letter-spacing: -0.01em; + line-height: 1.5; } + .md-typeset h2 + h3 { + margin-top: 1.6rem; } + .md-typeset h4 { + margin: 1.6rem 0; + font-size: 1.6rem; + font-weight: 700; + letter-spacing: -0.01em; } + .md-typeset h5, + .md-typeset h6 { + margin: 1.6rem 0; + color: rgba(0, 0, 0, 0.54); + font-size: 1.28rem; + font-weight: 700; + letter-spacing: -0.01em; } + .md-typeset h5 { + text-transform: uppercase; } + .md-typeset hr { + margin: 1.5em 0; + border-bottom: 0.1rem dotted rgba(0, 0, 0, 0.26); } + .md-typeset a { + color: #3f51b5; + word-break: break-word; } + .md-typeset a, .md-typeset a::before { + transition: color 0.125s; } + .md-typeset a:hover, .md-typeset a:active { + color: #536dfe; } + .md-typeset code, + .md-typeset pre { + background-color: rgba(236, 236, 236, 0.5); + color: #37474F; + font-size: 85%; + direction: ltr; } + .md-typeset code { + margin: 0 0.29412em; + padding: 0.07353em 0; + border-radius: 0.2rem; + box-shadow: 0.29412em 0 0 rgba(236, 236, 236, 0.5), -0.29412em 0 0 rgba(236, 236, 236, 0.5); + word-break: break-word; + -webkit-box-decoration-break: clone; + box-decoration-break: clone; } + .md-typeset h1 code, + .md-typeset h2 code, + .md-typeset h3 code, + .md-typeset h4 code, + .md-typeset h5 code, + .md-typeset h6 code { + margin: 0; + background-color: transparent; + box-shadow: none; } + .md-typeset a > code { + margin: inherit; + padding: inherit; + border-radius: none; + background-color: inherit; + color: inherit; + box-shadow: none; } + .md-typeset pre { + position: relative; + margin: 1em 0; + border-radius: 0.2rem; + line-height: 1.4; + -webkit-overflow-scrolling: touch; } + .md-typeset pre > code { + display: block; + margin: 0; + padding: 1.05rem 1.2rem; + background-color: transparent; + font-size: inherit; + box-shadow: none; + -webkit-box-decoration-break: none; + box-decoration-break: none; + overflow: auto; } + .md-typeset pre > code::-webkit-scrollbar { + width: 0.4rem; + height: 0.4rem; } + .md-typeset pre > code::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, 0.26); } + .md-typeset pre > code::-webkit-scrollbar-thumb:hover { + background-color: #536dfe; } + .md-typeset kbd { + padding: 0 0.29412em; + border: 0.1rem solid #c9c9c9; + border-radius: 0.3rem; + border-bottom-color: #bcbcbc; + background-color: #FCFCFC; + color: #555555; + font-size: 85%; + box-shadow: 0 0.1rem 0 #b0b0b0; + word-break: break-word; } + .md-typeset mark { + margin: 0 0.25em; + padding: 0.0625em 0; + border-radius: 0.2rem; + background-color: rgba(255, 235, 59, 0.5); + box-shadow: 0.25em 0 0 rgba(255, 235, 59, 0.5), -0.25em 0 0 rgba(255, 235, 59, 0.5); + word-break: break-word; + -webkit-box-decoration-break: clone; + box-decoration-break: clone; } + .md-typeset abbr { + border-bottom: 0.1rem dotted rgba(0, 0, 0, 0.54); + text-decoration: none; + cursor: help; } + .md-typeset small { + opacity: 0.75; } + .md-typeset sup, + .md-typeset sub { + margin-left: 0.07812em; } + [dir="rtl"] .md-typeset sup, [dir="rtl"] + .md-typeset sub { + margin-right: 0.07812em; + margin-left: initial; } + .md-typeset blockquote { + padding-left: 1.2rem; + border-left: 0.4rem solid rgba(0, 0, 0, 0.26); + color: rgba(0, 0, 0, 0.54); } + [dir="rtl"] .md-typeset blockquote { + padding-right: 1.2rem; + padding-left: initial; + border-right: 0.4rem solid rgba(0, 0, 0, 0.26); + border-left: initial; } + .md-typeset ul { + list-style-type: disc; } + .md-typeset ul, + .md-typeset ol { + margin-left: 0.625em; + padding: 0; } + [dir="rtl"] .md-typeset ul, [dir="rtl"] + .md-typeset ol { + margin-right: 0.625em; + margin-left: initial; } + .md-typeset ul ol, + .md-typeset ol ol { + list-style-type: lower-alpha; } + .md-typeset ul ol ol, + .md-typeset ol ol ol { + list-style-type: lower-roman; } + .md-typeset ul li, + .md-typeset ol li { + margin-bottom: 0.5em; + margin-left: 1.25em; } + [dir="rtl"] .md-typeset ul li, [dir="rtl"] + .md-typeset ol li { + margin-right: 1.25em; + margin-left: initial; } + .md-typeset ul li p, + .md-typeset ul li blockquote, + .md-typeset ol li p, + .md-typeset ol li blockquote { + margin: 0.5em 0; } + .md-typeset ul li:last-child, + .md-typeset ol li:last-child { + margin-bottom: 0; } + .md-typeset ul li ul, + .md-typeset ul li ol, + .md-typeset ol li ul, + .md-typeset ol li ol { + margin: 0.5em 0 0.5em 0.625em; } + [dir="rtl"] .md-typeset ul li ul, [dir="rtl"] + .md-typeset ul li ol, [dir="rtl"] + .md-typeset ol li ul, [dir="rtl"] + .md-typeset ol li ol { + margin-right: 0.625em; + margin-left: initial; } + .md-typeset dd { + margin: 1em 0 1em 1.875em; } + [dir="rtl"] .md-typeset dd { + margin-right: 1.875em; + margin-left: initial; } + .md-typeset iframe, + .md-typeset img, + .md-typeset svg { + max-width: 100%; } + .md-typeset table:not([class]) { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); + display: inline-block; + max-width: 100%; + border-radius: 0.2rem; + font-size: 1.28rem; + overflow: auto; + -webkit-overflow-scrolling: touch; } + .md-typeset table:not([class]) + * { + margin-top: 1.5em; } + .md-typeset table:not([class]) th:not([align]), + .md-typeset table:not([class]) td:not([align]) { + text-align: left; } + [dir="rtl"] .md-typeset table:not([class]) th:not([align]), [dir="rtl"] + .md-typeset table:not([class]) td:not([align]) { + text-align: right; } + .md-typeset table:not([class]) th { + min-width: 10rem; + padding: 1.2rem 1.6rem; + background-color: rgba(0, 0, 0, 0.54); + color: white; + vertical-align: top; } + .md-typeset table:not([class]) td { + padding: 1.2rem 1.6rem; + border-top: 0.1rem solid rgba(0, 0, 0, 0.07); + vertical-align: top; } + .md-typeset table:not([class]) tr:first-child td { + border-top: 0; } + .md-typeset table:not([class]) a { + word-break: normal; } + .md-typeset__scrollwrap { + margin: 1em -1.6rem; + overflow-x: auto; + -webkit-overflow-scrolling: touch; } + .md-typeset .md-typeset__table { + display: inline-block; + margin-bottom: 0.5em; + padding: 0 1.6rem; } + .md-typeset .md-typeset__table table { + display: table; + width: 100%; + margin: 0; + overflow: hidden; } + +html { + height: 100%; + font-size: 62.5%; + overflow-x: hidden; } + +body { + position: relative; + height: 100%; } + +hr { + display: block; + height: 0.1rem; + padding: 0; + border: 0; } + +.md-svg { + display: none; } + +.md-grid { + max-width: 122rem; + margin-right: auto; + margin-left: auto; } + +.md-container, +.md-main { + overflow: auto; } + +.md-container { + display: table; + width: 100%; + height: 100%; + padding-top: 4.8rem; + table-layout: fixed; } + +.md-main { + display: table-row; + height: 100%; } + .md-main__inner { + height: 100%; + padding-top: 3rem; + padding-bottom: 0.1rem; } + +.md-toggle { + display: none; } + +.md-overlay { + position: fixed; + top: 0; + width: 0; + height: 0; + transition: width 0s 0.25s, height 0s 0.25s, opacity 0.25s; + background-color: rgba(0, 0, 0, 0.54); + opacity: 0; + z-index: 3; } + +.md-flex { + display: table; } + .md-flex__cell { + display: table-cell; + position: relative; + vertical-align: top; } + .md-flex__cell--shrink { + width: 0%; } + .md-flex__cell--stretch { + display: table; + width: 100%; + table-layout: fixed; } + .md-flex__ellipsis { + display: table-cell; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; } + +.md-skip { + position: fixed; + width: 0.1rem; + height: 0.1rem; + margin: 1rem; + padding: 0.6rem 1rem; + clip: rect(0.1rem); + -webkit-transform: translateY(0.8rem); + transform: translateY(0.8rem); + border-radius: 0.2rem; + background-color: rgba(0, 0, 0, 0.87); + color: white; + font-size: 1.28rem; + opacity: 0; + overflow: hidden; } + .md-skip:focus { + width: auto; + height: auto; + clip: auto; + -webkit-transform: translateX(0); + transform: translateX(0); + transition: opacity 0.175s 0.075s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.175s 0.075s; + transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.175s 0.075s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1); + opacity: 1; + z-index: 10; } + +@page { + margin: 25mm; } + +.md-clipboard { + position: absolute; + top: 0.6rem; + right: 0.6rem; + width: 2.8rem; + height: 2.8rem; + border-radius: 0.2rem; + font-size: 1.6rem; + cursor: pointer; + z-index: 1; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + .md-clipboard::before { + transition: color 0.25s, opacity 0.25s; + color: rgba(0, 0, 0, 0.07); + content: "\E14D"; } + pre:hover .md-clipboard::before, + .codehilite:hover .md-clipboard::before, + .md-typeset .highlight:hover .md-clipboard::before { + color: rgba(0, 0, 0, 0.54); } + .md-clipboard:focus::before, .md-clipboard:hover::before { + color: #536dfe; } + .md-clipboard__message { + display: block; + position: absolute; + top: 0; + right: 3.4rem; + padding: 0.6rem 1rem; + -webkit-transform: translateX(0.8rem); + transform: translateX(0.8rem); + transition: opacity 0.175s, -webkit-transform 0.25s cubic-bezier(0.9, 0.1, 0.9, 0); + transition: transform 0.25s cubic-bezier(0.9, 0.1, 0.9, 0), opacity 0.175s; + transition: transform 0.25s cubic-bezier(0.9, 0.1, 0.9, 0), opacity 0.175s, -webkit-transform 0.25s cubic-bezier(0.9, 0.1, 0.9, 0); + border-radius: 0.2rem; + background-color: rgba(0, 0, 0, 0.54); + color: white; + font-size: 1.28rem; + white-space: nowrap; + opacity: 0; + pointer-events: none; } + .md-clipboard__message--active { + -webkit-transform: translateX(0); + transform: translateX(0); + transition: opacity 0.175s 0.075s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.175s 0.075s; + transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.175s 0.075s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1); + opacity: 1; + pointer-events: initial; } + .md-clipboard__message::before { + content: attr(aria-label); } + .md-clipboard__message::after { + display: block; + position: absolute; + top: 50%; + right: -0.4rem; + width: 0; + margin-top: -0.4rem; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-style: solid; + border-color: transparent rgba(0, 0, 0, 0.54); + content: ""; } + +.md-content__inner { + margin: 0 1.6rem 2.4rem; + padding-top: 1.2rem; } + .md-content__inner::before { + display: block; + height: 0.8rem; + content: ""; } + .md-content__inner > :last-child { + margin-bottom: 0; } + +.md-content__icon { + position: relative; + margin: 0.8rem 0; + padding: 0; + float: right; } + .md-typeset .md-content__icon { + color: rgba(0, 0, 0, 0.26); } + +.md-header { + position: fixed; + top: 0; + right: 0; + left: 0; + height: 4.8rem; + transition: background-color 0.25s, color 0.25s; + background-color: #3f51b5; + color: white; + box-shadow: none; + z-index: 2; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + .no-js .md-header { + transition: none; + box-shadow: none; } + .md-header[data-md-state="shadow"] { + transition: background-color 0.25s, color 0.25s, box-shadow 0.25s; + box-shadow: 0 0 0.4rem rgba(0, 0, 0, 0.1), 0 0.4rem 0.8rem rgba(0, 0, 0, 0.2); } + +.md-header-nav { + padding: 0 0.4rem; } + .md-header-nav__button { + position: relative; + transition: opacity 0.25s; + z-index: 1; } + .md-header-nav__button:hover { + opacity: 0.7; } + .md-header-nav__button.md-logo * { + display: block; } + .no-js .md-header-nav__button.md-icon--search { + display: none; } + .md-header-nav__topic { + display: block; + position: absolute; + transition: opacity 0.15s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1); + transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s; + transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1); + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; } + .md-header-nav__topic + .md-header-nav__topic { + -webkit-transform: translateX(2.5rem); + transform: translateX(2.5rem); + transition: opacity 0.15s, -webkit-transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1); + transition: transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1), opacity 0.15s; + transition: transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1), opacity 0.15s, -webkit-transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1); + opacity: 0; + z-index: -1; + pointer-events: none; } + [dir="rtl"] .md-header-nav__topic + .md-header-nav__topic { + -webkit-transform: translateX(-2.5rem); + transform: translateX(-2.5rem); } + .no-js .md-header-nav__topic { + position: initial; } + .no-js .md-header-nav__topic + .md-header-nav__topic { + display: none; } + .md-header-nav__title { + padding: 0 2rem; + font-size: 1.8rem; + line-height: 4.8rem; } + .md-header-nav__title[data-md-state="active"] .md-header-nav__topic { + -webkit-transform: translateX(-2.5rem); + transform: translateX(-2.5rem); + transition: opacity 0.15s, -webkit-transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1); + transition: transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1), opacity 0.15s; + transition: transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1), opacity 0.15s, -webkit-transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1); + opacity: 0; + z-index: -1; + pointer-events: none; } + [dir="rtl"] .md-header-nav__title[data-md-state="active"] .md-header-nav__topic { + -webkit-transform: translateX(2.5rem); + transform: translateX(2.5rem); } + .md-header-nav__title[data-md-state="active"] .md-header-nav__topic + .md-header-nav__topic { + -webkit-transform: translateX(0); + transform: translateX(0); + transition: opacity 0.15s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1); + transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s; + transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1); + opacity: 1; + z-index: 0; + pointer-events: initial; } + .md-header-nav__source { + display: none; } + +.md-hero { + transition: background 0.25s; + background-color: #3f51b5; + color: white; + font-size: 2rem; + overflow: hidden; } + .md-hero__inner { + margin-top: 2rem; + padding: 1.6rem 1.6rem 0.8rem; + transition: opacity 0.25s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1); + transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.25s; + transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.25s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1); + transition-delay: 0.1s; } + [data-md-state="hidden"] .md-hero__inner { + pointer-events: none; + -webkit-transform: translateY(1.25rem); + transform: translateY(1.25rem); + transition: opacity 0.1s 0s, -webkit-transform 0s 0.4s; + transition: transform 0s 0.4s, opacity 0.1s 0s; + transition: transform 0s 0.4s, opacity 0.1s 0s, -webkit-transform 0s 0.4s; + opacity: 0; } + .md-hero--expand .md-hero__inner { + margin-bottom: 2.4rem; } + +.md-footer-nav { + background-color: rgba(0, 0, 0, 0.87); + color: white; } + .md-footer-nav__inner { + padding: 0.4rem; + overflow: auto; } + .md-footer-nav__link { + padding-top: 2.8rem; + padding-bottom: 0.8rem; + transition: opacity 0.25s; } + .md-footer-nav__link:hover { + opacity: 0.7; } + .md-footer-nav__link--prev { + width: 25%; + float: left; } + [dir="rtl"] .md-footer-nav__link--prev { + float: right; } + .md-footer-nav__link--next { + width: 75%; + float: right; + text-align: right; } + [dir="rtl"] .md-footer-nav__link--next { + float: left; + text-align: left; } + .md-footer-nav__button { + transition: background 0.25s; } + .md-footer-nav__title { + position: relative; + padding: 0 2rem; + font-size: 1.8rem; + line-height: 4.8rem; } + .md-footer-nav__direction { + position: absolute; + right: 0; + left: 0; + margin-top: -2rem; + padding: 0 2rem; + color: rgba(255, 255, 255, 0.7); + font-size: 1.5rem; } + +.md-footer-meta { + background-color: rgba(0, 0, 0, 0.895); } + .md-footer-meta__inner { + padding: 0.4rem; + overflow: auto; } + html .md-footer-meta.md-typeset a { + color: rgba(255, 255, 255, 0.7); } + html .md-footer-meta.md-typeset a:focus, html .md-footer-meta.md-typeset a:hover { + color: white; } + +.md-footer-copyright { + margin: 0 1.2rem; + padding: 0.8rem 0; + color: rgba(255, 255, 255, 0.3); + font-size: 1.28rem; } + .md-footer-copyright__highlight { + color: rgba(255, 255, 255, 0.7); } + +.md-footer-social { + margin: 0 0.8rem; + padding: 0.4rem 0 1.2rem; } + .md-footer-social__link { + display: inline-block; + width: 3.2rem; + height: 3.2rem; + font-size: 1.6rem; + text-align: center; } + .md-footer-social__link::before { + line-height: 1.9; } + +.md-nav { + font-size: 1.4rem; + line-height: 1.3; } + .md-nav__title { + display: block; + padding: 0 1.2rem; + font-weight: 700; + text-overflow: ellipsis; + overflow: hidden; } + .md-nav__title::before { + display: none; + content: "\E5C4"; } + [dir="rtl"] .md-nav__title::before { + content: "\E5C8"; } + .md-nav__title .md-nav__button { + display: none; } + .md-nav__list { + margin: 0; + padding: 0; + list-style: none; } + .md-nav__item { + padding: 0 1.2rem; } + .md-nav__item:last-child { + padding-bottom: 1.2rem; } + .md-nav__item .md-nav__item { + padding-right: 0; } + [dir="rtl"] .md-nav__item .md-nav__item { + padding-right: 1.2rem; + padding-left: 0; } + .md-nav__item .md-nav__item:last-child { + padding-bottom: 0; } + .md-nav__button img { + width: 100%; + height: auto; } + .md-nav__link { + display: block; + margin-top: 0.625em; + transition: color 0.125s; + text-overflow: ellipsis; + cursor: pointer; + overflow: hidden; } + .md-nav__item--nested > .md-nav__link::after { + content: "\E313"; } + html .md-nav__link[for="__toc"] { + display: none; } + html .md-nav__link[for="__toc"] ~ .md-nav { + display: none; } + html .md-nav__link[for="__toc"] + .md-nav__link::after { + display: none; } + .md-nav__link[data-md-state="blur"] { + color: rgba(0, 0, 0, 0.54); } + .md-nav__link:active, .md-nav__link--active { + color: #3f51b5; } + .md-nav__item--nested > .md-nav__link { + color: inherit; } + .md-nav__link:focus, .md-nav__link:hover { + color: #536dfe; } + .md-nav__source { + display: none; } + +.no-js .md-search { + display: none; } + +.md-search__overlay { + opacity: 0; + z-index: 1; } + +.md-search__form { + position: relative; } + +.md-search__input { + position: relative; + padding: 0 4.4rem 0 7.2rem; + text-overflow: ellipsis; + z-index: 2; } + [dir="rtl"] .md-search__input { + padding: 0 7.2rem 0 4.4rem; } + .md-search__input::-webkit-input-placeholder { + transition: color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1); } + .md-search__input:-ms-input-placeholder { + transition: color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1); } + .md-search__input::-ms-input-placeholder { + transition: color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1); } + .md-search__input::placeholder { + transition: color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1); } + .md-search__input ~ .md-search__icon, .md-search__input::-webkit-input-placeholder { + color: rgba(0, 0, 0, 0.54); } + .md-search__input ~ .md-search__icon, .md-search__input:-ms-input-placeholder { + color: rgba(0, 0, 0, 0.54); } + .md-search__input ~ .md-search__icon, .md-search__input::-ms-input-placeholder { + color: rgba(0, 0, 0, 0.54); } + .md-search__input ~ .md-search__icon, .md-search__input::placeholder { + color: rgba(0, 0, 0, 0.54); } + .md-search__input::-ms-clear { + display: none; } + +.md-search__icon { + position: absolute; + transition: color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.25s; + font-size: 2.4rem; + cursor: pointer; + z-index: 2; } + .md-search__icon:hover { + opacity: 0.7; } + .md-search__icon[for="__search"] { + top: 0.6rem; + left: 1rem; } + [dir="rtl"] .md-search__icon[for="__search"] { + right: 1rem; + left: initial; } + .md-search__icon[for="__search"]::before { + content: "\E8B6"; } + .md-search__icon[type="reset"] { + top: 0.6rem; + right: 1rem; + -webkit-transform: scale(0.125); + transform: scale(0.125); + transition: opacity 0.15s, -webkit-transform 0.15s cubic-bezier(0.1, 0.7, 0.1, 1); + transition: transform 0.15s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s; + transition: transform 0.15s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s, -webkit-transform 0.15s cubic-bezier(0.1, 0.7, 0.1, 1); + opacity: 0; } + [dir="rtl"] .md-search__icon[type="reset"] { + right: initial; + left: 1rem; } + [data-md-toggle="search"]:checked ~ .md-header .md-search__input:valid ~ .md-search__icon[type="reset"] { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; } + [data-md-toggle="search"]:checked ~ .md-header .md-search__input:valid ~ .md-search__icon[type="reset"]:hover { + opacity: 0.7; } + +.md-search__output { + position: absolute; + width: 100%; + border-radius: 0 0 0.2rem 0.2rem; + overflow: hidden; + z-index: 1; } + +.md-search__scrollwrap { + height: 100%; + background-color: white; + box-shadow: 0 0.1rem 0 rgba(0, 0, 0, 0.07) inset; + overflow-y: auto; + -webkit-overflow-scrolling: touch; } + +.md-search-result { + color: rgba(0, 0, 0, 0.87); + word-break: break-word; } + .md-search-result__meta { + padding: 0 1.6rem; + background-color: rgba(0, 0, 0, 0.07); + color: rgba(0, 0, 0, 0.54); + font-size: 1.28rem; + line-height: 3.6rem; } + .md-search-result__list { + margin: 0; + padding: 0; + border-top: 0.1rem solid rgba(0, 0, 0, 0.07); + list-style: none; } + .md-search-result__item { + box-shadow: 0 -0.1rem 0 rgba(0, 0, 0, 0.07); } + .md-search-result__link { + display: block; + transition: background 0.25s; + outline: 0; + overflow: hidden; } + .md-search-result__link[data-md-state="active"], .md-search-result__link:hover { + background-color: rgba(83, 109, 254, 0.1); } + .md-search-result__link[data-md-state="active"] .md-search-result__article::before, .md-search-result__link:hover .md-search-result__article::before { + opacity: 0.7; } + .md-search-result__link:last-child .md-search-result__teaser { + margin-bottom: 1.2rem; } + .md-search-result__article { + position: relative; + padding: 0 1.6rem; + overflow: auto; } + .md-search-result__article--document::before { + position: absolute; + left: 0; + margin: 0.2rem; + transition: opacity 0.25s; + color: rgba(0, 0, 0, 0.54); + content: "\E880"; } + [dir="rtl"] .md-search-result__article--document::before { + right: 0; + left: initial; } + .md-search-result__article--document .md-search-result__title { + margin: 1.1rem 0; + font-size: 1.6rem; + font-weight: 400; + line-height: 1.4; } + .md-search-result__title { + margin: 0.5em 0; + font-size: 1.28rem; + font-weight: 700; + line-height: 1.4; } + .md-search-result__teaser { + display: -webkit-box; + max-height: 3.3rem; + margin: 0.5em 0; + color: rgba(0, 0, 0, 0.54); + font-size: 1.28rem; + line-height: 1.4; + text-overflow: ellipsis; + overflow: hidden; + -webkit-line-clamp: 2; } + .md-search-result em { + font-style: normal; + font-weight: 700; + text-decoration: underline; } + +.md-sidebar { + position: absolute; + width: 24.2rem; + padding: 2.4rem 0; + overflow: hidden; } + .md-sidebar[data-md-state="lock"] { + position: fixed; + top: 4.8rem; } + .md-sidebar--secondary { + display: none; } + .md-sidebar__scrollwrap { + max-height: 100%; + margin: 0 0.4rem; + overflow-y: auto; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + .md-sidebar__scrollwrap::-webkit-scrollbar { + width: 0.4rem; + height: 0.4rem; } + .md-sidebar__scrollwrap::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, 0.26); } + .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #536dfe; } + +@-webkit-keyframes md-source__facts--done { + 0% { + height: 0; } + 100% { + height: 1.3rem; } } + +@keyframes md-source__facts--done { + 0% { + height: 0; } + 100% { + height: 1.3rem; } } + +@-webkit-keyframes md-source__fact--done { + 0% { + -webkit-transform: translateY(100%); + transform: translateY(100%); + opacity: 0; } + 50% { + opacity: 0; } + 100% { + -webkit-transform: translateY(0%); + transform: translateY(0%); + opacity: 1; } } + +@keyframes md-source__fact--done { + 0% { + -webkit-transform: translateY(100%); + transform: translateY(100%); + opacity: 0; } + 50% { + opacity: 0; } + 100% { + -webkit-transform: translateY(0%); + transform: translateY(0%); + opacity: 1; } } + +.md-source { + display: block; + padding-right: 1.2rem; + transition: opacity 0.25s; + font-size: 1.3rem; + line-height: 1.2; + white-space: nowrap; } + [dir="rtl"] .md-source { + padding-right: initial; + padding-left: 1.2rem; } + .md-source:hover { + opacity: 0.7; } + .md-source::after { + display: inline-block; + height: 4.8rem; + content: ""; + vertical-align: middle; } + .md-source__icon { + display: inline-block; + width: 4.8rem; + height: 4.8rem; + content: ""; + vertical-align: middle; } + .md-source__icon svg { + width: 2.4rem; + height: 2.4rem; + margin-top: 1.2rem; + margin-left: 1.2rem; } + [dir="rtl"] .md-source__icon svg { + margin-right: 1.2rem; + margin-left: initial; } + .md-source__icon + .md-source__repository { + margin-left: -4.4rem; + padding-left: 4rem; } + [dir="rtl"] .md-source__icon + .md-source__repository { + margin-right: -4.4rem; + margin-left: initial; + padding-right: 4rem; + padding-left: initial; } + .md-source__repository { + display: inline-block; + max-width: 100%; + margin-left: 1.2rem; + font-weight: 700; + text-overflow: ellipsis; + overflow: hidden; + vertical-align: middle; } + .md-source__facts { + margin: 0; + padding: 0; + font-size: 1.1rem; + font-weight: 700; + list-style-type: none; + opacity: 0.75; + overflow: hidden; } + [data-md-state="done"] .md-source__facts { + -webkit-animation: md-source__facts--done 0.25s ease-in; + animation: md-source__facts--done 0.25s ease-in; } + .md-source__fact { + float: left; } + [dir="rtl"] .md-source__fact { + float: right; } + [data-md-state="done"] .md-source__fact { + -webkit-animation: md-source__fact--done 0.4s ease-out; + animation: md-source__fact--done 0.4s ease-out; } + .md-source__fact::before { + margin: 0 0.2rem; + content: "\B7"; } + .md-source__fact:first-child::before { + display: none; } + +.md-source-file { + display: inline-block; + margin: 1em 0.5em 1em 0; + padding-right: 0.5rem; + border-radius: 0.2rem; + background-color: rgba(0, 0, 0, 0.07); + font-size: 1.28rem; + list-style-type: none; + cursor: pointer; + overflow: hidden; } + .md-source-file::before { + display: inline-block; + margin-right: 0.5rem; + padding: 0.5rem; + background-color: rgba(0, 0, 0, 0.26); + color: white; + font-size: 1.6rem; + content: "\E86F"; + vertical-align: middle; } + html .md-source-file { + transition: background 0.4s, color 0.4s, box-shadow 0.4s cubic-bezier(0.4, 0, 0.2, 1); } + html .md-source-file::before { + transition: inherit; } + html body .md-typeset .md-source-file { + color: rgba(0, 0, 0, 0.54); } + .md-source-file:hover { + box-shadow: 0 0 8px rgba(0, 0, 0, 0.18), 0 8px 16px rgba(0, 0, 0, 0.36); } + .md-source-file:hover::before { + background-color: #536dfe; } + +.md-tabs { + width: 100%; + transition: background 0.25s; + background-color: #3f51b5; + color: white; + overflow: auto; } + .md-tabs__list { + margin: 0; + margin-left: 0.4rem; + padding: 0; + list-style: none; + white-space: nowrap; } + .md-tabs__item { + display: inline-block; + height: 4.8rem; + padding-right: 1.2rem; + padding-left: 1.2rem; } + .md-tabs__link { + display: block; + margin-top: 1.6rem; + transition: opacity 0.25s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1); + transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.25s; + transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.25s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1); + font-size: 1.4rem; + opacity: 0.7; } + .md-tabs__link--active, .md-tabs__link:hover { + color: inherit; + opacity: 1; } + .md-tabs__item:nth-child(2) .md-tabs__link { + transition-delay: 0.02s; } + .md-tabs__item:nth-child(3) .md-tabs__link { + transition-delay: 0.04s; } + .md-tabs__item:nth-child(4) .md-tabs__link { + transition-delay: 0.06s; } + .md-tabs__item:nth-child(5) .md-tabs__link { + transition-delay: 0.08s; } + .md-tabs__item:nth-child(6) .md-tabs__link { + transition-delay: 0.1s; } + .md-tabs__item:nth-child(7) .md-tabs__link { + transition-delay: 0.12s; } + .md-tabs__item:nth-child(8) .md-tabs__link { + transition-delay: 0.14s; } + .md-tabs__item:nth-child(9) .md-tabs__link { + transition-delay: 0.16s; } + .md-tabs__item:nth-child(10) .md-tabs__link { + transition-delay: 0.18s; } + .md-tabs__item:nth-child(11) .md-tabs__link { + transition-delay: 0.2s; } + .md-tabs__item:nth-child(12) .md-tabs__link { + transition-delay: 0.22s; } + .md-tabs__item:nth-child(13) .md-tabs__link { + transition-delay: 0.24s; } + .md-tabs__item:nth-child(14) .md-tabs__link { + transition-delay: 0.26s; } + .md-tabs__item:nth-child(15) .md-tabs__link { + transition-delay: 0.28s; } + .md-tabs__item:nth-child(16) .md-tabs__link { + transition-delay: 0.3s; } + .md-tabs[data-md-state="hidden"] { + pointer-events: none; } + .md-tabs[data-md-state="hidden"] .md-tabs__link { + -webkit-transform: translateY(50%); + transform: translateY(50%); + transition: color 0.25s, opacity 0.1s, -webkit-transform 0s 0.4s; + transition: color 0.25s, transform 0s 0.4s, opacity 0.1s; + transition: color 0.25s, transform 0s 0.4s, opacity 0.1s, -webkit-transform 0s 0.4s; + opacity: 0; } + +.md-typeset .admonition, .md-typeset details { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); + position: relative; + margin: 1.5625em 0; + padding: 0 1.2rem; + border-left: 0.4rem solid #448aff; + border-radius: 0.2rem; + font-size: 1.28rem; + overflow: auto; } + [dir="rtl"] .md-typeset .admonition, [dir="rtl"] .md-typeset details { + border-right: 0.4rem solid #448aff; + border-left: none; } + html .md-typeset .admonition > :last-child, html .md-typeset details > :last-child { + margin-bottom: 1.2rem; } + .md-typeset .admonition .admonition, .md-typeset details .admonition, .md-typeset .admonition details, .md-typeset details details { + margin: 1em 0; } + .md-typeset .admonition > .admonition-title, .md-typeset details > .admonition-title, .md-typeset .admonition > summary, .md-typeset details > summary { + margin: 0 -1.2rem; + padding: 0.8rem 1.2rem 0.8rem 4rem; + border-bottom: 0.1rem solid rgba(68, 138, 255, 0.1); + background-color: rgba(68, 138, 255, 0.1); + font-weight: 700; } + [dir="rtl"] .md-typeset .admonition > .admonition-title, [dir="rtl"] .md-typeset details > .admonition-title, [dir="rtl"] .md-typeset .admonition > summary, [dir="rtl"] .md-typeset details > summary { + padding: 0.8rem 4rem 0.8rem 1.2rem; } + .md-typeset .admonition > .admonition-title:last-child, .md-typeset details > .admonition-title:last-child, .md-typeset .admonition > summary:last-child, .md-typeset details > summary:last-child { + margin-bottom: 0; } + .md-typeset .admonition > .admonition-title::before, .md-typeset details > .admonition-title::before, .md-typeset .admonition > summary::before, .md-typeset details > summary::before { + position: absolute; + left: 1.2rem; + color: #448aff; + font-size: 2rem; + content: "\E3C9"; } + [dir="rtl"] .md-typeset .admonition > .admonition-title::before, [dir="rtl"] .md-typeset details > .admonition-title::before, [dir="rtl"] .md-typeset .admonition > summary::before, [dir="rtl"] .md-typeset details > summary::before { + right: 1.2rem; + left: initial; } + .md-typeset .admonition.summary, .md-typeset details.summary, .md-typeset .admonition.tldr, .md-typeset details.tldr, .md-typeset .admonition.abstract, .md-typeset details.abstract { + border-left-color: #00b0ff; } + [dir="rtl"] .md-typeset .admonition.summary, [dir="rtl"] .md-typeset details.summary, [dir="rtl"] .md-typeset .admonition.tldr, [dir="rtl"] .md-typeset details.tldr, [dir="rtl"] .md-typeset .admonition.abstract, [dir="rtl"] .md-typeset details.abstract { + border-right-color: #00b0ff; } + .md-typeset .admonition.summary > .admonition-title, .md-typeset details.summary > .admonition-title, .md-typeset .admonition.tldr > .admonition-title, .md-typeset details.tldr > .admonition-title, .md-typeset .admonition.summary > summary, .md-typeset details.summary > summary, .md-typeset .admonition.tldr > summary, .md-typeset details.tldr > summary, .md-typeset .admonition.abstract > .admonition-title, .md-typeset details.abstract > .admonition-title, .md-typeset .admonition.abstract > summary, .md-typeset details.abstract > summary { + border-bottom-color: 0.1rem solid rgba(0, 176, 255, 0.1); + background-color: rgba(0, 176, 255, 0.1); } + .md-typeset .admonition.summary > .admonition-title::before, .md-typeset details.summary > .admonition-title::before, .md-typeset .admonition.tldr > .admonition-title::before, .md-typeset details.tldr > .admonition-title::before, .md-typeset .admonition.summary > summary::before, .md-typeset details.summary > summary::before, .md-typeset .admonition.tldr > summary::before, .md-typeset details.tldr > summary::before, .md-typeset .admonition.abstract > .admonition-title::before, .md-typeset details.abstract > .admonition-title::before, .md-typeset .admonition.abstract > summary::before, .md-typeset details.abstract > summary::before { + color: #00b0ff; + content: "\E8D2"; } + .md-typeset .admonition.todo, .md-typeset details.todo, .md-typeset .admonition.info, .md-typeset details.info { + border-left-color: #00b8d4; } + [dir="rtl"] .md-typeset .admonition.todo, [dir="rtl"] .md-typeset details.todo, [dir="rtl"] .md-typeset .admonition.info, [dir="rtl"] .md-typeset details.info { + border-right-color: #00b8d4; } + .md-typeset .admonition.todo > .admonition-title, .md-typeset details.todo > .admonition-title, .md-typeset .admonition.todo > summary, .md-typeset details.todo > summary, .md-typeset .admonition.info > .admonition-title, .md-typeset details.info > .admonition-title, .md-typeset .admonition.info > summary, .md-typeset details.info > summary { + border-bottom-color: 0.1rem solid rgba(0, 184, 212, 0.1); + background-color: rgba(0, 184, 212, 0.1); } + .md-typeset .admonition.todo > .admonition-title::before, .md-typeset details.todo > .admonition-title::before, .md-typeset .admonition.todo > summary::before, .md-typeset details.todo > summary::before, .md-typeset .admonition.info > .admonition-title::before, .md-typeset details.info > .admonition-title::before, .md-typeset .admonition.info > summary::before, .md-typeset details.info > summary::before { + color: #00b8d4; + content: "\E88E"; } + .md-typeset .admonition.hint, .md-typeset details.hint, .md-typeset .admonition.important, .md-typeset details.important, .md-typeset .admonition.tip, .md-typeset details.tip { + border-left-color: #00bfa5; } + [dir="rtl"] .md-typeset .admonition.hint, [dir="rtl"] .md-typeset details.hint, [dir="rtl"] .md-typeset .admonition.important, [dir="rtl"] .md-typeset details.important, [dir="rtl"] .md-typeset .admonition.tip, [dir="rtl"] .md-typeset details.tip { + border-right-color: #00bfa5; } + .md-typeset .admonition.hint > .admonition-title, .md-typeset details.hint > .admonition-title, .md-typeset .admonition.important > .admonition-title, .md-typeset details.important > .admonition-title, .md-typeset .admonition.hint > summary, .md-typeset details.hint > summary, .md-typeset .admonition.important > summary, .md-typeset details.important > summary, .md-typeset .admonition.tip > .admonition-title, .md-typeset details.tip > .admonition-title, .md-typeset .admonition.tip > summary, .md-typeset details.tip > summary { + border-bottom-color: 0.1rem solid rgba(0, 191, 165, 0.1); + background-color: rgba(0, 191, 165, 0.1); } + .md-typeset .admonition.hint > .admonition-title::before, .md-typeset details.hint > .admonition-title::before, .md-typeset .admonition.important > .admonition-title::before, .md-typeset details.important > .admonition-title::before, .md-typeset .admonition.hint > summary::before, .md-typeset details.hint > summary::before, .md-typeset .admonition.important > summary::before, .md-typeset details.important > summary::before, .md-typeset .admonition.tip > .admonition-title::before, .md-typeset details.tip > .admonition-title::before, .md-typeset .admonition.tip > summary::before, .md-typeset details.tip > summary::before { + color: #00bfa5; + content: "\E80E"; } + .md-typeset .admonition.check, .md-typeset details.check, .md-typeset .admonition.done, .md-typeset details.done, .md-typeset .admonition.success, .md-typeset details.success { + border-left-color: #00c853; } + [dir="rtl"] .md-typeset .admonition.check, [dir="rtl"] .md-typeset details.check, [dir="rtl"] .md-typeset .admonition.done, [dir="rtl"] .md-typeset details.done, [dir="rtl"] .md-typeset .admonition.success, [dir="rtl"] .md-typeset details.success { + border-right-color: #00c853; } + .md-typeset .admonition.check > .admonition-title, .md-typeset details.check > .admonition-title, .md-typeset .admonition.done > .admonition-title, .md-typeset details.done > .admonition-title, .md-typeset .admonition.check > summary, .md-typeset details.check > summary, .md-typeset .admonition.done > summary, .md-typeset details.done > summary, .md-typeset .admonition.success > .admonition-title, .md-typeset details.success > .admonition-title, .md-typeset .admonition.success > summary, .md-typeset details.success > summary { + border-bottom-color: 0.1rem solid rgba(0, 200, 83, 0.1); + background-color: rgba(0, 200, 83, 0.1); } + .md-typeset .admonition.check > .admonition-title::before, .md-typeset details.check > .admonition-title::before, .md-typeset .admonition.done > .admonition-title::before, .md-typeset details.done > .admonition-title::before, .md-typeset .admonition.check > summary::before, .md-typeset details.check > summary::before, .md-typeset .admonition.done > summary::before, .md-typeset details.done > summary::before, .md-typeset .admonition.success > .admonition-title::before, .md-typeset details.success > .admonition-title::before, .md-typeset .admonition.success > summary::before, .md-typeset details.success > summary::before { + color: #00c853; + content: "\E876"; } + .md-typeset .admonition.help, .md-typeset details.help, .md-typeset .admonition.faq, .md-typeset details.faq, .md-typeset .admonition.question, .md-typeset details.question { + border-left-color: #64dd17; } + [dir="rtl"] .md-typeset .admonition.help, [dir="rtl"] .md-typeset details.help, [dir="rtl"] .md-typeset .admonition.faq, [dir="rtl"] .md-typeset details.faq, [dir="rtl"] .md-typeset .admonition.question, [dir="rtl"] .md-typeset details.question { + border-right-color: #64dd17; } + .md-typeset .admonition.help > .admonition-title, .md-typeset details.help > .admonition-title, .md-typeset .admonition.faq > .admonition-title, .md-typeset details.faq > .admonition-title, .md-typeset .admonition.help > summary, .md-typeset details.help > summary, .md-typeset .admonition.faq > summary, .md-typeset details.faq > summary, .md-typeset .admonition.question > .admonition-title, .md-typeset details.question > .admonition-title, .md-typeset .admonition.question > summary, .md-typeset details.question > summary { + border-bottom-color: 0.1rem solid rgba(100, 221, 23, 0.1); + background-color: rgba(100, 221, 23, 0.1); } + .md-typeset .admonition.help > .admonition-title::before, .md-typeset details.help > .admonition-title::before, .md-typeset .admonition.faq > .admonition-title::before, .md-typeset details.faq > .admonition-title::before, .md-typeset .admonition.help > summary::before, .md-typeset details.help > summary::before, .md-typeset .admonition.faq > summary::before, .md-typeset details.faq > summary::before, .md-typeset .admonition.question > .admonition-title::before, .md-typeset details.question > .admonition-title::before, .md-typeset .admonition.question > summary::before, .md-typeset details.question > summary::before { + color: #64dd17; + content: "\E887"; } + .md-typeset .admonition.caution, .md-typeset details.caution, .md-typeset .admonition.attention, .md-typeset details.attention, .md-typeset .admonition.warning, .md-typeset details.warning { + border-left-color: #ff9100; } + [dir="rtl"] .md-typeset .admonition.caution, [dir="rtl"] .md-typeset details.caution, [dir="rtl"] .md-typeset .admonition.attention, [dir="rtl"] .md-typeset details.attention, [dir="rtl"] .md-typeset .admonition.warning, [dir="rtl"] .md-typeset details.warning { + border-right-color: #ff9100; } + .md-typeset .admonition.caution > .admonition-title, .md-typeset details.caution > .admonition-title, .md-typeset .admonition.attention > .admonition-title, .md-typeset details.attention > .admonition-title, .md-typeset .admonition.caution > summary, .md-typeset details.caution > summary, .md-typeset .admonition.attention > summary, .md-typeset details.attention > summary, .md-typeset .admonition.warning > .admonition-title, .md-typeset details.warning > .admonition-title, .md-typeset .admonition.warning > summary, .md-typeset details.warning > summary { + border-bottom-color: 0.1rem solid rgba(255, 145, 0, 0.1); + background-color: rgba(255, 145, 0, 0.1); } + .md-typeset .admonition.caution > .admonition-title::before, .md-typeset details.caution > .admonition-title::before, .md-typeset .admonition.attention > .admonition-title::before, .md-typeset details.attention > .admonition-title::before, .md-typeset .admonition.caution > summary::before, .md-typeset details.caution > summary::before, .md-typeset .admonition.attention > summary::before, .md-typeset details.attention > summary::before, .md-typeset .admonition.warning > .admonition-title::before, .md-typeset details.warning > .admonition-title::before, .md-typeset .admonition.warning > summary::before, .md-typeset details.warning > summary::before { + color: #ff9100; + content: "\E002"; } + .md-typeset .admonition.fail, .md-typeset details.fail, .md-typeset .admonition.missing, .md-typeset details.missing, .md-typeset .admonition.failure, .md-typeset details.failure { + border-left-color: #ff5252; } + [dir="rtl"] .md-typeset .admonition.fail, [dir="rtl"] .md-typeset details.fail, [dir="rtl"] .md-typeset .admonition.missing, [dir="rtl"] .md-typeset details.missing, [dir="rtl"] .md-typeset .admonition.failure, [dir="rtl"] .md-typeset details.failure { + border-right-color: #ff5252; } + .md-typeset .admonition.fail > .admonition-title, .md-typeset details.fail > .admonition-title, .md-typeset .admonition.missing > .admonition-title, .md-typeset details.missing > .admonition-title, .md-typeset .admonition.fail > summary, .md-typeset details.fail > summary, .md-typeset .admonition.missing > summary, .md-typeset details.missing > summary, .md-typeset .admonition.failure > .admonition-title, .md-typeset details.failure > .admonition-title, .md-typeset .admonition.failure > summary, .md-typeset details.failure > summary { + border-bottom-color: 0.1rem solid rgba(255, 82, 82, 0.1); + background-color: rgba(255, 82, 82, 0.1); } + .md-typeset .admonition.fail > .admonition-title::before, .md-typeset details.fail > .admonition-title::before, .md-typeset .admonition.missing > .admonition-title::before, .md-typeset details.missing > .admonition-title::before, .md-typeset .admonition.fail > summary::before, .md-typeset details.fail > summary::before, .md-typeset .admonition.missing > summary::before, .md-typeset details.missing > summary::before, .md-typeset .admonition.failure > .admonition-title::before, .md-typeset details.failure > .admonition-title::before, .md-typeset .admonition.failure > summary::before, .md-typeset details.failure > summary::before { + color: #ff5252; + content: "\E14C"; } + .md-typeset .admonition.error, .md-typeset details.error, .md-typeset .admonition.danger, .md-typeset details.danger { + border-left-color: #ff1744; } + [dir="rtl"] .md-typeset .admonition.error, [dir="rtl"] .md-typeset details.error, [dir="rtl"] .md-typeset .admonition.danger, [dir="rtl"] .md-typeset details.danger { + border-right-color: #ff1744; } + .md-typeset .admonition.error > .admonition-title, .md-typeset details.error > .admonition-title, .md-typeset .admonition.error > summary, .md-typeset details.error > summary, .md-typeset .admonition.danger > .admonition-title, .md-typeset details.danger > .admonition-title, .md-typeset .admonition.danger > summary, .md-typeset details.danger > summary { + border-bottom-color: 0.1rem solid rgba(255, 23, 68, 0.1); + background-color: rgba(255, 23, 68, 0.1); } + .md-typeset .admonition.error > .admonition-title::before, .md-typeset details.error > .admonition-title::before, .md-typeset .admonition.error > summary::before, .md-typeset details.error > summary::before, .md-typeset .admonition.danger > .admonition-title::before, .md-typeset details.danger > .admonition-title::before, .md-typeset .admonition.danger > summary::before, .md-typeset details.danger > summary::before { + color: #ff1744; + content: "\E3E7"; } + .md-typeset .admonition.bug, .md-typeset details.bug { + border-left-color: #f50057; } + [dir="rtl"] .md-typeset .admonition.bug, [dir="rtl"] .md-typeset details.bug { + border-right-color: #f50057; } + .md-typeset .admonition.bug > .admonition-title, .md-typeset details.bug > .admonition-title, .md-typeset .admonition.bug > summary, .md-typeset details.bug > summary { + border-bottom-color: 0.1rem solid rgba(245, 0, 87, 0.1); + background-color: rgba(245, 0, 87, 0.1); } + .md-typeset .admonition.bug > .admonition-title::before, .md-typeset details.bug > .admonition-title::before, .md-typeset .admonition.bug > summary::before, .md-typeset details.bug > summary::before { + color: #f50057; + content: "\E868"; } + .md-typeset .admonition.example, .md-typeset details.example { + border-left-color: #651fff; } + [dir="rtl"] .md-typeset .admonition.example, [dir="rtl"] .md-typeset details.example { + border-right-color: #651fff; } + .md-typeset .admonition.example > .admonition-title, .md-typeset details.example > .admonition-title, .md-typeset .admonition.example > summary, .md-typeset details.example > summary { + border-bottom-color: 0.1rem solid rgba(101, 31, 255, 0.1); + background-color: rgba(101, 31, 255, 0.1); } + .md-typeset .admonition.example > .admonition-title::before, .md-typeset details.example > .admonition-title::before, .md-typeset .admonition.example > summary::before, .md-typeset details.example > summary::before { + color: #651fff; + content: "\E242"; } + .md-typeset .admonition.cite, .md-typeset details.cite, .md-typeset .admonition.quote, .md-typeset details.quote { + border-left-color: #9e9e9e; } + [dir="rtl"] .md-typeset .admonition.cite, [dir="rtl"] .md-typeset details.cite, [dir="rtl"] .md-typeset .admonition.quote, [dir="rtl"] .md-typeset details.quote { + border-right-color: #9e9e9e; } + .md-typeset .admonition.cite > .admonition-title, .md-typeset details.cite > .admonition-title, .md-typeset .admonition.cite > summary, .md-typeset details.cite > summary, .md-typeset .admonition.quote > .admonition-title, .md-typeset details.quote > .admonition-title, .md-typeset .admonition.quote > summary, .md-typeset details.quote > summary { + border-bottom-color: 0.1rem solid rgba(158, 158, 158, 0.1); + background-color: rgba(158, 158, 158, 0.1); } + .md-typeset .admonition.cite > .admonition-title::before, .md-typeset details.cite > .admonition-title::before, .md-typeset .admonition.cite > summary::before, .md-typeset details.cite > summary::before, .md-typeset .admonition.quote > .admonition-title::before, .md-typeset details.quote > .admonition-title::before, .md-typeset .admonition.quote > summary::before, .md-typeset details.quote > summary::before { + color: #9e9e9e; + content: "\E244"; } + +.codehilite .o, .md-typeset .highlight .o { + color: inherit; } + +.codehilite .ow, .md-typeset .highlight .ow { + color: inherit; } + +.codehilite .ge, .md-typeset .highlight .ge { + color: #000000; } + +.codehilite .gr, .md-typeset .highlight .gr { + color: #AA0000; } + +.codehilite .gh, .md-typeset .highlight .gh { + color: #999999; } + +.codehilite .go, .md-typeset .highlight .go { + color: #888888; } + +.codehilite .gp, .md-typeset .highlight .gp { + color: #555555; } + +.codehilite .gs, .md-typeset .highlight .gs { + color: inherit; } + +.codehilite .gu, .md-typeset .highlight .gu { + color: #AAAAAA; } + +.codehilite .gt, .md-typeset .highlight .gt { + color: #AA0000; } + +.codehilite .gd, .md-typeset .highlight .gd { + background-color: #FFDDDD; } + +.codehilite .gi, .md-typeset .highlight .gi { + background-color: #DDFFDD; } + +.codehilite .k, .md-typeset .highlight .k { + color: #3B78E7; } + +.codehilite .kc, .md-typeset .highlight .kc { + color: #A71D5D; } + +.codehilite .kd, .md-typeset .highlight .kd { + color: #3B78E7; } + +.codehilite .kn, .md-typeset .highlight .kn { + color: #3B78E7; } + +.codehilite .kp, .md-typeset .highlight .kp { + color: #A71D5D; } + +.codehilite .kr, .md-typeset .highlight .kr { + color: #3E61A2; } + +.codehilite .kt, .md-typeset .highlight .kt { + color: #3E61A2; } + +.codehilite .c, .md-typeset .highlight .c { + color: #999999; } + +.codehilite .cm, .md-typeset .highlight .cm { + color: #999999; } + +.codehilite .cp, .md-typeset .highlight .cp { + color: #666666; } + +.codehilite .c1, .md-typeset .highlight .c1 { + color: #999999; } + +.codehilite .ch, .md-typeset .highlight .ch { + color: #999999; } + +.codehilite .cs, .md-typeset .highlight .cs { + color: #999999; } + +.codehilite .na, .md-typeset .highlight .na { + color: #C2185B; } + +.codehilite .nb, .md-typeset .highlight .nb { + color: #C2185B; } + +.codehilite .bp, .md-typeset .highlight .bp { + color: #3E61A2; } + +.codehilite .nc, .md-typeset .highlight .nc { + color: #C2185B; } + +.codehilite .no, .md-typeset .highlight .no { + color: #3E61A2; } + +.codehilite .nd, .md-typeset .highlight .nd { + color: #666666; } + +.codehilite .ni, .md-typeset .highlight .ni { + color: #666666; } + +.codehilite .ne, .md-typeset .highlight .ne { + color: #C2185B; } + +.codehilite .nf, .md-typeset .highlight .nf { + color: #C2185B; } + +.codehilite .nl, .md-typeset .highlight .nl { + color: #3B5179; } + +.codehilite .nn, .md-typeset .highlight .nn { + color: #EC407A; } + +.codehilite .nt, .md-typeset .highlight .nt { + color: #3B78E7; } + +.codehilite .nv, .md-typeset .highlight .nv { + color: #3E61A2; } + +.codehilite .vc, .md-typeset .highlight .vc { + color: #3E61A2; } + +.codehilite .vg, .md-typeset .highlight .vg { + color: #3E61A2; } + +.codehilite .vi, .md-typeset .highlight .vi { + color: #3E61A2; } + +.codehilite .nx, .md-typeset .highlight .nx { + color: #EC407A; } + +.codehilite .m, .md-typeset .highlight .m { + color: #E74C3C; } + +.codehilite .mf, .md-typeset .highlight .mf { + color: #E74C3C; } + +.codehilite .mh, .md-typeset .highlight .mh { + color: #E74C3C; } + +.codehilite .mi, .md-typeset .highlight .mi { + color: #E74C3C; } + +.codehilite .il, .md-typeset .highlight .il { + color: #E74C3C; } + +.codehilite .mo, .md-typeset .highlight .mo { + color: #E74C3C; } + +.codehilite .s, .md-typeset .highlight .s { + color: #0D904F; } + +.codehilite .sb, .md-typeset .highlight .sb { + color: #0D904F; } + +.codehilite .sc, .md-typeset .highlight .sc { + color: #0D904F; } + +.codehilite .sd, .md-typeset .highlight .sd { + color: #999999; } + +.codehilite .s2, .md-typeset .highlight .s2 { + color: #0D904F; } + +.codehilite .se, .md-typeset .highlight .se { + color: #183691; } + +.codehilite .sh, .md-typeset .highlight .sh { + color: #183691; } + +.codehilite .si, .md-typeset .highlight .si { + color: #183691; } + +.codehilite .sx, .md-typeset .highlight .sx { + color: #183691; } + +.codehilite .sr, .md-typeset .highlight .sr { + color: #009926; } + +.codehilite .s1, .md-typeset .highlight .s1 { + color: #0D904F; } + +.codehilite .ss, .md-typeset .highlight .ss { + color: #0D904F; } + +.codehilite .err, .md-typeset .highlight .err { + color: #A61717; } + +.codehilite .w, .md-typeset .highlight .w { + color: transparent; } + +.codehilite .hll, .md-typeset .highlight .hll { + display: block; + margin: 0 -1.2rem; + padding: 0 1.2rem; + background-color: rgba(255, 235, 59, 0.5); } + +.md-typeset .codehilite, .md-typeset .highlight { + position: relative; + margin: 1em 0; + padding: 0; + border-radius: 0.2rem; + background-color: rgba(236, 236, 236, 0.5); + color: #37474F; + line-height: 1.4; + -webkit-overflow-scrolling: touch; } + .md-typeset .codehilite pre, .md-typeset .highlight pre, + .md-typeset .codehilite code, + .md-typeset .highlight code { + display: block; + margin: 0; + padding: 1.05rem 1.2rem; + background-color: transparent; + overflow: auto; + vertical-align: top; } + .md-typeset .codehilite pre::-webkit-scrollbar, .md-typeset .highlight pre::-webkit-scrollbar, + .md-typeset .codehilite code::-webkit-scrollbar, + .md-typeset .highlight code::-webkit-scrollbar { + width: 0.4rem; + height: 0.4rem; } + .md-typeset .codehilite pre::-webkit-scrollbar-thumb, .md-typeset .highlight pre::-webkit-scrollbar-thumb, + .md-typeset .codehilite code::-webkit-scrollbar-thumb, + .md-typeset .highlight code::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, 0.26); } + .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover, .md-typeset .highlight pre::-webkit-scrollbar-thumb:hover, + .md-typeset .codehilite code::-webkit-scrollbar-thumb:hover, + .md-typeset .highlight code::-webkit-scrollbar-thumb:hover { + background-color: #536dfe; } + +.md-typeset pre.codehilite, .md-typeset pre.highlight { + overflow: visible; } + .md-typeset pre.codehilite code, .md-typeset pre.highlight code { + display: block; + padding: 1.05rem 1.2rem; + overflow: auto; } + +.md-typeset .codehilitetable, .md-typeset .highlighttable { + display: block; + margin: 1em 0; + border-radius: 0.2em; + font-size: 1.6rem; + overflow: hidden; } + .md-typeset .codehilitetable tbody, .md-typeset .highlighttable tbody, + .md-typeset .codehilitetable td, + .md-typeset .highlighttable td { + display: block; + padding: 0; } + .md-typeset .codehilitetable tr, .md-typeset .highlighttable tr { + display: flex; } + .md-typeset .codehilitetable .codehilite, .md-typeset .highlighttable .codehilite, .md-typeset .codehilitetable .highlight, .md-typeset .highlighttable .highlight, + .md-typeset .codehilitetable .linenodiv, + .md-typeset .highlighttable .linenodiv { + margin: 0; + border-radius: 0; } + + .md-typeset .codehilitetable .linenodiv, + .md-typeset .highlighttable .linenodiv { + padding: 1.05rem 1.2rem; } + .md-typeset .codehilitetable .linenos, .md-typeset .highlighttable .linenos { + background-color: rgba(0, 0, 0, 0.07); + color: rgba(0, 0, 0, 0.26); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .md-typeset .codehilitetable .linenos pre, .md-typeset .highlighttable .linenos pre { + margin: 0; + padding: 0; + background-color: transparent; + color: inherit; + text-align: right; } + .md-typeset .codehilitetable .code, .md-typeset .highlighttable .code { + flex: 1; + overflow: hidden; } + +.md-typeset > .codehilitetable, .md-typeset > .highlighttable { + box-shadow: none; } + +.md-typeset [id^="fnref:"] { + display: inline-block; } + .md-typeset [id^="fnref:"]:target { + margin-top: -7.6rem; + padding-top: 7.6rem; + pointer-events: none; } + +.md-typeset [id^="fn:"]::before { + display: none; + height: 0; + content: ""; } + +.md-typeset [id^="fn:"]:target::before { + display: block; + margin-top: -7rem; + padding-top: 7rem; + pointer-events: none; } + +.md-typeset .footnote { + color: rgba(0, 0, 0, 0.54); + font-size: 1.28rem; } + .md-typeset .footnote ol { + margin-left: 0; } + .md-typeset .footnote li { + transition: color 0.25s; } + .md-typeset .footnote li:target { + color: rgba(0, 0, 0, 0.87); } + .md-typeset .footnote li :first-child { + margin-top: 0; } + .md-typeset .footnote li:hover .footnote-backref, + .md-typeset .footnote li:target .footnote-backref { + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; } + .md-typeset .footnote li:hover .footnote-backref:hover, + .md-typeset .footnote li:target .footnote-backref { + color: #536dfe; } + +.md-typeset .footnote-ref { + display: inline-block; + pointer-events: initial; } + .md-typeset .footnote-ref::before { + display: inline; + margin: 0 0.2em; + border-left: 0.1rem solid rgba(0, 0, 0, 0.26); + font-size: 1.25em; + content: ""; + vertical-align: -0.5rem; } + +.md-typeset .footnote-backref { + display: inline-block; + -webkit-transform: translateX(0.5rem); + transform: translateX(0.5rem); + transition: color 0.25s, opacity 0.125s 0.125s, -webkit-transform 0.25s 0.125s; + transition: transform 0.25s 0.125s, color 0.25s, opacity 0.125s 0.125s; + transition: transform 0.25s 0.125s, color 0.25s, opacity 0.125s 0.125s, -webkit-transform 0.25s 0.125s; + color: rgba(0, 0, 0, 0.26); + font-size: 0; + opacity: 0; + vertical-align: text-bottom; } + [dir="rtl"] .md-typeset .footnote-backref { + -webkit-transform: translateX(-0.5rem); + transform: translateX(-0.5rem); } + .md-typeset .footnote-backref::before { + display: inline-block; + font-size: 1.6rem; + content: "\E31B"; } + [dir="rtl"] .md-typeset .footnote-backref::before { + -webkit-transform: scaleX(-1); + transform: scaleX(-1); } + +.md-typeset .headerlink { + display: inline-block; + margin-left: 1rem; + -webkit-transform: translate(0, 0.5rem); + transform: translate(0, 0.5rem); + transition: color 0.25s, opacity 0.125s 0.25s, -webkit-transform 0.25s 0.25s; + transition: transform 0.25s 0.25s, color 0.25s, opacity 0.125s 0.25s; + transition: transform 0.25s 0.25s, color 0.25s, opacity 0.125s 0.25s, -webkit-transform 0.25s 0.25s; + opacity: 0; } + [dir="rtl"] .md-typeset .headerlink { + margin-right: 1rem; + margin-left: initial; } + html body .md-typeset .headerlink { + color: rgba(0, 0, 0, 0.26); } + +.md-typeset h1[id]::before { + display: block; + margin-top: -0.9rem; + padding-top: 0.9rem; + content: ""; } + +.md-typeset h1[id]:target::before { + margin-top: -6.9rem; + padding-top: 6.9rem; } + +.md-typeset h1[id]:hover .headerlink, +.md-typeset h1[id]:target .headerlink, +.md-typeset h1[id] .headerlink:focus { + -webkit-transform: translate(0, 0); + transform: translate(0, 0); + opacity: 1; } + +.md-typeset h1[id]:hover .headerlink:hover, +.md-typeset h1[id]:target .headerlink, +.md-typeset h1[id] .headerlink:focus { + color: #536dfe; } + +.md-typeset h2[id]::before { + display: block; + margin-top: -0.8rem; + padding-top: 0.8rem; + content: ""; } + +.md-typeset h2[id]:target::before { + margin-top: -6.8rem; + padding-top: 6.8rem; } + +.md-typeset h2[id]:hover .headerlink, +.md-typeset h2[id]:target .headerlink, +.md-typeset h2[id] .headerlink:focus { + -webkit-transform: translate(0, 0); + transform: translate(0, 0); + opacity: 1; } + +.md-typeset h2[id]:hover .headerlink:hover, +.md-typeset h2[id]:target .headerlink, +.md-typeset h2[id] .headerlink:focus { + color: #536dfe; } + +.md-typeset h3[id]::before { + display: block; + margin-top: -0.9rem; + padding-top: 0.9rem; + content: ""; } + +.md-typeset h3[id]:target::before { + margin-top: -6.9rem; + padding-top: 6.9rem; } + +.md-typeset h3[id]:hover .headerlink, +.md-typeset h3[id]:target .headerlink, +.md-typeset h3[id] .headerlink:focus { + -webkit-transform: translate(0, 0); + transform: translate(0, 0); + opacity: 1; } + +.md-typeset h3[id]:hover .headerlink:hover, +.md-typeset h3[id]:target .headerlink, +.md-typeset h3[id] .headerlink:focus { + color: #536dfe; } + +.md-typeset h4[id]::before { + display: block; + margin-top: -0.9rem; + padding-top: 0.9rem; + content: ""; } + +.md-typeset h4[id]:target::before { + margin-top: -6.9rem; + padding-top: 6.9rem; } + +.md-typeset h4[id]:hover .headerlink, +.md-typeset h4[id]:target .headerlink, +.md-typeset h4[id] .headerlink:focus { + -webkit-transform: translate(0, 0); + transform: translate(0, 0); + opacity: 1; } + +.md-typeset h4[id]:hover .headerlink:hover, +.md-typeset h4[id]:target .headerlink, +.md-typeset h4[id] .headerlink:focus { + color: #536dfe; } + +.md-typeset h5[id]::before { + display: block; + margin-top: -1.1rem; + padding-top: 1.1rem; + content: ""; } + +.md-typeset h5[id]:target::before { + margin-top: -7.1rem; + padding-top: 7.1rem; } + +.md-typeset h5[id]:hover .headerlink, +.md-typeset h5[id]:target .headerlink, +.md-typeset h5[id] .headerlink:focus { + -webkit-transform: translate(0, 0); + transform: translate(0, 0); + opacity: 1; } + +.md-typeset h5[id]:hover .headerlink:hover, +.md-typeset h5[id]:target .headerlink, +.md-typeset h5[id] .headerlink:focus { + color: #536dfe; } + +.md-typeset h6[id]::before { + display: block; + margin-top: -1.1rem; + padding-top: 1.1rem; + content: ""; } + +.md-typeset h6[id]:target::before { + margin-top: -7.1rem; + padding-top: 7.1rem; } + +.md-typeset h6[id]:hover .headerlink, +.md-typeset h6[id]:target .headerlink, +.md-typeset h6[id] .headerlink:focus { + -webkit-transform: translate(0, 0); + transform: translate(0, 0); + opacity: 1; } + +.md-typeset h6[id]:hover .headerlink:hover, +.md-typeset h6[id]:target .headerlink, +.md-typeset h6[id] .headerlink:focus { + color: #536dfe; } + +.md-typeset .MJXc-display { + margin: 0.75em 0; + padding: 0.75em 0; + overflow: auto; + -webkit-overflow-scrolling: touch; } + +.md-typeset .MathJax_CHTML { + outline: 0; } + +.md-typeset del.critic, +.md-typeset ins.critic, +.md-typeset .critic.comment { + margin: 0 0.25em; + padding: 0.0625em 0; + border-radius: 0.2rem; + -webkit-box-decoration-break: clone; + box-decoration-break: clone; } + +.md-typeset del.critic { + background-color: #FFDDDD; + box-shadow: 0.25em 0 0 #FFDDDD, -0.25em 0 0 #FFDDDD; } + +.md-typeset ins.critic { + background-color: #DDFFDD; + box-shadow: 0.25em 0 0 #DDFFDD, -0.25em 0 0 #DDFFDD; } + +.md-typeset .critic.comment { + background-color: rgba(236, 236, 236, 0.5); + color: #37474F; + box-shadow: 0.25em 0 0 rgba(236, 236, 236, 0.5), -0.25em 0 0 rgba(236, 236, 236, 0.5); } + .md-typeset .critic.comment::before { + padding-right: 0.125em; + color: rgba(0, 0, 0, 0.26); + content: "\E0B7"; + vertical-align: -0.125em; } + +.md-typeset .critic.block { + display: block; + margin: 1em 0; + padding-right: 1.6rem; + padding-left: 1.6rem; + box-shadow: none; } + .md-typeset .critic.block :first-child { + margin-top: 0.5em; } + .md-typeset .critic.block :last-child { + margin-bottom: 0.5em; } + +.md-typeset details { + display: block; + padding-top: 0; } + .md-typeset details[open] > summary::after { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + .md-typeset details:not([open]) { + padding-bottom: 0; } + .md-typeset details:not([open]) > summary { + border-bottom: none; } + .md-typeset details summary { + padding-right: 4rem; } + [dir="rtl"] .md-typeset details summary { + padding-left: 4rem; } + .no-details .md-typeset details:not([open]) > * { + display: none; } + .no-details .md-typeset details:not([open]) summary { + display: block; } + +.md-typeset summary { + display: block; + outline: none; + cursor: pointer; } + .md-typeset summary::-webkit-details-marker { + display: none; } + .md-typeset summary::after { + position: absolute; + top: 0.8rem; + right: 1.2rem; + color: rgba(0, 0, 0, 0.26); + font-size: 2rem; + content: "\E313"; } + [dir="rtl"] .md-typeset summary::after { + right: initial; + left: 1.2rem; } + +.md-typeset .emojione { + width: 2rem; + vertical-align: text-top; } + +.md-typeset code.codehilite, .md-typeset code.highlight { + margin: 0 0.29412em; + padding: 0.07353em 0; } + +.md-typeset .superfences-content { + display: none; + order: 99; + width: 100%; + background-color: white; } + .md-typeset .superfences-content > * { + margin: 0; + border-radius: 0; } + +.md-typeset .superfences-tabs { + display: flex; + position: relative; + flex-wrap: wrap; + margin: 1em 0; + border: 0.1rem solid rgba(0, 0, 0, 0.07); + border-radius: 0.2em; } + .md-typeset .superfences-tabs > input { + display: none; } + .md-typeset .superfences-tabs > input:checked + label { + font-weight: 700; } + .md-typeset .superfences-tabs > input:checked + label + .superfences-content { + display: block; } + .md-typeset .superfences-tabs > label { + width: auto; + padding: 1.2rem 1.2rem; + transition: color 0.125s; + font-size: 1.28rem; + cursor: pointer; } + html .md-typeset .superfences-tabs > label:hover { + color: #536dfe; } + +.md-typeset .task-list-item { + position: relative; + list-style-type: none; } + .md-typeset .task-list-item [type="checkbox"] { + position: absolute; + top: 0.45em; + left: -2em; } + [dir="rtl"] .md-typeset .task-list-item [type="checkbox"] { + right: -2em; + left: initial; } + +.md-typeset .task-list-control .task-list-indicator::before { + position: absolute; + top: 0.15em; + left: -1.25em; + color: rgba(0, 0, 0, 0.26); + font-size: 1.25em; + content: "\E835"; + vertical-align: -0.25em; } + [dir="rtl"] .md-typeset .task-list-control .task-list-indicator::before { + right: -1.25em; + left: initial; } + +.md-typeset .task-list-control [type="checkbox"]:checked + .task-list-indicator::before { + content: "\E834"; } + +.md-typeset .task-list-control [type="checkbox"] { + opacity: 0; + z-index: -1; } + +@media print { + .md-typeset a::after { + color: rgba(0, 0, 0, 0.54); + content: " [" attr(href) "]"; } + .md-typeset code, + .md-typeset pre { + white-space: pre-wrap; } + .md-typeset code { + box-shadow: none; + -webkit-box-decoration-break: initial; + box-decoration-break: initial; } + .md-clipboard { + display: none; } + .md-content__icon { + display: none; } + .md-header { + display: none; } + .md-footer { + display: none; } + .md-sidebar { + display: none; } + .md-tabs { + display: none; } + .md-typeset .headerlink { + display: none; } } + +@media only screen and (max-width: 44.9375em) { + .md-typeset pre { + margin: 1em -1.6rem; + border-radius: 0; } + .md-typeset pre > code { + padding: 1.05rem 1.6rem; } + .md-footer-nav__link--prev .md-footer-nav__title { + display: none; } + .md-search-result__teaser { + max-height: 5rem; + -webkit-line-clamp: 3; } + .codehilite .hll, .md-typeset .highlight .hll { + margin: 0 -1.6rem; + padding: 0 1.6rem; } + .md-typeset > .codehilite, .md-typeset > .highlight { + margin: 1em -1.6rem; + border-radius: 0; } + .md-typeset > .codehilite pre, .md-typeset > .highlight pre, + .md-typeset > .codehilite code, + .md-typeset > .highlight code { + padding: 1.05rem 1.6rem; } + .md-typeset > .codehilitetable, .md-typeset > .highlighttable { + margin: 1em -1.6rem; + border-radius: 0; } + .md-typeset > .codehilitetable .codehilite > pre, .md-typeset > .highlighttable .codehilite > pre, .md-typeset > .codehilitetable .highlight > pre, .md-typeset > .highlighttable .highlight > pre, + .md-typeset > .codehilitetable .codehilite > code, + .md-typeset > .highlighttable .codehilite > code, + .md-typeset > .codehilitetable .highlight > code, + .md-typeset > .highlighttable .highlight > code, + .md-typeset > .codehilitetable .linenodiv, + .md-typeset > .highlighttable .linenodiv { + padding: 1rem 1.6rem; } + .md-typeset > p > .MJXc-display { + margin: 0.75em -1.6rem; + padding: 0.25em 1.6rem; } + .md-typeset > .superfences-tabs { + margin: 1em -1.6rem; + border: 0; + border-top: 0.1rem solid rgba(0, 0, 0, 0.07); + border-radius: 0; } + .md-typeset > .superfences-tabs pre, + .md-typeset > .superfences-tabs code { + padding: 1.05rem 1.6rem; } } + +@media only screen and (min-width: 100em) { + html { + font-size: 68.75%; } } + +@media only screen and (min-width: 125em) { + html { + font-size: 75%; } } + +@media only screen and (max-width: 59.9375em) { + body[data-md-state="lock"] { + overflow: hidden; } + .ios body[data-md-state="lock"] .md-container { + display: none; } + html .md-nav__link[for="__toc"] { + display: block; + padding-right: 4.8rem; } + html .md-nav__link[for="__toc"]::after { + color: inherit; + content: "\E8DE"; } + html .md-nav__link[for="__toc"] + .md-nav__link { + display: none; } + html .md-nav__link[for="__toc"] ~ .md-nav { + display: flex; } + html [dir="rtl"] .md-nav__link { + padding-right: 1.6rem; + padding-left: 4.8rem; } + .md-nav__source { + display: block; + padding: 0 0.4rem; + background-color: rgba(50, 64, 144, 0.9675); + color: white; } + .md-search__overlay { + position: absolute; + top: 0.4rem; + left: 0.4rem; + width: 3.6rem; + height: 3.6rem; + -webkit-transform-origin: center; + transform-origin: center; + transition: opacity 0.2s 0.2s, -webkit-transform 0.3s 0.1s; + transition: transform 0.3s 0.1s, opacity 0.2s 0.2s; + transition: transform 0.3s 0.1s, opacity 0.2s 0.2s, -webkit-transform 0.3s 0.1s; + border-radius: 2rem; + background-color: white; + overflow: hidden; + pointer-events: none; } + [dir="rtl"] .md-search__overlay { + right: 0.4rem; + left: initial; } + [data-md-toggle="search"]:checked ~ .md-header .md-search__overlay { + transition: opacity 0.1s, -webkit-transform 0.4s; + transition: transform 0.4s, opacity 0.1s; + transition: transform 0.4s, opacity 0.1s, -webkit-transform 0.4s; + opacity: 1; } + .md-search__inner { + position: fixed; + top: 0; + left: 100%; + width: 100%; + height: 100%; + -webkit-transform: translateX(5%); + transform: translateX(5%); + transition: right 0s 0.3s, left 0s 0.3s, opacity 0.15s 0.15s, -webkit-transform 0.15s 0.15s cubic-bezier(0.4, 0, 0.2, 1); + transition: right 0s 0.3s, left 0s 0.3s, transform 0.15s 0.15s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.15s 0.15s; + transition: right 0s 0.3s, left 0s 0.3s, transform 0.15s 0.15s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.15s 0.15s, -webkit-transform 0.15s 0.15s cubic-bezier(0.4, 0, 0.2, 1); + opacity: 0; + z-index: 2; } + [data-md-toggle="search"]:checked ~ .md-header .md-search__inner { + left: 0; + -webkit-transform: translateX(0); + transform: translateX(0); + transition: right 0s 0s, left 0s 0s, opacity 0.15s 0.15s, -webkit-transform 0.15s 0.15s cubic-bezier(0.1, 0.7, 0.1, 1); + transition: right 0s 0s, left 0s 0s, transform 0.15s 0.15s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s 0.15s; + transition: right 0s 0s, left 0s 0s, transform 0.15s 0.15s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s 0.15s, -webkit-transform 0.15s 0.15s cubic-bezier(0.1, 0.7, 0.1, 1); + opacity: 1; } + [dir="rtl"] [data-md-toggle="search"]:checked ~ .md-header .md-search__inner { + right: 0; + left: initial; } + html [dir="rtl"] .md-search__inner { + right: 100%; + left: initial; + -webkit-transform: translateX(-5%); + transform: translateX(-5%); } + .md-search__input { + width: 100%; + height: 4.8rem; + font-size: 1.8rem; } + .md-search__icon[for="__search"] { + top: 1.2rem; + left: 1.6rem; } + .md-search__icon[for="__search"][for="__search"]::before { + content: "\E5C4"; } + [dir="rtl"] .md-search__icon[for="__search"][for="__search"]::before { + content: "\E5C8"; } + .md-search__icon[type="reset"] { + top: 1.2rem; + right: 1.6rem; } + .md-search__output { + top: 4.8rem; + bottom: 0; } + .md-search-result__article--document::before { + display: none; } } + +@media only screen and (max-width: 76.1875em) { + [data-md-toggle="drawer"]:checked ~ .md-overlay { + width: 100%; + height: 100%; + transition: width 0s, height 0s, opacity 0.25s; + opacity: 1; } + .md-header-nav__button.md-icon--home, .md-header-nav__button.md-logo { + display: none; } + .md-hero__inner { + margin-top: 4.8rem; + margin-bottom: 2.4rem; } + .md-nav { + background-color: white; } + .md-nav--primary, + .md-nav--primary .md-nav { + display: flex; + position: absolute; + top: 0; + right: 0; + left: 0; + flex-direction: column; + height: 100%; + z-index: 1; } + .md-nav--primary .md-nav__title, + .md-nav--primary .md-nav__item { + font-size: 1.6rem; + line-height: 1.5; } + html .md-nav--primary .md-nav__title { + position: relative; + height: 11.2rem; + padding: 6rem 1.6rem 0.4rem; + background-color: rgba(0, 0, 0, 0.07); + color: rgba(0, 0, 0, 0.54); + font-weight: 400; + line-height: 4.8rem; + white-space: nowrap; + cursor: pointer; } + html .md-nav--primary .md-nav__title::before { + display: block; + position: absolute; + top: 0.4rem; + left: 0.4rem; + width: 4rem; + height: 4rem; + color: rgba(0, 0, 0, 0.54); } + html .md-nav--primary .md-nav__title ~ .md-nav__list { + background-color: white; + box-shadow: 0 0.1rem 0 rgba(0, 0, 0, 0.07) inset; } + html .md-nav--primary .md-nav__title ~ .md-nav__list > .md-nav__item:first-child { + border-top: 0; } + html .md-nav--primary .md-nav__title--site { + position: relative; + background-color: #3f51b5; + color: white; } + html .md-nav--primary .md-nav__title--site .md-nav__button { + display: block; + position: absolute; + top: 0.4rem; + left: 0.4rem; + width: 6.4rem; + height: 6.4rem; + font-size: 4.8rem; } + html .md-nav--primary .md-nav__title--site::before { + display: none; } + html [dir="rtl"] .md-nav--primary .md-nav__title::before { + right: 0.4rem; + left: initial; } + html [dir="rtl"] .md-nav--primary .md-nav__title--site .md-nav__button { + right: 0.4rem; + left: initial; } + .md-nav--primary .md-nav__list { + flex: 1; + overflow-y: auto; } + .md-nav--primary .md-nav__item { + padding: 0; + border-top: 0.1rem solid rgba(0, 0, 0, 0.07); } + [dir="rtl"] .md-nav--primary .md-nav__item { + padding: 0; } + .md-nav--primary .md-nav__item--nested > .md-nav__link { + padding-right: 4.8rem; } + [dir="rtl"] .md-nav--primary .md-nav__item--nested > .md-nav__link { + padding-right: 1.6rem; + padding-left: 4.8rem; } + .md-nav--primary .md-nav__item--nested > .md-nav__link::after { + content: "\E315"; } + [dir="rtl"] .md-nav--primary .md-nav__item--nested > .md-nav__link::after { + content: "\E314"; } + .md-nav--primary .md-nav__link { + position: relative; + margin-top: 0; + padding: 1.2rem 1.6rem; } + .md-nav--primary .md-nav__link::after { + position: absolute; + top: 50%; + right: 1.2rem; + margin-top: -1.2rem; + color: inherit; + font-size: 2.4rem; } + [dir="rtl"] .md-nav--primary .md-nav__link::after { + right: initial; + left: 1.2rem; } + .md-nav--primary .md-nav--secondary .md-nav__link { + position: static; } + .md-nav--primary .md-nav--secondary .md-nav { + position: static; + background-color: transparent; } + .md-nav--primary .md-nav--secondary .md-nav .md-nav__link { + padding-left: 2.8rem; } + [dir="rtl"] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link { + padding-right: 2.8rem; + padding-left: initial; } + .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link { + padding-left: 4rem; } + [dir="rtl"] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link { + padding-right: 4rem; + padding-left: initial; } + .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link { + padding-left: 5.2rem; } + [dir="rtl"] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link { + padding-right: 5.2rem; + padding-left: initial; } + .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link { + padding-left: 6.4rem; } + [dir="rtl"] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link { + padding-right: 6.4rem; + padding-left: initial; } + .md-nav__toggle ~ .md-nav { + display: flex; + -webkit-transform: translateX(100%); + transform: translateX(100%); + transition: opacity 0.125s 0.05s, -webkit-transform 0.25s cubic-bezier(0.8, 0, 0.6, 1); + transition: transform 0.25s cubic-bezier(0.8, 0, 0.6, 1), opacity 0.125s 0.05s; + transition: transform 0.25s cubic-bezier(0.8, 0, 0.6, 1), opacity 0.125s 0.05s, -webkit-transform 0.25s cubic-bezier(0.8, 0, 0.6, 1); + opacity: 0; } + [dir="rtl"] .md-nav__toggle ~ .md-nav { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); } + .no-csstransforms3d .md-nav__toggle ~ .md-nav { + display: none; } + .md-nav__toggle:checked ~ .md-nav { + -webkit-transform: translateX(0); + transform: translateX(0); + transition: opacity 0.125s 0.125s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.125s 0.125s; + transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.125s 0.125s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1); + opacity: 1; } + .no-csstransforms3d .md-nav__toggle:checked ~ .md-nav { + display: flex; } + .md-sidebar--primary { + position: fixed; + top: 0; + left: -24.2rem; + width: 24.2rem; + height: 100%; + -webkit-transform: translateX(0); + transform: translateX(0); + transition: box-shadow 0.25s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.25s; + transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.25s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1); + background-color: white; + z-index: 3; } + [dir="rtl"] .md-sidebar--primary { + right: -24.2rem; + left: initial; } + .no-csstransforms3d .md-sidebar--primary { + display: none; } + [data-md-toggle="drawer"]:checked ~ .md-container .md-sidebar--primary { + box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.4); + -webkit-transform: translateX(24.2rem); + transform: translateX(24.2rem); } + [dir="rtl"] [data-md-toggle="drawer"]:checked ~ .md-container .md-sidebar--primary { + -webkit-transform: translateX(-24.2rem); + transform: translateX(-24.2rem); } + .no-csstransforms3d [data-md-toggle="drawer"]:checked ~ .md-container .md-sidebar--primary { + display: block; } + .md-sidebar--primary .md-sidebar__scrollwrap { + overflow: hidden; } + .md-sidebar--primary .md-sidebar__scrollwrap { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + margin: 0; } + .md-tabs { + display: none; } } + +@media only screen and (min-width: 60em) { + .md-content { + margin-right: 24.2rem; } + [dir="rtl"] .md-content { + margin-right: initial; + margin-left: 24.2rem; } + .md-header-nav__button.md-icon--search { + display: none; } + .md-header-nav__source { + display: block; + width: 23rem; + max-width: 23rem; + margin-left: 2.8rem; + padding-right: 1.2rem; } + [dir="rtl"] .md-header-nav__source { + margin-right: 2.8rem; + margin-left: initial; + padding-right: initial; + padding-left: 1.2rem; } + .md-search { + padding: 0.4rem; } + .md-search__overlay { + position: fixed; + top: 0; + left: 0; + width: 0; + height: 0; + transition: width 0s 0.25s, height 0s 0.25s, opacity 0.25s; + background-color: rgba(0, 0, 0, 0.54); + cursor: pointer; } + [dir="rtl"] .md-search__overlay { + right: 0; + left: initial; } + [data-md-toggle="search"]:checked ~ .md-header .md-search__overlay { + width: 100%; + height: 100%; + transition: width 0s, height 0s, opacity 0.25s; + opacity: 1; } + .md-search__inner { + position: relative; + width: 23rem; + padding: 0.2rem 0; + float: right; + transition: width 0.25s cubic-bezier(0.1, 0.7, 0.1, 1); } + [dir="rtl"] .md-search__inner { + float: left; } + .md-search__form { + border-radius: 0.2rem; } + .md-search__input { + width: 100%; + height: 3.6rem; + padding-left: 4.4rem; + transition: background-color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1), color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1); + border-radius: 0.2rem; + background-color: rgba(0, 0, 0, 0.26); + color: inherit; + font-size: 1.6rem; } + [dir="rtl"] .md-search__input { + padding-right: 4.4rem; } + .md-search__input + .md-search__icon { + color: inherit; } + .md-search__input::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.7); } + .md-search__input:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.7); } + .md-search__input::-ms-input-placeholder { + color: rgba(255, 255, 255, 0.7); } + .md-search__input::placeholder { + color: rgba(255, 255, 255, 0.7); } + .md-search__input:hover { + background-color: rgba(255, 255, 255, 0.12); } + [data-md-toggle="search"]:checked ~ .md-header .md-search__input { + border-radius: 0.2rem 0.2rem 0 0; + background-color: white; + color: rgba(0, 0, 0, 0.87); + text-overflow: none; } + [data-md-toggle="search"]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle="search"]:checked ~ .md-header .md-search__input::-webkit-input-placeholder { + color: rgba(0, 0, 0, 0.54); } + [data-md-toggle="search"]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle="search"]:checked ~ .md-header .md-search__input:-ms-input-placeholder { + color: rgba(0, 0, 0, 0.54); } + [data-md-toggle="search"]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle="search"]:checked ~ .md-header .md-search__input::-ms-input-placeholder { + color: rgba(0, 0, 0, 0.54); } + [data-md-toggle="search"]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle="search"]:checked ~ .md-header .md-search__input::placeholder { + color: rgba(0, 0, 0, 0.54); } + .md-search__output { + top: 3.8rem; + transition: opacity 0.4s; + opacity: 0; } + [data-md-toggle="search"]:checked ~ .md-header .md-search__output { + box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.4); + opacity: 1; } + .md-search__scrollwrap { + max-height: 0; } + [data-md-toggle="search"]:checked ~ .md-header .md-search__scrollwrap { + max-height: 75vh; } + .md-search__scrollwrap::-webkit-scrollbar { + width: 0.4rem; + height: 0.4rem; } + .md-search__scrollwrap::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, 0.26); } + .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: #536dfe; } + .md-search-result__meta { + padding-left: 4.4rem; } + [dir="rtl"] .md-search-result__meta { + padding-right: 4.4rem; + padding-left: initial; } + .md-search-result__article { + padding-left: 4.4rem; } + [dir="rtl"] .md-search-result__article { + padding-right: 4.4rem; + padding-left: 1.6rem; } + .md-sidebar--secondary { + display: block; + margin-left: 100%; + -webkit-transform: translate(-100%, 0); + transform: translate(-100%, 0); } + [dir="rtl"] .md-sidebar--secondary { + margin-right: 100%; + margin-left: initial; + -webkit-transform: translate(100%, 0); + transform: translate(100%, 0); } } + +@media only screen and (min-width: 76.25em) { + .md-content { + margin-left: 24.2rem; } + [dir="rtl"] .md-content { + margin-right: 24.2rem; } + .md-content__inner { + margin-right: 2.4rem; + margin-left: 2.4rem; } + .md-header-nav__button.md-icon--menu { + display: none; } + .md-nav[data-md-state="animate"] { + transition: max-height 0.25s cubic-bezier(0.86, 0, 0.07, 1); } + .md-nav__toggle ~ .md-nav { + max-height: 0; + overflow: hidden; } + .no-js .md-nav__toggle ~ .md-nav { + display: none; } + .md-nav__toggle:checked ~ .md-nav, .md-nav[data-md-state="expand"] { + max-height: 100%; } + .no-js .md-nav__toggle:checked ~ .md-nav, .no-js .md-nav[data-md-state="expand"] { + display: block; } + .md-nav__item--nested > .md-nav > .md-nav__title { + display: none; } + .md-nav__item--nested > .md-nav__link::after { + display: inline-block; + -webkit-transform-origin: 0.45em 0.45em; + transform-origin: 0.45em 0.45em; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + vertical-align: -0.125em; } + .js .md-nav__item--nested > .md-nav__link::after { + transition: -webkit-transform 0.4s; + transition: transform 0.4s; + transition: transform 0.4s, -webkit-transform 0.4s; } + .md-nav__item--nested .md-nav__toggle:checked ~ .md-nav__link::after { + -webkit-transform: rotateX(180deg); + transform: rotateX(180deg); } + [data-md-toggle="search"]:checked ~ .md-header .md-search__inner { + width: 68.8rem; } + .md-search__scrollwrap { + width: 68.8rem; } + .md-sidebar--secondary { + margin-left: 122rem; } + [dir="rtl"] .md-sidebar--secondary { + margin-right: 122rem; + margin-left: initial; } + .md-tabs ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--nested { + font-size: 0; + visibility: hidden; } + .md-tabs--active ~ .md-main .md-nav--primary .md-nav__title { + display: block; + padding: 0; } + .md-tabs--active ~ .md-main .md-nav--primary .md-nav__title--site { + display: none; } + .no-js .md-tabs--active ~ .md-main .md-nav--primary .md-nav { + display: block; } + .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item { + font-size: 0; + visibility: hidden; } + .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--nested { + display: none; + font-size: 1.4rem; + overflow: auto; + visibility: visible; } + .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--nested > .md-nav__link { + display: none; } + .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--active { + display: block; } + .md-tabs--active ~ .md-main .md-nav[data-md-level="1"] { + max-height: initial; + overflow: visible; } + .md-tabs--active ~ .md-main .md-nav[data-md-level="1"] > .md-nav__list > .md-nav__item { + padding-left: 0; } + .md-tabs--active ~ .md-main .md-nav[data-md-level="1"] .md-nav .md-nav__title { + display: none; } } + +@media only screen and (min-width: 45em) { + .md-footer-nav__link { + width: 50%; } + .md-footer-copyright { + max-width: 75%; + float: left; } + [dir="rtl"] .md-footer-copyright { + float: right; } + .md-footer-social { + padding: 1.2rem 0; + float: right; } + [dir="rtl"] .md-footer-social { + float: left; } } + +@media only screen and (max-width: 29.9375em) { + [data-md-toggle="search"]:checked ~ .md-header .md-search__overlay { + -webkit-transform: scale(45); + transform: scale(45); } } + +@media only screen and (min-width: 30em) and (max-width: 44.9375em) { + [data-md-toggle="search"]:checked ~ .md-header .md-search__overlay { + -webkit-transform: scale(60); + transform: scale(60); } } + +@media only screen and (min-width: 45em) and (max-width: 59.9375em) { + [data-md-toggle="search"]:checked ~ .md-header .md-search__overlay { + -webkit-transform: scale(75); + transform: scale(75); } } + +@media only screen and (min-width: 60em) and (max-width: 76.1875em) { + [data-md-toggle="search"]:checked ~ .md-header .md-search__inner { + width: 46.8rem; } + .md-search__scrollwrap { + width: 46.8rem; } + .md-search-result__teaser { + max-height: 5rem; + -webkit-line-clamp: 3; } } + +/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJhc3NldHMvc3R5bGVzaGVldHMvYXBwbGljYXRpb24uMTFlNDE4NTIuY3NzIiwic291cmNlUm9vdCI6IiJ9*/ \ No newline at end of file diff --git a/assets/swatchcolorpicker-initial.png b/assets/swatchcolorpicker-initial.png new file mode 100644 index 00000000..6704673c Binary files /dev/null and b/assets/swatchcolorpicker-initial.png differ diff --git a/assets/swatchcolorpicker-selector.png b/assets/swatchcolorpicker-selector.png new file mode 100644 index 00000000..0571791c Binary files /dev/null and b/assets/swatchcolorpicker-selector.png differ diff --git a/assets/teampicker-selected.png b/assets/teampicker-selected.png new file mode 100644 index 00000000..77c873cd Binary files /dev/null and b/assets/teampicker-selected.png differ diff --git a/assets/teampicker.png b/assets/teampicker.png new file mode 100644 index 00000000..a6c3e0b2 Binary files /dev/null and b/assets/teampicker.png differ diff --git a/assets/termpicker-autocomplete.png b/assets/termpicker-autocomplete.png new file mode 100644 index 00000000..18b31720 Binary files /dev/null and b/assets/termpicker-autocomplete.png differ diff --git a/assets/termpicker-empty.png b/assets/termpicker-empty.png new file mode 100644 index 00000000..c8587b23 Binary files /dev/null and b/assets/termpicker-empty.png differ diff --git a/assets/termpicker-group.png b/assets/termpicker-group.png new file mode 100644 index 00000000..72c26eac Binary files /dev/null and b/assets/termpicker-group.png differ diff --git a/assets/termpicker-limit-to-group.png b/assets/termpicker-limit-to-group.png new file mode 100644 index 00000000..42fb1363 Binary files /dev/null and b/assets/termpicker-limit-to-group.png differ diff --git a/assets/termpicker-selected-terms.png b/assets/termpicker-selected-terms.png new file mode 100644 index 00000000..05119c8e Binary files /dev/null and b/assets/termpicker-selected-terms.png differ diff --git a/assets/termpicker-selected.png b/assets/termpicker-selected.png new file mode 100644 index 00000000..338b23d6 Binary files /dev/null and b/assets/termpicker-selected.png differ diff --git a/assets/textfieldwithcallout-open.png b/assets/textfieldwithcallout-open.png new file mode 100644 index 00000000..772cabfc Binary files /dev/null and b/assets/textfieldwithcallout-open.png differ diff --git a/assets/textfieldwithcallout.png b/assets/textfieldwithcallout.png new file mode 100644 index 00000000..78f1080b Binary files /dev/null and b/assets/textfieldwithcallout.png differ diff --git a/assets/togglefieldwithcallout-open.png b/assets/togglefieldwithcallout-open.png new file mode 100644 index 00000000..33a80c06 Binary files /dev/null and b/assets/togglefieldwithcallout-open.png differ diff --git a/assets/togglefieldwithcallout.png b/assets/togglefieldwithcallout.png new file mode 100644 index 00000000..0479fc5c Binary files /dev/null and b/assets/togglefieldwithcallout.png differ diff --git a/assets/viewPicker.png b/assets/viewPicker.png new file mode 100644 index 00000000..86408f18 Binary files /dev/null and b/assets/viewPicker.png differ diff --git a/assets/webpartinformation.png b/assets/webpartinformation.png new file mode 100644 index 00000000..e18674fb Binary files /dev/null and b/assets/webpartinformation.png differ diff --git a/beta/index.html b/beta/index.html new file mode 100644 index 00000000..ec562d7e --- /dev/null +++ b/beta/index.html @@ -0,0 +1,1188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Beta testing - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

Testing out a beta release

+

All you need to do for testing out a beta release of @pnp/spfx-property-controls is to install the dependency as follows:

+
npm install @pnp/spfx-property-controls@next --save
+
+ +

Beta control documentation

+

The control documentation is only live for public releases, not for beta versions. If you want to checkout the markdown files of all controls in the dev branch: beta documentation.

+

Next Steps

+

Once you installed the beta version, you can start using the controls in your solution. Go to the homepage to get an overview of all the available controls and the steps to get started: home.

+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFIeldFolderPicker/index.html b/controls/PropertyFIeldFolderPicker/index.html new file mode 100644 index 00000000..96e986da --- /dev/null +++ b/controls/PropertyFIeldFolderPicker/index.html @@ -0,0 +1,1253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldFolderPicker control - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldFolderPicker control

+

This control allows you to explore and select a folder from the property pane. +It also allows the user to create a new folder at the current level being explored.

+

Here is an example of the control:

+

PropertyFieldFolderPicker example usage

+

PropertyFieldFolderPicker example

+

How to use this control in your solutions

+
    +
  • Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  • +
  • Import the following modules to your webpart:
  • +
+
import { IFolder, IPropertyFieldFolderPickerProps , PropertyFieldFolderPicker } from "@pnp/spfx-property-controls/lib/PropertyFieldFolderPicker";
+
+ +

Create a new property for your web part, for example:

+
export interface IPropertyControlsTestWebPartProps {
+  folderPicker: IFolder;
+}
+
+ +
    +
  • Add the folder picker property control to the groupFields of the web part property pane configuration:
  • +
+
 PropertyFieldFolderPicker('folderPicker', {
+    context: this.context,
+    onPropertyChange: this.onPropertyPaneFieldChanged.bind(this),
+    properties: this.properties,
+    key: "folderPickerId",
+    label: "Folder Picker",
+    selectedFolder: this.properties.folderPicker,
+    canCreateFolders: true,
+    onSelect: ((folder: IFolder) => { console.log(folder); this.properties.folderPicker = folder; }),
+    rootFolder: {
+        Name: "Documents",
+        ServerRelativeUrl: "/sites/testSiteCollection/Shared Documents"
+    },
+}),
+
+ +

Implementation

+

The PropertyFieldFolderPicker control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
contextBaseComponentContextyesThe context object of the SPFx loaded webpart.
labelstringyesThe label for the control.
rootFolderIFolderyesThe lowest level folder that can be explored. This can be the root folder of a library.
selectedFolderIFolderyesStore the results of the folder picker.
defaultFolderIFoldernoThe default folder to be selected or explored.
propertiesanyyesParent web part properties, this object is used to update the property value.
keystringyesA unique key that indicates the identity of this control.
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the data gets changed.
requiredbooleannoIs selection required.
disabledbooleannoIs the control disabled.
canCreateFoldersbooleannoAllow current user to create folders on the target location. If enabled, you need to ensure that the user has the required permissions.
onSelect(folder: IFolder): voidnoCallback function called after a folder is selected.
siteAbsoluteUrlstringnoThe absolute url of the site you want to pick a folder from (if different than the site the webpart is installed on)
+

interface IFolder

+

The value returned from the selected folder object.

+ + + + + + + + + + + + + + + + + + + + +
ValueTypeDescription
NamestringName of the folder.
ServerRelativeUrlstringServer relative URL of the folder.
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldButton/index.html b/controls/PropertyFieldButton/index.html new file mode 100644 index 00000000..3a53d204 --- /dev/null +++ b/controls/PropertyFieldButton/index.html @@ -0,0 +1,1280 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldButton - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldButton control

+

This control generates a Button Control .

+

PropertyFieldButton example usage

+

PropertyFieldButton example

+

How to use this control in your solutions

+
    +
  • Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  • +
  • Import the following modules to your component:
  • +
+
import { PropertyFieldButton} from '@pnp/spfx-property-controls/lib/PropertyFieldButton';
+
+ +
    +
  • Add the custom property control to the groupFields of the web part property pane configuration:
  • +
+
 PropertyFieldButton("", {
+      text={"Button"}
+      key={"buttonID"}
+      disabled={false}
+      className={className}
+      styles={styles}
+      onClick={()=>{alert("Button Clicked")}}
+      iconProps={iconProps}
+      isPrimary={true}
+      isVIsible={true}
+
+  })
+
+ +

Implementation

+

The PropertyFieldButton control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
keystringyesAn unique key that indicates the identity of this control.
stylesIButtonStylesnostyles object
classnamestringnocss ClassName
isVisiblebooleanyesIndicate if button is visible
textstringnotext of button
isPrimarybooleanyesindicate Button is a primary button
iconPropsIIconPropsnotext of button
disablebooleannoDisable control
onClick(e:any) =>voidyesOnclick function
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldButtonWithCallout/index.html b/controls/PropertyFieldButtonWithCallout/index.html new file mode 100644 index 00000000..d2b310be --- /dev/null +++ b/controls/PropertyFieldButtonWithCallout/index.html @@ -0,0 +1,1268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldButtonWithCallout - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldButtonWithCallout control

+

This control generates a button control with a callout.

+

PropertyFieldButtonWithCallout rendering

+

Button field with callout

+

PropertyFieldButtonWithCallout callout opened

+

Button field with callout opened

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/Callout';
+import { PropertyFieldButtonWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldButtonWithCallout';
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldButtonWithCallout('fakeProperty', {
+  calloutTrigger: CalloutTriggers.Click,
+  key: 'buttonWithCalloutFieldId',
+  calloutContent: React.createElement('p', {}, 'Tests connection to the database with the parameters listed above'),
+  calloutWidth: 150,
+  text: 'Test connection',
+  onClick: () => { /* Code to test db connection */ }
+})
+
+ +

Implementation

+

The PropertyFieldButtonWithCallout control uses the same implementation as the default PropertyPaneButton and has the following additional properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
calloutContentReact.ReactNodenoCallout content - any HTML
calloutWidthnumbernoCustom width for callout including borders. If value is 0, no width is applied.
calloutTriggerCalloutTriggersnoEvent to show the callout
gapSpacenumbernoThe gap between the callout and the target
+

Enum CalloutTriggers

+ + + + + + + + + + + + + + + + + +
NameDescription
ClickShows the callout when you hover over the icon
HoverShows the callout when you click on the icon
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldCheckboxWithCallout/index.html b/controls/PropertyFieldCheckboxWithCallout/index.html new file mode 100644 index 00000000..2ee695c6 --- /dev/null +++ b/controls/PropertyFieldCheckboxWithCallout/index.html @@ -0,0 +1,1276 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldCheckboxWithCallout - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldCheckboxWithCallout control

+

This control generates a checkbox control with a callout.

+

PropertyFieldCheckboxWithCallout rendering

+

Checkbox field with callout

+

PropertyFieldCheckboxWithCallout callout opened

+

Checkbox field with callout opened

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/Callout';
+import { PropertyFieldCheckboxWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldCheckboxWithCallout';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  checkboxWithCalloutValue: boolean;
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldCheckboxWithCallout('checkboxWithCalloutValue', {
+  calloutTrigger: CalloutTriggers.Click,
+  key: 'checkboxWithCalloutFieldId',
+  calloutContent: React.createElement('p', {}, 'Check the checkbox to accept Application Terms and Conditions'),
+  calloutWidth: 200,
+  text: 'Accept terms and conditions',
+  checked: this.properties.checkboxWithCalloutValue
+})
+
+ +

Implementation

+

The PropertyFieldCheckboxWithCallout control uses the same implementation as the default PropertyPaneCheckbox and has the following additional properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
calloutContentReact.ReactNodenoCallout content - any HTML
calloutWidthnumbernoCustom width for callout including borders. If value is 0, no width is applied.
calloutTriggerCalloutTriggersnoEvent to show the callout
gapSpacenumbernoThe gap between the callout and the target
+

Enum CalloutTriggers

+ + + + + + + + + + + + + + + + + +
NameDescription
ClickShows the callout when you hover over the icon
HoverShows the callout when you click on the icon
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldChoiceGroupWithCallout/index.html b/controls/PropertyFieldChoiceGroupWithCallout/index.html new file mode 100644 index 00000000..d05339ef --- /dev/null +++ b/controls/PropertyFieldChoiceGroupWithCallout/index.html @@ -0,0 +1,1287 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldChoiceGroupWithCallout - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldChoiceGroupWithCallout control

+

This control generates a choice group control with a callout.

+

PropertyFieldChoiceGroupWithCallout rendering

+

Choice Group field with callout

+

PropertyFieldChoiceGroupWithCallout callout opened

+

Choice field with callout opened

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/PropertyFieldHeader';
+import { PropertyFieldChoiceGroupWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldChoiceGroupWithCallout';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  choiceGroupWithCalloutValue: string;
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldChoiceGroupWithCallout('choiceGroupWithCalloutValue', {
+  calloutContent: React.createElement('div', {}, 'Select preferable mobile platform'),
+  calloutTrigger: CalloutTriggers.Hover,
+  key: 'choiceGroupWithCalloutFieldId',
+  label: 'Preferred mobile platform',
+  options: [{
+    key: 'iOS',
+    text: 'iOS',
+    checked: this.properties.choiceGroupWithCalloutValue === 'iOS'
+  }, {
+    key: 'Android',
+    text: 'Android',
+    checked: this.properties.choiceGroupWithCalloutValue === 'Android'
+  }, {
+    key: 'Other',
+    text: 'Other',
+    checked: this.properties.choiceGroupWithCalloutValue === 'Other'
+  }]
+})
+
+ +

Implementation

+

The PropertyFieldChoiceGroupWithCallout control uses the same implementation as the default PropertyPaneChoiceGroup and has the following additional properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
calloutContentReact.ReactNodenoCallout content - any HTML
calloutWidthnumbernoCustom width for callout including borders. If value is 0, no width is applied.
calloutTriggerCalloutTriggersnoEvent to show the callout
gapSpacenumbernoThe gap between the callout and the target
+

Enum CalloutTriggers

+ + + + + + + + + + + + + + + + + +
NameDescription
ClickShows the callout when you hover over the icon
HoverShows the callout when you click on the icon
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldCodeEditor/index.html b/controls/PropertyFieldCodeEditor/index.html new file mode 100644 index 00000000..53580d20 --- /dev/null +++ b/controls/PropertyFieldCodeEditor/index.html @@ -0,0 +1,1336 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldCodeEditor - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldCodeEditor control

+

This control generates a code editor which can be used to add custom styling or content to your web part.

+

PropertyFieldCodeEditor

+

Code editor initial

+

PropertyFieldCodeEditor editing experience

+

Code editor editing experience

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyFieldCodeEditor, PropertyFieldCodeEditorLanguages } from '@pnp/spfx-property-controls/lib/PropertyFieldCodeEditor';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  htmlCode: string;
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldCodeEditor('htmlCode', {
+  label: 'Edit HTML Code',
+  panelTitle: 'Edit HTML Code',
+  initialValue: this.properties.htmlCode,
+  onPropertyChange: this.onPropertyPaneFieldChanged,
+  properties: this.properties,
+  disabled: false,
+  key: 'codeEditorFieldId',
+  language: PropertyFieldCodeEditorLanguages.HTML,
+  options: {
+    wrap: true,
+    fontSize: 20,
+    // more options
+  }
+})
+
+ +

Implementation

+

The PropertyFieldCodeEditor control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
labelstringyesProperty field label displayed on top.
disabledbooleannoSpecify if the control needs to be disabled.
panelTitlestringyesTitle of the code editor panel.
initialValuestringnoDefines the initial code.
languagePropertyFieldCodeEditorLanguagesnoSets the language on the code editor.
propertiesanyyesParent web part properties, this object is use to update the property value.
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the date gets changed.
keystringyesAn unique key that indicates the identity of this control.
optionsAceOptionsnoAdditional properties available to the Ace editor.
panelWidthstringnoWidth of the panel that contains the Ace editor
+

Enum PropertyFieldCodeEditorLanguages

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name
css
JavaScript
JSON
Handlebars
HTML
Plain Text
Sass
TypeScript
XML
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldCollectionData/index.html b/controls/PropertyFieldCollectionData/index.html new file mode 100644 index 00000000..2c1b3eb0 --- /dev/null +++ b/controls/PropertyFieldCollectionData/index.html @@ -0,0 +1,1601 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldCollectionData - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldCollectionData control

+

This property field control gives you the ability to insert a list / collection data which can be used in your web part. For example: you want to specify multiple locations for showing a weather information.

+

The control allows you to specify multiple data types like: string, number, boolean, or dropdown.

+

PropertyFieldCollectionData

+

Code editor initial

+

The type of data you get returned depends on the fields you defined. For the example above, the data looks like this:

+
[
+  {"Title":"Person","Lastname":"1","Age":"42","City":"helsinki","Sign":true},
+  {"Title":"Person","Lastname":"2","Age":"42","City":"helsinki","Sign":true}
+]
+
+ +

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyFieldCollectionData, CustomCollectionFieldType } from '@pnp/spfx-property-controls/lib/PropertyFieldCollectionData';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  collectionData: any[];
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldCollectionData("collectionData", {
+  key: "collectionData",
+  label: "Collection data",
+  panelHeader: "Collection data panel header",
+  manageBtnLabel: "Manage collection data",
+  value: this.properties.collectionData,
+  fields: [
+    {
+      id: "Title",
+      title: "Firstname",
+      type: CustomCollectionFieldType.string,
+      required: true
+    },
+    {
+      id: "Lastname",
+      title: "Lastname",
+      type: CustomCollectionFieldType.string
+    },
+    {
+      id: "Age",
+      title: "Age",
+      type: CustomCollectionFieldType.number,
+      required: true
+    },
+    {
+      id: "City",
+      title: "Favorite city",
+      type: CustomCollectionFieldType.dropdown,
+      options: [
+        {
+          key: "antwerp",
+          text: "Antwerp"
+        },
+        {
+          key: "helsinki",
+          text: "Helsinki"
+        },
+        {
+          key: "montreal",
+          text: "Montreal"
+        }
+      ],
+      required: true
+    },
+    {
+      id: "Sign",
+      title: "Signed",
+      type: CustomCollectionFieldType.boolean
+    }
+  ],
+  disabled: false
+})
+
+ +

Sample of custom field rendering

+

Here is an example of how you can render your own controls in the PropertyFieldCollectionData control:

+
{
+  id: "customFieldId",
+  title: "Custom Field",
+  type: CustomCollectionFieldType.custom,
+  onCustomRender: (field, value, onUpdate, item, itemId, onError) => {
+    return (
+      React.createElement("div", null,
+        React.createElement("input", { key: itemId, value: value, onChange: (event: React.FormEvent<HTMLInputElement>) => {
+          onUpdate(field.id, event.currentTarget.value);
+          if (event.currentTarget.value === "error") {
+            onError(field.id, "Value shouldn't be equal to error");
+          } else {
+            onError(field.id, "");
+          }
+        }}), " 🎉"
+      )
+    );
+  }
+}
+
+ +

Implementation

+

The PropertyFieldCollectionData control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescriptionDefault Value
keystringyesAn unique key that indicates the identity of this control.
labelstringyesProperty field label displayed on top.
panelHeaderstringyesLabel to be used as the header in the panel.
panelDescriptionstringnoProperty that allows you to specify a description in the collection panel.
manageBtnLabelstringyesLabel of the button to open the panel.
saveBtnLabelstringnoLabel of the save button.
saveAndAddBtnLabelstringyesLabel of the save and add button.
cancelBtnLabelstringyesLabel of the cancel button.
fieldsICustomCollectionField[]yesThe fields to be used for the list of collection data.
valuestringyesThe collection data value.
enableSortingbooleannoSpecify if you want to be able to sort the items in the collection.false
disabledbooleannoSpecify if the control is disabled.false
disableItemCreationbooleannoAllows you to specify if user can create new items.false
disableItemDeletionbooleannoAllows you to specify if users can delete already inserted items.false
panelClassNamestringnoAllows you to specify a custom CSS class name for the collection data panel.
tableClassNamestringnoAllows you to specify a custom CSS class name for the collection data table inside the panel.
panelPropsIPanelPropsnoAllows you to pass in props of the panel such as type and size to control the underlying panel.
+

Interface ICustomCollectionField

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
idstringyesID of the field.
titlestringyesTitle of the field. This will be used for the label in the table.
typeCustomCollectionFieldTypeyesSpecifies the type of field to render.
disable(item: any) => booleannoConditionally disable a field.
disableEditbooleannoAllows you to specify if a field is disabled for editing.
requiredbooleannoSpecify if the field is required.
optionsIDropdownOption[] | (fieldId: string, item: any) => IDropdownOption[]noDropdown options. Only necessary when dropdown type is used. Options can be either a static array or a function that will calculate the values dynamically and can react to the current item.
onRenderOptionIRenderFunctionnoDropdown custom options render method. Only for the dropdown field type.
placeholderstringnoPlaceholder text which will be used for the input field. If not provided the input title will be used.
defaultValueanynoSpecify a default value for the input field.
deferredValidationTimenumbernoField will start to validate after users stop typing for deferredValidationTime milliseconds. Default: 200ms.
onGetErrorMessage(value: any, index: number, crntItem: any): string | PromisenoThe method is used to get the validation error message and determine whether the input value is valid or not. It provides you the current row index and the item you are currently editing.
onCustomRender(field: ICustomCollectionField, value: any, onUpdate: (fieldId: string, value: any) => void, item: any, itemUniqueId: string, onCustomFieldValidation: (fieldId: string, errorMessage: string) => void) => JSX.ElementnoThis property is only required if you are using the custom field type and it can be used to specify the custom rendering of your control in the collection data.
isVisible(field: ICustomCollectionField, items: any[]) => booleannoThe method is used to toggle column visibility depending on current state of editing items
iconFieldRenderModeCollectionIconFieldRenderModenoIcon field render mode: text box or IconPicker
+

Enum CustomCollectionFieldType

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeDescription
stringText field
numberNumber field
booleanCheckbox
dropdownDropdown field. You will have to specify the options property when using this field type
fabricIconName of the Office UI Fabric icon
urlURL field
customThis gives you control over the whole field rendering. Be sure to provide the onCustomRender method to render your control in the collection data.
colorColor field
+

Type CollectionIconFieldRenderMode

+
export type CollectionIconFieldRenderMode = 'textbox' | 'picker';
+
+ +

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldColorPicker/index.html b/controls/PropertyFieldColorPicker/index.html new file mode 100644 index 00000000..f6b891d9 --- /dev/null +++ b/controls/PropertyFieldColorPicker/index.html @@ -0,0 +1,1402 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldColorPicker - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldColorPicker control

+

This control generates a color picker that you can use inside the property pane.

+

PropertyFieldColorPicker

+

Color picker initial

+

PropertyFieldColorPicker color selector

+

Color picker select color

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyFieldColorPicker, PropertyFieldColorPickerStyle } from '@pnp/spfx-property-controls/lib/PropertyFieldColorPicker';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  color: string;
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldColorPicker('color', {
+  label: 'Color',
+  selectedColor: this.properties.color,
+  onPropertyChange: this.onPropertyPaneFieldChanged,
+  properties: this.properties,
+  disabled: false,
+  debounce: 1000,
+  isHidden: false,
+  alphaSliderHidden: false,
+  style: PropertyFieldColorPickerStyle.Full,
+  iconName: 'Precipitation',
+  key: 'colorFieldId'
+})
+
+ +

Implementation

+

The PropertyFieldColorPicker control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
labelstringyesProperty field label displayed on top.
disabledbooleannoSpecify if the control needs to be disabled.
debouncenumbernoSpecify delay after which control value will be set.
isHiddenbooleannoSpecify if the control needs to be hidden.
selectedColorstring or IColornoThe CSS-compatible string or an IColor object to describe the initial color
alphaSliderHiddenbooleannoWhen true, the alpha slider control is hidden
showPreviewbooleannoWhether to show color preview box.
stylePropertyFieldColorPickerStylenoDetermines how the control is displayed (defaults to inline)
iconNamestringnoThe name of the UI Fabric Font Icon to use for Inline display (defaults to Color)
valueAsObjectbooleannoWhen true, the property is returned as an IColor object. When false (default), the property is returned as a CSS-compatible string
propertiesanyyesParent web part properties, this object is use to update the property value.
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the date gets changed.
keystringyesAn unique key that indicates the identity of this control.
+

Enum PropertyFieldColorPickerStyle

+ + + + + + + + + + + + + + + + + +
NameDescription
FullDisplay the full control in the property pane
InlineDisplay the color picker inline
+

Value

+

By default, the Color Picker returns the value as a CSS-compatible string. This allows you the flexibility of simply assigning the value to an inline style as is and this is usually sufficient. However, this also limits the information directly available to you since the format could be a Hex code, an RGBA value, or even a named color and may not be suitable for advanced scenarios.

+

By setting the valueAsObject property to true, you will always receive a consistent IColor object that provides you detailed information about the chosen color. Here are the properties available in the IColor object:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeDescription
strstringCSS-compatible string (this is the same value that would normally be returned when valueAsObject is false)
hexstringHex value (does not reflect alpha)
rnumberRed
gnumberGreen
bnumberBlue
hnumberHue
snumberSaturation
vnumberValue
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldColumnPicker/index.html b/controls/PropertyFieldColumnPicker/index.html new file mode 100644 index 00000000..547ac85f --- /dev/null +++ b/controls/PropertyFieldColumnPicker/index.html @@ -0,0 +1,1499 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldColumnPicker - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldColumnPicker control

+

This control generates a column picker field that can be used in the property pane of your SharePoint Framework web parts.

+

The control automatically retrieves the columns for a given SharePoint list:

+

Single Column picker

+

MultiColumn picker

+

MultiColumn picker - Multiselect Dropdown

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyFieldColumnPicker, PropertyFieldColumnPickerOrderBy } from '@pnp/spfx-property-controls/lib/PropertyFieldColumnPicker';
+
+ +
    +
  1. You'll probably want to use this control in combination with the PropertyFieldListPicker. Make sure to select the multiSelect prop to false, as this control is designed to work with a single list. Store the list id in your web part properties, as follows:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  list: string; // Stores the list ID
+}
+
+ +
    +
  1. Create a new property for your web part, as indicated between the BEGIN: and END: comments below:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  list: string; // Stores the list ID
+
+  // BEGIN: Added
+  column: string; // Stores the single column property (property can be configured)
+  // END: Added
+
+  // BEGIN: Added
+  multiColumn: string; // Stores the multi column property (property can be configured)
+  // END: Added
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
// Single column selection returning 'Internal Name' of the selected column
+PropertyFieldColumnPicker('column', {
+    label: 'Select a column',
+    context: this.context,
+    selectedColumn: this.properties.column,
+    listId: this.properties.singleListFiltered,
+    disabled: false,
+    orderBy: PropertyFieldColumnPickerOrderBy.Title,
+    onPropertyChange: this.onPropertyPaneFieldChanged.bind(this),
+    properties: this.properties,
+    onGetErrorMessage: null,
+    deferredValidationTime: 0,
+    key: 'columnPickerFieldId',
+    displayHiddenColumns: false,
+    columnReturnProperty: IColumnReturnProperty["Internal Name"]
+})
+
+// Multi column selection returning the 'Title' of the selected columns
+PropertyFieldColumnPicker('multiColumn', {
+    label: 'Select columns',
+    context: this.context,
+    selectedColumn: this.properties.multiColumn,
+    listId: this.properties.singleListFiltered,
+    disabled: false,
+    orderBy: PropertyFieldColumnPickerOrderBy.Title,
+    onPropertyChange: this.onPropertyPaneFieldChanged.bind(this),
+    properties: this.properties,
+    onGetErrorMessage: null,
+    deferredValidationTime: 0,
+    key: 'multiColumnPickerFieldId',
+    displayHiddenColumns: false,
+    columnReturnProperty: IColumnReturnProperty.Title,
+    multiSelect: true
+})
+
+// Multi column selection returning the 'Title' of the selected columns as a multi-select dropdown
+PropertyFieldColumnPicker('multiColumn', {
+    label: 'Select columns',
+    context: this.context,
+    selectedColumn: this.properties.multiColumn,
+    listId: this.properties.singleListFiltered,
+    disabled: false,
+    orderBy: PropertyFieldColumnPickerOrderBy.Title,
+    onPropertyChange: this.onPropertyPaneFieldChanged.bind(this),
+    properties: this.properties,
+    onGetErrorMessage: null,
+    deferredValidationTime: 0,
+    key: 'multiColumnPickerFieldId',
+    displayHiddenColumns: false,
+    columnReturnProperty: IColumnReturnProperty.Title,
+    multiSelect: true
+    renderFieldAs: IPropertyFieldRenderOption["Multiselect Dropdown"]
+})
+
+ +

Implementation

+

The PropertyFieldColumnPicker control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
labelstringyesProperty field label displayed on top.
listIdstringyesThe ID of the list or library you wish to select a column(s) from.
disabledbooleannoSpecify if the control needs to be disabled.
contextBaseComponentContextyesContext of the current web part.
selectedColumnstring | string[]noInitial selected column(s) of the control.
orderByPropertyFieldColumnPickerOrderBynoSpecify the property on which you want to order the retrieve set of columns.
multiSelectbooleannoSpecify if you want to have a single or multi-column picker. By default this is set to false (single column picker).
webAbsoluteUrlstringnoAbsolute Web Url of target site (user requires permissions)
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the date gets changed.
propertiesanyyesParent web part properties, this object is use to update the property value.
keystringyesAn unique key that indicates the identity of this control.
onGetErrorMessagefunctionnoThe method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it.
deferredValidationTimenumbernoControl will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200.
columnsToExcludestring[]noDefines columns by which should be excluded from the column picker control. You can specify column titles or IDs
filterstringnoFilter columns from OData query.
onColumnsRetrieved(columns: ISPColumn[]) => PromiseLike | ISPColumn[]noCallback that is called before the dropdown is populated.
displayHiddenColumnsbooleannoHidden columns to be returned or not. By default this is set to false (No Hidden columns)
columnReturnPropertyIColumnReturnPropertynoProperty to be returned for the selected column(s).
renderFieldAsIPropertyFieldRenderOptionnoProperty to render the control as Choice group or Multiselect Dropdown. This is applicable only if the multiselect is true. By default the control will be displayed as Choice Group
+

Enum PropertyFieldColumnPickerOrderBy

+ + + + + + + + + + + + + + + + + +
NameDescription
IdSort by column ID
TitleSort by column title
+

Enum IColumnReturnProperty

+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
IdColumn ID to be returned
TitleColumn Title to be returned
Internal NameColumn InternalName to be returned
+

Enum IPropertyFieldRenderOption +| Name | Description | +| ---- | ---- | +| Choice Group | Render the control as multi-select checkbox list +| Multiselect Dropdown | Render the control as multi-select dropdown

+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldContentTypePicker/index.html b/controls/PropertyFieldContentTypePicker/index.html new file mode 100644 index 00000000..62fe6be0 --- /dev/null +++ b/controls/PropertyFieldContentTypePicker/index.html @@ -0,0 +1,1329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldContentTypePicker control - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldContentTypePicker control

+

This control generates a ContentType picker field that can be used in the property pane of your SharePoint Framework web parts.

+

The control automatically retrieves the ContentType for a given SharePoint Site or selected SharePoint list:

+

ContentType picker

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyFieldContentTypePicker, PropertyFieldContentTypePickerOrderBy } from '@pnp/spfx-property-controls/lib/PropertyFieldContentTypePicker';
+
+ +
    +
  1. You'll probably want to use this control in combination with the PropertyFieldListPicker. Make sure to select the multiSelect prop to false, as this control is designed to work with a single list. Store the list id in your web part properties, as follows:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  list: string; // Stores the list ID
+}
+
+ +
    +
  1. Create a new property for your web part, as indicated between the BEGIN: and END: comments below:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  list: string; // Stores the list ID
+
+  // BEGIN: Added
+  view: string; // Stores the view ID
+  contentType : string // stores the contenttype ID
+  // END: Added
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldContentTypePicker('contentType', {
+  label: 'Select a Content Type',
+  context: this.context,
+  selectedContentType: this.properties.contentType,
+  disabled: false,
+  orderBy: PropertyFieldContentTypeOrderBy.Name,
+  onPropertyChange: this.onPropertyPaneFieldChanged.bind(this),
+  properties: this.properties,
+  onGetErrorMessage: null,
+  deferredValidationTime: 0,
+  key: 'contentTypePickerFieldId'
+})
+
+ +
    +
  1. To fetch the contentTypes of a particular site, change the property pane configuration as follows:
  2. +
+
PropertyFieldContentTypePicker('contentType', {
+  label: 'Select a Content Type',
+  context: this.context,
+  selectedContentType: this.properties.contentType,
+  disabled: false,
+  webAbsoluteUrl:"https://****.sharepoint.com/sites/*****",
+  orderBy: PropertyFieldContentTypeOrderBy.Name,
+  onPropertyChange: this.onPropertyPaneFieldChanged.bind(this),
+  properties: this.properties,
+  onGetErrorMessage: null,
+  deferredValidationTime: 0,
+  key: 'contentTypePickerFieldId'
+})
+
+ +

ContentType picker for site

+
    +
  1. To fetch the contentTypes of selected list, change the property pane configuration as follows:
  2. +
+
PropertyFieldContentTypePicker('contentType', {
+  label: 'Select a Content Type',
+  context: this.context,
+  selectedContentType: this.properties.contentType,
+  listId: {list-guid} //"0da3b4b7-8ebd-4f15-87ee-afae5cacadad"
+  disabled: false,
+  orderBy: PropertyFieldContentTypeOrderBy.Name,
+  onPropertyChange: this.onPropertyPaneFieldChanged.bind(this),
+  properties: this.properties,
+  onGetErrorMessage: null,
+  deferredValidationTime: 0,
+  key: 'contentTypePickerFieldId'
+})
+
+ +

ContentType picker for selected list

+
    +
  1. If ListID specified in the propertiesc is not available in the selected site, the control will error out as follows
  2. +
+
PropertyFieldContentTypePicker('contentType', {
+  label: 'Select a Content Type',
+  context: this.context,
+  selectedContentType: this.properties.contentType,
+  listId: {list-guid} //"0da3b4b7-8ebd-4f15-87ee-afae5cacadad"
+  disabled: false,
+  orderBy: PropertyFieldContentTypeOrderBy.Name,
+  onPropertyChange: this.onPropertyPaneFieldChanged.bind(this),
+  properties: this.properties,
+  onGetErrorMessage: null,
+  deferredValidationTime: 0,
+  key: 'contentTypePickerFieldId'
+})
+
+ +

ContentType picker Error

+

Implementation

+

The PropertyFieldContentTypePicker control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
labelstringyesProperty field label displayed on top.
listIdstringnoThe ID of the list or library you wish to select a contentType from.
disabledbooleannoSpecify if the control needs to be disabled.
contextBaseComponentContextyesContext of the current web part.
selectedContentTypestringstring[]no
orderByPropertyFieldContentTypeOrderBynoSpecify the property on which you want to order the retrieve set of ContentTypes.
webAbsoluteUrlstringnoAbsolute Web Url of target site (user requires permissions)
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the date gets changed.
propertiesanyyesParent web part properties, this object is use to update the property value.
keystringyesAn unique key that indicates the identity of this control.
onGetErrorMessagefunctionnoThe method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it.
deferredValidationTimenumbernoControl will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200.
contentTypesToExcludestring[]noDefines contentTypes by which should be excluded from the contentType picker control. You can specify contentType titles or IDs
filterstringnoFilter contentTypes from OData query.
onContentTypesRetrieved(contentType: ISPContentType[]) => PromiseLike | ISPContentType[]noCallback that is called before the dropdown is populated.
+

Enum PropertyFieldContentTypePickerOrderBy

+ + + + + + + + + + + + + + + + + +
NameDescription
IdSort by contentType ID
TitleSort by contentType title
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldDateTimePicker/index.html b/controls/PropertyFieldDateTimePicker/index.html new file mode 100644 index 00000000..fe6bcee7 --- /dev/null +++ b/controls/PropertyFieldDateTimePicker/index.html @@ -0,0 +1,1376 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldDateTimePicker - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldDateTimePicker control

+

This control generates a Date and Time picker field that can be used in the property pane of your SharePoint Framework web parts.

+

The control can be configured to be date only or date and time.

+

Date only

+

Date only

+

Date picker

+

Date picker

+

Date and time

+

Date and time

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyFieldDateTimePicker, DateConvention, TimeConvention } from '@pnp/spfx-property-controls/lib/PropertyFieldDateTimePicker';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
import { IDateTimeFieldValue } from "@pnp/spfx-property-controls/lib/PropertyFieldDateTimePicker";
+
+export interface IPropertyControlsTestWebPartProps {
+  datetime: IDateTimeFieldValue;
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldDateTimePicker('datetime', {
+  label: 'Select the date and time',
+  initialDate: this.properties.datetime,
+  dateConvention: DateConvention.DateTime,
+  timeConvention: TimeConvention.Hours12,
+  onPropertyChange: this.onPropertyPaneFieldChanged,
+  properties: this.properties,
+  onGetErrorMessage: null,
+  deferredValidationTime: 0,
+  key: 'dateTimeFieldId',
+  showLabels: false
+})
+
+ +

Implementation

+

The PropertyFieldDateTimePicker control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
labelstringyesProperty field label displayed on top.
disabledbooleannoSpecify if the control needs to be disabled.
initialDataIDateTimeFieldValueyesInitial date and time value of the control.
formatDatafunctionnoDefines a formatDate function that can override the output value.
dateConventionDateConventionnoDefines the date convention to use. By default this is set to date and time.
timeConventionTimeConventionnoDefines the time convention to use. By default this is set to 24-hour clock convention.
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the date gets changed.
propertiesanyyesParent web part properties, this object is use to update the property value.
keystringyesAn unique key that indicates the identity of this control.
onGetErrorMessagefunctionnoThe method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it.
deferredValidationTimenumbernoControl will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200.
showLabelsbooleannoSpecify if labels in front of Date and Time parts should be rendered. By default this is set to true
+

Interface IDateTimeFieldValue

+ + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
valueDateyesJavaScript date value.
displayValuestringyesDate value formatted as a string.
+

Enum DateConvention

+ + + + + + + + + + + + + + + + + +
NameDescription
DateTimeShows the date and time picker
DateShows only the date picker
+

Enum TimeConvention

+ + + + + + + + + + + + + + + + + +
NameDescription
Hours12Specify the hours in 12-hours (AM / PM) time convention.
Hours24Specify the hours in 24-hours time convention.
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldDropdownWithCallout/index.html b/controls/PropertyFieldDropdownWithCallout/index.html new file mode 100644 index 00000000..8749bb88 --- /dev/null +++ b/controls/PropertyFieldDropdownWithCallout/index.html @@ -0,0 +1,1302 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldDropdownWithCallout - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldDropDownWithCallout control

+

This control generates a dropdown control with a callout.

+

PropertyFieldDropDownWithCallout rendering

+

Dropdown with callout

+

PropertyFieldDropDownWithCallout callout opened

+

Dropdown with callout opened

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/PropertyFieldHeader';
+import { PropertyFieldDropdownWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldDropdownWithCallout';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  dropdownInfoHeaderKey: string;
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldDropdownWithCallout('dropdownInfoHeaderKey', {
+  calloutTrigger: CalloutTriggers.Hover,
+  key: 'dropdownInfoHeaderFieldId',
+  label: 'Select the version',
+  options: [{
+    key: 'v1.0.0',
+    text: 'v1.0.0'
+  }, {
+    key: 'v1.0.1',
+    text: 'v1.0.1'
+  }, {
+    key: 'v1.0.2',
+    text: 'v1.0.2'
+  }, {
+    key: 'v2.0.0',
+    text: 'v2.0.0'
+  }],
+  selectedKey: this.properties.dropdownInfoHeaderKey,
+  calloutContent: dropdownInfoHeaderCallountContent
+})
+
+ +
    +
  1. Implement the calloutContent function as follows:
  2. +
+
private getDropdownInfoHeaderCalloutContent(): JSX.Element {
+  const selectedKey: string = this.properties.dropdownInfoHeaderKey;
+
+  if (selectedKey) {
+    return React.createElement('div', {}, `you have selected ${selectedKey}`);
+  } else {
+    return React.createElement('div', {}, `you haven't selected any version`);
+  }
+}
+
+ +

Implementation

+

The PropertyFieldDropDownWithCallout control uses the same implementation as the default PropertyPaneDropdown and has the following additional properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
calloutContentReact.ReactNodenoCallout content - any HTML
calloutWidthnumbernoCustom width for callout including borders. If value is 0, no width is applied.
calloutTriggerCalloutTriggersnoEvent to show the callout
gapSpacenumbernoThe gap between the callout and the target
+

Enum CalloutTriggers

+ + + + + + + + + + + + + + + + + +
NameDescription
ClickShows the callout when you hover over the icon
HoverShows the callout when you click on the icon
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldEnterpriseTermPicker/index.html b/controls/PropertyFieldEnterpriseTermPicker/index.html new file mode 100644 index 00000000..7679e19c --- /dev/null +++ b/controls/PropertyFieldEnterpriseTermPicker/index.html @@ -0,0 +1,1430 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldEnterpriseTermPicker - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + + + + +
+
+ + + + + +

PropertyFieldEnterpriseTermPicker control

+

This control generates a term picker that can be used in the property pane of your SharePoint Framework web parts.

+
+

Disclaimer: This control makes use of the @pnp/sp-taxonomy module to retrieve the managed metadata information. It leads to increase of the bundle/package size if the control is being used. Use the control for "enterprise" scenarios (large term stores with lots of objects) or if you need to request labels for terms.

+
+

Empty term picker

+

Empty term picker

+

Selecting terms

+

Selecting terms

+

Selected terms in the panel

+

Selected terms in the panel

+

Empty term picker

+

Selected terms in the input

+

Term picker: Auto Complete

+

Selected terms in the input

+

Limit the term set to a specific group or termset

+

Limit to a group or termset

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyFieldEnterpriseTermPicker } from '@pnp/spfx-property-controls/lib/PropertyFieldEnterpriseTermPicker';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
import { IPickerTerms } from "@pnp/spfx-property-controls/lib/PropertyFieldEnterpriseTermPicker";
+
+export interface IPropertyControlsTestWebPartProps {
+  terms: IPickerTerms;
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldEnterpriseTermPicker('terms', {
+  label: 'Select terms',
+  panelTitle: 'Select terms',
+  initialValues: this.properties.terms,
+  allowMultipleSelections: true,
+  excludeSystemGroup: false,
+  onPropertyChange: this.onPropertyPaneFieldChanged,
+  properties: this.properties,
+  context: this.context,
+  onGetErrorMessage: null,
+  deferredValidationTime: 0,
+  limitByGroupNameOrID: 'People',
+  limitByTermsetNameOrID: 'Location',
+  key: 'termSetsPickerFieldId',
+  includeLabels: true
+})
+
+ +

Implementation

+

The PropertyFieldEnterpriseTermPicker control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
labelstringyesProperty field label displayed on top.
panelTitlestringyesTermSet Picker Panel title.
disabledbooleannoSpecify if the control needs to be disabled.
contextBaseComponentContextyesContext of the current web part.
initialValuesIPickerTermsnoDefines the selected by default term sets.
allowMultipleSelectionsbooleannoDefines if the user can select only one or many term sets. Default value is false.
excludeSystemGroupbooleannoIndicator to define if the system Groups are exclude. Default is false.
limitByGroupNameOrIDstringnoLimit the term sets that can be used by the group name or ID.
limitByTermsetNameOrIDstringnoLimit the terms that can be picked by the Term Set name or ID.
hideTermStoreNamebooleannoSpecifies if you want to show or hide the term store name from the panel.
isTermSetSelectablebooleannoSpecify if the term set itself is selectable in the tree view.
disabledTermIdsstring[]noSpecify which terms should be disabled in the term set so that they cannot be selected.
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the date gets changed.
propertiesanyyesParent web part properties, this object is use to update the property value.
keystringyesAn unique key that indicates the identity of this control.
onGetErrorMessagefunctionnoThe method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it.
deferredValidationTimenumbernoControl will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200.
resolveDelaynumbernoThe delay time in ms before resolving suggestions, which is kicked off when input has been changed. e.g. if a second input change happens within the resolveDelay time, the timer will start over. Only until after the timer completes will onResolveSuggestions be called. Default is 500.
includeLabelsbooleannoSpecifies if term labels should be loaded from the store.
+

Interface IPickerTerms

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
keystringyesThe ID of the term
namestringyesThe name of the term
pathstringyesThe path of the term
termSetstringyesThe Id of the parent term set of the term
termSetNamestringnoThe Name of the parent term set of the term
+

Differences between PropertyFieldEnterpriseTermPicker and PropertyFieldTermPicker

+

PropertyFieldEnterpriseTermPicker is implemented to be used for "enterprise" Term Stores with large amount of groups, terms sets, and terms. It loads term sets and terms on demand - only at the moment when specified group or term set has been expanded in the Term Store Tree. +To implement on-demand loading PropertyFieldEnterpriseTermPicker uses @pnp/sp-taxonomy module from @pnp/pnpjs library. It increases the size of a bundle when the control is used. +Additionaly, PropertyFieldEnterpriseTermPicker allows to request labels for the terms in the picker.

+

PropertyFieldTermPicker loads all the groups and term sets from the term service during the initial request. This approach fits most of the scenarios with small and medium number of objects in a term store. Besides that, PropertyFieldTermPicker does not use any additional libraries or modules to retrieve data from the taxonomy service which makes it much more lightweight option in comparison with PropertyFieldEnterpriseTermPicker. See PropertyFieldTermPicker for implementation details.

+

We recommend to use PropertyFieldTermPicker control if you don't need on-demand loading or term labels.

+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldFilePicker/index.html b/controls/PropertyFieldFilePicker/index.html new file mode 100644 index 00000000..08a942c3 --- /dev/null +++ b/controls/PropertyFieldFilePicker/index.html @@ -0,0 +1,1509 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldFilePicker - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldFilePicker control

+

File picker control allows to browse and select a file from various places via the property pane. +Currently supported locations

+
    +
  • Recent files - tab allows to select a file from recently modified files based on the search results.
  • +
  • Web search - tab uses Bing cognitive services to look for a file. (Only images)
  • +
  • OneDrive - tab allows to select a file from the user's One Drive.
  • +
  • Site document libraries - tab allows to select a file from the existing site document libraries.
  • +
  • Upload - tab allows to upload a file from local drive.
  • +
  • From a link - tab allows to paste a link to the document.
  • +
+

Overview

+

The control supports all types of file, however it also allows to specify list of extensions for the files that are going to be looked displayed. Currently, only single file selection is supported. +File Picker overview

+

Different display types

+

File picker support 3 types of views : List, Compact list and Tiles. In case Tiles view is selected, the control shows the thumbnail of the file. +File Picker views

+ +

The control displays breadcrumb navigation that allows to easily switch folders or document libraries. +File Picker breadcrumb

+

Paged data load

+

File picker doesn't load all the files that exist in the folder. Instead, it allows to specify how many results are loaded in a batch, and executes paged requests when new data is required. +File Picker paged data load

+

PropertyFieldFilePicker example usage

+

PropertyFieldFilePicker example

+

How to use this control in your solutions

+
    +
  • Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  • +
  • Import the following modules to your webpart:
  • +
+
import { PropertyFieldFilePicker, IPropertyFieldFilePickerProps, IFilePickerResult } from "@pnp/spfx-property-controls/lib/PropertyFieldFilePicker";
+
+ +

Create a new property for your web part, for example:

+
export interface IPropertyControlsTestWebPartProps {
+  filePickerResult: IFilePickerResult;
+}
+
+ +
    +
  • Add the file picker property control to the groupFields of the web part property pane configuration:
  • +
+
 PropertyFieldFilePicker('filePicker', {
+    context: this.context,
+    filePickerResult: this.properties.filePickerResult,
+    onPropertyChange: this.onPropertyPaneFieldChanged.bind(this),
+    properties: this.properties,
+    onSave: (e: IFilePickerResult) => { console.log(e); this.properties.filePickerResult = e;  },
+    onChanged: (e: IFilePickerResult) => { console.log(e); this.properties.filePickerResult = e; },
+    key: "filePickerId",
+    buttonLabel: "File Picker",
+    label: "File Picker",                  
+})
+
+ +

Implementation

+

The PropertyFieldFilePicker control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
propertiesanyyesParent web part properties, this object is used to update the property value.
keystringyesA unique key that indicates the identity of this control.
contextBaseComponentContextyesCurrent webpart context.
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the data gets changed.
labelstringnoSpecifies the text describing the file picker.
buttonLabelstringnoSpecifies the label of the file picker button.
buttonIconstringnoIn case it is provided the file picker will be rendered as an action button.
onSave(filePickerResult: IFilePickerResult) => voidyesHandler when the file has been selected and picker has been closed.
onChange(filePickerResult: IFilePickerResult) => voidnoHandler when the file selection has been changed.
onCancel() => voidnoHandler when the file picker panel has been closed without selection of a file.
acceptsstring[]noArray of strings containing allowed files extensions. E.g. [".gif", ".jpg", ".jpeg", ".bmp", ".dib", ".tif", ".tiff", ".ico", ".png", ".jxr", ".svg"]
requiredbooleannoSets the label to inform that the value is required.
bingAPIKeystringnoUsed to execute WebSearch. If not provided SearchTab will not be available.
disabledbooleannoSpecifies if the picker button is disabled
itemsCountQueryLimitnumbernoNumber of items to obtain when executing REST queries. Default 100.
hideRecentTabbooleannoSpecifies if RecentTab should be hidden.
hideWebSearchTabbooleannoSpecifies if WebSearchTab should be hidden.
hideStockImagesbooleannoSpecifies if StockImagesTab should be hidden.
hideOrganisationalAssetTabbooleannoSpecifies if OrganisationalAssetTab should be hidden.
hideOneDriveTabbooleannoSpecifies if OneDriveTab should be hidden.
hideSiteFilesTabbooleannoSpecifies if SiteFilesTab should be hidden.
hideLocalUploadTabbooleannoSpecifies if LocalUploadTab should be hidden.
hideLinkUploadTabbooleannoSpecifies if LinkUploadTab should be hidden.
storeLastActiveTabbooleannoSpecifies if last active tab will be stored after the Upload panel has been closed. Note: the value of selected tab is stored in the queryString hash. Default true
defaultSelectedTabFilePickerTabTypenoSpecify a tab to be selected by default. If not specified, it will default to "RecentTab".
allowExternalLinksbooleannoSpecifies if external links should be allowed.
checkIfFileExistsbooleannoWhen using file links, this property allows the user to choose if the control should check if the link point to a file that exists or not.
includePageLibrariesbooleannoSpecifies if site pages should be displayed.
+

interface IFilePickerResult

+

The value returned from the selected file object.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueTypeDescription
fileNamestringFile name of the result with the extension.
fileNameWithoutExtensionstringFile name of the result without the extension.
fileAbsoluteUrlstringAbsolute URL of the file. Null in case of file upload.
downloadFileContent() => PromiseFunction allows to download file content. Returns File object.
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldGrid/index.html b/controls/PropertyFieldGrid/index.html new file mode 100644 index 00000000..c39ca131 --- /dev/null +++ b/controls/PropertyFieldGrid/index.html @@ -0,0 +1,1331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldGrid - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldGrid control

+

This control generates a Grid Control .

+

PropertyFieldGrid example usage

+

PropertyFieldGrid example

+

How to use this control in your solutions

+
    +
  • Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  • +
  • Import the following modules to your component:
  • +
+
import { PropertyFieldGrid, IItem} from '@pnp/spfx-property-controls/lib/PropertyFieldGrid';
+
+ +
- define the items to show in the grid:
+
+const gridItems:IItem[] = [
+  {
+    key: "1",
+    icon: React.createElement(DocumentBulletListRegular) ,
+    title: "File 1",
+    description: "This is the first document"
+  },
+  {
+    key: "2",
+    icon: React.createElement(DocumentBulletListRegular) ,
+    title: "File 2",
+    description: "This is the 2 document"
+  },
+  {
+    key: "3",
+    icon: React.createElement(DocumentBulletListRegular) ,
+    title: "File 3",
+    description: "This is the 3 document"
+  },
+  {
+    key: "4",
+    icon: React.createElement(DocumentBulletListRegular) ,
+    title: "File 4",
+    description: "This is the 4 document"
+  }
+ ];
+
+- Add the custom property Grid to the `groupFields` of the web part property pane configuration:
+
+ PropertyFieldGrid('gridItems', {
+          multiSelect: true,
+          items: gridItems,
+          label: 'Grid Items',
+          key: 'gridFieldId',
+          defaultSelectedItems: this.properties.gridItems,
+          maxHeight: 500,
+          className: 'gridClass',
+          styles:  {padding: 10},
+          isVisible: true,
+          maxHeight: 500,
+          column1Label: 'File',
+          column2Label: 'Location',
+          onSelected: (item: IItem[]) => {
+            console.log(item);
+          }
+          )
+
+ +

Implementation

+

The PropertyFieldGrid control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
keystringyesAn unique key that indicates the identity of this control.
stylesIButtonStylesnostyles object (root container)
classnamestringnocss ClassName (root container)
isVisiblebooleannoIndicate if grid is visible
labelstringnolabel of Grid
defaultSelectedItems(items:IItem[]) =>voidnodefined default Item selected
maxHeigthnumbernomax height of the container , default 400px
onSelecteditem[]noselected Items when are selected
itemsIItem[]yesItems to show
multiSelectbooleannoEnable multiSelect , default single
column1LabelstringnoLabel for header of first grid column
column2LabelstringnoLabel for header of second grid column
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldGuid/index.html b/controls/PropertyFieldGuid/index.html new file mode 100644 index 00000000..bd75732e --- /dev/null +++ b/controls/PropertyFieldGuid/index.html @@ -0,0 +1,1262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldGuidPicker - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldGuid control

+

This control generates an input field for GUID. Incorrect GUID entered will result into an invalid input.

+

PropertyFieldGuid example usage

+

PropertyFieldGuid example

+

How to use this control in your solutions

+
    +
  • Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  • +
  • Import the following modules to your component:
  • +
+
import { PropertyFieldGuid } from '@pnp/spfx-property-controls/lib/PropertyFieldGuid';
+
+ +
    +
  • Create a new property for your web part, for example:
  • +
+
export interface IPropertyControlsTestWebPartProps {
+  guid: string;
+}
+
+ +
    +
  • Add the custom property control to the groupFields of the web part property pane configuration:
  • +
+
PropertyFieldGuid('guid', {
+  key: 'guid',
+  label: "GUID",
+  value: this.properties.guid
+})
+
+ +
    +
  • You can also implement the property your own error message with the errorMessage property with the following syntax:
  • +
+
PropertyFieldGuid('guid', {
+  key: 'guid',
+  label: "GUID",
+  value: this.properties.guid,
+  errorMessage: "Please enter a correct GUID"
+})
+
+ +

Implementation

+

The PropertyFieldGuid control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
keystringyesAn unique key that indicates the identity of this control.
labelstringyesProperty field label displayed on top.
valuestringnoValue to be displayed in the Guid field.
errorMessagestringnoIf set, this will be displayed as an error message.
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldIconPicker/index.html b/controls/PropertyFieldIconPicker/index.html new file mode 100644 index 00000000..60255f48 --- /dev/null +++ b/controls/PropertyFieldIconPicker/index.html @@ -0,0 +1,1329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldIconPicker - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

IconPicker control

+

Property pane icon picker control that allows to search and select an icon from office-ui-fabric-react icons.

+

Overview

+

The control allows selecting an icon from the list of icons available in the office-ui-fabric-react library. Icon list is a static copy of available icons. Currently, only one icon selection is supported. +Icon Picker overview

+

Displayed in the panel

+

Icon picker always opens a new panel where you can pick an icon. The panel displays all the icons and maintains readability. Picker does not displays selected icon outside the panel. +Icon Picker panel

+

How to use this control

+
    +
  • Check that you installed the @pnp/spfx-property-controls dependency. Check out the getting started page for more information about installing the dependency.
  • +
  • Import the following module to your component:
  • +
+
import { PropertyFieldIconPicker } from '@pnp/spfx-property-controls/lib/PropertyFieldIconPicker';
+
+ +
    +
  • Use the PropertyFieldIconPicker control in your code as follows:
  • +
+
PropertyFieldIconPicker('iconPicker', {
+                  currentIcon: this.properties.iconPicker,
+                  key: "iconPickerId",
+                  onSave: (icon: string) => { console.log(icon); this.properties.iconPicker = icon; },
+                  onChanged:(icon: string) => { console.log(icon);  },
+                  buttonLabel: "Icon",
+                  renderOption: "panel",
+                  properties: this.properties,
+                  onPropertyChange: this.onPropertyPaneFieldChanged.bind(this),
+                  label: "Icon Picker"              
+                }),
+
+ +

Implementation

+

The PropertyFieldIconPicker component can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
buttonLabelstringnoSpecifies the label of the icon picker button.
onSave(iconName: string) => voidyesHandler when the icon has been selected and picker has been closed.
onChanged(iconName: string) => voidnoHandler when the icon selection has been changed.
disabledbooleannoSpecifies if the picker button is disabled
buttonClassNamebooleannoIf provided, additional class name will be added to the picker button
panelClassNamebooleannoIf provided, additional class name will be added to the picker panel
currentIconstringnoSpecifies default selected icon
renderOptiondialog, panelnoSpecifies how to render list of Icons, Values : 'Panel' or 'Dialog' default value 'Panel'
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the teams get changed.
propertiesanyyesParent web part properties, this object is used to update the property value.
keystringyesAn unique key that indicates the identity of this control.
labelstringnoA label to describe the icon picker control.
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldLabelWithCallout/index.html b/controls/PropertyFieldLabelWithCallout/index.html new file mode 100644 index 00000000..2e6bd69a --- /dev/null +++ b/controls/PropertyFieldLabelWithCallout/index.html @@ -0,0 +1,1267 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldLabelWithCallout - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldLabelWithCallout control

+

This control generates a label control with a callout.

+

PropertyFieldLabelWithCallout rendering

+

Button field with callout

+

PropertyFieldLabelWithCallout callout opened

+

Button field with callout opened

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/Callout';
+import { PropertyFieldLabelWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldLabelWithCallout';
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldLabelWithCallout('fakeProp', {
+  calloutTrigger: CalloutTriggers.Click,
+  key: 'LabelWithCalloutFieldId',
+  calloutContent: 'Use dropdowns below to select list and list\'s field to work with',
+  calloutWidth: 200,
+  text: 'Select List and Field'
+})
+
+ +

Implementation

+

The PropertyFieldLabelWithCallout control uses the same implementation as the default PropertyPaneLabel and has the following additional properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
calloutContentReact.ReactNodenoCallout content - any HTML
calloutWidthnumbernoCustom width for callout including borders. If value is 0, no width is applied.
calloutTriggerCalloutTriggersnoEvent to show the callout
gapSpacenumbernoThe gap between the callout and the target
+

Enum CalloutTriggers

+ + + + + + + + + + + + + + + + + +
NameDescription
ClickShows the callout when you hover over the icon
HoverShows the callout when you click on the icon
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldLinkWithCallout/index.html b/controls/PropertyFieldLinkWithCallout/index.html new file mode 100644 index 00000000..f7d7d464 --- /dev/null +++ b/controls/PropertyFieldLinkWithCallout/index.html @@ -0,0 +1,1269 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldLinkWithCallout - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldLinkWithCallout control

+

This control generates a link control with a callout.

+

PropertyFieldLinkWithCallout rendering

+

Button field with callout

+

PropertyFieldLinkWithCallout callout opened

+

Button field with callout opened

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/Callout';
+import { PropertyFieldLinkWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldLinkWithCallout';
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldLinkWithCallout('fakeProp', {
+  calloutTrigger: CalloutTriggers.Click,
+  key: 'linkWithCalloutFieldId',
+  calloutContent: React.createElement('p', {}, 'Click the link to open a new page with Application Terms & Conditions'),
+  calloutWidth: 200,
+  text: 'Terms & Conditions',
+  href: 'https://github.com/pnp/sp-dev-fx-property-controls',
+  target: '_blank'
+})
+
+ +

Implementation

+

The PropertyFieldLinkWithCallout control uses the same implementation as the default PropertyPaneLink and has the following additional properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
calloutContentReact.ReactNodenoCallout content - any HTML
calloutWidthnumbernoCustom width for callout including borders. If value is 0, no width is applied.
calloutTriggerCalloutTriggersnoEvent to show the callout
gapSpacenumbernoThe gap between the callout and the target
+

Enum CalloutTriggers

+ + + + + + + + + + + + + + + + + +
NameDescription
ClickShows the callout when you hover over the icon
HoverShows the callout when you click on the icon
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldListPicker/index.html b/controls/PropertyFieldListPicker/index.html new file mode 100644 index 00000000..507a050b --- /dev/null +++ b/controls/PropertyFieldListPicker/index.html @@ -0,0 +1,1420 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldListPicker - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldListPicker control

+

This control generates a list picker field that can be used in the property pane of your SharePoint Framework web parts.

+

The control can be configured as a single or multi-selection list picker:

+

Single list picker

+

Single list picker

+

Multi list picker

+

Multi list picker

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyFieldListPicker, PropertyFieldListPickerOrderBy } from '@pnp/spfx-property-controls/lib/PropertyFieldListPicker';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  lists: string | string[]; // Stores the list ID(s)
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldListPicker('lists', {
+  label: 'Select a list',
+  selectedList: this.properties.lists,
+  includeHidden: false,
+  orderBy: PropertyFieldListPickerOrderBy.Title,
+  disabled: false,
+  onPropertyChange: this.onPropertyPaneFieldChanged.bind(this),
+  properties: this.properties,
+  context: this.context,
+  onGetErrorMessage: null,
+  deferredValidationTime: 0,
+  key: 'listPickerFieldId'
+})
+
+ +

Implementation

+

The PropertyFieldListPicker control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
labelstringyesProperty field label displayed on top.
disabledbooleannoSpecify if the control needs to be disabled.
contextBaseComponentContextyesContext of the current web part.
selectedListstring | string[] | IPropertyFieldList | IPropertyFieldList[]noInitial selected list set of the control.
baseTemplatenumbernoBaseTemplate ID of the lists or libraries you want to return.
includeHiddenbooleannoSpecify if you want to include hidden lists in the list picker. By default this is set to true.
orderByPropertyFieldListPickerOrderBynoSpecify the property on which you want to order the retrieve set of lists.
multiSelectbooleannoSpecify if you want to have a single or multi-list picker. By default this is set to false (single list picker).
showSelectAllbooleannoSpecify if you want the Select All checkbox. By default this is set to false (mult-list picker only).
selectAllInListbooleannoSpecify where to show the Select All checkbox. When false (default), checkbox is shown before the label, when true it is shown with the lists (mult-list picker only).
selectAllInListLabelstringnoThe label to use for the in list select all checkbox (mult-list picker only).
webAbsoluteUrlstringnoAbsolute Web Url of target site (user requires permissions)
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the date gets changed.
propertiesanyyesParent web part properties, this object is use to update the property value.
keystringyesAn unique key that indicates the identity of this control.
onGetErrorMessagefunctionnoThe method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it.
deferredValidationTimenumbernoControl will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200.
listsToExcludestring[]noDefines list titles which should be excluded from the list picker control (list title or ID).
filterstringnoFilter list from OData query (takes precedence over Hidden and BaseTemplate Filters).
onListsRetrieved(lists: ISPList[]) => PromiseLike | ISPList[]noCallback that is called before the dropdown is populated.
includeListTitleAndUrlbooleannoSpecifies if the picker returns list id, title and url as an object instead on id.
contentTypeIdstringnoSpecifies a content type ID , or a portion of one. If specified, all the lists presented in the control will have at least one content type beginning with the specified content type id.
+

Interface IPropertyFieldList

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
idstringyesThe ID of the list
titlestringnoList's title
urlstringnoList's server relative url
+

Enum PropertyFieldListPickerOrderBy

+ + + + + + + + + + + + + + + + + +
NameDescription
IdSort by list / library ID
TitleSort by list / library title
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldMessage/index.html b/controls/PropertyFieldMessage/index.html new file mode 100644 index 00000000..2a83ef5c --- /dev/null +++ b/controls/PropertyFieldMessage/index.html @@ -0,0 +1,1257 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldMessage - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldMessage control

+

This control generates a Message Bar that will show messages .

+

PropertyFieldMessage example usage

+

PropertyFieldMessage example

+

How to use this control in your solutions

+
    +
  • Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  • +
  • Import the following modules to your component:
  • +
+
import { PropertyFieldMessage} from '@pnp/spfx-property-controls/lib/PropertyFieldMessage';
+import { MessageBarType } from 'office-ui-fabric-react/lib/MessageBar';
+
+ +
    +
  • Add the custom property control to the groupFields of the web part property pane configuration:
  • +
+
 PropertyFieldMessage("", {
+      key: "MessageKey",
+      text: "Something went wrong... try later.",
+      messageType: MessageBarType.error,
+      isVisible: true
+  })
+
+ +

Implementation

+

The PropertyFieldMessage control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
keystringyesAn unique key that indicates the identity of this control.
textstringyesMessage Text
messageTypeMessageBarTypeyestype of message
multilinebooleannoIndicate if message is multiline
classnamestringnocss ClassName
isVisiblebooleanyesIndicate if message is visible
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldMonacoEditor/index.html b/controls/PropertyFieldMonacoEditor/index.html new file mode 100644 index 00000000..e45aa88a --- /dev/null +++ b/controls/PropertyFieldMonacoEditor/index.html @@ -0,0 +1,1298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldMonacoEditor - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldMonacoEditor control

+

This control implement Microsoft Monaco Editor.

+

PropertyFieldMonacoEditor example usage

+

PropertyFieldMonacoEditor example +PropertyFieldMonacoEditor example +PropertyFieldMonacoEditor example

+

How to use this control in your solutions

+
    +
  • Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  • +
  • Import the following modules to your component:
  • +
+
import { PropertyFieldMonacoEditor } from '@pnp/spfx-property-controls/lib/PropertyFieldMonacoEditor';
+
+ +
    +
  • Create a new property for your web part, for example:
  • +
+
export interface IPropertyControlsTestWebPartProps {
+  monacoEditorValue: string;
+}
+
+ +
    +
  • Add the custom property control to the groupFields of the web part property pane configuration:
  • +
+
PropertyFieldMonacoEditor('monacoEditor', {
+      key: 'monacoEditor',
+      value: this.properties.monacoEditorValue,
+      showMiniMap: true,
+      onChange: this.monacoChange ,
+      language:"json",
+      showLineNumbers:true,
+    }),
+
+ +

Implementation

+

The PropertyFieldMonacoEditor control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
keystringyesAn unique key that indicates the identity of this control.
valuenumberyesValue field.
themestringno'vs-dark'
readOnlybooleannoeditor is read only
showLineNumbersbooleannoShow line number - default no
showMiniMapbooleannoShow Mini Map - default yes
onChange(newValue:string) => void;noIf set, this method is used to get the the input value when it changed
languagestringyeslanguage, please see https://microsoft.github.io/monaco-editor/index.html for all supported languages
jsonDiagnosticsOptionsmonaco.languages.json.DiagnosticsOptionsnosee https://microsoft.github.io/monaco-editor/api/interfaces/monaco.languages.json.DiagnosticsOptions.html
jscriptDiagnosticsOptionsmonaco.languages.typescript.DiagnosticsOptionsnosee https://microsoft.github.io/monaco-editor/api/interfaces/monaco.languages.typescript.DiagnosticsOptions.html
panelWidthnumbernoPanel Width default 800px.
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldMultiSelect/index.html b/controls/PropertyFieldMultiSelect/index.html new file mode 100644 index 00000000..e0a67c57 --- /dev/null +++ b/controls/PropertyFieldMultiSelect/index.html @@ -0,0 +1,1250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldMultiSelect - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldMultiSelect control

+

This control generates a dropdown with the possibility of selecting multiple values.

+

Multi-select field rendering

+

Multi-select field

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyFieldMultiSelect } from '@pnp/spfx-property-controls/lib/PropertyFieldMultiSelect';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  multiSelect: string[];
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldMultiSelect('multiSelect', {
+  key: 'multiSelect',
+  label: "Multi select field",
+  options: [
+    {
+      key: "EN",
+      text: "EN"
+    },
+    {
+      key: "FR",
+      text: "FR"
+    },
+    {
+      key: "NL",
+      text: "NL"
+    }
+  ],
+  selectedKeys: this.properties.multiSelect
+})
+
+ +

Implementation

+

The PropertyFieldMultiSelect control uses the same implementation as the default PropertyPaneDropdown control and has the following additional properties:

+ + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
selectedKeysstring[] OR number[]noSpecifies the selected keys.
+
+

Important: Do not make use of the selectedKey property. This property is inherited from the PropertyPaneDropdown control.

+
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldNumber/index.html b/controls/PropertyFieldNumber/index.html new file mode 100644 index 00000000..eec3c6ee --- /dev/null +++ b/controls/PropertyFieldNumber/index.html @@ -0,0 +1,1329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldNumber - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldNumber control

+

This control generates an input field for numbers. Text is not allowed as this will result into an invalid input.

+

PropertyFieldNumber example usage

+

PropertyFieldNumber example

+

How to use this control in your solutions

+
    +
  • Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  • +
  • Import the following modules to your component:
  • +
+
import { PropertyFieldNumber } from '@pnp/spfx-property-controls/lib/PropertyFieldNumber';
+
+ +
    +
  • Create a new property for your web part, for example:
  • +
+
export interface IPropertyControlsTestWebPartProps {
+  numberValue: number;
+}
+
+ +
    +
  • Add the custom property control to the groupFields of the web part property pane configuration:
  • +
+
PropertyFieldNumber("numberValue", {
+  key: "numberValue",
+  label: "Number value only",
+  description: "Number field description",
+  value: this.properties.numberValue,
+  maxValue: 10,
+  minValue: 1,
+  disabled: false
+})
+
+ +
    +
  • You can also implement your own validation with the onGetErrorMessage property as follows:
  • +
+
PropertyFieldNumber("numberValue", {
+  key: "numberValue",
+  label: "Number value only",
+  description: "Number field description",
+  value: this.properties.numberValue,
+  maxValue: 10,
+  minValue: 1,
+  disabled: false,
+  onGetErrorMessage: (value: number) => {
+    if (value % 2 !== 0) {
+      return 'Only even numbers are allowed';
+    }
+    return '';
+  }
+})
+
+ +

Implementation

+

The PropertyFieldNumber control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
keystringyesAn unique key that indicates the identity of this control.
labelstringyesProperty field label displayed on top.
descriptionstringnoThe number field input description.
placeholderstringnoPlaceholder text to be displayed in the number field.
valuenumbernoValue to be displayed in the number field.
maxValuenumbernoMaximum number that can be inserted.
minValuenumbernoMinimum number that can be inserted.
ariaLabelstringnoThe aria label for the number field.
disabledbooleannoSpecify if the control needs to be disabled.
errorMessagestringnoIf set, this will be displayed as an error message.
onGetErrorMessage(value: number) => stringnoIf set, this method is used to get the validation error message and determine whether the input value is valid or not.
deferredValidationTimenumbernoNumber field will start to validate after users stop typing for deferredValidationTime milliseconds.
precisionnumbernoPrecision to round the value to. If the precision is not defined the value is not rounded.
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldOrder/index.html b/controls/PropertyFieldOrder/index.html new file mode 100644 index 00000000..253bbe2d --- /dev/null +++ b/controls/PropertyFieldOrder/index.html @@ -0,0 +1,1418 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldOrder - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldOrder control

+

This control generates a list that can be easily reordered using drag and drop and/or arrow buttons.

+

PropertyFieldOrder

+

PropertyfieldOrder reordering

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyFieldOrder } from '@pnp/spfx-property-controls/lib/PropertyFieldOrder';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  orderedItems: Array<any>;
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldOrder("orderedItems", {
+  key: "orderedItems",
+  label: "Ordered Items",
+  items: this.properties.orderedItems,
+  properties: this.properties,
+  onPropertyChange: this.onPropertyPaneFieldChanged
+})
+
+ +

Item Rendering

+

By default, items will render using the toString() method for each element in your items array. This works well for simple arrays of strings, numbers, etc.

+

Object Property

+

When working with an array of objects, you can specify the name of the property to use as the display value by specifying the textProperty property.

+

For instance, for an array of objects like the following:

+
[
+  {"text": "Cat", "iconName": "Cat"},
+  {"text": "Pig", "iconName": "Savings"},
+  {"text": "Human", "iconName": "Running"},
+  {"text": "Robot", "iconName": "Robot"},
+  {"text": "Dog", "iconName": "FangBody"}
+]
+
+ +

To prevent every item from showing as [object Object], you can set the textProperty property to the name of the property you would like to use for display:

+
PropertyFieldOrder("orderedItems", {
+  key: "orderedItems",
+  label: "Ordered Items",
+  items: this.properties.orderedItems,
+  textProperty: "text",
+  properties: this.properties,
+  onPropertyChange: this.onPropertyPaneFieldChanged
+})
+
+ +

PropertyFieldOrder display fixed by using the textProperty

+

Custom Rendering

+

You can fully customize how items are rendered by providing the onRenderItem callback function and returning whatever JSX.Element you want.

+

For example, you can define your function in a tsx file like this:

+
import * as React from 'react';
+
+export const orderedItem = (item:any, index:number): JSX.Element => {
+    return (
+        <span>
+            <i className={"ms-Icon ms-Icon--" + item.iconName} style={{paddingRight:'4px'}}/>
+            {item.text}
+        </span>
+    );
+};
+
+ +

You can then import this function into your webpart using the relative path to this file similar to the following:

+
import { orderedItem } from './components/OrderedItem';
+
+ +

Then you can simply reference it in your PropertyFieldOrder:

+
PropertyFieldOrder("orderedItems", {
+  key: "orderedItems",
+  label: "Ordered Items",
+  items: this.properties.orderedItems,
+  onRenderItem: orderedItem,
+  properties: this.properties,
+  onPropertyChange: this.onPropertyPaneFieldChanged
+})
+
+ +

Customized item display using the onRenderItem callback property

+

Implementation

+

The PropertyFieldOrder control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
labelstringyesProperty field label displayed on top.
itemsArrayyesAn array of values to reorder.
textPropertystringnoThe property to use for display, when undefined, the toString() method of the object is used (ignored when the onRenderItem function is specified)
maxHeightnumbernoThe maximum height for the items in px (when not set, the control expands as necessary)
disabledbooleannoSpecify if the control needs to be disabled.
disableDragAndDropbooleannoWhen true, drag and drop reordering is disabled (defaults to false)
removeArrowsbooleannoWhen true, arrow buttons are not displayed (defaults to false)
moveUpIconNamestringnoThe name of the UI Fabric Font Icon to use for the move up button (defaults to ChevronUpSmall)
moveDownIconNamestringnoThe name of the UI Fabric Font Icon to use for the move down button (defaults to ChevronDownSmall)
onRenderItemfunctionnoOptional callback to provide custom rendering of the item (default is simple text based on either item or the property identified in the textProperty)
propertiesanyyesParent web part properties, this object is use to update the property value.
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the date gets changed.
keystringyesAn unique key that indicates the identity of this control.
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldPassword/index.html b/controls/PropertyFieldPassword/index.html new file mode 100644 index 00000000..e44356b8 --- /dev/null +++ b/controls/PropertyFieldPassword/index.html @@ -0,0 +1,1254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldPassword - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldPassword control

+

This control generates an input field for password. Text is not visible .

+

PropertyFieldPassword example usage

+

PropertyFieldPassword example

+

How to use this control in your solutions

+
    +
  • Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  • +
  • Import the following modules to your component:
  • +
+
import { PropertyFieldPassword } from '@pnp/spfx-property-controls/lib/PropertyFieldPassword';
+
+ +
    +
  • Create a new property for your web part, for example:
  • +
+
export interface IPropertyControlsTestWebPartProps {
+  password: string;
+}
+
+ +
    +
  • Add the custom property control to the groupFields of the web part property pane configuration:
  • +
+
PropertyFieldPassword("password", {
+  key: "password",
+  label: "password",
+  value: this.properties.password,
+  onChanged :  (value: string) => {
+     console.log(value);
+  }
+})
+
+ +

Implementation

+

The PropertyFieldPassword control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
keystringyesAn unique key that indicates the identity of this control.
labelstringnoProperty field label displayed on top.
valuestringnoValue to be displayed in the number field.
onChanged(value: string) => voidnoIf set, this method is used to get the the input value
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldPeoplePicker/index.html b/controls/PropertyFieldPeoplePicker/index.html new file mode 100644 index 00000000..189cd2cb --- /dev/null +++ b/controls/PropertyFieldPeoplePicker/index.html @@ -0,0 +1,1403 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldPeoplePicker - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldPeoplePicker control

+

This control generates a people / group picker that can be used in the property pane of your SharePoint Framework web parts.

+

Searching for persons

+

Person picker

+

Searching for groups

+

Group picker

+

Selected people / groups

+

Group picker

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyFieldPeoplePicker, PrincipalType } from '@pnp/spfx-property-controls/lib/PropertyFieldPeoplePicker';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
import { IPropertyFieldGroupOrPerson } from "@pnp/spfx-property-controls/lib/PropertyFieldPeoplePicker";
+
+export interface IPropertyControlsTestWebPartProps {
+  people: IPropertyFieldGroupOrPerson[];
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldPeoplePicker('people', {
+  label: 'PropertyFieldPeoplePicker',
+  initialData: this.properties.people,
+  allowDuplicate: false,
+  principalType: [PrincipalType.Users, PrincipalType.SharePoint, PrincipalType.Security],
+  onPropertyChange: this.onPropertyPaneFieldChanged,
+  context: this.context,
+  properties: this.properties,
+  onGetErrorMessage: null,
+  deferredValidationTime: 0,
+  key: 'peopleFieldId'
+})
+
+ +

Implementation

+

The PropertyFieldPeoplePicker control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
labelstringyesProperty field label displayed on top.
disabledbooleannoSpecify if the control needs to be disabled.
contextBaseComponentContextyesContext of the current web part.
initialDataIPropertyFieldGroupOrPerson[]noInitial data to load in the people picker (optional).
allowDuplicatebooleannoDefines if the People Picker allows to select duplicated users (optional).
multiSelectbooleannoDefine if you want to allow multi user / group selection. (optional, true by default).
principalTypePrincipalType[]noDefine which type of data you want to retrieve: User, SharePoint groups, Security groups. Multiple are possible.
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the date gets changed.
propertiesanyyesParent web part properties, this object is use to update the property value.
targetSiteUrlstringnoSpecify the URL of the target site from which you want to retrieve the users/groups.
keystringyesAn unique key that indicates the identity of this control.
onGetErrorMessagefunctionnoThe method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it.
deferredValidationTimenumbernoControl will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200.
+

Interface IPropertyFieldGroupOrPerson

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
idstringnoThe ID of the group
descriptionstringnoGroup description
fullNamestringyesUsers' full name or group display name
loginstringyesUsers' login or group provider name (when security group) or group account name (when SharePoint group).
emailstringnoUsers' email
jobTitlestringnoUsers' job title
initialsstringnoUsers' initials
imageUrlstringnoUsers' profile image URL
+

Enum PrincipalType

+

The PrincipalType enum can be used to specify the types of information you want to query: User, Security groups, and/or SharePoint groups.

+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
UsersTo specify if you want to retrieve users.
SecurityTo specify if you want to retrieve security groups.
SharePointTo specify if you want to retrieve SharePoint groups.
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldRoleDefinitionPicker/index.html b/controls/PropertyFieldRoleDefinitionPicker/index.html new file mode 100644 index 00000000..0bfeafe2 --- /dev/null +++ b/controls/PropertyFieldRoleDefinitionPicker/index.html @@ -0,0 +1,1413 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldRoleDefinitionPicker - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldRoleDefinitionPicker control

+

Role Definition picker control allows to select role definitions of a specific web via the property pane.

+

Overview

+

The control allows a you to pick role definitions from a dropdown control. It supports role definition selection using the dropdown control of Office fabric UI with multi-select enabled. +Role Definition Picker overview

+

PropertyFieldRoleDefinitionPicker example usage

+

PropertyFieldFilePicker example

+

How to use this control in your solutions

+
    +
  • Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  • +
  • Import the following modules to your webpart:
  • +
+
import { IBasePermissions, IPropertyFieldRoleDefinitionPickerProps , PropertyFieldRoleDefinitionPicker, RoleTypeKind , IRoleDefinitionInformation  } from "@pnp/spfx-property-controls/lib/PropertyFieldRoleDefinitionPicker";
+
+ +

Create a new property for your web part, for example:

+
export interface IPropertyControlsTestWebPartProps {
+  roleDefinitions: IRoleDefinitionInformation[];
+}
+
+ +
    +
  • Add the role definition picker property control to the groupFields of the web part property pane configuration:
  • +
+
 PropertyFieldRoleDefinitionPicker('roleDefinitions', {
+    context: this.context,
+    label: "Role Definitions",
+    roleDefinitions: this.properties.roleDefinitions,
+    onPropertyChange: this.onPropertyPaneFieldChanged,
+    properties: this.properties,
+    key: "roleDefinitionPickerId",
+    selectedRoleDefinition:["Full Control"],
+    roleDefinitionsToExclude: ["System.LimitedView"],
+})
+
+ +

Implementation

+

The PropertyFieldRoleDefinitionPicker control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
propertiesanyyesParent web part properties, this object is used to update the property value.
keystringyesA unique key that indicates the identity of this control.
contextBaseComponentContextyesCurrent webpart context.
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the data gets changed.
labelstringnoSpecifies the text describing the role definition picker.
webAbsoluteUrlstringnoAbsolute Web Url of target site (user requires permissions)
requiredbooleannoSets the label to inform that the value is required.
disabledbooleannoSpecifies if the picker button is disabled
roleDefinitionsIRoleDefinitionInformation[]yesThe value of selected role definitions
multiSelectbooleannoSpecify if you want to have a single or multi-select role definition picker. By default this is set to true (multi-select role picker).
selectedRoleDefinitionstring[]noPre-selected role definitions for the picker control
roleDefinitionsToExcludestring[]noRole definitions to be excluded from the picker control
onRoleDefinitionsRetrieved(roleDefinitions: IRoleDefinitionInformation[]) => PromiseLike<IRoleDefinitionInformation[]> | IRoleDefinitionInformation[]noCallback that is called before the dropdown is populated.
onGetErrorMessagefunctionnoThe method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it.
+

interface IRoleDefinitionInformation

+

The value returned from the selected role definition.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueTypeDescription
IdnumberId of the role definition.
NamestringName of the selected role definition.
DescriptionstringDescription of selected role definition.
HiddenbooleanWhether selected role definition is hidden or not.
OrdernumberOrder of selected role definition.
RoleTypeKindRoleTypeKindRoleTypeKind of selected role definition.
BasePermissionsIBasePermissionsBasePermissions of selected role definition.
+

interface IBasePermissions

+ + + + + + + + + + + + + + + + + +
ValueType
Lownumber
Highnumber
+

type RoleTypeKind

+ + + + + + + + + + + + + +
ValueType
RoleTypeKind0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldSearch/index.html b/controls/PropertyFieldSearch/index.html new file mode 100644 index 00000000..a91ef1db --- /dev/null +++ b/controls/PropertyFieldSearch/index.html @@ -0,0 +1,1290 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldSearch - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldSearch control

+

This control generates an input field for Search.

+

PropertyFieldSearch example usage

+

PropertyFieldSearch example

+

PropertyFieldSearch example

+

How to use this control in your solutions

+
    +
  • Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  • +
  • Import the following modules to your component:
  • +
+
import { PropertyFieldSearch } from '@pnp/spfx-property-controls/lib/PropertyFieldSearch';
+
+ +
    +
  • Create a new property for your web part, for example:
  • +
+
export interface IPropertyControlsTestWebPartProps {
+  searchValue: string;
+}
+
+ +
    +
  • Add the custom property control to the groupFields of the web part property pane configuration:
  • +
+
PropertyFieldSearch("searchValue", {
+      key: "search",
+      placeholder: 'Search libraries',
+      value: this.properties.searchValue,
+      onSearch: this._onSearch,
+      styles: { root: { margin: 10 } }
+    }),
+
+ +

Implementation

+

The PropertyFieldSearch control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
keystringyesAn unique key that indicates the identity of this control.
PlaceHolderstringnoProperty field PlaceHolder displayed on input.
valuenumbernoValue to be displayed in field.
underlinedbooleannoIndicate if control is render as underline
stylesISearchBoxStylesnoStyles to apply
classNamestringnoClass Name
onSearch(value: string) => voidnoIf set, this method is used to get the the input value when user press enter key
onChange(value: string) => voidnoIf set, this method is used to get the the input value when it changed
onClear(ev: any) => voidnoIf set, this method is fired when user click the clear (cross) on the input field
onEscape(ev: any) => voidnoIf set, this method is fired when user press the escape key
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldSitePicker/index.html b/controls/PropertyFieldSitePicker/index.html new file mode 100644 index 00000000..238038d0 --- /dev/null +++ b/controls/PropertyFieldSitePicker/index.html @@ -0,0 +1,1351 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldSitePicker - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldSitePicker control

+

This control generates a site picker that can be used in the property pane of your SharePoint Framework web parts.

+

Searching for sites

+

Site picker

+

Selected sites

+

Site picker

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyFieldSitePicker } from '@pnp/spfx-property-controls/lib/PropertyFieldSitePicker';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
import { IPropertyFieldSite } from "@pnp/spfx-property-controls/lib/PropertyFieldSitePicker";
+
+export interface IPropertyControlsTestWebPartProps {
+  sites: IPropertyFieldSite[];
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldSitePicker('sites', {
+  label: 'Select sites',
+  initialSites: this.properties.sites,
+  context: this.context,
+  deferredValidationTime: 500,
+  multiSelect: true,
+  onPropertyChange: this.onPropertyPaneFieldChanged,
+  properties: this.properties,
+  key: 'sitesFieldId'
+})
+
+ +

Implementation

+

The PropertyFieldSitePicker control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
labelstringyesProperty field label displayed on top.
disabledbooleannoSpecify if the control needs to be disabled.
contextBaseComponentContextyesContext of the current web part.
initialSitesIPropertyFieldSite[]noInitial sites to load in the site picker (optional).
multiSelectbooleannoDefine if you want to allow multiple sites selection. (optional, false by default).
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the sites get changed.
propertiesanyyesParent web part properties, this object is use to update the property value.
keystringyesAn unique key that indicates the identity of this control.
onGetErrorMessagefunctionnoThe method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it.
deferredValidationTimenumbernoControl will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200.
trimDuplicatesbooleannoSpecifies if the duplicates should be trimmed. false by default. Applicable if mode is set to site or web.
additionalQuerystringnoIf provided will be added to the search query as AND part. Applicable if mode is set to site or web.
+

Interface IPropertyFieldSite

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
idstringnoThe ID of the site
titlestringnoSite's display name
urlstringnoURL to the site
webIdstringnoThe ID of the web
hubSiteIdstringnoID of the hub site.
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldSliderWithCallout/index.html b/controls/PropertyFieldSliderWithCallout/index.html new file mode 100644 index 00000000..2c23ddfe --- /dev/null +++ b/controls/PropertyFieldSliderWithCallout/index.html @@ -0,0 +1,1287 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldSliderWithCallout - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldSliderWithCallout control

+

This control generates a slider control with a callout.

+

PropertyFieldSliderWithCallout rendering

+

Choice Group field with callout

+

PropertyFieldSliderWithCallout callout opened

+

Choice field with callout opened

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/PropertyFieldHeader';
+import { PropertyFieldSliderWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldSliderWithCallout';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  sliderWithCalloutValue: number;
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldSliderWithCallout('sliderWithCalloutValue', {
+  calloutContent: React.createElement('div', {}, 'Select background image opacity'),
+  calloutTrigger: CalloutTriggers.Click,
+  calloutWidth: 200,
+  key: 'sliderWithCalloutFieldId',
+  label: 'Opacity',
+  max: 100,
+  min: 0,
+  step: 1,
+  showValue: true,
+  value: this.properties.sliderWithCalloutValue,
+  debounce: 1000
+})
+
+ +

Implementation

+

The PropertyFieldSliderWithCallout control uses the same implementation as the default PropertyPaneSlider and has the following additional properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
calloutContentReact.ReactNodenoCallout content - any HTML
calloutWidthnumbernoCustom width for callout including borders. If value is 0, no width is applied.
calloutTriggerCalloutTriggersnoEvent to show the callout
gapSpacenumbernoThe gap between the callout and the target
debouncenumbernoTime specified in milliseconds after which the onChanged handler is going to be called.
+

Enum CalloutTriggers

+ + + + + + + + + + + + + + + + + +
NameDescription
ClickShows the callout when you hover over the icon
HoverShows the callout when you click on the icon
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldSpinButton/index.html b/controls/PropertyFieldSpinButton/index.html new file mode 100644 index 00000000..28a03e27 --- /dev/null +++ b/controls/PropertyFieldSpinButton/index.html @@ -0,0 +1,1317 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldSpinButton - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldSpinButton control

+

This control generates a spin button which allows the user to incrementally adjust a value in small steps.

+

PropertyFieldSpinButton initial render

+

Spin button initial

+

PropertyFieldSpinButton increment

+

Spin button increment

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyFieldSpinButton } from '@pnp/spfx-property-controls/lib/PropertyFieldSpinButton';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  spinValue: number;
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldSpinButton('spinValue', {
+  label: 'Spin Value',
+  initialValue: this.properties.spinValue,
+  onPropertyChange: this.onPropertyPaneFieldChanged,
+  properties: this.properties,
+  disabled: false,
+  suffix: 'px',
+  min: 0,
+  max: 5,
+  step: 0.25,
+  decimalPlaces: 2,
+  incrementIconName: 'CalculatorAddition',
+  decrementIconName: 'CalculatorSubtract',
+  key: 'spinButtonFieldId'
+})
+
+ +

Implementation

+

The PropertyFieldSpinButton control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
labelstringyesProperty field label displayed on top.
disabledbooleannoSpecify if the control needs to be disabled.
initialValuenumbernoInitial number value of the control.
stepnumbernoThe difference between the two adjacent values of the SpinButton (default is 1)
minnumbernoThe minimum value (no minimum when unspecified)
maxnumbernoThe minimum value (no minimum when unspecified)
incrementIconNamestringnoThe name of the UI Fabric Font Icon to use for the increment button (defaults to ChevronUpSmall)
decrementIconNamestringnoThe name of the UI Fabric Font Icon to use for the decrement button (defaults to ChevronDownSmall)
suffixstringnoAn optional string value to append to the field display
decimalPlacesnumbernoThe number of decimal places to show/allow (defaults to 0)
propertiesanyyesParent web part properties, this object is use to update the property value.
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the date gets changed.
keystringyesAn unique key that indicates the identity of this control.
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldSpinner/index.html b/controls/PropertyFieldSpinner/index.html new file mode 100644 index 00000000..dba66567 --- /dev/null +++ b/controls/PropertyFieldSpinner/index.html @@ -0,0 +1,1250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldSpinner - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldSpinner control

+

This control generates a Message Bar that will show messages .

+

PropertyFieldSpinner example usage

+

PropertyFieldSpinner example

+

How to use this control in your solutions

+
    +
  • Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  • +
  • Import the following modules to your component:
  • +
+
import { PropertyFieldSpinner} from '@pnp/spfx-property-controls/lib/PropertyFieldSpinner';
+
+ +
    +
  • Add the custom property control to the groupFields of the web part property pane configuration:
  • +
+
 PropertyFieldSpinner("", {
+      key: "sp1",
+      size: SpinnerSize.medium,
+      isVisible: true,
+      label: "Loading ..."
+  })
+
+ +

Implementation

+

The PropertyFieldSpinner control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
keystringyesAn unique key that indicates the identity of this control.
sizeSpinnerSizeyesSize of Spinner
classnamestringnocss ClassName
isVisiblebooleanyesIndicate if message is visible
LabelstringnoLabel to Show
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldSwatchColorPicker/index.html b/controls/PropertyFieldSwatchColorPicker/index.html new file mode 100644 index 00000000..643e2d3b --- /dev/null +++ b/controls/PropertyFieldSwatchColorPicker/index.html @@ -0,0 +1,1409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldSwatchColorPicker - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldSwatchColorPicker control

+

This control generates a swatch color picker that you can use inside the property pane.

+

PropertyFieldSwatchColorPicker

+

Swatch color picker initial

+

PropertyFieldColorPicker color selector

+

Swatch color picker select color

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyFieldSwatchColorPicker, PropertyFieldSwatchColorPickerStyle } from '@pnp/spfx-property-controls/lib/PropertyFieldSwatchColorPicker';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  color: string;
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldSwatchColorPicker('color', {
+  label: 'Swatch Color',
+  selectedColor: this.properties.color,
+  colors: [
+    { color: '#ffb900', label: 'Yellow' },
+    { color: '#fff100', label: 'Light Yellow' },
+    { color: '#d83b01', label: 'Orange'},
+    { color: '#e81123', label: 'Red' },
+    { color: '#a80000', label: 'Dark Red'},
+    { color: '#5c005c', label: 'Dark Magenta' },
+    { color: '#e3008c', label: 'Light Magenta'},
+    { color: '#5c2d91', label: 'Purple'},
+    { color: '#0078d4', label: 'Blue'},
+    { color: '#00bcf2', label: 'Light Blue' },
+    { color: '#008272', label: 'Teal'},
+    { color: '#107c10', label: 'Green'},
+    { color: '#bad80a', label: 'Light Green' },
+    { color: '#eaeaea'},
+    { color: 'black', label: 'Black'},
+    { color: '#333333', label: 'Neutral'},
+    { color: 'rgba(102, 102, 102, 0.5)', label: 'Half Gray' }
+  ],
+  onPropertyChange: this.onPropertyPaneFieldChanged,
+  properties: this.properties,
+  key: 'colorFieldId'
+})
+
+ +

Implementation

+

The PropertyFieldColorPicker control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
labelstringyesProperty field label displayed on top.
disabledbooleannoSpecify if the control needs to be disabled.
selectedColorstring or IColornoThe CSS-compatible string or an IColor object to describe the initial color
colorIPropertyFieldSwatchColorOption[]yesThe color choices (color can be any CSS-Compatible string, labels are optional and will be shown as a tooltip on the swatch)
showAsCirclesbooleannoWhen true, color cells are shown as circles. When false (default), color cells are shown as squares
columnCountnumbernoThe number of cells to show per row (defaults to 6, minimum of 1 and maximum of 8)
stylePropertyFieldSwatchColorPickerStylenoDetermines how the control is displayed (defaults to inline)
iconNamestringnoThe name of the UI Fabric Font Icon to use for Inline display (defaults to Color)
valueAsObjectbooleannoWhen true, the property is returned as an IColor object. When false (default), the property is returned as a CSS-compatible string
propertiesanyyesParent web part properties, this object is use to update the property value.
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the date gets changed.
keystringyesAn unique key that indicates the identity of this control.
+

Enum PropertyFieldSwatchColorPickerStyle

+ + + + + + + + + + + + + + + + + +
NameDescription
FullDisplay the full control in the property pane
InlineDisplay the color picker inline
+

Value

+

By default, the Swatch Color Picker returns the value as a CSS-compatible string. This allows you the flexibility of simply assigning the value to an inline style as is and this is usually sufficient. However, this also limits the information directly available to you since the format could be a Hex code, an RGBA value, or even a named color and may not be suitable for advanced scenarios.

+

By setting the valueAsObject property to true, you will always receive a consistent IColor object that provides you detailed information about the chosen color. Here are the properties available in the IColor object:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeDescription
strstringCSS-compatible string (this is the same value that would normally be returned when valueAsObject is false)
hexstringHex value (does not reflect alpha)
rnumberRed
gnumberGreen
bnumberBlue
hnumberHue
snumberSaturation
vnumberValue
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldTeamPicker/index.html b/controls/PropertyFieldTeamPicker/index.html new file mode 100644 index 00000000..2b60aaa2 --- /dev/null +++ b/controls/PropertyFieldTeamPicker/index.html @@ -0,0 +1,1347 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldTeamPicker - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldTeamPicker control

+

This control generates a team picker that can be used in the property pane of your SharePoint Framework web parts.

+

Searching for teams

+

Site picker

+

Selected teams

+

Site picker

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Request Microsoft Graph permissions in config/package-solution.json:
  4. +
+
{
+  "solution": {
+    "webApiPermissionRequests": [
+      {
+      "resource": "Microsoft Graph",
+      "scope": "Team.ReadBasic.All"
+    }, {
+      "resource": "Microsoft Graph",
+      "scope": "Files.Read"
+    }]
+  }
+}
+
+ +
+

Note

+

Team.ReadBasic.All and Files.Read is a minimum set of permissions needed for the component. For other options please see List Joined Teams and Get Drive documentation.

+
+
    +
  1. Import the following modules to your component:
  2. +
+
import { PropertyFieldSitePicker } from '@pnp/spfx-property-controls/lib/PropertyFieldSitePicker';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
import { IPropertyFieldTeam } from '../../PropertyFieldTeamPicker';
+
+export interface IPropertyControlsTestWebPartProps {
+  teams: IPropertyFieldTeam[];
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldTeamPicker('teams', {
+  key: 'teamsPicker',
+  context: this.context,
+  label: 'Select teams',
+  onPropertyChange: this.onPropertyPaneFieldChanged,
+  properties: this.properties,
+  initialTeams: this.properties.teams,
+  multiSelect: true
+})
+
+ +

Implementation

+

The PropertyFieldTeamPicker control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
labelstringyesProperty field label displayed on top.
disabledbooleannoSpecify if the control needs to be disabled.
contextBaseComponentContextyesContext of the current web part.
initialTeamsIPropertyFieldTeam[]noInitial teams to load in the site picker (optional).
multiSelectbooleannoDefine if you want to allow multiple teams selection. (optional, false by default).
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the teams get changed.
propertiesanyyesParent web part properties, this object is used to update the property value.
keystringyesAn unique key that indicates the identity of this control.
onGetErrorMessagefunctionnoThe method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it.
deferredValidationTimenumbernoControl will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200.
+

Interface IPropertyFieldTeam

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
idstringnoThe ID of the team (group)
titlestringnoTeams's display name
urlstringnoURL to the underlying site
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldTermPicker/index.html b/controls/PropertyFieldTermPicker/index.html new file mode 100644 index 00000000..cca07ac1 --- /dev/null +++ b/controls/PropertyFieldTermPicker/index.html @@ -0,0 +1,1441 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldTermPicker - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + + + + +
+
+ + + + + +

PropertyFieldTermPicker control

+

This control generates a term picker that can be used in the property pane of your SharePoint Framework web parts.

+
+

Disclaimer: This control makes use of the ProcessQuery API end-points to retrieve the managed metadata information. This will get changed once the APIs for managing managed metadata will become available.

+
+

Empty term picker

+

Empty term picker

+

Selecting terms

+

Selecting terms

+

Selected terms in the panel

+

Selected terms in the panel

+

Empty term picker

+

Selected terms in the input

+

Term picker: Auto Complete

+

Selected terms in the input

+

Limit the term set to a specific group or termset

+

Limit to a group or termset

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyFieldTermPicker } from '@pnp/spfx-property-controls/lib/PropertyFieldTermPicker';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
import { IPickerTerms } from "@pnp/spfx-property-controls/lib/PropertyFieldTermPicker";
+
+export interface IPropertyControlsTestWebPartProps {
+  terms: IPickerTerms;
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldTermPicker('terms', {
+  label: 'Select terms',
+  panelTitle: 'Select terms',
+  initialValues: this.properties.terms,
+  allowMultipleSelections: true,
+  excludeSystemGroup: false,
+  onPropertyChange: this.onPropertyPaneFieldChanged,
+  properties: this.properties,
+  context: this.context,
+  onGetErrorMessage: null,
+  deferredValidationTime: 0,
+  limitByGroupNameOrID: 'People',
+  limitByTermsetNameOrID: 'Location',
+  key: 'termSetsPickerFieldId'
+})
+
+ +

Implementation

+

The PropertyFieldTermPicker control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
labelstringyesProperty field label displayed on top.
panelTitlestringyesTermSet Picker Panel title.
disabledbooleannoSpecify if the control needs to be disabled.
contextBaseComponentContextyesContext of the current web part.
initialValuesIPickerTermsnoDefines the selected by default term sets.
allowMultipleSelectionsbooleannoDefines if the user can select only one or many term sets. Default value is false.
excludeSystemGroupbooleannoIndicator to define if the system Groups are exclude. Default is false.
limitByGroupNameOrIDstringnoLimit the term sets that can be used by the group name or ID.
limitByTermsetNameOrIDstringnoLimit the terms that can be picked by the Term Set name or ID.
hideTermStoreNamebooleannoSpecifies if you want to show or hide the term store name from the panel.
isTermSetSelectablebooleannoSpecify if the term set itself is selectable in the tree view.
areTermsSelectablebooleannoSpecify if the terms are selectable in the tree view. Default value is true
areTermsHiddenbooleannoSpecify if the terms are hidden from the tree view.
disabledTermIdsstring[]noSpecify which terms should be disabled in the term set so that they cannot be selected.
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the date gets changed.
propertiesanyyesParent web part properties, this object is use to update the property value.
keystringyesAn unique key that indicates the identity of this control.
onGetErrorMessagefunctionnoThe method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it.
deferredValidationTimenumbernoControl will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200.
resolveDelaynumbernoThe delay time in ms before resolving suggestions, which is kicked off when input has been changed. e.g. if a second input change happens within the resolveDelay time, the timer will start over. Only until after the timer completes will onResolveSuggestions be called. Default is 500.
anchorIdstringnoWhen using LimitByTermsetNameOrId, set the anchorid to a child term in the TermSet to be able to select terms from that level and below.
+

Interface IPickerTerms

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
keystringyesThe ID of the term
namestringyesThe name of the term
pathstringyesThe path of the term
termSetstringyesThe Id of the parent term set of the term
termSetNamestringnoThe Name of the parent term set of the term
+

Differences between PropertyFieldEnterpriseTermPicker and PropertyFieldTermPicker

+

PropertyFieldEnterpriseTermPicker is implemented to be used for "enterprise" Term Stores with large amount of groups, terms sets, and terms. It loads term sets and terms on demand - only at the moment when specified group or term set has been expanded in the Term Store Tree. +To implement on-demand loading PropertyFieldEnterpriseTermPicker uses @pnp/sp-taxonomy module from @pnp/pnpjs library. It increases the size of a bundle when the control is used. +Additionally, PropertyFieldEnterpriseTermPicker allows to request labels for the terms in the picker.

+

PropertyFieldTermPicker loads all the groups and term sets from the term service during the initial request. This approach fits most of the scenarios with small and medium number of objects in a term store. Besides that, PropertyFieldTermPicker does not use any additional libraries or modules to retrieve data from the taxonomy service which makes it much more lightweight option in comparison with PropertyFieldEnterpriseTermPicker. See PropertyFieldTermPicker for implementation details.

+

We recommend to use PropertyFieldTermPicker control if you don't need on-demand loading or term labels.

+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldTextWithCallout/index.html b/controls/PropertyFieldTextWithCallout/index.html new file mode 100644 index 00000000..5ee126dd --- /dev/null +++ b/controls/PropertyFieldTextWithCallout/index.html @@ -0,0 +1,1276 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldTextWithCallout - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldTextWithCallout control

+

This control generates a text field control with a callout.

+

PropertyFieldTextWithCallout rendering

+

Text field with callout

+

PropertyFieldTextWithCallout callout opened

+

Text field with callout opened

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/PropertyFieldHeader';
+import { PropertyFieldTextWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldTextWithCallout';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  textInfoHeaderValue: string;
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldTextWithCallout('textInfoHeaderValue', {
+  calloutTrigger: CalloutTriggers.Hover,
+  key: 'textInfoHeaderFieldId',
+  label: 'Describe your PnP passion with few words',
+  calloutContent: React.createElement('span', {}, 'You can describe your passion with such words as strong, cosmic, all-absorbing, etc.'),
+  calloutWidth: 150,
+  value: this.properties.textInfoHeaderValue
+})
+
+ +

Implementation

+

The PropertyFieldTextWithCallout control uses the same implementation as the default PropertyPaneTextField and has the following additional properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
calloutContentReact.ReactNodenoCallout content - any HTML
calloutWidthnumbernoCustom width for callout including borders. If value is 0, no width is applied.
calloutTriggerCalloutTriggersnoEvent to show the callout
gapSpacenumbernoThe gap between the callout and the target
+

Enum CalloutTriggers

+ + + + + + + + + + + + + + + + + +
NameDescription
ClickShows the callout when you hover over the icon
HoverShows the callout when you click on the icon
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldToggleWithCallout/index.html b/controls/PropertyFieldToggleWithCallout/index.html new file mode 100644 index 00000000..c64ebe2f --- /dev/null +++ b/controls/PropertyFieldToggleWithCallout/index.html @@ -0,0 +1,1277 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldToggleWithCallout - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldToggleWithCallout control

+

This control generates a toggle control with a callout.

+

PropertyFieldToggleWithCallout rendering

+

Toggle field with callout

+

PropertyFieldToggleWithCallout callout opened

+

Toggle field with callout opened

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/PropertyFieldHeader';
+import { PropertyFieldToggleWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldToggleWithCallout';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  toggleInfoHeaderValue: boolean;
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldToggleWithCallout('toggleInfoHeaderValue', {
+  calloutTrigger: CalloutTriggers.Click,
+  key: 'toggleInfoHeaderFieldId',
+  label: 'Turn on the PnP feature',
+  calloutContent: React.createElement('p', {}, 'With this control you can enable or disable the PnP features in your web part'),
+  onText: 'ON',
+  offText: 'OFF',
+  checked: this.properties.toggleInfoHeaderValue
+})
+
+ +

Implementation

+

The PropertyFieldToggleWithCallout control uses the same implementation as the default PropertyPaneToggle and has the following additional properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
calloutContentReact.ReactNodenoCallout content - any HTML
calloutWidthnumbernoCustom width for callout including borders. If value is 0, no width is applied.
calloutTriggerCalloutTriggersnoEvent to show the callout
gapSpacenumbernoThe gap between the callout and the target
+

Enum CalloutTriggers

+ + + + + + + + + + + + + + + + + +
NameDescription
ClickShows the callout when you hover over the icon
HoverShows the callout when you click on the icon
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyFieldViewPicker/index.html b/controls/PropertyFieldViewPicker/index.html new file mode 100644 index 00000000..433b05de --- /dev/null +++ b/controls/PropertyFieldViewPicker/index.html @@ -0,0 +1,1356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyFieldViewPicker - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyFieldViewPicker control

+

This control generates a view picker field that can be used in the property pane of your SharePoint Framework web parts.

+

The control automatically retrieves the views for a given SharePoint list:

+

View picker

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyFieldViewPicker, PropertyFieldViewPickerOrderBy } from '@pnp/spfx-property-controls/lib/PropertyFieldViewPicker';
+
+ +
    +
  1. You'll probably want to use this control in combination with the PropertyFieldListPicker. Make sure to select the multiSelect prop to false, as this control is designed to work with a single list. Store the list id in your web part properties, as follows:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  list: string; // Stores the list ID
+}
+
+ +
    +
  1. Create a new property for your web part, as indicated between the BEGIN: and END: comments below:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  list: string; // Stores the list ID
+
+  // BEGIN: Added
+  view: string; // Stores the view ID
+  // END: Added
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyFieldViewPicker('view', {
+  label: 'Select a view',
+  listId: this.properties.list,
+  selectedView: this.properties.view,
+  orderBy: PropertyFieldViewPickerOrderBy.Title,
+  disabled: false,
+  onPropertyChange: this.onPropertyPaneFieldChanged.bind(this),
+  properties: this.properties,
+  context: this.context,
+  onGetErrorMessage: null,
+  deferredValidationTime: 0,
+  key: 'viewPickerFieldId'
+})
+
+ +

Implementation

+

The PropertyFieldViewPicker control can be configured with the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
labelstringyesProperty field label displayed on top.
listIdstringyesThe ID of the list or library you wish to select a view from.
disabledbooleannoSpecify if the control needs to be disabled.
contextBaseComponentContextyesContext of the current web part.
selectedViewstringnoInitial selected view of the control.
orderByPropertyFieldViewPickerOrderBynoSpecify the property on which you want to order the retrieve set of views.
webAbsoluteUrlstringnoAbsolute Web Url of target site (user requires permissions)
onPropertyChangefunctionyesDefines a onPropertyChange function to raise when the date gets changed.
propertiesanyyesParent web part properties, this object is use to update the property value.
keystringyesAn unique key that indicates the identity of this control.
onGetErrorMessagefunctionnoThe method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it.
deferredValidationTimenumbernoControl will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200.
viewsToExcludestring[]noDefines views by which should be excluded from the view picker control. You can specify view titles or IDs
filterstringnoFilter views from OData query.
onViewsRetrieved(views: ISPView[]) => PromiseLike | ISPView[]noCallback that is called before the dropdown is populated.
+

Enum PropertyFieldViewPickerOrderBy

+ + + + + + + + + + + + + + + + + +
NameDescription
IdSort by view ID
TitleSort by view title
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyPaneMarkdownContent/index.html b/controls/PropertyPaneMarkdownContent/index.html new file mode 100644 index 00000000..1023b195 --- /dev/null +++ b/controls/PropertyPaneMarkdownContent/index.html @@ -0,0 +1,1542 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyPaneMarkdownContent - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + + + + +
+
+ + + + + +

PropertyPaneMarkdownContent control

+

This control allows you to embed content in a property pane using Markdown content.

+

You can use this control to easily provide guidance for your users and create other content that is not easily created otherwise.

+

It supports any arbitrary HTML without using dangerouslySetInnerHTML, and allows overriding any HTML tag.

+

PropertyPaneMarkdownContent rendering

+

Property Pane Markdown Content

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyPaneMarkdownContent } from '@pnp/spfx-property-controls/lib/PropertyPaneMarkdownContent';
+
+ +
    +
  1. Create a string with Markdown content for your property pane, for example:
  2. +
+
const md: string = `
+### This is Markdown
+
+[Markdown](http://daringfireball.net/projects/markdown/) lets you write content in a really natural way.
+
+  * You can have lists, like this one
+  * Make things **bold** or *italic*
+  * Embed snippets of \`code\`
+  * Create [links](/)
+  * ...
+
+Also supports GitHub-flavored Markdown checklists
+
+- [x] Checklist item 1
+- [x] Checklist item 2
+- [ ] Checklist item 3
+
+<small>Sample content borrowed with thanks from [markdown-to-jsx](https://probablyup.com/markdown-to-jsx/) ❤️</small>`
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyPaneMarkdownContent({
+  markdown: md,
+  key: 'markdownSample'
+})
+
+ +

Indentation

+

Pay close attention to the indentation in your Markdown string. The Markdown parser assumes that four spaces preceding your content means a code block. This means that the following Markdown will render most of the content a code block:

+
const md: string = `
+    To get started select an items from the library.
+
+    You can pick any items from the list, provided that is has a valid \`id\` attribute.`
+
+ +

Producing the following HTML:

+

Bad Markdown

+

To solve this issue, make sure that your content is not indented.

+
const md: string = `To get started select an items from the library.
+
+You can pick any items from the list, provided that is has a valid \`id\` attribute.`
+
+ +

Which will produce the following HTML: +Good markdown

+

Overriding rendering of HTML elements

+

You can override the rendering of any HTML element by specifying an overrides prop to the options.

+

For example, to override the CSS class of H3 elements (which is defined by a ### in Markdown), you can override the className attribute using the following code:

+
PropertyPaneMarkdownContent({
+  markdown: `
+### This is a heading 3
+
+You can override any HTML you want`,
+  key: 'markdownSample',
+  options: {
+    overrides: {
+      h3: { // Markdown equivalent of ###
+        props: {
+          className: "ms-font-xl ms-fontColor-neutralDark",
+        },
+      },
+    }
+  }}),
+
+ +

You can also render your own React elements using the overrides prop. For example, if you have a MyCustomControl React element, you can use the following:

+
// Import your React element
+import MyCustomControl from 'MyCustomControl';
+
+...
+
+PropertyPaneMarkdownContent({
+  markdown: `
+### This is a heading 3
+
+You can override any HTML you want
+
+<MyCustomControl sampleMessage='This is a sample message'/>
+`,
+  key: 'markdownSample',
+  options: {
+    overrides: {
+      h3: { // Markdown equivalent of ###
+        props: {
+          className: "ms-font-xl ms-fontColor-neutralDark",
+        },
+      },
+      // Override the React element
+      MyCustomControl: MyCustomControl
+    }
+  }}),
+
+ +

Rendering all elements as inline or block elements

+

By default, the control will attempt to determine whether the Markdown content should be wrapped in a <div>, <p>, or <span> to render content as block or inline elements.

+

For example, the following Markdown will be rendered as inline content:

+
This is an _inline_ element
+
+ +

And the following Markdown will be rendered as block content:

+
## This is a block element
+
+ +

However, you can override rendering all HTML as block elements or inline elements by passing forceBlock: true or forceInline: true to the component's options prop.

+

Named unicode

+

By default the control converts named html codes to their unicode character equivalents:

+
    +
  • &: &amp;
  • +
  • ': &apos;
  • +
  • >: &gt;
  • +
  • <: &lt;
  • +
  • (space): &nbsp;
  • +
  • ": &quot;
  • +
+

If you need to extend this map of named codes and unicode characters, you can pass a list of additional html codes by using the namedCodesToUnicode option as object with the code names needed as follows:

+
PropertyPaneMarkdownContent({
+  markdown: `
+One hundred is &le; than one thousand, but is &ge than fifty.`,
+  key: 'markdownSample',
+  options: {
+    namedCodesToUnicode: {
+        le: '\u2264',
+        ge: '\u2265',
+    }
+  }}),
+
+ +

Disabling parsing raw HTML

+

By default, the PropertyPaneMarkdownContent control will parse raw HTML elements in your Markdown content and will attempt to render them.

+

For example, this Markdown string will render text between two horizontal rulers:

+
<hr/>
+Text between rulers
+<hr/>
+
+ +

If you do not wish to render raw HTML from your Markdown, you can specify disableParsingRawHTML: true, which will render the same Markdown as follows:

+
&lt;hr/&gt;
+Text between rulers
+&lt;hr/&gt;
+
+ +

Implementation

+

PropertyPaneMarkdownContent

+

The PropertyPaneMarkdownContent control has the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
markdownstringyesMarkdown content you wish to display in the property pane
keystringyesA unique identifier for the property pane control
optionsIMarkdownPropsnoOptional settings to control how Markdown content is rendered
+

IMarkdownProps

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
disableParsingRawHTMLBooleannotrue disables parsing of raw HTML elements within Markdown.
forceBlockBooleannotrue forces rendering all input strings as blocks.
forceInlineBooleannotrue forces rendering all input strings as inline elements.
namedCodesToUnicodeobject[]noAn array of objects to override named HTML codes to their unicode equivalents.
overridesobject[]noAn array of HTML elements to override during rendering.
+

This control uses the markdown-to-jsx component to render safe HTML. For more information and advanced settings, please refer to the markdown-to-jsx documentation

+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyPanePropertyEditor/index.html b/controls/PropertyPanePropertyEditor/index.html new file mode 100644 index 00000000..19138524 --- /dev/null +++ b/controls/PropertyPanePropertyEditor/index.html @@ -0,0 +1,1234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyPanePropertyEditor - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyPanePropertyEditor control

+

This control allows the user to edit the webpart properties in JSON. It can also be used to export properties of a webpart and later import them again to a similar webpart on a different page. If the user clicks 'export' a file named 'webpartproperties.json' is presented for download. The same file can be uploaded to a new instance of the same webpart on for instance another site or page.

+

PropertyPanePropertyEditor rendering in property pane

+

PropertyPanePropertyEditor rendering

+

PropertyPanePropertyEditor rendering when expanded

+

PropertyPanePropertyEditor rendering

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyPanePropertyEditor } from '@pnp/spfx-property-controls/lib/PropertyPanePropertyEditor';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  toggleInfoHeaderValue: boolean; 
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyPanePropertyEditor({
+  webpart: this,
+  key: 'propertyEditor'
+})    
+
+ +

Implementation

+

The PropertyEditor control has the following properties:

+ + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
webpartBaseClientSideWebPartyesThe webpart, which is in principle the current webpart, of which you want to be able to edit the properties from
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/controls/PropertyPaneWebPartInformation/index.html b/controls/PropertyPaneWebPartInformation/index.html new file mode 100644 index 00000000..3737f725 --- /dev/null +++ b/controls/PropertyPaneWebPartInformation/index.html @@ -0,0 +1,1292 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyPaneWebPartInformation - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyPaneWebPartInformation control

+

This control allows you to specify a description, a 'read more' link, and an optional embedded video

+

PropertyPaneWebPartInformation rendering

+

WebPart Information

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your component:
  4. +
+
import { PropertyPaneWebPartInformation } from '@pnp/spfx-property-controls/lib/PropertyPaneWebPartInformation';
+
+ +
    +
  1. Create a new property for your web part, for example:
  2. +
+
export interface IPropertyControlsTestWebPartProps {
+  toggleInfoHeaderValue: boolean;
+}
+
+ +
    +
  1. Add the custom property control to the groupFields of the web part property pane configuration:
  2. +
+
PropertyPaneWebPartInformation({
+  description: `This is a <strong>demo webpart</strong>, used to demonstrate all the <a href="https://aka.ms/sppnp">PnP</a> property controls`,
+  moreInfoLink: `https://pnp.github.io/sp-dev-fx-property-controls/`,
+  videoProperties: {
+    embedLink: `https://www.youtube.com/embed/d_9o3tQ90zo`,
+    properties: { allowFullScreen: true}
+  },
+  key: 'webPartInfoId'
+})    
+
+ +

Implementation

+

The PropertyPaneWebPartInformation control has the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
descriptionstringyesDescription content - any HTML
moreInfoLinkstringnoA URL providing optional additional information
moreInfoLinkTargetstringnoAn optional target for the link. Defaults to '_blank'
videoPropertiesIVideoEmbedPropertiesnoA video properties object specifying an optionally embedded video
+

Class IVideoEmbedProperties

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
embedLinkstringyesA link to an embeddable video. The video will be embedded in an iframe. See the example above for details
widthnumbernooptional width of the iframe
heightnumbernooptional height of the iframe
propertiesobjectnoadditional properties to set on the iframe element
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/css/extra.css b/css/extra.css new file mode 100644 index 00000000..18a92540 --- /dev/null +++ b/css/extra.css @@ -0,0 +1,32 @@ +.md-logo { + height: 32px; + width: 150px; +} + +.md-logo img { + width: 100% !important; + height: auto !important; + margin-top: -0.25em; +} + +.md-header{ + height: 75px; +} + +.md-container{ + padding-top: 70px; +} + +.md-sidebar[data-md-state="lock"]{ + padding-top: 75px; +} + +.md-footer { + margin-top: 5em; +} + +@media only screen and (max-width: 76.1875em) { + .md-nav--primary .md-nav__title--site .md-nav__button { + width: 150px; + } +} diff --git a/getting-started/index.html b/getting-started/index.html new file mode 100644 index 00000000..1976cc4c --- /dev/null +++ b/getting-started/index.html @@ -0,0 +1,1120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Getting started - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

Getting started

+

Installation

+

To get started you have to install the following dependency to your project: @pnp/spfx-property-controls.

+

Enter the following command to install the dependency to your project:

+
npm install @pnp/spfx-property-controls --save --save-exact
+
+ +

Configuration

+

Once the package is installed, you will have to configure the resource file of the property controls to be used in your project. You can do this by opening the config/config.json and adding the following line to the localizedResources property:

+
"PropertyControlStrings": "./node_modules/@pnp/spfx-property-controls/lib/loc/{locale}.js"
+
+ +

Next Steps

+

Once you installed the dependency you can start using the controls in your solution. Go to the documentation homepage to get an overview of all the available controls: home.

+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/guides/contributing/index.html b/guides/contributing/index.html new file mode 100644 index 00000000..c79e7a55 --- /dev/null +++ b/guides/contributing/index.html @@ -0,0 +1,1162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contribution guidelines - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+ +
+
+ + +
+
+ + + + + +

Contribution guidelines

+

We appreciate that you're interested in helping with moving the project forward. Before you submit your first PR, please read the following guide. We'd hate to see you work on something that someone else is already working on, something that we agreed not to do or something that doesn't match the project.

+

Sharing is caring!

+

You have an idea for a new control

+

Awesome! Good ideas are invaluable for every product. Before you start hacking away, please check if there is no similar idea already listed in the issue list. If not, please create a new issue describing your idea. Once we agree on the feature scope and architecture, the feature will be ready for building. Don't hesitate to mention in the issue if you'd like to build the feature yourself.

+

When building a new control, try to add your control to the default provided web part so that everyone can test it out. Please also provide the documentation for your controls in the documentation section.

+

You have a suggestion for improving an existing control

+

Nothing is perfect. If you have an idea how to improve an existing control, let us know by submitting an issue in the issue list. Some things are done for a reason, but some are not. Let's discuss what you think and see how the project could be improved for everyone.

+

You've found a bug

+

Bugs happen. When you find a bug, please have a look at the issue list if a similar bug has already been logged. If not, let us know what doesn't work and how we can reproduce it. If we can't reproduce your bug, we will ask you for clarification, which will only make it longer to fix it.

+

Fixing typos

+

Typos are embarrassing! Most PR's that fix typos will be accepted immediately. In order to make it easier to review the PR, please narrow the focus instead of sending a huge PR of fixes.

+

Tips

+

Before contributing:

+
    +
  • +

    ensure that the dev branch on your fork is in sync with the original sp-dev-fx-property-controls repository + ```sh + # assuming you are in the folder of your locally cloned fork.... + git checkout dev

    +

    assuming you have a remote named upstream pointing to the official sp-dev-fx-property-controls repo

    +

    git fetch upstream

    +

    update your local dev to be a mirror of what's in the main repo

    +

    git pull --rebase upstream dev +```

    +
  • +
  • +

    create a feature branch for your change. If you'll get stuck on an issue or merging your PR will take a while, this will allow you to have a clean dev branch that you can use for contributing other changes + sh + git checkout -b my-contribution

    +
  • +
+

DO's & DON'Ts

+
    +
  • DO follow the same project and test structure as the existing project.
  • +
  • DO include tests when adding new functionality and features. When fixing bugs, start with adding a test that highlights how the current behavior is broken.
  • +
  • DO keep discussions focused. When a new or related topic comes up it's often better to create new issue than to side track the conversation.
  • +
  • DO NOT submit PR's for coding style changes.
  • +
  • DO NOT surprise us with big PR's. Instead file an issue & start a discussion so we can agree on a direction before you invest a large amount of time.
  • +
  • DO NOT commit code you didn't write.
  • +
  • DO NOT submit PR's that refactor existing code without a discussion first.
  • +
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/guides/index.html b/guides/index.html new file mode 100644 index 00000000..20eeb490 --- /dev/null +++ b/guides/index.html @@ -0,0 +1,1084 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Project guides - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

Project guides

+

Following is an overview of guides for this project. If you're considering contributing to the project, reading up on these guides will help you understand the project structure and get started developing for it.

+ +

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/guides/migrate-from-v1/index.html b/guides/migrate-from-v1/index.html new file mode 100644 index 00000000..25ea0ac2 --- /dev/null +++ b/guides/migrate-from-v1/index.html @@ -0,0 +1,1133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Migrating from v1 to v2 - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

Migrating from v1 to v2

+

Most of the controls have no breaking changes when moving from v1 to v2. However, some APIs were changed to make the library more stable and controls behavior more even.

+

Also, we've bumped up React and Fluent UI versions used in the library. It means you will need to update package.json file in your SPFx projects.

+

The below guide is an overview of what it takes to migrate from v1 to v2. If we missed something, please let us know in the issues list so we can update the guide. Thanks!

+

v2 Supports SharePoint Online Only

+

v2 of Reusable Controls is based on SharePoint Framework 1.11 and, as a result, does not support SharePoint on-premises.

+
+

Important: Please, use v1 if you plan to deploy your solution on-premises.

+
+

React and Fluent UI versions

+

v2 of Reusable Controls uses React.js v16.8.5 and Fluent UI (Office UI Fabric React) v6.214.0.

+

Although it is not necessary to use the same modules' versions in your project, we highly recommend to update your solution accordingly:

+
"dependencies": {
+    // other dependencies
+    "office-ui-fabric-react": "6.214.0",
+    "react": "16.8.5",
+    "react-dom": "16.8.5"
+  },
+  "devDependencies": {
+    "@types/react": "16.8.8",
+    "@types/react-dom": "16.8.3",
+  },
+
+ +

The easiest way to upgrade SharePoint Framework solution is to use Office365 CLI spfx project upgrade command.

+

APIs Changes

+

...

+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/guides/mpa/index.html b/guides/mpa/index.html new file mode 100644 index 00000000..f869c8a5 --- /dev/null +++ b/guides/mpa/index.html @@ -0,0 +1,1133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Minimal Path to Awesome - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

Minimal Path to Awesome

+

The shortest way to prepare your local copy of the project for development and testing.

+

Install prerequisites

+

Before you start contributing to this project, you will need Node.js. This project has been tested with the 10.x version of Node.js and the version of NPM that comes with it. You can use Node Version Manager to switch between different versions of Node.js.

+

Get the local version of the project

+
    +
  • fork this repository
  • +
  • clone your fork
  • +
  • in the command line:
  • +
  • run npm install to restore dependencies
  • +
  • run gulp serve to serve your project
  • +
  • Start making your changes
  • +
+

Documentation

+

SharePoint Framework Property Controls uses MkDocs to publish documentation pages. See more information about installing MkDocs on your operating system at http://www.mkdocs.org/#installation.

+

Also, documentation uses custom MkDocs theme that should be installed as well. See Material theme for MkDocs

+

Once you have MkDocs and Material theme installed on your machine, in the command line:

+
    +
  • run cd ./docs/documentation to change directory to where the manual pages are stored
  • +
  • run mkdocs serve to start the local web server with MkDocs and view the documentation in the web browser
  • +
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/guides/submitting-pr/index.html b/guides/submitting-pr/index.html new file mode 100644 index 00000000..ec496d94 --- /dev/null +++ b/guides/submitting-pr/index.html @@ -0,0 +1,1102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Submitting a PR - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

Submitting a PR

+

We appreciate your initiative and would love to integrate your work with the rest of the project! Here is how you can help us do it as quickly as possible.

+
    +
  • check, that your feature branch is up-to-date. If it's not, there is a risk of merge conflicts or other issues that will complicate merging your changes into the main repository. Refer to these resources for more information on syncing your repo:
  • +
  • GitHub Help: Syncing a Fork
  • +
  • AC: Keep Your Forked Git Repo Updated with Changes from the Original Upstream Repo
  • +
  • +

    Looking for a quick cheat sheet? Look no further:

    +

    ```sh

    +

    assuming you are in the folder of your locally cloned fork....

    +

    git checkout dev

    +

    assuming you have a remote named upstream pointing to the official sp-dev-fx-property-controls repo

    +

    git fetch upstream

    +

    update your local dev branch to be a mirror of what's in the main repo

    +

    git pull --rebase upstream dev

    +

    switch to your branch where you are working, say "issue-xyz"

    +

    git checkout issue-xyz

    +

    update your branch to update its fork point to the current tip of dev & put your changes on top of it

    +

    git rebase dev +`` +- submit PR to the **dev** branch of the main repo. PRs submitted to other branches will be declined +- let us know what's in the PR: is it a new command, bug fix or a minor update in the docs? The clearer the information you provide, the quicker your PR can be verified and merged +- ideally 1 PR = 1 commit - this makes it easier to keep the log clear for everyone and track what's changed. If you're new to working with git, we'll squash your commits for you when merging your changes into the main repo +- don't worry about changing the version or adding yourself to the list of contributors inpackage.json`. We'll do that for you when merging your changes.

    +
  • +
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/helpers/PropertyPaneHelpers/index.html b/helpers/PropertyPaneHelpers/index.html new file mode 100644 index 00000000..6f7ca6c2 --- /dev/null +++ b/helpers/PropertyPaneHelpers/index.html @@ -0,0 +1,1252 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PropertyPaneHelpers - @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

PropertyPaneHelpers

+

These are helpers to interact with the property pane of the web part. Currently this helper allows you to show a spinner when the property pane is loading resources. This could be loading controls, fetching data, ... Normally you would get a white property pane until all data is loaded.

+

How to use this control in your solutions

+
    +
  1. Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency.
  2. +
  3. Import the following modules to your main web part TypeScript file:
  4. +
+
import { PropertyPaneHelpers } from '@pnp/spfx-property-controls/lib/helpers';
+
+ +
    +
  1. You can use the following example to add the spinner to your web part property pane:
  2. +
+
/**
+ * Load property pane resources
+ */
+protected async loadPropertyPaneResources(): Promise<void> {
+  PropertyPaneHelpers.setSpinner({
+    bgColor: "white",
+    spinnerProps: {
+      styles: () => {
+        return {
+          circle: {
+            height: 80,
+            width: 80
+          }
+        };
+      }
+    }
+  });
+
+  // Write here the code you want to add to load your resources
+
+  PropertyPaneHelpers.clearSpinner(200);
+}
+
+ +

Implementation

+

The setSpinner method allows you to set the following properties:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeRequiredDescription
bgColorstringnoSpinner background color
classNamestringnoClass name to style the spinner yourself.
spinnerPropsISpinnerPropsnoSpinner properties from Office UI Fabric.
+

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..67dffc1e --- /dev/null +++ b/index.html @@ -0,0 +1,1355 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @pnp/spfx-property-controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
+ +
+ +
+ + + + + + + + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + + + + +

Reusable property pane controls for the SharePoint Framework solutions

+

This repository provides developers with a set of reusable property pane controls that can be used in their SharePoint Framework (SPFx) solutions.

+
+

Attention

+

In order to migrate to v2 and v3 from v1 it is advised to follow this guide: Migrating from V1.

+
+

Library Versions

+

Currently there are 3 active versions of the controls. Please, reference the table below to see what version to use in your project.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VersionSPFx minimal dependencyFluent UI (Office UI Fabric React) versionSharePoint VersionComments
v31.13.*7.174.1OnlineThe most current, actively maintained version of the library.
v21.11.06.214.0OnlineThe version deprecated and not actively maintained.
We strongly recommend to update to SPFx 1.13.* and v3 of Controls.
v11.3.05.131.0On-PremThe version is maintained for SharePoint On-Prem 2016 and 2019 implementations. Be aware that the controls might not work in solutions you're building for on-premises. As for on-premises solutions version 1.1.0 will get used.
+
+

Attention

+

If you are using v3 of the Controls with SPFx 1.12.1 you will need to cast web part context to any to pass it to the controls.

+
+

Getting started

+

Installation

+

To get started you have to install the following dependency to your project: @pnp/spfx-property-controls.

+

Enter the following command to install the dependency to your project:

+
npm install @pnp/spfx-property-controls --save --save-exact
+
+ +

Configuration

+
+

Note

+

Since v1.7.0 the localized resource path will automatically be configured during the dependency installing.

+
+

Once the package is installed, you will have to configure the resource file of the property controls to be used in your project. You can do this by opening the config/config.json and adding the following line to the localizedResources property:

+
"PropertyControlStrings": "node_modules/@pnp/spfx-property-controls/lib/loc/{locale}.js"
+
+ +

Telemetry

+

All controls gather telemetry to verify the usage. Only the name of the control and related data gets captured.

+
+

More information about the service that we are using for this can be found here: PnP Telemetry Proxy.

+
+

Since version 1.17.0 it is possible to opt-out of the telemetry by adding the following code to your web part:

+
import PnPTelemetry from "@pnp/telemetry-js";
+...
+const telemetry = PnPTelemetry.getInstance();
+telemetry.optOut();
+
+ +

Controls

+

The following controls are currently available:

+ +

The following controls are extended controls that show a callout next to the label

+ +

+ + + + + + + + + +
+
+
+
+ + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/search/search_index.json b/search/search_index.json new file mode 100644 index 00000000..9255abe7 --- /dev/null +++ b/search/search_index.json @@ -0,0 +1 @@ +{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Reusable property pane controls for the SharePoint Framework solutions \u00b6 This repository provides developers with a set of reusable property pane controls that can be used in their SharePoint Framework (SPFx) solutions. Attention In order to migrate to v2 and v3 from v1 it is advised to follow this guide: Migrating from V1 . Library Versions \u00b6 Currently there are 3 active versions of the controls. Please, reference the table below to see what version to use in your project. Version SPFx minimal dependency Fluent UI (Office UI Fabric React) version SharePoint Version Comments v3 1.13.* 7.174.1 Online The most current, actively maintained version of the library. v2 1.11.0 6.214.0 Online The version deprecated and not actively maintained. We strongly recommend to update to SPFx 1.13.* and v3 of Controls. v1 1.3.0 5.131.0 On-Prem The version is maintained for SharePoint On-Prem 2016 and 2019 implementations. Be aware that the controls might not work in solutions you're building for on-premises. As for on-premises solutions version 1.1.0 will get used. Attention If you are using v3 of the Controls with SPFx 1.12.1 you will need to cast web part context to any to pass it to the controls. Getting started \u00b6 Installation \u00b6 To get started you have to install the following dependency to your project: @pnp/spfx-property-controls . Enter the following command to install the dependency to your project: npm install @pnp/spfx-property-controls --save --save-exact Configuration \u00b6 Note Since v1.7.0 the localized resource path will automatically be configured during the dependency installing. Once the package is installed, you will have to configure the resource file of the property controls to be used in your project. You can do this by opening the config/config.json and adding the following line to the localizedResources property: \"PropertyControlStrings\" : \"node_modules/@pnp/spfx-property-controls/lib/loc/{locale}.js\" Telemetry \u00b6 All controls gather telemetry to verify the usage. Only the name of the control and related data gets captured. More information about the service that we are using for this can be found here: PnP Telemetry Proxy . Since version 1.17.0 it is possible to opt-out of the telemetry by adding the following code to your web part: import PnPTelemetry from \"@pnp/telemetry-js\" ; ... const telemetry = PnPTelemetry . getInstance (); telemetry . optOut (); Controls \u00b6 The following controls are currently available: PropertyFieldButton (Property pane Button) PropertyFieldCodeEditor (Property pane code editor) PropertyFieldCollectionData (Property pane collection data editor) PropertyFieldColorPicker (Property pane color picker) PropertyFieldColumnPicker (Property pane list column picker) PropertyFieldDateTimePicker (Property pane date and time selector) PropertyFieldFilePicker (Property pane file picker) PropertyFieldFolderPicker (Property pane folder picker) PropertyFieldGrid (Property pane Grid control) PropertyFieldGuid (Property pane GUID editor) PropertyFieldIconPicker (Property pane icon picker) PropertyFieldListPicker (Property pane list selector) PropertyFieldMessage (Property pane message) PropertyFieldMonacoEditor (Property pane Monaco Editor) PropertyFieldMultiSelect (Property pane multi select dropdown) PropertyFieldNumber (Property pane number editor) PropertyFieldOrder (Property pane ordered list editor) PropertyFieldPassword (Property pane password editor) PropertyFieldPeoplePicker (Property pane people / group selector) PropertyFieldRoleDefinitionPicker (Property pane role definition picker) PropertyFieldSearch (Property pane search box) PropertyFieldSitePicker (Property pane site selector) PropertyFieldSpinButton (Property pane spin button) PropertyFieldSpinner (Property pane spinner) PropertyFieldSwatchColorPicker (Property pane color selector) PropertyFieldTeamPicker (Property pane team selector) PropertyFieldTermPicker (Property pane managed metadata term selector) PropertyFieldEnterpriseTermPicker (Property pane managed metadata term selector for enterprise scenarios) PropertyFieldViewPicker (Property pane view selector) PropertyPaneMarkdownContent (Property pane markdown content) PropertyPanePropertyEditor (Property pane control that allows raw editing, export and import of webpart properties) PropertyPaneWebPartInformation (Property pane webpart information panel) The following controls are extended controls that show a callout next to the label PropertyFieldButtonWithCallout (Property button field with callout) PropertyFieldCheckboxWithCallout (Property checkbox field with callout) PropertyFieldChoiceGroupWithCallout (Property choice group field with callout) PropertyFieldDropdownWithCallout (Property dropdown field with callout) PropertyFieldLabelWithCallout (Property label field with callout) PropertyFieldLinkWithCallout (Property link field with callout) PropertyFieldSliderWithCallout (Property slider field with callout) PropertyFieldTextWithCallout (Property text field with callout) PropertyFieldToggleWithCallout (Property toggle field with callout)","title":"Home"},{"location":"#reusable-property-pane-controls-for-the-sharepoint-framework-solutions","text":"This repository provides developers with a set of reusable property pane controls that can be used in their SharePoint Framework (SPFx) solutions. Attention In order to migrate to v2 and v3 from v1 it is advised to follow this guide: Migrating from V1 .","title":"Reusable property pane controls for the SharePoint Framework solutions"},{"location":"#library-versions","text":"Currently there are 3 active versions of the controls. Please, reference the table below to see what version to use in your project. Version SPFx minimal dependency Fluent UI (Office UI Fabric React) version SharePoint Version Comments v3 1.13.* 7.174.1 Online The most current, actively maintained version of the library. v2 1.11.0 6.214.0 Online The version deprecated and not actively maintained. We strongly recommend to update to SPFx 1.13.* and v3 of Controls. v1 1.3.0 5.131.0 On-Prem The version is maintained for SharePoint On-Prem 2016 and 2019 implementations. Be aware that the controls might not work in solutions you're building for on-premises. As for on-premises solutions version 1.1.0 will get used. Attention If you are using v3 of the Controls with SPFx 1.12.1 you will need to cast web part context to any to pass it to the controls.","title":"Library Versions"},{"location":"#getting-started","text":"","title":"Getting started"},{"location":"#installation","text":"To get started you have to install the following dependency to your project: @pnp/spfx-property-controls . Enter the following command to install the dependency to your project: npm install @pnp/spfx-property-controls --save --save-exact","title":"Installation"},{"location":"#configuration","text":"Note Since v1.7.0 the localized resource path will automatically be configured during the dependency installing. Once the package is installed, you will have to configure the resource file of the property controls to be used in your project. You can do this by opening the config/config.json and adding the following line to the localizedResources property: \"PropertyControlStrings\" : \"node_modules/@pnp/spfx-property-controls/lib/loc/{locale}.js\"","title":"Configuration"},{"location":"#telemetry","text":"All controls gather telemetry to verify the usage. Only the name of the control and related data gets captured. More information about the service that we are using for this can be found here: PnP Telemetry Proxy . Since version 1.17.0 it is possible to opt-out of the telemetry by adding the following code to your web part: import PnPTelemetry from \"@pnp/telemetry-js\" ; ... const telemetry = PnPTelemetry . getInstance (); telemetry . optOut ();","title":"Telemetry"},{"location":"#controls","text":"The following controls are currently available: PropertyFieldButton (Property pane Button) PropertyFieldCodeEditor (Property pane code editor) PropertyFieldCollectionData (Property pane collection data editor) PropertyFieldColorPicker (Property pane color picker) PropertyFieldColumnPicker (Property pane list column picker) PropertyFieldDateTimePicker (Property pane date and time selector) PropertyFieldFilePicker (Property pane file picker) PropertyFieldFolderPicker (Property pane folder picker) PropertyFieldGrid (Property pane Grid control) PropertyFieldGuid (Property pane GUID editor) PropertyFieldIconPicker (Property pane icon picker) PropertyFieldListPicker (Property pane list selector) PropertyFieldMessage (Property pane message) PropertyFieldMonacoEditor (Property pane Monaco Editor) PropertyFieldMultiSelect (Property pane multi select dropdown) PropertyFieldNumber (Property pane number editor) PropertyFieldOrder (Property pane ordered list editor) PropertyFieldPassword (Property pane password editor) PropertyFieldPeoplePicker (Property pane people / group selector) PropertyFieldRoleDefinitionPicker (Property pane role definition picker) PropertyFieldSearch (Property pane search box) PropertyFieldSitePicker (Property pane site selector) PropertyFieldSpinButton (Property pane spin button) PropertyFieldSpinner (Property pane spinner) PropertyFieldSwatchColorPicker (Property pane color selector) PropertyFieldTeamPicker (Property pane team selector) PropertyFieldTermPicker (Property pane managed metadata term selector) PropertyFieldEnterpriseTermPicker (Property pane managed metadata term selector for enterprise scenarios) PropertyFieldViewPicker (Property pane view selector) PropertyPaneMarkdownContent (Property pane markdown content) PropertyPanePropertyEditor (Property pane control that allows raw editing, export and import of webpart properties) PropertyPaneWebPartInformation (Property pane webpart information panel) The following controls are extended controls that show a callout next to the label PropertyFieldButtonWithCallout (Property button field with callout) PropertyFieldCheckboxWithCallout (Property checkbox field with callout) PropertyFieldChoiceGroupWithCallout (Property choice group field with callout) PropertyFieldDropdownWithCallout (Property dropdown field with callout) PropertyFieldLabelWithCallout (Property label field with callout) PropertyFieldLinkWithCallout (Property link field with callout) PropertyFieldSliderWithCallout (Property slider field with callout) PropertyFieldTextWithCallout (Property text field with callout) PropertyFieldToggleWithCallout (Property toggle field with callout)","title":"Controls"},{"location":"beta/","text":"Testing out a beta release \u00b6 All you need to do for testing out a beta release of @pnp/spfx-property-controls is to install the dependency as follows: npm install @pnp/spfx-property-controls@next --save Beta control documentation \u00b6 The control documentation is only live for public releases, not for beta versions. If you want to checkout the markdown files of all controls in the dev branch: beta documentation . Next Steps \u00b6 Once you installed the beta version, you can start using the controls in your solution. Go to the homepage to get an overview of all the available controls and the steps to get started: home .","title":"Beta testing"},{"location":"beta/#testing-out-a-beta-release","text":"All you need to do for testing out a beta release of @pnp/spfx-property-controls is to install the dependency as follows: npm install @pnp/spfx-property-controls@next --save","title":"Testing out a beta release"},{"location":"beta/#beta-control-documentation","text":"The control documentation is only live for public releases, not for beta versions. If you want to checkout the markdown files of all controls in the dev branch: beta documentation .","title":"Beta control documentation"},{"location":"beta/#next-steps","text":"Once you installed the beta version, you can start using the controls in your solution. Go to the homepage to get an overview of all the available controls and the steps to get started: home .","title":"Next Steps"},{"location":"getting-started/","text":"Getting started \u00b6 Installation \u00b6 To get started you have to install the following dependency to your project: @pnp/spfx-property-controls . Enter the following command to install the dependency to your project: npm install @pnp/spfx-property-controls --save --save-exact Configuration \u00b6 Once the package is installed, you will have to configure the resource file of the property controls to be used in your project. You can do this by opening the config/config.json and adding the following line to the localizedResources property: \"PropertyControlStrings\" : \"./node_modules/@pnp/spfx-property-controls/lib/loc/{locale}.js\" Next Steps \u00b6 Once you installed the dependency you can start using the controls in your solution. Go to the documentation homepage to get an overview of all the available controls: home .","title":"Getting started"},{"location":"getting-started/#getting-started","text":"","title":"Getting started"},{"location":"getting-started/#installation","text":"To get started you have to install the following dependency to your project: @pnp/spfx-property-controls . Enter the following command to install the dependency to your project: npm install @pnp/spfx-property-controls --save --save-exact","title":"Installation"},{"location":"getting-started/#configuration","text":"Once the package is installed, you will have to configure the resource file of the property controls to be used in your project. You can do this by opening the config/config.json and adding the following line to the localizedResources property: \"PropertyControlStrings\" : \"./node_modules/@pnp/spfx-property-controls/lib/loc/{locale}.js\"","title":"Configuration"},{"location":"getting-started/#next-steps","text":"Once you installed the dependency you can start using the controls in your solution. Go to the documentation homepage to get an overview of all the available controls: home .","title":"Next Steps"},{"location":"about/license/","text":"License MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"License"},{"location":"about/release-notes/","text":"Releases \u00b6 3.18.0 \u00b6 Enhancements \u00b6 SharePoint Framework v1.19.0 support 3.17.1 \u00b6 Fixes \u00b6 Fixes for Webpack 5: #621 3.17.0 \u00b6 New control(s) \u00b6 PropertyFieldButton : New Control PropertyFieldButton #613 PropertyFieldGrid : New Control PropertyFieldGrid #614 Enhancements \u00b6 fast-serve : ast-serve update to match the most recent changes. #606 PropertyFieldContentTypePicker : PropertyFieldContentTypePicker control #611 PropertyFieldFilePicker : add a delete button to the selected file #579 PropertyFieldFilePicker : Fix root site org asset library showing no items in file picker (https://github.com/pnp/sp-dev-fx-property-controls/pull/603) PropertyFieldFolderPicker : added siteAbsoluteUrl to FOlderPicker (https://github.com/pnp/sp-dev-fx-property-controls/pull/602) Fixes \u00b6 General Helper : toRelativeUrl returns proper relative url in case of root site (https://github.com/pnp/sp-dev-fx-property-controls/pull/609) Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Daniel Lind\u00e9n , Jake , Jo\u00e3o Mendes , Nishkalank Bezawada , ramonitor , Russell gove , Sergei Sergeev . 3.16.0 \u00b6 Enhancements \u00b6 PropertyFieldSitePicker : disabled property not implemented in UI #577 Fixes \u00b6 PropertyFieldMonacoEditor and PropertyFieldCodeEditor : fix text selection in code editor #590 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Luna Heyman , srpmtt . 3.15.1 \u00b6 Fixes \u00b6 PropertyFieldChoiceGroupWithCallout deletes properties #592 3.15.0 \u00b6 Enhancements \u00b6 SharePoint Framework v1.18.2 support Fixes \u00b6 Localization : Errors in en-gb loc file #582 Localization : Errors in german language #589 PropertyFieldFilePicker : fix Tiles view #562 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): andrew-lott , Clem S-K , Tom F. . 3.14.0 \u00b6 Enhancements \u00b6 PropertyFieldListPicker : Implemented functionality to select multiple base templates #568 fast-serve : Fast-serve updated to the latest version and serve warnings fixed. #579 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Chandani Prajapati , Sergei Sergeev . 3.13.0 \u00b6 Enhancements \u00b6 PropertyFieldCollectionData : add panelProps property to collection data #546 SharePoint Framework v1.17.1 support Fixes \u00b6 Italian localization updated #549 Fixed multiple typos #550 Swedish localization updated #553 PropertyPanePropertyEditor : crash when property undefined/null #552 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Chad Eiserloh , Gitwey , Jake Stanger , Luca3082 , Valeras Narbutas . 3.12.0 \u00b6 Enhancements \u00b6 PropertyFieldFilePicker : Site Tab - Adding scrolling for many libraries #525 SPListPickerService : add ContentTypes/Name to the query #521 Czech localization added #527 Fixes \u00b6 Documentations fix for PropertyPaneHelpers #536 ColorPicker : localization for Fluent UI ColorPicker #535 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Brian Krainer Jacobsen , Chad Eiserloh , krishna-vijas , Martin Zamazal . 3.11.0 \u00b6 Enhancements \u00b6 SharePoint Framework v1.16.0 support Fixes \u00b6 TermPicker : missed documentation for anchorId property #496 FilePicker : Operations not working for 100+ Items #497 FilePicker : File Sorting not working on file size properly #501 PropertyFieldMessage : documentation typos fix #504 FilePicker : Sorting on Large Libraries / Folders Must do Server-Side Sorting #503 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Chad Eiserloh , Chandani Prajapati , Hilton Giesenow . 3.10.0 \u00b6 Enhancements \u00b6 Arabic locale is missing #461 PropertyFieldTermPicker : anchorId support #491 Fixes \u00b6 FilePicker : Fixed an internal typo in the codebase #474 ListPicker : documentation updates #490 PropertyFieldCollectionData : Adding new translation for Field Issues label #486 FilePicker : Page Type icons not appearing in the Site Pages library view #475 FilePicker : Tiles are Missing for Site Pages #478 FilePicker : Sorting Does Not Work #487 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Chad Eiserloh , JeanNetryValere , Hilton Giesenow , nviolero , Paul Schaeflein . 3.9.0 \u00b6 Enhancements \u00b6 SharePoint Framework v1.15.2 support 3.8.0 \u00b6 New control(s) \u00b6 Localizations for en-gb #454 Enhancements \u00b6 PropertyFieldSitePicker : Site Picker search for any input string #386 fast-serve : bump support to 1.14.0 #386 PropertyFieldCollectionData : allow to conditionally disable specific field in the item #464 Fixes \u00b6 PropertyFieldListPicker : Remove debugger #455 PropertyFieldCollectionData : Add button is invisible on a root site #462 PropertyFieldCollectionData : fieldValidation for custom fields did not get called if no onGetErrorMessage had been defined #446 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Gautam Sheth , Jasey Waegebaert , IRRDC , Markus Langer , Milan Holemans , Peter Cox . 3.7.0 \u00b6 Enhancements \u00b6 PropertyFieldListPicker : ability to provide content type id #441 PropertyFieldColorPicker : provide preview of the current selected color #447 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Milan Holemans , Russell gove . 3.6.0 \u00b6 New control(s) \u00b6 PropertyFieldMonacoEditor : new control - Monaco editor #439 Enhancements \u00b6 SharePoint Framework v1.14.0 support Improved documentation Fixes \u00b6 PropertyFieldCollectionData : Add button is disabled when it should not be #436 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Chad Eiserloh , GuidoZam , Jo\u00e3o Mendes . 3.5.0 \u00b6 Fixes \u00b6 Multiple controls: Update imports to support controls in ACEs #431 3.4.0 \u00b6 Enhancements \u00b6 PropertyFieldFilePicker : ability to set default tab #412 PropertyFieldCollectionData : ability to use IconPicker for icon field #423 PropertyFieldFilePicker : Added a feature to allow external links / Added a feature to show the Site Pages in the Site tab #421 Fixes \u00b6 PropertyFieldSearch : documentation fix #417 FilePicker : cannot find library by its name in multilingual sites #389 PropertyFieldDateTimePicker : formatDate property doesn't apply to the textbox value in the property pane #388 PropertyFieldCollectionData : number input shows placeholder instead of 0 #379 PropertyFieldChoiceGroupWithCallout : iconProps not working #424 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): 19ahmed99 , Christian Frizell , GuidoZam . 3.3.0 \u00b6 Enhancements \u00b6 SharePoint Framework v1.13.* support PropertyPanePropertyEditor : Add translations for property editor control button and header #399 PropertyFieldCollectionData : Adds conditional column visibility #394 Include mystrings.d.ts in definition output #393 PropertyFieldCollectionData : onGetErrorMessage support for boolean, custom and color fields. #395 PropertyFieldCodeEditor : Added panelWidth property #404 PropertyFieldCollectionData : Allow falsey keys as dropdown options #397 PropertyFieldFilePicker : Add a handler to close a filepicker #401 Fixes \u00b6 PropertyPanePropertyEditor : Minor fix to allow PropertyEditor control to update properties when their current value is blank #384 PropertyFieldSitePicker : Some sites do not show up in Property Field Site Picker control #402 PropertyFieldOrder : Not working with array of objects #396 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): ellinge , M365Bass , Patrik Hellgren . 3.2.0 \u00b6 Enhancements \u00b6 PropertyFieldColorPicker : Add debounce property to color picker control #352 fast-serve : Add fast-serve support #370 Fixes \u00b6 PropertyFieldFilePicker : Stock images url is getting a 404 server error #364 PropertyFieldColumnPicker : Filter not working properly #356 PropertyFieldTextWithCallout : Fix TextWithCallout read-only in SPFx 1.12.1 #372 PropertyFieldFilePicker : React crash on large folders #371 PropertyFieldFilePicker : documentation formatting fix #368 PropertyFieldCollectionData : PropertyFieldCollectionData is not setting sortIdx on resulting collection when using Add and Save #369 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Ari Gunawan , Chrisrb05 , Gautam Sheth , Konrad K. , Mark Bice , Sergei Sergeev . 3.1.0 \u00b6 Enhancements \u00b6 SharePoint Framework v1.12.1 support PropertyFieldColumnPicker : Multiselect dropdown option #354 Fixes \u00b6 PropertyFieldSitePicker : Site Picker doesn't return sites with title starting from the typed string #355 Contributors \u00b6 Special thanks to our contributor: Sudharsan Kesavanarayanan . 3.0.0 \u00b6 Enhancements \u00b6 SharePoint Framework v1.12 support (Breaking change) FLuent UI v7 support 2.7.0 \u00b6 Enhancements \u00b6 PropertyFieldColorPicker : Add debounce property to color picker control #352 Fixes \u00b6 PropertyFieldFilePicker : Stock images url is getting a 404 server error #364 PropertyFieldColumnPicker : Filter not working properly #356 PropertyFieldFilePicker : React crash on large folders #371 PropertyFieldCollectionData : PropertyFieldCollectionData is not setting sortIdx on resulting collection when using Add and Save #369 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Chrisrb05 , Konrad K. , Mark Bice . 2.6.0 \u00b6 Fixes \u00b6 PropertyFieldSitePicker : Site Picker doesn't return sites with title starting from the typed string #355 2.5.0 \u00b6 New control(s) \u00b6 PropertyFieldEditableComboBox : new editable combobox control based on Fluent ComboBox. #339 PropertyFieldColumnPicker : new column picker control #343 Fixes \u00b6 PropertyFieldNumber : The property field number is loosing decimal value on futher edits of the properties. #344 PropertyFieldCollectionData : validation error persists after item deletion #341 FolderPicker : Correct FolderPicker link alignment Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Mike Homol , Sudharsan Kesavanarayanan , Victor Pollet . 2.4.0 \u00b6 Enhancements \u00b6 PropertyFieldCodeEditor : Added an options property to the CodeEditor. Allows setting of any of the Ace Editor options outlined here #322 PropertyFieldCollectionData : Support for a Color Picker control #326 Support for nested web part properties (example: targetProperty : 'a.b.c') in all controls PropertyFieldSitePicker : display site URL #330 PropertyPanePropertyEditor : Support of dynamic properties ( DynamicData ) #331 Fixes \u00b6 Documentation fix for PropertyFIeldPassword : value is of type string , not number . #324 PropertyFieldCollectionData : Dropdown validation not working as expected #321 PropertyFieldPeoplePicker : targetProperty is not updated properly when using nested/complex attributes #221 PropertyFieldSitePicker : if a single subsite is selected all others are selected as well #329 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Corey Roth , kflogdev . 2.3.0 \u00b6 New control(s) \u00b6 PropertyFieldIconPicker : new icon picker control #319 Enhancements \u00b6 PropertyFieldTermPicker : two properties: areTermsSelectable and areTermsHidden #313 PropertyFieldListPicker : ability to return Title and relative URL of the list #281 Fixes \u00b6 Documentation fix: spelling fix on index.md #320 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Corey Roth , Gautam Sheth , Jonathan Cardy , Konrad K. . 2.2.0 \u00b6 New control(s) \u00b6 PropertyFieldTeamPicker : new Teams picker control #303 Contributors \u00b6 Special thanks to our contributor: Jo\u00e3o Mendes . 2.1.1 \u00b6 Fixes \u00b6 Localizations fix #311 2.1.0 \u00b6 Enhancements \u00b6 Auto-generated localizations PropertyFieldNumber : ability to set float values #299 PropertyFieldGuid : new GUID editor control #300 FolderExplorerService : support special characters if folder name #305 FilePicker : Stock Images support #306 Fixes \u00b6 Documentation: Fixed formatting of list of Controls #298 PropertyFieldNumber : gives \"Maximum update depth exceeded\" error #282 Documentation fix: PropertyFieldCollectionData - required custom field should call onUpdate before onError to correctly display required error message #284 PropertyFieldNumber : Improper handling of falsey minValue or maxValue #150 PropertyFieldFilePicker : Org Assets library is not displayed #295 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Anoop Tatti , Gautam Sheth , Jim Love . 2.0.0 \u00b6 New control(s) \u00b6 Office UI Fabric version 6 support 1.20.0 \u00b6 New control(s) \u00b6 PropertyFieldRoleDefinitionPicker : new Role Definition Picker control #268 PropertyFieldFolderPicker : new Folder Picker control #272 PropertyPaneMarkdownContent : new Markdown Content control #162 Enhancements \u00b6 PropertyFieldCollectionData : Dynamic options #260 Fixes \u00b6 Documentation fix: Link to PropertyFieldListPicker control points to PropertyFieldMessage #269 Readme fix: fixed link to project guides #271 PropertyFieldViewPicker : Unable to load Views from another site #263 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Gautam Sheth , Hugo Bernier , Lars Fernhomberg . 1.19.0 \u00b6 New control(s) \u00b6 PropertyFieldMessage : new Message control #248 PropertyFieldSearch : new Search control #248 PropertyFieldSpinner : new Spinner control #248 PropertyFieldFilePicker : new File Picker control #265 Enhancements \u00b6 PropertyFieldDateTimePicker : Add ability to hide Date and show only Time field #195 PropertyFieldCodeEditor : Format code #165 Fixes \u00b6 Documentation fix for PropertyFieldDateTimePicker : The link for OnGetErrorMessage documentation is broken in this page Documentation: Added PnPTelemetry import example #259 PropertyPanePropertyEditor :Fix for dynamic data properties #200 PropertyFieldPeoplePicker : People Picker doesn't search for groups #239 Controls with callout: control's label should be disabled if the disabled prop is set to true Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Lars Fernhomberg , Jo\u00e3o Mendes , Nanddeep Nachan , Ram , Gautam Sheth . 1.18.0 \u00b6 New control(s) \u00b6 PropertyFieldViewPicker : View picker control #230 PropertyFieldPassword : password editor control #237 Fixes \u00b6 PropertyFieldSitePicker documentation title fix #229 PropertyFieldSitePicker : doesn't work at root site #231 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Ari Gunawan , Gautam Sheth , Hugo Bernier , Jo\u00e3o Mendes . 1.17.0 \u00b6 New control(s) \u00b6 PropertyFieldSitePicker : New control that allows the user to select one or multiple sites from the SharePoint Search API. Similar to the SitePicker in the official \"News\" Web Part #208 , #215 Telemetry : Provide a way to opt-out for PnP Telemetry #222 PropertyPaneHelpers : Allows to show a spinner while loading resources Enhancements \u00b6 Add norwegian language file #125 PropertyFieldSliderWithCallout : debounce property added #209 Replace full lodash with only used functions. #213 Fixes \u00b6 Documentation update for PropertyFieldCollectionData #196 PropertyFieldOrder : When items is an empty array, component renders the text '0' #152 Documentation update for PropertyFieldCodeEditor #194 PropertyFieldTermPicker : Tags icon styling issue on IE11 #193 PropertyPanePropertyEditor : Unable to download json export #210 PropertyFieldCollectionData : Fix Data Grid Dragging Issues #217 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Antonio Monserrate , rocketboy1908 , Piotr Siatka , Ben , Niels S\u00f6th , araver . 1.16.0 \u00b6 Enhancements \u00b6 PropertyFieldCollectionData : Add the ability for field validation to the custom fields #187 PropertyFieldCollectionData : Ability to provide custom labels for the save and cancel buttons #187 PropertyFieldListPicker : add ability to filter the control via OData #184 Fixes \u00b6 Documentation getting started links fixed #191 Fix for callout controls missing icon since SPFx 1.8.2 #182 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): araver , Chad Eiserloh . 1.15.0 \u00b6 Enhancements \u00b6 PropertyFieldCollectionData : Add a property to be able to set a custom class on the collection data panel #180 PropertyFieldListPicker : Added listsToExclude property to the control #176 PropertyFieldDateTimePicker : Add ability to hide the date and time labels #77 Fixes \u00b6 Callout icons missing with SPFx 1.8.2 web part #178 PropertyFieldTextWithCallout : still persists property value when error occurred #172 PropertyFieldNumber : not handling changes correctly #170 PropertyFieldChoiceGroupWithCallout : iconProps not working #154 PropertyFieldDropdownWithCallout : Options of type Divider and Header are ignored #145 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Alex Terentiev , Ward Wilmsen . 1.14.1 \u00b6 Fixes \u00b6 TaxonomyPicker : Terms are sorted incorrectly under the wrong parent #153 EnterpriseTermPicker : Terms are sorted incorrectly under the wrong parent #156 1.14.0 \u00b6 New control(s) \u00b6 PropertyFieldEnterpriseTermPicker : New control to load term sets by using @pnp/pnpjs #70 #120 Enhancements \u00b6 PropertyFieldCollectionData : Setting to specify if item creation is enabled/disabled #130 PropertyFieldCollectionData : Setting to specify if item deletion is enabled/disabled #131 PropertyFieldCollectionData : Implemented a property to specify if field editing is enabled/disabled #132 Added Chinese localization #137 PropertyFieldColorPicker : Added a isHidden property #138 PropertyFieldCollectionData : return the item in the custom renderer #147 Added Russian localization #142 Fixes \u00b6 PropertyFieldTermPicker : fix sort order with lowercased terms #133 PropertyFieldCollectionData : Bug with onCustomRender() #135 PropertyFieldCollectionData : Fixed bug with dropdown rendering in IE #136 PropertyFieldNumber : Min/max number check fix + localization label fixes #141 PropertyFieldTermPicker : Fix layout issues in IE11 #143 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Simon-Pierre Plante , Yannick Plenevaux , Alex Terentiev , Roger Zhang . 1.13.1 \u00b6 Fixes \u00b6 PropertyFieldCollectionData : Fixed issue for loading the control in the local workbench #128 1.13.0 \u00b6 Enhancements \u00b6 Updated the office-ui-fabric-react to the same version as in SPFx 1.7.0 #105 PropertyFieldPeoplePicker : Ability to select only from a specific site #9 PropertyFieldCollectionData : Added support for custom field rendering #122 PropertyFieldCollectionData : Added the functionality to sort the items in the collection #123 Fixes \u00b6 PropertyFieldDateTimePicker : Fix for the hours dropdown not showing values #112 PropertyFieldCollectionData : Issue with debounce validation overriding the inserted values #113 PropertyPaneWebPartInformation : Remove redundant 'Description' label #119 PropertyFieldCodeEditor : Handle initial value after updating properties #121 Contributors \u00b6 Special thanks to our contributor: Erwin van Hunen . 1.12.0 \u00b6 New control(s) \u00b6 PropertyPaneWebPartInformation : New control to show more information about the current web part #108 PropertyPanePropertyEditor : New control that allows you to export/import property pane settings #114 Enhancements \u00b6 Dutch localization added #82 French localization added #84 PropertyFieldCollectionData : Allow the user to specify a deferred validation time for each field #98 PropertyFieldCollectionData : added a onRenderOption option to allow custom option rendering #102 PropertyFieldNumber : Introduced the aria label #104 Hide callout from the controls with callout if no message is provided #107 PropertyFieldListPicker : Add the ability to refresh target site while pane is open #109 Fixes \u00b6 PropertyFieldCollectionData : Fixed catastrophic backtracking regex issue for URL validation #99 Contributors \u00b6 Special thanks to our contributors (in alphabetical order): Paul Bullock , Junle Li , PooLP , Erwin van Hunen . 1.11.0 \u00b6 Enhancements \u00b6 PropertyFieldCollectionData : Show error messages #96 Fixes \u00b6 Fixes based on SonarCloud analysis 1.10.0 \u00b6 Enhancements \u00b6 PropertyFieldPeoplePicker : Security groups come back with EntityType of FormsRole rather then SecGroup #93 PropertyFieldCollectionData : Add the current row's information in the onGetErrorMessage callback #92 Fixes \u00b6 PropertyFieldPeoplePicker : No suggestions returned when using Security Groups, Multi-select and NO duplicates. #90 PropertyFieldTermPicker : Terms which are set as unavailable for tagging are still selectable #94 1.9.0 \u00b6 Enhancements \u00b6 PropertyFieldCollectionData : Added custom validation for string , number , icon , and URL field types #74 PropertyFieldCollectionData : Add an option to specify a default value #86 PropertyFieldCollectionData : override placeholder for the inputs #87 PropertyFieldCollectionData : Hide save button when \"Add and save\" is shown #88 Fixes \u00b6 PropertyFieldMultiSelect : fixed an issue where the control didn't retain the preselected values when dropdown options were provided async #85 PropertyFieldOrder : fixed an issue where items where provided async #81 1.8.0 \u00b6 Enhancements \u00b6 New telemetry approach which allows you to use Application Insights instance #79 PropertyFieldListPicker : add optional property for target site #21 Contributors \u00b6 Special thanks to our contributor: Joel Rodrigues . 1.7.0 \u00b6 Enhancements \u00b6 Add npm postinstall script to automatically add the localization config #64 Add a description to the PropertyFieldCollectionData panel #67 Added a font field type for the PropertyFieldCollectionData control #66 Added a URL field type for the PropertyFieldCollectionData control #72 Field validation implemented to enable/disable save buttons in PropertyFieldCollectionData control. Related to previous enhancement. Added properties to the TaxonomyPicker to specify which terms are disabled/not-selectable #69 Fixes \u00b6 PropertyFieldPeoplePicker validation error does not clear as expected #68 1.6.0 \u00b6 New control(s) \u00b6 PropertyFieldCollectionData was added #58 PropertyFieldOrder was added #19 PropertyFieldSwatchColorPicker was added #55 Enhancements \u00b6 Allow the term set to be selectable in the PropertyFieldTermPicker #60 Fixes \u00b6 Fix for PropertyFieldColorPicker Palette Icon alignment issue in IE11 #56 1.5.1 \u00b6 Enhancements \u00b6 Color Pickers optionally return Color Objects #55 Fixes \u00b6 Undefined web part context fixed in the PropertyFieldPeoplePicker #47 Taxonomy service fix for working with term set GUID #48 Added focus intercepting input for Full style #52 1.5.0 \u00b6 Enhancements \u00b6 PropertyFieldListPicker control extended with select all lists option #8 PropertyFieldTermPicker control extended with the ability to search terms by typing in the textbox #11 #42 #44 #45 SPTermStorePickerService has a new interface which contains only the required properties 1.4.2 \u00b6 Enhancements \u00b6 Introduced the onGetErrorMessage property for the PropertyFieldNumber field control ( #36 ) 1.4.1 \u00b6 Enhancements \u00b6 Optimized telemetry so that it only pushes control data Fixes \u00b6 Fixes for issue #30 PropertyFieldPeoplePicker Validation does not work as expected #33 1.4.0 \u00b6 New control(s) \u00b6 PropertyFieldMultiSelect got added PropertyFieldNumber got added Enhancements \u00b6 PropertyFieldTermPicker new introduced property to specify to show or hide the term store name: hideTermStoreName . PropertyFieldTermPicker updated process when terms were unselected based on ID instead of path. 1.3.0 \u00b6 New control(s) \u00b6 PropertyFieldCodeEditor got added Enhancements \u00b6 PropertyFieldTermPicker improved with save and cancel button PropertyFieldTermPicker improved with onClick event on input field 1.2.0 \u00b6 Enhancements \u00b6 Added the option to the people picker to allow you to specify single or multi-selection Fixes \u00b6 People picker accidentally picked the wrong person Improved telemetry with some object checks 1.1.1 \u00b6 Enhancements \u00b6 Removed operation name from telemetry 1.1.0 \u00b6 New control(s) \u00b6 Added the PropertyFieldButtonWithCallout control Added the PropertyFieldCheckboxWithCallout control Added the PropertyFieldChoiceGroupWithCallout control Added the PropertyFieldWithCallout control Added the PropertyLabelWithCallout control Added the PropertyLinkWithCallout control Added the PropertySliderWithCallout control Enhancements \u00b6 Telemetry added Term picker control has now the option to scope on term set or group 1.0.0 \u00b6 New control(s) \u00b6 Added the PropertyFieldDropdownWithCallout control Added the PropertyFieldTextWithCallout control Added the PropertyFieldToggleWithCallout control 1.0.0-beta.3 \u00b6 Enhancements \u00b6 Added firstDayOfWeek option to the date picker control 1.0.0-beta.2 \u00b6 New control(s) \u00b6 Initial release","title":"Release notes"},{"location":"about/release-notes/#releases","text":"","title":"Releases"},{"location":"about/release-notes/#3180","text":"","title":"3.18.0"},{"location":"about/release-notes/#enhancements","text":"SharePoint Framework v1.19.0 support","title":"Enhancements"},{"location":"about/release-notes/#3171","text":"","title":"3.17.1"},{"location":"about/release-notes/#fixes","text":"Fixes for Webpack 5: #621","title":"Fixes"},{"location":"about/release-notes/#3170","text":"","title":"3.17.0"},{"location":"about/release-notes/#new-controls","text":"PropertyFieldButton : New Control PropertyFieldButton #613 PropertyFieldGrid : New Control PropertyFieldGrid #614","title":"New control(s)"},{"location":"about/release-notes/#enhancements_1","text":"fast-serve : ast-serve update to match the most recent changes. #606 PropertyFieldContentTypePicker : PropertyFieldContentTypePicker control #611 PropertyFieldFilePicker : add a delete button to the selected file #579 PropertyFieldFilePicker : Fix root site org asset library showing no items in file picker (https://github.com/pnp/sp-dev-fx-property-controls/pull/603) PropertyFieldFolderPicker : added siteAbsoluteUrl to FOlderPicker (https://github.com/pnp/sp-dev-fx-property-controls/pull/602)","title":"Enhancements"},{"location":"about/release-notes/#fixes_1","text":"General Helper : toRelativeUrl returns proper relative url in case of root site (https://github.com/pnp/sp-dev-fx-property-controls/pull/609)","title":"Fixes"},{"location":"about/release-notes/#contributors","text":"Special thanks to our contributors (in alphabetical order): Daniel Lind\u00e9n , Jake , Jo\u00e3o Mendes , Nishkalank Bezawada , ramonitor , Russell gove , Sergei Sergeev .","title":"Contributors"},{"location":"about/release-notes/#3160","text":"","title":"3.16.0"},{"location":"about/release-notes/#enhancements_2","text":"PropertyFieldSitePicker : disabled property not implemented in UI #577","title":"Enhancements"},{"location":"about/release-notes/#fixes_2","text":"PropertyFieldMonacoEditor and PropertyFieldCodeEditor : fix text selection in code editor #590","title":"Fixes"},{"location":"about/release-notes/#contributors_1","text":"Special thanks to our contributors (in alphabetical order): Luna Heyman , srpmtt .","title":"Contributors"},{"location":"about/release-notes/#3151","text":"","title":"3.15.1"},{"location":"about/release-notes/#fixes_3","text":"PropertyFieldChoiceGroupWithCallout deletes properties #592","title":"Fixes"},{"location":"about/release-notes/#3150","text":"","title":"3.15.0"},{"location":"about/release-notes/#enhancements_3","text":"SharePoint Framework v1.18.2 support","title":"Enhancements"},{"location":"about/release-notes/#fixes_4","text":"Localization : Errors in en-gb loc file #582 Localization : Errors in german language #589 PropertyFieldFilePicker : fix Tiles view #562","title":"Fixes"},{"location":"about/release-notes/#contributors_2","text":"Special thanks to our contributors (in alphabetical order): andrew-lott , Clem S-K , Tom F. .","title":"Contributors"},{"location":"about/release-notes/#3140","text":"","title":"3.14.0"},{"location":"about/release-notes/#enhancements_4","text":"PropertyFieldListPicker : Implemented functionality to select multiple base templates #568 fast-serve : Fast-serve updated to the latest version and serve warnings fixed. #579","title":"Enhancements"},{"location":"about/release-notes/#contributors_3","text":"Special thanks to our contributors (in alphabetical order): Chandani Prajapati , Sergei Sergeev .","title":"Contributors"},{"location":"about/release-notes/#3130","text":"","title":"3.13.0"},{"location":"about/release-notes/#enhancements_5","text":"PropertyFieldCollectionData : add panelProps property to collection data #546 SharePoint Framework v1.17.1 support","title":"Enhancements"},{"location":"about/release-notes/#fixes_5","text":"Italian localization updated #549 Fixed multiple typos #550 Swedish localization updated #553 PropertyPanePropertyEditor : crash when property undefined/null #552","title":"Fixes"},{"location":"about/release-notes/#contributors_4","text":"Special thanks to our contributors (in alphabetical order): Chad Eiserloh , Gitwey , Jake Stanger , Luca3082 , Valeras Narbutas .","title":"Contributors"},{"location":"about/release-notes/#3120","text":"","title":"3.12.0"},{"location":"about/release-notes/#enhancements_6","text":"PropertyFieldFilePicker : Site Tab - Adding scrolling for many libraries #525 SPListPickerService : add ContentTypes/Name to the query #521 Czech localization added #527","title":"Enhancements"},{"location":"about/release-notes/#fixes_6","text":"Documentations fix for PropertyPaneHelpers #536 ColorPicker : localization for Fluent UI ColorPicker #535","title":"Fixes"},{"location":"about/release-notes/#contributors_5","text":"Special thanks to our contributors (in alphabetical order): Brian Krainer Jacobsen , Chad Eiserloh , krishna-vijas , Martin Zamazal .","title":"Contributors"},{"location":"about/release-notes/#3110","text":"","title":"3.11.0"},{"location":"about/release-notes/#enhancements_7","text":"SharePoint Framework v1.16.0 support","title":"Enhancements"},{"location":"about/release-notes/#fixes_7","text":"TermPicker : missed documentation for anchorId property #496 FilePicker : Operations not working for 100+ Items #497 FilePicker : File Sorting not working on file size properly #501 PropertyFieldMessage : documentation typos fix #504 FilePicker : Sorting on Large Libraries / Folders Must do Server-Side Sorting #503","title":"Fixes"},{"location":"about/release-notes/#contributors_6","text":"Special thanks to our contributors (in alphabetical order): Chad Eiserloh , Chandani Prajapati , Hilton Giesenow .","title":"Contributors"},{"location":"about/release-notes/#3100","text":"","title":"3.10.0"},{"location":"about/release-notes/#enhancements_8","text":"Arabic locale is missing #461 PropertyFieldTermPicker : anchorId support #491","title":"Enhancements"},{"location":"about/release-notes/#fixes_8","text":"FilePicker : Fixed an internal typo in the codebase #474 ListPicker : documentation updates #490 PropertyFieldCollectionData : Adding new translation for Field Issues label #486 FilePicker : Page Type icons not appearing in the Site Pages library view #475 FilePicker : Tiles are Missing for Site Pages #478 FilePicker : Sorting Does Not Work #487","title":"Fixes"},{"location":"about/release-notes/#contributors_7","text":"Special thanks to our contributors (in alphabetical order): Chad Eiserloh , JeanNetryValere , Hilton Giesenow , nviolero , Paul Schaeflein .","title":"Contributors"},{"location":"about/release-notes/#390","text":"","title":"3.9.0"},{"location":"about/release-notes/#enhancements_9","text":"SharePoint Framework v1.15.2 support","title":"Enhancements"},{"location":"about/release-notes/#380","text":"","title":"3.8.0"},{"location":"about/release-notes/#new-controls_1","text":"Localizations for en-gb #454","title":"New control(s)"},{"location":"about/release-notes/#enhancements_10","text":"PropertyFieldSitePicker : Site Picker search for any input string #386 fast-serve : bump support to 1.14.0 #386 PropertyFieldCollectionData : allow to conditionally disable specific field in the item #464","title":"Enhancements"},{"location":"about/release-notes/#fixes_9","text":"PropertyFieldListPicker : Remove debugger #455 PropertyFieldCollectionData : Add button is invisible on a root site #462 PropertyFieldCollectionData : fieldValidation for custom fields did not get called if no onGetErrorMessage had been defined #446","title":"Fixes"},{"location":"about/release-notes/#contributors_8","text":"Special thanks to our contributors (in alphabetical order): Gautam Sheth , Jasey Waegebaert , IRRDC , Markus Langer , Milan Holemans , Peter Cox .","title":"Contributors"},{"location":"about/release-notes/#370","text":"","title":"3.7.0"},{"location":"about/release-notes/#enhancements_11","text":"PropertyFieldListPicker : ability to provide content type id #441 PropertyFieldColorPicker : provide preview of the current selected color #447","title":"Enhancements"},{"location":"about/release-notes/#contributors_9","text":"Special thanks to our contributors (in alphabetical order): Milan Holemans , Russell gove .","title":"Contributors"},{"location":"about/release-notes/#360","text":"","title":"3.6.0"},{"location":"about/release-notes/#new-controls_2","text":"PropertyFieldMonacoEditor : new control - Monaco editor #439","title":"New control(s)"},{"location":"about/release-notes/#enhancements_12","text":"SharePoint Framework v1.14.0 support Improved documentation","title":"Enhancements"},{"location":"about/release-notes/#fixes_10","text":"PropertyFieldCollectionData : Add button is disabled when it should not be #436","title":"Fixes"},{"location":"about/release-notes/#contributors_10","text":"Special thanks to our contributors (in alphabetical order): Chad Eiserloh , GuidoZam , Jo\u00e3o Mendes .","title":"Contributors"},{"location":"about/release-notes/#350","text":"","title":"3.5.0"},{"location":"about/release-notes/#fixes_11","text":"Multiple controls: Update imports to support controls in ACEs #431","title":"Fixes"},{"location":"about/release-notes/#340","text":"","title":"3.4.0"},{"location":"about/release-notes/#enhancements_13","text":"PropertyFieldFilePicker : ability to set default tab #412 PropertyFieldCollectionData : ability to use IconPicker for icon field #423 PropertyFieldFilePicker : Added a feature to allow external links / Added a feature to show the Site Pages in the Site tab #421","title":"Enhancements"},{"location":"about/release-notes/#fixes_12","text":"PropertyFieldSearch : documentation fix #417 FilePicker : cannot find library by its name in multilingual sites #389 PropertyFieldDateTimePicker : formatDate property doesn't apply to the textbox value in the property pane #388 PropertyFieldCollectionData : number input shows placeholder instead of 0 #379 PropertyFieldChoiceGroupWithCallout : iconProps not working #424","title":"Fixes"},{"location":"about/release-notes/#contributors_11","text":"Special thanks to our contributors (in alphabetical order): 19ahmed99 , Christian Frizell , GuidoZam .","title":"Contributors"},{"location":"about/release-notes/#330","text":"","title":"3.3.0"},{"location":"about/release-notes/#enhancements_14","text":"SharePoint Framework v1.13.* support PropertyPanePropertyEditor : Add translations for property editor control button and header #399 PropertyFieldCollectionData : Adds conditional column visibility #394 Include mystrings.d.ts in definition output #393 PropertyFieldCollectionData : onGetErrorMessage support for boolean, custom and color fields. #395 PropertyFieldCodeEditor : Added panelWidth property #404 PropertyFieldCollectionData : Allow falsey keys as dropdown options #397 PropertyFieldFilePicker : Add a handler to close a filepicker #401","title":"Enhancements"},{"location":"about/release-notes/#fixes_13","text":"PropertyPanePropertyEditor : Minor fix to allow PropertyEditor control to update properties when their current value is blank #384 PropertyFieldSitePicker : Some sites do not show up in Property Field Site Picker control #402 PropertyFieldOrder : Not working with array of objects #396","title":"Fixes"},{"location":"about/release-notes/#contributors_12","text":"Special thanks to our contributors (in alphabetical order): ellinge , M365Bass , Patrik Hellgren .","title":"Contributors"},{"location":"about/release-notes/#320","text":"","title":"3.2.0"},{"location":"about/release-notes/#enhancements_15","text":"PropertyFieldColorPicker : Add debounce property to color picker control #352 fast-serve : Add fast-serve support #370","title":"Enhancements"},{"location":"about/release-notes/#fixes_14","text":"PropertyFieldFilePicker : Stock images url is getting a 404 server error #364 PropertyFieldColumnPicker : Filter not working properly #356 PropertyFieldTextWithCallout : Fix TextWithCallout read-only in SPFx 1.12.1 #372 PropertyFieldFilePicker : React crash on large folders #371 PropertyFieldFilePicker : documentation formatting fix #368 PropertyFieldCollectionData : PropertyFieldCollectionData is not setting sortIdx on resulting collection when using Add and Save #369","title":"Fixes"},{"location":"about/release-notes/#contributors_13","text":"Special thanks to our contributors (in alphabetical order): Ari Gunawan , Chrisrb05 , Gautam Sheth , Konrad K. , Mark Bice , Sergei Sergeev .","title":"Contributors"},{"location":"about/release-notes/#310","text":"","title":"3.1.0"},{"location":"about/release-notes/#enhancements_16","text":"SharePoint Framework v1.12.1 support PropertyFieldColumnPicker : Multiselect dropdown option #354","title":"Enhancements"},{"location":"about/release-notes/#fixes_15","text":"PropertyFieldSitePicker : Site Picker doesn't return sites with title starting from the typed string #355","title":"Fixes"},{"location":"about/release-notes/#contributors_14","text":"Special thanks to our contributor: Sudharsan Kesavanarayanan .","title":"Contributors"},{"location":"about/release-notes/#300","text":"","title":"3.0.0"},{"location":"about/release-notes/#enhancements_17","text":"SharePoint Framework v1.12 support (Breaking change) FLuent UI v7 support","title":"Enhancements"},{"location":"about/release-notes/#270","text":"","title":"2.7.0"},{"location":"about/release-notes/#enhancements_18","text":"PropertyFieldColorPicker : Add debounce property to color picker control #352","title":"Enhancements"},{"location":"about/release-notes/#fixes_16","text":"PropertyFieldFilePicker : Stock images url is getting a 404 server error #364 PropertyFieldColumnPicker : Filter not working properly #356 PropertyFieldFilePicker : React crash on large folders #371 PropertyFieldCollectionData : PropertyFieldCollectionData is not setting sortIdx on resulting collection when using Add and Save #369","title":"Fixes"},{"location":"about/release-notes/#contributors_15","text":"Special thanks to our contributors (in alphabetical order): Chrisrb05 , Konrad K. , Mark Bice .","title":"Contributors"},{"location":"about/release-notes/#260","text":"","title":"2.6.0"},{"location":"about/release-notes/#fixes_17","text":"PropertyFieldSitePicker : Site Picker doesn't return sites with title starting from the typed string #355","title":"Fixes"},{"location":"about/release-notes/#250","text":"","title":"2.5.0"},{"location":"about/release-notes/#new-controls_3","text":"PropertyFieldEditableComboBox : new editable combobox control based on Fluent ComboBox. #339 PropertyFieldColumnPicker : new column picker control #343","title":"New control(s)"},{"location":"about/release-notes/#fixes_18","text":"PropertyFieldNumber : The property field number is loosing decimal value on futher edits of the properties. #344 PropertyFieldCollectionData : validation error persists after item deletion #341 FolderPicker : Correct FolderPicker link alignment","title":"Fixes"},{"location":"about/release-notes/#contributors_16","text":"Special thanks to our contributors (in alphabetical order): Mike Homol , Sudharsan Kesavanarayanan , Victor Pollet .","title":"Contributors"},{"location":"about/release-notes/#240","text":"","title":"2.4.0"},{"location":"about/release-notes/#enhancements_19","text":"PropertyFieldCodeEditor : Added an options property to the CodeEditor. Allows setting of any of the Ace Editor options outlined here #322 PropertyFieldCollectionData : Support for a Color Picker control #326 Support for nested web part properties (example: targetProperty : 'a.b.c') in all controls PropertyFieldSitePicker : display site URL #330 PropertyPanePropertyEditor : Support of dynamic properties ( DynamicData ) #331","title":"Enhancements"},{"location":"about/release-notes/#fixes_19","text":"Documentation fix for PropertyFIeldPassword : value is of type string , not number . #324 PropertyFieldCollectionData : Dropdown validation not working as expected #321 PropertyFieldPeoplePicker : targetProperty is not updated properly when using nested/complex attributes #221 PropertyFieldSitePicker : if a single subsite is selected all others are selected as well #329","title":"Fixes"},{"location":"about/release-notes/#contributors_17","text":"Special thanks to our contributors (in alphabetical order): Corey Roth , kflogdev .","title":"Contributors"},{"location":"about/release-notes/#230","text":"","title":"2.3.0"},{"location":"about/release-notes/#new-controls_4","text":"PropertyFieldIconPicker : new icon picker control #319","title":"New control(s)"},{"location":"about/release-notes/#enhancements_20","text":"PropertyFieldTermPicker : two properties: areTermsSelectable and areTermsHidden #313 PropertyFieldListPicker : ability to return Title and relative URL of the list #281","title":"Enhancements"},{"location":"about/release-notes/#fixes_20","text":"Documentation fix: spelling fix on index.md #320","title":"Fixes"},{"location":"about/release-notes/#contributors_18","text":"Special thanks to our contributors (in alphabetical order): Corey Roth , Gautam Sheth , Jonathan Cardy , Konrad K. .","title":"Contributors"},{"location":"about/release-notes/#220","text":"","title":"2.2.0"},{"location":"about/release-notes/#new-controls_5","text":"PropertyFieldTeamPicker : new Teams picker control #303","title":"New control(s)"},{"location":"about/release-notes/#contributors_19","text":"Special thanks to our contributor: Jo\u00e3o Mendes .","title":"Contributors"},{"location":"about/release-notes/#211","text":"","title":"2.1.1"},{"location":"about/release-notes/#fixes_21","text":"Localizations fix #311","title":"Fixes"},{"location":"about/release-notes/#210","text":"","title":"2.1.0"},{"location":"about/release-notes/#enhancements_21","text":"Auto-generated localizations PropertyFieldNumber : ability to set float values #299 PropertyFieldGuid : new GUID editor control #300 FolderExplorerService : support special characters if folder name #305 FilePicker : Stock Images support #306","title":"Enhancements"},{"location":"about/release-notes/#fixes_22","text":"Documentation: Fixed formatting of list of Controls #298 PropertyFieldNumber : gives \"Maximum update depth exceeded\" error #282 Documentation fix: PropertyFieldCollectionData - required custom field should call onUpdate before onError to correctly display required error message #284 PropertyFieldNumber : Improper handling of falsey minValue or maxValue #150 PropertyFieldFilePicker : Org Assets library is not displayed #295","title":"Fixes"},{"location":"about/release-notes/#contributors_20","text":"Special thanks to our contributors (in alphabetical order): Anoop Tatti , Gautam Sheth , Jim Love .","title":"Contributors"},{"location":"about/release-notes/#200","text":"","title":"2.0.0"},{"location":"about/release-notes/#new-controls_6","text":"Office UI Fabric version 6 support","title":"New control(s)"},{"location":"about/release-notes/#1200","text":"","title":"1.20.0"},{"location":"about/release-notes/#new-controls_7","text":"PropertyFieldRoleDefinitionPicker : new Role Definition Picker control #268 PropertyFieldFolderPicker : new Folder Picker control #272 PropertyPaneMarkdownContent : new Markdown Content control #162","title":"New control(s)"},{"location":"about/release-notes/#enhancements_22","text":"PropertyFieldCollectionData : Dynamic options #260","title":"Enhancements"},{"location":"about/release-notes/#fixes_23","text":"Documentation fix: Link to PropertyFieldListPicker control points to PropertyFieldMessage #269 Readme fix: fixed link to project guides #271 PropertyFieldViewPicker : Unable to load Views from another site #263","title":"Fixes"},{"location":"about/release-notes/#contributors_21","text":"Special thanks to our contributors (in alphabetical order): Gautam Sheth , Hugo Bernier , Lars Fernhomberg .","title":"Contributors"},{"location":"about/release-notes/#1190","text":"","title":"1.19.0"},{"location":"about/release-notes/#new-controls_8","text":"PropertyFieldMessage : new Message control #248 PropertyFieldSearch : new Search control #248 PropertyFieldSpinner : new Spinner control #248 PropertyFieldFilePicker : new File Picker control #265","title":"New control(s)"},{"location":"about/release-notes/#enhancements_23","text":"PropertyFieldDateTimePicker : Add ability to hide Date and show only Time field #195 PropertyFieldCodeEditor : Format code #165","title":"Enhancements"},{"location":"about/release-notes/#fixes_24","text":"Documentation fix for PropertyFieldDateTimePicker : The link for OnGetErrorMessage documentation is broken in this page Documentation: Added PnPTelemetry import example #259 PropertyPanePropertyEditor :Fix for dynamic data properties #200 PropertyFieldPeoplePicker : People Picker doesn't search for groups #239 Controls with callout: control's label should be disabled if the disabled prop is set to true","title":"Fixes"},{"location":"about/release-notes/#contributors_22","text":"Special thanks to our contributors (in alphabetical order): Lars Fernhomberg , Jo\u00e3o Mendes , Nanddeep Nachan , Ram , Gautam Sheth .","title":"Contributors"},{"location":"about/release-notes/#1180","text":"","title":"1.18.0"},{"location":"about/release-notes/#new-controls_9","text":"PropertyFieldViewPicker : View picker control #230 PropertyFieldPassword : password editor control #237","title":"New control(s)"},{"location":"about/release-notes/#fixes_25","text":"PropertyFieldSitePicker documentation title fix #229 PropertyFieldSitePicker : doesn't work at root site #231","title":"Fixes"},{"location":"about/release-notes/#contributors_23","text":"Special thanks to our contributors (in alphabetical order): Ari Gunawan , Gautam Sheth , Hugo Bernier , Jo\u00e3o Mendes .","title":"Contributors"},{"location":"about/release-notes/#1170","text":"","title":"1.17.0"},{"location":"about/release-notes/#new-controls_10","text":"PropertyFieldSitePicker : New control that allows the user to select one or multiple sites from the SharePoint Search API. Similar to the SitePicker in the official \"News\" Web Part #208 , #215 Telemetry : Provide a way to opt-out for PnP Telemetry #222 PropertyPaneHelpers : Allows to show a spinner while loading resources","title":"New control(s)"},{"location":"about/release-notes/#enhancements_24","text":"Add norwegian language file #125 PropertyFieldSliderWithCallout : debounce property added #209 Replace full lodash with only used functions. #213","title":"Enhancements"},{"location":"about/release-notes/#fixes_26","text":"Documentation update for PropertyFieldCollectionData #196 PropertyFieldOrder : When items is an empty array, component renders the text '0' #152 Documentation update for PropertyFieldCodeEditor #194 PropertyFieldTermPicker : Tags icon styling issue on IE11 #193 PropertyPanePropertyEditor : Unable to download json export #210 PropertyFieldCollectionData : Fix Data Grid Dragging Issues #217","title":"Fixes"},{"location":"about/release-notes/#contributors_24","text":"Special thanks to our contributors (in alphabetical order): Antonio Monserrate , rocketboy1908 , Piotr Siatka , Ben , Niels S\u00f6th , araver .","title":"Contributors"},{"location":"about/release-notes/#1160","text":"","title":"1.16.0"},{"location":"about/release-notes/#enhancements_25","text":"PropertyFieldCollectionData : Add the ability for field validation to the custom fields #187 PropertyFieldCollectionData : Ability to provide custom labels for the save and cancel buttons #187 PropertyFieldListPicker : add ability to filter the control via OData #184","title":"Enhancements"},{"location":"about/release-notes/#fixes_27","text":"Documentation getting started links fixed #191 Fix for callout controls missing icon since SPFx 1.8.2 #182","title":"Fixes"},{"location":"about/release-notes/#contributors_25","text":"Special thanks to our contributors (in alphabetical order): araver , Chad Eiserloh .","title":"Contributors"},{"location":"about/release-notes/#1150","text":"","title":"1.15.0"},{"location":"about/release-notes/#enhancements_26","text":"PropertyFieldCollectionData : Add a property to be able to set a custom class on the collection data panel #180 PropertyFieldListPicker : Added listsToExclude property to the control #176 PropertyFieldDateTimePicker : Add ability to hide the date and time labels #77","title":"Enhancements"},{"location":"about/release-notes/#fixes_28","text":"Callout icons missing with SPFx 1.8.2 web part #178 PropertyFieldTextWithCallout : still persists property value when error occurred #172 PropertyFieldNumber : not handling changes correctly #170 PropertyFieldChoiceGroupWithCallout : iconProps not working #154 PropertyFieldDropdownWithCallout : Options of type Divider and Header are ignored #145","title":"Fixes"},{"location":"about/release-notes/#contributors_26","text":"Special thanks to our contributors (in alphabetical order): Alex Terentiev , Ward Wilmsen .","title":"Contributors"},{"location":"about/release-notes/#1141","text":"","title":"1.14.1"},{"location":"about/release-notes/#fixes_29","text":"TaxonomyPicker : Terms are sorted incorrectly under the wrong parent #153 EnterpriseTermPicker : Terms are sorted incorrectly under the wrong parent #156","title":"Fixes"},{"location":"about/release-notes/#1140","text":"","title":"1.14.0"},{"location":"about/release-notes/#new-controls_11","text":"PropertyFieldEnterpriseTermPicker : New control to load term sets by using @pnp/pnpjs #70 #120","title":"New control(s)"},{"location":"about/release-notes/#enhancements_27","text":"PropertyFieldCollectionData : Setting to specify if item creation is enabled/disabled #130 PropertyFieldCollectionData : Setting to specify if item deletion is enabled/disabled #131 PropertyFieldCollectionData : Implemented a property to specify if field editing is enabled/disabled #132 Added Chinese localization #137 PropertyFieldColorPicker : Added a isHidden property #138 PropertyFieldCollectionData : return the item in the custom renderer #147 Added Russian localization #142","title":"Enhancements"},{"location":"about/release-notes/#fixes_30","text":"PropertyFieldTermPicker : fix sort order with lowercased terms #133 PropertyFieldCollectionData : Bug with onCustomRender() #135 PropertyFieldCollectionData : Fixed bug with dropdown rendering in IE #136 PropertyFieldNumber : Min/max number check fix + localization label fixes #141 PropertyFieldTermPicker : Fix layout issues in IE11 #143","title":"Fixes"},{"location":"about/release-notes/#contributors_27","text":"Special thanks to our contributors (in alphabetical order): Simon-Pierre Plante , Yannick Plenevaux , Alex Terentiev , Roger Zhang .","title":"Contributors"},{"location":"about/release-notes/#1131","text":"","title":"1.13.1"},{"location":"about/release-notes/#fixes_31","text":"PropertyFieldCollectionData : Fixed issue for loading the control in the local workbench #128","title":"Fixes"},{"location":"about/release-notes/#1130","text":"","title":"1.13.0"},{"location":"about/release-notes/#enhancements_28","text":"Updated the office-ui-fabric-react to the same version as in SPFx 1.7.0 #105 PropertyFieldPeoplePicker : Ability to select only from a specific site #9 PropertyFieldCollectionData : Added support for custom field rendering #122 PropertyFieldCollectionData : Added the functionality to sort the items in the collection #123","title":"Enhancements"},{"location":"about/release-notes/#fixes_32","text":"PropertyFieldDateTimePicker : Fix for the hours dropdown not showing values #112 PropertyFieldCollectionData : Issue with debounce validation overriding the inserted values #113 PropertyPaneWebPartInformation : Remove redundant 'Description' label #119 PropertyFieldCodeEditor : Handle initial value after updating properties #121","title":"Fixes"},{"location":"about/release-notes/#contributors_28","text":"Special thanks to our contributor: Erwin van Hunen .","title":"Contributors"},{"location":"about/release-notes/#1120","text":"","title":"1.12.0"},{"location":"about/release-notes/#new-controls_12","text":"PropertyPaneWebPartInformation : New control to show more information about the current web part #108 PropertyPanePropertyEditor : New control that allows you to export/import property pane settings #114","title":"New control(s)"},{"location":"about/release-notes/#enhancements_29","text":"Dutch localization added #82 French localization added #84 PropertyFieldCollectionData : Allow the user to specify a deferred validation time for each field #98 PropertyFieldCollectionData : added a onRenderOption option to allow custom option rendering #102 PropertyFieldNumber : Introduced the aria label #104 Hide callout from the controls with callout if no message is provided #107 PropertyFieldListPicker : Add the ability to refresh target site while pane is open #109","title":"Enhancements"},{"location":"about/release-notes/#fixes_33","text":"PropertyFieldCollectionData : Fixed catastrophic backtracking regex issue for URL validation #99","title":"Fixes"},{"location":"about/release-notes/#contributors_29","text":"Special thanks to our contributors (in alphabetical order): Paul Bullock , Junle Li , PooLP , Erwin van Hunen .","title":"Contributors"},{"location":"about/release-notes/#1110","text":"","title":"1.11.0"},{"location":"about/release-notes/#enhancements_30","text":"PropertyFieldCollectionData : Show error messages #96","title":"Enhancements"},{"location":"about/release-notes/#fixes_34","text":"Fixes based on SonarCloud analysis","title":"Fixes"},{"location":"about/release-notes/#1100","text":"","title":"1.10.0"},{"location":"about/release-notes/#enhancements_31","text":"PropertyFieldPeoplePicker : Security groups come back with EntityType of FormsRole rather then SecGroup #93 PropertyFieldCollectionData : Add the current row's information in the onGetErrorMessage callback #92","title":"Enhancements"},{"location":"about/release-notes/#fixes_35","text":"PropertyFieldPeoplePicker : No suggestions returned when using Security Groups, Multi-select and NO duplicates. #90 PropertyFieldTermPicker : Terms which are set as unavailable for tagging are still selectable #94","title":"Fixes"},{"location":"about/release-notes/#190","text":"","title":"1.9.0"},{"location":"about/release-notes/#enhancements_32","text":"PropertyFieldCollectionData : Added custom validation for string , number , icon , and URL field types #74 PropertyFieldCollectionData : Add an option to specify a default value #86 PropertyFieldCollectionData : override placeholder for the inputs #87 PropertyFieldCollectionData : Hide save button when \"Add and save\" is shown #88","title":"Enhancements"},{"location":"about/release-notes/#fixes_36","text":"PropertyFieldMultiSelect : fixed an issue where the control didn't retain the preselected values when dropdown options were provided async #85 PropertyFieldOrder : fixed an issue where items where provided async #81","title":"Fixes"},{"location":"about/release-notes/#180","text":"","title":"1.8.0"},{"location":"about/release-notes/#enhancements_33","text":"New telemetry approach which allows you to use Application Insights instance #79 PropertyFieldListPicker : add optional property for target site #21","title":"Enhancements"},{"location":"about/release-notes/#contributors_30","text":"Special thanks to our contributor: Joel Rodrigues .","title":"Contributors"},{"location":"about/release-notes/#170","text":"","title":"1.7.0"},{"location":"about/release-notes/#enhancements_34","text":"Add npm postinstall script to automatically add the localization config #64 Add a description to the PropertyFieldCollectionData panel #67 Added a font field type for the PropertyFieldCollectionData control #66 Added a URL field type for the PropertyFieldCollectionData control #72 Field validation implemented to enable/disable save buttons in PropertyFieldCollectionData control. Related to previous enhancement. Added properties to the TaxonomyPicker to specify which terms are disabled/not-selectable #69","title":"Enhancements"},{"location":"about/release-notes/#fixes_37","text":"PropertyFieldPeoplePicker validation error does not clear as expected #68","title":"Fixes"},{"location":"about/release-notes/#160","text":"","title":"1.6.0"},{"location":"about/release-notes/#new-controls_13","text":"PropertyFieldCollectionData was added #58 PropertyFieldOrder was added #19 PropertyFieldSwatchColorPicker was added #55","title":"New control(s)"},{"location":"about/release-notes/#enhancements_35","text":"Allow the term set to be selectable in the PropertyFieldTermPicker #60","title":"Enhancements"},{"location":"about/release-notes/#fixes_38","text":"Fix for PropertyFieldColorPicker Palette Icon alignment issue in IE11 #56","title":"Fixes"},{"location":"about/release-notes/#151","text":"","title":"1.5.1"},{"location":"about/release-notes/#enhancements_36","text":"Color Pickers optionally return Color Objects #55","title":"Enhancements"},{"location":"about/release-notes/#fixes_39","text":"Undefined web part context fixed in the PropertyFieldPeoplePicker #47 Taxonomy service fix for working with term set GUID #48 Added focus intercepting input for Full style #52","title":"Fixes"},{"location":"about/release-notes/#150","text":"","title":"1.5.0"},{"location":"about/release-notes/#enhancements_37","text":"PropertyFieldListPicker control extended with select all lists option #8 PropertyFieldTermPicker control extended with the ability to search terms by typing in the textbox #11 #42 #44 #45 SPTermStorePickerService has a new interface which contains only the required properties","title":"Enhancements"},{"location":"about/release-notes/#142","text":"","title":"1.4.2"},{"location":"about/release-notes/#enhancements_38","text":"Introduced the onGetErrorMessage property for the PropertyFieldNumber field control ( #36 )","title":"Enhancements"},{"location":"about/release-notes/#141","text":"","title":"1.4.1"},{"location":"about/release-notes/#enhancements_39","text":"Optimized telemetry so that it only pushes control data","title":"Enhancements"},{"location":"about/release-notes/#fixes_40","text":"Fixes for issue #30 PropertyFieldPeoplePicker Validation does not work as expected #33","title":"Fixes"},{"location":"about/release-notes/#140","text":"","title":"1.4.0"},{"location":"about/release-notes/#new-controls_14","text":"PropertyFieldMultiSelect got added PropertyFieldNumber got added","title":"New control(s)"},{"location":"about/release-notes/#enhancements_40","text":"PropertyFieldTermPicker new introduced property to specify to show or hide the term store name: hideTermStoreName . PropertyFieldTermPicker updated process when terms were unselected based on ID instead of path.","title":"Enhancements"},{"location":"about/release-notes/#130","text":"","title":"1.3.0"},{"location":"about/release-notes/#new-controls_15","text":"PropertyFieldCodeEditor got added","title":"New control(s)"},{"location":"about/release-notes/#enhancements_41","text":"PropertyFieldTermPicker improved with save and cancel button PropertyFieldTermPicker improved with onClick event on input field","title":"Enhancements"},{"location":"about/release-notes/#120","text":"","title":"1.2.0"},{"location":"about/release-notes/#enhancements_42","text":"Added the option to the people picker to allow you to specify single or multi-selection","title":"Enhancements"},{"location":"about/release-notes/#fixes_41","text":"People picker accidentally picked the wrong person Improved telemetry with some object checks","title":"Fixes"},{"location":"about/release-notes/#111","text":"","title":"1.1.1"},{"location":"about/release-notes/#enhancements_43","text":"Removed operation name from telemetry","title":"Enhancements"},{"location":"about/release-notes/#110","text":"","title":"1.1.0"},{"location":"about/release-notes/#new-controls_16","text":"Added the PropertyFieldButtonWithCallout control Added the PropertyFieldCheckboxWithCallout control Added the PropertyFieldChoiceGroupWithCallout control Added the PropertyFieldWithCallout control Added the PropertyLabelWithCallout control Added the PropertyLinkWithCallout control Added the PropertySliderWithCallout control","title":"New control(s)"},{"location":"about/release-notes/#enhancements_44","text":"Telemetry added Term picker control has now the option to scope on term set or group","title":"Enhancements"},{"location":"about/release-notes/#100","text":"","title":"1.0.0"},{"location":"about/release-notes/#new-controls_17","text":"Added the PropertyFieldDropdownWithCallout control Added the PropertyFieldTextWithCallout control Added the PropertyFieldToggleWithCallout control","title":"New control(s)"},{"location":"about/release-notes/#100-beta3","text":"","title":"1.0.0-beta.3"},{"location":"about/release-notes/#enhancements_45","text":"Added firstDayOfWeek option to the date picker control","title":"Enhancements"},{"location":"about/release-notes/#100-beta2","text":"","title":"1.0.0-beta.2"},{"location":"about/release-notes/#new-controls_18","text":"Initial release","title":"New control(s)"},{"location":"controls/PropertyFIeldFolderPicker/","text":"PropertyFieldFolderPicker control \u00b6 This control allows you to explore and select a folder from the property pane. It also allows the user to create a new folder at the current level being explored. Here is an example of the control: PropertyFieldFolderPicker example usage How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your webpart: import { IFolder , IPropertyFieldFolderPickerProps , PropertyFieldFolderPicker } from \"@pnp/spfx-property-controls/lib/PropertyFieldFolderPicker\" ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { folderPicker : IFolder ; } Add the folder picker property control to the groupFields of the web part property pane configuration: PropertyFieldFolderPicker ( 'folderPicker' , { context : this.context , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , key : \"folderPickerId\" , label : \"Folder Picker\" , selectedFolder : this.properties.folderPicker , canCreateFolders : true , onSelect : (( folder : IFolder ) => { console . log ( folder ); this . properties . folderPicker = folder ; }), rootFolder : { Name : \"Documents\" , ServerRelativeUrl : \"/sites/testSiteCollection/Shared Documents\" }, }), Implementation \u00b6 The PropertyFieldFolderPicker control can be configured with the following properties: Property Type Required Description context BaseComponentContext yes The context object of the SPFx loaded webpart. label string yes The label for the control. rootFolder IFolder yes The lowest level folder that can be explored. This can be the root folder of a library. selectedFolder IFolder yes Store the results of the folder picker. defaultFolder IFolder no The default folder to be selected or explored. properties any yes Parent web part properties, this object is used to update the property value. key string yes A unique key that indicates the identity of this control. onPropertyChange function yes Defines a onPropertyChange function to raise when the data gets changed. required boolean no Is selection required. disabled boolean no Is the control disabled. canCreateFolders boolean no Allow current user to create folders on the target location. If enabled, you need to ensure that the user has the required permissions. onSelect (folder: IFolder): void no Callback function called after a folder is selected. siteAbsoluteUrl string no The absolute url of the site you want to pick a folder from (if different than the site the webpart is installed on) interface IFolder The value returned from the selected folder object. Value Type Description Name string Name of the folder. ServerRelativeUrl string Server relative URL of the folder.","title":"PropertyFieldFolderPicker control"},{"location":"controls/PropertyFIeldFolderPicker/#propertyfieldfolderpicker-control","text":"This control allows you to explore and select a folder from the property pane. It also allows the user to create a new folder at the current level being explored. Here is an example of the control: PropertyFieldFolderPicker example usage","title":"PropertyFieldFolderPicker control"},{"location":"controls/PropertyFIeldFolderPicker/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your webpart: import { IFolder , IPropertyFieldFolderPickerProps , PropertyFieldFolderPicker } from \"@pnp/spfx-property-controls/lib/PropertyFieldFolderPicker\" ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { folderPicker : IFolder ; } Add the folder picker property control to the groupFields of the web part property pane configuration: PropertyFieldFolderPicker ( 'folderPicker' , { context : this.context , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , key : \"folderPickerId\" , label : \"Folder Picker\" , selectedFolder : this.properties.folderPicker , canCreateFolders : true , onSelect : (( folder : IFolder ) => { console . log ( folder ); this . properties . folderPicker = folder ; }), rootFolder : { Name : \"Documents\" , ServerRelativeUrl : \"/sites/testSiteCollection/Shared Documents\" }, }),","title":"How to use this control in your solutions"},{"location":"controls/PropertyFIeldFolderPicker/#implementation","text":"The PropertyFieldFolderPicker control can be configured with the following properties: Property Type Required Description context BaseComponentContext yes The context object of the SPFx loaded webpart. label string yes The label for the control. rootFolder IFolder yes The lowest level folder that can be explored. This can be the root folder of a library. selectedFolder IFolder yes Store the results of the folder picker. defaultFolder IFolder no The default folder to be selected or explored. properties any yes Parent web part properties, this object is used to update the property value. key string yes A unique key that indicates the identity of this control. onPropertyChange function yes Defines a onPropertyChange function to raise when the data gets changed. required boolean no Is selection required. disabled boolean no Is the control disabled. canCreateFolders boolean no Allow current user to create folders on the target location. If enabled, you need to ensure that the user has the required permissions. onSelect (folder: IFolder): void no Callback function called after a folder is selected. siteAbsoluteUrl string no The absolute url of the site you want to pick a folder from (if different than the site the webpart is installed on) interface IFolder The value returned from the selected folder object. Value Type Description Name string Name of the folder. ServerRelativeUrl string Server relative URL of the folder.","title":"Implementation"},{"location":"controls/PropertyFieldButton/","text":"PropertyFieldButton control \u00b6 This control generates a Button Control . PropertyFieldButton example usage How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldButton } from '@pnp/spfx-property-controls/lib/PropertyFieldButton' ; Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldButton ( \"\" , { text = { \"Button\" } key = { \"buttonID\" } disabled = { false } className = { className } styles = { styles } onClick = {()=>{ alert ( \"Button Clicked\" )}} iconProps = { iconProps } isPrimary = { true } isVIsible = { true } }) Implementation \u00b6 The PropertyFieldButton control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. styles IButtonStyles no styles object classname string no css ClassName isVisible boolean yes Indicate if button is visible text string no text of button isPrimary boolean yes indicate Button is a primary button iconProps IIconProps no text of button disable boolean no Disable control onClick (e:any) =>void yes Onclick function","title":"PropertyFieldButton"},{"location":"controls/PropertyFieldButton/#propertyfieldbutton-control","text":"This control generates a Button Control . PropertyFieldButton example usage","title":"PropertyFieldButton control"},{"location":"controls/PropertyFieldButton/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldButton } from '@pnp/spfx-property-controls/lib/PropertyFieldButton' ; Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldButton ( \"\" , { text = { \"Button\" } key = { \"buttonID\" } disabled = { false } className = { className } styles = { styles } onClick = {()=>{ alert ( \"Button Clicked\" )}} iconProps = { iconProps } isPrimary = { true } isVIsible = { true } })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldButton/#implementation","text":"The PropertyFieldButton control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. styles IButtonStyles no styles object classname string no css ClassName isVisible boolean yes Indicate if button is visible text string no text of button isPrimary boolean yes indicate Button is a primary button iconProps IIconProps no text of button disable boolean no Disable control onClick (e:any) =>void yes Onclick function","title":"Implementation"},{"location":"controls/PropertyFieldButtonWithCallout/","text":"PropertyFieldButtonWithCallout control \u00b6 This control generates a button control with a callout. PropertyFieldButtonWithCallout rendering PropertyFieldButtonWithCallout callout opened How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/Callout' ; import { PropertyFieldButtonWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldButtonWithCallout' ; Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldButtonWithCallout ( 'fakeProperty' , { calloutTrigger : CalloutTriggers.Click , key : 'buttonWithCalloutFieldId' , calloutContent : React.createElement ( 'p' , {}, 'Tests connection to the database with the parameters listed above' ), calloutWidth : 150 , text : 'Test connection' , onClick : () => { /* Code to test db connection */ } }) Implementation \u00b6 The PropertyFieldButtonWithCallout control uses the same implementation as the default PropertyPaneButton and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"PropertyFieldButtonWithCallout"},{"location":"controls/PropertyFieldButtonWithCallout/#propertyfieldbuttonwithcallout-control","text":"This control generates a button control with a callout. PropertyFieldButtonWithCallout rendering PropertyFieldButtonWithCallout callout opened","title":"PropertyFieldButtonWithCallout control"},{"location":"controls/PropertyFieldButtonWithCallout/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/Callout' ; import { PropertyFieldButtonWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldButtonWithCallout' ; Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldButtonWithCallout ( 'fakeProperty' , { calloutTrigger : CalloutTriggers.Click , key : 'buttonWithCalloutFieldId' , calloutContent : React.createElement ( 'p' , {}, 'Tests connection to the database with the parameters listed above' ), calloutWidth : 150 , text : 'Test connection' , onClick : () => { /* Code to test db connection */ } })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldButtonWithCallout/#implementation","text":"The PropertyFieldButtonWithCallout control uses the same implementation as the default PropertyPaneButton and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"Implementation"},{"location":"controls/PropertyFieldCheckboxWithCallout/","text":"PropertyFieldCheckboxWithCallout control \u00b6 This control generates a checkbox control with a callout. PropertyFieldCheckboxWithCallout rendering PropertyFieldCheckboxWithCallout callout opened How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/Callout' ; import { PropertyFieldCheckboxWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldCheckboxWithCallout' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { checkboxWithCalloutValue : boolean ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldCheckboxWithCallout ( 'checkboxWithCalloutValue' , { calloutTrigger : CalloutTriggers.Click , key : 'checkboxWithCalloutFieldId' , calloutContent : React.createElement ( 'p' , {}, 'Check the checkbox to accept Application Terms and Conditions' ), calloutWidth : 200 , text : 'Accept terms and conditions' , checked : this.properties.checkboxWithCalloutValue }) Implementation \u00b6 The PropertyFieldCheckboxWithCallout control uses the same implementation as the default PropertyPaneCheckbox and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"PropertyFieldCheckboxWithCallout"},{"location":"controls/PropertyFieldCheckboxWithCallout/#propertyfieldcheckboxwithcallout-control","text":"This control generates a checkbox control with a callout. PropertyFieldCheckboxWithCallout rendering PropertyFieldCheckboxWithCallout callout opened","title":"PropertyFieldCheckboxWithCallout control"},{"location":"controls/PropertyFieldCheckboxWithCallout/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/Callout' ; import { PropertyFieldCheckboxWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldCheckboxWithCallout' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { checkboxWithCalloutValue : boolean ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldCheckboxWithCallout ( 'checkboxWithCalloutValue' , { calloutTrigger : CalloutTriggers.Click , key : 'checkboxWithCalloutFieldId' , calloutContent : React.createElement ( 'p' , {}, 'Check the checkbox to accept Application Terms and Conditions' ), calloutWidth : 200 , text : 'Accept terms and conditions' , checked : this.properties.checkboxWithCalloutValue })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldCheckboxWithCallout/#implementation","text":"The PropertyFieldCheckboxWithCallout control uses the same implementation as the default PropertyPaneCheckbox and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"Implementation"},{"location":"controls/PropertyFieldChoiceGroupWithCallout/","text":"PropertyFieldChoiceGroupWithCallout control \u00b6 This control generates a choice group control with a callout. PropertyFieldChoiceGroupWithCallout rendering PropertyFieldChoiceGroupWithCallout callout opened How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/PropertyFieldHeader' ; import { PropertyFieldChoiceGroupWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldChoiceGroupWithCallout' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { choiceGroupWithCalloutValue : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldChoiceGroupWithCallout ( 'choiceGroupWithCalloutValue' , { calloutContent : React.createElement ( 'div' , {}, 'Select preferable mobile platform' ), calloutTrigger : CalloutTriggers.Hover , key : 'choiceGroupWithCalloutFieldId' , label : 'Preferred mobile platform' , options : [{ key : 'iOS' , text : 'iOS' , checked : this.properties.choiceGroupWithCalloutValue === 'iOS' }, { key : 'Android' , text : 'Android' , checked : this.properties.choiceGroupWithCalloutValue === 'Android' }, { key : 'Other' , text : 'Other' , checked : this.properties.choiceGroupWithCalloutValue === 'Other' }] }) Implementation \u00b6 The PropertyFieldChoiceGroupWithCallout control uses the same implementation as the default PropertyPaneChoiceGroup and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"PropertyFieldChoiceGroupWithCallout"},{"location":"controls/PropertyFieldChoiceGroupWithCallout/#propertyfieldchoicegroupwithcallout-control","text":"This control generates a choice group control with a callout. PropertyFieldChoiceGroupWithCallout rendering PropertyFieldChoiceGroupWithCallout callout opened","title":"PropertyFieldChoiceGroupWithCallout control"},{"location":"controls/PropertyFieldChoiceGroupWithCallout/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/PropertyFieldHeader' ; import { PropertyFieldChoiceGroupWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldChoiceGroupWithCallout' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { choiceGroupWithCalloutValue : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldChoiceGroupWithCallout ( 'choiceGroupWithCalloutValue' , { calloutContent : React.createElement ( 'div' , {}, 'Select preferable mobile platform' ), calloutTrigger : CalloutTriggers.Hover , key : 'choiceGroupWithCalloutFieldId' , label : 'Preferred mobile platform' , options : [{ key : 'iOS' , text : 'iOS' , checked : this.properties.choiceGroupWithCalloutValue === 'iOS' }, { key : 'Android' , text : 'Android' , checked : this.properties.choiceGroupWithCalloutValue === 'Android' }, { key : 'Other' , text : 'Other' , checked : this.properties.choiceGroupWithCalloutValue === 'Other' }] })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldChoiceGroupWithCallout/#implementation","text":"The PropertyFieldChoiceGroupWithCallout control uses the same implementation as the default PropertyPaneChoiceGroup and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"Implementation"},{"location":"controls/PropertyFieldCodeEditor/","text":"PropertyFieldCodeEditor control \u00b6 This control generates a code editor which can be used to add custom styling or content to your web part. PropertyFieldCodeEditor PropertyFieldCodeEditor editing experience How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldCodeEditor , PropertyFieldCodeEditorLanguages } from '@pnp/spfx-property-controls/lib/PropertyFieldCodeEditor' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { htmlCode : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldCodeEditor ( 'htmlCode' , { label : 'Edit HTML Code' , panelTitle : 'Edit HTML Code' , initialValue : this.properties.htmlCode , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , disabled : false , key : 'codeEditorFieldId' , language : PropertyFieldCodeEditorLanguages.HTML , options : { wrap : true , fontSize : 20 , // more options } }) Implementation \u00b6 The PropertyFieldCodeEditor control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. panelTitle string yes Title of the code editor panel. initialValue string no Defines the initial code. language PropertyFieldCodeEditorLanguages no Sets the language on the code editor. properties any yes Parent web part properties, this object is use to update the property value. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. key string yes An unique key that indicates the identity of this control. options AceOptions no Additional properties available to the Ace editor. panelWidth string no Width of the panel that contains the Ace editor Enum PropertyFieldCodeEditorLanguages Name css JavaScript JSON Handlebars HTML Plain Text Sass TypeScript XML","title":"PropertyFieldCodeEditor"},{"location":"controls/PropertyFieldCodeEditor/#propertyfieldcodeeditor-control","text":"This control generates a code editor which can be used to add custom styling or content to your web part. PropertyFieldCodeEditor PropertyFieldCodeEditor editing experience","title":"PropertyFieldCodeEditor control"},{"location":"controls/PropertyFieldCodeEditor/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldCodeEditor , PropertyFieldCodeEditorLanguages } from '@pnp/spfx-property-controls/lib/PropertyFieldCodeEditor' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { htmlCode : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldCodeEditor ( 'htmlCode' , { label : 'Edit HTML Code' , panelTitle : 'Edit HTML Code' , initialValue : this.properties.htmlCode , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , disabled : false , key : 'codeEditorFieldId' , language : PropertyFieldCodeEditorLanguages.HTML , options : { wrap : true , fontSize : 20 , // more options } })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldCodeEditor/#implementation","text":"The PropertyFieldCodeEditor control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. panelTitle string yes Title of the code editor panel. initialValue string no Defines the initial code. language PropertyFieldCodeEditorLanguages no Sets the language on the code editor. properties any yes Parent web part properties, this object is use to update the property value. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. key string yes An unique key that indicates the identity of this control. options AceOptions no Additional properties available to the Ace editor. panelWidth string no Width of the panel that contains the Ace editor Enum PropertyFieldCodeEditorLanguages Name css JavaScript JSON Handlebars HTML Plain Text Sass TypeScript XML","title":"Implementation"},{"location":"controls/PropertyFieldCollectionData/","text":"PropertyFieldCollectionData control \u00b6 This property field control gives you the ability to insert a list / collection data which can be used in your web part. For example: you want to specify multiple locations for showing a weather information. The control allows you to specify multiple data types like: string, number, boolean, or dropdown. PropertyFieldCollectionData The type of data you get returned depends on the fields you defined. For the example above, the data looks like this: [ { \"Title\" : \"Person\" , \"Lastname\" : \"1\" , \"Age\" : \"42\" , \"City\" : \"helsinki\" , \"Sign\" : true }, { \"Title\" : \"Person\" , \"Lastname\" : \"2\" , \"Age\" : \"42\" , \"City\" : \"helsinki\" , \"Sign\" : true } ] How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldCollectionData , CustomCollectionFieldType } from '@pnp/spfx-property-controls/lib/PropertyFieldCollectionData' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { collectionData : any []; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldCollectionData ( \"collectionData\" , { key : \"collectionData\" , label : \"Collection data\" , panelHeader : \"Collection data panel header\" , manageBtnLabel : \"Manage collection data\" , value : this.properties.collectionData , fields : [ { id : \"Title\" , title : \"Firstname\" , type : CustomCollectionFieldType . string , required : true }, { id : \"Lastname\" , title : \"Lastname\" , type : CustomCollectionFieldType . string }, { id : \"Age\" , title : \"Age\" , type : CustomCollectionFieldType . number , required : true }, { id : \"City\" , title : \"Favorite city\" , type : CustomCollectionFieldType . dropdown , options : [ { key : \"antwerp\" , text : \"Antwerp\" }, { key : \"helsinki\" , text : \"Helsinki\" }, { key : \"montreal\" , text : \"Montreal\" } ], required : true }, { id : \"Sign\" , title : \"Signed\" , type : CustomCollectionFieldType . boolean } ], disabled : false }) Sample of custom field rendering \u00b6 Here is an example of how you can render your own controls in the PropertyFieldCollectionData control: { id : \"customFieldId\" , title : \"Custom Field\" , type : CustomCollectionFieldType . custom , onCustomRender : ( field , value , onUpdate , item , itemId , onError ) => { return ( React . createElement ( \"div\" , null , React . createElement ( \"input\" , { key : itemId , value : value , onChange : ( event : React.FormEvent < HTMLInputElement > ) => { onUpdate ( field . id , event . currentTarget . value ); if ( event . currentTarget . value === \"error\" ) { onError ( field . id , \"Value shouldn't be equal to error\" ); } else { onError ( field . id , \"\" ); } }}), \" \ud83c\udf89\" ) ); } } Implementation \u00b6 The PropertyFieldCollectionData control can be configured with the following properties: Property Type Required Description Default Value key string yes An unique key that indicates the identity of this control. label string yes Property field label displayed on top. panelHeader string yes Label to be used as the header in the panel. panelDescription string no Property that allows you to specify a description in the collection panel. manageBtnLabel string yes Label of the button to open the panel. saveBtnLabel string no Label of the save button. saveAndAddBtnLabel string yes Label of the save and add button. cancelBtnLabel string yes Label of the cancel button. fields ICustomCollectionField[] yes The fields to be used for the list of collection data. value string yes The collection data value. enableSorting boolean no Specify if you want to be able to sort the items in the collection. false disabled boolean no Specify if the control is disabled. false disableItemCreation boolean no Allows you to specify if user can create new items. false disableItemDeletion boolean no Allows you to specify if users can delete already inserted items. false panelClassName string no Allows you to specify a custom CSS class name for the collection data panel. tableClassName string no Allows you to specify a custom CSS class name for the collection data table inside the panel. panelProps IPanelProps no Allows you to pass in props of the panel such as type and size to control the underlying panel. Interface ICustomCollectionField Property Type Required Description id string yes ID of the field. title string yes Title of the field. This will be used for the label in the table. type CustomCollectionFieldType yes Specifies the type of field to render. disable (item: any) => boolean no Conditionally disable a field. disableEdit boolean no Allows you to specify if a field is disabled for editing. required boolean no Specify if the field is required. options IDropdownOption[] | (fieldId: string, item: any) => IDropdownOption[] no Dropdown options. Only necessary when dropdown type is used. Options can be either a static array or a function that will calculate the values dynamically and can react to the current item. onRenderOption IRenderFunction no Dropdown custom options render method. Only for the dropdown field type. placeholder string no Placeholder text which will be used for the input field. If not provided the input title will be used. defaultValue any no Specify a default value for the input field. deferredValidationTime number no Field will start to validate after users stop typing for deferredValidationTime milliseconds. Default: 200ms. onGetErrorMessage (value: any, index: number, crntItem: any): string | Promise no The method is used to get the validation error message and determine whether the input value is valid or not. It provides you the current row index and the item you are currently editing. onCustomRender (field: ICustomCollectionField, value: any, onUpdate: (fieldId: string, value: any) => void, item: any, itemUniqueId: string, onCustomFieldValidation: (fieldId: string, errorMessage: string) => void) => JSX.Element no This property is only required if you are using the custom field type and it can be used to specify the custom rendering of your control in the collection data. isVisible (field: ICustomCollectionField, items: any[]) => boolean no The method is used to toggle column visibility depending on current state of editing items iconFieldRenderMode CollectionIconFieldRenderMode no Icon field render mode: text box or IconPicker Enum CustomCollectionFieldType Type Description string Text field number Number field boolean Checkbox dropdown Dropdown field. You will have to specify the options property when using this field type fabricIcon Name of the Office UI Fabric icon url URL field custom This gives you control over the whole field rendering. Be sure to provide the onCustomRender method to render your control in the collection data. color Color field Type CollectionIconFieldRenderMode export type CollectionIconFieldRenderMode = 'textbox' | 'picker' ;","title":"PropertyFieldCollectionData"},{"location":"controls/PropertyFieldCollectionData/#propertyfieldcollectiondata-control","text":"This property field control gives you the ability to insert a list / collection data which can be used in your web part. For example: you want to specify multiple locations for showing a weather information. The control allows you to specify multiple data types like: string, number, boolean, or dropdown. PropertyFieldCollectionData The type of data you get returned depends on the fields you defined. For the example above, the data looks like this: [ { \"Title\" : \"Person\" , \"Lastname\" : \"1\" , \"Age\" : \"42\" , \"City\" : \"helsinki\" , \"Sign\" : true }, { \"Title\" : \"Person\" , \"Lastname\" : \"2\" , \"Age\" : \"42\" , \"City\" : \"helsinki\" , \"Sign\" : true } ]","title":"PropertyFieldCollectionData control"},{"location":"controls/PropertyFieldCollectionData/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldCollectionData , CustomCollectionFieldType } from '@pnp/spfx-property-controls/lib/PropertyFieldCollectionData' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { collectionData : any []; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldCollectionData ( \"collectionData\" , { key : \"collectionData\" , label : \"Collection data\" , panelHeader : \"Collection data panel header\" , manageBtnLabel : \"Manage collection data\" , value : this.properties.collectionData , fields : [ { id : \"Title\" , title : \"Firstname\" , type : CustomCollectionFieldType . string , required : true }, { id : \"Lastname\" , title : \"Lastname\" , type : CustomCollectionFieldType . string }, { id : \"Age\" , title : \"Age\" , type : CustomCollectionFieldType . number , required : true }, { id : \"City\" , title : \"Favorite city\" , type : CustomCollectionFieldType . dropdown , options : [ { key : \"antwerp\" , text : \"Antwerp\" }, { key : \"helsinki\" , text : \"Helsinki\" }, { key : \"montreal\" , text : \"Montreal\" } ], required : true }, { id : \"Sign\" , title : \"Signed\" , type : CustomCollectionFieldType . boolean } ], disabled : false })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldCollectionData/#sample-of-custom-field-rendering","text":"Here is an example of how you can render your own controls in the PropertyFieldCollectionData control: { id : \"customFieldId\" , title : \"Custom Field\" , type : CustomCollectionFieldType . custom , onCustomRender : ( field , value , onUpdate , item , itemId , onError ) => { return ( React . createElement ( \"div\" , null , React . createElement ( \"input\" , { key : itemId , value : value , onChange : ( event : React.FormEvent < HTMLInputElement > ) => { onUpdate ( field . id , event . currentTarget . value ); if ( event . currentTarget . value === \"error\" ) { onError ( field . id , \"Value shouldn't be equal to error\" ); } else { onError ( field . id , \"\" ); } }}), \" \ud83c\udf89\" ) ); } }","title":"Sample of custom field rendering"},{"location":"controls/PropertyFieldCollectionData/#implementation","text":"The PropertyFieldCollectionData control can be configured with the following properties: Property Type Required Description Default Value key string yes An unique key that indicates the identity of this control. label string yes Property field label displayed on top. panelHeader string yes Label to be used as the header in the panel. panelDescription string no Property that allows you to specify a description in the collection panel. manageBtnLabel string yes Label of the button to open the panel. saveBtnLabel string no Label of the save button. saveAndAddBtnLabel string yes Label of the save and add button. cancelBtnLabel string yes Label of the cancel button. fields ICustomCollectionField[] yes The fields to be used for the list of collection data. value string yes The collection data value. enableSorting boolean no Specify if you want to be able to sort the items in the collection. false disabled boolean no Specify if the control is disabled. false disableItemCreation boolean no Allows you to specify if user can create new items. false disableItemDeletion boolean no Allows you to specify if users can delete already inserted items. false panelClassName string no Allows you to specify a custom CSS class name for the collection data panel. tableClassName string no Allows you to specify a custom CSS class name for the collection data table inside the panel. panelProps IPanelProps no Allows you to pass in props of the panel such as type and size to control the underlying panel. Interface ICustomCollectionField Property Type Required Description id string yes ID of the field. title string yes Title of the field. This will be used for the label in the table. type CustomCollectionFieldType yes Specifies the type of field to render. disable (item: any) => boolean no Conditionally disable a field. disableEdit boolean no Allows you to specify if a field is disabled for editing. required boolean no Specify if the field is required. options IDropdownOption[] | (fieldId: string, item: any) => IDropdownOption[] no Dropdown options. Only necessary when dropdown type is used. Options can be either a static array or a function that will calculate the values dynamically and can react to the current item. onRenderOption IRenderFunction no Dropdown custom options render method. Only for the dropdown field type. placeholder string no Placeholder text which will be used for the input field. If not provided the input title will be used. defaultValue any no Specify a default value for the input field. deferredValidationTime number no Field will start to validate after users stop typing for deferredValidationTime milliseconds. Default: 200ms. onGetErrorMessage (value: any, index: number, crntItem: any): string | Promise no The method is used to get the validation error message and determine whether the input value is valid or not. It provides you the current row index and the item you are currently editing. onCustomRender (field: ICustomCollectionField, value: any, onUpdate: (fieldId: string, value: any) => void, item: any, itemUniqueId: string, onCustomFieldValidation: (fieldId: string, errorMessage: string) => void) => JSX.Element no This property is only required if you are using the custom field type and it can be used to specify the custom rendering of your control in the collection data. isVisible (field: ICustomCollectionField, items: any[]) => boolean no The method is used to toggle column visibility depending on current state of editing items iconFieldRenderMode CollectionIconFieldRenderMode no Icon field render mode: text box or IconPicker Enum CustomCollectionFieldType Type Description string Text field number Number field boolean Checkbox dropdown Dropdown field. You will have to specify the options property when using this field type fabricIcon Name of the Office UI Fabric icon url URL field custom This gives you control over the whole field rendering. Be sure to provide the onCustomRender method to render your control in the collection data. color Color field Type CollectionIconFieldRenderMode export type CollectionIconFieldRenderMode = 'textbox' | 'picker' ;","title":"Implementation"},{"location":"controls/PropertyFieldColorPicker/","text":"PropertyFieldColorPicker control \u00b6 This control generates a color picker that you can use inside the property pane. PropertyFieldColorPicker PropertyFieldColorPicker color selector How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldColorPicker , PropertyFieldColorPickerStyle } from '@pnp/spfx-property-controls/lib/PropertyFieldColorPicker' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { color : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldColorPicker ( 'color' , { label : 'Color' , selectedColor : this.properties.color , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , disabled : false , debounce : 1000 , isHidden : false , alphaSliderHidden : false , style : PropertyFieldColorPickerStyle.Full , iconName : 'Precipitation' , key : 'colorFieldId' }) Implementation \u00b6 The PropertyFieldColorPicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. debounce number no Specify delay after which control value will be set. isHidden boolean no Specify if the control needs to be hidden. selectedColor string or IColor no The CSS-compatible string or an IColor object to describe the initial color alphaSliderHidden boolean no When true, the alpha slider control is hidden showPreview boolean no Whether to show color preview box. style PropertyFieldColorPickerStyle no Determines how the control is displayed (defaults to inline) iconName string no The name of the UI Fabric Font Icon to use for Inline display (defaults to Color) valueAsObject boolean no When true, the property is returned as an IColor object. When false (default), the property is returned as a CSS-compatible string properties any yes Parent web part properties, this object is use to update the property value. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. key string yes An unique key that indicates the identity of this control. Enum PropertyFieldColorPickerStyle Name Description Full Display the full control in the property pane Inline Display the color picker inline Value \u00b6 By default, the Color Picker returns the value as a CSS-compatible string. This allows you the flexibility of simply assigning the value to an inline style as is and this is usually sufficient. However, this also limits the information directly available to you since the format could be a Hex code, an RGBA value, or even a named color and may not be suitable for advanced scenarios. By setting the valueAsObject property to true, you will always receive a consistent IColor object that provides you detailed information about the chosen color. Here are the properties available in the IColor object: Property Type Description str string CSS-compatible string (this is the same value that would normally be returned when valueAsObject is false) hex string Hex value (does not reflect alpha) r number Red g number Green b number Blue h number Hue s number Saturation v number Value","title":"PropertyFieldColorPicker"},{"location":"controls/PropertyFieldColorPicker/#propertyfieldcolorpicker-control","text":"This control generates a color picker that you can use inside the property pane. PropertyFieldColorPicker PropertyFieldColorPicker color selector","title":"PropertyFieldColorPicker control"},{"location":"controls/PropertyFieldColorPicker/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldColorPicker , PropertyFieldColorPickerStyle } from '@pnp/spfx-property-controls/lib/PropertyFieldColorPicker' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { color : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldColorPicker ( 'color' , { label : 'Color' , selectedColor : this.properties.color , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , disabled : false , debounce : 1000 , isHidden : false , alphaSliderHidden : false , style : PropertyFieldColorPickerStyle.Full , iconName : 'Precipitation' , key : 'colorFieldId' })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldColorPicker/#implementation","text":"The PropertyFieldColorPicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. debounce number no Specify delay after which control value will be set. isHidden boolean no Specify if the control needs to be hidden. selectedColor string or IColor no The CSS-compatible string or an IColor object to describe the initial color alphaSliderHidden boolean no When true, the alpha slider control is hidden showPreview boolean no Whether to show color preview box. style PropertyFieldColorPickerStyle no Determines how the control is displayed (defaults to inline) iconName string no The name of the UI Fabric Font Icon to use for Inline display (defaults to Color) valueAsObject boolean no When true, the property is returned as an IColor object. When false (default), the property is returned as a CSS-compatible string properties any yes Parent web part properties, this object is use to update the property value. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. key string yes An unique key that indicates the identity of this control. Enum PropertyFieldColorPickerStyle Name Description Full Display the full control in the property pane Inline Display the color picker inline","title":"Implementation"},{"location":"controls/PropertyFieldColorPicker/#value","text":"By default, the Color Picker returns the value as a CSS-compatible string. This allows you the flexibility of simply assigning the value to an inline style as is and this is usually sufficient. However, this also limits the information directly available to you since the format could be a Hex code, an RGBA value, or even a named color and may not be suitable for advanced scenarios. By setting the valueAsObject property to true, you will always receive a consistent IColor object that provides you detailed information about the chosen color. Here are the properties available in the IColor object: Property Type Description str string CSS-compatible string (this is the same value that would normally be returned when valueAsObject is false) hex string Hex value (does not reflect alpha) r number Red g number Green b number Blue h number Hue s number Saturation v number Value","title":"Value"},{"location":"controls/PropertyFieldColumnPicker/","text":"PropertyFieldColumnPicker control \u00b6 This control generates a column picker field that can be used in the property pane of your SharePoint Framework web parts. The control automatically retrieves the columns for a given SharePoint list: How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldColumnPicker , PropertyFieldColumnPickerOrderBy } from '@pnp/spfx-property-controls/lib/PropertyFieldColumnPicker' ; You'll probably want to use this control in combination with the PropertyFieldListPicker . Make sure to select the multiSelect prop to false , as this control is designed to work with a single list. Store the list id in your web part properties, as follows: export interface IPropertyControlsTestWebPartProps { list : string ; // Stores the list ID } Create a new property for your web part, as indicated between the BEGIN: and END: comments below: export interface IPropertyControlsTestWebPartProps { list : string ; // Stores the list ID // BEGIN: Added column : string ; // Stores the single column property (property can be configured) // END: Added // BEGIN: Added multiColumn : string ; // Stores the multi column property (property can be configured) // END: Added } Add the custom property control to the groupFields of the web part property pane configuration: // Single column selection returning 'Internal Name' of the selected column PropertyFieldColumnPicker ( 'column' , { label : 'Select a column' , context : this.context , selectedColumn : this.properties.column , listId : this.properties.singleListFiltered , disabled : false , orderBy : PropertyFieldColumnPickerOrderBy.Title , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'columnPickerFieldId' , displayHiddenColumns : false , columnReturnProperty : IColumnReturnProperty [ \"Internal Name\" ] }) // Multi column selection returning the 'Title' of the selected columns PropertyFieldColumnPicker ( 'multiColumn' , { label : 'Select columns' , context : this.context , selectedColumn : this.properties.multiColumn , listId : this.properties.singleListFiltered , disabled : false , orderBy : PropertyFieldColumnPickerOrderBy.Title , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'multiColumnPickerFieldId' , displayHiddenColumns : false , columnReturnProperty : IColumnReturnProperty.Title , multiSelect : true }) // Multi column selection returning the 'Title' of the selected columns as a multi-select dropdown PropertyFieldColumnPicker ( 'multiColumn' , { label : 'Select columns' , context : this.context , selectedColumn : this.properties.multiColumn , listId : this.properties.singleListFiltered , disabled : false , orderBy : PropertyFieldColumnPickerOrderBy.Title , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'multiColumnPickerFieldId' , displayHiddenColumns : false , columnReturnProperty : IColumnReturnProperty.Title , multiSelect : true renderFieldAs : IPropertyFieldRenderOption [ \"Multiselect Dropdown\" ] }) Implementation \u00b6 The PropertyFieldColumnPicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. listId string yes The ID of the list or library you wish to select a column(s) from. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. selectedColumn string | string[] no Initial selected column(s) of the control. orderBy PropertyFieldColumnPickerOrderBy no Specify the property on which you want to order the retrieve set of columns. multiSelect boolean no Specify if you want to have a single or multi-column picker. By default this is set to false (single column picker). webAbsoluteUrl string no Absolute Web Url of target site (user requires permissions) onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. properties any yes Parent web part properties, this object is use to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. columnsToExclude string[] no Defines columns by which should be excluded from the column picker control. You can specify column titles or IDs filter string no Filter columns from OData query. onColumnsRetrieved (columns: ISPColumn[]) => PromiseLike | ISPColumn[] no Callback that is called before the dropdown is populated. displayHiddenColumns boolean no Hidden columns to be returned or not. By default this is set to false (No Hidden columns) columnReturnProperty IColumnReturnProperty no Property to be returned for the selected column(s). renderFieldAs IPropertyFieldRenderOption no Property to render the control as Choice group or Multiselect Dropdown . This is applicable only if the multiselect is true . By default the control will be displayed as Choice Group Enum PropertyFieldColumnPickerOrderBy Name Description Id Sort by column ID Title Sort by column title Enum IColumnReturnProperty Name Description Id Column ID to be returned Title Column Title to be returned Internal Name Column InternalName to be returned Enum IPropertyFieldRenderOption | Name | Description | | ---- | ---- | | Choice Group | Render the control as multi-select checkbox list | Multiselect Dropdown | Render the control as multi-select dropdown","title":"PropertyFieldColumnPicker"},{"location":"controls/PropertyFieldColumnPicker/#propertyfieldcolumnpicker-control","text":"This control generates a column picker field that can be used in the property pane of your SharePoint Framework web parts. The control automatically retrieves the columns for a given SharePoint list:","title":"PropertyFieldColumnPicker control"},{"location":"controls/PropertyFieldColumnPicker/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldColumnPicker , PropertyFieldColumnPickerOrderBy } from '@pnp/spfx-property-controls/lib/PropertyFieldColumnPicker' ; You'll probably want to use this control in combination with the PropertyFieldListPicker . Make sure to select the multiSelect prop to false , as this control is designed to work with a single list. Store the list id in your web part properties, as follows: export interface IPropertyControlsTestWebPartProps { list : string ; // Stores the list ID } Create a new property for your web part, as indicated between the BEGIN: and END: comments below: export interface IPropertyControlsTestWebPartProps { list : string ; // Stores the list ID // BEGIN: Added column : string ; // Stores the single column property (property can be configured) // END: Added // BEGIN: Added multiColumn : string ; // Stores the multi column property (property can be configured) // END: Added } Add the custom property control to the groupFields of the web part property pane configuration: // Single column selection returning 'Internal Name' of the selected column PropertyFieldColumnPicker ( 'column' , { label : 'Select a column' , context : this.context , selectedColumn : this.properties.column , listId : this.properties.singleListFiltered , disabled : false , orderBy : PropertyFieldColumnPickerOrderBy.Title , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'columnPickerFieldId' , displayHiddenColumns : false , columnReturnProperty : IColumnReturnProperty [ \"Internal Name\" ] }) // Multi column selection returning the 'Title' of the selected columns PropertyFieldColumnPicker ( 'multiColumn' , { label : 'Select columns' , context : this.context , selectedColumn : this.properties.multiColumn , listId : this.properties.singleListFiltered , disabled : false , orderBy : PropertyFieldColumnPickerOrderBy.Title , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'multiColumnPickerFieldId' , displayHiddenColumns : false , columnReturnProperty : IColumnReturnProperty.Title , multiSelect : true }) // Multi column selection returning the 'Title' of the selected columns as a multi-select dropdown PropertyFieldColumnPicker ( 'multiColumn' , { label : 'Select columns' , context : this.context , selectedColumn : this.properties.multiColumn , listId : this.properties.singleListFiltered , disabled : false , orderBy : PropertyFieldColumnPickerOrderBy.Title , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'multiColumnPickerFieldId' , displayHiddenColumns : false , columnReturnProperty : IColumnReturnProperty.Title , multiSelect : true renderFieldAs : IPropertyFieldRenderOption [ \"Multiselect Dropdown\" ] })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldColumnPicker/#implementation","text":"The PropertyFieldColumnPicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. listId string yes The ID of the list or library you wish to select a column(s) from. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. selectedColumn string | string[] no Initial selected column(s) of the control. orderBy PropertyFieldColumnPickerOrderBy no Specify the property on which you want to order the retrieve set of columns. multiSelect boolean no Specify if you want to have a single or multi-column picker. By default this is set to false (single column picker). webAbsoluteUrl string no Absolute Web Url of target site (user requires permissions) onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. properties any yes Parent web part properties, this object is use to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. columnsToExclude string[] no Defines columns by which should be excluded from the column picker control. You can specify column titles or IDs filter string no Filter columns from OData query. onColumnsRetrieved (columns: ISPColumn[]) => PromiseLike | ISPColumn[] no Callback that is called before the dropdown is populated. displayHiddenColumns boolean no Hidden columns to be returned or not. By default this is set to false (No Hidden columns) columnReturnProperty IColumnReturnProperty no Property to be returned for the selected column(s). renderFieldAs IPropertyFieldRenderOption no Property to render the control as Choice group or Multiselect Dropdown . This is applicable only if the multiselect is true . By default the control will be displayed as Choice Group Enum PropertyFieldColumnPickerOrderBy Name Description Id Sort by column ID Title Sort by column title Enum IColumnReturnProperty Name Description Id Column ID to be returned Title Column Title to be returned Internal Name Column InternalName to be returned Enum IPropertyFieldRenderOption | Name | Description | | ---- | ---- | | Choice Group | Render the control as multi-select checkbox list | Multiselect Dropdown | Render the control as multi-select dropdown","title":"Implementation"},{"location":"controls/PropertyFieldContentTypePicker/","text":"PropertyFieldContentTypePicker control \u00b6 This control generates a ContentType picker field that can be used in the property pane of your SharePoint Framework web parts. The control automatically retrieves the ContentType for a given SharePoint Site or selected SharePoint list: How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldContentTypePicker , PropertyFieldContentTypePickerOrderBy } from '@pnp/spfx-property-controls/lib/PropertyFieldContentTypePicker' ; You'll probably want to use this control in combination with the PropertyFieldListPicker . Make sure to select the multiSelect prop to false , as this control is designed to work with a single list. Store the list id in your web part properties, as follows: export interface IPropertyControlsTestWebPartProps { list : string ; // Stores the list ID } Create a new property for your web part, as indicated between the BEGIN: and END: comments below: export interface IPropertyControlsTestWebPartProps { list : string ; // Stores the list ID // BEGIN: Added view : string ; // Stores the view ID contentType : string // stores the contenttype ID // END: Added } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldContentTypePicker ( 'contentType' , { label : 'Select a Content Type' , context : this.context , selectedContentType : this.properties.contentType , disabled : false , orderBy : PropertyFieldContentTypeOrderBy.Name , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'contentTypePickerFieldId' }) To fetch the contentTypes of a particular site, change the property pane configuration as follows: PropertyFieldContentTypePicker ( 'contentType' , { label : 'Select a Content Type' , context : this.context , selectedContentType : this.properties.contentType , disabled : false , webAbsoluteUrl : \"https://****.sharepoint.com/sites/*****\" , orderBy : PropertyFieldContentTypeOrderBy.Name , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'contentTypePickerFieldId' }) To fetch the contentTypes of selected list, change the property pane configuration as follows: PropertyFieldContentTypePicker ( 'contentType' , { label : 'Select a Content Type' , context : this.context , selectedContentType : this.properties.contentType , listId : { list - guid } //\"0da3b4b7-8ebd-4f15-87ee-afae5cacadad\" disabled : false , orderBy : PropertyFieldContentTypeOrderBy.Name , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'contentTypePickerFieldId' }) If ListID specified in the propertiesc is not available in the selected site, the control will error out as follows PropertyFieldContentTypePicker ( 'contentType' , { label : 'Select a Content Type' , context : this.context , selectedContentType : this.properties.contentType , listId : { list - guid } //\"0da3b4b7-8ebd-4f15-87ee-afae5cacadad\" disabled : false , orderBy : PropertyFieldContentTypeOrderBy.Name , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'contentTypePickerFieldId' }) Implementation \u00b6 The PropertyFieldContentTypePicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. listId string no The ID of the list or library you wish to select a contentType from. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. selectedContentType string string[] no orderBy PropertyFieldContentTypeOrderBy no Specify the property on which you want to order the retrieve set of ContentTypes. webAbsoluteUrl string no Absolute Web Url of target site (user requires permissions) onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. properties any yes Parent web part properties, this object is use to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. contentTypesToExclude string[] no Defines contentTypes by which should be excluded from the contentType picker control. You can specify contentType titles or IDs filter string no Filter contentTypes from OData query. onContentTypesRetrieved (contentType: ISPContentType[]) => PromiseLike | ISPContentType[] no Callback that is called before the dropdown is populated. Enum PropertyFieldContentTypePickerOrderBy Name Description Id Sort by contentType ID Title Sort by contentType title","title":"PropertyFieldContentTypePicker control"},{"location":"controls/PropertyFieldContentTypePicker/#propertyfieldcontenttypepicker-control","text":"This control generates a ContentType picker field that can be used in the property pane of your SharePoint Framework web parts. The control automatically retrieves the ContentType for a given SharePoint Site or selected SharePoint list:","title":"PropertyFieldContentTypePicker control"},{"location":"controls/PropertyFieldContentTypePicker/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldContentTypePicker , PropertyFieldContentTypePickerOrderBy } from '@pnp/spfx-property-controls/lib/PropertyFieldContentTypePicker' ; You'll probably want to use this control in combination with the PropertyFieldListPicker . Make sure to select the multiSelect prop to false , as this control is designed to work with a single list. Store the list id in your web part properties, as follows: export interface IPropertyControlsTestWebPartProps { list : string ; // Stores the list ID } Create a new property for your web part, as indicated between the BEGIN: and END: comments below: export interface IPropertyControlsTestWebPartProps { list : string ; // Stores the list ID // BEGIN: Added view : string ; // Stores the view ID contentType : string // stores the contenttype ID // END: Added } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldContentTypePicker ( 'contentType' , { label : 'Select a Content Type' , context : this.context , selectedContentType : this.properties.contentType , disabled : false , orderBy : PropertyFieldContentTypeOrderBy.Name , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'contentTypePickerFieldId' }) To fetch the contentTypes of a particular site, change the property pane configuration as follows: PropertyFieldContentTypePicker ( 'contentType' , { label : 'Select a Content Type' , context : this.context , selectedContentType : this.properties.contentType , disabled : false , webAbsoluteUrl : \"https://****.sharepoint.com/sites/*****\" , orderBy : PropertyFieldContentTypeOrderBy.Name , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'contentTypePickerFieldId' }) To fetch the contentTypes of selected list, change the property pane configuration as follows: PropertyFieldContentTypePicker ( 'contentType' , { label : 'Select a Content Type' , context : this.context , selectedContentType : this.properties.contentType , listId : { list - guid } //\"0da3b4b7-8ebd-4f15-87ee-afae5cacadad\" disabled : false , orderBy : PropertyFieldContentTypeOrderBy.Name , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'contentTypePickerFieldId' }) If ListID specified in the propertiesc is not available in the selected site, the control will error out as follows PropertyFieldContentTypePicker ( 'contentType' , { label : 'Select a Content Type' , context : this.context , selectedContentType : this.properties.contentType , listId : { list - guid } //\"0da3b4b7-8ebd-4f15-87ee-afae5cacadad\" disabled : false , orderBy : PropertyFieldContentTypeOrderBy.Name , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'contentTypePickerFieldId' })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldContentTypePicker/#implementation","text":"The PropertyFieldContentTypePicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. listId string no The ID of the list or library you wish to select a contentType from. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. selectedContentType string string[] no orderBy PropertyFieldContentTypeOrderBy no Specify the property on which you want to order the retrieve set of ContentTypes. webAbsoluteUrl string no Absolute Web Url of target site (user requires permissions) onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. properties any yes Parent web part properties, this object is use to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. contentTypesToExclude string[] no Defines contentTypes by which should be excluded from the contentType picker control. You can specify contentType titles or IDs filter string no Filter contentTypes from OData query. onContentTypesRetrieved (contentType: ISPContentType[]) => PromiseLike | ISPContentType[] no Callback that is called before the dropdown is populated. Enum PropertyFieldContentTypePickerOrderBy Name Description Id Sort by contentType ID Title Sort by contentType title","title":"Implementation"},{"location":"controls/PropertyFieldDateTimePicker/","text":"PropertyFieldDateTimePicker control \u00b6 This control generates a Date and Time picker field that can be used in the property pane of your SharePoint Framework web parts. The control can be configured to be date only or date and time. Date only Date picker Date and time How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldDateTimePicker , DateConvention , TimeConvention } from '@pnp/spfx-property-controls/lib/PropertyFieldDateTimePicker' ; Create a new property for your web part, for example: import { IDateTimeFieldValue } from \"@pnp/spfx-property-controls/lib/PropertyFieldDateTimePicker\" ; export interface IPropertyControlsTestWebPartProps { datetime : IDateTimeFieldValue ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldDateTimePicker ( 'datetime' , { label : 'Select the date and time' , initialDate : this.properties.datetime , dateConvention : DateConvention.DateTime , timeConvention : TimeConvention.Hours12 , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'dateTimeFieldId' , showLabels : false }) Implementation \u00b6 The PropertyFieldDateTimePicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. initialData IDateTimeFieldValue yes Initial date and time value of the control. formatData function no Defines a formatDate function that can override the output value. dateConvention DateConvention no Defines the date convention to use. By default this is set to date and time. timeConvention TimeConvention no Defines the time convention to use. By default this is set to 24-hour clock convention. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. properties any yes Parent web part properties, this object is use to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. showLabels boolean no Specify if labels in front of Date and Time parts should be rendered. By default this is set to true Interface IDateTimeFieldValue Property Type Required Description value Date yes JavaScript date value. displayValue string yes Date value formatted as a string. Enum DateConvention Name Description DateTime Shows the date and time picker Date Shows only the date picker Enum TimeConvention Name Description Hours12 Specify the hours in 12-hours (AM / PM) time convention. Hours24 Specify the hours in 24-hours time convention.","title":"PropertyFieldDateTimePicker"},{"location":"controls/PropertyFieldDateTimePicker/#propertyfielddatetimepicker-control","text":"This control generates a Date and Time picker field that can be used in the property pane of your SharePoint Framework web parts. The control can be configured to be date only or date and time. Date only Date picker Date and time","title":"PropertyFieldDateTimePicker control"},{"location":"controls/PropertyFieldDateTimePicker/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldDateTimePicker , DateConvention , TimeConvention } from '@pnp/spfx-property-controls/lib/PropertyFieldDateTimePicker' ; Create a new property for your web part, for example: import { IDateTimeFieldValue } from \"@pnp/spfx-property-controls/lib/PropertyFieldDateTimePicker\" ; export interface IPropertyControlsTestWebPartProps { datetime : IDateTimeFieldValue ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldDateTimePicker ( 'datetime' , { label : 'Select the date and time' , initialDate : this.properties.datetime , dateConvention : DateConvention.DateTime , timeConvention : TimeConvention.Hours12 , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'dateTimeFieldId' , showLabels : false })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldDateTimePicker/#implementation","text":"The PropertyFieldDateTimePicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. initialData IDateTimeFieldValue yes Initial date and time value of the control. formatData function no Defines a formatDate function that can override the output value. dateConvention DateConvention no Defines the date convention to use. By default this is set to date and time. timeConvention TimeConvention no Defines the time convention to use. By default this is set to 24-hour clock convention. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. properties any yes Parent web part properties, this object is use to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. showLabels boolean no Specify if labels in front of Date and Time parts should be rendered. By default this is set to true Interface IDateTimeFieldValue Property Type Required Description value Date yes JavaScript date value. displayValue string yes Date value formatted as a string. Enum DateConvention Name Description DateTime Shows the date and time picker Date Shows only the date picker Enum TimeConvention Name Description Hours12 Specify the hours in 12-hours (AM / PM) time convention. Hours24 Specify the hours in 24-hours time convention.","title":"Implementation"},{"location":"controls/PropertyFieldDropdownWithCallout/","text":"PropertyFieldDropDownWithCallout control \u00b6 This control generates a dropdown control with a callout. PropertyFieldDropDownWithCallout rendering PropertyFieldDropDownWithCallout callout opened How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/PropertyFieldHeader' ; import { PropertyFieldDropdownWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldDropdownWithCallout' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { dropdownInfoHeaderKey : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldDropdownWithCallout ( 'dropdownInfoHeaderKey' , { calloutTrigger : CalloutTriggers.Hover , key : 'dropdownInfoHeaderFieldId' , label : 'Select the version' , options : [{ key : 'v1.0.0' , text : 'v1.0.0' }, { key : 'v1.0.1' , text : 'v1.0.1' }, { key : 'v1.0.2' , text : 'v1.0.2' }, { key : 'v2.0.0' , text : 'v2.0.0' }], selectedKey : this.properties.dropdownInfoHeaderKey , calloutContent : dropdownInfoHeaderCallountContent }) Implement the calloutContent function as follows: private getDropdownInfoHeaderCalloutContent () : JSX . Element { const selectedKey : string = this . properties . dropdownInfoHeaderKey ; if ( selectedKey ) { return React . createElement ( 'div' , {}, `you have selected ${ selectedKey } ` ); } else { return React . createElement ( 'div' , {}, `you haven't selected any version` ); } } Implementation \u00b6 The PropertyFieldDropDownWithCallout control uses the same implementation as the default PropertyPaneDropdown and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"PropertyFieldDropdownWithCallout"},{"location":"controls/PropertyFieldDropdownWithCallout/#propertyfielddropdownwithcallout-control","text":"This control generates a dropdown control with a callout. PropertyFieldDropDownWithCallout rendering PropertyFieldDropDownWithCallout callout opened","title":"PropertyFieldDropDownWithCallout control"},{"location":"controls/PropertyFieldDropdownWithCallout/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/PropertyFieldHeader' ; import { PropertyFieldDropdownWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldDropdownWithCallout' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { dropdownInfoHeaderKey : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldDropdownWithCallout ( 'dropdownInfoHeaderKey' , { calloutTrigger : CalloutTriggers.Hover , key : 'dropdownInfoHeaderFieldId' , label : 'Select the version' , options : [{ key : 'v1.0.0' , text : 'v1.0.0' }, { key : 'v1.0.1' , text : 'v1.0.1' }, { key : 'v1.0.2' , text : 'v1.0.2' }, { key : 'v2.0.0' , text : 'v2.0.0' }], selectedKey : this.properties.dropdownInfoHeaderKey , calloutContent : dropdownInfoHeaderCallountContent }) Implement the calloutContent function as follows: private getDropdownInfoHeaderCalloutContent () : JSX . Element { const selectedKey : string = this . properties . dropdownInfoHeaderKey ; if ( selectedKey ) { return React . createElement ( 'div' , {}, `you have selected ${ selectedKey } ` ); } else { return React . createElement ( 'div' , {}, `you haven't selected any version` ); } }","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldDropdownWithCallout/#implementation","text":"The PropertyFieldDropDownWithCallout control uses the same implementation as the default PropertyPaneDropdown and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"Implementation"},{"location":"controls/PropertyFieldEnterpriseTermPicker/","text":"PropertyFieldEnterpriseTermPicker control \u00b6 This control generates a term picker that can be used in the property pane of your SharePoint Framework web parts. Disclaimer : This control makes use of the @pnp/sp-taxonomy module to retrieve the managed metadata information. It leads to increase of the bundle/package size if the control is being used. Use the control for \"enterprise\" scenarios (large term stores with lots of objects) or if you need to request labels for terms. Empty term picker Selecting terms Selected terms in the panel Empty term picker Term picker: Auto Complete Limit the term set to a specific group or termset How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldEnterpriseTermPicker } from '@pnp/spfx-property-controls/lib/PropertyFieldEnterpriseTermPicker' ; Create a new property for your web part, for example: import { IPickerTerms } from \"@pnp/spfx-property-controls/lib/PropertyFieldEnterpriseTermPicker\" ; export interface IPropertyControlsTestWebPartProps { terms : IPickerTerms ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldEnterpriseTermPicker ( 'terms' , { label : 'Select terms' , panelTitle : 'Select terms' , initialValues : this.properties.terms , allowMultipleSelections : true , excludeSystemGroup : false , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , context : this.context , onGetErrorMessage : null , deferredValidationTime : 0 , limitByGroupNameOrID : 'People' , limitByTermsetNameOrID : 'Location' , key : 'termSetsPickerFieldId' , includeLabels : true }) Implementation \u00b6 The PropertyFieldEnterpriseTermPicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. panelTitle string yes TermSet Picker Panel title. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. initialValues IPickerTerms no Defines the selected by default term sets. allowMultipleSelections boolean no Defines if the user can select only one or many term sets. Default value is false. excludeSystemGroup boolean no Indicator to define if the system Groups are exclude. Default is false. limitByGroupNameOrID string no Limit the term sets that can be used by the group name or ID. limitByTermsetNameOrID string no Limit the terms that can be picked by the Term Set name or ID. hideTermStoreName boolean no Specifies if you want to show or hide the term store name from the panel. isTermSetSelectable boolean no Specify if the term set itself is selectable in the tree view. disabledTermIds string[] no Specify which terms should be disabled in the term set so that they cannot be selected. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. properties any yes Parent web part properties, this object is use to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. resolveDelay number no The delay time in ms before resolving suggestions, which is kicked off when input has been changed. e.g. if a second input change happens within the resolveDelay time, the timer will start over. Only until after the timer completes will onResolveSuggestions be called. Default is 500. includeLabels boolean no Specifies if term labels should be loaded from the store. Interface IPickerTerms Property Type Required Description key string yes The ID of the term name string yes The name of the term path string yes The path of the term termSet string yes The Id of the parent term set of the term termSetName string no The Name of the parent term set of the term Differences between PropertyFieldEnterpriseTermPicker and PropertyFieldTermPicker \u00b6 PropertyFieldEnterpriseTermPicker is implemented to be used for \"enterprise\" Term Stores with large amount of groups, terms sets, and terms. It loads term sets and terms on demand - only at the moment when specified group or term set has been expanded in the Term Store Tree. To implement on-demand loading PropertyFieldEnterpriseTermPicker uses @pnp/sp-taxonomy module from @pnp/pnpjs library. It increases the size of a bundle when the control is used. Additionaly, PropertyFieldEnterpriseTermPicker allows to request labels for the terms in the picker. PropertyFieldTermPicker loads all the groups and term sets from the term service during the initial request. This approach fits most of the scenarios with small and medium number of objects in a term store. Besides that, PropertyFieldTermPicker does not use any additional libraries or modules to retrieve data from the taxonomy service which makes it much more lightweight option in comparison with PropertyFieldEnterpriseTermPicker . See PropertyFieldTermPicker for implementation details. We recommend to use PropertyFieldTermPicker control if you don't need on-demand loading or term labels .","title":"PropertyFieldEnterpriseTermPicker"},{"location":"controls/PropertyFieldEnterpriseTermPicker/#propertyfieldenterprisetermpicker-control","text":"This control generates a term picker that can be used in the property pane of your SharePoint Framework web parts. Disclaimer : This control makes use of the @pnp/sp-taxonomy module to retrieve the managed metadata information. It leads to increase of the bundle/package size if the control is being used. Use the control for \"enterprise\" scenarios (large term stores with lots of objects) or if you need to request labels for terms. Empty term picker Selecting terms Selected terms in the panel Empty term picker Term picker: Auto Complete Limit the term set to a specific group or termset","title":"PropertyFieldEnterpriseTermPicker control"},{"location":"controls/PropertyFieldEnterpriseTermPicker/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldEnterpriseTermPicker } from '@pnp/spfx-property-controls/lib/PropertyFieldEnterpriseTermPicker' ; Create a new property for your web part, for example: import { IPickerTerms } from \"@pnp/spfx-property-controls/lib/PropertyFieldEnterpriseTermPicker\" ; export interface IPropertyControlsTestWebPartProps { terms : IPickerTerms ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldEnterpriseTermPicker ( 'terms' , { label : 'Select terms' , panelTitle : 'Select terms' , initialValues : this.properties.terms , allowMultipleSelections : true , excludeSystemGroup : false , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , context : this.context , onGetErrorMessage : null , deferredValidationTime : 0 , limitByGroupNameOrID : 'People' , limitByTermsetNameOrID : 'Location' , key : 'termSetsPickerFieldId' , includeLabels : true })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldEnterpriseTermPicker/#implementation","text":"The PropertyFieldEnterpriseTermPicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. panelTitle string yes TermSet Picker Panel title. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. initialValues IPickerTerms no Defines the selected by default term sets. allowMultipleSelections boolean no Defines if the user can select only one or many term sets. Default value is false. excludeSystemGroup boolean no Indicator to define if the system Groups are exclude. Default is false. limitByGroupNameOrID string no Limit the term sets that can be used by the group name or ID. limitByTermsetNameOrID string no Limit the terms that can be picked by the Term Set name or ID. hideTermStoreName boolean no Specifies if you want to show or hide the term store name from the panel. isTermSetSelectable boolean no Specify if the term set itself is selectable in the tree view. disabledTermIds string[] no Specify which terms should be disabled in the term set so that they cannot be selected. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. properties any yes Parent web part properties, this object is use to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. resolveDelay number no The delay time in ms before resolving suggestions, which is kicked off when input has been changed. e.g. if a second input change happens within the resolveDelay time, the timer will start over. Only until after the timer completes will onResolveSuggestions be called. Default is 500. includeLabels boolean no Specifies if term labels should be loaded from the store. Interface IPickerTerms Property Type Required Description key string yes The ID of the term name string yes The name of the term path string yes The path of the term termSet string yes The Id of the parent term set of the term termSetName string no The Name of the parent term set of the term","title":"Implementation"},{"location":"controls/PropertyFieldEnterpriseTermPicker/#differences-between-propertyfieldenterprisetermpicker-and-propertyfieldtermpicker","text":"PropertyFieldEnterpriseTermPicker is implemented to be used for \"enterprise\" Term Stores with large amount of groups, terms sets, and terms. It loads term sets and terms on demand - only at the moment when specified group or term set has been expanded in the Term Store Tree. To implement on-demand loading PropertyFieldEnterpriseTermPicker uses @pnp/sp-taxonomy module from @pnp/pnpjs library. It increases the size of a bundle when the control is used. Additionaly, PropertyFieldEnterpriseTermPicker allows to request labels for the terms in the picker. PropertyFieldTermPicker loads all the groups and term sets from the term service during the initial request. This approach fits most of the scenarios with small and medium number of objects in a term store. Besides that, PropertyFieldTermPicker does not use any additional libraries or modules to retrieve data from the taxonomy service which makes it much more lightweight option in comparison with PropertyFieldEnterpriseTermPicker . See PropertyFieldTermPicker for implementation details. We recommend to use PropertyFieldTermPicker control if you don't need on-demand loading or term labels .","title":"Differences between PropertyFieldEnterpriseTermPicker and PropertyFieldTermPicker"},{"location":"controls/PropertyFieldFilePicker/","text":"PropertyFieldFilePicker control \u00b6 File picker control allows to browse and select a file from various places via the property pane. Currently supported locations Recent files - tab allows to select a file from recently modified files based on the search results. Web search - tab uses Bing cognitive services to look for a file. (Only images) OneDrive - tab allows to select a file from the user's One Drive. Site document libraries - tab allows to select a file from the existing site document libraries. Upload - tab allows to upload a file from local drive. From a link - tab allows to paste a link to the document. Overview \u00b6 The control supports all types of file, however it also allows to specify list of extensions for the files that are going to be looked displayed. Currently, only single file selection is supported. Different display types \u00b6 File picker support 3 types of views : List, Compact list and Tiles. In case Tiles view is selected, the control shows the thumbnail of the file. Breadcrumb support \u00b6 The control displays breadcrumb navigation that allows to easily switch folders or document libraries. Paged data load \u00b6 File picker doesn't load all the files that exist in the folder. Instead, it allows to specify how many results are loaded in a batch, and executes paged requests when new data is required. PropertyFieldFilePicker example usage How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your webpart: import { PropertyFieldFilePicker , IPropertyFieldFilePickerProps , IFilePickerResult } from \"@pnp/spfx-property-controls/lib/PropertyFieldFilePicker\" ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { filePickerResult : IFilePickerResult ; } Add the file picker property control to the groupFields of the web part property pane configuration: PropertyFieldFilePicker ( 'filePicker' , { context : this.context , filePickerResult : this.properties.filePickerResult , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , onSave : ( e : IFilePickerResult ) => { console . log ( e ); this . properties . filePickerResult = e ; }, onChanged : ( e : IFilePickerResult ) => { console . log ( e ); this . properties . filePickerResult = e ; }, key : \"filePickerId\" , buttonLabel : \"File Picker\" , label : \"File Picker\" , }) Implementation \u00b6 The PropertyFieldFilePicker control can be configured with the following properties: Property Type Required Description properties any yes Parent web part properties, this object is used to update the property value. key string yes A unique key that indicates the identity of this control. context BaseComponentContext yes Current webpart context. onPropertyChange function yes Defines a onPropertyChange function to raise when the data gets changed. label string no Specifies the text describing the file picker. buttonLabel string no Specifies the label of the file picker button. buttonIcon string no In case it is provided the file picker will be rendered as an action button. onSave (filePickerResult: IFilePickerResult) => void yes Handler when the file has been selected and picker has been closed. onChange (filePickerResult: IFilePickerResult) => void no Handler when the file selection has been changed. onCancel () => void no Handler when the file picker panel has been closed without selection of a file. accepts string[] no Array of strings containing allowed files extensions. E.g. [\".gif\", \".jpg\", \".jpeg\", \".bmp\", \".dib\", \".tif\", \".tiff\", \".ico\", \".png\", \".jxr\", \".svg\"] required boolean no Sets the label to inform that the value is required. bingAPIKey string no Used to execute WebSearch. If not provided SearchTab will not be available. disabled boolean no Specifies if the picker button is disabled itemsCountQueryLimit number no Number of items to obtain when executing REST queries. Default 100. hideRecentTab boolean no Specifies if RecentTab should be hidden. hideWebSearchTab boolean no Specifies if WebSearchTab should be hidden. hideStockImages boolean no Specifies if StockImagesTab should be hidden. hideOrganisationalAssetTab boolean no Specifies if OrganisationalAssetTab should be hidden. hideOneDriveTab boolean no Specifies if OneDriveTab should be hidden. hideSiteFilesTab boolean no Specifies if SiteFilesTab should be hidden. hideLocalUploadTab boolean no Specifies if LocalUploadTab should be hidden. hideLinkUploadTab boolean no Specifies if LinkUploadTab should be hidden. storeLastActiveTab boolean no Specifies if last active tab will be stored after the Upload panel has been closed. Note: the value of selected tab is stored in the queryString hash. Default true defaultSelectedTab FilePickerTabType no Specify a tab to be selected by default. If not specified, it will default to \"RecentTab\". allowExternalLinks boolean no Specifies if external links should be allowed. checkIfFileExists boolean no When using file links, this property allows the user to choose if the control should check if the link point to a file that exists or not. includePageLibraries boolean no Specifies if site pages should be displayed. interface IFilePickerResult The value returned from the selected file object. Value Type Description fileName string File name of the result with the extension. fileNameWithoutExtension string File name of the result without the extension. fileAbsoluteUrl string Absolute URL of the file. Null in case of file upload. downloadFileContent () => Promise Function allows to download file content. Returns File object.","title":"PropertyFieldFilePicker"},{"location":"controls/PropertyFieldFilePicker/#propertyfieldfilepicker-control","text":"File picker control allows to browse and select a file from various places via the property pane. Currently supported locations Recent files - tab allows to select a file from recently modified files based on the search results. Web search - tab uses Bing cognitive services to look for a file. (Only images) OneDrive - tab allows to select a file from the user's One Drive. Site document libraries - tab allows to select a file from the existing site document libraries. Upload - tab allows to upload a file from local drive. From a link - tab allows to paste a link to the document.","title":"PropertyFieldFilePicker control"},{"location":"controls/PropertyFieldFilePicker/#overview","text":"The control supports all types of file, however it also allows to specify list of extensions for the files that are going to be looked displayed. Currently, only single file selection is supported.","title":"Overview"},{"location":"controls/PropertyFieldFilePicker/#different-display-types","text":"File picker support 3 types of views : List, Compact list and Tiles. In case Tiles view is selected, the control shows the thumbnail of the file.","title":"Different display types"},{"location":"controls/PropertyFieldFilePicker/#breadcrumb-support","text":"The control displays breadcrumb navigation that allows to easily switch folders or document libraries.","title":"Breadcrumb support"},{"location":"controls/PropertyFieldFilePicker/#paged-data-load","text":"File picker doesn't load all the files that exist in the folder. Instead, it allows to specify how many results are loaded in a batch, and executes paged requests when new data is required. PropertyFieldFilePicker example usage","title":"Paged data load"},{"location":"controls/PropertyFieldFilePicker/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your webpart: import { PropertyFieldFilePicker , IPropertyFieldFilePickerProps , IFilePickerResult } from \"@pnp/spfx-property-controls/lib/PropertyFieldFilePicker\" ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { filePickerResult : IFilePickerResult ; } Add the file picker property control to the groupFields of the web part property pane configuration: PropertyFieldFilePicker ( 'filePicker' , { context : this.context , filePickerResult : this.properties.filePickerResult , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , onSave : ( e : IFilePickerResult ) => { console . log ( e ); this . properties . filePickerResult = e ; }, onChanged : ( e : IFilePickerResult ) => { console . log ( e ); this . properties . filePickerResult = e ; }, key : \"filePickerId\" , buttonLabel : \"File Picker\" , label : \"File Picker\" , })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldFilePicker/#implementation","text":"The PropertyFieldFilePicker control can be configured with the following properties: Property Type Required Description properties any yes Parent web part properties, this object is used to update the property value. key string yes A unique key that indicates the identity of this control. context BaseComponentContext yes Current webpart context. onPropertyChange function yes Defines a onPropertyChange function to raise when the data gets changed. label string no Specifies the text describing the file picker. buttonLabel string no Specifies the label of the file picker button. buttonIcon string no In case it is provided the file picker will be rendered as an action button. onSave (filePickerResult: IFilePickerResult) => void yes Handler when the file has been selected and picker has been closed. onChange (filePickerResult: IFilePickerResult) => void no Handler when the file selection has been changed. onCancel () => void no Handler when the file picker panel has been closed without selection of a file. accepts string[] no Array of strings containing allowed files extensions. E.g. [\".gif\", \".jpg\", \".jpeg\", \".bmp\", \".dib\", \".tif\", \".tiff\", \".ico\", \".png\", \".jxr\", \".svg\"] required boolean no Sets the label to inform that the value is required. bingAPIKey string no Used to execute WebSearch. If not provided SearchTab will not be available. disabled boolean no Specifies if the picker button is disabled itemsCountQueryLimit number no Number of items to obtain when executing REST queries. Default 100. hideRecentTab boolean no Specifies if RecentTab should be hidden. hideWebSearchTab boolean no Specifies if WebSearchTab should be hidden. hideStockImages boolean no Specifies if StockImagesTab should be hidden. hideOrganisationalAssetTab boolean no Specifies if OrganisationalAssetTab should be hidden. hideOneDriveTab boolean no Specifies if OneDriveTab should be hidden. hideSiteFilesTab boolean no Specifies if SiteFilesTab should be hidden. hideLocalUploadTab boolean no Specifies if LocalUploadTab should be hidden. hideLinkUploadTab boolean no Specifies if LinkUploadTab should be hidden. storeLastActiveTab boolean no Specifies if last active tab will be stored after the Upload panel has been closed. Note: the value of selected tab is stored in the queryString hash. Default true defaultSelectedTab FilePickerTabType no Specify a tab to be selected by default. If not specified, it will default to \"RecentTab\". allowExternalLinks boolean no Specifies if external links should be allowed. checkIfFileExists boolean no When using file links, this property allows the user to choose if the control should check if the link point to a file that exists or not. includePageLibraries boolean no Specifies if site pages should be displayed. interface IFilePickerResult The value returned from the selected file object. Value Type Description fileName string File name of the result with the extension. fileNameWithoutExtension string File name of the result without the extension. fileAbsoluteUrl string Absolute URL of the file. Null in case of file upload. downloadFileContent () => Promise Function allows to download file content. Returns File object.","title":"Implementation"},{"location":"controls/PropertyFieldGrid/","text":"PropertyFieldGrid control \u00b6 This control generates a Grid Control . PropertyFieldGrid example usage How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldGrid , IItem } from '@pnp/spfx-property-controls/lib/PropertyFieldGrid' ; - define the items to show in the grid : const gridItems : IItem [] = [ { key : \"1\" , icon : React.createElement ( DocumentBulletListRegular ) , title : \"File 1\" , description : \"This is the first document\" }, { key : \"2\" , icon : React.createElement ( DocumentBulletListRegular ) , title : \"File 2\" , description : \"This is the 2 document\" }, { key : \"3\" , icon : React.createElement ( DocumentBulletListRegular ) , title : \"File 3\" , description : \"This is the 3 document\" }, { key : \"4\" , icon : React.createElement ( DocumentBulletListRegular ) , title : \"File 4\" , description : \"This is the 4 document\" } ]; - Add the custom property Grid to the `groupFields` of the web part property pane configuration : PropertyFieldGrid ( 'gridItems' , { multiSelect : true , items : gridItems , label : 'Grid Items' , key : 'gridFieldId' , defaultSelectedItems : this.properties.gridItems , maxHeight : 500 , className : 'gridClass' , styles : { padding : 10 }, isVisible : true , maxHeight : 500 , column1Label : 'File' , column2Label : 'Location' , onSelected : ( item : IItem []) => { console . log ( item ); } ) Implementation \u00b6 The PropertyFieldGrid control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. styles IButtonStyles no styles object (root container) classname string no css ClassName (root container) isVisible boolean no Indicate if grid is visible label string no label of Grid defaultSelectedItems (items:IItem[]) =>void no defined default Item selected maxHeigth number no max height of the container , default 400px onSelected item[] no selected Items when are selected items IItem[] yes Items to show multiSelect boolean no Enable multiSelect , default single column1Label string no Label for header of first grid column column2Label string no Label for header of second grid column","title":"PropertyFieldGrid"},{"location":"controls/PropertyFieldGrid/#propertyfieldgrid-control","text":"This control generates a Grid Control . PropertyFieldGrid example usage","title":"PropertyFieldGrid control"},{"location":"controls/PropertyFieldGrid/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldGrid , IItem } from '@pnp/spfx-property-controls/lib/PropertyFieldGrid' ; - define the items to show in the grid : const gridItems : IItem [] = [ { key : \"1\" , icon : React.createElement ( DocumentBulletListRegular ) , title : \"File 1\" , description : \"This is the first document\" }, { key : \"2\" , icon : React.createElement ( DocumentBulletListRegular ) , title : \"File 2\" , description : \"This is the 2 document\" }, { key : \"3\" , icon : React.createElement ( DocumentBulletListRegular ) , title : \"File 3\" , description : \"This is the 3 document\" }, { key : \"4\" , icon : React.createElement ( DocumentBulletListRegular ) , title : \"File 4\" , description : \"This is the 4 document\" } ]; - Add the custom property Grid to the `groupFields` of the web part property pane configuration : PropertyFieldGrid ( 'gridItems' , { multiSelect : true , items : gridItems , label : 'Grid Items' , key : 'gridFieldId' , defaultSelectedItems : this.properties.gridItems , maxHeight : 500 , className : 'gridClass' , styles : { padding : 10 }, isVisible : true , maxHeight : 500 , column1Label : 'File' , column2Label : 'Location' , onSelected : ( item : IItem []) => { console . log ( item ); } )","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldGrid/#implementation","text":"The PropertyFieldGrid control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. styles IButtonStyles no styles object (root container) classname string no css ClassName (root container) isVisible boolean no Indicate if grid is visible label string no label of Grid defaultSelectedItems (items:IItem[]) =>void no defined default Item selected maxHeigth number no max height of the container , default 400px onSelected item[] no selected Items when are selected items IItem[] yes Items to show multiSelect boolean no Enable multiSelect , default single column1Label string no Label for header of first grid column column2Label string no Label for header of second grid column","title":"Implementation"},{"location":"controls/PropertyFieldGuid/","text":"PropertyFieldGuid control \u00b6 This control generates an input field for GUID. Incorrect GUID entered will result into an invalid input. PropertyFieldGuid example usage How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldGuid } from '@pnp/spfx-property-controls/lib/PropertyFieldGuid' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { guid : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldGuid ( 'guid' , { key : 'guid' , label : \"GUID\" , value : this.properties.guid }) You can also implement the property your own error message with the errorMessage property with the following syntax: PropertyFieldGuid ( 'guid' , { key : 'guid' , label : \"GUID\" , value : this.properties.guid , errorMessage : \"Please enter a correct GUID\" }) Implementation \u00b6 The PropertyFieldGuid control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. label string yes Property field label displayed on top. value string no Value to be displayed in the Guid field. errorMessage string no If set, this will be displayed as an error message.","title":"PropertyFieldGuidPicker"},{"location":"controls/PropertyFieldGuid/#propertyfieldguid-control","text":"This control generates an input field for GUID. Incorrect GUID entered will result into an invalid input. PropertyFieldGuid example usage","title":"PropertyFieldGuid control"},{"location":"controls/PropertyFieldGuid/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldGuid } from '@pnp/spfx-property-controls/lib/PropertyFieldGuid' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { guid : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldGuid ( 'guid' , { key : 'guid' , label : \"GUID\" , value : this.properties.guid }) You can also implement the property your own error message with the errorMessage property with the following syntax: PropertyFieldGuid ( 'guid' , { key : 'guid' , label : \"GUID\" , value : this.properties.guid , errorMessage : \"Please enter a correct GUID\" })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldGuid/#implementation","text":"The PropertyFieldGuid control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. label string yes Property field label displayed on top. value string no Value to be displayed in the Guid field. errorMessage string no If set, this will be displayed as an error message.","title":"Implementation"},{"location":"controls/PropertyFieldIconPicker/","text":"IconPicker control \u00b6 Property pane icon picker control that allows to search and select an icon from office-ui-fabric-react icons. Overview \u00b6 The control allows selecting an icon from the list of icons available in the office-ui-fabric-react library. Icon list is a static copy of available icons. Currently, only one icon selection is supported. Displayed in the panel \u00b6 Icon picker always opens a new panel where you can pick an icon. The panel displays all the icons and maintains readability. Picker does not displays selected icon outside the panel. How to use this control \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out the getting started page for more information about installing the dependency. Import the following module to your component: import { PropertyFieldIconPicker } from '@pnp/spfx-property-controls/lib/PropertyFieldIconPicker' ; Use the PropertyFieldIconPicker control in your code as follows: PropertyFieldIconPicker ( 'iconPicker' , { currentIcon : this.properties.iconPicker , key : \"iconPickerId\" , onSave : ( icon : string ) => { console . log ( icon ); this . properties . iconPicker = icon ; }, onChanged : ( icon : string ) => { console . log ( icon ); }, buttonLabel : \"Icon\" , renderOption : \"panel\" , properties : this.properties , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), label : \"Icon Picker\" }), Implementation \u00b6 The PropertyFieldIconPicker component can be configured with the following properties: Property Type Required Description buttonLabel string no Specifies the label of the icon picker button. onSave (iconName: string) => void yes Handler when the icon has been selected and picker has been closed. onChanged (iconName: string) => void no Handler when the icon selection has been changed. disabled boolean no Specifies if the picker button is disabled buttonClassName boolean no If provided, additional class name will be added to the picker button panelClassName boolean no If provided, additional class name will be added to the picker panel currentIcon string no Specifies default selected icon renderOption dialog , panel no Specifies how to render list of Icons, Values : 'Panel' or 'Dialog' default value 'Panel' onPropertyChange function yes Defines a onPropertyChange function to raise when the teams get changed. properties any yes Parent web part properties, this object is used to update the property value. key string yes An unique key that indicates the identity of this control. label string no A label to describe the icon picker control.","title":"PropertyFieldIconPicker"},{"location":"controls/PropertyFieldIconPicker/#iconpicker-control","text":"Property pane icon picker control that allows to search and select an icon from office-ui-fabric-react icons.","title":"IconPicker control"},{"location":"controls/PropertyFieldIconPicker/#overview","text":"The control allows selecting an icon from the list of icons available in the office-ui-fabric-react library. Icon list is a static copy of available icons. Currently, only one icon selection is supported.","title":"Overview"},{"location":"controls/PropertyFieldIconPicker/#displayed-in-the-panel","text":"Icon picker always opens a new panel where you can pick an icon. The panel displays all the icons and maintains readability. Picker does not displays selected icon outside the panel.","title":"Displayed in the panel"},{"location":"controls/PropertyFieldIconPicker/#how-to-use-this-control","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out the getting started page for more information about installing the dependency. Import the following module to your component: import { PropertyFieldIconPicker } from '@pnp/spfx-property-controls/lib/PropertyFieldIconPicker' ; Use the PropertyFieldIconPicker control in your code as follows: PropertyFieldIconPicker ( 'iconPicker' , { currentIcon : this.properties.iconPicker , key : \"iconPickerId\" , onSave : ( icon : string ) => { console . log ( icon ); this . properties . iconPicker = icon ; }, onChanged : ( icon : string ) => { console . log ( icon ); }, buttonLabel : \"Icon\" , renderOption : \"panel\" , properties : this.properties , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), label : \"Icon Picker\" }),","title":"How to use this control"},{"location":"controls/PropertyFieldIconPicker/#implementation","text":"The PropertyFieldIconPicker component can be configured with the following properties: Property Type Required Description buttonLabel string no Specifies the label of the icon picker button. onSave (iconName: string) => void yes Handler when the icon has been selected and picker has been closed. onChanged (iconName: string) => void no Handler when the icon selection has been changed. disabled boolean no Specifies if the picker button is disabled buttonClassName boolean no If provided, additional class name will be added to the picker button panelClassName boolean no If provided, additional class name will be added to the picker panel currentIcon string no Specifies default selected icon renderOption dialog , panel no Specifies how to render list of Icons, Values : 'Panel' or 'Dialog' default value 'Panel' onPropertyChange function yes Defines a onPropertyChange function to raise when the teams get changed. properties any yes Parent web part properties, this object is used to update the property value. key string yes An unique key that indicates the identity of this control. label string no A label to describe the icon picker control.","title":"Implementation"},{"location":"controls/PropertyFieldLabelWithCallout/","text":"PropertyFieldLabelWithCallout control \u00b6 This control generates a label control with a callout. PropertyFieldLabelWithCallout rendering PropertyFieldLabelWithCallout callout opened How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/Callout' ; import { PropertyFieldLabelWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldLabelWithCallout' ; Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldLabelWithCallout ( 'fakeProp' , { calloutTrigger : CalloutTriggers.Click , key : 'LabelWithCalloutFieldId' , calloutContent : 'Use dropdowns below to select list and list\\'s field to work with' , calloutWidth : 200 , text : 'Select List and Field' }) Implementation \u00b6 The PropertyFieldLabelWithCallout control uses the same implementation as the default PropertyPaneLabel and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"PropertyFieldLabelWithCallout"},{"location":"controls/PropertyFieldLabelWithCallout/#propertyfieldlabelwithcallout-control","text":"This control generates a label control with a callout. PropertyFieldLabelWithCallout rendering PropertyFieldLabelWithCallout callout opened","title":"PropertyFieldLabelWithCallout control"},{"location":"controls/PropertyFieldLabelWithCallout/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/Callout' ; import { PropertyFieldLabelWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldLabelWithCallout' ; Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldLabelWithCallout ( 'fakeProp' , { calloutTrigger : CalloutTriggers.Click , key : 'LabelWithCalloutFieldId' , calloutContent : 'Use dropdowns below to select list and list\\'s field to work with' , calloutWidth : 200 , text : 'Select List and Field' })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldLabelWithCallout/#implementation","text":"The PropertyFieldLabelWithCallout control uses the same implementation as the default PropertyPaneLabel and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"Implementation"},{"location":"controls/PropertyFieldLinkWithCallout/","text":"PropertyFieldLinkWithCallout control \u00b6 This control generates a link control with a callout. PropertyFieldLinkWithCallout rendering PropertyFieldLinkWithCallout callout opened How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/Callout' ; import { PropertyFieldLinkWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldLinkWithCallout' ; Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldLinkWithCallout ( 'fakeProp' , { calloutTrigger : CalloutTriggers.Click , key : 'linkWithCalloutFieldId' , calloutContent : React.createElement ( 'p' , {}, 'Click the link to open a new page with Application Terms & Conditions' ), calloutWidth : 200 , text : 'Terms & Conditions' , href : 'https://github.com/pnp/sp-dev-fx-property-controls' , target : '_blank' }) Implementation \u00b6 The PropertyFieldLinkWithCallout control uses the same implementation as the default PropertyPaneLink and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"PropertyFieldLinkWithCallout"},{"location":"controls/PropertyFieldLinkWithCallout/#propertyfieldlinkwithcallout-control","text":"This control generates a link control with a callout. PropertyFieldLinkWithCallout rendering PropertyFieldLinkWithCallout callout opened","title":"PropertyFieldLinkWithCallout control"},{"location":"controls/PropertyFieldLinkWithCallout/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/Callout' ; import { PropertyFieldLinkWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldLinkWithCallout' ; Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldLinkWithCallout ( 'fakeProp' , { calloutTrigger : CalloutTriggers.Click , key : 'linkWithCalloutFieldId' , calloutContent : React.createElement ( 'p' , {}, 'Click the link to open a new page with Application Terms & Conditions' ), calloutWidth : 200 , text : 'Terms & Conditions' , href : 'https://github.com/pnp/sp-dev-fx-property-controls' , target : '_blank' })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldLinkWithCallout/#implementation","text":"The PropertyFieldLinkWithCallout control uses the same implementation as the default PropertyPaneLink and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"Implementation"},{"location":"controls/PropertyFieldListPicker/","text":"PropertyFieldListPicker control \u00b6 This control generates a list picker field that can be used in the property pane of your SharePoint Framework web parts. The control can be configured as a single or multi-selection list picker: Single list picker Multi list picker How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldListPicker , PropertyFieldListPickerOrderBy } from '@pnp/spfx-property-controls/lib/PropertyFieldListPicker' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { lists : string | string []; // Stores the list ID(s) } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldListPicker ( 'lists' , { label : 'Select a list' , selectedList : this.properties.lists , includeHidden : false , orderBy : PropertyFieldListPickerOrderBy.Title , disabled : false , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , context : this.context , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'listPickerFieldId' }) Implementation \u00b6 The PropertyFieldListPicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. selectedList string | string[] | IPropertyFieldList | IPropertyFieldList[] no Initial selected list set of the control. baseTemplate number no BaseTemplate ID of the lists or libraries you want to return. includeHidden boolean no Specify if you want to include hidden lists in the list picker. By default this is set to true . orderBy PropertyFieldListPickerOrderBy no Specify the property on which you want to order the retrieve set of lists. multiSelect boolean no Specify if you want to have a single or multi-list picker. By default this is set to false (single list picker). showSelectAll boolean no Specify if you want the Select All checkbox. By default this is set to false (mult-list picker only). selectAllInList boolean no Specify where to show the Select All checkbox. When false (default), checkbox is shown before the label, when true it is shown with the lists (mult-list picker only). selectAllInListLabel string no The label to use for the in list select all checkbox (mult-list picker only). webAbsoluteUrl string no Absolute Web Url of target site (user requires permissions) onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. properties any yes Parent web part properties, this object is use to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. listsToExclude string[] no Defines list titles which should be excluded from the list picker control (list title or ID). filter string no Filter list from OData query (takes precedence over Hidden and BaseTemplate Filters). onListsRetrieved (lists: ISPList[]) => PromiseLike | ISPList[] no Callback that is called before the dropdown is populated. includeListTitleAndUrl boolean no Specifies if the picker returns list id, title and url as an object instead on id. contentTypeId string no Specifies a content type ID , or a portion of one. If specified, all the lists presented in the control will have at least one content type beginning with the specified content type id. Interface IPropertyFieldList Property Type Required Description id string yes The ID of the list title string no List's title url string no List's server relative url Enum PropertyFieldListPickerOrderBy Name Description Id Sort by list / library ID Title Sort by list / library title","title":"PropertyFieldListPicker"},{"location":"controls/PropertyFieldListPicker/#propertyfieldlistpicker-control","text":"This control generates a list picker field that can be used in the property pane of your SharePoint Framework web parts. The control can be configured as a single or multi-selection list picker: Single list picker Multi list picker","title":"PropertyFieldListPicker control"},{"location":"controls/PropertyFieldListPicker/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldListPicker , PropertyFieldListPickerOrderBy } from '@pnp/spfx-property-controls/lib/PropertyFieldListPicker' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { lists : string | string []; // Stores the list ID(s) } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldListPicker ( 'lists' , { label : 'Select a list' , selectedList : this.properties.lists , includeHidden : false , orderBy : PropertyFieldListPickerOrderBy.Title , disabled : false , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , context : this.context , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'listPickerFieldId' })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldListPicker/#implementation","text":"The PropertyFieldListPicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. selectedList string | string[] | IPropertyFieldList | IPropertyFieldList[] no Initial selected list set of the control. baseTemplate number no BaseTemplate ID of the lists or libraries you want to return. includeHidden boolean no Specify if you want to include hidden lists in the list picker. By default this is set to true . orderBy PropertyFieldListPickerOrderBy no Specify the property on which you want to order the retrieve set of lists. multiSelect boolean no Specify if you want to have a single or multi-list picker. By default this is set to false (single list picker). showSelectAll boolean no Specify if you want the Select All checkbox. By default this is set to false (mult-list picker only). selectAllInList boolean no Specify where to show the Select All checkbox. When false (default), checkbox is shown before the label, when true it is shown with the lists (mult-list picker only). selectAllInListLabel string no The label to use for the in list select all checkbox (mult-list picker only). webAbsoluteUrl string no Absolute Web Url of target site (user requires permissions) onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. properties any yes Parent web part properties, this object is use to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. listsToExclude string[] no Defines list titles which should be excluded from the list picker control (list title or ID). filter string no Filter list from OData query (takes precedence over Hidden and BaseTemplate Filters). onListsRetrieved (lists: ISPList[]) => PromiseLike | ISPList[] no Callback that is called before the dropdown is populated. includeListTitleAndUrl boolean no Specifies if the picker returns list id, title and url as an object instead on id. contentTypeId string no Specifies a content type ID , or a portion of one. If specified, all the lists presented in the control will have at least one content type beginning with the specified content type id. Interface IPropertyFieldList Property Type Required Description id string yes The ID of the list title string no List's title url string no List's server relative url Enum PropertyFieldListPickerOrderBy Name Description Id Sort by list / library ID Title Sort by list / library title","title":"Implementation"},{"location":"controls/PropertyFieldMessage/","text":"PropertyFieldMessage control \u00b6 This control generates a Message Bar that will show messages . PropertyFieldMessage example usage How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldMessage } from '@pnp/spfx-property-controls/lib/PropertyFieldMessage' ; import { MessageBarType } from 'office-ui-fabric-react/lib/MessageBar' ; Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldMessage ( \"\" , { key : \"MessageKey\" , text : \"Something went wrong... try later.\" , messageType : MessageBarType.error , isVisible : true }) Implementation \u00b6 The PropertyFieldMessage control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. text string yes Message Text messageType MessageBarType yes type of message multiline boolean no Indicate if message is multiline classname string no css ClassName isVisible boolean yes Indicate if message is visible","title":"PropertyFieldMessage"},{"location":"controls/PropertyFieldMessage/#propertyfieldmessage-control","text":"This control generates a Message Bar that will show messages . PropertyFieldMessage example usage","title":"PropertyFieldMessage control"},{"location":"controls/PropertyFieldMessage/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldMessage } from '@pnp/spfx-property-controls/lib/PropertyFieldMessage' ; import { MessageBarType } from 'office-ui-fabric-react/lib/MessageBar' ; Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldMessage ( \"\" , { key : \"MessageKey\" , text : \"Something went wrong... try later.\" , messageType : MessageBarType.error , isVisible : true })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldMessage/#implementation","text":"The PropertyFieldMessage control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. text string yes Message Text messageType MessageBarType yes type of message multiline boolean no Indicate if message is multiline classname string no css ClassName isVisible boolean yes Indicate if message is visible","title":"Implementation"},{"location":"controls/PropertyFieldMonacoEditor/","text":"PropertyFieldMonacoEditor control \u00b6 This control implement Microsoft Monaco Editor. PropertyFieldMonacoEditor example usage How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldMonacoEditor } from '@pnp/spfx-property-controls/lib/PropertyFieldMonacoEditor' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { monacoEditorValue : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldMonacoEditor ( 'monacoEditor' , { key : 'monacoEditor' , value : this.properties.monacoEditorValue , showMiniMap : true , onChange : this.monacoChange , language : \"json\" , showLineNumbers : true , }), Implementation \u00b6 The PropertyFieldMonacoEditor control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. value number yes Value field. theme string no 'vs-dark' readOnly boolean no editor is read only showLineNumbers boolean no Show line number - default no showMiniMap boolean no Show Mini Map - default yes onChange (newValue:string) => void; no If set, this method is used to get the the input value when it changed language string yes language, please see https://microsoft.github.io/monaco-editor/index.html for all supported languages jsonDiagnosticsOptions monaco.languages.json.DiagnosticsOptions no see https://microsoft.github.io/monaco-editor/api/interfaces/monaco.languages.json.DiagnosticsOptions.html jscriptDiagnosticsOptions monaco.languages.typescript.DiagnosticsOptions no see https://microsoft.github.io/monaco-editor/api/interfaces/monaco.languages.typescript.DiagnosticsOptions.html panelWidth number no Panel Width default 800px.","title":"PropertyFieldMonacoEditor"},{"location":"controls/PropertyFieldMonacoEditor/#propertyfieldmonacoeditor-control","text":"This control implement Microsoft Monaco Editor. PropertyFieldMonacoEditor example usage","title":"PropertyFieldMonacoEditor control"},{"location":"controls/PropertyFieldMonacoEditor/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldMonacoEditor } from '@pnp/spfx-property-controls/lib/PropertyFieldMonacoEditor' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { monacoEditorValue : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldMonacoEditor ( 'monacoEditor' , { key : 'monacoEditor' , value : this.properties.monacoEditorValue , showMiniMap : true , onChange : this.monacoChange , language : \"json\" , showLineNumbers : true , }),","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldMonacoEditor/#implementation","text":"The PropertyFieldMonacoEditor control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. value number yes Value field. theme string no 'vs-dark' readOnly boolean no editor is read only showLineNumbers boolean no Show line number - default no showMiniMap boolean no Show Mini Map - default yes onChange (newValue:string) => void; no If set, this method is used to get the the input value when it changed language string yes language, please see https://microsoft.github.io/monaco-editor/index.html for all supported languages jsonDiagnosticsOptions monaco.languages.json.DiagnosticsOptions no see https://microsoft.github.io/monaco-editor/api/interfaces/monaco.languages.json.DiagnosticsOptions.html jscriptDiagnosticsOptions monaco.languages.typescript.DiagnosticsOptions no see https://microsoft.github.io/monaco-editor/api/interfaces/monaco.languages.typescript.DiagnosticsOptions.html panelWidth number no Panel Width default 800px.","title":"Implementation"},{"location":"controls/PropertyFieldMultiSelect/","text":"PropertyFieldMultiSelect control \u00b6 This control generates a dropdown with the possibility of selecting multiple values. Multi-select field rendering How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldMultiSelect } from '@pnp/spfx-property-controls/lib/PropertyFieldMultiSelect' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { multiSelect : string []; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldMultiSelect ( 'multiSelect' , { key : 'multiSelect' , label : \"Multi select field\" , options : [ { key : \"EN\" , text : \"EN\" }, { key : \"FR\" , text : \"FR\" }, { key : \"NL\" , text : \"NL\" } ], selectedKeys : this.properties.multiSelect }) Implementation \u00b6 The PropertyFieldMultiSelect control uses the same implementation as the default PropertyPaneDropdown control and has the following additional properties: Property Type Required Description selectedKeys string[] OR number[] no Specifies the selected keys. Important : Do not make use of the selectedKey property. This property is inherited from the PropertyPaneDropdown control.","title":"PropertyFieldMultiSelect"},{"location":"controls/PropertyFieldMultiSelect/#propertyfieldmultiselect-control","text":"This control generates a dropdown with the possibility of selecting multiple values. Multi-select field rendering","title":"PropertyFieldMultiSelect control"},{"location":"controls/PropertyFieldMultiSelect/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldMultiSelect } from '@pnp/spfx-property-controls/lib/PropertyFieldMultiSelect' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { multiSelect : string []; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldMultiSelect ( 'multiSelect' , { key : 'multiSelect' , label : \"Multi select field\" , options : [ { key : \"EN\" , text : \"EN\" }, { key : \"FR\" , text : \"FR\" }, { key : \"NL\" , text : \"NL\" } ], selectedKeys : this.properties.multiSelect })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldMultiSelect/#implementation","text":"The PropertyFieldMultiSelect control uses the same implementation as the default PropertyPaneDropdown control and has the following additional properties: Property Type Required Description selectedKeys string[] OR number[] no Specifies the selected keys. Important : Do not make use of the selectedKey property. This property is inherited from the PropertyPaneDropdown control.","title":"Implementation"},{"location":"controls/PropertyFieldNumber/","text":"PropertyFieldNumber control \u00b6 This control generates an input field for numbers. Text is not allowed as this will result into an invalid input. PropertyFieldNumber example usage How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldNumber } from '@pnp/spfx-property-controls/lib/PropertyFieldNumber' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { numberValue : number ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldNumber ( \"numberValue\" , { key : \"numberValue\" , label : \"Number value only\" , description : \"Number field description\" , value : this.properties.numberValue , maxValue : 10 , minValue : 1 , disabled : false }) You can also implement your own validation with the onGetErrorMessage property as follows: PropertyFieldNumber ( \"numberValue\" , { key : \"numberValue\" , label : \"Number value only\" , description : \"Number field description\" , value : this.properties.numberValue , maxValue : 10 , minValue : 1 , disabled : false , onGetErrorMessage : ( value : number ) => { if ( value % 2 !== 0 ) { return 'Only even numbers are allowed' ; } return '' ; } }) Implementation \u00b6 The PropertyFieldNumber control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. label string yes Property field label displayed on top. description string no The number field input description. placeholder string no Placeholder text to be displayed in the number field. value number no Value to be displayed in the number field. maxValue number no Maximum number that can be inserted. minValue number no Minimum number that can be inserted. ariaLabel string no The aria label for the number field. disabled boolean no Specify if the control needs to be disabled. errorMessage string no If set, this will be displayed as an error message. onGetErrorMessage (value: number) => string no If set, this method is used to get the validation error message and determine whether the input value is valid or not. deferredValidationTime number no Number field will start to validate after users stop typing for deferredValidationTime milliseconds. precision number no Precision to round the value to. If the precision is not defined the value is not rounded.","title":"PropertyFieldNumber"},{"location":"controls/PropertyFieldNumber/#propertyfieldnumber-control","text":"This control generates an input field for numbers. Text is not allowed as this will result into an invalid input. PropertyFieldNumber example usage","title":"PropertyFieldNumber control"},{"location":"controls/PropertyFieldNumber/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldNumber } from '@pnp/spfx-property-controls/lib/PropertyFieldNumber' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { numberValue : number ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldNumber ( \"numberValue\" , { key : \"numberValue\" , label : \"Number value only\" , description : \"Number field description\" , value : this.properties.numberValue , maxValue : 10 , minValue : 1 , disabled : false }) You can also implement your own validation with the onGetErrorMessage property as follows: PropertyFieldNumber ( \"numberValue\" , { key : \"numberValue\" , label : \"Number value only\" , description : \"Number field description\" , value : this.properties.numberValue , maxValue : 10 , minValue : 1 , disabled : false , onGetErrorMessage : ( value : number ) => { if ( value % 2 !== 0 ) { return 'Only even numbers are allowed' ; } return '' ; } })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldNumber/#implementation","text":"The PropertyFieldNumber control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. label string yes Property field label displayed on top. description string no The number field input description. placeholder string no Placeholder text to be displayed in the number field. value number no Value to be displayed in the number field. maxValue number no Maximum number that can be inserted. minValue number no Minimum number that can be inserted. ariaLabel string no The aria label for the number field. disabled boolean no Specify if the control needs to be disabled. errorMessage string no If set, this will be displayed as an error message. onGetErrorMessage (value: number) => string no If set, this method is used to get the validation error message and determine whether the input value is valid or not. deferredValidationTime number no Number field will start to validate after users stop typing for deferredValidationTime milliseconds. precision number no Precision to round the value to. If the precision is not defined the value is not rounded.","title":"Implementation"},{"location":"controls/PropertyFieldOrder/","text":"PropertyFieldOrder control \u00b6 This control generates a list that can be easily reordered using drag and drop and/or arrow buttons. PropertyFieldOrder How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldOrder } from '@pnp/spfx-property-controls/lib/PropertyFieldOrder' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { orderedItems : Array < any > ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldOrder ( \"orderedItems\" , { key : \"orderedItems\" , label : \"Ordered Items\" , items : this.properties.orderedItems , properties : this.properties , onPropertyChange : this.onPropertyPaneFieldChanged }) Item Rendering \u00b6 By default, items will render using the toString() method for each element in your items array. This works well for simple arrays of strings, numbers, etc. Object Property \u00b6 When working with an array of objects, you can specify the name of the property to use as the display value by specifying the textProperty property. For instance, for an array of objects like the following: [ {\"text\": \"Cat\", \"iconName\": \"Cat\"}, {\"text\": \"Pig\", \"iconName\": \"Savings\"}, {\"text\": \"Human\", \"iconName\": \"Running\"}, {\"text\": \"Robot\", \"iconName\": \"Robot\"}, {\"text\": \"Dog\", \"iconName\": \"FangBody\"} ] To prevent every item from showing as [object Object] , you can set the textProperty property to the name of the property you would like to use for display: PropertyFieldOrder ( \"orderedItems\" , { key : \"orderedItems\" , label : \"Ordered Items\" , items : this.properties.orderedItems , textProperty : \"text\" , properties : this.properties , onPropertyChange : this.onPropertyPaneFieldChanged }) Custom Rendering \u00b6 You can fully customize how items are rendered by providing the onRenderItem callback function and returning whatever JSX.Element you want. For example, you can define your function in a tsx file like this: import * as React from 'react' ; export const orderedItem = ( item : any , index : number ) : JSX . Element => { return ( < span > < i className = { \"ms-Icon ms-Icon--\" + item . iconName } style = {{ paddingRight : '4px' }} /> { item . text } < /span> ); }; You can then import this function into your webpart using the relative path to this file similar to the following: import { orderedItem } from './components/OrderedItem' ; Then you can simply reference it in your PropertyFieldOrder : PropertyFieldOrder ( \"orderedItems\" , { key : \"orderedItems\" , label : \"Ordered Items\" , items : this.properties.orderedItems , onRenderItem : orderedItem , properties : this.properties , onPropertyChange : this.onPropertyPaneFieldChanged }) Implementation \u00b6 The PropertyFieldOrder control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. items Array yes An array of values to reorder. textProperty string no The property to use for display, when undefined, the toString() method of the object is used (ignored when the onRenderItem function is specified) maxHeight number no The maximum height for the items in px (when not set, the control expands as necessary) disabled boolean no Specify if the control needs to be disabled. disableDragAndDrop boolean no When true, drag and drop reordering is disabled (defaults to false) removeArrows boolean no When true, arrow buttons are not displayed (defaults to false) moveUpIconName string no The name of the UI Fabric Font Icon to use for the move up button (defaults to ChevronUpSmall) moveDownIconName string no The name of the UI Fabric Font Icon to use for the move down button (defaults to ChevronDownSmall) onRenderItem function no Optional callback to provide custom rendering of the item (default is simple text based on either item or the property identified in the textProperty) properties any yes Parent web part properties, this object is use to update the property value. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. key string yes An unique key that indicates the identity of this control.","title":"PropertyFieldOrder"},{"location":"controls/PropertyFieldOrder/#propertyfieldorder-control","text":"This control generates a list that can be easily reordered using drag and drop and/or arrow buttons. PropertyFieldOrder","title":"PropertyFieldOrder control"},{"location":"controls/PropertyFieldOrder/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldOrder } from '@pnp/spfx-property-controls/lib/PropertyFieldOrder' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { orderedItems : Array < any > ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldOrder ( \"orderedItems\" , { key : \"orderedItems\" , label : \"Ordered Items\" , items : this.properties.orderedItems , properties : this.properties , onPropertyChange : this.onPropertyPaneFieldChanged })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldOrder/#item-rendering","text":"By default, items will render using the toString() method for each element in your items array. This works well for simple arrays of strings, numbers, etc.","title":"Item Rendering"},{"location":"controls/PropertyFieldOrder/#object-property","text":"When working with an array of objects, you can specify the name of the property to use as the display value by specifying the textProperty property. For instance, for an array of objects like the following: [ {\"text\": \"Cat\", \"iconName\": \"Cat\"}, {\"text\": \"Pig\", \"iconName\": \"Savings\"}, {\"text\": \"Human\", \"iconName\": \"Running\"}, {\"text\": \"Robot\", \"iconName\": \"Robot\"}, {\"text\": \"Dog\", \"iconName\": \"FangBody\"} ] To prevent every item from showing as [object Object] , you can set the textProperty property to the name of the property you would like to use for display: PropertyFieldOrder ( \"orderedItems\" , { key : \"orderedItems\" , label : \"Ordered Items\" , items : this.properties.orderedItems , textProperty : \"text\" , properties : this.properties , onPropertyChange : this.onPropertyPaneFieldChanged })","title":"Object Property"},{"location":"controls/PropertyFieldOrder/#custom-rendering","text":"You can fully customize how items are rendered by providing the onRenderItem callback function and returning whatever JSX.Element you want. For example, you can define your function in a tsx file like this: import * as React from 'react' ; export const orderedItem = ( item : any , index : number ) : JSX . Element => { return ( < span > < i className = { \"ms-Icon ms-Icon--\" + item . iconName } style = {{ paddingRight : '4px' }} /> { item . text } < /span> ); }; You can then import this function into your webpart using the relative path to this file similar to the following: import { orderedItem } from './components/OrderedItem' ; Then you can simply reference it in your PropertyFieldOrder : PropertyFieldOrder ( \"orderedItems\" , { key : \"orderedItems\" , label : \"Ordered Items\" , items : this.properties.orderedItems , onRenderItem : orderedItem , properties : this.properties , onPropertyChange : this.onPropertyPaneFieldChanged })","title":"Custom Rendering"},{"location":"controls/PropertyFieldOrder/#implementation","text":"The PropertyFieldOrder control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. items Array yes An array of values to reorder. textProperty string no The property to use for display, when undefined, the toString() method of the object is used (ignored when the onRenderItem function is specified) maxHeight number no The maximum height for the items in px (when not set, the control expands as necessary) disabled boolean no Specify if the control needs to be disabled. disableDragAndDrop boolean no When true, drag and drop reordering is disabled (defaults to false) removeArrows boolean no When true, arrow buttons are not displayed (defaults to false) moveUpIconName string no The name of the UI Fabric Font Icon to use for the move up button (defaults to ChevronUpSmall) moveDownIconName string no The name of the UI Fabric Font Icon to use for the move down button (defaults to ChevronDownSmall) onRenderItem function no Optional callback to provide custom rendering of the item (default is simple text based on either item or the property identified in the textProperty) properties any yes Parent web part properties, this object is use to update the property value. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. key string yes An unique key that indicates the identity of this control.","title":"Implementation"},{"location":"controls/PropertyFieldPassword/","text":"PropertyFieldPassword control \u00b6 This control generates an input field for password. Text is not visible . PropertyFieldPassword example usage How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldPassword } from '@pnp/spfx-property-controls/lib/PropertyFieldPassword' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { password : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldPassword ( \"password\" , { key : \"password\" , label : \"password\" , value : this.properties.password , onChanged : ( value : string ) => { console . log ( value ); } }) Implementation \u00b6 The PropertyFieldPassword control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. label string no Property field label displayed on top. value string no Value to be displayed in the number field. onChanged (value: string) => void no If set, this method is used to get the the input value","title":"PropertyFieldPassword"},{"location":"controls/PropertyFieldPassword/#propertyfieldpassword-control","text":"This control generates an input field for password. Text is not visible . PropertyFieldPassword example usage","title":"PropertyFieldPassword control"},{"location":"controls/PropertyFieldPassword/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldPassword } from '@pnp/spfx-property-controls/lib/PropertyFieldPassword' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { password : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldPassword ( \"password\" , { key : \"password\" , label : \"password\" , value : this.properties.password , onChanged : ( value : string ) => { console . log ( value ); } })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldPassword/#implementation","text":"The PropertyFieldPassword control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. label string no Property field label displayed on top. value string no Value to be displayed in the number field. onChanged (value: string) => void no If set, this method is used to get the the input value","title":"Implementation"},{"location":"controls/PropertyFieldPeoplePicker/","text":"PropertyFieldPeoplePicker control \u00b6 This control generates a people / group picker that can be used in the property pane of your SharePoint Framework web parts. Searching for persons Searching for groups Selected people / groups How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldPeoplePicker , PrincipalType } from '@pnp/spfx-property-controls/lib/PropertyFieldPeoplePicker' ; Create a new property for your web part, for example: import { IPropertyFieldGroupOrPerson } from \"@pnp/spfx-property-controls/lib/PropertyFieldPeoplePicker\" ; export interface IPropertyControlsTestWebPartProps { people : IPropertyFieldGroupOrPerson []; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldPeoplePicker ( 'people' , { label : 'PropertyFieldPeoplePicker' , initialData : this.properties.people , allowDuplicate : false , principalType : [ PrincipalType . Users , PrincipalType . SharePoint , PrincipalType . Security ], onPropertyChange : this.onPropertyPaneFieldChanged , context : this.context , properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'peopleFieldId' }) Implementation \u00b6 The PropertyFieldPeoplePicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. initialData IPropertyFieldGroupOrPerson[] no Initial data to load in the people picker (optional). allowDuplicate boolean no Defines if the People Picker allows to select duplicated users (optional). multiSelect boolean no Define if you want to allow multi user / group selection. (optional, true by default). principalType PrincipalType[] no Define which type of data you want to retrieve: User, SharePoint groups, Security groups. Multiple are possible. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. properties any yes Parent web part properties, this object is use to update the property value. targetSiteUrl string no Specify the URL of the target site from which you want to retrieve the users/groups. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. Interface IPropertyFieldGroupOrPerson Property Type Required Description id string no The ID of the group description string no Group description fullName string yes Users' full name or group display name login string yes Users' login or group provider name (when security group) or group account name (when SharePoint group). email string no Users' email jobTitle string no Users' job title initials string no Users' initials imageUrl string no Users' profile image URL Enum PrincipalType The PrincipalType enum can be used to specify the types of information you want to query: User, Security groups, and/or SharePoint groups. Name Description Users To specify if you want to retrieve users. Security To specify if you want to retrieve security groups. SharePoint To specify if you want to retrieve SharePoint groups.","title":"PropertyFieldPeoplePicker"},{"location":"controls/PropertyFieldPeoplePicker/#propertyfieldpeoplepicker-control","text":"This control generates a people / group picker that can be used in the property pane of your SharePoint Framework web parts. Searching for persons Searching for groups Selected people / groups","title":"PropertyFieldPeoplePicker control"},{"location":"controls/PropertyFieldPeoplePicker/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldPeoplePicker , PrincipalType } from '@pnp/spfx-property-controls/lib/PropertyFieldPeoplePicker' ; Create a new property for your web part, for example: import { IPropertyFieldGroupOrPerson } from \"@pnp/spfx-property-controls/lib/PropertyFieldPeoplePicker\" ; export interface IPropertyControlsTestWebPartProps { people : IPropertyFieldGroupOrPerson []; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldPeoplePicker ( 'people' , { label : 'PropertyFieldPeoplePicker' , initialData : this.properties.people , allowDuplicate : false , principalType : [ PrincipalType . Users , PrincipalType . SharePoint , PrincipalType . Security ], onPropertyChange : this.onPropertyPaneFieldChanged , context : this.context , properties : this.properties , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'peopleFieldId' })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldPeoplePicker/#implementation","text":"The PropertyFieldPeoplePicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. initialData IPropertyFieldGroupOrPerson[] no Initial data to load in the people picker (optional). allowDuplicate boolean no Defines if the People Picker allows to select duplicated users (optional). multiSelect boolean no Define if you want to allow multi user / group selection. (optional, true by default). principalType PrincipalType[] no Define which type of data you want to retrieve: User, SharePoint groups, Security groups. Multiple are possible. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. properties any yes Parent web part properties, this object is use to update the property value. targetSiteUrl string no Specify the URL of the target site from which you want to retrieve the users/groups. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. Interface IPropertyFieldGroupOrPerson Property Type Required Description id string no The ID of the group description string no Group description fullName string yes Users' full name or group display name login string yes Users' login or group provider name (when security group) or group account name (when SharePoint group). email string no Users' email jobTitle string no Users' job title initials string no Users' initials imageUrl string no Users' profile image URL Enum PrincipalType The PrincipalType enum can be used to specify the types of information you want to query: User, Security groups, and/or SharePoint groups. Name Description Users To specify if you want to retrieve users. Security To specify if you want to retrieve security groups. SharePoint To specify if you want to retrieve SharePoint groups.","title":"Implementation"},{"location":"controls/PropertyFieldRoleDefinitionPicker/","text":"PropertyFieldRoleDefinitionPicker control \u00b6 Role Definition picker control allows to select role definitions of a specific web via the property pane. Overview \u00b6 The control allows a you to pick role definitions from a dropdown control. It supports role definition selection using the dropdown control of Office fabric UI with multi-select enabled. PropertyFieldRoleDefinitionPicker example usage How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your webpart: import { IBasePermissions , IPropertyFieldRoleDefinitionPickerProps , PropertyFieldRoleDefinitionPicker , RoleTypeKind , IRoleDefinitionInformation } from \"@pnp/spfx-property-controls/lib/PropertyFieldRoleDefinitionPicker\" ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { roleDefinitions : IRoleDefinitionInformation []; } Add the role definition picker property control to the groupFields of the web part property pane configuration: PropertyFieldRoleDefinitionPicker ( 'roleDefinitions' , { context : this.context , label : \"Role Definitions\" , roleDefinitions : this.properties.roleDefinitions , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , key : \"roleDefinitionPickerId\" , selectedRoleDefinition : [ \"Full Control\" ], roleDefinitionsToExclude : [ \"System.LimitedView\" ], }) Implementation \u00b6 The PropertyFieldRoleDefinitionPicker control can be configured with the following properties: Property Type Required Description properties any yes Parent web part properties, this object is used to update the property value. key string yes A unique key that indicates the identity of this control. context BaseComponentContext yes Current webpart context. onPropertyChange function yes Defines a onPropertyChange function to raise when the data gets changed. label string no Specifies the text describing the role definition picker. webAbsoluteUrl string no Absolute Web Url of target site (user requires permissions) required boolean no Sets the label to inform that the value is required. disabled boolean no Specifies if the picker button is disabled roleDefinitions IRoleDefinitionInformation[] yes The value of selected role definitions multiSelect boolean no Specify if you want to have a single or multi-select role definition picker. By default this is set to true (multi-select role picker). selectedRoleDefinition string[] no Pre-selected role definitions for the picker control roleDefinitionsToExclude string[] no Role definitions to be excluded from the picker control onRoleDefinitionsRetrieved (roleDefinitions: IRoleDefinitionInformation[]) => PromiseLike | IRoleDefinitionInformation[] no Callback that is called before the dropdown is populated. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. interface IRoleDefinitionInformation The value returned from the selected role definition. Value Type Description Id number Id of the role definition. Name string Name of the selected role definition. Description string Description of selected role definition. Hidden boolean Whether selected role definition is hidden or not. Order number Order of selected role definition. RoleTypeKind RoleTypeKind RoleTypeKind of selected role definition. BasePermissions IBasePermissions BasePermissions of selected role definition. interface IBasePermissions Value Type Low number High number type RoleTypeKind Value Type RoleTypeKind 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7","title":"PropertyFieldRoleDefinitionPicker"},{"location":"controls/PropertyFieldRoleDefinitionPicker/#propertyfieldroledefinitionpicker-control","text":"Role Definition picker control allows to select role definitions of a specific web via the property pane.","title":"PropertyFieldRoleDefinitionPicker control"},{"location":"controls/PropertyFieldRoleDefinitionPicker/#overview","text":"The control allows a you to pick role definitions from a dropdown control. It supports role definition selection using the dropdown control of Office fabric UI with multi-select enabled. PropertyFieldRoleDefinitionPicker example usage","title":"Overview"},{"location":"controls/PropertyFieldRoleDefinitionPicker/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your webpart: import { IBasePermissions , IPropertyFieldRoleDefinitionPickerProps , PropertyFieldRoleDefinitionPicker , RoleTypeKind , IRoleDefinitionInformation } from \"@pnp/spfx-property-controls/lib/PropertyFieldRoleDefinitionPicker\" ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { roleDefinitions : IRoleDefinitionInformation []; } Add the role definition picker property control to the groupFields of the web part property pane configuration: PropertyFieldRoleDefinitionPicker ( 'roleDefinitions' , { context : this.context , label : \"Role Definitions\" , roleDefinitions : this.properties.roleDefinitions , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , key : \"roleDefinitionPickerId\" , selectedRoleDefinition : [ \"Full Control\" ], roleDefinitionsToExclude : [ \"System.LimitedView\" ], })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldRoleDefinitionPicker/#implementation","text":"The PropertyFieldRoleDefinitionPicker control can be configured with the following properties: Property Type Required Description properties any yes Parent web part properties, this object is used to update the property value. key string yes A unique key that indicates the identity of this control. context BaseComponentContext yes Current webpart context. onPropertyChange function yes Defines a onPropertyChange function to raise when the data gets changed. label string no Specifies the text describing the role definition picker. webAbsoluteUrl string no Absolute Web Url of target site (user requires permissions) required boolean no Sets the label to inform that the value is required. disabled boolean no Specifies if the picker button is disabled roleDefinitions IRoleDefinitionInformation[] yes The value of selected role definitions multiSelect boolean no Specify if you want to have a single or multi-select role definition picker. By default this is set to true (multi-select role picker). selectedRoleDefinition string[] no Pre-selected role definitions for the picker control roleDefinitionsToExclude string[] no Role definitions to be excluded from the picker control onRoleDefinitionsRetrieved (roleDefinitions: IRoleDefinitionInformation[]) => PromiseLike | IRoleDefinitionInformation[] no Callback that is called before the dropdown is populated. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. interface IRoleDefinitionInformation The value returned from the selected role definition. Value Type Description Id number Id of the role definition. Name string Name of the selected role definition. Description string Description of selected role definition. Hidden boolean Whether selected role definition is hidden or not. Order number Order of selected role definition. RoleTypeKind RoleTypeKind RoleTypeKind of selected role definition. BasePermissions IBasePermissions BasePermissions of selected role definition. interface IBasePermissions Value Type Low number High number type RoleTypeKind Value Type RoleTypeKind 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7","title":"Implementation"},{"location":"controls/PropertyFieldSearch/","text":"PropertyFieldSearch control \u00b6 This control generates an input field for Search. PropertyFieldSearch example usage How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldSearch } from '@pnp/spfx-property-controls/lib/PropertyFieldSearch' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { searchValue : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldSearch ( \"searchValue\" , { key : \"search\" , placeholder : 'Search libraries' , value : this.properties.searchValue , onSearch : this._onSearch , styles : { root : { margin : 10 } } }), Implementation \u00b6 The PropertyFieldSearch control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. PlaceHolder string no Property field PlaceHolder displayed on input. value number no Value to be displayed in field. underlined boolean no Indicate if control is render as underline styles ISearchBoxStyles no Styles to apply className string no Class Name onSearch (value: string) => void no If set, this method is used to get the the input value when user press enter key onChange (value: string) => void no If set, this method is used to get the the input value when it changed onClear (ev: any) => void no If set, this method is fired when user click the clear (cross) on the input field onEscape (ev: any) => void no If set, this method is fired when user press the escape key","title":"PropertyFieldSearch"},{"location":"controls/PropertyFieldSearch/#propertyfieldsearch-control","text":"This control generates an input field for Search. PropertyFieldSearch example usage","title":"PropertyFieldSearch control"},{"location":"controls/PropertyFieldSearch/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldSearch } from '@pnp/spfx-property-controls/lib/PropertyFieldSearch' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { searchValue : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldSearch ( \"searchValue\" , { key : \"search\" , placeholder : 'Search libraries' , value : this.properties.searchValue , onSearch : this._onSearch , styles : { root : { margin : 10 } } }),","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldSearch/#implementation","text":"The PropertyFieldSearch control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. PlaceHolder string no Property field PlaceHolder displayed on input. value number no Value to be displayed in field. underlined boolean no Indicate if control is render as underline styles ISearchBoxStyles no Styles to apply className string no Class Name onSearch (value: string) => void no If set, this method is used to get the the input value when user press enter key onChange (value: string) => void no If set, this method is used to get the the input value when it changed onClear (ev: any) => void no If set, this method is fired when user click the clear (cross) on the input field onEscape (ev: any) => void no If set, this method is fired when user press the escape key","title":"Implementation"},{"location":"controls/PropertyFieldSitePicker/","text":"PropertyFieldSitePicker control \u00b6 This control generates a site picker that can be used in the property pane of your SharePoint Framework web parts. Searching for sites Selected sites How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldSitePicker } from '@pnp/spfx-property-controls/lib/PropertyFieldSitePicker' ; Create a new property for your web part, for example: import { IPropertyFieldSite } from \"@pnp/spfx-property-controls/lib/PropertyFieldSitePicker\" ; export interface IPropertyControlsTestWebPartProps { sites : IPropertyFieldSite []; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldSitePicker ( 'sites' , { label : 'Select sites' , initialSites : this.properties.sites , context : this.context , deferredValidationTime : 500 , multiSelect : true , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , key : 'sitesFieldId' }) Implementation \u00b6 The PropertyFieldSitePicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. initialSites IPropertyFieldSite[] no Initial sites to load in the site picker (optional). multiSelect boolean no Define if you want to allow multiple sites selection. (optional, false by default). onPropertyChange function yes Defines a onPropertyChange function to raise when the sites get changed. properties any yes Parent web part properties, this object is use to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. trimDuplicates boolean no Specifies if the duplicates should be trimmed. false by default. Applicable if mode is set to site or web. additionalQuery string no If provided will be added to the search query as AND part. Applicable if mode is set to site or web. Interface IPropertyFieldSite Property Type Required Description id string no The ID of the site title string no Site's display name url string no URL to the site webId string no The ID of the web hubSiteId string no ID of the hub site.","title":"PropertyFieldSitePicker"},{"location":"controls/PropertyFieldSitePicker/#propertyfieldsitepicker-control","text":"This control generates a site picker that can be used in the property pane of your SharePoint Framework web parts. Searching for sites Selected sites","title":"PropertyFieldSitePicker control"},{"location":"controls/PropertyFieldSitePicker/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldSitePicker } from '@pnp/spfx-property-controls/lib/PropertyFieldSitePicker' ; Create a new property for your web part, for example: import { IPropertyFieldSite } from \"@pnp/spfx-property-controls/lib/PropertyFieldSitePicker\" ; export interface IPropertyControlsTestWebPartProps { sites : IPropertyFieldSite []; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldSitePicker ( 'sites' , { label : 'Select sites' , initialSites : this.properties.sites , context : this.context , deferredValidationTime : 500 , multiSelect : true , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , key : 'sitesFieldId' })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldSitePicker/#implementation","text":"The PropertyFieldSitePicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. initialSites IPropertyFieldSite[] no Initial sites to load in the site picker (optional). multiSelect boolean no Define if you want to allow multiple sites selection. (optional, false by default). onPropertyChange function yes Defines a onPropertyChange function to raise when the sites get changed. properties any yes Parent web part properties, this object is use to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. trimDuplicates boolean no Specifies if the duplicates should be trimmed. false by default. Applicable if mode is set to site or web. additionalQuery string no If provided will be added to the search query as AND part. Applicable if mode is set to site or web. Interface IPropertyFieldSite Property Type Required Description id string no The ID of the site title string no Site's display name url string no URL to the site webId string no The ID of the web hubSiteId string no ID of the hub site.","title":"Implementation"},{"location":"controls/PropertyFieldSliderWithCallout/","text":"PropertyFieldSliderWithCallout control \u00b6 This control generates a slider control with a callout. PropertyFieldSliderWithCallout rendering PropertyFieldSliderWithCallout callout opened How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/PropertyFieldHeader' ; import { PropertyFieldSliderWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldSliderWithCallout' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { sliderWithCalloutValue : number ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldSliderWithCallout ( 'sliderWithCalloutValue' , { calloutContent : React.createElement ( 'div' , {}, 'Select background image opacity' ), calloutTrigger : CalloutTriggers.Click , calloutWidth : 200 , key : 'sliderWithCalloutFieldId' , label : 'Opacity' , max : 100 , min : 0 , step : 1 , showValue : true , value : this.properties.sliderWithCalloutValue , debounce : 1000 }) Implementation \u00b6 The PropertyFieldSliderWithCallout control uses the same implementation as the default PropertyPaneSlider and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target debounce number no Time specified in milliseconds after which the onChanged handler is going to be called. Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"PropertyFieldSliderWithCallout"},{"location":"controls/PropertyFieldSliderWithCallout/#propertyfieldsliderwithcallout-control","text":"This control generates a slider control with a callout. PropertyFieldSliderWithCallout rendering PropertyFieldSliderWithCallout callout opened","title":"PropertyFieldSliderWithCallout control"},{"location":"controls/PropertyFieldSliderWithCallout/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/PropertyFieldHeader' ; import { PropertyFieldSliderWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldSliderWithCallout' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { sliderWithCalloutValue : number ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldSliderWithCallout ( 'sliderWithCalloutValue' , { calloutContent : React.createElement ( 'div' , {}, 'Select background image opacity' ), calloutTrigger : CalloutTriggers.Click , calloutWidth : 200 , key : 'sliderWithCalloutFieldId' , label : 'Opacity' , max : 100 , min : 0 , step : 1 , showValue : true , value : this.properties.sliderWithCalloutValue , debounce : 1000 })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldSliderWithCallout/#implementation","text":"The PropertyFieldSliderWithCallout control uses the same implementation as the default PropertyPaneSlider and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target debounce number no Time specified in milliseconds after which the onChanged handler is going to be called. Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"Implementation"},{"location":"controls/PropertyFieldSpinButton/","text":"PropertyFieldSpinButton control \u00b6 This control generates a spin button which allows the user to incrementally adjust a value in small steps. PropertyFieldSpinButton initial render PropertyFieldSpinButton increment How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldSpinButton } from '@pnp/spfx-property-controls/lib/PropertyFieldSpinButton' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { spinValue : number ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldSpinButton ( 'spinValue' , { label : 'Spin Value' , initialValue : this.properties.spinValue , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , disabled : false , suffix : 'px' , min : 0 , max : 5 , step : 0.25 , decimalPlaces : 2 , incrementIconName : 'CalculatorAddition' , decrementIconName : 'CalculatorSubtract' , key : 'spinButtonFieldId' }) Implementation \u00b6 The PropertyFieldSpinButton control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. initialValue number no Initial number value of the control. step number no The difference between the two adjacent values of the SpinButton (default is 1) min number no The minimum value (no minimum when unspecified) max number no The minimum value (no minimum when unspecified) incrementIconName string no The name of the UI Fabric Font Icon to use for the increment button (defaults to ChevronUpSmall) decrementIconName string no The name of the UI Fabric Font Icon to use for the decrement button (defaults to ChevronDownSmall) suffix string no An optional string value to append to the field display decimalPlaces number no The number of decimal places to show/allow (defaults to 0) properties any yes Parent web part properties, this object is use to update the property value. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. key string yes An unique key that indicates the identity of this control.","title":"PropertyFieldSpinButton"},{"location":"controls/PropertyFieldSpinButton/#propertyfieldspinbutton-control","text":"This control generates a spin button which allows the user to incrementally adjust a value in small steps. PropertyFieldSpinButton initial render PropertyFieldSpinButton increment","title":"PropertyFieldSpinButton control"},{"location":"controls/PropertyFieldSpinButton/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldSpinButton } from '@pnp/spfx-property-controls/lib/PropertyFieldSpinButton' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { spinValue : number ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldSpinButton ( 'spinValue' , { label : 'Spin Value' , initialValue : this.properties.spinValue , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , disabled : false , suffix : 'px' , min : 0 , max : 5 , step : 0.25 , decimalPlaces : 2 , incrementIconName : 'CalculatorAddition' , decrementIconName : 'CalculatorSubtract' , key : 'spinButtonFieldId' })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldSpinButton/#implementation","text":"The PropertyFieldSpinButton control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. initialValue number no Initial number value of the control. step number no The difference between the two adjacent values of the SpinButton (default is 1) min number no The minimum value (no minimum when unspecified) max number no The minimum value (no minimum when unspecified) incrementIconName string no The name of the UI Fabric Font Icon to use for the increment button (defaults to ChevronUpSmall) decrementIconName string no The name of the UI Fabric Font Icon to use for the decrement button (defaults to ChevronDownSmall) suffix string no An optional string value to append to the field display decimalPlaces number no The number of decimal places to show/allow (defaults to 0) properties any yes Parent web part properties, this object is use to update the property value. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. key string yes An unique key that indicates the identity of this control.","title":"Implementation"},{"location":"controls/PropertyFieldSpinner/","text":"PropertyFieldSpinner control \u00b6 This control generates a Message Bar that will show messages . PropertyFieldSpinner example usage How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldSpinner } from '@pnp/spfx-property-controls/lib/PropertyFieldSpinner' ; Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldSpinner ( \"\" , { key : \"sp1\" , size : SpinnerSize.medium , isVisible : true , label : \"Loading ...\" }) Implementation \u00b6 The PropertyFieldSpinner control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. size SpinnerSize yes Size of Spinner classname string no css ClassName isVisible boolean yes Indicate if message is visible Label string no Label to Show","title":"PropertyFieldSpinner"},{"location":"controls/PropertyFieldSpinner/#propertyfieldspinner-control","text":"This control generates a Message Bar that will show messages . PropertyFieldSpinner example usage","title":"PropertyFieldSpinner control"},{"location":"controls/PropertyFieldSpinner/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldSpinner } from '@pnp/spfx-property-controls/lib/PropertyFieldSpinner' ; Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldSpinner ( \"\" , { key : \"sp1\" , size : SpinnerSize.medium , isVisible : true , label : \"Loading ...\" })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldSpinner/#implementation","text":"The PropertyFieldSpinner control can be configured with the following properties: Property Type Required Description key string yes An unique key that indicates the identity of this control. size SpinnerSize yes Size of Spinner classname string no css ClassName isVisible boolean yes Indicate if message is visible Label string no Label to Show","title":"Implementation"},{"location":"controls/PropertyFieldSwatchColorPicker/","text":"PropertyFieldSwatchColorPicker control \u00b6 This control generates a swatch color picker that you can use inside the property pane. PropertyFieldSwatchColorPicker PropertyFieldColorPicker color selector How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldSwatchColorPicker , PropertyFieldSwatchColorPickerStyle } from '@pnp/spfx-property-controls/lib/PropertyFieldSwatchColorPicker' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { color : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldSwatchColorPicker ( 'color' , { label : 'Swatch Color' , selectedColor : this.properties.color , colors : [ { color : '#ffb900' , label : 'Yellow' }, { color : '#fff100' , label : 'Light Yellow' }, { color : '#d83b01' , label : 'Orange' }, { color : '#e81123' , label : 'Red' }, { color : '#a80000' , label : 'Dark Red' }, { color : '#5c005c' , label : 'Dark Magenta' }, { color : '#e3008c' , label : 'Light Magenta' }, { color : '#5c2d91' , label : 'Purple' }, { color : '#0078d4' , label : 'Blue' }, { color : '#00bcf2' , label : 'Light Blue' }, { color : '#008272' , label : 'Teal' }, { color : '#107c10' , label : 'Green' }, { color : '#bad80a' , label : 'Light Green' }, { color : '#eaeaea' }, { color : 'black' , label : 'Black' }, { color : '#333333' , label : 'Neutral' }, { color : 'rgba(102, 102, 102, 0.5)' , label : 'Half Gray' } ], onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , key : 'colorFieldId' }) Implementation \u00b6 The PropertyFieldColorPicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. selectedColor string or IColor no The CSS-compatible string or an IColor object to describe the initial color color IPropertyFieldSwatchColorOption[] yes The color choices (color can be any CSS-Compatible string, labels are optional and will be shown as a tooltip on the swatch) showAsCircles boolean no When true, color cells are shown as circles. When false (default), color cells are shown as squares columnCount number no The number of cells to show per row (defaults to 6, minimum of 1 and maximum of 8) style PropertyFieldSwatchColorPickerStyle no Determines how the control is displayed (defaults to inline) iconName string no The name of the UI Fabric Font Icon to use for Inline display (defaults to Color) valueAsObject boolean no When true, the property is returned as an IColor object. When false (default), the property is returned as a CSS-compatible string properties any yes Parent web part properties, this object is use to update the property value. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. key string yes An unique key that indicates the identity of this control. Enum PropertyFieldSwatchColorPickerStyle Name Description Full Display the full control in the property pane Inline Display the color picker inline Value \u00b6 By default, the Swatch Color Picker returns the value as a CSS-compatible string. This allows you the flexibility of simply assigning the value to an inline style as is and this is usually sufficient. However, this also limits the information directly available to you since the format could be a Hex code, an RGBA value, or even a named color and may not be suitable for advanced scenarios. By setting the valueAsObject property to true, you will always receive a consistent IColor object that provides you detailed information about the chosen color. Here are the properties available in the IColor object: Property Type Description str string CSS-compatible string (this is the same value that would normally be returned when valueAsObject is false) hex string Hex value (does not reflect alpha) r number Red g number Green b number Blue h number Hue s number Saturation v number Value","title":"PropertyFieldSwatchColorPicker"},{"location":"controls/PropertyFieldSwatchColorPicker/#propertyfieldswatchcolorpicker-control","text":"This control generates a swatch color picker that you can use inside the property pane. PropertyFieldSwatchColorPicker PropertyFieldColorPicker color selector","title":"PropertyFieldSwatchColorPicker control"},{"location":"controls/PropertyFieldSwatchColorPicker/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldSwatchColorPicker , PropertyFieldSwatchColorPickerStyle } from '@pnp/spfx-property-controls/lib/PropertyFieldSwatchColorPicker' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { color : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldSwatchColorPicker ( 'color' , { label : 'Swatch Color' , selectedColor : this.properties.color , colors : [ { color : '#ffb900' , label : 'Yellow' }, { color : '#fff100' , label : 'Light Yellow' }, { color : '#d83b01' , label : 'Orange' }, { color : '#e81123' , label : 'Red' }, { color : '#a80000' , label : 'Dark Red' }, { color : '#5c005c' , label : 'Dark Magenta' }, { color : '#e3008c' , label : 'Light Magenta' }, { color : '#5c2d91' , label : 'Purple' }, { color : '#0078d4' , label : 'Blue' }, { color : '#00bcf2' , label : 'Light Blue' }, { color : '#008272' , label : 'Teal' }, { color : '#107c10' , label : 'Green' }, { color : '#bad80a' , label : 'Light Green' }, { color : '#eaeaea' }, { color : 'black' , label : 'Black' }, { color : '#333333' , label : 'Neutral' }, { color : 'rgba(102, 102, 102, 0.5)' , label : 'Half Gray' } ], onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , key : 'colorFieldId' })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldSwatchColorPicker/#implementation","text":"The PropertyFieldColorPicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. selectedColor string or IColor no The CSS-compatible string or an IColor object to describe the initial color color IPropertyFieldSwatchColorOption[] yes The color choices (color can be any CSS-Compatible string, labels are optional and will be shown as a tooltip on the swatch) showAsCircles boolean no When true, color cells are shown as circles. When false (default), color cells are shown as squares columnCount number no The number of cells to show per row (defaults to 6, minimum of 1 and maximum of 8) style PropertyFieldSwatchColorPickerStyle no Determines how the control is displayed (defaults to inline) iconName string no The name of the UI Fabric Font Icon to use for Inline display (defaults to Color) valueAsObject boolean no When true, the property is returned as an IColor object. When false (default), the property is returned as a CSS-compatible string properties any yes Parent web part properties, this object is use to update the property value. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. key string yes An unique key that indicates the identity of this control. Enum PropertyFieldSwatchColorPickerStyle Name Description Full Display the full control in the property pane Inline Display the color picker inline","title":"Implementation"},{"location":"controls/PropertyFieldSwatchColorPicker/#value","text":"By default, the Swatch Color Picker returns the value as a CSS-compatible string. This allows you the flexibility of simply assigning the value to an inline style as is and this is usually sufficient. However, this also limits the information directly available to you since the format could be a Hex code, an RGBA value, or even a named color and may not be suitable for advanced scenarios. By setting the valueAsObject property to true, you will always receive a consistent IColor object that provides you detailed information about the chosen color. Here are the properties available in the IColor object: Property Type Description str string CSS-compatible string (this is the same value that would normally be returned when valueAsObject is false) hex string Hex value (does not reflect alpha) r number Red g number Green b number Blue h number Hue s number Saturation v number Value","title":"Value"},{"location":"controls/PropertyFieldTeamPicker/","text":"PropertyFieldTeamPicker control \u00b6 This control generates a team picker that can be used in the property pane of your SharePoint Framework web parts. Searching for teams Selected teams How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Request Microsoft Graph permissions in config/package-solution.json : { \"solution\" : { \"webApiPermissionRequests\" : [ { \"resource\" : \"Microsoft Graph\" , \"scope\" : \"Team.ReadBasic.All\" }, { \"resource\" : \"Microsoft Graph\" , \"scope\" : \"Files.Read\" }] } } Note Team.ReadBasic.All and Files.Read is a minimum set of permissions needed for the component. For other options please see List Joined Teams and Get Drive documentation. Import the following modules to your component: import { PropertyFieldSitePicker } from '@pnp/spfx-property-controls/lib/PropertyFieldSitePicker' ; Create a new property for your web part, for example: import { IPropertyFieldTeam } from '../../PropertyFieldTeamPicker' ; export interface IPropertyControlsTestWebPartProps { teams : IPropertyFieldTeam []; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldTeamPicker ( 'teams' , { key : 'teamsPicker' , context : this.context , label : 'Select teams' , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , initialTeams : this.properties.teams , multiSelect : true }) Implementation \u00b6 The PropertyFieldTeamPicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. initialTeams IPropertyFieldTeam[] no Initial teams to load in the site picker (optional). multiSelect boolean no Define if you want to allow multiple teams selection. (optional, false by default). onPropertyChange function yes Defines a onPropertyChange function to raise when the teams get changed. properties any yes Parent web part properties, this object is used to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. Interface IPropertyFieldTeam Property Type Required Description id string no The ID of the team (group) title string no Teams's display name url string no URL to the underlying site","title":"PropertyFieldTeamPicker"},{"location":"controls/PropertyFieldTeamPicker/#propertyfieldteampicker-control","text":"This control generates a team picker that can be used in the property pane of your SharePoint Framework web parts. Searching for teams Selected teams","title":"PropertyFieldTeamPicker control"},{"location":"controls/PropertyFieldTeamPicker/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Request Microsoft Graph permissions in config/package-solution.json : { \"solution\" : { \"webApiPermissionRequests\" : [ { \"resource\" : \"Microsoft Graph\" , \"scope\" : \"Team.ReadBasic.All\" }, { \"resource\" : \"Microsoft Graph\" , \"scope\" : \"Files.Read\" }] } } Note Team.ReadBasic.All and Files.Read is a minimum set of permissions needed for the component. For other options please see List Joined Teams and Get Drive documentation. Import the following modules to your component: import { PropertyFieldSitePicker } from '@pnp/spfx-property-controls/lib/PropertyFieldSitePicker' ; Create a new property for your web part, for example: import { IPropertyFieldTeam } from '../../PropertyFieldTeamPicker' ; export interface IPropertyControlsTestWebPartProps { teams : IPropertyFieldTeam []; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldTeamPicker ( 'teams' , { key : 'teamsPicker' , context : this.context , label : 'Select teams' , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , initialTeams : this.properties.teams , multiSelect : true })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldTeamPicker/#implementation","text":"The PropertyFieldTeamPicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. initialTeams IPropertyFieldTeam[] no Initial teams to load in the site picker (optional). multiSelect boolean no Define if you want to allow multiple teams selection. (optional, false by default). onPropertyChange function yes Defines a onPropertyChange function to raise when the teams get changed. properties any yes Parent web part properties, this object is used to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. Interface IPropertyFieldTeam Property Type Required Description id string no The ID of the team (group) title string no Teams's display name url string no URL to the underlying site","title":"Implementation"},{"location":"controls/PropertyFieldTermPicker/","text":"PropertyFieldTermPicker control \u00b6 This control generates a term picker that can be used in the property pane of your SharePoint Framework web parts. Disclaimer : This control makes use of the ProcessQuery API end-points to retrieve the managed metadata information. This will get changed once the APIs for managing managed metadata will become available. Empty term picker Selecting terms Selected terms in the panel Empty term picker Term picker: Auto Complete Limit the term set to a specific group or termset How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldTermPicker } from '@pnp/spfx-property-controls/lib/PropertyFieldTermPicker' ; Create a new property for your web part, for example: import { IPickerTerms } from \"@pnp/spfx-property-controls/lib/PropertyFieldTermPicker\" ; export interface IPropertyControlsTestWebPartProps { terms : IPickerTerms ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldTermPicker ( 'terms' , { label : 'Select terms' , panelTitle : 'Select terms' , initialValues : this.properties.terms , allowMultipleSelections : true , excludeSystemGroup : false , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , context : this.context , onGetErrorMessage : null , deferredValidationTime : 0 , limitByGroupNameOrID : 'People' , limitByTermsetNameOrID : 'Location' , key : 'termSetsPickerFieldId' }) Implementation \u00b6 The PropertyFieldTermPicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. panelTitle string yes TermSet Picker Panel title. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. initialValues IPickerTerms no Defines the selected by default term sets. allowMultipleSelections boolean no Defines if the user can select only one or many term sets. Default value is false. excludeSystemGroup boolean no Indicator to define if the system Groups are exclude. Default is false. limitByGroupNameOrID string no Limit the term sets that can be used by the group name or ID. limitByTermsetNameOrID string no Limit the terms that can be picked by the Term Set name or ID. hideTermStoreName boolean no Specifies if you want to show or hide the term store name from the panel. isTermSetSelectable boolean no Specify if the term set itself is selectable in the tree view. areTermsSelectable boolean no Specify if the terms are selectable in the tree view. Default value is true areTermsHidden boolean no Specify if the terms are hidden from the tree view. disabledTermIds string[] no Specify which terms should be disabled in the term set so that they cannot be selected. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. properties any yes Parent web part properties, this object is use to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. resolveDelay number no The delay time in ms before resolving suggestions, which is kicked off when input has been changed. e.g. if a second input change happens within the resolveDelay time, the timer will start over. Only until after the timer completes will onResolveSuggestions be called. Default is 500. anchorId string no When using LimitByTermsetNameOrId, set the anchorid to a child term in the TermSet to be able to select terms from that level and below. Interface IPickerTerms Property Type Required Description key string yes The ID of the term name string yes The name of the term path string yes The path of the term termSet string yes The Id of the parent term set of the term termSetName string no The Name of the parent term set of the term Differences between PropertyFieldEnterpriseTermPicker and PropertyFieldTermPicker \u00b6 PropertyFieldEnterpriseTermPicker is implemented to be used for \"enterprise\" Term Stores with large amount of groups, terms sets, and terms. It loads term sets and terms on demand - only at the moment when specified group or term set has been expanded in the Term Store Tree. To implement on-demand loading PropertyFieldEnterpriseTermPicker uses @pnp/sp-taxonomy module from @pnp/pnpjs library. It increases the size of a bundle when the control is used. Additionally, PropertyFieldEnterpriseTermPicker allows to request labels for the terms in the picker. PropertyFieldTermPicker loads all the groups and term sets from the term service during the initial request. This approach fits most of the scenarios with small and medium number of objects in a term store. Besides that, PropertyFieldTermPicker does not use any additional libraries or modules to retrieve data from the taxonomy service which makes it much more lightweight option in comparison with PropertyFieldEnterpriseTermPicker . See PropertyFieldTermPicker for implementation details. We recommend to use PropertyFieldTermPicker control if you don't need on-demand loading or term labels .","title":"PropertyFieldTermPicker"},{"location":"controls/PropertyFieldTermPicker/#propertyfieldtermpicker-control","text":"This control generates a term picker that can be used in the property pane of your SharePoint Framework web parts. Disclaimer : This control makes use of the ProcessQuery API end-points to retrieve the managed metadata information. This will get changed once the APIs for managing managed metadata will become available. Empty term picker Selecting terms Selected terms in the panel Empty term picker Term picker: Auto Complete Limit the term set to a specific group or termset","title":"PropertyFieldTermPicker control"},{"location":"controls/PropertyFieldTermPicker/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldTermPicker } from '@pnp/spfx-property-controls/lib/PropertyFieldTermPicker' ; Create a new property for your web part, for example: import { IPickerTerms } from \"@pnp/spfx-property-controls/lib/PropertyFieldTermPicker\" ; export interface IPropertyControlsTestWebPartProps { terms : IPickerTerms ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldTermPicker ( 'terms' , { label : 'Select terms' , panelTitle : 'Select terms' , initialValues : this.properties.terms , allowMultipleSelections : true , excludeSystemGroup : false , onPropertyChange : this.onPropertyPaneFieldChanged , properties : this.properties , context : this.context , onGetErrorMessage : null , deferredValidationTime : 0 , limitByGroupNameOrID : 'People' , limitByTermsetNameOrID : 'Location' , key : 'termSetsPickerFieldId' })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldTermPicker/#implementation","text":"The PropertyFieldTermPicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. panelTitle string yes TermSet Picker Panel title. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. initialValues IPickerTerms no Defines the selected by default term sets. allowMultipleSelections boolean no Defines if the user can select only one or many term sets. Default value is false. excludeSystemGroup boolean no Indicator to define if the system Groups are exclude. Default is false. limitByGroupNameOrID string no Limit the term sets that can be used by the group name or ID. limitByTermsetNameOrID string no Limit the terms that can be picked by the Term Set name or ID. hideTermStoreName boolean no Specifies if you want to show or hide the term store name from the panel. isTermSetSelectable boolean no Specify if the term set itself is selectable in the tree view. areTermsSelectable boolean no Specify if the terms are selectable in the tree view. Default value is true areTermsHidden boolean no Specify if the terms are hidden from the tree view. disabledTermIds string[] no Specify which terms should be disabled in the term set so that they cannot be selected. onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. properties any yes Parent web part properties, this object is use to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. resolveDelay number no The delay time in ms before resolving suggestions, which is kicked off when input has been changed. e.g. if a second input change happens within the resolveDelay time, the timer will start over. Only until after the timer completes will onResolveSuggestions be called. Default is 500. anchorId string no When using LimitByTermsetNameOrId, set the anchorid to a child term in the TermSet to be able to select terms from that level and below. Interface IPickerTerms Property Type Required Description key string yes The ID of the term name string yes The name of the term path string yes The path of the term termSet string yes The Id of the parent term set of the term termSetName string no The Name of the parent term set of the term","title":"Implementation"},{"location":"controls/PropertyFieldTermPicker/#differences-between-propertyfieldenterprisetermpicker-and-propertyfieldtermpicker","text":"PropertyFieldEnterpriseTermPicker is implemented to be used for \"enterprise\" Term Stores with large amount of groups, terms sets, and terms. It loads term sets and terms on demand - only at the moment when specified group or term set has been expanded in the Term Store Tree. To implement on-demand loading PropertyFieldEnterpriseTermPicker uses @pnp/sp-taxonomy module from @pnp/pnpjs library. It increases the size of a bundle when the control is used. Additionally, PropertyFieldEnterpriseTermPicker allows to request labels for the terms in the picker. PropertyFieldTermPicker loads all the groups and term sets from the term service during the initial request. This approach fits most of the scenarios with small and medium number of objects in a term store. Besides that, PropertyFieldTermPicker does not use any additional libraries or modules to retrieve data from the taxonomy service which makes it much more lightweight option in comparison with PropertyFieldEnterpriseTermPicker . See PropertyFieldTermPicker for implementation details. We recommend to use PropertyFieldTermPicker control if you don't need on-demand loading or term labels .","title":"Differences between PropertyFieldEnterpriseTermPicker and PropertyFieldTermPicker"},{"location":"controls/PropertyFieldTextWithCallout/","text":"PropertyFieldTextWithCallout control \u00b6 This control generates a text field control with a callout. PropertyFieldTextWithCallout rendering PropertyFieldTextWithCallout callout opened How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/PropertyFieldHeader' ; import { PropertyFieldTextWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldTextWithCallout' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { textInfoHeaderValue : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldTextWithCallout ( 'textInfoHeaderValue' , { calloutTrigger : CalloutTriggers.Hover , key : 'textInfoHeaderFieldId' , label : 'Describe your PnP passion with few words' , calloutContent : React.createElement ( 'span' , {}, 'You can describe your passion with such words as strong, cosmic, all-absorbing, etc.' ), calloutWidth : 150 , value : this.properties.textInfoHeaderValue }) Implementation \u00b6 The PropertyFieldTextWithCallout control uses the same implementation as the default PropertyPaneTextField and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"PropertyFieldTextWithCallout"},{"location":"controls/PropertyFieldTextWithCallout/#propertyfieldtextwithcallout-control","text":"This control generates a text field control with a callout. PropertyFieldTextWithCallout rendering PropertyFieldTextWithCallout callout opened","title":"PropertyFieldTextWithCallout control"},{"location":"controls/PropertyFieldTextWithCallout/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/PropertyFieldHeader' ; import { PropertyFieldTextWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldTextWithCallout' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { textInfoHeaderValue : string ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldTextWithCallout ( 'textInfoHeaderValue' , { calloutTrigger : CalloutTriggers.Hover , key : 'textInfoHeaderFieldId' , label : 'Describe your PnP passion with few words' , calloutContent : React.createElement ( 'span' , {}, 'You can describe your passion with such words as strong, cosmic, all-absorbing, etc.' ), calloutWidth : 150 , value : this.properties.textInfoHeaderValue })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldTextWithCallout/#implementation","text":"The PropertyFieldTextWithCallout control uses the same implementation as the default PropertyPaneTextField and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"Implementation"},{"location":"controls/PropertyFieldToggleWithCallout/","text":"PropertyFieldToggleWithCallout control \u00b6 This control generates a toggle control with a callout. PropertyFieldToggleWithCallout rendering PropertyFieldToggleWithCallout callout opened How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/PropertyFieldHeader' ; import { PropertyFieldToggleWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldToggleWithCallout' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { toggleInfoHeaderValue : boolean ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldToggleWithCallout ( 'toggleInfoHeaderValue' , { calloutTrigger : CalloutTriggers.Click , key : 'toggleInfoHeaderFieldId' , label : 'Turn on the PnP feature' , calloutContent : React.createElement ( 'p' , {}, 'With this control you can enable or disable the PnP features in your web part' ), onText : 'ON' , offText : 'OFF' , checked : this.properties.toggleInfoHeaderValue }) Implementation \u00b6 The PropertyFieldToggleWithCallout control uses the same implementation as the default PropertyPaneToggle and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"PropertyFieldToggleWithCallout"},{"location":"controls/PropertyFieldToggleWithCallout/#propertyfieldtogglewithcallout-control","text":"This control generates a toggle control with a callout. PropertyFieldToggleWithCallout rendering PropertyFieldToggleWithCallout callout opened","title":"PropertyFieldToggleWithCallout control"},{"location":"controls/PropertyFieldToggleWithCallout/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { CalloutTriggers } from '@pnp/spfx-property-controls/lib/PropertyFieldHeader' ; import { PropertyFieldToggleWithCallout } from '@pnp/spfx-property-controls/lib/PropertyFieldToggleWithCallout' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { toggleInfoHeaderValue : boolean ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldToggleWithCallout ( 'toggleInfoHeaderValue' , { calloutTrigger : CalloutTriggers.Click , key : 'toggleInfoHeaderFieldId' , label : 'Turn on the PnP feature' , calloutContent : React.createElement ( 'p' , {}, 'With this control you can enable or disable the PnP features in your web part' ), onText : 'ON' , offText : 'OFF' , checked : this.properties.toggleInfoHeaderValue })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldToggleWithCallout/#implementation","text":"The PropertyFieldToggleWithCallout control uses the same implementation as the default PropertyPaneToggle and has the following additional properties: Property Type Required Description calloutContent React.ReactNode no Callout content - any HTML calloutWidth number no Custom width for callout including borders. If value is 0, no width is applied. calloutTrigger CalloutTriggers no Event to show the callout gapSpace number no The gap between the callout and the target Enum CalloutTriggers Name Description Click Shows the callout when you hover over the icon Hover Shows the callout when you click on the icon","title":"Implementation"},{"location":"controls/PropertyFieldViewPicker/","text":"PropertyFieldViewPicker control \u00b6 This control generates a view picker field that can be used in the property pane of your SharePoint Framework web parts. The control automatically retrieves the views for a given SharePoint list: How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldViewPicker , PropertyFieldViewPickerOrderBy } from '@pnp/spfx-property-controls/lib/PropertyFieldViewPicker' ; You'll probably want to use this control in combination with the PropertyFieldListPicker . Make sure to select the multiSelect prop to false , as this control is designed to work with a single list. Store the list id in your web part properties, as follows: export interface IPropertyControlsTestWebPartProps { list : string ; // Stores the list ID } Create a new property for your web part, as indicated between the BEGIN: and END: comments below: export interface IPropertyControlsTestWebPartProps { list : string ; // Stores the list ID // BEGIN: Added view : string ; // Stores the view ID // END: Added } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldViewPicker ( 'view' , { label : 'Select a view' , listId : this.properties.list , selectedView : this.properties.view , orderBy : PropertyFieldViewPickerOrderBy.Title , disabled : false , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , context : this.context , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'viewPickerFieldId' }) Implementation \u00b6 The PropertyFieldViewPicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. listId string yes The ID of the list or library you wish to select a view from. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. selectedView string no Initial selected view of the control. orderBy PropertyFieldViewPickerOrderBy no Specify the property on which you want to order the retrieve set of views. webAbsoluteUrl string no Absolute Web Url of target site (user requires permissions) onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. properties any yes Parent web part properties, this object is use to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. viewsToExclude string[] no Defines views by which should be excluded from the view picker control. You can specify view titles or IDs filter string no Filter views from OData query. onViewsRetrieved (views: ISPView[]) => PromiseLike | ISPView[] no Callback that is called before the dropdown is populated. Enum PropertyFieldViewPickerOrderBy Name Description Id Sort by view ID Title Sort by view title","title":"PropertyFieldViewPicker"},{"location":"controls/PropertyFieldViewPicker/#propertyfieldviewpicker-control","text":"This control generates a view picker field that can be used in the property pane of your SharePoint Framework web parts. The control automatically retrieves the views for a given SharePoint list:","title":"PropertyFieldViewPicker control"},{"location":"controls/PropertyFieldViewPicker/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyFieldViewPicker , PropertyFieldViewPickerOrderBy } from '@pnp/spfx-property-controls/lib/PropertyFieldViewPicker' ; You'll probably want to use this control in combination with the PropertyFieldListPicker . Make sure to select the multiSelect prop to false , as this control is designed to work with a single list. Store the list id in your web part properties, as follows: export interface IPropertyControlsTestWebPartProps { list : string ; // Stores the list ID } Create a new property for your web part, as indicated between the BEGIN: and END: comments below: export interface IPropertyControlsTestWebPartProps { list : string ; // Stores the list ID // BEGIN: Added view : string ; // Stores the view ID // END: Added } Add the custom property control to the groupFields of the web part property pane configuration: PropertyFieldViewPicker ( 'view' , { label : 'Select a view' , listId : this.properties.list , selectedView : this.properties.view , orderBy : PropertyFieldViewPickerOrderBy.Title , disabled : false , onPropertyChange : this.onPropertyPaneFieldChanged.bind ( this ), properties : this.properties , context : this.context , onGetErrorMessage : null , deferredValidationTime : 0 , key : 'viewPickerFieldId' })","title":"How to use this control in your solutions"},{"location":"controls/PropertyFieldViewPicker/#implementation","text":"The PropertyFieldViewPicker control can be configured with the following properties: Property Type Required Description label string yes Property field label displayed on top. listId string yes The ID of the list or library you wish to select a view from. disabled boolean no Specify if the control needs to be disabled. context BaseComponentContext yes Context of the current web part. selectedView string no Initial selected view of the control. orderBy PropertyFieldViewPickerOrderBy no Specify the property on which you want to order the retrieve set of views. webAbsoluteUrl string no Absolute Web Url of target site (user requires permissions) onPropertyChange function yes Defines a onPropertyChange function to raise when the date gets changed. properties any yes Parent web part properties, this object is use to update the property value. key string yes An unique key that indicates the identity of this control. onGetErrorMessage function no The method is used to get the validation error message and determine whether the input value is valid or not. See this documentation to learn how to use it. deferredValidationTime number no Control will start to validate after users stop typing for deferredValidationTime milliseconds. Default value is 200. viewsToExclude string[] no Defines views by which should be excluded from the view picker control. You can specify view titles or IDs filter string no Filter views from OData query. onViewsRetrieved (views: ISPView[]) => PromiseLike | ISPView[] no Callback that is called before the dropdown is populated. Enum PropertyFieldViewPickerOrderBy Name Description Id Sort by view ID Title Sort by view title","title":"Implementation"},{"location":"controls/PropertyPaneMarkdownContent/","text":"PropertyPaneMarkdownContent control \u00b6 This control allows you to embed content in a property pane using Markdown content. You can use this control to easily provide guidance for your users and create other content that is not easily created otherwise. It supports any arbitrary HTML without using dangerouslySetInnerHTML , and allows overriding any HTML tag. PropertyPaneMarkdownContent rendering How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyPaneMarkdownContent } from '@pnp/spfx-property-controls/lib/PropertyPaneMarkdownContent' ; Create a string with Markdown content for your property pane, for example: const md : string = ` ### This is Markdown [Markdown](http://daringfireball.net/projects/markdown/) lets you write content in a really natural way. * You can have lists, like this one * Make things **bold** or *italic* * Embed snippets of \\`code\\` * Create [links](/) * ... Also supports GitHub-flavored Markdown checklists - [x] Checklist item 1 - [x] Checklist item 2 - [ ] Checklist item 3 Sample content borrowed with thanks from [markdown-to-jsx](https://probablyup.com/markdown-to-jsx/) \u2764\ufe0f` Add the custom property control to the groupFields of the web part property pane configuration: PropertyPaneMarkdownContent ({ markdown : md , key : 'markdownSample' }) Indentation \u00b6 Pay close attention to the indentation in your Markdown string. The Markdown parser assumes that four spaces preceding your content means a code block. This means that the following Markdown will render most of the content a code block: const md : string = ` To get started select an items from the library. You can pick any items from the list, provided that is has a valid \\`id\\` attribute.` Producing the following HTML: To solve this issue, make sure that your content is not indented. const md : string = `To get started select an items from the library. You can pick any items from the list, provided that is has a valid \\`id\\` attribute.` Which will produce the following HTML: Overriding rendering of HTML elements \u00b6 You can override the rendering of any HTML element by specifying an overrides prop to the options . For example, to override the CSS class of H3 elements (which is defined by a ### in Markdown), you can override the className attribute using the following code: PropertyPaneMarkdownContent ({ markdown : ` ### This is a heading 3 You can override any HTML you want` , key : 'markdownSample' , options : { overrides : { h3 : { // Markdown equivalent of ### props : { className : \"ms-font-xl ms-fontColor-neutralDark\" , }, }, } }}), You can also render your own React elements using the overrides prop. For example, if you have a MyCustomControl React element, you can use the following: // Import your React element import MyCustomControl from 'MyCustomControl' ; ... PropertyPaneMarkdownContent ({ markdown : ` ### This is a heading 3 You can override any HTML you want ` , key : 'markdownSample' , options : { overrides : { h3 : { // Markdown equivalent of ### props : { className : \"ms-font-xl ms-fontColor-neutralDark\" , }, }, // Override the React element MyCustomControl : MyCustomControl } }}), Rendering all elements as inline or block elements \u00b6 By default, the control will attempt to determine whether the Markdown content should be wrapped in a
,

, or to render content as block or inline elements. For example, the following Markdown will be rendered as inline content: This is an _inline_ element And the following Markdown will be rendered as block content: ## This is a block element However, you can override rendering all HTML as block elements or inline elements by passing forceBlock: true or forceInline: true to the component's options prop. Named unicode \u00b6 By default the control converts named html codes to their unicode character equivalents: &: & ': ' >: > <: < (space) :   \": " If you need to extend this map of named codes and unicode characters, you can pass a list of additional html codes by using the namedCodesToUnicode option as object with the code names needed as follows: PropertyPaneMarkdownContent ({ markdown : ` One hundred is ≤ than one thousand, but is &ge than fifty.` , key : 'markdownSample' , options : { namedCodesToUnicode : { le : '\\u2264' , ge : '\\u2265' , } }}), Disabling parsing raw HTML \u00b6 By default, the PropertyPaneMarkdownContent control will parse raw HTML elements in your Markdown content and will attempt to render them. For example, this Markdown string will render text between two horizontal rulers:


Text between rulers
If you do not wish to render raw HTML from your Markdown, you can specify disableParsingRawHTML: true , which will render the same Markdown as follows: < hr/ > Text between rulers < hr/ > Implementation \u00b6 PropertyPaneMarkdownContent \u00b6 The PropertyPaneMarkdownContent control has the following properties: Property Type Required Description markdown string yes Markdown content you wish to display in the property pane key string yes A unique identifier for the property pane control options IMarkdownProps no Optional settings to control how Markdown content is rendered IMarkdownProps \u00b6 Property Type Required Description disableParsingRawHTML Boolean no true disables parsing of raw HTML elements within Markdown. forceBlock Boolean no true forces rendering all input strings as blocks. forceInline Boolean no true forces rendering all input strings as inline elements. namedCodesToUnicode object[] no An array of objects to override named HTML codes to their unicode equivalents. overrides object[] no An array of HTML elements to override during rendering. This control uses the markdown-to-jsx component to render safe HTML. For more information and advanced settings, please refer to the markdown-to-jsx documentation","title":"PropertyPaneMarkdownContent"},{"location":"controls/PropertyPaneMarkdownContent/#propertypanemarkdowncontent-control","text":"This control allows you to embed content in a property pane using Markdown content. You can use this control to easily provide guidance for your users and create other content that is not easily created otherwise. It supports any arbitrary HTML without using dangerouslySetInnerHTML , and allows overriding any HTML tag. PropertyPaneMarkdownContent rendering","title":"PropertyPaneMarkdownContent control"},{"location":"controls/PropertyPaneMarkdownContent/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyPaneMarkdownContent } from '@pnp/spfx-property-controls/lib/PropertyPaneMarkdownContent' ; Create a string with Markdown content for your property pane, for example: const md : string = ` ### This is Markdown [Markdown](http://daringfireball.net/projects/markdown/) lets you write content in a really natural way. * You can have lists, like this one * Make things **bold** or *italic* * Embed snippets of \\`code\\` * Create [links](/) * ... Also supports GitHub-flavored Markdown checklists - [x] Checklist item 1 - [x] Checklist item 2 - [ ] Checklist item 3 Sample content borrowed with thanks from [markdown-to-jsx](https://probablyup.com/markdown-to-jsx/) \u2764\ufe0f` Add the custom property control to the groupFields of the web part property pane configuration: PropertyPaneMarkdownContent ({ markdown : md , key : 'markdownSample' })","title":"How to use this control in your solutions"},{"location":"controls/PropertyPaneMarkdownContent/#indentation","text":"Pay close attention to the indentation in your Markdown string. The Markdown parser assumes that four spaces preceding your content means a code block. This means that the following Markdown will render most of the content a code block: const md : string = ` To get started select an items from the library. You can pick any items from the list, provided that is has a valid \\`id\\` attribute.` Producing the following HTML: To solve this issue, make sure that your content is not indented. const md : string = `To get started select an items from the library. You can pick any items from the list, provided that is has a valid \\`id\\` attribute.` Which will produce the following HTML:","title":"Indentation"},{"location":"controls/PropertyPaneMarkdownContent/#overriding-rendering-of-html-elements","text":"You can override the rendering of any HTML element by specifying an overrides prop to the options . For example, to override the CSS class of H3 elements (which is defined by a ### in Markdown), you can override the className attribute using the following code: PropertyPaneMarkdownContent ({ markdown : ` ### This is a heading 3 You can override any HTML you want` , key : 'markdownSample' , options : { overrides : { h3 : { // Markdown equivalent of ### props : { className : \"ms-font-xl ms-fontColor-neutralDark\" , }, }, } }}), You can also render your own React elements using the overrides prop. For example, if you have a MyCustomControl React element, you can use the following: // Import your React element import MyCustomControl from 'MyCustomControl' ; ... PropertyPaneMarkdownContent ({ markdown : ` ### This is a heading 3 You can override any HTML you want ` , key : 'markdownSample' , options : { overrides : { h3 : { // Markdown equivalent of ### props : { className : \"ms-font-xl ms-fontColor-neutralDark\" , }, }, // Override the React element MyCustomControl : MyCustomControl } }}),","title":"Overriding rendering of HTML elements"},{"location":"controls/PropertyPaneMarkdownContent/#rendering-all-elements-as-inline-or-block-elements","text":"By default, the control will attempt to determine whether the Markdown content should be wrapped in a
,

, or to render content as block or inline elements. For example, the following Markdown will be rendered as inline content: This is an _inline_ element And the following Markdown will be rendered as block content: ## This is a block element However, you can override rendering all HTML as block elements or inline elements by passing forceBlock: true or forceInline: true to the component's options prop.","title":"Rendering all elements as inline or block elements"},{"location":"controls/PropertyPaneMarkdownContent/#named-unicode","text":"By default the control converts named html codes to their unicode character equivalents: &: & ': ' >: > <: < (space) :   \": " If you need to extend this map of named codes and unicode characters, you can pass a list of additional html codes by using the namedCodesToUnicode option as object with the code names needed as follows: PropertyPaneMarkdownContent ({ markdown : ` One hundred is ≤ than one thousand, but is &ge than fifty.` , key : 'markdownSample' , options : { namedCodesToUnicode : { le : '\\u2264' , ge : '\\u2265' , } }}),","title":"Named unicode"},{"location":"controls/PropertyPaneMarkdownContent/#disabling-parsing-raw-html","text":"By default, the PropertyPaneMarkdownContent control will parse raw HTML elements in your Markdown content and will attempt to render them. For example, this Markdown string will render text between two horizontal rulers:


Text between rulers
If you do not wish to render raw HTML from your Markdown, you can specify disableParsingRawHTML: true , which will render the same Markdown as follows: < hr/ > Text between rulers < hr/ >","title":"Disabling parsing raw HTML"},{"location":"controls/PropertyPaneMarkdownContent/#implementation","text":"","title":"Implementation"},{"location":"controls/PropertyPaneMarkdownContent/#propertypanemarkdowncontent","text":"The PropertyPaneMarkdownContent control has the following properties: Property Type Required Description markdown string yes Markdown content you wish to display in the property pane key string yes A unique identifier for the property pane control options IMarkdownProps no Optional settings to control how Markdown content is rendered","title":"PropertyPaneMarkdownContent"},{"location":"controls/PropertyPaneMarkdownContent/#imarkdownprops","text":"Property Type Required Description disableParsingRawHTML Boolean no true disables parsing of raw HTML elements within Markdown. forceBlock Boolean no true forces rendering all input strings as blocks. forceInline Boolean no true forces rendering all input strings as inline elements. namedCodesToUnicode object[] no An array of objects to override named HTML codes to their unicode equivalents. overrides object[] no An array of HTML elements to override during rendering. This control uses the markdown-to-jsx component to render safe HTML. For more information and advanced settings, please refer to the markdown-to-jsx documentation","title":"IMarkdownProps"},{"location":"controls/PropertyPanePropertyEditor/","text":"PropertyPanePropertyEditor control \u00b6 This control allows the user to edit the webpart properties in JSON. It can also be used to export properties of a webpart and later import them again to a similar webpart on a different page. If the user clicks 'export' a file named 'webpartproperties.json' is presented for download. The same file can be uploaded to a new instance of the same webpart on for instance another site or page. PropertyPanePropertyEditor rendering in property pane PropertyPanePropertyEditor rendering when expanded How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyPanePropertyEditor } from '@pnp/spfx-property-controls/lib/PropertyPanePropertyEditor' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { toggleInfoHeaderValue : boolean ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyPanePropertyEditor ({ webpart : this , key : 'propertyEditor' }) Implementation \u00b6 The PropertyEditor control has the following properties: Property Type Required Description webpart BaseClientSideWebPart yes The webpart, which is in principle the current webpart, of which you want to be able to edit the properties from","title":"PropertyPanePropertyEditor"},{"location":"controls/PropertyPanePropertyEditor/#propertypanepropertyeditor-control","text":"This control allows the user to edit the webpart properties in JSON. It can also be used to export properties of a webpart and later import them again to a similar webpart on a different page. If the user clicks 'export' a file named 'webpartproperties.json' is presented for download. The same file can be uploaded to a new instance of the same webpart on for instance another site or page. PropertyPanePropertyEditor rendering in property pane PropertyPanePropertyEditor rendering when expanded","title":"PropertyPanePropertyEditor control"},{"location":"controls/PropertyPanePropertyEditor/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyPanePropertyEditor } from '@pnp/spfx-property-controls/lib/PropertyPanePropertyEditor' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { toggleInfoHeaderValue : boolean ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyPanePropertyEditor ({ webpart : this , key : 'propertyEditor' })","title":"How to use this control in your solutions"},{"location":"controls/PropertyPanePropertyEditor/#implementation","text":"The PropertyEditor control has the following properties: Property Type Required Description webpart BaseClientSideWebPart yes The webpart, which is in principle the current webpart, of which you want to be able to edit the properties from","title":"Implementation"},{"location":"controls/PropertyPaneWebPartInformation/","text":"PropertyPaneWebPartInformation control \u00b6 This control allows you to specify a description, a 'read more' link, and an optional embedded video PropertyPaneWebPartInformation rendering How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyPaneWebPartInformation } from '@pnp/spfx-property-controls/lib/PropertyPaneWebPartInformation' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { toggleInfoHeaderValue : boolean ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyPaneWebPartInformation ({ description : `This is a demo webpart, used to demonstrate all the PnP property controls` , moreInfoLink : `https://pnp.github.io/sp-dev-fx-property-controls/` , videoProperties : { embedLink : `https://www.youtube.com/embed/d_9o3tQ90zo` , properties : { allowFullScreen : true } }, key : 'webPartInfoId' }) Implementation \u00b6 The PropertyPaneWebPartInformation control has the following properties: Property Type Required Description description string yes Description content - any HTML moreInfoLink string no A URL providing optional additional information moreInfoLinkTarget string no An optional target for the link. Defaults to '_blank' videoProperties IVideoEmbedProperties no A video properties object specifying an optionally embedded video Class IVideoEmbedProperties Property Type Required Description embedLink string yes A link to an embeddable video. The video will be embedded in an iframe. See the example above for details width number no optional width of the iframe height number no optional height of the iframe properties object no additional properties to set on the iframe element","title":"PropertyPaneWebPartInformation"},{"location":"controls/PropertyPaneWebPartInformation/#propertypanewebpartinformation-control","text":"This control allows you to specify a description, a 'read more' link, and an optional embedded video PropertyPaneWebPartInformation rendering","title":"PropertyPaneWebPartInformation control"},{"location":"controls/PropertyPaneWebPartInformation/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your component: import { PropertyPaneWebPartInformation } from '@pnp/spfx-property-controls/lib/PropertyPaneWebPartInformation' ; Create a new property for your web part, for example: export interface IPropertyControlsTestWebPartProps { toggleInfoHeaderValue : boolean ; } Add the custom property control to the groupFields of the web part property pane configuration: PropertyPaneWebPartInformation ({ description : `This is a demo webpart, used to demonstrate all the PnP property controls` , moreInfoLink : `https://pnp.github.io/sp-dev-fx-property-controls/` , videoProperties : { embedLink : `https://www.youtube.com/embed/d_9o3tQ90zo` , properties : { allowFullScreen : true } }, key : 'webPartInfoId' })","title":"How to use this control in your solutions"},{"location":"controls/PropertyPaneWebPartInformation/#implementation","text":"The PropertyPaneWebPartInformation control has the following properties: Property Type Required Description description string yes Description content - any HTML moreInfoLink string no A URL providing optional additional information moreInfoLinkTarget string no An optional target for the link. Defaults to '_blank' videoProperties IVideoEmbedProperties no A video properties object specifying an optionally embedded video Class IVideoEmbedProperties Property Type Required Description embedLink string yes A link to an embeddable video. The video will be embedded in an iframe. See the example above for details width number no optional width of the iframe height number no optional height of the iframe properties object no additional properties to set on the iframe element","title":"Implementation"},{"location":"guides/","text":"Project guides \u00b6 Following is an overview of guides for this project. If you're considering contributing to the project, reading up on these guides will help you understand the project structure and get started developing for it. Contributing - how you can contribute to the project Minimal Path to Awesome - setup your development environment Submitting a PR - how to submit a PR Migrating from V1 - how to migrate from v1","title":"Project guides"},{"location":"guides/#project-guides","text":"Following is an overview of guides for this project. If you're considering contributing to the project, reading up on these guides will help you understand the project structure and get started developing for it. Contributing - how you can contribute to the project Minimal Path to Awesome - setup your development environment Submitting a PR - how to submit a PR Migrating from V1 - how to migrate from v1","title":"Project guides"},{"location":"guides/contributing/","text":"Contribution guidelines \u00b6 We appreciate that you're interested in helping with moving the project forward. Before you submit your first PR, please read the following guide. We'd hate to see you work on something that someone else is already working on, something that we agreed not to do or something that doesn't match the project. Sharing is caring! You have an idea for a new control \u00b6 Awesome! Good ideas are invaluable for every product. Before you start hacking away, please check if there is no similar idea already listed in the issue list . If not, please create a new issue describing your idea. Once we agree on the feature scope and architecture, the feature will be ready for building. Don't hesitate to mention in the issue if you'd like to build the feature yourself. When building a new control, try to add your control to the default provided web part so that everyone can test it out. Please also provide the documentation for your controls in the documentation section . You have a suggestion for improving an existing control \u00b6 Nothing is perfect. If you have an idea how to improve an existing control, let us know by submitting an issue in the issue list . Some things are done for a reason, but some are not. Let's discuss what you think and see how the project could be improved for everyone. You've found a bug \u00b6 Bugs happen. When you find a bug, please have a look at the issue list if a similar bug has already been logged. If not, let us know what doesn't work and how we can reproduce it. If we can't reproduce your bug, we will ask you for clarification, which will only make it longer to fix it. Fixing typos \u00b6 Typos are embarrassing! Most PR's that fix typos will be accepted immediately. In order to make it easier to review the PR, please narrow the focus instead of sending a huge PR of fixes. Tips \u00b6 Before contributing: ensure that the dev branch on your fork is in sync with the original sp-dev-fx-property-controls repository ```sh # assuming you are in the folder of your locally cloned fork.... git checkout dev assuming you have a remote named upstream pointing to the official sp-dev-fx-property-controls repo \u00b6 git fetch upstream update your local dev to be a mirror of what's in the main repo \u00b6 git pull --rebase upstream dev ``` create a feature branch for your change. If you'll get stuck on an issue or merging your PR will take a while, this will allow you to have a clean dev branch that you can use for contributing other changes sh git checkout -b my-contribution DO's & DON'Ts \u00b6 DO follow the same project and test structure as the existing project. DO include tests when adding new functionality and features. When fixing bugs, start with adding a test that highlights how the current behavior is broken. DO keep discussions focused. When a new or related topic comes up it's often better to create new issue than to side track the conversation. DO NOT submit PR's for coding style changes. DO NOT surprise us with big PR's. Instead file an issue & start a discussion so we can agree on a direction before you invest a large amount of time. DO NOT commit code you didn't write. DO NOT submit PR's that refactor existing code without a discussion first.","title":"Contribution guidelines"},{"location":"guides/contributing/#contribution-guidelines","text":"We appreciate that you're interested in helping with moving the project forward. Before you submit your first PR, please read the following guide. We'd hate to see you work on something that someone else is already working on, something that we agreed not to do or something that doesn't match the project. Sharing is caring!","title":"Contribution guidelines"},{"location":"guides/contributing/#you-have-an-idea-for-a-new-control","text":"Awesome! Good ideas are invaluable for every product. Before you start hacking away, please check if there is no similar idea already listed in the issue list . If not, please create a new issue describing your idea. Once we agree on the feature scope and architecture, the feature will be ready for building. Don't hesitate to mention in the issue if you'd like to build the feature yourself. When building a new control, try to add your control to the default provided web part so that everyone can test it out. Please also provide the documentation for your controls in the documentation section .","title":"You have an idea for a new control"},{"location":"guides/contributing/#you-have-a-suggestion-for-improving-an-existing-control","text":"Nothing is perfect. If you have an idea how to improve an existing control, let us know by submitting an issue in the issue list . Some things are done for a reason, but some are not. Let's discuss what you think and see how the project could be improved for everyone.","title":"You have a suggestion for improving an existing control"},{"location":"guides/contributing/#youve-found-a-bug","text":"Bugs happen. When you find a bug, please have a look at the issue list if a similar bug has already been logged. If not, let us know what doesn't work and how we can reproduce it. If we can't reproduce your bug, we will ask you for clarification, which will only make it longer to fix it.","title":"You've found a bug"},{"location":"guides/contributing/#fixing-typos","text":"Typos are embarrassing! Most PR's that fix typos will be accepted immediately. In order to make it easier to review the PR, please narrow the focus instead of sending a huge PR of fixes.","title":"Fixing typos"},{"location":"guides/contributing/#tips","text":"Before contributing: ensure that the dev branch on your fork is in sync with the original sp-dev-fx-property-controls repository ```sh # assuming you are in the folder of your locally cloned fork.... git checkout dev","title":"Tips"},{"location":"guides/contributing/#assuming-you-have-a-remote-named-upstream-pointing-to-the-official-sp-dev-fx-property-controls-repo","text":"git fetch upstream","title":"assuming you have a remote named upstream pointing to the official sp-dev-fx-property-controls repo"},{"location":"guides/contributing/#update-your-local-dev-to-be-a-mirror-of-whats-in-the-main-repo","text":"git pull --rebase upstream dev ``` create a feature branch for your change. If you'll get stuck on an issue or merging your PR will take a while, this will allow you to have a clean dev branch that you can use for contributing other changes sh git checkout -b my-contribution","title":"update your local dev to be a mirror of what's in the main repo"},{"location":"guides/contributing/#dos-donts","text":"DO follow the same project and test structure as the existing project. DO include tests when adding new functionality and features. When fixing bugs, start with adding a test that highlights how the current behavior is broken. DO keep discussions focused. When a new or related topic comes up it's often better to create new issue than to side track the conversation. DO NOT submit PR's for coding style changes. DO NOT surprise us with big PR's. Instead file an issue & start a discussion so we can agree on a direction before you invest a large amount of time. DO NOT commit code you didn't write. DO NOT submit PR's that refactor existing code without a discussion first.","title":"DO's & DON'Ts"},{"location":"guides/migrate-from-v1/","text":"Migrating from v1 to v2 \u00b6 Most of the controls have no breaking changes when moving from v1 to v2. However, some APIs were changed to make the library more stable and controls behavior more even. Also, we've bumped up React and Fluent UI versions used in the library. It means you will need to update package.json file in your SPFx projects. The below guide is an overview of what it takes to migrate from v1 to v2. If we missed something, please let us know in the issues list so we can update the guide. Thanks! v2 Supports SharePoint Online Only \u00b6 v2 of Reusable Controls is based on SharePoint Framework 1.11 and, as a result, does not support SharePoint on-premises. Important : Please, use v1 if you plan to deploy your solution on-premises. React and Fluent UI versions \u00b6 v2 of Reusable Controls uses React.js v16.8.5 and Fluent UI (Office UI Fabric React) v6.214.0. Although it is not necessary to use the same modules' versions in your project, we highly recommend to update your solution accordingly: \"dependencies\" : { // other dependencies \"office-ui-fabric-react\" : \"6.214.0\" , \"react\" : \"16.8.5\" , \"react-dom\" : \"16.8.5\" }, \"devDependencies\" : { \"@types/react\" : \"16.8.8\" , \"@types/react-dom\" : \"16.8.3\" , }, The easiest way to upgrade SharePoint Framework solution is to use Office365 CLI spfx project upgrade command. APIs Changes \u00b6 ...","title":"Migrating from v1 to v2"},{"location":"guides/migrate-from-v1/#migrating-from-v1-to-v2","text":"Most of the controls have no breaking changes when moving from v1 to v2. However, some APIs were changed to make the library more stable and controls behavior more even. Also, we've bumped up React and Fluent UI versions used in the library. It means you will need to update package.json file in your SPFx projects. The below guide is an overview of what it takes to migrate from v1 to v2. If we missed something, please let us know in the issues list so we can update the guide. Thanks!","title":"Migrating from v1 to v2"},{"location":"guides/migrate-from-v1/#v2-supports-sharepoint-online-only","text":"v2 of Reusable Controls is based on SharePoint Framework 1.11 and, as a result, does not support SharePoint on-premises. Important : Please, use v1 if you plan to deploy your solution on-premises.","title":"v2 Supports SharePoint Online Only"},{"location":"guides/migrate-from-v1/#react-and-fluent-ui-versions","text":"v2 of Reusable Controls uses React.js v16.8.5 and Fluent UI (Office UI Fabric React) v6.214.0. Although it is not necessary to use the same modules' versions in your project, we highly recommend to update your solution accordingly: \"dependencies\" : { // other dependencies \"office-ui-fabric-react\" : \"6.214.0\" , \"react\" : \"16.8.5\" , \"react-dom\" : \"16.8.5\" }, \"devDependencies\" : { \"@types/react\" : \"16.8.8\" , \"@types/react-dom\" : \"16.8.3\" , }, The easiest way to upgrade SharePoint Framework solution is to use Office365 CLI spfx project upgrade command.","title":"React and Fluent UI versions"},{"location":"guides/migrate-from-v1/#apis-changes","text":"...","title":"APIs Changes"},{"location":"guides/mpa/","text":"Minimal Path to Awesome \u00b6 The shortest way to prepare your local copy of the project for development and testing. Install prerequisites \u00b6 Before you start contributing to this project, you will need Node.js. This project has been tested with the 10.x version of Node.js and the version of NPM that comes with it. You can use Node Version Manager to switch between different versions of Node.js. Get the local version of the project \u00b6 fork this repository clone your fork in the command line: run npm install to restore dependencies run gulp serve to serve your project Start making your changes Documentation \u00b6 SharePoint Framework Property Controls uses MkDocs to publish documentation pages. See more information about installing MkDocs on your operating system at http://www.mkdocs.org/#installation. Also, documentation uses custom MkDocs theme that should be installed as well. See Material theme for MkDocs Once you have MkDocs and Material theme installed on your machine, in the command line: run cd ./docs/documentation to change directory to where the manual pages are stored run mkdocs serve to start the local web server with MkDocs and view the documentation in the web browser","title":"Minimal Path to Awesome"},{"location":"guides/mpa/#minimal-path-to-awesome","text":"The shortest way to prepare your local copy of the project for development and testing.","title":"Minimal Path to Awesome"},{"location":"guides/mpa/#install-prerequisites","text":"Before you start contributing to this project, you will need Node.js. This project has been tested with the 10.x version of Node.js and the version of NPM that comes with it. You can use Node Version Manager to switch between different versions of Node.js.","title":"Install prerequisites"},{"location":"guides/mpa/#get-the-local-version-of-the-project","text":"fork this repository clone your fork in the command line: run npm install to restore dependencies run gulp serve to serve your project Start making your changes","title":"Get the local version of the project"},{"location":"guides/mpa/#documentation","text":"SharePoint Framework Property Controls uses MkDocs to publish documentation pages. See more information about installing MkDocs on your operating system at http://www.mkdocs.org/#installation. Also, documentation uses custom MkDocs theme that should be installed as well. See Material theme for MkDocs Once you have MkDocs and Material theme installed on your machine, in the command line: run cd ./docs/documentation to change directory to where the manual pages are stored run mkdocs serve to start the local web server with MkDocs and view the documentation in the web browser","title":"Documentation"},{"location":"guides/submitting-pr/","text":"Submitting a PR \u00b6 We appreciate your initiative and would love to integrate your work with the rest of the project! Here is how you can help us do it as quickly as possible. check, that your feature branch is up-to-date. If it's not, there is a risk of merge conflicts or other issues that will complicate merging your changes into the main repository. Refer to these resources for more information on syncing your repo: GitHub Help: Syncing a Fork AC: Keep Your Forked Git Repo Updated with Changes from the Original Upstream Repo Looking for a quick cheat sheet? Look no further: ```sh assuming you are in the folder of your locally cloned fork.... \u00b6 git checkout dev assuming you have a remote named upstream pointing to the official sp-dev-fx-property-controls repo \u00b6 git fetch upstream update your local dev branch to be a mirror of what's in the main repo \u00b6 git pull --rebase upstream dev switch to your branch where you are working, say \"issue-xyz\" \u00b6 git checkout issue-xyz update your branch to update its fork point to the current tip of dev & put your changes on top of it \u00b6 git rebase dev `` - submit PR to the **dev** branch of the main repo. PRs submitted to other branches will be declined - let us know what's in the PR: is it a new command, bug fix or a minor update in the docs? The clearer the information you provide, the quicker your PR can be verified and merged - ideally 1 PR = 1 commit - this makes it easier to keep the log clear for everyone and track what's changed. If you're new to working with git, we'll squash your commits for you when merging your changes into the main repo - don't worry about changing the version or adding yourself to the list of contributors in package.json`. We'll do that for you when merging your changes.","title":"Submitting a PR"},{"location":"guides/submitting-pr/#submitting-a-pr","text":"We appreciate your initiative and would love to integrate your work with the rest of the project! Here is how you can help us do it as quickly as possible. check, that your feature branch is up-to-date. If it's not, there is a risk of merge conflicts or other issues that will complicate merging your changes into the main repository. Refer to these resources for more information on syncing your repo: GitHub Help: Syncing a Fork AC: Keep Your Forked Git Repo Updated with Changes from the Original Upstream Repo Looking for a quick cheat sheet? Look no further: ```sh","title":"Submitting a PR"},{"location":"guides/submitting-pr/#assuming-you-are-in-the-folder-of-your-locally-cloned-fork","text":"git checkout dev","title":"assuming you are in the folder of your locally cloned fork...."},{"location":"guides/submitting-pr/#assuming-you-have-a-remote-named-upstream-pointing-to-the-official-sp-dev-fx-property-controls-repo","text":"git fetch upstream","title":"assuming you have a remote named upstream pointing to the official sp-dev-fx-property-controls repo"},{"location":"guides/submitting-pr/#update-your-local-dev-branch-to-be-a-mirror-of-whats-in-the-main-repo","text":"git pull --rebase upstream dev","title":"update your local dev branch to be a mirror of what's in the main repo"},{"location":"guides/submitting-pr/#switch-to-your-branch-where-you-are-working-say-issue-xyz","text":"git checkout issue-xyz","title":"switch to your branch where you are working, say \"issue-xyz\""},{"location":"guides/submitting-pr/#update-your-branch-to-update-its-fork-point-to-the-current-tip-of-dev-put-your-changes-on-top-of-it","text":"git rebase dev `` - submit PR to the **dev** branch of the main repo. PRs submitted to other branches will be declined - let us know what's in the PR: is it a new command, bug fix or a minor update in the docs? The clearer the information you provide, the quicker your PR can be verified and merged - ideally 1 PR = 1 commit - this makes it easier to keep the log clear for everyone and track what's changed. If you're new to working with git, we'll squash your commits for you when merging your changes into the main repo - don't worry about changing the version or adding yourself to the list of contributors in package.json`. We'll do that for you when merging your changes.","title":"update your branch to update its fork point to the current tip of dev & put your changes on top of it"},{"location":"helpers/PropertyPaneHelpers/","text":"PropertyPaneHelpers \u00b6 These are helpers to interact with the property pane of the web part. Currently this helper allows you to show a spinner when the property pane is loading resources. This could be loading controls, fetching data, ... Normally you would get a white property pane until all data is loaded. How to use this control in your solutions \u00b6 Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your main web part TypeScript file: import { PropertyPaneHelpers } from '@pnp/spfx-property-controls/lib/helpers' ; You can use the following example to add the spinner to your web part property pane: /** * Load property pane resources */ protected async loadPropertyPaneResources () : Promise < void > { PropertyPaneHelpers . setSpinner ({ bgColor : \"white\" , spinnerProps : { styles : () => { return { circle : { height : 80 , width : 80 } }; } } }); // Write here the code you want to add to load your resources PropertyPaneHelpers . clearSpinner ( 200 ); } Implementation \u00b6 The setSpinner method allows you to set the following properties: Property Type Required Description bgColor string no Spinner background color className string no Class name to style the spinner yourself. spinnerProps ISpinnerProps no Spinner properties from Office UI Fabric.","title":"PropertyPaneHelpers"},{"location":"helpers/PropertyPaneHelpers/#propertypanehelpers","text":"These are helpers to interact with the property pane of the web part. Currently this helper allows you to show a spinner when the property pane is loading resources. This could be loading controls, fetching data, ... Normally you would get a white property pane until all data is loaded.","title":"PropertyPaneHelpers"},{"location":"helpers/PropertyPaneHelpers/#how-to-use-this-control-in-your-solutions","text":"Check that you installed the @pnp/spfx-property-controls dependency. Check out The getting started page for more information about installing the dependency. Import the following modules to your main web part TypeScript file: import { PropertyPaneHelpers } from '@pnp/spfx-property-controls/lib/helpers' ; You can use the following example to add the spinner to your web part property pane: /** * Load property pane resources */ protected async loadPropertyPaneResources () : Promise < void > { PropertyPaneHelpers . setSpinner ({ bgColor : \"white\" , spinnerProps : { styles : () => { return { circle : { height : 80 , width : 80 } }; } } }); // Write here the code you want to add to load your resources PropertyPaneHelpers . clearSpinner ( 200 ); }","title":"How to use this control in your solutions"},{"location":"helpers/PropertyPaneHelpers/#implementation","text":"The setSpinner method allows you to set the following properties: Property Type Required Description bgColor string no Spinner background color className string no Class name to style the spinner yourself. spinnerProps ISpinnerProps no Spinner properties from Office UI Fabric.","title":"Implementation"}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..0f8724ef --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz new file mode 100644 index 00000000..bde1c4a6 Binary files /dev/null and b/sitemap.xml.gz differ