nuxt-studio 1.0.0-alpha.0 → 1.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +11 -9
  2. package/dist/app/en-CeGQDKH5.js +7 -0
  3. package/dist/app/en-D0jd_r21.js +7 -0
  4. package/dist/app/en-XbfkDcMn.js +7 -0
  5. package/dist/app/fr-CbcFrmHX.js +7 -0
  6. package/dist/app/fr-Ct4HO5e1.js +7 -0
  7. package/dist/app/fr-ILHmVnG9.js +7 -0
  8. package/dist/app/main.d.ts +83 -33
  9. package/dist/app/main.js +34187 -30512
  10. package/dist/app/service-worker.js +29 -5
  11. package/dist/app/shared-B6H2zqDG.js +8 -0
  12. package/dist/app/{shared-D04791PA.js → shared-DLETHbvn.js} +2311 -2307
  13. package/dist/app/{shared-DI6F-ifc.js → shared-Dvm_mWyG.js} +3120 -3132
  14. package/dist/app/shared.d.ts +1 -20
  15. package/dist/app/shared.js +2 -4
  16. package/dist/module/module.d.mts +70 -27
  17. package/dist/module/module.json +1 -1
  18. package/dist/module/module.mjs +101 -58
  19. package/dist/module/runtime/host.dev.js +19 -12
  20. package/dist/module/runtime/host.js +124 -61
  21. package/dist/module/runtime/plugins/studio.client.js +1 -1
  22. package/dist/module/runtime/server/routes/admin.js +11 -2
  23. package/dist/module/runtime/server/routes/auth/github.get.d.ts +4 -4
  24. package/dist/module/runtime/server/routes/auth/github.get.js +17 -9
  25. package/dist/module/runtime/server/routes/auth/gitlab.get.d.ts +55 -0
  26. package/dist/module/runtime/server/routes/auth/gitlab.get.js +157 -0
  27. package/dist/module/runtime/server/routes/auth/session.delete.js +2 -1
  28. package/dist/module/runtime/server/routes/auth/session.get.js +4 -1
  29. package/dist/module/runtime/server/routes/dev/content/[...path].js +0 -11
  30. package/dist/module/runtime/server/routes/dev/public/[...path].d.ts +1 -0
  31. package/dist/module/runtime/server/routes/dev/public/[...path].js +2 -0
  32. package/dist/module/runtime/types/content.d.ts +6 -0
  33. package/dist/module/runtime/types/content.js +7 -0
  34. package/dist/module/runtime/utils/activation.js +16 -5
  35. package/dist/module/runtime/utils/collection.d.ts +10 -17
  36. package/dist/module/runtime/utils/collection.js +32 -92
  37. package/dist/module/runtime/utils/document.d.ts +15 -0
  38. package/dist/module/runtime/utils/document.js +288 -0
  39. package/dist/module/runtime/utils/media.d.ts +1 -0
  40. package/dist/module/runtime/utils/media.js +5 -0
  41. package/dist/module/runtime/utils/object.d.ts +4 -0
  42. package/dist/module/runtime/utils/object.js +27 -0
  43. package/dist/module/runtime/utils/source.d.ts +11 -0
  44. package/dist/module/runtime/utils/source.js +36 -0
  45. package/license.md +9 -0
  46. package/package.json +7 -6
  47. package/dist/app/shared-R5zYJ3Dl.js +0 -25803
  48. package/dist/app/utils-DI6F-ifc.js +0 -25774
  49. package/dist/app/utils.d.ts +0 -22
  50. package/dist/app/utils.js +0 -6
package/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # Nuxt Studio
2
2
 
3
- [![npm version](https://img.shields.io/npm/v/nuxt-studio.svg?style=flat&colorA=020420&colorB=EEEEEE)](https://npmjs.com/package/nuxt-studio)
3
+ [![npm version](https://img.shields.io/npm/v/nuxt-studio/alpha.svg?style=flat&colorA=020420&colorB=EEEEEE)](https://npmjs.com/package/nuxt-studio)
4
4
  [![npm downloads](https://img.shields.io/npm/dm/nuxt-studio.svg?style=flat&colorA=020420&colorB=EEEEEE)](https://npm.chart.dev/nuxt-studio)
5
5
  [![License](https://img.shields.io/npm/l/nuxt-studio.svg?style=flat&colorA=020420&colorB=EEEEEE)](https://npmjs.com/package/nuxt-studio)
6
6
 
7
7
  ---
8
8
 
9
- ## ⚠️ Alpha Release
9
+ ## ⚠️ Alpha Version
10
10
 
11
11
  > **Current Status: Alpha Testing**
12
12
  >
@@ -17,13 +17,14 @@
17
17
  > - ✅ Media management and uploads
18
18
  > - ✅ GitHub authentication and publishing workflow
19
19
  >
20
- > **🎨 Visual Editor Coming Soon**
21
20
  >
22
21
  > Once all file operations and GitHub publishing workflows are tested and stable, we'll release **Phase 2 (Beta)** with the full visual editor for Markdown, Vue components, and medias...
22
+ >
23
+ > Read the [announcement blog post](https://content.nuxt.com/blog/studio-module-alpha) for more details.
23
24
 
24
25
  ---
25
26
 
26
- > Visual edition in production for your [Nuxt Content](https://content.nuxt.com) website.
27
+ Visual edition in production for your [Nuxt Content](https://content.nuxt.com) website.
27
28
 
28
29
  Originally offered as a standalone premium platform at https://nuxt.studio, Studio has evolved into a free, open-source, and self-hostable Nuxt module. Enable your entire team to edit website content right in production.
29
30
 
@@ -47,8 +48,9 @@ Originally offered as a standalone premium platform at https://nuxt.studio, Stud
47
48
  - 🤖 **AI Content Assistant** — Receive smart, AI-powered suggestions to enhance your content creation flow
48
49
  - 💡 **Community-driven Features** — Have an idea? [Share your suggestions](https://github.com/nuxt-content/studio/discussions) to shape the future of Nuxt Studio
49
50
 
50
- [📖 Documentation](https://content.nuxt.com/studio)
51
- [🎮 Live Demo](https://docus.dev/admin)
51
+ ### Resources
52
+ - [📖 Documentation](https://content.nuxt.com/docs/studio/setup)
53
+ - [🎮 Live Demo](https://docus.dev/admin)
52
54
 
53
55
  ## Quick Setup
54
56
 
@@ -59,7 +61,7 @@ Originally offered as a standalone premium platform at https://nuxt.studio, Stud
59
61
  Install the module in your Nuxt application with one command:
60
62
 
61
63
  ```bash
62
- npx nuxi module add nuxt-studio
64
+ npx nuxi module add nuxt-studio@alpha
63
65
  ```
64
66
 
65
67
  Add it to your `nuxt.config` and configure your repository.
@@ -230,8 +232,8 @@ pnpm lint
230
232
  ## Links
231
233
 
232
234
  - 📖 [Documentation](https://content.nuxt.com/studio)
233
- - 🐛 [Report a Bug](https://github.com/nuxt-content/studio/issues)
234
- - 💡 [Feature Request](https://github.com/nuxt-content/studio/discussions)
235
+ - 🐛 [Report a Bug](https://github.com/nuxt-content/studio/issues/new)
236
+ - 💡 [Feature Request](https://github.com/nuxt-content/studio/issues/new)
235
237
  - 🗨️ [Discussions](https://github.com/nuxt-content/studio/discussions)
236
238
  - 🆇 [Twitter](https://x.com/nuxtstudio)
237
239
  - 🦋 [Bluesky](https://bsky.app/profile/nuxt.com)
@@ -0,0 +1,7 @@
1
+ const e = { buttons: { edit: "Edit this page", retryPublish: "Retry Publish", reloadApp: "Reload application", reload: "Reload", signOut: "Sign out", review: "Review", publish: "Publish", back: "Back" }, headings: { directories: "Directories", files: "Files", media: "Media" }, tooltips: { toggleStudio: "Toggle Studio", unlinkEditor: "Unlink editor and preview", linkEditor: "Link editor and preview", copiedToClipboard: "Copied to clipboard", copyToClipboard: "Copy to clipboard", publishChanges: "Publish changes", backToContent: "Back to content" }, notifications: { error: { unknown: "An unknown error occurred" } }, publish: { failedTitle: "Publish Failed", summary: "on {branch} of {repo} repository", errorTitle: "Error during {providerName} publish", failedGeneric: "Failed to publish changes" }, review: { title: "Review changes", created: "Created", updated: "Updated", deleted: "Deleted" }, publishSuccess: { title: "Changes Published", summary: "{count} change published on {branch} of {repo} repository | {count} changes published on {branch} of {repo} repository", alertTitleWaiting: "Waiting for deployment...", alertTitleComplete: "Deployment complete", alertDescWaiting: "The website needs to be deployed for changes to be visible in Studio.", alertDescComplete: "A new version of your website has been deployed. Please refresh your app to see changes in Studio." }, newVersionBanner: { title: "New website version detected", description: "A new version of your website has been deployed. Reload the app to see the latest changes.", reloadButton: "Reload" }, footer: { developer_view: "Developer view" }, alert: { mdcFormatting: "Formatting applied to align with MDC syntax standard." }, conflict: { title: "Conflict Detected", repository: "Repository", branch: "Branch", file: "File", description: "The content on {providerName} differs from your website version. Ensure your latest changes are deployed and refresh the page.", websiteVersion: "Website" }, nav: { content: "Content", media: "Media" }, placeholders: { commitMessage: "Commit message", order: "N°", fileName: "File name" }, validation: { commitRequired: "Commit message is required", nameEmpty: "Name cannot be empty", nameEndsWithDot: "Name cannot end with '.'", nameStartsWithSlash: "Name cannot start with '/'", nameExists: "Name already exists" }, media: { altFilePreview: "File preview", altImagePreview: "Image preview", playAudio: "Play Audio", audioTagNotSupported: "Your browser does not support the audio tag.", playVideo: "Play Video", videoTagNotSupported: "Your browser does not support the video tag.", metaWidth: "Width", metaHeight: "Height", metaType: "Type", metaSize: "Size", fileName: "File name", publicPath: "Public path", providerPath: "{providerName} path", markdown: "Markdown" }, aria: { openActions: "Open actions", cancel: "Cancel", submit: "Submit" }, actions: { confirmAction: "Click again to {action}", verbs: { create: "create", delete: "delete", rename: "rename", upload: "upload", duplicate: "duplicate" }, labels: { "create-document": "New file", "create-document-folder": "New folder", "create-media-folder": "New media folder", "rename-item": "Rename", "delete-item": "Delete", "upload-media": "Upload media", "duplicate-item": "Duplicate", "revert-item": "Revert changes", "publish-branch": "Publish branch" }, tooltips: { "revert-item": "Revert changes", "create-document": "Create a new file", "upload-media": "Upload media", "create-document-folder": "Create a new folder", "create-media-folder": "Create a new folder", "rename-item": "Rename file", "duplicate-item": "Duplicate file", "delete-item": "Delete file", "publish-branch": "Publish branch" } }, items: { itemCount: "1 item | {count} items" }, monaco: { headings: { h1: "Heading 1", h2: "Heading 2", h3: "Heading 3" }, styles: { bold: "Bold", italic: "Italic" }, lists: { bulleted: "Bulleted List", numbered: "Numbered List" }, other: { emojis: "Emojis", blockquote: "Blockquote", code: "Code", inlineCode: "Inline Code", link: "Link", image: "Image" }, writeSomething: "Write Something", docs: { path: "Path in project:", props: "Props", slots: "Slots", type: "type", required: "required", default: "default" } } }, t = {
2
+ studio: e
3
+ };
4
+ export {
5
+ t as default,
6
+ e as studio
7
+ };
@@ -0,0 +1,7 @@
1
+ const e = { buttons: { edit: "Edit this page", retryPublish: "Retry Publish", reloadApp: "Reload application", reload: "Reload", signOut: "Sign out", review: "Review", publish: "Publish", back: "Back" }, headings: { directories: "Directories", files: "Files", media: "Media" }, tooltips: { toggleStudio: "Toggle Studio", unlinkEditor: "Unlink editor and preview", linkEditor: "Link editor and preview", copiedToClipboard: "Copied to clipboard", copyToClipboard: "Copy to clipboard", publishChanges: "Publish changes", backToContent: "Back to content" }, notifications: { error: { unknown: "An unknown error occurred" } }, publish: { failedTitle: "Publish Failed", summary: "on {branch} of {repo} repository", errorTitle: "Error during GitHub publish", failedGeneric: "Failed to publish changes" }, review: { title: "Review changes", created: "Created", updated: "Updated", deleted: "Deleted" }, publishSuccess: { title: "Changes Published", summary: "{count} change published on {branch} of {repo} repository | {count} changes published on {branch} of {repo} repository", alertTitleWaiting: "Waiting for deployment...", alertTitleComplete: "Deployment complete", alertDescWaiting: "The website needs to be deployed for changes to be visible in Studio.", alertDescComplete: "A new version of your website has been deployed. Please refresh your app to see changes in Studio." }, newVersionBanner: { title: "New website version detected", description: "A new version of your website has been deployed. Reload the app to see the latest changes.", reloadButton: "Reload" }, footer: { developer_view: "Developer view" }, alert: { mdcFormatting: "Formatting applied to align with MDC syntax standard." }, conflict: { title: "Conflict Detected", repository: "Repository", branch: "Branch", file: "File", description: "The content on GitHub differs from your website version. Ensure your latest changes are deployed and refresh the page.", githubVersion: "GitHub", websiteVersion: "Website" }, nav: { content: "Content", media: "Media" }, placeholders: { commitMessage: "Commit message", order: "N°", fileName: "File name" }, validation: { commitRequired: "Commit message is required", nameEmpty: "Name cannot be empty", nameEndsWithDot: "Name cannot end with '.'", nameStartsWithSlash: "Name cannot start with '/'", nameExists: "Name already exists" }, media: { altFilePreview: "File preview", altImagePreview: "Image preview", playAudio: "Play Audio", audioTagNotSupported: "Your browser does not support the audio tag.", playVideo: "Play Video", videoTagNotSupported: "Your browser does not support the video tag.", metaWidth: "Width", metaHeight: "Height", metaType: "Type", metaSize: "Size", fileName: "File name", publicPath: "Public path", githubPath: "GitHub path", markdown: "Markdown" }, aria: { openActions: "Open actions", cancel: "Cancel", submit: "Submit" }, actions: { confirmAction: "Click again to {action}", verbs: { create: "create", delete: "delete", rename: "rename", upload: "upload", duplicate: "duplicate" }, labels: { "create-document": "New file", "create-document-folder": "New folder", "create-media-folder": "New media folder", "rename-item": "Rename", "delete-item": "Delete", "upload-media": "Upload media", "duplicate-item": "Duplicate", "revert-item": "Revert changes", "publish-branch": "Publish branch" }, tooltips: { "revert-item": "Revert changes", "create-document": "Create a new file", "upload-media": "Upload media", "create-document-folder": "Create a new folder", "create-media-folder": "Create a new folder", "rename-item": "Rename file", "duplicate-item": "Duplicate file", "delete-item": "Delete file", "publish-branch": "Publish branch" } }, items: { itemCount: "1 item | {count} items" }, monaco: { headings: { h1: "Heading 1", h2: "Heading 2", h3: "Heading 3" }, styles: { bold: "Bold", italic: "Italic" }, lists: { bulleted: "Bulleted List", numbered: "Numbered List" }, other: { emojis: "Emojis", blockquote: "Blockquote", code: "Code", inlineCode: "Inline Code", link: "Link", image: "Image" }, writeSomething: "Write Something", docs: { path: "Path in project:", props: "Props", slots: "Slots", type: "type", required: "required", default: "default" } } }, t = {
2
+ studio: e
3
+ };
4
+ export {
5
+ t as default,
6
+ e as studio
7
+ };
@@ -0,0 +1,7 @@
1
+ const e = { buttons: { edit: "Edit this page", retryPublish: "Retry Publish", reloadApp: "Reload application", reload: "Reload", signOut: "Sign out", review: "Review", publish: "Publish", back: "Back", backToCode: "Back to code", seeChanges: "See what's changed" }, headings: { directories: "Directories", files: "Files", media: "Media" }, tooltips: { toggleStudio: "Toggle Studio", unlinkEditor: "Unlink editor and preview", linkEditor: "Link editor and preview", copiedToClipboard: "Copied to clipboard", copyToClipboard: "Copy to clipboard", publishChanges: "Publish changes", backToContent: "Back to content" }, notifications: { error: { unknown: "An unknown error occurred" } }, publish: { failedTitle: "Publish Failed", summary: "on {branch} of {repo} repository", errorTitle: "Error during {providerName} publish", failedGeneric: "Failed to publish changes" }, review: { title: "Review changes", created: "Created", updated: "Updated", renamed: "Renamed", deleted: "Deleted" }, publishSuccess: { title: "Changes Published", summary: "{count} change published on {branch} of {repo} repository | {count} changes published on {branch} of {repo} repository", alertTitleWaiting: "Waiting for deployment...", alertTitleComplete: "Deployment complete", alertDescWaiting: "The website needs to be deployed for changes to be visible in Studio.", alertDescComplete: "A new version of your website has been deployed. Please refresh your app to see changes in Studio." }, newVersionBanner: { title: "New website version detected", description: "A new version of your website has been deployed. Reload the app to see the latest changes.", reloadButton: "Reload" }, footer: { developer_view: "Developer view" }, alert: { mdcFormatting: "Formatting applied to align with MDC syntax standard." }, conflict: { title: "Conflict Detected", repository: "Repository", branch: "Branch", file: "File", description: "The content on {providerName} differs from your website version. Ensure your latest changes are deployed and refresh the page.", websiteVersion: "Website" }, nav: { content: "Content", media: "Media" }, placeholders: { commitMessage: "Commit message", order: "N°", fileName: "File name" }, validation: { commitRequired: "Commit message is required", nameEmpty: "Name cannot be empty", nameEndsWithDot: "Name cannot end with '.'", nameStartsWithSlash: "Name cannot start with '/'", nameExists: "Name already exists" }, media: { altFilePreview: "File preview", altImagePreview: "Image preview", playAudio: "Play Audio", audioTagNotSupported: "Your browser does not support the audio tag.", playVideo: "Play Video", videoTagNotSupported: "Your browser does not support the video tag.", metaWidth: "Width", metaHeight: "Height", metaType: "Type", metaSize: "Size", fileName: "File name", publicPath: "Public path", providerPath: "{providerName} path", markdown: "Markdown" }, aria: { openActions: "Open actions", cancel: "Cancel", submit: "Submit" }, actions: { confirmAction: "Click again to {action}", verbs: { create: "create", delete: "delete", rename: "rename", upload: "upload", duplicate: "duplicate" }, labels: { "create-document": "New file", "create-document-folder": "New folder", "create-media-folder": "New media folder", "rename-item": "Rename", "delete-item": "Delete", "upload-media": "Upload media", "duplicate-item": "Duplicate", "revert-item": "Revert changes", "publish-branch": "Publish branch" }, tooltips: { "revert-item": "Revert changes", "create-document": "Create a new file", "upload-media": "Upload media", "create-document-folder": "Create a new folder", "create-media-folder": "Create a new folder", "rename-item": "Rename file", "duplicate-item": "Duplicate file", "delete-item": "Delete file", "publish-branch": "Publish branch" } }, items: { itemCount: "1 item | {count} items" }, monaco: { headings: { h1: "Heading 1", h2: "Heading 2", h3: "Heading 3" }, styles: { bold: "Bold", italic: "Italic" }, lists: { bulleted: "Bulleted List", numbered: "Numbered List" }, other: { emojis: "Emojis", blockquote: "Blockquote", code: "Code", inlineCode: "Inline Code", link: "Link", image: "Image" }, writeSomething: "Write Something", snippets: { title: "title", item1: "Item 1", item2: "Item 2", language: "language", code: "code", link: "link", alt: "alt", src: "src", value: "value" }, docs: { path: "Path in project:", props: "Props", slots: "Slots", type: "type", required: "required", default: "default" } } }, t = {
2
+ studio: e
3
+ };
4
+ export {
5
+ t as default,
6
+ e as studio
7
+ };
@@ -0,0 +1,7 @@
1
+ const e = { buttons: { edit: "Editer la page", retryPublish: "Réessayer la publication", reloadApp: "Recharger l'application", reload: "Recharger", signOut: "Se déconnecter", review: "Valider", publish: "Publier", back: "Retour", backToCode: "Retour au code", seeChanges: "Voir les changements" }, headings: { directories: "Dossiers", files: "Fichiers", media: "Médias" }, tooltips: { toggleStudio: "Afficher/Masquer le Studio", unlinkEditor: "Délier l'éditeur et l'aperçu", linkEditor: "Lier l'éditeur et l'aperçu", copiedToClipboard: "Copié dans le presse-papiers", copyToClipboard: "Copier dans le presse-papiers", publishChanges: "Publier les changements", backToContent: "Retour au contenu" }, notifications: { error: { unknown: "Une erreur inconnue est survenue" } }, publish: { failedTitle: "Échec de la publication", summary: "sur la branche {branch} du dépôt {repo}", errorTitle: "Erreur lors de la publication sur {providerName}", failedGeneric: "Échec de la publication des changements" }, review: { title: "Changements à valider", created: "Créé", updated: "Modifié", deleted: "Supprimé", renamed: "Renommé" }, publishSuccess: { title: "Changements publiés", summary: "{count} changement publié sur la branche {branch} du dépôt {repo} | {count} changements publiés sur la branche {branch} du dépôt {repo}", alertTitleWaiting: "En attente de déploiement...", alertTitleComplete: "Déploiement terminé", alertDescWaiting: "Le site web doit être déployé pour que les changements soient visibles dans le Studio.", alertDescComplete: "Une nouvelle version de votre site a été déployée. Veuillez rafraîchir l'application pour voir les changements dans le Studio." }, newVersionBanner: { title: "Nouvelle version du site détectée", description: "Une nouvelle version de votre site a été déployée. Rechargez l'application pour voir les derniers changements.", reloadButton: "Recharger" }, footer: { developer_view: "Vue développeur" }, alert: { mdcFormatting: "Formatage appliqué pour s'aligner sur le standard de syntaxe MDC." }, conflict: { title: "Conflit détecté", repository: "Dépôt", branch: "Branche", file: "Fichier", description: "Le contenu sur {providerName} diffère de la version de votre site web. Assurez-vous que vos dernières modifications sont déployées et actualisez la page.", websiteVersion: "Site Web" }, nav: { content: "Contenu", media: "Média" }, placeholders: { commitMessage: "Message de commit", order: "N°", fileName: "Nom du fichier" }, validation: { commitRequired: "Message de commit requis", nameEmpty: "Le nom ne peut pas être vide", nameEndsWithDot: "Le nom ne peut pas se terminer par '.'", nameStartsWithSlash: "Le nom ne peut pas commencer par '/'", nameExists: "Ce nom existe déjà" }, media: { altFilePreview: "Aperçu du fichier", altImagePreview: "Aperçu de l'image", playAudio: "Lire l'audio", audioTagNotSupported: "Votre navigateur ne supporte pas la balise audio.", playVideo: "Lire la vidéo", videoTagNotSupported: "Votre navigateur ne supporte pas la balise vidéo.", metaWidth: "Largeur", metaHeight: "Hauteur", metaType: "Type", metaSize: "Taille", fileName: "Nom du fichier", publicPath: "Chemin public", providerPath: "Chemin {providerName}", markdown: "Markdown" }, aria: { openActions: "Ouvrir les actions", cancel: "Annuler", submit: "Valider" }, actions: { confirmAction: "Cliquez à nouveau pour {action}", verbs: { create: "créer", delete: "supprimer", rename: "renommer", upload: "téléverser", duplicate: "dupliquer" }, labels: { "create-document": "Nouveau fichier", "create-document-folder": "Nouveau dossier", "create-media-folder": "Nouveau dossier média", "rename-item": "Renommer", "delete-item": "Supprimer", "upload-media": "Téléverser un média", "duplicate-item": "Dupliquer", "revert-item": "Annuler les modifications", "publish-branch": "Publier la branche" }, tooltips: { "revert-item": "Annuler les modifications", "create-document": "Créer un nouveau fichier", "upload-media": "Téléverser un média", "create-document-folder": "Créer un nouveau dossier", "create-media-folder": "Créer un nouveau dossier", "rename-item": "Renommer le fichier", "duplicate-item": "Dupliquer le fichier", "delete-item": "Supprimer le fichier", "publish-branch": "Publier la branche" } }, items: { itemCount: "1 élément | {count} éléments" }, monaco: { headings: { h1: "Titre 1", h2: "Titre 2", h3: "Titre 3" }, styles: { bold: "Gras", italic: "Italique" }, lists: { bulleted: "Liste à puces", numbered: "Liste numérotée" }, other: { emojis: "Émojis", blockquote: "Citation", code: "Bloc de code", inlineCode: "Code (en ligne)", link: "Lien", image: "Image" }, writeSomething: "Écrivez quelque chose", snippets: { title: "titre", item1: "Élément 1", item2: "Élément 2", language: "langage", code: "code", link: "lien", alt: "alt", src: "src", value: "valeur" }, docs: { path: "Chemin dans le projet :", props: "Props", slots: "Slots", type: "type", required: "requis", default: "défaut" } } }, i = {
2
+ studio: e
3
+ };
4
+ export {
5
+ i as default,
6
+ e as studio
7
+ };
@@ -0,0 +1,7 @@
1
+ const e = { buttons: { edit: "Editer la page", retryPublish: "Réessayer la publication", reloadApp: "Recharger l'application", reload: "Recharger", signOut: "Se déconnecter", review: "Valider", publish: "Publier", back: "Retour" }, headings: { directories: "Dossiers", files: "Fichiers", media: "Médias" }, tooltips: { toggleStudio: "Afficher/Masquer le Studio", unlinkEditor: "Délier l'éditeur et l'aperçu", linkEditor: "Lier l'éditeur et l'aperçu", copiedToClipboard: "Copié dans le presse-papiers", copyToClipboard: "Copier dans le presse-papiers", publishChanges: "Publier les changements", backToContent: "Retour au contenu" }, notifications: { error: { unknown: "Une erreur inconnue est survenue" } }, publish: { failedTitle: "Échec de la publication", summary: "sur la branche {branch} du dépôt {repo}", errorTitle: "Erreur lors de la publication sur {providerName}", failedGeneric: "Échec de la publication des changements" }, review: { title: "Changements à valider", created: "Créé", updated: "Modifié", deleted: "Supprimé" }, publishSuccess: { title: "Changements publiés", summary: "{count} changement publié sur la branche {branch} du dépôt {repo} | {count} changements publiés sur la branche {branch} du dépôt {repo}", alertTitleWaiting: "En attente de déploiement...", alertTitleComplete: "Déploiement terminé", alertDescWaiting: "Le site web doit être déployé pour que les changements soient visibles dans le Studio.", alertDescComplete: "Une nouvelle version de votre site a été déployée. Veuillez rafraîchir l'application pour voir les changements dans le Studio." }, newVersionBanner: { title: "Nouvelle version du site détectée", description: "Une nouvelle version de votre site a été déployée. Rechargez l'application pour voir les derniers changements.", reloadButton: "Recharger" }, footer: { developer_view: "Vue développeur" }, alert: { mdcFormatting: "Formatage appliqué pour s'aligner sur le standard de syntaxe MDC." }, conflict: { title: "Conflit détecté", repository: "Dépôt", branch: "Branche", file: "Fichier", description: "Le contenu sur {providerName} diffère de la version de votre site web. Assurez-vous que vos dernières modifications sont déployées et actualisez la page.", websiteVersion: "Site Web" }, nav: { content: "Contenu", media: "Média" }, placeholders: { commitMessage: "Message de commit", order: "N°", fileName: "Nom du fichier" }, validation: { commitRequired: "Message de commit requis", nameEmpty: "Le nom ne peut pas être vide", nameEndsWithDot: "Le nom ne peut pas se terminer par '.'", nameStartsWithSlash: "Le nom ne peut pas commencer par '/'", nameExists: "Ce nom existe déjà" }, media: { altFilePreview: "Aperçu du fichier", altImagePreview: "Aperçu de l'image", playAudio: "Lire l'audio", audioTagNotSupported: "Votre navigateur ne supporte pas la balise audio.", playVideo: "Lire la vidéo", videoTagNotSupported: "Votre navigateur ne supporte pas la balise vidéo.", metaWidth: "Largeur", metaHeight: "Hauteur", metaType: "Type", metaSize: "Taille", fileName: "Nom du fichier", publicPath: "Chemin public", providerPath: "Chemin {providerName}", markdown: "Markdown" }, aria: { openActions: "Ouvrir les actions", cancel: "Annuler", submit: "Valider" }, actions: { confirmAction: "Cliquez à nouveau pour {action}", verbs: { create: "créer", delete: "supprimer", rename: "renommer", upload: "téléverser", duplicate: "dupliquer" }, labels: { "create-document": "Nouveau fichier", "create-document-folder": "Nouveau dossier", "create-media-folder": "Nouveau dossier média", "rename-item": "Renommer", "delete-item": "Supprimer", "upload-media": "Téléverser un média", "duplicate-item": "Dupliquer", "revert-item": "Annuler les modifications", "publish-branch": "Publier la branche" }, tooltips: { "revert-item": "Annuler les modifications", "create-document": "Créer un nouveau fichier", "upload-media": "Téléverser un média", "create-document-folder": "Créer un nouveau dossier", "create-media-folder": "Créer un nouveau dossier", "rename-item": "Renommer le fichier", "duplicate-item": "Dupliquer le fichier", "delete-item": "Supprimer le fichier", "publish-branch": "Publier la branche" } }, items: { itemCount: "1 élément | {count} éléments" }, monaco: { headings: { h1: "Titre 1", h2: "Titre 2", h3: "Titre 3" }, styles: { bold: "Gras", italic: "Italique" }, lists: { bulleted: "Liste à puces", numbered: "Liste numérotée" }, other: { emojis: "Émojis", blockquote: "Citation", code: "Bloc de code", inlineCode: "Code (en ligne)", link: "Lien", image: "Image" }, writeSomething: "Écrivez quelque chose", docs: { path: "Chemin dans le projet :", props: "Props", slots: "Slots", type: "type", required: "requis", default: "défaut" } } }, i = {
2
+ studio: e
3
+ };
4
+ export {
5
+ i as default,
6
+ e as studio
7
+ };
@@ -0,0 +1,7 @@
1
+ const e = { buttons: { edit: "Editer la page", retryPublish: "Réessayer la publication", reloadApp: "Recharger l'application", reload: "Recharger", signOut: "Se déconnecter", review: "Valider", publish: "Publier", back: "Retour" }, headings: { directories: "Dossiers", files: "Fichiers", media: "Médias" }, tooltips: { toggleStudio: "Afficher/Masquer le Studio", unlinkEditor: "Délier l'éditeur et l'aperçu", linkEditor: "Lier l'éditeur et l'aperçu", copiedToClipboard: "Copié dans le presse-papiers", copyToClipboard: "Copier dans le presse-papiers", publishChanges: "Publier les changements", backToContent: "Retour au contenu" }, notifications: { error: { unknown: "Une erreur inconnue est survenue" } }, publish: { failedTitle: "Échec de la publication", summary: "sur la branche {branch} du dépôt {repo}", errorTitle: "Erreur lors de la publication sur GitHub", failedGeneric: "Échec de la publication des changements" }, review: { title: "Changements à valider", created: "Créé", updated: "Modifié", deleted: "Supprimé" }, publishSuccess: { title: "Changements publiés", summary: "{count} changement publié sur la branche {branch} du dépôt {repo} | {count} changements publiés sur la branche {branch} du dépôt {repo}", alertTitleWaiting: "En attente de déploiement...", alertTitleComplete: "Déploiement terminé", alertDescWaiting: "Le site web doit être déployé pour que les changements soient visibles dans le Studio.", alertDescComplete: "Une nouvelle version de votre site a été déployée. Veuillez rafraîchir l'application pour voir les changements dans le Studio." }, newVersionBanner: { title: "Nouvelle version du site détectée", description: "Une nouvelle version de votre site a été déployée. Rechargez l'application pour voir les derniers changements.", reloadButton: "Recharger" }, footer: { developer_view: "Vue développeur" }, alert: { mdcFormatting: "Formatage appliqué pour s'aligner sur le standard de syntaxe MDC." }, conflict: { title: "Conflit détecté", repository: "Dépôt", branch: "Branche", file: "Fichier", description: "Le contenu sur GitHub diffère de la version de votre site web. Assurez-vous que vos dernières modifications sont déployées et actualisez la page.", githubVersion: "GitHub", websiteVersion: "Site Web" }, nav: { content: "Contenu", media: "Média" }, placeholders: { commitMessage: "Message de commit", order: "N°", fileName: "Nom du fichier" }, validation: { commitRequired: "Message de commit requis", nameEmpty: "Le nom ne peut pas être vide", nameEndsWithDot: "Le nom ne peut pas se terminer par '.'", nameStartsWithSlash: "Le nom ne peut pas commencer par '/'", nameExists: "Ce nom existe déjà" }, media: { altFilePreview: "Aperçu du fichier", altImagePreview: "Aperçu de l'image", playAudio: "Lire l'audio", audioTagNotSupported: "Votre navigateur ne supporte pas la balise audio.", playVideo: "Lire la vidéo", videoTagNotSupported: "Votre navigateur ne supporte pas la balise vidéo.", metaWidth: "Largeur", metaHeight: "Hauteur", metaType: "Type", metaSize: "Taille", fileName: "Nom du fichier", publicPath: "Chemin public", githubPath: "Chemin GitHub", markdown: "Markdown" }, aria: { openActions: "Ouvrir les actions", cancel: "Annuler", submit: "Valider" }, actions: { confirmAction: "Cliquez à nouveau pour {action}", verbs: { create: "créer", delete: "supprimer", rename: "renommer", upload: "téléverser", duplicate: "dupliquer" }, labels: { "create-document": "Nouveau fichier", "create-document-folder": "Nouveau dossier", "create-media-folder": "Nouveau dossier média", "rename-item": "Renommer", "delete-item": "Supprimer", "upload-media": "Téléverser un média", "duplicate-item": "Dupliquer", "revert-item": "Annuler les modifications", "publish-branch": "Publier la branche" }, tooltips: { "revert-item": "Annuler les modifications", "create-document": "Créer un nouveau fichier", "upload-media": "Téléverser un média", "create-document-folder": "Créer un nouveau dossier", "create-media-folder": "Créer un nouveau dossier", "rename-item": "Renommer le fichier", "duplicate-item": "Dupliquer le fichier", "delete-item": "Supprimer le fichier", "publish-branch": "Publier la branche" } }, items: { itemCount: "1 élément | {count} éléments" }, monaco: { headings: { h1: "Titre 1", h2: "Titre 2", h3: "Titre 3" }, styles: { bold: "Gras", italic: "Italique" }, lists: { bulleted: "Liste à puces", numbered: "Liste numérotée" }, other: { emojis: "Émojis", blockquote: "Citation", code: "Bloc de code", inlineCode: "Code (en ligne)", link: "Lien", image: "Image" }, writeSomething: "Écrivez quelque chose", docs: { path: "Chemin dans le projet :", props: "Props", slots: "Slots", type: "type", required: "requis", default: "défaut" } } }, i = {
2
+ studio: e
3
+ };
4
+ export {
5
+ i as default,
6
+ e as studio
7
+ };
@@ -28,6 +28,7 @@ export declare enum AudioFileExtension {
28
28
 
29
29
  export declare interface BaseItem {
30
30
  id: string;
31
+ fsPath?: string;
31
32
  extension: string;
32
33
  stem: string;
33
34
  path?: string;
@@ -38,6 +39,12 @@ export declare interface CommitFilesOptions extends GitBaseOptions {
38
39
  message: string;
39
40
  }
40
41
 
42
+ export declare interface CommitResult {
43
+ success: boolean;
44
+ commitSha: string;
45
+ url: string;
46
+ }
47
+
41
48
  export declare interface ComponentMeta {
42
49
  name: string;
43
50
  path: string;
@@ -49,7 +56,7 @@ export declare interface ComponentMeta {
49
56
  }
50
57
 
51
58
  export declare interface ContentConflict {
52
- githubContent: string;
59
+ remoteContent: string;
53
60
  localContent: string;
54
61
  }
55
62
 
@@ -86,10 +93,9 @@ declare const _default: {};
86
93
  export default _default;
87
94
 
88
95
  export declare interface DraftItem<T = DatabaseItem | MediaItem> {
89
- id: string;
90
96
  fsPath: string;
91
97
  status: DraftStatus;
92
- githubFile?: GithubFile;
98
+ remoteFile?: GitFile;
93
99
  original?: T;
94
100
  modified?: T;
95
101
  /**
@@ -129,18 +135,22 @@ export declare interface GitBaseOptions {
129
135
  authorEmail: string;
130
136
  }
131
137
 
132
- export declare interface GithubFile {
138
+ export declare interface GitFile {
139
+ provider: GitProviderType;
133
140
  name: string;
134
141
  path: string;
135
142
  sha: string;
136
143
  size: number;
137
144
  url: string;
145
+ content?: string;
146
+ encoding?: 'utf-8' | 'base64';
147
+ }
148
+
149
+ export declare interface GithubFile extends GitFile {
138
150
  html_url: string;
139
151
  git_url: string;
140
152
  download_url: string;
141
153
  type: string;
142
- content?: string;
143
- encoding?: string;
144
154
  _links: {
145
155
  self: string;
146
156
  git: string;
@@ -148,11 +158,40 @@ export declare interface GithubFile {
148
158
  };
149
159
  }
150
160
 
161
+ export declare interface GitLabFile extends GitFile {
162
+ file_path: string;
163
+ ref: string;
164
+ blob_id: string;
165
+ commit_id: string;
166
+ last_commit_id: string;
167
+ }
168
+
151
169
  export declare interface GitOptions extends GitBaseOptions {
170
+ provider: GitProviderType | null;
152
171
  rootDir: string;
153
172
  token: string;
173
+ instanceUrl?: string;
174
+ }
175
+
176
+ export declare interface GitProviderAPI {
177
+ fetchFile(path: string, options?: {
178
+ cached?: boolean;
179
+ }): Promise<GitFile | null>;
180
+ commitFiles(files: RawFile[], message: string): Promise<CommitResult | null>;
181
+ getRepositoryUrl(): string;
182
+ getBranchUrl(): string;
183
+ getCommitUrl(sha: string): string;
184
+ getContentRootDirUrl(): string;
185
+ getRepositoryInfo(): {
186
+ owner: string;
187
+ repo: string;
188
+ branch: string;
189
+ provider: GitProviderType | null;
190
+ };
154
191
  }
155
192
 
193
+ export declare type GitProviderType = 'github' | 'gitlab';
194
+
156
195
  export declare enum ImageFileExtension {
157
196
  PNG = "png",
158
197
  JPG = "jpg",
@@ -186,11 +225,16 @@ export declare interface RenameFileParams {
186
225
  }
187
226
 
188
227
  export declare interface Repository {
189
- provider: 'github';
228
+ provider: GitProviderType | null;
190
229
  owner: string;
191
230
  repo: string;
192
231
  branch: string;
193
232
  rootDir: string;
233
+ /**
234
+ * Can be used to specify the instance URL for self-hosted GitLab instances.
235
+ * @default 'https://gitlab.com'
236
+ */
237
+ instanceUrl?: string;
194
238
  }
195
239
 
196
240
  export declare interface StudioAction<K extends StudioItemActionId | StudioBranchActionId> {
@@ -224,6 +268,7 @@ export declare interface StudioHost {
224
268
  meta: {
225
269
  dev: boolean;
226
270
  components: () => ComponentMeta[];
271
+ defaultLocale: string;
227
272
  };
228
273
  on: {
229
274
  routeChange: (fn: (to: RouteLocationNormalized, from: RouteLocationNormalized) => void) => void;
@@ -231,8 +276,9 @@ export declare interface StudioHost {
231
276
  beforeUnload: (fn: (event: BeforeUnloadEvent) => void) => void;
232
277
  colorModeChange: (fn: (colorMode: 'light' | 'dark') => void) => void;
233
278
  manifestUpdate: (fn: (id: string) => void) => void;
234
- documentUpdate: (fn: (id: string, type: 'remove' | 'update') => void) => void;
235
- mediaUpdate: (fn: (id: string, type: 'remove' | 'update') => void) => void;
279
+ documentUpdate: (fn: (fsPath: string, type: 'remove' | 'update') => void) => void;
280
+ mediaUpdate: (fn: (fsPath: string, type: 'remove' | 'update') => void) => void;
281
+ requestDocumentEdit: (fn: (fsPath: string) => void) => void;
236
282
  };
237
283
  ui: {
238
284
  colorMode: 'light' | 'dark';
@@ -244,23 +290,33 @@ export declare interface StudioHost {
244
290
  };
245
291
  repository: Repository;
246
292
  document: {
247
- get: (id: string) => Promise<DatabaseItem>;
248
- getFileSystemPath: (id: string) => string;
249
- list: () => Promise<DatabaseItem[]>;
250
- upsert: (id: string, document: DatabaseItem) => Promise<void>;
251
- create: (fsPath: string, content: string) => Promise<DatabaseItem>;
252
- delete: (id: string) => Promise<void>;
253
- detectActives: () => Array<{
254
- id: string;
255
- title: string;
256
- }>;
293
+ db: {
294
+ get: (fsPath: string) => Promise<DatabaseItem | undefined>;
295
+ list: () => Promise<DatabaseItem[]>;
296
+ upsert: (fsPath: string, document: DatabaseItem) => Promise<void>;
297
+ create: (fsPath: string, content: string) => Promise<DatabaseItem>;
298
+ delete: (fsPath: string) => Promise<void>;
299
+ };
300
+ utils: {
301
+ areEqual: (document1: DatabaseItem, document2: DatabaseItem) => boolean;
302
+ isMatchingContent: (content: string, document: DatabaseItem) => Promise<boolean>;
303
+ pickReservedKeys: (document: DatabaseItem) => DatabaseItem;
304
+ removeReservedKeys: (document: DatabaseItem) => DatabaseItem;
305
+ detectActives: () => Array<{
306
+ fsPath: string;
307
+ title: string;
308
+ }>;
309
+ };
310
+ generate: {
311
+ documentFromContent: (id: string, content: string) => Promise<DatabaseItem | null>;
312
+ contentFromDocument: (document: DatabaseItem) => Promise<string | null>;
313
+ };
257
314
  };
258
315
  media: {
259
- get: (id: string) => Promise<MediaItem>;
260
- getFileSystemPath: (id: string) => string;
316
+ get: (fsPath: string) => Promise<MediaItem>;
261
317
  list: () => Promise<MediaItem[]>;
262
- upsert: (id: string, media: MediaItem) => Promise<void>;
263
- delete: (id: string) => Promise<void>;
318
+ upsert: (fsPath: string, media: MediaItem) => Promise<void>;
319
+ delete: (fsPath: string) => Promise<void>;
264
320
  };
265
321
  user: {
266
322
  get: () => StudioUser;
@@ -291,31 +347,25 @@ export declare interface StudioLocation {
291
347
  }
292
348
 
293
349
  export declare interface StudioUser {
294
- githubId: string;
295
- githubToken: string;
350
+ providerId: string;
351
+ accessToken: string;
296
352
  name: string;
297
353
  avatar: string;
298
354
  email: string;
299
- provider: 'github' | 'google';
355
+ provider: GitProviderType | 'google';
300
356
  }
301
357
 
302
358
  export declare interface TreeItem {
303
359
  name: string;
304
360
  fsPath: string;
305
361
  type: 'file' | 'directory' | 'root';
306
- prefix: number | null;
307
- collections: string[];
362
+ prefix: string | null;
308
363
  status?: TreeStatus;
309
364
  routePath?: string;
310
365
  children?: TreeItem[];
311
366
  hide?: boolean;
312
367
  }
313
368
 
314
- export declare enum TreeRootId {
315
- Content = "content",
316
- Media = "public-assets"
317
- }
318
-
319
369
  export declare enum TreeStatus {
320
370
  Deleted = "deleted",
321
371
  Created = "created",