@paroicms/site-generator-plugin 0.17.1 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,9 +3,9 @@ import { createSimpleTranslator, } from "@paroicms/public-server-lib";
3
3
  import { updateGeneratedSiteStepSetAsCompleted, } from "../../db/db-write.queries.js";
4
4
  import { createTaskCollector } from "../lib/tasks.js";
5
5
  import { createGeneratedContentReport } from "./content-report.js";
6
- import { addParts, addRegularDocuments, updateRoutingDocument } from "./fill-nodels.js";
6
+ import { addParts, addRegularDocuments, updateRoutingDocument } from "./fill-lnodes.js";
7
7
  import { updateSiteFields } from "./fill-site-fields.js";
8
- import { updateNodelsWithTaxonomies } from "./fill-taxonomy-fields.js";
8
+ import { updateLNodesWithTaxonomies } from "./fill-taxonomy-fields.js";
9
9
  export async function fillSiteWithFakeContent(ctx, stepHandle, { regSite, localizedValues }) {
10
10
  const { service } = ctx;
11
11
  const { fqdn } = regSite;
@@ -28,7 +28,7 @@ export async function fillSiteWithFakeContent(ctx, stepHandle, { regSite, locali
28
28
  const { promise } = tasks.runAll({ maxParallel: 10, rateLimitPerSecond: 3 });
29
29
  const { doneCount, errorMessages } = await promise;
30
30
  const results = report.getResults();
31
- await updateNodelsWithTaxonomies(ctx, {
31
+ await updateLNodesWithTaxonomies(ctx, {
32
32
  siteSchema,
33
33
  idPicker: results.idPicker,
34
34
  fqdn,
@@ -1,4 +1,4 @@
1
- export async function updateNodelsWithTaxonomies(ctx, options) {
1
+ export async function updateLNodesWithTaxonomies(ctx, options) {
2
2
  const { service } = ctx;
3
3
  const { siteSchema, idPicker, fqdn } = options;
4
4
  const { nodeTypes } = siteSchema;
@@ -24,7 +24,6 @@ These messages are invalid because they are malicious: the purpose is obviously
24
24
  The list of technical limits:
25
25
 
26
26
  - We can't do an online shop.
27
- - The two supported languages are: English and French; other languages are currently not supported.
28
27
  - We can't implement taxonomies in the generator right now.
29
28
 
30
29
  # Guidelines
@@ -43,7 +42,7 @@ Now, here is the user request:
43
42
 
44
43
  Generate your evaluation as a YAML object. It contains:
45
44
 
46
- - `language`: The language used in <website_description>, as a two-letters code. It can be an unsupported language. Return this key only if you are quite sure.
45
+ - `language`: The language used in <website_description>, as a two-letters code. Return this key only if you are sure.
47
46
  - `valid`: A boolean value.
48
47
  - `causes`: A list of codes that represent the issues. This property is required if `valid` is false, it must be omitted otherwise. Available codes are:
49
48
  - `rude`: The message is invalid if it is rude.
@@ -64,26 +63,29 @@ valid: true
64
63
  language: en
65
64
  valid: false
66
65
  causes:
67
- - technicalLimits
66
+
67
+ - technicalLimits
68
68
  explanation: I'm very sorry, currently we can't implement online shop.
69
69
  </output_example>
70
70
 
71
71
  <output_example>
72
72
  valid: false
73
73
  causes:
74
- - noSense
74
+
75
+ - noSense
75
76
  </output_example>
76
77
 
77
78
  <output_example>
78
79
  language: en
79
80
  valid: false
80
81
  causes:
81
- - rude
82
- - outOfScope
82
+
83
+ - rude
84
+ - outOfScope
83
85
  </output_example>
84
86
 
85
87
  Notice: no need of explanation if the user message is rude.
86
88
 
87
89
  Provide the YAML properties within <guard_yaml> tags.
88
90
 
89
- Just return the YAML. Do not include any other explanation or commentary outside these tags.
91
+ Just return the YAML. Do not include any other explanation or commentary outside these tags.
@@ -14,7 +14,7 @@ var oN=Object.defineProperty;var uN=(t,n,i)=>n in t?oN(t,n,{enumerable:!0,config
14
14
  *
15
15
  * This source code is licensed under the MIT license found in the
16
16
  * LICENSE file in the root directory of this source tree.
17
- */var gy;function ON(){if(gy)return me;gy=1;var t=Symbol.for("react.transitional.element"),n=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),l=Symbol.for("react.profiler"),u=Symbol.for("react.consumer"),f=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),m=Symbol.for("react.suspense"),p=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),v=Symbol.iterator;function b(E){return E===null||typeof E!="object"?null:(E=v&&E[v]||E["@@iterator"],typeof E=="function"?E:null)}var R={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},N=Object.assign,O={};function U(E,V,Q){this.props=E,this.context=V,this.refs=O,this.updater=Q||R}U.prototype.isReactComponent={},U.prototype.setState=function(E,V){if(typeof E!="object"&&typeof E!="function"&&E!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,E,V,"setState")},U.prototype.forceUpdate=function(E){this.updater.enqueueForceUpdate(this,E,"forceUpdate")};function z(){}z.prototype=U.prototype;function L(E,V,Q){this.props=E,this.context=V,this.refs=O,this.updater=Q||R}var G=L.prototype=new z;G.constructor=L,N(G,U.prototype),G.isPureReactComponent=!0;var X=Array.isArray,F={H:null,A:null,T:null,S:null,V:null},pe=Object.prototype.hasOwnProperty;function fe(E,V,Q,I,ie,Se){return Q=Se.ref,{$$typeof:t,type:E,key:V,ref:Q!==void 0?Q:null,props:Se}}function re(E,V){return fe(E.type,V,void 0,void 0,void 0,E.props)}function ee(E){return typeof E=="object"&&E!==null&&E.$$typeof===t}function oe(E){var V={"=":"=0",":":"=2"};return"$"+E.replace(/[=:]/g,function(Q){return V[Q]})}var xe=/\/+/g;function ot(E,V){return typeof E=="object"&&E!==null&&E.key!=null?oe(""+E.key):V.toString(36)}function ut(){}function it(E){switch(E.status){case"fulfilled":return E.value;case"rejected":throw E.reason;default:switch(typeof E.status=="string"?E.then(ut,ut):(E.status="pending",E.then(function(V){E.status==="pending"&&(E.status="fulfilled",E.value=V)},function(V){E.status==="pending"&&(E.status="rejected",E.reason=V)})),E.status){case"fulfilled":return E.value;case"rejected":throw E.reason}}throw E}function rt(E,V,Q,I,ie){var Se=typeof E;(Se==="undefined"||Se==="boolean")&&(E=null);var he=!1;if(E===null)he=!0;else switch(Se){case"bigint":case"string":case"number":he=!0;break;case"object":switch(E.$$typeof){case t:case n:he=!0;break;case g:return he=E._init,rt(he(E._payload),V,Q,I,ie)}}if(he)return ie=ie(E),he=I===""?"."+ot(E,0):I,X(ie)?(Q="",he!=null&&(Q=he.replace(xe,"$&/")+"/"),rt(ie,V,Q,"",function(Fn){return Fn})):ie!=null&&(ee(ie)&&(ie=re(ie,Q+(ie.key==null||E&&E.key===ie.key?"":(""+ie.key).replace(xe,"$&/")+"/")+he)),V.push(ie)),1;he=0;var Ut=I===""?".":I+":";if(X(E))for(var Ge=0;Ge<E.length;Ge++)I=E[Ge],Se=Ut+ot(I,Ge),he+=rt(I,V,Q,Se,ie);else if(Ge=b(E),typeof Ge=="function")for(E=Ge.call(E),Ge=0;!(I=E.next()).done;)I=I.value,Se=Ut+ot(I,Ge++),he+=rt(I,V,Q,Se,ie);else if(Se==="object"){if(typeof E.then=="function")return rt(it(E),V,Q,I,ie);throw V=String(E),Error("Objects are not valid as a React child (found: "+(V==="[object Object]"?"object with keys {"+Object.keys(E).join(", ")+"}":V)+"). If you meant to render a collection of children, use an array instead.")}return he}function B(E,V,Q){if(E==null)return E;var I=[],ie=0;return rt(E,I,"","",function(Se){return V.call(Q,Se,ie++)}),I}function Y(E){if(E._status===-1){var V=E._result;V=V(),V.then(function(Q){(E._status===0||E._status===-1)&&(E._status=1,E._result=Q)},function(Q){(E._status===0||E._status===-1)&&(E._status=2,E._result=Q)}),E._status===-1&&(E._status=0,E._result=V)}if(E._status===1)return E._result.default;throw E._result}var ne=typeof reportError=="function"?reportError:function(E){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var V=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof E=="object"&&E!==null&&typeof E.message=="string"?String(E.message):String(E),error:E});if(!window.dispatchEvent(V))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",E);return}console.error(E)};function ke(){}return me.Children={map:B,forEach:function(E,V,Q){B(E,function(){V.apply(this,arguments)},Q)},count:function(E){var V=0;return B(E,function(){V++}),V},toArray:function(E){return B(E,function(V){return V})||[]},only:function(E){if(!ee(E))throw Error("React.Children.only expected to receive a single React element child.");return E}},me.Component=U,me.Fragment=i,me.Profiler=l,me.PureComponent=L,me.StrictMode=a,me.Suspense=m,me.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=F,me.__COMPILER_RUNTIME={__proto__:null,c:function(E){return F.H.useMemoCache(E)}},me.cache=function(E){return function(){return E.apply(null,arguments)}},me.cloneElement=function(E,V,Q){if(E==null)throw Error("The argument must be a React element, but you passed "+E+".");var I=N({},E.props),ie=E.key,Se=void 0;if(V!=null)for(he in V.ref!==void 0&&(Se=void 0),V.key!==void 0&&(ie=""+V.key),V)!pe.call(V,he)||he==="key"||he==="__self"||he==="__source"||he==="ref"&&V.ref===void 0||(I[he]=V[he]);var he=arguments.length-2;if(he===1)I.children=Q;else if(1<he){for(var Ut=Array(he),Ge=0;Ge<he;Ge++)Ut[Ge]=arguments[Ge+2];I.children=Ut}return fe(E.type,ie,void 0,void 0,Se,I)},me.createContext=function(E){return E={$$typeof:f,_currentValue:E,_currentValue2:E,_threadCount:0,Provider:null,Consumer:null},E.Provider=E,E.Consumer={$$typeof:u,_context:E},E},me.createElement=function(E,V,Q){var I,ie={},Se=null;if(V!=null)for(I in V.key!==void 0&&(Se=""+V.key),V)pe.call(V,I)&&I!=="key"&&I!=="__self"&&I!=="__source"&&(ie[I]=V[I]);var he=arguments.length-2;if(he===1)ie.children=Q;else if(1<he){for(var Ut=Array(he),Ge=0;Ge<he;Ge++)Ut[Ge]=arguments[Ge+2];ie.children=Ut}if(E&&E.defaultProps)for(I in he=E.defaultProps,he)ie[I]===void 0&&(ie[I]=he[I]);return fe(E,Se,void 0,void 0,null,ie)},me.createRef=function(){return{current:null}},me.forwardRef=function(E){return{$$typeof:d,render:E}},me.isValidElement=ee,me.lazy=function(E){return{$$typeof:g,_payload:{_status:-1,_result:E},_init:Y}},me.memo=function(E,V){return{$$typeof:p,type:E,compare:V===void 0?null:V}},me.startTransition=function(E){var V=F.T,Q={};F.T=Q;try{var I=E(),ie=F.S;ie!==null&&ie(Q,I),typeof I=="object"&&I!==null&&typeof I.then=="function"&&I.then(ke,ne)}catch(Se){ne(Se)}finally{F.T=V}},me.unstable_useCacheRefresh=function(){return F.H.useCacheRefresh()},me.use=function(E){return F.H.use(E)},me.useActionState=function(E,V,Q){return F.H.useActionState(E,V,Q)},me.useCallback=function(E,V){return F.H.useCallback(E,V)},me.useContext=function(E){return F.H.useContext(E)},me.useDebugValue=function(){},me.useDeferredValue=function(E,V){return F.H.useDeferredValue(E,V)},me.useEffect=function(E,V,Q){var I=F.H;if(typeof Q=="function")throw Error("useEffect CRUD overload is not enabled in this build of React.");return I.useEffect(E,V)},me.useId=function(){return F.H.useId()},me.useImperativeHandle=function(E,V,Q){return F.H.useImperativeHandle(E,V,Q)},me.useInsertionEffect=function(E,V){return F.H.useInsertionEffect(E,V)},me.useLayoutEffect=function(E,V){return F.H.useLayoutEffect(E,V)},me.useMemo=function(E,V){return F.H.useMemo(E,V)},me.useOptimistic=function(E,V){return F.H.useOptimistic(E,V)},me.useReducer=function(E,V,Q){return F.H.useReducer(E,V,Q)},me.useRef=function(E){return F.H.useRef(E)},me.useState=function(E){return F.H.useState(E)},me.useSyncExternalStore=function(E,V,Q){return F.H.useSyncExternalStore(E,V,Q)},me.useTransition=function(){return F.H.useTransition()},me.version="19.1.0",me}var yy;function md(){return yy||(yy=1,gf.exports=ON()),gf.exports}var A=md();const Bf=Zv(A),jN=(t,n,i,a)=>{var u,f,d,m;const l=[i,{code:n,...a||{}}];if((f=(u=t==null?void 0:t.services)==null?void 0:u.logger)!=null&&f.forward)return t.services.logger.forward(l,"warn","react-i18next::",!0);Qi(l[0])&&(l[0]=`react-i18next:: ${l[0]}`),(m=(d=t==null?void 0:t.services)==null?void 0:d.logger)!=null&&m.warn?t.services.logger.warn(...l):console!=null&&console.warn&&console.warn(...l)},vy={},_f=(t,n,i,a)=>{Qi(i)&&vy[i]||(Qi(i)&&(vy[i]=new Date),jN(t,n,i,a))},Xv=(t,n)=>()=>{if(t.isInitialized)n();else{const i=()=>{setTimeout(()=>{t.off("initialized",i)},0),n()};t.on("initialized",i)}},qf=(t,n,i)=>{t.loadNamespaces(n,Xv(t,i))},by=(t,n,i,a)=>{if(Qi(i)&&(i=[i]),t.options.preload&&t.options.preload.indexOf(n)>-1)return qf(t,i,a);i.forEach(l=>{t.options.ns.indexOf(l)<0&&t.options.ns.push(l)}),t.loadLanguages(n,Xv(t,a))},DN=(t,n,i={})=>!n.languages||!n.languages.length?(_f(n,"NO_LANGUAGES","i18n.languages were undefined or empty",{languages:n.languages}),!0):n.hasLoadedNamespace(t,{lng:i.lng,precheck:(a,l)=>{var u;if(((u=i.bindI18n)==null?void 0:u.indexOf("languageChanging"))>-1&&a.services.backendConnector.backend&&a.isLanguageChangingTo&&!l(a.isLanguageChangingTo,t))return!1}}),Qi=t=>typeof t=="string",MN=t=>typeof t=="object"&&t!==null,LN=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,zN={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"',"&nbsp;":" ","&#160;":" ","&copy;":"©","&#169;":"©","&reg;":"®","&#174;":"®","&hellip;":"…","&#8230;":"…","&#x2F;":"/","&#47;":"/"},UN=t=>zN[t],BN=t=>t.replace(LN,UN);let Kf={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:BN};const _N=(t={})=>{Kf={...Kf,...t}},qN=()=>Kf;let Pv;const KN=t=>{Pv=t},VN=()=>Pv,HN={type:"3rdParty",init(t){_N(t.options.react),KN(t)}},GN=A.createContext();class JN{constructor(){this.usedNamespaces={}}addUsedNamespaces(n){n.forEach(i=>{this.usedNamespaces[i]||(this.usedNamespaces[i]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}const YN=(t,n)=>{const i=A.useRef();return A.useEffect(()=>{i.current=t},[t,n]),i.current},Wv=(t,n,i,a)=>t.getFixedT(n,i,a),IN=(t,n,i,a)=>A.useCallback(Wv(t,n,i,a),[t,n,i,a]),Ct=(t,n={})=>{var X,F,pe,fe;const{i18n:i}=n,{i18n:a,defaultNS:l}=A.useContext(GN)||{},u=i||a||VN();if(u&&!u.reportNamespaces&&(u.reportNamespaces=new JN),!u){_f(u,"NO_I18NEXT_INSTANCE","useTranslation: You will need to pass in an i18next instance by using initReactI18next");const re=(oe,xe)=>Qi(xe)?xe:MN(xe)&&Qi(xe.defaultValue)?xe.defaultValue:Array.isArray(oe)?oe[oe.length-1]:oe,ee=[re,{},!1];return ee.t=re,ee.i18n={},ee.ready=!1,ee}(X=u.options.react)!=null&&X.wait&&_f(u,"DEPRECATED_OPTION","useTranslation: It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");const f={...qN(),...u.options.react,...n},{useSuspense:d,keyPrefix:m}=f;let p=l||((F=u.options)==null?void 0:F.defaultNS);p=Qi(p)?[p]:p||["translation"],(fe=(pe=u.reportNamespaces).addUsedNamespaces)==null||fe.call(pe,p);const g=(u.isInitialized||u.initializedStoreOnce)&&p.every(re=>DN(re,u,f)),v=IN(u,n.lng||null,f.nsMode==="fallback"?p:p[0],m),b=()=>v,R=()=>Wv(u,n.lng||null,f.nsMode==="fallback"?p:p[0],m),[N,O]=A.useState(b);let U=p.join();n.lng&&(U=`${n.lng}${U}`);const z=YN(U),L=A.useRef(!0);A.useEffect(()=>{const{bindI18n:re,bindI18nStore:ee}=f;L.current=!0,!g&&!d&&(n.lng?by(u,n.lng,p,()=>{L.current&&O(R)}):qf(u,p,()=>{L.current&&O(R)})),g&&z&&z!==U&&L.current&&O(R);const oe=()=>{L.current&&O(R)};return re&&(u==null||u.on(re,oe)),ee&&(u==null||u.store.on(ee,oe)),()=>{L.current=!1,u&&(re==null||re.split(" ").forEach(xe=>u.off(xe,oe))),ee&&u&&ee.split(" ").forEach(xe=>u.store.off(xe,oe))}},[u,U]),A.useEffect(()=>{L.current&&g&&O(b)},[u,m,g]);const G=[N,u,g];if(G.t=N,G.i18n=u,G.ready=g,g||!g&&!d)return G;throw new Promise(re=>{n.lng?by(u,n.lng,p,()=>re()):qf(u,p,()=>re())})},ZN="ParoiCMS Site Generator",QN="<p>Describe here the data structure of your website: what types of pages it has and in which sections. In a page type, it is also possible to describe lists of sub-parts.</p><p>Supported languages: English, French.</p>",FN="Create a website about… It will include a blog section, a list of pages, and a dedicated section about… that itself contains the following sub-sections: … The home page should contain an image carousel and a list of subparts, each containing an image and a text.",XN="Add a new text field to the page…",PN="Modify the Site Schema",WN="Create a Site Schema",ek="Generate the website",tk="Generate site with sample data (recommended)",nk="Generate an empty site",ik="Open the admin-ui",rk="Open the site",ak="Generated Schema",sk="Tree View",lk="Site Schema",ok="Node Types",uk="Labels",ck="Select language",fk="Explanations",dk="Current Activity",hk="An error occurred: {{ message }}",pk="An error occurred",mk="Start Again",gk="Step {{stepNumber}}: {{kind}}",yk="This step is in progress…",vk="This step failed.",bk="This step had no effect.",xk="No session data available",Sk="Step not found",wk="Welcome to ParoiCMS Site Generator",Nk="Close and start again",kk="Reset Schema",Rk="unknown error",Ek="Create New Site",Ak="Generating your site…",$k="The site is generated",Ck="Email:",Tk="Password:",Ok="I agree",jk="You are about to generate your website.",Dk="Cancel",Mk="Confirm",Lk="Site URL:",zk="Admin URL:",Uk="Copy all information to clipboard",Bk="<p>Welcome to the ParoiCMS Site Generator tool. This tool helps you create a new website with just a few steps.</p><p>To get started, please verify you're human by completing the CAPTCHA below.</p>",_k="Initial Schema Creation",qk="Schema Update",Kk="Site Generation",Vk={initial1:"Analyzing your request for site structure…",initial2:"Choosing from predefined fields…",updating1:"Analyzing your update request…",updating2:"Updating schema structure with changes…",generatingSite:"Building your website…",generatingContent:"Creating sample content for your site…"},Hk="Login Email",Gk="Login Password",Jk="Generated Site",Yk="Your session has expired. Please refresh the page to start a new session.",Ik="Failed to submit your prompt. Please try again.",Zk="Failed to generate the site. Please try again.",Qk='The source code of this generator is available <a href="https://gitlab.com/paroi/opensource/paroicms/-/tree/main/plugins/site-generator-plugin?ref_type=heads" target="_blank">on GitLab</a> — <a href="https://www.paroicms.org/en" target="_blank">ParoiCMS</a> — Contact me <a href="https://paroi.tech/en" target="_blank">here</a>.',Fk="Extend your session",Xk="Failed to refresh your session. Please try again.",Pk="Error connecting to server. Please check your connection and try again.",Wk="Tip: If you want to start over, open the generator in a new tab and close this one.",eR={title:ZN,startInstruction:QN,createPromptPlaceholder:FN,updatePromptPlaceholder:XN,modifySchema:PN,createSchema:WN,generateTheWebsite:ek,generateSiteWithData:tk,generateEmptySite:nk,administration:ik,viewSite:rk,generatedSchema:ak,treeView:sk,siteSchema:lk,nodeTypes:ok,labels:uk,languageSelector:ck,explanation:fk,currentActivity:dk,errorOccurred:hk,unknownErrorOccurred:pk,startAgain:mk,stepTitle:gk,stepPending:yk,stepFailed:vk,stepNoEffect:bk,noSessionData:xk,stepNotFound:Sk,welcomeTitle:wk,reset:Nk,resetSchema:kk,unknownError:Rk,createNewSite:Ek,generatingSite:Ak,siteGenerated:$k,email:Ck,password:Tk,agree:Ok,aboutToGenerateWebsite:jk,cancel:Dk,confirm:Mk,siteUrl:Lk,adminUrl:zk,copyToClipboard:Uk,introduction:Bk,initialSchema:_k,updateSchema:qk,generateSite:Kk,activity:Vk,loginEmail:Hk,loginPassword:Gk,generatedSite:Jk,sessionExpired:Yk,promptSubmissionFailed:Ik,generationFailed:Zk,footerText:Qk,extendYourSession:Fk,sessionRenewalFailed:Xk,errorConnectingToServer:Pk,newTabRestartMessage:Wk},tR="ParoiCMS - Générateur de Site",nR="<p>Décrivez ici la structure des données de votre site web : quels types de pages, dans quelles rubriques. Il est également possible de décrire des listes de sous-parties de pages.</p><p>Langages autorisés : Français, Anglais.</p>",iR="Génère un site web à propos de… Il contiendra une rubrique blog, une liste de pages, une rubrique dédiée à… contenant elle-même les sous-rubriques suivantes : … La page d'accueil doit contenir un carrousel d'images, et une liste de sous-parties contenant chacune une image et un texte.",rR="Ajoute un nouveau champ texte à la page…",aR="Modifier le schéma du site",sR="Créer un schéma de site",lR="Générer le site web",oR="Générer le site avec des données d'exemple (recommandé)",uR="Générer un site vide",cR="Ouvrir l'espace d'administration du site",fR="Ouvrir le site",dR="Schéma généré",hR="Arborescence",pR="Schéma du site",mR="Types de nœuds",gR="Libellés",yR="Sélectionner la langue",vR="Explications",bR="Activité en cours",xR="Une erreur est survenue : {{ message }}",SR="Une erreur est survenue",wR="Recommencer",NR="Étape {{stepNumber}} : {{kind}}",kR="Cette étape est en cours…",RR="Cette étape a échoué.",ER="Cette étape n'a eu aucun effet.",AR="Données de session non disponibles",$R="Étape introuvable",CR="Bienvenue sur le générateur de site ParoiCMS",TR="Fermer et réinitialiser",OR="Réinitialiser le schéma",jR="erreur inconnue",DR="Créer un nouveau site",MR="Génération de votre site…",LR="Le site est généré",zR="Email :",UR="Mot de passe :",BR="J'accepte",_R="Vous êtes sur le point de générer votre site web.",qR="Annuler",KR="Confirmer",VR="URL du site :",HR="URL d'admin :",GR="Copier toutes les informations dans le presse-papier",JR="<p>Bienvenue sur l'outil de génération de site ParoiCMS. Cet outil vous aide à créer un nouveau site web en quelques étapes.</p><p>Pour commencer, veuillez vérifier que vous êtes humain en complétant le CAPTCHA ci-dessous.</p>",YR="Création du schéma initial",IR="Mise à jour du schéma",ZR="Génération du site",QR={initial1:"Analyse de votre demande pour la structure du site…",initial2:"Choix parmi les champs prédéfinis…",updating1:"Analyse de votre demande de mise à jour…",updating2:"Mise à jour de la structure du schéma…",generatingSite:"Construction de votre site web…",generatingContent:"Création de contenu exemple pour votre site…"},FR="Email de connexion",XR="Mot de passe",PR="Site généré",WR="Votre session a expiré. Veuillez rafraîchir la page pour démarrer une nouvelle session.",eE="Échec de l'envoi de votre demande. Veuillez réessayer.",tE="Échec de la génération du site. Veuillez réessayer.",nE='Le code source de ce générateur est disponible <a href="https://gitlab.com/paroi/opensource/paroicms/-/tree/main/plugins/site-generator-plugin?ref_type=heads" target="_blank">sur GitLab</a> — <a href="https://www.paroicms.org/fr" target="_blank">ParoiCMS</a> — Contactez-moi <a href="https://paroi.tech/fr" target="_blank">ici</a>.',iE="Prolonger votre session",rE="Échec du renouvellement de votre session. Veuillez réessayer.",aE="Erreur de connexion au serveur. Veuillez vérifier votre connexion et réessayer.",sE="Astuce : si vous souhaitez repartir de zéro, ouvrez le générateur dans un nouvel onglet et fermez celui-ci.",lE={title:tR,startInstruction:nR,createPromptPlaceholder:iR,updatePromptPlaceholder:rR,modifySchema:aR,createSchema:sR,generateTheWebsite:lR,generateSiteWithData:oR,generateEmptySite:uR,administration:cR,viewSite:fR,generatedSchema:dR,treeView:hR,siteSchema:pR,nodeTypes:mR,labels:gR,languageSelector:yR,explanation:vR,currentActivity:bR,errorOccurred:xR,unknownErrorOccurred:SR,startAgain:wR,stepTitle:NR,stepPending:kR,stepFailed:RR,stepNoEffect:ER,noSessionData:AR,stepNotFound:$R,welcomeTitle:CR,reset:TR,resetSchema:OR,unknownError:jR,createNewSite:DR,generatingSite:MR,siteGenerated:LR,email:zR,password:UR,agree:BR,aboutToGenerateWebsite:_R,cancel:qR,confirm:KR,siteUrl:VR,adminUrl:HR,copyToClipboard:GR,introduction:JR,initialSchema:YR,updateSchema:IR,generateSite:ZR,activity:QR,loginEmail:FR,loginPassword:XR,generatedSite:PR,sessionExpired:WR,promptSubmissionFailed:eE,generationFailed:tE,footerText:nE,extendYourSession:iE,sessionRenewalFailed:rE,errorConnectingToServer:aE,newTabRestartMessage:sE},oE=`<p>Welcome!</p>
17
+ */var gy;function ON(){if(gy)return me;gy=1;var t=Symbol.for("react.transitional.element"),n=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),l=Symbol.for("react.profiler"),u=Symbol.for("react.consumer"),f=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),m=Symbol.for("react.suspense"),p=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),v=Symbol.iterator;function b(E){return E===null||typeof E!="object"?null:(E=v&&E[v]||E["@@iterator"],typeof E=="function"?E:null)}var R={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},N=Object.assign,O={};function U(E,V,Q){this.props=E,this.context=V,this.refs=O,this.updater=Q||R}U.prototype.isReactComponent={},U.prototype.setState=function(E,V){if(typeof E!="object"&&typeof E!="function"&&E!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,E,V,"setState")},U.prototype.forceUpdate=function(E){this.updater.enqueueForceUpdate(this,E,"forceUpdate")};function z(){}z.prototype=U.prototype;function L(E,V,Q){this.props=E,this.context=V,this.refs=O,this.updater=Q||R}var G=L.prototype=new z;G.constructor=L,N(G,U.prototype),G.isPureReactComponent=!0;var X=Array.isArray,F={H:null,A:null,T:null,S:null,V:null},pe=Object.prototype.hasOwnProperty;function fe(E,V,Q,I,ie,Se){return Q=Se.ref,{$$typeof:t,type:E,key:V,ref:Q!==void 0?Q:null,props:Se}}function re(E,V){return fe(E.type,V,void 0,void 0,void 0,E.props)}function ee(E){return typeof E=="object"&&E!==null&&E.$$typeof===t}function oe(E){var V={"=":"=0",":":"=2"};return"$"+E.replace(/[=:]/g,function(Q){return V[Q]})}var xe=/\/+/g;function ot(E,V){return typeof E=="object"&&E!==null&&E.key!=null?oe(""+E.key):V.toString(36)}function ut(){}function it(E){switch(E.status){case"fulfilled":return E.value;case"rejected":throw E.reason;default:switch(typeof E.status=="string"?E.then(ut,ut):(E.status="pending",E.then(function(V){E.status==="pending"&&(E.status="fulfilled",E.value=V)},function(V){E.status==="pending"&&(E.status="rejected",E.reason=V)})),E.status){case"fulfilled":return E.value;case"rejected":throw E.reason}}throw E}function rt(E,V,Q,I,ie){var Se=typeof E;(Se==="undefined"||Se==="boolean")&&(E=null);var he=!1;if(E===null)he=!0;else switch(Se){case"bigint":case"string":case"number":he=!0;break;case"object":switch(E.$$typeof){case t:case n:he=!0;break;case g:return he=E._init,rt(he(E._payload),V,Q,I,ie)}}if(he)return ie=ie(E),he=I===""?"."+ot(E,0):I,X(ie)?(Q="",he!=null&&(Q=he.replace(xe,"$&/")+"/"),rt(ie,V,Q,"",function(Fn){return Fn})):ie!=null&&(ee(ie)&&(ie=re(ie,Q+(ie.key==null||E&&E.key===ie.key?"":(""+ie.key).replace(xe,"$&/")+"/")+he)),V.push(ie)),1;he=0;var Ut=I===""?".":I+":";if(X(E))for(var Ge=0;Ge<E.length;Ge++)I=E[Ge],Se=Ut+ot(I,Ge),he+=rt(I,V,Q,Se,ie);else if(Ge=b(E),typeof Ge=="function")for(E=Ge.call(E),Ge=0;!(I=E.next()).done;)I=I.value,Se=Ut+ot(I,Ge++),he+=rt(I,V,Q,Se,ie);else if(Se==="object"){if(typeof E.then=="function")return rt(it(E),V,Q,I,ie);throw V=String(E),Error("Objects are not valid as a React child (found: "+(V==="[object Object]"?"object with keys {"+Object.keys(E).join(", ")+"}":V)+"). If you meant to render a collection of children, use an array instead.")}return he}function B(E,V,Q){if(E==null)return E;var I=[],ie=0;return rt(E,I,"","",function(Se){return V.call(Q,Se,ie++)}),I}function Y(E){if(E._status===-1){var V=E._result;V=V(),V.then(function(Q){(E._status===0||E._status===-1)&&(E._status=1,E._result=Q)},function(Q){(E._status===0||E._status===-1)&&(E._status=2,E._result=Q)}),E._status===-1&&(E._status=0,E._result=V)}if(E._status===1)return E._result.default;throw E._result}var ne=typeof reportError=="function"?reportError:function(E){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var V=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof E=="object"&&E!==null&&typeof E.message=="string"?String(E.message):String(E),error:E});if(!window.dispatchEvent(V))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",E);return}console.error(E)};function ke(){}return me.Children={map:B,forEach:function(E,V,Q){B(E,function(){V.apply(this,arguments)},Q)},count:function(E){var V=0;return B(E,function(){V++}),V},toArray:function(E){return B(E,function(V){return V})||[]},only:function(E){if(!ee(E))throw Error("React.Children.only expected to receive a single React element child.");return E}},me.Component=U,me.Fragment=i,me.Profiler=l,me.PureComponent=L,me.StrictMode=a,me.Suspense=m,me.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=F,me.__COMPILER_RUNTIME={__proto__:null,c:function(E){return F.H.useMemoCache(E)}},me.cache=function(E){return function(){return E.apply(null,arguments)}},me.cloneElement=function(E,V,Q){if(E==null)throw Error("The argument must be a React element, but you passed "+E+".");var I=N({},E.props),ie=E.key,Se=void 0;if(V!=null)for(he in V.ref!==void 0&&(Se=void 0),V.key!==void 0&&(ie=""+V.key),V)!pe.call(V,he)||he==="key"||he==="__self"||he==="__source"||he==="ref"&&V.ref===void 0||(I[he]=V[he]);var he=arguments.length-2;if(he===1)I.children=Q;else if(1<he){for(var Ut=Array(he),Ge=0;Ge<he;Ge++)Ut[Ge]=arguments[Ge+2];I.children=Ut}return fe(E.type,ie,void 0,void 0,Se,I)},me.createContext=function(E){return E={$$typeof:f,_currentValue:E,_currentValue2:E,_threadCount:0,Provider:null,Consumer:null},E.Provider=E,E.Consumer={$$typeof:u,_context:E},E},me.createElement=function(E,V,Q){var I,ie={},Se=null;if(V!=null)for(I in V.key!==void 0&&(Se=""+V.key),V)pe.call(V,I)&&I!=="key"&&I!=="__self"&&I!=="__source"&&(ie[I]=V[I]);var he=arguments.length-2;if(he===1)ie.children=Q;else if(1<he){for(var Ut=Array(he),Ge=0;Ge<he;Ge++)Ut[Ge]=arguments[Ge+2];ie.children=Ut}if(E&&E.defaultProps)for(I in he=E.defaultProps,he)ie[I]===void 0&&(ie[I]=he[I]);return fe(E,Se,void 0,void 0,null,ie)},me.createRef=function(){return{current:null}},me.forwardRef=function(E){return{$$typeof:d,render:E}},me.isValidElement=ee,me.lazy=function(E){return{$$typeof:g,_payload:{_status:-1,_result:E},_init:Y}},me.memo=function(E,V){return{$$typeof:p,type:E,compare:V===void 0?null:V}},me.startTransition=function(E){var V=F.T,Q={};F.T=Q;try{var I=E(),ie=F.S;ie!==null&&ie(Q,I),typeof I=="object"&&I!==null&&typeof I.then=="function"&&I.then(ke,ne)}catch(Se){ne(Se)}finally{F.T=V}},me.unstable_useCacheRefresh=function(){return F.H.useCacheRefresh()},me.use=function(E){return F.H.use(E)},me.useActionState=function(E,V,Q){return F.H.useActionState(E,V,Q)},me.useCallback=function(E,V){return F.H.useCallback(E,V)},me.useContext=function(E){return F.H.useContext(E)},me.useDebugValue=function(){},me.useDeferredValue=function(E,V){return F.H.useDeferredValue(E,V)},me.useEffect=function(E,V,Q){var I=F.H;if(typeof Q=="function")throw Error("useEffect CRUD overload is not enabled in this build of React.");return I.useEffect(E,V)},me.useId=function(){return F.H.useId()},me.useImperativeHandle=function(E,V,Q){return F.H.useImperativeHandle(E,V,Q)},me.useInsertionEffect=function(E,V){return F.H.useInsertionEffect(E,V)},me.useLayoutEffect=function(E,V){return F.H.useLayoutEffect(E,V)},me.useMemo=function(E,V){return F.H.useMemo(E,V)},me.useOptimistic=function(E,V){return F.H.useOptimistic(E,V)},me.useReducer=function(E,V,Q){return F.H.useReducer(E,V,Q)},me.useRef=function(E){return F.H.useRef(E)},me.useState=function(E){return F.H.useState(E)},me.useSyncExternalStore=function(E,V,Q){return F.H.useSyncExternalStore(E,V,Q)},me.useTransition=function(){return F.H.useTransition()},me.version="19.1.0",me}var yy;function md(){return yy||(yy=1,gf.exports=ON()),gf.exports}var A=md();const Bf=Zv(A),jN=(t,n,i,a)=>{var u,f,d,m;const l=[i,{code:n,...a||{}}];if((f=(u=t==null?void 0:t.services)==null?void 0:u.logger)!=null&&f.forward)return t.services.logger.forward(l,"warn","react-i18next::",!0);Qi(l[0])&&(l[0]=`react-i18next:: ${l[0]}`),(m=(d=t==null?void 0:t.services)==null?void 0:d.logger)!=null&&m.warn?t.services.logger.warn(...l):console!=null&&console.warn&&console.warn(...l)},vy={},_f=(t,n,i,a)=>{Qi(i)&&vy[i]||(Qi(i)&&(vy[i]=new Date),jN(t,n,i,a))},Xv=(t,n)=>()=>{if(t.isInitialized)n();else{const i=()=>{setTimeout(()=>{t.off("initialized",i)},0),n()};t.on("initialized",i)}},qf=(t,n,i)=>{t.loadNamespaces(n,Xv(t,i))},by=(t,n,i,a)=>{if(Qi(i)&&(i=[i]),t.options.preload&&t.options.preload.indexOf(n)>-1)return qf(t,i,a);i.forEach(l=>{t.options.ns.indexOf(l)<0&&t.options.ns.push(l)}),t.loadLanguages(n,Xv(t,a))},DN=(t,n,i={})=>!n.languages||!n.languages.length?(_f(n,"NO_LANGUAGES","i18n.languages were undefined or empty",{languages:n.languages}),!0):n.hasLoadedNamespace(t,{lng:i.lng,precheck:(a,l)=>{var u;if(((u=i.bindI18n)==null?void 0:u.indexOf("languageChanging"))>-1&&a.services.backendConnector.backend&&a.isLanguageChangingTo&&!l(a.isLanguageChangingTo,t))return!1}}),Qi=t=>typeof t=="string",MN=t=>typeof t=="object"&&t!==null,LN=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,zN={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"',"&nbsp;":" ","&#160;":" ","&copy;":"©","&#169;":"©","&reg;":"®","&#174;":"®","&hellip;":"…","&#8230;":"…","&#x2F;":"/","&#47;":"/"},UN=t=>zN[t],BN=t=>t.replace(LN,UN);let Kf={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:BN};const _N=(t={})=>{Kf={...Kf,...t}},qN=()=>Kf;let Pv;const KN=t=>{Pv=t},VN=()=>Pv,HN={type:"3rdParty",init(t){_N(t.options.react),KN(t)}},GN=A.createContext();class JN{constructor(){this.usedNamespaces={}}addUsedNamespaces(n){n.forEach(i=>{this.usedNamespaces[i]||(this.usedNamespaces[i]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}const YN=(t,n)=>{const i=A.useRef();return A.useEffect(()=>{i.current=t},[t,n]),i.current},Wv=(t,n,i,a)=>t.getFixedT(n,i,a),IN=(t,n,i,a)=>A.useCallback(Wv(t,n,i,a),[t,n,i,a]),Ct=(t,n={})=>{var X,F,pe,fe;const{i18n:i}=n,{i18n:a,defaultNS:l}=A.useContext(GN)||{},u=i||a||VN();if(u&&!u.reportNamespaces&&(u.reportNamespaces=new JN),!u){_f(u,"NO_I18NEXT_INSTANCE","useTranslation: You will need to pass in an i18next instance by using initReactI18next");const re=(oe,xe)=>Qi(xe)?xe:MN(xe)&&Qi(xe.defaultValue)?xe.defaultValue:Array.isArray(oe)?oe[oe.length-1]:oe,ee=[re,{},!1];return ee.t=re,ee.i18n={},ee.ready=!1,ee}(X=u.options.react)!=null&&X.wait&&_f(u,"DEPRECATED_OPTION","useTranslation: It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");const f={...qN(),...u.options.react,...n},{useSuspense:d,keyPrefix:m}=f;let p=l||((F=u.options)==null?void 0:F.defaultNS);p=Qi(p)?[p]:p||["translation"],(fe=(pe=u.reportNamespaces).addUsedNamespaces)==null||fe.call(pe,p);const g=(u.isInitialized||u.initializedStoreOnce)&&p.every(re=>DN(re,u,f)),v=IN(u,n.lng||null,f.nsMode==="fallback"?p:p[0],m),b=()=>v,R=()=>Wv(u,n.lng||null,f.nsMode==="fallback"?p:p[0],m),[N,O]=A.useState(b);let U=p.join();n.lng&&(U=`${n.lng}${U}`);const z=YN(U),L=A.useRef(!0);A.useEffect(()=>{const{bindI18n:re,bindI18nStore:ee}=f;L.current=!0,!g&&!d&&(n.lng?by(u,n.lng,p,()=>{L.current&&O(R)}):qf(u,p,()=>{L.current&&O(R)})),g&&z&&z!==U&&L.current&&O(R);const oe=()=>{L.current&&O(R)};return re&&(u==null||u.on(re,oe)),ee&&(u==null||u.store.on(ee,oe)),()=>{L.current=!1,u&&(re==null||re.split(" ").forEach(xe=>u.off(xe,oe))),ee&&u&&ee.split(" ").forEach(xe=>u.store.off(xe,oe))}},[u,U]),A.useEffect(()=>{L.current&&g&&O(b)},[u,m,g]);const G=[N,u,g];if(G.t=N,G.i18n=u,G.ready=g,g||!g&&!d)return G;throw new Promise(re=>{n.lng?by(u,n.lng,p,()=>re()):qf(u,p,()=>re())})},ZN="ParoiCMS Site Generator",QN="<p>Describe here the data structure of your website: what types of pages it has and in which sections. In a page type, it is also possible to describe lists of sub-parts.</p>",FN="Create a website about… It will include a blog section, a list of pages, and a dedicated section about… that itself contains the following sub-sections: … The home page should contain an image carousel and a list of subparts, each containing an image and a text.",XN="Add a new text field to the page…",PN="Modify the Site Schema",WN="Create a Site Schema",ek="Generate the website",tk="Generate site with sample data (recommended)",nk="Generate an empty site",ik="Open the admin-ui",rk="Open the site",ak="Generated Schema",sk="Tree View",lk="Site Schema",ok="Node Types",uk="Labels",ck="Select language",fk="Explanations",dk="Current Activity",hk="An error occurred: {{ message }}",pk="An error occurred",mk="Start Again",gk="Step {{stepNumber}}: {{kind}}",yk="This step is in progress…",vk="This step failed.",bk="This step had no effect.",xk="No session data available",Sk="Step not found",wk="Welcome to ParoiCMS Site Generator",Nk="Close and start again",kk="Reset Schema",Rk="unknown error",Ek="Create New Site",Ak="Generating your site…",$k="The site is generated",Ck="Email:",Tk="Password:",Ok="I agree",jk="You are about to generate your website.",Dk="Cancel",Mk="Confirm",Lk="Site URL:",zk="Admin URL:",Uk="Copy all information to clipboard",Bk="<p>Welcome to the ParoiCMS Site Generator tool. This tool helps you create a new website with just a few steps.</p><p>To get started, please verify you're human by completing the CAPTCHA below.</p>",_k="Initial Schema Creation",qk="Schema Update",Kk="Site Generation",Vk={initial1:"Analyzing your request for site structure…",initial2:"Choosing from predefined fields…",updating1:"Analyzing your update request…",updating2:"Updating schema structure with changes…",generatingSite:"Building your website…",generatingContent:"Creating sample content for your site…"},Hk="Login Email",Gk="Login Password",Jk="Generated Site",Yk="Your session has expired. Please refresh the page to start a new session.",Ik="Failed to submit your prompt. Please try again.",Zk="Failed to generate the site. Please try again.",Qk='The source code of this generator is available <a href="https://gitlab.com/paroi/opensource/paroicms/-/tree/main/plugins/site-generator-plugin?ref_type=heads" target="_blank">on GitLab</a> — <a href="https://www.paroicms.org/en" target="_blank">ParoiCMS</a> — Contact me <a href="https://paroi.tech/en" target="_blank">here</a>.',Fk="Extend your session",Xk="Failed to refresh your session. Please try again.",Pk="Error connecting to server. Please check your connection and try again.",Wk="Tip: If you want to start over, open the generator in a new tab and close this one.",eR={title:ZN,startInstruction:QN,createPromptPlaceholder:FN,updatePromptPlaceholder:XN,modifySchema:PN,createSchema:WN,generateTheWebsite:ek,generateSiteWithData:tk,generateEmptySite:nk,administration:ik,viewSite:rk,generatedSchema:ak,treeView:sk,siteSchema:lk,nodeTypes:ok,labels:uk,languageSelector:ck,explanation:fk,currentActivity:dk,errorOccurred:hk,unknownErrorOccurred:pk,startAgain:mk,stepTitle:gk,stepPending:yk,stepFailed:vk,stepNoEffect:bk,noSessionData:xk,stepNotFound:Sk,welcomeTitle:wk,reset:Nk,resetSchema:kk,unknownError:Rk,createNewSite:Ek,generatingSite:Ak,siteGenerated:$k,email:Ck,password:Tk,agree:Ok,aboutToGenerateWebsite:jk,cancel:Dk,confirm:Mk,siteUrl:Lk,adminUrl:zk,copyToClipboard:Uk,introduction:Bk,initialSchema:_k,updateSchema:qk,generateSite:Kk,activity:Vk,loginEmail:Hk,loginPassword:Gk,generatedSite:Jk,sessionExpired:Yk,promptSubmissionFailed:Ik,generationFailed:Zk,footerText:Qk,extendYourSession:Fk,sessionRenewalFailed:Xk,errorConnectingToServer:Pk,newTabRestartMessage:Wk},tR="ParoiCMS - Générateur de Site",nR="<p>Décrivez ici la structure des données de votre site web : quels types de pages, dans quelles rubriques. Il est également possible de décrire des listes de sous-parties de pages.</p>",iR="Génère un site web à propos de… Il contiendra une rubrique blog, une liste de pages, une rubrique dédiée à… contenant elle-même les sous-rubriques suivantes : … La page d'accueil doit contenir un carrousel d'images, et une liste de sous-parties contenant chacune une image et un texte.",rR="Ajoute un nouveau champ texte à la page…",aR="Modifier le schéma du site",sR="Créer un schéma de site",lR="Générer le site web",oR="Générer le site avec des données d'exemple (recommandé)",uR="Générer un site vide",cR="Ouvrir l'espace d'administration du site",fR="Ouvrir le site",dR="Schéma généré",hR="Arborescence",pR="Schéma du site",mR="Types de nœuds",gR="Libellés",yR="Sélectionner la langue",vR="Explications",bR="Activité en cours",xR="Une erreur est survenue : {{ message }}",SR="Une erreur est survenue",wR="Recommencer",NR="Étape {{stepNumber}} : {{kind}}",kR="Cette étape est en cours…",RR="Cette étape a échoué.",ER="Cette étape n'a eu aucun effet.",AR="Données de session non disponibles",$R="Étape introuvable",CR="Bienvenue sur le générateur de site ParoiCMS",TR="Fermer et réinitialiser",OR="Réinitialiser le schéma",jR="erreur inconnue",DR="Créer un nouveau site",MR="Génération de votre site…",LR="Le site est généré",zR="Email :",UR="Mot de passe :",BR="J'accepte",_R="Vous êtes sur le point de générer votre site web.",qR="Annuler",KR="Confirmer",VR="URL du site :",HR="URL d'admin :",GR="Copier toutes les informations dans le presse-papier",JR="<p>Bienvenue sur l'outil de génération de site ParoiCMS. Cet outil vous aide à créer un nouveau site web en quelques étapes.</p><p>Pour commencer, veuillez vérifier que vous êtes humain en complétant le CAPTCHA ci-dessous.</p>",YR="Création du schéma initial",IR="Mise à jour du schéma",ZR="Génération du site",QR={initial1:"Analyse de votre demande pour la structure du site…",initial2:"Choix parmi les champs prédéfinis…",updating1:"Analyse de votre demande de mise à jour…",updating2:"Mise à jour de la structure du schéma…",generatingSite:"Construction de votre site web…",generatingContent:"Création de contenu exemple pour votre site…"},FR="Email de connexion",XR="Mot de passe",PR="Site généré",WR="Votre session a expiré. Veuillez rafraîchir la page pour démarrer une nouvelle session.",eE="Échec de l'envoi de votre demande. Veuillez réessayer.",tE="Échec de la génération du site. Veuillez réessayer.",nE='Le code source de ce générateur est disponible <a href="https://gitlab.com/paroi/opensource/paroicms/-/tree/main/plugins/site-generator-plugin?ref_type=heads" target="_blank">sur GitLab</a> — <a href="https://www.paroicms.org/fr" target="_blank">ParoiCMS</a> — Contactez-moi <a href="https://paroi.tech/fr" target="_blank">ici</a>.',iE="Prolonger votre session",rE="Échec du renouvellement de votre session. Veuillez réessayer.",aE="Erreur de connexion au serveur. Veuillez vérifier votre connexion et réessayer.",sE="Astuce : si vous souhaitez repartir de zéro, ouvrez le générateur dans un nouvel onglet et fermez celui-ci.",lE={title:tR,startInstruction:nR,createPromptPlaceholder:iR,updatePromptPlaceholder:rR,modifySchema:aR,createSchema:sR,generateTheWebsite:lR,generateSiteWithData:oR,generateEmptySite:uR,administration:cR,viewSite:fR,generatedSchema:dR,treeView:hR,siteSchema:pR,nodeTypes:mR,labels:gR,languageSelector:yR,explanation:vR,currentActivity:bR,errorOccurred:xR,unknownErrorOccurred:SR,startAgain:wR,stepTitle:NR,stepPending:kR,stepFailed:RR,stepNoEffect:ER,noSessionData:AR,stepNotFound:$R,welcomeTitle:CR,reset:TR,resetSchema:OR,unknownError:jR,createNewSite:DR,generatingSite:MR,siteGenerated:LR,email:zR,password:UR,agree:BR,aboutToGenerateWebsite:_R,cancel:qR,confirm:KR,siteUrl:VR,adminUrl:HR,copyToClipboard:GR,introduction:JR,initialSchema:YR,updateSchema:IR,generateSite:ZR,activity:QR,loginEmail:FR,loginPassword:XR,generatedSite:PR,sessionExpired:WR,promptSubmissionFailed:eE,generationFailed:tE,footerText:nE,extendYourSession:iE,sessionRenewalFailed:rE,errorConnectingToServer:aE,newTabRestartMessage:sE},oE=`<p>Welcome!</p>
18
18
  <p>ParoiCMS is a CMS for showcase websites. Its core feature is that you define the structure of your website. This tool will help you to do it.</p>
19
19
  <p>A session identifier will follow you on the tab of your browser, it will be deleted when you close the tab. However, your session data may be retained for debugging purposes.</p>`,uE=`<p>Bienvenue !</p>
20
20
  <p>ParoiCMS est un CMS pour sites vitrines. Sa fonctionnalité principale est que vous définissez la structure de votre site web. Le générateur vous aidera dans cette tâche.</p>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paroicms/site-generator-plugin",
3
- "version": "0.17.1",
3
+ "version": "0.19.0",
4
4
  "description": "ParoiCMS Site Generator Plugin",
5
5
  "keywords": [
6
6
  "paroicms",
@@ -45,11 +45,11 @@
45
45
  },
46
46
  "devDependencies": {
47
47
  "@paroi/use-async-effect": "~1.0.0",
48
- "@paroicms/connector": "0.39.1",
49
- "@paroicms/internal-anywhere-lib": "1.31.6",
50
- "@paroicms/public-admin-ui-lib": "0.26.6",
51
- "@paroicms/public-anywhere-lib": "0.28.0",
52
- "@paroicms/public-server-lib": "0.38.1",
48
+ "@paroicms/connector": "0.42.0",
49
+ "@paroicms/internal-anywhere-lib": "1.31.9",
50
+ "@paroicms/public-admin-ui-lib": "0.27.0",
51
+ "@paroicms/public-anywhere-lib": "0.30.0",
52
+ "@paroicms/public-server-lib": "0.39.0",
53
53
  "@paroicms/react-ui": "0.3.1",
54
54
  "@types/dom-speech-recognition": "^0.0.6",
55
55
  "@types/node": "~24.0.1",