@directus/app 9.0.1 → 9.2.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 (386) hide show
  1. package/dist/@directus_extensions-sdk.bfcbcdb2.js +1 -0
  2. package/dist/assets/{active-line.1e85080e.js → active-line.26c5b22c.js} +1 -1
  3. package/dist/assets/{activity-log.f0b81785.js → activity-log.5e4655fe.js} +1 -1
  4. package/dist/assets/{activity.848efa17.js → activity.d1dc970c.js} +5 -5
  5. package/dist/assets/af-ZA.e55141de.js +1 -0
  6. package/dist/assets/{api-endpoints.6b2f9a0a.js → api-endpoints.8828b972.js} +2 -2
  7. package/dist/assets/{apl.81a36d94.js → apl.81ad0f83.js} +1 -1
  8. package/dist/assets/{app-overview.9d9e9cee.svg → app-overview.1d041c7b.svg} +2 -1
  9. package/dist/assets/{ar-SA.3368322c.js → ar-SA.c14aed74.js} +1 -1
  10. package/dist/assets/{asciiarmor.41807b38.js → asciiarmor.76e6426d.js} +1 -1
  11. package/dist/assets/{asn.1.2fb547c7.js → asn.1.71a91aed.js} +1 -1
  12. package/dist/assets/{asterisk.f25d8cae.js → asterisk.80f8502f.js} +1 -1
  13. package/dist/assets/{authentication.595f862f.js → authentication.2cacaeb9.js} +10 -9
  14. package/dist/assets/{autorefresh.47068160.js → autorefresh.b4c043fd.js} +1 -1
  15. package/dist/assets/{aws.684d8f17.js → aws.80878698.js} +1 -1
  16. package/dist/assets/{backing-directus.75b705d8.js → backing-directus.61d6e724.js} +1 -1
  17. package/dist/assets/bg-BG.2ccc4340.js +2 -0
  18. package/dist/assets/{br-FR.7a926846.js → br-FR.ac76f3c4.js} +1 -1
  19. package/dist/assets/{brainfuck.0eb32d6a.js → brainfuck.9cb7bbc7.js} +1 -1
  20. package/dist/assets/{ca-ES.2e706764.js → ca-ES.bb7c5b19.js} +1 -1
  21. package/dist/assets/{cli.6bc58792.js → cli.5550afc3.js} +2 -2
  22. package/dist/assets/cli.63d72df5.js +10 -0
  23. package/dist/assets/{clike.8a91e766.js → clike.e00b6fc0.js} +1 -1
  24. package/dist/assets/{clojure.680b2086.js → clojure.809a239a.js} +1 -1
  25. package/dist/assets/cloudron.faaaab54.js +1 -0
  26. package/dist/assets/cmake.9e2c3af3.js +1 -0
  27. package/dist/assets/{cobol.11746877.js → cobol.34952893.js} +1 -1
  28. package/dist/assets/{codebase-overview.bec34b38.js → codebase-overview.e1e8f010.js} +1 -1
  29. package/dist/assets/{coffeescript.cc7b12bb.js → coffeescript.961bb7e7.js} +1 -1
  30. package/dist/assets/{collections.fb0eff5f.js → collections.2a7f6562.js} +4 -4
  31. package/dist/assets/{commonlisp.81cf66cf.js → commonlisp.55bc3390.js} +1 -1
  32. package/dist/assets/{config-options.5ba591a6.js → config-options.7faffebc.js} +12 -12
  33. package/dist/assets/{content-collections.b24311e4.js → content-collections.a7de45b5.js} +1 -1
  34. package/dist/assets/{content-items.16fafd36.js → content-items.e9d9529c.js} +1 -1
  35. package/dist/assets/{content.31f08958.js → content.557c9218.js} +1 -1
  36. package/dist/assets/{crystal.88773be1.js → crystal.d7313cde.js} +1 -1
  37. package/dist/assets/css.17df7ad1.js +1 -0
  38. package/dist/assets/{cypher.62d62091.js → cypher.b89065cc.js} +1 -1
  39. package/dist/assets/{d.235b72e5.js → d.174a69ec.js} +1 -1
  40. package/dist/assets/{da-DK.0bec4b59.js → da-DK.3bcf884c.js} +1 -1
  41. package/dist/assets/{dart.d5e0dc33.js → dart.d0eb6182.js} +1 -1
  42. package/dist/assets/data-model.6fb88bd6.js +1 -0
  43. package/dist/assets/{de-DE.4b4b8e70.js → de-DE.cdcb9600.js} +1 -1
  44. package/dist/assets/{diff.236ec957.js → diff.b7a4963f.js} +1 -1
  45. package/dist/assets/digitalocean-app-platform.bf1a04c0.js +3 -0
  46. package/dist/assets/{displays.c55af3d6.js → displays.add8fe2c.js} +5 -5
  47. package/dist/assets/{django.b7dc3aae.js → django.da7ed745.js} +1 -1
  48. package/dist/assets/{docker.d76fac42.js → docker.1b49ec74.js} +1 -1
  49. package/dist/assets/{dockerfile.1019efd6.js → dockerfile.d6d3e269.js} +1 -1
  50. package/dist/assets/{documentation.1092ea83.js → documentation.7336014f.js} +1 -1
  51. package/dist/assets/{dtd.2a851c5f.js → dtd.45e86e6d.js} +1 -1
  52. package/dist/assets/{dylan.9bb2cd36.js → dylan.ec84c04e.js} +1 -1
  53. package/dist/assets/{ebnf.276406d3.js → ebnf.085fa852.js} +1 -1
  54. package/dist/assets/{ecl.11564c5b.js → ecl.270e9abf.js} +1 -1
  55. package/dist/assets/{eiffel.be49a681.js → eiffel.336802c1.js} +1 -1
  56. package/dist/assets/{elm.5c8852f7.js → elm.da8b96b6.js} +1 -1
  57. package/dist/assets/{email-templates.3c6a781e.js → email-templates.bf41e36a.js} +2 -2
  58. package/dist/assets/en-GB.361d696e.js +1 -0
  59. package/dist/assets/{erlang.ead9639d.js → erlang.b2f5e3ff.js} +1 -1
  60. package/dist/assets/es-419.994854a0.js +1 -0
  61. package/dist/assets/es-CL.3bf346ef.js +1 -0
  62. package/dist/assets/es-ES.5be51e8b.js +1 -0
  63. package/dist/assets/{et-EE.8aa32a45.js → et-EE.da648eba.js} +1 -1
  64. package/dist/assets/{extensions.b76bdde3.js → extensions.b3034cc8.js} +2 -2
  65. package/dist/assets/{factor.eed233f0.js → factor.5f1bd905.js} +1 -1
  66. package/dist/assets/faq.7223b3ed.js +1 -0
  67. package/dist/assets/{fcl.271814f0.js → fcl.fdd412a4.js} +1 -1
  68. package/dist/assets/fi-FI.64bf9412.js +1 -0
  69. package/dist/assets/{fields.238d924d.js → fields.a2b84f49.js} +2 -2
  70. package/dist/assets/{file-library.d7ca55fc.js → file-library.5f224a0d.js} +1 -1
  71. package/dist/assets/{files.92988e46.js → files.89714327.js} +1 -1
  72. package/dist/assets/{filter-rules.339629f8.js → filter-rules.b16f33ad.js} +2 -2
  73. package/dist/assets/{folders.54e223af.js → folders.964cb698.js} +4 -4
  74. package/dist/assets/{forth.5c226e69.js → forth.5e4a638c.js} +1 -1
  75. package/dist/assets/{fortran.a1e621fd.js → fortran.d037a8e9.js} +1 -1
  76. package/dist/assets/fr-FR.2b742996.js +1 -0
  77. package/dist/assets/{gas.249ccc95.js → gas.c1fb542a.js} +1 -1
  78. package/dist/assets/{gfm.392719b7.js → gfm.ef15b019.js} +1 -1
  79. package/dist/assets/{gherkin.f1c57004.js → gherkin.f2284a3d.js} +1 -1
  80. package/dist/assets/{github-ci.0ba5d515.js → github-ci.1993f260.js} +2 -2
  81. package/dist/assets/{glossary.4258b82f.js → glossary.53f5ccae.js} +1 -1
  82. package/dist/assets/{go.55fe2209.js → go.ee521b37.js} +1 -1
  83. package/dist/assets/{groovy.49803548.js → groovy.ff223850.js} +1 -1
  84. package/dist/assets/{haml.00447402.js → haml.dfd3a15e.js} +1 -1
  85. package/dist/assets/{handlebars.2c2675b3.js → handlebars.ee000b2a.js} +1 -1
  86. package/dist/assets/{haskell-literate.f95e4126.js → haskell-literate.7be3e5e8.js} +1 -1
  87. package/dist/assets/{haskell.613e1328.js → haskell.f0f6d0b5.js} +1 -1
  88. package/dist/assets/{haxe.e363e2e2.js → haxe.d7974a6e.js} +1 -1
  89. package/dist/assets/hi-IN.f686e98f.js +1 -0
  90. package/dist/assets/hooks.995bf7f1.js +72 -0
  91. package/dist/assets/{htmlembedded.5a5f0ffe.js → htmlembedded.fbe7b06d.js} +1 -1
  92. package/dist/assets/{htmlmixed.05e7a4e9.js → htmlmixed.8b21831b.js} +1 -1
  93. package/dist/assets/{http.36bf71f5.js → http.e1dcc6a6.js} +1 -1
  94. package/dist/assets/{hu-HU.1043806e.js → hu-HU.fc2083ad.js} +1 -1
  95. package/dist/assets/{id-ID.42c8e6ba.js → id-ID.06f8c7ad.js} +1 -1
  96. package/dist/assets/{idl.369d3687.js → idl.182ee0a1.js} +1 -1
  97. package/dist/assets/{iis.61b90801.js → iis.751d4784.js} +3 -2
  98. package/dist/assets/{index.53d7b4b1.js → index.00342ce9.js} +1 -1
  99. package/dist/assets/{index.7cb6c8da.js → index.06705dee.js} +1 -1
  100. package/dist/assets/{index.1fd33265.js → index.0aaf58e2.js} +1 -1
  101. package/dist/assets/{index.49fe7bbe.js → index.0b37920b.js} +1 -1
  102. package/dist/assets/{index.255ac1ac.js → index.0e9f9cdb.js} +1 -1
  103. package/dist/assets/{index.376099f6.js → index.10fa61dd.js} +1 -1
  104. package/dist/assets/{index.bd34bd8b.js → index.170c9aef.js} +1 -1
  105. package/dist/assets/{index.65c5205d.js → index.195486a9.js} +1 -1
  106. package/dist/assets/{index.bd506b24.js → index.1bd2ce1d.js} +1 -1
  107. package/dist/assets/{index.d03ceb16.js → index.1cb1c89c.js} +1 -1
  108. package/dist/assets/{index.aa99cd2b.js → index.1ef64264.js} +1 -1
  109. package/dist/assets/{index.f8360683.js → index.24dc2b50.js} +1 -1
  110. package/dist/assets/index.2603f9b4.css +1 -0
  111. package/dist/assets/{index.5ef6863e.js → index.2a532c34.js} +1 -1
  112. package/dist/assets/{index.e713a183.js → index.2c7690b7.js} +1 -1
  113. package/dist/assets/index.2ca0b263.css +1 -0
  114. package/dist/assets/{index.40abc1ae.js → index.2f09b0ab.js} +1 -1
  115. package/dist/assets/{index.6690c511.js → index.31d6290e.js} +1 -1
  116. package/dist/assets/{index.e65c230c.js → index.35b3227d.js} +1 -1
  117. package/dist/assets/{index.e68f5a19.js → index.3a55cb7a.js} +1 -1
  118. package/dist/assets/{index.f526c37a.js → index.3cdbbf75.js} +1 -1
  119. package/dist/assets/{index.7e86f332.js → index.3e7346f6.js} +1 -1
  120. package/dist/assets/{index.15d4ddd7.js → index.42b5c185.js} +1 -1
  121. package/dist/assets/{index.9597bb18.js → index.48b2303e.js} +1 -1
  122. package/dist/assets/{index.64b8816b.js → index.48e8585e.js} +1 -1
  123. package/dist/assets/{index.bba3d752.js → index.4b7ce3d9.js} +1 -1
  124. package/dist/assets/{index.31d1f296.js → index.50e58393.js} +1 -1
  125. package/dist/assets/{index.8fbbb686.js → index.570f038e.js} +1 -1
  126. package/dist/assets/{index.900f92f9.js → index.5ae5f490.js} +1 -1
  127. package/dist/assets/{index.19d9989e.js → index.5e1fa0bf.js} +1 -1
  128. package/dist/assets/{index.5caafb3d.js → index.609e713c.js} +1 -1
  129. package/dist/assets/{index.87946fe5.js → index.60c625fe.js} +1 -1
  130. package/dist/assets/{index.c36b50cf.js → index.63f139be.js} +1 -1
  131. package/dist/assets/{index.216b6328.js → index.640dd223.js} +1 -1
  132. package/dist/assets/{index.bee706b8.js → index.64591ec8.js} +1 -1
  133. package/dist/assets/{index.54a202be.js → index.65f3fbd9.js} +1 -1
  134. package/dist/assets/{index.5e175966.js → index.6df3a744.js} +1 -1
  135. package/dist/assets/{index.0caa5421.js → index.7250277a.js} +1 -1
  136. package/dist/assets/{index.0bd18bfd.js → index.72b20962.js} +1 -1
  137. package/dist/assets/{index.3c3c9275.js → index.777a345b.js} +1 -1
  138. package/dist/assets/{index.5d4c645c.js → index.7a4b3279.js} +1 -1
  139. package/dist/assets/{index.1d3c8b76.js → index.7b7bd2bb.js} +1 -1
  140. package/dist/assets/{index.1d2a8b64.js → index.7bd8fa33.js} +1 -1
  141. package/dist/assets/{index.f07bb8da.js → index.7f11024e.js} +1 -1
  142. package/dist/assets/{index.15f9b058.js → index.825757de.js} +1 -1
  143. package/dist/assets/{index.8e104536.js → index.85487066.js} +1 -1
  144. package/dist/assets/{index.83459924.js → index.91f9a8ea.js} +1 -1
  145. package/dist/assets/{index.550c7d98.js → index.9a34d0ad.js} +1 -1
  146. package/dist/assets/{index.d6eb48fd.js → index.9be0af27.js} +1 -1
  147. package/dist/assets/{index.266ef2c9.js → index.9df68447.js} +1 -1
  148. package/dist/assets/{index.0ed888d7.js → index.a142ec45.js} +1 -1
  149. package/dist/assets/{index.c2ece3ef.js → index.a3746c49.js} +1 -1
  150. package/dist/assets/{index.14bae658.js → index.aae790c3.js} +1 -1
  151. package/dist/assets/{index.b7e06d7c.js → index.ac5309a7.js} +1 -1
  152. package/dist/assets/{index.29fa87ff.js → index.adcd313e.js} +1 -1
  153. package/dist/assets/{index.b73273e0.js → index.af1f4431.js} +1 -1
  154. package/dist/assets/{index.61b86afb.js → index.b24bf29e.js} +1 -1
  155. package/dist/assets/{index.77f16025.js → index.b4db14a9.js} +1 -1
  156. package/dist/assets/{index.0b9941e1.js → index.b7968e56.js} +1 -1
  157. package/dist/assets/{index.0fb52a97.js → index.b803b5c0.js} +1 -1
  158. package/dist/assets/{index.94db319d.js → index.b94dcef9.js} +1 -1
  159. package/dist/assets/{index.5a304363.js → index.bb294572.js} +1 -1
  160. package/dist/assets/{index.59451527.js → index.bc07556a.js} +1 -1
  161. package/dist/assets/{index.aa7706f9.js → index.bdce1888.js} +1 -1
  162. package/dist/assets/{index.7a811ff8.js → index.be10baeb.js} +1 -1
  163. package/dist/assets/{index.b2adcd91.js → index.c046a8fd.js} +1 -1
  164. package/dist/assets/{index.1fb6fed8.js → index.c242e7b6.js} +1 -1
  165. package/dist/assets/{index.0ba5b42a.js → index.c5418cbb.js} +1 -1
  166. package/dist/assets/{index.6da8ed8b.js → index.c875d5a1.js} +1 -1
  167. package/dist/assets/{index.544fc3f4.js → index.cc291dcf.js} +1 -1
  168. package/dist/assets/{index.11bd8819.js → index.d15bff6b.js} +1 -1
  169. package/dist/assets/{index.1a242848.js → index.dd5da334.js} +1 -1
  170. package/dist/assets/{index.b75dc5c2.js → index.de5fa400.js} +1 -1
  171. package/dist/assets/{index.2ffae100.js → index.e59eb90f.js} +1 -1
  172. package/dist/assets/{index.8c729bf2.js → index.e8e78fe0.js} +1 -1
  173. package/dist/assets/{index.5286e9da.js → index.ee87082d.js} +1 -1
  174. package/dist/assets/index.eeba3fe9.js +26 -0
  175. package/dist/assets/{index.5c71b9bf.js → index.f2468536.js} +1 -1
  176. package/dist/assets/{index.9c37c372.js → index.f2f83988.js} +1 -1
  177. package/dist/assets/{index.750b633c.js → index.f650bdd2.js} +1 -1
  178. package/dist/assets/{index.dc1688d8.js → index.f992167b.js} +1 -1
  179. package/dist/assets/{index.19ae9f48.js → index.fc0d2b63.js} +1 -1
  180. package/dist/assets/{index.fefbb129.js → index.fd87d3cb.js} +1 -1
  181. package/dist/assets/{input-rich-text-html.67ebfae2.css → input-rich-text-html.01165183.css} +1 -1
  182. package/dist/assets/{input-rich-text-html.8fe88ffb.js → input-rich-text-html.c2f628ae.js} +43 -43
  183. package/dist/assets/{insights.fe74fe29.js → insights.35419fea.js} +1 -1
  184. package/dist/assets/installation.eae7bc78.js +1 -0
  185. package/dist/assets/{interfaces.23229e78.js → interfaces.106447a6.js} +7 -7
  186. package/dist/assets/{introduction.16f8f0b0.js → introduction.775bd94e.js} +1 -1
  187. package/dist/assets/introduction.8f825d90.js +1 -0
  188. package/dist/assets/{introduction.e29b10c2.js → introduction.9780c035.js} +7 -7
  189. package/dist/assets/{introduction.02e3c2a7.js → introduction.b9bb6e01.js} +2 -2
  190. package/dist/assets/it-IT.14bfc0b6.js +1 -0
  191. package/dist/assets/{items.4227ac2d.js → items.50d09d96.js} +6 -6
  192. package/dist/assets/ja-JP.ba312533.js +1 -0
  193. package/dist/assets/{javascript-hint.747ac6fc.js → javascript-hint.ef0fe16e.js} +1 -1
  194. package/dist/assets/{javascript.84e4549d.js → javascript.38e2ca1a.js} +1 -1
  195. package/dist/assets/{jinja2.a9a0ddb1.js → jinja2.8648ef63.js} +1 -1
  196. package/dist/assets/{jsx.5d18b001.js → jsx.9a8d51d6.js} +1 -1
  197. package/dist/assets/{julia.12cc2a8c.js → julia.c4e037f7.js} +1 -1
  198. package/dist/assets/ku-TR.3322375c.js +1 -0
  199. package/dist/assets/{layouts.1bd78154.js → layouts.ba122738.js} +5 -5
  200. package/dist/assets/{livescript.f585b533.js → livescript.d673b991.js} +1 -1
  201. package/dist/assets/{localization.a73190dd.js → localization.47f8e7e5.js} +1 -1
  202. package/dist/assets/logo-light.7a327cdd.svg +3 -0
  203. package/dist/assets/{lt-LT.69b9046b.js → lt-LT.497afd55.js} +1 -1
  204. package/dist/assets/{lua.a656cb84.js → lua.7cfb30be.js} +1 -1
  205. package/dist/assets/{manual.794bb884.js → manual.6d92664d.js} +4 -4
  206. package/dist/assets/{mark-selection.98a1b6fc.js → mark-selection.665c33af.js} +1 -1
  207. package/dist/assets/{match-highlighter.e1444e0b.js → match-highlighter.ffb4832f.js} +1 -1
  208. package/dist/assets/{mathematica.448ae8b5.js → mathematica.93a46a1f.js} +1 -1
  209. package/dist/assets/{mbox.977764b6.js → mbox.deb92f82.js} +1 -1
  210. package/dist/assets/migrations.ca569233.js +19 -0
  211. package/dist/assets/{mirc.ac98dd7b.js → mirc.96b69659.js} +1 -1
  212. package/dist/assets/{mllike.ee7c202f.js → mllike.2604471e.js} +1 -1
  213. package/dist/assets/{modelica.0e691287.js → modelica.07417903.js} +1 -1
  214. package/dist/assets/{modules.116e46b4.js → modules.3f25c2ca.js} +6 -6
  215. package/dist/assets/{mscgen.4c9c356e.js → mscgen.ce94fb84.js} +1 -1
  216. package/dist/assets/{multiplex.91d67c6e.js → multiplex.553fdcf6.js} +1 -1
  217. package/dist/assets/{mumps.c8a6b66b.js → mumps.6d4f6a77.js} +1 -1
  218. package/dist/assets/{nginx.048f88c1.js → nginx.1b1b7a85.js} +1 -1
  219. package/dist/assets/{nl-NL.bff34791.js → nl-NL.edb61cc3.js} +1 -1
  220. package/dist/assets/no-NO.ebaacb8a.js +1 -0
  221. package/dist/assets/notifications.7d5b4018.js +153 -0
  222. package/dist/assets/{nsis.1830f129.js → nsis.800b8ecf.js} +1 -1
  223. package/dist/assets/{ntriples.dff164ff.js → ntriples.5b70253c.js} +1 -1
  224. package/dist/assets/{octave.27aaa450.js → octave.d674345b.js} +1 -1
  225. package/dist/assets/{overlay.ff3e2ac4.js → overlay.aaae46c1.js} +1 -1
  226. package/dist/assets/{overview.c3721f80.js → overview.391169f1.js} +1 -1
  227. package/dist/assets/overview.b3257d1a.js +1 -0
  228. package/dist/assets/{oz.c625131c.js → oz.a57cd6c6.js} +1 -1
  229. package/dist/assets/{panels.c9913c4b.js → panels.3d54322a.js} +1 -1
  230. package/dist/assets/{pascal.2c02faa8.js → pascal.bd6858f9.js} +1 -1
  231. package/dist/assets/{pegjs.0854aa70.js → pegjs.094d5776.js} +1 -1
  232. package/dist/assets/{perl.6bf3c050.js → perl.3aa60c3c.js} +1 -1
  233. package/dist/assets/{permissions.83661a53.js → permissions.564eb072.js} +4 -4
  234. package/dist/assets/php.aad9a05c.js +1 -0
  235. package/dist/assets/{pig.f6acccd0.js → pig.60e1b8d9.js} +1 -1
  236. package/dist/assets/pl-PL.fcac44cc.js +1 -0
  237. package/dist/assets/{plesk.20b032fb.js → plesk.938ab777.js} +6 -6
  238. package/dist/assets/{powershell.3fe72e38.js → powershell.bff1f89c.js} +1 -1
  239. package/dist/assets/{presets-bookmarks.dfa9b52f.js → presets-bookmarks.b268b023.js} +1 -1
  240. package/dist/assets/{presets.7e0c88ae.js → presets.cff54053.js} +1 -1
  241. package/dist/assets/project-settings.c887fbea.js +1 -0
  242. package/dist/assets/{properties.8c3f631c.js → properties.0698e9c9.js} +1 -1
  243. package/dist/assets/{protobuf.ff5609be.js → protobuf.3cefb795.js} +1 -1
  244. package/dist/assets/pt-BR.eff6bc85.js +1 -0
  245. package/dist/assets/{pt-PT.b923e241.js → pt-PT.33683147.js} +1 -1
  246. package/dist/assets/{pug.e66669ae.js → pug.2823ac37.js} +1 -1
  247. package/dist/assets/{puppet.8585cc4d.js → puppet.6b5f8999.js} +1 -1
  248. package/dist/assets/{python.ce0163fc.js → python.f0335e64.js} +1 -1
  249. package/dist/assets/{q.4a99aff9.js → q.ab5b1dd7.js} +1 -1
  250. package/dist/assets/{query.998e770c.js → query.065bc71e.js} +3 -3
  251. package/dist/assets/{quickstart.1aa6ffca.js → quickstart.cdf47561.js} +3 -3
  252. package/dist/assets/{r.d0ae744a.js → r.cc002fd5.js} +1 -1
  253. package/dist/assets/{relations.7edadd3b.js → relations.028171dc.js} +4 -4
  254. package/dist/assets/{relationships.b6ef88eb.js → relationships.dc4de6fe.js} +14 -17
  255. package/dist/assets/{revisions.9a70b1ec.js → revisions.9c06a6cd.js} +3 -3
  256. package/dist/assets/{roles.f017240c.js → roles.05aa20d3.js} +7 -7
  257. package/dist/assets/{rpm.f0a7ad70.js → rpm.16e37784.js} +1 -1
  258. package/dist/assets/rst.bc8cd4f0.js +1 -0
  259. package/dist/assets/ru-RU.2e06b3ed.js +1 -0
  260. package/dist/assets/{ruby.4d15c7d1.js → ruby.207c3c8d.js} +1 -1
  261. package/dist/assets/{running-locally.bd69d8dc.js → running-locally.74954cf8.js} +5 -5
  262. package/dist/assets/{rust.e4dfe0d4.js → rust.e5e8db34.js} +1 -1
  263. package/dist/assets/{sas.709abdd1.js → sas.732c1fb5.js} +1 -1
  264. package/dist/assets/{sass.2505dd07.js → sass.a6d54759.js} +1 -1
  265. package/dist/assets/{scheme.897fc126.js → scheme.bf86a054.js} +1 -1
  266. package/dist/assets/sdk.027e1905.js +300 -0
  267. package/dist/assets/{security.548b2b76.js → security.3ecda9dd.js} +1 -1
  268. package/dist/assets/{server.d6f5abdc.js → server.2f493acf.js} +4 -4
  269. package/dist/assets/{settings.4b550f79.js → settings.5730c27d.js} +1 -1
  270. package/dist/assets/{settings.5c0f889e.js → settings.9e861c3c.js} +9 -5
  271. package/dist/assets/{shell.19de1cf8.js → shell.29cd4035.js} +1 -1
  272. package/dist/assets/{show-hint.0412391d.js → show-hint.23eb7a45.js} +1 -1
  273. package/dist/assets/{sieve.da5795e7.js → sieve.d831b5ce.js} +1 -1
  274. package/dist/assets/{simple.ab4d8d4b.js → simple.312a5b01.js} +1 -1
  275. package/dist/assets/{sl-SI.bfbe276b.js → sl-SI.41305ef8.js} +1 -1
  276. package/dist/assets/{slim.2805b872.js → slim.cab15ca2.js} +1 -1
  277. package/dist/assets/{smalltalk.ee9f0dd3.js → smalltalk.4f6a7ed7.js} +1 -1
  278. package/dist/assets/{smarty.08c649b4.js → smarty.a78117f3.js} +1 -1
  279. package/dist/assets/{solr.36ddf5d2.js → solr.f90334b7.js} +1 -1
  280. package/dist/assets/soy.d1e38e2c.js +1 -0
  281. package/dist/assets/{sparql.e90ce227.js → sparql.3d8087d4.js} +1 -1
  282. package/dist/assets/{spreadsheet.812bc4c1.js → spreadsheet.3b78c411.js} +1 -1
  283. package/dist/assets/sql.5f7a694e.js +1 -0
  284. package/dist/assets/{sr-CS.b4de8472.js → sr-CS.0b70ed56.js} +1 -1
  285. package/dist/assets/sso.2a03ed28.js +22 -0
  286. package/dist/assets/{stex.8fe110b6.js → stex.d0d6fa5e.js} +1 -1
  287. package/dist/assets/stylus.bb6171bb.js +1 -0
  288. package/dist/assets/{support.618bb824.js → support.f442955d.js} +1 -1
  289. package/dist/assets/sv-SE.07c9dbad.js +1 -0
  290. package/dist/assets/{swift.a963a96b.js → swift.599d450c.js} +1 -1
  291. package/dist/assets/{tcl.c00f0ec5.js → tcl.30b6bd0a.js} +1 -1
  292. package/dist/assets/{textile.431d240b.js → textile.2aaadb71.js} +1 -1
  293. package/dist/assets/{th-TH.81e128af.js → th-TH.51bd50db.js} +1 -1
  294. package/dist/assets/{themes.ec95c8cb.js → themes.7af7ef21.js} +2 -2
  295. package/dist/assets/{tiddlywiki.1b4d0a22.js → tiddlywiki.6c21f5fe.js} +1 -1
  296. package/dist/assets/{tiki.d37bbabb.js → tiki.f7b3b608.js} +1 -1
  297. package/dist/assets/{toml.1475fc5c.js → toml.70cd3de1.js} +1 -1
  298. package/dist/assets/{tornado.e812c41b.js → tornado.da87f7ab.js} +1 -1
  299. package/dist/assets/{tr-TR.0be85b79.js → tr-TR.fea3a7da.js} +1 -1
  300. package/dist/assets/{translations.8406cfe3.js → translations.c313e520.js} +1 -1
  301. package/dist/assets/{troff.52251200.js → troff.057eadf9.js} +1 -1
  302. package/dist/assets/{ttcn-cfg.4e31c9ce.js → ttcn-cfg.0acb6ffd.js} +1 -1
  303. package/dist/assets/{ttcn.3ea9f7e4.js → ttcn.5cb1c005.js} +1 -1
  304. package/dist/assets/{turtle.7f166fc9.js → turtle.f8cfe16f.js} +1 -1
  305. package/dist/assets/{twig.7c77b8f7.js → twig.bbb4c257.js} +1 -1
  306. package/dist/assets/ubuntu.195a12bc.js +11 -0
  307. package/dist/assets/uk-UA.b339fbea.js +1 -0
  308. package/dist/assets/{upgrades-migrations.df5c4042.js → upgrades-migrations.4262de4c.js} +1 -1
  309. package/dist/assets/use-sync.df5f0627.js +1 -0
  310. package/dist/assets/{user-directory.63d4d638.js → user-directory.315e2e53.js} +1 -1
  311. package/dist/assets/{users-roles-permissions.68584449.js → users-roles-permissions.1d02ef32.js} +1 -1
  312. package/dist/assets/{users.c3c87007.js → users.850440e1.js} +19 -19
  313. package/dist/assets/{utilities.e7ef40fc.js → utilities.a706557a.js} +3 -3
  314. package/dist/assets/{vb.1551d2a2.js → vb.227d7bae.js} +1 -1
  315. package/dist/assets/{vbscript.0c1ac8ad.js → vbscript.b4c906c8.js} +1 -1
  316. package/dist/assets/{velocity.63a0cbb3.js → velocity.1dc1dd7a.js} +1 -1
  317. package/dist/assets/vendor.327371af.js +2039 -0
  318. package/dist/assets/{verilog.37081dae.js → verilog.00006420.js} +1 -1
  319. package/dist/assets/{vhdl.8c76cefa.js → vhdl.7ea928c0.js} +1 -1
  320. package/dist/assets/{vi-VN.14101822.js → vi-VN.12000d52.js} +1 -1
  321. package/dist/assets/{vue.2098315b.js → vue.06dc381f.js} +1 -1
  322. package/dist/assets/{wast.b90e42f3.js → wast.9ebd9127.js} +1 -1
  323. package/dist/assets/{webhooks.2dd2256f.js → webhooks.27290345.js} +5 -5
  324. package/dist/assets/{webhooks.59b09c0d.js → webhooks.40c7a452.js} +1 -1
  325. package/dist/assets/{webidl.76dda28b.js → webidl.91787b9d.js} +1 -1
  326. package/dist/assets/{xquery.5d4fe342.js → xquery.8f2f2640.js} +1 -1
  327. package/dist/assets/{yacas.b1b2324d.js → yacas.e74d7b64.js} +1 -1
  328. package/dist/assets/{yaml-frontmatter.6a71ce09.js → yaml-frontmatter.09f551ca.js} +1 -1
  329. package/dist/assets/{yaml.ca3ba26d.js → yaml.6c188844.js} +1 -1
  330. package/dist/assets/{z80.a23bb6d3.js → z80.2ec7da50.js} +1 -1
  331. package/dist/assets/zh-CN.7e212f77.js +1 -0
  332. package/dist/assets/{zh-TW.3efec3f7.js → zh-TW.ef28a778.js} +1 -1
  333. package/dist/index.0b1b074c.js +351 -0
  334. package/dist/index.html +4 -4
  335. package/dist/vue-i18n.9dd4f933.js +1 -0
  336. package/dist/vue-router.1ce019c2.js +1 -0
  337. package/dist/vue.6e63c09e.js +1 -0
  338. package/package.json +18 -17
  339. package/dist/@directus_extensions-sdk.8dd2238a.js +0 -1
  340. package/dist/assets/af-ZA.5bc87dbc.js +0 -1
  341. package/dist/assets/bg-BG.9212fbf7.js +0 -2
  342. package/dist/assets/cli.9c35ba03.js +0 -10
  343. package/dist/assets/cmake.59d9f97d.js +0 -1
  344. package/dist/assets/css.f0a27894.js +0 -1
  345. package/dist/assets/data-model.66f7e0e4.js +0 -1
  346. package/dist/assets/digitalocean-app-platform.d8054fb4.js +0 -3
  347. package/dist/assets/es-419.f8a62d18.js +0 -1
  348. package/dist/assets/es-CL.76c7e2d1.js +0 -1
  349. package/dist/assets/es-ES.f23f1053.js +0 -1
  350. package/dist/assets/faq.e629faf1.js +0 -1
  351. package/dist/assets/fi-FI.26f5b2cc.js +0 -1
  352. package/dist/assets/fr-FR.e2625f19.js +0 -1
  353. package/dist/assets/hi-IN.d224762a.js +0 -1
  354. package/dist/assets/hooks.9441eb32.js +0 -75
  355. package/dist/assets/index.570f6759.js +0 -26
  356. package/dist/assets/index.9fb5b610.css +0 -1
  357. package/dist/assets/index.a49dcfb2.css +0 -1
  358. package/dist/assets/installation.24a44faf.js +0 -1
  359. package/dist/assets/introduction.25a5119e.js +0 -1
  360. package/dist/assets/it-IT.3c8c35dd.js +0 -1
  361. package/dist/assets/ja-JP.1e745c98.js +0 -1
  362. package/dist/assets/ku-TR.62749d99.js +0 -1
  363. package/dist/assets/logo-light.1a93a59d.svg +0 -3
  364. package/dist/assets/migrations.992a23b0.js +0 -15
  365. package/dist/assets/no-NO.66c87fac.js +0 -1
  366. package/dist/assets/overview.b56593b7.js +0 -1
  367. package/dist/assets/php.7f583bfa.js +0 -1
  368. package/dist/assets/pl-PL.8f26d744.js +0 -1
  369. package/dist/assets/project-settings.31256b54.js +0 -1
  370. package/dist/assets/pt-BR.e623fc8a.js +0 -1
  371. package/dist/assets/rst.f0464fbc.js +0 -1
  372. package/dist/assets/ru-RU.fec4e20e.js +0 -1
  373. package/dist/assets/sdk.b41be838.js +0 -282
  374. package/dist/assets/soy.2c180864.js +0 -1
  375. package/dist/assets/sql.f222e1b8.js +0 -1
  376. package/dist/assets/stylus.02531228.js +0 -1
  377. package/dist/assets/sv-SE.1739ab58.js +0 -1
  378. package/dist/assets/ubuntu.67ddbadb.js +0 -11
  379. package/dist/assets/uk-UA.46578a03.js +0 -1
  380. package/dist/assets/use-sync.da76e524.js +0 -1
  381. package/dist/assets/vendor.299bc11c.js +0 -2039
  382. package/dist/assets/zh-CN.355da8e5.js +0 -1
  383. package/dist/index.0f7650cb.js +0 -340
  384. package/dist/vue-i18n.b2a4a29c.js +0 -1
  385. package/dist/vue-router.cd2fde56.js +0 -1
  386. package/dist/vue.642980f3.js +0 -1
@@ -1,75 +0,0 @@
1
- import{p as o,q as a,C as c,v as u,M as l,D as e}from"./vendor.299bc11c.js";const r=l("div",{class:"markdown-body"},[l("blockquote",null,[l("p",null,"Custom API Hooks allow running custom logic when a specified event occurs within your project. They can be registered as either \u201Cblocking\u201D or immediate.")]),l("h2",{id:"1.-create-a-hook-file"},[e("1. Create a Hook File "),l("a",{class:"header-anchor",href:"#1.-create-a-hook-file"},"#")]),l("p",null,[e("Custom hooks are dynamically loaded from within your extensions folder. By default this directory is located at "),l("code",null,"/extensions"),e(", but it can be configured within your project\u2019s env file to be located anywhere.")]),l("h3",{id:"default-standalone-hook-location"},[e("Default Standalone Hook Location "),l("a",{class:"header-anchor",href:"#default-standalone-hook-location"},"#")]),l("pre",null,[l("code",null,`/extensions/hooks/<hook-id>/index.js
2
- `)]),l("h2",{id:"2.-define-the-event"},[e("2. Define the Event "),l("a",{class:"header-anchor",href:"#2.-define-the-event"},"#")]),l("p",null,"Next, you will want to define your event. You can trigger your custom hook with any of the platform\u2019s many API events. An event is defined by its type and its name."),l("p",null,"Event names consist of multiple scopes delimited by a dot:"),l("pre",null,[l("code",null,`<scope>.<scope>...
3
- // eg: items.create
4
- // eg: users.update
5
- // eg: auth.login
6
- // eg: routes.custom.before
7
- `)]),l("p",null,"There are four event types to choose from."),l("h3",{id:"filter"},[e("Filter "),l("a",{class:"header-anchor",href:"#filter"},"#")]),l("p",null,"A filter event executes prior to the event being fired. This allows you to check and/or modify the event\u2019s payload before it is processed."),l("p",null,"It also allows you to cancel an event based on the logic within the hook. Below is an example of how you can cancel a create event by throwing a standard Directus exception."),l("pre",null,[l("code",{class:"language-js"},[l("span",{class:"hljs-built_in"},"module"),e(".exports = "),l("span",{class:"hljs-function"},[l("span",{class:"hljs-keyword"},"function"),e(),l("span",{class:"hljs-title"},"registerHook"),e("("),l("span",{class:"hljs-params"},"{ filter }, { exceptions }"),e(") ")]),e(`{
8
- `),l("span",{class:"hljs-keyword"},"const"),e(` { InvalidPayloadException } = exceptions;
9
-
10
- filter(`),l("span",{class:"hljs-string"},"'items.create'"),e(", "),l("span",{class:"hljs-keyword"},"async"),e(` (input) => {
11
- `),l("span",{class:"hljs-keyword"},"if"),e(` (LOGIC_TO_CANCEL_EVENT) {
12
- `),l("span",{class:"hljs-keyword"},"throw"),e(),l("span",{class:"hljs-keyword"},"new"),e(` InvalidPayloadException(WHAT_IS_WRONG);
13
- }
14
-
15
- `),l("span",{class:"hljs-keyword"},"return"),e(` input;
16
- });
17
- };
18
- `)])]),l("p",null,"The filter register function receives two parameters:"),l("ul",null,[l("li",null,"The event name"),l("li",null,"A callback function that is executed whenever the event fires.")]),l("p",null,"The callback function itself receives three parameters:"),l("ul",null,[l("li",null,"The modifiable payload"),l("li",null,"An event-specific meta object"),l("li",null,"A context object")]),l("p",null,"The context object has the following properties:"),l("ul",null,[l("li",null,[l("code",null,"database"),e(" \u2014 The current database transaction")]),l("li",null,[l("code",null,"schema"),e(" \u2014 The current API schema in use")]),l("li",null,[l("code",null,"accountability"),e(" \u2014 Information about the current user")])]),l("h4",{id:"available-events"},[e("Available Events "),l("a",{class:"header-anchor",href:"#available-events"},"#")]),l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Name"),l("th",null,"Payload"),l("th",null,"Meta")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"request.not_found")]),l("td",null,[l("code",null,"false")]),l("td",null,[l("code",null,"request"),e(", "),l("code",null,"response")])]),l("tr",null,[l("td",null,[l("code",null,"request.error")]),l("td",null,"The request errors"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"database.error")]),l("td",null,"The database error"),l("td",null,[l("code",null,"client")])]),l("tr",null,[l("td",null,[l("code",null,"auth.login")]),l("td",null,"The login payload"),l("td",null,[l("code",null,"status"),e(", "),l("code",null,"user"),e(", "),l("code",null,"provider")])]),l("tr",null,[l("td",null,[l("code",null,"auth.jwt")]),l("td",null,"The auth token"),l("td",null,[l("code",null,"status"),e(", "),l("code",null,"user"),e(", "),l("code",null,"provider"),e(", "),l("code",null,"type")])]),l("tr",null,[l("td",null,[l("code",null,"(<collection>.)items.create")]),l("td",null,"The new item"),l("td",null,[l("code",null,"collection")])]),l("tr",null,[l("td",null,[l("code",null,"(<collection>.)items.update")]),l("td",null,"The updated item"),l("td",null,[l("code",null,"keys"),e(", "),l("code",null,"collection")])]),l("tr",null,[l("td",null,[l("code",null,"(<collection>.)items.delete")]),l("td",null,"The keys of the item"),l("td",null,[l("code",null,"collection")])]),l("tr",null,[l("td",null,[l("code",null,"<system-collection>.create")]),l("td",null,"The new item"),l("td",null,[l("code",null,"collection")])]),l("tr",null,[l("td",null,[l("code",null,"<system-collection>.update")]),l("td",null,"The updated item"),l("td",null,[l("code",null,"keys"),e(", "),l("code",null,"collection")])]),l("tr",null,[l("td",null,[l("code",null,"<system-collection>.delete")]),l("td",null,"The keys of the item"),l("td",null,[l("code",null,"collection")])])])]),l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"System Collections"),l("p",null,[l("code",null,"<system-collection>"),e(" should be replaced with one of the system collection names "),l("code",null,"activity"),e(", "),l("code",null,"collections"),e(", "),l("code",null,"fields"),e(", "),l("code",null,"folders"),e(", "),l("code",null,"permissions"),e(", "),l("code",null,"presets"),e(", "),l("code",null,"relations"),e(", "),l("code",null,"revisions"),e(", "),l("code",null,"roles"),e(", "),l("code",null,"settings"),e(", "),l("code",null,"users"),e(" or "),l("code",null,"webhooks"),e(".")])]),l("h3",{id:"action"},[e("Action "),l("a",{class:"header-anchor",href:"#action"},"#")]),l("p",null,"An action event executes after a certain event and receives some data related to the event."),l("p",null,"The action register function receives two parameters:"),l("ul",null,[l("li",null,"The event name"),l("li",null,"A callback function that is executed whenever the event fires.")]),l("p",null,"The callback function itself receives two parameters:"),l("ul",null,[l("li",null,"An event-specific meta object"),l("li",null,"A context object")]),l("p",null,"The context object has the following properties:"),l("ul",null,[l("li",null,[l("code",null,"database"),e(" \u2014 The current database transaction")]),l("li",null,[l("code",null,"schema"),e(" \u2014 The current API schema in use")]),l("li",null,[l("code",null,"accountability"),e(" \u2014 Information about the current user")])]),l("h4",{id:"available-events-2"},[e("Available Events "),l("a",{class:"header-anchor",href:"#available-events-2"},"#")]),l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Name"),l("th",null,"Meta")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"server.start")]),l("td",null,[l("code",null,"server")])]),l("tr",null,[l("td",null,[l("code",null,"server.stop")]),l("td",null,[l("code",null,"server")])]),l("tr",null,[l("td",null,[l("code",null,"response")]),l("td",null,[l("code",null,"request"),e(", "),l("code",null,"response"),e(", "),l("code",null,"ip"),e(", "),l("code",null,"duration"),e(", "),l("code",null,"finished")])]),l("tr",null,[l("td",null,[l("code",null,"auth.login")]),l("td",null,[l("code",null,"payload"),e(", "),l("code",null,"status"),e(", "),l("code",null,"user"),e(", "),l("code",null,"provider")])]),l("tr",null,[l("td",null,[l("code",null,"files.upload")]),l("td",null,[l("code",null,"payload"),e(", "),l("code",null,"key"),e(", "),l("code",null,"collection")])]),l("tr",null,[l("td",null,[l("code",null,"(<collection>.)items.read")]),l("td",null,[l("code",null,"payload"),e(", "),l("code",null,"query"),e(", "),l("code",null,"collection")])]),l("tr",null,[l("td",null,[l("code",null,"(<collection>.)items.create")]),l("td",null,[l("code",null,"payload"),e(", "),l("code",null,"key"),e(", "),l("code",null,"collection")])]),l("tr",null,[l("td",null,[l("code",null,"(<collection>.)items.update")]),l("td",null,[l("code",null,"payload"),e(", "),l("code",null,"keys"),e(", "),l("code",null,"collection")])]),l("tr",null,[l("td",null,[l("code",null,"(<collection>.)items.delete")]),l("td",null,[l("code",null,"payload"),e(", "),l("code",null,"collection")])]),l("tr",null,[l("td",null,[l("code",null,"<system-collection>.create")]),l("td",null,[l("code",null,"payload"),e(", "),l("code",null,"key"),e(", "),l("code",null,"collection")])]),l("tr",null,[l("td",null,[l("code",null,"<system-collection>.update")]),l("td",null,[l("code",null,"payload"),e(", "),l("code",null,"keys"),e(", "),l("code",null,"collection")])]),l("tr",null,[l("td",null,[l("code",null,"<system-collection>.delete")]),l("td",null,[l("code",null,"payload"),e(", "),l("code",null,"collection")])])])]),l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"System Collections"),l("p",null,[l("code",null,"<system-collection>"),e(" should be replaced with one of the system collection names "),l("code",null,"activity"),e(", "),l("code",null,"collections"),e(", "),l("code",null,"fields"),e(", "),l("code",null,"folders"),e(", "),l("code",null,"permissions"),e(", "),l("code",null,"presets"),e(", "),l("code",null,"relations"),e(", "),l("code",null,"revisions"),e(", "),l("code",null,"roles"),e(", "),l("code",null,"settings"),e(", "),l("code",null,"users"),e(" or "),l("code",null,"webhooks"),e(".")])]),l("h3",{id:"init"},[e("Init "),l("a",{class:"header-anchor",href:"#init"},"#")]),l("p",null,"An init event executes at a certain point within the lifecycle of Directus. Init events can be used to inject logic into internal services."),l("p",null,"The init register function receives two parameters:"),l("ul",null,[l("li",null,"The event name"),l("li",null,"A callback function that is executed whenever the event fires.")]),l("p",null,"The callback function itself receives one parameters:"),l("ul",null,[l("li",null,"An event-specific meta object")]),l("h4",{id:"available-events-3"},[e("Available Events "),l("a",{class:"header-anchor",href:"#available-events-3"},"#")]),l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Name"),l("th",null,"Meta")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"cli.before")]),l("td",null,[l("code",null,"program")])]),l("tr",null,[l("td",null,[l("code",null,"cli.after")]),l("td",null,[l("code",null,"program")])]),l("tr",null,[l("td",null,[l("code",null,"app.before")]),l("td",null,[l("code",null,"app")])]),l("tr",null,[l("td",null,[l("code",null,"app.after")]),l("td",null,[l("code",null,"app")])]),l("tr",null,[l("td",null,[l("code",null,"routes.before")]),l("td",null,[l("code",null,"app")])]),l("tr",null,[l("td",null,[l("code",null,"routes.after")]),l("td",null,[l("code",null,"app")])]),l("tr",null,[l("td",null,[l("code",null,"routes.custom.before")]),l("td",null,[l("code",null,"app")])]),l("tr",null,[l("td",null,[l("code",null,"routes.custom.after")]),l("td",null,[l("code",null,"app")])]),l("tr",null,[l("td",null,[l("code",null,"middlewares.before")]),l("td",null,[l("code",null,"app")])]),l("tr",null,[l("td",null,[l("code",null,"middlewares.after")]),l("td",null,[l("code",null,"app")])])])]),l("h3",{id:"schedule"},[e("Schedule "),l("a",{class:"header-anchor",href:"#schedule"},"#")]),l("p",null,[e("A schedule event executes at certain points in time. This is supported through "),l("a",{href:"https://www.npmjs.com/package/node-cron",target:"_blank",rel:"noopener noreferrer"},[l("code",null,"node-cron")]),e(". To set this up, provide a cron statement as the first parameter to the "),l("code",null,"schedule()"),e(" function, for example "),l("code",null,"schedule('15 14 1 * *', <...>)"),e(" (at 14:15 on day-of-month 1) or "),l("code",null,"schedule('5 4 * * sun', <...>)"),e(" (at 04:05 on Sunday). See example below:")]),l("pre",null,[l("code",{class:"language-js"},[l("span",{class:"hljs-keyword"},"const"),e(" axios = "),l("span",{class:"hljs-built_in"},"require"),e("("),l("span",{class:"hljs-string"},"'axios'"),e(`);
19
-
20
- `),l("span",{class:"hljs-built_in"},"module"),e(".exports = "),l("span",{class:"hljs-function"},[l("span",{class:"hljs-keyword"},"function"),e(),l("span",{class:"hljs-title"},"registerHook"),e("("),l("span",{class:"hljs-params"},"{ schedule }"),e(") ")]),e(`{
21
- schedule(`),l("span",{class:"hljs-string"},"'*/15 * * * *'"),e(", "),l("span",{class:"hljs-keyword"},"async"),e(` () => {
22
- `),l("span",{class:"hljs-keyword"},"await"),e(" axios.post("),l("span",{class:"hljs-string"},"'http://example.com/webhook'"),e(", { "),l("span",{class:"hljs-attr"},"message"),e(": "),l("span",{class:"hljs-string"},"'Another 15 minutes passed...'"),e(` });
23
- });
24
- };
25
- `)])]),l("h2",{id:"3.-register-your-hook"},[e("3. Register your Hook "),l("a",{class:"header-anchor",href:"#3.-register-your-hook"},"#")]),l("p",null,"Each custom hook is registered to its event scope using a function with the following format:"),l("pre",null,[l("code",{class:"language-js"},[l("span",{class:"hljs-keyword"},"const"),e(" axios = "),l("span",{class:"hljs-built_in"},"require"),e("("),l("span",{class:"hljs-string"},"'axios'"),e(`);
26
-
27
- `),l("span",{class:"hljs-built_in"},"module"),e(".exports = "),l("span",{class:"hljs-function"},[l("span",{class:"hljs-keyword"},"function"),e(),l("span",{class:"hljs-title"},"registerHook"),e("("),l("span",{class:"hljs-params"},"{ action }"),e(") ")]),e(`{
28
- action(`),l("span",{class:"hljs-string"},"'items.create'"),e(", "),l("span",{class:"hljs-function"},"() =>"),e(` {
29
- axios.post(`),l("span",{class:"hljs-string"},"'http://example.com/webhook'"),e(`);
30
- });
31
- };
32
- `)])]),l("h2",{id:"4.-develop-your-custom-hook"},[e("4. Develop your Custom Hook "),l("a",{class:"header-anchor",href:"#4.-develop-your-custom-hook"},"#")]),l("blockquote",null,[l("p",null,[e("Hooks can impact performance when not carefully implemented. This is especially true for filter hooks (as these are blocking) and hooks on "),l("code",null,"read"),e(" actions, as a single request can result in a large amount of database reads.")])]),l("h3",{id:"register-function"},[e("Register Function "),l("a",{class:"header-anchor",href:"#register-function"},"#")]),l("p",null,[e("The "),l("code",null,"registerHook"),e(" function receives an object containing the type-specific register functions as the first parameter:")]),l("ul",null,[l("li",null,[l("code",null,"filter"),e(" \u2014 Listen for a filter event")]),l("li",null,[l("code",null,"action"),e(" \u2014 Listen for an action event")]),l("li",null,[l("code",null,"init"),e(" \u2014 Listen for an init event")]),l("li",null,[l("code",null,"schedule"),e(" \u2014 Execute a function at certain points in time")])]),l("p",null,"The second parameter is a context object with the following properties:"),l("ul",null,[l("li",null,[l("code",null,"services"),e(" \u2014 All API internal services")]),l("li",null,[l("code",null,"exceptions"),e(" \u2014 API exception objects that can be used for throwing \u201Cproper\u201D errors")]),l("li",null,[l("code",null,"database"),e(" \u2014 Knex instance that is connected to the current database")]),l("li",null,[l("code",null,"getSchema"),e(" \u2014 Async function that reads the full available schema for use in services")]),l("li",null,[l("code",null,"env"),e(" \u2014 Parsed environment variables")]),l("li",null,[l("code",null,"logger"),e(" \u2014 "),l("a",{href:"https://github.com/pinojs/pino",target:"_blank",rel:"noopener noreferrer"},"Pino"),e(" instance.")])]),l("h2",{id:"5.-restart-the-api"},[e("5. Restart the API "),l("a",{class:"header-anchor",href:"#5.-restart-the-api"},"#")]),l("p",null,"To deploy your hook, simply restart the API by running:"),l("pre",null,[l("code",{class:"language-bash"},`npx directus start
33
- `)]),l("h2",{id:"full-example"},[e("Full Example "),l("a",{class:"header-anchor",href:"#full-example"},"#")]),l("p",null,[l("code",null,"extensions/hooks/sync-with-external/index.js"),e(":")]),l("pre",null,[l("code",{class:"language-js"},[l("span",{class:"hljs-keyword"},"const"),e(" axios = "),l("span",{class:"hljs-built_in"},"require"),e("("),l("span",{class:"hljs-string"},"'axios'"),e(`);
34
-
35
- `),l("span",{class:"hljs-built_in"},"module"),e(".exports = "),l("span",{class:"hljs-function"},[l("span",{class:"hljs-keyword"},"function"),e(),l("span",{class:"hljs-title"},"registerHook"),e("("),l("span",{class:"hljs-params"},"{ filter, action }, { services, exceptions }"),e(") ")]),e(`{
36
- `),l("span",{class:"hljs-keyword"},"const"),e(` { MailService } = services;
37
- `),l("span",{class:"hljs-keyword"},"const"),e(` { ServiceUnavailableException, ForbiddenException } = exceptions;
38
-
39
- `),l("span",{class:"hljs-comment"},"// Sync with external recipes service, cancel creation on failure"),e(`
40
- filter(`),l("span",{class:"hljs-string"},"'items.create'"),e(", "),l("span",{class:"hljs-keyword"},"async"),e(` (input, { collection }, { schema }) => {
41
- `),l("span",{class:"hljs-keyword"},"if"),e(" (collection !== "),l("span",{class:"hljs-string"},"'recipes'"),e(") "),l("span",{class:"hljs-keyword"},"return"),e(` input;
42
-
43
- `),l("span",{class:"hljs-keyword"},"const"),e(" mailService = "),l("span",{class:"hljs-keyword"},"new"),e(` MailService({ schema });
44
-
45
- `),l("span",{class:"hljs-keyword"},"try"),e(` {
46
- `),l("span",{class:"hljs-keyword"},"await"),e(" axios.post("),l("span",{class:"hljs-string"},"'https://example.com/recipes'"),e(`, input);
47
- `),l("span",{class:"hljs-keyword"},"await"),e(` mailService.send({
48
- `),l("span",{class:"hljs-attr"},"to"),e(": "),l("span",{class:"hljs-string"},"'person@example.com'"),e(`,
49
- `),l("span",{class:"hljs-attr"},"template"),e(`: {
50
- `),l("span",{class:"hljs-attr"},"name"),e(": "),l("span",{class:"hljs-string"},"'item-created'"),e(`,
51
- `),l("span",{class:"hljs-attr"},"data"),e(`: {
52
- `),l("span",{class:"hljs-attr"},"collection"),e(`: collection,
53
- },
54
- },
55
- });
56
- } `),l("span",{class:"hljs-keyword"},"catch"),e(` (error) {
57
- `),l("span",{class:"hljs-keyword"},"throw"),e(),l("span",{class:"hljs-keyword"},"new"),e(` ServiceUnavailableException(error);
58
- }
59
-
60
- input.syncedWithExample = `),l("span",{class:"hljs-literal"},"true"),e(`;
61
-
62
- `),l("span",{class:"hljs-keyword"},"return"),e(` input;
63
- });
64
-
65
- `),l("span",{class:"hljs-comment"},"// Force everything to be admin-only at all times"),e(`
66
- `),l("span",{class:"hljs-keyword"},"const"),e(" adminOnly = "),l("span",{class:"hljs-keyword"},"async"),e(` (_, { accountability }) => {
67
- `),l("span",{class:"hljs-keyword"},"if"),e(" (accountability.admin !== "),l("span",{class:"hljs-literal"},"true"),e(") "),l("span",{class:"hljs-keyword"},"throw"),e(),l("span",{class:"hljs-keyword"},"new"),e(` ForbiddenException();
68
- };
69
-
70
- action(`),l("span",{class:"hljs-string"},"'items.create'"),e(`, adminOnly);
71
- action(`),l("span",{class:"hljs-string"},"'items.read'"),e(`, adminOnly);
72
- action(`),l("span",{class:"hljs-string"},"'items.update'"),e(`, adminOnly);
73
- action(`),l("span",{class:"hljs-string"},"'items.delete'"),e(`, adminOnly);
74
- };
75
- `)])])],-1),m={setup(i,{expose:t}){const n={title:"Custom API Hooks",modularExtension:!0};return t({frontmatter:n}),(d,h)=>{const s=o("DocsWrapper");return a(),c(s,{frontmatter:n},{default:u(()=>[r]),_:1})}}};export{m as default};
@@ -1,26 +0,0 @@
1
- var ue=Object.defineProperty,ce=Object.defineProperties;var de=Object.getOwnPropertyDescriptors;var X=Object.getOwnPropertySymbols;var pe=Object.prototype.hasOwnProperty,_e=Object.prototype.propertyIsEnumerable;var Z=(e,t,n)=>t in e?ue(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,J=(e,t)=>{for(var n in t||(t={}))pe.call(t,n)&&Z(e,n,t[n]);if(X)for(var n of X(t))_e.call(t,n)&&Z(e,n,t[n]);return e},Y=(e,t)=>ce(e,de(t));import{o as S,y as j,B as $,r as U,L as R,w as x,p as s,Q as q,S as D,q as a,C as m,v as u,t as g,u as c,K as B,aD as ve,M as h,F as P,J as I,W as ee,D as C,E as k,l as W,I as G,av as fe,al as me,P as M,X as te,aF as ne,z as ge,ah as ye,O as $e,U as be,V as he,Z as ke,_ as Se}from"./vendor.299bc11c.js";import{u as we,a as oe,_ as w,b as se,g as ae,c as K,M as Ie,t as Oe,d as Le,e as Be,f as Ce,h as H,i as re,j as Ae,H as Ve,k as Ue}from"../index.0f7650cb.js";import"./use-sync.da76e524.js";const Me=S({setup(){const{t:e}=j(),t=we(),n=oe(),r=$(()=>{var _;return n.settings===null||!((_=n.settings)==null?void 0:_.project_logo)?null:se(ae()+`assets/${n.settings.project_logo}`)}),p=U(!1),{queueHasItems:l}=R(t);x(()=>l.value,_=>{_&&(p.value=!0)});const i=$(()=>{var _;return(_=n.settings)==null?void 0:_.project_url}),o=$(()=>{var _;return((_=n.settings)==null?void 0:_.project_url)?e("view_project"):!1});return{customLogoPath:r,showLoader:p,stopSpinnerIfQueueIsEmpty:d,url:i,urlTooltip:o};function d(){l.value===!1&&(p.value=!1)}}}),Ne=["src"];function je(e,t,n,r,p,l){const i=s("v-progress-linear"),o=q("tooltip");return D((a(),m(ee(e.url?"a":"div"),{href:e.url,target:e.url?"_blank":void 0,rel:e.url?"noopener noreferrer":void 0,class:I(["module-bar-logo",{loading:e.showLoader}])},{default:u(()=>[e.customLogoPath?(a(),g(P,{key:0},[c(ve,{name:"fade"},{default:u(()=>[e.showLoader?(a(),m(i,{key:0,indeterminate:"",rounded:"",onAnimationiteration:e.stopSpinnerIfQueueIsEmpty},null,8,["onAnimationiteration"])):B("",!0)]),_:1}),h("img",{class:"custom-logo",src:e.customLogoPath,alt:"Project Logo"},null,8,Ne)],64)):(a(),g("div",{key:1,class:I(["logo",{running:e.showLoader}]),onAnimationiteration:t[0]||(t[0]=(...d)=>e.stopSpinnerIfQueueIsEmpty&&e.stopSpinnerIfQueueIsEmpty(...d))},null,34))]),_:1},8,["href","target","rel","class"])),[[o,e.urlTooltip,void 0,{right:!0}]])}var De=w(Me,[["render",je],["__scopeId","data-v-a98d38ac"]]);const Te=S({setup(){const{t:e}=j(),t=K(),n=U(!1),r=$(()=>t.currentUser===null||t.currentUser.avatar===null?null:se(ae()+`assets/${t.currentUser.avatar.id}?key=system-medium-cover`)),p=$(()=>{var d;return`/users/${(d=t.currentUser)==null?void 0:d.id}`}),l=$(()=>"/logout"),i=t.fullName;return{t:e,userFullName:i,avatarURL:r,userProfileLink:p,signOutActive:n,signOutLink:l}}}),Ee=["src","alt"];function Fe(e,t,n,r,p,l){const i=s("v-icon"),o=s("v-button"),d=s("v-card-title"),_=s("v-card-actions"),y=s("v-card"),v=s("v-dialog"),O=s("v-avatar"),f=s("router-link"),b=s("v-hover"),V=q("tooltip");return a(),m(b,{class:"module-bar-avatar"},{default:u(({hover:L})=>[c(v,{modelValue:e.signOutActive,"onUpdate:modelValue":t[1]||(t[1]=A=>e.signOutActive=A),onEsc:t[2]||(t[2]=A=>e.signOutActive=!1)},{activator:u(({on:A})=>[D(c(o,{tile:"",icon:"","x-large":"",class:I([{show:L},"sign-out"]),onClick:A},{default:u(()=>[c(i,{name:"logout"})]),_:2},1032,["class","onClick"]),[[V,e.t("sign_out"),void 0,{right:!0}]])]),default:u(()=>[c(y,null,{default:u(()=>[c(d,null,{default:u(()=>[C(k(e.t("sign_out_confirm")),1)]),_:1}),c(_,null,{default:u(()=>[c(o,{secondary:"",onClick:t[0]||(t[0]=A=>e.signOutActive=!e.signOutActive)},{default:u(()=>[C(k(e.t("cancel")),1)]),_:1}),c(o,{to:e.signOutLink},{default:u(()=>[C(k(e.t("sign_out")),1)]),_:1},8,["to"])]),_:1})]),_:1})]),_:2},1032,["modelValue"]),c(f,{to:e.userProfileLink},{default:u(()=>[D(c(O,{tile:"",large:"",class:I({"no-avatar":!e.avatarURL})},{default:u(()=>[e.avatarURL?(a(),g("img",{key:0,src:e.avatarURL,alt:e.userFullName,class:"avatar-image"},null,8,Ee)):(a(),m(i,{key:1,name:"account_circle",outline:""}))]),_:1},8,["class"]),[[V,e.userFullName,void 0,{right:!0}]])]),_:1},8,["to"])]),_:1})}var Re=w(Te,[["render",Fe],["__scopeId","data-v-4fec1dae"]]);const qe=S({components:{ModuleBarLogo:De,ModuleBarAvatar:Re},setup(){const e=oe(),{modules:t}=Le(),n=$(()=>t.value.map(p=>p.id));return{modules:$(()=>{var p;return e.settings?((p=e.settings.module_bar)!=null?p:Ie).filter(l=>l.type==="link"?!0:l.enabled&&n.value.includes(l.id)).map(l=>{if(l.type==="link"){const o=W.exports.omit(l,["url"]);return l.url.startsWith("/")?o.to=l.url:o.href=l.url,Oe(o)}const i=t.value.find(o=>o.id===l.id);return Y(J(J({},l),t.value.find(o=>o.id===l.id)),{to:`/${i.id}`})}):[]})}}}),Pe={class:"module-bar"},Ge={class:"modules"};function He(e,t,n,r,p,l){const i=s("module-bar-logo"),o=s("v-icon"),d=s("v-button"),_=s("module-bar-avatar"),y=q("tooltip");return a(),g("div",Pe,[c(i),h("div",Ge,[(a(!0),g(P,null,G(e.modules,v=>D((a(),m(d,{key:v.id,icon:"","x-large":"",to:v.to,href:v.href,tile:"",style:fe(v.color?{"--v-button-color-active":v.color}:null)},{default:u(()=>[c(o,{name:v.icon,outline:""},null,8,["name"])]),_:2},1032,["to","href","style"])),[[y,v.name,void 0,{right:!0}]])),128))]),c(_)])}var Qe=w(qe,[["render",He],["__scopeId","data-v-53381a9e"]]);const ze=S({props:{sidebarOpen:{type:Boolean,default:!1}},setup(e){const t=U([]),n=U(!1);return x(()=>e.sidebarOpen,async r=>{r===!1?t.value=[]:(n.value=!0,await me(),n.value=!1)}),{openDetail:t,mandatory:n}}});function Je(e,t,n,r,p,l){const i=s("v-item-group");return a(),m(i,{modelValue:e.openDetail,"onUpdate:modelValue":t[0]||(t[0]=o=>e.openDetail=o),class:"sidebar-detail-group",scope:"sidebar-detail",mandatory:e.mandatory},{default:u(()=>[M(e.$slots,"default",{},void 0,!0)]),_:3},8,["modelValue","mandatory"])}var We=w(ze,[["render",Je],["__scopeId","data-v-ebb6371e"]]),T=1e3,E=T*60,F=E*60,N=F*24,Ke=N*7,Xe=N*365.25,Q=function(e,t){t=t||{};var n=typeof e;if(n==="string"&&e.length>0)return Ze(e);if(n==="number"&&isFinite(e))return t.long?xe(e):Ye(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))};function Ze(e){if(e=String(e),!(e.length>100)){var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!!t){var n=parseFloat(t[1]),r=(t[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return n*Xe;case"weeks":case"week":case"w":return n*Ke;case"days":case"day":case"d":return n*N;case"hours":case"hour":case"hrs":case"hr":case"h":return n*F;case"minutes":case"minute":case"mins":case"min":case"m":return n*E;case"seconds":case"second":case"secs":case"sec":case"s":return n*T;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}}}function Ye(e){var t=Math.abs(e);return t>=N?Math.round(e/N)+"d":t>=F?Math.round(e/F)+"h":t>=E?Math.round(e/E)+"m":t>=T?Math.round(e/T)+"s":e+"ms"}function xe(e){var t=Math.abs(e);return t>=N?z(e,t,N,"day"):t>=F?z(e,t,F,"hour"):t>=E?z(e,t,E,"minute"):t>=T?z(e,t,T,"second"):e+" ms"}function z(e,t,n,r){var p=t>=n*1.5;return Math.round(e/n)+" "+r+(p?"s":"")}const et=S({setup(){const{t:e}=j(),t=Be(),n=$(()=>{const o=W.exports.sortBy(t.latency,["timestamp"]);return o[o.length-1]}),r=$(()=>{if(!t.latency||t.latency.length===0)return 0;const o=W.exports.sortBy(t.latency,["timestamp"]),d=o.slice(Math.max(o.length-5,0));let _=0;for(const{latency:y}of d)_+=y;return Math.round(_/d.length)}),p=$(()=>r.value<=250?4:r.value>250&&r.value<=500?3:r.value>500&&r.value<=750?2:1),l=$(()=>{switch(p.value){case 4:return`${e("connection_excellent")}
2
- (${Q(r.value)} ${e("latency")})`;case 3:return`${e("connection_good")}
3
- (${Q(r.value)} ${e("latency")})`;case 2:return`${e("connection_fair")}
4
- (${Q(r.value)} ${e("latency")})`;case 1:return`${e("connection_poor")}
5
- (${Q(r.value)} ${e("latency")})`;default:return null}});return{icon:$(()=>{switch(p.value){case 4:return"signal_wifi_4_bar";case 3:return"signal_wifi_3_bar";case 2:return"signal_wifi_2_bar";case 1:return"signal_wifi_1_bar";default:return null}}),lastLatency:n,latencyTooltip:l}}}),tt={class:"latency-indicator"};function nt(e,t,n,r,p,l){const i=s("v-progress-circular"),o=s("v-icon"),d=q("tooltip");return D((a(),g("div",tt,[e.lastLatency?(a(),m(o,{key:1,name:e.icon},null,8,["name"])):(a(),m(i,{key:0,indeterminate:""}))],512)),[[d,e.latencyTooltip,void 0,{bottom:!0,end:!0}]])}var ot=w(et,[["render",nt],["__scopeId","data-v-2cfd5c8b"]]);const st=S({components:{LatencyIndicator:ot},setup(){const e=Ce();return{name:$(()=>{var n,r;return(r=(n=e.info)==null?void 0:n.project)==null?void 0:r.project_name})}}}),at={class:"project-info"},rt={class:"name"};function it(e,t,n,r,p,l){const i=s("latency-indicator");return a(),g("div",at,[c(i),h("span",rt,k(e.name),1)])}var lt=w(st,[["render",it],["__scopeId","data-v-08488eb6"]]);const ut=S({props:{id:{type:String,required:!0},title:{type:String,required:!0},text:{type:String,default:null},icon:{type:String,default:null},type:{type:String,default:"info",validator:e=>["info","success","warning","error"].includes(e)},tail:{type:Boolean,default:!1},dense:{type:Boolean,default:!1},showClose:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},progress:{type:Number,default:void 0}},setup(e){const t=H();return{close:n};function n(){e.showClose===!0&&t.remove(e.id)}}}),ct={key:0,class:"icon"},dt={class:"content"},pt={class:"title selectable"},_t={key:0,class:"text selectable"};function vt(e,t,n,r,p,l){const i=s("v-progress-circular"),o=s("v-icon");return a(),g("div",{class:I(["notification-item",[e.type,{tail:e.tail,dense:e.dense}]]),onClick:t[0]||(t[0]=(...d)=>e.close&&e.close(...d))},[e.loading||e.progress||e.icon?(a(),g("div",ct,[e.loading?(a(),m(i,{key:0,indeterminate:"",small:""})):e.progress?(a(),m(i,{key:1,small:"",value:e.progress},null,8,["value"])):(a(),m(o,{key:2,name:e.icon},null,8,["name"]))])):B("",!0),h("div",dt,[h("p",pt,k(e.title),1),e.text?(a(),g("p",_t,k(e.text),1)):B("",!0)]),e.showClose?(a(),m(o,{key:1,name:"close",clickable:"",class:"close",onClick:e.close},null,8,["onClick"])):B("",!0)],2)}var ie=w(ut,[["render",vt],["__scopeId","data-v-43553e80"]]);const ft=S({components:{NotificationItem:ie},props:{dense:{type:Boolean,default:!1}},setup(){const e=H();return{queue:R(e).queue}}});function mt(e,t,n,r,p,l){const i=s("notification-item");return a(),m(ne,{class:"notifications-group",name:"slide-fade",tag:"div"},{default:u(()=>[M(e.$slots,"default",{},void 0,!0),(a(!0),g(P,null,G(e.queue,(o,d)=>(a(),m(i,te({key:o.id},o,{tail:d===e.queue.length-1,dense:e.dense,"show-close":o.persist===!0&&o.closeable!==!1}),null,16,["tail","dense","show-close"]))),128))]),_:3})}var gt=w(ft,[["render",mt],["__scopeId","data-v-31bc6bbb"]]);const yt=S({props:{to:{type:String,default:null},icon:{type:String,default:"box"},active:{type:Boolean,default:!1}},emits:["click"],setup(){const e=re(),{sidebarOpen:t}=R(e);return{sidebarOpen:t}}}),$t={class:"icon"},bt={key:0,class:"title"};function ht(e,t,n,r,p,l){const i=s("v-icon");return a(),m(ee(e.to?"router-link":"button"),{class:I(["sidebar-button",{active:e.active}]),onClick:t[0]||(t[0]=o=>e.$emit("click",o))},{default:u(()=>[h("div",$t,[c(i,{name:e.icon,outline:""},null,8,["name"])]),e.sidebarOpen?(a(),g("div",bt,[M(e.$slots,"default",{},void 0,!0)])):B("",!0)]),_:3},8,["class"])}var kt=w(yt,[["render",ht],["__scopeId","data-v-3f4d4d50"]]);const St=S({components:{SidebarButton:kt,NotificationItem:ie},props:{sidebarOpen:{type:Boolean,default:!1},modelValue:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(){const{t:e}=j(),t=H();return{t:e,lastFour:t.lastFour}}}),wt={class:"notifications-preview"},It={key:0,class:"inline"},Ot={class:"padding-box"};function Lt(e,t,n,r,p,l){const i=s("router-link"),o=s("notification-item"),d=s("transition-expand"),_=s("sidebar-button"),y=q("tooltip");return a(),g("div",wt,[c(d,{tag:"div"},{default:u(()=>[e.modelValue?(a(),g("div",It,[h("div",Ot,[c(i,{class:I(["link",{"has-items":e.lastFour.length>0}]),to:"/notifications"},{default:u(()=>[C(k(e.t("show_all_activity")),1)]),_:1},8,["class"]),c(ne,{tag:"div",name:"notification",class:"transition"},{default:u(()=>[(a(!0),g(P,null,G(e.lastFour,v=>(a(),m(o,te({key:v.id},v),null,16))),128))]),_:1})])])):B("",!0)]),_:1}),D(c(_,{active:e.modelValue,class:"toggle",icon:"notifications",onClick:t[0]||(t[0]=v=>e.$emit("update:modelValue",!e.modelValue))},{default:u(()=>[C(k(e.t("notifications")),1)]),_:1},8,["active"]),[[y,e.t("notifications"),void 0,{left:!0}]])])}var Bt=w(St,[["render",Lt],["__scopeId","data-v-58468042"]]);const Ct=S({setup(){const{t:e}=j(),{parsedInfo:t}=Ae(),n=H(),r=K(),p=$(()=>n.dialogs);return{t:e,notifications:p,admin:r.isAdmin,done:i,getGitHubIssueLink:l};function l(o,d){var y,v,O,f;const _=`<!-- Please put a detailed explanation of the problem here. -->
6
-
7
- ---
8
-
9
- ### Project details
10
- Directus Version: ${(y=t.value)==null?void 0:y.directus.version}
11
- Environment: production
12
- OS: ${(v=t.value)==null?void 0:v.os.type} ${(O=t.value)==null?void 0:O.os.version}
13
- Node: ${(f=t.value)==null?void 0:f.node.version}
14
-
15
- ### Error
16
-
17
- Title: ${d.title||"none"}
18
- Message: ${d.text||"none"}
19
-
20
- <details>
21
- <summary>Stack Trace</summary>
22
- <pre>
23
- ${JSON.stringify(d.error,Object.getOwnPropertyNames(d.error),2)}
24
- </pre>
25
- </details>
26
- `;return`https://github.com/directus/directus/issues/new?body=${encodeURIComponent(_)}`}function i(o){n.remove(o)}}}),At={class:"notification-dialogs"},Vt=["href"];function Ut(e,t,n,r,p,l){const i=s("v-card-title"),o=s("v-error"),d=s("v-card-text"),_=s("v-button"),y=s("v-card-actions"),v=s("v-card"),O=s("v-dialog");return a(),g("div",At,[(a(!0),g(P,null,G(e.notifications,f=>(a(),m(O,{key:f.id,"model-value":!0,persist:""},{default:u(()=>[c(v,{class:I([f.type])},{default:u(()=>[c(i,null,{default:u(()=>[C(k(f.title),1)]),_:2},1024),f.text?(a(),m(d,{key:0},{default:u(()=>[C(k(f.text)+" ",1),f.error?(a(),m(o,{key:0,error:f.error},null,8,["error"])):B("",!0)]),_:2},1024)):B("",!0),c(y,null,{default:u(()=>[f.type==="error"&&e.admin&&f.code==="UNKNOWN"?(a(),m(_,{key:0,secondary:""},{default:u(()=>[h("a",{target:"_blank",href:e.getGitHubIssueLink(f.id,f)},k(e.t("report_error")),9,Vt)]),_:2},1024)):B("",!0),c(_,{onClick:b=>e.done(f.id)},{default:u(()=>[C(k(e.t("dismiss")),1)]),_:2},1032,["onClick"])]),_:2},1024)]),_:2},1032,["class"])]),_:2},1024))),128))])}var Mt=w(Ct,[["render",Ut],["__scopeId","data-v-bb61b36a"]]);const Nt=S({components:{ModuleBar:Qe,SidebarDetailGroup:We,HeaderBar:Ve,ProjectInfo:lt,NotificationsGroup:gt,NotificationsPreview:Bt,NotificationDialogs:Mt},props:{title:{type:String,default:null},smallHeader:{type:Boolean,default:!1}},setup(e){const{t}=j(),n=ge(),{title:r}=R(e),p=U(!1),l=U(),i=K(),o=re(),d=$(()=>{var b,V;return i.currentUser?((V=(b=i.currentUser)==null?void 0:b.role)==null?void 0:V.app_access)||!1:!0}),_=U(!1),{sidebarOpen:y,fullScreen:v}=R(o),O=$(()=>{var b;return((b=i.currentUser)==null?void 0:b.theme)||"auto"});return ye("main-element",l),n.afterEach(async()=>{var b;(b=l.value)==null||b.scrollTo({top:0}),v.value=!1}),Ue(r),{t,navOpen:p,contentEl:l,theme:O,sidebarOpen:y,openSidebar:f,notificationsPreviewActive:_,appAccess:d,fullScreen:v};function f(b){b.target&&b.target.classList.contains("close")===!1&&(y.value=!0)}}}),jt=e=>(ke("data-v-2451ccc8"),e=e(),Se(),e),Dt=C("Switch User"),Tt={class:"module-nav alt-colors"},Et={class:"module-nav-content"},Ft={id:"main-content",ref:"contentEl",class:"content"},Rt={class:"flex-container"},qt=jt(()=>h("div",{class:"spacer"},null,-1));function Pt(e,t,n,r,p,l){const i=s("v-button"),o=s("v-info"),d=s("module-bar"),_=s("project-info"),y=s("header-bar"),v=s("sidebar-detail-group"),O=s("notifications-preview"),f=s("v-overlay"),b=s("notifications-group"),V=s("notification-dialogs");return e.appAccess===!1?(a(),m(o,{key:0,center:"",title:e.t("no_app_access"),type:"danger",icon:"block"},{append:u(()=>[c(i,{to:"/logout"},{default:u(()=>[Dt]),_:1})]),default:u(()=>[C(k(e.t("no_app_access_copy"))+" ",1)]),_:1},8,["title"])):(a(),g("div",{key:1,class:I(["private-view",{theme:e.theme,"full-screen":e.fullScreen}])},[h("aside",{id:"navigation",role:"navigation","aria-label":"Module Navigation",class:I({"is-open":e.navOpen})},[c(d),h("div",Tt,[c(_),h("div",Et,[M(e.$slots,"navigation",{},void 0,!0)])])],2),h("div",Ft,[c(y,{small:e.smallHeader,"show-sidebar-toggle":"",title:e.title,"onToggle:sidebar":t[0]||(t[0]=L=>e.sidebarOpen=!e.sidebarOpen),onPrimary:t[1]||(t[1]=L=>e.navOpen=!e.navOpen)},$e({_:2},[G(e.$slots,(L,A)=>({name:A,fn:u(le=>[M(e.$slots,A,be(he(le)),void 0,!0)])}))]),1032,["small","title"]),h("main",null,[M(e.$slots,"default",{},void 0,!0)])],512),h("aside",{id:"sidebar",role:"contentinfo",class:I(["alt-colors",{"is-open":e.sidebarOpen}]),"aria-label":"Module Sidebar",onClick:t[3]||(t[3]=(...L)=>e.openSidebar&&e.openSidebar(...L))},[h("div",Rt,[c(v,{"sidebar-open":e.sidebarOpen},{default:u(()=>[M(e.$slots,"sidebar",{},void 0,!0)]),_:3},8,["sidebar-open"]),qt,c(O,{modelValue:e.notificationsPreviewActive,"onUpdate:modelValue":t[2]||(t[2]=L=>e.notificationsPreviewActive=L),"sidebar-open":e.sidebarOpen},null,8,["modelValue","sidebar-open"])])],2),c(f,{class:"nav-overlay",active:e.navOpen,onClick:t[4]||(t[4]=L=>e.navOpen=!1)},null,8,["active"]),c(f,{class:"sidebar-overlay",active:e.sidebarOpen,onClick:t[5]||(t[5]=L=>e.sidebarOpen=!1)},null,8,["active"]),e.notificationsPreviewActive===!1?(a(),m(b,{key:0,dense:e.sidebarOpen===!1},null,8,["dense"])):B("",!0),c(V)],2))}var Jt=w(Nt,[["render",Pt],["__scopeId","data-v-2451ccc8"]]);export{Jt as PrivateView,Jt as default};