From 80ec9a56db0086c2eba450d8961d7702bb404fe0 Mon Sep 17 00:00:00 2001 From: Ivan Borshchov Date: Thu, 19 Dec 2024 16:02:58 +0200 Subject: [PATCH] Deploy website - based on 31aef0c5b4ad5fa0a5a4ddef0c940606bc5bc63b --- 404.html | 2 +- ...age-4-c661c73e502760f974b3f5475d9b02b4.png | Bin 0 -> 142957 bytes ...43341.0cf05b35.js => 11b43341.fae2ef55.js} | 2 +- assets/js/485ec31e.450e51cc.js | 1 - assets/js/485ec31e.7c6b664b.js | 1 + assets/js/5dd1e9f0.347674bc.js | 1 - assets/js/5dd1e9f0.9490afee.js | 1 + assets/js/e401bd4d.3ee9bf88.js | 1 - assets/js/e401bd4d.783131ca.js | 1 + ...n.7e07cd44.js => runtime~main.8786d1e5.js} | 2 +- blog/ai-blog/index.html | 2 +- blog/archive/index.html | 2 +- .../backup-database-to-aws-glacier/index.html | 2 +- blog/chatgpt-plugin/index.html | 2 +- .../index.html | 2 +- blog/compose-ec2-deployment/index.html | 2 +- blog/index.html | 2 +- blog/tags/aws/index.html | 2 +- blog/tags/chatgpt/index.html | 2 +- blog/tags/github-actions/index.html | 2 +- blog/tags/index.html | 2 +- blog/tags/nuxt/index.html | 2 +- blog/tags/plugin/index.html | 2 +- blog/tags/terraform/index.html | 2 +- docs/api/index.html | 2 +- .../api/types/Back/classes/Filters/index.html | 2 +- docs/api/types/Back/classes/Sorts/index.html | 2 +- docs/api/types/Back/index.html | 2 +- .../AdminForthBulkAction/index.html | 2 +- .../interfaces/AdminForthConfig/index.html | 2 +- .../AdminForthConfigCustomization/index.html | 2 +- .../AdminForthForeignResource/index.html | 2 +- .../AdminForthInputConfig/index.html | 2 +- .../interfaces/AdminForthResource/index.html | 2 +- .../AdminForthResourceColumn/index.html | 2 +- .../AdminForthResourceInput/index.html | 2 +- .../Back/interfaces/HttpExtra/index.html | 2 +- .../Back/interfaces/IAdminForth/index.html | 2 +- .../interfaces/IAdminForthAuth/index.html | 2 +- .../IAdminForthDataSourceConnector/index.html | 2 +- .../index.html | 2 +- .../index.html | 2 +- .../interfaces/IAdminForthFilter/index.html | 2 +- .../IAdminForthHttpResponse/index.html | 2 +- .../interfaces/IAdminForthPlugin/index.html | 2 +- .../interfaces/IAdminForthRestAPI/index.html | 2 +- .../interfaces/IAdminForthSort/index.html | 2 +- .../Back/interfaces/ICodeInjector/index.html | 2 +- .../interfaces/IConfigValidator/index.html | 2 +- .../interfaces/IExpressHttpServer/index.html | 2 +- .../Back/interfaces/IHttpServer/index.html | 2 +- .../IOperationalResource/index.html | 2 +- .../interfaces/IWebSocketBroker/index.html | 2 +- .../interfaces/IWebSocketClient/index.html | 2 +- .../interfaces/ResourceOptions/index.html | 2 +- .../ResourceOptionsInput/index.html | 2 +- .../AdminForthDataSource/index.html | 2 +- .../index.html | 2 +- .../type-aliases/AfterSaveFunction/index.html | 2 +- .../AllowedActionValue/index.html | 2 +- .../type-aliases/AllowedActions/index.html | 2 +- .../AllowedActionsInput/index.html | 2 +- .../BeforeCreateSaveFunction/index.html | 2 +- .../index.html | 2 +- .../index.html | 2 +- .../BeforeSaveFunction/index.html | 2 +- .../Back/type-aliases/FDataFilter/index.html | 2 +- .../Back/type-aliases/FDataSort/index.html | 2 +- .../enumerations/ActionCheckSource/index.html | 2 +- .../AdminForthDataTypes/index.html | 2 +- .../AdminForthFilterOperators/index.html | 2 +- .../AdminForthMenuTypes/index.html | 2 +- .../AdminForthResourcePages/index.html | 2 +- .../AdminForthSortDirections/index.html | 2 +- .../AllowedActionsEnum/index.html | 2 +- docs/api/types/Common/index.html | 2 +- .../AdminForthBulkActionCommon/index.html | 2 +- .../AdminForthColumnEnumItem/index.html | 2 +- .../index.html | 2 +- .../AdminForthConfigForFrontend/index.html | 2 +- .../AdminForthConfigMenuItem/index.html | 2 +- .../AdminForthFieldComponents/index.html | 2 +- .../index.html | 2 +- .../AdminForthResourceColumnCommon/index.html | 2 +- .../index.html | 2 +- .../AdminForthResourceCommon/index.html | 2 +- .../AdminForthResourceInputCommon/index.html | 2 +- .../Common/interfaces/AdminUser/index.html | 2 +- .../GetBaseConfigResponse/index.html | 2 +- .../interfaces/ResourceVeryShort/index.html | 2 +- .../Common/interfaces/UserData/index.html | 2 +- .../AdminForthComponentDeclaration/index.html | 2 +- .../AllowedActionsResolved/index.html | 2 +- .../AnnouncementBadgeResponse/index.html | 2 +- .../type-aliases/ValidationObject/index.html | 2 +- .../enumerations/AlertVariant/index.html | 2 +- docs/api/types/FrontendAPI/index.html | 2 +- .../FrontendAPIInterface/index.html | 2 +- .../type-aliases/AlertParams/index.html | 2 +- .../type-aliases/ConfirmParams/index.html | 2 +- .../Advanced/plugin-development/index.html | 2 +- docs/tutorial/Customization/afcl/index.html | 2 +- docs/tutorial/Customization/alert/index.html | 4 +-- .../Customization/branding/index.html | 2 +- .../Customization/bulkActions/index.html | 2 +- .../customFieldRendering/index.html | 2 +- .../Customization/customPages/index.html | 4 +-- .../tutorial/Customization/dataApi/index.html | 2 +- docs/tutorial/Customization/hooks/index.html | 2 +- .../Customization/limitingAccess/index.html | 2 +- .../menuConfiguration/index.html | 2 +- .../Customization/pageInjections/index.html | 2 +- .../Customization/security/index.html | 2 +- .../standardPagesTuning/index.html | 2 +- .../Customization/virtualColumns/index.html | 2 +- .../Customization/websocket/index.html | 2 +- docs/tutorial/Plugins/AuditLog/index.html | 2 +- .../Plugins/ForeignInlineList/index.html | 2 +- docs/tutorial/Plugins/RichEditor/index.html | 2 +- .../Plugins/TwoFactorsAuth/index.html | 2 +- .../Plugins/email-password-reset/index.html | 2 +- docs/tutorial/Plugins/i18n/index.html | 29 ++++++++++-------- .../tutorial/Plugins/import-export/index.html | 2 +- docs/tutorial/Plugins/open-signup/index.html | 2 +- .../tutorial/Plugins/text-complete/index.html | 2 +- docs/tutorial/Plugins/upload/index.html | 2 +- docs/tutorial/deploy/index.html | 2 +- docs/tutorial/gettingStarted/index.html | 2 +- docs/tutorial/glossary/index.html | 2 +- docs/tutorial/helloWorld/index.html | 2 +- index.html | 2 +- search/index.html | 2 +- 132 files changed, 146 insertions(+), 141 deletions(-) create mode 100644 assets/images/image-4-c661c73e502760f974b3f5475d9b02b4.png rename assets/js/{11b43341.0cf05b35.js => 11b43341.fae2ef55.js} (96%) delete mode 100644 assets/js/485ec31e.450e51cc.js create mode 100644 assets/js/485ec31e.7c6b664b.js delete mode 100644 assets/js/5dd1e9f0.347674bc.js create mode 100644 assets/js/5dd1e9f0.9490afee.js delete mode 100644 assets/js/e401bd4d.3ee9bf88.js create mode 100644 assets/js/e401bd4d.783131ca.js rename assets/js/{runtime~main.7e07cd44.js => runtime~main.8786d1e5.js} (96%) diff --git a/404.html b/404.html index 1010feb18..ea4b49ba3 100644 --- a/404.html +++ b/404.html @@ -15,7 +15,7 @@ - + diff --git a/assets/images/image-4-c661c73e502760f974b3f5475d9b02b4.png b/assets/images/image-4-c661c73e502760f974b3f5475d9b02b4.png new file mode 100644 index 0000000000000000000000000000000000000000..157cbb039965dd9cb834b9cb6d695411b5ef5b7c GIT binary patch literal 142957 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.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Getting Started","href":"/docs/tutorial/gettingStarted","docId":"tutorial/gettingStarted","unlisted":false},{"type":"link","label":"Hello world app","href":"/docs/tutorial/helloWorld","docId":"tutorial/helloWorld","unlisted":false},{"type":"link","label":"Glossary","href":"/docs/tutorial/glossary","docId":"tutorial/glossary","unlisted":false},{"type":"category","label":"Customization","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Branding and Theming","href":"/docs/tutorial/Customization/branding","docId":"tutorial/Customization/branding","unlisted":false},{"type":"link","label":"Custom record field rendering","href":"/docs/tutorial/Customization/customFieldRendering","docId":"tutorial/Customization/customFieldRendering","unlisted":false},{"type":"link","label":"Virtual columns","href":"/docs/tutorial/Customization/virtualColumns","docId":"tutorial/Customization/virtualColumns","unlisted":false},{"type":"link","label":"Hooks","href":"/docs/tutorial/Customization/hooks","docId":"tutorial/Customization/hooks","unlisted":false},{"type":"link","label":"Limiting actions access","href":"/docs/tutorial/Customization/limitingAccess","docId":"tutorial/Customization/limitingAccess","unlisted":false},{"type":"link","label":"Custom pages","href":"/docs/tutorial/Customization/customPages","docId":"tutorial/Customization/customPages","unlisted":false},{"type":"link","label":"Alerts and confirmations","href":"/docs/tutorial/Customization/alert","docId":"tutorial/Customization/alert","unlisted":false},{"type":"link","label":"Page Injections","href":"/docs/tutorial/Customization/pageInjections","docId":"tutorial/Customization/pageInjections","unlisted":false},{"type":"link","label":"Custom bulk actions","href":"/docs/tutorial/Customization/bulkActions","docId":"tutorial/Customization/bulkActions","unlisted":false},{"type":"link","label":"Menu Configuration","href":"/docs/tutorial/Customization/menuConfiguration","docId":"tutorial/Customization/menuConfiguration","unlisted":false},{"type":"link","label":"Data API","href":"/docs/tutorial/Customization/dataApi","docId":"tutorial/Customization/dataApi","unlisted":false},{"type":"link","label":"Security","href":"/docs/tutorial/Customization/security","docId":"tutorial/Customization/security","unlisted":false},{"type":"link","label":"Standard pages tuning","href":"/docs/tutorial/Customization/standardPagesTuning","docId":"tutorial/Customization/standardPagesTuning","unlisted":false},{"type":"link","label":"AdminForth Components Library","href":"/docs/tutorial/Customization/afcl","docId":"tutorial/Customization/afcl","unlisted":false},{"type":"link","label":"Websocket","href":"/docs/tutorial/Customization/websocket","docId":"tutorial/Customization/websocket","unlisted":false}]},{"type":"link","label":"Deploy in Docker","href":"/docs/tutorial/deploy","docId":"tutorial/deploy","unlisted":false},{"type":"category","label":"Plugins","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"AuditLog","href":"/docs/tutorial/Plugins/AuditLog","docId":"tutorial/Plugins/AuditLog","unlisted":false},{"type":"link","label":"Two-Factor Authentication Plugin","href":"/docs/tutorial/Plugins/TwoFactorsAuth","docId":"tutorial/Plugins/TwoFactorsAuth","unlisted":false},{"type":"link","label":"ForeignInlineList","href":"/docs/tutorial/Plugins/ForeignInlineList","docId":"tutorial/Plugins/ForeignInlineList","unlisted":false},{"type":"link","label":"Rich editor","href":"/docs/tutorial/Plugins/RichEditor","docId":"tutorial/Plugins/RichEditor","unlisted":false},{"type":"link","label":"Upload","href":"/docs/tutorial/Plugins/upload","docId":"tutorial/Plugins/upload","unlisted":false},{"type":"link","label":"Text Complete","href":"/docs/tutorial/Plugins/text-complete","docId":"tutorial/Plugins/text-complete","unlisted":false},{"type":"link","label":"Email password reset","href":"/docs/tutorial/Plugins/email-password-reset","docId":"tutorial/Plugins/email-password-reset","unlisted":false},{"type":"link","label":"Import-Export","href":"/docs/tutorial/Plugins/import-export","docId":"tutorial/Plugins/import-export","unlisted":false},{"type":"link","label":"Open Signup","href":"/docs/tutorial/Plugins/open-signup","docId":"tutorial/Plugins/open-signup","unlisted":false},{"type":"link","label":"Internationalization (i18n)","href":"/docs/tutorial/Plugins/i18n","docId":"tutorial/Plugins/i18n","unlisted":false}]},{"type":"category","label":"Advanced","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Plugin development guide","href":"/docs/tutorial/Advanced/plugin-development","docId":"tutorial/Advanced/plugin-development","unlisted":false}]}],"apiSidebar":[{"type":"category","label":"API","items":[{"type":"category","label":"types","items":[{"type":"category","label":"Back","items":[{"type":"category","label":"Classes","items":[{"type":"link","label":"Filters","href":"/docs/api/types/Back/classes/Filters","docId":"api/types/Back/classes/Filters","unlisted":false},{"type":"link","label":"Sorts","href":"/docs/api/types/Back/classes/Sorts","docId":"api/types/Back/classes/Sorts","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Interfaces","items":[{"type":"link","label":"AdminForthBulkAction","href":"/docs/api/types/Back/interfaces/AdminForthBulkAction","docId":"api/types/Back/interfaces/AdminForthBulkAction","unlisted":false},{"type":"link","label":"AdminForthConfig","href":"/docs/api/types/Back/interfaces/AdminForthConfig","docId":"api/types/Back/interfaces/AdminForthConfig","unlisted":false},{"type":"link","label":"AdminForthConfigCustomization","href":"/docs/api/types/Back/interfaces/AdminForthConfigCustomization","docId":"api/types/Back/interfaces/AdminForthConfigCustomization","unlisted":false},{"type":"link","label":"AdminForthForeignResource","href":"/docs/api/types/Back/interfaces/AdminForthForeignResource","docId":"api/types/Back/interfaces/AdminForthForeignResource","unlisted":false},{"type":"link","label":"AdminForthInputConfig","href":"/docs/api/types/Back/interfaces/AdminForthInputConfig","docId":"api/types/Back/interfaces/AdminForthInputConfig","unlisted":false},{"type":"link","label":"AdminForthResource","href":"/docs/api/types/Back/interfaces/AdminForthResource","docId":"api/types/Back/interfaces/AdminForthResource","unlisted":false},{"type":"link","label":"AdminForthResourceColumn","href":"/docs/api/types/Back/interfaces/AdminForthResourceColumn","docId":"api/types/Back/interfaces/AdminForthResourceColumn","unlisted":false},{"type":"link","label":"AdminForthResourceInput","href":"/docs/api/types/Back/interfaces/AdminForthResourceInput","docId":"api/types/Back/interfaces/AdminForthResourceInput","unlisted":false},{"type":"link","label":"HttpExtra","href":"/docs/api/types/Back/interfaces/HttpExtra","docId":"api/types/Back/interfaces/HttpExtra","unlisted":false},{"type":"link","label":"IAdminForth","href":"/docs/api/types/Back/interfaces/IAdminForth","docId":"api/types/Back/interfaces/IAdminForth","unlisted":false},{"type":"link","label":"IAdminForthAuth","href":"/docs/api/types/Back/interfaces/IAdminForthAuth","docId":"api/types/Back/interfaces/IAdminForthAuth","unlisted":false},{"type":"link","label":"IAdminForthDataSourceConnector","href":"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnector","docId":"api/types/Back/interfaces/IAdminForthDataSourceConnector","unlisted":false},{"type":"link","label":"IAdminForthDataSourceConnectorBase","href":"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorBase","docId":"api/types/Back/interfaces/IAdminForthDataSourceConnectorBase","unlisted":false},{"type":"link","label":"IAdminForthDataSourceConnectorConstructor","href":"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor","docId":"api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor","unlisted":false},{"type":"link","label":"IAdminForthFilter","href":"/docs/api/types/Back/interfaces/IAdminForthFilter","docId":"api/types/Back/interfaces/IAdminForthFilter","unlisted":false},{"type":"link","label":"IAdminForthHttpResponse","href":"/docs/api/types/Back/interfaces/IAdminForthHttpResponse","docId":"api/types/Back/interfaces/IAdminForthHttpResponse","unlisted":false},{"type":"link","label":"IAdminForthPlugin","href":"/docs/api/types/Back/interfaces/IAdminForthPlugin","docId":"api/types/Back/interfaces/IAdminForthPlugin","unlisted":false},{"type":"link","label":"IAdminForthRestAPI","href":"/docs/api/types/Back/interfaces/IAdminForthRestAPI","docId":"api/types/Back/interfaces/IAdminForthRestAPI","unlisted":false},{"type":"link","label":"IAdminForthSort","href":"/docs/api/types/Back/interfaces/IAdminForthSort","docId":"api/types/Back/interfaces/IAdminForthSort","unlisted":false},{"type":"link","label":"ICodeInjector","href":"/docs/api/types/Back/interfaces/ICodeInjector","docId":"api/types/Back/interfaces/ICodeInjector","unlisted":false},{"type":"link","label":"IConfigValidator","href":"/docs/api/types/Back/interfaces/IConfigValidator","docId":"api/types/Back/interfaces/IConfigValidator","unlisted":false},{"type":"link","label":"IExpressHttpServer","href":"/docs/api/types/Back/interfaces/IExpressHttpServer","docId":"api/types/Back/interfaces/IExpressHttpServer","unlisted":false},{"type":"link","label":"IHttpServer","href":"/docs/api/types/Back/interfaces/IHttpServer","docId":"api/types/Back/interfaces/IHttpServer","unlisted":false},{"type":"link","label":"IOperationalResource","href":"/docs/api/types/Back/interfaces/IOperationalResource","docId":"api/types/Back/interfaces/IOperationalResource","unlisted":false},{"type":"link","label":"IWebSocketBroker","href":"/docs/api/types/Back/interfaces/IWebSocketBroker","docId":"api/types/Back/interfaces/IWebSocketBroker","unlisted":false},{"type":"link","label":"IWebSocketClient","href":"/docs/api/types/Back/interfaces/IWebSocketClient","docId":"api/types/Back/interfaces/IWebSocketClient","unlisted":false},{"type":"link","label":"ResourceOptions","href":"/docs/api/types/Back/interfaces/ResourceOptions","docId":"api/types/Back/interfaces/ResourceOptions","unlisted":false},{"type":"link","label":"ResourceOptionsInput","href":"/docs/api/types/Back/interfaces/ResourceOptionsInput","docId":"api/types/Back/interfaces/ResourceOptionsInput","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Type Aliases","items":[{"type":"link","label":"AdminForthDataSource","href":"/docs/api/types/Back/type-aliases/AdminForthDataSource","docId":"api/types/Back/type-aliases/AdminForthDataSource","unlisted":false},{"type":"link","label":"AfterDataSourceResponseFunction","href":"/docs/api/types/Back/type-aliases/AfterDataSourceResponseFunction","docId":"api/types/Back/type-aliases/AfterDataSourceResponseFunction","unlisted":false},{"type":"link","label":"AfterSaveFunction","href":"/docs/api/types/Back/type-aliases/AfterSaveFunction","docId":"api/types/Back/type-aliases/AfterSaveFunction","unlisted":false},{"type":"link","label":"AllowedActionValue","href":"/docs/api/types/Back/type-aliases/AllowedActionValue","docId":"api/types/Back/type-aliases/AllowedActionValue","unlisted":false},{"type":"link","label":"AllowedActions","href":"/docs/api/types/Back/type-aliases/AllowedActions","docId":"api/types/Back/type-aliases/AllowedActions","unlisted":false},{"type":"link","label":"AllowedActionsInput","href":"/docs/api/types/Back/type-aliases/AllowedActionsInput","docId":"api/types/Back/type-aliases/AllowedActionsInput","unlisted":false},{"type":"link","label":"BeforeCreateSaveFunction","href":"/docs/api/types/Back/type-aliases/BeforeCreateSaveFunction","docId":"api/types/Back/type-aliases/BeforeCreateSaveFunction","unlisted":false},{"type":"link","label":"BeforeDataSourceRequestFunction","href":"/docs/api/types/Back/type-aliases/BeforeDataSourceRequestFunction","docId":"api/types/Back/type-aliases/BeforeDataSourceRequestFunction","unlisted":false},{"type":"link","label":"BeforeLoginConfirmationFunction","href":"/docs/api/types/Back/type-aliases/BeforeLoginConfirmationFunction","docId":"api/types/Back/type-aliases/BeforeLoginConfirmationFunction","unlisted":false},{"type":"link","label":"BeforeSaveFunction","href":"/docs/api/types/Back/type-aliases/BeforeSaveFunction","docId":"api/types/Back/type-aliases/BeforeSaveFunction","unlisted":false},{"type":"link","label":"FDataFilter","href":"/docs/api/types/Back/type-aliases/FDataFilter","docId":"api/types/Back/type-aliases/FDataFilter","unlisted":false},{"type":"link","label":"FDataSort","href":"/docs/api/types/Back/type-aliases/FDataSort","docId":"api/types/Back/type-aliases/FDataSort","unlisted":false}],"collapsed":false,"collapsible":false}],"collapsed":false,"collapsible":false,"href":"/docs/api/types/Back/"},{"type":"category","label":"Common","items":[{"type":"category","label":"Enumerations","items":[{"type":"link","label":"ActionCheckSource","href":"/docs/api/types/Common/enumerations/ActionCheckSource","docId":"api/types/Common/enumerations/ActionCheckSource","unlisted":false},{"type":"link","label":"AdminForthDataTypes","href":"/docs/api/types/Common/enumerations/AdminForthDataTypes","docId":"api/types/Common/enumerations/AdminForthDataTypes","unlisted":false},{"type":"link","label":"AdminForthFilterOperators","href":"/docs/api/types/Common/enumerations/AdminForthFilterOperators","docId":"api/types/Common/enumerations/AdminForthFilterOperators","unlisted":false},{"type":"link","label":"AdminForthMenuTypes","href":"/docs/api/types/Common/enumerations/AdminForthMenuTypes","docId":"api/types/Common/enumerations/AdminForthMenuTypes","unlisted":false},{"type":"link","label":"AdminForthResourcePages","href":"/docs/api/types/Common/enumerations/AdminForthResourcePages","docId":"api/types/Common/enumerations/AdminForthResourcePages","unlisted":false},{"type":"link","label":"AdminForthSortDirections","href":"/docs/api/types/Common/enumerations/AdminForthSortDirections","docId":"api/types/Common/enumerations/AdminForthSortDirections","unlisted":false},{"type":"link","label":"AllowedActionsEnum","href":"/docs/api/types/Common/enumerations/AllowedActionsEnum","docId":"api/types/Common/enumerations/AllowedActionsEnum","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Interfaces","items":[{"type":"link","label":"AdminForthBulkActionCommon","href":"/docs/api/types/Common/interfaces/AdminForthBulkActionCommon","docId":"api/types/Common/interfaces/AdminForthBulkActionCommon","unlisted":false},{"type":"link","label":"AdminForthColumnEnumItem","href":"/docs/api/types/Common/interfaces/AdminForthColumnEnumItem","docId":"api/types/Common/interfaces/AdminForthColumnEnumItem","unlisted":false},{"type":"link","label":"AdminForthComponentDeclarationFull","href":"/docs/api/types/Common/interfaces/AdminForthComponentDeclarationFull","docId":"api/types/Common/interfaces/AdminForthComponentDeclarationFull","unlisted":false},{"type":"link","label":"AdminForthConfigForFrontend","href":"/docs/api/types/Common/interfaces/AdminForthConfigForFrontend","docId":"api/types/Common/interfaces/AdminForthConfigForFrontend","unlisted":false},{"type":"link","label":"AdminForthConfigMenuItem","href":"/docs/api/types/Common/interfaces/AdminForthConfigMenuItem","docId":"api/types/Common/interfaces/AdminForthConfigMenuItem","unlisted":false},{"type":"link","label":"AdminForthFieldComponents","href":"/docs/api/types/Common/interfaces/AdminForthFieldComponents","docId":"api/types/Common/interfaces/AdminForthFieldComponents","unlisted":false},{"type":"link","label":"AdminForthForeignResourceCommon","href":"/docs/api/types/Common/interfaces/AdminForthForeignResourceCommon","docId":"api/types/Common/interfaces/AdminForthForeignResourceCommon","unlisted":false},{"type":"link","label":"AdminForthResourceColumnCommon","href":"/docs/api/types/Common/interfaces/AdminForthResourceColumnCommon","docId":"api/types/Common/interfaces/AdminForthResourceColumnCommon","unlisted":false},{"type":"link","label":"AdminForthResourceColumnInputCommon","href":"/docs/api/types/Common/interfaces/AdminForthResourceColumnInputCommon","docId":"api/types/Common/interfaces/AdminForthResourceColumnInputCommon","unlisted":false},{"type":"link","label":"AdminForthResourceCommon","href":"/docs/api/types/Common/interfaces/AdminForthResourceCommon","docId":"api/types/Common/interfaces/AdminForthResourceCommon","unlisted":false},{"type":"link","label":"AdminForthResourceInputCommon","href":"/docs/api/types/Common/interfaces/AdminForthResourceInputCommon","docId":"api/types/Common/interfaces/AdminForthResourceInputCommon","unlisted":false},{"type":"link","label":"AdminUser","href":"/docs/api/types/Common/interfaces/AdminUser","docId":"api/types/Common/interfaces/AdminUser","unlisted":false},{"type":"link","label":"GetBaseConfigResponse","href":"/docs/api/types/Common/interfaces/GetBaseConfigResponse","docId":"api/types/Common/interfaces/GetBaseConfigResponse","unlisted":false},{"type":"link","label":"ResourceVeryShort","href":"/docs/api/types/Common/interfaces/ResourceVeryShort","docId":"api/types/Common/interfaces/ResourceVeryShort","unlisted":false},{"type":"link","label":"UserData","href":"/docs/api/types/Common/interfaces/UserData","docId":"api/types/Common/interfaces/UserData","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Type Aliases","items":[{"type":"link","label":"AdminForthComponentDeclaration","href":"/docs/api/types/Common/type-aliases/AdminForthComponentDeclaration","docId":"api/types/Common/type-aliases/AdminForthComponentDeclaration","unlisted":false},{"type":"link","label":"AllowedActionsResolved","href":"/docs/api/types/Common/type-aliases/AllowedActionsResolved","docId":"api/types/Common/type-aliases/AllowedActionsResolved","unlisted":false},{"type":"link","label":"AnnouncementBadgeResponse","href":"/docs/api/types/Common/type-aliases/AnnouncementBadgeResponse","docId":"api/types/Common/type-aliases/AnnouncementBadgeResponse","unlisted":false},{"type":"link","label":"ValidationObject","href":"/docs/api/types/Common/type-aliases/ValidationObject","docId":"api/types/Common/type-aliases/ValidationObject","unlisted":false}],"collapsed":false,"collapsible":false}],"collapsed":false,"collapsible":false,"href":"/docs/api/types/Common/"},{"type":"category","label":"FrontendAPI","items":[{"type":"category","label":"Enumerations","items":[{"type":"link","label":"AlertVariant","href":"/docs/api/types/FrontendAPI/enumerations/AlertVariant","docId":"api/types/FrontendAPI/enumerations/AlertVariant","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Interfaces","items":[{"type":"link","label":"FrontendAPIInterface","href":"/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface","docId":"api/types/FrontendAPI/interfaces/FrontendAPIInterface","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Type Aliases","items":[{"type":"link","label":"AlertParams","href":"/docs/api/types/FrontendAPI/type-aliases/AlertParams","docId":"api/types/FrontendAPI/type-aliases/AlertParams","unlisted":false},{"type":"link","label":"ConfirmParams","href":"/docs/api/types/FrontendAPI/type-aliases/ConfirmParams","docId":"api/types/FrontendAPI/type-aliases/ConfirmParams","unlisted":false}],"collapsed":false,"collapsible":false}],"collapsed":false,"collapsible":false,"href":"/docs/api/types/FrontendAPI/"}],"collapsed":false,"collapsible":false}],"collapsed":false,"collapsible":false,"href":"/docs/api/"}]},"docs":{"api/index":{"id":"api/index","title":"TypeDoc API","description":"Modules","sidebar":"apiSidebar"},"api/types/Back/classes/Filters":{"id":"api/types/Back/classes/Filters","title":"Filters","description":"Constructors","sidebar":"apiSidebar"},"api/types/Back/classes/Sorts":{"id":"api/types/Back/classes/Sorts","title":"Sorts","description":"Constructors","sidebar":"apiSidebar"},"api/types/Back/index":{"id":"api/types/Back/index","title":"types/Back","description":"Index","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthBulkAction":{"id":"api/types/Back/interfaces/AdminForthBulkAction","title":"AdminForthBulkAction","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthConfig":{"id":"api/types/Back/interfaces/AdminForthConfig","title":"AdminForthConfig","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthConfigCustomization":{"id":"api/types/Back/interfaces/AdminForthConfigCustomization","title":"AdminForthConfigCustomization","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthForeignResource":{"id":"api/types/Back/interfaces/AdminForthForeignResource","title":"AdminForthForeignResource","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthInputConfig":{"id":"api/types/Back/interfaces/AdminForthInputConfig","title":"AdminForthInputConfig","description":"Main configuration object for AdminForth","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthResource":{"id":"api/types/Back/interfaces/AdminForthResource","title":"AdminForthResource","description":"Resource describes one table or collection in database.","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthResourceColumn":{"id":"api/types/Back/interfaces/AdminForthResourceColumn","title":"AdminForthResourceColumn","description":"Column describes one field in the table or collection in database.","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthResourceInput":{"id":"api/types/Back/interfaces/AdminForthResourceInput","title":"AdminForthResourceInput","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/HttpExtra":{"id":"api/types/Back/interfaces/HttpExtra","title":"HttpExtra","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForth":{"id":"api/types/Back/interfaces/IAdminForth","title":"IAdminForth","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthAuth":{"id":"api/types/Back/interfaces/IAdminForthAuth","title":"IAdminForthAuth","description":"Methods","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthDataSourceConnector":{"id":"api/types/Back/interfaces/IAdminForthDataSourceConnector","title":"IAdminForthDataSourceConnector","description":"Extended by","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthDataSourceConnectorBase":{"id":"api/types/Back/interfaces/IAdminForthDataSourceConnectorBase","title":"IAdminForthDataSourceConnectorBase","description":"Interface that exposes methods to interact with AdminForth in standard way","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor":{"id":"api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor","title":"IAdminForthDataSourceConnectorConstructor","description":"Constructors","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthFilter":{"id":"api/types/Back/interfaces/IAdminForthFilter","title":"IAdminForthFilter","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthHttpResponse":{"id":"api/types/Back/interfaces/IAdminForthHttpResponse","title":"IAdminForthHttpResponse","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthPlugin":{"id":"api/types/Back/interfaces/IAdminForthPlugin","title":"IAdminForthPlugin","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthRestAPI":{"id":"api/types/Back/interfaces/IAdminForthRestAPI","title":"IAdminForthRestAPI","description":"Methods","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthSort":{"id":"api/types/Back/interfaces/IAdminForthSort","title":"IAdminForthSort","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/ICodeInjector":{"id":"api/types/Back/interfaces/ICodeInjector","title":"ICodeInjector","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IConfigValidator":{"id":"api/types/Back/interfaces/IConfigValidator","title":"IConfigValidator","description":"Methods","sidebar":"apiSidebar"},"api/types/Back/interfaces/IExpressHttpServer":{"id":"api/types/Back/interfaces/IExpressHttpServer","title":"IExpressHttpServer","description":"Implement this interface to create custom HTTP server adapter for AdminForth.","sidebar":"apiSidebar"},"api/types/Back/interfaces/IHttpServer":{"id":"api/types/Back/interfaces/IHttpServer","title":"IHttpServer","description":"Implement this interface to create custom HTTP server adapter for AdminForth.","sidebar":"apiSidebar"},"api/types/Back/interfaces/IOperationalResource":{"id":"api/types/Back/interfaces/IOperationalResource","title":"IOperationalResource","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IWebSocketBroker":{"id":"api/types/Back/interfaces/IWebSocketBroker","title":"IWebSocketBroker","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IWebSocketClient":{"id":"api/types/Back/interfaces/IWebSocketClient","title":"IWebSocketClient","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/ResourceOptions":{"id":"api/types/Back/interfaces/ResourceOptions","title":"ResourceOptions","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/ResourceOptionsInput":{"id":"api/types/Back/interfaces/ResourceOptionsInput","title":"ResourceOptionsInput","description":"General options for resource.","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AdminForthDataSource":{"id":"api/types/Back/type-aliases/AdminForthDataSource","title":"AdminForthDataSource","description":"AdminForthDataSource: object","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AfterDataSourceResponseFunction":{"id":"api/types/Back/type-aliases/AfterDataSourceResponseFunction","title":"AfterDataSourceResponseFunction()","description":"AfterDataSourceResponseFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AfterSaveFunction":{"id":"api/types/Back/type-aliases/AfterSaveFunction","title":"AfterSaveFunction()","description":"AfterSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AllowedActions":{"id":"api/types/Back/type-aliases/AllowedActions","title":"AllowedActions","description":"AllowedActions AllowedActionValue }","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AllowedActionsInput":{"id":"api/types/Back/type-aliases/AllowedActionsInput","title":"AllowedActionsInput","description":"AllowedActionsInput AllowedActionValue } & object","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AllowedActionValue":{"id":"api/types/Back/type-aliases/AllowedActionValue","title":"AllowedActionValue","description":"AllowedActionValue: boolean \\\\| ({adminUser, resource, meta, source, adminforth}) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeCreateSaveFunction":{"id":"api/types/Back/type-aliases/BeforeCreateSaveFunction","title":"BeforeCreateSaveFunction()","description":"BeforeCreateSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeDataSourceRequestFunction":{"id":"api/types/Back/type-aliases/BeforeDataSourceRequestFunction","title":"BeforeDataSourceRequestFunction()","description":"BeforeDataSourceRequestFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeLoginConfirmationFunction":{"id":"api/types/Back/type-aliases/BeforeLoginConfirmationFunction","title":"BeforeLoginConfirmationFunction()","description":"BeforeLoginConfirmationFunction: (params?) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeSaveFunction":{"id":"api/types/Back/type-aliases/BeforeSaveFunction","title":"BeforeSaveFunction()","description":"BeforeSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/FDataFilter":{"id":"api/types/Back/type-aliases/FDataFilter","title":"FDataFilter()","description":"FDataFilter: (field, value) => IAdminForthFilter","sidebar":"apiSidebar"},"api/types/Back/type-aliases/FDataSort":{"id":"api/types/Back/type-aliases/FDataSort","title":"FDataSort()","description":"FDataSort: (field, direction) => IAdminForthSort","sidebar":"apiSidebar"},"api/types/Common/enumerations/ActionCheckSource":{"id":"api/types/Common/enumerations/ActionCheckSource","title":"ActionCheckSource","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthDataTypes":{"id":"api/types/Common/enumerations/AdminForthDataTypes","title":"AdminForthDataTypes","description":"Types that are common for both frontend side (SPA) and backend side (server).","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthFilterOperators":{"id":"api/types/Common/enumerations/AdminForthFilterOperators","title":"AdminForthFilterOperators","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthMenuTypes":{"id":"api/types/Common/enumerations/AdminForthMenuTypes","title":"AdminForthMenuTypes","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthResourcePages":{"id":"api/types/Common/enumerations/AdminForthResourcePages","title":"AdminForthResourcePages","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthSortDirections":{"id":"api/types/Common/enumerations/AdminForthSortDirections","title":"AdminForthSortDirections","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AllowedActionsEnum":{"id":"api/types/Common/enumerations/AllowedActionsEnum","title":"AllowedActionsEnum","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/index":{"id":"api/types/Common/index","title":"types/Common","description":"Index","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthBulkActionCommon":{"id":"api/types/Common/interfaces/AdminForthBulkActionCommon","title":"AdminForthBulkActionCommon","description":"Extended by","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthColumnEnumItem":{"id":"api/types/Common/interfaces/AdminForthColumnEnumItem","title":"AdminForthColumnEnumItem","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthComponentDeclarationFull":{"id":"api/types/Common/interfaces/AdminForthComponentDeclarationFull","title":"AdminForthComponentDeclarationFull","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthConfigForFrontend":{"id":"api/types/Common/interfaces/AdminForthConfigForFrontend","title":"AdminForthConfigForFrontend","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthConfigMenuItem":{"id":"api/types/Common/interfaces/AdminForthConfigMenuItem","title":"AdminForthConfigMenuItem","description":"Menu item which displayed in the left sidebar of the admin panel.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthFieldComponents":{"id":"api/types/Common/interfaces/AdminForthFieldComponents","title":"AdminForthFieldComponents","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthForeignResourceCommon":{"id":"api/types/Common/interfaces/AdminForthForeignResourceCommon","title":"AdminForthForeignResourceCommon","description":"Extended by","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthResourceColumnCommon":{"id":"api/types/Common/interfaces/AdminForthResourceColumnCommon","title":"AdminForthResourceColumnCommon","description":"Column describes one field in the table or collection in database.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthResourceColumnInputCommon":{"id":"api/types/Common/interfaces/AdminForthResourceColumnInputCommon","title":"AdminForthResourceColumnInputCommon","description":"Column describes one field in the table or collection in database.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthResourceCommon":{"id":"api/types/Common/interfaces/AdminForthResourceCommon","title":"AdminForthResourceCommon","description":"Resource describes one table or collection in database.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthResourceInputCommon":{"id":"api/types/Common/interfaces/AdminForthResourceInputCommon","title":"AdminForthResourceInputCommon","description":"Resource describes one table or collection in database.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminUser":{"id":"api/types/Common/interfaces/AdminUser","title":"AdminUser","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/GetBaseConfigResponse":{"id":"api/types/Common/interfaces/GetBaseConfigResponse","title":"GetBaseConfigResponse","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/ResourceVeryShort":{"id":"api/types/Common/interfaces/ResourceVeryShort","title":"ResourceVeryShort","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/UserData":{"id":"api/types/Common/interfaces/UserData","title":"UserData","description":"Indexable","sidebar":"apiSidebar"},"api/types/Common/type-aliases/AdminForthComponentDeclaration":{"id":"api/types/Common/type-aliases/AdminForthComponentDeclaration","title":"AdminForthComponentDeclaration","description":"AdminForthComponentDeclaration: AdminForthComponentDeclarationFull \\\\| string","sidebar":"apiSidebar"},"api/types/Common/type-aliases/AllowedActionsResolved":{"id":"api/types/Common/type-aliases/AllowedActionsResolved","title":"AllowedActionsResolved","description":"AllowedActionsResolved boolean }","sidebar":"apiSidebar"},"api/types/Common/type-aliases/AnnouncementBadgeResponse":{"id":"api/types/Common/type-aliases/AnnouncementBadgeResponse","title":"AnnouncementBadgeResponse","description":"AnnouncementBadgeResponse: object","sidebar":"apiSidebar"},"api/types/Common/type-aliases/ValidationObject":{"id":"api/types/Common/type-aliases/ValidationObject","title":"ValidationObject","description":"ValidationObject: object","sidebar":"apiSidebar"},"api/types/FrontendAPI/enumerations/AlertVariant":{"id":"api/types/FrontendAPI/enumerations/AlertVariant","title":"AlertVariant","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/FrontendAPI/index":{"id":"api/types/FrontendAPI/index","title":"types/FrontendAPI","description":"Index","sidebar":"apiSidebar"},"api/types/FrontendAPI/interfaces/FrontendAPIInterface":{"id":"api/types/FrontendAPI/interfaces/FrontendAPIInterface","title":"FrontendAPIInterface","description":"Properties","sidebar":"apiSidebar"},"api/types/FrontendAPI/type-aliases/AlertParams":{"id":"api/types/FrontendAPI/type-aliases/AlertParams","title":"AlertParams","description":"AlertParams: object","sidebar":"apiSidebar"},"api/types/FrontendAPI/type-aliases/ConfirmParams":{"id":"api/types/FrontendAPI/type-aliases/ConfirmParams","title":"ConfirmParams","description":"ConfirmParams: object","sidebar":"apiSidebar"},"tutorial/Advanced/plugin-development":{"id":"tutorial/Advanced/plugin-development","title":"Plugin development guide","description":"Creating a plugin is a powerful way to extend AdminForth functionality.","sidebar":"tutorialSidebar"},"tutorial/Customization/afcl":{"id":"tutorial/Customization/afcl","title":"AdminForth Components Library","description":"ACL is a new set of components which you can use as build blocks.","sidebar":"tutorialSidebar"},"tutorial/Customization/alert":{"id":"tutorial/Customization/alert","title":"Alerts and confirmations","description":"When you are writing custom components or pages you might need to show alerts or confirmations to the user.","sidebar":"tutorialSidebar"},"tutorial/Customization/branding":{"id":"tutorial/Customization/branding","title":"Branding and Theming","description":"The first things you would probably like to change are the logo, favicon and the name of the application.","sidebar":"tutorialSidebar"},"tutorial/Customization/bulkActions":{"id":"tutorial/Customization/bulkActions","title":"Custom bulk actions","description":"You might need to give admin users a feature to perform same action on multiple records at once.","sidebar":"tutorialSidebar"},"tutorial/Customization/customFieldRendering":{"id":"tutorial/Customization/customFieldRendering","title":"Custom record field rendering","description":"Customizing how AdminForth renders the cells with record values","sidebar":"tutorialSidebar"},"tutorial/Customization/customPages":{"id":"tutorial/Customization/customPages","title":"Custom pages","description":"Most Admin Panels should have some Dashboards or custom pages.","sidebar":"tutorialSidebar"},"tutorial/Customization/dataApi":{"id":"tutorial/Customization/dataApi","title":"Data API","description":"AdminForth Data API is a minimal set of methods to manipulate the data in the database.","sidebar":"tutorialSidebar"},"tutorial/Customization/hooks":{"id":"tutorial/Customization/hooks","title":"Hooks","description":"Hooks are used to:","sidebar":"tutorialSidebar"},"tutorial/Customization/limitingAccess":{"id":"tutorial/Customization/limitingAccess","title":"Limiting actions access","description":"Statically disable some action","sidebar":"tutorialSidebar"},"tutorial/Customization/menuConfiguration":{"id":"tutorial/Customization/menuConfiguration","title":"Menu Configuration","description":"Icons","sidebar":"tutorialSidebar"},"tutorial/Customization/pageInjections":{"id":"tutorial/Customization/pageInjections","title":"Page Injections","description":"In addition to ability to create custom pages and overwrite how fields are rendered, you can also inject custom components in standard AdminForth page.","sidebar":"tutorialSidebar"},"tutorial/Customization/security":{"id":"tutorial/Customization/security","title":"Security","description":"Security and privacy if adminforth users is one of the most important aspects of AdminForth.","sidebar":"tutorialSidebar"},"tutorial/Customization/standardPagesTuning":{"id":"tutorial/Customization/standardPagesTuning","title":"Standard pages tuning","description":"Fields Grouping","sidebar":"tutorialSidebar"},"tutorial/Customization/virtualColumns":{"id":"tutorial/Customization/virtualColumns","title":"Virtual columns","description":"Virtual column for show and list","sidebar":"tutorialSidebar"},"tutorial/Customization/websocket":{"id":"tutorial/Customization/websocket","title":"Websocket","description":"AdminForth provide own build-in websocket interface which allows to stream some data to frontend from backend.","sidebar":"tutorialSidebar"},"tutorial/deploy":{"id":"tutorial/deploy","title":"Deploy in Docker","description":"In general you can already run your index.ts file which we created in Getting Started","sidebar":"tutorialSidebar"},"tutorial/gettingStarted":{"id":"tutorial/gettingStarted","title":"Getting Started","description":"This Getting Started Page has some explanations and tables with various field types.","sidebar":"tutorialSidebar"},"tutorial/glossary":{"id":"tutorial/glossary","title":"Glossary","description":"dataSource","sidebar":"tutorialSidebar"},"tutorial/helloWorld":{"id":"tutorial/helloWorld","title":"Hello world app","description":"No water. Pure code to get started ASAP.","sidebar":"tutorialSidebar"},"tutorial/Plugins/AuditLog":{"id":"tutorial/Plugins/AuditLog","title":"AuditLog","description":"AuditLog plugin allows to log all changes in the resources done from the admin panel.","sidebar":"tutorialSidebar"},"tutorial/Plugins/email-password-reset":{"id":"tutorial/Plugins/email-password-reset","title":"Email password reset","description":"Plugin allows to reset password for admin users who forgot their password by sending email with reset link signed with secured JWT token.","sidebar":"tutorialSidebar"},"tutorial/Plugins/ForeignInlineList":{"id":"tutorial/Plugins/ForeignInlineList","title":"ForeignInlineList","description":"Foreign inline list plugin allows to display a list (table) of items from a foreign table in the show view.","sidebar":"tutorialSidebar"},"tutorial/Plugins/i18n":{"id":"tutorial/Plugins/i18n","title":"Internationalization (i18n)","description":"This plugin allows you to translate your AdminForth application to multiple languages.","sidebar":"tutorialSidebar"},"tutorial/Plugins/import-export":{"id":"tutorial/Plugins/import-export","title":"Import-Export","description":"Import-Export is a plugin that allows you to import and export data from and to a CSV file.","sidebar":"tutorialSidebar"},"tutorial/Plugins/open-signup":{"id":"tutorial/Plugins/open-signup","title":"Open Signup","description":"Open Signup plugin allows users to register in adminforth by them-selfs without admin.","sidebar":"tutorialSidebar"},"tutorial/Plugins/RichEditor":{"id":"tutorial/Plugins/RichEditor","title":"Rich editor","description":"Under the hood this plugin uses Quill. Quill is a free, open source WYSIWYG editor built for the modern web.","sidebar":"tutorialSidebar"},"tutorial/Plugins/text-complete":{"id":"tutorial/Plugins/text-complete","title":"Text Complete","description":"This plugin allows you to auto-complete text and string fields using OpenAI Chat GPT models.","sidebar":"tutorialSidebar"},"tutorial/Plugins/TwoFactorsAuth":{"id":"tutorial/Plugins/TwoFactorsAuth","title":"Two-Factor Authentication Plugin","description":"The Two-Factor Authentication Plugin provides an additional layer of security to the application by requiring users to provide a second form of authentication in addition to their password. This plugin supports authenticator apps.","sidebar":"tutorialSidebar"},"tutorial/Plugins/upload":{"id":"tutorial/Plugins/upload","title":"Upload","description":"This plugin allows you to upload files to Amazon S3 bucket.","sidebar":"tutorialSidebar"}}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[2256],{7674:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Getting Started","href":"/docs/tutorial/gettingStarted","docId":"tutorial/gettingStarted","unlisted":false},{"type":"link","label":"Hello world app","href":"/docs/tutorial/helloWorld","docId":"tutorial/helloWorld","unlisted":false},{"type":"link","label":"Glossary","href":"/docs/tutorial/glossary","docId":"tutorial/glossary","unlisted":false},{"type":"category","label":"Customization","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Branding and Theming","href":"/docs/tutorial/Customization/branding","docId":"tutorial/Customization/branding","unlisted":false},{"type":"link","label":"Custom record field rendering","href":"/docs/tutorial/Customization/customFieldRendering","docId":"tutorial/Customization/customFieldRendering","unlisted":false},{"type":"link","label":"Virtual columns","href":"/docs/tutorial/Customization/virtualColumns","docId":"tutorial/Customization/virtualColumns","unlisted":false},{"type":"link","label":"Hooks","href":"/docs/tutorial/Customization/hooks","docId":"tutorial/Customization/hooks","unlisted":false},{"type":"link","label":"Limiting actions access","href":"/docs/tutorial/Customization/limitingAccess","docId":"tutorial/Customization/limitingAccess","unlisted":false},{"type":"link","label":"Custom pages","href":"/docs/tutorial/Customization/customPages","docId":"tutorial/Customization/customPages","unlisted":false},{"type":"link","label":"Alerts and confirmations","href":"/docs/tutorial/Customization/alert","docId":"tutorial/Customization/alert","unlisted":false},{"type":"link","label":"Page Injections","href":"/docs/tutorial/Customization/pageInjections","docId":"tutorial/Customization/pageInjections","unlisted":false},{"type":"link","label":"Custom bulk actions","href":"/docs/tutorial/Customization/bulkActions","docId":"tutorial/Customization/bulkActions","unlisted":false},{"type":"link","label":"Menu Configuration","href":"/docs/tutorial/Customization/menuConfiguration","docId":"tutorial/Customization/menuConfiguration","unlisted":false},{"type":"link","label":"Data API","href":"/docs/tutorial/Customization/dataApi","docId":"tutorial/Customization/dataApi","unlisted":false},{"type":"link","label":"Security","href":"/docs/tutorial/Customization/security","docId":"tutorial/Customization/security","unlisted":false},{"type":"link","label":"Standard pages tuning","href":"/docs/tutorial/Customization/standardPagesTuning","docId":"tutorial/Customization/standardPagesTuning","unlisted":false},{"type":"link","label":"AdminForth Components Library","href":"/docs/tutorial/Customization/afcl","docId":"tutorial/Customization/afcl","unlisted":false},{"type":"link","label":"Websocket","href":"/docs/tutorial/Customization/websocket","docId":"tutorial/Customization/websocket","unlisted":false}]},{"type":"link","label":"Deploy in Docker","href":"/docs/tutorial/deploy","docId":"tutorial/deploy","unlisted":false},{"type":"category","label":"Plugins","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"AuditLog","href":"/docs/tutorial/Plugins/AuditLog","docId":"tutorial/Plugins/AuditLog","unlisted":false},{"type":"link","label":"Two-Factor Authentication Plugin","href":"/docs/tutorial/Plugins/TwoFactorsAuth","docId":"tutorial/Plugins/TwoFactorsAuth","unlisted":false},{"type":"link","label":"ForeignInlineList","href":"/docs/tutorial/Plugins/ForeignInlineList","docId":"tutorial/Plugins/ForeignInlineList","unlisted":false},{"type":"link","label":"Rich editor","href":"/docs/tutorial/Plugins/RichEditor","docId":"tutorial/Plugins/RichEditor","unlisted":false},{"type":"link","label":"Upload","href":"/docs/tutorial/Plugins/upload","docId":"tutorial/Plugins/upload","unlisted":false},{"type":"link","label":"Text Complete","href":"/docs/tutorial/Plugins/text-complete","docId":"tutorial/Plugins/text-complete","unlisted":false},{"type":"link","label":"Email password reset","href":"/docs/tutorial/Plugins/email-password-reset","docId":"tutorial/Plugins/email-password-reset","unlisted":false},{"type":"link","label":"Import-Export","href":"/docs/tutorial/Plugins/import-export","docId":"tutorial/Plugins/import-export","unlisted":false},{"type":"link","label":"Open Signup","href":"/docs/tutorial/Plugins/open-signup","docId":"tutorial/Plugins/open-signup","unlisted":false},{"type":"link","label":"Internationalization (i18n)","href":"/docs/tutorial/Plugins/i18n","docId":"tutorial/Plugins/i18n","unlisted":false}]},{"type":"category","label":"Advanced","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Plugin development guide","href":"/docs/tutorial/Advanced/plugin-development","docId":"tutorial/Advanced/plugin-development","unlisted":false}]}],"apiSidebar":[{"type":"category","label":"API","items":[{"type":"category","label":"types","items":[{"type":"category","label":"Back","items":[{"type":"category","label":"Classes","items":[{"type":"link","label":"Filters","href":"/docs/api/types/Back/classes/Filters","docId":"api/types/Back/classes/Filters","unlisted":false},{"type":"link","label":"Sorts","href":"/docs/api/types/Back/classes/Sorts","docId":"api/types/Back/classes/Sorts","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Interfaces","items":[{"type":"link","label":"AdminForthBulkAction","href":"/docs/api/types/Back/interfaces/AdminForthBulkAction","docId":"api/types/Back/interfaces/AdminForthBulkAction","unlisted":false},{"type":"link","label":"AdminForthConfig","href":"/docs/api/types/Back/interfaces/AdminForthConfig","docId":"api/types/Back/interfaces/AdminForthConfig","unlisted":false},{"type":"link","label":"AdminForthConfigCustomization","href":"/docs/api/types/Back/interfaces/AdminForthConfigCustomization","docId":"api/types/Back/interfaces/AdminForthConfigCustomization","unlisted":false},{"type":"link","label":"AdminForthForeignResource","href":"/docs/api/types/Back/interfaces/AdminForthForeignResource","docId":"api/types/Back/interfaces/AdminForthForeignResource","unlisted":false},{"type":"link","label":"AdminForthInputConfig","href":"/docs/api/types/Back/interfaces/AdminForthInputConfig","docId":"api/types/Back/interfaces/AdminForthInputConfig","unlisted":false},{"type":"link","label":"AdminForthResource","href":"/docs/api/types/Back/interfaces/AdminForthResource","docId":"api/types/Back/interfaces/AdminForthResource","unlisted":false},{"type":"link","label":"AdminForthResourceColumn","href":"/docs/api/types/Back/interfaces/AdminForthResourceColumn","docId":"api/types/Back/interfaces/AdminForthResourceColumn","unlisted":false},{"type":"link","label":"AdminForthResourceInput","href":"/docs/api/types/Back/interfaces/AdminForthResourceInput","docId":"api/types/Back/interfaces/AdminForthResourceInput","unlisted":false},{"type":"link","label":"HttpExtra","href":"/docs/api/types/Back/interfaces/HttpExtra","docId":"api/types/Back/interfaces/HttpExtra","unlisted":false},{"type":"link","label":"IAdminForth","href":"/docs/api/types/Back/interfaces/IAdminForth","docId":"api/types/Back/interfaces/IAdminForth","unlisted":false},{"type":"link","label":"IAdminForthAuth","href":"/docs/api/types/Back/interfaces/IAdminForthAuth","docId":"api/types/Back/interfaces/IAdminForthAuth","unlisted":false},{"type":"link","label":"IAdminForthDataSourceConnector","href":"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnector","docId":"api/types/Back/interfaces/IAdminForthDataSourceConnector","unlisted":false},{"type":"link","label":"IAdminForthDataSourceConnectorBase","href":"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorBase","docId":"api/types/Back/interfaces/IAdminForthDataSourceConnectorBase","unlisted":false},{"type":"link","label":"IAdminForthDataSourceConnectorConstructor","href":"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor","docId":"api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor","unlisted":false},{"type":"link","label":"IAdminForthFilter","href":"/docs/api/types/Back/interfaces/IAdminForthFilter","docId":"api/types/Back/interfaces/IAdminForthFilter","unlisted":false},{"type":"link","label":"IAdminForthHttpResponse","href":"/docs/api/types/Back/interfaces/IAdminForthHttpResponse","docId":"api/types/Back/interfaces/IAdminForthHttpResponse","unlisted":false},{"type":"link","label":"IAdminForthPlugin","href":"/docs/api/types/Back/interfaces/IAdminForthPlugin","docId":"api/types/Back/interfaces/IAdminForthPlugin","unlisted":false},{"type":"link","label":"IAdminForthRestAPI","href":"/docs/api/types/Back/interfaces/IAdminForthRestAPI","docId":"api/types/Back/interfaces/IAdminForthRestAPI","unlisted":false},{"type":"link","label":"IAdminForthSort","href":"/docs/api/types/Back/interfaces/IAdminForthSort","docId":"api/types/Back/interfaces/IAdminForthSort","unlisted":false},{"type":"link","label":"ICodeInjector","href":"/docs/api/types/Back/interfaces/ICodeInjector","docId":"api/types/Back/interfaces/ICodeInjector","unlisted":false},{"type":"link","label":"IConfigValidator","href":"/docs/api/types/Back/interfaces/IConfigValidator","docId":"api/types/Back/interfaces/IConfigValidator","unlisted":false},{"type":"link","label":"IExpressHttpServer","href":"/docs/api/types/Back/interfaces/IExpressHttpServer","docId":"api/types/Back/interfaces/IExpressHttpServer","unlisted":false},{"type":"link","label":"IHttpServer","href":"/docs/api/types/Back/interfaces/IHttpServer","docId":"api/types/Back/interfaces/IHttpServer","unlisted":false},{"type":"link","label":"IOperationalResource","href":"/docs/api/types/Back/interfaces/IOperationalResource","docId":"api/types/Back/interfaces/IOperationalResource","unlisted":false},{"type":"link","label":"IWebSocketBroker","href":"/docs/api/types/Back/interfaces/IWebSocketBroker","docId":"api/types/Back/interfaces/IWebSocketBroker","unlisted":false},{"type":"link","label":"IWebSocketClient","href":"/docs/api/types/Back/interfaces/IWebSocketClient","docId":"api/types/Back/interfaces/IWebSocketClient","unlisted":false},{"type":"link","label":"ResourceOptions","href":"/docs/api/types/Back/interfaces/ResourceOptions","docId":"api/types/Back/interfaces/ResourceOptions","unlisted":false},{"type":"link","label":"ResourceOptionsInput","href":"/docs/api/types/Back/interfaces/ResourceOptionsInput","docId":"api/types/Back/interfaces/ResourceOptionsInput","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Type Aliases","items":[{"type":"link","label":"AdminForthDataSource","href":"/docs/api/types/Back/type-aliases/AdminForthDataSource","docId":"api/types/Back/type-aliases/AdminForthDataSource","unlisted":false},{"type":"link","label":"AfterDataSourceResponseFunction","href":"/docs/api/types/Back/type-aliases/AfterDataSourceResponseFunction","docId":"api/types/Back/type-aliases/AfterDataSourceResponseFunction","unlisted":false},{"type":"link","label":"AfterSaveFunction","href":"/docs/api/types/Back/type-aliases/AfterSaveFunction","docId":"api/types/Back/type-aliases/AfterSaveFunction","unlisted":false},{"type":"link","label":"AllowedActionValue","href":"/docs/api/types/Back/type-aliases/AllowedActionValue","docId":"api/types/Back/type-aliases/AllowedActionValue","unlisted":false},{"type":"link","label":"AllowedActions","href":"/docs/api/types/Back/type-aliases/AllowedActions","docId":"api/types/Back/type-aliases/AllowedActions","unlisted":false},{"type":"link","label":"AllowedActionsInput","href":"/docs/api/types/Back/type-aliases/AllowedActionsInput","docId":"api/types/Back/type-aliases/AllowedActionsInput","unlisted":false},{"type":"link","label":"BeforeCreateSaveFunction","href":"/docs/api/types/Back/type-aliases/BeforeCreateSaveFunction","docId":"api/types/Back/type-aliases/BeforeCreateSaveFunction","unlisted":false},{"type":"link","label":"BeforeDataSourceRequestFunction","href":"/docs/api/types/Back/type-aliases/BeforeDataSourceRequestFunction","docId":"api/types/Back/type-aliases/BeforeDataSourceRequestFunction","unlisted":false},{"type":"link","label":"BeforeLoginConfirmationFunction","href":"/docs/api/types/Back/type-aliases/BeforeLoginConfirmationFunction","docId":"api/types/Back/type-aliases/BeforeLoginConfirmationFunction","unlisted":false},{"type":"link","label":"BeforeSaveFunction","href":"/docs/api/types/Back/type-aliases/BeforeSaveFunction","docId":"api/types/Back/type-aliases/BeforeSaveFunction","unlisted":false},{"type":"link","label":"FDataFilter","href":"/docs/api/types/Back/type-aliases/FDataFilter","docId":"api/types/Back/type-aliases/FDataFilter","unlisted":false},{"type":"link","label":"FDataSort","href":"/docs/api/types/Back/type-aliases/FDataSort","docId":"api/types/Back/type-aliases/FDataSort","unlisted":false}],"collapsed":false,"collapsible":false}],"collapsed":false,"collapsible":false,"href":"/docs/api/types/Back/"},{"type":"category","label":"Common","items":[{"type":"category","label":"Enumerations","items":[{"type":"link","label":"ActionCheckSource","href":"/docs/api/types/Common/enumerations/ActionCheckSource","docId":"api/types/Common/enumerations/ActionCheckSource","unlisted":false},{"type":"link","label":"AdminForthDataTypes","href":"/docs/api/types/Common/enumerations/AdminForthDataTypes","docId":"api/types/Common/enumerations/AdminForthDataTypes","unlisted":false},{"type":"link","label":"AdminForthFilterOperators","href":"/docs/api/types/Common/enumerations/AdminForthFilterOperators","docId":"api/types/Common/enumerations/AdminForthFilterOperators","unlisted":false},{"type":"link","label":"AdminForthMenuTypes","href":"/docs/api/types/Common/enumerations/AdminForthMenuTypes","docId":"api/types/Common/enumerations/AdminForthMenuTypes","unlisted":false},{"type":"link","label":"AdminForthResourcePages","href":"/docs/api/types/Common/enumerations/AdminForthResourcePages","docId":"api/types/Common/enumerations/AdminForthResourcePages","unlisted":false},{"type":"link","label":"AdminForthSortDirections","href":"/docs/api/types/Common/enumerations/AdminForthSortDirections","docId":"api/types/Common/enumerations/AdminForthSortDirections","unlisted":false},{"type":"link","label":"AllowedActionsEnum","href":"/docs/api/types/Common/enumerations/AllowedActionsEnum","docId":"api/types/Common/enumerations/AllowedActionsEnum","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Interfaces","items":[{"type":"link","label":"AdminForthBulkActionCommon","href":"/docs/api/types/Common/interfaces/AdminForthBulkActionCommon","docId":"api/types/Common/interfaces/AdminForthBulkActionCommon","unlisted":false},{"type":"link","label":"AdminForthColumnEnumItem","href":"/docs/api/types/Common/interfaces/AdminForthColumnEnumItem","docId":"api/types/Common/interfaces/AdminForthColumnEnumItem","unlisted":false},{"type":"link","label":"AdminForthComponentDeclarationFull","href":"/docs/api/types/Common/interfaces/AdminForthComponentDeclarationFull","docId":"api/types/Common/interfaces/AdminForthComponentDeclarationFull","unlisted":false},{"type":"link","label":"AdminForthConfigForFrontend","href":"/docs/api/types/Common/interfaces/AdminForthConfigForFrontend","docId":"api/types/Common/interfaces/AdminForthConfigForFrontend","unlisted":false},{"type":"link","label":"AdminForthConfigMenuItem","href":"/docs/api/types/Common/interfaces/AdminForthConfigMenuItem","docId":"api/types/Common/interfaces/AdminForthConfigMenuItem","unlisted":false},{"type":"link","label":"AdminForthFieldComponents","href":"/docs/api/types/Common/interfaces/AdminForthFieldComponents","docId":"api/types/Common/interfaces/AdminForthFieldComponents","unlisted":false},{"type":"link","label":"AdminForthForeignResourceCommon","href":"/docs/api/types/Common/interfaces/AdminForthForeignResourceCommon","docId":"api/types/Common/interfaces/AdminForthForeignResourceCommon","unlisted":false},{"type":"link","label":"AdminForthResourceColumnCommon","href":"/docs/api/types/Common/interfaces/AdminForthResourceColumnCommon","docId":"api/types/Common/interfaces/AdminForthResourceColumnCommon","unlisted":false},{"type":"link","label":"AdminForthResourceColumnInputCommon","href":"/docs/api/types/Common/interfaces/AdminForthResourceColumnInputCommon","docId":"api/types/Common/interfaces/AdminForthResourceColumnInputCommon","unlisted":false},{"type":"link","label":"AdminForthResourceCommon","href":"/docs/api/types/Common/interfaces/AdminForthResourceCommon","docId":"api/types/Common/interfaces/AdminForthResourceCommon","unlisted":false},{"type":"link","label":"AdminForthResourceInputCommon","href":"/docs/api/types/Common/interfaces/AdminForthResourceInputCommon","docId":"api/types/Common/interfaces/AdminForthResourceInputCommon","unlisted":false},{"type":"link","label":"AdminUser","href":"/docs/api/types/Common/interfaces/AdminUser","docId":"api/types/Common/interfaces/AdminUser","unlisted":false},{"type":"link","label":"GetBaseConfigResponse","href":"/docs/api/types/Common/interfaces/GetBaseConfigResponse","docId":"api/types/Common/interfaces/GetBaseConfigResponse","unlisted":false},{"type":"link","label":"ResourceVeryShort","href":"/docs/api/types/Common/interfaces/ResourceVeryShort","docId":"api/types/Common/interfaces/ResourceVeryShort","unlisted":false},{"type":"link","label":"UserData","href":"/docs/api/types/Common/interfaces/UserData","docId":"api/types/Common/interfaces/UserData","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Type Aliases","items":[{"type":"link","label":"AdminForthComponentDeclaration","href":"/docs/api/types/Common/type-aliases/AdminForthComponentDeclaration","docId":"api/types/Common/type-aliases/AdminForthComponentDeclaration","unlisted":false},{"type":"link","label":"AllowedActionsResolved","href":"/docs/api/types/Common/type-aliases/AllowedActionsResolved","docId":"api/types/Common/type-aliases/AllowedActionsResolved","unlisted":false},{"type":"link","label":"AnnouncementBadgeResponse","href":"/docs/api/types/Common/type-aliases/AnnouncementBadgeResponse","docId":"api/types/Common/type-aliases/AnnouncementBadgeResponse","unlisted":false},{"type":"link","label":"ValidationObject","href":"/docs/api/types/Common/type-aliases/ValidationObject","docId":"api/types/Common/type-aliases/ValidationObject","unlisted":false}],"collapsed":false,"collapsible":false}],"collapsed":false,"collapsible":false,"href":"/docs/api/types/Common/"},{"type":"category","label":"FrontendAPI","items":[{"type":"category","label":"Enumerations","items":[{"type":"link","label":"AlertVariant","href":"/docs/api/types/FrontendAPI/enumerations/AlertVariant","docId":"api/types/FrontendAPI/enumerations/AlertVariant","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Interfaces","items":[{"type":"link","label":"FrontendAPIInterface","href":"/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface","docId":"api/types/FrontendAPI/interfaces/FrontendAPIInterface","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Type Aliases","items":[{"type":"link","label":"AlertParams","href":"/docs/api/types/FrontendAPI/type-aliases/AlertParams","docId":"api/types/FrontendAPI/type-aliases/AlertParams","unlisted":false},{"type":"link","label":"ConfirmParams","href":"/docs/api/types/FrontendAPI/type-aliases/ConfirmParams","docId":"api/types/FrontendAPI/type-aliases/ConfirmParams","unlisted":false}],"collapsed":false,"collapsible":false}],"collapsed":false,"collapsible":false,"href":"/docs/api/types/FrontendAPI/"}],"collapsed":false,"collapsible":false}],"collapsed":false,"collapsible":false,"href":"/docs/api/"}]},"docs":{"api/index":{"id":"api/index","title":"TypeDoc API","description":"Modules","sidebar":"apiSidebar"},"api/types/Back/classes/Filters":{"id":"api/types/Back/classes/Filters","title":"Filters","description":"Constructors","sidebar":"apiSidebar"},"api/types/Back/classes/Sorts":{"id":"api/types/Back/classes/Sorts","title":"Sorts","description":"Constructors","sidebar":"apiSidebar"},"api/types/Back/index":{"id":"api/types/Back/index","title":"types/Back","description":"Index","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthBulkAction":{"id":"api/types/Back/interfaces/AdminForthBulkAction","title":"AdminForthBulkAction","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthConfig":{"id":"api/types/Back/interfaces/AdminForthConfig","title":"AdminForthConfig","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthConfigCustomization":{"id":"api/types/Back/interfaces/AdminForthConfigCustomization","title":"AdminForthConfigCustomization","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthForeignResource":{"id":"api/types/Back/interfaces/AdminForthForeignResource","title":"AdminForthForeignResource","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthInputConfig":{"id":"api/types/Back/interfaces/AdminForthInputConfig","title":"AdminForthInputConfig","description":"Main configuration object for AdminForth","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthResource":{"id":"api/types/Back/interfaces/AdminForthResource","title":"AdminForthResource","description":"Resource describes one table or collection in database.","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthResourceColumn":{"id":"api/types/Back/interfaces/AdminForthResourceColumn","title":"AdminForthResourceColumn","description":"Column describes one field in the table or collection in database.","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthResourceInput":{"id":"api/types/Back/interfaces/AdminForthResourceInput","title":"AdminForthResourceInput","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/HttpExtra":{"id":"api/types/Back/interfaces/HttpExtra","title":"HttpExtra","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForth":{"id":"api/types/Back/interfaces/IAdminForth","title":"IAdminForth","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthAuth":{"id":"api/types/Back/interfaces/IAdminForthAuth","title":"IAdminForthAuth","description":"Methods","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthDataSourceConnector":{"id":"api/types/Back/interfaces/IAdminForthDataSourceConnector","title":"IAdminForthDataSourceConnector","description":"Extended by","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthDataSourceConnectorBase":{"id":"api/types/Back/interfaces/IAdminForthDataSourceConnectorBase","title":"IAdminForthDataSourceConnectorBase","description":"Interface that exposes methods to interact with AdminForth in standard way","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor":{"id":"api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor","title":"IAdminForthDataSourceConnectorConstructor","description":"Constructors","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthFilter":{"id":"api/types/Back/interfaces/IAdminForthFilter","title":"IAdminForthFilter","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthHttpResponse":{"id":"api/types/Back/interfaces/IAdminForthHttpResponse","title":"IAdminForthHttpResponse","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthPlugin":{"id":"api/types/Back/interfaces/IAdminForthPlugin","title":"IAdminForthPlugin","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthRestAPI":{"id":"api/types/Back/interfaces/IAdminForthRestAPI","title":"IAdminForthRestAPI","description":"Methods","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthSort":{"id":"api/types/Back/interfaces/IAdminForthSort","title":"IAdminForthSort","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/ICodeInjector":{"id":"api/types/Back/interfaces/ICodeInjector","title":"ICodeInjector","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IConfigValidator":{"id":"api/types/Back/interfaces/IConfigValidator","title":"IConfigValidator","description":"Methods","sidebar":"apiSidebar"},"api/types/Back/interfaces/IExpressHttpServer":{"id":"api/types/Back/interfaces/IExpressHttpServer","title":"IExpressHttpServer","description":"Implement this interface to create custom HTTP server adapter for AdminForth.","sidebar":"apiSidebar"},"api/types/Back/interfaces/IHttpServer":{"id":"api/types/Back/interfaces/IHttpServer","title":"IHttpServer","description":"Implement this interface to create custom HTTP server adapter for AdminForth.","sidebar":"apiSidebar"},"api/types/Back/interfaces/IOperationalResource":{"id":"api/types/Back/interfaces/IOperationalResource","title":"IOperationalResource","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IWebSocketBroker":{"id":"api/types/Back/interfaces/IWebSocketBroker","title":"IWebSocketBroker","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IWebSocketClient":{"id":"api/types/Back/interfaces/IWebSocketClient","title":"IWebSocketClient","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/ResourceOptions":{"id":"api/types/Back/interfaces/ResourceOptions","title":"ResourceOptions","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/ResourceOptionsInput":{"id":"api/types/Back/interfaces/ResourceOptionsInput","title":"ResourceOptionsInput","description":"General options for resource.","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AdminForthDataSource":{"id":"api/types/Back/type-aliases/AdminForthDataSource","title":"AdminForthDataSource","description":"AdminForthDataSource: object","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AfterDataSourceResponseFunction":{"id":"api/types/Back/type-aliases/AfterDataSourceResponseFunction","title":"AfterDataSourceResponseFunction()","description":"AfterDataSourceResponseFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AfterSaveFunction":{"id":"api/types/Back/type-aliases/AfterSaveFunction","title":"AfterSaveFunction()","description":"AfterSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AllowedActions":{"id":"api/types/Back/type-aliases/AllowedActions","title":"AllowedActions","description":"AllowedActions AllowedActionValue }","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AllowedActionsInput":{"id":"api/types/Back/type-aliases/AllowedActionsInput","title":"AllowedActionsInput","description":"AllowedActionsInput AllowedActionValue } & object","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AllowedActionValue":{"id":"api/types/Back/type-aliases/AllowedActionValue","title":"AllowedActionValue","description":"AllowedActionValue: boolean \\\\| ({adminUser, resource, meta, source, adminforth}) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeCreateSaveFunction":{"id":"api/types/Back/type-aliases/BeforeCreateSaveFunction","title":"BeforeCreateSaveFunction()","description":"BeforeCreateSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeDataSourceRequestFunction":{"id":"api/types/Back/type-aliases/BeforeDataSourceRequestFunction","title":"BeforeDataSourceRequestFunction()","description":"BeforeDataSourceRequestFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeLoginConfirmationFunction":{"id":"api/types/Back/type-aliases/BeforeLoginConfirmationFunction","title":"BeforeLoginConfirmationFunction()","description":"BeforeLoginConfirmationFunction: (params?) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeSaveFunction":{"id":"api/types/Back/type-aliases/BeforeSaveFunction","title":"BeforeSaveFunction()","description":"BeforeSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/FDataFilter":{"id":"api/types/Back/type-aliases/FDataFilter","title":"FDataFilter()","description":"FDataFilter: (field, value) => IAdminForthFilter","sidebar":"apiSidebar"},"api/types/Back/type-aliases/FDataSort":{"id":"api/types/Back/type-aliases/FDataSort","title":"FDataSort()","description":"FDataSort: (field, direction) => IAdminForthSort","sidebar":"apiSidebar"},"api/types/Common/enumerations/ActionCheckSource":{"id":"api/types/Common/enumerations/ActionCheckSource","title":"ActionCheckSource","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthDataTypes":{"id":"api/types/Common/enumerations/AdminForthDataTypes","title":"AdminForthDataTypes","description":"Types that are common for both frontend side (SPA) and backend side (server).","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthFilterOperators":{"id":"api/types/Common/enumerations/AdminForthFilterOperators","title":"AdminForthFilterOperators","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthMenuTypes":{"id":"api/types/Common/enumerations/AdminForthMenuTypes","title":"AdminForthMenuTypes","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthResourcePages":{"id":"api/types/Common/enumerations/AdminForthResourcePages","title":"AdminForthResourcePages","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthSortDirections":{"id":"api/types/Common/enumerations/AdminForthSortDirections","title":"AdminForthSortDirections","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AllowedActionsEnum":{"id":"api/types/Common/enumerations/AllowedActionsEnum","title":"AllowedActionsEnum","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/index":{"id":"api/types/Common/index","title":"types/Common","description":"Index","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthBulkActionCommon":{"id":"api/types/Common/interfaces/AdminForthBulkActionCommon","title":"AdminForthBulkActionCommon","description":"Extended by","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthColumnEnumItem":{"id":"api/types/Common/interfaces/AdminForthColumnEnumItem","title":"AdminForthColumnEnumItem","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthComponentDeclarationFull":{"id":"api/types/Common/interfaces/AdminForthComponentDeclarationFull","title":"AdminForthComponentDeclarationFull","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthConfigForFrontend":{"id":"api/types/Common/interfaces/AdminForthConfigForFrontend","title":"AdminForthConfigForFrontend","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthConfigMenuItem":{"id":"api/types/Common/interfaces/AdminForthConfigMenuItem","title":"AdminForthConfigMenuItem","description":"Menu item which displayed in the left sidebar of the admin panel.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthFieldComponents":{"id":"api/types/Common/interfaces/AdminForthFieldComponents","title":"AdminForthFieldComponents","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthForeignResourceCommon":{"id":"api/types/Common/interfaces/AdminForthForeignResourceCommon","title":"AdminForthForeignResourceCommon","description":"Extended by","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthResourceColumnCommon":{"id":"api/types/Common/interfaces/AdminForthResourceColumnCommon","title":"AdminForthResourceColumnCommon","description":"Column describes one field in the table or collection in database.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthResourceColumnInputCommon":{"id":"api/types/Common/interfaces/AdminForthResourceColumnInputCommon","title":"AdminForthResourceColumnInputCommon","description":"Column describes one field in the table or collection in database.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthResourceCommon":{"id":"api/types/Common/interfaces/AdminForthResourceCommon","title":"AdminForthResourceCommon","description":"Resource describes one table or collection in database.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthResourceInputCommon":{"id":"api/types/Common/interfaces/AdminForthResourceInputCommon","title":"AdminForthResourceInputCommon","description":"Resource describes one table or collection in database.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminUser":{"id":"api/types/Common/interfaces/AdminUser","title":"AdminUser","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/GetBaseConfigResponse":{"id":"api/types/Common/interfaces/GetBaseConfigResponse","title":"GetBaseConfigResponse","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/ResourceVeryShort":{"id":"api/types/Common/interfaces/ResourceVeryShort","title":"ResourceVeryShort","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/UserData":{"id":"api/types/Common/interfaces/UserData","title":"UserData","description":"Indexable","sidebar":"apiSidebar"},"api/types/Common/type-aliases/AdminForthComponentDeclaration":{"id":"api/types/Common/type-aliases/AdminForthComponentDeclaration","title":"AdminForthComponentDeclaration","description":"AdminForthComponentDeclaration: AdminForthComponentDeclarationFull \\\\| string","sidebar":"apiSidebar"},"api/types/Common/type-aliases/AllowedActionsResolved":{"id":"api/types/Common/type-aliases/AllowedActionsResolved","title":"AllowedActionsResolved","description":"AllowedActionsResolved boolean }","sidebar":"apiSidebar"},"api/types/Common/type-aliases/AnnouncementBadgeResponse":{"id":"api/types/Common/type-aliases/AnnouncementBadgeResponse","title":"AnnouncementBadgeResponse","description":"AnnouncementBadgeResponse: object","sidebar":"apiSidebar"},"api/types/Common/type-aliases/ValidationObject":{"id":"api/types/Common/type-aliases/ValidationObject","title":"ValidationObject","description":"ValidationObject: object","sidebar":"apiSidebar"},"api/types/FrontendAPI/enumerations/AlertVariant":{"id":"api/types/FrontendAPI/enumerations/AlertVariant","title":"AlertVariant","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/FrontendAPI/index":{"id":"api/types/FrontendAPI/index","title":"types/FrontendAPI","description":"Index","sidebar":"apiSidebar"},"api/types/FrontendAPI/interfaces/FrontendAPIInterface":{"id":"api/types/FrontendAPI/interfaces/FrontendAPIInterface","title":"FrontendAPIInterface","description":"Properties","sidebar":"apiSidebar"},"api/types/FrontendAPI/type-aliases/AlertParams":{"id":"api/types/FrontendAPI/type-aliases/AlertParams","title":"AlertParams","description":"AlertParams: object","sidebar":"apiSidebar"},"api/types/FrontendAPI/type-aliases/ConfirmParams":{"id":"api/types/FrontendAPI/type-aliases/ConfirmParams","title":"ConfirmParams","description":"ConfirmParams: object","sidebar":"apiSidebar"},"tutorial/Advanced/plugin-development":{"id":"tutorial/Advanced/plugin-development","title":"Plugin development guide","description":"Creating a plugin is a powerful way to extend AdminForth functionality.","sidebar":"tutorialSidebar"},"tutorial/Customization/afcl":{"id":"tutorial/Customization/afcl","title":"AdminForth Components Library","description":"ACL is a new set of components which you can use as build blocks.","sidebar":"tutorialSidebar"},"tutorial/Customization/alert":{"id":"tutorial/Customization/alert","title":"Alerts and confirmations","description":"When you are writing custom components or pages you might need to show alerts or confirmations to the user.","sidebar":"tutorialSidebar"},"tutorial/Customization/branding":{"id":"tutorial/Customization/branding","title":"Branding and Theming","description":"The first things you would probably like to change are the logo, favicon and the name of the application.","sidebar":"tutorialSidebar"},"tutorial/Customization/bulkActions":{"id":"tutorial/Customization/bulkActions","title":"Custom bulk actions","description":"You might need to give admin users a feature to perform same action on multiple records at once.","sidebar":"tutorialSidebar"},"tutorial/Customization/customFieldRendering":{"id":"tutorial/Customization/customFieldRendering","title":"Custom record field rendering","description":"Customizing how AdminForth renders the cells with record values","sidebar":"tutorialSidebar"},"tutorial/Customization/customPages":{"id":"tutorial/Customization/customPages","title":"Custom pages","description":"Most Admin Panels should have some Dashboards or custom pages.","sidebar":"tutorialSidebar"},"tutorial/Customization/dataApi":{"id":"tutorial/Customization/dataApi","title":"Data API","description":"AdminForth Data API is a minimal set of methods to manipulate the data in the database.","sidebar":"tutorialSidebar"},"tutorial/Customization/hooks":{"id":"tutorial/Customization/hooks","title":"Hooks","description":"Hooks are used to:","sidebar":"tutorialSidebar"},"tutorial/Customization/limitingAccess":{"id":"tutorial/Customization/limitingAccess","title":"Limiting actions access","description":"Statically disable some action","sidebar":"tutorialSidebar"},"tutorial/Customization/menuConfiguration":{"id":"tutorial/Customization/menuConfiguration","title":"Menu Configuration","description":"Icons","sidebar":"tutorialSidebar"},"tutorial/Customization/pageInjections":{"id":"tutorial/Customization/pageInjections","title":"Page Injections","description":"In addition to ability to create custom pages and overwrite how fields are rendered, you can also inject custom components in standard AdminForth page.","sidebar":"tutorialSidebar"},"tutorial/Customization/security":{"id":"tutorial/Customization/security","title":"Security","description":"Security and privacy if adminforth users is one of the most important aspects of AdminForth.","sidebar":"tutorialSidebar"},"tutorial/Customization/standardPagesTuning":{"id":"tutorial/Customization/standardPagesTuning","title":"Standard pages tuning","description":"Fields Grouping","sidebar":"tutorialSidebar"},"tutorial/Customization/virtualColumns":{"id":"tutorial/Customization/virtualColumns","title":"Virtual columns","description":"Virtual column for show and list","sidebar":"tutorialSidebar"},"tutorial/Customization/websocket":{"id":"tutorial/Customization/websocket","title":"Websocket","description":"AdminForth provide own build-in websocket interface which allows to stream some data to frontend from backend.","sidebar":"tutorialSidebar"},"tutorial/deploy":{"id":"tutorial/deploy","title":"Deploy in Docker","description":"In general you can already run your index.ts file which we created in Getting Started","sidebar":"tutorialSidebar"},"tutorial/gettingStarted":{"id":"tutorial/gettingStarted","title":"Getting Started","description":"This Getting Started Page has some explanations and tables with various field types.","sidebar":"tutorialSidebar"},"tutorial/glossary":{"id":"tutorial/glossary","title":"Glossary","description":"dataSource","sidebar":"tutorialSidebar"},"tutorial/helloWorld":{"id":"tutorial/helloWorld","title":"Hello world app","description":"No water. Pure code to get started ASAP.","sidebar":"tutorialSidebar"},"tutorial/Plugins/AuditLog":{"id":"tutorial/Plugins/AuditLog","title":"AuditLog","description":"AuditLog plugin allows to log all changes in the resources done from the admin panel.","sidebar":"tutorialSidebar"},"tutorial/Plugins/email-password-reset":{"id":"tutorial/Plugins/email-password-reset","title":"Email password reset","description":"Plugin allows to reset password for admin users who forgot their password by sending email with reset link signed with secured JWT token.","sidebar":"tutorialSidebar"},"tutorial/Plugins/ForeignInlineList":{"id":"tutorial/Plugins/ForeignInlineList","title":"ForeignInlineList","description":"Foreign inline list plugin allows to display a list (table) of items from a foreign table in the show view.","sidebar":"tutorialSidebar"},"tutorial/Plugins/i18n":{"id":"tutorial/Plugins/i18n","title":"Internationalization (i18n)","description":"This plugin allows you translate your AdminForth application to multiple languages.","sidebar":"tutorialSidebar"},"tutorial/Plugins/import-export":{"id":"tutorial/Plugins/import-export","title":"Import-Export","description":"Import-Export is a plugin that allows you to import and export data from and to a CSV file.","sidebar":"tutorialSidebar"},"tutorial/Plugins/open-signup":{"id":"tutorial/Plugins/open-signup","title":"Open Signup","description":"Open Signup plugin allows users to register in adminforth by them-selfs without admin.","sidebar":"tutorialSidebar"},"tutorial/Plugins/RichEditor":{"id":"tutorial/Plugins/RichEditor","title":"Rich editor","description":"Under the hood this plugin uses Quill. Quill is a free, open source WYSIWYG editor built for the modern web.","sidebar":"tutorialSidebar"},"tutorial/Plugins/text-complete":{"id":"tutorial/Plugins/text-complete","title":"Text Complete","description":"This plugin allows you to auto-complete text and string fields using OpenAI Chat GPT models.","sidebar":"tutorialSidebar"},"tutorial/Plugins/TwoFactorsAuth":{"id":"tutorial/Plugins/TwoFactorsAuth","title":"Two-Factor Authentication Plugin","description":"The Two-Factor Authentication Plugin provides an additional layer of security to the application by requiring users to provide a second form of authentication in addition to their password. This plugin supports authenticator apps.","sidebar":"tutorialSidebar"},"tutorial/Plugins/upload":{"id":"tutorial/Plugins/upload","title":"Upload","description":"This plugin allows you to upload files to Amazon S3 bucket.","sidebar":"tutorialSidebar"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/485ec31e.450e51cc.js b/assets/js/485ec31e.450e51cc.js deleted file mode 100644 index 4b7ab8c13..000000000 --- a/assets/js/485ec31e.450e51cc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[381],{168:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>r,toc:()=>l});var a=t(4848),s=t(8453);const i={},o="Custom pages",r={id:"tutorial/Customization/customPages",title:"Custom pages",description:"Most Admin Panels should have some Dashboards or custom pages.",source:"@site/docs/tutorial/03-Customization/06-customPages.md",sourceDirName:"tutorial/03-Customization",slug:"/tutorial/Customization/customPages",permalink:"/docs/tutorial/Customization/customPages",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Limiting actions access",permalink:"/docs/tutorial/Customization/limitingAccess"},next:{title:"Alerts and confirmations",permalink:"/docs/tutorial/Customization/alert"}},d={},l=[{value:"Defining custom API for own page and components",id:"defining-custom-api-for-own-page-and-components",level:2}];function c(n){const e={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",img:"img",p:"p",pre:"pre",...(0,s.R)(),...n.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(e.h1,{id:"custom-pages",children:"Custom pages"}),"\n",(0,a.jsx)(e.p,{children:"Most Admin Panels should have some Dashboards or custom pages."}),"\n",(0,a.jsx)(e.p,{children:"In AdminForth creation of custom page is very simple."}),"\n",(0,a.jsxs)(e.p,{children:["To add custom package to SPA bundle you have to initialize npm in ",(0,a.jsx)(e.code,{children:"custom"})," directory and install required packages:"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-bash",children:"cd ./custom\nnpm init -y\nnpm install apexcharts --save-dev\n"})}),"\n",(0,a.jsxs)(e.blockquote,{children:["\n",(0,a.jsxs)(e.p,{children:["\ud83d\udc46 Note: for better development experience we recommend to create file ",(0,a.jsx)(e.code,{children:"custom/tsconfig.json"})," with the following content:"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-json",children:'{\n "compilerOptions": {\n "baseUrl": ".",\n "paths": {\n "@/*": [\n "../node_modules/adminforth/dist/spa/src/*"\n ],\n "*": [\n "../node_modules/adminforth/dist/spa/node_modules/*"\n ],\n "@@/*": [\n "."\n ]\n }\n }\n}\n'})}),"\n"]}),"\n",(0,a.jsxs)(e.p,{children:["Create a Vue component in the ",(0,a.jsx)(e.code,{children:"custom"})," directory of your project, e.g. ",(0,a.jsx)(e.code,{children:"Dashboard.vue"}),":"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-html",metastring:'title="./custom/Dashboard.vue"',children:'\n\n - + diff --git a/blog/archive/index.html b/blog/archive/index.html index 99a9751c4..8ed1da6b6 100644 --- a/blog/archive/index.html +++ b/blog/archive/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/backup-database-to-aws-glacier/index.html b/blog/backup-database-to-aws-glacier/index.html index e4231c563..10a665184 100644 --- a/blog/backup-database-to-aws-glacier/index.html +++ b/blog/backup-database-to-aws-glacier/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/chatgpt-plugin/index.html b/blog/chatgpt-plugin/index.html index d07fc9571..7a0df0dba 100644 --- a/blog/chatgpt-plugin/index.html +++ b/blog/chatgpt-plugin/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/compose-ec2-deployment-github-actions/index.html b/blog/compose-ec2-deployment-github-actions/index.html index 6b082f61a..90179467a 100644 --- a/blog/compose-ec2-deployment-github-actions/index.html +++ b/blog/compose-ec2-deployment-github-actions/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/compose-ec2-deployment/index.html b/blog/compose-ec2-deployment/index.html index 78210677e..c8a315edb 100644 --- a/blog/compose-ec2-deployment/index.html +++ b/blog/compose-ec2-deployment/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/index.html b/blog/index.html index 21864ef24..e622cc8aa 100644 --- a/blog/index.html +++ b/blog/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/tags/aws/index.html b/blog/tags/aws/index.html index 58b8f5dc5..af54a77af 100644 --- a/blog/tags/aws/index.html +++ b/blog/tags/aws/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/tags/chatgpt/index.html b/blog/tags/chatgpt/index.html index 264b8cc28..11d855f88 100644 --- a/blog/tags/chatgpt/index.html +++ b/blog/tags/chatgpt/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/tags/github-actions/index.html b/blog/tags/github-actions/index.html index 632d18af5..a5884562e 100644 --- a/blog/tags/github-actions/index.html +++ b/blog/tags/github-actions/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/tags/index.html b/blog/tags/index.html index 0cd57a95e..32874a8a2 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/tags/nuxt/index.html b/blog/tags/nuxt/index.html index 181139a88..23692198b 100644 --- a/blog/tags/nuxt/index.html +++ b/blog/tags/nuxt/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/tags/plugin/index.html b/blog/tags/plugin/index.html index 977f16c2b..4624a4b6a 100644 --- a/blog/tags/plugin/index.html +++ b/blog/tags/plugin/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/tags/terraform/index.html b/blog/tags/terraform/index.html index 55fcf338e..33854479b 100644 --- a/blog/tags/terraform/index.html +++ b/blog/tags/terraform/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/index.html b/docs/api/index.html index 09babda1d..1b5dca172 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/classes/Filters/index.html b/docs/api/types/Back/classes/Filters/index.html index aaf103eb4..26b5fa689 100644 --- a/docs/api/types/Back/classes/Filters/index.html +++ b/docs/api/types/Back/classes/Filters/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/classes/Sorts/index.html b/docs/api/types/Back/classes/Sorts/index.html index 9c9d094f6..6a1dc1ff6 100644 --- a/docs/api/types/Back/classes/Sorts/index.html +++ b/docs/api/types/Back/classes/Sorts/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/index.html b/docs/api/types/Back/index.html index 962d6391d..0f4682964 100644 --- a/docs/api/types/Back/index.html +++ b/docs/api/types/Back/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/AdminForthBulkAction/index.html b/docs/api/types/Back/interfaces/AdminForthBulkAction/index.html index 481f8d1bc..46c35d49c 100644 --- a/docs/api/types/Back/interfaces/AdminForthBulkAction/index.html +++ b/docs/api/types/Back/interfaces/AdminForthBulkAction/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/AdminForthConfig/index.html b/docs/api/types/Back/interfaces/AdminForthConfig/index.html index b875e3dcc..f7b4d27d3 100644 --- a/docs/api/types/Back/interfaces/AdminForthConfig/index.html +++ b/docs/api/types/Back/interfaces/AdminForthConfig/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/AdminForthConfigCustomization/index.html b/docs/api/types/Back/interfaces/AdminForthConfigCustomization/index.html index f9ca0be8d..8191f39ed 100644 --- a/docs/api/types/Back/interfaces/AdminForthConfigCustomization/index.html +++ b/docs/api/types/Back/interfaces/AdminForthConfigCustomization/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/AdminForthForeignResource/index.html b/docs/api/types/Back/interfaces/AdminForthForeignResource/index.html index 99a97a68e..be42018b5 100644 --- a/docs/api/types/Back/interfaces/AdminForthForeignResource/index.html +++ b/docs/api/types/Back/interfaces/AdminForthForeignResource/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/AdminForthInputConfig/index.html b/docs/api/types/Back/interfaces/AdminForthInputConfig/index.html index 30a13cfa8..fcbf54a88 100644 --- a/docs/api/types/Back/interfaces/AdminForthInputConfig/index.html +++ b/docs/api/types/Back/interfaces/AdminForthInputConfig/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/AdminForthResource/index.html b/docs/api/types/Back/interfaces/AdminForthResource/index.html index 4ad7cc45c..1b33394ac 100644 --- a/docs/api/types/Back/interfaces/AdminForthResource/index.html +++ b/docs/api/types/Back/interfaces/AdminForthResource/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/AdminForthResourceColumn/index.html b/docs/api/types/Back/interfaces/AdminForthResourceColumn/index.html index 2d45f011f..fef72a3e0 100644 --- a/docs/api/types/Back/interfaces/AdminForthResourceColumn/index.html +++ b/docs/api/types/Back/interfaces/AdminForthResourceColumn/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/AdminForthResourceInput/index.html b/docs/api/types/Back/interfaces/AdminForthResourceInput/index.html index 3e1f08434..03467fa4c 100644 --- a/docs/api/types/Back/interfaces/AdminForthResourceInput/index.html +++ b/docs/api/types/Back/interfaces/AdminForthResourceInput/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/HttpExtra/index.html b/docs/api/types/Back/interfaces/HttpExtra/index.html index b888d9c70..1ab6744d8 100644 --- a/docs/api/types/Back/interfaces/HttpExtra/index.html +++ b/docs/api/types/Back/interfaces/HttpExtra/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForth/index.html b/docs/api/types/Back/interfaces/IAdminForth/index.html index fde479689..abc778ffa 100644 --- a/docs/api/types/Back/interfaces/IAdminForth/index.html +++ b/docs/api/types/Back/interfaces/IAdminForth/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthAuth/index.html b/docs/api/types/Back/interfaces/IAdminForthAuth/index.html index 592af9a24..698097235 100644 --- a/docs/api/types/Back/interfaces/IAdminForthAuth/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthAuth/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthDataSourceConnector/index.html b/docs/api/types/Back/interfaces/IAdminForthDataSourceConnector/index.html index b3a9235cd..f3328da0e 100644 --- a/docs/api/types/Back/interfaces/IAdminForthDataSourceConnector/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthDataSourceConnector/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorBase/index.html b/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorBase/index.html index 5049b7279..49f231cb0 100644 --- a/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorBase/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorBase/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor/index.html b/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor/index.html index 49f189c82..cf7fbfacb 100644 --- a/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthFilter/index.html b/docs/api/types/Back/interfaces/IAdminForthFilter/index.html index c24ec7fce..8790723fb 100644 --- a/docs/api/types/Back/interfaces/IAdminForthFilter/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthFilter/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthHttpResponse/index.html b/docs/api/types/Back/interfaces/IAdminForthHttpResponse/index.html index f2ad7d934..bbc90b488 100644 --- a/docs/api/types/Back/interfaces/IAdminForthHttpResponse/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthHttpResponse/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthPlugin/index.html b/docs/api/types/Back/interfaces/IAdminForthPlugin/index.html index a5f40bb41..2fe05d8bb 100644 --- a/docs/api/types/Back/interfaces/IAdminForthPlugin/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthPlugin/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthRestAPI/index.html b/docs/api/types/Back/interfaces/IAdminForthRestAPI/index.html index 5dbcff4b6..1657b0092 100644 --- a/docs/api/types/Back/interfaces/IAdminForthRestAPI/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthRestAPI/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthSort/index.html b/docs/api/types/Back/interfaces/IAdminForthSort/index.html index 46d783869..375c62f21 100644 --- a/docs/api/types/Back/interfaces/IAdminForthSort/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthSort/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/ICodeInjector/index.html b/docs/api/types/Back/interfaces/ICodeInjector/index.html index ac9f6c09d..619c4da16 100644 --- a/docs/api/types/Back/interfaces/ICodeInjector/index.html +++ b/docs/api/types/Back/interfaces/ICodeInjector/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IConfigValidator/index.html b/docs/api/types/Back/interfaces/IConfigValidator/index.html index e34c98b77..fe58c2486 100644 --- a/docs/api/types/Back/interfaces/IConfigValidator/index.html +++ b/docs/api/types/Back/interfaces/IConfigValidator/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IExpressHttpServer/index.html b/docs/api/types/Back/interfaces/IExpressHttpServer/index.html index 6cb413357..50d281f1b 100644 --- a/docs/api/types/Back/interfaces/IExpressHttpServer/index.html +++ b/docs/api/types/Back/interfaces/IExpressHttpServer/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IHttpServer/index.html b/docs/api/types/Back/interfaces/IHttpServer/index.html index 628ce4eae..fb2c99df4 100644 --- a/docs/api/types/Back/interfaces/IHttpServer/index.html +++ b/docs/api/types/Back/interfaces/IHttpServer/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IOperationalResource/index.html b/docs/api/types/Back/interfaces/IOperationalResource/index.html index 33dedfc35..928eba222 100644 --- a/docs/api/types/Back/interfaces/IOperationalResource/index.html +++ b/docs/api/types/Back/interfaces/IOperationalResource/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IWebSocketBroker/index.html b/docs/api/types/Back/interfaces/IWebSocketBroker/index.html index 74ffadf20..7af429259 100644 --- a/docs/api/types/Back/interfaces/IWebSocketBroker/index.html +++ b/docs/api/types/Back/interfaces/IWebSocketBroker/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IWebSocketClient/index.html b/docs/api/types/Back/interfaces/IWebSocketClient/index.html index 4540ee788..06c004226 100644 --- a/docs/api/types/Back/interfaces/IWebSocketClient/index.html +++ b/docs/api/types/Back/interfaces/IWebSocketClient/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/ResourceOptions/index.html b/docs/api/types/Back/interfaces/ResourceOptions/index.html index f714762ca..ce7630944 100644 --- a/docs/api/types/Back/interfaces/ResourceOptions/index.html +++ b/docs/api/types/Back/interfaces/ResourceOptions/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/ResourceOptionsInput/index.html b/docs/api/types/Back/interfaces/ResourceOptionsInput/index.html index ad3ac73cd..0fbf779ab 100644 --- a/docs/api/types/Back/interfaces/ResourceOptionsInput/index.html +++ b/docs/api/types/Back/interfaces/ResourceOptionsInput/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/AdminForthDataSource/index.html b/docs/api/types/Back/type-aliases/AdminForthDataSource/index.html index 3dc82a4ca..7027b36a0 100644 --- a/docs/api/types/Back/type-aliases/AdminForthDataSource/index.html +++ b/docs/api/types/Back/type-aliases/AdminForthDataSource/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/AfterDataSourceResponseFunction/index.html b/docs/api/types/Back/type-aliases/AfterDataSourceResponseFunction/index.html index 690798eb7..6c5813abf 100644 --- a/docs/api/types/Back/type-aliases/AfterDataSourceResponseFunction/index.html +++ b/docs/api/types/Back/type-aliases/AfterDataSourceResponseFunction/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/AfterSaveFunction/index.html b/docs/api/types/Back/type-aliases/AfterSaveFunction/index.html index 9885eb12f..6709c4424 100644 --- a/docs/api/types/Back/type-aliases/AfterSaveFunction/index.html +++ b/docs/api/types/Back/type-aliases/AfterSaveFunction/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/AllowedActionValue/index.html b/docs/api/types/Back/type-aliases/AllowedActionValue/index.html index df16bb442..786499b3a 100644 --- a/docs/api/types/Back/type-aliases/AllowedActionValue/index.html +++ b/docs/api/types/Back/type-aliases/AllowedActionValue/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/AllowedActions/index.html b/docs/api/types/Back/type-aliases/AllowedActions/index.html index 8fdb9e05a..084f5d2ac 100644 --- a/docs/api/types/Back/type-aliases/AllowedActions/index.html +++ b/docs/api/types/Back/type-aliases/AllowedActions/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/AllowedActionsInput/index.html b/docs/api/types/Back/type-aliases/AllowedActionsInput/index.html index c2eb602e0..d8eb866d3 100644 --- a/docs/api/types/Back/type-aliases/AllowedActionsInput/index.html +++ b/docs/api/types/Back/type-aliases/AllowedActionsInput/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/BeforeCreateSaveFunction/index.html b/docs/api/types/Back/type-aliases/BeforeCreateSaveFunction/index.html index e6ba7ab05..356ea8d09 100644 --- a/docs/api/types/Back/type-aliases/BeforeCreateSaveFunction/index.html +++ b/docs/api/types/Back/type-aliases/BeforeCreateSaveFunction/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/BeforeDataSourceRequestFunction/index.html b/docs/api/types/Back/type-aliases/BeforeDataSourceRequestFunction/index.html index bf488edb3..82fa57e18 100644 --- a/docs/api/types/Back/type-aliases/BeforeDataSourceRequestFunction/index.html +++ b/docs/api/types/Back/type-aliases/BeforeDataSourceRequestFunction/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/BeforeLoginConfirmationFunction/index.html b/docs/api/types/Back/type-aliases/BeforeLoginConfirmationFunction/index.html index 0027770d2..df73486e9 100644 --- a/docs/api/types/Back/type-aliases/BeforeLoginConfirmationFunction/index.html +++ b/docs/api/types/Back/type-aliases/BeforeLoginConfirmationFunction/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/BeforeSaveFunction/index.html b/docs/api/types/Back/type-aliases/BeforeSaveFunction/index.html index 3926d2593..25660fee6 100644 --- a/docs/api/types/Back/type-aliases/BeforeSaveFunction/index.html +++ b/docs/api/types/Back/type-aliases/BeforeSaveFunction/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/FDataFilter/index.html b/docs/api/types/Back/type-aliases/FDataFilter/index.html index 631277f4e..dc033f78c 100644 --- a/docs/api/types/Back/type-aliases/FDataFilter/index.html +++ b/docs/api/types/Back/type-aliases/FDataFilter/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/FDataSort/index.html b/docs/api/types/Back/type-aliases/FDataSort/index.html index f37c37c01..e69e4103b 100644 --- a/docs/api/types/Back/type-aliases/FDataSort/index.html +++ b/docs/api/types/Back/type-aliases/FDataSort/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/enumerations/ActionCheckSource/index.html b/docs/api/types/Common/enumerations/ActionCheckSource/index.html index 9c995fb77..edf45c6f4 100644 --- a/docs/api/types/Common/enumerations/ActionCheckSource/index.html +++ b/docs/api/types/Common/enumerations/ActionCheckSource/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/enumerations/AdminForthDataTypes/index.html b/docs/api/types/Common/enumerations/AdminForthDataTypes/index.html index 55f6e478d..d592a08dd 100644 --- a/docs/api/types/Common/enumerations/AdminForthDataTypes/index.html +++ b/docs/api/types/Common/enumerations/AdminForthDataTypes/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/enumerations/AdminForthFilterOperators/index.html b/docs/api/types/Common/enumerations/AdminForthFilterOperators/index.html index a3b801711..8cc58123f 100644 --- a/docs/api/types/Common/enumerations/AdminForthFilterOperators/index.html +++ b/docs/api/types/Common/enumerations/AdminForthFilterOperators/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/enumerations/AdminForthMenuTypes/index.html b/docs/api/types/Common/enumerations/AdminForthMenuTypes/index.html index 49ac06e7d..b2552968a 100644 --- a/docs/api/types/Common/enumerations/AdminForthMenuTypes/index.html +++ b/docs/api/types/Common/enumerations/AdminForthMenuTypes/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/enumerations/AdminForthResourcePages/index.html b/docs/api/types/Common/enumerations/AdminForthResourcePages/index.html index 30a31878f..52876415a 100644 --- a/docs/api/types/Common/enumerations/AdminForthResourcePages/index.html +++ b/docs/api/types/Common/enumerations/AdminForthResourcePages/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/enumerations/AdminForthSortDirections/index.html b/docs/api/types/Common/enumerations/AdminForthSortDirections/index.html index e02d07199..4e4518902 100644 --- a/docs/api/types/Common/enumerations/AdminForthSortDirections/index.html +++ b/docs/api/types/Common/enumerations/AdminForthSortDirections/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/enumerations/AllowedActionsEnum/index.html b/docs/api/types/Common/enumerations/AllowedActionsEnum/index.html index caae16fb8..a2e30a022 100644 --- a/docs/api/types/Common/enumerations/AllowedActionsEnum/index.html +++ b/docs/api/types/Common/enumerations/AllowedActionsEnum/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/index.html b/docs/api/types/Common/index.html index 48bcf0850..1d8ab241a 100644 --- a/docs/api/types/Common/index.html +++ b/docs/api/types/Common/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthBulkActionCommon/index.html b/docs/api/types/Common/interfaces/AdminForthBulkActionCommon/index.html index 9c1a5fcc5..b8fe1dab7 100644 --- a/docs/api/types/Common/interfaces/AdminForthBulkActionCommon/index.html +++ b/docs/api/types/Common/interfaces/AdminForthBulkActionCommon/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthColumnEnumItem/index.html b/docs/api/types/Common/interfaces/AdminForthColumnEnumItem/index.html index 4e8b017f1..593b68e5d 100644 --- a/docs/api/types/Common/interfaces/AdminForthColumnEnumItem/index.html +++ b/docs/api/types/Common/interfaces/AdminForthColumnEnumItem/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthComponentDeclarationFull/index.html b/docs/api/types/Common/interfaces/AdminForthComponentDeclarationFull/index.html index 47d9b008b..07d014f70 100644 --- a/docs/api/types/Common/interfaces/AdminForthComponentDeclarationFull/index.html +++ b/docs/api/types/Common/interfaces/AdminForthComponentDeclarationFull/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthConfigForFrontend/index.html b/docs/api/types/Common/interfaces/AdminForthConfigForFrontend/index.html index 06b0fdaee..d18462ecf 100644 --- a/docs/api/types/Common/interfaces/AdminForthConfigForFrontend/index.html +++ b/docs/api/types/Common/interfaces/AdminForthConfigForFrontend/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthConfigMenuItem/index.html b/docs/api/types/Common/interfaces/AdminForthConfigMenuItem/index.html index b60c4b3a3..cdf70a4b2 100644 --- a/docs/api/types/Common/interfaces/AdminForthConfigMenuItem/index.html +++ b/docs/api/types/Common/interfaces/AdminForthConfigMenuItem/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthFieldComponents/index.html b/docs/api/types/Common/interfaces/AdminForthFieldComponents/index.html index d5d94b9b9..14ffbe67c 100644 --- a/docs/api/types/Common/interfaces/AdminForthFieldComponents/index.html +++ b/docs/api/types/Common/interfaces/AdminForthFieldComponents/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthForeignResourceCommon/index.html b/docs/api/types/Common/interfaces/AdminForthForeignResourceCommon/index.html index 8a3418492..45db0ce0d 100644 --- a/docs/api/types/Common/interfaces/AdminForthForeignResourceCommon/index.html +++ b/docs/api/types/Common/interfaces/AdminForthForeignResourceCommon/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthResourceColumnCommon/index.html b/docs/api/types/Common/interfaces/AdminForthResourceColumnCommon/index.html index 50bd14375..3809b2095 100644 --- a/docs/api/types/Common/interfaces/AdminForthResourceColumnCommon/index.html +++ b/docs/api/types/Common/interfaces/AdminForthResourceColumnCommon/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthResourceColumnInputCommon/index.html b/docs/api/types/Common/interfaces/AdminForthResourceColumnInputCommon/index.html index d48472453..3142337df 100644 --- a/docs/api/types/Common/interfaces/AdminForthResourceColumnInputCommon/index.html +++ b/docs/api/types/Common/interfaces/AdminForthResourceColumnInputCommon/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthResourceCommon/index.html b/docs/api/types/Common/interfaces/AdminForthResourceCommon/index.html index 3428f6c57..0bd8c35b6 100644 --- a/docs/api/types/Common/interfaces/AdminForthResourceCommon/index.html +++ b/docs/api/types/Common/interfaces/AdminForthResourceCommon/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthResourceInputCommon/index.html b/docs/api/types/Common/interfaces/AdminForthResourceInputCommon/index.html index 97606f2d9..13dde58e9 100644 --- a/docs/api/types/Common/interfaces/AdminForthResourceInputCommon/index.html +++ b/docs/api/types/Common/interfaces/AdminForthResourceInputCommon/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminUser/index.html b/docs/api/types/Common/interfaces/AdminUser/index.html index ac1650ffb..b1f4903b5 100644 --- a/docs/api/types/Common/interfaces/AdminUser/index.html +++ b/docs/api/types/Common/interfaces/AdminUser/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/GetBaseConfigResponse/index.html b/docs/api/types/Common/interfaces/GetBaseConfigResponse/index.html index 136a7a435..6e5000e41 100644 --- a/docs/api/types/Common/interfaces/GetBaseConfigResponse/index.html +++ b/docs/api/types/Common/interfaces/GetBaseConfigResponse/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/ResourceVeryShort/index.html b/docs/api/types/Common/interfaces/ResourceVeryShort/index.html index c8ce7eefa..b757a4adb 100644 --- a/docs/api/types/Common/interfaces/ResourceVeryShort/index.html +++ b/docs/api/types/Common/interfaces/ResourceVeryShort/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/UserData/index.html b/docs/api/types/Common/interfaces/UserData/index.html index bfd4904c3..11d3ef3e4 100644 --- a/docs/api/types/Common/interfaces/UserData/index.html +++ b/docs/api/types/Common/interfaces/UserData/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/type-aliases/AdminForthComponentDeclaration/index.html b/docs/api/types/Common/type-aliases/AdminForthComponentDeclaration/index.html index 7e4f944db..3a55ac49c 100644 --- a/docs/api/types/Common/type-aliases/AdminForthComponentDeclaration/index.html +++ b/docs/api/types/Common/type-aliases/AdminForthComponentDeclaration/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/type-aliases/AllowedActionsResolved/index.html b/docs/api/types/Common/type-aliases/AllowedActionsResolved/index.html index c9d43b61b..330c16d3c 100644 --- a/docs/api/types/Common/type-aliases/AllowedActionsResolved/index.html +++ b/docs/api/types/Common/type-aliases/AllowedActionsResolved/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/type-aliases/AnnouncementBadgeResponse/index.html b/docs/api/types/Common/type-aliases/AnnouncementBadgeResponse/index.html index 617ef0a3f..f0ec9921b 100644 --- a/docs/api/types/Common/type-aliases/AnnouncementBadgeResponse/index.html +++ b/docs/api/types/Common/type-aliases/AnnouncementBadgeResponse/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/type-aliases/ValidationObject/index.html b/docs/api/types/Common/type-aliases/ValidationObject/index.html index 167da13c6..26e59c221 100644 --- a/docs/api/types/Common/type-aliases/ValidationObject/index.html +++ b/docs/api/types/Common/type-aliases/ValidationObject/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/FrontendAPI/enumerations/AlertVariant/index.html b/docs/api/types/FrontendAPI/enumerations/AlertVariant/index.html index b4f6683a0..de0416e62 100644 --- a/docs/api/types/FrontendAPI/enumerations/AlertVariant/index.html +++ b/docs/api/types/FrontendAPI/enumerations/AlertVariant/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/FrontendAPI/index.html b/docs/api/types/FrontendAPI/index.html index 3b1ae60f8..58c7689d2 100644 --- a/docs/api/types/FrontendAPI/index.html +++ b/docs/api/types/FrontendAPI/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface/index.html b/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface/index.html index 914683ba8..8642eee33 100644 --- a/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface/index.html +++ b/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/FrontendAPI/type-aliases/AlertParams/index.html b/docs/api/types/FrontendAPI/type-aliases/AlertParams/index.html index 604ce5ce7..03471a93e 100644 --- a/docs/api/types/FrontendAPI/type-aliases/AlertParams/index.html +++ b/docs/api/types/FrontendAPI/type-aliases/AlertParams/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/FrontendAPI/type-aliases/ConfirmParams/index.html b/docs/api/types/FrontendAPI/type-aliases/ConfirmParams/index.html index 4fc935e57..a271bf0a9 100644 --- a/docs/api/types/FrontendAPI/type-aliases/ConfirmParams/index.html +++ b/docs/api/types/FrontendAPI/type-aliases/ConfirmParams/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Advanced/plugin-development/index.html b/docs/tutorial/Advanced/plugin-development/index.html index c25f0429d..6ae071171 100644 --- a/docs/tutorial/Advanced/plugin-development/index.html +++ b/docs/tutorial/Advanced/plugin-development/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/afcl/index.html b/docs/tutorial/Customization/afcl/index.html index b168f156d..358fedf25 100644 --- a/docs/tutorial/Customization/afcl/index.html +++ b/docs/tutorial/Customization/afcl/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/alert/index.html b/docs/tutorial/Customization/alert/index.html index 0ad75cea5..e642d3c61 100644 --- a/docs/tutorial/Customization/alert/index.html +++ b/docs/tutorial/Customization/alert/index.html @@ -15,7 +15,7 @@ - + @@ -25,7 +25,7 @@

AdminForth has very simple frontend API for this.

To see an example of alerts, you can call them yourself.

Create a Vue component in the custom directory of your project, e.g. Alerts.vue:

-
./custom/Alerts.vue
<template>
<div class="ml-3 mt-16">
<button @click="callAlert('Example success alert')" class="focus:outline-none text-white bg-green-700 hover:bg-green-800 focus:ring-4 focus:ring-green-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-green-600 dark:hover:bg-green-700 dark:focus:ring-green-800">Call alert</button>
<button @click="callConfirmation" class="focus:outline-none text-white bg-red-700 hover:bg-red-800 focus:ring-4 focus:ring-red-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900">Confirmation</button>
<button @click="callAlert('Example danger alert','warning')" class="focus:outline-none text-white bg-orange-500 hover:bg-orange-400 focus:ring-4 focus:ring-orange-100 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-orange-600 dark:hover:bg-orange-700 dark:focus:ring-orange-900">Danger alert</button>
</div>
</template>
<script setup>
function callAlert(message,variant='success'){
window.adminforth.alert({message: message, variant: variant})
};
async function callConfirmation(){
const isConfirmed = await window.adminforth.confirm({message: 'Are you sure?', yes: 'Yes', no: 'No'})
}
</script>
+
./custom/Alerts.vue
<template>
<div class="ml-3 mt-16">
<button @click="callAlert('Example success alert')" class="focus:outline-none text-white bg-green-700 hover:bg-green-800 focus:ring-4 focus:ring-green-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-green-600 dark:hover:bg-green-700 dark:focus:ring-green-800">{{$t('Call alert')}}</button>
<button @click="callConfirmation" class="focus:outline-none text-white bg-red-700 hover:bg-red-800 focus:ring-4 focus:ring-red-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900">{{$t('Confirmation')}}</button>
<button @click="callAlert('Example danger alert','warning')" class="focus:outline-none text-white bg-orange-500 hover:bg-orange-400 focus:ring-4 focus:ring-orange-100 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-orange-600 dark:hover:bg-orange-700 dark:focus:ring-orange-900">{{$t('Danger alert')}}</button>
</div>
</template>
<script setup>

import { useI18n } from 'vue-i18n';
const { t } = useI18n();

function callAlert(message,variant='success'){
window.adminforth.alert({message: message, variant: variant})
};
async function callConfirmation(){
const isConfirmed = await window.adminforth.confirm({message: t('Are you sure?'), yes: t('Yes'), no: t('No')})
}
</script>

Now let's add this page to the AdminForth menu:

/index.ts
menu: [
{
label: 'Alerts',
icon: 'flowbite:bell-active-alt-solid',
component: '@@/Alerts.vue',
path: '/alerts'
}

Here is how alert looks: diff --git a/docs/tutorial/Customization/branding/index.html b/docs/tutorial/Customization/branding/index.html index 2628fbc5c..a6bd733d2 100644 --- a/docs/tutorial/Customization/branding/index.html +++ b/docs/tutorial/Customization/branding/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/bulkActions/index.html b/docs/tutorial/Customization/bulkActions/index.html index 34beb30bd..118a0fcf8 100644 --- a/docs/tutorial/Customization/bulkActions/index.html +++ b/docs/tutorial/Customization/bulkActions/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/customFieldRendering/index.html b/docs/tutorial/Customization/customFieldRendering/index.html index adaca5781..b0debcf9b 100644 --- a/docs/tutorial/Customization/customFieldRendering/index.html +++ b/docs/tutorial/Customization/customFieldRendering/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/customPages/index.html b/docs/tutorial/Customization/customPages/index.html index b9bae260c..25b49a881 100644 --- a/docs/tutorial/Customization/customPages/index.html +++ b/docs/tutorial/Customization/customPages/index.html @@ -15,7 +15,7 @@ - + @@ -29,7 +29,7 @@

{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": [
"../node_modules/adminforth/dist/spa/src/*"
],
"*": [
"../node_modules/adminforth/dist/spa/node_modules/*"
],
"@@/*": [
"."
]
}
}
}

Create a Vue component in the custom directory of your project, e.g. Dashboard.vue:

-
./custom/Dashboard.vue
<template>
<div class="px-4 py-8 bg-blue-50 dark:bg-gray-900 dark:shadow-none min-h-screen">
<h1 class="mb-4 text-xl font-extrabold text-gray-900 dark:text-white md:text-2xl lg:text-3xl"><span
class="text-transparent bg-clip-text bg-gradient-to-r to-emerald-600 from-sky-400">Apartments</span>
Statistics.</h1>

<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
<div class="max-w-md w-full bg-white rounded-lg shadow dark:bg-gray-800 p-4 md:p-6" v-if="data">
<div class="flex justify-between">
<div>
<h5 class="leading-none text-3xl font-bold text-gray-900 dark:text-white pb-2">{{ data.totalAparts }}</h5>
<p class="text-base font-normal text-gray-500 dark:text-gray-400">Apartments last 7 days</p>
</div>

</div>
<div id="area-chart"></div>

</div>

<div class="w-full bg-white rounded-lg shadow dark:bg-gray-800 p-4 md:p-6 md:row-span-2 md:col-span-2" v-if="data">

<div class="grid grid-cols-2 py-3">
<dl>
<dt class="text-base font-normal text-gray-500 dark:text-gray-400 pb-1">Listed price</dt>
<dd class="leading-none text-xl font-bold text-green-500 dark:text-green-400">{{
new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(
data.totalListedPrice,
) }}
</dd>
</dl>
<dl>
<dt class="text-base font-normal text-gray-500 dark:text-gray-400 pb-1">Unlisted price</dt>
<dd class="leading-none text-xl font-bold text-red-600 dark:text-red-500">{{
new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(
data.totalUnlistedPrice,
) }}
</dd>
</dl>
</div>

<div id="bar-chart"></div>

</div>

<div class="max-w-md w-full bg-white rounded-lg shadow dark:bg-gray-800 p-4 md:p-6" v-if="data">
<div class="flex justify-between mb-5">
<div>
<p class="text-base font-normal text-gray-500 dark:text-gray-400">
Unlisted vs Listed price
</p>
</div>
</div>
<div id="size-chart" class="[&>div]:mx-auto"></div>
</div>
</div>
</div>
</template>

<script setup>
import { ref, onMounted } from 'vue';
import ApexCharts from 'apexcharts';
import dayjs from 'dayjs';
import { callApi } from '@/utils';

const data = ref({});

const optionsC1 = {
chart: {
height: 145,
type: "area",
fontFamily: "Inter, sans-serif",
dropShadow: {
enabled: false,
},
toolbar: {
show: false,
},
},
tooltip: {
enabled: true,
x: {
show: false,
},
},
fill: {
type: "gradient",
gradient: {
opacityFrom: 0.55,
opacityTo: 0,
shade: "#1C64F2",
gradientToColors: ["#1C64F2"],
},
},
dataLabels: {
enabled: false,
},
stroke: {
width: 6,
},
grid: {
show: false,
strokeDashArray: 4,
padding: {
left: 2,
right: 2,
top: 0
},
},
series: [
{
name: "Added apartments",
data: [],
color: "#1A56DB",
},
],
xaxis: {
categories: [],
labels: {
show: false,
},
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
},
yaxis: {
show: false,
},
};

const optionsC2 = {
series: [
{
name: "Listed",
color: "#31C48D",
data: [],
},
{
name: "Unlisted",
data: [],
color: "#F05252",
}
],
chart: {
sparkline: {
enabled: false,
},
type: "bar",
width: "100%",
height: 400,
toolbar: {
show: false,
}
},
fill: {
opacity: 1,
},
plotOptions: {
bar: {
horizontal: true,
columnWidth: "100%",
borderRadiusApplication: "end",
borderRadius: 6,
dataLabels: {
position: "top",
},
},
},
legend: {
show: true,
position: "bottom",
},
dataLabels: {
enabled: false,
},
tooltip: {
shared: true,
intersect: false,
formatter: function (value) {
return value
},
},
xaxis: {
labels: {
show: true,
style: {
fontFamily: "Inter, sans-serif",
cssClass: 'text-xs font-normal fill-gray-500 dark:fill-gray-400'
},
formatter: function (value) {
return value
}
},
categories: [],
axisTicks: {
show: false,
},
axisBorder: {
show: false,
},
},
yaxis: {
labels: {
show: true,
style: {
fontFamily: "Inter, sans-serif",
cssClass: 'text-xs font-normal fill-gray-500 dark:fill-gray-400'
}
}
},
grid: {
show: true,
strokeDashArray: 4,
padding: {
left: 10,
right: 2,
// top: -20
},
},
fill: {
opacity: 1,
}
}

const optionsC3 = {
chart: {
height: 145,
type: "area",
fontFamily: "Inter, sans-serif",
dropShadow: {
enabled: false,
},
toolbar: {
show: false,
},
},
tooltip: {
enabled: true,
x: {
show: false,
},
},
fill: {
type: "gradient",
gradient: {
opacityFrom: 0.55,
opacityTo: 0,
shade: "#1C64F2",
gradientToColors: ["#1C64F2"],
},
},
dataLabels: {
enabled: false,
},
stroke: {
width: 6,
},
grid: {
show: false,
strokeDashArray: 4,
padding: {
left: 2,
right: 2,
top: -26
},
},
series: [
{
name: "Listed Price",
data: [],
color: "#1A56DB",
},
{
name: "Unlisted Price",
data: [],
color: "#7E3BF2",
},
],
xaxis: {
categories: [],
labels: {
show: false,
},
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
},
yaxis: {
show: false,
labels: {
formatter: function (value) {
return '$' + value;
}
}
},
}

onMounted(async () => {
// Fetch data from the API
// and set it to the chartData
try {
data.value = await callApi({path: '/api/dashboard/', method: 'GET'});
} catch (error) {
window.adminforth.alert({
message: `Error fetching data: ${error.message}`,
variant: 'danger',
timeout: 'unlimited'
});
}

const apartsByDaysReverse = data.value.apartsByDays.reverse();

optionsC1.series[0].data = apartsByDaysReverse.map((item) => item.count);
optionsC1.xaxis.categories = apartsByDaysReverse.map((item) => dayjs(item.day).format('DD MMM'));
const chart = new ApexCharts(document.getElementById("area-chart"), optionsC1);
chart.render();

optionsC2.series[0].data = data.value.listedVsUnlistedByDays.map((item) => item.listed);
optionsC2.series[1].data = data.value.listedVsUnlistedByDays.map((item) => item.unlisted);
optionsC2.xaxis.categories = data.value.listedVsUnlistedByDays.map((item) => dayjs(item.day).format('DD MMM'));
const chart2 = new ApexCharts(document.getElementById("bar-chart"), optionsC2);
chart2.render();

optionsC3.series[0].data = data.value.listedVsUnlistedPriceByDays.map((item) => item.listedPrice.toFixed(2));
optionsC3.series[1].data = data.value.listedVsUnlistedPriceByDays.map((item) => item.unlistedPrice.toFixed(2));
optionsC3.xaxis.categories = data.value.listedVsUnlistedPriceByDays.map((item) => dayjs(item.day).format('DD MMM'));
const chart3 = new ApexCharts(document.getElementById("size-chart"), optionsC3);
chart3.render();
})
</script>
+
./custom/Dashboard.vue
<template>
<div class="px-4 py-8 bg-blue-50 dark:bg-gray-900 dark:shadow-none min-h-screen">
<h1 class="mb-4 text-xl font-extrabold text-gray-900 dark:text-white md:text-2xl lg:text-3xl"><span
class="text-transparent bg-clip-text bg-gradient-to-r to-emerald-600 from-sky-400">{{ $t('Apartments') }}</span>
Statistics.</h1>

<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
<div class="max-w-md w-full bg-white rounded-lg shadow dark:bg-gray-800 p-4 md:p-6" v-if="data">
<div class="flex justify-between">
<div>
<h5 class="leading-none text-3xl font-bold text-gray-900 dark:text-white pb-2">{{ data.totalAparts }}</h5>
<p class="text-base font-normal text-gray-500 dark:text-gray-400">{{ $t('Apartment last 7 days | Apartments last 7 days', data.totalAparts) }}</p>
</div>

</div>
<div id="area-chart"></div>

</div>

<div class="w-full bg-white rounded-lg shadow dark:bg-gray-800 p-4 md:p-6 md:row-span-2 md:col-span-2" v-if="data">

<div class="grid grid-cols-2 py-3">
<dl>
<dt class="text-base font-normal text-gray-500 dark:text-gray-400 pb-1">{{ $t('Listed price') }}</dt>
<dd class="leading-none text-xl font-bold text-green-500 dark:text-green-400">{{
new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(
data.totalListedPrice,
) }}
</dd>
</dl>
<dl>
<dt class="text-base font-normal text-gray-500 dark:text-gray-400 pb-1">{{ $t('Unlisted price') }}</dt>
<dd class="leading-none text-xl font-bold text-red-600 dark:text-red-500">{{
new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(
data.totalUnlistedPrice,
) }}
</dd>
</dl>
</div>

<div id="bar-chart"></div>

</div>

<div class="max-w-md w-full bg-white rounded-lg shadow dark:bg-gray-800 p-4 md:p-6" v-if="data">
<div class="flex justify-between mb-5">
<div>
<p class="text-base font-normal text-gray-500 dark:text-gray-400">
{{ $t('Unlisted vs Listed price') }}
</p>
</div>
</div>
<div id="size-chart" class="[&>div]:mx-auto"></div>
</div>
</div>
</div>
</template>

<script setup>
import { ref, onMounted } from 'vue';
import ApexCharts from 'apexcharts';
import dayjs from 'dayjs';
import { callApi } from '@/utils';

const data = ref({});

const optionsC1 = {
chart: {
height: 145,
type: "area",
fontFamily: "Inter, sans-serif",
dropShadow: {
enabled: false,
},
toolbar: {
show: false,
},
},
tooltip: {
enabled: true,
x: {
show: false,
},
},
fill: {
type: "gradient",
gradient: {
opacityFrom: 0.55,
opacityTo: 0,
shade: "#1C64F2",
gradientToColors: ["#1C64F2"],
},
},
dataLabels: {
enabled: false,
},
stroke: {
width: 6,
},
grid: {
show: false,
strokeDashArray: 4,
padding: {
left: 2,
right: 2,
top: 0
},
},
series: [
{
name: "Added apartments",
data: [],
color: "#1A56DB",
},
],
xaxis: {
categories: [],
labels: {
show: false,
},
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
},
yaxis: {
show: false,
},
};

const optionsC2 = {
series: [
{
name: "Listed",
color: "#31C48D",
data: [],
},
{
name: "Unlisted",
data: [],
color: "#F05252",
}
],
chart: {
sparkline: {
enabled: false,
},
type: "bar",
width: "100%",
height: 400,
toolbar: {
show: false,
}
},
fill: {
opacity: 1,
},
plotOptions: {
bar: {
horizontal: true,
columnWidth: "100%",
borderRadiusApplication: "end",
borderRadius: 6,
dataLabels: {
position: "top",
},
},
},
legend: {
show: true,
position: "bottom",
},
dataLabels: {
enabled: false,
},
tooltip: {
shared: true,
intersect: false,
formatter: function (value) {
return value
},
},
xaxis: {
labels: {
show: true,
style: {
fontFamily: "Inter, sans-serif",
cssClass: 'text-xs font-normal fill-gray-500 dark:fill-gray-400'
},
formatter: function (value) {
return value
}
},
categories: [],
axisTicks: {
show: false,
},
axisBorder: {
show: false,
},
},
yaxis: {
labels: {
show: true,
style: {
fontFamily: "Inter, sans-serif",
cssClass: 'text-xs font-normal fill-gray-500 dark:fill-gray-400'
}
}
},
grid: {
show: true,
strokeDashArray: 4,
padding: {
left: 10,
right: 2,
// top: -20
},
},
fill: {
opacity: 1,
}
}

const optionsC3 = {
chart: {
height: 145,
type: "area",
fontFamily: "Inter, sans-serif",
dropShadow: {
enabled: false,
},
toolbar: {
show: false,
},
},
tooltip: {
enabled: true,
x: {
show: false,
},
},
fill: {
type: "gradient",
gradient: {
opacityFrom: 0.55,
opacityTo: 0,
shade: "#1C64F2",
gradientToColors: ["#1C64F2"],
},
},
dataLabels: {
enabled: false,
},
stroke: {
width: 6,
},
grid: {
show: false,
strokeDashArray: 4,
padding: {
left: 2,
right: 2,
top: -26
},
},
series: [
{
name: "Listed Price",
data: [],
color: "#1A56DB",
},
{
name: "Unlisted Price",
data: [],
color: "#7E3BF2",
},
],
xaxis: {
categories: [],
labels: {
show: false,
},
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
},
yaxis: {
show: false,
labels: {
formatter: function (value) {
return '$' + value;
}
}
},
}

onMounted(async () => {
// Fetch data from the API
// and set it to the chartData
try {
data.value = await callApi({path: '/api/dashboard/', method: 'GET'});
} catch (error) {
window.adminforth.alert({
message: `Error fetching data: ${error.message}`,
variant: 'danger',
timeout: 'unlimited'
});
}

const apartsByDaysReverse = data.value.apartsByDays.reverse();

optionsC1.series[0].data = apartsByDaysReverse.map((item) => item.count);
optionsC1.xaxis.categories = apartsByDaysReverse.map((item) => dayjs(item.day).format('DD MMM'));
const chart = new ApexCharts(document.getElementById("area-chart"), optionsC1);
chart.render();

optionsC2.series[0].data = data.value.listedVsUnlistedByDays.map((item) => item.listed);
optionsC2.series[1].data = data.value.listedVsUnlistedByDays.map((item) => item.unlisted);
optionsC2.xaxis.categories = data.value.listedVsUnlistedByDays.map((item) => dayjs(item.day).format('DD MMM'));
const chart2 = new ApexCharts(document.getElementById("bar-chart"), optionsC2);
chart2.render();

optionsC3.series[0].data = data.value.listedVsUnlistedPriceByDays.map((item) => item.listedPrice.toFixed(2));
optionsC3.series[1].data = data.value.listedVsUnlistedPriceByDays.map((item) => item.unlistedPrice.toFixed(2));
optionsC3.xaxis.categories = data.value.listedVsUnlistedPriceByDays.map((item) => dayjs(item.day).format('DD MMM'));
const chart3 = new ApexCharts(document.getElementById("size-chart"), optionsC3);
chart3.render();
})
</script>

☝️ use https://flowbite.com/ to copy-paste pre-designed tailwind design blocks for your pages

diff --git a/docs/tutorial/Customization/dataApi/index.html b/docs/tutorial/Customization/dataApi/index.html index 81311da79..17c1bc71d 100644 --- a/docs/tutorial/Customization/dataApi/index.html +++ b/docs/tutorial/Customization/dataApi/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/hooks/index.html b/docs/tutorial/Customization/hooks/index.html index 6c2b62546..b2ecf4080 100644 --- a/docs/tutorial/Customization/hooks/index.html +++ b/docs/tutorial/Customization/hooks/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/limitingAccess/index.html b/docs/tutorial/Customization/limitingAccess/index.html index 9f3b4b102..c16e1a98f 100644 --- a/docs/tutorial/Customization/limitingAccess/index.html +++ b/docs/tutorial/Customization/limitingAccess/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/menuConfiguration/index.html b/docs/tutorial/Customization/menuConfiguration/index.html index 00fcff011..43a33a8b2 100644 --- a/docs/tutorial/Customization/menuConfiguration/index.html +++ b/docs/tutorial/Customization/menuConfiguration/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/pageInjections/index.html b/docs/tutorial/Customization/pageInjections/index.html index fb88aa5ad..614a15256 100644 --- a/docs/tutorial/Customization/pageInjections/index.html +++ b/docs/tutorial/Customization/pageInjections/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/security/index.html b/docs/tutorial/Customization/security/index.html index a2a40e947..adf832119 100644 --- a/docs/tutorial/Customization/security/index.html +++ b/docs/tutorial/Customization/security/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/standardPagesTuning/index.html b/docs/tutorial/Customization/standardPagesTuning/index.html index 8a22b17f5..b701b7fee 100644 --- a/docs/tutorial/Customization/standardPagesTuning/index.html +++ b/docs/tutorial/Customization/standardPagesTuning/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/virtualColumns/index.html b/docs/tutorial/Customization/virtualColumns/index.html index d743cc3f2..f8214acfd 100644 --- a/docs/tutorial/Customization/virtualColumns/index.html +++ b/docs/tutorial/Customization/virtualColumns/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/websocket/index.html b/docs/tutorial/Customization/websocket/index.html index 1bfe32318..b829dae6a 100644 --- a/docs/tutorial/Customization/websocket/index.html +++ b/docs/tutorial/Customization/websocket/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/AuditLog/index.html b/docs/tutorial/Plugins/AuditLog/index.html index d10ca6a6a..ed25ad079 100644 --- a/docs/tutorial/Plugins/AuditLog/index.html +++ b/docs/tutorial/Plugins/AuditLog/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/ForeignInlineList/index.html b/docs/tutorial/Plugins/ForeignInlineList/index.html index 163e64ca7..e6d25c3c6 100644 --- a/docs/tutorial/Plugins/ForeignInlineList/index.html +++ b/docs/tutorial/Plugins/ForeignInlineList/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/RichEditor/index.html b/docs/tutorial/Plugins/RichEditor/index.html index 2907ad1ff..b79f4c7e6 100644 --- a/docs/tutorial/Plugins/RichEditor/index.html +++ b/docs/tutorial/Plugins/RichEditor/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/TwoFactorsAuth/index.html b/docs/tutorial/Plugins/TwoFactorsAuth/index.html index 84783f252..379ba0d0e 100644 --- a/docs/tutorial/Plugins/TwoFactorsAuth/index.html +++ b/docs/tutorial/Plugins/TwoFactorsAuth/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/email-password-reset/index.html b/docs/tutorial/Plugins/email-password-reset/index.html index 7803f0ca4..cd2b6dea3 100644 --- a/docs/tutorial/Plugins/email-password-reset/index.html +++ b/docs/tutorial/Plugins/email-password-reset/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/i18n/index.html b/docs/tutorial/Plugins/i18n/index.html index 330dc55af..084246a21 100644 --- a/docs/tutorial/Plugins/i18n/index.html +++ b/docs/tutorial/Plugins/i18n/index.html @@ -3,7 +3,7 @@ -Internationalization (i18n) | Vue & Node admin panel framework +Internationalization (i18n) | Vue & Node admin panel framework @@ -15,16 +15,16 @@ - +

Internationalization (i18n)

-

This plugin allows you to translate your AdminForth application to multiple languages. +

This plugin allows you translate your AdminForth application to multiple languages. Main features:

    -
  • Stores all translation strings in your application in a single resource. Basically you can set allowed actions to Developers/Translators role only if you don't want other users to see the translations.
  • -
  • Supports AI completion adapters to help with translations. For example, you can use OpenAI ChatGPT to generate translations.
  • +
  • Stores all translation strings in your application in a single AdminForth resource. You can set allowed actions only to Developers/Translators role if you don't want other users to see/edit the translations.
  • +
  • Supports AI completion adapters to help with translations. For example, you can use OpenAI ChatGPT to generate translations. Supports correct pluralization, even for Slavic languages.
  • Supports any number of languages.

Under the hood it uses vue-i18n library and provides several additional facilities to make the translation process easier.

@@ -40,7 +40,7 @@

InstallationAdd OPENAI_API_KEY to your .env file:

OPENAI_API_KEY=your_openai_api_key

Also add the resource to main file and add menu item in ./index.ts:

-
./index.ts

import translations from "./resources/translations";
...

const adminForth = new AdminForth({
...
resources: [
...
translations,
],
menu: [
...
{
label: 'Translations',
icon: 'material-symbols:translate',
resourceId: 'translations',
},
],
...
});

+
./index.ts

import translations from "./resources/translations";
...

const adminForth = new AdminForth({
...
resources: [
...
translations,
],
menu: [
...
{
label: 'Translations',
icon: 'material-symbols:translate',
resourceId: 'translations',
},
],
...
});

This is it, now you should restart your app and see the translations resource in the menu.

You can add translations for each language manually or use Bulk actions to generate translations with AI completion adapter.

For simplicity you can also use filter to get only untranslated strings and complete them one by one (filter name "Fully translated" in the filter).

@@ -52,9 +52,9 @@

{{$t('Showing')} {{from}} {{$t('to')}} {{to}} {{$t('of')}} {{total}} {{$t('entries')}}

+
{{ $t('Showing')}} {{from}} {{$t('to')}} {{to}} {{$t('of')}} {{total}} {{$t('entries') }}

And it will form 4 translation strings. But it is much better to have it as single string with variables like this:

-
{{$t('Showing {from} to {to} of {total} entries', { from, to, total })}
+
{{ $t('Showing {from} to {to} of {total} entries', { from, to, total } ) }}

For example, let's add user greeting to the header.

./custom/Header.vue
<template>
<div class="flex items-center justify-between p-4 bg-white shadow-md">
<div class="text-lg font-semibold text-gray-800">
{{ $t('Welcome, {name}', { name: adminUser.username }) }}
</div>
</div>
</template>

<script setup lang="ts">
import type { AdminForthResourceColumnCommon, AdminForthResourceCommon, AdminUser } from '@/types/Common';

const props = defineProps<{
column: AdminForthResourceColumnCommon;
record: any;
meta: any;
resource: AdminForthResourceCommon;
adminUser: AdminUser
}>();
</script>

How to use such component

@@ -63,14 +63,19 @@

HTML in

Sometimes you might want to have HTML in translations. You can use v-html directive for this. For example:

<h1 class="mb-4 text-xl font-extrabold text-gray-900 dark:text-white md:text-2xl lg:text-3xl"
v-html='$t("<span class=\"text-transparent bg-clip-text bg-gradient-to-r to-emerald-600 from-sky-400\">Apartments</span> Statistics.")'></h1>
-

🪪 Please keep in mind that roles who have access to translations resource can make HTML injections, though anyway if you are using Audit Log plugin you can track all changes in translations and understand who made them.

+

🪪 Security alert. Please keep in mind that if you are using v-html="$t(, the roles who have access to translations resource can make HTML/XSS injections, though anyway if you are using Audit Log plugin you can track all changes in translations and understand who made them.

+

Pluralization

+

Frontend uses same pluralization rules as vue-i18n library. You can use it in the same way. For example:

+
{{ $t('Apartment last 7 days | Apartments last 7 days', data.totalAparts) }}
+

For English it will use 2 pluralization forms (1 and other), for Slavic languages, LLM adapter will be instructed to generate 4 forms: for zero, for one, for 2-4 and for 5+:

+

alt text

Translations in custom APIs

Sometimes you need to return a translated error or success message from your API. You can use special tr function for this.

For simple example let's move previous example to format string on the backend side:

./custom/Header.vue
<template>
<div class="flex items center justify-between p-4 bg-white shadow-md">
<div class="text-lg font-semibold text-gray-800">
{{ greeting }}
</div>
</div>
</template>

<script setup lang="ts">
import type { AdminForthResourceColumnCommon, AdminForthResourceCommon, AdminUser } from '@/types/Common';
import { callApi } from '@/utils';
import { ref, onMounted } from 'vue';

const greeting: Ref<string> = ref('');

onMounted(async () => {
try {
const data = await callApi({path: '/api/greeting', method: 'GET'});
greeting.value = data.text;
} catch (error) {
window.adminforth.alert({
message: `Error fetching data: ${error.message}`,
variant: 'danger',
timeout: 'unlimited'
});
return;
}
})
</script>

And on the backend side you can use tr function to translate the string:

-
./index.ts
  app.get(`${ADMIN_BASE_URL}/api/greeting`, 
admin.express.authorize(
admin.express.translatable(
async (req, res) => {
res.json({
text: await tr('Welcome, {name}', 'customApis', { name: req.adminUser.username }),
});
}
)
)
);

// serve after you added all api
admin.discoverDatabases();
admin.express.serve(app)
+
./index.ts
  app.get(`${ADMIN_BASE_URL}/api/greeting`, 
admin.express.authorize(
admin.express.translatable(
async (req, res) => {
res.json({
text: await req.tr('Welcome, {name}', 'customApis', { name: req.adminUser.username }),
});
}
)
)
);

// serve after you added all api
admin.discoverDatabases();
admin.express.serve(app)

As you can see we should use admin.express.translatable middleware which will inject tr function to the request object. First param is the string to translate, second is the category of the string (actually you can use any string here), and the third is the variables object.

If you don't use params, you can use tr without third param:

@@ -81,10 +86,10 @@

So to collect all translations you should use your app for some time and make sure all strings are used at In future we plan to add backend strings collection in same way like frontend strings are collected.

-

Translating messaged within bulk action

+

Translating messaged within bulk action

Label adn confirm strings of bulk actions are already translated by AdminForth, but succesMessage returned by action function should be translated manually because of the dynamic nature of the message.

Let's rework the bulk action from bulkActions to use translations:

-
./resources/apartments.ts
import { AdminUser } from 'adminforth';
import { admin } from '../index';

{
...
resourceId: 'aparts',
...
options: {
bulkActions: [
{
label: 'Mark as listed',
icon: 'flowbite:eye-solid',
// if optional `confirm` is provided, user will be asked to confirm action
confirm: 'Are you sure you want to mark all selected apartments as listed?',
action: function ({selectedIds, adminUser }: {selectedIds: any[], adminUser: AdminUser }) {
const stmt = admin.resource('aparts').dataConnector.db.prepare(`UPDATE apartments SET listed = 1 WHERE id IN (${selectedIds.map(() => '?').join(',')})`);
stmt.run(...selectedIds);
return { ok: true, error: false, successMessage: `Marked ${selectedIds.length} apartments as listed` };
return { ok: true, error: false, successMessage: await tr('Marked {count} apartments as listed', 'apartments', { count: selectedIds.length }) };
},
}
],
}
}
+
./resources/apartments.ts
import { AdminUser } from 'adminforth';
import { admin } from '../index';

{
...
resourceId: 'aparts',
...
options: {
bulkActions: [
{
label: 'Mark as listed',
icon: 'flowbite:eye-solid',
// if optional `confirm` is provided, user will be asked to confirm action
confirm: 'Are you sure you want to mark all selected apartments as listed?',
action: function ({selectedIds, adminUser }: {selectedIds: any[], adminUser: AdminUser }) {
const stmt = admin.resource('aparts').dataConnector.db.prepare(`UPDATE apartments SET listed = 1 WHERE id IN (${selectedIds.map(() => '?').join(',')})`);
stmt.run(...selectedIds);
return { ok: true, error: false, successMessage: `Marked ${selectedIds.length} apartments as listed` };
return { ok: true, error: false, successMessage: await tr('Marked {count} apartments as listed', 'apartments', { count: selectedIds.length }) };
},
}
],
}
}
\ No newline at end of file diff --git a/docs/tutorial/Plugins/import-export/index.html b/docs/tutorial/Plugins/import-export/index.html index 727552f06..1d39549da 100644 --- a/docs/tutorial/Plugins/import-export/index.html +++ b/docs/tutorial/Plugins/import-export/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/open-signup/index.html b/docs/tutorial/Plugins/open-signup/index.html index 62e1054cb..5ac10dd22 100644 --- a/docs/tutorial/Plugins/open-signup/index.html +++ b/docs/tutorial/Plugins/open-signup/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/text-complete/index.html b/docs/tutorial/Plugins/text-complete/index.html index 828934506..81d4ae2d9 100644 --- a/docs/tutorial/Plugins/text-complete/index.html +++ b/docs/tutorial/Plugins/text-complete/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/upload/index.html b/docs/tutorial/Plugins/upload/index.html index e8af5682c..3a7d0f8ec 100644 --- a/docs/tutorial/Plugins/upload/index.html +++ b/docs/tutorial/Plugins/upload/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/deploy/index.html b/docs/tutorial/deploy/index.html index d0c5f63f6..b3f850019 100644 --- a/docs/tutorial/deploy/index.html +++ b/docs/tutorial/deploy/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/gettingStarted/index.html b/docs/tutorial/gettingStarted/index.html index 438a87d42..ee936141f 100644 --- a/docs/tutorial/gettingStarted/index.html +++ b/docs/tutorial/gettingStarted/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/glossary/index.html b/docs/tutorial/glossary/index.html index d3e9a4f63..3ff9493f4 100644 --- a/docs/tutorial/glossary/index.html +++ b/docs/tutorial/glossary/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/helloWorld/index.html b/docs/tutorial/helloWorld/index.html index 5ebd91500..d344be424 100644 --- a/docs/tutorial/helloWorld/index.html +++ b/docs/tutorial/helloWorld/index.html @@ -15,7 +15,7 @@ - + diff --git a/index.html b/index.html index 4dfe6d402..388b659c2 100644 --- a/index.html +++ b/index.html @@ -15,7 +15,7 @@ - + diff --git a/search/index.html b/search/index.html index 887a6d454..1daaa4011 100644 --- a/search/index.html +++ b/search/index.html @@ -15,7 +15,7 @@ - +