@directus/app 9.0.0-rc.98 → 9.0.0-rc.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/@directus_extensions-sdk.0c1dd463.js +1 -0
- package/dist/assets/{active-line.21c7c188.js → active-line.48de29b0.js} +1 -1
- package/dist/assets/{activity.7e6818a1.js → activity.6ae38b0f.js} +1 -1
- package/dist/assets/{activity.afea7c8e.js → activity.9e4ec41d.js} +1 -1
- package/dist/assets/api-config.c76a6613.js +62 -0
- package/dist/assets/{api-endpoints.25b9a2cc.js → api-endpoints.2f8fd276.js} +1 -1
- package/dist/assets/{api-hooks.28fce97f.js → api-hooks.49e7891b.js} +4 -4
- package/dist/assets/{apl.e1cac8e8.js → apl.958d4757.js} +1 -1
- package/dist/assets/{app.a092834a.js → app.ab10f7f0.js} +1 -1
- package/dist/assets/{application.e4ceecf4.js → application.2534d8a1.js} +1 -1
- package/dist/assets/{asciiarmor.56914f72.js → asciiarmor.1f4e8811.js} +1 -1
- package/dist/assets/{asn.1.0d72d374.js → asn.1.320671bb.js} +1 -1
- package/dist/assets/{assets.7c1c7e13.js → assets.0e687e4a.js} +1 -1
- package/dist/assets/{asterisk.217d929c.js → asterisk.67a02b7a.js} +1 -1
- package/dist/assets/authentication.ad641e07.js +70 -0
- package/dist/assets/{authentication.0de34170.js → authentication.e8cf4d61.js} +1 -1
- package/dist/assets/{autorefresh.db241e38.js → autorefresh.824ac9d2.js} +1 -1
- package/dist/assets/{aws.216201f6.js → aws.fd25516a.js} +1 -1
- package/dist/assets/{backing-directus.712e9b42.js → backing-directus.58d18b0c.js} +1 -1
- package/dist/assets/{brainfuck.6d97691a.js → brainfuck.0d6aa963.js} +1 -1
- package/dist/assets/{cli.5fd3486c.js → cli.1516127d.js} +1 -1
- package/dist/assets/{clike.8b1d1dac.js → clike.55471781.js} +1 -1
- package/dist/assets/{clojure.7b24d2df.js → clojure.e88e881b.js} +1 -1
- package/dist/assets/{cmake.2dd9d19b.js → cmake.4a9bd2f3.js} +1 -1
- package/dist/assets/{cobol.aa3e3b17.js → cobol.ddfaa48e.js} +1 -1
- package/dist/assets/{codebase-overview.769ab809.js → codebase-overview.e20f2975.js} +1 -1
- package/dist/assets/{coffeescript.e1f17dcd.js → coffeescript.004ec15d.js} +1 -1
- package/dist/assets/{collections.52393349.js → collections.14257f29.js} +1 -1
- package/dist/assets/{collections.ede965e3.js → collections.bd91de7e.js} +1 -1
- package/dist/assets/{collections.3ab1c08a.js → collections.fdbdfe7d.js} +1 -1
- package/dist/assets/{command-line-interface.e1beee60.js → command-line-interface.9a2a26c1.js} +1 -1
- package/dist/assets/{common-issues.9900baa5.js → common-issues.b34d0ba5.js} +1 -1
- package/dist/assets/{commonlisp.126ea5bc.js → commonlisp.f2d9b9b1.js} +1 -1
- package/dist/assets/{config-files.04baaabb.js → config-files.ac74fea8.js} +1 -1
- package/dist/assets/{crystal.2f74eaf5.js → crystal.97856865.js} +1 -1
- package/dist/assets/{css.6f8a654e.js → css.7f807b17.js} +1 -1
- package/dist/assets/{cypher.f7b4194f.js → cypher.7cd36030.js} +3 -3
- package/dist/assets/{d.b2c44973.js → d.fa2b4528.js} +1 -1
- package/dist/assets/{dart.807118ef.js → dart.af44f108.js} +1 -1
- package/dist/assets/{databases.39a13c5d.js → databases.2a42b1ba.js} +1 -1
- package/dist/assets/{diff.df7c2507.js → diff.33d776fc.js} +1 -1
- package/dist/assets/{digitalocean-app-platform.6d350032.js → digitalocean-app-platform.70c21592.js} +1 -1
- package/dist/assets/{displays.101c9edb.js → displays.d848b491.js} +1 -1
- package/dist/assets/{displays.2c15a911.js → displays.ecc2c613.js} +1 -1
- package/dist/assets/{django.31349418.js → django.1965042d.js} +1 -1
- package/dist/assets/{docker.0e180ff7.js → docker.6748365e.js} +1 -1
- package/dist/assets/{dockerfile.9cf1b5e9.js → dockerfile.f7e82fe7.js} +1 -1
- package/dist/assets/{dtd.2eb8046c.js → dtd.7de198c9.js} +1 -1
- package/dist/assets/{dylan.4342284d.js → dylan.4e0afffa.js} +1 -1
- package/dist/assets/{ebnf.ac110410.js → ebnf.423e92bf.js} +1 -1
- package/dist/assets/{ecl.ef1a0830.js → ecl.5ceaf630.js} +1 -1
- package/dist/assets/{eiffel.2cdba3dc.js → eiffel.4d7ae0c0.js} +1 -1
- package/dist/assets/{elm.1a8ac848.js → elm.0cc8719f.js} +1 -1
- package/dist/assets/{email-templates.cb788cb0.js → email-templates.9cecf0b9.js} +1 -1
- package/dist/assets/en-au.169355d7.js +1 -0
- package/dist/assets/en-gb.0b977da8.js +1 -0
- package/dist/assets/en-nz.6296f2b6.js +1 -0
- package/dist/assets/environment-variables.a5b5c0aa.js +25 -0
- package/dist/assets/{erlang.957b37e4.js → erlang.176bea7d.js} +1 -1
- package/dist/assets/{error-codes.606bec58.js → error-codes.db5ba230.js} +1 -1
- package/dist/assets/es.c516dd05.js +1 -0
- package/dist/assets/{extensions.e55fc936.js → extensions.10d6f6c3.js} +1 -1
- package/dist/assets/{extensions.803fb88b.js → extensions.735e74b3.js} +1 -1
- package/dist/assets/{factor.c01980f8.js → factor.be42c791.js} +1 -1
- package/dist/assets/{fcl.87824263.js → fcl.879030fb.js} +1 -1
- package/dist/assets/{field-transforms.aac4af27.js → field-transforms.60165e8c.js} +1 -1
- package/dist/assets/{fields.3458f9a0.js → fields.17d2cea0.js} +1 -1
- package/dist/assets/{fields.f80c6966.js → fields.3f49dba2.js} +1 -1
- package/dist/assets/{fields.c933a3eb.js → fields.4933da97.js} +1 -1
- package/dist/assets/{files.cef9529d.js → files.04ffc317.js} +1 -1
- package/dist/assets/{files.2458c938.js → files.b8b17303.js} +1 -1
- package/dist/assets/{files.d6673170.js → files.f9b3fda9.js} +1 -1
- package/dist/assets/{filter-rules.8dda275b.js → filter-rules.780bde9f.js} +2 -2
- package/dist/assets/{folders.6224f87b.js → folders.a05410b5.js} +1 -1
- package/dist/assets/{forth.51e0131d.js → forth.fb5f114f.js} +1 -1
- package/dist/assets/{fortran.ccea4744.js → fortran.ba9b6719.js} +1 -1
- package/dist/assets/fr-FR.37e1725b.js +1 -0
- package/dist/assets/{gas.5613bf5b.js → gas.1bbed2b2.js} +1 -1
- package/dist/assets/{gfm.bc3f0591.js → gfm.149e301f.js} +1 -1
- package/dist/assets/{gherkin.963fa577.js → gherkin.7de0d8e2.js} +1 -1
- package/dist/assets/{github-ci.00b8f37e.js → github-ci.1aafd624.js} +2 -2
- package/dist/assets/{go.b597488d.js → go.7caf0f36.js} +1 -1
- package/dist/assets/{groovy.748ae778.js → groovy.607002d9.js} +1 -1
- package/dist/assets/haml.504050d1.js +1 -0
- package/dist/assets/{handlebars.d230fbb5.js → handlebars.7f84f825.js} +1 -1
- package/dist/assets/haskell-literate.e78773ef.js +1 -0
- package/dist/assets/{haskell.69e61064.js → haskell.63e1f2d3.js} +1 -1
- package/dist/assets/{haxe.a1958409.js → haxe.fca1efc8.js} +1 -1
- package/dist/assets/{htmlembedded.77d86e89.js → htmlembedded.1eb21358.js} +1 -1
- package/dist/assets/{htmlmixed.d2d262fe.js → htmlmixed.cb1d7158.js} +1 -1
- package/dist/assets/{http.0389a281.js → http.28fca87c.js} +1 -1
- package/dist/assets/{idl.4073e14b.js → idl.32a8e30b.js} +1 -1
- package/dist/assets/iis.fba7e919.js +23 -0
- package/dist/assets/{index.34c4ff98.js → index.07865455.js} +1 -1
- package/dist/assets/{index.5943c6a2.js → index.0b19be3f.js} +1 -1
- package/dist/assets/{index.9021855c.js → index.1010e9a5.js} +1 -1
- package/dist/assets/{index.12a41b75.js → index.123a36ac.js} +1 -1
- package/dist/assets/{index.d5b3136c.js → index.12744d3d.js} +1 -1
- package/dist/assets/{index.adcbf017.js → index.129fb164.js} +1 -1
- package/dist/assets/{index.76bf6775.js → index.13149be9.js} +1 -1
- package/dist/assets/{index.5d7e4388.js → index.132ba1c4.js} +1 -1
- package/dist/assets/{index.a65c23d0.js → index.1380be04.js} +1 -1
- package/dist/assets/{index.8f1b058c.js → index.156ad6a0.js} +1 -1
- package/dist/assets/{index.60c6f994.js → index.159d3509.js} +1 -1
- package/dist/assets/{index.93176038.js → index.1e395c13.js} +1 -1
- package/dist/assets/{index.0f421bfb.js → index.1fd08b8f.js} +1 -1
- package/dist/assets/{index.f6faa78c.js → index.271fc58d.js} +1 -1
- package/dist/assets/{index.03fcf041.js → index.2a965c68.js} +1 -1
- package/dist/assets/{index.adde2dbc.js → index.2ecf1365.js} +1 -1
- package/dist/assets/{index.13caabe3.js → index.307681c6.js} +1 -1
- package/dist/assets/{index.fbb4da88.js → index.32a66f8e.js} +1 -1
- package/dist/assets/{index.582262f3.js → index.336d2876.js} +1 -1
- package/dist/assets/{index.2ce5ad4e.js → index.36d21aeb.js} +1 -1
- package/dist/assets/{index.460c28b2.js → index.39d438a3.js} +1 -1
- package/dist/assets/{index.857a444d.js → index.3dfc9f28.js} +1 -1
- package/dist/assets/{index.3dbbdda4.js → index.3efbdb40.js} +1 -1
- package/dist/assets/{index.52488452.js → index.41239663.js} +1 -1
- package/dist/assets/{index.6dfafdb8.js → index.48d93056.js} +1 -1
- package/dist/assets/{index.fc96c02d.js → index.4a1a5f7b.js} +1 -1
- package/dist/assets/{index.3cc58479.js → index.4da7e0ab.js} +1 -1
- package/dist/assets/{index.cbf2ab7b.js → index.5292cb2f.js} +1 -1
- package/dist/assets/{index.7d7c94cc.js → index.53d2e106.js} +1 -1
- package/dist/assets/{index.b021cacb.js → index.54b89000.js} +1 -1
- package/dist/assets/{index.d19dacc2.js → index.5569aba4.js} +1 -1
- package/dist/assets/{index.370eb912.js → index.5e9f194d.js} +1 -1
- package/dist/assets/{index.86d76d87.js → index.6281d871.js} +1 -1
- package/dist/assets/{index.a3619cd6.js → index.634af914.js} +1 -1
- package/dist/assets/{index.020eeba9.js → index.63d11508.js} +1 -1
- package/dist/assets/{index.f3dac8ae.js → index.671541d9.js} +1 -1
- package/dist/assets/{index.afe1580d.js → index.6819c895.js} +1 -1
- package/dist/assets/{index.5ddf1c09.js → index.68748c2d.js} +1 -1
- package/dist/assets/{index.3886bcc9.js → index.6a792b33.js} +1 -1
- package/dist/assets/{index.07e02ffc.js → index.6dd016c8.js} +1 -1
- package/dist/assets/{index.26626da8.js → index.71f5e63c.js} +1 -1
- package/dist/assets/{index.12160ad1.js → index.734a95e8.js} +1 -1
- package/dist/assets/{index.12bc1139.js → index.759611b6.js} +1 -1
- package/dist/assets/{index.278f6673.js → index.76d07b62.js} +1 -1
- package/dist/assets/{index.dc16b5fc.js → index.7bee8c77.js} +1 -1
- package/dist/assets/{index.967091bd.js → index.7c0f84b2.js} +1 -1
- package/dist/assets/{index.8d25e37e.js → index.7d228c67.js} +1 -1
- package/dist/assets/{index.2bddfec0.js → index.7fbf2f6a.js} +1 -1
- package/dist/assets/{index.a8032304.js → index.865af0fe.js} +1 -1
- package/dist/assets/{index.d21606d9.js → index.872629ec.js} +1 -1
- package/dist/assets/{index.7c109413.js → index.87a15825.js} +1 -1
- package/dist/assets/{index.8d30d8ec.js → index.8d3e2c04.js} +1 -1
- package/dist/assets/{index.ffdce238.js → index.8e3e39ae.js} +1 -1
- package/dist/assets/{index.ca14dcca.js → index.8fac67f3.js} +1 -1
- package/dist/assets/{index.9427fe3a.js → index.944ed685.js} +1 -1
- package/dist/assets/{index.cdc078f5.js → index.975605c7.js} +1 -1
- package/dist/assets/{index.a1fba609.js → index.9bf6dfc7.js} +1 -1
- package/dist/assets/{index.a89c6f27.css → index.9f6c6cb3.css} +1 -1
- package/dist/assets/{index.cc8365dc.js → index.a1b32348.js} +1 -1
- package/dist/assets/{index.e6c63fd8.js → index.a2724a18.js} +1 -1
- package/dist/assets/{index.9e6cb9fb.js → index.ab7a9d20.js} +1 -1
- package/dist/assets/{index.69d51e36.js → index.ae39c45d.js} +1 -1
- package/dist/assets/{index.a5c459a5.js → index.b0239526.js} +2 -2
- package/dist/assets/{index.2e10fa0a.js → index.b22d3b87.js} +1 -1
- package/dist/assets/{index.b49259cd.js → index.b2ce5853.js} +1 -1
- package/dist/assets/{index.8642f0ef.js → index.b3861ec3.js} +1 -1
- package/dist/assets/{index.453b8dd4.js → index.ba6582ce.js} +1 -1
- package/dist/assets/{index.0cdd93eb.js → index.c16fb6fc.js} +1 -1
- package/dist/assets/{index.0c668002.js → index.c2c4a871.js} +1 -1
- package/dist/assets/{index.b8f2f91f.js → index.c38b7f79.js} +1 -1
- package/dist/assets/{index.dad442a6.js → index.c6b3c631.js} +1 -1
- package/dist/assets/{index.1441a301.js → index.c8dd9a32.js} +1 -1
- package/dist/assets/{index.9df43656.js → index.d01ff2fc.js} +1 -1
- package/dist/assets/index.d07f63e3.css +1 -0
- package/dist/assets/{index.10f638cf.js → index.da1f65af.js} +1 -1
- package/dist/assets/{index.cc6ac81f.js → index.e0a5d0dd.js} +1 -1
- package/dist/assets/{index.c07a0137.js → index.e7b321ba.js} +1 -1
- package/dist/assets/{index.a5833a30.js → index.ec71a491.js} +1 -1
- package/dist/assets/{index.9fa02ab0.js → index.eee4f224.js} +1 -1
- package/dist/assets/{index.75da7150.js → index.f3f4fbd9.js} +1 -1
- package/dist/assets/{index.6cf6e65c.js → index.f757af12.js} +1 -1
- package/dist/assets/{index.513f493e.js → index.f99b041c.js} +1 -1
- package/dist/assets/{index.9b9992c2.js → index.fbfd2bd6.js} +1 -1
- package/dist/assets/{index.3beb87d3.js → index.ffd3af80.js} +1 -1
- package/dist/assets/{input-rich-text-html.ae77acab.js → input-rich-text-html.e15177a6.js} +9 -9
- package/dist/assets/{installation.ca7cfca2.js → installation.c4bff2d4.js} +1 -1
- package/dist/assets/{interfaces.f0ecff97.js → interfaces.1e1a05f4.js} +1 -1
- package/dist/assets/{interfaces.b4c6f273.js → interfaces.4d9d8da8.js} +1 -1
- package/dist/assets/{introduction.56c0c1cd.js → introduction.36187581.js} +1 -1
- package/dist/assets/{introduction.dd1bcb44.js → introduction.5bfc6d93.js} +1 -1
- package/dist/assets/{introduction.5c4ec6b9.js → introduction.c36fa9ca.js} +1 -1
- package/dist/assets/{items.e1d7ba61.js → items.2ec3ef4a.js} +1 -1
- package/dist/assets/{items.2ad153eb.js → items.5eb4a489.js} +1 -1
- package/dist/assets/{items.9e96b56b.js → items.7db06a6b.js} +1 -1
- package/dist/assets/{javascript-hint.9186051b.js → javascript-hint.968a99a5.js} +1 -1
- package/dist/assets/{javascript.2f3ede5a.js → javascript.76216d0d.js} +1 -1
- package/dist/assets/{jinja2.8d7f6a8b.js → jinja2.9eba4d82.js} +1 -1
- package/dist/assets/{jsx.c540510b.js → jsx.2200a77c.js} +1 -1
- package/dist/assets/{julia.a47aef56.js → julia.15f73490.js} +1 -1
- package/dist/assets/{layouts.37d32d4c.js → layouts.5a85a5bc.js} +1 -1
- package/dist/assets/{layouts.bc85bb07.js → layouts.c52bbf71.js} +1 -1
- package/dist/assets/{livescript.3fc737e8.js → livescript.e919a245.js} +1 -1
- package/dist/assets/{lua.948ce6b7.js → lua.75eda1a9.js} +1 -1
- package/dist/assets/{manual.18f4f30d.js → manual.bc0f8432.js} +1 -1
- package/dist/assets/{mark-selection.75c4ea7c.js → mark-selection.a99b3033.js} +1 -1
- package/dist/assets/{match-highlighter.bdbe0955.js → match-highlighter.668a64ca.js} +1 -1
- package/dist/assets/{mathematica.4f5f6aa2.js → mathematica.598d20b5.js} +1 -1
- package/dist/assets/{mbox.122aff2c.js → mbox.5b96e107.js} +1 -1
- package/dist/assets/{migrating-from-v8.311cd0e1.js → migrating-from-v8.667c19d3.js} +1 -1
- package/dist/assets/{migrations.fb0c9784.js → migrations.33fd8fc8.js} +1 -1
- package/dist/assets/{mirc.a72bdc8a.js → mirc.90d37912.js} +1 -1
- package/dist/assets/{mllike.eb583c07.js → mllike.137d1b89.js} +1 -1
- package/dist/assets/{modelica.f3e06d95.js → modelica.bd73920d.js} +1 -1
- package/dist/assets/{modules.7140afbb.js → modules.17def569.js} +1 -1
- package/dist/assets/{modules.8f34db3e.js → modules.43892717.js} +1 -1
- package/dist/assets/{mscgen.a5bf61ad.js → mscgen.5b4ab425.js} +1 -1
- package/dist/assets/{multiplex.796857c0.js → multiplex.87dad2d7.js} +1 -1
- package/dist/assets/{mumps.0e26badd.js → mumps.61c3783e.js} +1 -1
- package/dist/assets/{nginx.d228fa16.js → nginx.655bc186.js} +1 -1
- package/dist/assets/{nsis.7f6a0f90.js → nsis.fdad0c07.js} +1 -1
- package/dist/assets/{ntriples.994511c8.js → ntriples.97729057.js} +1 -1
- package/dist/assets/{octave.32e47905.js → octave.f73b18ac.js} +1 -1
- package/dist/assets/{overlay.8c05baaa.js → overlay.7f1c5fa5.js} +1 -1
- package/dist/assets/{oz.742a2172.js → oz.809f2a14.js} +1 -1
- package/dist/assets/{pascal.1609d5f5.js → pascal.f8cd95cf.js} +1 -1
- package/dist/assets/{pegjs.5173241b.js → pegjs.5dfc390d.js} +1 -1
- package/dist/assets/{perl.229a0cce.js → perl.6b530f7e.js} +1 -1
- package/dist/assets/{permissions.144d3fdf.js → permissions.1cc1e9ac.js} +1 -1
- package/dist/assets/{permissions.87246e2c.js → permissions.5186b062.js} +1 -1
- package/dist/assets/{permissions.1d7c8608.js → permissions.f9121dc8.js} +1 -1
- package/dist/assets/{php.5aaf45dc.js → php.328211b9.js} +1 -1
- package/dist/assets/{pig.59bb21b5.js → pig.8c9bf1f9.js} +1 -1
- package/dist/assets/{plesk.73a68904.js → plesk.68b64f87.js} +2 -2
- package/dist/assets/{powershell.60297f1d.js → powershell.015ab379.js} +1 -1
- package/dist/assets/{presets.af59754e.js → presets.83ef1429.js} +1 -1
- package/dist/assets/{presets.c061427e.js → presets.ac89e285.js} +1 -1
- package/dist/assets/{projects.767db627.js → projects.086e4104.js} +1 -1
- package/dist/assets/{projects.ec4144c5.js → projects.54a55899.js} +1 -1
- package/dist/assets/{properties.22ba7b4b.js → properties.882f6a5f.js} +1 -1
- package/dist/assets/{protobuf.85730256.js → protobuf.8dfcce9b.js} +1 -1
- package/dist/assets/{pug.70f01632.js → pug.5b875e17.js} +1 -1
- package/dist/assets/{puppet.a64ec0ec.js → puppet.5aa1fc3a.js} +1 -1
- package/dist/assets/{python.fe50fda4.js → python.67462152.js} +1 -1
- package/dist/assets/{q.88cb2b8c.js → q.28cbbad3.js} +1 -1
- package/dist/assets/{query.699b00aa.js → query.eaa960f0.js} +1 -1
- package/dist/assets/{quickstart.504e6d54.js → quickstart.39d64eea.js} +1 -1
- package/dist/assets/{r.59023feb.js → r.fdf280db.js} +1 -1
- package/dist/assets/{relations.5d7fec12.js → relations.30bf1e5e.js} +1 -1
- package/dist/assets/{relationships.850eb59c.js → relationships.8c5c9d45.js} +1 -1
- package/dist/assets/{revisions.edb861a6.js → revisions.78c66006.js} +1 -1
- package/dist/assets/{revisions.c65244b7.js → revisions.8430c29c.js} +1 -1
- package/dist/assets/ro-RO.5d125b41.js +1 -0
- package/dist/assets/{roles.d176bda2.js → roles.a5d56e09.js} +1 -1
- package/dist/assets/{roles.31bb987f.js → roles.ae48ac62.js} +1 -1
- package/dist/assets/{roles.be39bb88.js → roles.b691aabb.js} +1 -1
- package/dist/assets/{rpm.5b354114.js → rpm.3b8f7e29.js} +1 -1
- package/dist/assets/rst.528314cf.js +1 -0
- package/dist/assets/{ruby.fbe69f10.js → ruby.c4d5f740.js} +1 -1
- package/dist/assets/{running-locally.f7f27b40.js → running-locally.6bd2f854.js} +1 -1
- package/dist/assets/{rust.d5f860d4.js → rust.409632ee.js} +1 -1
- package/dist/assets/{sas.5078cd09.js → sas.47cbda6d.js} +1 -1
- package/dist/assets/{sass.ad94908f.js → sass.a244c156.js} +1 -1
- package/dist/assets/{scheme.62ef3aac.js → scheme.163a4a3b.js} +1 -1
- package/dist/assets/{sdk.1fa5df01.js → sdk.c46fe226.js} +1 -1
- package/dist/assets/{server.517326b4.js → server.b7e67b66.js} +1 -1
- package/dist/assets/{settings.80fdd488.js → settings.076e3b15.js} +1 -1
- package/dist/assets/{shell.21000e97.js → shell.6d60921a.js} +1 -1
- package/dist/assets/{show-hint.4e2adb57.js → show-hint.e595bcf5.js} +1 -1
- package/dist/assets/{sieve.8235bc52.js → sieve.c618d5d5.js} +1 -1
- package/dist/assets/{simple.c600ff81.js → simple.b69582f5.js} +1 -1
- package/dist/assets/{slim.b09565ba.js → slim.daebda4a.js} +1 -1
- package/dist/assets/{smalltalk.d1bdef54.js → smalltalk.70889ef5.js} +1 -1
- package/dist/assets/{smarty.68c55065.js → smarty.325ff529.js} +1 -1
- package/dist/assets/{solr.32afafb4.js → solr.bb397dc6.js} +1 -1
- package/dist/assets/{soy.71a94bd3.js → soy.1584d1b4.js} +1 -1
- package/dist/assets/{sparql.c13a6abd.js → sparql.9bd63ffb.js} +1 -1
- package/dist/assets/{spreadsheet.f06b861c.js → spreadsheet.bd23b833.js} +1 -1
- package/dist/assets/{sql.1622b7a0.js → sql.ed54c85d.js} +1 -1
- package/dist/assets/sr-CS.1840c0db.js +1 -0
- package/dist/assets/{stex.2997e8d4.js → stex.35f42f0e.js} +1 -1
- package/dist/assets/{styles.f321c37a.js → styles.8f31dcd9.js} +1 -1
- package/dist/assets/{stylus.09700176.js → stylus.5c8637e4.js} +1 -1
- package/dist/assets/{support.fb5b37c6.js → support.046994af.js} +1 -1
- package/dist/assets/{swift.ac31530b.js → swift.6e697047.js} +1 -1
- package/dist/assets/{tcl.3dcc845d.js → tcl.6462ea3a.js} +1 -1
- package/dist/assets/{textile.40aa3a77.js → textile.b5cd484d.js} +1 -1
- package/dist/assets/{tiddlywiki.bc050afc.js → tiddlywiki.b1e435a4.js} +1 -1
- package/dist/assets/{tiki.aa5136d5.js → tiki.4013883e.js} +1 -1
- package/dist/assets/{toml.7d0d7ed9.js → toml.d8214748.js} +1 -1
- package/dist/assets/{tornado.5818c716.js → tornado.20d8d573.js} +1 -1
- package/dist/assets/{transition-bounce.57b56dd5.js → transition-bounce.52382bc3.js} +1 -1
- package/dist/assets/{transition-dialog.239bd9f5.js → transition-dialog.5f5e2d17.js} +1 -1
- package/dist/assets/{transition-expand.15de075e.js → transition-expand.84ad1aa8.js} +1 -1
- package/dist/assets/{translations.067fabb9.js → translations.8b18280d.js} +1 -1
- package/dist/assets/{translations.a62970f2.js → translations.d6de3905.js} +1 -1
- package/dist/assets/{troff.444d4397.js → troff.72228b7a.js} +1 -1
- package/dist/assets/{ttcn-cfg.0a78bb0d.js → ttcn-cfg.f96a99f0.js} +1 -1
- package/dist/assets/{ttcn.112b0d67.js → ttcn.0e972000.js} +1 -1
- package/dist/assets/{turtle.4816436c.js → turtle.8ab64def.js} +1 -1
- package/dist/assets/{twig.d9de9f9a.js → twig.7589b410.js} +1 -1
- package/dist/assets/{types.78caa1da.js → types.48124f27.js} +1 -1
- package/dist/assets/{ubuntu.78911058.js → ubuntu.36ee13da.js} +1 -1
- package/dist/assets/{use-sync.25413196.js → use-sync.fa2fe3b0.js} +1 -1
- package/dist/assets/{users.aded52e8.js → users.adf2a2c8.js} +1 -1
- package/dist/assets/{users.b66610cf.js → users.d2e45508.js} +1 -1
- package/dist/assets/{users.fdd31e5b.js → users.d8f130a3.js} +1 -1
- package/dist/assets/{utilities.4cd9b9f2.js → utilities.4d891c04.js} +1 -1
- package/dist/assets/{v-avatar.7672b4c4.js → v-avatar.00e9b8eb.js} +1 -1
- package/dist/assets/{v-badge.c90c82e6.js → v-badge.7fc3bab4.js} +1 -1
- package/dist/assets/{v-breadcrumb.b77e4f18.js → v-breadcrumb.a2a2f370.js} +1 -1
- package/dist/assets/{v-button.6f71192d.js → v-button.36e765a2.js} +1 -1
- package/dist/assets/{v-card-actions.f7038c5a.js → v-card-actions.12455b5d.js} +1 -1
- package/dist/assets/{v-card-subtitle.64d51a7f.js → v-card-subtitle.b7280bd9.js} +2 -2
- package/dist/assets/{v-card-text.18cb0f11.js → v-card-text.095779dd.js} +2 -2
- package/dist/assets/v-card-title.78e39c82.js +4 -0
- package/dist/assets/{v-card.a3d24ca4.js → v-card.e9191679.js} +1 -1
- package/dist/assets/{v-checkbox.2a883e5d.js → v-checkbox.f755b3db.js} +1 -1
- package/dist/assets/{v-chip.9a1d06bd.js → v-chip.5f8fdbe9.js} +1 -1
- package/dist/assets/{v-detail.08081d02.js → v-detail.70d83e7f.js} +1 -1
- package/dist/assets/{v-dialog.429d7b8a.js → v-dialog.5e7fff0c.js} +2 -2
- package/dist/assets/{v-divider.d65da562.js → v-divider.9db45406.js} +2 -2
- package/dist/assets/{v-drawer.c3209884.js → v-drawer.9b03749d.js} +1 -1
- package/dist/assets/{v-error.e5cdff60.js → v-error.fb66a9e6.js} +2 -2
- package/dist/assets/{v-fancy-select.5f18b1f3.js → v-fancy-select.b54085b1.js} +1 -1
- package/dist/assets/{v-field-select.32fb1d44.js → v-field-select.dd25033c.js} +2 -2
- package/dist/assets/{v-field-template.929a86e7.js → v-field-template.9e342040.js} +1 -1
- package/dist/assets/{v-form.4f15ff0f.js → v-form.e08a28c3.js} +2 -2
- package/dist/assets/{v-hover.2765134e.js → v-hover.a44a3be2.js} +1 -1
- package/dist/assets/{v-icon.0f49dcdf.js → v-icon.4709fb88.js} +1 -1
- package/dist/assets/{v-info.b1cb42be.js → v-info.73d1c44b.js} +2 -2
- package/dist/assets/{v-input.8c2d8d91.js → v-input.fda37db3.js} +1 -1
- package/dist/assets/{v-item-group.06ee487a.js → v-item-group.76391fb0.js} +1 -1
- package/dist/assets/{v-item.db377719.js → v-item.38e2a78e.js} +1 -1
- package/dist/assets/{v-list-group.c058dd0e.js → v-list-group.e39085f1.js} +2 -2
- package/dist/assets/{v-list-item-content.fb662398.js → v-list-item-content.79e3ccea.js} +1 -1
- package/dist/assets/{v-list-item-hint.b3e2809b.js → v-list-item-hint.b72017df.js} +1 -1
- package/dist/assets/{v-list-item-icon.7c917677.js → v-list-item-icon.a4d86111.js} +1 -1
- package/dist/assets/{v-list-item.4062ea0e.js → v-list-item.aeb5be7e.js} +1 -1
- package/dist/assets/{v-list.52d7c7ae.js → v-list.f09d5055.js} +1 -1
- package/dist/assets/{v-menu.78d16370.js → v-menu.672ad2ec.js} +1 -1
- package/dist/assets/{v-notice.3c4dcb0c.js → v-notice.ca244793.js} +2 -2
- package/dist/assets/{v-overlay.9ee2a4ea.js → v-overlay.b2e5ff6e.js} +1 -1
- package/dist/assets/{v-pagination.1bcaff37.js → v-pagination.dc840ce8.js} +1 -1
- package/dist/assets/{v-progress-circular.b1271d61.js → v-progress-circular.822f61bb.js} +2 -2
- package/dist/assets/{v-progress-linear.40057ac3.js → v-progress-linear.33cf976d.js} +1 -1
- package/dist/assets/{v-radio.9ce87d06.js → v-radio.1aa97b7b.js} +1 -1
- package/dist/assets/{v-select.ad82a076.js → v-select.27ac4bef.js} +1 -1
- package/dist/assets/{v-sheet.5acc0a85.js → v-sheet.c6ba4912.js} +1 -1
- package/dist/assets/{v-skeleton-loader.c5b2acac.js → v-skeleton-loader.52915dd8.js} +1 -1
- package/dist/assets/{v-slider.6fe18dea.js → v-slider.b989ae59.js} +1 -1
- package/dist/assets/{v-switch.3839f607.js → v-switch.de111eb9.js} +1 -1
- package/dist/assets/{v-tab-item.2ab69292.js → v-tab-item.de7c0a28.js} +1 -1
- package/dist/assets/{v-tab.c4390cdb.js → v-tab.40afffbf.js} +1 -1
- package/dist/assets/{v-table.fc66e91c.js → v-table.9a5b33ab.js} +1 -1
- package/dist/assets/{v-tabs-items.23a4d028.js → v-tabs-items.15506baf.js} +1 -1
- package/dist/assets/{v-tabs.8cb6f20c.js → v-tabs.c9489007.js} +1 -1
- package/dist/assets/{v-text-overflow.674dc510.js → v-text-overflow.92c20f66.js} +1 -1
- package/dist/assets/{v-textarea.02bee531.js → v-textarea.4cced1c0.js} +2 -2
- package/dist/assets/{v-upload.685df91f.js → v-upload.ffe73a75.js} +1 -1
- package/dist/assets/{vb.4da8219a.js → vb.86e493cb.js} +1 -1
- package/dist/assets/{vbscript.b340075d.js → vbscript.74f96813.js} +1 -1
- package/dist/assets/{velocity.64e51bc5.js → velocity.a679c97c.js} +1 -1
- package/dist/assets/vendor.a626ab9c.js +2039 -0
- package/dist/assets/vendor.fe7856f0.css +1 -0
- package/dist/assets/{verilog.1bc5f3a3.js → verilog.e437b30d.js} +1 -1
- package/dist/assets/{vhdl.3c2ba104.js → vhdl.1c239e80.js} +1 -1
- package/dist/assets/{vue.fa209324.js → vue.b668d00e.js} +1 -1
- package/dist/assets/{wast.54b48569.js → wast.82d9b15b.js} +1 -1
- package/dist/assets/{webhooks.4f7eaa96.js → webhooks.439c510a.js} +1 -1
- package/dist/assets/{webhooks.e51fba7a.js → webhooks.4bdd0741.js} +1 -1
- package/dist/assets/{webidl.2374e180.js → webidl.5aceeff1.js} +1 -1
- package/dist/assets/{xquery.750a7cd1.js → xquery.900a45f6.js} +1 -1
- package/dist/assets/{yacas.6eba3f7b.js → yacas.56dd7cb2.js} +1 -1
- package/dist/assets/yaml-frontmatter.bdb5ae8b.js +1 -0
- package/dist/assets/{yaml.622de393.js → yaml.d877d25f.js} +1 -1
- package/dist/assets/{z80.f493b48f.js → z80.807d7c5a.js} +1 -1
- package/dist/index.514c2a9a.js +48 -0
- package/dist/index.html +5 -5
- package/dist/vue-i18n.c5bba31b.js +1 -0
- package/dist/vue-router.ba0fd454.js +1 -0
- package/dist/vue.010be4a3.js +1 -0
- package/package.json +17 -15
- package/dist/@directus_extensions-sdk.caa1292f.js +0 -1
- package/dist/assets/api-config.d4a334b4.js +0 -53
- package/dist/assets/authentication.2962910f.js +0 -54
- package/dist/assets/en-au.175fcb2b.js +0 -1
- package/dist/assets/en-gb.018f9a21.js +0 -1
- package/dist/assets/en-nz.2f0f7e5c.js +0 -1
- package/dist/assets/environment-variables.41ac3cc1.js +0 -25
- package/dist/assets/es.18d3cc7b.js +0 -1
- package/dist/assets/fr-FR.13498131.js +0 -1
- package/dist/assets/haml.071df27c.js +0 -1
- package/dist/assets/haskell-literate.d4663d82.js +0 -1
- package/dist/assets/iis.8d5a89ca.js +0 -23
- package/dist/assets/index.3339c532.css +0 -1
- package/dist/assets/ro-RO.381b685b.js +0 -1
- package/dist/assets/rst.dab09e05.js +0 -1
- package/dist/assets/sr-CS.f7a42011.js +0 -1
- package/dist/assets/v-card-title.37498457.js +0 -4
- package/dist/assets/vendor.62143b15.js +0 -1582
- package/dist/assets/vendor.de5758fd.css +0 -1
- package/dist/assets/yaml-frontmatter.f29f4a8c.js +0 -1
- package/dist/index.9cda602b.js +0 -48
- package/dist/vue-i18n.12eba70a.js +0 -1
- package/dist/vue-router.72dfb5ae.js +0 -1
- package/dist/vue.c17340c4.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as u}from"./assets/vendor.a626ab9c.js";import{f as p,l,k as m,h as y,i as F,d as b,b as j,c as g,n as h,a as k,j as v,m as x,u as G}from"./assets/use-sync.fa2fe3b0.js";function f(t,s){return{fieldGroups:u(()=>{const n={};for(const e in s)n[e]=[];return t.value.reduce((e,a)=>{for(const o in s)s[o](a)!==!1&&e[o].push(a);return e},n)})}}export{p as defineDisplay,l as defineEndpoint,m as defineHook,y as defineInterface,F as defineLayout,b as defineModule,j as getFieldsFromTemplate,g as getRelationType,h as useApi,k as useCollection,f as useFilterFields,v as useItems,x as useStores,G as useSync};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{bE as b}from"./vendor.a626ab9c.js";function S(f,v){return v.forEach(function(r){Object.keys(r).forEach(function(a){if(a!=="default"&&!(a in f)){var o=Object.getOwnPropertyDescriptor(r,a);Object.defineProperty(f,a,o.get?o:{enumerable:!0,get:function(){return r[a]}})}})}),Object.freeze(f)}var h={exports:{}};(function(f,v){(function(r){r(b.exports)})(function(r){var a="CodeMirror-activeline",o="CodeMirror-activeline-background",u="CodeMirror-activeline-gutter";r.defineOption("styleActiveLine",!1,function(e,n,t){var i=t==r.Init?!1:t;n!=i&&(i&&(e.off("beforeSelectionChange",d),c(e),delete e.state.activeLines),n&&(e.state.activeLines=[],L(e,e.listSelections()),e.on("beforeSelectionChange",d)))});function c(e){for(var n=0;n<e.state.activeLines.length;n++)e.removeLineClass(e.state.activeLines[n],"wrap",a),e.removeLineClass(e.state.activeLines[n],"background",o),e.removeLineClass(e.state.activeLines[n],"gutter",u)}function C(e,n){if(e.length!=n.length)return!1;for(var t=0;t<e.length;t++)if(e[t]!=n[t])return!1;return!0}function L(e,n){for(var t=[],i=0;i<n.length;i++){var l=n[i],p=e.getOption("styleActiveLine");if(!(typeof p=="object"&&p.nonEmpty?l.anchor.line!=l.head.line:!l.empty())){var g=e.getLineHandleVisualStart(l.head.line);t[t.length-1]!=g&&t.push(g)}}C(e.state.activeLines,t)||e.operation(function(){c(e);for(var s=0;s<t.length;s++)e.addLineClass(t[s],"wrap",a),e.addLineClass(t[s],"background",o),e.addLineClass(t[s],"gutter",u);e.state.activeLines=t})}function d(e,n){L(e,n.ranges)}})})();var y=h.exports,O=Object.freeze(S({__proto__:null,[Symbol.toStringTag]:"Module",default:y},[h.exports]));export{O as a};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as o,p as i,q as h,w as s,B as e,t as n,P as t}from"./vendor.
|
|
1
|
+
import{r as o,p as i,q as h,w as s,B as e,t as n,P as t}from"./vendor.a626ab9c.js";const d={class:"markdown-body"},p={class:"two-up"},u={class:"left"},_=t("All events that within Directus are tracked and stored in the activities collection. This gives you full accountability over everything that happens. "),m=t("Learn more about Activity"),y=t("."),g=e("div",{class:"right"},[e("p",null,[e("div",{class:"table-of-contents"},[e("ul",null,[e("li",null,[e("a",{href:"#the-activity-object"},"The Activity Object")]),e("li",null,[e("a",{href:"#list-activity-actions"},"List Activity Actions")]),e("li",null,[e("a",{href:"#retrieve-activity-action"},"Retrieve Activity Action")]),e("li",null,[e("a",{href:"#create-a-comment"},"Create a Comment")]),e("li",null,[e("a",{href:"#update-a-comment"},"Update a Comment")]),e("li",null,[e("a",{href:"#delete-a-comment"},"Delete a Comment")])])])])],-1),f=e("hr",null,null,-1),v=e("h2",{id:"the-activity-object"},[t("The Activity Object "),e("a",{class:"header-anchor",href:"#the-activity-object"},"#")],-1),j={class:"two-up"},b={class:"left"},q={class:"definitions"},w=e("p",null,[e("code",null,"action"),t(),e("strong",null,"string"),e("br"),t(" Action that was performed.")],-1),k=e("p",null,[e("code",null,"collection"),t(),e("strong",null,"string"),e("br"),t(" Collection identifier in which the item resides.")],-1),x=e("p",null,[e("code",null,"comment"),t(),e("strong",null,"string"),e("br"),t(" User comment. This will store the comments that show up in the right sidebar of the item edit page in the admin app.")],-1),T=e("p",null,[e("code",null,"id"),t(),e("strong",null,"integer"),e("br"),t(" Unique identifier for the object.")],-1),A=e("p",null,[e("code",null,"ip"),t(),e("strong",null,"string"),e("br"),t(" The IP address of the user at the time the action took place.")],-1),E=e("p",null,[e("code",null,"item"),t(),e("strong",null,"string"),e("br"),t(" Unique identifier for the item the action applied to. This is always a string, even for integer primary keys.")],-1),R=e("p",null,[e("code",null,"timestamp"),t(),e("strong",null,"string"),e("br"),t(" When the action happened.")],-1),S=e("code",null,"user",-1),P=t(),C=e("strong",null,"many-to-one",-1),D=e("br",null,null,-1),I=t(" The user who performed this action. Many-to-one to "),L=t("users"),O=t("."),M=e("p",null,[e("code",null,"user_agent"),t(),e("strong",null,"string"),e("br"),t(" User agent string of the browser the user used when the action took place.")],-1),H=e("code",null,"revisions",-1),Q=t(),G=e("strong",null,"one-to-many",-1),W=e("br",null,null,-1),U=t(" Any changes that were made in this activity. One-to-many to "),B=t("revisions"),V=t("."),K=e("div",{class:"right"},[e("pre",null,[e("code",{class:"language-json"},[t(`{
|
|
2
2
|
`),e("span",{class:"hljs-attr"},'"action"'),t(": "),e("span",{class:"hljs-string"},'"create"'),t(`,
|
|
3
3
|
`),e("span",{class:"hljs-attr"},'"collection"'),t(": "),e("span",{class:"hljs-string"},'"articles"'),t(`,
|
|
4
4
|
`),e("span",{class:"hljs-attr"},'"comment"'),t(": "),e("span",{class:"hljs-literal"},"null"),t(`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as s,p as
|
|
1
|
+
import{r as s,p as r,q as d,w as o,B as t,t as a,P as e}from"./vendor.a626ab9c.js";const h={class:"markdown-body"},u=t("blockquote",null,[t("p",null,"Directus stores detailed records of all data changes made via the App and API. This gives a comprehensive accountability log of who did what, and when. This also powers the Directus versioning system, which allows storing alternate versions/revisions of items.")],-1),p=e("The Activity Log tracks all events that have occurred within the project. Activity can be accessed in two ways, via the main "),m=e("Activity Module"),_=e(", or within the sidebar of individual "),f=e("Item Detail"),v=e(" pages. The following information is stored for each event\u2019s activity item:"),g=t("h2",{id:"activity-fields"},[e("Activity Fields "),t("a",{class:"header-anchor",href:"#activity-fields"},"#")],-1),w=t("ul",null,[t("li",null,[t("strong",null,"User"),e(" \u2014 The Directus user that performed the action")]),t("li",null,[t("strong",null,"Action"),e(" \u2014 The specific action taken, eg: Create, Update, Delete, Authenticate")]),t("li",null,[t("strong",null,"TimeStamp"),e(" \u2014 The timestamp of when the action was performed")]),t("li",null,[t("strong",null,"IP Address"),e(" \u2014 The IP address of the device from which the action was performed")]),t("li",null,[t("strong",null,"User Agent"),e(" \u2014 The description of the browser that was used to perform the action")]),t("li",null,[t("strong",null,"Collection"),e(" \u2014 The Collection affected by the action")]),t("li",null,[t("strong",null,"Item"),e(" \u2014 The item (within the above Collection) affected by the action")]),t("li",null,[t("strong",null,"Comment"),e(" \u2014 When applicable; the comment left by the user")])],-1),y=t("div",{class:"tip hint"},[t("div",{class:"hint-title"},"Readonly"),t("p",null,"For proper accountability, activity records are readonly. Administrators should avoid changing, deleting, or truncating this data.")],-1),b=t("div",{class:"warning hint"},[t("div",{class:"hint-title"},"External Events"),t("p",null,"Directus can only track events that pass through the platform\u2019s middleware. Changes made directly to the database, or by other external means, are not included.")],-1),D={setup(T,{expose:l}){const i={title:"Activity",modularExtension:!1};return l({frontmatter:i}),(A,k)=>{const n=s("router-link"),c=s("DocsWrapper");return r(),d(c,{frontmatter:i},{default:o(()=>[t("div",h,[u,t("p",null,[p,a(n,{to:"/docs/concepts/application/#activity-log"},{default:o(()=>[m]),_:1}),_,a(n,{to:"/docs/concepts/application/#item-detail"},{default:o(()=>[f]),_:1}),v]),g,w,y,b])]),_:1})}}};export{D as default};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import{r as n,p as l,q as c,w as a,B as e,t as u,P as t}from"./vendor.a626ab9c.js";const h={class:"markdown-body"},_=e("p",null,[e("div",{class:"table-of-contents"},[e("ul",null,[e("li",null,[e("a",{href:"#cache"},"Cache")]),e("li",null,[e("a",{href:"#auth"},"Auth")]),e("li",null,[e("a",{href:"#file-storage"},"File Storage")]),e("li",null,[e("a",{href:"#rate-limiting"},"Rate Limiting")]),e("li",null,[e("a",{href:"#file-based-configuration"},"File-Based Configuration")])])])],-1),d=e("h2",{id:"cache"},[t("Cache "),e("a",{class:"header-anchor",href:"#cache"},"#")],-1),p=e("p",null,"Directus has a built-in way to do data-caching. Enabling this will cache the output of the request (based on the current user and exact query parameters used) into to configured cache storage location. This will drastically improve API performance, as subsequent requests are served straight from this cache. Enabling cache will also make Directus return accurate cache-control headers. Depending on your setup, this will further improve performance by caching the request in middleman servers (like CDNs) and even the browser.",-1),f=e("p",null,[t("You can enable the data-cache with the "),e("code",null,"CACHE_ENABLED"),t(" environment variable.")],-1),T=e("h3",{id:"cache-store"},[t("Cache Store "),e("a",{class:"header-anchor",href:"#cache-store"},"#")],-1),E=e("p",null,[t("In bigger projects, you most likely don\u2019t want to rely on local memory to keep the caches. Instead, you can use the "),e("code",null,"CACHE_STORE"),t(" environment variable to tell Directus to use either "),e("code",null,"memcache"),t(" or "),e("code",null,"redis"),t(" to store the caches.")],-1),g=e("pre",null,[e("code",null,`CACHE_ENABLED="true"
|
|
2
|
+
|
|
3
|
+
CACHE_STORE="redis"
|
|
4
|
+
CACHE_REDIS="redis://@127.0.0.1"
|
|
5
|
+
`)],-1),A=e("h3",{id:"auto-purging"},[t("Auto-Purging "),e("a",{class:"header-anchor",href:"#auto-purging"},"#")],-1),m=e("p",null,"Directus can automatically clear the caches whenever a create/update/delete action is performed. This allows you to keep the Directus API real-time, while still getting the performance benefits on quick subsequent reads.",-1),R=e("pre",null,[e("code",null,`CACHE_AUTO_PURGE="true"
|
|
6
|
+
`)],-1),O=e("h3",{id:"ttl"},[t("TTL "),e("a",{class:"header-anchor",href:"#ttl"},"#")],-1),I=e("p",null,[t("Based on your project\u2019s needs, you might be able to aggressively cache your data, only requiring new data to be fetched every hour or so. This allows you to squeeze the most performance out of your Directus instance. This can be incredibly useful for applications where you have a lot of (public) read-access and where updates aren\u2019t real-time (for example a website). "),e("code",null,"CACHE_TTL"),t(" uses "),e("a",{href:"https://www.npmjs.com/package/ms",target:"_blank",rel:"noopener noreferrer"},[e("code",null,"ms")]),t(" to parse the value, so you configure it using human readable values (like "),e("code",null,"2 days"),t(", "),e("code",null,"7 hrs"),t(", "),e("code",null,"5m"),t(").")],-1),b=e("pre",null,[e("code",null,`CACHE_TTL="1h"
|
|
7
|
+
`)],-1),L=e("h3",{id:"assets"},[t("Assets "),e("a",{class:"header-anchor",href:"#assets"},"#")],-1),C=e("p",null,"The cache-control header for the /assets endpoint is separate from the regular data-cache. This is useful as it\u2019s often possible to cache assets for way longer than you would with the actual content.",-1),S=e("pre",null,[e("code",null,`ASSETS_CACHE_TTL="7d"
|
|
8
|
+
`)],-1),y=e("h2",{id:"auth"},[t("Auth "),e("a",{class:"header-anchor",href:"#auth"},"#")],-1),v=e("h4",{id:"multiple-providers"},[t("Multiple Providers "),e("a",{class:"header-anchor",href:"#multiple-providers"},"#")],-1),D=e("p",null,"You can configure multiple providers for handling authentication in Directus. This allows for different options when logging in. To do this, you can provide a CSV of provider names, and provide a config block for each of them:",-1),U=e("pre",null,[e("code",null,`AUTH_PROVIDERS="google,adobe"
|
|
9
|
+
|
|
10
|
+
AUTH_GOOGLE_DRIVER="openid"
|
|
11
|
+
AUTH_GOOGLE_CLIENT_ID="<google_application_id>"
|
|
12
|
+
AUTH_GOOGLE_CLIENT_SECRET= "<google_application_secret_key>"
|
|
13
|
+
AUTH_GOOGLE_ISSUER_URL="https://accounts.google.com"
|
|
14
|
+
AUTH_GOOGLE_ALLOW_PUBLIC_REGISTRATION="true"
|
|
15
|
+
AUTH_GOOGLE_DEFAULT_ROLE_ID="<directus_role_id>"
|
|
16
|
+
AUTH_GOOGLE_ICON="google"
|
|
17
|
+
|
|
18
|
+
AUTH_ADOBE_DRIVER="oauth2"
|
|
19
|
+
AUTH_ADOBE_CLIENT_ID="<adobe_application_id>"
|
|
20
|
+
AUTH_ADOBE_CLIENT_SECRET="<adobe_application_secret_key>"
|
|
21
|
+
AUTH_ADOBE_AUTHORIZE_URL="https://ims-na1.adobelogin.com/ims/authorize/v2"
|
|
22
|
+
AUTH_ADOBE_ACCESS_URL="https://ims-na1.adobelogin.com/ims/token/v3"
|
|
23
|
+
AUTH_ADOBE_PROFILE_URL="https://ims-na1.adobelogin.com/ims/userinfo/v2"
|
|
24
|
+
AUTH_ADOBE_ALLOW_PUBLIC_REGISTRATION="true"
|
|
25
|
+
AUTH_ADOBE_DEFAULT_ROLE_ID="<directus_role_id>"
|
|
26
|
+
AUTH_ADOBE_ICON="adobe"
|
|
27
|
+
`)],-1),H=e("h3",{id:"oauth-2.0-and-openid"},[t("OAuth 2.0 and OpenID "),e("a",{class:"header-anchor",href:"#oauth-2.0-and-openid"},"#")],-1),w=e("p",null,"Directus\u2019 OAuth 2.0 and OpenID integrations provide powerful alternative ways to authenticate into your project. Directus will ask you to login on the external service, and return authenticated with a Directus account linked to that service.",-1),G=e("p",null,[t("Directus supports hundreds of OAuth 2.0 and OpenID services, but requires some configuration to authenticate users correctly. For example, enabling authentication through GitHub requires creating an "),e("a",{href:"https://github.com/settings/developers",target:"_blank",rel:"noopener noreferrer"},"OAuth 2.0 app in GitHub"),t(" and adding the following configuration to Directus:")],-1),B=e("pre",null,[e("code",null,`AUTH_PROVIDERS="github"
|
|
28
|
+
AUTH_GITHUB_CLIENT_ID="99d3...c3c4"
|
|
29
|
+
AUTH_GITHUB_CLIENT_SECRET="34ae...f963"
|
|
30
|
+
AUTH_GITHUB_AUTHORIZE_URL="https://github.com/login/oauth/authorize"
|
|
31
|
+
AUTH_GITHUB_ACCESS_URL="https://github.com/login/oauth/access_token"
|
|
32
|
+
AUTH_GITHUB_PROFILE_URL="https://api.github.com/user"
|
|
33
|
+
`)],-1),k=e("div",{class:"warning hint"},[e("div",{class:"hint-title"},"PUBLIC_URL"),e("p",null,[t("These flows rely on the "),e("code",null,"PUBLIC_URL"),t(" variable for redirecting. Make sure that variable is configured correctly.")])],-1),N=e("h2",{id:"file-storage"},[t("File Storage "),e("a",{class:"header-anchor",href:"#file-storage"},"#")],-1),P=e("p",null,"By default, Directus stores every file you upload locally on disk. Instead of local file storage, you can configure Directus to use S3 or Google Cloud Storage instead:",-1),q=e("pre",null,[e("code",null,`STORAGE_LOCATIONS="aws"
|
|
34
|
+
|
|
35
|
+
STORAGE_AWS_DRIVER="s3"
|
|
36
|
+
STORAGE_AWS_KEY="tp15c...510vk"
|
|
37
|
+
STORAGE_AWS_SECRET="yk29b...b932n"
|
|
38
|
+
STORAGE_AWS_REGION="us-east-2"
|
|
39
|
+
STORAGE_AWS_BUCKET="my-files"
|
|
40
|
+
`)],-1),W=e("h3",{id:"multiple-storage-adapters"},[t("Multiple Storage Adapters "),e("a",{class:"header-anchor",href:"#multiple-storage-adapters"},"#")],-1),x=e("p",null,"You can configure multiple storage adapters at the same time. This allows you to choose where files are being uploaded on a file-by-file basis. To do this, you can provide a CSV of storage location names, and provide a config block for each of them:",-1),F=e("pre",null,[e("code",null,`STORAGE_LOCATIONS="local,aws"
|
|
41
|
+
|
|
42
|
+
STORAGE_LOCAL_DRIVER="local"
|
|
43
|
+
STORAGE_LOCAL_ROOT="local"
|
|
44
|
+
|
|
45
|
+
STORAGE_AWS_KEY="tp15c...510vk"
|
|
46
|
+
STORAGE_AWS_SECRET="yk29b...b932n"
|
|
47
|
+
STORAGE_AWS_REGION="us-east-2"
|
|
48
|
+
STORAGE_AWS_BUCKET="my-files"
|
|
49
|
+
`)],-1),M=e("p",null,[t("In the Admin App, files will automatically be uploaded to the first configured storage location (in this case "),e("code",null,"local"),t("). The used storage location is saved under "),e("code",null,"storage"),t(" in "),e("code",null,"directus_files"),t(".")],-1),V=e("h2",{id:"rate-limiting"},[t("Rate Limiting "),e("a",{class:"header-anchor",href:"#rate-limiting"},"#")],-1),Y=e("p",null,"You can use the built-in rate-limiter to prevent users from hitting the API too much. To enable the rate-limiter, simply set",-1),j=e("pre",null,[e("code",null,`RATE_LIMITER_ENABLED="true"
|
|
50
|
+
`)],-1),K=e("p",null,"This will kick-in the rate-limiter on a maximum of 50 requests a second. You can configure this using:",-1),z=e("pre",null,[e("code",null,`// 10 requests per 5 seconds
|
|
51
|
+
|
|
52
|
+
RATE_LIMITER_POINTS="10"
|
|
53
|
+
RATE_LIMITER_DURATION="5"
|
|
54
|
+
`)],-1),Z=e("p",null,[t("Once you have multiple copies of Directus running under a load-balancer, or your user base grows so much that memory is no longer a viable place to store the rate limiter information, you can use an external "),e("code",null,"memcache"),t(" or "),e("code",null,"redis"),t(" instance to store the rate limiter data:")],-1),J=e("pre",null,[e("code",null,`RATE_LIMITER_ENABLED="true"
|
|
55
|
+
|
|
56
|
+
RATE_LIMITER_POINTS="10"
|
|
57
|
+
RATE_LIMITER_DURATION="5"
|
|
58
|
+
|
|
59
|
+
RATE_LIMITER_STORE="redis"
|
|
60
|
+
|
|
61
|
+
RATE_LIMITER_REDIS="redis://@127.0.0.1"
|
|
62
|
+
`)],-1),Q=e("h2",{id:"file-based-configuration"},[t("File-Based Configuration "),e("a",{class:"header-anchor",href:"#file-based-configuration"},"#")],-1),X=t("In case you prefer using a configuration file instead of environment variables, you can use the "),$=e("code",null,"CONFIG_PATH",-1),ee=t(" environment variable to instruct Directus to use a local configuration file instead of environment variables. See "),te=t("Config Files"),oe=t(" for more information."),re={setup(ne,{expose:s}){const o={title:"Configuring the API",modularExtension:!1};return s({frontmatter:o}),(ae,se)=>{const i=n("router-link"),r=n("DocsWrapper");return l(),c(r,{frontmatter:o},{default:a(()=>[e("div",h,[_,d,p,f,T,E,g,A,m,R,O,I,b,L,C,S,y,v,D,U,H,w,G,B,k,N,P,q,W,x,F,M,V,Y,j,K,z,Z,J,Q,e("p",null,[X,$,ee,u(i,{to:"/docs/reference/config-files.md"},{default:a(()=>[te]),_:1}),oe])])]),_:1})}}};export{re as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as a,p as r,q as o,w as c,B as s,P as e}from"./vendor.
|
|
1
|
+
import{r as a,p as r,q as o,w as c,B as s,P as e}from"./vendor.a626ab9c.js";const i=s("div",{class:"markdown-body"},[s("blockquote",null,[s("p",null,"Custom API Endpoints register new API routes which can be used to infinitely extend the core functionality of the platform.")]),s("h2",{id:"1.-setup-the-boilerplate"},[e("1. Setup the Boilerplate "),s("a",{class:"header-anchor",href:"#1.-setup-the-boilerplate"},"#")]),s("p",null,[e("Custom endpoints are dynamically loaded from within your project\u2019s "),s("code",null,"/extensions/endpoints"),e(" folder. Keep in mind that the extensions directory is configurable within your env file, and may be located elsewhere.")]),s("p",null,[e("Each endpoint is registered using a registration function within a scoped directory. For example, to create a custom "),s("code",null,"/my-endpoint/"),e(" endpoint, you would add the following function to "),s("code",null,"/extensions/endpoints/my-endpoint/index.js"),e(".")]),s("pre",null,[s("code",{class:"language-js"},[s("span",{class:"hljs-built_in"},"module"),e(".exports = "),s("span",{class:"hljs-function"},[s("span",{class:"hljs-keyword"},"function"),e(),s("span",{class:"hljs-title"},"registerEndpoint"),e("("),s("span",{class:"hljs-params"},"router"),e(") ")]),e(`{
|
|
2
2
|
router.get(`),s("span",{class:"hljs-string"},"'/'"),e(", "),s("span",{class:"hljs-function"},[e("("),s("span",{class:"hljs-params"},"req, res"),e(") =>")]),e(" res.send("),s("span",{class:"hljs-string"},"'Hello, World!'"),e(`));
|
|
3
3
|
};
|
|
4
4
|
`)])]),s("p",null,"You can also create several scoped endpoints within a single function:"),s("pre",null,[s("code",{class:"language-js"},[s("span",{class:"hljs-comment"},"// /my-endpoint/"),e(`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as o,p as a,q as c,w as r,B as l,P as e}from"./vendor.
|
|
1
|
+
import{r as o,p as a,q as c,w as r,B as l,P as e}from"./vendor.a626ab9c.js";const u=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
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. System events are referenced with the format:"),l("pre",null,[l("code",null,`<scope>.<action>(.<before>)
|
|
3
3
|
// eg: items.create
|
|
4
4
|
// eg: files.upload
|
|
@@ -17,7 +17,7 @@ import{r as o,p as a,q as c,w as r,B as l,P as e}from"./vendor.62143b15.js";cons
|
|
|
17
17
|
},
|
|
18
18
|
};
|
|
19
19
|
};
|
|
20
|
-
`)])]),l("h3",{id:"event-format-options"},[e("Event Format Options "),l("a",{class:"header-anchor",href:"#event-format-options"},"#")]),l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Scope"),l("th",null,"Actions"),l("th",null,"Before")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"cron()")]),l("td",null,[l("a",{href:"#interval-cron"},"See below for configuration")]),l("td",null,"No")]),l("tr",null,[l("td",null,[l("code",null,"cli.init")]),l("td",null,[l("code",null,"before"),e(" and "),l("code",null,"after")]),l("td",null,"No")]),l("tr",null,[l("td",null,[l("code",null,"server")]),l("td",null,[l("code",null,"start"),e(" and "),l("code",null,"stop")]),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"init")]),l("td"),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"routes.init")]),l("td",null,[l("code",null,"before"),e(" and "),l("code",null,"after")]),l("td",null,"No")]),l("tr",null,[l("td",null,[l("code",null,"routes.custom.init")]),l("td",null,[l("code",null,"before"),e(" and "),l("code",null,"after")]),l("td",null,"No")]),l("tr",null,[l("td",null,[l("code",null,"middlewares.init")]),l("td",null,[l("code",null,"before"),e(" and "),l("code",null,"after")]),l("td",null,"No")]),l("tr",null,[l("td",null,[l("code",null,"request")]),l("td",null,[l("code",null,"not_found")]),l("td",null,"No")]),l("tr",null,[l("td",null,[l("code",null,"response")]),l("td"),l("td",null,[e("No"),l("sup",null,"[1]")])]),l("tr",null,[l("td",null,[l("code",null,"database.error")]),l("td",null,"When a database error is thrown"),l("td",null,"No")]),l("tr",null,[l("td",null,[l("code",null,"error")]),l("td"),l("td",null,"No")]),l("tr",null,[l("td",null,[l("code",null,"auth")]),l("td",null,[l("code",null,"login"),e(", "),l("code",null,"logout"),l("sup",null,"[1]"),e(", "),l("code",null,"jwt"),e(" and "),l("code",null,"refresh"),l("sup",null,"[1]")]),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"
|
|
20
|
+
`)])]),l("h3",{id:"event-format-options"},[e("Event Format Options "),l("a",{class:"header-anchor",href:"#event-format-options"},"#")]),l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Scope"),l("th",null,"Actions"),l("th",null,"Before")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"cron()")]),l("td",null,[l("a",{href:"#interval-cron"},"See below for configuration")]),l("td",null,"No")]),l("tr",null,[l("td",null,[l("code",null,"cli.init")]),l("td",null,[l("code",null,"before"),e(" and "),l("code",null,"after")]),l("td",null,"No")]),l("tr",null,[l("td",null,[l("code",null,"server")]),l("td",null,[l("code",null,"start"),e(" and "),l("code",null,"stop")]),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"init")]),l("td"),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"routes.init")]),l("td",null,[l("code",null,"before"),e(" and "),l("code",null,"after")]),l("td",null,"No")]),l("tr",null,[l("td",null,[l("code",null,"routes.custom.init")]),l("td",null,[l("code",null,"before"),e(" and "),l("code",null,"after")]),l("td",null,"No")]),l("tr",null,[l("td",null,[l("code",null,"middlewares.init")]),l("td",null,[l("code",null,"before"),e(" and "),l("code",null,"after")]),l("td",null,"No")]),l("tr",null,[l("td",null,[l("code",null,"request")]),l("td",null,[l("code",null,"not_found")]),l("td",null,"No")]),l("tr",null,[l("td",null,[l("code",null,"response")]),l("td"),l("td",null,[e("No"),l("sup",null,"[1]")])]),l("tr",null,[l("td",null,[l("code",null,"database.error")]),l("td",null,"When a database error is thrown"),l("td",null,"No")]),l("tr",null,[l("td",null,[l("code",null,"error")]),l("td"),l("td",null,"No")]),l("tr",null,[l("td",null,[l("code",null,"auth")]),l("td",null,[l("code",null,"login"),e(", "),l("code",null,"logout"),l("sup",null,"[1]"),e(", "),l("code",null,"jwt"),e(" and "),l("code",null,"refresh"),l("sup",null,"[1]")]),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"items")]),l("td",null,[l("code",null,"read"),l("sup",null,"[2]"),e(", "),l("code",null,"create"),e(", "),l("code",null,"update"),e(" and "),l("code",null,"delete")]),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"activity")]),l("td",null,[l("code",null,"create"),e(", "),l("code",null,"update"),e(" and "),l("code",null,"delete")]),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"collections")]),l("td",null,[l("code",null,"create"),e(", "),l("code",null,"update"),e(" and "),l("code",null,"delete")]),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"fields")]),l("td",null,[l("code",null,"create"),e(", "),l("code",null,"update"),e(" and "),l("code",null,"delete")]),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"files")]),l("td",null,[l("code",null,"upload"),l("sup",null,"[2]")]),l("td",null,"No")]),l("tr",null,[l("td",null,[l("code",null,"folders")]),l("td",null,[l("code",null,"create"),e(", "),l("code",null,"update"),e(" and "),l("code",null,"delete")]),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"permissions")]),l("td",null,[l("code",null,"create"),e(", "),l("code",null,"update"),e(" and "),l("code",null,"delete")]),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"presets")]),l("td",null,[l("code",null,"create"),e(", "),l("code",null,"update"),e(" and "),l("code",null,"delete")]),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"relations")]),l("td",null,[l("code",null,"create"),e(", "),l("code",null,"update"),e(" and "),l("code",null,"delete")]),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"revisions")]),l("td",null,[l("code",null,"create"),e(", "),l("code",null,"update"),e(" and "),l("code",null,"delete")]),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"roles")]),l("td",null,[l("code",null,"create"),e(", "),l("code",null,"update"),e(" and "),l("code",null,"delete")]),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"settings")]),l("td",null,[l("code",null,"create"),e(", "),l("code",null,"update"),e(" and "),l("code",null,"delete")]),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"users")]),l("td",null,[l("code",null,"create"),e(", "),l("code",null,"update"),e(" and "),l("code",null,"delete")]),l("td",null,"Optional")]),l("tr",null,[l("td",null,[l("code",null,"webhooks")]),l("td",null,[l("code",null,"create"),e(", "),l("code",null,"update"),e(" and "),l("code",null,"delete")]),l("td",null,"Optional")])])]),l("p",null,[l("sup",null,"1"),e(" Feature Coming Soon"),l("br"),l("sup",null,"2"),e(" Doesn\u2019t support "),l("code",null,".before"),e(" modifier")]),l("h4",{id:"interval-(cron)"},[e("Interval (cron) "),l("a",{class:"header-anchor",href:"#interval-(cron)"},"#")]),l("p",null,[e("Hooks support running on an interval 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 in the event scope as follows: "),l("code",null,"cron(<statement>)"),e(", for example "),l("code",null,"cron(15 14 1 * *)"),e(" (at 14:15 on day-of-month 1) or "),l("code",null,"cron(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(`);
|
|
21
21
|
|
|
22
22
|
`),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"}),e(") ")]),e(`{
|
|
23
23
|
`),l("span",{class:"hljs-keyword"},"return"),e(` {
|
|
@@ -35,7 +35,7 @@ import{r as o,p as a,q as c,w as r,B as l,P as e}from"./vendor.62143b15.js";cons
|
|
|
35
35
|
},
|
|
36
36
|
};
|
|
37
37
|
};
|
|
38
|
-
`)])]),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 "),l("code",null,"before"),e(" 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 register function (eg: "),l("code",null,"module.exports = function registerHook()"),e(") must return an object where the key is the event, and the value is the handler function itself.")]),l("p",null,[e("The "),l("code",null,"registerHook"),e(" function receives a context parameter 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\xA0API 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\xA0Parsed environment variables")]),l("li",null,[l("code",null,"logger"),e(" \u2014\xA0"),l("a",{href:"https://github.com/pinojs/pino",target:"_blank",rel:"noopener noreferrer"},"Pino"),e(" instance.")])]),l("h3",{id:"event-handler-function"},[e("Event Handler Function "),l("a",{class:"header-anchor",href:"#event-handler-function"},"#")]),l("p",null,[e("The event handler function (eg: "),l("code",null,"'items.create': function()"),e(") receives a context parameter with the following properties:")]),l("ul",null,[l("li",null,[l("code",null,"event"),e(" \u2014 Full event string")]),l("li",null,[l("code",null,"accountability"),e(" \u2014 Information about the current user")]),l("li",null,[l("code",null,"collection"),e(" \u2014 Collection that is being modified")]),l("li",null,[l("code",null,"item"),e(" \u2014\xA0Primary key(s) of the item(s) being modified")]),l("li",null,[l("code",null,"action"),e("\xA0\u2014 Action that is performed")]),l("li",null,[l("code",null,"payload"),e(" \u2014\xA0Payload of the request")]),l("li",null,[l("code",null,"schema"),e(" - The current API schema in use")]),l("li",null,[l("code",null,"database"),e(" - Current database transaction")])]),l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Input"),l("p",null,[e("The "),l("code",null,"items.*.before"),e(" hooks get the raw input payload as the first parameter, with the context parameter as the second parameter.")])]),l("h4",{id:"items-read"},[e("Items read "),l("a",{class:"header-anchor",href:"#items-read"},"#")]),l("p",null,[e("In contrast to the other "),l("code",null,"items"),e(" events ("),l("code",null,"items.create"),e(", "),l("code",null,"items.update"),e(", "),l("code",null,"items.delete"),e(") the "),l("code",null,"items.read"),e(" doesn\u2019t receive the primary key(s) of the items but the query used:")]),l("ul",null,[l("li",null,[l("code",null,"event"),e(" \u2014 Full event string")]),l("li",null,[l("code",null,"accountability"),e(" \u2014 Information about the current user")]),l("li",null,[l("code",null,"collection"),e(" \u2014 Collection that is being modified")]),l("li",null,[l("code",null,"query"),e(" \u2014\xA0The query used to get the data")]),l("li",null,[l("code",null,"action"),e("\xA0\u2014 Action that is performed")]),l("li",null,[l("code",null,"payload"),e(" \u2014\xA0Payload of the request")]),l("li",null,[l("code",null,"schema"),e(" - The current API schema in use")]),l("li",null,[l("code",null,"database"),e(" - Current database transaction")])]),l("h4",{id:"auth"},[e("Auth "),l("a",{class:"header-anchor",href:"#auth"},"#")]),l("p",null,[e("The "),l("code",null,"auth"),e("
|
|
38
|
+
`)])]),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 "),l("code",null,"before"),e(" 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 register function (eg: "),l("code",null,"module.exports = function registerHook()"),e(") must return an object where the key is the event, and the value is the handler function itself.")]),l("p",null,[e("The "),l("code",null,"registerHook"),e(" function receives a context parameter 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\xA0API 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\xA0Parsed environment variables")]),l("li",null,[l("code",null,"logger"),e(" \u2014\xA0"),l("a",{href:"https://github.com/pinojs/pino",target:"_blank",rel:"noopener noreferrer"},"Pino"),e(" instance.")])]),l("h3",{id:"event-handler-function"},[e("Event Handler Function "),l("a",{class:"header-anchor",href:"#event-handler-function"},"#")]),l("p",null,[e("The event handler function (eg: "),l("code",null,"'items.create': function()"),e(") receives a context parameter with the following properties:")]),l("ul",null,[l("li",null,[l("code",null,"event"),e(" \u2014 Full event string")]),l("li",null,[l("code",null,"accountability"),e(" \u2014 Information about the current user")]),l("li",null,[l("code",null,"collection"),e(" \u2014 Collection that is being modified")]),l("li",null,[l("code",null,"item"),e(" \u2014\xA0Primary key(s) of the item(s) being modified")]),l("li",null,[l("code",null,"action"),e("\xA0\u2014 Action that is performed")]),l("li",null,[l("code",null,"payload"),e(" \u2014\xA0Payload of the request")]),l("li",null,[l("code",null,"schema"),e(" - The current API schema in use")]),l("li",null,[l("code",null,"database"),e(" - Current database transaction")])]),l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Input"),l("p",null,[e("The "),l("code",null,"items.*.before"),e(" hooks get the raw input payload as the first parameter, with the context parameter as the second parameter.")])]),l("h4",{id:"items-read"},[e("Items read "),l("a",{class:"header-anchor",href:"#items-read"},"#")]),l("p",null,[e("In contrast to the other "),l("code",null,"items"),e(" events ("),l("code",null,"items.create"),e(", "),l("code",null,"items.update"),e(", "),l("code",null,"items.delete"),e(") the "),l("code",null,"items.read"),e(" doesn\u2019t receive the primary key(s) of the items but the query used:")]),l("ul",null,[l("li",null,[l("code",null,"event"),e(" \u2014 Full event string")]),l("li",null,[l("code",null,"accountability"),e(" \u2014 Information about the current user")]),l("li",null,[l("code",null,"collection"),e(" \u2014 Collection that is being modified")]),l("li",null,[l("code",null,"query"),e(" \u2014\xA0The query used to get the data")]),l("li",null,[l("code",null,"action"),e("\xA0\u2014 Action that is performed")]),l("li",null,[l("code",null,"payload"),e(" \u2014\xA0Payload of the request")]),l("li",null,[l("code",null,"schema"),e(" - The current API schema in use")]),l("li",null,[l("code",null,"database"),e(" - Current database transaction")])]),l("h4",{id:"auth"},[e("Auth "),l("a",{class:"header-anchor",href:"#auth"},"#")]),l("p",null,[e("The "),l("code",null,"auth"),e(" hooks have the following context properties:")]),l("ul",null,[l("li",null,[l("code",null,"event"),e(" \u2014 Full event string")]),l("li",null,[l("code",null,"accountability"),e(" \u2014 Information about the current user")]),l("li",null,[l("code",null,"action"),e("\xA0\u2014 Action that is performed")]),l("li",null,[l("code",null,"payload"),e(" \u2014\xA0Payload of the request")]),l("li",null,[l("code",null,"schema"),e(" - The current API schema in use")]),l("li",null,[l("code",null,"status"),e(" - One of "),l("code",null,"pending"),e(", "),l("code",null,"success"),e(", "),l("code",null,"fail")]),l("li",null,[l("code",null,"user"),e(" - ID of the user that tried logging in/has logged in")])]),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
|
|
39
39
|
`)]),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(`);
|
|
40
40
|
|
|
41
41
|
`),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"},"{ services, exceptions }"),e(") ")]),e(`{
|
|
@@ -74,4 +74,4 @@ import{r as o,p as a,q as c,w as r,B as l,P as e}from"./vendor.62143b15.js";cons
|
|
|
74
74
|
},
|
|
75
75
|
};
|
|
76
76
|
};
|
|
77
|
-
`)])])],-1),f={setup(
|
|
77
|
+
`)])])],-1),f={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:r(()=>[u]),_:1})}}};export{f as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{bE as h}from"./vendor.a626ab9c.js";function g(i,o){return o.forEach(function(t){Object.keys(t).forEach(function(l){if(l!=="default"&&!(l in i)){var u=Object.getOwnPropertyDescriptor(t,l);Object.defineProperty(i,l,u.get?u:{enumerable:!0,get:function(){return t[l]}})}})}),Object.freeze(i)}var f={exports:{}};(function(i,o){(function(t){t(h.exports)})(function(t){t.defineMode("apl",function(){var l={".":"innerProduct","\\":"scan","/":"reduce","\u233F":"reduce1Axis","\u2340":"scan1Axis","\xA8":"each","\u2363":"power"},u={"+":["conjugate","add"],"\u2212":["negate","subtract"],"\xD7":["signOf","multiply"],"\xF7":["reciprocal","divide"],"\u2308":["ceiling","greaterOf"],"\u230A":["floor","lesserOf"],"\u2223":["absolute","residue"],"\u2373":["indexGenerate","indexOf"],"?":["roll","deal"],"\u22C6":["exponentiate","toThePowerOf"],"\u235F":["naturalLog","logToTheBase"],"\u25CB":["piTimes","circularFuncs"],"!":["factorial","binomial"],"\u2339":["matrixInverse","matrixDivide"],"<":[null,"lessThan"],"\u2264":[null,"lessThanOrEqual"],"=":[null,"equals"],">":[null,"greaterThan"],"\u2265":[null,"greaterThanOrEqual"],"\u2260":[null,"notEqual"],"\u2261":["depth","match"],"\u2262":[null,"notMatch"],"\u2208":["enlist","membership"],"\u2377":[null,"find"],"\u222A":["unique","union"],"\u2229":[null,"intersection"],"\u223C":["not","without"],"\u2228":[null,"or"],"\u2227":[null,"and"],"\u2371":[null,"nor"],"\u2372":[null,"nand"],"\u2374":["shapeOf","reshape"],",":["ravel","catenate"],"\u236A":[null,"firstAxisCatenate"],"\u233D":["reverse","rotate"],"\u2296":["axis1Reverse","axis1Rotate"],"\u2349":["transpose",null],"\u2191":["first","take"],"\u2193":[null,"drop"],"\u2282":["enclose","partitionWithAxis"],"\u2283":["diclose","pick"],"\u2337":[null,"index"],"\u234B":["gradeUp",null],"\u2352":["gradeDown",null],"\u22A4":["encode",null],"\u22A5":["decode",null],"\u2355":["format","formatByExample"],"\u234E":["execute",null],"\u22A3":["stop","left"],"\u22A2":["pass","right"]},s=/[\.\/⌿⍀¨⍣]/,c=/⍬/,p=/[\+−×÷⌈⌊∣⍳\?⋆⍟○!⌹<≤=>≥≠≡≢∈⍷∪∩∼∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢]/,d=/←/,v=/[⍝#].*$/,x=function(n){var r;return r=!1,function(e){return r=e,e===n?r==="\\":!0}};return{startState:function(){return{prev:!1,func:!1,op:!1,string:!1,escape:!1}},token:function(n,r){var e,a;return n.eatSpace()?null:(e=n.next(),e==='"'||e==="'"?(n.eatWhile(x(e)),n.next(),r.prev=!0,"string"):/[\[{\(]/.test(e)?(r.prev=!1,null):/[\]}\)]/.test(e)?(r.prev=!0,null):c.test(e)?(r.prev=!1,"niladic"):/[¯\d]/.test(e)?(r.func?(r.func=!1,r.prev=!1):r.prev=!0,n.eatWhile(/[\w\.]/),"number"):s.test(e)?"operator apl-"+l[e]:d.test(e)?"apl-arrow":p.test(e)?(a="apl-",u[e]!=null&&(r.prev?a+=u[e][1]:a+=u[e][0]),r.func=!0,r.prev=!1,"function "+a):v.test(e)?(n.skipToEnd(),"comment"):e==="\u2218"&&n.peek()==="."?(n.next(),"function jot-dot"):(n.eatWhile(/[\w\$_]/),r.prev=!0,"keyword"))}}}),t.defineMIME("text/apl","apl")})})();var m=f.exports,O=Object.freeze(g({__proto__:null,[Symbol.toStringTag]:"Module",default:m},[f.exports]));export{O as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as o,p as a,q as u,w as d,B as e,P as l}from"./vendor.
|
|
1
|
+
import{r as o,p as a,q as u,w as d,B as e,P as l}from"./vendor.a626ab9c.js";const r=e("div",{class:"markdown-body"},[e("p",null,"The purpose of the app reference is to allow more and easier access to our internal components when developing custom interfaces, displays or modules."),e("h2",{id:"app-structure"},[l("App Structure "),e("a",{class:"header-anchor",href:"#app-structure"},"#")]),e("p",null,"The Vue frontend app is structured into many departments to combine similar purpose components."),e("table",null,[e("thead",null,[e("tr",null,[e("th",null,"Folder"),e("th",null,"Content"),e("th",null,"Example")])]),e("tbody",null,[e("tr",null,[e("td",null,[e("code",null,"components")]),e("td",null,"In here are our base components that are designed to be as general and everywhere fitting as possible"),e("td",null,[l("It contains "),e("code",null,"v-button")])]),e("tr",null,[e("td",null,[e("code",null,"composables")]),e("td",null,"Composables are reusable pieces of logic that can be used inside Vue component"),e("td",null,[e("code",null,"use-shortcut"),l(" to easily react to button combinations pressed")])]),e("tr",null,[e("td",null,[e("code",null,"directives")]),e("td",null,"Directives are functions that are available on Vue components in templates"),e("td",null,[l("contains "),e("code",null,"v-focus"),l(" or "),e("code",null,"v-tooltip")])]),e("tr",null,[e("td",null,[e("code",null,"displays")]),e("td",null,"Displays are functions / components that are used in the system to display data"),e("td",null,[e("code",null,"display-image"),l(" is used to display image data inside the app")])]),e("tr",null,[e("td",null,[e("code",null,"interfaces")]),e("td",null,"Interfaces are the individual blocks that allow editing and viewing individual pieces of data"),e("td",null,[e("code",null,"interface-color"),l(" is a color picker allowing for easy selection of any color")])]),e("tr",null,[e("td",null,[e("code",null,"lang")]),e("td",null,"Containing all translations used across the directus app"),e("td",null,[l("Contains translations like "),e("code",null,"en-US")])]),e("tr",null,[e("td",null,[e("code",null,"layouts")]),e("td",null,"Layouts change the way items are represented inside the collection view"),e("td",null,"The card and tabular layout are inside here")]),e("tr",null,[e("td",null,[e("code",null,"modules")]),e("td",null,"Modules organize in which major parts the app is structured"),e("td",null,"Here are the files or settings module which are always visible from the sidebar")]),e("tr",null,[e("td",null,[e("code",null,"routes")]),e("td",null,"Basic routes the app needs that shouldn\u2019t be customized"),e("td",null,"Routes for authentication or password reset")]),e("tr",null,[e("td",null,[e("code",null,"stores")]),e("td",null,"Here lay all stores used in the app containing all relevant data that gets fetched from the api"),e("td",null,[l("The "),e("code",null,"fields"),l(" store containing all accessible fields for the user")])]),e("tr",null,[e("td",null,[e("code",null,"styles")]),e("td",null,"All general styles, css-vars, mixins and themes are stored inside here"),e("td",null,[l("The "),e("code",null,"form-grid"),l(" mixin allowing to style form like grids")])]),e("tr",null,[e("td",null,[e("code",null,"types")]),e("td",null,"Contains types used to generalize data for typescript"),e("td",null,[e("code",null,"field-schema"),l(" which is used to model the schema of fields")])]),e("tr",null,[e("td",null,[e("code",null,"utils")]),e("td",null,"Utility functions that helps minimize repetition"),e("td",null,[e("code",null,"notify"),l(" which is used to easily generate notifications inside the app")])]),e("tr",null,[e("td",null,[e("code",null,"views")]),e("td",null,"Views are the top-level parent component that are used in all modules"),e("td",null,[e("code",null,"private-view"),l(" which renders the basic structure like sidebar, headers and content sections")])])])])],-1),m={setup(i,{expose:n}){const t={title:"App Reference",modularExtension:!1};return n({frontmatter:t}),(c,p)=>{const s=o("DocsWrapper");return a(),u(s,{frontmatter:t},{default:d(()=>[r]),_:1})}}};export{m as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as l,p as c,q as r,w as i,B as e,t as s,P as t}from"./vendor.62143b15.js";var u="assets/app-overview.9d9e9cee.svg";const h={class:"markdown-body"},_=e("blockquote",null,[e("p",null,"The Directus App is the presentation layer for your data, content, and assets. It uses a left-to-right visual hierarchy for organization and navigation. Below we cover the App\u2019s global elements and individual pages.")],-1),g=e("p",null,[t("The Directus App is decoupled from, and powered by, the Directus API. It provides a way for both technical admins and non-technical users to view and manage content of the connected database. It is written in "),e("a",{href:"https://vuejs.org",target:"_blank",rel:"noopener noreferrer"},"Vue.js"),t(", is completely modular, and is highly customizable.")],-1),f=e("h2",{id:"app-section-hierarchy"},[t("App Section Hierarchy "),e("a",{class:"header-anchor",href:"#app-section-hierarchy"},"#")],-1),p=e("p",null,[e("img",{src:u,alt:"Application Overview"})],-1),m=e("h3",{id:"1.-module-bar"},[t("1. Module Bar "),e("a",{class:"header-anchor",href:"#1.-module-bar"},"#")],-1),y=e("li",null,[e("strong",null,"Project Logo"),t(" \u2014 Displays your configured project logo and project color (defaults to the Directus logo and color). If configured, clicking this component will navigate to the Project URL. During platform activity, an indeterminate progress indicator will also be shown here.")],-1),v=e("strong",null,"Module Navigation",-1),b=t(" \u2014 Allows navigating between the different modules your user has access to. Customizing the Module Navigation is done within the "),w=t("Role\u2019s configuration"),k=t(", but the default module list includes: "),D=e("li",null,[e("a",{href:"#collections"},"Collections")],-1),T=e("li",null,[e("a",{href:"#user-directory"},"User Directory")],-1),I=e("li",null,[e("a",{href:"#file-library"},"File Library")],-1),C=e("li",null,[e("a",{href:"#documentation"},"Documentation")],-1),A=e("li",null,[e("a",{href:"#settings"},"Settings"),t(" (Admin Roles Only)")],-1),j=t("Any Custom Modules"),P=t(" (Only if Configured)"),x=e("li",null,[e("strong",null,"Current User Menu"),t(" \u2014 This component displays the authenticated user\u2019s name and avatar. "),e("ul",null,[e("li",null,"Sign Out \u2014 Hovering over the User Menu exposes the button to log out of the platform.")])],-1),U=e("h3",{id:"2.-navigation-bar"},[t("2. Navigation Bar "),e("a",{class:"header-anchor",href:"#2.-navigation-bar"},"#")],-1),F=e("strong",null,"Project Name",-1),S=t(" \u2014 Shows an icon and tooltip indicating the API\u2019s connection strength, and the name of your current project, which can be configured under "),L=t("Project Settings"),B=t("."),N=e("strong",null,"Navigation",-1),M=t(" \u2014 This is a dynamic navigation based on your current module. Some modules also support "),R=t("Bookmark Presets"),O=t(", which are a customizable links to specific data-sets."),z=e("h3",{id:"3.-page"},[t("3. Page "),e("a",{class:"header-anchor",href:"#3.-page"},"#")],-1),H=e("ul",null,[e("li",null,[e("strong",null,"Header"),t(" \u2014 A fixed section at the top of each page, the header includes: "),e("ul",null,[e("li",null,"Page Icon \u2014 Clicking this navigates back to the previous page."),e("li",null,"Module Name \u2014 Clicking this navigates to the parent module/section."),e("li",null,"Page Title \u2014 Displays dynamic title of the current page."),e("li",null,"Action Buttons \u2014 Right-aligned contextual buttons for specific page actions.")])]),e("li",null,[e("strong",null,"Page Content"),t(" \u2014 This displays the content of the page you navigated to.")])],-1),V=e("h3",{id:"4.-page-sidebar"},[t("4. Page Sidebar "),e("a",{class:"header-anchor",href:"#4.-page-sidebar"},"#")],-1),q=e("ul",null,[e("li",null,[e("strong",null,"Page Components"),t(" \u2014 Lists any contextual page components available. The \u201CInfo\u201D component is available on every page, explaining the page\u2019s general purpose and relevant details. Clicking any sidebar component will accordion it open. If the App window is large enough, the sidebar will automatically open, and can be closed by clicking the \u201CX\u201D in the top-right.")]),e("li",null,[e("strong",null,"Notifications Tray"),t(" \u2014 Fixed to the bottom of the page sidebar, this button opens a tray of recent user notifications, and provides a link to the "),e("a",{href:"#activity-log"},"Activity Log"),t(" page.")])],-1),G=e("h2",{id:"collections"},[t("Collections "),e("a",{class:"header-anchor",href:"#collections"},"#")],-1),W=e("p",null,"This module is the primary way for interacting with your database content. Here you can access your collections, browse their items, and navigate to individual item forms.",-1),E=e("h3",{id:"collection-listing"},[t("Collection Listing "),e("a",{class:"header-anchor",href:"#collection-listing"},"#")],-1),X=e("p",null,"A page that lists the collections available to the current user. This is the landing page of the module, and effectively the same as its navigation listing.",-1),J=e("h3",{id:"collection-detail"},[t("Collection Detail "),e("a",{class:"header-anchor",href:"#collection-detail"},"#")],-1),K=e("p",null,"This is the main gateway to your content items, providing a highly configurable Layout for browsing and visualizing the items within a collection. The header of this page includes key action buttons for creating, deleting, and batch editing items.",-1),Q=t("Adjusting a Collection Layout"),Y=t("Creating an Item"),Z=t("Updating an Item"),$=t("Deleting an Item"),ee=t("Archiving an Item"),te=t("Ordering Items"),ie=t("Exporting Items"),oe=t("Browsing Items "),se=t("Searching"),ne=t("Filtering"),le=t("Bookmarking"),ae=e("h3",{id:"item-detail"},[t("Item Detail "),e("a",{class:"header-anchor",href:"#item-detail"},"#")],-1),de=t("Most Collection Detail Layouts support navigating to individual item detail pages where you a presented with a "),ce=t("customizable form"),re=t(" for viewing/editing the item\u2019s content. Like other detail pages, there are many available features, including:"),ue=t("Adjusting Field Arrangement"),he=t("Updating an Item"),_e=t("Archiving an Item"),ge=t("Reverting an Item"),fe=t("Deleting an Item"),pe=t("Commenting on an Item"),me=e("h2",{id:"user-directory"},[t("User Directory "),e("a",{class:"header-anchor",href:"#user-directory"},"#")],-1),ye=e("p",null,[t("This module includes a comprehensive listing of all system users within your project. This page has the same features and configuration as "),e("a",{href:"#collection-detail"},"Collection Detail"),t(".")],-1),ve=e("h3",{id:"user-detail"},[t("User Detail "),e("a",{class:"header-anchor",href:"#user-detail"},"#")],-1),be=t("Similar to other "),we=e("a",{href:"#item-detail"},"Item Detail",-1),ke=t(" pages, this page provides a custom form for viewing system users. This is also used for editing the \u201CProfile Page\u201D of the current user, which is accessible from the "),De=e("a",{href:"#_1-module-bar"},"User Menu",-1),Te=t(". There are a number of "),Ie=t("User Fields"),Ce=t(" included out-of-the-box that can then be extended by following the normal "),Ae=t("Creating a Field"),je=t(" guide."),Pe=t("Creating a User"),xe=t("Inviting a User"),Ue=t("Configuring a User"),Fe=t("Archiving a User"),Se=t("Deleting a User"),Le=e("h2",{id:"file-library"},[t("File Library "),e("a",{class:"header-anchor",href:"#file-library"},"#")],-1),Be=e("p",null,[t("This module aggregates all files within the project into one consolidated library. This page has the same features and configuration as "),e("a",{href:"#collection-detail"},"Collection Detail"),t(".")],-1),Ne=e("h3",{id:"file-detail"},[t("File Detail "),e("a",{class:"header-anchor",href:"#file-detail"},"#")],-1),Me=t("Similar to other "),Re=e("a",{href:"#item-detail"},"Item Detail",-1),Oe=t(" pages, this page provides a custom form for viewing assets and embeds. There are a number of "),ze=t("File Fields"),He=t(" included out-of-the-box that can then be extended by following the normal "),Ve=t("Creating a Field"),qe=t(" guide."),Ge=t("Uploading a File"),We=t("Accessing an Original File"),Ee=t("Creating a Thumbnail Preset"),Xe=t("Requesting a Thumbnail"),Je=e("h2",{id:"documentation"},[t("Documentation "),e("a",{class:"header-anchor",href:"#documentation"},"#")],-1),Ke=t("This module is an internal set of guides, concepts, and reference docs for your project\u2019s specific version of Directus. It also includes a dynamic "),Qe=t("API Reference"),Ye=t(" that is dynamically tailored to your custom schema. The docs are organized into these distinct sections:"),Ze=t("Getting Started"),$e=t(" \u2014 Novice oriented, for a platform intro and installation."),et=t("Concepts"),tt=t(" \u2014 Learning oriented, for understanding the platform."),it=t("Guides"),ot=t(" \u2014 Problem oriented, follow along with steps while working."),st=t("Reference"),nt=t(" \u2014 Information oriented, look up info and specs while working."),lt=t("API Reference"),at=t(" \u2014 Information oriented, look up API resources while working."),dt=t("Contributing"),ct=t(" \u2014 Contributor oriented \u2014 resources for working on Open-Source Core."),rt=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Updating the Docs"),e("p",null,[t("Our docs are written in markdown (with some additional VuePress styling like this hint box), and available for editing/fixing via "),e("a",{href:"https://github.com/directus/directus",target:"_blank",rel:"noopener noreferrer"},"GitHub"),t(".")])],-1),ut=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Public Docs"),e("p",null,[t("The latest version of the Directus Docs are also available publicly. This online version includes additional sections, such as how to install the platform. "),e("a",{href:"https://docs.directus.io",target:"_blank",rel:"noopener noreferrer"},"https://docs.directus.io")])],-1),ht=e("h2",{id:"activity-log"},[t("Activity Log "),e("a",{class:"header-anchor",href:"#activity-log"},"#")],-1),_t=e("p",null,[t("This module provides a collective timeline of all actions taken within the project. This is a great way to audit user activity or enforce accountability. This is the only system module that is not in the module bar by default \u2014 instead being located within the notifications tray of the page sidebar. This page has the same features and configuration as "),e("a",{href:"#collection-detail"},"Collection Detail"),t(".")],-1),gt=e("h3",{id:"activity-detail"},[t("Activity Detail "),e("a",{class:"header-anchor",href:"#activity-detail"},"#")],-1),ft=t("Unlike other item detail pages, activity items are "),pt=e("strong",null,"readonly",-1),mt=t(" (for proper accountability) and open in a side drawer to display the "),yt=t("Activity Fields"),vt=t("."),bt=e("h2",{id:"settings"},[t("Settings "),e("a",{class:"header-anchor",href:"#settings"},"#")],-1),wt=t("This module is only available to users within "),kt=t("Admin roles"),Dt=t(". This is where your project is configured, and the first place to go after installation. It includes the following sections:"),Tt=t("Project Settings"),It=t("Data Model"),Ct=t("Roles & Permissions"),At=t("Presets & Bookmarks"),jt=t("Webhooks"),St={setup(Pt,{expose:a}){const n={title:"The Directus Application",modularExtension:!1};return a({frontmatter:n}),(xt,Ut)=>{const o=l("router-link"),d=l("DocsWrapper");return c(),r(d,{frontmatter:n},{default:i(()=>[e("div",h,[_,g,f,p,m,e("ul",null,[y,e("li",null,[v,b,s(o,{to:"/docs/guides/roles/#configuring-a-role"},{default:i(()=>[w]),_:1}),k,e("ul",null,[D,T,I,C,A,e("li",null,[s(o,{to:"/docs/concepts/modules/"},{default:i(()=>[j]),_:1}),P])])]),x]),U,e("ul",null,[e("li",null,[F,S,s(o,{to:"/docs/guides/projects/#adjusting-project-settings"},{default:i(()=>[L]),_:1}),B]),e("li",null,[N,M,s(o,{to:"/docs/guides/presets/#creating-a-preset"},{default:i(()=>[R]),_:1}),O])]),z,H,V,q,G,W,E,X,J,K,e("ul",null,[e("li",null,[s(o,{to:"/docs/guides/collections/#adjusting-a-collection-layout"},{default:i(()=>[Q]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#creating-an-item"},{default:i(()=>[Y]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#updating-an-item"},{default:i(()=>[Z]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#deleting-an-item"},{default:i(()=>[$]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#archiving-an-item"},{default:i(()=>[ee]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#ordering-items"},{default:i(()=>[te]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#exporting-items"},{default:i(()=>[ie]),_:1})]),e("li",null,[oe,e("ul",null,[e("li",null,[s(o,{to:"/docs/guides/items/#searching-items"},{default:i(()=>[se]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#filtering-items"},{default:i(()=>[ne]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#bookmarking-item-presets"},{default:i(()=>[le]),_:1})])])])]),ae,e("p",null,[de,s(o,{to:"/docs/guides/fields#adjusting-field-arrangement"},{default:i(()=>[ce]),_:1}),re]),e("ul",null,[e("li",null,[s(o,{to:"/docs/guides/fields/#adjusting-field-arrangement"},{default:i(()=>[ue]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#updating-an-item"},{default:i(()=>[he]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#archiving-an-item"},{default:i(()=>[_e]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#reverting-an-item"},{default:i(()=>[ge]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#deleting-an-item"},{default:i(()=>[fe]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#commenting-on-an-item"},{default:i(()=>[pe]),_:1})])]),me,ye,ve,e("p",null,[be,we,ke,De,Te,s(o,{to:"/docs/concepts/users/#user-fields"},{default:i(()=>[Ie]),_:1}),Ce,s(o,{to:"/docs/guides/fields/#creating-a-field"},{default:i(()=>[Ae]),_:1}),je]),e("ul",null,[e("li",null,[s(o,{to:"/docs/guides/users/#creating-a-user"},{default:i(()=>[Pe]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/users/#inviting-a-user"},{default:i(()=>[xe]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/users/#configuring-a-user"},{default:i(()=>[Ue]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/users/#archiving-a-user"},{default:i(()=>[Fe]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/users/#deleting-a-user"},{default:i(()=>[Se]),_:1})])]),Le,Be,Ne,e("p",null,[Me,Re,Oe,s(o,{to:"/docs/concepts/files/#file-fields"},{default:i(()=>[ze]),_:1}),He,s(o,{to:"/docs/guides/fields/#creating-a-field"},{default:i(()=>[Ve]),_:1}),qe]),e("ul",null,[e("li",null,[s(o,{to:"/docs/guides/files/#uploading-a-file"},{default:i(()=>[Ge]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/files/#downloading-an-original-file"},{default:i(()=>[We]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/files/#creating-a-thumbnail-preset"},{default:i(()=>[Ee]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/files/#requesting-a-thumbnail"},{default:i(()=>[Xe]),_:1})])]),Je,e("p",null,[Ke,s(o,{to:"/docs/reference/api/introduction"},{default:i(()=>[Qe]),_:1}),Ye]),e("ul",null,[e("li",null,[s(o,{to:"/docs/getting-started/introduction/"},{default:i(()=>[Ze]),_:1}),$e]),e("li",null,[s(o,{to:"/docs/concepts/activity"},{default:i(()=>[et]),_:1}),tt]),e("li",null,[s(o,{to:"/docs/guides/api-config"},{default:i(()=>[it]),_:1}),ot]),e("li",null,[s(o,{to:"/docs/reference/command-line-interface"},{default:i(()=>[st]),_:1}),nt]),e("li",null,[s(o,{to:"/docs/reference/api/introduction/"},{default:i(()=>[lt]),_:1}),at]),e("li",null,[s(o,{to:"/docs/contributing/introduction/"},{default:i(()=>[dt]),_:1}),ct])]),rt,ut,ht,_t,gt,e("p",null,[ft,pt,mt,s(o,{to:"/docs/concepts/activity/#activity-fields"},{default:i(()=>[yt]),_:1}),vt]),bt,e("p",null,[wt,s(o,{to:"/docs/concepts/roles/#administrators-role"},{default:i(()=>[kt]),_:1}),Dt]),e("ul",null,[e("li",null,[s(o,{to:"/docs/guides/projects/#adjusting-project-settings"},{default:i(()=>[Tt]),_:1})]),e("li",null,[s(o,{to:"/docs/concepts/databases/#database-mirroring"},{default:i(()=>[It]),_:1})]),e("li",null,[s(o,{to:"/docs/concepts/roles"},{default:i(()=>[Ct]),_:1})]),e("li",null,[s(o,{to:"/docs/concepts/collections/#collection-presets-bookmarks"},{default:i(()=>[At]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/webhooks"},{default:i(()=>[jt]),_:1})])])])]),_:1})}}};export{St as default};
|
|
1
|
+
import{r as l,p as c,q as r,w as i,B as e,t as s,P as t}from"./vendor.a626ab9c.js";var u="assets/app-overview.9d9e9cee.svg";const h={class:"markdown-body"},_=e("blockquote",null,[e("p",null,"The Directus App is the presentation layer for your data, content, and assets. It uses a left-to-right visual hierarchy for organization and navigation. Below we cover the App\u2019s global elements and individual pages.")],-1),g=e("p",null,[t("The Directus App is decoupled from, and powered by, the Directus API. It provides a way for both technical admins and non-technical users to view and manage content of the connected database. It is written in "),e("a",{href:"https://vuejs.org",target:"_blank",rel:"noopener noreferrer"},"Vue.js"),t(", is completely modular, and is highly customizable.")],-1),f=e("h2",{id:"app-section-hierarchy"},[t("App Section Hierarchy "),e("a",{class:"header-anchor",href:"#app-section-hierarchy"},"#")],-1),p=e("p",null,[e("img",{src:u,alt:"Application Overview"})],-1),m=e("h3",{id:"1.-module-bar"},[t("1. Module Bar "),e("a",{class:"header-anchor",href:"#1.-module-bar"},"#")],-1),y=e("li",null,[e("strong",null,"Project Logo"),t(" \u2014 Displays your configured project logo and project color (defaults to the Directus logo and color). If configured, clicking this component will navigate to the Project URL. During platform activity, an indeterminate progress indicator will also be shown here.")],-1),v=e("strong",null,"Module Navigation",-1),b=t(" \u2014 Allows navigating between the different modules your user has access to. Customizing the Module Navigation is done within the "),w=t("Role\u2019s configuration"),k=t(", but the default module list includes: "),D=e("li",null,[e("a",{href:"#collections"},"Collections")],-1),T=e("li",null,[e("a",{href:"#user-directory"},"User Directory")],-1),I=e("li",null,[e("a",{href:"#file-library"},"File Library")],-1),C=e("li",null,[e("a",{href:"#documentation"},"Documentation")],-1),A=e("li",null,[e("a",{href:"#settings"},"Settings"),t(" (Admin Roles Only)")],-1),j=t("Any Custom Modules"),P=t(" (Only if Configured)"),x=e("li",null,[e("strong",null,"Current User Menu"),t(" \u2014 This component displays the authenticated user\u2019s name and avatar. "),e("ul",null,[e("li",null,"Sign Out \u2014 Hovering over the User Menu exposes the button to log out of the platform.")])],-1),U=e("h3",{id:"2.-navigation-bar"},[t("2. Navigation Bar "),e("a",{class:"header-anchor",href:"#2.-navigation-bar"},"#")],-1),F=e("strong",null,"Project Name",-1),S=t(" \u2014 Shows an icon and tooltip indicating the API\u2019s connection strength, and the name of your current project, which can be configured under "),L=t("Project Settings"),B=t("."),N=e("strong",null,"Navigation",-1),M=t(" \u2014 This is a dynamic navigation based on your current module. Some modules also support "),R=t("Bookmark Presets"),O=t(", which are a customizable links to specific data-sets."),z=e("h3",{id:"3.-page"},[t("3. Page "),e("a",{class:"header-anchor",href:"#3.-page"},"#")],-1),H=e("ul",null,[e("li",null,[e("strong",null,"Header"),t(" \u2014 A fixed section at the top of each page, the header includes: "),e("ul",null,[e("li",null,"Page Icon \u2014 Clicking this navigates back to the previous page."),e("li",null,"Module Name \u2014 Clicking this navigates to the parent module/section."),e("li",null,"Page Title \u2014 Displays dynamic title of the current page."),e("li",null,"Action Buttons \u2014 Right-aligned contextual buttons for specific page actions.")])]),e("li",null,[e("strong",null,"Page Content"),t(" \u2014 This displays the content of the page you navigated to.")])],-1),V=e("h3",{id:"4.-page-sidebar"},[t("4. Page Sidebar "),e("a",{class:"header-anchor",href:"#4.-page-sidebar"},"#")],-1),q=e("ul",null,[e("li",null,[e("strong",null,"Page Components"),t(" \u2014 Lists any contextual page components available. The \u201CInfo\u201D component is available on every page, explaining the page\u2019s general purpose and relevant details. Clicking any sidebar component will accordion it open. If the App window is large enough, the sidebar will automatically open, and can be closed by clicking the \u201CX\u201D in the top-right.")]),e("li",null,[e("strong",null,"Notifications Tray"),t(" \u2014 Fixed to the bottom of the page sidebar, this button opens a tray of recent user notifications, and provides a link to the "),e("a",{href:"#activity-log"},"Activity Log"),t(" page.")])],-1),G=e("h2",{id:"collections"},[t("Collections "),e("a",{class:"header-anchor",href:"#collections"},"#")],-1),W=e("p",null,"This module is the primary way for interacting with your database content. Here you can access your collections, browse their items, and navigate to individual item forms.",-1),E=e("h3",{id:"collection-listing"},[t("Collection Listing "),e("a",{class:"header-anchor",href:"#collection-listing"},"#")],-1),X=e("p",null,"A page that lists the collections available to the current user. This is the landing page of the module, and effectively the same as its navigation listing.",-1),J=e("h3",{id:"collection-detail"},[t("Collection Detail "),e("a",{class:"header-anchor",href:"#collection-detail"},"#")],-1),K=e("p",null,"This is the main gateway to your content items, providing a highly configurable Layout for browsing and visualizing the items within a collection. The header of this page includes key action buttons for creating, deleting, and batch editing items.",-1),Q=t("Adjusting a Collection Layout"),Y=t("Creating an Item"),Z=t("Updating an Item"),$=t("Deleting an Item"),ee=t("Archiving an Item"),te=t("Ordering Items"),ie=t("Exporting Items"),oe=t("Browsing Items "),se=t("Searching"),ne=t("Filtering"),le=t("Bookmarking"),ae=e("h3",{id:"item-detail"},[t("Item Detail "),e("a",{class:"header-anchor",href:"#item-detail"},"#")],-1),de=t("Most Collection Detail Layouts support navigating to individual item detail pages where you a presented with a "),ce=t("customizable form"),re=t(" for viewing/editing the item\u2019s content. Like other detail pages, there are many available features, including:"),ue=t("Adjusting Field Arrangement"),he=t("Updating an Item"),_e=t("Archiving an Item"),ge=t("Reverting an Item"),fe=t("Deleting an Item"),pe=t("Commenting on an Item"),me=e("h2",{id:"user-directory"},[t("User Directory "),e("a",{class:"header-anchor",href:"#user-directory"},"#")],-1),ye=e("p",null,[t("This module includes a comprehensive listing of all system users within your project. This page has the same features and configuration as "),e("a",{href:"#collection-detail"},"Collection Detail"),t(".")],-1),ve=e("h3",{id:"user-detail"},[t("User Detail "),e("a",{class:"header-anchor",href:"#user-detail"},"#")],-1),be=t("Similar to other "),we=e("a",{href:"#item-detail"},"Item Detail",-1),ke=t(" pages, this page provides a custom form for viewing system users. This is also used for editing the \u201CProfile Page\u201D of the current user, which is accessible from the "),De=e("a",{href:"#_1-module-bar"},"User Menu",-1),Te=t(". There are a number of "),Ie=t("User Fields"),Ce=t(" included out-of-the-box that can then be extended by following the normal "),Ae=t("Creating a Field"),je=t(" guide."),Pe=t("Creating a User"),xe=t("Inviting a User"),Ue=t("Configuring a User"),Fe=t("Archiving a User"),Se=t("Deleting a User"),Le=e("h2",{id:"file-library"},[t("File Library "),e("a",{class:"header-anchor",href:"#file-library"},"#")],-1),Be=e("p",null,[t("This module aggregates all files within the project into one consolidated library. This page has the same features and configuration as "),e("a",{href:"#collection-detail"},"Collection Detail"),t(".")],-1),Ne=e("h3",{id:"file-detail"},[t("File Detail "),e("a",{class:"header-anchor",href:"#file-detail"},"#")],-1),Me=t("Similar to other "),Re=e("a",{href:"#item-detail"},"Item Detail",-1),Oe=t(" pages, this page provides a custom form for viewing assets and embeds. There are a number of "),ze=t("File Fields"),He=t(" included out-of-the-box that can then be extended by following the normal "),Ve=t("Creating a Field"),qe=t(" guide."),Ge=t("Uploading a File"),We=t("Accessing an Original File"),Ee=t("Creating a Thumbnail Preset"),Xe=t("Requesting a Thumbnail"),Je=e("h2",{id:"documentation"},[t("Documentation "),e("a",{class:"header-anchor",href:"#documentation"},"#")],-1),Ke=t("This module is an internal set of guides, concepts, and reference docs for your project\u2019s specific version of Directus. It also includes a dynamic "),Qe=t("API Reference"),Ye=t(" that is dynamically tailored to your custom schema. The docs are organized into these distinct sections:"),Ze=t("Getting Started"),$e=t(" \u2014 Novice oriented, for a platform intro and installation."),et=t("Concepts"),tt=t(" \u2014 Learning oriented, for understanding the platform."),it=t("Guides"),ot=t(" \u2014 Problem oriented, follow along with steps while working."),st=t("Reference"),nt=t(" \u2014 Information oriented, look up info and specs while working."),lt=t("API Reference"),at=t(" \u2014 Information oriented, look up API resources while working."),dt=t("Contributing"),ct=t(" \u2014 Contributor oriented \u2014 resources for working on Open-Source Core."),rt=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Updating the Docs"),e("p",null,[t("Our docs are written in markdown (with some additional VuePress styling like this hint box), and available for editing/fixing via "),e("a",{href:"https://github.com/directus/directus",target:"_blank",rel:"noopener noreferrer"},"GitHub"),t(".")])],-1),ut=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Public Docs"),e("p",null,[t("The latest version of the Directus Docs are also available publicly. This online version includes additional sections, such as how to install the platform. "),e("a",{href:"https://docs.directus.io",target:"_blank",rel:"noopener noreferrer"},"https://docs.directus.io")])],-1),ht=e("h2",{id:"activity-log"},[t("Activity Log "),e("a",{class:"header-anchor",href:"#activity-log"},"#")],-1),_t=e("p",null,[t("This module provides a collective timeline of all actions taken within the project. This is a great way to audit user activity or enforce accountability. This is the only system module that is not in the module bar by default \u2014 instead being located within the notifications tray of the page sidebar. This page has the same features and configuration as "),e("a",{href:"#collection-detail"},"Collection Detail"),t(".")],-1),gt=e("h3",{id:"activity-detail"},[t("Activity Detail "),e("a",{class:"header-anchor",href:"#activity-detail"},"#")],-1),ft=t("Unlike other item detail pages, activity items are "),pt=e("strong",null,"readonly",-1),mt=t(" (for proper accountability) and open in a side drawer to display the "),yt=t("Activity Fields"),vt=t("."),bt=e("h2",{id:"settings"},[t("Settings "),e("a",{class:"header-anchor",href:"#settings"},"#")],-1),wt=t("This module is only available to users within "),kt=t("Admin roles"),Dt=t(". This is where your project is configured, and the first place to go after installation. It includes the following sections:"),Tt=t("Project Settings"),It=t("Data Model"),Ct=t("Roles & Permissions"),At=t("Presets & Bookmarks"),jt=t("Webhooks"),St={setup(Pt,{expose:a}){const n={title:"The Directus Application",modularExtension:!1};return a({frontmatter:n}),(xt,Ut)=>{const o=l("router-link"),d=l("DocsWrapper");return c(),r(d,{frontmatter:n},{default:i(()=>[e("div",h,[_,g,f,p,m,e("ul",null,[y,e("li",null,[v,b,s(o,{to:"/docs/guides/roles/#configuring-a-role"},{default:i(()=>[w]),_:1}),k,e("ul",null,[D,T,I,C,A,e("li",null,[s(o,{to:"/docs/concepts/modules/"},{default:i(()=>[j]),_:1}),P])])]),x]),U,e("ul",null,[e("li",null,[F,S,s(o,{to:"/docs/guides/projects/#adjusting-project-settings"},{default:i(()=>[L]),_:1}),B]),e("li",null,[N,M,s(o,{to:"/docs/guides/presets/#creating-a-preset"},{default:i(()=>[R]),_:1}),O])]),z,H,V,q,G,W,E,X,J,K,e("ul",null,[e("li",null,[s(o,{to:"/docs/guides/collections/#adjusting-a-collection-layout"},{default:i(()=>[Q]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#creating-an-item"},{default:i(()=>[Y]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#updating-an-item"},{default:i(()=>[Z]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#deleting-an-item"},{default:i(()=>[$]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#archiving-an-item"},{default:i(()=>[ee]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#ordering-items"},{default:i(()=>[te]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#exporting-items"},{default:i(()=>[ie]),_:1})]),e("li",null,[oe,e("ul",null,[e("li",null,[s(o,{to:"/docs/guides/items/#searching-items"},{default:i(()=>[se]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#filtering-items"},{default:i(()=>[ne]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#bookmarking-item-presets"},{default:i(()=>[le]),_:1})])])])]),ae,e("p",null,[de,s(o,{to:"/docs/guides/fields#adjusting-field-arrangement"},{default:i(()=>[ce]),_:1}),re]),e("ul",null,[e("li",null,[s(o,{to:"/docs/guides/fields/#adjusting-field-arrangement"},{default:i(()=>[ue]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#updating-an-item"},{default:i(()=>[he]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#archiving-an-item"},{default:i(()=>[_e]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#reverting-an-item"},{default:i(()=>[ge]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#deleting-an-item"},{default:i(()=>[fe]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/items/#commenting-on-an-item"},{default:i(()=>[pe]),_:1})])]),me,ye,ve,e("p",null,[be,we,ke,De,Te,s(o,{to:"/docs/concepts/users/#user-fields"},{default:i(()=>[Ie]),_:1}),Ce,s(o,{to:"/docs/guides/fields/#creating-a-field"},{default:i(()=>[Ae]),_:1}),je]),e("ul",null,[e("li",null,[s(o,{to:"/docs/guides/users/#creating-a-user"},{default:i(()=>[Pe]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/users/#inviting-a-user"},{default:i(()=>[xe]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/users/#configuring-a-user"},{default:i(()=>[Ue]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/users/#archiving-a-user"},{default:i(()=>[Fe]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/users/#deleting-a-user"},{default:i(()=>[Se]),_:1})])]),Le,Be,Ne,e("p",null,[Me,Re,Oe,s(o,{to:"/docs/concepts/files/#file-fields"},{default:i(()=>[ze]),_:1}),He,s(o,{to:"/docs/guides/fields/#creating-a-field"},{default:i(()=>[Ve]),_:1}),qe]),e("ul",null,[e("li",null,[s(o,{to:"/docs/guides/files/#uploading-a-file"},{default:i(()=>[Ge]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/files/#downloading-an-original-file"},{default:i(()=>[We]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/files/#creating-a-thumbnail-preset"},{default:i(()=>[Ee]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/files/#requesting-a-thumbnail"},{default:i(()=>[Xe]),_:1})])]),Je,e("p",null,[Ke,s(o,{to:"/docs/reference/api/introduction"},{default:i(()=>[Qe]),_:1}),Ye]),e("ul",null,[e("li",null,[s(o,{to:"/docs/getting-started/introduction/"},{default:i(()=>[Ze]),_:1}),$e]),e("li",null,[s(o,{to:"/docs/concepts/activity"},{default:i(()=>[et]),_:1}),tt]),e("li",null,[s(o,{to:"/docs/guides/api-config"},{default:i(()=>[it]),_:1}),ot]),e("li",null,[s(o,{to:"/docs/reference/command-line-interface"},{default:i(()=>[st]),_:1}),nt]),e("li",null,[s(o,{to:"/docs/reference/api/introduction/"},{default:i(()=>[lt]),_:1}),at]),e("li",null,[s(o,{to:"/docs/contributing/introduction/"},{default:i(()=>[dt]),_:1}),ct])]),rt,ut,ht,_t,gt,e("p",null,[ft,pt,mt,s(o,{to:"/docs/concepts/activity/#activity-fields"},{default:i(()=>[yt]),_:1}),vt]),bt,e("p",null,[wt,s(o,{to:"/docs/concepts/roles/#administrators-role"},{default:i(()=>[kt]),_:1}),Dt]),e("ul",null,[e("li",null,[s(o,{to:"/docs/guides/projects/#adjusting-project-settings"},{default:i(()=>[Tt]),_:1})]),e("li",null,[s(o,{to:"/docs/concepts/databases/#database-mirroring"},{default:i(()=>[It]),_:1})]),e("li",null,[s(o,{to:"/docs/concepts/roles"},{default:i(()=>[Ct]),_:1})]),e("li",null,[s(o,{to:"/docs/concepts/collections/#collection-presets-bookmarks"},{default:i(()=>[At]),_:1})]),e("li",null,[s(o,{to:"/docs/guides/webhooks"},{default:i(()=>[jt]),_:1})])])])]),_:1})}}};export{St as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{bE as p}from"./vendor.a626ab9c.js";function u(i,a){return a.forEach(function(n){Object.keys(n).forEach(function(t){if(t!=="default"&&!(t in i)){var e=Object.getOwnPropertyDescriptor(n,t);Object.defineProperty(i,t,e.get?e:{enumerable:!0,get:function(){return n[t]}})}})}),Object.freeze(i)}var f={exports:{}};(function(i,a){(function(n){n(p.exports)})(function(n){function t(e){var r=e.match(/^\s*\S/);return e.skipToEnd(),r?"error":null}n.defineMode("asciiarmor",function(){return{token:function(e,r){var o;if(r.state=="top")return e.sol()&&(o=e.match(/^-----BEGIN (.*)?-----\s*$/))?(r.state="headers",r.type=o[1],"tag"):t(e);if(r.state=="headers"){if(e.sol()&&e.match(/^\w+:/))return r.state="header","atom";var c=t(e);return c&&(r.state="body"),c}else{if(r.state=="header")return e.skipToEnd(),r.state="headers","string";if(r.state=="body")return e.sol()&&(o=e.match(/^-----END (.*)?-----\s*$/))?o[1]!=r.type?"error":(r.state="end","tag"):e.eatWhile(/[A-Za-z0-9+\/=]/)?null:(e.next(),"error");if(r.state=="end")return t(e)}},blankLine:function(e){e.state=="headers"&&(e.state="body")},startState:function(){return{state:"top",type:null}}}}),n.defineMIME("application/pgp","asciiarmor"),n.defineMIME("application/pgp-encrypted","asciiarmor"),n.defineMIME("application/pgp-keys","asciiarmor"),n.defineMIME("application/pgp-signature","asciiarmor")})})();var s=f.exports,d=Object.freeze(u({__proto__:null,[Symbol.toStringTag]:"Module",default:s},[f.exports]));export{d as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{bE as x}from"./vendor.a626ab9c.js";function v(a,f){return f.forEach(function(E){Object.keys(E).forEach(function(i){if(i!=="default"&&!(i in a)){var I=Object.getOwnPropertyDescriptor(E,i);Object.defineProperty(a,i,I.get?I:{enumerable:!0,get:function(){return E[i]}})}})}),Object.freeze(a)}var N={exports:{}};(function(a,f){(function(E){E(x.exports)})(function(E){E.defineMode("asn.1",function(I,o){var S=I.indentUnit,c=o.keywords||{},m=o.cmipVerbs||{},y=o.compareTypes||{},C=o.status||{},R=o.tags||{},g=o.storage||{},D=o.modifier||{},b=o.accessTypes||{},L=o.multiLineStrings,M=o.indentStatements!==!1,O=/[\|\^]/,u;function P(e,n){var t=e.next();if(t=='"'||t=="'")return n.tokenize=U(t),n.tokenize(e,n);if(/[\[\]\(\){}:=,;]/.test(t))return u=t,"punctuation";if(t=="-"&&e.eat("-"))return e.skipToEnd(),"comment";if(/\d/.test(t))return e.eatWhile(/[\w\.]/),"number";if(O.test(t))return e.eatWhile(O),"operator";e.eatWhile(/[\w\-]/);var r=e.current();return c.propertyIsEnumerable(r)?"keyword":m.propertyIsEnumerable(r)?"variable cmipVerbs":y.propertyIsEnumerable(r)?"atom compareTypes":C.propertyIsEnumerable(r)?"comment status":R.propertyIsEnumerable(r)?"variable-3 tags":g.propertyIsEnumerable(r)?"builtin storage":D.propertyIsEnumerable(r)?"string-2 modifier":b.propertyIsEnumerable(r)?"atom accessTypes":"variable"}function U(e){return function(n,t){for(var r=!1,s,d=!1;(s=n.next())!=null;){if(s==e&&!r){var T=n.peek();T&&(T=T.toLowerCase(),(T=="b"||T=="h"||T=="o")&&n.next()),d=!0;break}r=!r&&s=="\\"}return(d||!(r||L))&&(t.tokenize=null),"string"}}function A(e,n,t,r,s){this.indented=e,this.column=n,this.type=t,this.align=r,this.prev=s}function p(e,n,t){var r=e.indented;return e.context&&e.context.type=="statement"&&(r=e.context.indented),e.context=new A(r,n,t,null,e.context)}function l(e){var n=e.context.type;return(n==")"||n=="]"||n=="}")&&(e.indented=e.context.indented),e.context=e.context.prev}return{startState:function(e){return{tokenize:null,context:new A((e||0)-S,0,"top",!1),indented:0,startOfLine:!0}},token:function(e,n){var t=n.context;if(e.sol()&&(t.align==null&&(t.align=!1),n.indented=e.indentation(),n.startOfLine=!0),e.eatSpace())return null;u=null;var r=(n.tokenize||P)(e,n);if(r=="comment")return r;if(t.align==null&&(t.align=!0),(u==";"||u==":"||u==",")&&t.type=="statement")l(n);else if(u=="{")p(n,e.column(),"}");else if(u=="[")p(n,e.column(),"]");else if(u=="(")p(n,e.column(),")");else if(u=="}"){for(;t.type=="statement";)t=l(n);for(t.type=="}"&&(t=l(n));t.type=="statement";)t=l(n)}else u==t.type?l(n):M&&((t.type=="}"||t.type=="top")&&u!=";"||t.type=="statement"&&u=="newstatement")&&p(n,e.column(),"statement");return n.startOfLine=!1,r},electricChars:"{}",lineComment:"--",fold:"brace"}});function i(I){for(var o={},S=I.split(" "),c=0;c<S.length;++c)o[S[c]]=!0;return o}E.defineMIME("text/x-ttcn-asn",{name:"asn.1",keywords:i("DEFINITIONS OBJECTS IF DERIVED INFORMATION ACTION REPLY ANY NAMED CHARACTERIZED BEHAVIOUR REGISTERED WITH AS IDENTIFIED CONSTRAINED BY PRESENT BEGIN IMPORTS FROM UNITS SYNTAX MIN-ACCESS MAX-ACCESS MINACCESS MAXACCESS REVISION STATUS DESCRIPTION SEQUENCE SET COMPONENTS OF CHOICE DistinguishedName ENUMERATED SIZE MODULE END INDEX AUGMENTS EXTENSIBILITY IMPLIED EXPORTS"),cmipVerbs:i("ACTIONS ADD GET NOTIFICATIONS REPLACE REMOVE"),compareTypes:i("OPTIONAL DEFAULT MANAGED MODULE-TYPE MODULE_IDENTITY MODULE-COMPLIANCE OBJECT-TYPE OBJECT-IDENTITY OBJECT-COMPLIANCE MODE CONFIRMED CONDITIONAL SUBORDINATE SUPERIOR CLASS TRUE FALSE NULL TEXTUAL-CONVENTION"),status:i("current deprecated mandatory obsolete"),tags:i("APPLICATION AUTOMATIC EXPLICIT IMPLICIT PRIVATE TAGS UNIVERSAL"),storage:i("BOOLEAN INTEGER OBJECT IDENTIFIER BIT OCTET STRING UTCTime InterfaceIndex IANAifType CMIP-Attribute REAL PACKAGE PACKAGES IpAddress PhysAddress NetworkAddress BITS BMPString TimeStamp TimeTicks TruthValue RowStatus DisplayString GeneralString GraphicString IA5String NumericString PrintableString SnmpAdminString TeletexString UTF8String VideotexString VisibleString StringStore ISO646String T61String UniversalString Unsigned32 Integer32 Gauge Gauge32 Counter Counter32 Counter64"),modifier:i("ATTRIBUTE ATTRIBUTES MANDATORY-GROUP MANDATORY-GROUPS GROUP GROUPS ELEMENTS EQUALITY ORDERING SUBSTRINGS DEFINED"),accessTypes:i("not-accessible accessible-for-notify read-only read-create read-write"),multiLineStrings:!0})})})();var h=N.exports,w=Object.freeze(v({__proto__:null,[Symbol.toStringTag]:"Module",default:h},[N.exports]));export{w as a};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as a,p as d,q as h,w as t,B as e,t as o,P as l}from"./vendor.
|
|
1
|
+
import{r as a,p as d,q as h,w as t,B as e,t as o,P as l}from"./vendor.a626ab9c.js";var u="assets/original.888775a8.jpg",i="assets/200-200-cover-75.5e0d9ff8.jpg",A="assets/200-200-contain-75.c99b890d.jpg",p="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gMjUK/9sAQwAgFhgcGBQgHBocJCIgJjBQNDAsLDBiRko6UHRmenhyZnBugJC4nICIropucKDaoq6+xM7Qznya4vLgyPC4ys7G/9sAQwEiJCQwKjBeNDRexoRwhMbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbG/8AAEQgAyADIAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A0LcqD6Gro6VmrnPFW458qM9abQkyc02jO4ZFJUlhgZzUUtSn2qKXGOaBMh2jOTTiw2Y9qgLfNQzDtVWIuRkc0lONJVEiUlLRTEJikp5pMUANxSVJt7d6aRQA2ilxRigQ2inYpMUAJSU7FFMBtFOpKAEopaKALhBjbBHNPhJL+1WWRX+8AaiaILyv5Gs7mtrE4XHSlxQoGKWpKGkYqJxmpzzUbCgCnLHg5H5VFjirrIDyRVWRSDntVJkNEdAGTgUU5MlgBVEiMhUZI4ptW5dvl7fSqtCdxtWEooopki55pppaKAG0U6koEJSU6igBtFLijFACYoxS4ooASilooA16aRTlYMKWsjoFAwKDRSE0CDNNNBNMZ8UDEY1A9Sbwajcg00SyErzxQp29OtP6Uxh3FUQDMWPJpBRRTEJRRRQIKSlopgJRS4pQMmgBtFOK4NJQAlJTqMUCG0Yp2KMUANxRTsUUAXoJI5E3IfzqZTkViW8/lN/s9xWtDKrqCvINZtGydyamk04mo2akUITUZ54NSdRUT8dKBMiOUagmhjmkqyA4ppFLiigQ3FL5bbc7TilAPUVZDErt9qGwSuU6KeVIpMUxCAU7yzt3DpSU4OQuBSBWI6WiimICc0lLRQAmKMUtFACYoxS4pcUANxRTsUUAUZBtkIqWC4aBvVe4quzc0uRsHrUlmmmoqz7WXaOxq2Vyc54rAzViO6ZlwSR9DxSsUmbHAXORj1qJyrZwQaox3B2bQ3B5xTUkZHyOfaiwXLe3JpMUqkOoYd6OvSmSNxSYp+KTFMQgyOaUMaNtLnjFAxdpYE1ERUu84xTDyaEDG0lOxRTJG0U6koAKKKWgBKKWigBKKWigBMUUtFAGW/LZxTR29Km2jfjsAT+lQ+oxUljjgE46UYOKaDTs8+1AhFYoQQeRVlJA4HrVZwRSxOYnDkZx2oAvRM65A4yOAaSF2Q9MnPSojOsr7lyvtVpAq4YsM/Wk2UkOeUrnjoM00TKZVAPynj8ahkDOxxwM4yTQ3CyEchBx/WgLFs4HU4prsE69Ko+Zuk9FHIzT2YvkAnNMRbVg6hl6GlxVWN/Jk55U8H/GrZxQIbRTsUmKYCUYpcUYoEJiilxRigBMUYp2KKAG4oxTqKBiYopaKAM9FUIxLckbRVfYwBJUinK+Rk5xT5WzgY4A71FyiELg5zinHGcdKXOFHHPf2phY7sn8qLiBiTkDtTDuzilCFsnOKBkspxwadwHRjoc45ofcPoadgjqfypGbIA65qbjGrM69CcelSpOxUqw4PX3qIEBjgcUb+Oe5zTAkknPGMAcYAoFw+7rUW70FICwA4wcUATmZpD89WDINqiJjuz1NUyW4pN4JxyaLga6zIyklgMHB5pd6f31/OshWzkZI5o5weaLisbAIboQfpS1jbip4Y1btr7HyTZ9mp3Av0UKQwBBBB7ilAphYSneW2M4qQIAOeTTugpXHykIQmgISakDc4FNYnpRcdkMK4opwxjpRRcVjnlkymSOlDT56dqRGzke2KQR5jyRyTmpAeXByc54p4IK5JwMcVXyoXAHUcmkBO0AnjHFAFkMO3SkDbmwOlROxDYUcAZpxYhxjsAcUASHjOT9BQByCR1prPjGcc0pcYBHPA/CkMZ820r6cUrjsOmMCnSMAAQMHOaMAKpxRcBFICq34UOwPUd6MALgCkwc9enH5UAG4FQTnB6UmDuJHGKQjhQ3UU5gScA9qYChRkEDilyMjABph56elIcjJP8QpAPU8gcjnrSHBbOTk0xshguT1xTkU7Tu6mmIsWty8BwDuTuM1qRzo+NrDPp3rCkfbg44p6EA9SGHNFwOgWRT0I+tNaQKeeawvOYAhWIPGBn86kW5kC7txOBjnkUXGa3nkdABTt24ZzzWP9vZhgAZ+lWIr4DBaPqfWndCVzQyQM4/Xmiq638bDjCH0xRQMxkKq7EdOgqRGBjJI6YFQ7gSAvc5Oadk7No6FqlgG3L8f3RUYyzKnvipJGIkJHTpTEByCO1MRJKP3nHQL0oRgpz60qrmcrn7uaHj2lmzwOlLyGLIvysT046/SoQS3Q8k9KlyXjQdc9fyqJWAk3f7VCAXJUhm7npUgYbVyeo6UrRbvm9F/WmFCzjb0Uc0XuAeYS5x609jgMT2NV1VtpI6ZxUu4DIfnJ6UxCspDjHIIwPypyAhSzdcU1CWdTjp/KnqegI5HX6UhiM2FKfSmqS0RB7GjO5m45xmnEbUHp3oAARnc3UmmOxL7RTeWGf8Aap6LukY4pgNBLbUPXGP1pWXBJz7U91AlAAxio3yWwPYUk7gOHKkjrgU4ECEAHk4oki8sAIxbd2A6UjR91zxyBQA2MhegHQ0EsYyOmG4pUhkAJCN6jipUtpSg3Dbz1JougIj9/d0C4oq3FaEAl2BzzxRU8yHZmbGTuAxntTwwL43YwTTEfDDik75960JJGO4Oc8A0sOWkGM46mog55A70IzZwDgUWAtIQLjd6CluCNxA7iq25ggYnrxTpGykeT25qbajJAwUhR6dfwphQfuwO/WmM/I+lPi+YgnpnFFrATlj5bDvxUYfEQI6g4qOZ/mwKYTlce9CQExIG0AVGeThuvrTTlWA645pM9SaYizHt2sAedtRmT94TUI9c4qXy93cdKLALE2dxPHHFPVxsIPp61GIHABzgHp71IyhJAFA44NDGSOAq8AU+LJfAA6E1ERukOWwvcVaj2IpAz0wTWbegyAjdMAW47kCrcdvEpJAz7tVNwNxJ4HUHvV+NlMQOAyY9aTuNCuoCE4Cgjg1Xt5D8yselSXD7l4HFUN5WXv8AQUJXQM00GV2+pyKRyFXJ6f1psblgCT1PQdqc7DHOPqagY0scjJ9yaKr3E3YcD1oqlG4rmYCAORTwv7sv2BxTQAxAAOTVuWMLAq9yea2bsQVkA3Z9BmpII8o7n04onAjkdfWnI48pV9etJsZCTtBU8UgI3DpSuC0jY6ZpNgHXiqECqSeo6U7dtTHvmmgcdeDSdiBmgBCxJyaVeSBRtJGaWIZf6UAOkOHOPTFNfjA9qWTJOcdaWVDuHIHFIY0HhR71LE2cjuBxTAjsxxjFSRoRG/qaGwQqzMBgNn60u/d179hTccDJyRxUsUYzknqaljERR945z6GnxyKCVPU0IOeaYh2St796ncAn+/jJ4FTQzhIthGQOMVC480YPbv60vAXHanbSwD3lBY4OPaq0hO8EHn2qVGUPhOvXk8VGT+9BY5+lNKwMfFN/ePI4FAZ53Vc/L270Rxs7kgde5NWhG0BUY4K5zSbSAZIqq2fTjFFRurPkBhmikvMCG2VN5IHb16VJOemD9KICm1iBz0qNxhsPnAHGBVdRAxVskjk0jMAgC4BPWoyC33aMEDnH4VVgHADBbcDxUZODxxSquQSTilIXqQaYgEnYipP3bg/Kc+uaaioDyefSnNt44/WkMQBR8oxn61IgXb8vGaXaiIzBSGx3FSRRIE3SPle3BqWxlRz8/POKkO6Q5Cd++BVwSwxH5IxjjnHNSi8TAUZKnv6UubyCxRYOHVcDHsabkgYJrU8uN23DBPrTfs0YO7afwpcw7FBIGfLdutKcRgZOMc1ZuGAHlhueuPWqcqnAUn3I9KL3AnIA3Y7jNV5M7l249cipY2zD7ioWLN6D26ULcQ8kL2x0qNG/en8uacW+Ugg0gAYfL34FUAmVJww4oGXbCLu5qVIEZxnOB2q2sW04jQDHOaTkkFhV3FRkAEdcdBUrtgBRzzxnnFMDLtxwe31pHAIwTgD3rMoglYI+OfXiimzYdkIbIaiq06iK8JAC5B5POKWbJO4DjvRRWnUkh5XI9aGJ6d+uKKKYBuHQ9BTgyjP580UU7CEGDncRntT4jiRSRkDtRRSYyeSYzptyqjPpTjbzTZAbco5DZJooqHoUtSvJF5Z2tJlvbtTrcQlyXLHHOO1FFV0JNJOVGF2jsKeGwOaKKwLGzH5Csce5j1PaqNxGzN82CQMAgY/OiiqTEMiOImAxnvg1G6ngqp9etFFXsxCIW53d6kQOw+UZJ/SiimwRdigMKbmOXbnPpTiPkJBwT1460UVk9yhmAEBKEsajlPJGCuR1FFFNAREbQG/hoooq7Af/2Q==",g="assets/200-200-cover-50.b5c757be.jpg",m="assets/200-200-cover-100.6a119754.jpg";const f={class:"markdown-body"},b=e("blockquote",null,[e("p",null,[l("The "),e("code",null,"/assets"),l(" endpoint can be used to stream or retrieve the actual file contents from assets managed within Directus.")])],-1),U=e("ul",null,[e("li",null,[e("a",{href:"#accessing-an-original-file"},"Accessing an Original File")]),e("li",null,[e("a",{href:"#requesting-a-thumbnail"},"Requesting a Thumbnail")]),e("li",null,[e("a",{href:"#downloading-a-file"},"Downloading a File")])],-1),w={class:"tip hint"},y=e("div",{class:"hint-title"},"Uploading Files",-1),x=l("To learn more about uploading files, see the "),B=l("Upload a File"),T=l(" and "),R=l("Import a File"),q=l(" endpoints."),k=e("h2",{id:"accessing-an-original-file"},[l("Accessing an Original File "),e("a",{class:"header-anchor",href:"#accessing-an-original-file"},"#")],-1),j=e("p",null,"The location of your actual file originals is based on the project\u2019s configuration, but you can consistently access them via the API using the following URL.",-1),_=e("pre",null,[e("code",null,`example.com/assets/<file-id>
|
|
2
2
|
example.com/assets/1ac73658-8b62-4dea-b6da-529fbc9d01a4
|
|
3
3
|
`)],-1),Q=e("p",null,[e("img",{src:u,alt:"Original File"}),l(),e("em",null,"Original File Used \u2014 602KB and 1800x1200")],-1),I=e("div",{class:"warning hint"},[e("div",{class:"hint-title"},"Direct File Access"),e("p",null,[l("While you may "),e("em",null,"technically"),l(" be able to expose your storage adapters root filesystem and access your raw files through there, it is recommended that you always use the Directus API. This is the only way that you can take advantage of file permissions and other built-in features.")])],-1),O=e("h2",{id:"requesting-a-thumbnail"},[l("Requesting a Thumbnail "),e("a",{class:"header-anchor",href:"#requesting-a-thumbnail"},"#")],-1),C=e("p",null,[l("Fetching thumbnails is as easy as adding a "),e("code",null,"key"),l(" query parameter to the original file\u2019s URL. In the Admin App, you can configure different asset presets that control the output of any given image. If a requested thumbnail doesn\u2019t yet exist, it is dynamically generated and immediately returned.")],-1),G=e("strong",null,[e("code",null,"key")],-1),F=l(" \u2014 This "),D=e("strong",null,"key",-1),K=l(" of the "),v=l("Storage Asset Preset"),E=l(", a shortcut for the below parameters"),S=e("p",null,"Alternatively, if you have \u201CStorage Asset Transform\u201D set to all, you can use the following parameters for more fine grained control:",-1),Y=e("ul",null,[e("li",null,[e("strong",null,[e("code",null,"fit")]),l(" \u2014 The "),e("strong",null,"fit"),l(" of the thumbnail while always preserving the aspect ratio, can be any of the following options: "),e("ul",null,[e("li",null,[e("code",null,"cover"),l(" \u2014 Covers both width/height by cropping/clipping to fit")]),e("li",null,[e("code",null,"contain"),l(" \u2014 Contain within both width/height using \u201Cletterboxing\u201D as needed")]),e("li",null,[e("code",null,"inside"),l(" \u2014 Resize to be as large as possible, ensuring dimensions are less than or equal to the requested width and height")]),e("li",null,[e("code",null,"outside"),l(" \u2014 Resize to be as small as possible, ensuring dimensions are greater than or equal to the requested width and height")])])]),e("li",null,[e("strong",null,[e("code",null,"width")]),l(" \u2014 The "),e("strong",null,"width"),l(" of the thumbnail in pixels")]),e("li",null,[e("strong",null,[e("code",null,"height")]),l(" \u2014 The "),e("strong",null,"height"),l(" of the thumbnail in pixels")]),e("li",null,[e("strong",null,[e("code",null,"quality")]),l(" \u2014 The "),e("strong",null,"quality"),l(" of the thumbnail ("),e("code",null,"1"),l(" to "),e("code",null,"100"),l(") is "),e("code",null,"Optional")]),e("li",null,[e("strong",null,[e("code",null,"withoutEnlargement")]),l(" \u2014 Disable image up-scaling")]),e("li",null,[e("strong",null,[e("code",null,"format")]),l(" \u2014 What file format to return the thumbnail in. One of "),e("code",null,"jpg"),l(", "),e("code",null,"png"),l(", "),e("code",null,"webp"),l(", "),e("code",null,"tiff")])],-1),J=e("pre",null,[e("code",null,`example.com/assets/<file-id>?fit=<fit>&width=<width>&height=<height>&quality=<quality>
|
|
4
4
|
example.com/assets/1ac73658-8b62-4dea-b6da-529fbc9d01a4?fit=cover&width=200&height=200&quality=80
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{bE as p}from"./vendor.a626ab9c.js";function f(o,l){return l.forEach(function(t){Object.keys(t).forEach(function(r){if(r!=="default"&&!(r in o)){var c=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(o,r,c.get?c:{enumerable:!0,get:function(){return t[r]}})}})}),Object.freeze(o)}var s={exports:{}};(function(o,l){(function(t){t(p.exports)})(function(t){t.defineMode("asterisk",function(){var r=["exten","same","include","ignorepat","switch"],c=["#include","#exec"],u=["addqueuemember","adsiprog","aelsub","agentlogin","agentmonitoroutgoing","agi","alarmreceiver","amd","answer","authenticate","background","backgrounddetect","bridge","busy","callcompletioncancel","callcompletionrequest","celgenuserevent","changemonitor","chanisavail","channelredirect","chanspy","clearhash","confbridge","congestion","continuewhile","controlplayback","dahdiacceptr2call","dahdibarge","dahdiras","dahdiscan","dahdisendcallreroutingfacility","dahdisendkeypadfacility","datetime","dbdel","dbdeltree","deadagi","dial","dictate","directory","disa","dumpchan","eagi","echo","endwhile","exec","execif","execiftime","exitwhile","extenspy","externalivr","festival","flash","followme","forkcdr","getcpeid","gosub","gosubif","goto","gotoif","gotoiftime","hangup","iax2provision","ices","importvar","incomplete","ivrdemo","jabberjoin","jabberleave","jabbersend","jabbersendgroup","jabberstatus","jack","log","macro","macroexclusive","macroexit","macroif","mailboxexists","meetme","meetmeadmin","meetmechanneladmin","meetmecount","milliwatt","minivmaccmess","minivmdelete","minivmgreet","minivmmwi","minivmnotify","minivmrecord","mixmonitor","monitor","morsecode","mp3player","mset","musiconhold","nbscat","nocdr","noop","odbc","odbc","odbcfinish","originate","ospauth","ospfinish","osplookup","ospnext","page","park","parkandannounce","parkedcall","pausemonitor","pausequeuemember","pickup","pickupchan","playback","playtones","privacymanager","proceeding","progress","queue","queuelog","raiseexception","read","readexten","readfile","receivefax","receivefax","receivefax","record","removequeuemember","resetcdr","retrydial","return","ringing","sayalpha","saycountedadj","saycountednoun","saycountpl","saydigits","saynumber","sayphonetic","sayunixtime","senddtmf","sendfax","sendfax","sendfax","sendimage","sendtext","sendurl","set","setamaflags","setcallerpres","setmusiconhold","sipaddheader","sipdtmfmode","sipremoveheader","skel","slastation","slatrunk","sms","softhangup","speechactivategrammar","speechbackground","speechcreate","speechdeactivategrammar","speechdestroy","speechloadgrammar","speechprocessingsound","speechstart","speechunloadgrammar","stackpop","startmusiconhold","stopmixmonitor","stopmonitor","stopmusiconhold","stopplaytones","system","testclient","testserver","transfer","tryexec","trysystem","unpausemonitor","unpausequeuemember","userevent","verbose","vmauthenticate","vmsayname","voicemail","voicemailmain","wait","waitexten","waitfornoise","waitforring","waitforsilence","waitmusiconhold","waituntil","while","zapateller"];function d(e,n){var i="",a=e.next();if(n.blockComment)return a=="-"&&e.match("-;",!0)?n.blockComment=!1:e.skipTo("--;")?(e.next(),e.next(),e.next(),n.blockComment=!1):e.skipToEnd(),"comment";if(a==";")return e.match("--",!0)&&!e.match("-",!1)?(n.blockComment=!0,"comment"):(e.skipToEnd(),"comment");if(a=="[")return e.skipTo("]"),e.eat("]"),"header";if(a=='"')return e.skipTo('"'),"string";if(a=="'")return e.skipTo("'"),"string-2";if(a=="#"&&(e.eatWhile(/\w/),i=e.current(),c.indexOf(i)!==-1))return e.skipToEnd(),"strong";if(a=="$"){var m=e.peek();if(m=="{")return e.skipTo("}"),e.eat("}"),"variable-3"}if(e.eatWhile(/\w/),i=e.current(),r.indexOf(i)!==-1){switch(n.extenStart=!0,i){case"same":n.extenSame=!0;break;case"include":case"switch":case"ignorepat":n.extenInclude=!0;break}return"atom"}}return{startState:function(){return{blockComment:!1,extenStart:!1,extenSame:!1,extenInclude:!1,extenExten:!1,extenPriority:!1,extenApplication:!1}},token:function(e,n){var i="";if(e.eatSpace())return null;if(n.extenStart)return e.eatWhile(/[^\s]/),i=e.current(),/^=>?$/.test(i)?(n.extenExten=!0,n.extenStart=!1,"strong"):(n.extenStart=!1,e.skipToEnd(),"error");if(n.extenExten)return n.extenExten=!1,n.extenPriority=!0,e.eatWhile(/[^,]/),n.extenInclude&&(e.skipToEnd(),n.extenPriority=!1,n.extenInclude=!1),n.extenSame&&(n.extenPriority=!1,n.extenSame=!1,n.extenApplication=!0),"tag";if(n.extenPriority)return n.extenPriority=!1,n.extenApplication=!0,e.next(),n.extenSame?null:(e.eatWhile(/[^,]/),"number");if(n.extenApplication){if(e.eatWhile(/,/),i=e.current(),i===",")return null;if(e.eatWhile(/\w/),i=e.current().toLowerCase(),n.extenApplication=!1,u.indexOf(i)!==-1)return"def strong"}else return d(e,n);return null},blockCommentStart:";--",blockCommentEnd:"--;",lineComment:";"}}),t.defineMIME("text/x-asterisk","asterisk")})})();var x=s.exports,g=Object.freeze(f({__proto__:null,[Symbol.toStringTag]:"Module",default:x},[s.exports]));export{g as a};
|