@directus/app 9.22.1 → 9.22.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/@directus_extensions-sdk.aec02133.entry.js +1 -0
- package/dist/assets/{FiraMono-Medium.33e88fa9.woff2 → FiraMono-Medium-33e88fa9.woff2} +0 -0
- package/dist/assets/{FiraMono-Medium.f2ff9941.woff → FiraMono-Medium-f2ff9941.woff} +0 -0
- package/dist/assets/{Inter-Black.5ab3de07.woff2 → Inter-Black-5ab3de07.woff2} +0 -0
- package/dist/assets/{Inter-Black.f11705b0.woff → Inter-Black-f11705b0.woff} +0 -0
- package/dist/assets/{Inter-Bold.cd06b48a.woff → Inter-Bold-cd06b48a.woff} +0 -0
- package/dist/assets/{Inter-Bold.f0f54a06.woff2 → Inter-Bold-f0f54a06.woff2} +0 -0
- package/dist/assets/{Inter-Medium.a4e1e7e6.woff2 → Inter-Medium-a4e1e7e6.woff2} +0 -0
- package/dist/assets/{Inter-Medium.f500bbb9.woff → Inter-Medium-f500bbb9.woff} +0 -0
- package/dist/assets/{Inter-MediumItalic.d06751dd.woff → Inter-MediumItalic-d06751dd.woff} +0 -0
- package/dist/assets/{Inter-MediumItalic.d4a7f5d9.woff2 → Inter-MediumItalic-d4a7f5d9.woff2} +0 -0
- package/dist/assets/{Inter-Regular.b825f1bc.woff → Inter-Regular-b825f1bc.woff} +0 -0
- package/dist/assets/{Inter-Regular.c342b1b7.woff2 → Inter-Regular-c342b1b7.woff2} +0 -0
- package/dist/assets/{Inter-SemiBold.3041a990.woff → Inter-SemiBold-3041a990.woff} +0 -0
- package/dist/assets/{Inter-SemiBold.af44b8a2.woff2 → Inter-SemiBold-af44b8a2.woff2} +0 -0
- package/dist/assets/accounts-4ac11ac0.js +1 -0
- package/dist/assets/active-line-7cb67e5d.js +1 -0
- package/dist/assets/activity-4bbc1a74.js +80 -0
- package/dist/assets/activity-log-d1c5f7f9.js +1 -0
- package/dist/assets/add-a-recipe-a5c81989.js +1 -0
- package/dist/assets/af-ZA-f659d8d9.js +1 -0
- package/dist/assets/af-dff620ba.js +1 -0
- package/dist/assets/apl-568a7981.js +1 -0
- package/dist/assets/ar-4ef09c1d.js +1 -0
- package/dist/assets/ar-SA-a317daf8.js +2 -0
- package/dist/assets/ar-dz-e0b72fb0.js +1 -0
- package/dist/assets/ar-kw-68004ff3.js +1 -0
- package/dist/assets/ar-ly-3d3901d5.js +1 -0
- package/dist/assets/ar-ma-24c7c037.js +1 -0
- package/dist/assets/ar-sa-fc93a307.js +1 -0
- package/dist/assets/ar-tn-e5d6130c.js +1 -0
- package/dist/assets/architecture-b6b25b37.js +1 -0
- package/dist/assets/asciiarmor-162cc536.js +1 -0
- package/dist/assets/asn.1-8fb0b7f2.js +1 -0
- package/dist/assets/asterisk-40014f94.js +1 -0
- package/dist/assets/authentication-67696c0d.js +74 -0
- package/dist/assets/autorefresh-26e9b86a.js +1 -0
- package/dist/assets/{avatar-placeholder.446bf113.svg → avatar-placeholder-446bf113.svg} +0 -0
- package/dist/assets/az-9c8fa2c1.js +1 -0
- package/dist/assets/backing-directus-08c7a0b1.js +1 -0
- package/dist/assets/basic-workflows-17f0fecc.js +1 -0
- package/dist/assets/bg-BG-e2fdc54a.js +1 -0
- package/dist/assets/bg-d4b1d0ff.js +1 -0
- package/dist/assets/bn-18179eab.js +1 -0
- package/dist/assets/bn-IN-e39e4d6b.js +1 -0
- package/dist/assets/br-FR-405af7cf.js +1 -0
- package/dist/assets/brainfuck-57c5c16c.js +1 -0
- package/dist/assets/bs-34672f31.js +1 -0
- package/dist/assets/bs-BA-a197e8e7.js +1 -0
- package/dist/assets/build-a-content-hierarchy-72d06925.js +97 -0
- package/dist/assets/ca-27186898.js +1 -0
- package/dist/assets/ca-ES-56a61558.js +1 -0
- package/dist/assets/ckb-IR-656c0d4a.js +1 -0
- package/dist/assets/cli-d01461e2.js +19 -0
- package/dist/assets/clike-7d8bfc2d.js +1 -0
- package/dist/assets/clojure-473cf229.js +1 -0
- package/dist/assets/cmake-6e16b9de.js +1 -0
- package/dist/assets/cobol-21bb6343.js +1 -0
- package/dist/assets/codebase-overview-faeffd53.js +1 -0
- package/dist/assets/coffeescript-9720271f.js +1 -0
- package/dist/assets/collections-20d2d5bb.js +106 -0
- package/dist/assets/collections-9763e362.js +2 -0
- package/dist/assets/collections-bc19d5d3.js +2 -0
- package/dist/assets/commonlisp-5aaf3dae.js +1 -0
- package/dist/assets/conditions-533313f8.js +1 -0
- package/dist/assets/config-options-da189d49.js +153 -0
- package/dist/assets/configure-user-registration-9a777081.js +1 -0
- package/dist/assets/content-22cfff07.js +1 -0
- package/dist/assets/creating-extensions-27cdd1dc.js +13 -0
- package/dist/assets/crystal-8ff257a8.js +1 -0
- package/dist/assets/cs-39629672.js +1 -0
- package/dist/assets/cs-CZ-176dc05a.js +1 -0
- package/dist/assets/css-d2ea08a3.js +1 -0
- package/dist/assets/cy-9d9f8fa4.js +1 -0
- package/dist/assets/cypher-de3e4cda.js +4 -0
- package/dist/assets/d-f6947f21.js +1 -0
- package/dist/assets/da-0174d882.js +1 -0
- package/dist/assets/da-DK-b0201dc3.js +1 -0
- package/dist/assets/dart-473fcfb6.js +1 -0
- package/dist/assets/dashboards-bb293642.js +153 -0
- package/dist/assets/data-model-4aa09dee.js +45 -0
- package/dist/assets/de-35ac3922.js +1 -0
- package/dist/assets/de-DE-b8c985e4.js +1 -0
- package/dist/assets/de-at-9d4c825a.js +1 -0
- package/dist/assets/diff-22c5f7a8.js +1 -0
- package/dist/assets/display-f31ac7fa.js +1 -0
- package/dist/assets/display-templates-d6fe121e.js +1 -0
- package/dist/assets/displays-b7ef9d83.js +49 -0
- package/dist/assets/django-a9850612.js +1 -0
- package/dist/assets/docker-guide-b408b24c.js +82 -0
- package/dist/assets/dockerfile-bd7a4afe.js +1 -0
- package/dist/assets/documentation-930bd684.js +1 -0
- package/dist/assets/dtd-cc84ac46.js +1 -0
- package/dist/assets/dylan-91aed719.js +1 -0
- package/dist/assets/ebnf-380058fa.js +1 -0
- package/dist/assets/ecl-354a9b49.js +1 -0
- package/dist/assets/eiffel-9a5474cb.js +1 -0
- package/dist/assets/el-GR-73459f1e.js +1 -0
- package/dist/assets/el-c2fa7b47.js +1 -0
- package/dist/assets/elm-3d951821.js +1 -0
- package/dist/assets/email-templates-22bb5926.js +2 -0
- package/dist/assets/en-CA-d8b5e193.js +1 -0
- package/dist/assets/en-GB-48cdcb94.js +1 -0
- package/dist/assets/en-au-a2a95c94.js +1 -0
- package/dist/assets/en-gb-997c9d13.js +1 -0
- package/dist/assets/en-nz-040e3b3a.js +1 -0
- package/dist/assets/endpoints-af16445b.js +27 -0
- package/dist/assets/eo-b3c0d686.js +1 -0
- package/dist/assets/erlang-c9dd0ed8.js +1 -0
- package/dist/assets/es-1f15d7d6.js +1 -0
- package/dist/assets/es-419-525ac291.js +1 -0
- package/dist/assets/es-CL-636ecdda.js +1 -0
- package/dist/assets/es-ES-43ed1eb9.js +1 -0
- package/dist/assets/es-MX-15fb8a56.js +1 -0
- package/dist/assets/es-us-df11898b.js +1 -0
- package/dist/assets/et-44c85aed.js +1 -0
- package/dist/assets/et-EE-de5c2439.js +3 -0
- package/dist/assets/eu-02533eef.js +1 -0
- package/dist/assets/extensions-7f162c97.js +12 -0
- package/dist/assets/fa-0e4f7755.js +1 -0
- package/dist/assets/fa-IR-f21358a4.js +1 -0
- package/dist/assets/factor-d85f37e7.js +1 -0
- package/dist/assets/faq-94861308.js +2 -0
- package/dist/assets/fcl-a26bc6d2.js +1 -0
- package/dist/assets/fi-FI-8f65d919.js +1 -0
- package/dist/assets/fi-ad683f74.js +1 -0
- package/dist/assets/field-d6371b5e.js +1 -0
- package/dist/assets/field-types-718c83a0.js +1 -0
- package/dist/assets/fields-3074ab9b.js +135 -0
- package/dist/assets/fields-8d5e2b83.js +1 -0
- package/dist/assets/file-library-ecfdd625.js +1 -0
- package/dist/assets/files-8cfacec8.js +189 -0
- package/dist/assets/filter-rules-c1850383.js +85 -0
- package/dist/assets/filters-98add050.js +1 -0
- package/dist/assets/flows-8049028f.js +172 -0
- package/dist/assets/flows-a3644650.js +51 -0
- package/dist/assets/flows-for-loop-a5083451.js +1 -0
- package/dist/assets/fo-FO-87794db5.js +1 -0
- package/dist/assets/folders-f6a19e2a.js +132 -0
- package/dist/assets/forth-1a5ad5f6.js +1 -0
- package/dist/assets/fortran-cd25f8b2.js +1 -0
- package/dist/assets/fr-5cc22fb9.js +1 -0
- package/dist/assets/fr-CA-eca33f02.js +1 -0
- package/dist/assets/fr-FR-de0e652d.js +1 -0
- package/dist/assets/fr-ca-8fc6e828.js +1 -0
- package/dist/assets/fr-ch-fb646579.js +1 -0
- package/dist/assets/gas-6a34ccdc.js +1 -0
- package/dist/assets/generate-work-reports-587694b7.js +1 -0
- package/dist/assets/gfm-6653114f.js +1 -0
- package/dist/assets/gherkin-c9fffef6.js +1 -0
- package/dist/assets/github-ci-1ef723f0.js +2 -0
- package/dist/assets/gl-29227e91.js +1 -0
- package/dist/assets/glossary-c208981d.js +1 -0
- package/dist/assets/glossary-ebfd896d.js +1 -0
- package/dist/assets/go-1672aabe.js +1 -0
- package/dist/assets/groovy-4482508a.js +1 -0
- package/dist/assets/haml-ce73a8d3.js +1 -0
- package/dist/assets/handlebars-8634370a.js +1 -0
- package/dist/assets/haskell-8b19d0ea.js +1 -0
- package/dist/assets/haskell-literate-39d70d1d.js +1 -0
- package/dist/assets/haxe-52de5e85.js +1 -0
- package/dist/assets/he-IL-872b3606.js +1 -0
- package/dist/assets/he-bfb6a9dd.js +1 -0
- package/dist/assets/hi-IN-57e07a39.js +1 -0
- package/dist/assets/hi-e5148703.js +1 -0
- package/dist/assets/hooks-5d91ffaf.js +87 -0
- package/dist/assets/hr-HR-3708d079.js +1 -0
- package/dist/assets/hr-e9112239.js +1 -0
- package/dist/assets/htmlembedded-f4f486ea.js +1 -0
- package/dist/assets/htmlmixed-6bade0ce.js +1 -0
- package/dist/assets/htmlmixed-feb1b387.js +1 -0
- package/dist/assets/http-c0d70cec.js +1 -0
- package/dist/assets/hu-98b40b95.js +1 -0
- package/dist/assets/hu-HU-a468ad60.js +1 -0
- package/dist/assets/hy-am-fa33d99c.js +1 -0
- package/dist/assets/id-ID-457dde04.js +1 -0
- package/dist/assets/id-a83e0e4e.js +1 -0
- package/dist/assets/idl-6cf4086d.js +1 -0
- package/dist/assets/import-export-9adf6379.js +2 -0
- package/dist/assets/index-04fe765d.js +1 -0
- package/dist/assets/index-054248b1.js +1 -0
- package/dist/assets/index-064ee6d4.js +1 -0
- package/dist/assets/index-0b5d9c91.js +1 -0
- package/dist/assets/index-0c6974ab.js +1 -0
- package/dist/assets/index-10c0af8c.js +1 -0
- package/dist/assets/index-1ad55d9a.js +1 -0
- package/dist/assets/index-1b77db95.js +1 -0
- package/dist/assets/index-1e8eff86.js +1 -0
- package/dist/assets/index-1f3a26d3.js +1 -0
- package/dist/assets/index-210be997.js +1 -0
- package/dist/assets/index-2a1f5121.js +1 -0
- package/dist/assets/index-2c004113.js +1 -0
- package/dist/assets/index-2c40ac97.js +1 -0
- package/dist/assets/index-2de17605.js +1 -0
- package/dist/assets/index-31f8e390.js +1 -0
- package/dist/assets/index-32c296c4.css +1 -0
- package/dist/assets/index-381dff60.js +1 -0
- package/dist/assets/index-399a56ad.js +1 -0
- package/dist/assets/index-3bfb4358.js +1 -0
- package/dist/assets/index-3c095a04.js +1 -0
- package/dist/assets/index-3dee9c02.js +1 -0
- package/dist/assets/index-3e45f799.js +1 -0
- package/dist/assets/index-455161c9.js +1 -0
- package/dist/assets/index-49b29ce6.js +1 -0
- package/dist/assets/index-4d61b570.js +1 -0
- package/dist/assets/index-4d9748f7.js +1 -0
- package/dist/assets/index-56b38285.js +1 -0
- package/dist/assets/index-57f0f3db.js +1 -0
- package/dist/assets/index-5d4af90c.js +1 -0
- package/dist/assets/index-5d4c79a5.js +1 -0
- package/dist/assets/index-65711c6c.js +1 -0
- package/dist/assets/index-68efb28a.js +1 -0
- package/dist/assets/index-6eb39ce0.js +1 -0
- package/dist/assets/index-723042d6.js +1 -0
- package/dist/assets/index-731ded40.js +1 -0
- package/dist/assets/index-74d057cf.js +1 -0
- package/dist/assets/index-773d36d2.js +1 -0
- package/dist/assets/index-7b24cbe2.js +2 -0
- package/dist/assets/index-7be2b1c1.js +1 -0
- package/dist/assets/index-7e469396.js +1 -0
- package/dist/assets/index-7f8f1016.js +1 -0
- package/dist/assets/index-8405338b.js +1 -0
- package/dist/assets/index-8791deae.js +26 -0
- package/dist/assets/index-88722e7a.js +1 -0
- package/dist/assets/index-89d0fcbc.js +1 -0
- package/dist/assets/index-8cabdc40.js +1 -0
- package/dist/assets/index-8d22fc75.js +1 -0
- package/dist/assets/index-8ddd457f.js +1 -0
- package/dist/assets/index-93bcd953.js +1 -0
- package/dist/assets/index-94bd61f4.js +1 -0
- package/dist/assets/index-95bd8f49.js +1 -0
- package/dist/assets/index-97f7cd06.js +1 -0
- package/dist/assets/index-9d18088e.js +1 -0
- package/dist/assets/index-9e7c6721.js +1 -0
- package/dist/assets/index-a06f31c2.js +1 -0
- package/dist/assets/index-a4653314.js +1 -0
- package/dist/assets/index-a4fcd661.js +1 -0
- package/dist/assets/index-a570b7e7.js +1 -0
- package/dist/assets/index-a621ba84.js +1 -0
- package/dist/assets/index-a6d8ed9b.js +1 -0
- package/dist/assets/index-a7f3a99c.js +1 -0
- package/dist/assets/index-aac2fb1f.js +1 -0
- package/dist/assets/index-ab96b485.js +1 -0
- package/dist/assets/index-b1273b30.js +1 -0
- package/dist/assets/index-b4174128.js +1 -0
- package/dist/assets/index-b4b202ee.js +1 -0
- package/dist/assets/index-b722742a.js +1 -0
- package/dist/assets/index-b9586aae.css +1 -0
- package/dist/assets/index-b99c7256.js +1 -0
- package/dist/assets/index-be958c60.js +1 -0
- package/dist/assets/index-bea0d0c4.js +1 -0
- package/dist/assets/index-c2e23522.js +1 -0
- package/dist/assets/index-c3455229.js +1 -0
- package/dist/assets/index-c3a91b89.js +1 -0
- package/dist/assets/index-c401f18b.js +1 -0
- package/dist/assets/index-cd769314.js +1 -0
- package/dist/assets/index-d0e21d63.js +1 -0
- package/dist/assets/index-d1c8bce8.js +1 -0
- package/dist/assets/index-d29aa727.js +1 -0
- package/dist/assets/index-d4e83d3b.js +1 -0
- package/dist/assets/index-e115880b.js +1 -0
- package/dist/assets/index-e7eb341c.js +1 -0
- package/dist/assets/index-e9793b07.js +1 -0
- package/dist/assets/index-e9d2a8bf.js +1 -0
- package/dist/assets/index-e9f13b36.js +1 -0
- package/dist/assets/index-eaa33622.js +1 -0
- package/dist/assets/index-ec150a0e.js +1 -0
- package/dist/assets/index-f3591683.js +1 -0
- package/dist/assets/index-f3971ca0.js +1 -0
- package/dist/assets/index-f676c843.js +1 -0
- package/dist/assets/index-f71e96b8.js +1 -0
- package/dist/assets/index-fcbe91b3.js +1 -0
- package/dist/assets/index.522e44ef.entry.js +3572 -0
- package/dist/assets/input-rich-text-html-18988f9d.js +239 -0
- package/dist/assets/{input-rich-text-html.c4add538.css → input-rich-text-html-c4add538.css} +0 -0
- package/dist/assets/insights-9aa69aad.js +3 -0
- package/dist/assets/interface-fc1f39bf.js +1 -0
- package/dist/assets/interfaces-b1181d73.js +46 -0
- package/dist/assets/introduction-1ed6cd7f.js +1 -0
- package/dist/assets/introduction-423bac02.js +1 -0
- package/dist/assets/introduction-94e8cd96.js +90 -0
- package/dist/assets/introduction-c1406751.js +1 -0
- package/dist/assets/is-7b906e7d.js +1 -0
- package/dist/assets/is-IS-ddcd44b2.js +1 -0
- package/dist/assets/it-IT-ef2400fa.js +1 -0
- package/dist/assets/it-e890d75e.js +1 -0
- package/dist/assets/items-2b67adc0.js +1 -0
- package/dist/assets/items-cdb808f9.js +136 -0
- package/dist/assets/ja-6a964375.js +1 -0
- package/dist/assets/ja-JP-e0a6f25c.js +1 -0
- package/dist/assets/javascript-2a2f7952.js +1 -0
- package/dist/assets/javascript-hint-2c045a43.js +1 -0
- package/dist/assets/jinja2-ce3067e6.js +1 -0
- package/dist/assets/jsonlint-a726fab6.js +8 -0
- package/dist/assets/jsx-bb48d3cc.js +1 -0
- package/dist/assets/julia-2f33a806.js +1 -0
- package/dist/assets/ka-35b18f09.js +1 -0
- package/dist/assets/ka-GE-abfc564f.js +1 -0
- package/dist/assets/kk-e5ef0012.js +1 -0
- package/dist/assets/{kmr-TR.2c6e59b8.js → km-KH-15cb5446.js} +0 -0
- package/dist/assets/kmr-TR-15cb5446.js +1 -0
- package/dist/assets/ko-4e7896ac.js +1 -0
- package/dist/assets/ko-KR-7bce65d1.js +1 -0
- package/dist/assets/ku-TR-b57d2d66.js +1 -0
- package/dist/assets/layouts-271c81c4.js +54 -0
- package/dist/assets/layouts-930ff8f4.js +2 -0
- package/dist/assets/lb-8d116026.js +1 -0
- package/dist/assets/livescript-651acfb1.js +1 -0
- package/dist/assets/{logo.eba1b355.svg → logo-eba1b355.svg} +0 -0
- package/dist/assets/{logo-light.7a327cdd.svg → logo-light-7a327cdd.svg} +0 -0
- package/dist/assets/lt-81f867b9.js +1 -0
- package/dist/assets/lt-LT-2bee7d25.js +1 -0
- package/dist/assets/lua-57899626.js +1 -0
- package/dist/assets/lv-74618824.js +1 -0
- package/dist/assets/mark-selection-bbe7f2be.js +1 -0
- package/dist/assets/match-highlighter-18bf94f6.js +1 -0
- package/dist/assets/matchbrackets-44427931.js +1 -0
- package/dist/assets/{material-icons.0c67479a.woff2 → material-icons-0c67479a.woff2} +0 -0
- package/dist/assets/{material-icons-outline.32738b64.woff2 → material-icons-outline-32738b64.woff2} +0 -0
- package/dist/assets/mathematica-2c493326.js +1 -0
- package/dist/assets/mbox-383d4db9.js +1 -0
- package/dist/assets/{merriweather-bold.3e45b7e7.woff → merriweather-bold-3e45b7e7.woff} +0 -0
- package/dist/assets/{merriweather-bold.8c5b2abc.woff2 → merriweather-bold-8c5b2abc.woff2} +0 -0
- package/dist/assets/{merriweather-italic.bbef4854.woff → merriweather-italic-bbef4854.woff} +0 -0
- package/dist/assets/{merriweather-italic.d40a22c6.woff2 → merriweather-italic-d40a22c6.woff2} +0 -0
- package/dist/assets/{merriweather-light.1e84f5cb.woff2 → merriweather-light-1e84f5cb.woff2} +0 -0
- package/dist/assets/{merriweather-light.499d4490.woff → merriweather-light-499d4490.woff} +0 -0
- package/dist/assets/{merriweather-regular.2661709b.woff2 → merriweather-regular-2661709b.woff2} +0 -0
- package/dist/assets/{merriweather-regular.ff8db8bc.woff → merriweather-regular-ff8db8bc.woff} +0 -0
- package/dist/assets/migrations-fb2b0b18.js +19 -0
- package/dist/assets/mirc-97f92d14.js +1 -0
- package/dist/assets/mk-24081179.js +1 -0
- package/dist/assets/mllike-2dddeedf.js +1 -0
- package/dist/assets/mn-MN-de0ae6eb.js +1 -0
- package/dist/assets/modelica-9a576adb.js +1 -0
- package/dist/assets/modules-db66f055.js +69 -0
- package/dist/assets/ms-72b2477f.js +1 -0
- package/dist/assets/{ms-MY.e6553dad.js → ms-MY-fa8dd132.js} +0 -0
- package/dist/assets/mscgen-4f3ec90b.js +1 -0
- package/dist/assets/multi-sig-data-access-2fba9900.js +1 -0
- package/dist/assets/multiplex-f1e78825.js +3 -0
- package/dist/assets/mumps-aec45fb4.js +1 -0
- package/dist/assets/nb-c98d6d26.js +1 -0
- package/dist/assets/ne-7f2ecdd3.js +1 -0
- package/dist/assets/ne-NP-7e207f06.js +1 -0
- package/dist/assets/nginx-a6ed76ca.js +1 -0
- package/dist/assets/nl-NL-342abb4e.js +1 -0
- package/dist/assets/nl-e6663d97.js +1 -0
- package/dist/assets/nn-b86d6b60.js +1 -0
- package/dist/assets/no-NO-bc8d1413.js +1 -0
- package/dist/assets/notifications-344fc0bd.js +153 -0
- package/dist/assets/nsis-0278a4f8.js +1 -0
- package/dist/assets/ntriples-f8a7ecd4.js +1 -0
- package/dist/assets/octave-8bf499ad.js +1 -0
- package/dist/assets/operations-b7e7c226.js +169 -0
- package/dist/assets/operations-f642d037.js +29 -0
- package/dist/assets/operations-f83dba54.js +30 -0
- package/dist/assets/overlay-83d6ba90.js +1 -0
- package/dist/assets/overview-54e86f22.js +1 -0
- package/dist/assets/overview-82a3c808.js +1 -0
- package/dist/assets/overview-923246fb.js +1 -0
- package/dist/assets/oz-1e645156.js +1 -0
- package/dist/assets/panels-42e3f60d.js +65 -0
- package/dist/assets/panels-901df70f.js +160 -0
- package/dist/assets/pascal-ba8f21f6.js +1 -0
- package/dist/assets/pegjs-1962c9bb.js +1 -0
- package/dist/assets/perl-e9da5e29.js +1 -0
- package/dist/assets/permissions-6ca7bbc7.js +1 -0
- package/dist/assets/permissions-d3b1436d.js +178 -0
- package/dist/assets/personal-portfolio-using-m2a-3e41412c.js +11 -0
- package/dist/assets/php-e9d7f14d.js +1 -0
- package/dist/assets/pig-b2434045.js +1 -0
- package/dist/assets/pinia.9625d7ed.entry.js +5 -0
- package/dist/assets/pl-PL-20957ab9.js +1 -0
- package/dist/assets/pl-f34181d4.js +1 -0
- package/dist/assets/powershell-6a35303f.js +1 -0
- package/dist/assets/presets-bookmarks-2bb24db2.js +1 -0
- package/dist/assets/presets-cc127f11.js +164 -0
- package/dist/assets/project-settings-0972d9a7.js +1 -0
- package/dist/assets/projects-e14af9e7.js +1 -0
- package/dist/assets/properties-26c06260.js +1 -0
- package/dist/assets/protobuf-3de8968f.js +1 -0
- package/dist/assets/pt-57980d36.js +1 -0
- package/dist/assets/pt-BR-c7b98f8d.js +1 -0
- package/dist/assets/pt-PT-5e92d649.js +1 -0
- package/dist/assets/pt-br-6868d54b.js +1 -0
- package/dist/assets/pug-1ab6f62b.js +1 -0
- package/dist/assets/puppet-4293f665.js +1 -0
- package/dist/assets/python-0e4418cb.js +1 -0
- package/dist/assets/q-ec2d0d8a.js +1 -0
- package/dist/assets/query-a77a683c.js +166 -0
- package/dist/assets/quickstart-1a47c6b5.js +26 -0
- package/dist/assets/quickstart-4eb8fd60.js +9 -0
- package/dist/assets/r-65a66bad.js +1 -0
- package/dist/assets/readme-13e376ea.js +1 -0
- package/dist/assets/relations-0ed36a6a.js +115 -0
- package/dist/assets/relationship-aba70908.js +1 -0
- package/dist/assets/relationships-21fc3971.js +82 -0
- package/dist/assets/resources-e09b761e.js +1 -0
- package/dist/assets/revisions-b072224b.js +40 -0
- package/dist/assets/ro-3b7d76bf.js +1 -0
- package/dist/assets/ro-RO-9e77317d.js +1 -0
- package/dist/assets/roles-027aa7ac.js +171 -0
- package/dist/assets/roles-684aeeed.js +1 -0
- package/dist/assets/rpm-5561f485.js +1 -0
- package/dist/assets/rst-cee53f5e.js +1 -0
- package/dist/assets/ru-RU-171552bf.js +1 -0
- package/dist/assets/ru-df1ebcaf.js +1 -0
- package/dist/assets/ruby-2ca9b9d4.js +1 -0
- package/dist/assets/ruby-61a739aa.js +1 -0
- package/dist/assets/running-locally-37a8455c.js +24 -0
- package/dist/assets/runtime-core.esm-bundler-753bcc58.js +1 -0
- package/dist/assets/rust-4660ef0d.js +1 -0
- package/dist/assets/sas-b1ef29b7.js +1 -0
- package/dist/assets/sass-8daea5a1.js +1 -0
- package/dist/assets/schema-5ce91110.js +1 -0
- package/dist/assets/scheme-60e3cda9.js +1 -0
- package/dist/assets/sdk-b67c4a64.js +439 -0
- package/dist/assets/security-a3433441.js +1 -0
- package/dist/assets/server-38a89f65.js +114 -0
- package/dist/assets/settings-4740d28a.js +1 -0
- package/dist/assets/settings-c44be6ce.js +73 -0
- package/dist/assets/shares-3e43a709.js +1 -0
- package/dist/assets/shell-ae721e91.js +1 -0
- package/dist/assets/{show-hint.d139d464.css → show-hint-d139d464.css} +0 -0
- package/dist/assets/show-hint-e6467cb2.js +1 -0
- package/dist/assets/si-LK-3efbd636.js +1 -0
- package/dist/assets/sieve-b5615c85.js +1 -0
- package/dist/assets/simple-8e6c7a47.js +1 -0
- package/dist/assets/sk-SK-4355010d.js +1 -0
- package/dist/assets/sk-bb1a0c12.js +1 -0
- package/dist/assets/sl-6ecdfa1a.js +1 -0
- package/dist/assets/sl-SI-cd1c0bbc.js +2 -0
- package/dist/assets/slim-61e069c7.js +1 -0
- package/dist/assets/slugify-text-with-run-script-5867c669.js +15 -0
- package/dist/assets/smalltalk-da4d17a0.js +1 -0
- package/dist/assets/smarty-a0ed5b66.js +1 -0
- package/dist/assets/solr-c22396e9.js +1 -0
- package/dist/assets/soy-fe742186.js +1 -0
- package/dist/assets/sparql-9867ff49.js +1 -0
- package/dist/assets/spreadsheet-398e65d6.js +1 -0
- package/dist/assets/{sprite.e37451a6.svg → sprite-e37451a6.svg} +0 -0
- package/dist/assets/sq-7bdd580f.js +1 -0
- package/dist/assets/sql-81580d06.js +1 -0
- package/dist/assets/sr-4e809a2b.js +1 -0
- package/dist/assets/sr-CS-c0c71ad9.js +1 -0
- package/dist/assets/sr-SP-427c79ea.js +1 -0
- package/dist/assets/sr-cyrl-997aedd3.js +1 -0
- package/dist/assets/sso-examples-9f7c9151.js +78 -0
- package/dist/assets/sso-f2543afe.js +23 -0
- package/dist/assets/stex-8fc8feda.js +1 -0
- package/dist/assets/stex-ad786e7d.js +1 -0
- package/dist/assets/stylus-f0381ac8.js +1 -0
- package/dist/assets/support-84f5df99.js +1 -0
- package/dist/assets/sv-50072f33.js +1 -0
- package/dist/assets/sv-SE-0535406d.js +1 -0
- package/dist/assets/swift-4291e319.js +1 -0
- package/dist/assets/ta-in-4071a6d4.js +1 -0
- package/dist/assets/tcl-5c6d22e0.js +1 -0
- package/dist/assets/teams-725025d5.js +1 -0
- package/dist/assets/template_shell-4c5120e8.js +1 -0
- package/dist/assets/textile-3c0fce68.js +1 -0
- package/dist/assets/th-7e79c1c0.js +1 -0
- package/dist/assets/th-TH-a106b906.js +2 -0
- package/dist/assets/themes-c621012f.js +5 -0
- package/dist/assets/tiddlywiki-f87de875.js +1 -0
- package/dist/assets/tiki-cfc8e9f1.js +1 -0
- package/dist/assets/toml-0b13ecd7.js +1 -0
- package/dist/assets/tornado-a94d05d1.js +1 -0
- package/dist/assets/tr-TR-5da8a3a8.js +1 -0
- package/dist/assets/tr-b93da499.js +1 -0
- package/dist/assets/translation-strings-3650c811.js +1 -0
- package/dist/assets/translations-7cc14527.js +1 -0
- package/dist/assets/translations-d688ff27.js +1 -0
- package/dist/assets/triggers-b7870cea.js +1 -0
- package/dist/assets/troff-35ec9846.js +1 -0
- package/dist/assets/ttcn-cfg-b9b809db.js +1 -0
- package/dist/assets/ttcn-ebc23837.js +1 -0
- package/dist/assets/turtle-302e5429.js +1 -0
- package/dist/assets/twig-b2793676.js +1 -0
- package/dist/assets/ug-5e06bb73.js +1 -0
- package/dist/assets/uk-UA-e793cad5.js +1 -0
- package/dist/assets/uk-e5a241cc.js +1 -0
- package/dist/assets/upgrades-migrations-9b9a8148.js +1 -0
- package/dist/assets/use-sync-7318fa3d.js +29 -0
- package/dist/assets/user-directory-3fc6f851.js +1 -0
- package/dist/assets/users-039eb6fe.js +252 -0
- package/dist/assets/users-475ad639.js +1 -0
- package/dist/assets/users-roles-permissions-c0aaea95.js +1 -0
- package/dist/assets/utilities-0a4c2e38.js +74 -0
- package/dist/assets/uz-8a64d58d.js +1 -0
- package/dist/assets/validation-59e6bf86.js +1 -0
- package/dist/assets/vb-04feae63.js +1 -0
- package/dist/assets/vbscript-a4340ab5.js +1 -0
- package/dist/assets/velocity-6c28bbff.js +1 -0
- package/dist/assets/verilog-aace2890.js +1 -0
- package/dist/assets/vhdl-79cd3264.js +1 -0
- package/dist/assets/vi-0980a9b2.js +1 -0
- package/dist/assets/vi-VN-da640ba7.js +1 -0
- package/dist/assets/vue-e0bd3f3e.js +1 -0
- package/dist/assets/vue-i18n.290ef83f.entry.js +23 -0
- package/dist/assets/vue-router.f34a6392.entry.js +5 -0
- package/dist/assets/vue.28c28fb6.entry.js +1 -0
- package/dist/assets/vue.runtime.esm-bundler-633c7be3.js +1 -0
- package/dist/assets/wast-72289610.js +1 -0
- package/dist/assets/webhooks-187ac080.js +147 -0
- package/dist/assets/webhooks-c015173f.js +1 -0
- package/dist/assets/webidl-3c9d4d0b.js +1 -0
- package/dist/assets/xml-4e80317b.js +1 -0
- package/dist/assets/xquery-bd5b3e04.js +1 -0
- package/dist/assets/yacas-f6aaeca5.js +1 -0
- package/dist/assets/yaml-5b9e3a5a.js +1 -0
- package/dist/assets/yaml-frontmatter-438de2ed.js +1 -0
- package/dist/assets/z80-4984aa97.js +1 -0
- package/dist/assets/zh-CN-486ad589.js +1 -0
- package/dist/assets/zh-TW-ad632493.js +1 -0
- package/dist/assets/zh-cn-e4d8a720.js +1 -0
- package/dist/assets/zh-tw-7742900d.js +1 -0
- package/dist/index.html +8 -8
- package/package.json +36 -36
- package/dist/assets/@directus_extensions-sdk.0ccd840b.entry.js +0 -1
- package/dist/assets/accounts.6297e415.js +0 -1
- package/dist/assets/active-line.3b81eec3.js +0 -1
- package/dist/assets/activity-log.5f3df6ee.js +0 -1
- package/dist/assets/activity.ecad7f24.js +0 -80
- package/dist/assets/add-a-recipe.9ceb23a7.js +0 -1
- package/dist/assets/af-ZA.2bf28c7c.js +0 -1
- package/dist/assets/af.e05559c5.js +0 -1
- package/dist/assets/apl.532e55b5.js +0 -1
- package/dist/assets/ar-SA.c9e0c56d.js +0 -2
- package/dist/assets/ar-dz.66e56547.js +0 -1
- package/dist/assets/ar-kw.d9c72292.js +0 -1
- package/dist/assets/ar-ly.2893dc62.js +0 -1
- package/dist/assets/ar-ma.d833d5f8.js +0 -1
- package/dist/assets/ar-sa.d113171f.js +0 -1
- package/dist/assets/ar-tn.eef6c3a6.js +0 -1
- package/dist/assets/ar.b88ac85c.js +0 -1
- package/dist/assets/architecture.5ae1b9c3.js +0 -1
- package/dist/assets/asciiarmor.0cf31d21.js +0 -1
- package/dist/assets/asn.1.2c1c72c0.js +0 -1
- package/dist/assets/asterisk.a039d739.js +0 -1
- package/dist/assets/authentication.00a824ca.js +0 -74
- package/dist/assets/autorefresh.88d5e0a7.js +0 -1
- package/dist/assets/aws.a7ffca20.js +0 -1
- package/dist/assets/az.65d5df84.js +0 -1
- package/dist/assets/backing-directus.1e21aca0.js +0 -1
- package/dist/assets/basic-workflows.11292c4c.js +0 -1
- package/dist/assets/bg-BG.d8bce391.js +0 -1
- package/dist/assets/bg.32aec9a6.js +0 -1
- package/dist/assets/bn-IN.598e11ba.js +0 -1
- package/dist/assets/bn.1a38ef68.js +0 -1
- package/dist/assets/br-FR.17844656.js +0 -1
- package/dist/assets/brainfuck.d46b57fa.js +0 -1
- package/dist/assets/bs-BA.7a79810f.js +0 -1
- package/dist/assets/bs.b7fc0054.js +0 -1
- package/dist/assets/build-a-content-hierarchy.c7f435d3.js +0 -97
- package/dist/assets/ca-ES.d21027f3.js +0 -1
- package/dist/assets/ca.79ae4f70.js +0 -1
- package/dist/assets/ckb-IR.8580ef1b.js +0 -1
- package/dist/assets/cli.04a6188d.js +0 -19
- package/dist/assets/cli.86a5dab7.js +0 -4
- package/dist/assets/clike.ded817ab.js +0 -1
- package/dist/assets/clojure.2b5d8a03.js +0 -1
- package/dist/assets/cloudron.74c7dd1a.js +0 -1
- package/dist/assets/cmake.779aa0a1.js +0 -1
- package/dist/assets/cobol.9b078598.js +0 -1
- package/dist/assets/codebase-overview.f998a583.js +0 -1
- package/dist/assets/coffeescript.d7bdf417.js +0 -1
- package/dist/assets/collections.062041e9.js +0 -106
- package/dist/assets/collections.2bcb128b.js +0 -2
- package/dist/assets/collections.dc3baac2.js +0 -2
- package/dist/assets/commonlisp.86d6a22a.js +0 -1
- package/dist/assets/conditions.df105bd3.js +0 -1
- package/dist/assets/config-options.6be44dad.js +0 -151
- package/dist/assets/configure-user-registration.1f371a66.js +0 -1
- package/dist/assets/content.0c201476.js +0 -1
- package/dist/assets/creating-extensions.846d17ab.js +0 -13
- package/dist/assets/crystal.079a46ca.js +0 -1
- package/dist/assets/cs-CZ.7bffb9af.js +0 -1
- package/dist/assets/cs.131cb969.js +0 -1
- package/dist/assets/css.12d8ffe5.js +0 -1
- package/dist/assets/cy.cda5d998.js +0 -1
- package/dist/assets/cypher.0092ffab.js +0 -4
- package/dist/assets/d.0f6c09b5.js +0 -1
- package/dist/assets/da-DK.464a4829.js +0 -1
- package/dist/assets/da.c666c076.js +0 -1
- package/dist/assets/dart.929eb227.js +0 -1
- package/dist/assets/data-model.dbf87196.js +0 -45
- package/dist/assets/de-DE.a54b14b4.js +0 -1
- package/dist/assets/de-at.0af1a6c1.js +0 -1
- package/dist/assets/de.1abec11f.js +0 -1
- package/dist/assets/diff.03035a7a.js +0 -1
- package/dist/assets/digitalocean-app-platform.324edceb.js +0 -3
- package/dist/assets/display-templates.e5e35a02.js +0 -1
- package/dist/assets/display.a3a20d82.js +0 -1
- package/dist/assets/displays.bacf0a84.js +0 -49
- package/dist/assets/django.cfe21264.js +0 -1
- package/dist/assets/docker.2d92d274.js +0 -82
- package/dist/assets/dockerfile.880f2a91.js +0 -1
- package/dist/assets/documentation.cd7e9172.js +0 -1
- package/dist/assets/dtd.6e5813e4.js +0 -1
- package/dist/assets/dylan.914afa28.js +0 -1
- package/dist/assets/ebnf.d2219eb2.js +0 -1
- package/dist/assets/ecl.6ae8b278.js +0 -1
- package/dist/assets/eiffel.4bcafd65.js +0 -1
- package/dist/assets/el-GR.c0a3a0bf.js +0 -1
- package/dist/assets/el.5b03c284.js +0 -1
- package/dist/assets/elm.9e6a0c5f.js +0 -1
- package/dist/assets/email-templates.6aff68c2.js +0 -2
- package/dist/assets/en-CA.26fd1073.js +0 -1
- package/dist/assets/en-GB.cb5c306c.js +0 -1
- package/dist/assets/en-au.456ff62d.js +0 -1
- package/dist/assets/en-gb.3df73232.js +0 -1
- package/dist/assets/en-nz.eb3d0c4d.js +0 -1
- package/dist/assets/endpoints.cb21db74.js +0 -27
- package/dist/assets/eo.2d573f1e.js +0 -1
- package/dist/assets/erlang.5d4c6290.js +0 -1
- package/dist/assets/es-419.37d0e1bd.js +0 -1
- package/dist/assets/es-CL.879cb4a2.js +0 -1
- package/dist/assets/es-ES.3634d1f0.js +0 -1
- package/dist/assets/es-MX.30ad99ae.js +0 -1
- package/dist/assets/es-us.43aa257e.js +0 -1
- package/dist/assets/es.7bb97ab2.js +0 -1
- package/dist/assets/et-EE.e2a1fecb.js +0 -3
- package/dist/assets/et.da5088f6.js +0 -1
- package/dist/assets/eu.85b7226c.js +0 -1
- package/dist/assets/extensions.1a49a23d.js +0 -12
- package/dist/assets/fa-IR.b4fa34a3.js +0 -1
- package/dist/assets/fa.1bee6b5f.js +0 -1
- package/dist/assets/factor.868b80eb.js +0 -1
- package/dist/assets/faq.4c9aec5a.js +0 -2
- package/dist/assets/fcl.7c55575c.js +0 -1
- package/dist/assets/fi-FI.47d31bc6.js +0 -1
- package/dist/assets/fi.c56dc7f1.js +0 -1
- package/dist/assets/field-types.1234a1f1.js +0 -1
- package/dist/assets/field.12858af7.js +0 -1
- package/dist/assets/fields.1e29bef7.js +0 -135
- package/dist/assets/fields.dd1b854a.js +0 -1
- package/dist/assets/file-library.adca0306.js +0 -1
- package/dist/assets/files.dc7ab269.js +0 -189
- package/dist/assets/filter-rules.118f4702.js +0 -85
- package/dist/assets/filters.bbb1387c.js +0 -1
- package/dist/assets/flows-for-loop.52c26eba.js +0 -1
- package/dist/assets/flows.0d69a4cc.js +0 -46
- package/dist/assets/flows.86b01647.js +0 -172
- package/dist/assets/fo-FO.cc444b75.js +0 -1
- package/dist/assets/folders.9f7079f9.js +0 -132
- package/dist/assets/forth.b536ca3e.js +0 -1
- package/dist/assets/fortran.ff028c93.js +0 -1
- package/dist/assets/fr-CA.de73f558.js +0 -1
- package/dist/assets/fr-FR.5e13f541.js +0 -1
- package/dist/assets/fr-ca.601cb441.js +0 -1
- package/dist/assets/fr-ch.67bb7822.js +0 -1
- package/dist/assets/fr.4f97ca55.js +0 -1
- package/dist/assets/gas.27db6663.js +0 -1
- package/dist/assets/gcp.a3cb0373.js +0 -60
- package/dist/assets/generate-work-reports.4d11e331.js +0 -1
- package/dist/assets/gfm.c7c91a16.js +0 -1
- package/dist/assets/gherkin.dbf68a71.js +0 -1
- package/dist/assets/github-ci.1128e8d6.js +0 -2
- package/dist/assets/gl.87af25c9.js +0 -1
- package/dist/assets/glossary.88bccebd.js +0 -1
- package/dist/assets/glossary.fdb88ced.js +0 -1
- package/dist/assets/go.5afdcb84.js +0 -1
- package/dist/assets/groovy.b7ac7cb4.js +0 -1
- package/dist/assets/haml.c8e99960.js +0 -1
- package/dist/assets/handlebars.38ffa2c4.js +0 -1
- package/dist/assets/haskell-literate.25eb44a7.js +0 -1
- package/dist/assets/haskell.abf0cfdd.js +0 -1
- package/dist/assets/haxe.4e1cfda0.js +0 -1
- package/dist/assets/he-IL.767fa735.js +0 -1
- package/dist/assets/he.039f7e1a.js +0 -1
- package/dist/assets/hi-IN.dcb8bbe2.js +0 -1
- package/dist/assets/hi.f87d7574.js +0 -1
- package/dist/assets/hooks.06f4901f.js +0 -87
- package/dist/assets/hr-HR.1d062e06.js +0 -1
- package/dist/assets/hr.38926dee.js +0 -1
- package/dist/assets/htmlembedded.f1f38238.js +0 -1
- package/dist/assets/htmlmixed.ce1a0bf1.js +0 -1
- package/dist/assets/htmlmixed.fcc280cc.js +0 -1
- package/dist/assets/http.0fc05b80.js +0 -1
- package/dist/assets/hu-HU.23fef977.js +0 -1
- package/dist/assets/hu.2a1785d5.js +0 -1
- package/dist/assets/hy-am.c0130972.js +0 -1
- package/dist/assets/id-ID.626b885e.js +0 -1
- package/dist/assets/id.27d3f426.js +0 -1
- package/dist/assets/idl.cf81e7bd.js +0 -1
- package/dist/assets/iis.1055825b.js +0 -27
- package/dist/assets/import-export.a0ab8057.js +0 -2
- package/dist/assets/index.0510329a.js +0 -1
- package/dist/assets/index.07461453.js +0 -1
- package/dist/assets/index.07fc9cdb.js +0 -1
- package/dist/assets/index.0b195cc7.js +0 -1
- package/dist/assets/index.0f60c616.js +0 -1
- package/dist/assets/index.0fe04da9.entry.js +0 -3597
- package/dist/assets/index.124b64aa.js +0 -1
- package/dist/assets/index.130bec89.js +0 -1
- package/dist/assets/index.13585b97.js +0 -1
- package/dist/assets/index.14a135ff.js +0 -1
- package/dist/assets/index.1708eaff.js +0 -1
- package/dist/assets/index.1e030ff7.js +0 -1
- package/dist/assets/index.1fd0f1cb.js +0 -1
- package/dist/assets/index.209a861d.js +0 -1
- package/dist/assets/index.2473a8cb.js +0 -1
- package/dist/assets/index.2b98ae99.js +0 -1
- package/dist/assets/index.2da30b1e.js +0 -1
- package/dist/assets/index.2fa746b0.js +0 -26
- package/dist/assets/index.30672573.js +0 -1
- package/dist/assets/index.30bc59d5.js +0 -1
- package/dist/assets/index.32d09ff6.js +0 -1
- package/dist/assets/index.3316d926.js +0 -1
- package/dist/assets/index.344009b9.js +0 -1
- package/dist/assets/index.36e6c9c6.js +0 -1
- package/dist/assets/index.3c2d2f28.js +0 -1
- package/dist/assets/index.3cd692f4.js +0 -1
- package/dist/assets/index.3d5c264a.js +0 -1
- package/dist/assets/index.40355ab3.js +0 -1
- package/dist/assets/index.45bd0bab.js +0 -1
- package/dist/assets/index.4772c73a.js +0 -1
- package/dist/assets/index.481cef97.js +0 -1
- package/dist/assets/index.486d2358.js +0 -1
- package/dist/assets/index.48d256fe.js +0 -1
- package/dist/assets/index.4b4406cc.js +0 -1
- package/dist/assets/index.506cc44b.js +0 -1
- package/dist/assets/index.52064361.js +0 -1
- package/dist/assets/index.5240d9b5.js +0 -1
- package/dist/assets/index.5252069d.js +0 -1
- package/dist/assets/index.591db1fa.js +0 -1
- package/dist/assets/index.5a98ab12.css +0 -1
- package/dist/assets/index.5ad6a3dd.js +0 -1
- package/dist/assets/index.5b812943.js +0 -1
- package/dist/assets/index.5bdc1da7.js +0 -1
- package/dist/assets/index.5f17521a.js +0 -1
- package/dist/assets/index.5fed6846.js +0 -1
- package/dist/assets/index.614238fe.js +0 -1
- package/dist/assets/index.6199308d.js +0 -1
- package/dist/assets/index.63655798.js +0 -1
- package/dist/assets/index.654391bd.js +0 -1
- package/dist/assets/index.67552c8a.js +0 -1
- package/dist/assets/index.68a46470.js +0 -1
- package/dist/assets/index.699cb0fb.js +0 -1
- package/dist/assets/index.6c7bac54.js +0 -1
- package/dist/assets/index.6f12727d.js +0 -1
- package/dist/assets/index.739bdf68.js +0 -1
- package/dist/assets/index.74be4359.js +0 -1
- package/dist/assets/index.75287e44.js +0 -1
- package/dist/assets/index.78877765.js +0 -1
- package/dist/assets/index.80c4330c.js +0 -1
- package/dist/assets/index.880e71b1.js +0 -1
- package/dist/assets/index.8b75b664.js +0 -1
- package/dist/assets/index.8dcbd6dd.js +0 -1
- package/dist/assets/index.8f441a00.js +0 -1
- package/dist/assets/index.8ffa4e57.js +0 -1
- package/dist/assets/index.9246e3c6.js +0 -1
- package/dist/assets/index.92b654af.js +0 -1
- package/dist/assets/index.97b9cfbc.js +0 -1
- package/dist/assets/index.99f88ce2.js +0 -1
- package/dist/assets/index.9bdfd349.css +0 -1
- package/dist/assets/index.9de22eb4.js +0 -1
- package/dist/assets/index.9f4729d8.js +0 -1
- package/dist/assets/index.a365304f.js +0 -2
- package/dist/assets/index.ac22cc1b.js +0 -1
- package/dist/assets/index.ad0348f9.js +0 -1
- package/dist/assets/index.ad2f7063.js +0 -1
- package/dist/assets/index.b07d44be.js +0 -1
- package/dist/assets/index.b08033ea.js +0 -1
- package/dist/assets/index.b1efa6a4.js +0 -1
- package/dist/assets/index.b6c4c6e1.js +0 -1
- package/dist/assets/index.ba07ca0b.js +0 -1
- package/dist/assets/index.c05e0290.js +0 -1
- package/dist/assets/index.c4497b0d.js +0 -1
- package/dist/assets/index.d2f27735.js +0 -1
- package/dist/assets/index.d9fbe812.js +0 -1
- package/dist/assets/index.de87289c.js +0 -1
- package/dist/assets/index.e01c5899.js +0 -1
- package/dist/assets/index.e0fd62f8.js +0 -1
- package/dist/assets/index.edd0222a.js +0 -1
- package/dist/assets/index.ef3da9e5.js +0 -1
- package/dist/assets/index.f11112ce.js +0 -1
- package/dist/assets/index.f1494379.js +0 -1
- package/dist/assets/index.f43f4b21.js +0 -1
- package/dist/assets/index.f98dabe9.js +0 -1
- package/dist/assets/index.fb047c40.js +0 -1
- package/dist/assets/input-rich-text-html.8492d285.js +0 -239
- package/dist/assets/insights.79b6bb41.js +0 -3
- package/dist/assets/installation.dac5d305.js +0 -1
- package/dist/assets/interface.c6e98a8d.js +0 -1
- package/dist/assets/interfaces.1cededb9.js +0 -46
- package/dist/assets/introduction.7e22ae52.js +0 -1
- package/dist/assets/introduction.8311150c.js +0 -90
- package/dist/assets/introduction.a4ce02bd.js +0 -1
- package/dist/assets/introduction.d716e9e9.js +0 -1
- package/dist/assets/is-IS.de933c2f.js +0 -1
- package/dist/assets/is.9f22583b.js +0 -1
- package/dist/assets/it-IT.fabfc1f3.js +0 -1
- package/dist/assets/it.9df5fefe.js +0 -1
- package/dist/assets/items.0cdbeb33.js +0 -136
- package/dist/assets/items.df7c548b.js +0 -1
- package/dist/assets/ja-JP.58bc5b03.js +0 -1
- package/dist/assets/ja.11f14636.js +0 -1
- package/dist/assets/javascript-hint.df048ad5.js +0 -1
- package/dist/assets/javascript.9999d0bb.js +0 -1
- package/dist/assets/jinja2.6357181e.js +0 -1
- package/dist/assets/jsonlint.aceff66c.js +0 -8
- package/dist/assets/jsx.bdf8510c.js +0 -1
- package/dist/assets/julia.50c8325f.js +0 -1
- package/dist/assets/ka-GE.aa0d4cf4.js +0 -1
- package/dist/assets/ka.383a4f32.js +0 -1
- package/dist/assets/kk.a651980b.js +0 -1
- package/dist/assets/ko-KR.4b310e63.js +0 -1
- package/dist/assets/ko.cdc7d437.js +0 -1
- package/dist/assets/ku-TR.ad6b2677.js +0 -1
- package/dist/assets/layouts.267cb4de.js +0 -2
- package/dist/assets/layouts.48ea5cf6.js +0 -54
- package/dist/assets/lb.0165d7ed.js +0 -1
- package/dist/assets/livescript.43e14e9e.js +0 -1
- package/dist/assets/lt-LT.18f09ae6.js +0 -1
- package/dist/assets/lt.96d7dac8.js +0 -1
- package/dist/assets/lua.492512ef.js +0 -1
- package/dist/assets/lv.3485bdf4.js +0 -1
- package/dist/assets/manual.1ebea569.js +0 -12
- package/dist/assets/mark-selection.5a968e58.js +0 -1
- package/dist/assets/match-highlighter.b742556c.js +0 -1
- package/dist/assets/matchbrackets.a3b3f78c.js +0 -1
- package/dist/assets/mathematica.406b636b.js +0 -1
- package/dist/assets/mbox.b49067b1.js +0 -1
- package/dist/assets/migrations.af0dca0d.js +0 -19
- package/dist/assets/mirc.a363bbde.js +0 -1
- package/dist/assets/mk.5eaf9394.js +0 -1
- package/dist/assets/mllike.e22f184b.js +0 -1
- package/dist/assets/mn-MN.c504a096.js +0 -1
- package/dist/assets/modelica.7cf1d136.js +0 -1
- package/dist/assets/modules.a49b1412.js +0 -69
- package/dist/assets/ms.c1bfb0b7.js +0 -1
- package/dist/assets/mscgen.7d326e01.js +0 -1
- package/dist/assets/multi-sig-data-access.360528a4.js +0 -1
- package/dist/assets/multiplex.74948caa.js +0 -3
- package/dist/assets/mumps.97da9c1d.js +0 -1
- package/dist/assets/nb.dd2d92ae.js +0 -1
- package/dist/assets/ne-NP.2361e293.js +0 -1
- package/dist/assets/ne.0793cdad.js +0 -1
- package/dist/assets/nginx.2403e599.js +0 -1
- package/dist/assets/nl-NL.bb799348.js +0 -1
- package/dist/assets/nl.5e2d17f8.js +0 -1
- package/dist/assets/nn.2f72e720.js +0 -1
- package/dist/assets/no-NO.5c9edcd0.js +0 -1
- package/dist/assets/notifications.a5c13635.js +0 -153
- package/dist/assets/nsis.8a1eb333.js +0 -1
- package/dist/assets/ntriples.71569ecc.js +0 -1
- package/dist/assets/octave.e2b4e056.js +0 -1
- package/dist/assets/operations.2a3f0f1d.js +0 -29
- package/dist/assets/operations.3f7c1d38.js +0 -30
- package/dist/assets/operations.5920032a.js +0 -169
- package/dist/assets/overlay.4048afb4.js +0 -1
- package/dist/assets/overview.18971b6f.js +0 -1
- package/dist/assets/overview.222aec7c.js +0 -1
- package/dist/assets/overview.d2530651.js +0 -1
- package/dist/assets/oz.539e15dc.js +0 -1
- package/dist/assets/panels.01f759e8.js +0 -65
- package/dist/assets/pascal.9ab99b92.js +0 -1
- package/dist/assets/pegjs.e41e7e34.js +0 -1
- package/dist/assets/perl.7c3133c1.js +0 -1
- package/dist/assets/permissions.4fb30c52.js +0 -178
- package/dist/assets/permissions.df8c3908.js +0 -1
- package/dist/assets/personal-portfolio-using-m2a.6697d008.js +0 -11
- package/dist/assets/php.b02fa40a.js +0 -1
- package/dist/assets/pig.02505685.js +0 -1
- package/dist/assets/pinia.0d44ec62.entry.js +0 -5
- package/dist/assets/pl-PL.01cf6aca.js +0 -1
- package/dist/assets/pl.2a68b868.js +0 -1
- package/dist/assets/plesk.211f147c.js +0 -27
- package/dist/assets/powershell.179883fc.js +0 -1
- package/dist/assets/presets-bookmarks.06a996e4.js +0 -1
- package/dist/assets/presets.8964f63c.js +0 -164
- package/dist/assets/project-settings.a1dc40c5.js +0 -1
- package/dist/assets/projects.257c1608.js +0 -1
- package/dist/assets/properties.7d9bd80c.js +0 -1
- package/dist/assets/protobuf.e6de8af7.js +0 -1
- package/dist/assets/pt-BR.2c2e8c4f.js +0 -1
- package/dist/assets/pt-PT.b058b0cc.js +0 -1
- package/dist/assets/pt-br.c97cd258.js +0 -1
- package/dist/assets/pt.c51baacb.js +0 -1
- package/dist/assets/pug.c31e82c2.js +0 -1
- package/dist/assets/puppet.b1acf202.js +0 -1
- package/dist/assets/python.6862b830.js +0 -1
- package/dist/assets/q.9f36c255.js +0 -1
- package/dist/assets/query.3a5366a5.js +0 -165
- package/dist/assets/quickstart.78b6824c.js +0 -26
- package/dist/assets/quickstart.88a09faf.js +0 -9
- package/dist/assets/r.b0afb069.js +0 -1
- package/dist/assets/readme.22afc5cd.js +0 -1
- package/dist/assets/relations.082dd25f.js +0 -115
- package/dist/assets/relationship.27df541c.js +0 -1
- package/dist/assets/relationships.8f21fc7f.js +0 -82
- package/dist/assets/resources.974e5ab9.js +0 -1
- package/dist/assets/revisions.c7928011.js +0 -40
- package/dist/assets/ro-RO.4c33f715.js +0 -1
- package/dist/assets/ro.8a0f69d8.js +0 -1
- package/dist/assets/roles.077fb08f.js +0 -1
- package/dist/assets/roles.57e7cf43.js +0 -171
- package/dist/assets/rpm.50db7996.js +0 -1
- package/dist/assets/rst.bf980585.js +0 -1
- package/dist/assets/ru-RU.1affd9bb.js +0 -1
- package/dist/assets/ru.687e2e6b.js +0 -1
- package/dist/assets/ruby.15b2c33e.js +0 -1
- package/dist/assets/ruby.388c1995.js +0 -1
- package/dist/assets/running-locally.df40dfc8.js +0 -24
- package/dist/assets/runtime-core.esm-bundler.22ec0346.js +0 -1
- package/dist/assets/rust.fc6e7213.js +0 -1
- package/dist/assets/sas.a90247fa.js +0 -1
- package/dist/assets/sass.16071a78.js +0 -1
- package/dist/assets/schema.09c131b1.js +0 -1
- package/dist/assets/scheme.21819d3c.js +0 -1
- package/dist/assets/sdk.14c9aa74.js +0 -402
- package/dist/assets/security.d4d02696.js +0 -1
- package/dist/assets/server.5bb7cb25.js +0 -114
- package/dist/assets/settings.c76ef466.js +0 -73
- package/dist/assets/settings.fd40cf40.js +0 -1
- package/dist/assets/shares.4e3f41cf.js +0 -1
- package/dist/assets/shell.33f43665.js +0 -1
- package/dist/assets/show-hint.eaadc448.js +0 -1
- package/dist/assets/si-LK.f9ef55b1.js +0 -1
- package/dist/assets/sieve.20340bb1.js +0 -1
- package/dist/assets/simple.1606e663.js +0 -1
- package/dist/assets/sk-SK.5761e1d9.js +0 -1
- package/dist/assets/sk.ff03700a.js +0 -1
- package/dist/assets/sl-SI.4e2a1720.js +0 -2
- package/dist/assets/sl.dc02848e.js +0 -1
- package/dist/assets/slim.3cefa2db.js +0 -1
- package/dist/assets/slugify-text-with-run-script.199712ff.js +0 -15
- package/dist/assets/smalltalk.a234f24e.js +0 -1
- package/dist/assets/smarty.4fe8093f.js +0 -1
- package/dist/assets/solr.3a0232ec.js +0 -1
- package/dist/assets/soy.b6a46e76.js +0 -1
- package/dist/assets/sparql.363d3106.js +0 -1
- package/dist/assets/spreadsheet.cd5cb2fb.js +0 -1
- package/dist/assets/sq.e9ac730b.js +0 -1
- package/dist/assets/sql.a7e34968.js +0 -1
- package/dist/assets/sr-CS.607e2fd0.js +0 -1
- package/dist/assets/sr-SP.3f95d056.js +0 -1
- package/dist/assets/sr-cyrl.3a10357c.js +0 -1
- package/dist/assets/sr.8d2d9e54.js +0 -1
- package/dist/assets/sso-examples.89c3e7e8.js +0 -66
- package/dist/assets/sso.015acbf5.js +0 -23
- package/dist/assets/stex.c8aec26a.js +0 -1
- package/dist/assets/stex.d83cc04c.js +0 -1
- package/dist/assets/stylus.fed7ed89.js +0 -1
- package/dist/assets/support.c2f208d3.js +0 -1
- package/dist/assets/sv-SE.b95b4c7c.js +0 -1
- package/dist/assets/sv.f79c898d.js +0 -1
- package/dist/assets/swift.f07ecbde.js +0 -1
- package/dist/assets/ta-in.370b9ab8.js +0 -1
- package/dist/assets/tcl.0cd77d37.js +0 -1
- package/dist/assets/teams.8ce9f77a.js +0 -1
- package/dist/assets/template_shell.742b63cc.js +0 -1
- package/dist/assets/textile.d4e6a270.js +0 -1
- package/dist/assets/th-TH.0d8bf48f.js +0 -2
- package/dist/assets/th.679a9063.js +0 -1
- package/dist/assets/themes.e850ef55.js +0 -5
- package/dist/assets/tiddlywiki.95ffe16e.js +0 -1
- package/dist/assets/tiki.23dddf74.js +0 -1
- package/dist/assets/toml.a952668f.js +0 -1
- package/dist/assets/tornado.6cf2cdab.js +0 -1
- package/dist/assets/tr-TR.328a2546.js +0 -1
- package/dist/assets/tr.e7f6cd2d.js +0 -1
- package/dist/assets/translation-strings.69ea6237.js +0 -1
- package/dist/assets/translations.8ea252f7.js +0 -1
- package/dist/assets/translations.b81402fc.js +0 -1
- package/dist/assets/triggers.0e93619a.js +0 -1
- package/dist/assets/troff.1b65d50e.js +0 -1
- package/dist/assets/ttcn-cfg.824da7b8.js +0 -1
- package/dist/assets/ttcn.0d3154ff.js +0 -1
- package/dist/assets/turtle.a03f2a4c.js +0 -1
- package/dist/assets/twig.8b8ef2fe.js +0 -1
- package/dist/assets/ubuntu.e38c0d26.js +0 -11
- package/dist/assets/ug.6706371a.js +0 -1
- package/dist/assets/uk-UA.fe247137.js +0 -1
- package/dist/assets/uk.26a8f86d.js +0 -1
- package/dist/assets/upgrades-migrations.c4b67d31.js +0 -1
- package/dist/assets/use-sync.bc96de7c.js +0 -28
- package/dist/assets/user-directory.07c03cbb.js +0 -1
- package/dist/assets/users-roles-permissions.3b59416f.js +0 -1
- package/dist/assets/users.7dcf5230.js +0 -1
- package/dist/assets/users.94a90ec8.js +0 -252
- package/dist/assets/utilities.7fff849b.js +0 -74
- package/dist/assets/uz.b4b5756e.js +0 -1
- package/dist/assets/validation.93e6293c.js +0 -1
- package/dist/assets/vb.233d3c14.js +0 -1
- package/dist/assets/vbscript.a244eeb4.js +0 -1
- package/dist/assets/velocity.4e1bef59.js +0 -1
- package/dist/assets/verilog.118fc8e4.js +0 -1
- package/dist/assets/vhdl.4445ed46.js +0 -1
- package/dist/assets/vi-VN.7f9cab4b.js +0 -1
- package/dist/assets/vi.45dd42fd.js +0 -1
- package/dist/assets/vue-i18n.fbc77449.entry.js +0 -23
- package/dist/assets/vue-router.3a828e63.entry.js +0 -5
- package/dist/assets/vue.21d9b36b.js +0 -1
- package/dist/assets/vue.486f3e62.entry.js +0 -1
- package/dist/assets/vue.runtime.esm-bundler.f6138180.js +0 -1
- package/dist/assets/wast.35c16262.js +0 -1
- package/dist/assets/webhooks.0593a860.js +0 -147
- package/dist/assets/webhooks.7f06dfe2.js +0 -1
- package/dist/assets/webidl.3e5ceaa0.js +0 -1
- package/dist/assets/xml.1b99644f.js +0 -1
- package/dist/assets/xquery.9b09b323.js +0 -1
- package/dist/assets/yacas.a67368a2.js +0 -1
- package/dist/assets/yaml-frontmatter.51fe360e.js +0 -1
- package/dist/assets/yaml.622147af.js +0 -1
- package/dist/assets/z80.2e70420b.js +0 -1
- package/dist/assets/zh-CN.0affdc0a.js +0 -1
- package/dist/assets/zh-TW.e0b114ab.js +0 -1
- package/dist/assets/zh-cn.8541dabe.js +0 -1
- package/dist/assets/zh-tw.0b1e37f8.js +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as s,o as d,e as r,y as o,u as t,q as e,z as n}from"./runtime-core.esm-bundler.22ec0346.js";const u={class:"markdown-body"},h=t("blockquote",null,[t("p",null,"Collections are a set of items. This can be a 1-1 data table in SQL, a group of other collections, or a readonly view. They come with all the same power and functionality of data tables, despite the less technical name.")],-1),p=t("h2",{id:"overview",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#overview"},"#"),e(" Overview")],-1),f=t("video",{title:"Overview",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/collections-20220805A.mp4",type:"video/mp4"})],-1),_=t("h2",{id:"system-collections",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#system-collections"},"#"),e(" System Collections")],-1),m=t("video",{title:"System Collections",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/collections/collections-20220805/system-collections-20220805A.mp4",type:"video/mp4"})],-1),g=t("p",null,"System collections store the data and configuration details required to power your project.",-1),y=t("p",null,[e("Since system collections store information that powers your Directus project. You cannot reconfigure system collections or any of their default fields, as any reconfigurations would break your project. However, you "),t("em",null,"can"),e(" create and configure new fields on a system collection. This lets you safely customize your data model as desired.")],-1),v=t("p",null,"System collections are not displayed in the Content Module. The following table will go over the logic and functionality each system collection is responsible for, as well as where to find relevant App and API documentation.",-1),w=t("thead",null,[t("tr",null,[t("th",null,"System Collection"),t("th",null,"Purpose"),t("th",null,"APP"),t("th",null,"API")])],-1),b=t("td",null,"Activity",-1),S=t("td",null,"Tracks and stores all events within Directus, giving full accountability over everything.",-1),C=t("td",null,"Collections",-1),T=t("td",null,"Stores data table & configuration details each and every Collection.",-1),k=t("td",null,"Dashboards",-1),A=t("td",null,"Stores dashboard configuration details and all relationally linked panels.",-1),D=t("td",null,[t("strong",null,"N/A")],-1),F=t("td",null,"Fields",-1),I=t("td",null,"Stores configuration details for each field.",-1),x=t("td",null,"Files",-1),N=t("td",null,"This stores file location from asset storage as well as any data associated with that file.",-1),P=t("td",null,"Flows",-1),M=t("td",null,"Stores basic logic required for Flows, which enable event-triggered task automation.",-1),O=t("td",null,"Folders",-1),R=t("td",null,"Stores information required for Folders, which provide virtual file asset management.",-1),j=t("tr",null,[t("td",null,"Migrations"),t("td",null,"Used by our install/upgrade process to track when migration scripts for a specific release have been run."),t("td",null,"It has no relevant app functionality."),t("td",null,[t("strong",null,"N/A")])],-1),B=t("td",null,"Notifications",-1),L=t("td",null,"Stores details about in-app notifications.",-1),U=t("td",null,"Operations",-1),H=t("td",null,[e("Stores information required for Operations, which are a part of "),t("a",{href:"#flows"},"Flows"),e(".")],-1),V=t("td",null,"Panels",-1),q=t("td",null,[e("This stores information about individual analytics panels, which are displayed on "),t("a",{href:"#dashboards"},"Dashboards"),e(".")],-1),E=t("td",null,[t("strong",null,"N/A")],-1),W=t("td",null,"Permissions",-1),K=t("td",null,"This stores the access permissions configured for roles.",-1),Q=t("td",null,"Presets",-1),Y=t("td",null,"This stores details for presets and bookmarks.",-1),z=t("td",null,"Relations",-1),G=t("td",null,"This stores information about relationships between collections.",-1),J=t("td",null,"Revisions",-1),X=t("td",null,"Revisions are changes/edits made to Items. Directus keeps track of edits made, so you\u2019re able to revert to a previous state at will.",-1),Z=t("td",null,"Roles",-1),$=t("td",null,"Stores information about each role created.",-1),tt=t("tr",null,[t("td",null,"Sessions"),t("td",null,"Stores information about each user session, for system purposes."),t("td",null,[t("strong",null,"N/A")]),t("td",null,[t("strong",null,"N/A")])],-1),et=t("td",null,"Settings",-1),ot=t("td",null,[e("Stores all configurations made within "),t("strong",null,"Settings > Project Settings"),e(".")],-1),lt=t("td",null,"Shares",-1),nt=t("td",null,"Stores all information regarding data shares.",-1),it=t("td",null,null,-1),st=t("td",null,"Users",-1),at=t("td",null,"Stores information about each user within the platform.",-1),ct=t("td",null,"Webhooks",-1),dt=t("td",null,"Stores all information about configured webhooks.",-1),rt=t("h2",{id:"create-a-collection",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#create-a-collection"},"#"),e(" Create a Collection")],-1),ut=t("video",{title:"Create a Collection",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[t("source",{src:`https://cdn.directus.io/docs/v9/configuration/data-model/collections/collections-20220805/create-a-collection-20220805A.mp4
|
|
2
|
-
`,type:"video/mp4"})],-1),ht=t("p",null,"To create a collection, follow these steps.",-1),pt=t("li",null,[e("Navigate to "),t("strong",null,"Settings > Data Model"),e(", click "),t("span",{mi:"",btn:""},"add"),e(" in the page header, and a drawer will open.")],-1),ft=t("li",null,[e("Enter a unique "),t("strong",null,"Collection Name"),e(". This cannot be modified later, but can be translated."),t("br"),e(" This is used as the data table key, API collection key, and default collection name.")],-1),_t=t("li",null,[t("strong",null,"Singleton"),e(" \u2014 Toggles whether the collection is a "),t("a",{href:"#collection-setup"},"Singleton"),e(".")],-1),mt=t("li",null,[t("strong",null,"Primary Key Field"),e(" \u2014 Sets the name of the primary key field, defaults to "),t("code",null,"id"),e(".")],-1),gt=t("strong",null,"Type",-1),yt=t("li",null,[e("Click "),t("span",{mi:"",btn:""},"arrow_forward"),e(" to confirm.")],-1),vt=t("li",null,[e("Enable and rename the other Optional System Fields as desired: "),t("ul",null,[t("li",null,[t("strong",null,"Status"),e(" \u2014 Stores item status.")]),t("li",null,[t("strong",null,"Sort"),e(" \u2014 Adds a field which enables drag-and-drop sorting of items.")]),t("li",null,[t("strong",null,"Created On"),e(" \u2014 Logs the date an item was created.")]),t("li",null,[t("strong",null,"Created By"),e(" \u2014 Logs the user that created this item.")]),t("li",null,[t("strong",null,"Updated On"),e(" \u2014 Logs the date an item was last updated.")]),t("li",null,[t("strong",null,"Updated By"),e(" \u2014 Stores the last user to edit the file.")])])],-1),wt=t("li",null,[e("Click "),t("span",{mi:"",btn:""},"check"),e(" to confirm and create the collection.")],-1),bt=t("div",{class:"danger hint"},[t("div",{class:"hint-title"},"Immutable Keys"),t("p",null,[e("The collection name from step two cannot be modified after collection creation. However, you can override how it is displayed with "),t("a",{href:"#collection-setup"},"Collection Naming Translations"),e(".")])],-1),St=t("div",{class:"warning hint"},[t("div",{class:"hint-title"},"Composite Keys"),t("p",null,"Directus does not currently support composite keys. If your project uses composite keys, you will need to make an adjustment to the data model.")],-1),Ct=t("div",{class:"warning hint"},[t("div",{class:"hint-title"},"SQL Views"),t("p",null,"Directus does not currently support creation of virtual tables via SQL Views.")],-1),Tt=t("div",{class:"tip hint"},[t("div",{class:"hint-title"},"Database Tables"),t("p",null,[e("Remember, a collection is simply a database table. Therefore, you can import or create a table directly in the database and it will automatically appear within your Directus project. The first time you manage that table, a "),t("code",null,"directus_collections"),e(" record will be created with default values.")])],-1),kt=t("h2",{id:"toggle-collection-visibility",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#toggle-collection-visibility"},"#"),e(" Toggle Collection Visibility")],-1),At=t("video",{title:"Hide a Collection",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/collections/collections-20220805/toggle-collection-visibility-20220805A.mp4",type:"video/mp4"})],-1),Dt=t("p",null,"To toggle whether a collection is hidden by default in the Content Module, follow these steps.",-1),Ft=t("ol",null,[t("li",null,[e("Navigate to "),t("strong",null,"Settings > Data Model"),e(".")]),t("li",null,[e("Click "),t("span",{mi:"",icon:""},"more_vert"),e(" to open the collection\u2019s Context Menu.")]),t("li",null,[e("Select "),t("strong",null,"View Content"),e(" or "),t("strong",null,"Make Collection Hidden"),e(" to adjust visibility as desired.")])],-1),It={class:"tip hint"},xt=t("span",{mi:"",icon:""},"visibility",-1),Nt=t("strong",null,"Show Hidden Collections",-1),Pt=t("h2",{id:"create-a-folder",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#create-a-folder"},"#"),e(" Create a Folder")],-1),Mt=t("video",{title:"Create a Folder",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/collections/collections-20220805/create-a-folder-20220805A.mp4",type:"video/mp4"})],-1),Ot=t("p",null,[e("Folders allow you to sub-nest and group how collections are displayed. This feature simply changes how the collections are displayed under "),t("strong",null,"Settings > Data Model"),e(" and in the Content Module. It has no impact on the data model. To create a folder, follow these steps.")],-1),Rt=t("ol",null,[t("li",null,[e("Navigate to "),t("strong",null,"Settings > Data Model"),e(".")]),t("li",null,[e("Click "),t("span",{mi:"",btn:"",muted:""},"create_new_folder"),e(" in the page header.")]),t("li",null,"Set a folder key, which will also be used as the folder\u2019s name."),t("li",null,"Optional: Set the folder icon, color, note and translations as desired."),t("li",null,[e("Click "),t("strong",null,"Save"),e(" to create your folder.")])],-1),jt=t("h2",{id:"toggle-folder-display",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#toggle-folder-display"},"#"),e(" Toggle Folder Display")],-1),Bt=t("video",{title:"Toggle Folder Display",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/collections/collections-20220805/toggle-folder-display-20220805A.mp4",type:"video/mp4"})],-1),Lt=t("p",null,"To toggle folder display, follow these steps.",-1),Ut=t("ol",null,[t("li",null,[e("Navigate to "),t("strong",null,"Settings > Data Model"),e(".")]),t("li",null,[e("Click "),t("span",{mi:"",icon:""},"folder"),e(" on the desired collection to toggle the following displays: "),t("ul",null,[t("li",null,[t("strong",null,"Start Open")]),t("li",null,[t("strong",null,"Start Collapsed")]),t("li",null,[t("strong",null,"Always Open")])])])],-1),Ht=t("h2",{id:"sort-and-nest-collections",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#sort-and-nest-collections"},"#"),e(" Sort and Nest Collections")],-1),Vt=t("video",{title:"Configure a Collection",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/collections/collections-20220805/sort-and-nest-collections.mp4",type:"video/mp4"})],-1),qt=t("p",null,[e("To sort and nest collections in "),t("strong",null,"Settings > Data Model"),e(" and "),t("strong",null,"Content Module"),e(", follow these steps.")],-1),Et=t("ol",null,[t("li",null,[e("Navigate to "),t("strong",null,"Settings > Data Model"),e(".")]),t("li",null,[e("Click and drag "),t("span",{mi:"",icon:""},"drag_handle"),e(" to position collections as desired."),t("br"),e(" To nest a collection, drag below and to the right of an intended parent folder or collection.")])],-1),Wt=t("h2",{id:"configure-a-collection",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#configure-a-collection"},"#"),e(" Configure a Collection")],-1),Kt=t("video",{title:"Configure a Collection",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/collections/collections-20220805/configure-a-collection-20220805A.mp4",type:"video/mp4"})],-1),Qt=t("p",null,"To configure a collection, follow these steps.",-1),Yt=t("ol",null,[t("li",null,[e("Navigate to "),t("strong",null,"Settings > Data Model"),e(" and click the desired collection."),t("br"),e(" The collection\u2019s configuration page will open.")]),t("li",null,[e("Make configurations as desired. Configuration options are broken into six categories. "),t("ul",null,[t("li",null,[t("a",{href:"#fields-layout"},"Fields and Layout")]),t("li",null,[t("a",{href:"#collection-setup"},"Collection Setup")]),t("li",null,[t("a",{href:"#archive"},"Archive")]),t("li",null,[t("a",{href:"#sort-field"},"Sort")]),t("li",null,[t("a",{href:"#accountability"},"Accountability")]),t("li",null,[t("a",{href:"#duplication"},"Duplication")])])]),t("li",null,[e("Click "),t("span",{mi:"",btn:""},"check"),e(" to confirm.")])],-1),zt=t("h3",{id:"fields-%26-layout",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#fields-%26-layout"},"#"),e(" Fields & Layout")],-1),Gt=t("video",{title:"Fields and Layout",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/collections/collections-20220805/fields-and-layout-20220805A.mp4",type:"video/mp4"})],-1),Jt=t("h3",{id:"collection-setup",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#collection-setup"},"#"),e(" Collection Setup")],-1),Xt=t("video",{title:"Collection Setup",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/collections/collections-20220805/collection-setup-20220805A.mp4",type:"video/mp4"})],-1),Zt=t("p",null,"These controls allow you to modify how the collection is displayed within the Content Module.",-1),$t=t("li",null,[t("strong",null,"Collection Name"),e(" \u2014 Displays the collection\u2019s name, which cannot be modified. However, you can override the displayed name with Collection Naming Translations, shown lower on this list.")],-1),te=t("li",null,[t("strong",null,"Note"),e(" \u2014 Set a helpful note that explains the collection\u2019s purpose.")],-1),ee=t("li",null,[t("strong",null,"Icon"),e(" \u2014 Set an icon used throughout the app when referencing this collection.")],-1),oe=t("li",null,[t("strong",null,"Color"),e(" \u2014 Set a color for the icon, shown in the Navigation Bar and its page header.")],-1),le=t("strong",null,"Display Template",-1),ne=t("li",null,[t("strong",null,"Hidden"),e(" \u2014 Toggle whether the collection should be globally hidden in the other app modules, even for admin users. You cannot hide collections for admins via permissions like other roles, so this comes in handy to tidy up the Content Module.")],-1),ie=t("strong",null,"Singleton",-1),se=t("strong",null,"Collection Naming Translations",-1),ae={class:"tip hint"},ce=t("div",{class:"hint-title"},"Collection Naming Translations",-1),de=t("div",{class:"tip hint"},[t("div",{class:"hint-title"},"What's a Singleton?"),t("p",null,[e("A collection that only contains one single item. For example, a website\u2019s "),t("strong",null,"About Us"),e(" page.")])],-1),re=t("h3",{id:"archive",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#archive"},"#"),e(" Archive")],-1),ue=t("video",{title:"Archive",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/collections/collections-20220805/archive-20220805A.mp4",type:"video/mp4"})],-1),he=t("p",null,[e("Selects a field to handle archiving items. This provides a "),t("em",null,"soft-delete"),e(" functionality for items in a collection. Archived items will still exist in the collection and database, but are filtered within the Data Studio. To configure an archive field, set the following four input fields as desired.")],-1),pe=t("li",null,[t("strong",null,"Archive Field"),e(" \u2014 Selects the archive field from a dropdown menu.")],-1),fe=t("strong",null,"Archive App Filter",-1),_e=t("strong",null,"Archive Value",-1),me=t("strong",null,"Unarchive Value",-1),ge=t("div",{class:"tip hint"},[t("div",{class:"hint-title"},"Automatic Setup"),t("p",null,[e("When you "),t("a",{href:"#create-a-collection"},"create a collection"),e(", you have the option to create an optional Status Field. If you choose to include this field, the collection\u2019s archive settings will be automatically configured for you.")])],-1),ye=t("div",{class:"tip hint"},[t("div",{class:"hint-title"},"Archive Field Values"),t("p",null,"The archive fields can contain any number of additional values besides the archived and unarchived values defined above.")],-1),ve=t("div",{class:"tip hint"},[t("div",{class:"hint-title"},"Archived Item Management via API"),t("p",null,"Archived items are hidden in the app by default, but they are still returned normally via the API unless explicitly filtered out. This gives you the flexibility to manage archived items however you want when working with the API.")],-1),we=t("h3",{id:"sort-field",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#sort-field"},"#"),e(" Sort Field")],-1),be=t("video",{autoplay:"",playsinline:"",muted:"",loop:"",controls:"",title:"Batch Edit Items"},[t("source",{src:"https://cdn.directus.io/docs/v9/app-guide/content/content-collections/content-collections-20220415A/manually-sort-items-20220415A.mp4",type:"video/mp4"})],-1),Se=t("strong",null,"Content Module > Collection Page",-1),Ce=t("code",null,"INTEGER",-1),Te=t("p",null,[t("strong",null,"Sort Field"),e(" \u2014 Select a field to custom sort and order items. Click "),t("strong",null,"Deselect"),e(" to disable.")],-1),ke=t("p",null,"To configure a sort field, follow these steps.",-1),Ae=t("code",null,"INTEGER",-1),De=t("li",null,[e("Choose a field from the dropdown under "),t("strong",null,"Settings > Data Model > [Collection] > Sort"),e(".")],-1),Fe=t("li",null,[e("Click "),t("span",{mi:"",btn:""},"check"),e(" to confirm.")],-1),Ie={class:"tip hint"},xe=t("div",{class:"hint-title"},"Automatic Setup",-1),Ne=t("strong",null,"Sort",-1),Pe=t("div",{class:"tip hint"},[t("div",{class:"hint-title"},"Interface Sorting"),t("p",null,[e("To configure manual sorting within a relational Interface (e.g., M2M, O2M, or M2A), configure as above, but also set the "),t("strong",null,"Sort Field"),e(" within the relationship section of the field\u2019s configuration drawer.")])],-1),Me=t("div",{class:"tip hint"},[t("div",{class:"hint-title"},"Configure to Hidden"),t("p",null,[e("You can also set this field to be "),t("strong",null,"Hidden"),e(" so it doesn\u2019t show up within the Item Details Page.")])],-1),Oe=t("h3",{id:"accountability",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#accountability"},"#"),e(" Accountability")],-1),Re=t("video",{title:"Accountability",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/collections/collections-20220805/acountability-20220805A.mp4",type:"video/mp4"})],-1),je=t("ul",null,[t("li",null,[t("strong",null,"Activity & Revision Tracking"),e(" \u2014 The following options are supported: "),t("ul",null,[t("li",null,[t("strong",null,"Track Activity & Revisions")]),t("li",null,[t("strong",null,"Only Track Activity")]),t("li",null,[t("strong",null,"Do Not Track Anything")])])])],-1),Be={class:"tip hint"},Le=t("div",{class:"hint-title"},"Accountability vs. Telemetry",-1),Ue=t("em",null,"who does what",-1),He=t("h3",{id:"duplication",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#duplication"},"#"),e(" Duplication")],-1),Ve=t("video",{title:"Duplication",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/collections/collections-20220805/duplicate-20220805A.mp4",type:"video/mp4"})],-1),qe=t("p",null,[e("The "),t("strong",null,"Save as Copy"),e(" option on the Item Details Page offers a way to effectively duplicate the current item. Since there may be unique or relational data within the item, it\u2019s important to control exactly what will be copied. Duplication lets you configure which parent & relational field values will be copied when you use "),t("strong",null,"Save as Copy"),e(" on an item.")],-1),Ee=t("ul",null,[t("li",null,[t("strong",null,"Item Duplication Fields"),e(" \u2014 Check the field(s) to copy values for when duplicating an item.")])],-1),We=t("h2",{id:"delete-a-collection",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#delete-a-collection"},"#"),e(" Delete a Collection")],-1),Ke=t("video",{title:"Delete a Collection",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/collections/collections-20220805/delete-a-collection-20220805A.mp4",type:"video/mp4"})],-1),Qe=t("p",null,"To delete a collection, follow these steps.",-1),Ye=t("ol",null,[t("li",null,[e("Navigate to "),t("strong",null,"Settings > Data Model > [Collection Name]"),e(".")]),t("li",null,[e("Click "),t("span",{mi:"",btn:"",dngr:""},"delete"),e(" in the page header.")]),t("li",null,[e("Confirm this decision by clicking "),t("strong",null,"Delete"),e(" in the dialog.")])],-1),ze=t("div",{class:"danger hint"},[t("p",null,"This action is permanent and irreversible. Please proceed with caution.")],-1),$e="Collections",to=!1,eo={__name:"collections",setup(Ge,{expose:a}){const i={title:"Collections",modularExtension:!1};return a({frontmatter:i}),(Je,Xe)=>{const l=s("router-link"),c=s("docs-wrapper");return d(),r(c,{frontmatter:i},{default:o(()=>[t("div",u,[h,p,f,t("p",null,[e("Collections are data tables. Typically, you access items within a collection in the "),n(l,{to:"/docs/app/content"},{default:o(()=>[e("Content Module")]),_:1}),e(".")]),_,m,g,y,v,t("table",null,[w,t("tbody",null,[t("tr",null,[b,S,t("td",null,[n(l,{to:"/docs/configuration/activity-log"},{default:o(()=>[e("Activity Log")]),_:1})]),t("td",null,[n(l,{to:"/docs/reference/system/activity"},{default:o(()=>[e("Activity")]),_:1})])]),t("tr",null,[C,T,t("td",null,[n(l,{to:"/docs/configuration/data-model/collections"},{default:o(()=>[e("Collections")]),_:1})]),t("td",null,[n(l,{to:"/docs/reference/system/collections"},{default:o(()=>[e("Collections")]),_:1})])]),t("tr",null,[k,A,t("td",null,[n(l,{to:"/docs/app/insights"},{default:o(()=>[e("Insights")]),_:1})]),D]),t("tr",null,[F,I,t("td",null,[n(l,{to:"/docs/configuration/data-model/fields/"},{default:o(()=>[e("Fields")]),_:1})]),t("td",null,[n(l,{to:"/docs/reference/system/fields"},{default:o(()=>[e("Fields")]),_:1})])]),t("tr",null,[x,N,t("td",null,[n(l,{to:"/docs/app/file-library"},{default:o(()=>[e("File Library")]),_:1})]),t("td",null,[n(l,{to:"/docs/reference/files"},{default:o(()=>[e("Files")]),_:1})])]),t("tr",null,[P,M,t("td",null,[n(l,{to:"/docs/configuration/flows"},{default:o(()=>[e("Flows")]),_:1})]),t("td",null,[n(l,{to:"/docs/reference/system/flows"},{default:o(()=>[e("Flows")]),_:1})])]),t("tr",null,[O,R,t("td",null,[n(l,{to:"/docs/app/file-library#folders"},{default:o(()=>[e("Folders")]),_:1})]),t("td",null,[n(l,{to:"/docs/reference/system/folders"},{default:o(()=>[e("Folders")]),_:1})])]),j,t("tr",null,[B,L,t("td",null,[n(l,{to:"/docs/app/overview#_1-module-bar"},{default:o(()=>[e("Module Bar")]),_:1}),e(" and "),n(l,{to:"/docs/app/overview#_4-sidebar"},{default:o(()=>[e("Sidebar")]),_:1})]),t("td",null,[n(l,{to:"/docs/reference/system/notifications"},{default:o(()=>[e("Notifications")]),_:1})])]),t("tr",null,[U,H,t("td",null,[n(l,{to:"/docs/configuration/flows"},{default:o(()=>[e("Operations")]),_:1})]),t("td",null,[n(l,{to:"/docs/reference/system/operations.md"},{default:o(()=>[e("Operations")]),_:1})])]),t("tr",null,[V,q,t("td",null,[n(l,{to:"/docs/app/insights"},{default:o(()=>[e("Insights")]),_:1})]),E]),t("tr",null,[W,K,t("td",null,[n(l,{to:"/docs/configuration/users-roles-permissions"},{default:o(()=>[e("Users, Roles & Permissions")]),_:1})]),t("td",null,[n(l,{to:"/docs/reference/system/permissions"},{default:o(()=>[e("Permissions")]),_:1})])]),t("tr",null,[Q,Y,t("td",null,[n(l,{to:"/docs/configuration/presets-bookmarks"},{default:o(()=>[e("Presents & Bookmarks")]),_:1})]),t("td",null,[n(l,{to:"/docs/reference/system/presets"},{default:o(()=>[e("Presets")]),_:1})])]),t("tr",null,[z,G,t("td",null,[n(l,{to:"/docs/configuration/data-model/relationships"},{default:o(()=>[e("Relationships")]),_:1})]),t("td",null,[n(l,{to:"/docs/reference/system/relations"},{default:o(()=>[e("Relations")]),_:1})])]),t("tr",null,[J,X,t("td",null,[n(l,{to:"/docs/app/content/items#revert-an-item"},{default:o(()=>[e("Revert an Item")]),_:1})]),t("td",null,[n(l,{to:"/docs/reference/system/revisions"},{default:o(()=>[e("Revisions")]),_:1})])]),t("tr",null,[Z,$,t("td",null,[n(l,{to:"/docs/configuration/users-roles-permissions"},{default:o(()=>[e("Users, Roles, and Permissions")]),_:1})]),t("td",null,[n(l,{to:"/docs/reference/system/roles"},{default:o(()=>[e("Roles")]),_:1})])]),tt,t("tr",null,[et,ot,t("td",null,[n(l,{to:"/docs/configuration/project-settings"},{default:o(()=>[e("Project Settings")]),_:1})]),t("td",null,[n(l,{to:"/docs/reference/system/settings"},{default:o(()=>[e("settings")]),_:1})])]),t("tr",null,[lt,nt,t("td",null,[n(l,{to:"/docs/app/content/shares"},{default:o(()=>[e("Data Sharing")]),_:1})]),it]),t("tr",null,[st,at,t("td",null,[n(l,{to:"/docs/app/user-directory"},{default:o(()=>[e("User Directory")]),_:1})]),t("td",null,[n(l,{to:"/docs/reference/system/relations"},{default:o(()=>[e("Users")]),_:1})])]),t("tr",null,[ct,dt,t("td",null,[n(l,{to:"/docs/configuration/webhooks"},{default:o(()=>[e("Webhooks")]),_:1})]),t("td",null,[n(l,{to:"/docs/reference/system/relations"},{default:o(()=>[e("Webhooks")]),_:1})])])])]),rt,ut,ht,t("ol",null,[pt,ft,t("li",null,[e("Optional: Make any other configurations as desired. "),t("ul",null,[_t,mt,t("li",null,[gt,e(" \u2014 Sets the "),n(l,{to:"/docs/configuration/data-model/fields/#keys-and-ids"},{default:o(()=>[e("type of ID")]),_:1}),e(" to use for this collection.")])])]),yt,vt,wt]),bt,St,Ct,Tt,kt,At,Dt,Ft,t("div",It,[t("p",null,[e("Assuming a user has "),n(l,{to:"/docs/configuration/users-roles-permissions"},{default:o(()=>[e("access permissions")]),_:1}),e(", hidden collections can still be viewed. They must right-click on the Navigation Bar and choose "),xt,e(),Nt,e(".")])]),Pt,Mt,Ot,Rt,jt,Bt,Lt,Ut,Ht,Vt,qt,Et,Wt,Kt,Qt,Yt,zt,Gt,t("p",null,[e("This section allows you to create and configure fields, as well as configure how fields are displayed on the "),n(l,{to:"/docs/app/content/items"},{default:o(()=>[e("Item Details Page")]),_:1}),e(". To learn more, please see the documentation on "),n(l,{to:"/docs/configuration/data-model/fields/"},{default:o(()=>[e("fields")]),_:1}),e(".")]),Jt,Xt,Zt,t("ul",null,[$t,te,ee,oe,t("li",null,[le,e(" \u2014 Create a "),n(l,{to:"/docs/app/display-templates"},{default:o(()=>[e("Display Template")]),_:1}),e(" for the collection.")]),ne,t("li",null,[ie,e(" \u2014 Toggle to bypass the "),n(l,{to:"/docs/app/content/collections"},{default:o(()=>[e("Collection Page")]),_:1}),e(" and take users to the "),n(l,{to:"/docs/app/content/items"},{default:o(()=>[e("Item Details Page")]),_:1}),e(".")]),t("li",null,[se,e(" \u2014 Translate the collection name across multiple languages. When the default language is changed in "),n(l,{to:"/docs/configuration/project-settings#general"},{default:o(()=>[e("Project Settings")]),_:1}),e(" or "),n(l,{to:"/docs/app/user-directory#user-details-page"},{default:o(()=>[e("User Details Page")]),_:1}),e(", the relevant translation, if any exists, will be used throughout the app.")])]),t("div",ae,[ce,t("p",null,[e("By default, Directus uses the "),n(l,{to:"/docs/getting-started/glossary#title-formatter"},{default:o(()=>[e("Title Formatter")]),_:1}),e(" to display collection keys as human readable names, but you can also use translations to explicitly rename more technical table keys.")])]),de,re,ue,he,t("ul",null,[pe,t("li",null,[fe,e(" \u2014 Toggles whether app users can "),n(l,{to:"/docs/app/content/collections#view-archived-items"},{default:o(()=>[e("filter for archived items")]),_:1}),e(".")]),t("li",null,[_e,e(" \u2014 A value that is assigned to the field when an item is "),n(l,{to:"/docs/app/content/items#archive-an-item"},{default:o(()=>[e("archived")]),_:1}),e(".")]),t("li",null,[me,e(" \u2014 A value that is assigned to the field when an item is "),n(l,{to:"/docs/app/content/items#archive-an-item"},{default:o(()=>[e("unarchived")]),_:1}),e(".")])]),ge,ye,ve,we,be,t("p",null,[e("The sort feature enables users to "),n(l,{to:"/docs/app/content/collections#manually-sort-items"},{default:o(()=>[e("manually sort Items")]),_:1}),e(" within the Data Studio. This is typically shown on the "),Se,e(". It can also be used for sorting items within "),n(l,{to:"/docs/getting-started/glossary#junction-collections"},{default:o(()=>[e("Junction Collections")]),_:1}),e(". A standard field, configured with an "),Ce,e(" data type, is required. As shown in the video, fields which cannot serve as sort fields will be grayed out and unselectable in the Sort Field dropdown.")]),Te,ke,t("ol",null,[t("li",null,[n(l,{to:"/docs/configuration/data-model/fields/#create-a-field-standard"},{default:o(()=>[e("Create a Field")]),_:1}),e(" with an "),Ae,e(" data type.")]),De,Fe]),t("p",null,[e("Once you sort field is configured, you may want to learn how to "),n(l,{to:"/docs/app/content/collections#manually-sort-items"},{default:o(()=>[e("manually sort Items")]),_:1}),e(".")]),t("div",Ie,[xe,t("p",null,[e("When you "),n(l,{to:"/docs/configuration/data-model/collections#create-a-collection"},{default:o(()=>[e("create a Collection")]),_:1}),e(", you have the option of creating a "),Ne,e(" field. If you choose to include this field, the collection\u2019s sort settings will automatically be configured for you.")])]),Pe,Me,Oe,Re,t("p",null,[e("By default, your Directus Project tracks all "),n(l,{to:"/docs/reference/system/activity"},{default:o(()=>[e("activity")]),_:1}),e(" and "),n(l,{to:"/docs/reference/system/revisions"},{default:o(()=>[e("revisions")]),_:1}),e(" for collections. However, you can override this and choose what data is tracked.")]),je,t("div",Be,[Le,t("p",null,[e("Accountability is a log of "),Ue,e(" in your project. It is for your team\u2019s own use. This is different from "),n(l,{to:"/docs/self-hosted/config-options#telemetry"},{default:o(()=>[e("telemetry")]),_:1}),e(", which is configured under "),n(l,{to:"/docs/self-hosted/config-options#telemetry"},{default:o(()=>[e("environment variables")]),_:1}),e(".")])]),He,Ve,qe,Ee,We,Ke,Qe,Ye,ze])]),_:1})}}};export{eo as default,to as modularExtension,$e as title};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{z as y}from"./index.0fe04da9.entry.js";function k(f,p){for(var i=0;i<p.length;i++){const l=p[i];if(typeof l!="string"&&!Array.isArray(l)){for(const c in l)if(c!=="default"&&!(c in f)){const u=Object.getOwnPropertyDescriptor(l,c);u&&Object.defineProperty(f,c,u.get?u:{enumerable:!0,get:()=>l[c]})}}}return Object.freeze(Object.defineProperty(f,Symbol.toStringTag,{value:"Module"}))}var x={exports:{}};(function(f,p){(function(i){i(y.exports)})(function(i){i.defineMode("commonlisp",function(l){var c=/^(block|let*|return-from|catch|load-time-value|setq|eval-when|locally|symbol-macrolet|flet|macrolet|tagbody|function|multiple-value-call|the|go|multiple-value-prog1|throw|if|progn|unwind-protect|labels|progv|let|quote)$/,u=/^with|^def|^do|^prog|case$|^cond$|bind$|when$|unless$/,a=/^(?:[+\-]?(?:\d+|\d*\.\d+)(?:[efd][+\-]?\d+)?|[+\-]?\d+(?:\/[+\-]?\d+)?|#b[+\-]?[01]+|#o[+\-]?[0-7]+|#x[+\-]?[\da-f]+)/,b=/[^\s'`,@()\[\]";]/,o;function s(e){for(var n;n=e.next();)if(n=="\\")e.next();else if(!b.test(n)){e.backUp(1);break}return e.current()}function d(e,n){if(e.eatSpace())return o="ws",null;if(e.match(a))return"number";var t=e.next();if(t=="\\"&&(t=e.next()),t=='"')return(n.tokenize=m)(e,n);if(t=="(")return o="open","bracket";if(t==")"||t=="]")return o="close","bracket";if(t==";")return e.skipToEnd(),o="ws","comment";if(/['`,@]/.test(t))return null;if(t=="|")return e.skipTo("|")?(e.next(),"symbol"):(e.skipToEnd(),"error");if(t=="#"){var t=e.next();return t=="("?(o="open","bracket"):/[+\-=\.']/.test(t)||/\d/.test(t)&&e.match(/^\d*#/)?null:t=="|"?(n.tokenize=v)(e,n):t==":"?(s(e),"meta"):t=="\\"?(e.next(),s(e),"string-2"):"error"}else{var r=s(e);return r=="."?null:(o="symbol",r=="nil"||r=="t"||r.charAt(0)==":"?"atom":n.lastType=="open"&&(c.test(r)||u.test(r))?"keyword":r.charAt(0)=="&"?"variable-2":"variable")}}function m(e,n){for(var t=!1,r;r=e.next();){if(r=='"'&&!t){n.tokenize=d;break}t=!t&&r=="\\"}return"string"}function v(e,n){for(var t,r;t=e.next();){if(t=="#"&&r=="|"){n.tokenize=d;break}r=t}return o="ws","comment"}return{startState:function(){return{ctx:{prev:null,start:0,indentTo:0},lastType:null,tokenize:d}},token:function(e,n){e.sol()&&typeof n.ctx.indentTo!="number"&&(n.ctx.indentTo=n.ctx.start+1),o=null;var t=n.tokenize(e,n);return o!="ws"&&(n.ctx.indentTo==null?o=="symbol"&&u.test(e.current())?n.ctx.indentTo=n.ctx.start+l.indentUnit:n.ctx.indentTo="next":n.ctx.indentTo=="next"&&(n.ctx.indentTo=e.column()),n.lastType=o),o=="open"?n.ctx={prev:n.ctx,start:e.column(),indentTo:null}:o=="close"&&(n.ctx=n.ctx.prev||n.ctx),t},indent:function(e,n){var t=e.ctx.indentTo;return typeof t=="number"?t:e.ctx.start+1},closeBrackets:{pairs:'()[]{}""'},lineComment:";;",blockCommentStart:"#|",blockCommentEnd:"|#"}}),i.defineMIME("text/x-common-lisp","commonlisp")})})();const g=x.exports,T=k({__proto__:null,default:g},[x.exports]);export{T as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as n,o as a,e as h,y as s,u as e,q as t,z as d}from"./runtime-core.esm-bundler.22ec0346.js";const c={class:"markdown-body"},u=e("p",null,"Conditions allow you to alter the current field\u2019s setup based on the values of other fields in the form. This allows you to show/hide the field, make it readonly, or change the interface options.",-1),f=e("p",null,[t("Each field can have one or more "),e("em",null,"rules"),t(". Each rule has the following configuration options:")],-1),_=e("li",null,[e("strong",null,"Name"),t(": The name of the rule. This is only used internally for convenience purposes")],-1),p=e("strong",null,"Rule",-1),m=e("li",null,[e("strong",null,"Readonly"),t(": Whether or not the field is readonly when the condition is matched")],-1),g=e("li",null,[e("strong",null,"Hidden"),t(": Whether or not the field is hidden when the condition is matched")],-1),y=e("li",null,[e("strong",null,"Required"),t(": Whether or not the field is required when the condition is matched")],-1),w=e("li",null,[e("strong",null,"Interface Options"),t(": Any additional configuration for the selected interface")],-1),T=e("p",null,"These changes to the field are merged onto the base configuration of the field. This means you can have the field hidden by default, and then only toggle the hidden state of the field in the condition.",-1),v=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Order Matters"),e("p",null,[t("The conditions are matched in order. The "),e("strong",null,"last"),t(" condition that matches is the one that\u2019s used to apply the changes.")])],-1),b="Conditions",E=!1,N={__name:"conditions",setup(k,{expose:l}){const o={title:"Conditions",modularExtension:!1};return l({frontmatter:o}),(x,C)=>{const i=n("router-link"),r=n("docs-wrapper");return a(),h(r,{frontmatter:o},{default:s(()=>[e("div",c,[u,f,e("ul",null,[_,e("li",null,[p,t(": The rule that controls whether or not these conditions are applied. Rule follows the "),d(i,{to:"/docs/reference/filter-rules"},{default:s(()=>[t("Filter Rules")]),_:1}),t(" spec")]),m,g,y,w]),T,v])]),_:1})}}};export{N as default,E as modularExtension,b as title};
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import{a,o as r,e as i,y as n,u as l,q as e,z as o}from"./runtime-core.esm-bundler.22ec0346.js";const c={class:"markdown-body"},h=l("blockquote",null,[l("p",null,"Environment variables are used for all configuration within a Directus project. These variables can be defined in a number of ways, which we cover below.")],-1),_=l("h2",{id:"configuration-files",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#configuration-files"},"#"),e(" Configuration Files")],-1),p=l("p",null,[e("By default, Directus will read the "),l("code",null,".env"),e(" file located next to your project\u2019s "),l("code",null,"package.json"),e(" (typically in the root folder of your project) for its configuration. You can change this path and filename by setting the "),l("code",null,"CONFIG_PATH"),e(" environment variable before starting Directus. For example:")],-1),f=l("pre",null,[l("code",{class:"language-bash"},[e("CONFIG_PATH="),l("span",{class:"hljs-string"},'"/path/to/config.js"'),e(` npx directus start
|
|
2
|
-
`)])],-1),m=l("p",null,[e("In case you prefer using a configuration file instead of environment variables, you can also use the "),l("code",null,"CONFIG_PATH"),e(" environment variable to instruct Directus to use a local configuration file instead of environment variables. The config file can be one of the following formats:")],-1),E=l("ul",null,[l("li",null,[l("a",{href:"#env"},".env")]),l("li",null,[l("a",{href:"#config-json"},"config.json")]),l("li",null,[l("a",{href:"#config-yaml"},"config.yaml")]),l("li",null,[l("a",{href:"#config-js"},"config.js")])],-1),A=l("h3",{id:".env",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#.env"},"#"),e(" .env")],-1),T=l("p",null,"If the config path has no file extension, or a file extension that\u2019s not one of the other supported formats, Directus will try reading the file config path as environment variables. This has the following structure:",-1),g=l("pre",null,[l("code",null,`HOST="0.0.0.0"
|
|
3
|
-
PORT=8055
|
|
4
|
-
|
|
5
|
-
DB_CLIENT="pg"
|
|
6
|
-
DB_HOST="localhost"
|
|
7
|
-
DB_PORT=5432
|
|
8
|
-
|
|
9
|
-
etc
|
|
10
|
-
`)],-1),R=l("h3",{id:"config.json",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#config.json"},"#"),e(" config.json")],-1),b=l("p",null,"If you prefer a single JSON file for your configuration, create a JSON file with the environment variables as keys, for example:",-1),S=l("pre",null,[l("code",null,`CONFIG_PATH="/path/to/config.json"
|
|
11
|
-
`)],-1),O=l("pre",null,[l("code",{class:"language-json"},[l("span",{class:"hljs-punctuation"},"{"),e(`
|
|
12
|
-
`),l("span",{class:"hljs-attr"},'"HOST"'),l("span",{class:"hljs-punctuation"},":"),e(),l("span",{class:"hljs-string"},'"0.0.0.0"'),l("span",{class:"hljs-punctuation"},","),e(`
|
|
13
|
-
`),l("span",{class:"hljs-attr"},'"PORT"'),l("span",{class:"hljs-punctuation"},":"),e(),l("span",{class:"hljs-number"},"8055"),l("span",{class:"hljs-punctuation"},","),e(`
|
|
14
|
-
|
|
15
|
-
`),l("span",{class:"hljs-attr"},'"DB_CLIENT"'),l("span",{class:"hljs-punctuation"},":"),e(),l("span",{class:"hljs-string"},'"pg"'),l("span",{class:"hljs-punctuation"},","),e(`
|
|
16
|
-
`),l("span",{class:"hljs-attr"},'"DB_HOST"'),l("span",{class:"hljs-punctuation"},":"),e(),l("span",{class:"hljs-string"},'"localhost"'),l("span",{class:"hljs-punctuation"},","),e(`
|
|
17
|
-
`),l("span",{class:"hljs-attr"},'"DB_PORT"'),l("span",{class:"hljs-punctuation"},":"),e(),l("span",{class:"hljs-number"},"5432"),e(`
|
|
18
|
-
|
|
19
|
-
`),l("span",{class:"hljs-comment"},"// etc"),e(`
|
|
20
|
-
`),l("span",{class:"hljs-punctuation"},"}"),e(`
|
|
21
|
-
`)])],-1),I=l("h3",{id:"config.yaml",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#config.yaml"},"#"),e(" config.yaml")],-1),y=l("p",null,[e("Similar to JSON, you can use a "),l("code",null,".yaml"),e(" (or "),l("code",null,".yml"),e(") file for your config:")],-1),D=l("pre",null,[l("code",null,`CONFIG_PATH="/path/to/config.yaml"
|
|
22
|
-
`)],-1),L=l("pre",null,[l("code",{class:"language-yaml"},[l("span",{class:"hljs-attr"},"HOST:"),e(),l("span",{class:"hljs-number"},"0.0"),l("span",{class:"hljs-number"},".0"),l("span",{class:"hljs-number"},".0"),e(`
|
|
23
|
-
`),l("span",{class:"hljs-attr"},"PORT:"),e(),l("span",{class:"hljs-number"},"8055"),e(`
|
|
24
|
-
|
|
25
|
-
`),l("span",{class:"hljs-attr"},"DB_CLIENT:"),e(),l("span",{class:"hljs-string"},"pg"),e(`
|
|
26
|
-
`),l("span",{class:"hljs-attr"},"DB_HOST:"),e(),l("span",{class:"hljs-string"},"localhost"),e(`
|
|
27
|
-
`),l("span",{class:"hljs-attr"},"DB_PORT:"),e(),l("span",{class:"hljs-number"},"5432"),e(`
|
|
28
|
-
`),l("span",{class:"hljs-comment"},"#"),e(`
|
|
29
|
-
`),l("span",{class:"hljs-comment"},"# etc"),e(`
|
|
30
|
-
`)])],-1),C=l("h3",{id:"config.js",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#config.js"},"#"),e(" config.js")],-1),v=l("p",null,[e("Using a JavaScript file for your config allows you to dynamically generate the configuration of the project during startup. The JavaScript configuration supports two different formats, either an "),l("strong",null,"Object Structure"),e(" where the key is the environment variable name:")],-1),w=l("pre",null,[l("code",{class:"language-js"},[l("span",{class:"hljs-comment"},"// Object Syntax"),e(`
|
|
31
|
-
|
|
32
|
-
`),l("span",{class:"hljs-variable language_"},"module"),e("."),l("span",{class:"hljs-property"},"exports"),e(` = {
|
|
33
|
-
`),l("span",{class:"hljs-attr"},"HOST"),e(": "),l("span",{class:"hljs-string"},"'0.0.0.0'"),e(`,
|
|
34
|
-
`),l("span",{class:"hljs-attr"},"PORT"),e(": "),l("span",{class:"hljs-number"},"8055"),e(`,
|
|
35
|
-
|
|
36
|
-
`),l("span",{class:"hljs-attr"},"DB_CLIENT"),e(": "),l("span",{class:"hljs-string"},"'pg'"),e(`,
|
|
37
|
-
`),l("span",{class:"hljs-attr"},"DB_HOST"),e(": "),l("span",{class:"hljs-string"},"'localhost'"),e(`,
|
|
38
|
-
`),l("span",{class:"hljs-attr"},"DB_PORT"),e(": "),l("span",{class:"hljs-number"},"5432"),e(`,
|
|
39
|
-
|
|
40
|
-
`),l("span",{class:"hljs-comment"},"// etc"),e(`
|
|
41
|
-
};
|
|
42
|
-
`)])],-1),H=l("p",null,[e("Or a "),l("strong",null,"Function Structure"),e(" that "),l("em",null,"returns"),e(" the same object format as above. The function gets "),l("code",null,"process.env"),e(" as its parameter.")],-1),U=l("pre",null,[l("code",{class:"language-js"},[l("span",{class:"hljs-comment"},"// Function Syntax"),e(`
|
|
43
|
-
|
|
44
|
-
`),l("span",{class:"hljs-variable language_"},"module"),e("."),l("span",{class:"hljs-property"},"exports"),e(" = "),l("span",{class:"hljs-keyword"},"function"),e(" ("),l("span",{class:"hljs-params"},"env"),e(`) {
|
|
45
|
-
`),l("span",{class:"hljs-keyword"},"return"),e(` {
|
|
46
|
-
`),l("span",{class:"hljs-attr"},"HOST"),e(": "),l("span",{class:"hljs-string"},"'0.0.0.0'"),e(`,
|
|
47
|
-
`),l("span",{class:"hljs-attr"},"PORT"),e(": "),l("span",{class:"hljs-number"},"8055"),e(`,
|
|
48
|
-
|
|
49
|
-
`),l("span",{class:"hljs-attr"},"DB_CLIENT"),e(": "),l("span",{class:"hljs-string"},"'pg'"),e(`,
|
|
50
|
-
`),l("span",{class:"hljs-attr"},"DB_HOST"),e(": "),l("span",{class:"hljs-string"},"'localhost'"),e(`,
|
|
51
|
-
`),l("span",{class:"hljs-attr"},"DB_PORT"),e(": "),l("span",{class:"hljs-number"},"5432"),e(`,
|
|
52
|
-
|
|
53
|
-
`),l("span",{class:"hljs-comment"},"// etc"),e(`
|
|
54
|
-
};
|
|
55
|
-
};
|
|
56
|
-
`)])],-1),P=l("h2",{id:"environment-variable-files",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#environment-variable-files"},"#"),e(" Environment Variable Files")],-1),N=l("p",null,[e("Any of the environment variable values can be imported from a file, by appending "),l("code",null,"_FILE"),e(" to the environment variable name. This is especially useful when used in conjunction with Docker Secrets, so you can keep sensitive data out of your compose files. For example:")],-1),x=l("pre",null,[l("code",null,`DB_PASSWORD_FILE="/run/secrets/db_password"
|
|
57
|
-
`)],-1),M=l("h2",{id:"type-casting-and-nesting",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#type-casting-and-nesting"},"#"),e(" Type Casting and Nesting")],-1),V=l("p",null,"Environment variables are automatically type cast based on the structure of the variable, for example:",-1),j=l("pre",null,[l("code",null,`PUBLIC_URL="https://example.com"
|
|
58
|
-
// "https://example.com"
|
|
59
|
-
|
|
60
|
-
DB_HOST="3306"
|
|
61
|
-
// 3306
|
|
62
|
-
|
|
63
|
-
CORS_ENABLED="false"
|
|
64
|
-
// false
|
|
65
|
-
|
|
66
|
-
STORAGE_LOCATIONS="s3,local,example"
|
|
67
|
-
// ["s3", "local", "example"]
|
|
68
|
-
`)],-1),k=l("p",null,[e("In cases where the environment variables are converted to a configuration object for third party library use, like in "),l("code",null,"DB_*"),e(" or "),l("code",null,"RATE_LIMITER_REDIS_*"),e(", the environment variable will be converted to camelCase. You can use a double underscore ("),l("code",null,"__"),e(") for nested objects:")],-1),G=l("pre",null,[l("code",null,`DB_CLIENT="pg"
|
|
69
|
-
DB_CONNECTION_STRING="postgresql://postgres:example@127.0.0.1"
|
|
70
|
-
DB_SSL__REJECT_UNAUTHORIZED="false"
|
|
71
|
-
|
|
72
|
-
{
|
|
73
|
-
client: "pg",
|
|
74
|
-
connectionString: "postgresql://postgres:example@127.0.0.1",
|
|
75
|
-
ssl: {
|
|
76
|
-
rejectUnauthorized: false
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
`)],-1),B=l("h2",{id:"environment-syntax-prefix",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#environment-syntax-prefix"},"#"),e(" Environment Syntax Prefix")],-1),F=l("p",null,[e("Directus will attempt to "),l("a",{href:"#type-casting-and-nesting"},"automatically type cast environment variables"),e(" based on context clues. If you have a specific need for a given type, you can tell Directus what type to use for the given value by prefixing the value with "),l("code",null,"{type}:"),e(". The following types are available:")],-1),W=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Syntax Prefix"),l("th",null,"Example"),l("th",null,"Output")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"string")]),l("td",null,[l("code",null,"string:value")]),l("td",null,[l("code",null,'"value"')])]),l("tr",null,[l("td",null,[l("code",null,"number")]),l("td",null,[l("code",null,"number:3306")]),l("td",null,[l("code",null,"3306")])]),l("tr",null,[l("td",null,[l("code",null,"regex")]),l("td",null,[l("code",null,"regex:\\.example\\.com$")]),l("td",null,[l("code",null,"/\\.example\\.com$/")])]),l("tr",null,[l("td",null,[l("code",null,"array")]),l("td",null,[l("code",null,"array:https://example.com,https://example2.com"),e(),l("br"),e(),l("code",null,"array:string:https://example.com,regex:\\.example3\\.com$")]),l("td",null,[l("code",null,'["https://example.com", "https://example2.com"]'),e(),l("br"),e(),l("code",null,'["https://example.com", "https://example2.com", /\\.example3\\.com$/]')])]),l("tr",null,[l("td",null,[l("code",null,"json")]),l("td",null,[l("code",null,'json:{"items": ["example1", "example2"]}')]),l("td",null,[l("code",null,'{"items": ["example1", "example2"]}')])])])],-1),q=l("hr",null,null,-1),K=l("h2",{id:"general",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#general"},"#"),e(" General")],-1),Y=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"CONFIG_PATH")]),l("td",null,[e("Where your config file is located. See "),l("a",{href:"#configuration-files"},"Configuration Files")]),l("td",null,[l("code",null,".env")])]),l("tr",null,[l("td",null,[l("code",null,"HOST")]),l("td",null,"IP or host the API listens on."),l("td",null,[l("code",null,"0.0.0.0")])]),l("tr",null,[l("td",null,[l("code",null,"PORT")]),l("td",null,"What port to run the API under."),l("td",null,[l("code",null,"8055")])]),l("tr",null,[l("td",null,[l("code",null,"PUBLIC_URL"),l("sup",null,"[1]")]),l("td",null,"URL where your API can be reached on the web."),l("td",null,[l("code",null,"/")])]),l("tr",null,[l("td",null,[l("code",null,"LOG_LEVEL")]),l("td",null,[e("What level of detail to log. One of "),l("code",null,"fatal"),e(", "),l("code",null,"error"),e(", "),l("code",null,"warn"),e(", "),l("code",null,"info"),e(", "),l("code",null,"debug"),e(", "),l("code",null,"trace"),e(" or "),l("code",null,"silent"),e(".")]),l("td",null,[l("code",null,"info")])]),l("tr",null,[l("td",null,[l("code",null,"LOG_STYLE")]),l("td",null,[e("Render the logs human readable (pretty) or as JSON. One of "),l("code",null,"pretty"),e(", "),l("code",null,"raw"),e(".")]),l("td",null,[l("code",null,"pretty")])]),l("tr",null,[l("td",null,[l("code",null,"MAX_PAYLOAD_SIZE")]),l("td",null,"Controls the maximum request body size. Accepts number of bytes, or human readable string."),l("td",null,[l("code",null,"1mb")])]),l("tr",null,[l("td",null,[l("code",null,"ROOT_REDIRECT")]),l("td",null,[e("Where to redirect to when navigating to "),l("code",null,"/"),e(". Accepts a relative path, absolute URL, or "),l("code",null,"false"),e(" to disable.")]),l("td",null,[l("code",null,"./admin")])]),l("tr",null,[l("td",null,[l("code",null,"SERVE_APP")]),l("td",null,[e("Whether or not to serve the Admin App under "),l("code",null,"/admin"),e(".")]),l("td",null,[l("code",null,"true")])]),l("tr",null,[l("td",null,[l("code",null,"GRAPHQL_INTROSPECTION")]),l("td",null,"Whether or not to enable GraphQL Introspection"),l("td",null,[l("code",null,"true")])]),l("tr",null,[l("td",null,[l("code",null,"MAX_RELATIONAL_DEPTH")]),l("td",null,[e("The maximum depth when filtering / querying relational fields, with a minimum value of "),l("code",null,"2"),e(".")]),l("td",null,[l("code",null,"10")])])])],-1),z=l("p",null,[l("sup",null,"[1]"),e(" The PUBLIC_URL value is used for things like OAuth redirects, forgot-password emails, and logos that needs to be publicly available on the internet.")],-1),X=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Additional Logger Variables"),l("p",null,[e("All "),l("code",null,"LOGGER_*"),e(" environment variables are passed to the "),l("code",null,"options"),e(" configuration of a "),l("a",{href:"https://github.com/pinojs/pino/blob/master/docs/api.md#options",target:"_blank",rel:"noopener noreferrer"},[l("code",null,"Pino"),e(" instance")]),e(". All "),l("code",null,"LOGGER_HTTP*"),e(" environment variables are passed to the "),l("code",null,"options"),e(" configuration of a "),l("a",{href:"https://github.com/pinojs/pino-http#api",target:"_blank",rel:"noopener noreferrer"},[l("code",null,"Pino-http"),e(" instance")]),e(". Based on your project\u2019s needs, you can extend the "),l("code",null,"LOGGER_*"),e(" environment variables with any config you need to pass to the logger instance. If a LOGGER_LEVELS key is added, these values will be passed to the logger frontmatter, as described "),l("a",{href:"https://github.com/pinojs/pino/blob/master/docs/help.md#mapping-pino-log-levels-to-google-cloud-logging-stackdriver-severity-levels",target:"_blank",rel:"noopener noreferrer"},"here"),e(" for example. The format for adding LEVELS values is: "),l("code",null,'LOGGER_LEVELS="trace:DEBUG,debug:DEBUG,info:INFO,warn:WARNING,error:ERROR,fatal:CRITICAL"')])],-1),Z=l("h2",{id:"server",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#server"},"#"),e(" Server")],-1),J=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"SERVER_KEEP_ALIVE_TIMEOUT")]),l("td",null,"Timeout in milliseconds for socket to be destroyed"),l("td",null,[l("a",{href:"https://github.com/nodejs/node/blob/master/doc/api/http.md#serverkeepalivetimeout",target:"_blank",rel:"noopener noreferrer"},"server.keepAliveTimeout")])]),l("tr",null,[l("td",null,[l("code",null,"SERVER_HEADERS_TIMEOUT")]),l("td",null,"Timeout in milliseconds to parse HTTP headers"),l("td",null,[l("a",{href:"https://github.com/nodejs/node/blob/master/doc/api/http.md#serverheaderstimeout",target:"_blank",rel:"noopener noreferrer"},"server.headersTimeout")])])])],-1),Q=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Additional Server Variables"),l("p",null,[e("All "),l("code",null,"SERVER_*"),e(" environment variables are merged with "),l("code",null,"server"),e(" instance properties created from "),l("a",{href:"https://github.com/nodejs/node/blob/master/doc/api/http.md#class-httpserver",target:"_blank",rel:"noopener noreferrer"},"http.Server"),e(". This allows to configure server behind a proxy, a load balancer, etc. Be careful to not override methods of this instance otherwise you may incur into unexpected behaviors.")])],-1),$=l("h2",{id:"database",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#database"},"#"),e(" Database")],-1),ll=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"DB_CLIENT")]),l("td",null,[l("strong",null,"Required"),e(". What database client to use. One of "),l("code",null,"pg"),e(" or "),l("code",null,"postgres"),e(", "),l("code",null,"mysql"),e(", "),l("code",null,"oracledb"),e(", "),l("code",null,"mssql"),e(", "),l("code",null,"sqlite3"),e(", "),l("code",null,"cockroachdb"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_HOST")]),l("td",null,[e("Database host. "),l("strong",null,"Required"),e(" when using "),l("code",null,"pg"),e(", "),l("code",null,"mysql"),e(", "),l("code",null,"oracledb"),e(", or "),l("code",null,"mssql"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_PORT")]),l("td",null,[e("Database port. "),l("strong",null,"Required"),e(" when using "),l("code",null,"pg"),e(", "),l("code",null,"mysql"),e(", "),l("code",null,"oracledb"),e(", or "),l("code",null,"mssql"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_DATABASE")]),l("td",null,[e("Database name. "),l("strong",null,"Required"),e(" when using "),l("code",null,"pg"),e(", "),l("code",null,"mysql"),e(", "),l("code",null,"oracledb"),e(", or "),l("code",null,"mssql"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_USER")]),l("td",null,[e("Database user. "),l("strong",null,"Required"),e(" when using "),l("code",null,"pg"),e(", "),l("code",null,"mysql"),e(", "),l("code",null,"oracledb"),e(", or "),l("code",null,"mssql"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_PASSWORD")]),l("td",null,[e("Database user\u2019s password. "),l("strong",null,"Required"),e(" when using "),l("code",null,"pg"),e(", "),l("code",null,"mysql"),e(", "),l("code",null,"oracledb"),e(", or "),l("code",null,"mssql"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_FILENAME")]),l("td",null,[e("Where to read/write the SQLite database. "),l("strong",null,"Required"),e(" when using "),l("code",null,"sqlite3"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_CONNECTION_STRING")]),l("td",null,[e("When using "),l("code",null,"pg"),e(", you can submit a connection string instead of individual properties. Using this will ignore any of the other connection settings.")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_POOL__*")]),l("td",null,[e("Pooling settings. Passed on to "),l("a",{href:"https://github.com/vincit/tarn.js#usage",target:"_blank",rel:"noopener noreferrer"},[e("the "),l("code",null,"tarn.js")]),e(" library.")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_EXCLUDE_TABLES")]),l("td",null,"CSV of tables you want Directus to ignore completely"),l("td",null,[l("code",null,"spatial_ref_sys,sysdiagrams")])]),l("tr",null,[l("td",null,[l("code",null,"DB_CHARSET")]),l("td",null,"Charset/collation to use in the connection to MySQL/MariaDB"),l("td",null,[l("code",null,"UTF8_GENERAL_CI")])]),l("tr",null,[l("td",null,[l("code",null,"DB_VERSION")]),l("td",null,"Database version, in case you use the PostgreSQL adapter to connect a non-standard database. Not normally required."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_HEALTHCHECK_THRESHOLD")]),l("td",null,"Healthcheck timeout threshold in ms."),l("td",null,[l("code",null,"150")])])])],-1),el=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Additional Database Variables"),l("p",null,[e("All "),l("code",null,"DB_*"),e(" environment variables are passed to the "),l("code",null,"connection"),e(" configuration of a "),l("a",{href:"http://knexjs.org",target:"_blank",rel:"noopener noreferrer"},[l("code",null,"Knex"),e(" instance")]),e(". Based on your project\u2019s needs, you can extend the "),l("code",null,"DB_*"),e(" environment variables with any config you need to pass to the database instance.")])],-1),nl=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Pooling"),l("p",null,[e("All the "),l("code",null,"DB_POOL__"),e(" prefixed options are passed to "),l("a",{href:"https://github.com/vincit/tarn.js#usage",target:"_blank",rel:"noopener noreferrer"},[l("code",null,"tarn.js")]),e(" through "),l("a",{href:"http://knexjs.org#Installation-pooling",target:"_blank",rel:"noopener noreferrer"},"Knex")])],-1),tl=l("h2",{id:"security",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#security"},"#"),e(" Security")],-1),ol=l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])],-1),ul=l("tr",null,[l("td",null,[l("code",null,"KEY")]),l("td",null,"Unique identifier for the project."),l("td",null,"\u2013")],-1),al=l("tr",null,[l("td",null,[l("code",null,"SECRET")]),l("td",null,"Secret string for the project."),l("td",null,"\u2013")],-1),sl=l("tr",null,[l("td",null,[l("code",null,"ACCESS_TOKEN_TTL")]),l("td",null,"The duration that the access token is valid."),l("td",null,[l("code",null,"15m")])],-1),dl=l("tr",null,[l("td",null,[l("code",null,"REFRESH_TOKEN_TTL")]),l("td",null,"The duration that the refresh token is valid, and also how long users stay logged-in to the App."),l("td",null,[l("code",null,"7d")])],-1),rl=l("tr",null,[l("td",null,[l("code",null,"REFRESH_TOKEN_COOKIE_DOMAIN")]),l("td",null,"Which domain to use for the refresh cookie. Useful for development mode."),l("td",null,"\u2013")],-1),il=l("tr",null,[l("td",null,[l("code",null,"REFRESH_TOKEN_COOKIE_SECURE")]),l("td",null,"Whether or not to use a secure cookie for the refresh token in cookie mode."),l("td",null,[l("code",null,"false")])],-1),cl=l("tr",null,[l("td",null,[l("code",null,"REFRESH_TOKEN_COOKIE_SAME_SITE")]),l("td",null,[e("Value for "),l("code",null,"sameSite"),e(" in the refresh token cookie when in cookie mode.")]),l("td",null,[l("code",null,"lax")])],-1),hl=l("tr",null,[l("td",null,[l("code",null,"REFRESH_TOKEN_COOKIE_NAME")]),l("td",null,"Name of refresh token cookie ."),l("td",null,[l("code",null,"directus_refresh_token")])],-1),_l=l("tr",null,[l("td",null,[l("code",null,"LOGIN_STALL_TIME")]),l("td",null,"The duration in milliseconds that a login request will be stalled for, and it should be greater than the time taken for a login request with an invalid password"),l("td",null,[l("code",null,"500")])],-1),pl=l("td",null,[l("code",null,"PASSWORD_RESET_URL_ALLOW_LIST")],-1),fl=l("code",null,"reset_url",-1),ml=l("td",null,"\u2013",-1),El=l("td",null,[l("code",null,"USER_INVITE_URL_ALLOW_LIST")],-1),Al=l("code",null,"invite_url",-1),Tl=l("td",null,"\u2013",-1),gl=l("tr",null,[l("td",null,[l("code",null,"IP_TRUST_PROXY")]),l("td",null,[e("Settings for "),l("a",{href:"https://expressjs.com/en/guide/behind-proxies.html",target:"_blank",rel:"noopener noreferrer"},"express\u2019 trust proxy setting")]),l("td",null,"true")],-1),Rl=l("tr",null,[l("td",null,[l("code",null,"IP_CUSTOM_HEADER")]),l("td",null,"What custom request header to use for the IP address"),l("td",null,"false")],-1),bl=l("tr",null,[l("td",null,[l("code",null,"ASSETS_CONTENT_SECURITY_POLICY")]),l("td",null,[e("Custom overrides for the Content-Security-Policy header for the /assets endpoint. See "),l("a",{href:"https://helmetjs.github.io",target:"_blank",rel:"noopener noreferrer"},"helmet\u2019s documentation"),e(" for more information.")]),l("td",null,"\u2013")],-1),Sl=l("tr",null,[l("td",null,[l("code",null,"IMPORT_IP_DENY_LIST")]),l("td",null,[e("Deny importing files from these IP addresses. Use "),l("code",null,"0.0.0.0"),e(" for any local IP address")]),l("td",null,[l("code",null,"0.0.0.0")])],-1),Ol=l("tr",null,[l("td",null,[l("code",null,"CONTENT_SECURITY_POLICY_*")]),l("td",null,[e("Custom overrides for the Content-Security-Policy header. See "),l("a",{href:"https://helmetjs.github.io",target:"_blank",rel:"noopener noreferrer"},"helmet\u2019s documentation"),e(" for more information.")]),l("td",null,"\u2013")],-1),Il=l("tr",null,[l("td",null,[l("code",null,"HSTS_ENABLED")]),l("td",null,"Enable the Strict-Transport-Security policy header."),l("td",null,[l("code",null,"false")])],-1),yl=l("tr",null,[l("td",null,[l("code",null,"HSTS_*")]),l("td",null,[e("Custom overrides for the Strict-Transport-Security header. See "),l("a",{href:"https://helmetjs.github.io",target:"_blank",rel:"noopener noreferrer"},"helmet\u2019s documentation"),e(" for more information.")]),l("td",null,"\u2013")],-1),Dl=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Cookie Strictness"),l("p",null,[e("Browser are pretty strict when it comes to third-party cookies. If you\u2019re running into unexpected problems when running your project and API on different domains, make sure to verify your configuration for "),l("code",null,"REFRESH_TOKEN_COOKIE_NAME"),e(", "),l("code",null,"REFRESH_TOKEN_COOKIE_SECURE"),e(" and "),l("code",null,"REFRESH_TOKEN_COOKIE_SAME_SITE"),e(".")])],-1),Ll=l("h3",{id:"hashing",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#hashing"},"#"),e(" Hashing")],-1),Cl=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"HASH_MEMORY_COST")]),l("td",null,"How much memory to use when generating hashes, in KiB."),l("td",null,[l("code",null,"4096"),e(" (4 MiB)")])]),l("tr",null,[l("td",null,[l("code",null,"HASH_LENGTH")]),l("td",null,"The length of the hash function output in bytes."),l("td",null,[l("code",null,"32")])]),l("tr",null,[l("td",null,[l("code",null,"HASH_TIME_COST")]),l("td",null,"The amount of passes (iterations) used by the hash function. It increases hash strength at the cost of time required to compute."),l("td",null,[l("code",null,"3")])]),l("tr",null,[l("td",null,[l("code",null,"HASH_PARALLELISM")]),l("td",null,[e("The amount of threads to compute the hash on. Each thread has a memory pool with "),l("code",null,"HASH_MEMORY_COST"),e(" size.")]),l("td",null,[l("code",null,"1"),e(" (single thread)")])]),l("tr",null,[l("td",null,[l("code",null,"HASH_TYPE")]),l("td",null,[e("The variant of the hash function ("),l("code",null,"0"),e(": argon2d, "),l("code",null,"1"),e(": argon2i, or "),l("code",null,"2"),e(": argon2id).")]),l("td",null,[l("code",null,"2"),e(" (argon2id)")])]),l("tr",null,[l("td",null,[l("code",null,"HASH_ASSOCIATED_DATA")]),l("td",null,"An extra and optional non-secret value. The value will be included Base64 encoded in the parameters portion of the digest."),l("td",null,"\u2013")])])],-1),vl=l("code",null,"Hash",-1),wl=l("p",null,[e("All "),l("code",null,"HASH_*"),e(" environment variable parameters are passed to the "),l("code",null,"argon2.hash"),e(" function. See the "),l("a",{href:"https://github.com/ranisalt/node-argon2/wiki/Options",target:"_blank",rel:"noopener noreferrer"},"node-argon2 library options page"),e(" for reference.")],-1),Hl=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Memory Usage"),l("p",null,[e("Modifying "),l("code",null,"HASH_MEMORY_COST"),e(" and/or "),l("code",null,"HASH_PARALLELISM"),e(" will affect the amount of memory directus uses when computing hashes; each thread gets "),l("code",null,"HASH_MEMORY_COST"),e(" amount of memory, so the total additional memory will be these two values multiplied. This may cause out of memory errors, especially when running in containerized environments.")])],-1),Ul=l("h2",{id:"cors",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#cors"},"#"),e(" CORS")],-1),Pl=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"CORS_ENABLED")]),l("td",null,"Whether or not to enable the CORS headers."),l("td",null,[l("code",null,"false")])]),l("tr",null,[l("td",null,[l("code",null,"CORS_ORIGIN")]),l("td",null,[e("Value for the "),l("code",null,"Access-Control-Allow-Origin"),e(" header. Use "),l("code",null,"true"),e(" to match the Origin header, or provide a domain or a CSV of domains for specific access")]),l("td",null,[l("code",null,"false")])]),l("tr",null,[l("td",null,[l("code",null,"CORS_METHODS")]),l("td",null,[e("Value for the "),l("code",null,"Access-Control-Allow-Methods"),e(" header.")]),l("td",null,[l("code",null,"GET,POST,PATCH,DELETE")])]),l("tr",null,[l("td",null,[l("code",null,"CORS_ALLOWED_HEADERS")]),l("td",null,[e("Value for the "),l("code",null,"Access-Control-Allow-Headers"),e(" header.")]),l("td",null,[l("code",null,"Content-Type,Authorization")])]),l("tr",null,[l("td",null,[l("code",null,"CORS_EXPOSED_HEADERS")]),l("td",null,[e("Value for the "),l("code",null,"Access-Control-Expose-Headers"),e(" header.")]),l("td",null,[l("code",null,"Content-Range")])]),l("tr",null,[l("td",null,[l("code",null,"CORS_CREDENTIALS")]),l("td",null,[e("Whether or not to send the "),l("code",null,"Access-Control-Allow-Credentials"),e(" header.")]),l("td",null,[l("code",null,"true")])]),l("tr",null,[l("td",null,[l("code",null,"CORS_MAX_AGE")]),l("td",null,[e("Value for the "),l("code",null,"Access-Control-Max-Age"),e(" header.")]),l("td",null,[l("code",null,"18000")])])])],-1),Nl=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"More Details"),l("p",null,[e("For more details about each configuration variable, please see the "),l("a",{href:"https://www.npmjs.com/package/cors#configuration-options",target:"_blank",rel:"noopener noreferrer"},"CORS package documentation"),e(".")])],-1),xl=l("h2",{id:"rate-limiting",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#rate-limiting"},"#"),e(" Rate Limiting")],-1),Ml=l("p",null,[e("You can use the built-in rate-limiter to prevent users from hitting the API too much. Simply enabling the rate-limiter will set a default maximum of 50 requests per second, tracked in memory. Once you have multiple copies of Directus running under a load balancer, or your user base grows so much that memory is no longer a viable place to store the rate limiter information, you can use an external "),l("code",null,"memcache"),e(" or "),l("code",null,"redis"),e(" instance to store the rate limiter data.")],-1),Vl=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_ENABLED")]),l("td",null,"Whether or not to enable rate limiting on the API."),l("td",null,[l("code",null,"false")])]),l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_POINTS")]),l("td",null,"The amount of allowed hits per duration."),l("td",null,[l("code",null,"50")])]),l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_DURATION")]),l("td",null,"The time window in seconds in which the points are counted."),l("td",null,[l("code",null,"1")])]),l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_STORE")]),l("td",null,[e("Where to store the rate limiter counts. One of "),l("code",null,"memory"),e(", "),l("code",null,"redis"),e(", or "),l("code",null,"memcache"),e(".")]),l("td",null,[l("code",null,"memory")])]),l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_HEALTHCHECK_THRESHOLD")]),l("td",null,"Healthcheck timeout threshold in ms."),l("td",null,[l("code",null,"150")])])])],-1),jl=l("p",null,[e("Based on the "),l("code",null,"RATE_LIMITER_STORE"),e(" used, you must also provide the following configurations:")],-1),kl=l("h3",{id:"memory",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#memory"},"#"),e(" Memory")],-1),Gl=l("p",null,"No additional configuration required.",-1),Bl=l("h3",{id:"redis",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#redis"},"#"),e(" Redis")],-1),Fl=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_REDIS")]),l("td",null,[e("Redis connection string, e.g., "),l("code",null,"redis://:authpassword@127.0.0.1:6380/4")]),l("td",null,"\u2014")])])],-1),Wl=l("p",null,"Alternatively, you can provide the individual connection parameters:",-1),ql=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_REDIS_HOST")]),l("td",null,[e("Hostname of the Redis instance, e.g., "),l("code",null,'"127.0.0.1"')]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_REDIS_PORT")]),l("td",null,[e("Port of the Redis instance, e.g., "),l("code",null,"6379")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_REDIS_USERNAME")]),l("td",null,[e("Username for your Redis instance, e.g., "),l("code",null,'"default"')]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_REDIS_PASSWORD")]),l("td",null,[e("Password for your Redis instance, e.g., "),l("code",null,'"yourRedisPassword"')]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_REDIS_DB")]),l("td",null,[e("Database of your Redis instance to connect, e.g., "),l("code",null,"1")]),l("td",null,"\u2013")])])],-1),Kl=l("h3",{id:"memcache",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#memcache"},"#"),e(" Memcache")],-1),Yl=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_MEMCACHE")]),l("td",null,[e("Location of your memcache instance. You can use "),l("a",{href:"#environment-syntax-prefix"},[l("code",null,"array:"),e(" syntax")]),e(", e.g., "),l("code",null,"array:<instance-1>,<instance-2>"),e(" for multiple memcache instances.")]),l("td",null,"\u2014")])])],-1),zl=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Additional Rate Limiter Variables"),l("p",null,[e("All "),l("code",null,"RATE_LIMITER_*"),e(" variables are passed directly to a "),l("code",null,"rate-limiter-flexible"),e(" instance. Depending on your project\u2019s needs, you can extend the above environment variables to configure any of "),l("a",{href:"https://github.com/animir/node-rate-limiter-flexible/wiki/Options",target:"_blank",rel:"noopener noreferrer"},[e("the "),l("code",null,"rate-limiter-flexible"),e(" options")]),e(".")])],-1),Xl=l("h3",{id:"example%3A-basic",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#example%3A-basic"},"#"),e(" Example: Basic")],-1),Zl=l("pre",null,[l("code",null,`// 10 requests per 5 seconds
|
|
80
|
-
|
|
81
|
-
RATE_LIMITER_POINTS="10"
|
|
82
|
-
RATE_LIMITER_DURATION="5"
|
|
83
|
-
`)],-1),Jl=l("h3",{id:"example%3A-redis",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#example%3A-redis"},"#"),e(" Example: Redis")],-1),Ql=l("pre",null,[l("code",null,`RATE_LIMITER_ENABLED="true"
|
|
84
|
-
|
|
85
|
-
RATE_LIMITER_POINTS="10"
|
|
86
|
-
RATE_LIMITER_DURATION="5"
|
|
87
|
-
|
|
88
|
-
RATE_LIMITER_STORE="redis"
|
|
89
|
-
|
|
90
|
-
RATE_LIMITER_REDIS="redis://@127.0.0.1"
|
|
91
|
-
|
|
92
|
-
# If you are using Redis ACL
|
|
93
|
-
RATE_LIMITER_REDIS_USERNAME="default"
|
|
94
|
-
RATE_LIMITER_REDIS_PASSWORD="yourRedisPassword"
|
|
95
|
-
RATE_LIMITER_REDIS_HOST="127.0.0.1"
|
|
96
|
-
RATE_LIMITER_REDIS_PORT=6379
|
|
97
|
-
RATE_LIMITER_REDIS_DB=0
|
|
98
|
-
`)],-1),$l=l("h2",{id:"cache",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#cache"},"#"),e(" Cache")],-1),le=l("p",null,"Directus has a built-in data-caching option. Enabling this will cache the output of requests (based on the current user and exact query parameters used) into configured cache storage location. This drastically improves API performance, as subsequent requests are served straight from this cache. Enabling cache will also make Directus return accurate cache-control headers. Depending on your setup, this will further improve performance by caching the request in middleman servers (like CDNs) and even the browser.",-1),ee=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Internal Caching"),l("p",null,[e("In addition to data-caching, Directus also does some internal caching. Note "),l("code",null,"CACHE_SCHEMA"),e(" and "),l("code",null,"CACHE_PERMISSIONS"),e(" which are enabled by default. These speed up the overall performance of Directus, as we don\u2019t want to introspect the whole database or check all permissions on every request. When running Directus load balanced, you\u2019ll need to use a shared cache storage (like "),l("a",{href:"#redis-2"},"Redis"),e(" or "),l("a",{href:"#memcache-2"},"Memcache"),e(") or else disable all caching.")])],-1),ne=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Assets Cache"),l("p",null,[l("code",null,"Cache-Control"),e(" and "),l("code",null,"Last-Modified"),e(" headers for the "),l("code",null,"/assets"),e(" endpoint are separate from the regular data-cache. "),l("code",null,"Last-Modified"),e(" comes from "),l("code",null,"modified_on"),e(" DB field. This is useful as it\u2019s often possible to cache assets for far longer than you would cache database content. To learn more, see "),l("a",{href:"#assets"},"Assets"),e(".")])],-1),te=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"CACHE_ENABLED")]),l("td",null,"Whether or not data caching is enabled."),l("td",null,[l("code",null,"false")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_TTL"),l("sup",null,"[1]")]),l("td",null,"How long the data cache is persisted."),l("td",null,[l("code",null,"5m")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_CONTROL_S_MAXAGE")]),l("td",null,[e("Whether to not to add the "),l("code",null,"s-maxage"),e(" expiration flag. Set to a number for a custom value.")]),l("td",null,[l("code",null,"0")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_AUTO_PURGE"),l("sup",null,"[2]")]),l("td",null,[e("Automatically purge the data cache on "),l("code",null,"create"),e(", "),l("code",null,"update"),e(", and "),l("code",null,"delete"),e(" actions.")]),l("td",null,[l("code",null,"false")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_SYSTEM_TTL"),l("sup",null,"[3]")]),l("td",null,[e("How long "),l("code",null,"CACHE_SCHEMA"),e(" and "),l("code",null,"CACHE_PERMISSIONS"),e(" are persisted.")]),l("td",null,[l("code",null,"10m")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_SCHEMA"),l("sup",null,"[3]")]),l("td",null,[e("Whether or not the database schema is cached. One of "),l("code",null,"false"),e(", "),l("code",null,"true")]),l("td",null,[l("code",null,"true")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_PERMISSIONS"),l("sup",null,"[3]")]),l("td",null,[e("Whether or not the user permissions are cached. One of "),l("code",null,"false"),e(", "),l("code",null,"true")]),l("td",null,[l("code",null,"true")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_NAMESPACE")]),l("td",null,"How to scope the cache data."),l("td",null,[l("code",null,"directus-cache")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_STORE"),l("sup",null,"[4]")]),l("td",null,[e("Where to store the cache data. Either "),l("code",null,"memory"),e(", "),l("code",null,"redis"),e(", or "),l("code",null,"memcache"),e(".")]),l("td",null,[l("code",null,"memory")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_STATUS_HEADER")]),l("td",null,[e("If set, returns the cache status in the configured header. One of "),l("code",null,"HIT"),e(", "),l("code",null,"MISS"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"CACHE_VALUE_MAX_SIZE")]),l("td",null,[e("Maximum size of values that will be cached. Accepts number of bytes, or human readable string. Use "),l("code",null,"false"),e(" for no limit")]),l("td",null,"false")]),l("tr",null,[l("td",null,[l("code",null,"CACHE_HEALTHCHECK_THRESHOLD")]),l("td",null,"Healthcheck timeout threshold in ms."),l("td",null,[l("code",null,"150")])])])],-1),oe=l("p",null,[l("sup",null,"[1]"),e(),l("code",null,"CACHE_TTL"),e(" Based on your project\u2019s needs, you might be able to aggressively cache your data, only requiring new data to be fetched every hour or so. This allows you to squeeze the most performance out of your Directus instance. This can be incredibly useful for applications where you have a lot of (public) read-access and where updates aren\u2019t real-time (for example a website). "),l("code",null,"CACHE_TTL"),e(" uses "),l("a",{href:"https://www.npmjs.com/package/ms",target:"_blank",rel:"noopener noreferrer"},[l("code",null,"ms")]),e(" to parse the value, so you configure it using human readable values (like "),l("code",null,"2 days"),e(", "),l("code",null,"7 hrs"),e(", "),l("code",null,"5m"),e(").")],-1),ue=l("p",null,[l("sup",null,"[2]"),e(),l("code",null,"CACHE_AUTO_PURGE"),e(" allows you to keep the Directus API real-time, while still getting the performance benefits on quick subsequent reads.")],-1),ae=l("p",null,[l("sup",null,"[3]"),e(" Not affected by the "),l("code",null,"CACHE_ENABLED"),e(" value.")],-1),se=l("p",null,[l("sup",null,"[4]"),e(),l("code",null,"CACHE_STORE"),e(" For larger projects, you most likely don\u2019t want to rely on local memory for caching. Instead, you can use the above "),l("code",null,"CACHE_STORE"),e(" environment variable to use either "),l("code",null,"memcache"),e(" or "),l("code",null,"redis"),e(" as the cache store. Based on the chosen "),l("code",null,"CACHE_STORE"),e(", you must also provide the following configurations:")],-1),de=l("h3",{id:"memory-1",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#memory-1"},"#"),e(" Memory")],-1),re=l("p",null,"No additional configuration required.",-1),ie=l("h3",{id:"redis-1",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#redis-1"},"#"),e(" Redis")],-1),ce=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"CACHE_REDIS")]),l("td",null,[e("Redis connection string, e.g., "),l("code",null,"redis://:authpassword@127.0.0.1:6380/4")]),l("td",null,"\u2014")])])],-1),he=l("p",null,"Alternatively, you can provide the individual connection parameters:",-1),_e=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"CACHE_REDIS_HOST")]),l("td",null,[e("Hostname of the Redis instance, e.g., "),l("code",null,'"127.0.0.1"')]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"CACHE_REDIS_PORT")]),l("td",null,[e("Port of the Redis instance, e.g., "),l("code",null,"6379")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"CACHE_REDIS_USERNAME")]),l("td",null,[e("Username for your Redis instance, e.g., "),l("code",null,'"default"')]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"CACHE_REDIS_PASSWORD")]),l("td",null,[e("Password for your Redis instance, e.g., "),l("code",null,'"yourRedisPassword"')]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"CACHE_REDIS_DB")]),l("td",null,[e("Database of your Redis instance to connect, e.g., "),l("code",null,"1")]),l("td",null,"\u2013")])])],-1),pe=l("h3",{id:"memcache-1",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#memcache-1"},"#"),e(" Memcache")],-1),fe=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"CACHE_MEMCACHE")]),l("td",null,[e("Location of your memcache instance. You can use "),l("a",{href:"#environment-syntax-prefix"},[l("code",null,"array:"),e(" syntax")]),e(", e.g., "),l("code",null,"array:<instance-1>,<instance-2>"),e(" for multiple memcache instances.")]),l("td",null,"\u2014")])])],-1),me=l("h2",{id:"file-storage",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#file-storage"},"#"),e(" File Storage")],-1),Ee=l("p",null,[e("By default, Directus stores all uploaded files locally on disk. However, you can also configure Directus to use S3, Google Cloud Storage, Azure, or Cloudinary. You can also configure "),l("em",null,"multiple"),e(" storage adapters at the same time. This allows you to choose where files are being uploaded on a file-by-file basis. In the Admin App, files will automatically be uploaded to the first configured storage location (in this case "),l("code",null,"local"),e("). The used storage location is saved under "),l("code",null,"storage"),e(" in "),l("code",null,"directus_files"),e(".")],-1),Ae=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"File Storage Default"),l("p",null,"If you don\u2019t provide any configuration for storage adapters, this default will be used:"),l("pre",null,[l("code",null,`STORAGE_LOCATIONS="local"
|
|
99
|
-
STORAGE_LOCAL_ROOT="./uploads"
|
|
100
|
-
`)])],-1),Te=l("div",{class:"warning hint"},[l("div",{class:"hint-title"},"Case sensitivity"),l("p",null,"The location value(s) you specify should be capitalized when specifying the additional configuration values. For example, this will not work:"),l("pre",null,[l("code",null,`STORAGE_LOCATIONS="s3"
|
|
101
|
-
STORAGE_s3_DRIVER="s3" # Will not work, lowercase "s3" \u274C
|
|
102
|
-
`)]),l("p",null,"but this will work:"),l("pre",null,[l("code",null,`STORAGE_LOCATIONS="s3"
|
|
103
|
-
STORAGE_S3_DRIVER="s3" # Will work, "s3" is uppercased \u2705
|
|
104
|
-
`)])],-1),ge=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"STORAGE_LOCATIONS")]),l("td",null,[e("A CSV of storage locations (e.g., "),l("code",null,"local,digitalocean,amazon"),e(") to use. You can use any names you\u2019d like for these keys.")]),l("td",null,[l("code",null,"local")])])])],-1),Re=l("p",null,"For each of the storage locations listed, you must provide the following configuration:",-1),be=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_DRIVER")]),l("td",null,[e("Which driver to use, either "),l("code",null,"local"),e(", "),l("code",null,"s3"),e(", "),l("code",null,"gcs"),e(", "),l("code",null,"azure"),e(", "),l("code",null,"cloudinary")]),l("td")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_ROOT")]),l("td",null,"Where to store the files on disk"),l("td",null,[l("code",null,"''")])]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_HEALTHCHECK_THRESHOLD")]),l("td",null,"Healthcheck timeout threshold in ms."),l("td",null,[l("code",null,"750")])])])],-1),Se=l("p",null,"Based on your configured driver, you must also provide the following configurations:",-1),Oe=l("h3",{id:"local-(local)",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#local-(local)"},"#"),e(" Local ("),l("code",null,"local"),e(")")],-1),Ie=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_ROOT")]),l("td",null,"Where to store the files on disk"),l("td",null,"\u2013")])])],-1),ye=l("h3",{id:"s3-(s3)",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#s3-(s3)"},"#"),e(" S3 ("),l("code",null,"s3"),e(")")],-1),De=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_KEY")]),l("td",null,"User key"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_SECRET")]),l("td",null,"User secret"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_BUCKET")]),l("td",null,"S3 Bucket"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_REGION")]),l("td",null,"S3 Region"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_ENDPOINT")]),l("td",null,"S3 Endpoint"),l("td",null,[l("code",null,"s3.amazonaws.com")])]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_ACL")]),l("td",null,"S3 ACL"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_SERVER_SIDE_ENCRYPTION")]),l("td",null,"S3 Server Side Encryption"),l("td",null,"\u2013")])])],-1),Le=l("h3",{id:"azure-(azure)",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#azure-(azure)"},"#"),e(" Azure ("),l("code",null,"azure"),e(")")],-1),Ce=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_CONTAINER_NAME")]),l("td",null,"Azure Storage container"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_ACCOUNT_NAME")]),l("td",null,"Azure Storage account name"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_ACCOUNT_KEY")]),l("td",null,"Azure Storage key"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_ENDPOINT")]),l("td",null,"Azure URL"),l("td",null,[l("code",null,"https://{ACCOUNT_NAME}.blob.core.windows.net")])])])],-1),ve=l("h3",{id:"google-cloud-storage-(gcs)",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#google-cloud-storage-(gcs)"},"#"),e(" Google Cloud Storage ("),l("code",null,"gcs"),e(")")],-1),we=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_KEY_FILENAME")]),l("td",null,"Path to key file on disk"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_BUCKET")]),l("td",null,"Google Cloud Storage bucket"),l("td",null,"\u2013")])])],-1),He=l("pre",null,[l("code",null,`cloudName: string;
|
|
105
|
-
apiKey: string;
|
|
106
|
-
apiSecret: string;
|
|
107
|
-
accessMode: 'public' | 'authenticated';
|
|
108
|
-
`)],-1),Ue=l("p",null,"};",-1),Pe=l("h3",{id:"cloudinary-(cloudinary)",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#cloudinary-(cloudinary)"},"#"),e(" Cloudinary ("),l("code",null,"cloudinary"),e(")")],-1),Ne=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_CLOUD_NAME")]),l("td",null,"Cloudinary Cloud Name"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_API_KEY")]),l("td",null,"Cloudinary API Key"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_API_SECRET")]),l("td",null,"Cloudinary API Secret"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_ACCESS_MODE")]),l("td",null,[e("Default access mode for the file. One of "),l("code",null,"public"),e(", "),l("code",null,"authenticated"),e(".")]),l("td",null,"\u2013")])])],-1),xe=l("div",{class:"warning hint"},[l("div",{class:"hint-title"},"One-way sync"),l("p",null,[e("Cloudinary is supported as a "),l("em",null,"storage"),e(" driver. Changes made on Cloudinary are "),l("em",null,"not"),e(" synced back to Directus, and Directus "),l("em",null,"won\u2019t"),e(" rely on Cloudinary\u2019s asset transformations in the "),l("code",null,"/assets"),e(" endpoint.")])],-1),Me=l("h3",{id:"example%3A-multiple-storage-adapters",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#example%3A-multiple-storage-adapters"},"#"),e(" Example: Multiple Storage Adapters")],-1),Ve=l("p",null,"Below showcases a CSV of storage location names, with a config block for each:",-1),je=l("pre",null,[l("code",null,`STORAGE_LOCATIONS="local,aws"
|
|
109
|
-
|
|
110
|
-
STORAGE_LOCAL_DRIVER="local"
|
|
111
|
-
STORAGE_LOCAL_ROOT="local"
|
|
112
|
-
|
|
113
|
-
STORAGE_AWS_KEY="tp15c...510vk"
|
|
114
|
-
STORAGE_AWS_SECRET="yk29b...b932n"
|
|
115
|
-
STORAGE_AWS_REGION="us-east-2"
|
|
116
|
-
STORAGE_AWS_BUCKET="my-files"
|
|
117
|
-
`)],-1),ke=l("h3",{id:"metadata",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#metadata"},"#"),e(" Metadata")],-1),Ge=l("p",null,[e("When uploading an image, Directus persists the "),l("em",null,"description, title, and tags"),e(" from available EXIF metadata. For security purposes, collection of additional metadata must be configured:")],-1),Be=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"FILE_METADATA_ALLOW_LIST")]),l("td",null,[e("A comma-separated list of metadata keys to collect during file upload. Use "),l("code",null,"*"),e(" for all"),l("sup",null,"[1]"),e(".")]),l("td",null,"ifd0.Make,ifd0.Model,exif.FNumber,exif.ExposureTime,exif.FocalLength,exif.ISO")])])],-1),Fe=l("p",null,[l("sup",null,"[1]"),e(": Extracting all metadata might cause memory issues when the file has an unusually large set of metadata")],-1),We=l("h2",{id:"assets",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#assets"},"#"),e(" Assets")],-1),qe=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"ASSETS_CACHE_TTL")]),l("td",null,[e("How long assets will be cached for in the browser. Sets the "),l("code",null,"max-age"),e(" value of the "),l("code",null,"Cache-Control"),e(" header.")]),l("td",null,[l("code",null,"30d")])]),l("tr",null,[l("td",null,[l("code",null,"ASSETS_TRANSFORM_MAX_CONCURRENT")]),l("td",null,"How many file transformations can be done simultaneously"),l("td",null,[l("code",null,"4")])]),l("tr",null,[l("td",null,[l("code",null,"ASSETS_TRANSFORM_IMAGE_MAX_DIMENSION")]),l("td",null,"The max pixel dimensions size (width/height) that is allowed to be transformed"),l("td",null,[l("code",null,"6000")])]),l("tr",null,[l("td",null,[l("code",null,"ASSETS_TRANSFORM_MAX_OPERATIONS")]),l("td",null,"The max number of transform operations that is allowed to be processed (excludes saved presets)"),l("td",null,[l("code",null,"5")])]),l("tr",null,[l("td",null,[l("code",null,"ASSETS_CONTENT_SECURITY_POLICY")]),l("td",null,[e("Custom overrides for the Content-Security-Policy header. See "),l("a",{href:"https://helmetjs.github.io",target:"_blank",rel:"noopener noreferrer"},"helmet\u2019s documentation"),e(" for more information.")]),l("td",null,"\u2013")])])],-1),Ke=l("p",null,"Image transformations can be fairly heavy on memory usage. If you\u2019re using a system with 1GB or less available memory, we recommend lowering the allowed concurrent transformations to prevent you from overflowing your server.",-1),Ye=l("h2",{id:"authentication",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#authentication"},"#"),e(" Authentication")],-1),ze=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"AUTH_PROVIDERS")]),l("td",null,"A comma-separated list of auth providers."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"AUTH_DISABLE_DEFAULT")]),l("td",null,"Disable the default auth provider"),l("td",null,[l("code",null,"false")])])])],-1),Xe=l("p",null,"For each auth provider you list, you must also provide the following configuration:",-1),Ze=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_DRIVER")]),l("td",null,[e("Which driver to use, either "),l("code",null,"local"),e(", "),l("code",null,"oauth2"),e(", "),l("code",null,"openid"),e(", "),l("code",null,"ldap"),e(", "),l("code",null,"saml")]),l("td",null,"\u2013")])])],-1),Je=l("p",null,"You may also be required to specify additional variables depending on the auth driver. See configuration details below.",-1),Qe=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Multiple Providers"),l("p",null,"Directus users can only authenticate using the auth provider they are created with. It is not possible to authenticate with multiple providers for the same user.")],-1),$e=l("h3",{id:"local-(local)-1",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#local-(local)-1"},"#"),e(" Local ("),l("code",null,"local"),e(")")],-1),ln=l("p",null,"The default Directus email/password authentication flow.",-1),en=l("p",null,"No additional configuration required.",-1),nn=l("h3",{id:"sso-(oauth2-and-openid)",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#sso-(oauth2-and-openid)"},"#"),e(" SSO ("),l("code",null,"oauth2"),e(" and "),l("code",null,"openid"),e(")")],-1),tn=l("p",null,"Directus\u2019 SSO integrations provide powerful alternative ways to authenticate into your project. Directus will ask you to login on the external service, and return authenticated with a Directus account linked to that service.",-1),on=l("p",null,[e("For example, you can login to Directus using a GitHub account by creating an "),l("a",{href:"https://github.com/settings/developers",target:"_blank",rel:"noopener noreferrer"},"OAuth 2.0 app in GitHub"),e(" and adding the following configuration to Directus:")],-1),un=l("pre",null,[l("code",null,`AUTH_PROVIDERS="github"
|
|
118
|
-
|
|
119
|
-
AUTH_GITHUB_DRIVER="oauth2"
|
|
120
|
-
AUTH_GITHUB_CLIENT_ID="99d3...c3c4"
|
|
121
|
-
AUTH_GITHUB_CLIENT_SECRET="34ae...f963"
|
|
122
|
-
AUTH_GITHUB_AUTHORIZE_URL="https://github.com/login/oauth/authorize"
|
|
123
|
-
AUTH_GITHUB_ACCESS_URL="https://github.com/login/oauth/access_token"
|
|
124
|
-
AUTH_GITHUB_PROFILE_URL="https://api.github.com/user"
|
|
125
|
-
`)],-1),an=l("div",{class:"warning hint"},[l("div",{class:"hint-title"},"PUBLIC_URL"),l("p",null,[e("These flows rely on the "),l("code",null,"PUBLIC_URL"),e(" variable for redirecting. Ensure the variable is correctly configured.")])],-1),sn=l("h3",{id:"oauth-2.0",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#oauth-2.0"},"#"),e(" OAuth 2.0")],-1),dn=l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])],-1),rn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_CLIENT_ID")]),l("td",null,"Client identifier for the OAuth provider."),l("td",null,"\u2013")],-1),cn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_CLIENT_SECRET")]),l("td",null,"Client secret for the OAuth provider."),l("td",null,"\u2013")],-1),hn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_SCOPE")]),l("td",null,"A white-space separated list of permissions to request."),l("td",null,[l("code",null,"email")])],-1),_n=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_AUTHORIZE_URL")]),l("td",null,"Authorization page URL of the OAuth provider."),l("td",null,"\u2013")],-1),pn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_ACCESS_URL")]),l("td",null,"Access token URL of the OAuth provider."),l("td",null,"\u2013")],-1),fn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_PROFILE_URL")]),l("td",null,"User profile URL of the OAuth provider."),l("td",null,"\u2013")],-1),mn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_IDENTIFIER_KEY")]),l("td",null,[e("User profile identifier key "),l("sup",null,"[1]"),e(". Will default to "),l("code",null,"EMAIL_KEY"),e(".")]),l("td",null,"\u2013")],-1),En=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_EMAIL_KEY")]),l("td",null,"User profile email key."),l("td",null,[l("code",null,"email")])],-1),An=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_FIRST_NAME_KEY")]),l("td",null,"User profile first name key."),l("td",null,"\u2013")],-1),Tn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_LAST_NAME_KEY")]),l("td",null,"User profile last name key."),l("td",null,"\u2013")],-1),gn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_ALLOW_PUBLIC_REGISTRATION")]),l("td",null,"Automatically create accounts for authenticating users."),l("td",null,[l("code",null,"false")])],-1),Rn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_DEFAULT_ROLE_ID")]),l("td",null,"A Directus role ID to assign created users."),l("td",null,"\u2013")],-1),bn=l("td",null,[l("code",null,"AUTH_<PROVIDER>_ICON")],-1),Sn=l("td",null,[l("code",null,"account_circle")],-1),On=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_LABEL")]),l("td",null,"Text to be presented on SSO button within App."),l("td",null,[l("code",null,"<PROVIDER>")])],-1),In=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_PARAMS")]),l("td",null,"Custom query parameters applied to the authorization URL."),l("td",null,"\u2013")],-1),yn=l("p",null,[l("sup",null,"[1]"),e(" When authenticating, Directus will match the identifier value from the external user profile to a Directus users \u201CExternal Identifier\u201D.")],-1),Dn=l("h3",{id:"openid",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#openid"},"#"),e(" OpenID")],-1),Ln=l("p",null,"OpenID is an authentication protocol built on OAuth 2.0, and should be preferred over standard OAuth 2.0 where possible.",-1),Cn=l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])],-1),vn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_CLIENT_ID")]),l("td",null,"Client identifier for the external service."),l("td",null,"\u2013")],-1),wn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_CLIENT_SECRET")]),l("td",null,"Client secret for the external service."),l("td",null,"\u2013")],-1),Hn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_SCOPE")]),l("td",null,"A white-space separated list of permissions to request."),l("td",null,[l("code",null,"openid profile email")])],-1),Un=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_ISSUER_URL")]),l("td",null,[e("OpenID "),l("code",null,".well-known"),e(" discovery document URL of the external service.")]),l("td",null,"\u2013")],-1),Pn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_IDENTIFIER_KEY")]),l("td",null,[e("User profile identifier key "),l("sup",null,"[1]"),e(".")]),l("td",null,[l("code",null,"sub"),l("sup",null,"[2]")])],-1),Nn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_ALLOW_PUBLIC_REGISTRATION")]),l("td",null,"Automatically create accounts for authenticating users."),l("td",null,[l("code",null,"false")])],-1),xn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_REQUIRE_VERIFIED_EMAIL")]),l("td",null,"Require created users to have a verified email address."),l("td",null,[l("code",null,"false")])],-1),Mn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_DEFAULT_ROLE_ID")]),l("td",null,"A Directus role ID to assign created users."),l("td",null,"\u2013")],-1),Vn=l("td",null,[l("code",null,"AUTH_<PROVIDER>_ICON")],-1),jn=l("td",null,[l("code",null,"account_circle")],-1),kn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_LABEL")]),l("td",null,"Text to be presented on SSO button within App."),l("td",null,[l("code",null,"<PROVIDER>")])],-1),Gn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_PARAMS")]),l("td",null,"Custom query parameters applied to the authorization URL."),l("td",null,"\u2013")],-1),Bn=l("p",null,[l("sup",null,"[1]"),e(" When authenticating, Directus will match the identifier value from the external user profile to a Directus users \u201CExternal Identifier\u201D.")],-1),Fn=l("p",null,[l("sup",null,"[2]"),e(),l("code",null,"sub"),e(" represents a unique user identifier defined by the OpenID provider. For users not relying on "),l("code",null,"PUBLIC_REGISTRATION"),e(" it is recommended to use a human-readable identifier, such as "),l("code",null,"email"),e(".")],-1),Wn=l("h3",{id:"ldap-(ldap)",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#ldap-(ldap)"},"#"),e(" LDAP ("),l("code",null,"ldap"),e(")")],-1),qn=l("p",null,"LDAP allows Active Directory users to authenticate and use Directus without having to be manually configured. User information and roles will be assigned from Active Directory.",-1),Kn=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_CLIENT_URL")]),l("td",null,"LDAP connection URL."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_BIND_DN")]),l("td",null,[e("Bind user "),l("sup",null,"[1]"),e(" distinguished name.")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_BIND_PASSWORD")]),l("td",null,"Bind user password."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_USER_DN")]),l("td",null,"Directory path containing users."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_USER_ATTRIBUTE")]),l("td",null,"Attribute to identify the user."),l("td",null,[l("code",null,"cn")])]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_USER_SCOPE")]),l("td",null,[e("Scope of the user search, either "),l("code",null,"base"),e(", "),l("code",null,"one"),e(", "),l("code",null,"sub"),e(),l("sup",null,"[2]"),e(".")]),l("td",null,[l("code",null,"one")])]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_MAIL_ATTRIBUTE")]),l("td",null,"User email attribute."),l("td",null,[l("code",null,"mail")])]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_FIRST_NAME_ATTRIBUTE")]),l("td",null,"User first name attribute."),l("td",null,[l("code",null,"givenName")])]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_LAST_NAME_ATTRIBUTE")]),l("td",null,"User last name attribute."),l("td",null,[l("code",null,"sn")])]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_GROUP_DN"),l("sup",null,"[3]")]),l("td",null,"Directory path containing groups."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_GROUP_ATTRIBUTE")]),l("td",null,"Attribute to identify user as a member of a group."),l("td",null,[l("code",null,"member")])]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_GROUP_SCOPE")]),l("td",null,[e("Scope of the group search, either "),l("code",null,"base"),e(", "),l("code",null,"one"),e(", "),l("code",null,"sub"),e(),l("sup",null,"[2]"),e(".")]),l("td",null,[l("code",null,"one")])]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_DEFAULT_ROLE_ID")]),l("td",null,"A fallback Directus role ID to assign created users."),l("td",null,"\u2013")])])],-1),Yn=l("p",null,[l("sup",null,"[1]"),e(" The bind user must have permission to query users and groups to perform authentication. Anonymous binding can by achieved by setting an empty value for "),l("code",null,"BIND_DN"),e(" and "),l("code",null,"BIND_PASSWORD"),e(".")],-1),zn=l("p",null,[l("sup",null,"[2]"),e(" The scope defines the following behaviors:")],-1),Xn=l("ul",null,[l("li",null,[l("code",null,"base"),e(": Limits the scope to a single object defined by the associated DN.")]),l("li",null,[l("code",null,"one"),e(": Searches all objects within the associated DN.")]),l("li",null,[l("code",null,"sub"),e(": Searches all objects and sub-objects within the associated DN.")])],-1),Zn=l("p",null,[l("sup",null,"[3]"),e(" If "),l("code",null,"GROUP_DN"),e(" is specified, the user\u2019s role will always be updated on authentication to a matching group configured in AD, or fallback to the "),l("code",null,"DEFAULT_ROLE_ID"),e(".")],-1),Jn=l("h3",{id:"example%3A-ldap",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#example%3A-ldap"},"#"),e(" Example: LDAP")],-1),Qn=l("pre",null,[l("code",null,`AUTH_PROVIDERS="ldap"
|
|
126
|
-
|
|
127
|
-
AUTH_LDAP_DRIVER="ldap"
|
|
128
|
-
AUTH_LDAP_CLIENT_URL="ldap://ldap.directus.io"
|
|
129
|
-
AUTH_LDAP_BIND_DN="CN=Bind User,OU=Users,DC=ldap,DC=directus,DC=io"
|
|
130
|
-
AUTH_LDAP_BIND_PASSWORD="p455w0rd"
|
|
131
|
-
AUTH_LDAP_USER_DN="OU=Users,DC=ldap,DC=directus,DC=io"
|
|
132
|
-
AUTH_LDAP_GROUP_DN="OU=Groups,DC=ldap,DC=directus,DC=io"
|
|
133
|
-
`)],-1),$n=l("h3",{id:"saml",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#saml"},"#"),e(" SAML")],-1),lt=l("p",null,"SAML is an open-standard, XML-based authentication framework for authentication and authorization between two entities without a password.",-1),et=l("ul",null,[l("li",null,[l("p",null,"Service provider (SP) agrees to trust the identity provider to authenticate users.")]),l("li",null,[l("p",null,"Identity provider (IdP) authenticates users and provides to service providers an authentication assertion that indicates a user has been authenticated.")])],-1),nt=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_SP_metadata")]),l("td",null,"String containing XML metadata for service provider or URL to a remote URL"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_IDP_metadata")]),l("td",null,"String container XML metadata for identity provider or URL to a remote URL"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_ALLOW_PUBLIC_REGISTRATION")]),l("td",null,"Automatically create accounts for authenticating users."),l("td",null,[l("code",null,"false")])]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_DEFAULT_ROLE_ID")]),l("td",null,"A Directus role ID to assign created users."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_IDENTIFIER_KEY")]),l("td",null,[e("User profile identifier key "),l("sup",null,"[1]"),e(". Will default to "),l("code",null,"EMAIL_KEY"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_EMAIL_KEY")]),l("td",null,"User profile email key."),l("td",null,[l("code",null,"email")])])])],-1),tt=l("p",null,[l("sup",null,"[1]"),e(" When authenticating, Directus will match the identifier value from the external user profile to a Directus users \u201CExternal Identifier\u201D.")],-1),ot=l("p",null,[e("The "),l("code",null,"SP_metadata"),e(" and "),l("code",null,"IDP_metadata"),e(" variables should be set to the XML metadata provided by the service provider and identity provider respectively or can be set to a URL that will be fetched on startup.")],-1),ut=l("h3",{id:"example%3A-multiple-auth-providers",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#example%3A-multiple-auth-providers"},"#"),e(" Example: Multiple Auth Providers")],-1),at=l("p",null,"You can configure multiple providers for handling authentication in Directus. This allows for different options when logging in. To do this, provide a comma-separated list of provider names, and a config block for each provider:",-1),st=l("pre",null,[l("code",null,`AUTH_PROVIDERS="google,facebook"
|
|
134
|
-
|
|
135
|
-
AUTH_GOOGLE_DRIVER="openid"
|
|
136
|
-
AUTH_GOOGLE_CLIENT_ID="830d...29sd"
|
|
137
|
-
AUTH_GOOGLE_CLIENT_SECRET="la23...4k2l"
|
|
138
|
-
AUTH_GOOGLE_ISSUER_URL="https://accounts.google.com/.well-known/openid-configuration"
|
|
139
|
-
AUTH_GOOGLE_IDENTIFIER_KEY="email"
|
|
140
|
-
AUTH_GOOGLE_ICON="google"
|
|
141
|
-
AUTH_GOOGLE_LABEL="Google"
|
|
142
|
-
|
|
143
|
-
AUTH_FACEBOOK_DRIVER="oauth2"
|
|
144
|
-
AUTH_FACEBOOK_CLIENT_ID="830d...29sd"
|
|
145
|
-
AUTH_FACEBOOK_CLIENT_SECRET="jd8x...685z"
|
|
146
|
-
AUTH_FACEBOOK_AUTHORIZE_URL="https://www.facebook.com/dialog/oauth"
|
|
147
|
-
AUTH_FACEBOOK_ACCESS_URL="https://graph.facebook.com/oauth/access_token"
|
|
148
|
-
AUTH_FACEBOOK_PROFILE_URL="https://graph.facebook.com/me?fields=email"
|
|
149
|
-
AUTH_FACEBOOK_ICON="facebook"
|
|
150
|
-
AUTH_FACEBOOK_LABEL="Facebook"
|
|
151
|
-
`)],-1),dt=l("h2",{id:"extensions",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#extensions"},"#"),e(" Extensions")],-1),rt=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"EXTENSIONS_PATH")]),l("td",null,"Path to your local extensions folder."),l("td",null,[l("code",null,"./extensions")])]),l("tr",null,[l("td",null,[l("code",null,"EXTENSIONS_AUTO_RELOAD")]),l("td",null,"Automatically reload extensions when they have changed."),l("td",null,[l("code",null,"false")])])])],-1),it=l("h2",{id:"messenger",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#messenger"},"#"),e(" Messenger")],-1),ct=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"MESSENGER_STORE")]),l("td",null,[e("One of "),l("code",null,"memory"),e(", "),l("code",null,"redis"),l("sup",null,"[1]")]),l("td",null,[l("code",null,"memory")])]),l("tr",null,[l("td",null,[l("code",null,"MESSENGER_NAMESPACE")]),l("td",null,"How to scope the channels in Redis"),l("td",null,[l("code",null,"directus")])]),l("tr",null,[l("td",null,[l("code",null,"MESSENGER_REDIS_*")]),l("td",null,"The Redis configuration for the pub/sub connection"),l("td",null,"\u2013")])])],-1),ht=l("p",null,[l("sup",null,"[1]"),e(),l("code",null,"redis"),e(" should be used in load-balanced installations of Directus")],-1),_t=l("h2",{id:"email",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#email"},"#"),e(" Email")],-1),pt=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"EMAIL_VERIFY_SETUP")]),l("td",null,"Check if email setup is properly configured."),l("td",null,[l("code",null,"true")])]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_FROM")]),l("td",null,"Email address from which emails are sent."),l("td",null,[l("code",null,"no-reply@directus.io")])]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_TRANSPORT")]),l("td",null,[e("What to use to send emails. One of "),l("code",null,"sendmail"),e(", "),l("code",null,"smtp"),e(", "),l("code",null,"mailgun"),e(", "),l("code",null,"sendgrid"),e(", "),l("code",null,"ses"),e(".")]),l("td",null,[l("code",null,"sendmail")])])])],-1),ft=l("p",null,[e("Based on the "),l("code",null,"EMAIL_TRANSPORT"),e(" used, you must also provide the following configurations:")],-1),mt=l("h3",{id:"sendmail-(sendmail)",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#sendmail-(sendmail)"},"#"),e(" Sendmail ("),l("code",null,"sendmail"),e(")")],-1),Et=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"EMAIL_SENDMAIL_NEW_LINE")]),l("td",null,"What new line style to use in sendmail."),l("td",null,[l("code",null,"unix")])]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SENDMAIL_PATH")]),l("td",null,"Path to your sendmail executable."),l("td",null,[l("code",null,"/usr/sbin/sendmail")])])])],-1),At=l("h3",{id:"smtp-(smtp)",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#smtp-(smtp)"},"#"),e(" SMTP ("),l("code",null,"smtp"),e(")")],-1),Tt=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"EMAIL_SMTP_NAME")]),l("td",null,"SMTP Name"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SMTP_HOST")]),l("td",null,"SMTP Host"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SMTP_PORT")]),l("td",null,"SMTP Port"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SMTP_USER")]),l("td",null,"SMTP User"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SMTP_PASSWORD")]),l("td",null,"SMTP Password"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SMTP_POOL")]),l("td",null,"Use SMTP pooling"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SMTP_SECURE")]),l("td",null,"Enable TLS"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SMTP_IGNORE_TLS")]),l("td",null,"Ignore TLS"),l("td",null,"\u2013")])])],-1),gt=l("h3",{id:"mailgun-(mailgun)",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#mailgun-(mailgun)"},"#"),e(" Mailgun ("),l("code",null,"mailgun"),e(")")],-1),Rt=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"EMAIL_MAILGUN_API_KEY")]),l("td",null,"Your Mailgun API key."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_MAILGUN_DOMAIN")]),l("td",null,[e("A domain from "),l("a",{href:"https://app.mailgun.com/app/sending/domains",target:"_blank",rel:"noopener noreferrer"},"your Mailgun account")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_MAILGUN_HOST")]),l("td",null,"Allows you to specify a custom host."),l("td",null,[l("code",null,"api.mailgun.net")])])])],-1),bt=l("h3",{id:"sendgrid-(sendgrid)",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#sendgrid-(sendgrid)"},"#"),e(" SendGrid ("),l("code",null,"sendgrid"),e(")")],-1),St=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"EMAIL_SENDGRID_API_KEY")]),l("td",null,"Your SendGrid API key."),l("td",null,"\u2013")])])],-1),Ot=l("h3",{id:"aws-ses-(ses)",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#aws-ses-(ses)"},"#"),e(" AWS SES ("),l("code",null,"ses"),e(")")],-1),It=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"EMAIL_SES_CREDENTIALS__ACCESS_KEY_ID")]),l("td",null,"Your AWS SES access key. ID."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SES_CREDENTIALS__SECRET_ACCESS_KEY")]),l("td",null,"Your AWS SES secret key."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SES_REGION")]),l("td",null,"Your AWS SES region."),l("td",null,"\u2013")])])],-1),yt=l("h2",{id:"admin-account",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#admin-account"},"#"),e(" Admin Account")],-1),Dt=l("p",null,[e("If you\u2019re relying on Docker and/or the "),l("code",null,"directus bootstrap"),e(" CLI command, you can pass the following two environment variables to automatically configure the first user:")],-1),Lt=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"ADMIN_EMAIL")]),l("td",null,[e("The email address of the first user that\u2019s automatically created when using "),l("code",null,"directus bootstrap"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"ADMIN_PASSWORD")]),l("td",null,[e("The password of the first user that\u2019s automatically created when using "),l("code",null,"directus bootstrap"),e(".")]),l("td",null,"\u2013")])])],-1),Ct=l("h2",{id:"telemetry",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#telemetry"},"#"),e(" Telemetry")],-1),vt=l("p",null,"To more accurately gauge the frequency of installation, version fragmentation, and general size of the userbase, Directus collects little and anonymized data about your environment. You can easily opt-out with the following environment variable:",-1),wt=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"TELEMETRY")]),l("td",null,"Allow Directus to collect anonymized data about your environment."),l("td",null,[l("code",null,"true")])])])],-1),Ht=l("h2",{id:"limits-%26-optimizations",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#limits-%26-optimizations"},"#"),e(" Limits & Optimizations")],-1),Ut=l("p",null,"Allows you to configure hard technical limits, to prevent abuse and optimize for your particular server environment.",-1),Pt=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"RELATIONAL_BATCH_SIZE")]),l("td",null,"How many rows are read into memory at a time when constructing nested relational datasets"),l("td",null,"25000")]),l("tr",null,[l("td",null,[l("code",null,"EXPORT_BATCH_SIZE")]),l("td",null,"How many rows are read into memory at a time when constructing exports"),l("td",null,"5000")])])],-1),jt="Configuration Options",kt=!1,Gt="Environment variables are used for all configuration within a Directus project. These variables can be defined in a number of ways, which we cover below.",Bt="28 min read",Ft={__name:"config-options",setup(Nt,{expose:s}){const u={title:"Configuration Options",modularExtension:!1,description:"Environment variables are used for all configuration within a Directus project. These variables can be defined in a number of ways, which we cover below.",readTime:"28 min read"};return s({frontmatter:u}),(xt,Mt)=>{const t=a("router-link"),d=a("docs-wrapper");return r(),i(d,{frontmatter:u},{default:n(()=>[l("div",c,[h,_,p,f,m,E,A,T,g,R,b,S,O,I,y,D,L,C,v,w,H,U,P,N,x,M,V,j,k,G,B,F,W,q,K,Y,z,X,Z,J,Q,$,ll,el,nl,tl,l("table",null,[ol,l("tbody",null,[ul,al,sl,dl,rl,il,cl,hl,_l,l("tr",null,[pl,l("td",null,[e("List of URLs that can be used "),o(t,{to:"/docs/reference/authentication#request-password-reset"},{default:n(()=>[e("as "),fl,e(" in /password/request")]),_:1})]),ml]),l("tr",null,[El,l("td",null,[e("List of URLs that can be used "),o(t,{to:"/docs/reference/system/users#invite-a-new-user"},{default:n(()=>[e("as "),Al,e(" in /users/invite")]),_:1})]),Tl]),gl,Rl,bl,Sl,Ol,Il,yl])]),Dl,Ll,Cl,l("p",null,[e("Argon2\u2019s hashing function is used by Directus for three purposes: 1) hashing user passwords, 2) generating hashes for the "),vl,e(" field type in collections, and 3) the "),o(t,{to:"/docs/reference/system/utilities#generate-a-hash"},{default:n(()=>[e("generate a hash API endpoint")]),_:1}),e(".")]),wl,Hl,Ul,Pl,Nl,xl,Ml,Vl,jl,kl,Gl,Bl,Fl,Wl,ql,Kl,Yl,zl,Xl,Zl,Jl,Ql,$l,le,ee,ne,te,oe,ue,ae,se,de,re,ie,ce,he,_e,pe,fe,me,Ee,Ae,Te,ge,Re,be,Se,Oe,Ie,ye,De,Le,Ce,ve,we,He,Ue,Pe,Ne,xe,Me,Ve,je,ke,Ge,Be,Fe,We,qe,Ke,Ye,ze,Xe,Ze,Je,Qe,$e,ln,en,nn,tn,on,un,l("p",null,[e("More example SSO configurations "),o(t,{to:"/docs/self-hosted/sso-examples"},{default:n(()=>[e("can be found here")]),_:1}),e(".")]),an,sn,l("table",null,[dn,l("tbody",null,[rn,cn,hn,_n,pn,fn,mn,En,An,Tn,gn,Rn,l("tr",null,[bn,l("td",null,[e("SVG icon to display with the login link. "),o(t,{to:"/docs/getting-started/glossary#icons"},{default:n(()=>[e("See options here")]),_:1}),e(".")]),Sn]),On,In])]),yn,Dn,Ln,l("table",null,[Cn,l("tbody",null,[vn,wn,Hn,Un,Pn,Nn,xn,Mn,l("tr",null,[Vn,l("td",null,[e("SVG icon to display with the login link. "),o(t,{to:"/docs/getting-started/glossary#icons"},{default:n(()=>[e("See options here")]),_:1}),e(".")]),jn]),kn,Gn])]),Bn,Fn,Wn,qn,Kn,Yn,zn,Xn,Zn,Jn,Qn,$n,lt,et,nt,tt,ot,ut,at,st,dt,rt,it,ct,ht,_t,pt,ft,mt,Et,At,Tt,gt,Rt,bt,St,Ot,It,yt,Dt,Lt,Ct,vt,wt,Ht,Ut,Pt])]),_:1})}}};export{Ft as default,Gt as description,kt as modularExtension,Bt as readTime,jt as title};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as l,o as a,e as c,y as u,u as e,t as o,q as s}from"./runtime-core.esm-bundler.22ec0346.js";const d={class:"markdown-body"},h={class:"tip hint"},p={class:"hint-title"},_=e("strong",null,"Directus Version:",-1),m=e("h2",{id:"explanation",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#explanation"},"#"),s(" Explanation")],-1),f=e("h2",{id:"the-recipe",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#the-recipe"},"#"),s(" The Recipe")],-1),w=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Requirements")],-1),g=e("video",{autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[e("source",{src:"",type:"video/mp4"})],-1),v=e("h3",{id:"public-permissions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#public-permissions"},"#"),s(" Public Permissions")],-1),b=e("ul",null,[e("li",null,[s("Public "),e("ul",null,[e("li",null,"Gets create permissions for users collection"),e("li",null,"Custom Access Permissions: Public must create users with username, password, etc\u2026")])])],-1),x=e("p",null,"Here, you may need to add some details about the expected result before moving on to Part 2 (if you have a part 2).",-1),y=e("h3",{id:"new-user-permissions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#new-user-permissions"},"#"),s(" New User Permissions")],-1),P=e("ul",null,[e("li",null,[s("New User "),e("ul",null,[e("li",null,"users: custom update permissions on $CURRENT_USER so user can change name and password."),e("li",null,[s("Set permissions for other collections "),e("ul",null,[e("li",null,"show one collection, using custom access permissions"),e("li",null,"Repeat as desired")])])])])],-1),R=e("h2",{id:"final-tips",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#final-tips"},"#"),s(" Final Tips")],-1),T="Configure User Registration",U=!1,N="This recipes explains how to enable new users to self-register their own account in Directus.",D=null,$=[],q=null,B="9.18.1",S=null,V="Eron Powell",A={__name:"configure-user-registration",setup(E,{expose:i}){const n={title:"Configure User Registration",modularExtension:!1,description:"This recipes explains how to enable new users to self-register their own account in Directus.",image:null,tags:[],skill_level:null,directus_version:"9.18.1",author_override:null,author:"Eron Powell"};return i({frontmatter:n}),(t,k)=>{const r=l("docs-wrapper");return a(),c(r,{frontmatter:n},{default:u(()=>[e("div",d,[e("blockquote",null,[e("p",null,o(t.$frontmatter.description),1)]),e("div",h,[e("div",p,"Author: "+o(t.$frontmatter.author),1),e("p",null,[_,s(" "+o(t.$frontmatter.directus_version),1)])]),m,f,w,g,v,b,x,y,P,R])]),_:1})}}};export{V as author,S as author_override,A as default,N as description,B as directus_version,D as image,U as modularExtension,q as skill_level,$ as tags,T as title};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as i,o as d,e as c,y as o,u as t,q as e,z as s}from"./runtime-core.esm-bundler.22ec0346.js";const h={class:"markdown-body"},u=t("blockquote",null,[t("p",null,[e("The Content Module is the primary way for Users to interact with Items in a Collection. Regardless of what your data model contains "),t("em",null,"(be it blog posts, event bookings, IoT fleets, geo-positions, CRM, or whatever!)"),e(" the Content Module enables you to view and manage, sort and search, or import and export data.")])],-1),m={class:"tip hint"},p=t("div",{class:"hint-title"},"Before You Begin",-1),g=t("h2",{id:"collection-page",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#collection-page"},"#"),e(" Collection Page")],-1),_=t("p",null,[t("img",{src:"https://cdn.directus.io/docs/v9/app-guide/content/content/content-20220415A/collection-page-20220415A.webp",alt:"Collection Overview"})],-1),f={class:"tip hint"},v=t("strong",null,"Settings",-1),w=t("h2",{id:"item-page",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#item-page"},"#"),e(" Item Page")],-1),y=t("p",null,[t("img",{src:"https://cdn.directus.io/docs/v9/app-guide/content/content/content-20220415A/item-page-20220215A.webp",alt:"Article Overview"})],-1),C=t("h2",{id:"shares",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#shares"},"#"),e(" Shares")],-1),b=t("video",{title:"Data Sharing",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/app-guide/content/content/content-20220415A/data-shares-20220415A.mp4",type:"video/mp4"})],-1),M="Content",P=!1,A="The Content Module is the primary way for Users to interact with Items in a Collection. Regardless of what your data model contains _(be it blog posts, event bookings, IoT fleets, geo-positions, CRM, or whatever!)_ the Content Module enables Users to view and manage, sort and search, or import and export data.",U="3 min read",B={__name:"content",setup(I,{expose:l}){const a={title:"Content",modularExtension:!1,description:"The Content Module is the primary way for Users to interact with Items in a Collection. Regardless of what your data model contains _(be it blog posts, event bookings, IoT fleets, geo-positions, CRM, or whatever!)_ the Content Module enables Users to view and manage, sort and search, or import and export data.",readTime:"3 min read"};return l({frontmatter:a}),(T,x)=>{const n=i("router-link"),r=i("docs-wrapper");return d(),c(r,{frontmatter:a},{default:o(()=>[t("div",h,[u,t("div",m,[p,t("p",null,[e("A solid understanding about "),s(n,{to:"/docs/getting-started/glossary#collections"},{default:o(()=>[e("Collections")]),_:1}),e(", "),s(n,{to:"/docs/getting-started/glossary#items"},{default:o(()=>[e("Items")]),_:1}),e(" and "),s(n,{to:"/docs/getting-started/glossary#fields"},{default:o(()=>[e("Fields")]),_:1}),e(" will help you use the Content module efficiently.")])]),g,_,t("p",null,[e("The Content Module consists of Collection Pages and Item Pages. Use the Navigation Bar on the left to move between Collections. Each Collection Page displays all Items in its Collection and comes with highly configurable "),s(n,{to:"/docs/getting-started/glossary#layouts"},{default:o(()=>[e("Layouts")]),_:1}),e(" for browsing, visualizing, and managing Items. The Page Header includes key action buttons for sorting, searching, filtering, creating, editing, archiving, and deleting multiple Items. To learn more, see our guide on the "),s(n,{to:"/docs/app/content/collections"},{default:o(()=>[e("Collection Page")]),_:1}),e(".")]),t("div",f,[t("p",null,[e("The Content module helps you manage Items. Collections are managed within the "),v,e(" menu, as these actions results in changes to the data model. To learn more, see our guide on "),s(n,{to:"/docs/configuration/data-model"},{default:o(()=>[e("data model configuration")]),_:1}),e(".")])]),w,y,t("p",null,[e("When you click an Item on the Collection page, its Item Page will open. The Item Page is a form that enables you to view, edit or delete an Item and its field values. You can also comment on, share, archive, or revert an Item from this form. To learn more, see our guide on the "),s(n,{to:"/docs/app/content/items"},{default:o(()=>[e("Item Page")]),_:1}),e(".")]),C,b,t("p",null,[e("In any project, certain Collections will have limited access permissions. In some cases, you may need to share one of the Items within the collection with an individual or group of individuals who don\u2019t yet have permission. In this case, use Shares. Shares enable you to share an Item from a Collection with anyone, regardless of their permissions, and even if they are not Users within the project. To learn more, see our guide on "),s(n,{to:"/docs/app/content/shares"},{default:o(()=>[e("Data Sharing")]),_:1}),e(".")])])]),_:1})}}};export{B as default,A as description,P as modularExtension,U as readTime,M as title};
|