{# # PAGE: SLIDIA — ÉTAPE 2 : LA SOURCE DU CONTENU (une page par méthode) # Le dépôt du document, OU la saisie du brief. Rien d'autre : les paramètres — titre, masque, # nombre de diapositives, profil — viennent à l'étape suivante, comme chez Moodia. # # DONNÉES REQUISES (SlidiaController::source) : method ('pdf'|'prompt'), briefMaxChars. # # Le document est analysé ICI, au clic sur « Analyser le document » : le formulaire ne poste # que l'empreinte renvoyée par POST /api/slidia/document, jamais le fichier. C'est cette # empreinte que l'étape 3 retrouve en session. #} {% extends 'base.html.twig' %} {% block title %}Nouvelle présentation — Slidia{% endblock %} {% block meta_description %}Importez un document ou décrivez votre sujet : Slidia compose la présentation.{% endblock %} {% block body %} {% set sdColor = tool_color_details['slidia'] %} {% set sdRgb = sdColor.primary|hex_to_rgb %} {% set isPdf = method == 'pdf' %} {% set meta = { pdf: { title: 'Importez votre document', subtitle: 'Format PDF uniquement · Maximum 20 Mo', icon: 'upload', cta: 'Analyser le document' }, prompt: { title: 'Décrivez votre présentation', subtitle: 'Soyez précis pour un meilleur résultat', icon: 'magic-stick', cta: 'Configurer la présentation' } }[method] %} {# L'exemple affiché dans la carte « votre contenu tel quel ». Il est VÉRIFIÉ : quatre sections séparées par trois lignes `---`, ce que `BriefStructureAnalyzer` reconnaît. Un exemple que l'analyseur refuserait enseignerait un motif qui ne marche pas. #} {# Recoloration en ambre : les composants partagés sont écrits sur les variables de thème, jamais sur une couleur en dur — on les surcharge donc sur CE conteneur racine. #} {# Le dépôt d'un fichier garde les métriques de la vue équivalente de Moodia (`max-w-2xl`) : une zone de dépôt n'a rien à gagner à s'élargir. La saisie d'un brief, si — c'est un texte long, souvent collé, qu'on veut relire sans que les lignes fassent trois mots, et son aide au motif `---` tient à côté plutôt qu'en dessous. #} {#- `py-8 lg:py-12`, comme l'écran de paramètres qui suit : les deux étapes d'un même parcours ne doivent pas commencer à des hauteurs différentes. À `lg:py-16`, le titre descendait 112 px sous le haut de la page pour rien. -#}
{% include '_atoms/icon/icon.html.twig' with { name: meta.icon, size: 'xl', colorPrimary: 'current', colorSecondary: 'current' } only %}

{{ meta.title }}

{{ meta.subtitle }}

{# Même identifiant de jeton que la soumission finale : les deux appartiennent au même parcours de création, et `createSubmit()` l'attend sous ce nom. #} {% if isPdf %} {% set docRetenu = source.hash|default('') is not empty %} {# ── Dépôt du document ─────────────────────────────────────────── #} {# Masqué — et non retiré — quand un document est déjà retenu : `resetDocument()` le fait réapparaître sans qu'aucun markup n'ait à être reconstruit en JS. #} {# ── Le document retenu ────────────────────────────────────────── #} {# Même carte que la vue équivalente de Moodia : pastille, nom, poids, corbeille. Rendue côté serveur quand la session porte déjà un document — c'est ce qui fait qu'un retour depuis les paramètres ne perd rien. #}
{% include '_atoms/icon/icon.html.twig' with { name: 'document', size: 'lg', colorPrimary: 'current', colorSecondary: 'current' } only %} {{ source.fileName|default('Document analysé') }} {%- if docRetenu -%} {{ source.sectionCount|default(0) }} section{{ source.sectionCount|default(0) > 1 ? 's' : '' }} {%- if source.fileSize|default(0) > 0 %} · {{ (source.fileSize / 1024)|round }} Ko{% endif -%} {%- endif -%}
{# L'analyse écrit ici. `hasStructure` et `sectionCount` accompagnent l'empreinte : l'étape 3 s'en sert pour proposer le mode fidèle sans relancer d'analyse. Nom et poids ne servent qu'à réafficher cette carte au retour. #} {# Le volume mesuré par l'analyse : il ne sert qu'à PROPOSER un nombre de diapositives à l'étape suivante, jamais à décider quoi que ce soit. #} {% else %} {# ── Saisie du brief ───────────────────────────────────────────── DEUX COLONNES à partir de `lg` : on écrit à gauche, l'aide au motif `---` se lit à droite. Elle vivait sous le champ, donc hors de l'écran au moment précis où elle sert — quand on s'apprête à coller un plan déjà rédigé. Elle reste ancrée au défilement : le champ fait quatorze lignes, l'exemple est long. #} {# Les deux colonnes s'étirent à la même hauteur (`items-stretch`, le défaut) et le champ occupe la sienne entièrement : à hauteur libre, il s'arrêtait bien avant la carte d'aide et la rangée paraissait bancale. `rows` reste comme repli pour le cas où la grille retombe sur une seule colonne. #}
{# ── Le brief PRÉ-AFFICHÉ ──────────────────────────────────── Un brief modèle COMPLET remplit le champ dès l'arrivée : l'utilisateur voit ce qu'un bon brief contient (sujet, objectif, public, durée, points, ton), remplace les valeurs par les siennes — ou efface tout et écrit librement, l'IA reste autonome et n'attend aucun de ces champs. Un placeholder ne suffisait pas : il disparaît au premier caractère, précisément au moment où l'on voudrait s'appuyer dessus. Le modèle ne s'affiche que si aucun brief n'a déjà été saisi (retour depuis l'étape suivante). #} {% set briefModele -%} Sujet : la conduite du changement en entreprise Objectif : donner aux managers des leviers concrets pour accompagner leurs équipes Public : managers de proximité Durée : 30 minutes Points à couvrir : - Les résistances courantes et comment les reconnaître - Les leviers qui fonctionnent au quotidien - Un plan d'action sur trois mois Ton : professionnel et direct {%- endset %}
0 / {{ briefMaxChars|number_format(0, ',', ' ') }} {# Détection de structure EN DIRECT : la même analyse que la soumission (`BriefStructureAnalyzer`, côté serveur), rendue VISIBLE au moment où elle compte. Sans ce badge, un texte proprement découpé en sections passait pour ignoré — la détection marchait, en silence. #}
{# VOTRE CONTENU TEL QUEL — le motif `---`. Beaucoup d'utilisateurs arrivent avec leur plan déjà écrit et ne veulent pas qu'on le refasse. `BriefStructureAnalyzer` reconnaît déjà ce motif ; ce bloc ne fait que l'ENSEIGNER, puisque rien ne l'annonçait. Détectée, la structure ouvre le mode fidèle à l'étape suivante : une diapositive par section, vos titres et vos contenus repris sans reformulation. Le seuil est de quatre sections (trois lignes `---`) : en deçà, une paire de lignes de tirets ressemble trop à un encadré décoratif pour qu'on parie dessus. L'exemple ci-dessous respecte ce seuil — il est vérifié contre l'analyseur. #}
{% endif %}

{# Navigation : sous le contenu, nue sur le fond de page — même molécule que Moodia et Scormia. Le bouton naît désactivé : rien à analyser, rien à configurer. #} {% include '_molecules/step-nav/step-nav.html.twig' with { class: 'pt-2', back: { href: path('app_slidia_new') }, next: { label: meta.cta, type: 'submit', disabled: true, gradientFrom: sdColor.primary, gradientTo: sdColor.secondary, attr: { 'data-slidia--source-target': 'submitBtn' }, labelAttr: { 'data-slidia--source-target': 'submitLabel' } } } only %}
{% endblock %}