From d9ad4fd579231306be7ea7787c817fc5ee229cca Mon Sep 17 00:00:00 2001 From: Vsemv Date: Tue, 25 Jun 2024 11:00:36 +0300 Subject: [PATCH] Deploy website - based on 5e6bb7a37bb11d504ab651c0f3cd31ed45dde737 --- 404.html | 2 +- ..._login-22b59511349c51948267c9a4080e4d87.png | Bin 0 -> 131655 bytes ...58754d.66466830.js => 0058754d.ee98d7f5.js} | 2 +- ...2eff50.6f17dbb4.js => 322eff50.955b9b82.js} | 2 +- ...61071f.bdcf50cf.js => 7661071f.078163dc.js} | 2 +- ...f32620.64356def.js => d9f32620.18e87f28.js} | 2 +- ...in.e408da39.js => runtime~main.632c31fa.js} | 2 +- blog/archive/index.html | 2 +- blog/first-blog-post/index.html | 2 +- blog/index.html | 2 +- blog/long-blog-post/index.html | 2 +- blog/mdx-blog-post/index.html | 2 +- blog/tags/docusaurus/index.html | 2 +- blog/tags/facebook/index.html | 2 +- blog/tags/hello/index.html | 2 +- blog/tags/hola/index.html | 2 +- blog/tags/index.html | 2 +- blog/welcome/index.html | 2 +- docs/api/index.html | 2 +- docs/api/plugins/AuditLog/types/index.html | 2 +- .../type-aliases/PluginOptions/index.html | 2 +- .../ForeignInlineListPlugin/types/index.html | 2 +- .../type-aliases/PluginOptions/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 +- .../enumerations/AllowedActionsEnum/index.html | 2 +- docs/api/types/AdminForthConfig/index.html | 2 +- .../interfaces/AdminForthClass/index.html | 2 +- .../interfaces/AdminForthPluginType/index.html | 2 +- .../interfaces/CodeInjectorType/index.html | 2 +- .../interfaces/ExpressHttpServer/index.html | 2 +- .../interfaces/GenericHttpServer/index.html | 2 +- .../AdminForthColumnEnumItem/index.html | 2 +- .../AdminForthComponentDeclaration/index.html | 2 +- .../index.html | 2 +- .../type-aliases/AdminForthConfig/index.html | 2 +- .../AdminForthConfigMenuItem/index.html | 2 +- .../AdminForthDataSource/index.html | 2 +- .../AdminForthFieldComponents/index.html | 2 +- .../AdminForthForeignResource/index.html | 2 +- .../type-aliases/AdminForthResource/index.html | 2 +- .../AdminForthResourceColumn/index.html | 2 +- .../type-aliases/AdminUser/index.html | 2 +- .../AfterDataSourceResponseFunction/index.html | 2 +- .../type-aliases/AfterSaveFunction/index.html | 2 +- .../type-aliases/AllowedActionValue/index.html | 2 +- .../type-aliases/AllowedActions/index.html | 2 +- .../BeforeDataSourceRequestFunction/index.html | 2 +- .../type-aliases/BeforeSaveFunction/index.html | 2 +- .../type-aliases/ValidationObject/index.html | 2 +- .../enumerations/AlertVariant/index.html | 2 +- docs/api/types/FrontendAPI/index.html | 2 +- .../interfaces/FrontendAPIInterface/index.html | 2 +- .../type-aliases/AlertParams/index.html | 2 +- .../type-aliases/ConfirmParams/index.html | 2 +- .../type-aliases/FilterParams/index.html | 2 +- .../type-aliases/Operator/index.html | 2 +- .../tutorial/Customization/branding/index.html | 2 +- .../customFieldRendering/index.html | 2 +- .../Customization/customPages/index.html | 2 +- docs/tutorial/Customization/hooks/index.html | 2 +- .../Customization/limitingAccess/index.html | 2 +- .../Customization/pageInjections/index.html | 2 +- .../Customization/virtualColumns/index.html | 2 +- docs/tutorial/Plugins/AuditLog/index.html | 2 +- .../Plugins/ForeignInlineList/index.html | 2 +- docs/tutorial/gettingStarted/index.html | 3 ++- docs/tutorial/glossary/index.html | 2 +- index.html | 2 +- markdown-page/index.html | 2 +- 74 files changed, 74 insertions(+), 73 deletions(-) create mode 100644 assets/images/localhost_3500_login-22b59511349c51948267c9a4080e4d87.png rename assets/js/{0058754d.66466830.js => 0058754d.ee98d7f5.js} (96%) rename assets/js/{322eff50.6f17dbb4.js => 322eff50.955b9b82.js} (91%) rename assets/js/{7661071f.bdcf50cf.js => 7661071f.078163dc.js} (96%) rename assets/js/{d9f32620.64356def.js => d9f32620.18e87f28.js} (96%) rename assets/js/{runtime~main.e408da39.js => runtime~main.632c31fa.js} (68%) diff --git a/404.html b/404.html index 380f40df0..67474d88d 100644 --- a/404.html +++ b/404.html @@ -10,7 +10,7 @@ - + diff --git a/assets/images/localhost_3500_login-22b59511349c51948267c9a4080e4d87.png b/assets/images/localhost_3500_login-22b59511349c51948267c9a4080e4d87.png new file mode 100644 index 0000000000000000000000000000000000000000..47c5d83d533a48f962d8bc59ba6ca979488f0422 GIT binary patch literal 131655 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.r(n),i.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var s=i(4848),t=i(8453);const o={},r=void 0,l={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.",source:"@site/docs/tutorial/Plugins/ForeignInlineList.md",sourceDirName:"tutorial/Plugins",slug:"/tutorial/Plugins/ForeignInlineList",permalink:"/docs/tutorial/Plugins/ForeignInlineList",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"AuditLog",permalink:"/docs/tutorial/Plugins/AuditLog"}},a={},c=[{value:"Usage",id:"usage",level:2}];function u(e){const n={a:"a",code:"code",h2:"h2",img:"img",p:"p",pre:"pre",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:"Foreign inline list plugin allows to display a list (table) of items from a foreign table in the show view."}),"\n",(0,s.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,s.jsx)(n.p,{children:"Import plugin:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"import ForeignInlineListPlugin from 'adminforth/plugins/ForeignInlineListPlugin';\n"})}),"\n",(0,s.jsx)(n.p,{children:"If yu are using pure Node without TypeScript, you can use the following code:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"import ForeignInlineListPlugin from 'adminforth/dist/plugins/ForeignInlineListPlugin/index.js';\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In ",(0,s.jsx)(n.a,{href:"/docs/tutorial/gettingStarted",children:"Getting Started"})," we created a ",(0,s.jsx)(n.code,{children:"'apparts'"})," resource which has a field ",(0,s.jsx)(n.code,{children:"'user_id'"}),".\nThis field refers to record from ",(0,s.jsx)(n.code,{children:"'users'"})," resource. This means that we can display a list of appartments in the user's show view."]}),"\n",(0,s.jsxs)(n.p,{children:["Add to your ",(0,s.jsx)(n.code,{children:"'users'"})," resource configuration (which we created in ), plugin instance:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"{ \n ...\n resourceId: 'users',\n ...\n plugins: [\n new ForeignInlineListPlugin({\n foreignResourceId: 'apparts',\n modifyTableResourceConfig: (resourceConfig: AdminForthResource) => {\n // hide column 'square_meter' from both 'list' and 'filter'\n const column = resourceConfig.columns.find((c: AdminForthResourceColumn) => c.name === 'square_meter')!.showIn = [];\n resourceConfig.options!.listPageSize = 1;\n\n // feel free to console.log and edit resourceConfig as you need\n },\n }),\n ],\n}\n"})}),"\n",(0,s.jsxs)(n.p,{children:["You can use ",(0,s.jsx)(n.code,{children:"modifyTableResourceConfig"})," callback to modify what columns to show in the list and filter of the foreign table."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"alt text",src:i(5960).A+"",width:"3458",height:"1823"})}),"\n",(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"/docs/api/plugins/ForeignInlineListPlugin/types/type-aliases/PluginOptions",children:"API Reference"})," for more all options."]})]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},5960:(e,n,i)=>{i.d(n,{A:()=>s});const s=i.p+"assets/images/localhost_3500_resource_users_show_maf3gn-cd12d0c625c41cb2120f2e0eb7e04a86.png"},8453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>l});var s=i(6540);const t={},o=s.createContext(t);function r(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[3800],{2681:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var s=i(4848),t=i(8453);const o={},r=void 0,l={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.",source:"@site/docs/tutorial/Plugins/ForeignInlineList.md",sourceDirName:"tutorial/Plugins",slug:"/tutorial/Plugins/ForeignInlineList",permalink:"/docs/tutorial/Plugins/ForeignInlineList",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"AuditLog",permalink:"/docs/tutorial/Plugins/AuditLog"}},a={},c=[{value:"Usage",id:"usage",level:2}];function u(e){const n={a:"a",code:"code",h2:"h2",img:"img",p:"p",pre:"pre",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:"Foreign inline list plugin allows to display a list (table) of items from a foreign table in the show view."}),"\n",(0,s.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,s.jsx)(n.p,{children:"Import plugin:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"import ForeignInlineListPlugin from 'adminforth/plugins/ForeignInlineListPlugin';\n"})}),"\n",(0,s.jsx)(n.p,{children:"If yu are using pure Node without TypeScript, you can use the following code:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"import ForeignInlineListPlugin from 'adminforth/dist/plugins/ForeignInlineListPlugin/index.js';\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In ",(0,s.jsx)(n.a,{href:"/docs/tutorial/gettingStarted",children:"Getting Started"})," we created a ",(0,s.jsx)(n.code,{children:"'apparts'"})," resource which has a field ",(0,s.jsx)(n.code,{children:"'user_id'"}),".\nThis field refers to record from ",(0,s.jsx)(n.code,{children:"'users'"})," resource. This means that we can display a list of appartments in the user's show view."]}),"\n",(0,s.jsxs)(n.p,{children:["Add to your ",(0,s.jsx)(n.code,{children:"'users'"})," resource configuration (which we created in ), plugin instance:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"{ \n ...\n resourceId: 'users',\n ...\n plugins: [\n new ForeignInlineListPlugin({\n foreignResourceId: 'apparts',\n modifyTableResourceConfig: (resourceConfig: AdminForthResource) => {\n // hide column 'square_meter' from both 'list' and 'filter'\n const column = resourceConfig.columns.find((c: AdminForthResourceColumn) => c.name === 'square_meter')!.showIn = [];\n resourceConfig.options!.listPageSize = 1;\n\n // feel free to console.log and edit resourceConfig as you need\n },\n }),\n ],\n}\n"})}),"\n",(0,s.jsxs)(n.p,{children:["You can use ",(0,s.jsx)(n.code,{children:"modifyTableResourceConfig"})," callback to modify what columns to show in the list and filter of the foreign table."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"alt text",src:i(2852).A+"",width:"3458",height:"1823"})}),"\n",(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"/docs/api/plugins/ForeignInlineListPlugin/types/type-aliases/PluginOptions",children:"API Reference"})," for more all options."]})]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},2852:(e,n,i)=>{i.d(n,{A:()=>s});const s=i.p+"assets/images/localhost_3500_resource_users_show_maf3gn-cd12d0c625c41cb2120f2e0eb7e04a86.png"},8453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>l});var s=i(6540);const t={},o=s.createContext(t);function r(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/322eff50.6f17dbb4.js b/assets/js/322eff50.955b9b82.js similarity index 91% rename from assets/js/322eff50.6f17dbb4.js rename to assets/js/322eff50.955b9b82.js index 338ee9600..cac69dfba 100644 --- a/assets/js/322eff50.6f17dbb4.js +++ b/assets/js/322eff50.955b9b82.js @@ -1 +1 @@ -"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[6956],{2143:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var r=t(4848),a=t(8453);const s={},i="Getting Started",o={id:"tutorial/gettingStarted",title:"Getting Started",description:"Prerequisites",source:"@site/docs/tutorial/01-gettingStarted.md",sourceDirName:"tutorial",slug:"/tutorial/gettingStarted",permalink:"/docs/tutorial/gettingStarted",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"tutorialSidebar",next:{title:"Glossary",permalink:"/docs/tutorial/glossary"}},l={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installation",id:"installation",level:2},{value:"Basic Philosophy",id:"basic-philosophy",level:2},{value:"Setting up a first demo",id:"setting-up-a-first-demo",level:2},{value:"Possible configuration options",id:"possible-configuration-options",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"getting-started",children:"Getting Started"}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:"We recommend using Node v18 and higher:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"nvm install 18\nnvm alias default 18\nnvm use 18\n"})}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"mkdir myadmin\ncd myadmin\nnpm install adminforth\n"})}),"\n",(0,r.jsxs)(n.p,{children:["AdminForth does not provide own HTTP server, but can add own listeners over exisitng ",(0,r.jsx)(n.a,{href:"https://expressjs.com/",children:"Express"})," server (Fastify support is planned in future). This allows to create custom APIs for backoffice in a way you know."]}),"\n",(0,r.jsx)(n.p,{children:"Let's install express:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install express@4.19.2\n"})}),"\n",(0,r.jsx)(n.p,{children:"For demo purposes we will use SQLite data source. You can use postgress, Mongo or Clickhouse as well."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install better-sqlite3@10.0.0\n"})}),"\n",(0,r.jsx)(n.p,{children:"You can use adminforth in pure Node, but we recommend using TypeScript for better development experience:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install typescript@5.4.5 tsx@4.11.2 --save-dev\n"})}),"\n",(0,r.jsx)(n.h2,{id:"basic-philosophy",children:"Basic Philosophy"}),"\n",(0,r.jsx)(n.p,{children:"AdminForth connects to existing databases and provides a backoffice for managing data including CRUD operations, filtering, sorting, and more."}),"\n",(0,r.jsx)(n.p,{children:"Database should be already created by using any database management tool, ORM or migrator. AdminForth does not provide a way to create tables or columns in the database."}),"\n",(0,r.jsx)(n.p,{children:'Once you have a database, you pass a connection string to AdminForth and define resources(tables) and columns you would like to see in backoffice. For most DB AdminForth can "discover" column types and constraints (e.g. max-length) by connecting to DB. However you can redefine them in AdminForth configuration. Type and constraints definition are take precedence over DB schema.'}),"\n",(0,r.jsx)(n.p,{children:'Also in AdminForth you can define in "Vue" way how each field will be rendered, and create own pages e.g. Dashboards.'}),"\n",(0,r.jsxs)(n.p,{children:["In the demo we will create a simple database with 2 tables: ",(0,r.jsx)(n.code,{children:"apartments"})," and ",(0,r.jsx)(n.code,{children:"users"}),". We will just use plain SQL to create tables and insert some fake data."]}),"\n",(0,r.jsx)(n.p,{children:"Users table will be used to store a credentials for login into backoffice itself."}),"\n",(0,r.jsx)(n.h2,{id:"setting-up-a-first-demo",children:"Setting up a first demo"}),"\n",(0,r.jsxs)(n.p,{children:["Open ",(0,r.jsx)(n.code,{children:"package.json"}),", set ",(0,r.jsx)(n.code,{children:"type"})," to ",(0,r.jsx)(n.code,{children:"module"})," and add ",(0,r.jsx)(n.code,{children:"start"})," script:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n ...\n "type": "module",\n "scripts": {\n ...\n "start": "ADMINFORTH_SECRET=CHANGE_ME_IN_PRODUCTION NODE_ENV=development tsx watch index.ts"\n },\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Create ",(0,r.jsx)(n.code,{children:"index.ts"})," file in root directory with following content:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"\nimport betterSqlite3 from 'better-sqlite3';\nimport express from 'express';\nimport AdminForth from 'adminforth';\n\nconst dbFile = 'test.sqlite';\nconst db = betterSqlite3(dbFile)\n \nconst tableExists = db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name='apartments';`).get();\nif (!tableExists) {\n await db.prepare(`\n CREATE TABLE apartments (\n id VARCHAR(20) PRIMARY KEY NOT NULL,\n title VARCHAR(255) NOT NULL,\n square_meter REAL,\n price DECIMAL(10, 2) NOT NULL,\n number_of_rooms INT,\n description TEXT,\n property_type VARCHAR(255) DEFAULT 'apartment',\n listed BOOLEAN DEFAULT FALSE,\n created_at TIMESTAMP,\n user_id VARCHAR(255)\n );`).run();\n\n await db.prepare(`\n CREATE TABLE users (\n id VARCHAR(255) PRIMARY KEY NOT NULL,\n email VARCHAR(255) NOT NULL,\n password_hash VARCHAR(255) NOT NULL,\n created_at VARCHAR(255) NOT NULL,\n role VARCHAR(255) NOT NULL\n );`).run();\n\n for (let i = 0; i < 50; i++) {\n await db.prepare(`\n INSERT INTO apartments (\n id, title, square_meter, price, number_of_rooms, description, created_at, listed, property_type\n ) VALUES ('${i}', 'Apartment ${i}', ${Math.random() * 100}, ${Math.random() * 10000}, ${Math\n .floor(Math.random() * 5) }, 'Next gen appartments', ${Date.now() / 1000 - i * 60 * 60 * 24}, ${i % 2 == 0}, ${i % 2 == 0 ? \"'house'\" : \"'apartment'\"});\n `).run();\n }\n}\n\nconst ADMIN_BASE_URL = '';\n\nconst admin = new AdminForth({\n baseUrl : ADMIN_BASE_URL,\n rootUser: {\n username: 'adminforth', // use these as credentials to login\n password: 'adminforth',\n },\n auth: {\n resourceId: 'users', // resource for getting user\n usernameField: 'email',\n passwordHashField: 'password_hash',\n },\n customization: {\n brandName: 'My Admin',\n datesFormat: 'D MMM YY HH:mm:ss',\n emptyFieldPlaceholder: '-',\n },\n\n dataSources: [\n {\n id: 'maindb',\n url: `sqlite://${dbFile}`\n },\n ],\n resources: [\n {\n dataSource: 'maindb', \n table: 'apartments',\n resourceId: 'apparts', // resourceId is defaulted to table name but you can change it e.g. \n // in case of same table names from different data sources\n label: 'Apartments', // label is defaulted to table name but you can change it\n recordLabel: (r) => `\ud83c\udfe1 ${r.title}`,\n columns: [\n { \n name: 'id', \n label: 'Identifier', // if you wish you can redefine label\n showIn: ['filter', 'show'], // show in filter and in show page\n primaryKey: true,\n fillOnCreate: ({initialRecord, adminUser}) => Math.random().toString(36).substring(7), // initialRecord is values user entered, adminUser object of user who creates record\n },\n { \n name: 'title',\n required: true,\n showIn: ['list', 'create', 'edit', 'filter', 'show'], // the default is full set\n maxLength: 255, // you can set max length for string fields\n minLength: 3, // you can set min length for string fields\n }, \n {\n name: 'created_at',\n type: AdminForth.Types.DATETIME ,\n allowMinMaxQuery: true,\n showIn: ['list', 'filter', 'show', 'edit'],\n fillOnCreate: ({initialRecord, adminUser}) => (new Date()).toISOString(),\n },\n { \n name: 'price',\n min: 10,\n max: 10000.12,\n allowMinMaxQuery: true, // use better experience for filtering e.g. date range, set it only if you have index on this column or if there will be low number of rows\n editingNote: 'Price is in USD', // you can appear note on editing or creating page\n },\n { \n name: 'square_meter', \n label: 'Square', \n allowMinMaxQuery: true,\n minValue: 1, // you can set min /max value for number fields\n maxValue: 1000,\n },\n { \n name: 'number_of_rooms',\n allowMinMaxQuery: true,\n enum: [\n { value: 1, label: '1 room' },\n { value: 2, label: '2 rooms' },\n { value: 3, label: '3 rooms' },\n { value: 4, label: '4 rooms' },\n { value: 5, label: '5 rooms' },\n ],\n },\n { \n name: 'description',\n sortable: false,\n },\n {\n name: 'property_type',\n enum: [{\n value: 'house',\n label: 'House'\n }, {\n value: 'apartment',\n label: 'Apartment'\n }, {\n value: null,\n label: 'Not defined'\n }],\n },\n {\n name: 'listed',\n required: true, // will be required on create/edit\n },\n {\n name: 'user_id',\n foreignResource: {\n resourceId: 'users',\n }\n }\n ],\n options: {\n listPageSize: 12,\n allowedActions:{\n edit: true,\n delete: true,\n show: true,\n filter: true,\n },\n },\n },\n { \n dataSource: 'maindb', \n table: 'users',\n resourceId: 'users',\n label: 'Users', \n recordLabel: (r) => `\ud83d\udc64 ${r.email}`,\n columns: [\n { \n name: 'id', \n primaryKey: true,\n fillOnCreate: ({initialRecord, adminUser}) => Math.random().toString(36).substring(7),\n showIn: ['list', 'filter', 'show'],\n },\n { \n name: 'email', \n required: true,\n isUnique: true,\n validation: [\n {\n regExp: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$',\n message: 'Email is not valid, must be in format example@test.com'\n },\n ]\n },\n { \n name: 'created_at', \n type: AdminForth.Types.DATETIME,\n showIn: ['list', 'filter', 'show'],\n fillOnCreate: ({initialRecord, adminUser}) => (new Date()).toISOString(),\n },\n {\n name: 'role',\n enum: [\n { value: 'superadmin', label: 'Super Admin' },\n { value: 'user', label: 'User' },\n ]\n },\n {\n name: 'password',\n virtual: true, // field will not be persisted into db\n required: { create: true }, // make required only on create page\n editingNote: { edit: 'Leave empty to keep password unchanged' },\n minLength: 8,\n type: AdminForth.Types.STRING,\n showIn: ['create', 'edit'], // to show field only on create and edit pages\n masked: true, // to show stars in input field\n }\n ],\n hooks: {\n create: {\n beforeSave: async ({ record, adminUser, resource }) => {\n record.password_hash = await AdminForth.Utils.generatePasswordHash(record.password);\n return { ok:true, error: false };\n }\n },\n edit: {\n beforeSave: async ({ record, adminUser, resource}) => {\n if (record.password) {\n record.password_hash = await AdminForth.Utils.generatePasswordHash(record.password);\n }\n return { ok: true, error: false }\n },\n },\n }\n },\n ],\n menu: [\n {\n label: 'Core',\n icon: 'flowbite:brain-solid', // any icon from iconify supported in format :, e.g. from here https://icon-sets.iconify.design/flowbite/\n open: true,\n children: [\n {\n homepage: true,\n label: 'Appartments',\n icon: 'flowbite:home-solid',\n resourceId: 'apparts',\n },\n ]\n },\n {\n type: 'gap'\n },\n {\n type: 'divider'\n },\n {\n type: 'heading',\n label: 'SYSTEM',\n },\n {\n label: 'Users',\n icon: 'flowbite:user-solid',\n resourceId: 'users',\n }\n ],\n})\n\n\nconst app = express()\napp.use(express.json());\nconst port = 3500;\n\n(async () => {\n // needed to compile SPA. Call it here or from a build script e.g. in Docker build time to reduce downtime\n await admin.bundleNow({ hotReload: process.env.NODE_ENV === 'development'});\n console.log('Bundling AdminForth done. For faster serving consider calling bundleNow() from a build script.');\n})();\n\n\n// serve after you added all api\nadmin.express.serve(app, express)\nadmin.discoverDatabases();\n\n\napp.listen(port, () => {\n console.log(`Example app listening at http://localhost:${port}`)\n console.log(`\\n\u26a1 AdminForth is available at http://localhost:${port}${ADMIN_BASE_URL}\\n`)\n});\n"})}),"\n",(0,r.jsx)(n.p,{children:"Now you can run your app:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm start\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Open ",(0,r.jsx)(n.a,{href:"http://localhost:3500",children:"http://localhost:3500"})," in your browser and login with credentials ",(0,r.jsx)(n.code,{children:"adminforth"})," / ",(0,r.jsx)(n.code,{children:"adminforth"}),"."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"alt text",src:t(7473).A+"",width:"3456",height:"2043"})}),"\n",(0,r.jsx)(n.p,{children:"After Login you should see:"}),"\n",(0,r.jsx)(n.h2,{id:"possible-configuration-options",children:"Possible configuration options"}),"\n",(0,r.jsx)(n.p,{children:"We will use schema with different column types for apartments to show many of AdminForth features."}),"\n",(0,r.jsxs)(n.p,{children:["Check ",(0,r.jsx)(n.a,{href:"/docs/api/types/AdminForthConfig/type-aliases/AdminForthConfig",children:"AdminForthConfig"})," for all possible options."]})]})}function u(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},7473:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/image-4073119b1a64b412c6322c1917d972fc.png"},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>o});var r=t(6540);const a={},s=r.createContext(a);function i(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[6956],{2143:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var r=t(4848),a=t(8453);const s={},i="Getting Started",o={id:"tutorial/gettingStarted",title:"Getting Started",description:"Prerequisites",source:"@site/docs/tutorial/01-gettingStarted.md",sourceDirName:"tutorial",slug:"/tutorial/gettingStarted",permalink:"/docs/tutorial/gettingStarted",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"tutorialSidebar",next:{title:"Glossary",permalink:"/docs/tutorial/glossary"}},l={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installation",id:"installation",level:2},{value:"Basic Philosophy",id:"basic-philosophy",level:2},{value:"Setting up a first demo",id:"setting-up-a-first-demo",level:2},{value:"Possible configuration options",id:"possible-configuration-options",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"getting-started",children:"Getting Started"}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:"We recommend using Node v18 and higher:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"nvm install 18\nnvm alias default 18\nnvm use 18\n"})}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"mkdir myadmin\ncd myadmin\nnpm install adminforth\n"})}),"\n",(0,r.jsxs)(n.p,{children:["AdminForth does not provide own HTTP server, but can add own listeners over exisitng ",(0,r.jsx)(n.a,{href:"https://expressjs.com/",children:"Express"})," server (Fastify support is planned in future). This allows to create custom APIs for backoffice in a way you know."]}),"\n",(0,r.jsx)(n.p,{children:"Let's install express:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install express@4.19.2\n"})}),"\n",(0,r.jsx)(n.p,{children:"For demo purposes we will use SQLite data source. You can use postgress, Mongo or Clickhouse as well."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install better-sqlite3@10.0.0\n"})}),"\n",(0,r.jsx)(n.p,{children:"You can use adminforth in pure Node, but we recommend using TypeScript for better development experience:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install typescript@5.4.5 tsx@4.11.2 --save-dev\n"})}),"\n",(0,r.jsx)(n.h2,{id:"basic-philosophy",children:"Basic Philosophy"}),"\n",(0,r.jsx)(n.p,{children:"AdminForth connects to existing databases and provides a backoffice for managing data including CRUD operations, filtering, sorting, and more."}),"\n",(0,r.jsx)(n.p,{children:"Database should be already created by using any database management tool, ORM or migrator. AdminForth does not provide a way to create tables or columns in the database."}),"\n",(0,r.jsx)(n.p,{children:'Once you have a database, you pass a connection string to AdminForth and define resources(tables) and columns you would like to see in backoffice. For most DB AdminForth can "discover" column types and constraints (e.g. max-length) by connecting to DB. However you can redefine them in AdminForth configuration. Type and constraints definition are take precedence over DB schema.'}),"\n",(0,r.jsx)(n.p,{children:'Also in AdminForth you can define in "Vue" way how each field will be rendered, and create own pages e.g. Dashboards.'}),"\n",(0,r.jsxs)(n.p,{children:["In the demo we will create a simple database with 2 tables: ",(0,r.jsx)(n.code,{children:"apartments"})," and ",(0,r.jsx)(n.code,{children:"users"}),". We will just use plain SQL to create tables and insert some fake data."]}),"\n",(0,r.jsx)(n.p,{children:"Users table will be used to store a credentials for login into backoffice itself."}),"\n",(0,r.jsx)(n.h2,{id:"setting-up-a-first-demo",children:"Setting up a first demo"}),"\n",(0,r.jsxs)(n.p,{children:["Open ",(0,r.jsx)(n.code,{children:"package.json"}),", set ",(0,r.jsx)(n.code,{children:"type"})," to ",(0,r.jsx)(n.code,{children:"module"})," and add ",(0,r.jsx)(n.code,{children:"start"})," script:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n ...\n "type": "module",\n "scripts": {\n ...\n "start": "ADMINFORTH_SECRET=CHANGE_ME_IN_PRODUCTION NODE_ENV=development tsx watch index.ts"\n },\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Create ",(0,r.jsx)(n.code,{children:"index.ts"})," file in root directory with following content:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"\nimport betterSqlite3 from 'better-sqlite3';\nimport express from 'express';\nimport AdminForth from 'adminforth';\n\nconst dbFile = 'test.sqlite';\nconst db = betterSqlite3(dbFile)\n \nconst tableExists = db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name='apartments';`).get();\nif (!tableExists) {\n await db.prepare(`\n CREATE TABLE apartments (\n id VARCHAR(20) PRIMARY KEY NOT NULL,\n title VARCHAR(255) NOT NULL,\n square_meter REAL,\n price DECIMAL(10, 2) NOT NULL,\n number_of_rooms INT,\n description TEXT,\n property_type VARCHAR(255) DEFAULT 'apartment',\n listed BOOLEAN DEFAULT FALSE,\n created_at TIMESTAMP,\n user_id VARCHAR(255)\n );`).run();\n\n await db.prepare(`\n CREATE TABLE users (\n id VARCHAR(255) PRIMARY KEY NOT NULL,\n email VARCHAR(255) NOT NULL,\n password_hash VARCHAR(255) NOT NULL,\n created_at VARCHAR(255) NOT NULL,\n role VARCHAR(255) NOT NULL\n );`).run();\n\n for (let i = 0; i < 50; i++) {\n await db.prepare(`\n INSERT INTO apartments (\n id, title, square_meter, price, number_of_rooms, description, created_at, listed, property_type\n ) VALUES ('${i}', 'Apartment ${i}', ${Math.random() * 100}, ${Math.random() * 10000}, ${Math\n .floor(Math.random() * 5) }, 'Next gen appartments', ${Date.now() / 1000 - i * 60 * 60 * 24}, ${i % 2 == 0}, ${i % 2 == 0 ? \"'house'\" : \"'apartment'\"});\n `).run();\n }\n}\n\nconst ADMIN_BASE_URL = '';\n\nconst admin = new AdminForth({\n baseUrl : ADMIN_BASE_URL,\n rootUser: {\n username: 'adminforth', // use these as credentials to login\n password: 'adminforth',\n },\n auth: {\n resourceId: 'users', // resource for getting user\n usernameField: 'email',\n passwordHashField: 'password_hash',\n },\n customization: {\n brandName: 'My Admin',\n datesFormat: 'D MMM YY HH:mm:ss',\n emptyFieldPlaceholder: '-',\n },\n\n dataSources: [\n {\n id: 'maindb',\n url: `sqlite://${dbFile}`\n },\n ],\n resources: [\n {\n dataSource: 'maindb', \n table: 'apartments',\n resourceId: 'apparts', // resourceId is defaulted to table name but you can change it e.g. \n // in case of same table names from different data sources\n label: 'Apartments', // label is defaulted to table name but you can change it\n recordLabel: (r) => `\ud83c\udfe1 ${r.title}`,\n columns: [\n { \n name: 'id', \n label: 'Identifier', // if you wish you can redefine label\n showIn: ['filter', 'show'], // show in filter and in show page\n primaryKey: true,\n fillOnCreate: ({initialRecord, adminUser}) => Math.random().toString(36).substring(7), // initialRecord is values user entered, adminUser object of user who creates record\n },\n { \n name: 'title',\n required: true,\n showIn: ['list', 'create', 'edit', 'filter', 'show'], // the default is full set\n maxLength: 255, // you can set max length for string fields\n minLength: 3, // you can set min length for string fields\n }, \n {\n name: 'created_at',\n type: AdminForth.Types.DATETIME ,\n allowMinMaxQuery: true,\n showIn: ['list', 'filter', 'show', 'edit'],\n fillOnCreate: ({initialRecord, adminUser}) => (new Date()).toISOString(),\n },\n { \n name: 'price',\n min: 10,\n max: 10000.12,\n allowMinMaxQuery: true, // use better experience for filtering e.g. date range, set it only if you have index on this column or if there will be low number of rows\n editingNote: 'Price is in USD', // you can appear note on editing or creating page\n },\n { \n name: 'square_meter', \n label: 'Square', \n allowMinMaxQuery: true,\n minValue: 1, // you can set min /max value for number fields\n maxValue: 1000,\n },\n { \n name: 'number_of_rooms',\n allowMinMaxQuery: true,\n enum: [\n { value: 1, label: '1 room' },\n { value: 2, label: '2 rooms' },\n { value: 3, label: '3 rooms' },\n { value: 4, label: '4 rooms' },\n { value: 5, label: '5 rooms' },\n ],\n },\n { \n name: 'description',\n sortable: false,\n },\n {\n name: 'property_type',\n enum: [{\n value: 'house',\n label: 'House'\n }, {\n value: 'apartment',\n label: 'Apartment'\n }, {\n value: null,\n label: 'Not defined'\n }],\n },\n {\n name: 'listed',\n required: true, // will be required on create/edit\n },\n {\n name: 'user_id',\n foreignResource: {\n resourceId: 'users',\n }\n }\n ],\n options: {\n listPageSize: 12,\n allowedActions:{\n edit: true,\n delete: true,\n show: true,\n filter: true,\n },\n },\n },\n { \n dataSource: 'maindb', \n table: 'users',\n resourceId: 'users',\n label: 'Users', \n recordLabel: (r) => `\ud83d\udc64 ${r.email}`,\n columns: [\n { \n name: 'id', \n primaryKey: true,\n fillOnCreate: ({initialRecord, adminUser}) => Math.random().toString(36).substring(7),\n showIn: ['list', 'filter', 'show'],\n },\n { \n name: 'email', \n required: true,\n isUnique: true,\n validation: [\n {\n regExp: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$',\n message: 'Email is not valid, must be in format example@test.com'\n },\n ]\n },\n { \n name: 'created_at', \n type: AdminForth.Types.DATETIME,\n showIn: ['list', 'filter', 'show'],\n fillOnCreate: ({initialRecord, adminUser}) => (new Date()).toISOString(),\n },\n {\n name: 'role',\n enum: [\n { value: 'superadmin', label: 'Super Admin' },\n { value: 'user', label: 'User' },\n ]\n },\n {\n name: 'password',\n virtual: true, // field will not be persisted into db\n required: { create: true }, // make required only on create page\n editingNote: { edit: 'Leave empty to keep password unchanged' },\n minLength: 8,\n type: AdminForth.Types.STRING,\n showIn: ['create', 'edit'], // to show field only on create and edit pages\n masked: true, // to show stars in input field\n }\n ],\n hooks: {\n create: {\n beforeSave: async ({ record, adminUser, resource }) => {\n record.password_hash = await AdminForth.Utils.generatePasswordHash(record.password);\n return { ok:true, error: false };\n }\n },\n edit: {\n beforeSave: async ({ record, adminUser, resource}) => {\n if (record.password) {\n record.password_hash = await AdminForth.Utils.generatePasswordHash(record.password);\n }\n return { ok: true, error: false }\n },\n },\n }\n },\n ],\n menu: [\n {\n label: 'Core',\n icon: 'flowbite:brain-solid', // any icon from iconify supported in format :, e.g. from here https://icon-sets.iconify.design/flowbite/\n open: true,\n children: [\n {\n homepage: true,\n label: 'Appartments',\n icon: 'flowbite:home-solid',\n resourceId: 'apparts',\n },\n ]\n },\n {\n type: 'gap'\n },\n {\n type: 'divider'\n },\n {\n type: 'heading',\n label: 'SYSTEM',\n },\n {\n label: 'Users',\n icon: 'flowbite:user-solid',\n resourceId: 'users',\n }\n ],\n})\n\n\nconst app = express()\napp.use(express.json());\nconst port = 3500;\n\n(async () => {\n // needed to compile SPA. Call it here or from a build script e.g. in Docker build time to reduce downtime\n await admin.bundleNow({ hotReload: process.env.NODE_ENV === 'development'});\n console.log('Bundling AdminForth done. For faster serving consider calling bundleNow() from a build script.');\n})();\n\n\n// serve after you added all api\nadmin.express.serve(app, express)\nadmin.discoverDatabases();\n\n\napp.listen(port, () => {\n console.log(`Example app listening at http://localhost:${port}`)\n console.log(`\\n\u26a1 AdminForth is available at http://localhost:${port}${ADMIN_BASE_URL}\\n`)\n});\n"})}),"\n",(0,r.jsx)(n.p,{children:"Now you can run your app:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm start\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Open ",(0,r.jsx)(n.a,{href:"http://localhost:3500",children:"http://localhost:3500"})," in your browser and login with credentials ",(0,r.jsx)(n.code,{children:"adminforth"})," / ",(0,r.jsx)(n.code,{children:"adminforth"}),"."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"alt text",src:t(3909).A+"",width:"3456",height:"2043"})}),"\n",(0,r.jsx)(n.p,{children:"After Login you should see:"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"alt text",src:t(6448).A+"",width:"2428",height:"1932"})}),"\n",(0,r.jsx)(n.h2,{id:"possible-configuration-options",children:"Possible configuration options"}),"\n",(0,r.jsx)(n.p,{children:"We will use schema with different column types for apartments to show many of AdminForth features."}),"\n",(0,r.jsxs)(n.p,{children:["Check ",(0,r.jsx)(n.a,{href:"/docs/api/types/AdminForthConfig/type-aliases/AdminForthConfig",children:"AdminForthConfig"})," for all possible options."]})]})}function u(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},3909:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/image-4073119b1a64b412c6322c1917d972fc.png"},6448:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/localhost_3500_login-22b59511349c51948267c9a4080e4d87.png"},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>o});var r=t(6540);const a={},s=r.createContext(a);function i(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7661071f.bdcf50cf.js b/assets/js/7661071f.078163dc.js similarity index 96% rename from assets/js/7661071f.bdcf50cf.js rename to assets/js/7661071f.078163dc.js index 2c931a99a..f7149145d 100644 --- a/assets/js/7661071f.bdcf50cf.js +++ b/assets/js/7661071f.078163dc.js @@ -1 +1 @@ -"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[8737],{4137:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>i,contentTitle:()=>l,default:()=>d,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var s=n(4848),t=n(8453);const r={slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},l=void 0,a={permalink:"/blog/welcome",source:"@site/blog/2021-08-26-welcome/index.md",title:"Welcome",description:"Docusaurus blogging features are powered by the blog plugin.",date:"2021-08-26T00:00:00.000Z",tags:[{inline:!1,label:"Facebook",permalink:"/blog/tags/facebook",description:"Facebook tag description"},{inline:!1,label:"Hello",permalink:"/blog/tags/hello",description:"Hello tag description"},{inline:!1,label:"Docusaurus",permalink:"/blog/tags/docusaurus",description:"Docusaurus tag description"}],readingTime:.405,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},unlisted:!1,nextItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"}},i={authorsImageUrls:[void 0,void 0]},c=[];function u(e){const o={a:"a",code:"code",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.a,{href:"https://docusaurus.io/docs/blog",children:"Docusaurus blogging features"})," are powered by the ",(0,s.jsx)(o.a,{href:"https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog",children:"blog plugin"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["Simply add Markdown files (or folders) to the ",(0,s.jsx)(o.code,{children:"blog"})," directory."]}),"\n",(0,s.jsxs)(o.p,{children:["Regular blog authors can be added to ",(0,s.jsx)(o.code,{children:"authors.yml"}),"."]}),"\n",(0,s.jsx)(o.p,{children:"The blog post date can be extracted from filenames, such as:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:(0,s.jsx)(o.code,{children:"2019-05-30-welcome.md"})}),"\n",(0,s.jsx)(o.li,{children:(0,s.jsx)(o.code,{children:"2019-05-30-welcome/index.md"})}),"\n"]}),"\n",(0,s.jsx)(o.p,{children:"A blog post folder can be convenient to co-locate blog post images:"}),"\n",(0,s.jsx)(o.p,{children:(0,s.jsx)(o.img,{alt:"Docusaurus Plushie",src:n(7450).A+"",width:"1500",height:"500"})}),"\n",(0,s.jsx)(o.p,{children:"The blog supports tags as well!"}),"\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.strong,{children:"And if you don't want a blog"}),": just delete this directory, and use ",(0,s.jsx)(o.code,{children:"blog: false"})," in your Docusaurus config."]})]})}function d(e={}){const{wrapper:o}={...(0,t.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},7450:(e,o,n)=>{n.d(o,{A:()=>s});const s=n.p+"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"},8453:(e,o,n)=>{n.d(o,{R:()=>l,x:()=>a});var s=n(6540);const t={},r=s.createContext(t);function l(e){const o=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[8737],{4137:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>i,contentTitle:()=>l,default:()=>d,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var s=n(4848),t=n(8453);const r={slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},l=void 0,a={permalink:"/blog/welcome",source:"@site/blog/2021-08-26-welcome/index.md",title:"Welcome",description:"Docusaurus blogging features are powered by the blog plugin.",date:"2021-08-26T00:00:00.000Z",tags:[{inline:!1,label:"Facebook",permalink:"/blog/tags/facebook",description:"Facebook tag description"},{inline:!1,label:"Hello",permalink:"/blog/tags/hello",description:"Hello tag description"},{inline:!1,label:"Docusaurus",permalink:"/blog/tags/docusaurus",description:"Docusaurus tag description"}],readingTime:.405,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},unlisted:!1,nextItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"}},i={authorsImageUrls:[void 0,void 0]},c=[];function u(e){const o={a:"a",code:"code",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.a,{href:"https://docusaurus.io/docs/blog",children:"Docusaurus blogging features"})," are powered by the ",(0,s.jsx)(o.a,{href:"https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog",children:"blog plugin"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["Simply add Markdown files (or folders) to the ",(0,s.jsx)(o.code,{children:"blog"})," directory."]}),"\n",(0,s.jsxs)(o.p,{children:["Regular blog authors can be added to ",(0,s.jsx)(o.code,{children:"authors.yml"}),"."]}),"\n",(0,s.jsx)(o.p,{children:"The blog post date can be extracted from filenames, such as:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:(0,s.jsx)(o.code,{children:"2019-05-30-welcome.md"})}),"\n",(0,s.jsx)(o.li,{children:(0,s.jsx)(o.code,{children:"2019-05-30-welcome/index.md"})}),"\n"]}),"\n",(0,s.jsx)(o.p,{children:"A blog post folder can be convenient to co-locate blog post images:"}),"\n",(0,s.jsx)(o.p,{children:(0,s.jsx)(o.img,{alt:"Docusaurus Plushie",src:n(9734).A+"",width:"1500",height:"500"})}),"\n",(0,s.jsx)(o.p,{children:"The blog supports tags as well!"}),"\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.strong,{children:"And if you don't want a blog"}),": just delete this directory, and use ",(0,s.jsx)(o.code,{children:"blog: false"})," in your Docusaurus config."]})]})}function d(e={}){const{wrapper:o}={...(0,t.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},9734:(e,o,n)=>{n.d(o,{A:()=>s});const s=n.p+"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"},8453:(e,o,n)=>{n.d(o,{R:()=>l,x:()=>a});var s=n(6540);const t={},r=s.createContext(t);function l(e){const o=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d9f32620.64356def.js b/assets/js/d9f32620.18e87f28.js similarity index 96% rename from assets/js/d9f32620.64356def.js rename to assets/js/d9f32620.18e87f28.js index 162e08f5b..bdd1c0774 100644 --- a/assets/js/d9f32620.64356def.js +++ b/assets/js/d9f32620.18e87f28.js @@ -1 +1 @@ -"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[5557],{7447:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>i,contentTitle:()=>l,default:()=>d,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var s=n(4848),t=n(8453);const r={slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},l=void 0,a={permalink:"/blog/welcome",source:"@site/blog/2021-08-26-welcome/index.md",title:"Welcome",description:"Docusaurus blogging features are powered by the blog plugin.",date:"2021-08-26T00:00:00.000Z",tags:[{inline:!1,label:"Facebook",permalink:"/blog/tags/facebook",description:"Facebook tag description"},{inline:!1,label:"Hello",permalink:"/blog/tags/hello",description:"Hello tag description"},{inline:!1,label:"Docusaurus",permalink:"/blog/tags/docusaurus",description:"Docusaurus tag description"}],readingTime:.405,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},unlisted:!1,nextItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"}},i={authorsImageUrls:[void 0,void 0]},c=[];function u(e){const o={a:"a",code:"code",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.a,{href:"https://docusaurus.io/docs/blog",children:"Docusaurus blogging features"})," are powered by the ",(0,s.jsx)(o.a,{href:"https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog",children:"blog plugin"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["Simply add Markdown files (or folders) to the ",(0,s.jsx)(o.code,{children:"blog"})," directory."]}),"\n",(0,s.jsxs)(o.p,{children:["Regular blog authors can be added to ",(0,s.jsx)(o.code,{children:"authors.yml"}),"."]}),"\n",(0,s.jsx)(o.p,{children:"The blog post date can be extracted from filenames, such as:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:(0,s.jsx)(o.code,{children:"2019-05-30-welcome.md"})}),"\n",(0,s.jsx)(o.li,{children:(0,s.jsx)(o.code,{children:"2019-05-30-welcome/index.md"})}),"\n"]}),"\n",(0,s.jsx)(o.p,{children:"A blog post folder can be convenient to co-locate blog post images:"}),"\n",(0,s.jsx)(o.p,{children:(0,s.jsx)(o.img,{alt:"Docusaurus Plushie",src:n(7450).A+"",width:"1500",height:"500"})}),"\n",(0,s.jsx)(o.p,{children:"The blog supports tags as well!"}),"\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.strong,{children:"And if you don't want a blog"}),": just delete this directory, and use ",(0,s.jsx)(o.code,{children:"blog: false"})," in your Docusaurus config."]})]})}function d(e={}){const{wrapper:o}={...(0,t.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},7450:(e,o,n)=>{n.d(o,{A:()=>s});const s=n.p+"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"},8453:(e,o,n)=>{n.d(o,{R:()=>l,x:()=>a});var s=n(6540);const t={},r=s.createContext(t);function l(e){const o=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[5557],{7447:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>i,contentTitle:()=>l,default:()=>d,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var s=n(4848),t=n(8453);const r={slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},l=void 0,a={permalink:"/blog/welcome",source:"@site/blog/2021-08-26-welcome/index.md",title:"Welcome",description:"Docusaurus blogging features are powered by the blog plugin.",date:"2021-08-26T00:00:00.000Z",tags:[{inline:!1,label:"Facebook",permalink:"/blog/tags/facebook",description:"Facebook tag description"},{inline:!1,label:"Hello",permalink:"/blog/tags/hello",description:"Hello tag description"},{inline:!1,label:"Docusaurus",permalink:"/blog/tags/docusaurus",description:"Docusaurus tag description"}],readingTime:.405,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},unlisted:!1,nextItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"}},i={authorsImageUrls:[void 0,void 0]},c=[];function u(e){const o={a:"a",code:"code",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.a,{href:"https://docusaurus.io/docs/blog",children:"Docusaurus blogging features"})," are powered by the ",(0,s.jsx)(o.a,{href:"https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog",children:"blog plugin"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["Simply add Markdown files (or folders) to the ",(0,s.jsx)(o.code,{children:"blog"})," directory."]}),"\n",(0,s.jsxs)(o.p,{children:["Regular blog authors can be added to ",(0,s.jsx)(o.code,{children:"authors.yml"}),"."]}),"\n",(0,s.jsx)(o.p,{children:"The blog post date can be extracted from filenames, such as:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:(0,s.jsx)(o.code,{children:"2019-05-30-welcome.md"})}),"\n",(0,s.jsx)(o.li,{children:(0,s.jsx)(o.code,{children:"2019-05-30-welcome/index.md"})}),"\n"]}),"\n",(0,s.jsx)(o.p,{children:"A blog post folder can be convenient to co-locate blog post images:"}),"\n",(0,s.jsx)(o.p,{children:(0,s.jsx)(o.img,{alt:"Docusaurus Plushie",src:n(9734).A+"",width:"1500",height:"500"})}),"\n",(0,s.jsx)(o.p,{children:"The blog supports tags as well!"}),"\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.strong,{children:"And if you don't want a blog"}),": just delete this directory, and use ",(0,s.jsx)(o.code,{children:"blog: false"})," in your Docusaurus config."]})]})}function d(e={}){const{wrapper:o}={...(0,t.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},9734:(e,o,n)=>{n.d(o,{A:()=>s});const s=n.p+"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"},8453:(e,o,n)=>{n.d(o,{R:()=>l,x:()=>a});var s=n(6540);const t={},r=s.createContext(t);function l(e){const o=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.e408da39.js b/assets/js/runtime~main.632c31fa.js similarity index 68% rename from assets/js/runtime~main.e408da39.js rename to assets/js/runtime~main.632c31fa.js index ca9648696..1417fd0ea 100644 --- a/assets/js/runtime~main.e408da39.js +++ b/assets/js/runtime~main.632c31fa.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,f,c,b,d={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={id:e,loaded:!1,exports:{}};return d[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=d,r.c=t,e=[],r.O=(a,f,c,b)=>{if(!f){var d=1/0;for(i=0;i=b)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[f,c,b]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var d={};a=a||[null,f({}),f([]),f(f)];for(var t=2&c&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((a=>d[a]=()=>e[a]));return d.default=()=>e,r.d(b,d),b},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,f)=>(r.f[f](e,a),a)),[])),r.u=e=>"assets/js/"+({72:"325586e3",191:"096dedec",197:"8907549d",381:"485ec31e",406:"9c41ee96",594:"5e8c322a",811:"be90b059",845:"e2509f05",849:"0058b4c6",1101:"a2d8571d",1122:"ed5bf3ae",1235:"a7456010",1259:"ce9294c7",1343:"695ba452",1485:"3ccf3569",1903:"acecf23e",1972:"73664a40",2409:"02ba3073",2452:"d63a007d",2467:"0963d772",2560:"3b483d89",2583:"c89cbdb5",2711:"9e4087bc",2925:"857d4e3f",3019:"5fa7e143",3212:"d4284aa7",3249:"ccc49370",3258:"e775a79f",3276:"e5aefb32",3403:"a74188c8",3520:"322a4173",3637:"f4f34a3a",3685:"7bdd1ca2",3694:"8717b14a",3738:"c40bfeb3",3755:"8b12d01d",3800:"0058754d",3896:"7b6accd5",3976:"bb00feff",4134:"393be207",4196:"af5821cc",4548:"bb44652f",4583:"1df93b7f",4584:"f82cd581",4813:"6875c492",5465:"1a3af327",5557:"d9f32620",5641:"7b57244c",5742:"aba21aa0",5998:"95fee0fa",6061:"1f391b9e",6352:"7bbf514f",6354:"3b4d2dbf",6507:"1bb47565",6708:"afb10fe8",6956:"322eff50",6991:"5e825ac7",7098:"a7bd4aaa",7472:"814f3328",7556:"c401fedd",7643:"a6aa9e1f",7758:"bb551ae2",7930:"50bcd713",8025:"5e90a9b3",8121:"3a2db09e",8130:"f81c1134",8146:"c15d9823",8209:"01a85c17",8246:"9faee089",8266:"953f1d2e",8275:"694c912d",8401:"17896441",8462:"3217192f",8609:"925b3f96",8737:"7661071f",8830:"45d7547e",8910:"8a5469a7",9048:"a94703ab",9088:"6edf06a3",9325:"59362658",9328:"e273c56f",9647:"5e95c892",9729:"f87cbaa6",9773:"347ca734",9858:"36994c47",9873:"ca1b7bc1",9996:"813b1aa0"}[e]||e)+"."+{72:"2140e734",191:"30379ecf",197:"03a1247e",381:"86f6b6e1",406:"0bc9789f",594:"f1a2cf1d",811:"3e577c6d",845:"4ca4b571",849:"2f3efbe0",1101:"0fce0fda",1122:"5c596059",1235:"01c51c11",1259:"f9970bc7",1343:"49e6d7bb",1485:"7e6f0b85",1538:"36cd98a5",1903:"408603ab",1972:"1dbb218a",2237:"1f9cd552",2409:"5186eff1",2452:"705f2514",2467:"745f1719",2560:"528eda14",2583:"5aa3eaf2",2711:"aab2f17a",2925:"3bbe26c4",3019:"f30eef42",3212:"81d46ac2",3242:"72351e59",3249:"a860a04d",3258:"b3e2b9f3",3276:"074405ba",3403:"2cd23145",3520:"bebbc560",3637:"f878fecd",3685:"58365423",3694:"defcb0a0",3738:"d1baf258",3755:"3541dc88",3800:"66466830",3896:"6478b48e",3976:"65d19b50",4134:"eb56c4bb",4196:"e4f3bb8b",4548:"2297aa33",4583:"5b9ecba7",4584:"f58dc1df",4813:"7f7c452b",5465:"e2e46fc2",5557:"64356def",5641:"d348e645",5742:"5b35ab57",5998:"2fef361c",6061:"02e0cec9",6352:"ff4bdf59",6354:"f165ea6c",6507:"e54fee76",6708:"7b643256",6956:"6f17dbb4",6991:"d69175a2",7098:"4e0bd470",7472:"7b603e5e",7556:"a2940cf7",7643:"b6d5d71f",7758:"1ad75dcd",7930:"8cbc3b09",8025:"eeeb6ef1",8121:"70c9a4ae",8130:"6e2c5413",8146:"3e8fd083",8209:"008fe76a",8246:"9857c5d5",8266:"8fd144f7",8275:"4dcd88ad",8401:"239d49bc",8462:"9a878f15",8609:"7d402955",8737:"bdcf50cf",8830:"36b76f50",8910:"8d0addb0",9048:"39d313f6",9088:"f8f740cd",9325:"8c339f08",9328:"2490c944",9647:"67295b42",9729:"e10aa3f9",9773:"7eff03be",9858:"e2f41c0d",9873:"20235319",9996:"23a8af2a"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),c={},b="adminforth:",r.l=(e,a,f,d)=>{if(c[e])c[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"8401",59362658:"9325","325586e3":"72","096dedec":"191","8907549d":"197","485ec31e":"381","9c41ee96":"406","5e8c322a":"594",be90b059:"811",e2509f05:"845","0058b4c6":"849",a2d8571d:"1101",ed5bf3ae:"1122",a7456010:"1235",ce9294c7:"1259","695ba452":"1343","3ccf3569":"1485",acecf23e:"1903","73664a40":"1972","02ba3073":"2409",d63a007d:"2452","0963d772":"2467","3b483d89":"2560",c89cbdb5:"2583","9e4087bc":"2711","857d4e3f":"2925","5fa7e143":"3019",d4284aa7:"3212",ccc49370:"3249",e775a79f:"3258",e5aefb32:"3276",a74188c8:"3403","322a4173":"3520",f4f34a3a:"3637","7bdd1ca2":"3685","8717b14a":"3694",c40bfeb3:"3738","8b12d01d":"3755","0058754d":"3800","7b6accd5":"3896",bb00feff:"3976","393be207":"4134",af5821cc:"4196",bb44652f:"4548","1df93b7f":"4583",f82cd581:"4584","6875c492":"4813","1a3af327":"5465",d9f32620:"5557","7b57244c":"5641",aba21aa0:"5742","95fee0fa":"5998","1f391b9e":"6061","7bbf514f":"6352","3b4d2dbf":"6354","1bb47565":"6507",afb10fe8:"6708","322eff50":"6956","5e825ac7":"6991",a7bd4aaa:"7098","814f3328":"7472",c401fedd:"7556",a6aa9e1f:"7643",bb551ae2:"7758","50bcd713":"7930","5e90a9b3":"8025","3a2db09e":"8121",f81c1134:"8130",c15d9823:"8146","01a85c17":"8209","9faee089":"8246","953f1d2e":"8266","694c912d":"8275","3217192f":"8462","925b3f96":"8609","7661071f":"8737","45d7547e":"8830","8a5469a7":"8910",a94703ab:"9048","6edf06a3":"9088",e273c56f:"9328","5e95c892":"9647",f87cbaa6:"9729","347ca734":"9773","36994c47":"9858",ca1b7bc1:"9873","813b1aa0":"9996"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,f)=>{var c=r.o(e,a)?e[a]:void 0;if(0!==c)if(c)f.push(c[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var b=new Promise(((f,b)=>c=e[a]=[f,b]));f.push(c[2]=b);var d=r.p+r.u(a),t=new Error;r.l(d,(f=>{if(r.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var b=f&&("load"===f.type?"missing":f.type),d=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+b+": "+d+")",t.name="ChunkLoadError",t.type=b,t.request=d,c[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var c,b,d=f[0],t=f[1],o=f[2],n=0;if(d.some((a=>0!==e[a]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(a&&a(f);n{"use strict";var e,a,f,d,c,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=b,r.c=t,e=[],r.O=(a,f,d,c)=>{if(!f){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[f,d,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,f)=>(r.f[f](e,a),a)),[])),r.u=e=>"assets/js/"+({72:"325586e3",191:"096dedec",197:"8907549d",381:"485ec31e",406:"9c41ee96",594:"5e8c322a",811:"be90b059",845:"e2509f05",849:"0058b4c6",1101:"a2d8571d",1122:"ed5bf3ae",1235:"a7456010",1259:"ce9294c7",1343:"695ba452",1485:"3ccf3569",1903:"acecf23e",1972:"73664a40",2409:"02ba3073",2452:"d63a007d",2467:"0963d772",2560:"3b483d89",2583:"c89cbdb5",2711:"9e4087bc",2925:"857d4e3f",3019:"5fa7e143",3212:"d4284aa7",3249:"ccc49370",3258:"e775a79f",3276:"e5aefb32",3403:"a74188c8",3520:"322a4173",3637:"f4f34a3a",3685:"7bdd1ca2",3694:"8717b14a",3738:"c40bfeb3",3755:"8b12d01d",3800:"0058754d",3896:"7b6accd5",3976:"bb00feff",4134:"393be207",4196:"af5821cc",4548:"bb44652f",4583:"1df93b7f",4584:"f82cd581",4813:"6875c492",5465:"1a3af327",5557:"d9f32620",5641:"7b57244c",5742:"aba21aa0",5998:"95fee0fa",6061:"1f391b9e",6352:"7bbf514f",6354:"3b4d2dbf",6507:"1bb47565",6708:"afb10fe8",6956:"322eff50",6991:"5e825ac7",7098:"a7bd4aaa",7472:"814f3328",7556:"c401fedd",7643:"a6aa9e1f",7758:"bb551ae2",7930:"50bcd713",8025:"5e90a9b3",8121:"3a2db09e",8130:"f81c1134",8146:"c15d9823",8209:"01a85c17",8246:"9faee089",8266:"953f1d2e",8275:"694c912d",8401:"17896441",8462:"3217192f",8609:"925b3f96",8737:"7661071f",8830:"45d7547e",8910:"8a5469a7",9048:"a94703ab",9088:"6edf06a3",9325:"59362658",9328:"e273c56f",9647:"5e95c892",9729:"f87cbaa6",9773:"347ca734",9858:"36994c47",9873:"ca1b7bc1",9996:"813b1aa0"}[e]||e)+"."+{72:"2140e734",191:"30379ecf",197:"03a1247e",381:"86f6b6e1",406:"0bc9789f",594:"f1a2cf1d",811:"3e577c6d",845:"4ca4b571",849:"2f3efbe0",1101:"0fce0fda",1122:"5c596059",1235:"01c51c11",1259:"f9970bc7",1343:"49e6d7bb",1485:"7e6f0b85",1538:"36cd98a5",1903:"408603ab",1972:"1dbb218a",2237:"1f9cd552",2409:"5186eff1",2452:"705f2514",2467:"745f1719",2560:"528eda14",2583:"5aa3eaf2",2711:"aab2f17a",2925:"3bbe26c4",3019:"f30eef42",3212:"81d46ac2",3242:"72351e59",3249:"a860a04d",3258:"b3e2b9f3",3276:"074405ba",3403:"2cd23145",3520:"bebbc560",3637:"f878fecd",3685:"58365423",3694:"defcb0a0",3738:"d1baf258",3755:"3541dc88",3800:"ee98d7f5",3896:"6478b48e",3976:"65d19b50",4134:"eb56c4bb",4196:"e4f3bb8b",4548:"2297aa33",4583:"5b9ecba7",4584:"f58dc1df",4813:"7f7c452b",5465:"e2e46fc2",5557:"18e87f28",5641:"d348e645",5742:"5b35ab57",5998:"2fef361c",6061:"02e0cec9",6352:"ff4bdf59",6354:"f165ea6c",6507:"e54fee76",6708:"7b643256",6956:"955b9b82",6991:"d69175a2",7098:"4e0bd470",7472:"7b603e5e",7556:"a2940cf7",7643:"b6d5d71f",7758:"1ad75dcd",7930:"8cbc3b09",8025:"eeeb6ef1",8121:"70c9a4ae",8130:"6e2c5413",8146:"3e8fd083",8209:"008fe76a",8246:"9857c5d5",8266:"8fd144f7",8275:"4dcd88ad",8401:"239d49bc",8462:"9a878f15",8609:"7d402955",8737:"078163dc",8830:"36b76f50",8910:"8d0addb0",9048:"39d313f6",9088:"f8f740cd",9325:"8c339f08",9328:"2490c944",9647:"67295b42",9729:"e10aa3f9",9773:"7eff03be",9858:"e2f41c0d",9873:"20235319",9996:"23a8af2a"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},c="adminforth:",r.l=(e,a,f,b)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"8401",59362658:"9325","325586e3":"72","096dedec":"191","8907549d":"197","485ec31e":"381","9c41ee96":"406","5e8c322a":"594",be90b059:"811",e2509f05:"845","0058b4c6":"849",a2d8571d:"1101",ed5bf3ae:"1122",a7456010:"1235",ce9294c7:"1259","695ba452":"1343","3ccf3569":"1485",acecf23e:"1903","73664a40":"1972","02ba3073":"2409",d63a007d:"2452","0963d772":"2467","3b483d89":"2560",c89cbdb5:"2583","9e4087bc":"2711","857d4e3f":"2925","5fa7e143":"3019",d4284aa7:"3212",ccc49370:"3249",e775a79f:"3258",e5aefb32:"3276",a74188c8:"3403","322a4173":"3520",f4f34a3a:"3637","7bdd1ca2":"3685","8717b14a":"3694",c40bfeb3:"3738","8b12d01d":"3755","0058754d":"3800","7b6accd5":"3896",bb00feff:"3976","393be207":"4134",af5821cc:"4196",bb44652f:"4548","1df93b7f":"4583",f82cd581:"4584","6875c492":"4813","1a3af327":"5465",d9f32620:"5557","7b57244c":"5641",aba21aa0:"5742","95fee0fa":"5998","1f391b9e":"6061","7bbf514f":"6352","3b4d2dbf":"6354","1bb47565":"6507",afb10fe8:"6708","322eff50":"6956","5e825ac7":"6991",a7bd4aaa:"7098","814f3328":"7472",c401fedd:"7556",a6aa9e1f:"7643",bb551ae2:"7758","50bcd713":"7930","5e90a9b3":"8025","3a2db09e":"8121",f81c1134:"8130",c15d9823:"8146","01a85c17":"8209","9faee089":"8246","953f1d2e":"8266","694c912d":"8275","3217192f":"8462","925b3f96":"8609","7661071f":"8737","45d7547e":"8830","8a5469a7":"8910",a94703ab:"9048","6edf06a3":"9088",e273c56f:"9328","5e95c892":"9647",f87cbaa6:"9729","347ca734":"9773","36994c47":"9858",ca1b7bc1:"9873","813b1aa0":"9996"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var c=new Promise(((f,c)=>d=e[a]=[f,c]));f.push(d[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,(f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var c=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,c,b=f[0],t=f[1],o=f[2],n=0;if(b.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n - + diff --git a/blog/first-blog-post/index.html b/blog/first-blog-post/index.html index c8b9b8f5e..0e03c035e 100644 --- a/blog/first-blog-post/index.html +++ b/blog/first-blog-post/index.html @@ -10,7 +10,7 @@ - + diff --git a/blog/index.html b/blog/index.html index f83279878..58de9f849 100644 --- a/blog/index.html +++ b/blog/index.html @@ -10,7 +10,7 @@ - + diff --git a/blog/long-blog-post/index.html b/blog/long-blog-post/index.html index b2d43be2e..4a8effea4 100644 --- a/blog/long-blog-post/index.html +++ b/blog/long-blog-post/index.html @@ -10,7 +10,7 @@ - + diff --git a/blog/mdx-blog-post/index.html b/blog/mdx-blog-post/index.html index 6de4b8c22..2ebbf3d2f 100644 --- a/blog/mdx-blog-post/index.html +++ b/blog/mdx-blog-post/index.html @@ -10,7 +10,7 @@ - + diff --git a/blog/tags/docusaurus/index.html b/blog/tags/docusaurus/index.html index be5c50048..f1fbff629 100644 --- a/blog/tags/docusaurus/index.html +++ b/blog/tags/docusaurus/index.html @@ -10,7 +10,7 @@ - + diff --git a/blog/tags/facebook/index.html b/blog/tags/facebook/index.html index e6e31c0ee..7ba8f737a 100644 --- a/blog/tags/facebook/index.html +++ b/blog/tags/facebook/index.html @@ -10,7 +10,7 @@ - + diff --git a/blog/tags/hello/index.html b/blog/tags/hello/index.html index f2f180d6c..f5604f0a5 100644 --- a/blog/tags/hello/index.html +++ b/blog/tags/hello/index.html @@ -10,7 +10,7 @@ - + diff --git a/blog/tags/hola/index.html b/blog/tags/hola/index.html index d9cbafe65..11a5ff123 100644 --- a/blog/tags/hola/index.html +++ b/blog/tags/hola/index.html @@ -10,7 +10,7 @@ - + diff --git a/blog/tags/index.html b/blog/tags/index.html index aca0e7665..fbd8e14ad 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -10,7 +10,7 @@ - + diff --git a/blog/welcome/index.html b/blog/welcome/index.html index 38d723605..d38435dce 100644 --- a/blog/welcome/index.html +++ b/blog/welcome/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/index.html b/docs/api/index.html index e553ef35d..90ee84839 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/plugins/AuditLog/types/index.html b/docs/api/plugins/AuditLog/types/index.html index 6e757489c..a6e3a37b2 100644 --- a/docs/api/plugins/AuditLog/types/index.html +++ b/docs/api/plugins/AuditLog/types/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/plugins/AuditLog/types/type-aliases/PluginOptions/index.html b/docs/api/plugins/AuditLog/types/type-aliases/PluginOptions/index.html index 22f942275..225cbb1ef 100644 --- a/docs/api/plugins/AuditLog/types/type-aliases/PluginOptions/index.html +++ b/docs/api/plugins/AuditLog/types/type-aliases/PluginOptions/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/plugins/ForeignInlineListPlugin/types/index.html b/docs/api/plugins/ForeignInlineListPlugin/types/index.html index 29aa9498d..a53529882 100644 --- a/docs/api/plugins/ForeignInlineListPlugin/types/index.html +++ b/docs/api/plugins/ForeignInlineListPlugin/types/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/plugins/ForeignInlineListPlugin/types/type-aliases/PluginOptions/index.html b/docs/api/plugins/ForeignInlineListPlugin/types/type-aliases/PluginOptions/index.html index 633646117..f8b1e8b71 100644 --- a/docs/api/plugins/ForeignInlineListPlugin/types/type-aliases/PluginOptions/index.html +++ b/docs/api/plugins/ForeignInlineListPlugin/types/type-aliases/PluginOptions/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/enumerations/ActionCheckSource/index.html b/docs/api/types/AdminForthConfig/enumerations/ActionCheckSource/index.html index 801f05368..0757ba946 100644 --- a/docs/api/types/AdminForthConfig/enumerations/ActionCheckSource/index.html +++ b/docs/api/types/AdminForthConfig/enumerations/ActionCheckSource/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/enumerations/AdminForthDataTypes/index.html b/docs/api/types/AdminForthConfig/enumerations/AdminForthDataTypes/index.html index c1b02e683..f60678f1f 100644 --- a/docs/api/types/AdminForthConfig/enumerations/AdminForthDataTypes/index.html +++ b/docs/api/types/AdminForthConfig/enumerations/AdminForthDataTypes/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/enumerations/AdminForthFilterOperators/index.html b/docs/api/types/AdminForthConfig/enumerations/AdminForthFilterOperators/index.html index f481784e0..cdff91d0b 100644 --- a/docs/api/types/AdminForthConfig/enumerations/AdminForthFilterOperators/index.html +++ b/docs/api/types/AdminForthConfig/enumerations/AdminForthFilterOperators/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/enumerations/AdminForthMenuTypes/index.html b/docs/api/types/AdminForthConfig/enumerations/AdminForthMenuTypes/index.html index 005869152..8d30506bc 100644 --- a/docs/api/types/AdminForthConfig/enumerations/AdminForthMenuTypes/index.html +++ b/docs/api/types/AdminForthConfig/enumerations/AdminForthMenuTypes/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/enumerations/AdminForthResourcePages/index.html b/docs/api/types/AdminForthConfig/enumerations/AdminForthResourcePages/index.html index c13b5fa66..ded84bef6 100644 --- a/docs/api/types/AdminForthConfig/enumerations/AdminForthResourcePages/index.html +++ b/docs/api/types/AdminForthConfig/enumerations/AdminForthResourcePages/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/enumerations/AdminForthSortDirections/index.html b/docs/api/types/AdminForthConfig/enumerations/AdminForthSortDirections/index.html index 2f5adce1c..5467639bc 100644 --- a/docs/api/types/AdminForthConfig/enumerations/AdminForthSortDirections/index.html +++ b/docs/api/types/AdminForthConfig/enumerations/AdminForthSortDirections/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/enumerations/AllowedActionsEnum/index.html b/docs/api/types/AdminForthConfig/enumerations/AllowedActionsEnum/index.html index 3f4bb328e..91b978ce2 100644 --- a/docs/api/types/AdminForthConfig/enumerations/AllowedActionsEnum/index.html +++ b/docs/api/types/AdminForthConfig/enumerations/AllowedActionsEnum/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/index.html b/docs/api/types/AdminForthConfig/index.html index b06a0b7f1..9e0ed56f8 100644 --- a/docs/api/types/AdminForthConfig/index.html +++ b/docs/api/types/AdminForthConfig/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/interfaces/AdminForthClass/index.html b/docs/api/types/AdminForthConfig/interfaces/AdminForthClass/index.html index 347b7cb2f..c50ef20fe 100644 --- a/docs/api/types/AdminForthConfig/interfaces/AdminForthClass/index.html +++ b/docs/api/types/AdminForthConfig/interfaces/AdminForthClass/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/interfaces/AdminForthPluginType/index.html b/docs/api/types/AdminForthConfig/interfaces/AdminForthPluginType/index.html index cc9fe1e58..28f6097fd 100644 --- a/docs/api/types/AdminForthConfig/interfaces/AdminForthPluginType/index.html +++ b/docs/api/types/AdminForthConfig/interfaces/AdminForthPluginType/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/interfaces/CodeInjectorType/index.html b/docs/api/types/AdminForthConfig/interfaces/CodeInjectorType/index.html index 48d3b72b4..2d8f34188 100644 --- a/docs/api/types/AdminForthConfig/interfaces/CodeInjectorType/index.html +++ b/docs/api/types/AdminForthConfig/interfaces/CodeInjectorType/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/interfaces/ExpressHttpServer/index.html b/docs/api/types/AdminForthConfig/interfaces/ExpressHttpServer/index.html index f5a70f695..6d3c57097 100644 --- a/docs/api/types/AdminForthConfig/interfaces/ExpressHttpServer/index.html +++ b/docs/api/types/AdminForthConfig/interfaces/ExpressHttpServer/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/interfaces/GenericHttpServer/index.html b/docs/api/types/AdminForthConfig/interfaces/GenericHttpServer/index.html index 35c0d89a1..1a7df2186 100644 --- a/docs/api/types/AdminForthConfig/interfaces/GenericHttpServer/index.html +++ b/docs/api/types/AdminForthConfig/interfaces/GenericHttpServer/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/AdminForthColumnEnumItem/index.html b/docs/api/types/AdminForthConfig/type-aliases/AdminForthColumnEnumItem/index.html index 2829b8b7b..471ae45de 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/AdminForthColumnEnumItem/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/AdminForthColumnEnumItem/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/AdminForthComponentDeclaration/index.html b/docs/api/types/AdminForthConfig/type-aliases/AdminForthComponentDeclaration/index.html index 680c6a0bc..043e269fe 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/AdminForthComponentDeclaration/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/AdminForthComponentDeclaration/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/AdminForthComponentDeclarationFull/index.html b/docs/api/types/AdminForthConfig/type-aliases/AdminForthComponentDeclarationFull/index.html index af0eeda66..4b3f38c3b 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/AdminForthComponentDeclarationFull/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/AdminForthComponentDeclarationFull/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/AdminForthConfig/index.html b/docs/api/types/AdminForthConfig/type-aliases/AdminForthConfig/index.html index f8dcac189..dae90af51 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/AdminForthConfig/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/AdminForthConfig/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/AdminForthConfigMenuItem/index.html b/docs/api/types/AdminForthConfig/type-aliases/AdminForthConfigMenuItem/index.html index bebb6a5e4..1c93f784b 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/AdminForthConfigMenuItem/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/AdminForthConfigMenuItem/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/AdminForthDataSource/index.html b/docs/api/types/AdminForthConfig/type-aliases/AdminForthDataSource/index.html index 2215a21e8..69a417f2b 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/AdminForthDataSource/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/AdminForthDataSource/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/AdminForthFieldComponents/index.html b/docs/api/types/AdminForthConfig/type-aliases/AdminForthFieldComponents/index.html index be0b75083..c464d0662 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/AdminForthFieldComponents/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/AdminForthFieldComponents/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/AdminForthForeignResource/index.html b/docs/api/types/AdminForthConfig/type-aliases/AdminForthForeignResource/index.html index 8c7ea7a52..1ec9ca168 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/AdminForthForeignResource/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/AdminForthForeignResource/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/AdminForthResource/index.html b/docs/api/types/AdminForthConfig/type-aliases/AdminForthResource/index.html index 2c9a5813a..4ff24cfbc 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/AdminForthResource/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/AdminForthResource/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/AdminForthResourceColumn/index.html b/docs/api/types/AdminForthConfig/type-aliases/AdminForthResourceColumn/index.html index 4fbfaaa98..31e516933 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/AdminForthResourceColumn/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/AdminForthResourceColumn/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/AdminUser/index.html b/docs/api/types/AdminForthConfig/type-aliases/AdminUser/index.html index bdc1e53d0..cf45ba569 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/AdminUser/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/AdminUser/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/AfterDataSourceResponseFunction/index.html b/docs/api/types/AdminForthConfig/type-aliases/AfterDataSourceResponseFunction/index.html index 6d2a7f4f1..9ae846641 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/AfterDataSourceResponseFunction/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/AfterDataSourceResponseFunction/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/AfterSaveFunction/index.html b/docs/api/types/AdminForthConfig/type-aliases/AfterSaveFunction/index.html index 86b74ece9..c759c2e05 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/AfterSaveFunction/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/AfterSaveFunction/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/AllowedActionValue/index.html b/docs/api/types/AdminForthConfig/type-aliases/AllowedActionValue/index.html index 11efdc39c..8295e72e8 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/AllowedActionValue/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/AllowedActionValue/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/AllowedActions/index.html b/docs/api/types/AdminForthConfig/type-aliases/AllowedActions/index.html index 7654122fe..d539cfeba 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/AllowedActions/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/AllowedActions/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/BeforeDataSourceRequestFunction/index.html b/docs/api/types/AdminForthConfig/type-aliases/BeforeDataSourceRequestFunction/index.html index 0f5fe6e73..7566d22a2 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/BeforeDataSourceRequestFunction/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/BeforeDataSourceRequestFunction/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/BeforeSaveFunction/index.html b/docs/api/types/AdminForthConfig/type-aliases/BeforeSaveFunction/index.html index 58bd5222b..d8966347e 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/BeforeSaveFunction/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/BeforeSaveFunction/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/AdminForthConfig/type-aliases/ValidationObject/index.html b/docs/api/types/AdminForthConfig/type-aliases/ValidationObject/index.html index 4d5b42221..f588572fe 100644 --- a/docs/api/types/AdminForthConfig/type-aliases/ValidationObject/index.html +++ b/docs/api/types/AdminForthConfig/type-aliases/ValidationObject/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/FrontendAPI/enumerations/AlertVariant/index.html b/docs/api/types/FrontendAPI/enumerations/AlertVariant/index.html index a199147c6..690f61a7a 100644 --- a/docs/api/types/FrontendAPI/enumerations/AlertVariant/index.html +++ b/docs/api/types/FrontendAPI/enumerations/AlertVariant/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/FrontendAPI/index.html b/docs/api/types/FrontendAPI/index.html index 2e67ab20f..de2647eab 100644 --- a/docs/api/types/FrontendAPI/index.html +++ b/docs/api/types/FrontendAPI/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface/index.html b/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface/index.html index ac48b876a..1ab55a398 100644 --- a/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface/index.html +++ b/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/FrontendAPI/type-aliases/AlertParams/index.html b/docs/api/types/FrontendAPI/type-aliases/AlertParams/index.html index 779d0a753..74b2a1f4b 100644 --- a/docs/api/types/FrontendAPI/type-aliases/AlertParams/index.html +++ b/docs/api/types/FrontendAPI/type-aliases/AlertParams/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/FrontendAPI/type-aliases/ConfirmParams/index.html b/docs/api/types/FrontendAPI/type-aliases/ConfirmParams/index.html index 8c3b52f99..3a888cab0 100644 --- a/docs/api/types/FrontendAPI/type-aliases/ConfirmParams/index.html +++ b/docs/api/types/FrontendAPI/type-aliases/ConfirmParams/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/FrontendAPI/type-aliases/FilterParams/index.html b/docs/api/types/FrontendAPI/type-aliases/FilterParams/index.html index cc6366ade..9365142d1 100644 --- a/docs/api/types/FrontendAPI/type-aliases/FilterParams/index.html +++ b/docs/api/types/FrontendAPI/type-aliases/FilterParams/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/api/types/FrontendAPI/type-aliases/Operator/index.html b/docs/api/types/FrontendAPI/type-aliases/Operator/index.html index d711281aa..65f192045 100644 --- a/docs/api/types/FrontendAPI/type-aliases/Operator/index.html +++ b/docs/api/types/FrontendAPI/type-aliases/Operator/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/tutorial/Customization/branding/index.html b/docs/tutorial/Customization/branding/index.html index 033240162..44806d555 100644 --- a/docs/tutorial/Customization/branding/index.html +++ b/docs/tutorial/Customization/branding/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/tutorial/Customization/customFieldRendering/index.html b/docs/tutorial/Customization/customFieldRendering/index.html index 155f7a499..db47bbf09 100644 --- a/docs/tutorial/Customization/customFieldRendering/index.html +++ b/docs/tutorial/Customization/customFieldRendering/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/tutorial/Customization/customPages/index.html b/docs/tutorial/Customization/customPages/index.html index f446cfb3c..8dd8b8ac8 100644 --- a/docs/tutorial/Customization/customPages/index.html +++ b/docs/tutorial/Customization/customPages/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/tutorial/Customization/hooks/index.html b/docs/tutorial/Customization/hooks/index.html index 731f132af..6e0e7cb9d 100644 --- a/docs/tutorial/Customization/hooks/index.html +++ b/docs/tutorial/Customization/hooks/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/tutorial/Customization/limitingAccess/index.html b/docs/tutorial/Customization/limitingAccess/index.html index 524e2f34f..27881c447 100644 --- a/docs/tutorial/Customization/limitingAccess/index.html +++ b/docs/tutorial/Customization/limitingAccess/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/tutorial/Customization/pageInjections/index.html b/docs/tutorial/Customization/pageInjections/index.html index c31e397ef..af23e78ec 100644 --- a/docs/tutorial/Customization/pageInjections/index.html +++ b/docs/tutorial/Customization/pageInjections/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/tutorial/Customization/virtualColumns/index.html b/docs/tutorial/Customization/virtualColumns/index.html index 760affc8b..18eb60f20 100644 --- a/docs/tutorial/Customization/virtualColumns/index.html +++ b/docs/tutorial/Customization/virtualColumns/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/tutorial/Plugins/AuditLog/index.html b/docs/tutorial/Plugins/AuditLog/index.html index bee1be57e..fc55d94ee 100644 --- a/docs/tutorial/Plugins/AuditLog/index.html +++ b/docs/tutorial/Plugins/AuditLog/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/tutorial/Plugins/ForeignInlineList/index.html b/docs/tutorial/Plugins/ForeignInlineList/index.html index 8ce615367..e6173e09a 100644 --- a/docs/tutorial/Plugins/ForeignInlineList/index.html +++ b/docs/tutorial/Plugins/ForeignInlineList/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/tutorial/gettingStarted/index.html b/docs/tutorial/gettingStarted/index.html index 4dadb06f8..4942f89f8 100644 --- a/docs/tutorial/gettingStarted/index.html +++ b/docs/tutorial/gettingStarted/index.html @@ -10,7 +10,7 @@ - + @@ -44,6 +44,7 @@

Sett

Open http://localhost:3500 in your browser and login with credentials adminforth / adminforth.

alt text

After Login you should see:

+

alt text

Possible configuration options

We will use schema with different column types for apartments to show many of AdminForth features.

Check AdminForthConfig for all possible options.

diff --git a/docs/tutorial/glossary/index.html b/docs/tutorial/glossary/index.html index 0ab4c4da1..4c27d97b8 100644 --- a/docs/tutorial/glossary/index.html +++ b/docs/tutorial/glossary/index.html @@ -10,7 +10,7 @@ - + diff --git a/index.html b/index.html index dd33a6534..27842607e 100644 --- a/index.html +++ b/index.html @@ -10,7 +10,7 @@ - + diff --git a/markdown-page/index.html b/markdown-page/index.html index 4c00172a7..f42ba58d5 100644 --- a/markdown-page/index.html +++ b/markdown-page/index.html @@ -10,7 +10,7 @@ - +