canvasframework 0.5.32 → 0.5.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/Card.js +96 -88
- package/package.json +1 -1
package/components/Card.js
CHANGED
|
@@ -39,7 +39,8 @@ class Card extends Component {
|
|
|
39
39
|
this.borderRadius = options.borderRadius || 0;
|
|
40
40
|
this.elevation = options.elevation || 0;
|
|
41
41
|
this.autoLayout = options.autoLayout !== undefined ? options.autoLayout : true;
|
|
42
|
-
|
|
42
|
+
// 🔴 AJOUTER CETTE LIGNE
|
|
43
|
+
this.clickableChildren = true;
|
|
43
44
|
// Stocker les positions relatives des enfants
|
|
44
45
|
this.childPositions = new Map();
|
|
45
46
|
}
|
|
@@ -49,29 +50,23 @@ class Card extends Component {
|
|
|
49
50
|
* @param {Component} child - Composant enfant
|
|
50
51
|
* @returns {Component} L'enfant ajouté
|
|
51
52
|
*/
|
|
52
|
-
|
|
53
|
+
add(child) {
|
|
53
54
|
this.children.push(child);
|
|
54
55
|
|
|
55
|
-
//
|
|
56
|
-
const relativeX = child.x;
|
|
57
|
-
const relativeY = child.y;
|
|
58
|
-
|
|
56
|
+
// NE PAS CONVERTIR - garder relatif
|
|
59
57
|
this.childPositions.set(child, {
|
|
60
|
-
x:
|
|
61
|
-
y:
|
|
58
|
+
x: child.x,
|
|
59
|
+
y: child.y
|
|
62
60
|
});
|
|
63
61
|
|
|
64
|
-
// CONVERTIR seulement si autoLayout est activé
|
|
65
62
|
if (this.autoLayout) {
|
|
66
|
-
this.layout();
|
|
67
|
-
} else {
|
|
68
|
-
// Si autoLayout est désactivé, convertir manuellement
|
|
69
|
-
child.x = this.x + relativeX;
|
|
70
|
-
child.y = this.y + relativeY;
|
|
63
|
+
this.layout();
|
|
71
64
|
}
|
|
72
65
|
|
|
66
|
+
// PAS de conversion child.x = this.x + relativeX !
|
|
67
|
+
|
|
73
68
|
return child;
|
|
74
|
-
|
|
69
|
+
}
|
|
75
70
|
|
|
76
71
|
/**
|
|
77
72
|
* Supprime un enfant
|
|
@@ -105,72 +100,56 @@ class Card extends Component {
|
|
|
105
100
|
if (this.children.length === 0 || !this.autoLayout) return;
|
|
106
101
|
|
|
107
102
|
if (this.direction === 'column') {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
for (let i = 0; i < this.children.length; i++) {
|
|
111
|
-
const child = this.children[i];
|
|
112
|
-
|
|
113
|
-
// Calculer la position X selon l'alignement
|
|
114
|
-
let childX = this.padding;
|
|
115
|
-
if (this.align === 'center') {
|
|
116
|
-
childX = (this.width - child.width) / 2;
|
|
117
|
-
} else if (this.align === 'end') {
|
|
118
|
-
childX = this.width - child.width - this.padding;
|
|
119
|
-
} else if (this.align === 'stretch') {
|
|
120
|
-
childX = this.padding;
|
|
121
|
-
child.width = this.width - (this.padding * 2);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// Positionner l'enfant RELATIVEMENT à la Card
|
|
125
|
-
child.x = this.x + childX;
|
|
126
|
-
child.y = this.y + currentY;
|
|
127
|
-
|
|
128
|
-
// Stocker la position relative
|
|
129
|
-
this.childPositions.set(child, { x: childX, y: currentY });
|
|
130
|
-
|
|
131
|
-
// Mettre à jour la position Y pour l'enfant suivant
|
|
132
|
-
currentY += child.height;
|
|
103
|
+
let currentY = this.padding;
|
|
133
104
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
105
|
+
for (let i = 0; i < this.children.length; i++) {
|
|
106
|
+
const child = this.children[i];
|
|
107
|
+
|
|
108
|
+
let childX = this.padding;
|
|
109
|
+
if (this.align === 'center') {
|
|
110
|
+
childX = (this.width - child.width) / 2;
|
|
111
|
+
} else if (this.align === 'end') {
|
|
112
|
+
childX = this.width - child.width - this.padding;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// GARDER RELATIF (ne pas ajouter this.x et this.y)
|
|
116
|
+
child.x = childX;
|
|
117
|
+
child.y = currentY;
|
|
118
|
+
|
|
119
|
+
this.childPositions.set(child, { x: childX, y: currentY });
|
|
120
|
+
|
|
121
|
+
currentY += child.height;
|
|
122
|
+
if (i < this.children.length - 1) {
|
|
123
|
+
currentY += this.gap;
|
|
124
|
+
}
|
|
137
125
|
}
|
|
138
|
-
}
|
|
139
126
|
} else {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
for (let i = 0; i < this.children.length; i++) {
|
|
144
|
-
const child = this.children[i];
|
|
145
|
-
|
|
146
|
-
// Calculer la position Y selon l'alignement
|
|
147
|
-
let childY = this.padding;
|
|
148
|
-
if (this.align === 'center') {
|
|
149
|
-
childY = (this.height - child.height) / 2;
|
|
150
|
-
} else if (this.align === 'end') {
|
|
151
|
-
childY = this.height - child.height - this.padding;
|
|
152
|
-
} else if (this.align === 'stretch') {
|
|
153
|
-
childY = this.padding;
|
|
154
|
-
child.height = this.height - (this.padding * 2);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Positionner l'enfant RELATIVEMENT à la Card
|
|
158
|
-
child.x = this.x + currentX;
|
|
159
|
-
child.y = this.y + childY;
|
|
127
|
+
// Direction 'row' - même logique
|
|
128
|
+
let currentX = this.padding;
|
|
160
129
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
130
|
+
for (let i = 0; i < this.children.length; i++) {
|
|
131
|
+
const child = this.children[i];
|
|
132
|
+
|
|
133
|
+
let childY = this.padding;
|
|
134
|
+
if (this.align === 'center') {
|
|
135
|
+
childY = (this.height - child.height) / 2;
|
|
136
|
+
} else if (this.align === 'end') {
|
|
137
|
+
childY = this.height - child.height - this.padding;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// GARDER RELATIF
|
|
141
|
+
child.x = currentX;
|
|
142
|
+
child.y = childY;
|
|
143
|
+
|
|
144
|
+
this.childPositions.set(child, { x: currentX, y: childY });
|
|
145
|
+
|
|
146
|
+
currentX += child.width;
|
|
147
|
+
if (i < this.children.length - 1) {
|
|
148
|
+
currentX += this.gap;
|
|
149
|
+
}
|
|
170
150
|
}
|
|
171
|
-
}
|
|
172
151
|
}
|
|
173
|
-
|
|
152
|
+
}
|
|
174
153
|
|
|
175
154
|
/**
|
|
176
155
|
* Met à jour la position de la carte et ajuste les enfants
|
|
@@ -278,28 +257,57 @@ class Card extends Component {
|
|
|
278
257
|
|
|
279
258
|
// Dessiner l'ombre si elevation > 0
|
|
280
259
|
if (this.elevation > 0) {
|
|
281
|
-
|
|
260
|
+
this.drawShadow(ctx);
|
|
282
261
|
}
|
|
283
262
|
|
|
284
263
|
// Dessiner le fond de la carte
|
|
285
264
|
if (this.bgColor !== 'transparent') {
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
265
|
+
ctx.fillStyle = this.bgColor;
|
|
266
|
+
if (this.borderRadius > 0) {
|
|
267
|
+
ctx.beginPath();
|
|
268
|
+
this.roundRect(ctx, this.x, this.y, this.width, this.height, this.borderRadius);
|
|
269
|
+
ctx.fill();
|
|
270
|
+
} else {
|
|
271
|
+
ctx.fillRect(this.x, this.y, this.width, this.height);
|
|
272
|
+
}
|
|
294
273
|
}
|
|
295
274
|
|
|
296
|
-
//
|
|
297
|
-
|
|
298
|
-
|
|
275
|
+
// 🔴 DESSINER avec translate POUR LE WEB, sans translate POUR CAPACITOR
|
|
276
|
+
const isCapacitor = typeof window !== 'undefined' && window.Capacitor;
|
|
277
|
+
|
|
278
|
+
if (isCapacitor) {
|
|
279
|
+
// Capacitor : positions absolues directes
|
|
280
|
+
for (let child of this.children) {
|
|
281
|
+
if (child.visible) {
|
|
282
|
+
// Sauvegarder position relative
|
|
283
|
+
const relX = child.x;
|
|
284
|
+
const relY = child.y;
|
|
285
|
+
|
|
286
|
+
// Convertir temporairement en absolu pour le dessin
|
|
287
|
+
child.x = this.x + relX;
|
|
288
|
+
child.y = this.y + relY;
|
|
289
|
+
|
|
290
|
+
child.draw(ctx);
|
|
291
|
+
|
|
292
|
+
// Restaurer position relative
|
|
293
|
+
child.x = relX;
|
|
294
|
+
child.y = relY;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
} else {
|
|
298
|
+
// Web : translate
|
|
299
|
+
ctx.save();
|
|
300
|
+
ctx.translate(this.x, this.y);
|
|
301
|
+
|
|
302
|
+
for (let child of this.children) {
|
|
303
|
+
if (child.visible) child.draw(ctx);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
ctx.restore();
|
|
299
307
|
}
|
|
300
308
|
|
|
301
309
|
ctx.restore();
|
|
302
|
-
|
|
310
|
+
}
|
|
303
311
|
|
|
304
312
|
/**
|
|
305
313
|
* Dessine un rectangle avec coins arrondis
|