feat(planning): grille hebdomadaire complète avec API et filtres

- Connexion API via proxy Angular (résolution CORS, base path /api)
- Import CSS ng-zorro global pour les modales et composants
- Filtres Camion/Show câblés sur l'affichage de la grille
- Camions affichés via TrucksService (linkés au show du même créneau)
- Panneau de détails : spectacles + camions du jour sélectionné
- Modale de création de spectacle stylisée avec fond et centrage
- Positionnement précis des events à la minute dans leur créneau
- Auto-scroll vers l'heure courante au chargement
- Ligne "maintenant" sur la colonne du jour actuel
- Régénération des services OpenAPI (nouveaux noms de types)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-27 20:36:03 +02:00
parent 150b97cd2e
commit 654b297e2e
3131 changed files with 149304 additions and 104334 deletions
+31 -86
View File
@@ -1,5 +1,4 @@
import * as checks from "./checks.js";
import * as registries from "./registries.js";
import * as schemas from "./schemas.js";
import * as util from "./util.js";
export function _string(Class, params) {
@@ -162,15 +161,6 @@ export function _ipv6(Class, params) {
...util.normalizeParams(params),
});
}
export function _mac(Class, params) {
return new Class({
type: "string",
format: "mac",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
export function _cidrv4(Class, params) {
return new Class({
type: "string",
@@ -617,10 +607,6 @@ export function _toLowerCase() {
export function _toUpperCase() {
return _overwrite((input) => input.toUpperCase());
}
// slugify
export function _slugify() {
return _overwrite((input) => util.slugify(input));
}
export function _array(Class, element, params) {
return new Class({
type: "array",
@@ -761,7 +747,7 @@ export function _default(Class, innerType, defaultValue) {
type: "default",
innerType,
get defaultValue() {
return typeof defaultValue === "function" ? defaultValue() : util.shallowClone(defaultValue);
return typeof defaultValue === "function" ? defaultValue() : defaultValue;
},
});
}
@@ -828,6 +814,13 @@ export function _custom(Class, fn, _params) {
});
return schema;
}
// export function _refine<T>(
// Class: util.SchemaClass<schemas.$ZodCustom>,
// fn: (arg: NoInfer<T>) => util.MaybeAsync<unknown>,
// _params: string | $ZodCustomParams = {}
// ): checks.$ZodCheck<T> {
// return _custom(Class, fn, _params);
// }
// same as _custom but defaults to abort:false
export function _refine(Class, fn, _params) {
const schema = new Class({
@@ -838,58 +831,6 @@ export function _refine(Class, fn, _params) {
});
return schema;
}
export function _superRefine(fn) {
const ch = _check((payload) => {
payload.addIssue = (issue) => {
if (typeof issue === "string") {
payload.issues.push(util.issue(issue, payload.value, ch._zod.def));
}
else {
// for Zod 3 backwards compatibility
const _issue = issue;
if (_issue.fatal)
_issue.continue = false;
_issue.code ?? (_issue.code = "custom");
_issue.input ?? (_issue.input = payload.value);
_issue.inst ?? (_issue.inst = ch);
_issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...
payload.issues.push(util.issue(_issue));
}
};
return fn(payload.value, payload);
});
return ch;
}
export function _check(fn, params) {
const ch = new checks.$ZodCheck({
check: "custom",
...util.normalizeParams(params),
});
ch._zod.check = fn;
return ch;
}
export function describe(description) {
const ch = new checks.$ZodCheck({ check: "describe" });
ch._zod.onattach = [
(inst) => {
const existing = registries.globalRegistry.get(inst) ?? {};
registries.globalRegistry.add(inst, { ...existing, description });
},
];
ch._zod.check = () => { }; // no-op check
return ch;
}
export function meta(metadata) {
const ch = new checks.$ZodCheck({ check: "meta" });
ch._zod.onattach = [
(inst) => {
const existing = registries.globalRegistry.get(inst) ?? {};
registries.globalRegistry.add(inst, { ...existing, ...metadata });
},
];
ch._zod.check = () => { }; // no-op check
return ch;
}
export function _stringbool(Classes, _params) {
const params = util.normalizeParams(_params);
let truthyArray = params.truthy ?? ["true", "1", "yes", "on", "y", "enabled"];
@@ -900,16 +841,13 @@ export function _stringbool(Classes, _params) {
}
const truthySet = new Set(truthyArray);
const falsySet = new Set(falsyArray);
const _Codec = Classes.Codec ?? schemas.$ZodCodec;
const _Pipe = Classes.Pipe ?? schemas.$ZodPipe;
const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;
const _String = Classes.String ?? schemas.$ZodString;
const stringSchema = new _String({ type: "string", error: params.error });
const booleanSchema = new _Boolean({ type: "boolean", error: params.error });
const codec = new _Codec({
type: "pipe",
in: stringSchema,
out: booleanSchema,
transform: ((input, payload) => {
const _Transform = Classes.Transform ?? schemas.$ZodTransform;
const tx = new _Transform({
type: "transform",
transform: (input, payload) => {
let data = input;
if (params.case !== "sensitive")
data = data.toLowerCase();
@@ -925,23 +863,30 @@ export function _stringbool(Classes, _params) {
expected: "stringbool",
values: [...truthySet, ...falsySet],
input: payload.value,
inst: codec,
continue: false,
inst: tx,
});
return {};
}
}),
reverseTransform: ((input, _payload) => {
if (input === true) {
return truthyArray[0] || "true";
}
else {
return falsyArray[0] || "false";
}
},
error: params.error,
});
// params.error;
const innerPipe = new _Pipe({
type: "pipe",
in: new _String({ type: "string", error: params.error }),
out: tx,
error: params.error,
});
const outerPipe = new _Pipe({
type: "pipe",
in: innerPipe,
out: new _Boolean({
type: "boolean",
error: params.error,
}),
error: params.error,
});
return codec;
return outerPipe;
}
export function _stringFormat(Class, format, fnOrRegex, _params = {}) {
const params = util.normalizeParams(_params);