@directus/app 9.12.2 → 9.13.0

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.
Files changed (470) hide show
  1. package/dist/assets/{@directus_extensions-sdk.016f1070.entry.js → @directus_extensions-sdk.c2d0f9e8.entry.js} +1 -1
  2. package/dist/assets/accounts.6a41a439.js +1 -0
  3. package/dist/assets/{active-line.ff3bc705.js → active-line.85f931be.js} +1 -1
  4. package/dist/assets/activity-log.2f462c6d.js +1 -0
  5. package/dist/assets/activity.737e1d30.js +80 -0
  6. package/dist/assets/{apl.cc4825c6.js → apl.cef44fca.js} +1 -1
  7. package/dist/assets/ar-SA.1270865d.js +1 -0
  8. package/dist/assets/architecture.19f588c9.js +1 -0
  9. package/dist/assets/{asciiarmor.30bbdfc8.js → asciiarmor.0a6d46c1.js} +1 -1
  10. package/dist/assets/{asn.1.499e838e.js → asn.1.8af7db88.js} +1 -1
  11. package/dist/assets/{asterisk.a2fa7dc3.js → asterisk.133eb9d4.js} +1 -1
  12. package/dist/assets/authentication.77ec921a.js +73 -0
  13. package/dist/assets/{autorefresh.d36f34c8.js → autorefresh.8c3a7c64.js} +1 -1
  14. package/dist/assets/aws.f94e1168.js +1 -0
  15. package/dist/assets/backing-directus.16949f6d.js +1 -0
  16. package/dist/assets/bg-BG.375ca1ae.js +1 -0
  17. package/dist/assets/bn-IN.4127b7a4.js +1 -0
  18. package/dist/assets/{br-FR.1ad76918.js → br-FR.73a7f62b.js} +1 -1
  19. package/dist/assets/{brainfuck.dab31c46.js → brainfuck.bb0a1793.js} +1 -1
  20. package/dist/assets/{ca-ES.365a1fc4.js → ca-ES.3340d7d5.js} +1 -1
  21. package/dist/assets/cli.18caf1f2.js +19 -0
  22. package/dist/assets/cli.774a4996.js +4 -0
  23. package/dist/assets/{clike.7aacd908.js → clike.264a24b6.js} +1 -1
  24. package/dist/assets/{clojure.c8d9937a.js → clojure.5be5870c.js} +1 -1
  25. package/dist/assets/cloudron.3b183977.js +1 -0
  26. package/dist/assets/{cmake.e0408576.js → cmake.361bb9df.js} +1 -1
  27. package/dist/assets/{cobol.86241640.js → cobol.2e771d85.js} +1 -1
  28. package/dist/assets/codebase-overview.d6365b1a.js +1 -0
  29. package/dist/assets/{coffeescript.6090d9e8.js → coffeescript.132c432c.js} +1 -1
  30. package/dist/assets/collections.5ec4ec4a.js +2 -0
  31. package/dist/assets/collections.e66dacd4.js +106 -0
  32. package/dist/assets/{commonlisp.eb3c5619.js → commonlisp.87c850aa.js} +1 -1
  33. package/dist/assets/config-options.5b139611.js +138 -0
  34. package/dist/assets/content.0fca8e70.js +1 -0
  35. package/dist/assets/creating-extensions.09899f65.js +11 -0
  36. package/dist/assets/{crystal.01db8e68.js → crystal.8b2d4939.js} +1 -1
  37. package/dist/assets/cs-CZ.678bc13f.js +1 -0
  38. package/dist/assets/{css.b1894218.js → css.1e9857ce.js} +1 -1
  39. package/dist/assets/{cypher.c0cbf899.js → cypher.aefea96e.js} +1 -1
  40. package/dist/assets/{d.54d4201d.js → d.38a2fd63.js} +1 -1
  41. package/dist/assets/{da-DK.88f53a7d.js → da-DK.8db961d3.js} +1 -1
  42. package/dist/assets/{dart.2218881c.js → dart.4d90eff6.js} +1 -1
  43. package/dist/assets/data-model.98153925.js +1 -0
  44. package/dist/assets/data-sharing.06e8a06f.js +1 -0
  45. package/dist/assets/de-DE.a45e2867.js +1 -0
  46. package/dist/assets/{diff.d7f03886.js → diff.f2ea9976.js} +1 -1
  47. package/dist/assets/digitalocean-app-platform.7da3c7a1.js +3 -0
  48. package/dist/assets/display-templates.cd179d19.js +1 -0
  49. package/dist/assets/displays.1ee1f2b5.js +49 -0
  50. package/dist/assets/{django.913379d3.js → django.fce1ee6c.js} +1 -1
  51. package/dist/assets/{docker.e1bb4205.js → docker.7318105b.js} +6 -6
  52. package/dist/assets/{dockerfile.9c7cf88b.js → dockerfile.10fea9a2.js} +1 -1
  53. package/dist/assets/documentation.ec08e64e.js +1 -0
  54. package/dist/assets/{dtd.dbc97bdb.js → dtd.c67f9501.js} +1 -1
  55. package/dist/assets/{dylan.0c2df43b.js → dylan.9c7c8fbb.js} +1 -1
  56. package/dist/assets/{ebnf.4c778620.js → ebnf.5893ba11.js} +1 -1
  57. package/dist/assets/{ecl.778611ac.js → ecl.666cf005.js} +1 -1
  58. package/dist/assets/{eiffel.2a73cd14.js → eiffel.1ff51078.js} +1 -1
  59. package/dist/assets/{elm.90002323.js → elm.3c43bbde.js} +1 -1
  60. package/dist/assets/email-templates.bc7359ba.js +2 -0
  61. package/dist/assets/{en-CA.58d818b8.js → en-CA.d2451b87.js} +1 -1
  62. package/dist/assets/{en-GB.74320d21.js → en-GB.e362e116.js} +1 -1
  63. package/dist/assets/endpoints.a283ab67.js +27 -0
  64. package/dist/assets/{erlang.c8e3989e.js → erlang.cfe0d25f.js} +1 -1
  65. package/dist/assets/es-419.d7e63f16.js +1 -0
  66. package/dist/assets/es-CL.7fd46c95.js +1 -0
  67. package/dist/assets/es-ES.90a08b21.js +1 -0
  68. package/dist/assets/es-MX.778b926c.js +1 -0
  69. package/dist/assets/{et-EE.9e35920e.js → et-EE.5321add1.js} +1 -1
  70. package/dist/assets/extensions.a51d3924.js +12 -0
  71. package/dist/assets/{fa-IR.f3dc75f9.js → fa-IR.a346165e.js} +1 -1
  72. package/dist/assets/{factor.a2db9c26.js → factor.eb880fb0.js} +1 -1
  73. package/dist/assets/faq.7bde76ae.js +2 -0
  74. package/dist/assets/{fcl.02d85986.js → fcl.a70b3450.js} +1 -1
  75. package/dist/assets/{fi-FI.42afdce0.js → fi-FI.14cee6db.js} +1 -1
  76. package/dist/assets/fields.1f2e77de.js +135 -0
  77. package/dist/assets/file-library.3626307c.js +1 -0
  78. package/dist/assets/files.e045e557.js +189 -0
  79. package/dist/assets/filter-rules.247581e5.js +76 -0
  80. package/dist/assets/filters.43e74661.js +1 -0
  81. package/dist/assets/flows.323ce75f.js +15 -0
  82. package/dist/assets/{flows.22228af1.js → flows.5f5e16d5.js} +23 -23
  83. package/dist/assets/{folders.0024d3d3.js → folders.56c9a624.js} +20 -20
  84. package/dist/assets/{forth.725698ea.js → forth.127a7f69.js} +1 -1
  85. package/dist/assets/{fortran.e9ba7b47.js → fortran.64d2bcc8.js} +1 -1
  86. package/dist/assets/{fr-CA.caa3fc8d.js → fr-CA.7669aed8.js} +1 -1
  87. package/dist/assets/{fr-FR.615da1bd.js → fr-FR.49507672.js} +1 -1
  88. package/dist/assets/{gas.25b17a72.js → gas.b5ddd39d.js} +1 -1
  89. package/dist/assets/gcp.aab7b77c.js +60 -0
  90. package/dist/assets/{gfm.a7b6e273.js → gfm.0e5a0d37.js} +1 -1
  91. package/dist/assets/{gherkin.1db310b6.js → gherkin.ca9beebc.js} +1 -1
  92. package/dist/assets/github-ci.fbe7bc68.js +2 -0
  93. package/dist/assets/glossary.321fe2e7.js +1 -0
  94. package/dist/assets/glossary.8e8d2e42.js +1 -0
  95. package/dist/assets/{go.a0c64ca2.js → go.601cf92f.js} +1 -1
  96. package/dist/assets/{groovy.b0ac2a1f.js → groovy.106b0e1b.js} +1 -1
  97. package/dist/assets/{haml.233c9608.js → haml.8a27bb91.js} +1 -1
  98. package/dist/assets/{handlebars.b13fc00f.js → handlebars.7edaa076.js} +1 -1
  99. package/dist/assets/{haskell-literate.af8f88ee.js → haskell-literate.c5a1599c.js} +1 -1
  100. package/dist/assets/{haskell.adcf73db.js → haskell.499e9d63.js} +1 -1
  101. package/dist/assets/{haxe.f1a75c2e.js → haxe.6103069d.js} +1 -1
  102. package/dist/assets/{hi-IN.36e79faa.js → hi-IN.1abc0fe8.js} +1 -1
  103. package/dist/assets/hooks.c8418066.js +60 -0
  104. package/dist/assets/{hr-HR.b1e41c07.js → hr-HR.5e9128d0.js} +1 -1
  105. package/dist/assets/{htmlembedded.145e9718.js → htmlembedded.57ac5929.js} +1 -1
  106. package/dist/assets/{htmlmixed.6794685c.js → htmlmixed.be98881c.js} +1 -1
  107. package/dist/assets/{http.5bb61ef1.js → http.4229d6d3.js} +1 -1
  108. package/dist/assets/{hu-HU.9c7ec38f.js → hu-HU.edf3e061.js} +1 -1
  109. package/dist/assets/id-ID.5d8e082c.js +1 -0
  110. package/dist/assets/{idl.f52ce6c3.js → idl.1baa44ef.js} +1 -1
  111. package/dist/assets/{iis.109e5a8a.js → iis.5653e9da.js} +2 -2
  112. package/dist/assets/import-export.c48e51e7.js +2 -0
  113. package/dist/assets/{index.d8fe2ade.js → index.06b1bc9f.js} +1 -1
  114. package/dist/assets/{index.2ec06d14.js → index.0b12fa24.js} +1 -1
  115. package/dist/assets/{index.a40592f5.js → index.0ec094a3.js} +1 -1
  116. package/dist/assets/{index.10f90411.js → index.15a6b55f.js} +1 -1
  117. package/dist/assets/{index.663b73a9.js → index.16d5015d.js} +1 -1
  118. package/dist/assets/{index.a8aa4628.js → index.178f5aaf.js} +1 -1
  119. package/dist/assets/{index.627523d7.js → index.1a744da7.js} +1 -1
  120. package/dist/assets/{index.14c720ba.js → index.204d0697.js} +1 -1
  121. package/dist/assets/{index.c6e501ec.js → index.219a17f2.js} +1 -1
  122. package/dist/assets/{index.6f0b7179.js → index.28cc485f.js} +1 -1
  123. package/dist/assets/{index.d0fe3776.js → index.29e951ca.js} +1 -1
  124. package/dist/assets/{index.85b9f847.js → index.2c806494.js} +1 -1
  125. package/dist/assets/{index.cc6496a8.js → index.2d502598.js} +1 -1
  126. package/dist/assets/{index.cda6c2d6.js → index.3142cfab.js} +1 -1
  127. package/dist/assets/{index.cef58c9b.js → index.33ca7318.js} +1 -1
  128. package/dist/assets/{index.b702042e.js → index.360682df.js} +1 -1
  129. package/dist/assets/{index.af021d8a.js → index.3651f13c.js} +1 -1
  130. package/dist/assets/{index.e3dcc63c.js → index.3db870b4.js} +1 -1
  131. package/dist/assets/{index.98713a56.js → index.3f26bd55.js} +1 -1
  132. package/dist/assets/{index.9b60cfa4.js → index.3f629050.js} +1 -1
  133. package/dist/assets/{index.63d1f569.js → index.3fcf2822.js} +1 -1
  134. package/dist/assets/{index.55a12dfb.js → index.4ae9df91.js} +1 -1
  135. package/dist/assets/{index.1b44d300.js → index.4d0c9d2f.js} +1 -1
  136. package/dist/assets/{index.2598f40b.js → index.5073c294.js} +1 -1
  137. package/dist/assets/{index.a9b73f2c.js → index.528b0171.js} +1 -1
  138. package/dist/assets/{index.98ee194a.js → index.530b8f76.js} +1 -1
  139. package/dist/assets/{index.4fbaebb7.js → index.57201b30.js} +1 -1
  140. package/dist/assets/{index.d9285c22.js → index.577a0434.js} +1 -1
  141. package/dist/assets/{index.4ef25ded.js → index.58506149.js} +1 -1
  142. package/dist/assets/{index.6bebaca7.js → index.59759bad.js} +1 -1
  143. package/dist/assets/{index.3eda79ec.js → index.5d2a1255.js} +1 -1
  144. package/dist/assets/{index.bce5f50d.js → index.5ef47d94.js} +1 -1
  145. package/dist/assets/{index.a9faa4e8.js → index.656a3daa.js} +1 -1
  146. package/dist/assets/{index.93059741.js → index.67e35129.js} +1 -1
  147. package/dist/assets/{index.402d83c0.js → index.6fe4b726.js} +1 -1
  148. package/dist/assets/{index.77260d1d.js → index.7011d0c4.js} +1 -1
  149. package/dist/assets/{index.ef3faba8.js → index.708c2587.js} +1 -1
  150. package/dist/assets/{index.7fe984e4.js → index.731ea486.js} +1 -1
  151. package/dist/assets/{index.7f906cfe.js → index.7b6f6a30.js} +1 -1
  152. package/dist/assets/{index.16acfb90.js → index.7bfaf022.js} +1 -1
  153. package/dist/assets/{index.5c54c17f.js → index.7ccfac4f.js} +1 -1
  154. package/dist/assets/{index.60d33aa1.js → index.7d3af32f.js} +1 -1
  155. package/dist/assets/{index.c9fb33ab.js → index.7efa08a7.js} +1 -1
  156. package/dist/assets/{index.3d4cd218.js → index.83254b8b.js} +1 -1
  157. package/dist/assets/index.876852bd.entry.js +3402 -0
  158. package/dist/assets/{index.1a65b37a.js → index.8d2db40f.js} +1 -1
  159. package/dist/assets/index.9001e465.css +1 -0
  160. package/dist/assets/{index.a71fa74c.js → index.91fa7a8d.js} +1 -1
  161. package/dist/assets/{index.8493b2e7.js → index.9459ab09.js} +1 -1
  162. package/dist/assets/{index.d653bbf2.js → index.94d7ade8.js} +1 -1
  163. package/dist/assets/{index.55cf7b0a.js → index.9ac418f5.js} +1 -1
  164. package/dist/assets/{index.0295bc4b.js → index.9c5a0589.js} +1 -1
  165. package/dist/assets/{index.20b34242.js → index.9dd4ba15.js} +1 -1
  166. package/dist/assets/{index.5f5bf5b9.js → index.9f4f31bb.js} +1 -1
  167. package/dist/assets/{index.28aa754b.js → index.9fa88e82.js} +1 -1
  168. package/dist/assets/{index.b5ed5076.js → index.9fd2f4fc.js} +1 -1
  169. package/dist/assets/{index.94cf6fb4.js → index.9ff8ac88.js} +1 -1
  170. package/dist/assets/{index.e6715953.js → index.a22ebf71.js} +1 -1
  171. package/dist/assets/{index.fa57ca3f.js → index.aadb91bf.js} +1 -1
  172. package/dist/assets/{index.ee22568a.js → index.b0a109be.js} +1 -1
  173. package/dist/assets/{index.2926879f.js → index.b107abb9.js} +1 -1
  174. package/dist/assets/{index.7fd5e2a0.js → index.b6f0287a.js} +1 -1
  175. package/dist/assets/{index.0e101049.js → index.b7cd48a8.js} +1 -1
  176. package/dist/assets/{index.b67f8116.js → index.bfffbb2b.js} +1 -1
  177. package/dist/assets/{index.b43832c6.js → index.c83f5be4.js} +1 -1
  178. package/dist/assets/{index.d060d5f6.js → index.c8cd968e.js} +1 -1
  179. package/dist/assets/{index.ebb444cf.js → index.cb9930fe.js} +1 -1
  180. package/dist/assets/{index.56188e3b.js → index.cf04970d.js} +1 -1
  181. package/dist/assets/{index.43fa9898.js → index.d0c387c9.js} +1 -1
  182. package/dist/assets/{index.bfd23a9c.js → index.d2a1f961.js} +1 -1
  183. package/dist/assets/{index.456ff0bd.js → index.d2cb8f46.js} +1 -1
  184. package/dist/assets/{index.c35b11e6.js → index.d7109bf7.js} +1 -1
  185. package/dist/assets/{index.a5d15d7f.js → index.da530994.js} +1 -1
  186. package/dist/assets/{index.a3e085ea.js → index.dbfcc1a7.js} +1 -1
  187. package/dist/assets/{index.399c0d62.js → index.dd1b70ed.js} +1 -1
  188. package/dist/assets/{index.4100d6f0.js → index.e29b1e2d.js} +1 -1
  189. package/dist/assets/{index.c2e6211e.js → index.e3eade04.js} +1 -1
  190. package/dist/assets/{index.07257d01.js → index.e65177c5.js} +1 -1
  191. package/dist/assets/{index.4e2109fe.js → index.e6925009.js} +1 -1
  192. package/dist/assets/{index.175a81f8.js → index.e7f7c63b.js} +1 -1
  193. package/dist/assets/{index.c5266851.js → index.f03e3a04.js} +1 -1
  194. package/dist/assets/{index.8a9f2874.js → index.f2b97e8c.js} +1 -1
  195. package/dist/assets/{index.7249f524.js → index.f73d801d.js} +1 -1
  196. package/dist/assets/{input-rich-text-html.817ccf8b.css → input-rich-text-html.05181995.css} +1 -1
  197. package/dist/assets/{input-rich-text-html.e9e92552.js → input-rich-text-html.ec8448e4.js} +3 -3
  198. package/dist/assets/insights.91323cd9.js +2 -0
  199. package/dist/assets/installation.52e4ff88.js +1 -0
  200. package/dist/assets/interfaces.3a13d91e.js +46 -0
  201. package/dist/assets/introduction.651560f1.js +1 -0
  202. package/dist/assets/introduction.8442768e.js +4 -0
  203. package/dist/assets/introduction.8fbc61cf.js +1 -0
  204. package/dist/assets/{introduction.2e6f5c1d.js → introduction.a7d534ac.js} +7 -7
  205. package/dist/assets/it-IT.558525d2.js +1 -0
  206. package/dist/assets/items.21c2f5c1.js +1 -0
  207. package/dist/assets/{items.4205dfa0.js → items.89e120a5.js} +27 -27
  208. package/dist/assets/ja-JP.84597497.js +1 -0
  209. package/dist/assets/{javascript-hint.d8a99d8e.js → javascript-hint.7c0e2348.js} +1 -1
  210. package/dist/assets/{javascript.357d6ab4.js → javascript.549d0ba4.js} +1 -1
  211. package/dist/assets/{jinja2.64181acd.js → jinja2.5aada9b5.js} +1 -1
  212. package/dist/assets/{jsx.ba14fb9d.js → jsx.560c7673.js} +1 -1
  213. package/dist/assets/{julia.06a9ee42.js → julia.4b70a3c2.js} +1 -1
  214. package/dist/assets/layouts.1ab2977a.js +1 -0
  215. package/dist/assets/layouts.ec7b7659.js +54 -0
  216. package/dist/assets/{livescript.687f6ca6.js → livescript.c54303a1.js} +1 -1
  217. package/dist/assets/localization.7df8d876.js +1 -0
  218. package/dist/assets/{lt-LT.772aac6e.js → lt-LT.7c7364ab.js} +1 -1
  219. package/dist/assets/{lua.40597bfe.js → lua.eee6a1df.js} +1 -1
  220. package/dist/assets/manual.1cafb3c9.js +10 -0
  221. package/dist/assets/{mark-selection.feeab6e5.js → mark-selection.c75b2260.js} +1 -1
  222. package/dist/assets/{match-highlighter.8afd3316.js → match-highlighter.06888b25.js} +1 -1
  223. package/dist/assets/{mathematica.6569f1d2.js → mathematica.836a919a.js} +1 -1
  224. package/dist/assets/{mbox.d8c16b77.js → mbox.a18f3acd.js} +1 -1
  225. package/dist/assets/migrations.48bae78b.js +19 -0
  226. package/dist/assets/{mirc.5f909857.js → mirc.8d633a4c.js} +1 -1
  227. package/dist/assets/{mllike.393c4525.js → mllike.ee0a0e4e.js} +1 -1
  228. package/dist/assets/{modelica.1180cc4d.js → modelica.806d9c14.js} +1 -1
  229. package/dist/assets/modules.ba273153.js +69 -0
  230. package/dist/assets/{mscgen.429d47df.js → mscgen.81143483.js} +1 -1
  231. package/dist/assets/{multiplex.23c498d1.js → multiplex.b5f6827f.js} +1 -1
  232. package/dist/assets/{mumps.f94bba13.js → mumps.af4fdb4c.js} +1 -1
  233. package/dist/assets/{nginx.72bf7bab.js → nginx.a80ef11d.js} +1 -1
  234. package/dist/assets/{nl-NL.b57de112.js → nl-NL.e22dd4e0.js} +1 -1
  235. package/dist/assets/{no-NO.79458b78.js → no-NO.6edd4997.js} +1 -1
  236. package/dist/assets/notifications.1e1cfcf8.js +153 -0
  237. package/dist/assets/{nsis.68fe2711.js → nsis.6c7c39d8.js} +1 -1
  238. package/dist/assets/{ntriples.964a7402.js → ntriples.9c907279.js} +1 -1
  239. package/dist/assets/{octave.26aad7e7.js → octave.1e59cd30.js} +1 -1
  240. package/dist/assets/operations.054152be.js +1 -0
  241. package/dist/assets/{operations.22151874.js → operations.cd009c46.js} +21 -21
  242. package/dist/assets/{overlay.b4b97f23.js → overlay.c92748f5.js} +1 -1
  243. package/dist/assets/overview.70f19d6e.js +1 -0
  244. package/dist/assets/overview.a1ad38f6.js +1 -0
  245. package/dist/assets/overview.b5ff02e8.js +1 -0
  246. package/dist/assets/{oz.1076911f.js → oz.fccca05b.js} +1 -1
  247. package/dist/assets/panels.a7ccfe62.js +65 -0
  248. package/dist/assets/{pascal.8ad1e64f.js → pascal.ba64f8f0.js} +1 -1
  249. package/dist/assets/{pegjs.c362f9d1.js → pegjs.6dfcd58b.js} +1 -1
  250. package/dist/assets/{perl.afe37b4f.js → perl.0e74be0a.js} +1 -1
  251. package/dist/assets/{permissions.f84f8d42.js → permissions.7a7896f5.js} +19 -19
  252. package/dist/assets/{php.2fcb5b78.js → php.d233db82.js} +1 -1
  253. package/dist/assets/{pig.1047d3c6.js → pig.21e0eb3e.js} +1 -1
  254. package/dist/assets/{pinia.256cc3da.entry.js → pinia.10afb35e.entry.js} +1 -1
  255. package/dist/assets/pl-PL.88defd20.js +1 -0
  256. package/dist/assets/plesk.e70d310e.js +27 -0
  257. package/dist/assets/{powershell.a493c1a9.js → powershell.da69d4e0.js} +1 -1
  258. package/dist/assets/presets-bookmarks.03f2cacf.js +1 -0
  259. package/dist/assets/{presets.b1e8b6c1.js → presets.78562380.js} +20 -20
  260. package/dist/assets/project-settings.1ca9f129.js +1 -0
  261. package/dist/assets/projects.8310e11a.js +1 -0
  262. package/dist/assets/{properties.2ccd56b8.js → properties.a4628831.js} +1 -1
  263. package/dist/assets/{protobuf.a0e463a0.js → protobuf.f0f96141.js} +1 -1
  264. package/dist/assets/pt-BR.70dc0b86.js +1 -0
  265. package/dist/assets/{pt-PT.c28534a0.js → pt-PT.011f0864.js} +1 -1
  266. package/dist/assets/{pug.3909bb70.js → pug.3fee26d4.js} +1 -1
  267. package/dist/assets/{puppet.298e3717.js → puppet.60ebf719.js} +1 -1
  268. package/dist/assets/{python.099f62ce.js → python.a209d75c.js} +1 -1
  269. package/dist/assets/{q.64763e8e.js → q.9bc79202.js} +1 -1
  270. package/dist/assets/query.23aa38a2.js +152 -0
  271. package/dist/assets/quickstart.2ad94821.js +20 -0
  272. package/dist/assets/quickstart.59a0c62f.js +9 -0
  273. package/dist/assets/{r.f2c0470b.js → r.73746445.js} +1 -1
  274. package/dist/assets/relations.c6b50878.js +115 -0
  275. package/dist/assets/relationships.7a08adb6.js +55 -0
  276. package/dist/assets/resources.a731a4ac.js +1 -0
  277. package/dist/assets/revisions.69b22e98.js +40 -0
  278. package/dist/assets/{ro-RO.5161835a.js → ro-RO.335d3129.js} +1 -1
  279. package/dist/assets/roles.caf226aa.js +171 -0
  280. package/dist/assets/{rpm.cf84a89e.js → rpm.b64d60a3.js} +1 -1
  281. package/dist/assets/{rst.26def927.js → rst.d4af1cd8.js} +1 -1
  282. package/dist/assets/{ru-RU.94a64be6.js → ru-RU.2ccef41d.js} +1 -1
  283. package/dist/assets/{ruby.5fdee9b4.js → ruby.a80f4c3d.js} +1 -1
  284. package/dist/assets/running-locally.0df06054.js +26 -0
  285. package/dist/assets/{runtime-core.esm-bundler.b1f35d24.js → runtime-core.esm-bundler.e6808e6c.js} +0 -0
  286. package/dist/assets/{rust.ab31720a.js → rust.899c7d8f.js} +1 -1
  287. package/dist/assets/{sas.d35671d3.js → sas.41f29cd7.js} +1 -1
  288. package/dist/assets/{sass.be16b14c.js → sass.1d8f58d7.js} +1 -1
  289. package/dist/assets/{scheme.da057889.js → scheme.2ab5ffc7.js} +1 -1
  290. package/dist/assets/{sdk.12cd7974.js → sdk.482f914b.js} +41 -41
  291. package/dist/assets/security.e53645ff.js +1 -0
  292. package/dist/assets/{server.9f12ae3e.js → server.c899d180.js} +12 -12
  293. package/dist/assets/settings.2dce0b3a.js +51 -0
  294. package/dist/assets/settings.3849af9a.js +1 -0
  295. package/dist/assets/{shell.ba07ff2f.js → shell.a3cecf64.js} +1 -1
  296. package/dist/assets/{show-hint.4c3405db.js → show-hint.3f4ba8eb.js} +1 -1
  297. package/dist/assets/{sieve.9a88af42.js → sieve.f25d24f4.js} +1 -1
  298. package/dist/assets/{simple.306c97cf.js → simple.c984322a.js} +1 -1
  299. package/dist/assets/{sl-SI.719d987e.js → sl-SI.e8321ed4.js} +1 -1
  300. package/dist/assets/{slim.11e72018.js → slim.3db1f064.js} +1 -1
  301. package/dist/assets/{smalltalk.802facc0.js → smalltalk.f551ff39.js} +1 -1
  302. package/dist/assets/{smarty.410c0c8d.js → smarty.afd9c30f.js} +1 -1
  303. package/dist/assets/{solr.43e14cbf.js → solr.c9696404.js} +1 -1
  304. package/dist/assets/{soy.18418f41.js → soy.1a041a45.js} +1 -1
  305. package/dist/assets/{sparql.5169332f.js → sparql.8928a4e7.js} +1 -1
  306. package/dist/assets/{spreadsheet.2a7e9b13.js → spreadsheet.b508d495.js} +1 -1
  307. package/dist/assets/{sql.53c1d1ba.js → sql.ca615946.js} +1 -1
  308. package/dist/assets/{sr-CS.c513578f.js → sr-CS.4de79c8e.js} +1 -1
  309. package/dist/assets/{sso-examples.b52061be.js → sso-examples.b4ec54d6.js} +12 -12
  310. package/dist/assets/sso.83af860e.js +22 -0
  311. package/dist/assets/{stex.7c4e0033.js → stex.49bcb53e.js} +1 -1
  312. package/dist/assets/{stylus.dfe1c737.js → stylus.861b3b1d.js} +1 -1
  313. package/dist/assets/support.ec8c583f.js +1 -0
  314. package/dist/assets/{sv-SE.a70fd097.js → sv-SE.0f875403.js} +1 -1
  315. package/dist/assets/{swift.e9cb43f5.js → swift.3f2d8cb3.js} +1 -1
  316. package/dist/assets/{tcl.7cc3bef5.js → tcl.cd07bc30.js} +1 -1
  317. package/dist/assets/teams.cd070396.js +1 -0
  318. package/dist/assets/{textile.353c8497.js → textile.a63fbf58.js} +1 -1
  319. package/dist/assets/{th-TH.bdbc4a8c.js → th-TH.2ebd6079.js} +1 -1
  320. package/dist/assets/themes.6b4fa5ad.js +5 -0
  321. package/dist/assets/{tiddlywiki.f4ebe8db.js → tiddlywiki.f2f348c0.js} +1 -1
  322. package/dist/assets/{tiki.95dd78e4.js → tiki.ba369f07.js} +1 -1
  323. package/dist/assets/{toml.f50bb93a.js → toml.31bb978b.js} +1 -1
  324. package/dist/assets/{tornado.3e0cfd8c.js → tornado.1777e143.js} +1 -1
  325. package/dist/assets/{tr-TR.d7a7361f.js → tr-TR.bf97340d.js} +1 -1
  326. package/dist/assets/translation-strings.20caaf44.js +1 -0
  327. package/dist/assets/translations.b0669f1b.js +1 -0
  328. package/dist/assets/triggers.ef2f026f.js +1 -0
  329. package/dist/assets/{troff.a2834e8f.js → troff.1d83c4c6.js} +1 -1
  330. package/dist/assets/{ttcn-cfg.447f138c.js → ttcn-cfg.7fa2f9b9.js} +1 -1
  331. package/dist/assets/{ttcn.7d877404.js → ttcn.5f856a38.js} +1 -1
  332. package/dist/assets/{turtle.3b4898fd.js → turtle.3c6fdbbb.js} +1 -1
  333. package/dist/assets/{twig.53dd7cbe.js → twig.542faf41.js} +1 -1
  334. package/dist/assets/ubuntu.d721892a.js +11 -0
  335. package/dist/assets/uk-UA.3d9cc5ac.js +1 -0
  336. package/dist/assets/upgrades-migrations.7ca77eae.js +1 -0
  337. package/dist/assets/{use-sync.c0f4dfab.js → use-sync.a493fd37.js} +1 -1
  338. package/dist/assets/user-directory.1e43d57c.js +1 -0
  339. package/dist/assets/users-roles-permissions.298f1d29.js +1 -0
  340. package/dist/assets/users.c27bf116.js +252 -0
  341. package/dist/assets/{utilities.26e6a9e8.js → utilities.5c027346.js} +12 -12
  342. package/dist/assets/{vb.c3313898.js → vb.660ea551.js} +1 -1
  343. package/dist/assets/{vbscript.0b106bed.js → vbscript.8d60ba84.js} +1 -1
  344. package/dist/assets/{velocity.c20bb29d.js → velocity.2c820c8c.js} +1 -1
  345. package/dist/assets/{verilog.2f6698b4.js → verilog.a6d857f3.js} +1 -1
  346. package/dist/assets/{vhdl.6127eef7.js → vhdl.1739da74.js} +1 -1
  347. package/dist/assets/{vi-VN.7478a743.js → vi-VN.7aaf0f64.js} +1 -1
  348. package/dist/assets/{vue-i18n.ecb0af35.entry.js → vue-i18n.540626ab.entry.js} +1 -1
  349. package/dist/assets/{vue-router.8987d576.entry.js → vue-router.3ef5d657.entry.js} +1 -1
  350. package/dist/assets/{vue.1f4d921a.entry.js → vue.2ddff80c.entry.js} +1 -1
  351. package/dist/assets/{vue.bb756ea0.js → vue.6a736ef9.js} +1 -1
  352. package/dist/assets/{vue.runtime.esm-bundler.ac4ff7af.js → vue.runtime.esm-bundler.f4ce1cef.js} +1 -1
  353. package/dist/assets/{wast.66661aa3.js → wast.4a6e6c0b.js} +1 -1
  354. package/dist/assets/{webhooks.4eeecb7d.js → webhooks.c44db11b.js} +19 -19
  355. package/dist/assets/webhooks.dcb64844.js +1 -0
  356. package/dist/assets/{webidl.0a42319e.js → webidl.92e5974e.js} +1 -1
  357. package/dist/assets/{xquery.44dd200c.js → xquery.2e4160b5.js} +1 -1
  358. package/dist/assets/{yacas.6f3863db.js → yacas.3afca2ee.js} +1 -1
  359. package/dist/assets/{yaml-frontmatter.42fca60b.js → yaml-frontmatter.312d62d5.js} +1 -1
  360. package/dist/assets/{yaml.d85fc2b2.js → yaml.71c2f2cd.js} +1 -1
  361. package/dist/assets/{z80.2bbe85a7.js → z80.e076e688.js} +1 -1
  362. package/dist/assets/zh-CN.d7b18680.js +1 -0
  363. package/dist/assets/zh-TW.4802ae81.js +1 -0
  364. package/dist/index.html +8 -8
  365. package/package.json +9 -7
  366. package/dist/assets/accounts.08433099.js +0 -1
  367. package/dist/assets/activity-log.496fa2f2.css +0 -1
  368. package/dist/assets/activity-log.fd558c9b.js +0 -1
  369. package/dist/assets/activity.0def80ca.js +0 -80
  370. package/dist/assets/ar-SA.1a6c2c65.js +0 -1
  371. package/dist/assets/architecture.6e6f13a7.js +0 -1
  372. package/dist/assets/authentication.a6f04750.js +0 -73
  373. package/dist/assets/aws.3b1c64af.js +0 -1
  374. package/dist/assets/backing-directus.0003d237.js +0 -1
  375. package/dist/assets/bg-BG.749c86ae.js +0 -1
  376. package/dist/assets/bn-IN.1385676c.js +0 -1
  377. package/dist/assets/cli.5153aa86.js +0 -4
  378. package/dist/assets/cli.e8e2526b.js +0 -19
  379. package/dist/assets/cloudron.53c430b8.js +0 -1
  380. package/dist/assets/codebase-overview.e9df94fc.js +0 -1
  381. package/dist/assets/collections.2453db3a.js +0 -106
  382. package/dist/assets/collections.aa896b3f.js +0 -2
  383. package/dist/assets/config-options.b1233b4b.js +0 -138
  384. package/dist/assets/content.1b1e95cf.js +0 -1
  385. package/dist/assets/creating-extensions.bfd7c57c.js +0 -11
  386. package/dist/assets/cs-CZ.6910228b.js +0 -1
  387. package/dist/assets/data-model.0e360572.js +0 -1
  388. package/dist/assets/data-sharing.da96e52e.js +0 -1
  389. package/dist/assets/de-DE.a4271e4f.js +0 -1
  390. package/dist/assets/digitalocean-app-platform.3412cb40.js +0 -3
  391. package/dist/assets/display-templates.915c0c5b.js +0 -1
  392. package/dist/assets/displays.99989c6d.js +0 -49
  393. package/dist/assets/documentation.788d4998.js +0 -1
  394. package/dist/assets/email-templates.1f5ac335.js +0 -2
  395. package/dist/assets/endpoints.aaac7c81.js +0 -27
  396. package/dist/assets/es-419.aa0bf259.js +0 -1
  397. package/dist/assets/es-CL.e42c6c3c.js +0 -1
  398. package/dist/assets/es-ES.5c7e9438.js +0 -1
  399. package/dist/assets/es-MX.b9c72674.js +0 -1
  400. package/dist/assets/extensions.34c12005.js +0 -12
  401. package/dist/assets/faq.89e68608.js +0 -2
  402. package/dist/assets/fields.54985585.js +0 -135
  403. package/dist/assets/file-library.b55c53fe.js +0 -1
  404. package/dist/assets/files.064d5a35.js +0 -187
  405. package/dist/assets/filter-rules.aec0af01.js +0 -76
  406. package/dist/assets/filters.3db1b044.js +0 -1
  407. package/dist/assets/flows.3ea1b90f.js +0 -15
  408. package/dist/assets/gcp.627205b5.js +0 -60
  409. package/dist/assets/github-ci.abd39dcc.js +0 -2
  410. package/dist/assets/glossary.312e2401.js +0 -1
  411. package/dist/assets/glossary.75ca2027.js +0 -1
  412. package/dist/assets/hooks.eda18b02.js +0 -60
  413. package/dist/assets/id-ID.a0052c00.js +0 -1
  414. package/dist/assets/import-export.3da878a4.js +0 -2
  415. package/dist/assets/index.133de9ba.entry.js +0 -3406
  416. package/dist/assets/index.ef58525d.css +0 -1
  417. package/dist/assets/insights.c8ed7c1c.js +0 -1
  418. package/dist/assets/installation.78c6d9f6.js +0 -1
  419. package/dist/assets/interfaces.9e145c45.js +0 -46
  420. package/dist/assets/introduction.78a2a844.js +0 -4
  421. package/dist/assets/introduction.8a589eb0.js +0 -1
  422. package/dist/assets/introduction.fd7c08ac.js +0 -1
  423. package/dist/assets/it-IT.7b7f58ec.js +0 -1
  424. package/dist/assets/items.64ed9295.js +0 -1
  425. package/dist/assets/ja-JP.819a38cf.js +0 -1
  426. package/dist/assets/layouts.3c14b583.js +0 -54
  427. package/dist/assets/layouts.ca8afd39.js +0 -1
  428. package/dist/assets/localization.374b7427.js +0 -1
  429. package/dist/assets/manual.ab601c95.js +0 -10
  430. package/dist/assets/migrations.8989fedc.js +0 -19
  431. package/dist/assets/modules.17c944d1.js +0 -69
  432. package/dist/assets/notifications.33c688c9.js +0 -153
  433. package/dist/assets/operations.50a08aae.js +0 -1
  434. package/dist/assets/overview.3436365c.js +0 -1
  435. package/dist/assets/overview.623fafba.js +0 -1
  436. package/dist/assets/overview.dbebe94a.js +0 -1
  437. package/dist/assets/panels.385b173a.js +0 -65
  438. package/dist/assets/pl-PL.7e448fa9.js +0 -1
  439. package/dist/assets/plesk.f7e3d5ef.js +0 -27
  440. package/dist/assets/presets-bookmarks.1b8ec70c.js +0 -1
  441. package/dist/assets/project-settings.d32669a9.js +0 -1
  442. package/dist/assets/projects.bb50c3df.js +0 -1
  443. package/dist/assets/pt-BR.2d6fa7cc.js +0 -1
  444. package/dist/assets/query.dbe0b56d.js +0 -152
  445. package/dist/assets/quickstart.01824cc9.js +0 -9
  446. package/dist/assets/quickstart.4d7c7736.js +0 -20
  447. package/dist/assets/relations.d29aa86d.js +0 -115
  448. package/dist/assets/relationships.c9c5db8a.js +0 -55
  449. package/dist/assets/resources.00028bf0.js +0 -1
  450. package/dist/assets/revisions.2898106e.js +0 -40
  451. package/dist/assets/roles.9fec37da.js +0 -171
  452. package/dist/assets/running-locally.811d0dcc.js +0 -26
  453. package/dist/assets/security.8e2a8a41.js +0 -1
  454. package/dist/assets/settings.149d1dff.js +0 -1
  455. package/dist/assets/settings.28abc1f0.js +0 -51
  456. package/dist/assets/sso.64b2717b.js +0 -22
  457. package/dist/assets/support.94e3734b.js +0 -1
  458. package/dist/assets/teams.9ff14f8f.js +0 -1
  459. package/dist/assets/themes.df7ec485.js +0 -5
  460. package/dist/assets/translations.5191ab7c.js +0 -1
  461. package/dist/assets/triggers.1f1ace5f.js +0 -1
  462. package/dist/assets/ubuntu.f4c21886.js +0 -11
  463. package/dist/assets/uk-UA.473dd1c9.js +0 -1
  464. package/dist/assets/upgrades-migrations.15498a47.js +0 -1
  465. package/dist/assets/user-directory.47c8beb2.js +0 -1
  466. package/dist/assets/users-roles-permissions.005388fa.js +0 -1
  467. package/dist/assets/users.84251ab9.js +0 -252
  468. package/dist/assets/webhooks.61b11e7d.js +0 -1
  469. package/dist/assets/zh-CN.c51e7308.js +0 -1
  470. package/dist/assets/zh-TW.8ef6cec8.js +0 -1
@@ -1,171 +0,0 @@
1
- import{a as r,o as h,b as d,w as a,g as s,e as t,B as e}from"./runtime-core.esm-bundler.b1f35d24.js";var n={};const i={class:"markdown-body"},p={class:"two-up"},u={class:"left"},_=e("Roles define a specific set of access permissions, and are the primary organizational structure for Users within the platform. "),f=e("Learn more about Roles"),m=e("."),g=s("div",{class:"right"},[s("p",null,[s("div",{class:"table-of-contents"},[s("ul",null,[s("li",null,[s("a",{href:"#the-role-object"},"The Role Object")]),s("li",null,[s("a",{href:"#list-roles"},"List Roles")]),s("li",null,[s("a",{href:"#retrieve-a-role"},"Retrieve a Role")]),s("li",null,[s("a",{href:"#create-a-role"},"Create a Role")]),s("li",null,[s("a",{href:"#create-multiple-roles"},"Create Multiple Roles")]),s("li",null,[s("a",{href:"#update-a-role"},"Update a Role")]),s("li",null,[s("a",{href:"#update-multiple-roles"},"Update Multiple Roles")]),s("li",null,[s("a",{href:"#delete-a-role"},"Delete a Role")]),s("li",null,[s("a",{href:"#delete-multiple-roles"},"Delete Multiple Roles")])])])])],-1),j=s("hr",null,null,-1),y=s("h2",{id:"the-role-object"},[e("The Role Object "),s("a",{class:"header-anchor",href:"#the-role-object"},"#")],-1),b={class:"two-up"},q={class:"left"},x={class:"definitions"},v=s("p",null,[s("code",{class:""},"id"),e(),s("strong",null,"uuid"),s("br"),e(" Primary key of the role.")],-1),R=s("p",null,[s("code",{class:""},"name"),e(),s("strong",null,"string"),s("br"),e(" Name of the role.")],-1),E=s("p",null,[s("code",{class:""},"icon"),e(),s("strong",null,"string"),s("br"),e(" Icon for the role. Displayed in the Admin App.")],-1),w=s("p",null,[s("code",{class:""},"description"),e(),s("strong",null,"string"),s("br"),e(" Description for the role. Displayed in the Admin App.")],-1),T=s("p",null,[s("code",{class:""},"ip_access"),e(),s("strong",null,"csv"),s("br"),e(" CSV of IP addresses that have access to this role. Allows you to configure an allowlist of IP addresses.")],-1),P=s("p",null,[s("code",{class:""},"enforce_tfa"),e(),s("strong",null,"boolean"),s("br"),e(" Whether or not Two-Factor Authentication is required for users in this role.")],-1),k=s("p",null,[s("code",{class:""},"admin_access"),e(),s("strong",null,"boolean"),s("br"),e(" If this role is considered an admin role. This means that users in this role have full permissions to everything.")],-1),A=s("p",null,[s("code",{class:""},"app_access"),e(),s("strong",null,"boolean"),s("br"),e(" Whether or not users in this role have access to use the Admin App.")],-1),S=s("code",{class:""},"users",-1),I=e(),C=s("strong",null,"one-to-many",-1),D=s("br",null,null,-1),L=e(" The users in this role. One-to-many to "),Q=e("users"),O=e("."),M=s("div",{class:"right"},[s("pre",null,[s("code",{class:"language-json"},[e(`{
2
- `),s("span",{class:"hljs-attr"},'"id"'),e(": "),s("span",{class:"hljs-string"},'"653925a9-970e-487a-bfc0-ab6c96affcdc"'),e(`,
3
- `),s("span",{class:"hljs-attr"},'"name"'),e(": "),s("span",{class:"hljs-string"},'"Admin"'),e(`,
4
- `),s("span",{class:"hljs-attr"},'"icon"'),e(": "),s("span",{class:"hljs-string"},'"supervised_user_circle"'),e(`,
5
- `),s("span",{class:"hljs-attr"},'"description"'),e(": "),s("span",{class:"hljs-literal"},"null"),e(`,
6
- `),s("span",{class:"hljs-attr"},'"ip_access"'),e(": "),s("span",{class:"hljs-literal"},"null"),e(`,
7
- `),s("span",{class:"hljs-attr"},'"enforce_tfa"'),e(": "),s("span",{class:"hljs-literal"},"false"),e(`,
8
- `),s("span",{class:"hljs-attr"},'"admin_access"'),e(": "),s("span",{class:"hljs-literal"},"true"),e(`,
9
- `),s("span",{class:"hljs-attr"},'"app_access"'),e(": "),s("span",{class:"hljs-literal"},"true"),e(`,
10
- `),s("span",{class:"hljs-attr"},'"users"'),e(": ["),s("span",{class:"hljs-string"},'"0bc7b36a-9ba9-4ce0-83f0-0a526f354e07"'),e(`]
11
- }
12
- `)])])],-1),G=s("hr",null,null,-1),B=s("h2",{id:"list-roles"},[e("List Roles "),s("a",{class:"header-anchor",href:"#list-roles"},"#")],-1),U=s("p",null,"List all roles that exist in Directus.",-1),H={class:"two-up"},N={class:"left"},V=s("h3",{id:"query-parameters"},[e("Query Parameters "),s("a",{class:"header-anchor",href:"#query-parameters"},"#")],-1),W=e("Supports all "),z=e("global query parameters"),F=e("."),J=s("h3",{id:"returns"},[e("Returns "),s("a",{class:"header-anchor",href:"#returns"},"#")],-1),K=e("An array of up to "),X=e("limit"),Y=e(),Z=s("a",{href:"#the-role-object"},"role objects",-1),$=e(". If no items are available, data will be an empty array."),ss={class:"right"},es=s("h3",{id:"rest-api"},[e("REST API "),s("a",{class:"header-anchor",href:"#rest-api"},"#")],-1),as=s("pre",null,[s("code",{class:""},`GET /roles
13
- SEARCH /roles
14
- `)],-1),ls=e("Learn more about SEARCH ->"),ts=s("h3",{id:"graphql"},[e("GraphQL "),s("a",{class:"header-anchor",href:"#graphql"},"#")],-1),rs=s("pre",null,[s("code",{class:""},`POST /graphql/system
15
- `)],-1),ns=s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"type"),s("span",{class:"hljs-type"}," Query"),e(` {
16
- roles: [directus_roles]
17
- }
18
- `)])],-1),os=s("h5",{id:"example"},[e("Example "),s("a",{class:"header-anchor",href:"#example"},"#")],-1),cs=s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"query"),e(` {
19
- roles {
20
- id
21
- name
22
- users {
23
- email
24
- }
25
- }
26
- }
27
- `)])],-1),hs=s("hr",null,null,-1),ds=s("h2",{id:"retrieve-a-role"},[e("Retrieve a Role "),s("a",{class:"header-anchor",href:"#retrieve-a-role"},"#")],-1),is=s("p",null,"List an existing role by primary key.",-1),ps={class:"two-up"},us={class:"left"},_s=s("h3",{id:"query-parameters-2"},[e("Query Parameters "),s("a",{class:"header-anchor",href:"#query-parameters-2"},"#")],-1),fs=e("Supports all "),ms=e("global query parameters"),gs=e("."),js=s("h3",{id:"returns-2"},[e("Returns "),s("a",{class:"header-anchor",href:"#returns-2"},"#")],-1),ys=s("p",null,[e("Returns the requested "),s("a",{href:"#the-role-object"},"role object"),e(".")],-1),bs=s("div",{class:"right"},[s("h3",{id:"rest-api-2"},[e("REST API "),s("a",{class:"header-anchor",href:"#rest-api-2"},"#")]),s("pre",null,[s("code",{class:""},`GET /roles/:id
28
- `)]),s("h5",{id:"example-2"},[e("Example "),s("a",{class:"header-anchor",href:"#example-2"},"#")]),s("pre",null,[s("code",{class:""},`GET /roles/b4cb3b64-8580-4ad9-a099-eade6da24302
29
- `)]),s("h3",{id:"graphql-2"},[e("GraphQL "),s("a",{class:"header-anchor",href:"#graphql-2"},"#")]),s("pre",null,[s("code",{class:""},`POST /graphql/system
30
- `)]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"type"),s("span",{class:"hljs-type"}," Query"),e(` {
31
- roles_by_id(id:`),s("span",{class:"hljs-literal"}," ID"),e(`!): directus_roles
32
- }
33
- `)])]),s("h5",{id:"example-3"},[e("Example "),s("a",{class:"header-anchor",href:"#example-3"},"#")]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"query"),e(` {
34
- roles_by_id(id: `),s("span",{class:"hljs-number"},"2"),e(`) {
35
- id
36
- name
37
- users {
38
- email
39
- }
40
- }
41
- }
42
- `)])])],-1),qs=s("hr",null,null,-1),xs=s("h2",{id:"create-a-role"},[e("Create a Role "),s("a",{class:"header-anchor",href:"#create-a-role"},"#")],-1),vs=s("p",null,"Create a new role.",-1),Rs={class:"two-up"},Es={class:"left"},ws=s("h3",{id:"query-parameters-3"},[e("Query Parameters "),s("a",{class:"header-anchor",href:"#query-parameters-3"},"#")],-1),Ts=e("Supports all "),Ps=e("global query parameters"),ks=e("."),As=s("h3",{id:"request-body"},[e("Request Body "),s("a",{class:"header-anchor",href:"#request-body"},"#")],-1),Ss=s("p",null,[e("A partial "),s("a",{href:"#the-role-object"},"role object"),e(".")],-1),Is=s("h3",{id:"returns-3"},[e("Returns "),s("a",{class:"header-anchor",href:"#returns-3"},"#")],-1),Cs=s("p",null,[e("Returns the "),s("a",{href:"#the-role-object"},"role object"),e(" for the created role.")],-1),Ds=s("div",{class:"right"},[s("h3",{id:"rest-api-3"},[e("REST API "),s("a",{class:"header-anchor",href:"#rest-api-3"},"#")]),s("pre",null,[s("code",{class:""},`POST /roles
43
- `)]),s("h5",{id:"example-4"},[e("Example "),s("a",{class:"header-anchor",href:"#example-4"},"#")]),s("pre",null,[s("code",{class:"language-json"},[s("span",{class:"hljs-comment"},"// POST /roles"),e(`
44
-
45
- {
46
- `),s("span",{class:"hljs-attr"},'"name"'),e(": "),s("span",{class:"hljs-string"},'"Interns"'),e(`,
47
- `),s("span",{class:"hljs-attr"},'"icon"'),e(": "),s("span",{class:"hljs-string"},'"verified_user"'),e(`,
48
- `),s("span",{class:"hljs-attr"},'"description"'),e(": "),s("span",{class:"hljs-literal"},"null"),e(`,
49
- `),s("span",{class:"hljs-attr"},'"admin_access"'),e(": "),s("span",{class:"hljs-literal"},"false"),e(`,
50
- `),s("span",{class:"hljs-attr"},'"app_access"'),e(": "),s("span",{class:"hljs-literal"},"true"),e(`
51
- }
52
- `)])]),s("h3",{id:"graphql-3"},[e("GraphQL "),s("a",{class:"header-anchor",href:"#graphql-3"},"#")]),s("pre",null,[s("code",{class:""},`POST /graphql/system
53
- `)]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"type"),s("span",{class:"hljs-type"}," Mutation"),e(` {
54
- create_roles_item(data: create_directus_roles_input!): directus_roles
55
- }
56
- `)])]),s("h5",{id:"example-5"},[e("Example "),s("a",{class:"header-anchor",href:"#example-5"},"#")]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"mutation"),e(` {
57
- create_roles_item(
58
- data: { name: `),s("span",{class:"hljs-string"},'"Interns"'),e(", icon: "),s("span",{class:"hljs-string"},'"verified_user"'),e(", description: "),s("span",{class:"hljs-literal"},"null"),e(", admin_access: "),s("span",{class:"hljs-literal"},"false"),e(", app_access: "),s("span",{class:"hljs-literal"},"true"),e(` }
59
- ) {
60
- id
61
- name
62
- users {
63
- email
64
- }
65
- }
66
- }
67
- `)])])],-1),Ls=s("hr",null,null,-1),Qs=s("h2",{id:"create-multiple-roles"},[e("Create Multiple Roles "),s("a",{class:"header-anchor",href:"#create-multiple-roles"},"#")],-1),Os=s("p",null,"Create multiple new roles.",-1),Ms={class:"two-up"},Gs={class:"left"},Bs=s("h3",{id:"query-parameters-4"},[e("Query Parameters "),s("a",{class:"header-anchor",href:"#query-parameters-4"},"#")],-1),Us=e("Supports all "),Hs=e("global query parameters"),Ns=e("."),Vs=s("h3",{id:"request-body-2"},[e("Request Body "),s("a",{class:"header-anchor",href:"#request-body-2"},"#")],-1),Ws=s("p",null,[e("An array of partial "),s("a",{href:"#the-role-object"},"role objects"),e(".")],-1),zs=s("h3",{id:"returns-4"},[e("Returns "),s("a",{class:"header-anchor",href:"#returns-4"},"#")],-1),Fs=s("p",null,[e("Returns the "),s("a",{href:"#the-role-object"},"role objects"),e(" for the created roles.")],-1),Js=s("div",{class:"right"},[s("h3",{id:"rest-api-4"},[e("REST API "),s("a",{class:"header-anchor",href:"#rest-api-4"},"#")]),s("pre",null,[s("code",{class:""},`POST /roles
68
- `)]),s("h5",{id:"example-6"},[e("Example "),s("a",{class:"header-anchor",href:"#example-6"},"#")]),s("pre",null,[s("code",{class:"language-json"},[s("span",{class:"hljs-comment"},"// POST /roles"),e(`
69
-
70
- [
71
- {
72
- `),s("span",{class:"hljs-attr"},'"name"'),e(": "),s("span",{class:"hljs-string"},'"Interns"'),e(`,
73
- `),s("span",{class:"hljs-attr"},'"icon"'),e(": "),s("span",{class:"hljs-string"},'"verified_user"'),e(`,
74
- `),s("span",{class:"hljs-attr"},'"description"'),e(": "),s("span",{class:"hljs-literal"},"null"),e(`,
75
- `),s("span",{class:"hljs-attr"},'"admin_access"'),e(": "),s("span",{class:"hljs-literal"},"false"),e(`,
76
- `),s("span",{class:"hljs-attr"},'"app_access"'),e(": "),s("span",{class:"hljs-literal"},"true"),e(`
77
- },
78
- {
79
- `),s("span",{class:"hljs-attr"},'"name"'),e(": "),s("span",{class:"hljs-string"},'"Customers"'),e(`,
80
- `),s("span",{class:"hljs-attr"},'"icon"'),e(": "),s("span",{class:"hljs-string"},'"person"'),e(`,
81
- `),s("span",{class:"hljs-attr"},'"description"'),e(": "),s("span",{class:"hljs-literal"},"null"),e(`,
82
- `),s("span",{class:"hljs-attr"},'"admin_access"'),e(": "),s("span",{class:"hljs-literal"},"false"),e(`,
83
- `),s("span",{class:"hljs-attr"},'"app_access"'),e(": "),s("span",{class:"hljs-literal"},"false"),e(`
84
- }
85
- ]
86
- `)])]),s("h3",{id:"graphql-4"},[e("GraphQL "),s("a",{class:"header-anchor",href:"#graphql-4"},"#")]),s("pre",null,[s("code",{class:""},`POST /graphql/system
87
- `)]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"type"),s("span",{class:"hljs-type"}," Mutation"),e(` {
88
- create_roles_items(data: [create_directus_roles_input!]!): [directus_roles]
89
- }
90
- `)])]),s("h5",{id:"example-7"},[e("Example "),s("a",{class:"header-anchor",href:"#example-7"},"#")]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"mutation"),e(` {
91
- create_roles_items(
92
- data: [
93
- { name: `),s("span",{class:"hljs-string"},'"Interns"'),e(", icon: "),s("span",{class:"hljs-string"},'"verified_user"'),e(", description: "),s("span",{class:"hljs-literal"},"null"),e(", admin_access: "),s("span",{class:"hljs-literal"},"false"),e(", app_access: "),s("span",{class:"hljs-literal"},"true"),e(` }
94
- { name: `),s("span",{class:"hljs-string"},'"Customers"'),e(", icon: "),s("span",{class:"hljs-string"},'"person"'),e(", description: "),s("span",{class:"hljs-literal"},"null"),e(", admin_access: "),s("span",{class:"hljs-literal"},"false"),e(", app_access: "),s("span",{class:"hljs-literal"},"false"),e(` }
95
- ]
96
- ) {
97
- id
98
- name
99
- users {
100
- email
101
- }
102
- }
103
- }
104
- `)])])],-1),Ks=s("hr",null,null,-1),Xs=s("h2",{id:"update-a-role"},[e("Update a Role "),s("a",{class:"header-anchor",href:"#update-a-role"},"#")],-1),Ys=s("p",null,"Update an existing role.",-1),Zs={class:"two-up"},$s={class:"left"},se=s("h3",{id:"query-parameters-5"},[e("Query Parameters "),s("a",{class:"header-anchor",href:"#query-parameters-5"},"#")],-1),ee=e("Supports all "),ae=e("global query parameters"),le=e("."),te=s("h3",{id:"request-body-3"},[e("Request Body "),s("a",{class:"header-anchor",href:"#request-body-3"},"#")],-1),re=s("p",null,[e("A partial "),s("a",{href:"#the-role-object"},"role object"),e(".")],-1),ne=s("h3",{id:"returns-5"},[e("Returns "),s("a",{class:"header-anchor",href:"#returns-5"},"#")],-1),oe=s("p",null,[e("Returns the "),s("a",{href:"#the-role-object"},"role object"),e(" for the updated role.")],-1),ce=s("div",{class:"right"},[s("h3",{id:"rest-api-5"},[e("REST API "),s("a",{class:"header-anchor",href:"#rest-api-5"},"#")]),s("pre",null,[s("code",{class:""},`PATCH /roles/:id
105
- `)]),s("h5",{id:"example-8"},[e("Example "),s("a",{class:"header-anchor",href:"#example-8"},"#")]),s("pre",null,[s("code",{class:"language-json"},[s("span",{class:"hljs-comment"},"// PATCH /roles/c86c2761-65d3-43c3-897f-6f74ad6a5bd7"),e(`
106
-
107
- {
108
- `),s("span",{class:"hljs-attr"},'"icon"'),e(": "),s("span",{class:"hljs-string"},'"attractions"'),e(`
109
- }
110
- `)])]),s("h3",{id:"graphql-5"},[e("GraphQL "),s("a",{class:"header-anchor",href:"#graphql-5"},"#")]),s("pre",null,[s("code",{class:""},`POST /graphql/system
111
- `)]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"type"),s("span",{class:"hljs-type"}," Mutation"),e(` {
112
- update_roles_item(id:`),s("span",{class:"hljs-literal"}," ID"),e(`!, data: update_directus_roles_input): directus_roles
113
- }
114
- `)])]),s("h5",{id:"example-9"},[e("Example "),s("a",{class:"header-anchor",href:"#example-9"},"#")]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"mutation"),e(` {
115
- update_roles_item(id: `),s("span",{class:"hljs-string"},'"c86c2761-65d3-43c3-897f-6f74ad6a5bd7"'),e(", data: { icon: "),s("span",{class:"hljs-string"},'"attractions"'),e(` }) {
116
- id
117
- name
118
- users {
119
- email
120
- }
121
- }
122
- }
123
- `)])])],-1),he=s("hr",null,null,-1),de=s("h2",{id:"update-multiple-roles"},[e("Update Multiple Roles "),s("a",{class:"header-anchor",href:"#update-multiple-roles"},"#")],-1),ie=s("p",null,"Update multiple existing roles.",-1),pe={class:"two-up"},ue={class:"left"},_e=s("h3",{id:"query-parameters-6"},[e("Query Parameters "),s("a",{class:"header-anchor",href:"#query-parameters-6"},"#")],-1),fe=e("Supports all "),me=e("global query parameters"),ge=e("."),je=s("h3",{id:"request-body-4"},[e("Request Body "),s("a",{class:"header-anchor",href:"#request-body-4"},"#")],-1),ye=s("div",{class:"definitions"},[s("p",null,[s("code",{class:""},"keys"),e(),s("strong",null,"Required"),s("br"),e(" Array of primary keys of the roles you\u2019d like to update.")]),s("p",null,[s("code",{class:""},"data"),e(),s("strong",null,"Required"),s("br"),e(" Any of "),s("a",{href:"#the-role-object"},"the role object"),e("\u2019s properties.")])],-1),be=s("h3",{id:"returns-6"},[e("Returns "),s("a",{class:"header-anchor",href:"#returns-6"},"#")],-1),qe=s("p",null,[e("Returns the "),s("a",{href:"#the-role-object"},"role objects"),e(" for the updated roles.")],-1),xe=s("div",{class:"right"},[s("h3",{id:"rest-api-6"},[e("REST API "),s("a",{class:"header-anchor",href:"#rest-api-6"},"#")]),s("pre",null,[s("code",{class:""},`PATCH /roles
124
- `)]),s("h5",{id:"example-10"},[e("Example "),s("a",{class:"header-anchor",href:"#example-10"},"#")]),s("pre",null,[s("code",{class:"language-json"},[s("span",{class:"hljs-comment"},"// PATCH /roles"),e(`
125
-
126
- {
127
- `),s("span",{class:"hljs-attr"},'"keys"'),e(": ["),s("span",{class:"hljs-string"},'"c86c2761-65d3-43c3-897f-6f74ad6a5bd7"'),e(", "),s("span",{class:"hljs-string"},'"6fc3d5d3-a37b-4da8-a2f4-ed62ad5abe03"'),e(`],
128
- `),s("span",{class:"hljs-attr"},'"data"'),e(`: {
129
- `),s("span",{class:"hljs-attr"},'"icon"'),e(": "),s("span",{class:"hljs-string"},'"attractions"'),e(`
130
- }
131
- }
132
- `)])]),s("h3",{id:"graphql-6"},[e("GraphQL "),s("a",{class:"header-anchor",href:"#graphql-6"},"#")]),s("pre",null,[s("code",{class:""},`POST /graphql/system
133
- `)]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"type"),s("span",{class:"hljs-type"}," Mutation"),e(` {
134
- update_roles_items(ids: `),s("span",{class:"hljs-literal"},"[ID"),e(`!]!, data: update_directus_roles_input): [directus_roles]
135
- }
136
- `)])]),s("h5",{id:"example-11"},[e("Example "),s("a",{class:"header-anchor",href:"#example-11"},"#")]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"mutation"),e(` {
137
- update_roles_items(
138
- ids: [`),s("span",{class:"hljs-string"},'"c86c2761-65d3-43c3-897f-6f74ad6a5bd7"'),e(", "),s("span",{class:"hljs-string"},'"6fc3d5d3-a37b-4da8-a2f4-ed62ad5abe03"'),e(`]
139
- data: { icon: `),s("span",{class:"hljs-string"},'"attractions"'),e(` }
140
- ) {
141
- id
142
- name
143
- users {
144
- email
145
- }
146
- }
147
- }
148
- `)])])],-1),ve=s("hr",null,null,-1),Re=s("h2",{id:"delete-a-role"},[e("Delete a Role "),s("a",{class:"header-anchor",href:"#delete-a-role"},"#")],-1),Ee=s("p",null,"Delete an existing role.",-1),we=s("div",{class:"two-up"},[s("div",{class:"left"},[s("h3",{id:"returns-7"},[e("Returns "),s("a",{class:"header-anchor",href:"#returns-7"},"#")]),s("p",null,"Empty body.")]),s("div",{class:"right"},[s("h3",{id:"rest-api-7"},[e("REST API "),s("a",{class:"header-anchor",href:"#rest-api-7"},"#")]),s("pre",null,[s("code",{class:""},`DELETE /roles/:id
149
- `)]),s("h5",{id:"example-12"},[e("Example "),s("a",{class:"header-anchor",href:"#example-12"},"#")]),s("pre",null,[s("code",{class:""},`DELETE /roles/c86c2761-65d3-43c3-897f-6f74ad6a5bd7
150
- `)]),s("h3",{id:"graphql-7"},[e("GraphQL "),s("a",{class:"header-anchor",href:"#graphql-7"},"#")]),s("pre",null,[s("code",{class:""},`POST /graphql/system
151
- `)]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"type"),s("span",{class:"hljs-type"}," Mutation"),e(` {
152
- delete_roles_item(id:`),s("span",{class:"hljs-literal"}," ID"),e(`!): delete_one
153
- }
154
- `)])]),s("h5",{id:"example-13"},[e("Example "),s("a",{class:"header-anchor",href:"#example-13"},"#")]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"mutation"),e(` {
155
- delete_roles_item(id: `),s("span",{class:"hljs-string"},'"c86c2761-65d3-43c3-897f-6f74ad6a5bd7"'),e(`) {
156
- id
157
- }
158
- }
159
- `)])])])],-1),Te=s("hr",null,null,-1),Pe=s("h2",{id:"delete-multiple-roles"},[e("Delete Multiple Roles "),s("a",{class:"header-anchor",href:"#delete-multiple-roles"},"#")],-1),ke=s("p",null,"Delete multiple existing roles.",-1),Ae=s("div",{class:"two-up"},[s("div",{class:"left"},[s("h3",{id:"request-body-5"},[e("Request Body "),s("a",{class:"header-anchor",href:"#request-body-5"},"#")]),s("p",null,"An array of role primary keys"),s("h3",{id:"returns-8"},[e("Returns "),s("a",{class:"header-anchor",href:"#returns-8"},"#")]),s("p",null,"Empty body.")]),s("div",{class:"right"},[s("h3",{id:"rest-api-8"},[e("REST API "),s("a",{class:"header-anchor",href:"#rest-api-8"},"#")]),s("pre",null,[s("code",{class:""},`DELETE /roles
160
- `)]),s("h5",{id:"example-14"},[e("Example "),s("a",{class:"header-anchor",href:"#example-14"},"#")]),s("pre",null,[s("code",{class:"language-json"},[s("span",{class:"hljs-comment"},"// DELETE /roles"),e(`
161
- [`),s("span",{class:"hljs-string"},'"653925a9-970e-487a-bfc0-ab6c96affcdc"'),e(", "),s("span",{class:"hljs-string"},'"c86c2761-65d3-43c3-897f-6f74ad6a5bd7"'),e(`]
162
- `)])]),s("h3",{id:"graphql-8"},[e("GraphQL "),s("a",{class:"header-anchor",href:"#graphql-8"},"#")]),s("pre",null,[s("code",{class:""},`POST /graphql/system
163
- `)]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"type"),s("span",{class:"hljs-type"}," Mutation"),e(` {
164
- delete_roles_items(ids: `),s("span",{class:"hljs-literal"},"[ID"),e(`!]!): delete_many
165
- }
166
- `)])]),s("h5",{id:"example-15"},[e("Example "),s("a",{class:"header-anchor",href:"#example-15"},"#")]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"mutation"),e(` {
167
- delete_roles_items(ids: [`),s("span",{class:"hljs-string"},'"653925a9-970e-487a-bfc0-ab6c96affcdc"'),e(", "),s("span",{class:"hljs-string"},'"c86c2761-65d3-43c3-897f-6f74ad6a5bd7"'),e(`]) {
168
- ids
169
- }
170
- }
171
- `)])])])],-1),Se=s("hr",null,null,-1),Ie={title:"Roles",modularExtension:!1,pageClass:"page-reference"},Ce={name:"roles",setup(De,{expose:o}){return o({frontmatter:{title:"Roles",modularExtension:!1,pageClass:"page-reference"}}),(Le,Qe)=>{const l=r("router-link"),c=r("docswrapper");return h(),d(c,{frontmatter:Ie},{default:a(()=>[s("div",i,[s("div",p,[s("div",u,[s("blockquote",null,[s("p",null,[_,t(l,{to:"/docs/getting-started/glossary/#roles"},{default:a(()=>[f]),_:1}),m])])]),g]),j,y,s("div",b,[s("div",q,[s("div",x,[v,R,E,w,T,P,k,A,s("p",null,[S,I,C,D,L,t(l,{to:"/docs/reference/system/users/"},{default:a(()=>[Q]),_:1}),O])])]),M]),G,B,U,s("div",H,[s("div",N,[V,s("p",null,[W,t(l,{to:"/docs/reference/query"},{default:a(()=>[z]),_:1}),F]),J,s("p",null,[K,t(l,{to:"/docs/reference/query/#limit"},{default:a(()=>[X]),_:1}),Y,Z,$])]),s("div",ss,[es,as,s("p",null,[t(l,{to:"/docs/reference/introduction/#search-http-method"},{default:a(()=>[ls]),_:1})]),ts,rs,ns,os,cs])]),hs,ds,is,s("div",ps,[s("div",us,[_s,s("p",null,[fs,t(l,{to:"/docs/reference/query"},{default:a(()=>[ms]),_:1}),gs]),js,ys]),bs]),qs,xs,vs,s("div",Rs,[s("div",Es,[ws,s("p",null,[Ts,t(l,{to:"/docs/reference/query"},{default:a(()=>[Ps]),_:1}),ks]),As,Ss,Is,Cs]),Ds]),Ls,Qs,Os,s("div",Ms,[s("div",Gs,[Bs,s("p",null,[Us,t(l,{to:"/docs/reference/query"},{default:a(()=>[Hs]),_:1}),Ns]),Vs,Ws,zs,Fs]),Js]),Ks,Xs,Ys,s("div",Zs,[s("div",$s,[se,s("p",null,[ee,t(l,{to:"/docs/reference/query"},{default:a(()=>[ae]),_:1}),le]),te,re,ne,oe]),ce]),he,de,ie,s("div",pe,[s("div",ue,[_e,s("p",null,[fe,t(l,{to:"/docs/reference/query"},{default:a(()=>[me]),_:1}),ge]),je,ye,be,qe]),xe]),ve,Re,Ee,we,Te,Pe,ke,Ae,Se])]),_:1})}}};typeof n=="function"&&n(Ce);export{Ce as default,Ie as frontmatter};
@@ -1,26 +0,0 @@
1
- import{a as s,o as c,b as h,w as n,g as e,e as a,B as t}from"./runtime-core.esm-bundler.b1f35d24.js";var r={};const u={class:"markdown-body"},d=t("This guide explains how to install the "),p=e("em",null,"Development",-1),_=t(" version of Directus locally so that you can work on the platform\u2019s source code. To install the "),m=e("em",null,"Production",-1),g=t(" version locally, please follow to our "),f=t("standard installation guides"),y=t("."),b=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Minimum Requirements"),e("p",null,[t("You will need to have "),e("a",{href:"https://nodejs.org/en/download/current/",target:"_blank",rel:"noopener noreferrer"},"the latest version of Node"),t(" to "),e("em",null,"build"),t(" a Development version of Directus.")]),e("p",null,[t("You can use the JavaScript tool manager "),e("a",{href:"https://volta.sh/",target:"_blank",rel:"noopener noreferrer"},"volta"),t(" to automatically install the current node and npm versions.")])],-1),v=e("h2",{id:"1.-fork-the-directus-repository"},[t("1. Fork the Directus repository "),e("a",{class:"header-anchor",href:"#1.-fork-the-directus-repository"},"#")],-1),k=e("p",null,[t("Go to the "),e("a",{href:"https://github.com/directus/directus",target:"_blank",rel:"noopener noreferrer"},"repository"),t(" and fork it to your GitHub account. A fork is your copy of the Directus repository. Forking the repository allows you to freely experiment with changes without affecting the original project.")],-1),w=e("h2",{id:"2.-clone-from-your-repository"},[t("2. Clone from your repository "),e("a",{class:"header-anchor",href:"#2.-clone-from-your-repository"},"#")],-1),j=e("pre",null,[e("code",{class:"language-bash"},[t("git "),e("span",{class:"hljs-built_in"},"clone"),t(` git@github.com:YOUR-USERNAME/directus.git
2
- `)])],-1),x=e("h2",{id:"3.-make-a-new-branch"},[t("3. Make a new branch "),e("a",{class:"header-anchor",href:"#3.-make-a-new-branch"},"#")],-1),T=e("pre",null,[e("code",{class:"language-bash"},`git checkout -b YOUR-BRANCH-NAME
3
- `)],-1),A=e("h2",{id:"4.-install-the-dependencies-and-build-the-project"},[t("4. Install the dependencies and build the project "),e("a",{class:"header-anchor",href:"#4.-install-the-dependencies-and-build-the-project"},"#")],-1),D=e("pre",null,[e("code",{class:"language-bash"},`npm install
4
- npm run build
5
- `)],-1),C=e("h2",{id:"5.-create-a-.env-file"},[t("5. Create a "),e("code",{class:""},".env"),t(" file "),e("a",{class:"header-anchor",href:"#5.-create-a-.env-file"},"#")],-1),R=e("p",null,[t("Create an "),e("code",{class:""},".env"),t(" file under the "),e("code",{class:""},"api"),t(" folder using vars from the online "),e("a",{href:"https://docs.directus.io/configuration/config-options/",target:"_blank",rel:"noopener noreferrer"},"config help")],-1),E=e("h2",{id:"6.-initialize-the-database"},[t("6. Initialize the database "),e("a",{class:"header-anchor",href:"#6.-initialize-the-database"},"#")],-1),F=e("p",null,"For this step, you\u2019ll need to already have a SQL database up-and-running, except if you\u2019re using the SQLite driver, which will create the database (file) for you.",-1),N=e("p",null,"To start the initialization run the following command:",-1),S=e("pre",null,[e("code",{class:"language-bash"},[e("span",{class:"hljs-comment"},"# From within the root of the project"),t(`
6
- npm run cli bootstrap
7
-
8
- `),e("span",{class:"hljs-comment"},"# For SQLite you need to run the command in the 'api' context (to ensure the database file is created in the right directory)"),t(`
9
- npm run cli bootstrap --workspace=api
10
- `)])],-1),B=e("p",null,"This will set-up the required tables for Directus and make sure all the migrations have run.",-1),L=e("h2",{id:"7.-start-the-development-server"},[t("7. Start the development server "),e("a",{class:"header-anchor",href:"#7.-start-the-development-server"},"#")],-1),I=e("p",null,[t("First you need to choose what packages you want to work on. Then, you should run the "),e("code",{class:""},"dev"),t(" script on that package. You can see their names and list of scripts in their related "),e("code",{class:""},"package.json"),t(". Example of running APP:")],-1),M=e("pre",null,[e("code",{class:"language-bash"},`npm run dev -w @directus/app
11
- `)],-1),Y=e("p",null,"If you want to work on multiple packages at once, you should create a new instance of your terminal for each package: Example of running Api, App:",-1),q=e("table",null,[e("tr",null,[e("th",null," Terminal 1 [Api] "),e("th",null," Terminal 2 [App] ")]),e("tr",null,[e("td",null,[e("pre",null,[e("code",{class:"language-bash"},`npm run dev -w directus
12
- `)])]),e("td",null,[e("pre",null,[e("code",{class:"language-bash"},`npm run dev -w @directus/app
13
- `)])])])],-1),z=e("hr",null,null,-1),H=e("p",null,[t("To work on the Documentation (public website version), you should navigate to the "),e("code",{class:""},"docs"),t(" directory and run the following command:")],-1),G=e("pre",null,[e("code",{class:"language-bash"},`npm install
14
- `)],-1),P=e("p",null,[e("sup",null,"\u2139 This is necessary because the way vue-server-renderer imports vue")],-1),Q=e("p",null,"Then you should run",-1),U=e("pre",null,[e("code",{class:"language-bash"},`npm run dev:site
15
- `)],-1),V=e("div",{class:"tip hint"},[e("p",null,"If you encounter errors during this installation process, make sure your node version meets the minimum requirements")],-1),O=e("h2",{id:"8.-make-your-fixes%2Fchanges"},[t("8. Make your fixes/changes "),e("a",{class:"header-anchor",href:"#8.-make-your-fixes%2Fchanges"},"#")],-1),J=t("At this point you are ready to start working on Directus! Before diving in however, it\u2019s worth reading through the introduction to "),W=t("Contributing"),K=t("."),X=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Debugging"),e("p",null,[t("Check our Wiki for a "),e("a",{href:"https://github.com/directus/directus/wiki/debugging",target:"_blank",rel:"noopener noreferrer"},"guide"),t(" on debugging the app and api.")])],-1),Z=e("h2",{id:"9.-running-tests"},[t("9. Running tests "),e("a",{class:"header-anchor",href:"#9.-running-tests"},"#")],-1),$=e("p",null,"Tests run automatically through GitHub Actions. However you may wish to run the tests locally especially when you write tests.",-1),ee=e("p",null,[t("Install "),e("a",{href:"https://docs.docker.com/get-docker/",target:"_blank",rel:"noopener noreferrer"},"Docker"),t(" and ensure that the service is running.")],-1),te=e("pre",null,[e("code",{class:"language-bash"},[e("span",{class:"hljs-comment"},"# Ensure that you are testing on the lastest codebase"),t(`
16
- npm run build
17
-
18
- `),e("span",{class:"hljs-comment"},"# Clean up in case you ran the tests before"),t(`
19
- docker compose -f tests/docker-compose.yml down -v
20
-
21
- `),e("span",{class:"hljs-comment"},"# Start the necessary containers"),t(`
22
- docker compose -f tests/docker-compose.yml up -d --`),e("span",{class:"hljs-built_in"},"wait"),t(`
23
-
24
- `),e("span",{class:"hljs-comment"},"# Run the tests"),t(`
25
- npm run `),e("span",{class:"hljs-built_in"},"test"),t(`:e2e
26
- `)])],-1),ne={title:"Running Locally",modularExtension:!1},oe={name:"running-locally",setup(se,{expose:i}){return i({frontmatter:{title:"Running Locally",modularExtension:!1}}),(ae,re)=>{const o=s("router-link"),l=s("docswrapper");return c(),h(l,{frontmatter:ne},{default:n(()=>[e("div",u,[e("blockquote",null,[e("p",null,[d,p,_,m,g,a(o,{to:"/docs/self-hosted/installation/"},{default:n(()=>[f]),_:1}),y])]),b,v,k,w,j,x,T,A,D,C,R,E,F,N,S,B,L,I,M,Y,q,z,H,G,P,Q,U,V,O,e("p",null,[J,a(o,{to:"/docs/contributing/introduction"},{default:n(()=>[W]),_:1}),K]),X,Z,$,ee,te])]),_:1})}}};typeof r=="function"&&r(oe);export{oe as default,ne as frontmatter};
@@ -1 +0,0 @@
1
- import{a as i,o as c,b as n,w as o,g as e,B as a}from"./runtime-core.esm-bundler.b1f35d24.js";var r={};const d=e("div",{class:"markdown-body"},[e("blockquote",null,[e("p",null,"TK")]),e("h2",{id:"https"},[a("HTTPS "),e("a",{class:"header-anchor",href:"#https"},"#")]),e("h2",{id:"password-salting%2Fhashing%2Falgorithm-%26-password-policy"},[a("Password Salting/Hashing/Algorithm & Password Policy "),e("a",{class:"header-anchor",href:"#password-salting%2Fhashing%2Falgorithm-%26-password-policy"},"#")]),e("h2",{id:"static-tokens"},[a("Static Tokens "),e("a",{class:"header-anchor",href:"#static-tokens"},"#")]),e("h2",{id:"encrypted-fields-%26-encrypted-database"},[a("Encrypted Fields & Encrypted Database "),e("a",{class:"header-anchor",href:"#encrypted-fields-%26-encrypted-database"},"#")]),e("h2",{id:"private-file-links"},[a("Private File Links "),e("a",{class:"header-anchor",href:"#private-file-links"},"#")]),e("h2",{id:"mfa-(required)-%26-sso"},[a("MFA (Required) & SSO "),e("a",{class:"header-anchor",href:"#mfa-(required)-%26-sso"},"#")]),e("h2",{id:"granular-access-control-%26-ip-white-listing-%26-app-access"},[a("Granular Access Control & IP WHite-Listing & App Access "),e("a",{class:"header-anchor",href:"#granular-access-control-%26-ip-white-listing-%26-app-access"},"#")]),e("h2",{id:"rate-limiting"},[a("Rate Limiting "),e("a",{class:"header-anchor",href:"#rate-limiting"},"#")]),e("h2",{id:"encrypted"},[a("Encrypted "),e("a",{class:"header-anchor",href:"#encrypted"},"#")]),e("h2",{id:"parameterized-database-queries"},[a("Parameterized Database Queries "),e("a",{class:"header-anchor",href:"#parameterized-database-queries"},"#")])],-1),l={title:"Security",modularExtension:!1},h={name:"security",setup(p,{expose:s}){return s({frontmatter:{title:"Security",modularExtension:!1}}),(f,u)=>{const t=i("docswrapper");return c(),n(t,{frontmatter:l},{default:o(()=>[d]),_:1})}}};typeof r=="function"&&r(h);export{h as default,l as frontmatter};
@@ -1 +0,0 @@
1
- import{a as i,o as d,b as c,w as o,g as t,e as n,B as e}from"./runtime-core.esm-bundler.b1f35d24.js";var r={};const u={class:"markdown-body"},_=t("blockquote",null,[t("p",null,"The Settings Module is where your entire Project is configured, making it the first place to go after installation. To maintain project safety and integrity, this module is only available to Administrators.")],-1),h=t("video",{autoplay:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/app-guide/settings/settings-20220308A/settings-20220308A.mp4",type:"video/mp4"})],-1),g=t("div",{class:"warning hint"},[t("div",{class:"hint-title"},"Administrators Only"),t("p",null,"Only Administrators have access to the Settings Module.")],-1),p=t("p",null,"Settings are split into five distinct sections, each described below.",-1),f=e("Project Settings"),m=e(" \u2014 Setup branding and other global style options."),b=e("Data Model"),y=e(" \u2014 Create and modify "),k=e("Collections"),v=e(", "),w=e("Relationships"),x=e(", form layout, and "),A=e("Fields"),S=e("."),C=e("Roles & Permissions"),q=e(" \u2014 Create and manage access via Roles and Permissions."),B=e("Presets & Bookmarks"),P=e(" \u2014 Set default views of data and configure bookmarks."),j=e("Webhooks"),R=e(" \u2014 Use platform events to trigger external services."),V=t("p",null,"Aside from the above pages, there are three shorthand links:",-1),F=t("li",null,[t("p",null,[t("strong",null,"Report Bug"),t("br"),e(" A direct link to report a bug in the platform. When using this button, helpful debugging information about your project is automatically included, such as: version number, operating system, and environment type.")])],-1),M=t("strong",null,"Request Feature",-1),N=t("br",null,null,-1),T=e(" A direct link to "),D=t("a",{href:"https://github.com/directus/directus/discussions/new",target:"_blank",rel:"noopener noreferrer"},"submit a new feature request",-1),E=e(" on GitHub. Feature requests are a great way to let our team know what should be prioritized next. Learn more about making feature requests in the "),G=e("Contributing > Introduction"),H=e("."),O=t("li",null,[t("p",null,[t("strong",null,"Platform Version"),t("br"),e(" Displays the exact version of your platform. Click this button to go to the GitHub releases page, which includes the full change logs.")])],-1),W={title:"Settings",modularExtension:!1},z={name:"settings",setup(I,{expose:l}){return l({frontmatter:{title:"Settings",modularExtension:!1}}),(L,U)=>{const s=i("router-link"),a=i("docswrapper");return d(),c(a,{frontmatter:W},{default:o(()=>[t("div",u,[_,h,g,p,t("ul",null,[t("li",null,[n(s,{to:"/docs/configuration/project-settings"},{default:o(()=>[f]),_:1}),m]),t("li",null,[n(s,{to:"/docs/configuration/data-model"},{default:o(()=>[b]),_:1}),y,n(s,{to:"/docs/getting-started/glossary/#collections"},{default:o(()=>[k]),_:1}),v,n(s,{to:"/docs/getting-started/glossary/#relationships"},{default:o(()=>[w]),_:1}),x,n(s,{to:"/docs/getting-started/glossary/#fields"},{default:o(()=>[A]),_:1}),S]),t("li",null,[n(s,{to:"/docs/configuration/users-roles-permissions"},{default:o(()=>[C]),_:1}),q]),t("li",null,[n(s,{to:"/docs/configuration/presets-bookmarks"},{default:o(()=>[B]),_:1}),P]),t("li",null,[n(s,{to:"/docs/configuration/webhooks"},{default:o(()=>[j]),_:1}),R])]),V,t("ul",null,[F,t("li",null,[t("p",null,[M,N,T,D,E,n(s,{to:"/docs/contributing/introduction/#feature-requests"},{default:o(()=>[G]),_:1}),H])]),O])])]),_:1})}}};typeof r=="function"&&r(z);export{z as default,W as frontmatter};
@@ -1,51 +0,0 @@
1
- import{a,o as i,b as h,w as e,g as s,e as n,B as t}from"./runtime-core.esm-bundler.b1f35d24.js";var o={};const d={class:"markdown-body"},_=s("div",{class:"two-up"},[s("div",{class:"left"},[s("blockquote",null,[s("p",null,"Settings are key-value pairs that are stored in the database, and control different aspects of the project. Only administrators have access to manage Settings.")])]),s("div",{class:"right"},[s("p",null,[s("div",{class:"table-of-contents"},[s("ul",null,[s("li",null,[s("a",{href:"#the-settings-object"},"The Settings Object")]),s("li",null,[s("a",{href:"#retrieve-settings"},"Retrieve Settings")]),s("li",null,[s("a",{href:"#update-settings"},"Update Settings")])])])])])],-1),p=s("hr",null,null,-1),u=s("h2",{id:"the-settings-object"},[t("The Settings Object "),s("a",{class:"header-anchor",href:"#the-settings-object"},"#")],-1),g={class:"two-up"},f={class:"left"},j={class:"definitions"},m=s("p",null,[s("code",{class:""},"id"),t(),s("strong",null,"uuid"),s("br"),t(" Primary key of the setting.")],-1),b=s("p",null,[s("code",{class:""},"project_name"),t(),s("strong",null,"string"),s("br"),t(" Name of the project, shown in the Admin App.")],-1),y=s("p",null,[s("code",{class:""},"project_descriptor"),t(),s("strong",null,"string"),s("br"),t(" Descriptor of the project, shown in the Admin App.")],-1),v=s("p",null,[s("code",{class:""},"project_url"),t(),s("strong",null,"string"),s("br"),t(" Link to the (public) website that goes with this project.")],-1),w=s("p",null,[s("code",{class:""},"project_color"),t(),s("strong",null,"string"),s("br"),t(" Brand color for the current project.")],-1),x=s("code",{class:""},"project_logo",-1),q=t(),k=s("strong",null,"many-to-one",-1),A=s("br",null,null,-1),S=t(" Primary logo for the current project. Many-to-one to "),T=t("files"),E=t("."),P=s("code",{class:""},"public_foreground",-1),R=t(),C=s("strong",null,"many-to-one",-1),B=s("br",null,null,-1),M=t(" Foreground image for the Admin App\u2019s public pages. Many-to-one to "),O=t("files"),N=t("."),Q=s("code",{class:""},"public_background",-1),D=t(),G=s("strong",null,"many-to-one",-1),H=s("br",null,null,-1),I=t(" Background image for the Admin App\u2019s public pages. Many-to-one to "),L=t("files"),V=t("."),W=s("p",null,[s("code",{class:""},"public_note"),t(),s("strong",null,"string"),s("br"),t(" Note shown on the Admin App\u2019s public pages. Supports Markdown.")],-1),F=s("p",null,[s("code",{class:""},"auth_login_attempts"),t(),s("strong",null,"integer"),s("br"),t(" How often a user is allowed to try to login. After which times the user will be suspended.")],-1),U=s("p",null,[s("code",{class:""},"auth_password_policy"),t(),s("strong",null,"RegEx"),s("br"),t(" What regex passwords must pass in order to be valid.")],-1),z=s("code",{class:""},"storage_asset_transform",-1),J=t(),K=s("strong",null,"string",-1),X=s("br",null,null,-1),Y=t(" If the transform endpoints are allowed to be used on "),Z=t("the assets endpoint"),$=t(". One of "),ss=s("code",{class:""},"all",-1),ts=t(", "),es=s("code",{class:""},"none",-1),ls=t(" or "),ns=s("code",{class:""},"presets",-1),as=t("."),os=s("code",{class:""},"storage_asset_presets",-1),rs=t(),cs=s("strong",null,"array",-1),is=s("br",null,null,-1),hs=t(" What preset keys exist in "),ds=t("the assets endpoint"),_s=t("."),ps=s("p",null,[s("code",{class:""},"custom_css"),t(),s("strong",null,"string"),s("br"),t(" CSS rules to override the App\u2019s default styling.")],-1),us=s("p",null,[s("code",{class:""},"storage_default_folder"),t(),s("strong",null,"uuid"),s("br"),t(" Folder for uploaded files. Does not affect existing files.")],-1),gs=s("p",null,[s("code",{class:""},"basemaps"),t(),s("strong",null,"array"),s("br"),t(" Custom tiles to overriding the Mapbox defaults.")],-1),fs=s("p",null,[s("code",{class:""},"mapbox_key"),t(),s("strong",null,"string"),s("br"),s("a",{href:"https://docs.mapbox.com/help/glossary/access-token/",target:"_blank",rel:"noopener noreferrer"},"Mapbox Access Token"),t(".")],-1),js=s("p",null,[s("code",{class:""},"module_bar"),t(),s("strong",null,"array"),s("br"),t(" What modules are enabled/added globally.")],-1),ms=s("div",{class:"right"},[s("pre",null,[s("code",{class:"language-json"},[t(`{
2
- `),s("span",{class:"hljs-attr"},'"data"'),t(`: {
3
- `),s("span",{class:"hljs-attr"},'"id"'),t(": "),s("span",{class:"hljs-number"},"1"),t(`,
4
- `),s("span",{class:"hljs-attr"},'"project_name"'),t(": "),s("span",{class:"hljs-string"},'"Directus"'),t(`,
5
- `),s("span",{class:"hljs-attr"},'"project_descriptor"'),t(": "),s("span",{class:"hljs-string"},'"Application"'),t(`,
6
- `),s("span",{class:"hljs-attr"},'"project_url"'),t(": "),s("span",{class:"hljs-literal"},"null"),t(`,
7
- `),s("span",{class:"hljs-attr"},'"project_color"'),t(": "),s("span",{class:"hljs-literal"},"null"),t(`,
8
- `),s("span",{class:"hljs-attr"},'"project_logo"'),t(": "),s("span",{class:"hljs-literal"},"null"),t(`,
9
- `),s("span",{class:"hljs-attr"},'"public_foreground"'),t(": "),s("span",{class:"hljs-literal"},"null"),t(`,
10
- `),s("span",{class:"hljs-attr"},'"public_background"'),t(": "),s("span",{class:"hljs-literal"},"null"),t(`,
11
- `),s("span",{class:"hljs-attr"},'"public_note"'),t(": "),s("span",{class:"hljs-literal"},"null"),t(`,
12
- `),s("span",{class:"hljs-attr"},'"auth_login_attempts"'),t(": "),s("span",{class:"hljs-number"},"25"),t(`,
13
- `),s("span",{class:"hljs-attr"},'"auth_password_policy"'),t(": "),s("span",{class:"hljs-literal"},"null"),t(`,
14
- `),s("span",{class:"hljs-attr"},'"storage_asset_transform"'),t(": "),s("span",{class:"hljs-string"},'"all"'),t(`,
15
- `),s("span",{class:"hljs-attr"},'"storage_asset_presets"'),t(`: [
16
- { `),s("span",{class:"hljs-attr"},'"key"'),t(": "),s("span",{class:"hljs-string"},'"small"'),t(", "),s("span",{class:"hljs-attr"},'"fit"'),t(": "),s("span",{class:"hljs-string"},'"cover"'),t(", "),s("span",{class:"hljs-attr"},'"width"'),t(": "),s("span",{class:"hljs-number"},"200"),t(", "),s("span",{class:"hljs-attr"},'"height"'),t(": "),s("span",{class:"hljs-number"},"161"),t(", "),s("span",{class:"hljs-attr"},'"quality"'),t(": "),s("span",{class:"hljs-number"},"80"),t(", "),s("span",{class:"hljs-attr"},'"withoutEnlargement"'),t(": "),s("span",{class:"hljs-literal"},"false"),t(` }
17
- ],
18
- `),s("span",{class:"hljs-attr"},'"custom_css"'),t(": "),s("span",{class:"hljs-literal"},"null"),t(`,
19
- `),s("span",{class:"hljs-attr"},'"storage_default_folder"'),t(": "),s("span",{class:"hljs-literal"},"null"),t(`,
20
- `),s("span",{class:"hljs-attr"},'"basemaps"'),t(": "),s("span",{class:"hljs-literal"},"null"),t(`,
21
- `),s("span",{class:"hljs-attr"},'"mapbox_key"'),t(": "),s("span",{class:"hljs-literal"},"null"),t(`,
22
- `),s("span",{class:"hljs-attr"},'"module_bar"'),t(": "),s("span",{class:"hljs-literal"},"null"),t(`
23
- }
24
- }
25
- `)])])],-1),bs=s("hr",null,null,-1),ys=s("h2",{id:"retrieve-settings"},[t("Retrieve Settings "),s("a",{class:"header-anchor",href:"#retrieve-settings"},"#")],-1),vs={class:"two-up"},ws={class:"left"},xs=s("h3",{id:"query-parameters"},[t("Query Parameters "),s("a",{class:"header-anchor",href:"#query-parameters"},"#")],-1),qs=t("Supports all "),ks=t("global query parameters"),As=t("."),Ss=s("h3",{id:"returns"},[t("Returns "),s("a",{class:"header-anchor",href:"#returns"},"#")],-1),Ts=s("p",null,[t("Returns the "),s("a",{href:"#the-settings-object"},"settings object"),t(".")],-1),Es=s("div",{class:"right"},[s("h3",{id:"rest-api"},[t("REST API "),s("a",{class:"header-anchor",href:"#rest-api"},"#")]),s("pre",null,[s("code",{class:""},`GET /settings
26
- `)]),s("h3",{id:"graphql"},[t("GraphQL "),s("a",{class:"header-anchor",href:"#graphql"},"#")]),s("pre",null,[s("code",{class:""},`POST /graphql/system
27
- `)]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"type"),s("span",{class:"hljs-type"}," Query"),t(` {
28
- settings: directus_settings
29
- }
30
- `)])]),s("h5",{id:"example"},[t("Example "),s("a",{class:"header-anchor",href:"#example"},"#")]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"query"),t(` {
31
- settings {
32
- project_name
33
- }
34
- }
35
- `)])])],-1),Ps=s("hr",null,null,-1),Rs=s("h2",{id:"update-settings"},[t("Update Settings "),s("a",{class:"header-anchor",href:"#update-settings"},"#")],-1),Cs={class:"two-up"},Bs={class:"left"},Ms=s("h3",{id:"query-parameters-2"},[t("Query Parameters "),s("a",{class:"header-anchor",href:"#query-parameters-2"},"#")],-1),Os=t("Supports all "),Ns=t("global query parameters"),Qs=t("."),Ds=s("h3",{id:"request-body"},[t("Request Body "),s("a",{class:"header-anchor",href:"#request-body"},"#")],-1),Gs=s("p",null,[t("A partial "),s("a",{href:"#the-settings-object"},"settings object"),t(".")],-1),Hs=s("h3",{id:"returns-2"},[t("Returns "),s("a",{class:"header-anchor",href:"#returns-2"},"#")],-1),Is=s("p",null,[t("Returns the "),s("a",{href:"#the-setting-object"},"settings object"),t(".")],-1),Ls=s("div",{class:"right"},[s("h3",{id:"rest-api-2"},[t("REST API "),s("a",{class:"header-anchor",href:"#rest-api-2"},"#")]),s("pre",null,[s("code",{class:""},`PATCH /settings
36
- `)]),s("h5",{id:"example-2"},[t("Example "),s("a",{class:"header-anchor",href:"#example-2"},"#")]),s("pre",null,[s("code",{class:"language-json"},[s("span",{class:"hljs-comment"},"// PATCH /settings"),t(`
37
-
38
- {
39
- `),s("span",{class:"hljs-attr"},'"project_url"'),t(": "),s("span",{class:"hljs-string"},'"https://example.com/"'),t(`
40
- }
41
- `)])]),s("h3",{id:"graphql-2"},[t("GraphQL "),s("a",{class:"header-anchor",href:"#graphql-2"},"#")]),s("pre",null,[s("code",{class:""},`POST /graphql/system
42
- `)]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"type"),s("span",{class:"hljs-type"}," Mutation"),t(` {
43
- update_settings(data: update_directus_settings_input!): directus_settings
44
- }
45
- `)])]),s("h5",{id:"example-3"},[t("Example "),s("a",{class:"header-anchor",href:"#example-3"},"#")]),s("pre",null,[s("code",{class:"language-graphql"},[s("span",{class:"hljs-keyword"},"mutation"),t(` {
46
- update_settings(data: { project_url: `),s("span",{class:"hljs-string"},'"https://example.com"'),t(` }) {
47
- project_name
48
- project_url
49
- }
50
- }
51
- `)])])],-1),Vs={title:"Settings",modularExtension:!1,pageClass:"page-reference"},Ws={name:"settings",setup(Fs,{expose:r}){return r({frontmatter:{title:"Settings",modularExtension:!1,pageClass:"page-reference"}}),(Us,zs)=>{const l=a("router-link"),c=a("docswrapper");return i(),h(c,{frontmatter:Vs},{default:e(()=>[s("div",d,[_,p,u,s("div",g,[s("div",f,[s("div",j,[m,b,y,v,w,s("p",null,[x,q,k,A,S,n(l,{to:"/docs/reference/files/"},{default:e(()=>[T]),_:1}),E]),s("p",null,[P,R,C,B,M,n(l,{to:"/docs/reference/files/"},{default:e(()=>[O]),_:1}),N]),s("p",null,[Q,D,G,H,I,n(l,{to:"/docs/reference/files/"},{default:e(()=>[L]),_:1}),V]),W,F,U,s("p",null,[z,J,K,X,Y,n(l,{to:"/docs/reference/files/#requesting-a-thumbnail"},{default:e(()=>[Z]),_:1}),$,ss,ts,es,ls,ns,as]),s("p",null,[os,rs,cs,is,hs,n(l,{to:"/docs/reference/files/#requesting-a-thumbnail"},{default:e(()=>[ds]),_:1}),_s]),ps,us,gs,fs,js])]),ms]),bs,ys,s("div",vs,[s("div",ws,[xs,s("p",null,[qs,n(l,{to:"/docs/reference/query"},{default:e(()=>[ks]),_:1}),As]),Ss,Ts]),Es]),Ps,Rs,s("div",Cs,[s("div",Bs,[Ms,s("p",null,[Os,n(l,{to:"/docs/reference/query"},{default:e(()=>[Ns]),_:1}),Qs]),Ds,Gs,Hs,Is]),Ls])])]),_:1})}}};typeof o=="function"&&o(Ws);export{Ws as default,Vs as frontmatter};
@@ -1,22 +0,0 @@
1
- import{a as o,o as i,b as c,w as l,g as e,e as u,B as s}from"./runtime-core.esm-bundler.b1f35d24.js";var n={};const h={class:"markdown-body"},d=e("p",null,"Single Sign-On is a mechanism which allows to use external providers to login into systems. For example, you can use your Google or Facebook account to authenticate into systems without the need to create a new registration on those systems.",-1),p=e("h2",{id:"supported-sso-mechanisms"},[s("Supported SSO mechanisms "),e("a",{class:"header-anchor",href:"#supported-sso-mechanisms"},"#")],-1),g=e("p",null,"Directus supports three standard types of SSO mechanisms:",-1),_=e("ul",null,[e("li",null,[e("a",{href:"https://openid.net/specs/openid-connect-core-1_0.html",target:"_blank",rel:"noopener noreferrer"},"OpenID")]),e("li",null,[e("a",{href:"https://www.ietf.org/rfc/rfc6750.txt",target:"_blank",rel:"noopener noreferrer"},"OAuth 2.0")]),e("li",null,[e("a",{href:"https://datatracker.ietf.org/doc/html/rfc4511",target:"_blank",rel:"noopener noreferrer"},"LDAP")])],-1),m=s("Here are the configuration allowed for each one: "),f=s("SSO configuration"),y=e("p",null,"In order to use these mechanisms you need to:",-1),O=e("ol",null,[e("li",null,"Create an application/configuration on your preferred external provider"),e("li",null,"Set the environment variables to configure the external provider"),e("li",null,[s("["),e("em",null,"Optional"),s("] Set the environment variables to configure cookies")])],-1),S=e("h3",{id:"openid"},[s("OpenID "),e("a",{class:"header-anchor",href:"#openid"},"#")],-1),X=e("p",null,"In this section, we provide some guides to help you set up SSO with OpenID.",-1),w=e("h4",{id:"google"},[s("Google "),e("a",{class:"header-anchor",href:"#google"},"#")],-1),v=e("p",null,"To be able to use Google OpenID as your external provider you will need to:",-1),E=e("ol",null,[e("li",null,[e("p",null,[s("Go into "),e("a",{href:"https://console.cloud.google.com/",target:"_blank",rel:"noopener noreferrer"},"Google Cloud Console")])]),e("li",null,[e("p",null,"Select or Create a new project")]),e("li",null,[e("p",null,[s("Go to "),e("a",{href:"https://console.cloud.google.com/apis/credentials/consent",target:"_blank",rel:"noopener noreferrer"},"APIs & Services -> OAuth consent screen"),s(" on side bar")]),e("ol",null,[e("li",null,[s("Select the access you desire "),e("ul",null,[e("li",null,[s("Select "),e("strong",null,"Internal"),s(" if you only want people within your organization to be able to access")]),e("li",null,[s("Select "),e("strong",null,"External"),s(" to allow everyone with a Google account")])])]),e("li",null,[s("Fill the fields according to your preferences "),e("ul",null,[e("li",null,[s("The "),e("strong",null,"Authorized domains"),s(" add an extra layer of security, but it is not required. In case you fill it, should be the domain where your Directus instance is")])])]),e("li",null,[s("On Scopes, you need to choose "),e("code",{class:""},".../auth/userinfo.email"),s(", "),e("code",{class:""},".../auth/userinfo.profile"),s(" and "),e("code",{class:""},"openid")])])]),e("li",null,[e("p",null,[s("On side bar, go to "),e("a",{href:"https://console.cloud.google.com/apis/credentials",target:"_blank",rel:"noopener noreferrer"},"Credentials")])]),e("li",null,[e("p",null,[s("Click on "),e("a",{href:"https://console.cloud.google.com/apis/credentials/oauthclient",target:"_blank",rel:"noopener noreferrer"},"Create Credentials -> OAuth Client ID")]),e("ol",null,[e("li",null,[s("Choose "),e("code",{class:""},"Web Application"),s(" on "),e("strong",null,"Application Type")]),e("li",null,[s("The "),e("strong",null,"Authorized JavaScript origins"),s(" adds an extra layer of security, but it is not required. In case you fill it, should be the address of your Directus instance. For example, "),e("code",{class:""},"https://directus.myserver.com")]),e("li",null,[s("On "),e("strong",null,"Authorized redirect URIs"),s(" put your Directus instance address plus "),e("code",{class:""},"/auth/login/google/callback"),s(". For example, you should put "),e("code",{class:""},"https://directus.myserver.com/auth/login/google/callback"),s(" where "),e("code",{class:""},"https://directus.myserver.com"),s(" should be the address of your Directus instance. If you are testing locally you should add "),e("code",{class:""},"http://localhost:8055/auth/login/google/callback"),s(" too")])])]),e("li",null,[e("p",null,[s("On click "),e("strong",null,"Create"),s(", a modal will appear with "),e("strong",null,"Client ID"),s(" and "),e("strong",null,"Client Secret"),s(". Save both somewhere to use later.")])]),e("li",null,[e("p",null,[s("Now on Directus side, you need to add the following configuration to your "),e("code",{class:""},".env"),s(" file located on root folder of your project:")])])],-1),b=e("pre",null,[e("code",{class:"language-sh"},[s("AUTH_PROVIDERS="),e("span",{class:"hljs-string"},'"google"'),s(`
2
-
3
- AUTH_GOOGLE_DRIVER=`),e("span",{class:"hljs-string"},'"openid"'),s(`
4
- AUTH_GOOGLE_CLIENT_ID=`),e("span",{class:"hljs-string"},'"XXXX"'),s(),e("span",{class:"hljs-comment"},"# Replace XXXX with the Client ID from Step 6"),s(`
5
- AUTH_GOOGLE_CLIENT_SECRET=`),e("span",{class:"hljs-string"},'"XXXX"'),s(),e("span",{class:"hljs-comment"},"# Replace XXXX with the Client Secret from Step 6"),s(`
6
- AUTH_GOOGLE_ISSUER_URL=`),e("span",{class:"hljs-string"},'"https://accounts.google.com"'),s(`
7
- AUTH_GOOGLE_IDENTIFIER_KEY=`),e("span",{class:"hljs-string"},'"email"'),s(`
8
- AUTH_GOOGLE_ICON=`),e("span",{class:"hljs-string"},'"google"'),s(`
9
- AUTH_GOOGLE_ALLOW_PUBLIC_REGISTRATION=`),e("span",{class:"hljs-string"},'"true"'),s(),e("span",{class:"hljs-comment"},'# This allows users to be automatically created on logins. Use "false" if you want to create users manually'),s(`
10
- AUTH_GOOGLE_DEFAULT_ROLE_ID=`),e("span",{class:"hljs-string"},'"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"'),s(),e("span",{class:"hljs-comment"},"# Replace this with the Directus Role ID you would want for new users. If this is not properly configured, new users will not have access to Directus"),s(`
11
- `)])],-1),I=e("ol",{start:"8"},[e("li",null,[s("Now you can see a nice functional "),e("code",{class:""},"Login with Google"),s(" button on Directus login page.")])],-1),j=e("h2",{id:"seamless-sso"},[s("Seamless SSO "),e("a",{class:"header-anchor",href:"#seamless-sso"},"#")],-1),k=e("p",null,"While sometimes you want your users to directly have access to the Directus Application, in other cases you may need to fetch private data from Directus in your client using external providers. In this cases, it is needed a special configuration to work across domains, but is simple as:",-1),D=e("ol",null,[e("li",null,[s("Setup an external provider. You have some examples on "),e("a",{href:"#supported-sso-mechanisms"},"Supported SSO mechanisms")]),e("li",null,[s("Allow cookie to be accessible across domains. Put the following configuration on "),e("code",{class:""},".env"),s(":")])],-1),T=e("pre",null,[e("code",{class:"language-sh"},[s("REFRESH_TOKEN_COOKIE_DOMAIN="),e("span",{class:"hljs-string"},'"XXXX"'),s(),e("span",{class:"hljs-comment"},'# Replace XXXX with the domain of your Directus instance. For example "directus.myserver.com"'),s(`
12
- REFRESH_TOKEN_COOKIE_SECURE=`),e("span",{class:"hljs-string"},'"true"'),s(`
13
- REFRESH_TOKEN_COOKIE_SAME_SITE=`),e("span",{class:"hljs-string"},'"None"'),s(`
14
- `)])],-1),A=e("ol",{start:"2"},[e("li",null,"On your client, your login button should be something like")],-1),C=e("pre",null,[e("code",{class:"language-html"},[e("span",{class:"hljs-tag"},[s("<"),e("span",{class:"hljs-name"},"a"),s(),e("span",{class:"hljs-attr"},"href"),s("="),e("span",{class:"hljs-string"},'"https://directus.myserver.com/auth/login/google?redirect=https://client.myserver.com/login"'),s(">")]),s("Login"),e("span",{class:"hljs-tag"},[s("</"),e("span",{class:"hljs-name"},"a"),s(">")]),s(`
15
- `)])],-1),R=e("ul",null,[e("li",null,[s("Where "),e("code",{class:""},"https://directus.myserver.com"),s(" should be the address of your Directus instance")]),e("li",null,[s("While "),e("code",{class:""},"https://client.myserver.com/login"),s(" should be the address of your client application. The "),e("code",{class:""},"/login"),s(" is not necessary, but helps to separate concerns")])],-1),G=e("ol",{start:"3"},[e("li",null,[e("p",null,[s("On your login page, following the example should be "),e("code",{class:""},"https://client.myserver.com/login"),s(" you need to call the refresh endpoint either via REST API or via SDK in order to retrieve an "),e("code",{class:""},"access_token")]),e("ul",null,[e("li",null,[e("p",null,"via REST API / fetch"),e("pre",null,[e("code",{class:"language-js"},[e("span",{class:"hljs-keyword"},"await"),s(" fetch("),e("span",{class:"hljs-string"},"'https://directus.myserver.com/auth/refresh'"),s(`, {
16
- `),e("span",{class:"hljs-attr"},"method"),s(": "),e("span",{class:"hljs-string"},"'POST'"),s(`,
17
- `),e("span",{class:"hljs-attr"},"withCredentials"),s(": "),e("span",{class:"hljs-literal"},"true"),s(", "),e("span",{class:"hljs-comment"},"// this is required in order to send the refresh token cookie"),s(`
18
- });
19
- `)])])]),e("li",null,[e("p",null,"via SDK"),e("pre",null,[e("code",{class:"language-js"},[e("span",{class:"hljs-keyword"},"const"),s(" sdk = "),e("span",{class:"hljs-keyword"},"new"),s(" Directus("),e("span",{class:"hljs-string"},"'https://directus.myserver.com'"),s(`);
20
-
21
- `),e("span",{class:"hljs-keyword"},"await"),s(` sdk.auth.refresh();
22
- `)])])])])])],-1),x={title:"Single Sign-On (SSO)",modularExtension:!1},L={name:"sso",setup(U,{expose:t}){return t({frontmatter:{title:"Single Sign-On (SSO)",modularExtension:!1}}),(N,H)=>{const a=o("router-link"),r=o("docswrapper");return i(),c(r,{frontmatter:x},{default:l(()=>[e("div",h,[d,p,g,_,e("p",null,[m,u(a,{to:"/docs/configuration/config-options/#sso-oauth2-and-openid"},{default:l(()=>[f]),_:1})]),y,O,S,X,w,v,E,b,I,j,k,D,T,A,C,R,G])]),_:1})}}};typeof n=="function"&&n(L);export{L as default,x as frontmatter};
@@ -1 +0,0 @@
1
- import{a as n,o as c,b as l,w as o,g as e,e as r,B as t}from"./runtime-core.esm-bundler.b1f35d24.js";var i={};const d={class:"markdown-body"},h=e("blockquote",null,[e("p",null,"Directus is offered completely free and open-source for anyone wishing to self-host the platform. If you have questions along the way, there are many resources, both free and paid, to help you get up-and-running smoothly.")],-1),p=e("p",null,[e("div",{class:"table-of-contents"},[e("ul",null,[e("li",null,[e("a",{href:"#troubleshooting-steps"},"Troubleshooting Steps")]),e("li",null,[e("a",{href:"#support-tiers"},"Support Tiers")]),e("li",null,[e("a",{href:"#sponsored-work"},"Sponsored Work")]),e("li",null,[e("a",{href:"#frequently-asked-questions"},"Frequently Asked Questions")])])])],-1),f=e("h2",{id:"troubleshooting-steps"},[t("Troubleshooting Steps "),e("a",{class:"header-anchor",href:"#troubleshooting-steps"},"#")],-1),m=t("If you\u2019re experiencing issues or think you have found a problem in Directus, be sure to follow these steps before "),_=t("Reporting a Bug"),y=t(":"),g=t("Ensure your server and database meet the "),b=t("minimum requirements"),w=t("."),v=e("li",null,[t("Ensure you\u2019re on the "),e("a",{href:"https://github.com/directus/directus/releases/latest",target:"_blank",rel:"noopener noreferrer"},"latest version"),t(" of Directus.")],-1),k=e("li",null,[t("Stop "),e("code",{class:""},"CTRL+C"),t(" and restart the server "),e("code",{class:""},"npx directus start"),t(".")],-1),x=e("li",null,[t("Run the database migration script: "),e("code",{class:""},"directus database migrate:latest"),e("br"),e("em",null,"Note: backup your database first.")],-1),q=e("li",null,"Disable any data-caching within your project.",-1),C=e("li",null,[t("Test any app issues with both browser extensions and caching disabled "),e("em",null,"(i.e. Incognito Mode)"),t(".")],-1),S=e("li",null,"Confirm the issue is not related to your own custom code.",-1),D=e("li",null,[t("Check for "),e("a",{href:"https://github.com/directus/directus/issues?q=is%3Aissue",target:"_blank",rel:"noopener noreferrer"},"existing Issues"),t(" (and "),e("a",{href:"https://github.com/directus/directus/discussions",target:"_blank",rel:"noopener noreferrer"},"Discussions"),t(") that match your problem.")],-1),F=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Source Contributors"),e("p",null,[t("If you have installed from source, then you should also remove all dependencies by running "),e("code",{class:""},"npx lerna clean -y"),t(" and reinstall them with "),e("code",{class:""},"npm install")])],-1),I=t("If you\u2019re still experiencing a problem after completing the above steps, you can chat through things on our "),T=e("a",{href:"#community-support"},"community support",-1),B=t(" or "),E=t("report a bug"),j=t("."),W=e("h2",{id:"support-tiers"},[t("Support Tiers "),e("a",{class:"header-anchor",href:"#support-tiers"},"#")],-1),N=e("h3",{id:"community-support"},[t("Community Support "),e("a",{class:"header-anchor",href:"#community-support"},"#")],-1),O=e("p",null,[e("a",{href:"https://github.com/directus/directus/discussions",target:"_blank",rel:"noopener noreferrer"},"GitHub Discussions"),t(" is a great first place to reach out for help. Our community and core developers often check this platform and answer posts. It has the added benefit of being an archival resource for others developers with similar questions.")],-1),R=e("p",null,[t("Our "),e("a",{href:"https://directus.chat",target:"_blank",rel:"noopener noreferrer"},"Discord Community"),t(" is another great way to get assistance. Please keep all questions on the "),e("code",{class:""},"#help"),t(" channel, be considerate, and remember that you are getting free help from the community for a free product.")],-1),z=e("div",{class:"warning hint"},[e("div",{class:"hint-title"},"No Guaranteed Response Time"),e("p",null,"While the Directus Core Team plays an active and engaged role in community discussions, there is no guaranteed response time for Community Support.")],-1),M=e("h3",{id:"basic-and-premium-support"},[t("Basic and Premium Support "),e("a",{class:"header-anchor",href:"#basic-and-premium-support"},"#")],-1),P=e("p",null,"Basic and Premium Support offer direct communication with the Directus Core Team. Basic support is included on all Enterprise Projects, and Premium Support adds 24/7 response times for critical software issues only.",-1),A=t("Cloud customers and Self-Hosted users interested in learning more about our monthly retainer agreements should contact us at "),H=t("support@directus.io"),Q=t("."),V=e("h2",{id:"sponsored-work"},[t("Sponsored Work "),e("a",{class:"header-anchor",href:"#sponsored-work"},"#")],-1),G=e("h3",{id:"commissioned-features"},[t("Commissioned Features "),e("a",{class:"header-anchor",href:"#commissioned-features"},"#")],-1),L=t("If you need a specific feature added to Directus faster than the normal development timeline, "),Y=e("a",{href:"https://directus.io/contact/",target:"_blank",rel:"noopener noreferrer"},"reach out to us",-1),J=t(" for a quote. Our parent agency will often help subsidize the cost of developing new features if they pass our "),K=t("80/20 Rule"),U=t(" and can be merged into the core codebase. Other custom/proprietary development will be built bespoke within our robust extension system."),X=e("h3",{id:"expedited-fixes"},[t("Expedited Fixes "),e("a",{class:"header-anchor",href:"#expedited-fixes"},"#")],-1),Z=e("p",null,[t("We triage all reported bugs based on priority and how long the fix is estimated to take. If you need a specific issue resolved sooner, "),e("a",{href:"https://directus.io/contact/",target:"_blank",rel:"noopener noreferrer"},"reach out to us"),t(" for a quote.")],-1),$=e("h2",{id:"frequently-asked-questions"},[t("Frequently Asked Questions "),e("a",{class:"header-anchor",href:"#frequently-asked-questions"},"#")],-1),ee=e("h3",{id:"does-directus-support-mongo%2Fnosql%3F"},[t("Does Directus support Mongo/NoSQL? "),e("a",{class:"header-anchor",href:"#does-directus-support-mongo%2Fnosql%3F"},"#")],-1),te=e("p",null,[t("Not currently. Directus has been built specifically for wrapping "),e("em",null,"relational"),t(" databases. While we could force Mongo to use tables, columns, and rows via Mongoose object modeling, that approach of \u201Cfaking\u201D a relational structure in a non-structured environment like Mongo doesn\u2019t make a lot of sense. We do realize many users are interested in this feature, and will continue to explore its possibility.")],-1),oe=e("h3",{id:"why-haven%E2%80%99t-you-added-this-feature%2C-or-fixed-that-issue-yet%3F"},[t("Why haven\u2019t you added this feature, or fixed that issue yet? "),e("a",{class:"header-anchor",href:"#why-haven%E2%80%99t-you-added-this-feature%2C-or-fixed-that-issue-yet%3F"},"#")],-1),se=e("p",null,"Directus is primarily a free and open-source project, maintained by a small core team and community contributors who donate their time and resources.",-1),re=t("Our platform is feature-rich, however we strictly adhere to our "),ne=t("80/20 Rule"),ie=t(" to avoid a messy/bloated codebase. Directus is also quite stable, however new issues still arise, some of which may be triaged with a lower prioritization."),ae=e("p",null,[t("If you need, you can contact us about "),e("a",{href:"#expedited-fixes"},"sponsoring expedited fixes"),t(" or "),e("a",{href:"#commissioned-features"},"commissioning new features"),t(". You can also "),e("a",{href:"https://github.com/directus/directus/pulls",target:"_blank",rel:"noopener noreferrer"},"submit a pull request"),t(" \u2014 after all, it is open-source!")],-1),ue=e("h3",{id:"can-you-give-an-eta-for-this-feature%2Ffix%3F"},[t("Can you give an ETA for this feature/fix? "),e("a",{class:"header-anchor",href:"#can-you-give-an-eta-for-this-feature%2Ffix%3F"},"#")],-1),ce=e("p",null,"If it is sponsored work, then yes, delivery dates are part of our statement of work agreements. Otherwise, most likely not. This is open-source software, work is prioritized internally, and all timelines are subject to change.",-1),le=e("h3",{id:"but-this-is-an-emergency%2C-my-very-important-project-requires-it-now!"},[t("But this is an emergency, my very important project requires it now! "),e("a",{class:"header-anchor",href:"#but-this-is-an-emergency%2C-my-very-important-project-requires-it-now!"},"#")],-1),de=e("p",null,[t("We understand, and are here to help. If you need something prioritized, you can reach out to us to discuss "),e("a",{href:"#basic-and-premium-support"},"premium support"),t(", "),e("a",{href:"#expedited-fixes"},"sponsoring expedited fixes"),t(" or "),e("a",{href:"#commissioned-features"},"commissioning new features"),t(".")],-1),he={title:"Help & Support",modularExtension:!1},pe={name:"support",setup(fe,{expose:a}){return a({frontmatter:{title:"Help & Support",modularExtension:!1}}),(me,_e)=>{const s=n("router-link"),u=n("docswrapper");return c(),l(u,{frontmatter:he},{default:o(()=>[e("div",d,[h,p,f,e("p",null,[m,r(s,{to:"/docs/contributing/introduction/#bug-reporting"},{default:o(()=>[_]),_:1}),y]),e("ol",null,[e("li",null,[g,r(s,{to:"/docs/self-hosted/installation/cli/#_1-confirm-minimum-requirements"},{default:o(()=>[b]),_:1}),w]),v,k,x,q,C,S,D]),F,e("p",null,[I,T,B,r(s,{to:"/docs/contributing/introduction/#bug-reporting"},{default:o(()=>[E]),_:1}),j]),W,N,O,R,z,M,P,e("p",null,[A,r(s,{to:"/docsmailto:support@directus.io"},{default:o(()=>[H]),_:1}),Q]),V,G,e("p",null,[L,Y,J,r(s,{to:"/docs/contributing/introduction/#feature-requests"},{default:o(()=>[K]),_:1}),U]),X,Z,$,ee,te,oe,se,e("p",null,[re,r(s,{to:"/docs/contributing/introduction/#feature-requests"},{default:o(()=>[ne]),_:1}),ie]),ae,ue,ce,le,de])]),_:1})}}};typeof i=="function"&&i(pe);export{pe as default,he as frontmatter};
@@ -1 +0,0 @@
1
- import{a as s,o as d,b as c,w as a,g as e,e as i,B as t}from"./runtime-core.esm-bundler.b1f35d24.js";var n={};const h={class:"markdown-body"},m=e("blockquote",null,[e("p",null,"A Team is an organizational system that groups Accounts together as Team Members and provides consolidated billing on its nested Projects.")],-1),u=e("p",null,[e("div",{class:"table-of-contents"},[e("ul",null,[e("li",null,[e("a",{href:"#create-a-team"},"Create a Team")]),e("li",null,[e("a",{href:"#update-team-settings"},"Update Team Settings")]),e("li",null,[e("a",{href:"#view-team-activity"},"View Team Activity")]),e("li",null,[e("a",{href:"#view-billing-details"},"View Billing Details")]),e("li",null,[e("a",{href:"#manage-billing"},"Manage Billing")]),e("li",null,[e("a",{href:"#invite-team-members"},"Invite Team Members")]),e("li",null,[e("a",{href:"#manage-team-members"},"Manage Team Members")]),e("li",null,[e("a",{href:"#destroy-a-team"},"Destroy a Team")])])])],-1),p=e("p",null,"Teams within the Cloud Dashboard allow individuals to separate or consolidate Projects and payment methods, as well as manage Projects independently or with other Team Members.",-1),g=e("p",null,"For example, a company can use Teams to organize Projects by department, each with consolidated billing and scoped access. Similarly, agencies or freelancers with multiple customers can create a Team per client to limit their access and isolate billing. Teams are free, so create as many as you need to appropriately organize Team Members, Projects and payment methods.",-1),_=t("See the "),b=t("Overview"),y=t(" to learn how Accounts, Teams and Projects interrelate."),v=e("h2",{id:"create-a-team"},[t("Create a Team "),e("a",{class:"header-anchor",href:"#create-a-team"},"#")],-1),f=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/cloud/teams/teams-20220322A/create-a-team-20220329A.webp",alt:"Create Team"})],-1),T=e("p",null,"To create a Team:",-1),w=e("ol",null,[e("li",null,[t("Open the Team Menu in the Dashboard Header and click "),e("strong",null,[t("\u201CCreate a Team "),e("span",{mi:"",icon:"",prmry:""},"add"),t("\u201D")]),t("."),e("br"),t(" The Create Team page will open.")]),e("li",null,[t("Enter a Team Name and Team Slug, then click "),e("strong",null,"\u201CSave\u201D"),t(".")])],-1),P=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Team Name and Team Slug"),e("p",null,[t("The Team Name is a text name assigned to a Team, used in the Cloud Dashboard. The Team slug lies within the full URL "),e("code",{class:""},"https://directus.cloud/TEAM-SLUG/projects"),t(". These are purely organizational, allowing you to easily remember the Team and link to specific Cloud Dashboards. They do not impact Cloud Projects or billing and can be "),e("a",{href:"#update-team-settings"},"updated at any time"),t(".")])],-1),A=e("h2",{id:"update-team-settings"},[t("Update Team Settings "),e("a",{class:"header-anchor",href:"#update-team-settings"},"#")],-1),N=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/cloud/teams/teams-20220322A/managing-a-team-20220225A.webp",alt:"Managing a Team"})],-1),j=e("p",null,"To update Team Settings:",-1),M=e("ol",null,[e("li",null,"Open the Team Menu in the Dashboard Header and select the desired Team."),e("li",null,[t("Click "),e("strong",null,"\u201CSettings\u201D"),t(" to enter the Team Settings page.")]),e("li",null,[t("Toggle "),e("span",{mi:"",icon:"",prmry:""},"edit"),t(" to allow edits.")]),e("li",null,"Edit Team Name and Team Slug as desired."),e("li",null,[t("Click the "),e("strong",null,"\u201CSave\u201D"),t(" button.")])],-1),S=e("h2",{id:"view-team-activity"},[t("View Team Activity "),e("a",{class:"header-anchor",href:"#view-team-activity"},"#")],-1),k=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/cloud/teams/teams-20220322A/view-team-activity-20220322A.webp",alt:"View Team Activity"})],-1),C=e("p",null,"The Team Activity Page displays billing information changes, created and destroyed Projects, Team Members added or removed, Team Name and Team Slug changes, and any other major Team-oriented activities. To view Team Activity:",-1),x=e("ol",null,[e("li",null,"Open the Team Menu in the Dashboard Header and select the desired Team."),e("li",null,[t("Click "),e("strong",null,"\u201CActivity\u201D"),t(".")])],-1),D=e("h2",{id:"view-billing-details"},[t("View Billing Details "),e("a",{class:"header-anchor",href:"#view-billing-details"},"#")],-1),B=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/cloud/teams/teams-20220322A/view-billing-details-20220322A.webp",alt:"View Billing Details"})],-1),$=e("p",null,"Follow these steps to see billing details such as credit available to Team Projects, total active subscriptions and invoice receipts:",-1),I=e("ol",null,[e("li",null,"Open the Team Menu in the Dashboard Header and select the desired Team."),e("li",null,[t("Click "),e("strong",null,"\u201CBilling\u201D"),t(" to enter the Billing Details Page.")])],-1),V=e("h2",{id:"manage-billing"},[t("Manage Billing "),e("a",{class:"header-anchor",href:"#manage-billing"},"#")],-1),O=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/cloud/teams/teams-20220322A/manage-billing-20220322A.webp",alt:"Manage Billing"})],-1),z=e("p",null,"Since our Community tier is completely free, and our Enterprise tier pricing is individually tailored based on customer needs, this section will focus on our pay-as-you-go Standard tier. Follow the steps below to change a default payment method, add or remove additional payment methods or change other billing details:",-1),H=e("ol",null,[e("li",null,"Open the Team Menu in the Dashboard Header and select the desired Team."),e("li",null,[t("Click "),e("strong",null,"\u201CBilling\u201D"),t(" to enter the Billing Details page.")]),e("li",null,[t("Click "),e("strong",null,"\u201CManage Billing\u201D"),t(" to enter the Stripe payments gateway.")]),e("li",null,"Adjust payment methods and details as needed."),e("li",null,[t("Click "),e("strong",null,"\u201CReturn to Directus Cloud\u201D"),t(".")])],-1),E=e("h3",{id:"team-billing"},[t("Team Billing "),e("a",{class:"header-anchor",href:"#team-billing"},"#")],-1),G=e("p",null,[t("Teams are free to create, and they give Team Members access to the same Projects, Project invoices and payment methods. Each Team has its own separate billing, and each Project within a Team is "),e("a",{href:"#how-bills-are-calculated"},"calculated"),t(" and "),e("a",{href:"#billing-cycles"},"invoiced separately every month"),t(".")],-1),F=e("p",null,"Team Members are SuperAdmins. As such, they have full access to manage billing information and payment methods, including information provided by other Team Members. Team Members should be highly trusted individuals.",-1),U=e("p",null,"All bills will first be invoiced to the default payment method. You may notice that it is possible to add additional payment methods, and it may be a good idea to do so, as keeping multiple payment methods on file provides a fail-safe to help make sure your Project stays running. In the event that there is an issue processing the default payment method, the other payment methods on file will be attempted. If the bill is not paid, the Nodes will be paused, halting web-traffic, until a successful payment is made.",-1),R=e("div",{class:"warning hint"},[e("p",null,[t("If the paused Project is never repaid, it will eventually be deleted along with all of its data and assets. For details on unpaid Projects and refunds, see "),e("a",{href:"https://directus.io/cloud-policies/",target:"_blank",rel:"noopener noreferrer"},"Cloud Policies")])],-1),Y=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Team Metered Usage"),e("p",null,[t("You may notice credit on top of the "),e("a",{href:"#view-billing-details"},"Billing Page"),t(". In the "),e("em",null,"rare event"),t(" your Team receives credit from the Directus Team, this credit balance will decrease the amount due on the next invoice(s) until all credit is used up. Then the default payment method will be used.")])],-1),L=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Stripe Payment"),e("p",null,"To handle billing, Directus Cloud uses Stripe, a secure, industry-leading, dynamic international billing service.")],-1),q=e("h3",{id:"billing-cycles"},[t("Billing Cycles "),e("a",{class:"header-anchor",href:"#billing-cycles"},"#")],-1),K=e("p",null,"Bills are invoiced on a calendar monthly basis, so each new billing period begins after exactly one month. When a Project is destroyed, the bill is processed immediately. As mentioned in the previous section, bills are invoiced per-Project; so if a Team has 4 Standard Projects, it will be charged 4 times each month.",-1),W=e("h3",{id:"how-bills-are-calculated"},[t("How Bills Are Calculated "),e("a",{class:"header-anchor",href:"#how-bills-are-calculated"},"#")],-1),J=t("Project billing is calculated based on the total number of hours that Active and Standby Nodes are used during the billing period. Once the "),Q=t("Node Type"),X=t(" is selected, the associated hourly rate will apply to both Active and Standby Nodes."),Z=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Node Pricing"),e("p",null,[e("strong",null,"General Purpose:"),t(" $0.03424657534 / hour"),e("br"),e("strong",null,"Performance Tier:"),t(" $0.06849315068 / hour")])],-1),ee=e("p",null,[t("This means the monthly prices given for Active Nodes, "),e("em",null,"$25/month for General Purpose and $50/month for Performance tier"),t(", are actually estimates based on the cost per hour times the average length of a month (730 hours). So, the pricing shown for one Active General Purpose Node is "),e("code",{class:""},"$0.03424657534 x 730hrs = $25"),t(", however the actual bill will vary slightly each month.")],-1),te=e("p",null,[t("Keep in mind that a Standard Project\u2019s Nodes can be reconfigured at any time. You can upgrade and downgrade Node Types add and remove Nodes, or destroy your Project as you please. In the end, "),e("em",null,"you simply pay for the actual Node-hours used by your Project"),t(".")],-1),ae=e("p",null,"The following four examples demonstrate this billing system:",-1),oe=e("p",null,[e("strong",null,"Hourly Pricing"),e("br"),t(" A Project is configured to use General Purpose Nodes, with one Active Node and zero Standby Nodes. The Project runs for 3 days and 3.5 hours (75.5 hours total, rounded to 76 hours) and is then destroyed, costing "),e("code",{class:""},"1 Node x $0.03424657534/hr x 76 hrs = $2.60"),t(".")],-1),ie=e("p",null,[t("The bill will be "),e("code",{class:""},"$2.60"),t(" plus Tax/VAT, charged at Project destruction.")],-1),se=e("p",null,[e("strong",null,"Active Nodes"),e("br"),t(" A Project is configured to use Performance Tier Nodes, with two Active Nodes and zero Standby Nodes. The Project runs the full month (730 hours). For this billing cycle, the two Active Nodes will cost "),e("code",{class:""},"2 Nodes x $0.06849315068/hr x 730 hrs = $100"),t(".")],-1),ne=e("p",null,[t("The monthly bill will be "),e("code",{class:""},"$100"),t(" plus Tax/VAT.")],-1),le=e("p",null,[e("strong",null,"Overages on Standby Nodes"),e("br"),t(" A Project is configured to use General Purpose Nodes, with three Active Nodes and two Standby Nodes. The Project runs the full month (730 hours). There are two traffic spikes. The first spike is smaller and only activates one Standby Node for 6.5 hours. The second spike is larger and activates the first Node from 4pm to 12am (eight hours), and the second Node from 6pm to 11pm (five hours), for a total of "),e("code",{class:""},"8 + 5 = 13"),t(" hours. Between both spikes, Standby Nodes run for a total of 19.5 hours (rounds to 20 hrs). Active Nodes will cost "),e("code",{class:""},"3 Nodes x $0.03424657534/hr x 730 hrs = $75.00"),t(" plus Standby Node overages "),e("code",{class:""},"20 Node-hrs x $0.03424657534/hr = $0.68"),t(".")],-1),re=e("p",null,[t("The monthly bill will be "),e("code",{class:""},"$75.68"),t(" plus VAT/Tax.")],-1),de=e("p",null,[e("strong",null,"Pro-rated Changes"),e("br"),t(" A Project begins the billing cycle configured to use General Purpose Nodes, one Active and zero Standby. A massive traffic spike is expected from marketing activities this month and 200 hours into the month, the Project is reconfigured. The Node Type is now Performance Tier, using two Active Nodes and five Standby Nodes. In the end, the marketing event was a failure, and traffic was just slightly above average. The five Standby Nodes were not needed and never activated. The first 200 hours cost "),e("code",{class:""},"(1 General Purpose Node x $0.03424657534/hr x 200hrs) = $6.85"),t(". The other 530 hours cost "),e("code",{class:""},"(2 Performance Nodes x $0.06849315068/hr x 530hrs) = 72.60"),t(".")],-1),ce=e("p",null,[t("The monthly bill will be "),e("code",{class:""},"$79.45"),t(" plus VAT/Tax.")],-1),he=e("h3",{id:"optimize-node-configuration"},[t("Optimize Node Configuration "),e("a",{class:"header-anchor",href:"#optimize-node-configuration"},"#")],-1),me=t("Remember: "),ue=e("em",null,"you are never locked-in to a specific Node configuration",-1),pe=t(". As your needs change for a Project, you can reconfigure the Node Type as well as the number of Active and Standby Nodes at any time. To that end, you may want to monitor overall system traffic to make informed decisions on Node reconfiguration. The "),ge=t("Project Monitor Page"),_e=t(" provides performance analytics, which can be used to help identify optimal Node configurations for your Project."),be=e("div",{class:"warning hint"},[e("div",{class:"hint-title"},"Standby Nodes"),e("p",null,"For production-ready Projects of any kind, it is probably a good idea to have one or more Standby Nodes. These do not activate, and you do not pay for their usage until they are needed. If you have no Standby Nodes, you many not have the processing power to handle traffic spikes, which can crash your Nodes!")],-1),ye=e("h2",{id:"invite-team-members"},[t("Invite Team Members "),e("a",{class:"header-anchor",href:"#invite-team-members"},"#")],-1),ve=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/cloud/teams/teams-20220322A/inviting-a-team-member-20220225A.webp",alt:"Inviting a Team Member"})],-1),fe=e("p",null,"All Team Members can invite new Members via email. Each invitee will be emailed a link to accept the invitation and join the Team. To invite Team Members:",-1),Te=e("ol",null,[e("li",null,"Open the Team Menu in the Dashboard Header and select the desired Team."),e("li",null,[t("Click "),e("strong",null,"\u201CMembers\u201D"),t(" to enter the Members Page.")]),e("li",null,"Scroll down to the Invite New Members section."),e("li",null,"Enter one or more email(s), comma separated."),e("li",null,[t("Click "),e("strong",null,"\u201CSend Invites.\u201D")])],-1),we={class:"tip hint"},Pe=t("Clicking the emailed invitation link does not automatically create an Account for you. Invitees will need to "),Ae=t("create an Account"),Ne=t(" before accepting an invitation to join a Team."),je=e("h2",{id:"manage-team-members"},[t("Manage Team Members "),e("a",{class:"header-anchor",href:"#manage-team-members"},"#")],-1),Me=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/cloud/teams/teams-20220322A/leaving-a-team-20220225A.webp",alt:"Removing a Team member"})],-1),Se=e("p",null,"All Team Members have the ability to remove other Members or invites from a Team. To remove Members or leave a Team yourself:",-1),ke=e("ol",null,[e("li",null,"Open the Team Menu in the Dashboard Header and select the desired Team."),e("li",null,[t("Click "),e("strong",null,"\u201CMembers\u201D"),t(" to enter the Members Page.")]),e("li",null,[t("Click the "),e("span",{mi:"",icon:""},"exit_to_app"),t(" or "),e("span",{mi:"",icon:""},"close"),t(" button on the desired Member.")]),e("li",null,[t("Click "),e("strong",null,"\u201CConfirm\u201D"),t(".")])],-1),Ce=e("div",{class:"warning hint"},[e("p",null,"If an Account leaves or is removed from a Team, it will be fully \u201Clocked out\u201D of the Team until re-invited by another Member.")],-1),xe=e("h2",{id:"destroy-a-team"},[t("Destroy a Team "),e("a",{class:"header-anchor",href:"#destroy-a-team"},"#")],-1),De=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/cloud/teams/teams-20220322A/destroy-a-team-20220225A.webp",alt:"Destroying a Team"})],-1),Be=e("p",null,"To destroy a Team:",-1),$e=e("ol",null,[e("li",null,"Open the Team Menu in the Dashboard Header and select the desired Team."),e("li",null,[t("Click "),e("strong",null,"\u201CSettings\u201D"),t(" to enter the Team Settings Page.")]),e("li",null,"Scroll down to the \u201CDestroy this Team\u201D section."),e("li",null,[t("Toggle "),e("span",{mi:"",icon:"",dngr:""},"local_fire_department"),t(" and an input box will appear.")]),e("li",null,"Type the Team Name into the input box."),e("li",null,[t("Click "),e("strong",null,"\u201CDestroy Team\u201D"),t(".")])],-1),Ie=e("div",{class:"danger hint"},[e("p",null,"Destroying a Team completely removes all its data from Directus Cloud. This action is permanent and irreversible. Proceed with caution!")],-1),Ve=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Teams with Active Projects"),e("p",null,"To delete a Team, you must first delete any active Projects within it.")],-1),Oe={title:"Cloud Teams",modularExtension:!1},ze={name:"teams",setup(He,{expose:l}){return l({frontmatter:{title:"Cloud Teams",modularExtension:!1}}),(Ee,Ge)=>{const o=s("router-link"),r=s("docswrapper");return d(),c(r,{frontmatter:Oe},{default:a(()=>[e("div",h,[m,u,p,g,e("p",null,[_,i(o,{to:"/docs/cloud/overview"},{default:a(()=>[b]),_:1}),y]),v,f,T,w,P,A,N,j,M,S,k,C,x,D,B,$,I,V,O,z,H,E,G,F,U,R,Y,L,q,K,W,e("p",null,[J,i(o,{to:"/docs/cloud/glossary/#nodes"},{default:a(()=>[Q]),_:1}),X]),Z,ee,te,ae,oe,ie,se,ne,le,re,de,ce,he,e("p",null,[me,ue,pe,i(o,{to:"/docs/cloud/projects/#monitor-a-project"},{default:a(()=>[ge]),_:1}),_e]),be,ye,ve,fe,Te,e("div",we,[e("p",null,[Pe,i(o,{to:"/docs/cloud/accounts/#create-account-and-login"},{default:a(()=>[Ae]),_:1}),Ne])]),je,Me,Se,ke,Ce,xe,De,Be,$e,Ie,Ve])]),_:1})}}};typeof n=="function"&&n(ze);export{ze as default,Oe as frontmatter};
@@ -1,5 +0,0 @@
1
- import{a as l,o as c,b as h,w as s,g as e,e as n,B as t}from"./runtime-core.esm-bundler.b1f35d24.js";var r={};const d={class:"markdown-body"},u=e("strong",null,"Form Follows Function",-1),p=t(" is the guiding design principle of Directus. The minimal UI allows the platform to be easily tailored to your brand. "),m=t("Learn more about the App"),_=t("."),g=e("h2",{id:"app-themes"},[t("App Themes "),e("a",{class:"header-anchor",href:"#app-themes"},"#")],-1),y=e("p",null,"The Directus App has been developed with customization and extensibility in mind. Colors and styles referenced within the codebase all use CSS variables, and therefore it is easy to make comprehensive changes to the App styling.",-1),b=e("p",null,"There are two themes included by default: Light and Dark. You can duplicate these files to create your own themes \u2014 with no limit to customization. Below are several code resources for key SCSS files.",-1),f=e("ul",null,[e("li",null,[e("strong",null,"Themes"),t(" \u2014 See the "),e("a",{href:"https://github.com/directus/directus/blob/main/app/src/styles/themes/_light.scss",target:"_blank",rel:"noopener noreferrer"},"Light Theme"),t(" or "),e("a",{href:"https://github.com/directus/directus/blob/main/app/src/styles/themes/_dark.scss",target:"_blank",rel:"noopener noreferrer"},"Dark Theme")]),e("li",null,[e("strong",null,"Typography"),t(" \u2014 See the "),e("a",{href:"https://github.com/directus/directus/blob/main/app/src/styles/_type-styles.scss",target:"_blank",rel:"noopener noreferrer"},"Fonts"),t(" and "),e("a",{href:"https://github.com/directus/directus/blob/main/app/src/styles/mixins/type-styles.scss",target:"_blank",rel:"noopener noreferrer"},"Type Styles")]),e("li",null,[e("strong",null,"Variables"),t(" \u2014 See the "),e("a",{href:"https://github.com/directus/directus/blob/main/app/src/styles/_variables.scss",target:"_blank",rel:"noopener noreferrer"},"Global Variables")])],-1),S=e("h2",{id:"project-styling"},[t("Project Styling "),e("a",{class:"header-anchor",href:"#project-styling"},"#")],-1),v=t("See "),w=t("Adjusting Project Settings"),k=e("h2",{id:"custom-css"},[t("Custom CSS "),e("a",{class:"header-anchor",href:"#custom-css"},"#")],-1),C=e("p",null,"You can also override any core CSS directly within the App through Project Settings. This makes it easy to edit the CSS variables listed in the themes above.",-1),T=e("ol",null,[e("li",null,[t("Navigate to "),e("strong",null,"Settings Module > Project Settings")]),e("li",null,[t("Scroll to the "),e("strong",null,"Custom CSS"),t(" field")]),e("li",null,[t("Enter any "),e("strong",null,"valid CSS")]),e("li",null,[t("Click the "),e("strong",null,"Save"),t(" action button in the header")])],-1),A=e("h3",{id:"example"},[t("Example "),e("a",{class:"header-anchor",href:"#example"},"#")],-1),x=e("p",null,[t("Since App styles are inserted/removed whenever a component is rendered, you\u2019ll need to be aware of CSS priority. Using "),e("code",{class:""},":root"),t(" or "),e("code",{class:""},"body"),t(" likely isn\u2019t scoped enough, you\u2019ll need to define a more specific scope, such as "),e("code",{class:""},"#app"),t(", or use "),e("code",{class:""},"!important"),t(".")],-1),j=e("pre",null,[e("code",{class:"language-css"},[e("span",{class:"hljs-selector-tag"},"body"),t(` {
2
- --family-sans-serif: `),e("span",{class:"hljs-string"},"'Comic Sans MS'"),t(`;
3
- --primary: MediumSlateBlue `),e("span",{class:"hljs-meta"},"!important"),t(`;
4
- }
5
- `)])],-1),B=e("div",{class:"warning hint"},[e("div",{class:"hint-title"},"Action Styling"),e("p",null,[t("The "),e("code",{class:""},"--primary"),t(" variable (and its shades) control call-to-actions and all other elements within the App using the \u201CDirectus Green\u201D. While it may be tempting to override this variable with your brand\u2019s color, please first review the following warnings:")]),e("ul",null,[e("li",null,"Avoid using yellow, orange, or red hues that give a sense of \u201Cdanger\u201D"),e("li",null,"Avoid low-contrast colors like yellows, grays, etc, that might not be easily visible"),e("li",null,"Avoid low-saturation colors like black, which might not properly highlight CTAs")])],-1),D={title:"Themes & Styling",modularExtension:!1},V={name:"themes",setup(E,{expose:i}){return i({frontmatter:{title:"Themes & Styling",modularExtension:!1}}),(F,N)=>{const o=l("router-link"),a=l("docswrapper");return c(),h(a,{frontmatter:D},{default:s(()=>[e("div",d,[e("blockquote",null,[e("p",null,[u,p,n(o,{to:"/docs/app/overview/"},{default:s(()=>[m]),_:1}),_])]),g,y,b,f,S,e("p",null,[v,n(o,{to:"/docs/configuration/project-settings/"},{default:s(()=>[w]),_:1})]),k,C,T,A,x,j,B])]),_:1})}}};typeof r=="function"&&r(V);export{V as default,D as frontmatter};
@@ -1 +0,0 @@
1
- import{a as o,o as i,b as l,w as s,g as e,B as a}from"./runtime-core.esm-bundler.b1f35d24.js";var t={};const d=e("div",{class:"markdown-body"},[e("blockquote",null,[e("p",null,"The platform supports internationalization across the entire App. Many languages are currently supported, with more being added all the time. Anyone can add or refine any languages through the integration with CrowdIn.")]),e("h2",{id:"crowdin"},[a("Crowdin "),e("a",{class:"header-anchor",href:"#crowdin"},"#")]),e("p",null,[a("Our "),e("a",{href:"https://locales.directus.io/",target:"_blank",rel:"noopener noreferrer"},"Crowdin"),a(" page provides an external interface for managing all of the different language translations for the App. You can update and extend existing languages, or request a new language be added.")]),e("h2",{id:"working-with-existing-languages"},[a("Working with Existing Languages "),e("a",{class:"header-anchor",href:"#working-with-existing-languages"},"#")]),e("ol",null,[e("li",null,[a("Navigate to "),e("a",{href:"https://locales.directus.io/",target:"_blank",rel:"noopener noreferrer"},"Crowdin")]),e("li",null,"Click on the desired language"),e("li",null,[a("Click "),e("strong",null,"Translate All"),a(" in the header")]),e("li",null,"Log in to Crowdin, or register an account as needed"),e("li",null,"Select a source string using the left-hand navigation"),e("li",null,"Add or edit the translation in the lower text area"),e("li",null,"Click \u201CSAVE\u201D below the translation")]),e("div",{class:"warning hint"},[e("div",{class:"hint-title"},"Character Length"),e("p",null,"It is important to keep the character length approximately the same as the source string (English) to avoid truncation or a drastically different wrapping. For example, some text translations will go in a smaller button with limited space for text and no ability to wrap.")]),e("div",{class:"warning hint"},[e("div",{class:"hint-title"},"Suggestions"),e("p",null,"Crowdin provides useful TM and MT suggestions, however you should always confirm that these are context appropriate, as they may not accurately map to the source meaning.")]),e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Request Additional Context"),e("p",null,"If you feel you do not have enough information on how this string is used, you can always ask for additional context using the \u201CComment\u201D section.")]),e("h2",{id:"requesting-a-new-language"},[a("Requesting a New Language "),e("a",{class:"header-anchor",href:"#requesting-a-new-language"},"#")]),e("p",null,[a("To add a new language to the Crowdin service, you can make a request via Crowdin\u2019s "),e("strong",null,"Discussions"),a(" section, or reach out to a Core Team member via "),e("a",{href:"https://directus.chat",target:"_blank",rel:"noopener noreferrer"},"Discord"),a(".")])],-1),u={title:"App Translations",modularExtension:!1},c={name:"translations",setup(g,{expose:n}){return n({frontmatter:{title:"App Translations",modularExtension:!1}}),(h,p)=>{const r=o("docswrapper");return i(),l(r,{frontmatter:u},{default:s(()=>[d]),_:1})}}};typeof t=="function"&&t(c);export{c as default,u as frontmatter};
@@ -1 +0,0 @@
1
- import{a as l,o as h,b as c,w as t,g as o,e as s,B as e}from"./runtime-core.esm-bundler.b1f35d24.js";var r={};const u={class:"markdown-body"},d=o("blockquote",null,[o("p",null,"Each Flow is triggered by some internal or external event.")],-1),g=o("p",null,[o("div",{class:"table-of-contents"},[o("ul",null,[o("li",null,[o("a",{href:"#event-hook"},"Event Hook")]),o("li",null,[o("a",{href:"#webhook"},"Webhook")]),o("li",null,[o("a",{href:"#schedule"},"Schedule")]),o("li",null,[o("a",{href:"#another-flow"},"Another Flow")]),o("li",null,[o("a",{href:"#manual"},"Manual")])])])],-1),_=o("h2",{id:"event-hook"},[e("Event Hook "),o("a",{class:"header-anchor",href:"#event-hook"},"#")],-1),p=o("p",null,[o("img",{src:"https://cdn.directus.io/docs/v9/configuration/flows/triggers/triggers-20220603A/event-hook-20220602A.webp",alt:"Event Hooks"})],-1),w=e("Event Hooks are triggered by platform or data events. The logic is based on "),f=e("Custom API Hooks"),m=e("."),b=o("ul",null,[o("li",null,[o("strong",null,"Type"),e(" \u2014 Choose the type of Event Hook: "),o("ul",null,[o("li",null,[o("strong",null,"Filter (Blocking)"),e(" \u2014 Fires \u201Cblocking\u201D right before the database transaction is committed, allowing you to tweak the payload or even outright prevent completion.")]),o("li",null,[o("strong",null,"Action (Non-Blocking)"),e(" \u2014 Does not block anything. Therefore, this is mostly useful for doing things in response to an event, without slowing down the API.")])])]),o("li",null,[o("strong",null,"Scope"),e(" \u2014 Set the specific events which trip this Trigger.")]),o("li",null,[o("strong",null,"Collections"),e(" \u2014 Set the Collections which trip this Trigger.")]),o("li",null,[o("strong",null,"Response Body"),e(" \u2014 Send Data of last Operation, all Flow Object data, or Flow key.")])],-1),k=o("h2",{id:"webhook"},[e("Webhook "),o("a",{class:"header-anchor",href:"#webhook"},"#")],-1),v=o("p",null,[o("img",{src:"https://cdn.directus.io/docs/v9/configuration/flows/triggers/triggers-20220603A/webhook-20220602A.webp",alt:"Webhook"})],-1),y=o("p",null,[e("Triggered by an incoming HTTP request to: "),o("code",{class:""},"/flows/trigger/:this-webhook-trigger-id"),e(".")],-1),T=o("ul",null,[o("li",null,[o("strong",null,"Method"),e(" \u2014 Choose to make a GET, POST, PATCH, DELETE or other request from the dropdown.")]),o("li",null,[o("strong",null,"Asynchronous"),e(" \u2014 Toggle whether or not the Trigger responds asynchronously.")]),o("li",null,[o("strong",null,"Response Body"),e(" \u2014 Choose to send Data of last Operation, all Flow Object data, or some other key from the Flow object.")])],-1),A=o("h2",{id:"schedule"},[e("Schedule "),o("a",{class:"header-anchor",href:"#schedule"},"#")],-1),F=o("p",null,[o("img",{src:"https://cdn.directus.io/docs/v9/configuration/flows/triggers/triggers-20220603A/cron-20220602A.webp",alt:"Schedule a Cron Job"})],-1),C=o("p",null,"This Trigger allows you to create Data at scheduled intervals, via 6-point cron job syntax.",-1),x=o("ul",null,[o("li",null,[o("strong",null,"Interval"),e(" \u2014 Set the cron job interval to schedule when the Flow triggers.")])],-1),E=o("h2",{id:"another-flow"},[e("Another Flow "),o("a",{class:"header-anchor",href:"#another-flow"},"#")],-1),B=o("p",null,[o("img",{src:"https://cdn.directus.io/docs/v9/configuration/flows/triggers/triggers-20220603A/another-flow-20220602A.webp",alt:"Another Flow"})],-1),S=e("This Trigger executes a Flow via the "),P=e("Trigger Flow"),H=e(" Operation, allowing you to chain Flows together."),O=o("ul",null,[o("li",null,[o("strong",null,"Response Body"),e(" \u2014 Select data to return in the response to Trigger Flow.")])],-1),j=o("h2",{id:"manual"},[e("Manual "),o("a",{class:"header-anchor",href:"#manual"},"#")],-1),D=o("p",null,[o("img",{src:"https://cdn.directus.io/docs/v9/configuration/flows/triggers/triggers-20220603A/manual-20220602A.webp",alt:"Manual"})],-1),I=o("p",null,[e("Triggers on manual click of a button. Based on your "),o("strong",null,"Location"),e(" configuration, a "),o("strong",null,"Flows"),e(" menu will appear in the Sidebar of the Collection Page and/or Item Page. This will contain a button which starts the Flow when clicked.")],-1),M=o("ul",null,[o("li",null,[o("strong",null,"Collections"),e(" \u2014 Choose the Collection(s) to add in this Button on to.")]),o("li",null,[o("strong",null,"Location"),e(" \u2014 Choose to add the button into the Item Page, Collection Page, or both.")]),o("li",null,[o("strong",null,"Asynchronous"),e(" \u2014 Toggle whether or not the Flow executes asynchronously.")])],-1),N={title:"Triggers",modularExtension:!1},q={name:"triggers",setup(L,{expose:i}){return i({frontmatter:{title:"Triggers",modularExtension:!1}}),(R,V)=>{const n=l("router-link"),a=l("docswrapper");return h(),c(a,{frontmatter:N},{default:t(()=>[o("div",u,[d,g,_,p,o("p",null,[w,s(n,{to:"/docs/extensions/hooks/"},{default:t(()=>[f]),_:1}),m]),b,k,v,y,T,A,F,C,x,E,B,o("p",null,[S,s(n,{to:"/docs/configuration/flows/operations/#another-flow"},{default:t(()=>[P]),_:1}),H]),O,j,D,I,M])]),_:1})}}};typeof r=="function"&&r(q);export{q as default,N as frontmatter};
@@ -1,11 +0,0 @@
1
- import{a as s,o as r,b as c,w as i,g as t,B as e}from"./runtime-core.esm-bundler.b1f35d24.js";var n={};const u=t("div",{class:"markdown-body"},[t("p",null,[e("DigitalOcean provides a great tutorial on how to run a Node.js based app in production. See "),t("a",{href:"https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-20-04",target:"_blank",rel:"noopener noreferrer"},"How To Set Up a Node.js Application for Production on Ubuntu 20.04"),e(".")]),t("p",null,[e("Instead of starting the app using "),t("code",{class:""},"pm2 start hello.js"),e(", add the line "),t("code",{class:""},'"start": "directus start"'),e(" in the \u201Cscripts\u201D part of the "),t("em",null,"package.json"),e(" and start Directus using the command "),t("code",{class:""},"pm2 start npm -- start")]),t("p",null,[t("em",null,"Example:")]),t("pre",null,[t("code",{class:"language-json"},`{
2
- "name": "directus",
3
- "version": "1.0.0",
4
- "main": "index.js",
5
- "scripts": {
6
- "test": "echo \\"Error: no test specified\\" && exit 1",
7
- "start": "directus start"
8
- },
9
- ...
10
- }
11
- `)])],-1),l={title:"Ubuntu",modularExtension:!1},p={name:"ubuntu",setup(d,{expose:o}){return o({frontmatter:{title:"Ubuntu",modularExtension:!1}}),(m,f)=>{const a=s("docswrapper");return r(),c(a,{frontmatter:l},{default:i(()=>[u]),_:1})}}};typeof n=="function"&&n(p);export{p as default,l as frontmatter};