├── .github └── ISSUE_TEMPLATE │ ├── bug-or-issue-report.md │ ├── documentation.md │ └── question.md ├── .gitignore ├── README.md ├── docs ├── assets │ ├── aequos_logo.png │ ├── aequos_logo_noir.png │ ├── app_catalog.png │ ├── cards_layout_options.png │ ├── connections_flow.drawio │ ├── connections_flow.png │ ├── custom_datasource.png │ ├── extensibility │ │ ├── aequos_extensibility_npm.png │ │ ├── data_source │ │ │ ├── custom_data_source.png │ │ │ ├── data_source_properties.png │ │ │ ├── property_bag.png │ │ │ └── service_keys.png │ │ ├── extensibility_configuration.png │ │ ├── extensibility_configuration_manifest.png │ │ ├── implement_interface.png │ │ ├── layout │ │ │ ├── custom_layout.png │ │ │ └── layout_properties.png │ │ ├── library_manifest_id.png │ │ └── web_components │ │ │ ├── collapsible_component.png │ │ │ ├── custom_web_component.png │ │ │ ├── debug_types.png │ │ │ ├── document_card_component.png │ │ │ ├── fileicon_component.png │ │ │ ├── filepreview_component.png │ │ │ ├── icon_component.png │ │ │ ├── panel_component.png │ │ │ └── persona_component.png │ ├── extra.css │ ├── get_tenant_id.png │ ├── get_tenant_id2.png │ ├── howto │ │ └── sp_rest_taxonomy_filters.png │ ├── license_mail.png │ ├── licenses.png │ ├── scenarios │ │ ├── graph-people-directory1.png │ │ ├── graph-people-directory10.png │ │ ├── graph-people-directory11.png │ │ ├── graph-people-directory2.png │ │ ├── graph-people-directory3.png │ │ ├── graph-people-directory4.png │ │ ├── graph-people-directory5.png │ │ ├── graph-people-directory6.png │ │ ├── graph-people-directory7.png │ │ ├── graph-people-directory8.png │ │ ├── graph-people-directory_final.png │ │ ├── people_directory1.png │ │ ├── people_directory2.png │ │ ├── people_directory3.png │ │ ├── people_directory4.png │ │ ├── people_directory5.png │ │ ├── people_directory6.png │ │ ├── people_directory7.png │ │ ├── people_directory8.png │ │ ├── people_directory9.png │ │ ├── search_center.png │ │ ├── tags │ │ │ ├── allow_item_selection.png │ │ │ ├── configure_connection.png │ │ │ ├── filter_title_slot.png │ │ │ ├── final_result.png │ │ │ ├── graph_url.png │ │ │ ├── managed_metadata_term_set.png │ │ │ ├── news.png │ │ │ ├── query_template.png │ │ │ ├── search_managed_property.png │ │ │ ├── site_pages_news.png │ │ │ ├── slots_configuration.png │ │ │ ├── tag_filter_bar.gif │ │ │ ├── tags_bar.png │ │ │ └── term_set_id.png │ │ └── teams │ │ │ ├── AzureAD_App_ID.png │ │ │ ├── AzureAD_App_Register.png │ │ │ ├── add_filters_wp.png │ │ │ ├── app_studio_app.png │ │ │ ├── app_studio_app_details.png │ │ │ ├── app_studio_app_distribute.png │ │ │ ├── app_studio_create_app.png │ │ │ ├── app_studio_personal_tab.png │ │ │ ├── app_studio_personal_tab_details.png │ │ │ ├── data_visualizer_connections_config.png │ │ │ ├── data_visualizer_source_config.png │ │ │ ├── filters_connection.png │ │ │ ├── filters_wp_configuration.png │ │ │ ├── filters_wp_taxonomy.png │ │ │ ├── filters_wp_taxonomy2.png │ │ │ ├── graph_explorer_get_teams.png │ │ │ ├── graph_explorer_payload.png │ │ │ ├── graph_explorer_permissions.png │ │ │ ├── graph_explorer_response.png │ │ │ ├── graph_explorer_tag_team.png │ │ │ ├── page_vertical_section.png │ │ │ ├── search_box_wp.png │ │ │ ├── team_layout_options.png │ │ │ ├── team_layout_options_select_fields.png │ │ │ ├── teams-search_overview.png │ │ │ ├── teams_default_search.png │ │ │ ├── teams_search_app.png │ │ │ ├── teams_term_store.png │ │ │ └── template │ │ │ └── teams_search_page.xml │ ├── standalone_product.png │ ├── subscription_product.png │ ├── sync-to-teams.png │ ├── teams-apps.png │ ├── theme_debug.png │ ├── theme_field.png │ ├── trial_error.png │ ├── trial_license.png │ ├── upgrade_mdv_add.png │ ├── upgrade_pnp_remove.png │ ├── webparts.png │ └── webparts │ │ ├── data_filters │ │ ├── checkbox_template.png │ │ ├── combo_template.png │ │ ├── data_filters_filter_values_operator.png │ │ ├── data_filters_wp_default.png │ │ ├── data_filters_wp_picker.png │ │ ├── data_filters_wp_vertical.png │ │ ├── dateinterval_template.png │ │ ├── daterange_template.png │ │ ├── filter_deep_linking.png │ │ ├── filter_settings.png │ │ ├── filter_settings_panel.png │ │ ├── filter_type.png │ │ ├── layouts │ │ │ ├── available_layouts.png │ │ │ ├── custom_edit.png │ │ │ ├── custom_external_file.png │ │ │ ├── custom_layout.png │ │ │ ├── debug_layout.png │ │ │ ├── horizontal_layout.png │ │ │ ├── horizontal_options.png │ │ │ ├── panel_layout.png │ │ │ ├── panel_options.png │ │ │ └── vertical_layout.png │ │ ├── operator_filters.png │ │ ├── taxonomy_picker.png │ │ ├── taxonomy_template.png │ │ ├── templates │ │ │ ├── taxonomy_picker_configuration1.png │ │ │ ├── taxonomy_picker_configuration2.png │ │ │ ├── taxonomy_picker_configuration21.png │ │ │ ├── taxonomy_picker_configuration4.png │ │ │ ├── taxonomy_picker_overview.png │ │ │ ├── taxonomy_picker_paging.png │ │ │ ├── taxonomy_picker_search.png │ │ │ └── taxonomy_picker_selection_behavior.png │ │ └── wp_connection.png │ │ ├── data_verticals │ │ ├── configure_verticals.png │ │ ├── data_verticals_wp_default.png │ │ └── data_verticals_wp_picker.png │ │ ├── data_visualizer │ │ ├── about_page.png │ │ ├── caml │ │ │ ├── filter_advancedmode.png │ │ │ ├── filter_builder.png │ │ │ └── source_configuration.png │ │ ├── common │ │ │ └── caching_options.png │ │ ├── connections │ │ │ ├── allow_item_selection.png │ │ │ ├── available_connections.png │ │ │ ├── configure_data_results_connection_1.png │ │ │ ├── configure_data_results_connection_2.png │ │ │ ├── configure_data_results_connection_3.png │ │ │ ├── configure_data_results_connection_4.png │ │ │ ├── configure_data_results_connection_5.png │ │ │ ├── filters.png │ │ │ ├── input_text_dynamic.png │ │ │ ├── input_text_static.png │ │ │ ├── select_vertical.png │ │ │ └── verticals.png │ │ ├── data_visualizer_wp_picker.png │ │ ├── data_visualizer_wp_placeholder.png │ │ ├── layouts │ │ │ ├── available_layouts.png │ │ │ ├── card_allow_html.png │ │ │ ├── card_preview.png │ │ │ ├── cards_layout.png │ │ │ ├── common_options.png │ │ │ ├── custom_edit.png │ │ │ ├── custom_external_file.png │ │ │ ├── custom_layout.png │ │ │ ├── debug_layout.png │ │ │ ├── details_list_fields.png │ │ │ ├── details_list_hb_expr.png │ │ │ ├── details_list_hb_expr2.png │ │ │ ├── details_list_layout.png │ │ │ ├── hide_webpart.png │ │ │ ├── manage_cards_fields.png │ │ │ ├── manage_people_fields.png │ │ │ ├── people_layout.png │ │ │ ├── persona_card_hover.png │ │ │ ├── result_types.png │ │ │ ├── result_types_btn.png │ │ │ ├── result_types_result.png │ │ │ ├── result_types_template.png │ │ │ ├── see_all_link.png │ │ │ ├── simple_list_layout.png │ │ │ ├── simple_list_thumbnail.png │ │ │ ├── slider_layout.png │ │ │ └── teams │ │ │ │ ├── odata_header_set.png │ │ │ │ ├── teams_layout.png │ │ │ │ ├── teams_layout_slots.png │ │ │ │ └── teams_layout_tags.png │ │ ├── localization_crawled_property.png │ │ ├── multigeo_property.png │ │ ├── odata │ │ │ ├── default_url.png │ │ │ ├── odata_http_api_type.png │ │ │ ├── paging_options.png │ │ │ └── static_paging.png │ │ └── page1 │ │ │ ├── available_datasources.png │ │ │ ├── custom_slot.png │ │ │ ├── data_source_slots.png │ │ │ ├── slot_concept.png │ │ │ ├── static_data_intro.png │ │ │ └── static_data_modify.png │ │ ├── group_metadata │ │ ├── group_metadata_editor_teams.png │ │ ├── group_metadata_editor_wp.png │ │ ├── not_365_group_message.png │ │ ├── teams_tab_add_app.png │ │ ├── teams_tab_app_desc.png │ │ ├── teams_tab_configure.png │ │ ├── teams_tab_more_apps.png │ │ ├── teams_tab_save.png │ │ ├── teams_tab_settings.png │ │ ├── teams_tab_setup_as_tab.png │ │ └── webpart_sharepoint.png │ │ └── search_box │ │ ├── dynamic_data_source.png │ │ ├── search_box_settings.png │ │ ├── search_box_suggestions.png │ │ ├── search_box_wp_default.png │ │ ├── search_box_wp_picker.png │ │ ├── suggestions_demo.png │ │ └── suggestions_providers_panel.png ├── extensibility │ ├── custom_data_source.md │ ├── custom_layout.md │ ├── custom_suggestions_provider.md │ ├── custom_web_component.md │ ├── handlebars_customizations.md │ ├── index.md │ ├── templating.md │ └── web_components_list.md ├── features.md ├── get_license.md ├── getting_started │ ├── connections_chart.md │ ├── sample_scenarios.md │ └── tutorials │ │ ├── assets │ │ ├── tag_filter_bar.gif │ │ └── tags_bar_template.html │ │ ├── build_complete_search_center.md │ │ ├── build_people_directory_graph.md │ │ ├── build_people_directory_sharepoint_search.md │ │ ├── build_tag_picker_item_selection.md │ │ ├── build_teams_search_portal_using_taxonomy.md │ │ ├── index.md │ │ └── static_taxonomy_filters_sharepoint_search.md ├── index.md ├── installation.md ├── setup_standalone.md ├── upgrade_from_pnp.md └── usage │ ├── data-filters │ ├── index.md │ └── layouts │ │ ├── custom.md │ │ ├── debug.md │ │ ├── horizontal.md │ │ ├── index.md │ │ ├── panel.md │ │ └── vertical.md │ ├── data-verticals │ └── index.md │ ├── data-visualizer │ ├── adaptive_exressions.md │ ├── common │ │ ├── caching.md │ │ ├── common.md │ │ └── paging.md │ ├── connections │ │ ├── index.md │ │ └── item-selection.md │ ├── data-sources │ │ ├── index.md │ │ ├── microsoft-search.md │ │ ├── odata.md │ │ ├── sharepoint-caml.md │ │ ├── sharepoint-search.md │ │ └── static-data.md │ ├── index.md │ ├── layouts │ │ ├── cards.md │ │ ├── custom.md │ │ ├── debug.md │ │ ├── details-list.md │ │ ├── index.md │ │ ├── people.md │ │ ├── simple-list.md │ │ ├── slider.md │ │ ├── teams.md │ │ └── templating.md │ ├── slots.md │ └── tokens.md │ ├── group-metadata-editor │ └── index.md │ └── search-box │ └── index.md ├── extensibility-library-demo ├── .gitignore ├── .nvmrc ├── .vscode │ ├── extensions.json │ ├── launch.json │ └── settings.json ├── .yo-rc.json ├── README.md ├── config │ ├── config.json │ ├── copy-assets.json │ ├── deploy-azure-storage.json │ ├── package-solution.json │ ├── serve.json │ └── write-manifests.json ├── gulpfile.js ├── package-lock.json ├── package.json ├── pnpm-lock.yaml ├── src │ ├── index.ts │ └── libraries │ │ ├── CustomComponent.tsx │ │ ├── CustomDataSource.ts │ │ ├── CustomLayoutAdaptiveCards.ts │ │ ├── CustomLayoutHandlebars.ts │ │ ├── CustomSuggestionProvider.ts │ │ ├── custom-layout.html │ │ ├── custom-layout.json │ │ └── myCompanyLibrary │ │ ├── MyCompanyLibraryLibrary.manifest.json │ │ ├── MyCompanyLibraryLibrary.ts │ │ └── loc │ │ ├── en-us.js │ │ └── mystrings.d.ts ├── tsconfig.json └── tslint.json └── mkdocs.yml /.github/ISSUE_TEMPLATE/bug-or-issue-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug or issue report 3 | about: Something isn't working. 4 | title: "[BUG] Your explicit issue title here" 5 | labels: bug 6 | assignees: Laul0 7 | 8 | --- 9 | 10 | **Version used** 11 | Ex: 1.0.0 12 | 13 | **Describe the bug** 14 | A clear and concise description of what the bug is. Keep questions and bugs related to the web parts. If the issue relates to KQL or question around crawled and managed properties please use [Microsoft TechCommunity](https://techcommunity.microsoft.com/t5/sharepoint-developer/bd-p/SharePointDev). Which means, if you experience the same behavior in classic web parts, then it's not an issue with this solution. 15 | 16 | **To Reproduce** 17 | Steps to reproduce the behavior: 18 | 1. Go to '...' 19 | 2. Click on '....' 20 | 3. Scroll down to '....' 21 | 4. See error 22 | 23 | **Expected behavior** 24 | A clear and concise description of what you expected to happen. 25 | 26 | **Screenshots** 27 | 28 | To help us to resolve your issue, you can include screenshots or error messages coming from: 29 | 30 | - The faulty Web Part itself. 31 | - Errors displayed in the browser console (typically pressing F12). 32 | - Errors displayed in the SharePoint console (pressing CTRL+F12) 33 | 34 | **Desktop (please complete the following information):** 35 | - Browser [e.g. chrome, safari] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/documentation.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Documentation 3 | about: Improvements or additions to documentation. 4 | title: "[DOC] Documentation " 5 | labels: documentation 6 | assignees: Laul0 7 | 8 | --- 9 | 10 | **Target page** 11 | 12 | Please point out the page(s) URL that sould be improved. 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Question 3 | about: Question about Web Parts usage or configuration. 4 | title: "[QUESTION] Your question here" 5 | labels: question 6 | assignees: Laul0 7 | 8 | --- 9 | 10 | **Version used** 11 | Ex: 1.0.0 12 | 13 | **Question** 14 | A clear and concise question about the solution. 15 | 16 | **Additional context** 17 | Add any other context about the problem here. 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Site output 2 | site -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 |

3 | 4 | # aequos Modern Data Visualizer solution 5 | 6 | The 'Data Visualizer' solution is a set of SharePoint Online modern Web Parts allowing SharePoint super users, webmasters and developers to create highly flexible and personalized data viewing and filtering experiences in minutes! 7 | 8 | It is the enhanced product version of the well known ["Pattern & Practices Modern Search"](https://github.com/microsoft-search/pnp-modern-search) open-source solution that we also created. 9 | 10 | Refer to out website to see [differences](https://www.aequos.ca/features) between the two solutions. 11 | 12 | To get a valid license, refer to the official [website](https://www.aequos.ca){:target="_blank"}. 13 | 14 | > Don't be wrong: **we still continue to invest time and support for the open-source**. If it suits your current requirement, feel free to go with it.We will never push someone to purchase the licensed solution. It is up to you. 15 | 16 | ## In this repository 17 | 18 | This repository hosts the official documentation for the solution + the public released packages you can download for your Office 365 tenant. It also contains any demo projects or samples we publically share (ex: the extensibility library demo project). 19 | 20 | ### Solution packages to download 21 | 22 | - [Releases](https://github.com/aequos-solutions/modern-data-visualizer/releases) 23 | 24 | > **Beta** packages are not supported. However, you can still test them in preview to see upcoming features. 25 | 26 | ### Solution documentation 27 | 28 | - [Documentation](https://aequos-solutions.github.io/modern-data-visualizer/) 29 | 30 | ### Demo projects 31 | 32 | - [Sample starter project to create an extensibility library](./extensibility-library-demo). 33 | 34 | ### Sample templates 35 | 36 | - Coming soon.. 37 | 38 | 39 | -------------------------------------------------------------------------------- /docs/assets/aequos_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/aequos_logo.png -------------------------------------------------------------------------------- /docs/assets/aequos_logo_noir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/aequos_logo_noir.png -------------------------------------------------------------------------------- /docs/assets/app_catalog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/app_catalog.png -------------------------------------------------------------------------------- /docs/assets/cards_layout_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/cards_layout_options.png -------------------------------------------------------------------------------- /docs/assets/connections_flow.drawio: -------------------------------------------------------------------------------- 1 | zZjLcpswFIafhqUzCAF2lr4k6aaddjzTNksFZNBERq6Qbdyn7wEkczMxTeI43hj9uh995+hi4fk6e5BkE38VIeWWY4eZhReW4yA08eAvVw6l4hshkizUhSphyf5SLdpa3bKQpo2CSgiu2KYpBiJJaKAaGpFS7JvFVoI3e92QiHaEZUB4V/3FQhWX6sSzK/0LZVFseka2zlkTU1gLaUxCsa9J+M7CcymEKr/W2Zzy3HjGLmW9+57c48AkTdSQCmDfpZjuMv/HZPMwC8QoDL6NdCs7wrd6wguiCCg/WbolHJZD6tGrgzGJFNskpHmrtoVn+5gputyQIM/dAwSgxWrNIYXgU7dPpaJZ78DR0RzAERVrquQBiugK2BhbI+QYE++rBUHGynFtMXytEc1AdGy6MhN8aEv9h9WcjtWWlMggBm0msk9nMPfa9sJ9lN0zrqhMr26xMfpsiLm9jgnzZBCfrm80/7PZzOvYzHJ8Dr3OVgKmVDeW/2crTMYoLXadKRRAziarMuEryv8faFHZuPhT7uK6F90+DLfsoqzQWRqahNN8M4JUwEmasqC5GmBxefidr9yNZ5KP9bxFppe1TB1MKmOqVg1Sj7WcqlKeMHXKwdGws++11h0mILYyoOd3D0VkRNW5eNnlqAaKd4ITo0nKiWK75nBPwaN7+C5YsdomGuImp2jS4q+cpq5V30DbDU1aDeFWQ6UdOg0VLB+n/Xq8/QvjzeH8BOGjjAp5iHk3ug2ldUaPxJ6m9OgRqO4PNffo8Ygr0O1ek27kNqHEbSiH0o1uW+G87SYXpnt8IbqXQGc+ix1hnDxBC3AJMKeO9w7eTVSdc6wav0ANv3BedowrAI6vCbjbAtz1Xgm42wLctT8W8MkJwF9LWisojoeS1ozA4w8jDQ8krefA+TGkefgMIENJ81oHBdxG9sKk3XZI00Gwtsevem5ecB1QTegkhRBbRM4Si00+7GIi3szyFqAQzqIkZxa4oBIEc4CY6ow1C8O8/gwiMOUzEjxHxWVlLriQRb94VfxeupjoFx49Euv4rlLnsd/xem8xI/sGTfzx2wgyRcRqldKLrKm5oL4lfAx16E9zlmnfFIc6oH+mnQv7H+q+qs1LeJlIQA+ZNN9nvS9VUjxT4yiJSHI3AuflLWm4D556GGg+HfS64PC3AeT1hMBzjwOO3U9Nz+MAJKtX1HINq7dofPcP -------------------------------------------------------------------------------- /docs/assets/connections_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/connections_flow.png -------------------------------------------------------------------------------- /docs/assets/custom_datasource.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/custom_datasource.png -------------------------------------------------------------------------------- /docs/assets/extensibility/aequos_extensibility_npm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/aequos_extensibility_npm.png -------------------------------------------------------------------------------- /docs/assets/extensibility/data_source/custom_data_source.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/data_source/custom_data_source.png -------------------------------------------------------------------------------- /docs/assets/extensibility/data_source/data_source_properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/data_source/data_source_properties.png -------------------------------------------------------------------------------- /docs/assets/extensibility/data_source/property_bag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/data_source/property_bag.png -------------------------------------------------------------------------------- /docs/assets/extensibility/data_source/service_keys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/data_source/service_keys.png -------------------------------------------------------------------------------- /docs/assets/extensibility/extensibility_configuration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/extensibility_configuration.png -------------------------------------------------------------------------------- /docs/assets/extensibility/extensibility_configuration_manifest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/extensibility_configuration_manifest.png -------------------------------------------------------------------------------- /docs/assets/extensibility/implement_interface.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/implement_interface.png -------------------------------------------------------------------------------- /docs/assets/extensibility/layout/custom_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/layout/custom_layout.png -------------------------------------------------------------------------------- /docs/assets/extensibility/layout/layout_properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/layout/layout_properties.png -------------------------------------------------------------------------------- /docs/assets/extensibility/library_manifest_id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/library_manifest_id.png -------------------------------------------------------------------------------- /docs/assets/extensibility/web_components/collapsible_component.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/web_components/collapsible_component.png -------------------------------------------------------------------------------- /docs/assets/extensibility/web_components/custom_web_component.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/web_components/custom_web_component.png -------------------------------------------------------------------------------- /docs/assets/extensibility/web_components/debug_types.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/web_components/debug_types.png -------------------------------------------------------------------------------- /docs/assets/extensibility/web_components/document_card_component.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/web_components/document_card_component.png -------------------------------------------------------------------------------- /docs/assets/extensibility/web_components/fileicon_component.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/web_components/fileicon_component.png -------------------------------------------------------------------------------- /docs/assets/extensibility/web_components/filepreview_component.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/web_components/filepreview_component.png -------------------------------------------------------------------------------- /docs/assets/extensibility/web_components/icon_component.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/web_components/icon_component.png -------------------------------------------------------------------------------- /docs/assets/extensibility/web_components/panel_component.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/web_components/panel_component.png -------------------------------------------------------------------------------- /docs/assets/extensibility/web_components/persona_component.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/extensibility/web_components/persona_component.png -------------------------------------------------------------------------------- /docs/assets/extra.css: -------------------------------------------------------------------------------- 1 | .center { 2 | display: block; 3 | margin-left: auto; 4 | margin-right: auto; 5 | } 6 | 7 | .logo { 8 | width: 200px; 9 | } 10 | 11 | .md-header { 12 | background-color: #225688; 13 | } 14 | 15 | .md-tabs { 16 | background-color: #FBB901; 17 | } 18 | 19 | .md-tabs__link { 20 | opacity: 1; 21 | color: #225688; 22 | } -------------------------------------------------------------------------------- /docs/assets/get_tenant_id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/get_tenant_id.png -------------------------------------------------------------------------------- /docs/assets/get_tenant_id2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/get_tenant_id2.png -------------------------------------------------------------------------------- /docs/assets/howto/sp_rest_taxonomy_filters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/howto/sp_rest_taxonomy_filters.png -------------------------------------------------------------------------------- /docs/assets/license_mail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/license_mail.png -------------------------------------------------------------------------------- /docs/assets/licenses.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/licenses.png -------------------------------------------------------------------------------- /docs/assets/scenarios/graph-people-directory1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/graph-people-directory1.png -------------------------------------------------------------------------------- /docs/assets/scenarios/graph-people-directory10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/graph-people-directory10.png -------------------------------------------------------------------------------- /docs/assets/scenarios/graph-people-directory11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/graph-people-directory11.png -------------------------------------------------------------------------------- /docs/assets/scenarios/graph-people-directory2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/graph-people-directory2.png -------------------------------------------------------------------------------- /docs/assets/scenarios/graph-people-directory3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/graph-people-directory3.png -------------------------------------------------------------------------------- /docs/assets/scenarios/graph-people-directory4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/graph-people-directory4.png -------------------------------------------------------------------------------- /docs/assets/scenarios/graph-people-directory5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/graph-people-directory5.png -------------------------------------------------------------------------------- /docs/assets/scenarios/graph-people-directory6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/graph-people-directory6.png -------------------------------------------------------------------------------- /docs/assets/scenarios/graph-people-directory7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/graph-people-directory7.png -------------------------------------------------------------------------------- /docs/assets/scenarios/graph-people-directory8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/graph-people-directory8.png -------------------------------------------------------------------------------- /docs/assets/scenarios/graph-people-directory_final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/graph-people-directory_final.png -------------------------------------------------------------------------------- /docs/assets/scenarios/people_directory1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/people_directory1.png -------------------------------------------------------------------------------- /docs/assets/scenarios/people_directory2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/people_directory2.png -------------------------------------------------------------------------------- /docs/assets/scenarios/people_directory3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/people_directory3.png -------------------------------------------------------------------------------- /docs/assets/scenarios/people_directory4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/people_directory4.png -------------------------------------------------------------------------------- /docs/assets/scenarios/people_directory5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/people_directory5.png -------------------------------------------------------------------------------- /docs/assets/scenarios/people_directory6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/people_directory6.png -------------------------------------------------------------------------------- /docs/assets/scenarios/people_directory7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/people_directory7.png -------------------------------------------------------------------------------- /docs/assets/scenarios/people_directory8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/people_directory8.png -------------------------------------------------------------------------------- /docs/assets/scenarios/people_directory9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/people_directory9.png -------------------------------------------------------------------------------- /docs/assets/scenarios/search_center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/search_center.png -------------------------------------------------------------------------------- /docs/assets/scenarios/tags/allow_item_selection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/tags/allow_item_selection.png -------------------------------------------------------------------------------- /docs/assets/scenarios/tags/configure_connection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/tags/configure_connection.png -------------------------------------------------------------------------------- /docs/assets/scenarios/tags/filter_title_slot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/tags/filter_title_slot.png -------------------------------------------------------------------------------- /docs/assets/scenarios/tags/final_result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/tags/final_result.png -------------------------------------------------------------------------------- /docs/assets/scenarios/tags/graph_url.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/tags/graph_url.png -------------------------------------------------------------------------------- /docs/assets/scenarios/tags/managed_metadata_term_set.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/tags/managed_metadata_term_set.png -------------------------------------------------------------------------------- /docs/assets/scenarios/tags/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/tags/news.png -------------------------------------------------------------------------------- /docs/assets/scenarios/tags/query_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/tags/query_template.png -------------------------------------------------------------------------------- /docs/assets/scenarios/tags/search_managed_property.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/tags/search_managed_property.png -------------------------------------------------------------------------------- /docs/assets/scenarios/tags/site_pages_news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/tags/site_pages_news.png -------------------------------------------------------------------------------- /docs/assets/scenarios/tags/slots_configuration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/tags/slots_configuration.png -------------------------------------------------------------------------------- /docs/assets/scenarios/tags/tag_filter_bar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/tags/tag_filter_bar.gif -------------------------------------------------------------------------------- /docs/assets/scenarios/tags/tags_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/tags/tags_bar.png -------------------------------------------------------------------------------- /docs/assets/scenarios/tags/term_set_id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/tags/term_set_id.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/AzureAD_App_ID.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/AzureAD_App_ID.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/AzureAD_App_Register.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/AzureAD_App_Register.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/add_filters_wp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/add_filters_wp.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/app_studio_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/app_studio_app.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/app_studio_app_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/app_studio_app_details.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/app_studio_app_distribute.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/app_studio_app_distribute.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/app_studio_create_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/app_studio_create_app.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/app_studio_personal_tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/app_studio_personal_tab.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/app_studio_personal_tab_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/app_studio_personal_tab_details.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/data_visualizer_connections_config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/data_visualizer_connections_config.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/data_visualizer_source_config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/data_visualizer_source_config.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/filters_connection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/filters_connection.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/filters_wp_configuration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/filters_wp_configuration.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/filters_wp_taxonomy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/filters_wp_taxonomy.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/filters_wp_taxonomy2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/filters_wp_taxonomy2.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/graph_explorer_get_teams.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/graph_explorer_get_teams.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/graph_explorer_payload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/graph_explorer_payload.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/graph_explorer_permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/graph_explorer_permissions.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/graph_explorer_response.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/graph_explorer_response.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/graph_explorer_tag_team.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/graph_explorer_tag_team.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/page_vertical_section.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/page_vertical_section.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/search_box_wp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/search_box_wp.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/team_layout_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/team_layout_options.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/team_layout_options_select_fields.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/team_layout_options_select_fields.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/teams-search_overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/teams-search_overview.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/teams_default_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/teams_default_search.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/teams_search_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/teams_search_app.png -------------------------------------------------------------------------------- /docs/assets/scenarios/teams/teams_term_store.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/scenarios/teams/teams_term_store.png -------------------------------------------------------------------------------- /docs/assets/standalone_product.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/standalone_product.png -------------------------------------------------------------------------------- /docs/assets/subscription_product.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/subscription_product.png -------------------------------------------------------------------------------- /docs/assets/sync-to-teams.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/sync-to-teams.png -------------------------------------------------------------------------------- /docs/assets/teams-apps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/teams-apps.png -------------------------------------------------------------------------------- /docs/assets/theme_debug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/theme_debug.png -------------------------------------------------------------------------------- /docs/assets/theme_field.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/theme_field.png -------------------------------------------------------------------------------- /docs/assets/trial_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/trial_error.png -------------------------------------------------------------------------------- /docs/assets/trial_license.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/trial_license.png -------------------------------------------------------------------------------- /docs/assets/upgrade_mdv_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/upgrade_mdv_add.png -------------------------------------------------------------------------------- /docs/assets/upgrade_pnp_remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/upgrade_pnp_remove.png -------------------------------------------------------------------------------- /docs/assets/webparts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/checkbox_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/checkbox_template.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/combo_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/combo_template.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/data_filters_filter_values_operator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/data_filters_filter_values_operator.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/data_filters_wp_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/data_filters_wp_default.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/data_filters_wp_picker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/data_filters_wp_picker.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/data_filters_wp_vertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/data_filters_wp_vertical.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/dateinterval_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/dateinterval_template.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/daterange_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/daterange_template.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/filter_deep_linking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/filter_deep_linking.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/filter_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/filter_settings.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/filter_settings_panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/filter_settings_panel.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/filter_type.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/filter_type.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/layouts/available_layouts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/layouts/available_layouts.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/layouts/custom_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/layouts/custom_edit.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/layouts/custom_external_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/layouts/custom_external_file.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/layouts/custom_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/layouts/custom_layout.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/layouts/debug_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/layouts/debug_layout.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/layouts/horizontal_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/layouts/horizontal_layout.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/layouts/horizontal_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/layouts/horizontal_options.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/layouts/panel_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/layouts/panel_layout.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/layouts/panel_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/layouts/panel_options.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/layouts/vertical_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/layouts/vertical_layout.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/operator_filters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/operator_filters.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/taxonomy_picker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/taxonomy_picker.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/taxonomy_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/taxonomy_template.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/templates/taxonomy_picker_configuration1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/templates/taxonomy_picker_configuration1.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/templates/taxonomy_picker_configuration2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/templates/taxonomy_picker_configuration2.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/templates/taxonomy_picker_configuration21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/templates/taxonomy_picker_configuration21.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/templates/taxonomy_picker_configuration4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/templates/taxonomy_picker_configuration4.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/templates/taxonomy_picker_overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/templates/taxonomy_picker_overview.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/templates/taxonomy_picker_paging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/templates/taxonomy_picker_paging.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/templates/taxonomy_picker_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/templates/taxonomy_picker_search.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/templates/taxonomy_picker_selection_behavior.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/templates/taxonomy_picker_selection_behavior.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_filters/wp_connection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_filters/wp_connection.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_verticals/configure_verticals.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_verticals/configure_verticals.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_verticals/data_verticals_wp_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_verticals/data_verticals_wp_default.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_verticals/data_verticals_wp_picker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_verticals/data_verticals_wp_picker.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/about_page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/about_page.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/caml/filter_advancedmode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/caml/filter_advancedmode.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/caml/filter_builder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/caml/filter_builder.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/caml/source_configuration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/caml/source_configuration.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/common/caching_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/common/caching_options.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/connections/allow_item_selection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/connections/allow_item_selection.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/connections/available_connections.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/connections/available_connections.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/connections/configure_data_results_connection_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/connections/configure_data_results_connection_1.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/connections/configure_data_results_connection_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/connections/configure_data_results_connection_2.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/connections/configure_data_results_connection_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/connections/configure_data_results_connection_3.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/connections/configure_data_results_connection_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/connections/configure_data_results_connection_4.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/connections/configure_data_results_connection_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/connections/configure_data_results_connection_5.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/connections/filters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/connections/filters.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/connections/input_text_dynamic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/connections/input_text_dynamic.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/connections/input_text_static.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/connections/input_text_static.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/connections/select_vertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/connections/select_vertical.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/connections/verticals.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/connections/verticals.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/data_visualizer_wp_picker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/data_visualizer_wp_picker.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/data_visualizer_wp_placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/data_visualizer_wp_placeholder.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/available_layouts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/available_layouts.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/card_allow_html.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/card_allow_html.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/card_preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/card_preview.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/cards_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/cards_layout.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/common_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/common_options.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/custom_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/custom_edit.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/custom_external_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/custom_external_file.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/custom_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/custom_layout.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/debug_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/debug_layout.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/details_list_fields.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/details_list_fields.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/details_list_hb_expr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/details_list_hb_expr.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/details_list_hb_expr2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/details_list_hb_expr2.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/details_list_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/details_list_layout.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/hide_webpart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/hide_webpart.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/manage_cards_fields.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/manage_cards_fields.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/manage_people_fields.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/manage_people_fields.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/people_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/people_layout.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/persona_card_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/persona_card_hover.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/result_types.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/result_types.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/result_types_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/result_types_btn.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/result_types_result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/result_types_result.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/result_types_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/result_types_template.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/see_all_link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/see_all_link.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/simple_list_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/simple_list_layout.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/simple_list_thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/simple_list_thumbnail.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/slider_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/slider_layout.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/teams/odata_header_set.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/teams/odata_header_set.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/teams/teams_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/teams/teams_layout.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/teams/teams_layout_slots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/teams/teams_layout_slots.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/layouts/teams/teams_layout_tags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/layouts/teams/teams_layout_tags.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/localization_crawled_property.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/localization_crawled_property.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/multigeo_property.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/multigeo_property.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/odata/default_url.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/odata/default_url.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/odata/odata_http_api_type.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/odata/odata_http_api_type.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/odata/paging_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/odata/paging_options.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/odata/static_paging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/odata/static_paging.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/page1/available_datasources.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/page1/available_datasources.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/page1/custom_slot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/page1/custom_slot.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/page1/data_source_slots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/page1/data_source_slots.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/page1/slot_concept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/page1/slot_concept.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/page1/static_data_intro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/page1/static_data_intro.png -------------------------------------------------------------------------------- /docs/assets/webparts/data_visualizer/page1/static_data_modify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/data_visualizer/page1/static_data_modify.png -------------------------------------------------------------------------------- /docs/assets/webparts/group_metadata/group_metadata_editor_teams.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/group_metadata/group_metadata_editor_teams.png -------------------------------------------------------------------------------- /docs/assets/webparts/group_metadata/group_metadata_editor_wp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/group_metadata/group_metadata_editor_wp.png -------------------------------------------------------------------------------- /docs/assets/webparts/group_metadata/not_365_group_message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/group_metadata/not_365_group_message.png -------------------------------------------------------------------------------- /docs/assets/webparts/group_metadata/teams_tab_add_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/group_metadata/teams_tab_add_app.png -------------------------------------------------------------------------------- /docs/assets/webparts/group_metadata/teams_tab_app_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/group_metadata/teams_tab_app_desc.png -------------------------------------------------------------------------------- /docs/assets/webparts/group_metadata/teams_tab_configure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/group_metadata/teams_tab_configure.png -------------------------------------------------------------------------------- /docs/assets/webparts/group_metadata/teams_tab_more_apps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/group_metadata/teams_tab_more_apps.png -------------------------------------------------------------------------------- /docs/assets/webparts/group_metadata/teams_tab_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/group_metadata/teams_tab_save.png -------------------------------------------------------------------------------- /docs/assets/webparts/group_metadata/teams_tab_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/group_metadata/teams_tab_settings.png -------------------------------------------------------------------------------- /docs/assets/webparts/group_metadata/teams_tab_setup_as_tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/group_metadata/teams_tab_setup_as_tab.png -------------------------------------------------------------------------------- /docs/assets/webparts/group_metadata/webpart_sharepoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/group_metadata/webpart_sharepoint.png -------------------------------------------------------------------------------- /docs/assets/webparts/search_box/dynamic_data_source.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/search_box/dynamic_data_source.png -------------------------------------------------------------------------------- /docs/assets/webparts/search_box/search_box_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/search_box/search_box_settings.png -------------------------------------------------------------------------------- /docs/assets/webparts/search_box/search_box_suggestions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/search_box/search_box_suggestions.png -------------------------------------------------------------------------------- /docs/assets/webparts/search_box/search_box_wp_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/search_box/search_box_wp_default.png -------------------------------------------------------------------------------- /docs/assets/webparts/search_box/search_box_wp_picker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/search_box/search_box_wp_picker.png -------------------------------------------------------------------------------- /docs/assets/webparts/search_box/suggestions_demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/search_box/suggestions_demo.png -------------------------------------------------------------------------------- /docs/assets/webparts/search_box/suggestions_providers_panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/assets/webparts/search_box/suggestions_providers_panel.png -------------------------------------------------------------------------------- /docs/extensibility/custom_suggestions_provider.md: -------------------------------------------------------------------------------- 1 | # Create a custom suggestions providers 2 | 3 | Custom suggestions providers can be added to a search box Web Part to get normalized keywords during search. 4 | 5 | !["Custom web component"](../assets/webparts/search_box/suggestions_demo.png){: .center} 6 | 7 | A suggestions provider supports: 8 | 9 | - **Zero term suggestions**: suggestions displayed when the search box get the initial focus and no term is provided. 10 | - **Suggestions based on a keywords**: suggestions matching specific keywords provided in the search box. 11 | 12 | ## Custom suggestions provider creation process 13 | 14 | Suggestions provider creation process comes in two distinct steps: 15 | 16 | 1. [Create the provider logic](#create-the-component-logic-and-sub-components). 17 | 2. [Register the provider information for discovery](#register-component-information). 18 | 19 | ### Create the provider logic 20 | 21 | * In your extensibility library project, create a new `MyProvider.ts` TypeScript file. 22 | * Create an interface for your provider properties, typically the ones you want to persist in the Web Part property bag. Providers properties are isolated from the other general Web Part properties under the property `providerProperties` in the property bag object. 23 | ```typescript 24 | export interface ICustomSuggestionProviderProperties { 25 | myProperty: string; 26 | } 27 | ``` 28 | 29 | * Implement the `BaseSuggestionProvider` abstract class using your properties interface: 30 | ```typescript 31 | export class CustomSuggestionProvider extends BaseSuggestionProvider { 32 | ... 33 | } 34 | ``` 35 | 36 | * Implement your provider logic according to the available methods and properties. 37 | 38 | #### BaseSuggestionProvider - Methods 39 | 40 | | Method | Description | 41 | | --------- | ---------- | 42 | | `onInit()`| The initialization method of your provider (ex: initialize your properties, etc.). You can perform asynchronous calls here. This method will be called when the provider is instanciated by the main Web Part. This is a good place to fetch any zero term suggestions if any. 43 | | `getSuggestions()` | Method called to retrieve suggestions when a keyword is entered (in paramter). 44 | | `getZeroTermSuggestions()` | Method called to retrieve the zero term suggestions (i.e. when the search box gets initial focus). 45 | | `getPropertyPaneGroupsConfiguration()` | Returns the property pane fields to display when your provider is selected. These are regular SPFx property fields and groups. PRovider properties are isolated from the other general Web Part properties under the property `providerProperties`. It means you must include that path in your property pane controls get the value persisted. Defining fields or groups is not mandatory for a provider. If you don't want to expose any option, just return an empty array. 46 | | `onPropertyUpdate()` | The method will be called when a property pane value is updated. The main Web Part in `Reactive` mode for property pane fields. 47 | 48 | #### BaseSuggestionProvider - Properties 49 | 50 | | Property | Description | 51 | | --------- | ---------- | 52 | | `properties` | The Web Part properties in the property bag. Corresponds to the isolated `providerProperties` property in the global property bag. You won't be able to access any other general properties of the Web Part. 53 | | `isZeroTermSuggestionsEnabled` | Flag indicating if the provider supports zero term suggestions or not. 54 | 55 | ### Register provider information 56 | 57 | The next step is to fill information about your new suggestions provider. In the library main entry point (i.e. the class implementing the `IExtensibilityLibrary` in interface) return a new `ISuggestionProviderDefinition` object in the `getCustomSuggestionProviders()` method using these properties: 58 | 59 | | Property | Description | 60 | | --------- | ---------- | 61 | | `name` | The friendly name of your provider that will show up in the configuration panel. 62 | | `key` | An unique internal key for your data source. 63 | | `description` | A meaningful description of your provider. 64 | | `serviceKey` | A service key used to instanciate your provider class. Builtin or custom providers are instanciated dynamically using [SPFx service scopes](https://docs.microsoft.com/en-us/javascript/api/sp-core-library/servicescope?view=sp-typescript-latest). 65 | 66 | ```typescript 67 | public getCustomSuggestionProviders(): ISuggestionProviderDefinition[] { 68 | return [ 69 | { 70 | name: 'Custom Suggestions Provider', 71 | key: 'CustomSuggestionsProvider', 72 | description: 'A demo custom suggestions provider from the extensibility library', 73 | serviceKey: ServiceKey.create('MyCompany:CustomSuggestionsProvider', CustomSuggestionProvider) 74 | } 75 | ]; 76 | } 77 | ``` 78 | -------------------------------------------------------------------------------- /docs/extensibility/handlebars_customizations.md: -------------------------------------------------------------------------------- 1 | # Register Handlebars customizations 2 | 3 | By default, builtin helpers and open-source [Handlebars helpers](https://github.com/helpers/handlebars-helpers) are available. If these don't fit your requirements, you can still create your own custom [helper](https://handlebarsjs.com/api-reference/helpers.html) or [partial](https://handlebarsjs.com/api-reference/runtime.html#handlebars-registerpartial-name-partial) that you can use in your HTML templates or layout fields (ex: 'Cards' or 'Details List' layouts). 4 | 5 | > To avoid any conflict, each Web Part instance gets its own Handlebars isolated namespace (i.e. using `Handlebars.create()`) meaning registering customizations in the global Handlebars namespace **won't work** (ex: using `Handlebars.registerHelper()` directly). 6 | 7 | To register a new Handlebars customization for the targeted Web Part (i.e. the Web Part instances where the extensibility library is registered and enabled): 8 | 9 | 1. In the library main entry point (i.e. the class implementing the `IExtensibilityLibrary` in interface), register your customization using the `registerHandlebarsCustomizations()` method. The `namespace` parameter corresponds to the targeted Web Part Handlebars isolated namespace 10 | 2. From here, use the Handlebars API to add your customizations to this specific namespace. They will be availabe in templates for registered Web Part instances: 11 | ```typescript 12 | public registerHandlebarsCustomizations(namespace: typeof Handlebars) { 13 | 14 | // Register custom Handlebars helpers 15 | // Usage {{myHelper 'value'}} 16 | namespace.registerHelper('myHelper', (value: string) => { 17 | return new namespace.SafeString(value.toUpperCase()); 18 | }); 19 | } 20 | ``` -------------------------------------------------------------------------------- /docs/get_license.md: -------------------------------------------------------------------------------- 1 | ## Licence types 2 | 3 | You need a valid license to use the _"Modern Data Visualizer"_ Web Parts. We offer two kinds of license: [www.aequos.ca](https://www.aequos.ca/#comp-kmng61o4){:target="_blank"} 4 | 5 | Except their duration, our license offer the same specifications: 6 | 7 | - All Web Parts included (Data Visualizer, Data Filters, Data Verticals, Search Box and Group Metadata Editor). 8 | - Unlimited users. The size of your organisation doesn't matter. 9 | - Free upgrades from our GitHub repository. However, no automatic upgrade process, you must manually update the package like a regular SharePoint Framework package. 10 | - One license per Microsoft 365 tenant ID. If you have two tenants (ex: DEV/PRODUCTION), you must purchase two licenses. 11 | - A license is not transferable between tenants. 12 | 13 | ## Get a subscription license 14 | 15 | You can get a valid license directly from our [website](https://www.aequos.ca) or, if you prefer to receive a formal quote and pay with the registration of a PO number, contact us at [mdv@sword-group.com](mailto:mdv@sword-group.com). It will be our pleasure to answer you. 16 | 17 | In both scenarios, we will need the **Microsoft 365 Tenant ID** where you plan to use the solution. If you don't know how to get this information, you can use this online [tool](https://www.whatismytenantid.com/). 18 | 19 | !["Get license"](./assets/licenses.png){: .center} 20 | 21 | ## Get a trial version 22 | 23 | Want to try the solution capabilities first? Sure! We offer a **14 days** trial for the solution, __no personal information nor credit card required__. Just: 24 | 25 | 1. Download the latest solution package from our [GitHub repository](https://github.com/aequos-solutions/modern-data-visualizer/releases). 26 | 2. Upload and deploy it to a SharePoint site collection or tenant app catalog. 27 | 3. Add any of aequos Modern Data Visualizer Web Parts on a SharePoint page to automatically activate the trial license for your Tenant ID. 28 | 29 | !["Trial license"](./assets/trial_license.png){: .center} 30 | 31 | !!! warning 32 | - The trial license is tied to a unique tenant ID. Once expired, you can't use the solution anymore in this Tenant until you purchase a valid license. 33 | - Trial periods are not cumulative. However, if you need more time to evaluate our solution, simply contact us directly at [mdv@sword-group.com](mailto:mdv@sword-group.com). -------------------------------------------------------------------------------- /docs/getting_started/connections_chart.md: -------------------------------------------------------------------------------- 1 | ## Connection diagram between Web Parts 2 | 3 | The included Web Parts can be connected together to create a complete search center according to this schema: 4 | 5 | !["Connections diagram"](../assets/connections_flow.png){: .center} 6 | 7 | > The connection between a _Data Visualizer_ and _Data Filters_ is a **two-ways** connection. All other connection are **one-way**. -------------------------------------------------------------------------------- /docs/getting_started/sample_scenarios.md: -------------------------------------------------------------------------------- 1 | # Sample scenarios 2 | 3 | Wondering what you can do with this solution? Here are some demo videos and tutorials of common usage scenarios for the Data Visualizer solution. 4 | 5 | - [Build a complete search center](./tutorials/build_complete_search_center.md) 6 | - [Build a people directory using the Microsoft Graph data source](./tutorials/build_people_directory_graph.md) 7 | - [Build a people directory using alphabetical verticals and SharePoint Search data source](./tutorials/build_people_directory_sharepoint_search.md) 8 | - [Use static taxonomy filters with the SharePoint search data source](./tutorials/static_taxonomy_filters_sharepoint_search.md) 9 | 10 | > You can see all these videos on our [official Youtube channel](https://www.youtube.com/channel/UCzwqxmUUKF6dv-f0YhdiIsg/)! 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/getting_started/tutorials/assets/tag_filter_bar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aequos-solutions/modern-data-visualizer/0c02216208f8ca26f142531576ca5632607a3cc7/docs/getting_started/tutorials/assets/tag_filter_bar.gif -------------------------------------------------------------------------------- /docs/getting_started/tutorials/assets/tags_bar_template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 38 | 39 |
40 |
41 | {{#each data.items as |item|}} 42 |
43 | 44 |
{{slot item @root.slots.Title}}
45 |
46 | {{/each}} 47 |
48 |
49 |
50 | 51 | 52 | 53 | 76 | 77 |
78 | 79 |
80 | {{#times @root.properties.paging.itemsCountPerPage}} 81 | 82 |
83 | 84 |
85 | 86 | {{/times}} 87 |
88 |
89 | 90 |
-------------------------------------------------------------------------------- /docs/getting_started/tutorials/build_complete_search_center.md: -------------------------------------------------------------------------------- 1 | # Build a complete search center 2 | 3 | In this tutorial video, we show you how to create a complete search center in a SharePoint page using the full solution Web Parts set (Search Box, Data Filters, Data Visualizer and Data Verticals). This is a typical scenario when you want to bypass the OOTB SharePoint search page limitations and integrate with your own information architecture. 4 | 5 | !!! note "Questions, issues with this tutorial?" 6 | If you encouter issues or have questions about this tutorial don't hesitate to reach us using our official [GitHub repository](https://github.com/aequos-solutions/modern-data-visualizer/issues/new/choose). 7 | 8 | ## Video tutorial 9 | 10 | -------------------------------------------------------------------------------- /docs/getting_started/tutorials/build_people_directory_sharepoint_search.md: -------------------------------------------------------------------------------- 1 | # Build a people directory using alphabetical verticals and SharePoint Search data source 2 | 3 | This tutorial gives you basic steps to achieve a people directoy using alphabetical letters and the SharePoint search data source: 4 | 5 | !!! note "Questions, issues with this tutorial?" 6 | If you encouter issues or have questions about this tutorial don't hesitate to reach us using our official [GitHub repository](https://github.com/aequos-solutions/modern-data-visualizer/issues/new/choose). 7 | 8 | ## Video tutorial 9 | 10 | 11 | 12 | ## Step-by-step tutorial 13 | 14 | 1. Add the _'Data Verticals'_ Web Part on the page. 15 | 16 | !["Data Verticals - Add"](../../assets/scenarios/people_directory1.png){: .center} 17 | 18 | 1. For each alphabetical letter, add and configure a new vertical. As the value use ` + *`. Example `A*` for letter **'A'**. You can also add an **'All'** tab by specifying `*` as value. 19 | 20 | !["Data Verticals - Configuration"](../../assets/scenarios/people_directory2.png){: .center} 21 | 22 | 1. Add a new _'Data Visualizer'_ Web Part on the page. 23 | 24 | !["Data Visualizer - Add"](../../assets/scenarios/people_directory3.png){: .center} 25 | 26 | 1. Select the _'SharePoint Search'_ data source. 27 | 28 | !["Data Visualizer - Select Data Source"](../../assets/scenarios/people_directory4.png){: .center} 29 | 30 | 1. In the _'Connections'_ property pane configuration page, connect the _'Data Verticals'_ Web Part previously added. Select **all** the available tabs (i.e. letters). Basically it tells the Data Visualizer Web Part to be or remain visible when user clicks on any of these letters. 31 | 32 | !["Data Visualizer - Configure Verticals"](../../assets/scenarios/people_directory5.png){: .center} 33 | 34 | 1. In _'Layouts'_ property pane configuration page, select the 'People' layout. 35 | 36 | !["Data Visualizer - Select Layout"](../../assets/scenarios/people_directory6.png){: .center} 37 | 38 | > Optionally, in the layout options, you can check _'Show persona card on hover'_ option. To get it work, [an administrator needs to approve required API permissions](../../installation.md). 39 | 40 | !["Data Visualizer - Show persona card"](../../assets/scenarios/people_directory8.png){: .center} 41 | 42 | 1. In the _'Data source'_ property pane configuration page, select the _'LocalPeopleResults'_ **Result Source** and update the **Query Template** property with the `{searchTerms} FirstName:{verticals.value}` expression. 43 | 44 | !["Data Visualizer - Configure data source"](../../assets/scenarios/people_directory7.png){: .center} 45 | 46 | > This expression is given as an example. You can use the `{verticals.value}` token anywhere in the query according to your requirements. The value will be simply replaced dynamically. 47 | 48 | 1. Save your page. You can now filter people based on alphabetical letters using their first name. 49 | 50 | !["Data Visualizer - Final result"](../../assets/scenarios/people_directory9.png){: .center} 51 | 52 | > You can then add a _'Search Box'_ or _'Data Filters'_ Web Parts to complete the experience. -------------------------------------------------------------------------------- /docs/getting_started/tutorials/build_tag_picker_item_selection.md: -------------------------------------------------------------------------------- 1 | # Build taxonomy tag filters bar using Data Visualizer Web Part item selection capability 2 | 3 | This tutorial shows you how to build a tag filters bar based on SharePoint taxonomy to quickly filter your content dynamically without the need of the Data Filters Web Part. As an example and to showcase the item selection feature, we will build a news carousel filterable by managed metadata tags on an intranet home page. 4 | 5 | !["Taxonomy filter tags"](../../assets/scenarios/tags/tag_filter_bar.gif){: .center} 6 | 7 | !!! note 8 | The connection between Data Visualizer Web Parts is only available from the **1.4.0** version. 9 | 10 | ## Setup SharePoint site 11 | 12 | 1. On a SharePoint site, create some news pages and classify them with a managed metadata column (ex: _"Department"_): 13 | 14 | !["News pages"](../../assets/scenarios/tags/site_pages_news.png){: .center} 15 | 16 | !["Departments"](../../assets/scenarios/tags/managed_metadata_term_set.png){: .center} 17 | 18 | !!! note 19 | Don't forget to publish your news to get them indexed by the SharePoint search engine. 20 | 21 | 2. At site collection level, create a search managed property based on this managed metadata column (ex: _"RefinableString05"_): 22 | 23 | !["Search managed property"](../../assets/scenarios/tags/search_managed_property.png){: .center} 24 | 25 | !!! note 26 | Use the `ows_taxId_` format for the mapped search crawled property. 27 | 28 | ## Configure Web Parts 29 | 30 | 1. On a SharePoint page, add a new Data Visualizer Web Part to lookup the site news with the following configuration: 31 | 32 | - **Data source**: SharePoint Search with query template `Path:{site.absoluteUrl}/SitePages/news IsDocument:1`. This will get only the site news of the current site. 33 | 34 | !["Query template"](../../assets/scenarios/tags/query_template.png){: .center} 35 | 36 | - Enable the **Enable localization** option on the first Web Part configuration page. 37 | - In the slots configuration, for the _'Tags'_ slot, use the `Auto` prefix + your search managed property name or alias created earlier (ex: `AutoRefinableString05`). Press _'Enter'_ to validate the value. 38 | 39 | !["Slots configuration"](../../assets/scenarios/tags/slots_configuration.png){: .center} 40 | 41 | Using the default _'Cards'_ layout, you should see something like this: 42 | 43 | !["News"](../../assets/scenarios/tags/news.png){: .center} 44 | 45 | 46 | 2. On the same page, add a second Data Visualizer Web Part above the first one with the following configuration: 47 | 48 | - **Data source**: OData (Microsoft Graph) with the following URL `https://graph.microsoft.com/beta/termStore/sets//children?$top=5`. 49 | 50 | !["OData source configuration"](../../assets/scenarios/tags/graph_url.png){: .center} 51 | 52 | You must replace `` with the id of the taxonomy term set used to classify the news: 53 | 54 | !["Taxonomy Term set ID"](../../assets/scenarios/tags/term_set_id.png){: .center} 55 | 56 | !!! note 57 | To get it work, the `TermStore.Read.All` Microsoft Graph permission should be approved at tenant level. 58 | 59 | - In the slots configuration, for the _'Title'_ use the following value `labels[0:]{.languageTag === "en-US"}.name`. Press 'Enter' to validate. This will get only label for the English language as item title. 60 | 61 | !["Title slot"](../../assets/scenarios/tags/filter_title_slot.png){: .center} 62 | 63 | - **Layouts**: use the _'Custom'_ layout option with the [following filter template .html content](./assets/tags_bar_template.html) (open the webpage source code in your browser to access the content). 64 | 65 | - In the 'Common' section of the layout page configuration, allow the item selection: 66 | 67 | !["Allow item selection"](../../assets/scenarios/tags/allow_item_selection.png){: .center} 68 | 69 | You should see your taxonomy terms like this: 70 | 71 | !["Tags bar"](../../assets/scenarios/tags/tags_bar.png){: .center} 72 | 73 | 3. Go back to the first Data Visualizer Web Part displaying the news and go to the third configuration page regarding connections. Configure the connection with the other Data Visualizer like this: 74 | 75 | !["Connection configuration"](../../assets/scenarios/tags/configure_connection.png){: .center} 76 | 77 | 4. Save the page. You can now filter news dynamically based on taxonomy tags dynamically! 78 | 79 | !["Final result"](../../assets/scenarios/tags/final_result.png){: .center} 80 | 81 | 82 | !!! note 83 | If you allowed multi items selection, you must use `CTRL` + `Left click` to select multiple elements. You can also select a range of elements using `SHIFT` + `Left click`. 84 | 85 | 86 | 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /docs/getting_started/tutorials/index.md: -------------------------------------------------------------------------------- 1 | To help you to get started with the countless combinations you can have with the MDV solution, we provide you some prebuilt scenarios and how-tos. 2 | 3 | Tutorials provide complete step-by-step confgurations for common enteprise secenarios and "how-to" format focuses on specific needed configurations for a granular, particular use case 4 | 5 | :arrow_right: **From the aequos team** 6 | 7 | | Tutorial | Description | 8 | | ---------------- | ------------------| 9 | | [Build a complete search center](./build_complete_search_center.md) | Learn how to build a complete custom search center leveraging all components from MDV 10 | | [Build a people directory using alphabetical verticals, Microsoft Graph data source and adaptive expressions](./build_people_directory_graph.md) | Learn how to build a people directory for your organization usin Microsoft Graph. 11 | | [Build a people directory using alphabetical verticals and SharePoint Search data source](./build_people_directory_sharepoint_search.md) | Same as above but using SharePoint search data source. 12 | | [Build a teams search app using aequos MDV, Microsoft Graph extensions, and SharePoint taxonomy](./build_teams_search_portal_using_taxonomy.md) | Learn how to build a specific search interface for your Teams using custom metadata. 13 | | [Use taxonomy filters with SharePoint search data source](./static_taxonomy_filters_sharepoint_search.md) | Learn how to use taxonomy based filters with SharePoint search data source. 14 | | [Build taxonomy tag filters bar using Data Visualizer Web Part item selection capability](./build_tag_picker_item_selection.md) | Build a filter bar using taxonomy terms and item selection feature. 15 | 16 | :arrow_right: **From the PnP community** 17 | 18 | You can also refer to [scenarios](https://microsoft-search.github.io/pnp-modern-search/scenarios/) made by the community for the PnP Modern Search v4 solution. 19 | 20 | ## How-Tos 21 | 22 | ??? note "How to: Use the taxonomy picker with OData/SharePoint REST API data source" 23 | 24 | 1. Add a 'Data Visualizer' Web Part on the page amd select the **'OData'** data source and then _SharePoint REST API_ 25 | 26 | 2. In the **Url** field, use the following query : 27 | 28 | ``` 29 | https:///_api/web/Lists/GetByTitle('')/Items?&$select=*${if(empty('{filters}'),'',concat("&$filter=", buildOdataFilterCondition(json('{filters}'))))} 30 | ``` 31 | 32 | 3. Add a 'Data Filters' Web Part on the page an configure the filters like this using the `TaxCatchAll/IdforTerm`: 33 | 34 | !["Default URL for OData data source"](../../assets/howto/sp_rest_taxonomy_filters.png){: .center} -------------------------------------------------------------------------------- /docs/getting_started/tutorials/static_taxonomy_filters_sharepoint_search.md: -------------------------------------------------------------------------------- 1 | # Use static taxonomy filters with the SharePoint search data source 2 | 3 | Static filters don't necessarily need to be connected to a Data Visualizer Web Part. They are different from ['Refinement' filters](https://aequos-solutions.github.io/modern-data-visualizer/usage/data-filters/#filter-types-static-filter-versus-refiner-filter) and they just send abitrary filter values to consumer Web Parts ignoring received values from the data source. In this demo, we show you a practical use case and how to use them, for instance retrieve data from the SharePoint search according to a specific taxonomy term in a specific terms set **without any prior results fetched** (meaning filter values will be available at page load for initial filtering). 4 | 5 | !!! note "Questions, issues with this tutorial?" 6 | If you encouter issues or have questions about this tutorial don't hesitate to reach us using our official [GitHub repository](https://github.com/aequos-solutions/modern-data-visualizer/issues/new/choose). 7 | 8 | ## Video tutorial 9 | 10 | 11 | 12 | > Static filters can be used in [tokens](../../usage/data-visualizer/tokens.md) as well for other data sources. -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | !["aequos"](./assets/aequos_logo_noir.png){: .center .logo} 2 | 3 | # aequos Modern Data Visualizer solution 4 | 5 | !["Current version"](https://img.shields.io/github/v/release/aequos-solutions/modern-data-visualizer?include_prereleases) 6 | 7 | The 'Modern Data Visualizer' solution is a set of SharePoint Online modern Web Parts allowing SharePoint super users, webmasters and developers to create highly flexible and personalized data viewing and filtering experiences in minutes. 8 | 9 | It is the enhanced product version of the well known ["Pattern & Practices Modern Search"](https://github.com/microsoft-search/pnp-modern-search) open-source solution **that we also created**. 10 | 11 | !!! info 12 | Want to know what are the differences between the commercial and open source solutions to help you decide which one is the right for you? Take a look at our detailled [features comparison table](./features/). 13 | 14 | Don't be wrong: **we still continue to invest time and support for the open-source solution**. If it suits your current requirements, feel free to go with it. We will never push someone to purchase the licensed solution. 15 | 16 | ## What's included? 17 | 18 | The solution includes the following Web Parts: 19 | 20 | | Component | Description | 21 | | --------- | ----------- | 22 | | **[Data Visualizer](./usage/data-visualizer/index.md)** | Retrieve data from a data source and render them in a specific layout. 23 | | **[Data Filters](./usage/data-filters/index.md)** | Filter and refine data displayed in 'Data Visualizer' Web Parts. 24 | | **[Data Verticals](./usage/data-verticals/index.md)** | Browse data as silos (i.e. tabs) from multiple data sources. 25 | | **[Search box](./usage/search-box/index.md)** | Let users enter free text queries sent to 'Data Visualizer' Web Parts. 26 | | **[Group Metadata Editor](./usage/group-metadata-editor/index.md)** | Allows owners to classify their team/ Microsoft 365 group based on Microsoft Graph schema extensions. 27 | 28 | **Overview video: let's build a complete search center** 29 | 30 | Here is a overview video on how to build a complete search center in minutes using all available Web Parts whithin a SharePoint page including multiple data sources. 31 | 32 | 33 | 34 | ## Supported browsers 35 | 36 | Here is the list of supported browsers: 37 | 38 | - Chrome 39 | - Firefox 40 | - Edge 41 | - Edge Chromium 42 | - Brave 43 | - Safari 44 | 45 | **We don't support Internet Explorer 11**. We think there are plenty of other options for enteprise scenarios in the market. Maybe it's time to move on. For developers, it represents an **huge** ammount of time to make the solution compatible for a very low benefit. Hope you understand, ain't personal ;). 46 | 47 | ## Extensibility model 48 | 49 | By getting this solution, you also benefit from an advanced [extensibility model](./extensibility/index.md) allowing you to customize the solution according to your requirements if default features don't do the job for you. 50 | 51 | **The supported extensions are:** 52 | 53 | - [Custom data sources](./extensibility/custom_data_source.md). 54 | - [Custom layouts](./extensibility/custom_layout.md). 55 | - [Custom web components](./extensibility/custom_web_component.md). 56 | - [Custom suggestions providers](./extensibility/custom_suggestions_provider.md). 57 | - [Custom Handlebars customization (helpers, partials, etc.)](./extensibility/handlebars_customizations.md). 58 | 59 | With these available customizations options, you can do pretty much anything! 60 | 61 | ## Troubleshooting 62 | 63 | To help us to resolve your issue, you can include screenshots or error messages coming from: 64 | 65 | - The faulty Web Part itself. 66 | - Errors displayed in the browser console (typically pressing F12). 67 | - Errors displayed in the SharePoint console (pressing CTRL+F12) 68 | 69 | ## Issues, questions, feedback? 70 | 71 | For any issue, question or feedback, please the [official GitHub repository](https://github.com/aequos-solutions/modern-data-visualizer/issues). We will be happy to help you! -------------------------------------------------------------------------------- /docs/installation.md: -------------------------------------------------------------------------------- 1 | # Installation 2 | 3 | !!! info "Trial version" 4 | If you don't have a valid license when using one of the Web Parts for the first time in a page, **a 14 days trial period will automatically begin associated to your Microsoft 365 tenant ID**. You don't need to provide any credit card or personal information, simply follow the steps below to start using the solution. At the end of the trial period, a license validation message will appear preventing using the Web Parts anymore. To continue to use them, you must purchase a valid license. 5 | 6 | !["Trial license expired"](./assets/trial_error.png){: .center} 7 | 8 | Trial periods are not cumulative. However, if you need more time to complete your evaluation simply contact us directly at [mdv@sword-group.com](mailto:mdv@sword-group.com). 9 | 10 | 1. Download the latest SharePoint Framework package (**aequos-modern-data-visualizer.sppkg**) from our public [GitHub repository](https://github.com/aequos-solutions/modern-data-visualizer/releases). 11 | 2. Add the package to your global app catalog or site collection app catalog. If you don't have an app catalog, follow this [procedure](https://docs.microsoft.com/en-us/sharepoint/use-app-catalog) to create one. 12 | 13 | !["App Catalog "](./assets/app_catalog.png){: .center} 14 | 15 | > * The solution is deployed in the general Microsoft 365 CDN meaning **we don't host any code on our side**. 16 | 17 | > * You can choose to make the solution available in [all sites](https://docs.microsoft.com/en-us/sharepoint/dev/spfx/tenant-scoped-deployment) or force to install an app to the site every time. 18 | 19 | !!! note "Asked API permissions" 20 | The solution asks the following API permissions by default to enhance the experience. 21 | 22 | **Mandatory permissions** 23 | 24 | | Requested API permission | Used for | 25 | | -------------- | --------- | 26 | | _TermStore.Read.All_ | The taxonomy picker filter template. Without it, users won't be able to browse for terms and term sets in the taxonomy tree. 27 | 28 | **Not mandatory permissions** 29 | 30 | The following permissions are **not mandatory**. If you don't accept them, you will simpy have less available features. 31 | 32 | | Requested API permission | Used for | 33 | | -------------- | --------- | 34 | | _User.Read_ | The Microsoft Graph Toolkit [persona card](https://docs.microsoft.com/en-us/graph/toolkit/components/person-card#microsoft-graph-permissions) in the people layout. | 35 | | _People.Read_ | Same as above. 36 | | _Contacts.Read_ | Same as above. 37 | | _User.ReadBAsic.All_ | Same as above. 38 | | _GroupMember.Read.All_ | To list owners and members in the Teams layout panel. 39 | | _Channel.ReadBasic.All_ | To list channels in the Teams layout panel. 40 | | _Group.ReadWrite.All_ | To be able to update Microsoft Graph schems extensions with the Group/Team metadata editor Web Part. 41 | | _Files.Read.All_ | Microsoft Search API 42 | | _Sites.Read.All_ | Microsoft Search API 43 | | _Mail.Read_ | Microsoft Search API 44 | | _Calendars.Read_ | Microsoft Search API 45 | | _ExternalItem.Read.All_ | Microsoft Search API 46 | 47 | !!! important "Microsoft Teams deployment" 48 | If you plan to use the **aequos - Group metadata editor** solution in Microsoft Teams, you must deploy the `.sppkg` file in the **Tenant** app catalog and use the **"Sync to Teams"** ribbon button: 49 | 50 | !["Sync to Teams"](./assets/sync-to-teams.png){: .center} 51 | 52 | Once deployed, you should see the application in the Teams application catalog: 53 | 54 | !["Teams apps"](./assets/teams-apps.png){: .center} 55 | 56 | 3. Add the Web Parts to a SharePoint and start building. Easy no? 57 | 58 | !["Available Web Parts"](./assets/webparts.png){: .center} -------------------------------------------------------------------------------- /docs/setup_standalone.md: -------------------------------------------------------------------------------- 1 | # Setup your standalone license 2 | 3 | -------------------------------------------------------------------------------- /docs/upgrade_from_pnp.md: -------------------------------------------------------------------------------- 1 | The PnP Modern Search v4 is literally a forked version of our Modern Data Visualizer solution and therefore, shares the same code foundation from its parent, simply with less features. If you started your project using the PnP Web Parts but feel limited to accomplish your objectives, you can upgrade to MDV solution (since version 1.3.0) **without losing your Web Parts data and configuration** following this procedure: 2 | 3 | !!! warning 4 | **We do not recommended to upgrade the PnP Modern Search Web Parts v4 if you simply want to try the MDV solution** as it will be difficult to rollback to PnP Modern Search later. 5 | For a trial, consider using an isolated site collection with its own app catalog instead. 6 | 7 | 1. Download the latest release of the aequos Modern Data Visualizer solution in our [GitHub repository](https://github.com/aequos-solutions/modern-data-visualizer/releases) 8 | 2. In the SharePoint app catalog where the PnP Modern Search v4 solution is deployed, remove the existing package: 9 | 10 | !["Upgrade from PnP - Remove existing package"](./assets/upgrade_pnp_remove.png){: .center} 11 | 12 | !!! important "Downtime consideration" 13 | Removing the existing package from the app catalog will have an impact on your users as they may see errors when refreshing their SharePoint pages. To minimize the downtime, just upload the new MDV package right away after deleting. The error messages will disappear after few page refreshes. 14 | 15 | 3. Add the aequos MDV SharePoint Framework package et voilà! Same configurations but with much more available options now. 16 | 17 | !["Upgrade from PnP - Add new package"](./assets/upgrade_mdv_add.png){: .center} 18 | 19 | !!! warning 20 | - The PnP Modern Search v4 and aequos Data Visualizer solutions can't be used in the same app catalog. 21 | - PnP Modern Search Web Parts v3 are not upgradable to MDV (neither to PnP v4 anyway). -------------------------------------------------------------------------------- /docs/usage/data-filters/layouts/custom.md: -------------------------------------------------------------------------------- 1 | The 'custom' layout is the minimal layout to start with if you want to create your own customized UI from scratch. You can also start from an existing layout. 2 | 3 | !["Custom"](../../../assets/webparts/data_filters/layouts/custom_layout.png){: .center} 4 | 5 | 6 | > Updating a builtin layout (ex: 'Horizontal', 'Vertical', etc.) will automatically switch the selected layout to 'Custom' with your modifications as content. **All previous custom layout content will be overwritten**. 7 | 8 | !["Custom edit"](../../../assets/webparts/data_visualizer/layouts/custom_edit.png){: .center} 9 | 10 | You have also the ability to use an external _.html_ file to centralize your customizations. This file must be stored in an accessible location for uses (ex: a SharePoint document library with _'Read'_ permissions for concerned users). 11 | 12 | !["External file"](../../../assets/webparts/data_filters/layouts/custom_external_file.png){: .center} 13 | 14 | > Unless you specify an external file, the template content is stored in the Web Part property bag. 15 | 16 | Updating the layout HTML template is a good option for minor UI updates (Ex: add a link, update colors, etc.). For more control over the UI, you may want to use the extensibility library feature. -------------------------------------------------------------------------------- /docs/usage/data-filters/layouts/debug.md: -------------------------------------------------------------------------------- 1 | The 'debug' layout allows you to see all relevant data used by filter templates during render. 2 | 3 | !["Debug"](../../../assets/webparts/data_filters/layouts/debug_layout.png){: .center} 4 | 5 | The template context object exposes the following properties: 6 | 7 | ```json 8 | { 9 | "filters": "", 10 | "selectedFilters": "", 11 | "instanceId": "", 12 | "theme": "", 13 | "strings": "", 14 | "selectedOnce": "", 15 | "properties": "" 16 | } 17 | ``` 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/usage/data-filters/layouts/horizontal.md: -------------------------------------------------------------------------------- 1 | Display filters as an horizontal bar. For instance, it fits nicely with 'Combo' filter templates. 2 | 3 | !["Horizontal"](../../../assets/webparts/data_filters/layouts/horizontal_layout.png){: .center} 4 | 5 | #### Layout options 6 | 7 | !["Horizontal layout options"](../../../assets/webparts/data_filters/layouts/horizontal_options.png){: .center} 8 | 9 | | Setting | Description | Default value 10 | | ------- |---------------- | ---------- 11 | | **Preferred number of cards per row** | Specifiy the **preferred** number of filters to display per row **when the required width space is available**. The Web Part will always adjust the number of possible filters to display depending the available width. It means that if you set this value to '3' but you display the Web Part in small column, only 1 filter will be displayed. | 3. -------------------------------------------------------------------------------- /docs/usage/data-filters/layouts/index.md: -------------------------------------------------------------------------------- 1 | ## Builtin layouts 2 | 3 | By default, the following layouts are provided: 4 | 5 | !["Available layouts"](../../../assets/webparts/data_filters/layouts/available_layouts.png){: .center} 6 | 7 | ### Vertical 8 | 9 | {!usage/data-filters/layouts/vertical.md!} 10 | 11 | ### Horizontal 12 | 13 | {!usage/data-filters/layouts/horizontal.md!} 14 | 15 | ### Panel 16 | 17 | {!usage/data-filters/layouts/panel.md!} 18 | 19 | ### Debug 20 | 21 | {!usage/data-filters/layouts/debug.md!} 22 | 23 | ### Custom 24 | 25 | {!usage/data-filters/layouts/custom.md!} 26 | 27 | -------------------------------------------------------------------------------- /docs/usage/data-filters/layouts/panel.md: -------------------------------------------------------------------------------- 1 | Display filters as an side panel. Useful to gain space on the page. 2 | 3 | !["Panel"](../../../assets/webparts/data_filters/layouts/panel_layout.png){: .center} 4 | 5 | #### Layout options 6 | 7 | !["Panel layout options"](../../../assets/webparts/data_filters/layouts/panel_options.png){: .center} 8 | 9 | | Setting | Description | Default value 10 | | ------- |---------------- | ---------- 11 | | **Button label to display** | The label to display to open the panel. | "Show filters". 12 | | **Panel header text** | The label to display to in the panel header. | "Filters". 13 | | **Modal** | If enabled, the panel will be modal (you can't select elemtns outside the panel). | True 14 | | **Light dismiss** | If enabled, dismiss the panel when click outside. | True 15 | | **Panel size** | The filter panel size to display. | Small (right). -------------------------------------------------------------------------------- /docs/usage/data-filters/layouts/vertical.md: -------------------------------------------------------------------------------- 1 | Display filters as a vertical bar: 2 | 3 | !["Vertical"](../../../assets/webparts/data_filters/layouts/vertical_layout.png){: .center} -------------------------------------------------------------------------------- /docs/usage/data-verticals/index.md: -------------------------------------------------------------------------------- 1 | # Data Verticals Web Part 2 | 3 | The 'Data Verticals' Web Part allows to conditionally render a 'Data Visualizer' Web Part according to the selected vertical. It is a simple way to build a complete search center including multiple sources. 4 | 5 | !["aequos Data Verticals Web Part"](../../assets/webparts/data_verticals/data_verticals_wp_picker.png){: .center} 6 | 7 | !["aequos Data Verticals Web Part"](../../assets/webparts/data_verticals/data_verticals_wp_default.png){: .center} 8 | 9 | ## Configuration 10 | 11 | The configuration of the 'Data Verticals' Web Part is fairly simple. 12 | 13 | !["Verticals configuration"](../../assets/webparts/data_verticals/configure_verticals.png){: .center} 14 | 15 | ### Configure verticals 16 | 17 | The options for a vertical are as follow: 18 | 19 | | **Setting** | **Description** | 20 | |------------|-----------------| 21 | | **Tab name** | The vertical name (i.e. tab) 22 | | **Tab value** | The vertical value that will be sent to connected 'Data Visualizer' Web Parts. You can use this value using the `{verticals.value}` token. See [tokens](../data-visualizer/tokens.md) for more info. 23 | | **Fluent UIFabric icon name** | The optional Fluent UI icon to display for the tab. Refer to [Office UI Fabric documentation](https://developer.microsoft.com/en-us/fluentui#/styles/web/icons) to see all available icons. 24 | | **Is hyperlink** | If checked, the tab will behave as an hyperlink meaning it won't trigger any selected event. 25 | | **Link URL** | If the tab is an hyperlink, the link URL to use. Tokens `{}` are supported here. See [tokens](../data-visualizer/tokens.md) for more info. 26 | | **Open behavior** | If the tab is an hyperlink, the opening behavior (new tab or current tab). 27 | | **Show link icon** | If the tab is an hyperlink, display or hide an icon next to the tab name indicating the tab is a link (same page or external). 28 | 29 | > The 'Data Verticals' Web Part does not need to be connected to any Web Part. However, it is meant to be used by a 'Data Visualizer' Web Part to get it work. More info about configuration [here](../data-visualizer/connections/index.md). 30 | 31 | > We recommend to configure the 'Data Visualizer' Web Parts that will use verticals **before connecting them to the verticals Web Part**. -------------------------------------------------------------------------------- /docs/usage/data-visualizer/adaptive_exressions.md: -------------------------------------------------------------------------------- 1 | From 1.2.x version, you can benefit from Microsoft [adaptive expressions](https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-concept-adaptive-expressions?view=azure-bot-service-4.0&tabs=arithmetic) to build and/or format strings dynamically based on existing environment tokens. An adaptive expression can contain one or more explicit values, prebuilt functions, or custom functions. Refer to the official Microsoft documentation to see the compelte list. 2 | 3 | In the solution, they can be used **wherever tokens are supported**. 4 | 5 | > A concrete example about their utility and usage is described in the [Build a people directory using alphabetical verticals, SharePoint Search data source and adaptive expressions 6 | ](../../../getting_started/tutorials/build_people_directory_graph) tutorial. 7 | 8 | **How to use them?** 9 | 10 | An adaptive expression is always enclosed with `${...}`. Single tokens are only enclosed with `{...}` and can be included in a expression. For instance, the following expression will evaluate the `{inputQueryText}` token value and depending if it is empty or not, the output will be different. 11 | 12 | ``` 13 | ${if(empty('{inputQueryText}'),'','&$search="displayName:{inputQueryText}"')} 14 | 15 | ``` 16 | 17 | !!! note 18 | * Tokens enclosed with regular curly braces `{}` are always evaluated **before** adaptive expressions (enclosed with `${}`) 19 | * Expressions enclosed with quotes (`"`) will always be evaluated as constants meaning **all nested functions won't be evaluated**. If you want to use the result of a function output and a string, you should use the `concat()` method. Ex: instead of `"myStringValue myFunction('param')"`, use `concat("myStringValue",myFunction('param'))`. 20 | 21 | ## Use prebuilt functions 22 | 23 | We defined some useful functions that you can use in your adaptive expression to format the output correctly: 24 | 25 | ### OData query 26 | 27 | | Functions | Description | Usage | 28 | | --------- | ----------- | ------ | 29 | | `buildOdataFilterCondition` | Builds an OData filter condition dynamically according the current selection. Use the `{filters}` token. | Example: use a multi taxonomy filter values: `https://graph.microsoft.com/v1.0/groups?&${if(empty('{filters}'),'',concat("&$filter=", buildOdataFilterCondition(json('{filters}'))))}`. -------------------------------------------------------------------------------- /docs/usage/data-visualizer/common/caching.md: -------------------------------------------------------------------------------- 1 | For all data sources, you have the option to cache the data to improve performances during the first page load. 2 | 3 | !["Data source slots"](../../../assets/webparts/data_visualizer/common/caching_options.png) 4 | 5 | When enabled, **only the first page of initial results is cached**. By default, a 5 minutes cache is applied. However, you can set your own duration. At any moment you can clear the cache by clicking on the _'Clear cache'_ button to start over. You data will be cached on the next page refresh. 6 | 7 | Notice the data are **won't be put in the cache** when: 8 | 9 | - A filter is selected. 10 | - The current page number is greater than 1. 11 | - The input query text changes. 12 | 13 | > Data in the cache are stored in the browser local storage under the following name: aequosDataVisualizer_DataSourceDataFirstPage_<WebPart instance ID>. -------------------------------------------------------------------------------- /docs/usage/data-visualizer/common/common.md: -------------------------------------------------------------------------------- 1 | Common general options for all data sources 2 | 3 | | Setting | Description | Default value | 4 | | --------| ----------- |---------------| 5 | | **Do not fetch the data at page load** | If enabled, the data won't be fetched during the first load of the Web Part. Use this setting if you want to trigger a data fetch only on dynamic external events like selected static filters or a new search box input. | False -------------------------------------------------------------------------------- /docs/usage/data-visualizer/common/paging.md: -------------------------------------------------------------------------------- 1 | The paging options are available for all data sources. 2 | 3 | | Setting | Description | Default value | 4 | | --------| ----------- |---------------| 5 | |**Show paging** | Hide or display the paging control. 6 | |**Number of items per page** | Specify the number of items to show per page. Depending of the data source, this value will be handled automatically or manually. For instance, the SharePoint Search and SharePoint CAML will take care of this value automatically. However, the OData data source can use this value by usin the `{itemsCountPerPage}` token to build a dynamic query (ex: `$top={itemsCountPerPage}`). 7 | |**Number of pages to display in range** | Determines the number of pages to display in range. 8 | |**Hide navigation buttons (prev page, next page)** | Self explicit. 9 | |**Hide first/last navigation buttons** | Self explicit. 10 | |**Hide navigation buttons (prev, next, first, last) if they are disabled** | Self explicit. 11 | 12 | **Data source paging behaviors** 13 | 14 | Paging is available for all data sources. However, they can handle it differently. 15 | 16 | | Data source | Paging behavior | Comments | 17 | |-------------| ----------------|-----------| 18 | | **SharePoint CAML**| Dynamic | Paging is done calculating the next page link based of the last item ID of the current results set. Therefore, pages are "discovered" along the way when browsing, meaning you can only increase the page number by one every time. 19 | | **SharePoint Search** | Dynamic | All page links are pre-calculated since the search engine returns the total items count matching the query regardless the page number. It means you can directly go the last page of results matching the query if you want. 20 | | **OData** | Dynamic/Static | Dynamic when using the `@odata.nextLink` information if present ('server-side paging') or `$skip` or `$skipToken` in the URL to determine the next page link URL. When dynamic, the pages are "discovered" along the way when browsing. Static when using the items array directly. 21 | | **Static Data** | Static | Paging is done statically base on the items array. -------------------------------------------------------------------------------- /docs/usage/data-visualizer/connections/index.md: -------------------------------------------------------------------------------- 1 | # Connections 2 | 3 | The 'Data Visualizer' Web Part can be used alone but also connected to other Web Parts: 4 | 5 | !["Available connections"](../../../assets/webparts/data_visualizer/connections/available_connections.png){: .center} 6 | 7 | ## Input query text 8 | 9 | The input query text can be either static or dynamic. In all cases, this value can be used using the `{inputQueryText}` token. See [tokens](../tokens.md) for more information. 10 | 11 | **Static value** 12 | 13 | It corresponds to a free text keywords that you want to pass to your data source: 14 | 15 | !["Static value"](../../../assets/webparts/data_visualizer/connections/input_text_static.png){: .center} 16 | 17 | This value will be applied **every time** to your data source. 18 | 19 | **Dynamic value** 20 | 21 | You can connect a dynamic value from the page environment (ex: a query string parameter, the top bar search box, etc.) or a search box already added to the page. 22 | 23 | !["Dynamic value"](../../../assets/webparts/data_visualizer/connections/input_text_dynamic.png){: .center} 24 | 25 | Optionaly, you can set a default query text **when there is no value for the connected source** (ex: an empty search box at page load). 26 | 27 | ## Filters Web Part 28 | 29 | Send available filters for the current data source to a Data Filters Web Part to be rendered. This is a two-ways connection and you need to connect the Data Visualizer Web Part from the Data Filter Web Part as well. 30 | 31 | For static filters (i.e. taxonomy picker and date range filter templates), this value can be used using the `{filters.}` token. See [tokens](../tokens.md) for more information. 32 | 33 | !["Filters"](../../../assets/webparts/data_visualizer/connections/filters.png){: .center} 34 | 35 | ## Verticals 36 | 37 | !["Verticals"](../../../assets/webparts/data_visualizer/connections/verticals.png){: .center} 38 | 39 | When you connect the Web Part to a Data Verticals one, you must specify on which vertical the Web Part content should be displayed. 40 | 41 | !["Select vertical"](../../../assets/webparts/data_visualizer/connections/select_vertical.png){: .center} 42 | 43 | This mechanism allows to build a complete search center using verticals tabs. 44 | 45 | ## Data Results 46 | 47 | {!usage/data-visualizer/connections/item-selection.md!} -------------------------------------------------------------------------------- /docs/usage/data-visualizer/connections/item-selection.md: -------------------------------------------------------------------------------- 1 | ### How to configure item selection? 2 | 3 | #### Source Web Part configuration 4 | 5 | 1. In a Data Visualizer Web Part where you want to select items from, go to the second property pane configuration page and enable the **Allow item selection** flag: 6 | 7 | !["Allow item selection](../../../assets/webparts/data_visualizer/connections/allow_item_selection.png "Allow item selection"){: .center} 8 | 9 | 2. Specifiy if you want to allow only single or multi selection. 10 | 3. Make sure some results are displayed in the Web Part by setting a default query. 11 | 12 | #### Target Web Part(s) configuration 13 | 14 | 1. In a Data Visualizer Web Part where you want to filter values, go to the third configuration page and enable the **Connect to a data results Web Part** flag. 15 | 16 | 3. From here, select the previous Web Part as source. 17 | 18 | !["Configure connection](../../../assets/webparts/data_visualizer/connections/configure_data_results_connection_1.png "Configure connection"){: .center} 19 | 20 | 3. Select the **source** field to use as filter value. 21 | 22 | !["Configure connection](../../../assets/webparts/data_visualizer/connections/configure_data_results_connection_2.png "Configure connection"){: .center} 23 | 24 | !!! note 25 | If you don't see any fields in the dropdown list after selection a source Web Part, it could be because: 26 | 27 | - The source Web Part doesn't have any results displayed yet so we can't guess what are the available exposed fields. In this case, you can either type the field name **manually** in the dropdown and press 'Enter' or display results in the source Web Part to list all its available fields. 28 | - The source Web Part doesn't allow item selection. In this case, you can't add any field. 29 | 30 | 4. Select the **destination** field to filter the current Web Part results. 31 | 32 | !["Configure connection](../../../assets/webparts/data_visualizer/connections/configure_data_results_connection_3.png "Configure connection"){: .center} 33 | 34 | !!! note 35 | If you don't see any fields in the dropdown list for target fields, it is because the Web Part doesn't display any result yet. In this case, you can either type the field name **manually** in the dropdown and press 'Enter' or display results in the source Web Part to list all available fields. 36 | 37 | 5. Select the selection mode. 38 | 39 | !["Configure connection](../../../assets/webparts/data_visualizer/connections/configure_data_results_connection_4.png "Configure connection"){: .center} 40 | 41 | !!! note 42 | - **Process values as filters**: the values will be sent as regular filters, just like they were selected in the Data Filter Web Part. In this mode, the selected source field **must be a valid filter for the current data source**. For instance if the data source is SharePoint Search or Microsoft Search, the field **must be a valid refinable managed property**. 43 | - **Process values as tokens**: the values will be sent manually in the data source query using token `{filter.source_field.valueAsText/valueAsObject}` and/or adaptive expressions to craft a valid query. This scenario can be useful for instance if: 44 | - You use SharePoint Search or Microsoft Search data sources and you don't want to use a Refinable managed property as filters. 45 | - You use OData data source and you want to create a dynamic query using tokens. 46 | 47 | **Examples** 48 | 49 | _SharePoint Search KQL (Single Value)_ 50 | 51 | `Title:{filters.Title.valueAsText}` will be translated to `Title:docx` 52 | 53 | _SharePoint Search KQL (Multi Values)_
54 | **OR condition**: `{|Title:{filters.Title.valueAsText}}` will be translated to `(Title:docx) OR (Title:pdf)...`
55 | **AND condition**: `{&Title:{filters.Title.valueAsText}}` will be translated to `(Title:docx) AND (Title:pdf)...`

56 | 57 | _OData URL (Multi Values)_
58 | **OR condition**: ``{|Title eq {filters.Title.valueAsText}}` will be translated to `(Title eq 'docx') or (Title eq 'pdf')``
59 | **AND condition**: ``{&Title eq {filters.Title.valueAsText}}` will be translated to `(Title eq 'docx') or (Title eq 'pdf')`` 60 | 61 | 6. Select the logical operator to use between selected filter values if applicable (default mode only). 62 | 63 | !["Configure connection](../../../assets/webparts/data_visualizer/connections/configure_data_results_connection_5.png "Configure connection"){: .center} 64 | 65 | !!! info "Filtering general behavior" 66 | 67 | - `null` ou `empty` filters values **are ignored** in the resulting query. 68 | - Duplicate values are trimmed (ex: user select items with the same filter values). 69 | - Filter values should be 'string' values. All other types will be ignored (ex: 'objects' from JSON response). -------------------------------------------------------------------------------- /docs/usage/data-visualizer/data-sources/index.md: -------------------------------------------------------------------------------- 1 | # Data sources 2 | 3 | 4 | ## Builtin data sources 5 | 6 | By default, the following data sources are provided: 7 | 8 | !["Available data sources"](../../../assets/webparts/data_visualizer/page1/available_datasources.png){: .center} 9 | 10 | > Be careful, when you switch the data source in the property pane, all the previous data source properties are lost. We do this to avoid polluting the Web Part property bag with multiple useless configurations. 11 | 12 | ### SharePoint Search 13 | 14 | {!usage/data-visualizer/data-sources/sharepoint-search.md!} 15 | 16 | ### SharePoint CAML 17 | 18 | {!usage/data-visualizer/data-sources/sharepoint-caml.md!} 19 | 20 | ### OData 21 | 22 | {!usage/data-visualizer/data-sources/odata.md!} 23 | 24 | ### Static Data 25 | 26 | {!usage/data-visualizer/data-sources/static-data.md!} 27 | 28 | ### Microsoft Search 29 | 30 | {!usage/data-visualizer/data-sources/microsoft-search.md!} 31 | 32 | ## Common settings 33 | 34 | {!usage/data-visualizer/common/common.md!} 35 | 36 | ## Paging 37 | 38 | {!usage/data-visualizer/common/paging.md!} 39 | 40 | ## Caching 41 | 42 | {!usage/data-visualizer/common/caching.md!} 43 | 44 | -------------------------------------------------------------------------------- /docs/usage/data-visualizer/data-sources/microsoft-search.md: -------------------------------------------------------------------------------- 1 | The _'Microsoft Search'_ data source retrieve items from the Microsoft search engine. 2 | 3 | 4 | #### Source configuration 5 | 6 | | Setting | Description | Default value 7 | | ------- |---------------- | ---------- | 8 | | **Entity types to search** | The entity types to search. See the [Microsoft Search API documentation](https://docs.microsoft.com/en-us/graph/api/resources/search-api-overview?view=graph-rest-beta) to see valid combinations. | Drive items (SharePoint & OneDrive) 9 | | **Use beta endpoint** | If checked, will use the Microsoft search `beta` endpoint instead of `v1.0` in Microsoft Graph. | false 10 | | **Sort order** | The initial sort order for the results. Sorting is supported only for SharePoint and OneDrive items. The property to be sorted on should be Sortable in the search schema. | ascending 11 | 12 | !!! warning 13 | Filters (aka 'refiners') are only available with the **beta** endpoint. -------------------------------------------------------------------------------- /docs/usage/data-visualizer/data-sources/sharepoint-caml.md: -------------------------------------------------------------------------------- 1 | The _'SharePoint CAML'_ data source allows you to rerieve items uisng a CAML query built using the interative builder or using an XML text. 2 | 3 | #### Source configuration 4 | 5 | A CAML query always apply on a SharePoint list or document library. Thus, you must first select one using the following dropdowns: 6 | 7 | !["Source configuration"](../../../assets/webparts/data_visualizer/caml/source_configuration.png){: .center} 8 | 9 | | Setting | Description | Default value | 10 | | ------- |---------------- | ---------- | 11 | | **Site** | The site collection containing the list or document library | By default, it uses the current site collection. However, you can disable the checkmark and search for a specific site. This control uses SharePoint search to get sites looking in the _Title_ and _Path_ managed properties. It means if your sites has been newly created it may not appear immediatly until indexed. | Current site collection. 12 | | **Web** | The web containing the list. It can be the root web of the selected site collecion or an other subsite. | '/' (root web) 13 | | **List** | The list where the CAML query will be applied. | None 14 | 15 | #### CAML Query configuration 16 | 17 | To build your CAML query, you have the choice to use the interactive builder or start from scratch using your own XML. See the [query schema for CAML](https://docs.microsoft.com/en-us/sharepoint/dev/schema/query-schema) to get started. 18 | 19 | ##### Using the builder 20 | 21 | | Setting | Description | Default value | 22 | | ------- |---------------- | ---------- | 23 | | **View Fields** | The item fields to return from the. They will be available in your templates with the same name. |
  • UniqueId
  • EncodedAbsUrl
  • FileRef
  • File_x0020_Type
  • FileLeafRef
  • Name
  • Author
  • Created
24 | | **Order by field** | An optional field to sort results. If a field is selected, you have the option to select ascending or descending order. | None 25 | | **Search within folders** | Enable this option if you want to search in folders recursively in your list or document library. | False 26 | | **Filters** | The filter condition builder. From here you can select:

!["Filter builder"](../../../assets/webparts/data_visualizer/caml/filter_builder.png)


  • Field: the list to apply the condition
  • Operator: the operator to use. Supported operators are _"Equals,Does not equal, Is greater than, Is less than, Is grater or equal to, Is less or equal to, Is null, Is not null, Begins with and Contains"_.**Operator choices are automatically adjusted regarding the selected field type.**
  • Value: the value to use for the condition. You can use a plain text/date/taxonomy value here (depending of the selected field type) or use a dynamic token. For the second option, enable the corresponding checkbox to have access to the dynamic tokens menu. Notice that not all available tokens are listed here. If the token you want to use is not is the list, you can add it using the _'Custom value'_ option and press enter. All supported tokens can be found [here](../tokens.md)
27 | 28 | ##### Using the advanced mode 29 | 30 | In advanced mode, you are responsible to wrtie your own CAML query as XML text. You can use tokens `{}` directly in the text to create dynamic queries. 31 | 32 | !["Advanced mode"](../../../assets/webparts/data_visualizer/caml/filter_advancedmode.png){: .center} 33 | 34 | > Tip: to help you get started, you can start writing your query using the builder and then switch to 'Advanced mode'. This way, you will see the underlying generated query. However, **from the moment where the CAML query text in advanced mode differ from the one generated by the builder, the builder settings will be lost if you switch back to that mode**. 35 | 36 | 37 | -------------------------------------------------------------------------------- /docs/usage/data-visualizer/data-sources/static-data.md: -------------------------------------------------------------------------------- 1 | The _'Static data'_ is the simplest data source you can use. With this data ssource, items are retrieved from a static JSON object that you define and does not require any asynchronous call. 2 | 3 | !["Static Data"](../../../assets/webparts/data_visualizer/page1/static_data_intro.png){: .center} 4 | 5 | #### When to use this data source? 6 | 7 | This data source allows you to define your own data schema (i.e. fields) that you can consume in your template. However, to be consumed by templates, the data must follow this JSON strcuture: 8 | 9 | ```json 10 | { 11 | "items": [ 12 | { 13 | "": "", 14 | ... 15 | } 16 | ], 17 | "": "", 18 | ... 19 | } 20 | ``` 21 | 22 | > Don't forget the quotes '"' for property names. 23 | 24 | > Even if you don't return items, you must specifiy this property. In this case, pass an empty array. 25 | 26 | #### How to use this data source: a practical example 27 | 28 | Let say you want to display a static list of useful links for your organization on the home page. Open the code editor and enter the following data: 29 | 30 | !["Static Data - Update"](../../../assets/webparts/data_visualizer/page1/static_data_modify.png){: .center} 31 | 32 | The data could be look like this: 33 | 34 | ```json 35 | { 36 | "items": [ 37 | { 38 | "linkName": "My Company Web Site", 39 | "linkHref": "http://mycompany.com", 40 | "linkOpenBehavior": "_blank" 41 | }, 42 | { 43 | "linkName": "My Company Web Site", 44 | "linkHref": "http://mycompany.com", 45 | "linkOpenBehavior": "_blank" 46 | } 47 | ], 48 | "numberOfLinks": "2" 49 | } 50 | ``` 51 | 52 | Now to consume this data, you can either start from an existing layout, or use a custom one. See the [templating documentation](../../../extensibility/templating.md) to know more. -------------------------------------------------------------------------------- /docs/usage/data-visualizer/index.md: -------------------------------------------------------------------------------- 1 | # Data Visualizer Web Part 2 | 3 | The _'Data Visualizer' Web Part_ is the fundamental building block of whole global solution. Its purpose is basically to get data from a specifc source and render them in a specific native or custom layout based on Handlebars and web components. 4 | 5 | This Web Part can be used **alone** or **connected to other Web Parts** to add dyanmic interactions (filters, search box or verticals). To use the Web Part on a SharePoint page: 6 | 7 | 1. Edit your SharePoint modern page. 8 | 2. Search for the _'aequos - Data Visualizer'_ Web Part and add it to your page: 9 | 10 | !["aequos Data Visualizer Web Part"](../../assets/webparts/data_visualizer/data_visualizer_wp_picker.png){: .center} 11 | 12 | !["aequos Data Visualizer Web Part"](../../assets/webparts/data_visualizer/data_visualizer_wp_placeholder.png){: .center} 13 | 14 | ## Configuration 15 | 16 | The data visualizer Web Part configuration is divided into four parts each corresponding to a property pane page: 17 | 18 | 1. [**Data source**](./data-sources/index.md): From where to retrieve the data. Includes the [slots configuration](./slots.md) and [tokens usage](./tokens.md). 19 | 2. [**Layouts**](./layouts/index.md): How to render them. 20 | 3. [**Connections**](./connections/index.md): How the Web Part will be connected to others in the page. 21 | 3. [**Extensibility**](../../extensibility/index.md): How the Web Part will be connected to others in the page. -------------------------------------------------------------------------------- /docs/usage/data-visualizer/layouts/cards.md: -------------------------------------------------------------------------------- 1 | The 'cards' layout allows you to display items as tiles, just like the native 'Highlighted Content' SharePoint Web Part. 2 | 3 | !["Cards layout"](../../../assets/webparts/data_visualizer/layouts/cards_layout.png){: .center} 4 | 5 | | Setting | Description | Default value 6 | | ------- |---------------- | ---------- | 7 | | **Manage card fields** | Allows you to define you own values for card placeholder fields. By default, the document card fields come with predefined mappings but you can set your own.

[!["Manage card fields"](../../../assets/webparts/data_visualizer/layouts/manage_cards_fields.png)](../../../assets/webparts/data_visualizer/layouts/manage_cards_fields.png)

As a field value, you can choose either a field property value (from the list or as free text) and without any transformation or use an Handlebars expression by clicking on the checkbox next to it. In this case, all helpers from the main template are available. Also, if the field doesn't have the **'Allow HTML'** indication flag enabled, it means the value will be always interpreted as text, regardless if you set an HTML value. Otherwise, your value will be interpreted as HTML for those fields (ex: '_Location_' and '_Tags_' placeholder fields). For HTML fields you can use the special variable `@root.theme` to use theme colors (ex: `@root.theme.palette.themePrimary`) or `@root.slots.` to access slot value. If you don't set a value for those fields (i.e an empty value), they won't appear in the UI:

[!["Card Allow HTML"](../../../assets/webparts/data_visualizer/layouts/card_allow_html.png)](../../../assets/webparts/data_visualizer/layouts/card_allow_html.png)

. 8 | | **Enable result preview** | If enabled, display a callout with an interactive preview of the document based on the value specified value for the `PreviewUrl` current data source [slot](../slots.md).

[!["Card Preview"](../../../assets/webparts/data_visualizer/layouts/card_preview.png)](../../../assets/webparts/data_visualizer/layouts/card_preview.png)

| False 9 | | **Show file icon** | Hide or display the file icon for the result card. The file icon is determined using the `FileType` [slot](../slots.md). | True 10 | | **Compact mode** | Display cards as compact. | False 11 | | **Preferred number of cards per row** | Specifiy the **preferred** number of cards to display per row **when the required width space is available**. The Web Part will always adjust the number of possible tiles to display depending the available width. It means that if you set this value to '3' but you display the Web Part in small column, only 1 tile will be displayed. | 3. 12 | -------------------------------------------------------------------------------- /docs/usage/data-visualizer/layouts/custom.md: -------------------------------------------------------------------------------- 1 | The 'custom' layout is the minimal layout to start with if you want to create your own customized UI from scratch. You can also start from an existing layout. 2 | 3 | !["Custom layout"](../../../assets/webparts/data_visualizer/layouts/custom_layout.png){: .center} 4 | 5 | > Updating a builtin layout (ex: 'Cards', 'Detail List', etc.) will automatically switch the selected layout to 'Custom' with your modifications as content. **All previous custom layout content will be overwritten**. 6 | 7 | !["Custom edit"](../../../assets/webparts/data_visualizer/layouts/custom_edit.png){: .center} 8 | 9 | You have also the ability to use an external _.html_ file to centralize your customizations. This file must be stored in an accessible location for uses (ex: a SharePoint document library with _'Read'_ permissions for concerned users). 10 | 11 | !["External file"](../../../assets/webparts/data_visualizer/layouts/custom_external_file.png){: .center} 12 | 13 | > Unless you specify an external file, the template content is stored in the Web Part property bag. 14 | 15 | Updating the layout HTML template is a good option for minor UI updates (Ex: add a link, update colors, etc.). For more control over the UI, you may want to use the extensibility library feature. 16 | -------------------------------------------------------------------------------- /docs/usage/data-visualizer/layouts/debug.md: -------------------------------------------------------------------------------- 1 | 2 | The 'debug' layout allows you to see all relevant data used by layout templates or data sources during render. 3 | 4 | !["Debug layout"](../../../assets/webparts/data_visualizer/layouts/debug_layout.png){: .center} 5 | 6 | The template context object exposes the following properties: 7 | 8 | ```json 9 | "paging": { 10 | "currentPageNumber": "" 11 | }, 12 | "filters": { 13 | "selectedFilters": "", 14 | "filterOperator": "", 15 | "instanceId": "", 16 | "filtersConfiguration": "" 17 | }, 18 | "inputQueryText": "", 19 | "slots": "", 20 | "theme": "", 21 | "properties": "", 22 | "context": { 23 | "site": "", 24 | "web": "", 25 | "list" :"", 26 | "listItem":"", 27 | "cultureInfo":"", 28 | "user":"" 29 | }, 30 | "data": "", 31 | "instanceId": "", 32 | "utils": { 33 | "defaultImage": "" 34 | } 35 | ``` 36 | 37 | -------------------------------------------------------------------------------- /docs/usage/data-visualizer/layouts/details-list.md: -------------------------------------------------------------------------------- 1 | The 'details list' layout allows you to display items as a structured list, the same way as a SharePoint document library or list. 2 | 3 | !["Details list layout"](../../../assets/webparts/data_visualizer/layouts/details_list_layout.png){: .center} 4 | 5 | | Setting | Description | Default value 6 | | ------- |---------------- | ---------- | 7 | | **Manage columns** | Allows you to build you own table view by adding or removing columns dynamically. For each column, you get the following options:

[!["Manage columns"](../../../assets/webparts/data_visualizer/layouts/details_list_fields.png)](../../../assets/webparts/data_visualizer/layouts/details_list_fields.png)

  • **Sort order**: the order of the column in the table.
  • **Column name**: the column friendly name to display.
  • **Column value**: you can choose here either a field from the data source current results set (from the list or as free text) without any transformation or use an Handlebars expression by clicking on the checkbox next to it. In this case, all Handlebars helpers from the main template are available and you can also add you own HTML markup in the column value. For HTML fields you can use the special variable `@root.theme` to use theme colors (ex: `@root.theme.palette.themePrimary`).
    ![Handlebars Expression](../../../assets/webparts/data_visualizer/layouts/details_list_hb_expr.png)

    ![Handlebars Expression 2](../../../assets/webparts/data_visualizer/layouts/details_list_hb_expr2.png)
  • **Minimum width in px**: the minimum width of the column in pixels.
  • **Maximum width in px**: the maximum width of the column in pixels.
  • **Sortable**: allows you to sort column values alphabetically when the column header is clicked (ascending or descending). The sort is done statically on the current page results set and works only when the column value is not an Handlebars expression.
  • **Resizable**: allows you to resize the column dynamically in display mode.
  • **Multiline**: if the column column should be multiline. By default only ellipsis (...) will be display for larger text.
8 | | **Show file icon** | Hide or display the file icon in the first column. 9 | | **Compact mode** | Display the details list in compact mode. -------------------------------------------------------------------------------- /docs/usage/data-visualizer/layouts/index.md: -------------------------------------------------------------------------------- 1 | ## Builtin layouts 2 | 3 | By default, the following layouts are provided: 4 | 5 | !["Available layouts"](../../../assets/webparts/data_visualizer/layouts/available_layouts.png){: .center} 6 | 7 | > Be careful, when you switch the layout in the property pane, all the previous layout properties are lost. We do this to avoid polluting the Web Part property bag with multiple useless configurations. 8 | 9 | ### Cards 10 | 11 | {!usage/data-visualizer/layouts/cards.md!} 12 | 13 | ### Details List 14 | 15 | {!usage/data-visualizer/layouts/details-list.md!} 16 | 17 | ### Slider 18 | 19 | {!usage/data-visualizer/layouts/slider.md!} 20 | 21 | ### Simple list 22 | 23 | {!usage/data-visualizer/layouts/simple-list.md!} 24 | 25 | ### People 26 | 27 | {!usage/data-visualizer/layouts/people.md!} 28 | 29 | ### Teams 30 | 31 | {!usage/data-visualizer/layouts/teams.md!} 32 | 33 | ### Debug 34 | 35 | {!usage/data-visualizer/layouts/debug.md!} 36 | 37 | ### Custom 38 | 39 | {!usage/data-visualizer/layouts/custom.md!} 40 | 41 | ## Common settings 42 | 43 | For all layouts, some common settings are available: 44 | 45 | !["Common options"](../../../assets/webparts/data_visualizer/layouts/common_options.png){: .center} 46 | 47 | | Setting | Description | Default value 48 | | ------- |---------------- | ---------- | 49 | | **Show a 'See all' link** | Allows you to specify a 'See all' link at the top right of the Web Part along the Web Part title. You can set the text that will appear plus the link to use. Tokens are supported in the link URL.

!["Common options"](../../../assets/webparts/data_visualizer/layouts/see_all_link.png)

| Disabled 50 | | **Hide this web part if there's nothing to show** | If there is no results, the Web Part will remain blank in display mode (title and 'See all' link included). In edit mode, you will see a message indicating there is no results.

!["Common options"](../../../assets/webparts/data_visualizer/layouts/hide_webpart.png)

| Disabled 51 | | **Show results count** | Hide or display the results count for the current query. | Enabled 52 | | **Use Microsoft Graph Toolkit** | Enable or disable the Microsoft Graph Toolkit to be used in Handlebars template. Refer to the [MGT documentation](https://docs.microsoft.com/en-us/graph/toolkit/overview) to see available components. 53 | 54 | ### Result types 55 | 56 | The result types feature gives you the ability to apply a conditional rendering at item level according to data source field values. 57 | 58 | ![Result Types](../../../assets/webparts/data_visualizer/layouts/result_types_btn.png){: .center} 59 | 60 | > Not all layouts support the result types feature (ex: Details lsit and slider layouts). 61 | 62 | **Example** 63 | 64 | Given the following conditions, we apply a border with a specific color for each: 65 | 66 | ![Result Types](../../../assets/webparts/data_visualizer/layouts/result_types.png){: .center} 67 | 68 | ![Result Types template](../../../assets/webparts/data_visualizer/layouts/result_types_template.png){: .center} 69 | 70 | The result would be like this: 71 | 72 | ![Result Types template](../../../assets/webparts/data_visualizer/layouts/result_types_result.png){: .center} 73 | 74 | The following operators are supported: 75 | 76 | - Equals 77 | - Not equals 78 | - Contains 79 | - StartsWith 80 | - Greater Or Equal 81 | - Less Or Equal 82 | - Less than 83 | - Greater than 84 | - Is not null 85 | 86 | In the case you use a custom template, you can still benefit from this feature following this markup: 87 | 88 | ```html 89 | {{#> resultTypes}} 90 | {{!-- The block below will be used as default item template if no result types matched --}} 91 |
92 | 93 |
94 | {{/resultTypes}} 95 | ``` 96 | 97 | Handlebars [partials](https://handlebarsjs.com/guide/partials.html#partial-blocks) are used behind the scenes and conditions are built dynamically using a recursive if/else structure. 98 | 99 | -------------------------------------------------------------------------------- /docs/usage/data-visualizer/layouts/people.md: -------------------------------------------------------------------------------- 1 | The 'people' layout display a list of persons with additional information. Typically, this layout is well suited for a people directory. 2 | 3 | !["People layout"](../../../assets/webparts/data_visualizer/layouts/people_layout.png){: .center} 4 | 5 | By default, the user profile pictures are fetched from the SharePoint User Profile Service. If your user pictures are stored in Active Directoy, make sure you synchronized them with SharePoint User Profile Service. Otherwise, a placeholder image will be displayed. 6 | 7 | | Setting | Description | Default value 8 | | ------- |---------------- | ---------- 9 | | **Manage people fields** | Allows you to define you own values for people placeholder fields.

[!["Manage people fields"](../../../assets/webparts/data_visualizer/layouts/manage_people_fields.png)](../../../assets/webparts/data_visualizer/layouts/manage_people_fields.png)

As a field value, you can choose either a field property value (from the list or as free text) and without any transformation or use an Handlebars expression by clicking on the checkbox next to it. In this case, all helpers from the main template are available. Also, if the field doesn't have the **'Allow HTML'** indication flag enabled, it means the value will be always interpreted as text, regardless if you set an HTML value. Otherwise, your value will be interpreted as HTML for those fields (ex: '_Primary text_' placeholder field). For HTML fields you can use the special variable `@root.theme` to use theme colors (ex: `@root.theme.palette.themePrimary`) or `@root.slots.` to access slot value. If you don't set a value for those fields (i.e an empty value), they won't appear in the UI.
10 | | **Show persona card on hover** | If enabled, show a person card on hover for the current item.

[!["Persona card hover"](../../../assets/webparts/data_visualizer/layouts/persona_card_hover.png)](../../../assets/webparts/data_visualizer/layouts/persona_card_hover.png)

This feature uses Microsoft Graph and [Microsoft Graph Toolkit](https://docs.microsoft.com/en-us/graph/toolkit/components/person) to display information about the user and needs the following API permissions in your tenant to work:
  • User.Read
  • People.Read
  • Contacts.Read
  • User.ReadBasic.All
**If these permissions are not set, the card won't appear**. You can use [CLI for Microsoft 365](https://pnp.github.io/cli-microsoft365/cmd/spo/serviceprincipal/serviceprincipal-grant-add/) to add correct permissions for this feature:

`o365$ spo serviceprincipal grant add --resource '' --scope 'user_impersonation'`. Refer to the section below about [persona hover card customization](#persona-hover-card). 11 | | **Component size** | The size of the person item (not only the picture). The more the size is and the more information will be displayed for each item and vice versa. 12 | 13 | #### Persona hover card 14 | 15 | Activating this option may slightly reduce loading performances because the user information are fecthed individually for each user (i.e result). **This option shouldn't be used with large page count.** 16 | 17 | ##### Microsoft Graph Toolkit 18 | 19 | The hover card uses Microsoft Graph Toolkit. This means you can add additional information providing your own template like this: 20 | 21 | ```html 22 | 23 | 31 | 32 | ``` 33 | More information [here](https://docs.microsoft.com/en-us/graph/toolkit/components/person-card). -------------------------------------------------------------------------------- /docs/usage/data-visualizer/layouts/simple-list.md: -------------------------------------------------------------------------------- 1 | The 'simple list' layout display items as a simple list with larger rows, like a search engine results display. 2 | 3 | !["Simple list layout"](../../../assets/webparts/data_visualizer/layouts/simple_list_layout.png){: center} 4 | 5 | | Setting | Description | Default value 6 | | ------- |---------------- | ---------- 7 | | **Show file icon** | Hide or display the file icon for the result card. The file icon is determined using the `FileType` [slot](../slots.md). | True 8 | | **Show thumbnail** | If enabled, display a thumbnail for the itme + a callout with an interactive preview of the document on click based on the value specified value for the `PreviewUrl` current data source [slot](../slots.md).

[!["Card Preview"](../../../assets/webparts/data_visualizer/layouts/simple_list_thumbnail.png)](../../../assets/webparts/data_visualizer/layouts/simple_list_thumbnail.png)

| False -------------------------------------------------------------------------------- /docs/usage/data-visualizer/layouts/slider.md: -------------------------------------------------------------------------------- 1 | The 'slider' layout allows you to display data as as dynamic slider (i.e caroussel). 2 | 3 | !["Slider layout"](../../../assets/webparts/data_visualizer/layouts/slider_layout.png){: .center} 4 | 5 | | Setting | Description | Default value 6 | | ------- |---------------- | ---------- 7 | | **Auto play** | If enabled, slides move automatically every X seconds. | True 8 | | **Auto play duration** | Move elements every X seconds. | 3 seconds. 9 | | **Pause on hover** | If enabled, pause the slider on mouse hover. | True 10 | | **Number of elements to group together in slides** | Groups cells together in slides. | 3. 11 | | **Show page dots** | Enable or disable slider navigation. You can adjust the dots position by updating the `.flickity-page-dots` CSS class. | True 12 | | **Infinite scrolling** | Enable or disable infinite scrolling on the carousel. | False 13 | | **Slide height (in px)** | Dynamically set the slides height to adjust your results. | 360px. 14 | | **Slide width (in px)** | Dynamically set the slides width to adjust your results. | 318px. -------------------------------------------------------------------------------- /docs/usage/data-visualizer/layouts/teams.md: -------------------------------------------------------------------------------- 1 | The **Teams** layout can be used to display information about Microsoft Teams teams and Microsoft 365 groups: 2 | 3 | !["Teams Layout - Overview"](../../../assets/webparts/data_visualizer/layouts/teams/teams_layout.png){: .center} 4 | 5 | | Setting | Description | Default value 6 | | ------- |---------------- | ---------- | 7 | | Data source fields | The data source to display as tags. The order you select fields will determine the display order.
!["Teams Layout - Tags"](../../../assets/webparts/data_visualizer/layouts/teams/teams_layout_tags.png){: .center}
This option can be usefull if, for instance, you set custom [Microsoft schema extensions on your Microsoft 365 groups](https://docs.microsoft.com/en-us/graph/extensibility-schema-groups) | None 8 | 9 | Despite you can use this layout with any data, the 'teams' layout is firstly designed to be paired with a data source retrieving these relevant informations. That's why we suggest to use this layout and the [**OData & Microsoft Graph**](../data-sources/odata.md) data source with the following Microsoft Graph URLs and configurations: 10 | 11 | !!! example "Only teams where the current user is a member" 12 | === "URL" 13 | 14 | `https://graph.microsoft.com/beta/me/memberOf/$/microsoft.graph.group?$top={itemsCountPerPage}&$count=true&$select=id,displayName,description,visibility&$filter=resourceProvisioningOptions/Any(x:x eq 'Team')` 15 | 16 | === "HTTP Headers" 17 | ```json 18 | { 19 | "Content-Type": "application/json;odata=verbose", 20 | "Accept": "application/json", 21 | "ConsistencyLevel": "eventual" 22 | } 23 | ``` 24 | 25 | === "Permissions" 26 | - _User.Read_ 27 | - _GroupMember.Read.All_ (to list owners and members in the team panel) 28 | - _Channel.ReadBasic.All_ (to list channels in the team panel) 29 | 30 | !!! example "All Microsoft 365 groups (with or without Teams, public/private)" 31 | === "URL" 32 | 33 | `https://graph.microsoft.com/v1.0/groups` 34 | 35 | === "HTTP Headers" 36 | ```json 37 | { 38 | "Content-Type": "application/json;odata=verbose", 39 | "Accept": "application/json", 40 | { 41 | "ConsistencyLevel": "eventual" 42 | } 43 | } 44 | ``` 45 | 46 | === "Permissions" 47 | - _GroupRead.All_ 48 | - _GroupMember.Read.All_ (to list owners and members in the team panel) 49 | - _Channel.ReadBasic.All_ (to list channels in the team panel) 50 | 51 | 52 | These URLs can also be enhanced using adaptive expressions to build a dynamic query depending the context (ex: selected filters, search box keywords, etc.). 53 | 54 | !!! example "Groups with a display name or description that contains with a keyword from the search box including a count of returned objects" 55 | === "URL" 56 | 57 | `https://graph.microsoft.com/v1.0/groups?${if(empty("{inputQueryText}"),'','&$search="displayName:{inputQueryText}" OR "description:{inputQueryText}"')}&$count=true&$top={itemsCountPerPage}&$orderby=displayName` 58 | 59 | === "HTTP Headers" 60 | ```json 61 | { 62 | "Content-Type": "application/json;odata=verbose", 63 | "Accept": "application/json", 64 | "ConsistencyLevel": "eventual" 65 | } 66 | ``` 67 | === "Permissions" 68 | - _GroupRead.All_ 69 | - _GroupMember.Read.All_ (to list owners and members in the team panel) 70 | - _Channel.ReadBasic.All_ (to list channels in the team panel) 71 | 72 | See also the ["Build a teams search app using aequos MDV, Microsoft Graph extensions and SharePoint taxonomy"]() on how you can leverage this capability with SharePoint taxonomy filters. 73 | 74 | !!! important "" 75 | This URL require the `"ConsistencyLevel": "eventual"` HTTP header to be set in the **OData** data source configuration: 76 | 77 | !["Teams Layout - OData HTTP headers"](../../../assets/webparts/data_visualizer/layouts/teams/odata_header_set.png){: .center} 78 | 79 | This layout uses the following data source slots by defaut: 80 | 81 | !["Teams Layout - Default slots"](../../../assets/webparts/data_visualizer/layouts/teams/teams_layout_slots.png){: .center} 82 | 83 | | Setting | Description | Default value 84 | | ------- |---------------- | ---------- | 85 | | `TeamId` | The Microsoft 365 or Microsoft Teams team id. This information is used by the layout to get additional information about the team (ex: channels, member, owners) | `id` 86 | | `TeamVisibility` | The team visiblity (public/private). Leave this field empty if you don't want to display visibility | `visiblity` 87 | -------------------------------------------------------------------------------- /docs/usage/data-visualizer/layouts/templating.md: -------------------------------------------------------------------------------- 1 | ## Preview behavior 2 | 3 | 4 | ## Light updates 5 | ## Advanced updates -------------------------------------------------------------------------------- /docs/usage/data-visualizer/slots.md: -------------------------------------------------------------------------------- 1 | The _'slots'_ are a very important part of this solution and their use becomes very handy when it comes to create your own layouts. The slots feature is available for all data sources, including builtin and custom ones. 2 | 3 | !["Data source slots"](../../assets/webparts/data_visualizer/page1/data_source_slots.png){: .center} 4 | 5 | #### What is a 'slot'? 6 | 7 | > A slot is a mapping between a data source specific field and a placeholder variable used in layout templates. 8 | 9 | To illustrate this concept, here are a single card from the 'Cards' layout. You can see how slots apply to the UI: 10 | 11 | !["Slots concept"](../../assets/webparts/data_visualizer/page1/slot_concept.png){: .center} 12 | 13 | Slot definitions will be replaced dynamically by the underlying field values you specified in the mappings list. In the end, from a template perspective, an URL is an URL regardless of the source. Slots are used individually depending of the requirements of the chosen layout. 14 | 15 | #### Why I would need them? 16 | 17 | They allow you to get your data source (custom or builtin) work with all templates without the need of refactoring them and to adapt your data source specific fields. **Basically, it is a convenient, time saving feature making your templates reusable**. 18 | 19 | #### Builtin slots 20 | 21 | Here are all the builtin slots the solution provides. 22 | 23 | > Data sources may or may not define all these slots depending the nature of the source. 24 | 25 | | Slot name | Description | 26 | | --------- | ----------- | 27 | | **Title** | Typically the title of an item in results. 28 | | **Path** | The absolute URL of an item. 29 | | **Summary** | A short description of the item. 30 | | **Date** | A date associated to the item. Can be for instance, the created date, modified date or publishing date. 31 | | **FileType** | The file type. This can be an extension (ex: `docx`) or the complete path of the item including the file extension (ex: `https://mycompany.sharepoint.com/sites/mysite/Shared Documents/MyFile.pdf`). This slot is mainly used to retrieve the correct file icon for the item. 32 | | **PreviewImageUrl** | The image thumbnail URL to display for an item. You can use the builtin `AutoPreviewImageUrl` field here to get a default image if applicable. 33 | | **PreviewUrl** | Same as preview image URL but for the interactive preview of the item (ex: a Word document). You can use the builtin `AutoPreviewUrl` field here to get a default image if applicable. In this case, the Web Part will use a generic Microsoft Graph URL to generate the preview. More information on [supported file types](https://support.microsoft.com/en-us/office/file-types-supported-for-previewing-files-in-onedrive-sharepoint-and-teams-e054cd0f-8ef2-4ccb-937e-26e37419c5e4). 34 | | **Author** | An author associated to the item. 35 | | **Tags** | Tags associated to the item. Can be for instance taxonomy terms. 36 | | **SiteId** | The SharePoint site ID associated to the item. With `ListId` and `ItemId` this value is used to generate the preview URL. 37 | | **ListId** | The SharePoint site ID associated to the item. With `SiteId` and `ItemId` this value is used to generate the preview URL. 38 | | **ItemId** | The SharePoint site ID associated to the item. With `ListId` and `SiteId` this value is used to generate the preview URL. 39 | | **IsFolder** | Indicate if the current item is a folder. The value here should be a true/false value or 0/1. 40 | | **PersonQuery** | Used for the people layout to get information about the current user dynamically. More info [here](https://docs.microsoft.com/en-us/graph/toolkit/components/person). 41 | | **UserDisplayName** | Used by the people layout to display the user name. 42 | | **UserEmail** | Used by the people layout to display the user email. 43 | | **TeamId** | The Microsoft Teams team ID or the Microsoft 365 group ID. Intended to be used with the [Teams layout](./layouts/teams.md) 44 | | **TeamVisibility** | The Microsoft Teams team visiblity (public/private). Intended to be used with the [Teams layout](./layouts/teams.md) 45 | 46 | > A slot can be empty. 47 | 48 | #### Define your custom slots 49 | 50 | In addition to builtin ones, you can add your own slots and use them in layouts. To do so, first add your slot in the list: 51 | 52 | !["Create custom slot"](../../assets/webparts/data_visualizer/page1/custom_slot.png) 53 | 54 | And then use it in your templates using the following Handlebars expression: 55 | 56 | {{slot item @root.slots.}} 57 | 58 | - `slot`: The Handlebars helper name. 59 | - `item`: The current item containing the field value. 60 | - `@root.slots.`: The corresponding slot mapping name (ex. `@root.slots.Path` to the URL). 61 | 62 | The slot value will be processed a string in your template. -------------------------------------------------------------------------------- /docs/usage/group-metadata-editor/index.md: -------------------------------------------------------------------------------- 1 | # Group Metadata Editor 2 | 3 | > This Web Part is available since the **`1.4.0`** version. 4 | 5 | The _'Group/Team metadata editor' Web Part_ allows you to tag a specific Microsoft 365 group or team using a custom Microsoft Graph schema extension. This Web Part can be used **in a regular SharePoint page** or **as a team tab in Microsoft Teams** with the provided application (see [Installation](../../installation.md) for more information). 6 | 7 | > Although it can be used alone, we designed this Web Part to fully complete the search experience and provide an end-to-end solution with other MDV components when used to build a team search center in Microsoft Teams. See this [tutorial](../../getting_started/tutorials/build_teams_search_portal_using_taxonomy.md) to know how you can leverage this component at its full potential. 8 | 9 | !["aequos Group/Team metadata editor Web Part"](../../assets/webparts/group_metadata/group_metadata_editor_wp.png){: .center} 10 | 11 | !["aequos Group/Team metadata editor Teams app"](../../assets/webparts/group_metadata/group_metadata_editor_teams.png){: .center} 12 | 13 | !!! note 14 | 15 | - This Web Part can only be used in a SharePoint team site connected to a Microsoft 365 group and/or in a tab in a Microsoft Teams team. A warning message will be displayed otherwise: 16 | 17 | !["Not a Microsoft 365 group"](../../assets/webparts/group_metadata/not_365_group_message.png){: .center} 18 | 19 | - Only an owner of the underlying Microsoft 365 group can configure schema extension properties. 20 | 21 | ## Configuration 22 | 23 | The Microsoft Graph schema extension **must be created before using this Web Part**. As a tenant administrator, you can use [Microsoft Graph explorer](https:/aka.ms/ge) and this [procedure](https://docs.microsoft.com/en-us/graph/extensibility-schema-groups) to create an extension. 24 | 25 | The Web Part supports the following property data types: 26 | 27 | - `String` 28 | - `Integer` 29 | - `DateTime` 30 | - `Boolean` 31 | 32 | ## Usage in a SharePoint site 33 | 34 | 1. In a SharePoint team site **connected to a Microsoft 365 group**, open or create a new page. 35 | 36 | 2. Add the _"aequos - Group metadata editor"_ Web Part on the page and set the schema extension name. 37 | 38 | !["SharePoint Web Part configuration"](../../assets/webparts/group_metadata/webpart_sharepoint.png){: .center} 39 | 40 | 41 | ## Usage in a team in Microsoft Teams 42 | 43 | 1. On a team channel, add a new tab and click on _"More apps"_. If correctly deployed by your administrator, you should see the **"aequos - Team metadata editor"** application listed in your organization applications. 44 | 45 | !["More apps"](../../assets/webparts/group_metadata/teams_tab_more_apps.png){: .center} 46 | 47 | !["Built by your org"](../../assets/webparts/group_metadata/teams_tab_add_app.png){: .center} 48 | 49 | 2. Go through the process to add the application as tab: 50 | 51 | !["Add to a team"](../../assets/webparts/group_metadata/teams_tab_app_desc.png){: .center} 52 | 53 | !["Select channel"](../../assets/webparts/group_metadata/teams_tab_setup_as_tab.png){: .center} 54 | 55 | !["Save"](../../assets/webparts/group_metadata/teams_tab_save.png){: .center} 56 | 57 | 3. Configure the component settings the same way as the SharePoint Web Part: 58 | 59 | !["Configure"](../../assets/webparts/group_metadata/teams_tab_configure.png){: .center} 60 | 61 | 62 | -------------------------------------------------------------------------------- /docs/usage/search-box/index.md: -------------------------------------------------------------------------------- 1 | # Search box Web Part 2 | 3 | The 'Search box' Web Part allows users to enter free text search queries connected to a 'Data Visualizer' Web Part. 4 | 5 | !["aequos Search Box Web Part"](../../assets/webparts/search_box/search_box_wp_picker.png){: .center} 6 | 7 | !["aequos Search Box Web Part"](../../assets/webparts/search_box/search_box_wp_default.png){: .center} 8 | 9 | ## Configuration 10 | 11 | ### Search box settings 12 | 13 | !["Search Box settings"](../../assets/webparts/search_box/search_box_settings.png){: .center} 14 | 15 | | Setting | Description | Default value | 16 | | ------- |---------------- | ---------- | 17 | | **Placeholde text** | The placeholder text to display in the search box. | _"Enter your search terms..."_ 18 | | **Send the query to a new page** | Sends the search query text to a new page. From here you can select the page URL, the open behavior and send method (URL fragment '#' or a query string parameter). The input value can be transformed before sending it to another page. {inputQueryText} is replaced with the value from the search box and [other tokens](../data-visualizer/tokens.md) are also supported. | False 19 | 20 | ### Query suggestions 21 | 22 | !["Search Box suggestions"](../../assets/webparts/search_box/search_box_suggestions.png){: .center} 23 | 24 | The query suggestions allows users to easily find relevant query keywords based on their entry: 25 | 26 | !["Search Box suggestions"](../../assets/webparts/search_box/suggestions_demo.png){: .center} 27 | 28 | | Setting | Description | Default value | 29 | | ------- |---------------- | ---------- | 30 | |**Enable query suggestions**| Enable or disable query suggestions. | False 31 | |**Configure available providers** | Enable or disable the suggestions providers available for this Web Part. By default, only the _"SharePoint Static search suggestions"_ is available (disabled by default).

[!["Search Box suggestions"](../../assets/webparts/search_box/suggestions_providers_panel.png)](../../assets/webparts/search_box/suggestions_providers_panel.png)

To add values for this provider, refer to the following [documentation](https://docs.microsoft.com/en-us/sharepoint/search/manage-query-suggestions) (caution: it can take up to 24h for changes to take effect). Multiple providers can be enabled at once. 32 | |**Number of suggestions to show per group**| The number of suggestions to show per group. | 10 33 | 34 | ### Connections 35 | 36 | !["Search Box connections"](../../assets/webparts/search_box/dynamic_data_source.png){: .center} 37 | 38 | Optionally, you can set a default query text coming from an other dynamic data source on the page. For instance, connect the search box to a page environment variable like a query string parameter. The value retrieved from a connected data source will be displayed automatically at page load in the text box if present and broadcasted to any other Web Parts connected to the search box Web Part (ex: a 'Data Visualizer' Web Part) resulting to a cascading effect. -------------------------------------------------------------------------------- /extensibility-library-demo/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Dependency directories 7 | node_modules 8 | 9 | # Build generated files 10 | dist 11 | lib 12 | release 13 | solution 14 | sharepoint 15 | temp 16 | *.sppkg 17 | 18 | # Coverage directory used by tools like istanbul 19 | coverage 20 | 21 | # OSX 22 | .DS_Store 23 | 24 | # Visual Studio files 25 | .ntvs_analysis.dat 26 | .vs 27 | bin 28 | obj 29 | 30 | # Resx Generated Code 31 | *.resx.ts 32 | 33 | # Styles Generated Code 34 | *.scss.ts 35 | -------------------------------------------------------------------------------- /extensibility-library-demo/.nvmrc: -------------------------------------------------------------------------------- 1 | 14.17.0 -------------------------------------------------------------------------------- /extensibility-library-demo/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "msjsdiag.debugger-for-chrome" 4 | ] 5 | } -------------------------------------------------------------------------------- /extensibility-library-demo/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | /** 3 | * Install Chrome Debugger Extension for Visual Studio Code to debug your components with the 4 | * Chrome browser: https://aka.ms/spfx-debugger-extensions 5 | */ 6 | "version": "0.2.0", 7 | "configurations": [{ 8 | "name": "Local workbench", 9 | "type": "chrome", 10 | "request": "launch", 11 | "url": "https://localhost:4321/temp/workbench.html", 12 | "webRoot": "${workspaceRoot}", 13 | "sourceMaps": true, 14 | "sourceMapPathOverrides": { 15 | "webpack:///.././src/*": "${webRoot}/src/*", 16 | "webpack:///../../../src/*": "${webRoot}/src/*", 17 | "webpack:///../../../../src/*": "${webRoot}/src/*", 18 | "webpack:///../../../../../src/*": "${webRoot}/src/*" 19 | }, 20 | "runtimeArgs": [ 21 | "--remote-debugging-port=9222" 22 | ] 23 | }, 24 | { 25 | "name": "Hosted workbench", 26 | "type": "chrome", 27 | "request": "launch", 28 | "url": "https://enter-your-SharePoint-site/_layouts/workbench.aspx", 29 | "webRoot": "${workspaceRoot}", 30 | "sourceMaps": true, 31 | "sourceMapPathOverrides": { 32 | "webpack:///.././src/*": "${webRoot}/src/*", 33 | "webpack:///../../../src/*": "${webRoot}/src/*", 34 | "webpack:///../../../../src/*": "${webRoot}/src/*", 35 | "webpack:///../../../../../src/*": "${webRoot}/src/*" 36 | }, 37 | "runtimeArgs": [ 38 | "--remote-debugging-port=9222", 39 | "-incognito" 40 | ] 41 | } 42 | ] 43 | } -------------------------------------------------------------------------------- /extensibility-library-demo/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | // Configure glob patterns for excluding files and folders in the file explorer. 4 | "files.exclude": { 5 | "**/.git": true, 6 | "**/.DS_Store": true, 7 | "**/bower_components": true, 8 | "**/coverage": true, 9 | "**/lib-amd": true, 10 | "src/**/*.scss.ts": true 11 | }, 12 | "typescript.tsdk": ".\\node_modules\\typescript\\lib" 13 | } -------------------------------------------------------------------------------- /extensibility-library-demo/.yo-rc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@microsoft/generator-sharepoint": { 3 | "packageManager": "pnpm", 4 | "isCreatingSolution": true, 5 | "environment": "spo", 6 | "version": "1.12.1", 7 | "libraryName": "aequos-extensibility-demo", 8 | "libraryId": "4896309f-54bc-48f2-a7ee-0785e019d195", 9 | "isDomainIsolated": false, 10 | "componentType": "library" 11 | } 12 | } -------------------------------------------------------------------------------- /extensibility-library-demo/README.md: -------------------------------------------------------------------------------- 1 | ## aequos - Extensibility Library Demo Project 2 | 3 | This project shows how to implement custom data sources for the 'Modern Data Visualizer' Web Part. 4 | 5 | ### Documentation 6 | 7 | A complete step-by-step tutorial is available [here](https://aequos-solutions.github.io/modern-data-visualizer/extensibility/#create-an-extensibility-library). -------------------------------------------------------------------------------- /extensibility-library-demo/config/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/config.2.0.schema.json", 3 | "version": "2.0", 4 | "bundles": { 5 | "my-company-library-library": { 6 | "components": [ 7 | { 8 | "entrypoint": "./lib/libraries/myCompanyLibrary/MyCompanyLibraryLibrary.js", 9 | "manifest": "./src/libraries/myCompanyLibrary/MyCompanyLibraryLibrary.manifest.json" 10 | } 11 | ] 12 | } 13 | }, 14 | "externals": {}, 15 | "localizedResources": { 16 | "MyCompanyLibraryLibraryStrings": "lib/libraries/myCompanyLibrary/loc/{locale}.js" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /extensibility-library-demo/config/copy-assets.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/copy-assets.schema.json", 3 | "deployCdnPath": "./release/assets/" 4 | } 5 | -------------------------------------------------------------------------------- /extensibility-library-demo/config/deploy-azure-storage.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/deploy-azure-storage.schema.json", 3 | "workingDir": "./release/assets/", 4 | "account": "", 5 | "container": "aequos-extensibility-starter", 6 | "accessKey": "" 7 | } -------------------------------------------------------------------------------- /extensibility-library-demo/config/package-solution.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/package-solution.schema.json", 3 | "solution": { 4 | "name": "aequos - Extensibility Library Demo", 5 | "id": "4896309f-54bc-48f2-a7ee-0785e019d195", 6 | "version": "1.3.0.0", 7 | "includeClientSideAssets": true, 8 | "skipFeatureDeployment": true, 9 | "isDomainIsolated": false, 10 | "developer": { 11 | "mpnId": "", 12 | "name": "Franck Cornu", 13 | "privacyUrl": "www.aequos.ca/privacy", 14 | "termsOfUseUrl": "www.aequos.ca/eula", 15 | "websiteUrl": "www.aequos.ca" 16 | } 17 | }, 18 | "paths": { 19 | "zippedPackage": "solution/aequos-extensibility-demo.sppkg" 20 | } 21 | } -------------------------------------------------------------------------------- /extensibility-library-demo/config/serve.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/core-build/serve.schema.json", 3 | "port": 4321, 4 | "https": true 5 | } 6 | -------------------------------------------------------------------------------- /extensibility-library-demo/config/write-manifests.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", 3 | "cdnBasePath": "" 4 | } -------------------------------------------------------------------------------- /extensibility-library-demo/gulpfile.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const gulp = require('gulp'); 4 | const log = require('fancy-log'); 5 | const fs = require('fs'); 6 | 7 | const readJson = (path, cb) => { 8 | fs.readFile(require.resolve(path), (err, data) => { 9 | if (err) 10 | log.error(err) 11 | else 12 | cb(null, JSON.parse(data)) 13 | }); 14 | } 15 | 16 | const build = require('@microsoft/sp-build-web'); 17 | build.addSuppression(`Warning - [sass] The local CSS class 'ms-Grid' is not camelCase and will not be type-safe.`); 18 | 19 | var getTasks = build.rig.getTasks; 20 | build.rig.getTasks = function () { 21 | var result = getTasks.call(build.rig); 22 | 23 | result.set('serve', result.get('serve-deprecated')); 24 | 25 | return result; 26 | }; 27 | 28 | build.initialize(gulp); 29 | 30 | gulp.task('update-version', async () => { 31 | 32 | const webpartManifests = [ 33 | './src/libraries/myCompanyLibrary/MyCompanyLibraryLibrary.manifest.json' 34 | ]; 35 | 36 | const semver = require('semver') 37 | const versionArgIdx = process.argv.indexOf('--value'); 38 | const newVersionNumber = semver.valid(process.argv[versionArgIdx+1]); 39 | 40 | if (versionArgIdx !== -1 && newVersionNumber) { 41 | 42 | // Update version in the package-solution 43 | const pkgSolutionFilePath = './config/package-solution.json'; 44 | 45 | readJson(pkgSolutionFilePath, (err, pkgSolution) => { 46 | log.info('Old package-solution.json version:\t' + pkgSolution.solution.version); 47 | const pkgVersion = `${semver.major(newVersionNumber)}.${semver.minor(newVersionNumber)}.${semver.patch(newVersionNumber)}.0`; 48 | pkgSolution.solution.version = pkgVersion 49 | log.info('New package-solution.json version:\t' + pkgVersion); 50 | fs.writeFile(pkgSolutionFilePath, JSON.stringify(pkgSolution, null, 4), (error) => {}); 51 | }); 52 | 53 | // Updated version in Web Part manifests 54 | webpartManifests.forEach((manifestFile) => { 55 | readJson(manifestFile, (err, manifest) => { 56 | 57 | log.info('Old manifestFile version:\t' + manifest.version); 58 | const wpVersion = `${semver.major(newVersionNumber)}.${semver.minor(newVersionNumber)}.${semver.patch(newVersionNumber)}`; 59 | manifest.version = wpVersion; 60 | log.info('New manifestFile version:\t' + wpVersion); 61 | fs.writeFile(manifestFile, JSON.stringify(manifest, null, 4), (error) => {}); 62 | }); 63 | }); 64 | } else { 65 | log.error(`The provided version ${process.argv[versionArgIdx+1]} is not a valid SemVer version`); 66 | } 67 | }); -------------------------------------------------------------------------------- /extensibility-library-demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "aequos-extensibility-demo", 3 | "version": "1.0.0", 4 | "private": false, 5 | "main": "lib/index.js", 6 | "scripts": { 7 | "build": "gulp bundle --ship && gulp package-solution --ship", 8 | "clean": "gulp clean", 9 | "test": "gulp test" 10 | }, 11 | "dependencies": { 12 | "@aequos/extensibility": "1.3.0", 13 | "@microsoft/sp-component-base": "1.12.1", 14 | "@microsoft/sp-core-library": "1.12.1", 15 | "@microsoft/sp-http": "1.12.1", 16 | "@microsoft/sp-lodash-subset": "1.12.1", 17 | "@microsoft/sp-property-pane": "1.12.1", 18 | "@microsoft/sp-webpart-base": "1.12.1", 19 | "@types/es6-promise": "0.0.33", 20 | "@types/webpack-env": "1.13.1", 21 | "@webcomponents/custom-elements": "1.4.0", 22 | "@webcomponents/webcomponentsjs": "2.4.2", 23 | "handlebars": "4.7.6", 24 | "office-ui-fabric-react": "7.156.0", 25 | "react": "16.9.0", 26 | "react-dom": "16.9.0", 27 | "tslib": "^1.11.0", 28 | "typescript": "~3.3.0" 29 | }, 30 | "devDependencies": { 31 | "@microsoft/rush-stack-compiler-3.7": "0.2.8", 32 | "@microsoft/sp-build-web": "1.12.1", 33 | "@microsoft/sp-module-interfaces": "1.12.1", 34 | "@microsoft/sp-tslint-rules": "1.12.1", 35 | "@microsoft/sp-webpart-workbench": "1.12.1", 36 | "@types/react": "16.9.36", 37 | "@types/react-dom": "16.9.8", 38 | "@webcomponents/custom-elements": "^1.2.4", 39 | "@webcomponents/webcomponentsjs": "^2.2.10", 40 | "ajv": "~5.2.2", 41 | "fancy-log": "1.3.3", 42 | "gulp": "4.0.2", 43 | "semver": "6.3.0", 44 | "tslib": "^1.11.0" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /extensibility-library-demo/src/index.ts: -------------------------------------------------------------------------------- 1 | export { MyCompanyLibraryLibrary } from './libraries/myCompanyLibrary/MyCompanyLibraryLibrary'; 2 | -------------------------------------------------------------------------------- /extensibility-library-demo/src/libraries/CustomComponent.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { BaseWebComponent } from '@aequos/extensibility'; 3 | import * as ReactDOM from 'react-dom'; 4 | 5 | export interface IObjectParam { 6 | myProperty: string; 7 | } 8 | 9 | export interface ICustomComponentProps { 10 | 11 | /** 12 | * A sample string param 13 | */ 14 | myStringParam?: string; 15 | 16 | /** 17 | * A sample object param 18 | */ 19 | myObjectParam?: IObjectParam; 20 | 21 | /** 22 | * A sample date param 23 | */ 24 | myDateParam?: Date; 25 | 26 | /** 27 | * A sample number param 28 | */ 29 | myNumberParam?: number; 30 | 31 | /** 32 | * A sample boolean param 33 | */ 34 | myBooleanParam?: boolean; 35 | } 36 | 37 | export interface ICustomComponenState { 38 | } 39 | 40 | export class CustomComponent extends React.Component { 41 | 42 | public render() { 43 | 44 | // Parse custom object 45 | const myObject: IObjectParam = this.props.myObjectParam; 46 | 47 | return
48 | My Custom component {this.props.myNumberParam} {this.props.myStringParam} {myObject.myProperty} 49 |
; 50 | } 51 | } 52 | 53 | export class MyCustomComponentWebComponent extends BaseWebComponent { 54 | 55 | public constructor() { 56 | super(); 57 | } 58 | 59 | public async connectedCallback() { 60 | 61 | let props = this.resolveAttributes(); 62 | const customComponent = ; 63 | ReactDOM.render(customComponent, this); 64 | } 65 | } -------------------------------------------------------------------------------- /extensibility-library-demo/src/libraries/CustomDataSource.ts: -------------------------------------------------------------------------------- 1 | import { BaseDataSource, IDataSourceData, ITemplateSlot, BuiltinTemplateSlots, IDataContext } from "@aequos/extensibility"; 2 | import { IPropertyPaneGroup, PropertyPaneTextField } from "@microsoft/sp-property-pane"; 3 | 4 | export interface ICustomDataSourceProperties { 5 | myProperty: string; 6 | } 7 | 8 | export class CustomDataSource extends BaseDataSource { 9 | 10 | public getItemCount(): number { 11 | return 0; 12 | } 13 | 14 | public async getData(dataContext: IDataContext): Promise { 15 | 16 | /* Your logic to get the data */ 17 | return Promise.resolve({ 18 | items: [] 19 | }); 20 | } 21 | 22 | public getPropertyPaneGroupsConfiguration(): IPropertyPaneGroup[] { 23 | 24 | return [ 25 | { 26 | groupName: "Custom", 27 | groupFields: [ 28 | /* Your property pane fields if needed */ 29 | PropertyPaneTextField('dataSourceProperties.myProperty', { 30 | label: "My custom property" 31 | }) 32 | ] 33 | } 34 | ]; 35 | } 36 | 37 | public getTemplateSlots(): ITemplateSlot[] { 38 | return [ 39 | { 40 | slotName: BuiltinTemplateSlots.Title, 41 | slotField: 'Title' 42 | }, 43 | { 44 | slotName: BuiltinTemplateSlots.Path, 45 | slotField: 'Path' 46 | }, 47 | { 48 | slotName: BuiltinTemplateSlots.Summary, 49 | slotField: 'Description' 50 | } 51 | ]; 52 | } 53 | } -------------------------------------------------------------------------------- /extensibility-library-demo/src/libraries/CustomLayoutAdaptiveCards.ts: -------------------------------------------------------------------------------- 1 | import { BaseLayout } from "@aequos/extensibility"; 2 | import { IPropertyPaneField, PropertyPaneTextField } from '@microsoft/sp-property-pane'; 3 | 4 | /** 5 | * Custom Layout properties 6 | */ 7 | export interface ICustomLayoutAdaptiveCardsProperties { 8 | myTextProperty: string; 9 | } 10 | 11 | export class CustomlayoutAdaptiveCards extends BaseLayout { 12 | 13 | public getPropertyPaneFieldsConfiguration(availableFields: string[]): IPropertyPaneField[] { 14 | 15 | // Initializes the property if not defined 16 | this.properties.myTextProperty = this.properties.myTextProperty !== null ? this.properties.myTextProperty : "Default value"; 17 | 18 | return [ 19 | PropertyPaneTextField('layoutProperties.myTextProperty', { 20 | label: 'A custom layout property', 21 | placeholder: 'Fill a value' 22 | }) 23 | ]; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /extensibility-library-demo/src/libraries/CustomLayoutHandlebars.ts: -------------------------------------------------------------------------------- 1 | import { BaseLayout } from "@aequos/extensibility"; 2 | import { IPropertyPaneField, PropertyPaneTextField } from '@microsoft/sp-property-pane'; 3 | 4 | /** 5 | * Custom Layout properties 6 | */ 7 | export interface ICustomLayoutHandlebarsProperties { 8 | myTextProperty: string; 9 | } 10 | 11 | export class CustomlayoutHandlebars extends BaseLayout { 12 | 13 | public getPropertyPaneFieldsConfiguration(availableFields: string[]): IPropertyPaneField[] { 14 | 15 | // Initializes the property if not defined 16 | this.properties.myTextProperty = this.properties.myTextProperty !== null ? this.properties.myTextProperty : "Default value"; 17 | 18 | return [ 19 | PropertyPaneTextField('layoutProperties.myTextProperty', { 20 | label: 'A custom layout property', 21 | placeholder: 'Fill a value' 22 | }) 23 | ]; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /extensibility-library-demo/src/libraries/CustomSuggestionProvider.ts: -------------------------------------------------------------------------------- 1 | import { BaseSuggestionProvider, ISuggestion } from "@aequos/extensibility"; 2 | import { IPropertyPaneGroup, PropertyPaneTextField } from '@microsoft/sp-property-pane'; 3 | 4 | const PARKER_ICON_URL = 'https://raw.githubusercontent.com/pnp/media/master/parker/pnp/300w/parker.png'; 5 | const PNP_ICON_URL = 'https://raw.githubusercontent.com/pnp/media/master/pnp-logos-generics/png/teal/300w/pnp-samples-teal-300.png'; 6 | 7 | export interface ICustomSuggestionProviderProperties { 8 | myProperty: string; 9 | } 10 | 11 | export class CustomSuggestionProvider extends BaseSuggestionProvider { 12 | 13 | private _zeroTermSuggestions: ISuggestion[] = []; 14 | 15 | public async onInit(): Promise { 16 | 17 | this._onSuggestionSelected.bind(this); 18 | 19 | this._zeroTermSuggestions = [ 20 | { 21 | displayText: 'SharePoint Patterns and Practices', 22 | groupName: 'Custom Suggestions', 23 | iconSrc: PARKER_ICON_URL, 24 | onSuggestionSelected: this._onSuggestionSelected, 25 | description:'aka.ms/sppnp', 26 | hoverText: `The SharePoint Development Community (also known as the SharePoint PnP community) is an open-source initiative coordinated by SharePoint engineering. This community controls SharePoint development documentation, samples, reusable controls, and other relevant open-source initiatives related to SharePoint development.`, 27 | targetUrl: 'https://aka.ms/sppnp', 28 | } 29 | ]; 30 | } 31 | 32 | public get isZeroTermSuggestionsEnabled(): boolean { 33 | return true; 34 | } 35 | 36 | public async getSuggestions(queryText: string): Promise { 37 | return this._getSampleSuggestions(queryText); 38 | } 39 | 40 | public async getZeroTermSuggestions(): Promise { 41 | return this._zeroTermSuggestions; 42 | } 43 | 44 | private _onSuggestionSelected = (suggestion: ISuggestion): void => { 45 | console.log(`Suggestion Selected`, suggestion); 46 | } 47 | 48 | private _getSampleSuggestions = async (queryText: string): Promise => { 49 | const sampleSuggestions = [ 50 | { 51 | displayText: `PnP Powershell`, 52 | groupName: 'PnP', 53 | iconSrc: PNP_ICON_URL, 54 | onSuggestionSelected: this._onSuggestionSelected, 55 | description: 'Sample Suggestion', 56 | hoverText: `Sample Suggestion for ${queryText}` 57 | }, 58 | { 59 | displayText: `CLI for Microsoft 365`, 60 | groupName: 'PnP', 61 | iconSrc: PARKER_ICON_URL, 62 | onSuggestionSelected: this._onSuggestionSelected, 63 | description: 'Sample Suggestion', 64 | hoverText: `Sample Suggestion for ${queryText}` 65 | }, 66 | { 67 | displayText: `SharePoint docs`, 68 | groupName: 'SharePoint 2019', 69 | iconSrc: PNP_ICON_URL, 70 | onSuggestionSelected: this._onSuggestionSelected, 71 | description: 'Sample Suggestion', 72 | hoverText: `Sample Suggestion for ${queryText}` 73 | }, 74 | { 75 | displayText: `Boundaries`, 76 | groupName: 'SharePoint 2019', 77 | iconSrc: PARKER_ICON_URL, 78 | onSuggestionSelected: this._onSuggestionSelected, 79 | description: 'Sample Suggestion', 80 | hoverText: `Sample Suggestion for ${queryText}` 81 | } 82 | ]; 83 | 84 | return sampleSuggestions.filter(sg => sg.displayText.toLowerCase().match(`\\b${queryText.trim().toLowerCase()}`)); 85 | } 86 | 87 | public getPropertyPaneGroupsConfiguration(): IPropertyPaneGroup[] { 88 | 89 | return [ 90 | { 91 | groupName: 'Custom Search Suggestions', 92 | groupFields: [ 93 | PropertyPaneTextField('providerProperties.myProperty', { 94 | label: 'My property' 95 | }) 96 | ] 97 | } 98 | ]; 99 | } 100 | } -------------------------------------------------------------------------------- /extensibility-library-demo/src/libraries/custom-layout.html: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 |
7 |
This is an external custom template with a custom component
8 | 9 |
    10 | {{#each data.items as |item|}} 11 |
  • 12 | 13 | 20 | 21 |
  • 22 | {{/each}} 23 |
24 |
25 |
26 | 27 | 28 | 31 | 32 |
33 |
    34 | {{#times 3}} 35 |
  • 36 |
    37 |
    38 |
    39 | 40 | 41 | 42 | 43 | 44 |
    45 |
    46 |
    47 |
    48 |
    49 |
    50 |
    51 |
    52 |
    53 |
  • 54 | {{/times}} 55 |
56 |
57 |
-------------------------------------------------------------------------------- /extensibility-library-demo/src/libraries/custom-layout.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", 3 | "type": "AdaptiveCard", 4 | "version": "1.3", 5 | "body": [ 6 | { 7 | "type": "TextBlock", 8 | "text": "**${$root.data.totalItemsCount}** results", 9 | "size": "Medium", 10 | "wrap": true 11 | }, 12 | { 13 | "type": "Container", 14 | "$data": "${data.items}", 15 | "items": [ 16 | { 17 | "type": "ColumnSet", 18 | "columns": [ 19 | { 20 | "type": "Column", 21 | "width": "auto", 22 | "items": [ 23 | { 24 | "type": "TextBlock", 25 | "text": "
", 26 | "wrap": true 27 | } 28 | ], 29 | "height": "stretch" 30 | }, 31 | { 32 | "type": "Column", 33 | "width": 8, 34 | "horizontalAlignment": "Center", 35 | "spacing": "Medium", 36 | "items": [ 37 | { 38 | "type": "TextBlock", 39 | "text": "[${string(jPath($data, concat('.',$root.slots['Title']))[0])}](${string(jPath($data, concat('.',$root.slots['Path']))[0])})", 40 | "weight": "Bolder", 41 | "color": "Accent", 42 | "size": "Medium", 43 | "maxLines": 3 44 | }, 45 | { 46 | "type": "TextBlock", 47 | "text": "Written by __${if(empty($root.slots['Author']),'',string(jPath($data, concat('.',$root.slots['Author']))[0]))}__", 48 | "spacing": "Small" 49 | }, 50 | { 51 | "type": "TextBlock", 52 | "text": "${if(empty($root.slots['Summary']),'',string(jPath($data, concat('.',$root.slots['Summary']))[0]))}", 53 | "wrap": true, 54 | "maxLines": 3, 55 | "spacing": "Medium" 56 | } 57 | ] 58 | }, 59 | { 60 | "type": "Column", 61 | "width": 2, 62 | "items": [ 63 | { 64 | "type": "Image", 65 | "url": "${if(empty(jPath($data, concat('.',$root.slots['PreviewImageUrl']))),'',string(jPath($data, concat('.',$root.slots['PreviewImageUrl']))[0]))}", 66 | "horizontalAlignment": "Center" 67 | } 68 | ] 69 | } 70 | ] 71 | } 72 | ] 73 | } 74 | ] 75 | } -------------------------------------------------------------------------------- /extensibility-library-demo/src/libraries/myCompanyLibrary/MyCompanyLibraryLibrary.manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "dc4f961b-dbe0-44b4-982d-5776bf99d015", 3 | "alias": "MyCompanyLibraryLibrary", 4 | "componentType": "Library", 5 | "version": "1.2.0", 6 | "manifestVersion": 2 7 | } -------------------------------------------------------------------------------- /extensibility-library-demo/src/libraries/myCompanyLibrary/MyCompanyLibraryLibrary.ts: -------------------------------------------------------------------------------- 1 | import { ServiceKey } from "@microsoft/sp-core-library"; 2 | import { IDataSourceDefinition, IDataSource, IExtensibilityLibrary, ILayoutDefinition, IComponentDefinition, ILayout, LayoutType, ISuggestionProviderDefinition, ISuggestionProvider, LayoutTemplateType } from "@aequos/extensibility"; 3 | import { CustomDataSource } from "../CustomDataSource"; 4 | import { MyCustomComponentWebComponent } from "../CustomComponent"; 5 | import { CustomlayoutHandlebars } from "../CustomLayoutHandlebars"; 6 | import { CustomlayoutAdaptiveCards } from "../CustomLayoutAdaptiveCards"; 7 | import { CustomSuggestionProvider } from "../CustomSuggestionProvider"; 8 | 9 | export class MyCompanyLibraryLibrary implements IExtensibilityLibrary { 10 | 11 | public getCustomLayouts(): ILayoutDefinition[] { 12 | return [ 13 | { 14 | name: 'Custom Handlebars', 15 | iconName: 'Color', 16 | key: 'CustomLayoutHandlebars', 17 | type: LayoutType.Results, 18 | templateContent: require('../custom-layout.html'), 19 | serviceKey: ServiceKey.create('MyCompany:CustomLayoutHandlebars', CustomlayoutHandlebars), 20 | templateType: LayoutTemplateType.Handlebars 21 | }, 22 | { 23 | name: 'Custom Adaptive', 24 | iconName: 'Color', 25 | key: 'CustomLayoutAdaptiveCards', 26 | type: LayoutType.Results, 27 | templateContent: JSON.stringify(require('../custom-layout.json'), null, "\t"), 28 | serviceKey: ServiceKey.create('MyCompany:CustomLayoutAdaptiveCards', CustomlayoutAdaptiveCards), 29 | templateType: LayoutTemplateType.AdaptiveCards 30 | } 31 | ]; 32 | } 33 | 34 | public getCustomWebComponents(): IComponentDefinition[] { 35 | return [ 36 | { 37 | componentName: 'my-custom-component', 38 | componentClass: MyCustomComponentWebComponent 39 | } 40 | ]; 41 | } 42 | 43 | public getCustomDataSources(): IDataSourceDefinition[] { 44 | 45 | return [ 46 | { 47 | name: 'My Custom Source', 48 | iconName: 'Code', 49 | key: 'CustomDataSource', 50 | serviceKey: ServiceKey.create('MyCompany:CustomDataSource', CustomDataSource) 51 | }, 52 | ]; 53 | } 54 | 55 | public getCustomSuggestionProviders(): ISuggestionProviderDefinition[] { 56 | return [ 57 | { 58 | name: 'Custom Suggestions Provider', 59 | key: 'CustomSuggestionsProvider', 60 | description: 'A demo custom suggestions provider from the extensibility library', 61 | serviceKey: ServiceKey.create('MyCompany:CustomSuggestionsProvider', CustomSuggestionProvider) 62 | } 63 | ]; 64 | } 65 | 66 | public registerHandlebarsCustomizations(namespace: typeof Handlebars) { 67 | 68 | // Register custom Handlebars helpers 69 | // Usage {{myHelper 'value'}} 70 | namespace.registerHelper('myHelper', (value: string) => { 71 | return new namespace.SafeString(value.toUpperCase()); 72 | }); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /extensibility-library-demo/src/libraries/myCompanyLibrary/loc/en-us.js: -------------------------------------------------------------------------------- 1 | define([], function() { 2 | return { 3 | "PropertyPaneDescription": "Description", 4 | "BasicGroupName": "Group Name", 5 | "DescriptionFieldLabel": "Description Field" 6 | } 7 | }); -------------------------------------------------------------------------------- /extensibility-library-demo/src/libraries/myCompanyLibrary/loc/mystrings.d.ts: -------------------------------------------------------------------------------- 1 | declare interface IMyCompanyLibraryLibraryStrings { 2 | PropertyPaneDescription: string; 3 | BasicGroupName: string; 4 | DescriptionFieldLabel: string; 5 | } 6 | 7 | declare module 'MyCompanyLibraryLibraryStrings' { 8 | const strings: IMyCompanyLibraryLibraryStrings; 9 | export = strings; 10 | } 11 | -------------------------------------------------------------------------------- /extensibility-library-demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./node_modules/@microsoft/rush-stack-compiler-3.7/includes/tsconfig-web.json", 3 | "compilerOptions": { 4 | "target": "es5", 5 | "forceConsistentCasingInFileNames": true, 6 | "module": "esnext", 7 | "moduleResolution": "node", 8 | "jsx": "react", 9 | "declaration": true, 10 | "sourceMap": true, 11 | "experimentalDecorators": true, 12 | "skipLibCheck": true, 13 | "outDir": "lib", 14 | "inlineSources": false, 15 | "strictNullChecks": false, 16 | "noUnusedLocals": false, 17 | "typeRoots": [ 18 | "./node_modules/@types", 19 | "./node_modules/@microsoft" 20 | ], 21 | "types": [ 22 | "webpack-env" 23 | ], 24 | "lib": [ 25 | "es5", 26 | "dom", 27 | "es2015.collection", 28 | "es2015.promise" 29 | ] 30 | }, 31 | "include": [ 32 | "src/**/*.ts", 33 | "src/**/*.tsx" 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /extensibility-library-demo/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./node_modules/@microsoft/sp-tslint-rules/base-tslint.json", 3 | "rules": { 4 | "class-name": false, 5 | "export-name": false, 6 | "forin": false, 7 | "label-position": false, 8 | "member-access": true, 9 | "no-arg": false, 10 | "no-console": false, 11 | "no-construct": false, 12 | "no-duplicate-variable": true, 13 | "no-eval": false, 14 | "no-function-expression": true, 15 | "no-internal-module": true, 16 | "no-shadowed-variable": true, 17 | "no-switch-case-fall-through": true, 18 | "no-unnecessary-semicolons": true, 19 | "no-unused-expression": true, 20 | "no-use-before-declare": true, 21 | "no-with-statement": true, 22 | "semicolon": true, 23 | "trailing-comma": false, 24 | "typedef": false, 25 | "typedef-whitespace": false, 26 | "use-named-parameter": true, 27 | "variable-name": false, 28 | "whitespace": false 29 | } 30 | } -------------------------------------------------------------------------------- /mkdocs.yml: -------------------------------------------------------------------------------- 1 | site_name: aequos Modern Data Visualizer solution for SharePoint Online 2 | site_url: 'http://127.0.0.1:8000/' 3 | use_directory_urls: true 4 | nav: 5 | - Getting Started: 6 | - Introduction: index.md 7 | - Get a license: get_license.md 8 | - Installation: installation.md 9 | - Connections overview: getting_started/connections_chart.md 10 | - Features comparison with PnP Modern Search v4: features.md 11 | - Upgrade from PnP Modern Search v4: upgrade_from_pnp.md 12 | - Data Visualizer: 13 | - Usage: usage/data-visualizer/index.md 14 | - Data sources: usage/data-visualizer/data-sources/index.md 15 | - Slots: usage/data-visualizer/slots.md 16 | - Tokens: usage/data-visualizer/tokens.md 17 | - Adaptive expressions: usage/data-visualizer/adaptive_exressions.md 18 | - Layouts: usage/data-visualizer/layouts/index.md 19 | - Connections: usage/data-visualizer/connections/index.md 20 | - Extensibility: extensibility/index.md 21 | - Data Filters: 22 | - Usage: usage/data-filters/index.md 23 | - Layouts: usage/data-filters/layouts/index.md 24 | - Data Verticals: 25 | - Usage: usage/data-verticals/index.md 26 | - Search Box: 27 | - Usage: usage/search-box/index.md 28 | - Group Metadata Editor: 29 | - Usage: usage/group-metadata-editor/index.md 30 | - Extensibility: 31 | - Introduction: extensibility/index.md 32 | - Templating: extensibility/templating.md 33 | - Custom data source: extensibility/custom_data_source.md 34 | - Custom layout: extensibility/custom_layout.md 35 | - Custom web component: extensibility/custom_web_component.md 36 | - Custom suggestions provider: extensibility/custom_suggestions_provider.md 37 | - Custom Handlebars customizations: extensibility/handlebars_customizations.md 38 | - Web component list: extensibility/web_components_list.md 39 | - Tutorials & How-Tos: getting_started/tutorials/index.md 40 | theme: 41 | name: 'material' 42 | features: 43 | - navigation.tabs 44 | - navigation.tabs.sticky 45 | - navigation.instant 46 | font: 47 | code: 'Ubuntu Mono' 48 | logo: 'assets/aequos_logo.png' 49 | icon: 50 | logo: material/cloud 51 | extra_css: 52 | - 'assets/extra.css' 53 | markdown_extensions: 54 | - pymdownx.tabbed 55 | - pymdownx.superfences 56 | - pymdownx.critic 57 | - pymdownx.details 58 | - pymdownx.betterem: 59 | smart_enable: all 60 | - pymdownx.caret 61 | - pymdownx.mark 62 | - pymdownx.tilde 63 | - attr_list 64 | - admonition 65 | - pymdownx.emoji: 66 | emoji_index: !!python/name:materialx.emoji.twemoji 67 | emoji_generator: !!python/name:materialx.emoji.to_svg 68 | - codehilite: 69 | guess_lang: false 70 | - toc: 71 | permalink: true 72 | - markdown_include.include: 73 | base_path: docs 74 | extra: 75 | social: 76 | - icon: fontawesome/brands/twitter 77 | link: 'https://twitter.com/aequos_ca' 78 | - icon: octicons/globe-24 79 | link: 'https://www.aequos.ca' 80 | - icon: fontawesome/brands/linkedin-in 81 | link: 'https://www.linkedin.com/company/aequos-ca' 82 | - icon: fontawesome/brands/youtube 83 | link: 'https://www.youtube.com/channel/UCzwqxmUUKF6dv-f0YhdiIsg' 84 | repo_url: https://github.com/aequos-solutions/aequos.github.io 85 | edit_uri: blob/master/docs --------------------------------------------------------------------------------