@zumer/orbit 1.2.2 → 1.3.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.
package/dist/orbit.css CHANGED
@@ -1,13 +1,13 @@
1
1
 
2
2
  /*
3
3
  * orbit
4
- * v.1.2.2
4
+ * v.1.3.0
5
5
  * Author Juan Martin Muda - Zumerlab
6
6
  * License MIT
7
7
  **/
8
8
  @charset "UTF-8";
9
9
 
10
- /* ../../../../../var/folders/dl/jfswzzq96_7bqvgnhjs47_8w0000gp/T/tmp-47800-54Zylx3us8n9/orbit/src/orbit.css */
10
+ /* ../../../../../var/folders/dl/jfswzzq96_7bqvgnhjs47_8w0000gp/T/tmp-18419-3punuh5JJgqY/orbit/src/orbit.css */
11
11
  .gravity-spot * {
12
12
  box-sizing: border-box;
13
13
  margin: 0;
package/dist/orbit.js CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  /*
3
3
  * orbit
4
- * v.1.2.2
4
+ * v.1.3.0
5
5
  * Author Juan Martin Muda - Zumerlab
6
6
  * License MIT
7
7
  **/
@@ -112,56 +112,141 @@
112
112
  maxValue,
113
113
  shape,
114
114
  arcHeightPercentage,
115
- orbitNumber
115
+ orbitNumber,
116
+ arcHeight
116
117
  };
117
118
  }
118
119
  getProgressAngle(full) {
119
120
  const { maxAngle, progress, maxValue } = this.getAttributes();
120
121
  return full ? (maxValue - 1e-5) / maxValue * maxAngle : progress / maxValue * maxAngle;
121
122
  }
123
+ getControlPoint(x, y, x1, y1, direction = "clockwise") {
124
+ let xm = (x + x1) / 2;
125
+ let ym = (y + y1) / 2;
126
+ let dx = x1 - x;
127
+ let dy = y1 - y;
128
+ let xc, yc;
129
+ if (direction === "clockwise") {
130
+ xc = xm + dy * 0.4;
131
+ yc = ym - dx * 0.4;
132
+ } else {
133
+ xc = xm - dy * 0.4;
134
+ yc = ym + dx * 0.4;
135
+ }
136
+ return { xc, yc };
137
+ }
138
+ arcPoint(radius, angle, radiusAdjustment = 0, angleOffsetDegrees = 0) {
139
+ const adjustedRadius = radius + radiusAdjustment;
140
+ const adjustedAngle = angle + angleOffsetDegrees * Math.PI / 180;
141
+ return {
142
+ x: 50 + adjustedRadius * Math.cos(adjustedAngle),
143
+ y: 50 + adjustedRadius * Math.sin(adjustedAngle)
144
+ };
145
+ }
122
146
  calculateArcParameters(full) {
123
147
  const arcAngle = this.getProgressAngle(full);
124
- const { realRadius, arcHeightPercentage, orbitNumber, shape, strokeWidth } = this.getAttributes();
148
+ const { realRadius, arcHeightPercentage, orbitNumber, shape, strokeWidth, arcHeight } = this.getAttributes();
125
149
  const radius = realRadius;
126
- let startX, startY, endX, endY, largeArcFlag, startX1, startY1, endX1, endY1, dShape, pointX, pointX1, pointY, pointY1;
150
+ let largeArcFlag, d;
127
151
  let offset = Math.PI / 2;
128
152
  let stroke = strokeWidth;
129
153
  let fangle = arcAngle * Math.PI / 180;
130
154
  let bigRadius = radius + arcHeightPercentage;
131
155
  let smallRadius = radius - arcHeightPercentage !== 0 ? radius - arcHeightPercentage : radius;
132
- let bigGap = stroke * 2 / orbitNumber / 2 / bigRadius;
133
- let smallGap = stroke * 2 / orbitNumber / 2 / smallRadius;
134
- let startAngle = bigGap - offset;
135
- let endAngle = fangle - bigGap - offset;
136
- let startAngle1 = smallGap - offset;
137
- let endAngle1 = fangle - smallGap - offset;
138
- startX = 50 + bigRadius * Math.cos(startAngle);
139
- startY = 50 + bigRadius * Math.sin(startAngle);
140
- endX = 50 + bigRadius * Math.cos(endAngle);
141
- endY = 50 + bigRadius * Math.sin(endAngle);
142
- pointX = 50 + bigRadius * Math.cos(endAngle + 3 * Math.PI / 180);
143
- pointY = 50 + bigRadius * Math.sin(endAngle + 3 * Math.PI / 180);
144
- startX1 = 50 + smallRadius * Math.cos(startAngle1);
145
- startY1 = 50 + smallRadius * Math.sin(startAngle1);
146
- endX1 = 50 + smallRadius * Math.cos(endAngle1);
147
- endY1 = 50 + smallRadius * Math.sin(endAngle1);
148
- pointX1 = 50 + smallRadius * Math.cos(endAngle1 + 3 * Math.PI / 180);
149
- pointY1 = 50 + smallRadius * Math.sin(endAngle1 + 3 * Math.PI / 180);
156
+ let bigGap = stroke * 1.25 / orbitNumber / bigRadius;
157
+ let smallGap = stroke * 1.25 / orbitNumber / smallRadius;
158
+ let upperAngleStart = bigGap - offset;
159
+ let upperAngleEnd = fangle - bigGap - offset;
160
+ let innerAngleStart = smallGap - offset;
161
+ let innerAngleEnd = fangle - smallGap - offset;
162
+ let upperArcStart = this.arcPoint(bigRadius, upperAngleStart);
163
+ let upperArcEnd = this.arcPoint(bigRadius, upperAngleEnd);
164
+ let innerArcStart = this.arcPoint(smallRadius, innerAngleStart);
165
+ let innerArcEnd = this.arcPoint(smallRadius, innerAngleEnd);
150
166
  largeArcFlag = arcAngle <= 180 ? 0 : 1;
151
- let d = `M ${startX},${startY} A ${bigRadius},${bigRadius} 0 ${largeArcFlag} 1 ${endX},${endY}`;
152
- if (shape === "arrow")
153
- d += `L ${(pointX + pointX1) / 2} ${(pointY + pointY1) / 2} `;
154
- if (shape === "circle" || shape === "bullet")
155
- d += `A ${arcHeightPercentage}, ${arcHeightPercentage} 0 0 1 ${endX1},${endY1} `;
156
- d += `L ${endX1} ${endY1}`;
157
- d += `A ${smallRadius},${smallRadius} 0 ${largeArcFlag} 0 ${startX1},${startY1}`;
158
- if (shape === "circle")
159
- d += `A ${arcHeightPercentage}, ${arcHeightPercentage} 0 0 1 ${startX},${startY} `;
160
- if (shape === "bullet")
161
- d += `A ${arcHeightPercentage}, ${arcHeightPercentage} 0 0 0 ${startX},${startY} `;
162
- if (shape === "arrow")
163
- d += `L ${startX1 + 3} ${(startY + startY1) / 2} `;
164
- d += `Z`;
167
+ if (shape === "rounded") {
168
+ let curve = arcHeight < 10 ? 5 : arcHeight < 5 ? 2.5 : 10;
169
+ let newUpperStart = this.arcPoint(bigRadius, upperAngleStart, 0, curve / orbitNumber);
170
+ let newUpperEnd = this.arcPoint(bigRadius, upperAngleEnd, 0, -curve / orbitNumber);
171
+ let newInnerStart = this.arcPoint(smallRadius, innerAngleStart, 0, curve / orbitNumber);
172
+ let newInnerEnd = this.arcPoint(smallRadius, innerAngleEnd, 0, -curve / orbitNumber);
173
+ let upperPointStart = this.arcPoint(bigRadius, upperAngleStart, -(curve / 2) / orbitNumber, 0);
174
+ let upperPointEnd = this.arcPoint(bigRadius, upperAngleEnd, -(curve / 2) / orbitNumber, 0);
175
+ let innerPointStart = this.arcPoint(smallRadius, innerAngleStart, curve / 2 / orbitNumber, 0);
176
+ let innerPointEnd = this.arcPoint(smallRadius, innerAngleEnd, curve / 2 / orbitNumber, 0);
177
+ let Q = this.getControlPoint(newUpperEnd.x, newUpperEnd.y, upperPointEnd.x, upperPointEnd.y);
178
+ let Q1 = this.getControlPoint(innerPointEnd.x, innerPointEnd.y, newInnerEnd.x, newInnerEnd.y);
179
+ let Q2 = this.getControlPoint(newInnerStart.x, newInnerStart.y, innerPointStart.x, innerPointStart.y);
180
+ let Q3 = this.getControlPoint(upperPointStart.x, upperPointStart.y, newUpperStart.x, newUpperStart.y);
181
+ d = `M ${newUpperStart.x},${newUpperStart.y} A ${bigRadius},${bigRadius} 0 ${largeArcFlag} 1 ${newUpperEnd.x},${newUpperEnd.y}`;
182
+ d += `Q ${Q.xc}, ${Q.yc} ${upperPointEnd.x} ${upperPointEnd.y} `;
183
+ d += `L ${upperPointEnd.x} ${upperPointEnd.y}`;
184
+ d += `L ${innerPointEnd.x} ${innerPointEnd.y}`;
185
+ d += `Q ${Q1.xc}, ${Q1.yc} ${newInnerEnd.x} ${newInnerEnd.y} `;
186
+ d += `A ${smallRadius},${smallRadius} 0 ${largeArcFlag} 0 ${newInnerStart.x},${newInnerStart.y}`;
187
+ d += `Q ${Q2.xc}, ${Q2.yc} ${innerPointStart.x} ${innerPointStart.y} `;
188
+ d += `L ${innerPointStart.x} ${innerPointStart.y}`;
189
+ d += `L ${upperPointStart.x} ${upperPointStart.y}`;
190
+ d += ` Q ${Q3.xc}, ${Q3.yc} ${newUpperStart.x} ${newUpperStart.y} `;
191
+ d += ` Z`;
192
+ } else if (shape === "circle" || shape === "circle-a" || shape === "bullet") {
193
+ d = `M ${upperArcStart.x},${upperArcStart.y} A ${bigRadius},${bigRadius} 0 ${largeArcFlag} 1 ${upperArcEnd.x},${upperArcEnd.y}`;
194
+ d += ` A 1,1 0 0 1 ${innerArcEnd.x},${innerArcEnd.y} `;
195
+ d += ` A ${smallRadius},${smallRadius} 0 ${largeArcFlag} 0 ${innerArcStart.x},${innerArcStart.y}`;
196
+ d += ` A 1,1 0 0 ${shape === "circle" || shape === "circle-a" ? 1 : 0} ${upperArcStart.x},${upperArcStart.y} `;
197
+ d += ` Z`;
198
+ } else if (shape === "circle-b") {
199
+ let segment = arcHeight * 1.36;
200
+ let newUpperStart = this.arcPoint(bigRadius, upperAngleStart, 0, segment / orbitNumber);
201
+ let newUpperEnd = this.arcPoint(bigRadius, upperAngleEnd, 0, -(segment / orbitNumber));
202
+ let newInnerStart = this.arcPoint(smallRadius, innerAngleStart, 0, segment / orbitNumber);
203
+ let newInnerEnd = this.arcPoint(smallRadius, innerAngleEnd, 0, -(segment / orbitNumber));
204
+ d = `M ${newUpperStart.x},${newUpperStart.y} A ${bigRadius},${bigRadius} 0 ${largeArcFlag} 1 ${newUpperEnd.x},${newUpperEnd.y}`;
205
+ d += ` A 1,1 0 0 1 ${newInnerEnd.x},${newInnerEnd.y} `;
206
+ d += ` A ${smallRadius},${smallRadius} 0 ${largeArcFlag} 0 ${newInnerStart.x},${newInnerStart.y}`;
207
+ d += ` A 1,1 0 0 1 ${newUpperStart.x},${newUpperStart.y} `;
208
+ d += ` Z`;
209
+ } else if (shape === "arrow") {
210
+ let middleEnd = this.arcPoint(radius, upperAngleEnd, 0, 24 / orbitNumber / 2);
211
+ let middleStart = this.arcPoint(radius, upperAngleStart, 0, 24 / orbitNumber / 2);
212
+ d = `M ${upperArcStart.x},${upperArcStart.y} A ${bigRadius},${bigRadius} 0 ${largeArcFlag} 1 ${upperArcEnd.x},${upperArcEnd.y}`;
213
+ d += `L ${middleEnd.x} ${middleEnd.y}`;
214
+ d += `L ${innerArcEnd.x} ${innerArcEnd.y}`;
215
+ d += `A ${smallRadius},${smallRadius} 0 ${largeArcFlag} 0 ${innerArcStart.x}, ${innerArcStart.y}`;
216
+ d += `L ${middleStart.x} ${middleStart.y} `;
217
+ d += `Z`;
218
+ } else if (shape === "backslash" || shape === "slash") {
219
+ let newUpperStart = this.arcPoint(bigRadius, upperAngleStart, 0, shape === "backslash" ? 0 : 24 / orbitNumber / 2);
220
+ let newUpperEnd = this.arcPoint(bigRadius, upperAngleEnd, 0, shape === "backslash" ? 0 : 24 / orbitNumber / 2);
221
+ let newInnerStart = this.arcPoint(smallRadius, innerAngleStart, 0, shape === "backslash" ? 24 / orbitNumber / 2 : 0);
222
+ let newInnerEnd = this.arcPoint(smallRadius, innerAngleEnd, 0, shape === "backslash" ? 24 / orbitNumber / 2 : 0);
223
+ d = `M ${newUpperStart.x},${newUpperStart.y} A ${bigRadius},${bigRadius} 0 ${largeArcFlag} 1 ${newUpperEnd.x},${newUpperEnd.y}`;
224
+ d += `L ${newInnerEnd.x} ${newInnerEnd.y}`;
225
+ d += `A ${smallRadius},${smallRadius} 0 ${largeArcFlag} 0 ${newInnerStart.x}, ${newInnerStart.y}`;
226
+ d += `Z`;
227
+ } else if (shape === "zigzag") {
228
+ let s2 = this.arcPoint(radius, upperAngleStart, -arcHeight / orbitNumber / 2, 3);
229
+ let s3 = this.arcPoint(radius, upperAngleStart, 0 / orbitNumber / 2, 0);
230
+ let s4 = this.arcPoint(radius, upperAngleStart, arcHeight / orbitNumber / 2, 3);
231
+ let e2 = this.arcPoint(radius, innerAngleEnd, arcHeight / orbitNumber / 2, 3);
232
+ let e3 = this.arcPoint(radius, innerAngleEnd, 0 / orbitNumber / 2, 0);
233
+ let e4 = this.arcPoint(radius, innerAngleEnd, -arcHeight / orbitNumber / 2, 3);
234
+ d = `M ${upperArcStart.x},${upperArcStart.y} A ${bigRadius},${bigRadius} 0 ${largeArcFlag} 1 ${upperArcEnd.x},${upperArcEnd.y}`;
235
+ d += `L ${e2.x} ${e2.y}`;
236
+ d += `L ${e3.x} ${e3.y}`;
237
+ d += `L ${e4.x} ${e4.y}`;
238
+ d += `L ${innerArcEnd.x} ${innerArcEnd.y}`;
239
+ d += `A ${smallRadius},${smallRadius} 0 ${largeArcFlag} 0 ${innerArcStart.x}, ${innerArcStart.y}`;
240
+ d += `L ${s2.x} ${s2.y}`;
241
+ d += `L ${s3.x} ${s3.y}`;
242
+ d += `L ${s4.x} ${s4.y}`;
243
+ d += `Z`;
244
+ } else {
245
+ d = `M ${upperArcStart.x},${upperArcStart.y} A ${bigRadius},${bigRadius} 0 ${largeArcFlag} 1 ${upperArcEnd.x},${upperArcEnd.y}`;
246
+ d += `L ${innerArcEnd.x} ${innerArcEnd.y}`;
247
+ d += `A ${smallRadius},${smallRadius} 0 ${largeArcFlag} 0 ${innerArcStart.x}, ${innerArcStart.y}`;
248
+ d += `Z`;
249
+ }
165
250
  return { d };
166
251
  }
167
252
  };
@@ -347,6 +432,14 @@
347
432
  }
348
433
  return { xc, yc };
349
434
  }
435
+ arcPoint(radius, angle, radiusAdjustment = 0, angleOffsetDegrees = 0) {
436
+ const adjustedRadius = radius + radiusAdjustment;
437
+ const adjustedAngle = angle + angleOffsetDegrees * Math.PI / 180;
438
+ return {
439
+ x: 50 + adjustedRadius * Math.cos(adjustedAngle),
440
+ y: 50 + adjustedRadius * Math.sin(adjustedAngle)
441
+ };
442
+ }
350
443
  calculateArcParameters() {
351
444
  const { arcAngle, realRadius, gap, arcHeightPercentage, orbitNumber, shape, strokeWidth, arcHeight } = this.getAttributes();
352
445
  const radius = realRadius;
@@ -362,29 +455,21 @@
362
455
  let upperAngleEnd = fangle - bigGap - offset;
363
456
  let innerAngleStart = smallGap - offset;
364
457
  let innerAngleEnd = fangle - smallGap - offset;
365
- function arcPoint(radius2, angle, radiusAdjustment = 0, angleOffsetDegrees = 0) {
366
- const adjustedRadius = radius2 + radiusAdjustment;
367
- const adjustedAngle = angle + angleOffsetDegrees * Math.PI / 180;
368
- return {
369
- x: 50 + adjustedRadius * Math.cos(adjustedAngle),
370
- y: 50 + adjustedRadius * Math.sin(adjustedAngle)
371
- };
372
- }
373
- let upperArcStart = arcPoint(bigRadius, upperAngleStart);
374
- let upperArcEnd = arcPoint(bigRadius, upperAngleEnd);
375
- let innerArcStart = arcPoint(smallRadius, innerAngleStart);
376
- let innerArcEnd = arcPoint(smallRadius, innerAngleEnd);
458
+ let upperArcStart = this.arcPoint(bigRadius, upperAngleStart);
459
+ let upperArcEnd = this.arcPoint(bigRadius, upperAngleEnd);
460
+ let innerArcStart = this.arcPoint(smallRadius, innerAngleStart);
461
+ let innerArcEnd = this.arcPoint(smallRadius, innerAngleEnd);
377
462
  largeArcFlag = arcAngle <= 180 ? 0 : 1;
378
463
  if (shape === "rounded") {
379
464
  let curve = arcHeight < 10 ? 5 : arcHeight < 5 ? 2.5 : 10;
380
- let newUpperStart = arcPoint(bigRadius, upperAngleStart, 0, curve / orbitNumber);
381
- let newUpperEnd = arcPoint(bigRadius, upperAngleEnd, 0, -curve / orbitNumber);
382
- let newInnerStart = arcPoint(smallRadius, innerAngleStart, 0, curve / orbitNumber);
383
- let newInnerEnd = arcPoint(smallRadius, innerAngleEnd, 0, -curve / orbitNumber);
384
- let upperPointStart = arcPoint(bigRadius, upperAngleStart, -(curve / 2) / orbitNumber, 0);
385
- let upperPointEnd = arcPoint(bigRadius, upperAngleEnd, -(curve / 2) / orbitNumber, 0);
386
- let innerPointStart = arcPoint(smallRadius, innerAngleStart, curve / 2 / orbitNumber, 0);
387
- let innerPointEnd = arcPoint(smallRadius, innerAngleEnd, curve / 2 / orbitNumber, 0);
465
+ let newUpperStart = this.arcPoint(bigRadius, upperAngleStart, 0, curve / orbitNumber);
466
+ let newUpperEnd = this.arcPoint(bigRadius, upperAngleEnd, 0, -curve / orbitNumber);
467
+ let newInnerStart = this.arcPoint(smallRadius, innerAngleStart, 0, curve / orbitNumber);
468
+ let newInnerEnd = this.arcPoint(smallRadius, innerAngleEnd, 0, -curve / orbitNumber);
469
+ let upperPointStart = this.arcPoint(bigRadius, upperAngleStart, -(curve / 2) / orbitNumber, 0);
470
+ let upperPointEnd = this.arcPoint(bigRadius, upperAngleEnd, -(curve / 2) / orbitNumber, 0);
471
+ let innerPointStart = this.arcPoint(smallRadius, innerAngleStart, curve / 2 / orbitNumber, 0);
472
+ let innerPointEnd = this.arcPoint(smallRadius, innerAngleEnd, curve / 2 / orbitNumber, 0);
388
473
  let Q = this.getControlPoint(newUpperEnd.x, newUpperEnd.y, upperPointEnd.x, upperPointEnd.y);
389
474
  let Q1 = this.getControlPoint(innerPointEnd.x, innerPointEnd.y, newInnerEnd.x, newInnerEnd.y);
390
475
  let Q2 = this.getControlPoint(newInnerStart.x, newInnerStart.y, innerPointStart.x, innerPointStart.y);
@@ -400,26 +485,26 @@
400
485
  dShape += `L ${upperPointStart.x} ${upperPointStart.y}`;
401
486
  dShape += ` Q ${Q3.xc}, ${Q3.yc} ${newUpperStart.x} ${newUpperStart.y} `;
402
487
  dShape += ` Z`;
403
- } else if (shape === "circle" || shape === "bullet") {
488
+ } else if (shape === "circle" || shape === "circle-a" || shape === "bullet") {
404
489
  dShape = `M ${upperArcStart.x},${upperArcStart.y} A ${bigRadius},${bigRadius} 0 ${largeArcFlag} 1 ${upperArcEnd.x},${upperArcEnd.y}`;
405
490
  dShape += ` A 1,1 0 0 1 ${innerArcEnd.x},${innerArcEnd.y} `;
406
491
  dShape += ` A ${smallRadius},${smallRadius} 0 ${largeArcFlag} 0 ${innerArcStart.x},${innerArcStart.y}`;
407
- dShape += ` A 1,1 0 0 ${shape === "circle" ? 1 : 0} ${upperArcStart.x},${upperArcStart.y} `;
492
+ dShape += ` A 1,1 0 0 ${shape === "circle" || shape === "circle-a" ? 1 : 0} ${upperArcStart.x},${upperArcStart.y} `;
408
493
  dShape += ` Z`;
409
- } else if (shape === "circle1") {
494
+ } else if (shape === "circle-b") {
410
495
  let segment = arcHeight * 1.36;
411
- let newUpperStart = arcPoint(bigRadius, upperAngleStart, 0, segment / orbitNumber);
412
- let newUpperEnd = arcPoint(bigRadius, upperAngleEnd, 0, -(segment / orbitNumber));
413
- let newInnerStart = arcPoint(smallRadius, innerAngleStart, 0, segment / orbitNumber);
414
- let newInnerEnd = arcPoint(smallRadius, innerAngleEnd, 0, -(segment / orbitNumber));
496
+ let newUpperStart = this.arcPoint(bigRadius, upperAngleStart, 0, segment / orbitNumber);
497
+ let newUpperEnd = this.arcPoint(bigRadius, upperAngleEnd, 0, -(segment / orbitNumber));
498
+ let newInnerStart = this.arcPoint(smallRadius, innerAngleStart, 0, segment / orbitNumber);
499
+ let newInnerEnd = this.arcPoint(smallRadius, innerAngleEnd, 0, -(segment / orbitNumber));
415
500
  dShape = `M ${newUpperStart.x},${newUpperStart.y} A ${bigRadius},${bigRadius} 0 ${largeArcFlag} 1 ${newUpperEnd.x},${newUpperEnd.y}`;
416
501
  dShape += ` A 1,1 0 0 1 ${newInnerEnd.x},${newInnerEnd.y} `;
417
502
  dShape += ` A ${smallRadius},${smallRadius} 0 ${largeArcFlag} 0 ${newInnerStart.x},${newInnerStart.y}`;
418
503
  dShape += ` A 1,1 0 0 1 ${newUpperStart.x},${newUpperStart.y} `;
419
504
  dShape += ` Z`;
420
505
  } else if (shape === "arrow") {
421
- let middleEnd = arcPoint(radius, upperAngleEnd, 0, 24 / orbitNumber / 2);
422
- let middleStart = arcPoint(radius, upperAngleStart, 0, 24 / orbitNumber / 2);
506
+ let middleEnd = this.arcPoint(radius, upperAngleEnd, 0, 24 / orbitNumber / 2);
507
+ let middleStart = this.arcPoint(radius, upperAngleStart, 0, 24 / orbitNumber / 2);
423
508
  dShape = `M ${upperArcStart.x},${upperArcStart.y} A ${bigRadius},${bigRadius} 0 ${largeArcFlag} 1 ${upperArcEnd.x},${upperArcEnd.y}`;
424
509
  dShape += `L ${middleEnd.x} ${middleEnd.y}`;
425
510
  dShape += `L ${innerArcEnd.x} ${innerArcEnd.y}`;
@@ -427,18 +512,30 @@
427
512
  dShape += `L ${middleStart.x} ${middleStart.y} `;
428
513
  dShape += `Z`;
429
514
  } else if (shape === "backslash" || shape === "slash") {
430
- let newUpperStart = arcPoint(bigRadius, upperAngleStart, 0, shape === "backslash" ? 0 : 24 / orbitNumber / 2);
431
- let newUpperEnd = arcPoint(bigRadius, upperAngleEnd, 0, shape === "backslash" ? 0 : 24 / orbitNumber / 2);
432
- let newInnerStart = arcPoint(smallRadius, innerAngleStart, 0, shape === "backslash" ? 24 / orbitNumber / 2 : 0);
433
- let newInnerEnd = arcPoint(smallRadius, innerAngleEnd, 0, shape === "backslash" ? 24 / orbitNumber / 2 : 0);
515
+ let newUpperStart = this.arcPoint(bigRadius, upperAngleStart, 0, shape === "backslash" ? 0 : 24 / orbitNumber / 2);
516
+ let newUpperEnd = this.arcPoint(bigRadius, upperAngleEnd, 0, shape === "backslash" ? 0 : 24 / orbitNumber / 2);
517
+ let newInnerStart = this.arcPoint(smallRadius, innerAngleStart, 0, shape === "backslash" ? 24 / orbitNumber / 2 : 0);
518
+ let newInnerEnd = this.arcPoint(smallRadius, innerAngleEnd, 0, shape === "backslash" ? 24 / orbitNumber / 2 : 0);
434
519
  dShape = `M ${newUpperStart.x},${newUpperStart.y} A ${bigRadius},${bigRadius} 0 ${largeArcFlag} 1 ${newUpperEnd.x},${newUpperEnd.y}`;
435
520
  dShape += `L ${newInnerEnd.x} ${newInnerEnd.y}`;
436
521
  dShape += `A ${smallRadius},${smallRadius} 0 ${largeArcFlag} 0 ${newInnerStart.x}, ${newInnerStart.y}`;
437
522
  dShape += `Z`;
438
- } else if (shape === "nr") {
523
+ } else if (shape === "zigzag") {
524
+ let s2 = this.arcPoint(radius, upperAngleStart, -arcHeight / orbitNumber / 2, 3);
525
+ let s3 = this.arcPoint(radius, upperAngleStart, 0 / orbitNumber / 2, 0);
526
+ let s4 = this.arcPoint(radius, upperAngleStart, arcHeight / orbitNumber / 2, 3);
527
+ let e2 = this.arcPoint(radius, innerAngleEnd, arcHeight / orbitNumber / 2, 3);
528
+ let e3 = this.arcPoint(radius, innerAngleEnd, 0 / orbitNumber / 2, 0);
529
+ let e4 = this.arcPoint(radius, innerAngleEnd, -arcHeight / orbitNumber / 2, 3);
439
530
  dShape = `M ${upperArcStart.x},${upperArcStart.y} A ${bigRadius},${bigRadius} 0 ${largeArcFlag} 1 ${upperArcEnd.x},${upperArcEnd.y}`;
531
+ dShape += `L ${e2.x} ${e2.y}`;
532
+ dShape += `L ${e3.x} ${e3.y}`;
533
+ dShape += `L ${e4.x} ${e4.y}`;
440
534
  dShape += `L ${innerArcEnd.x} ${innerArcEnd.y}`;
441
535
  dShape += `A ${smallRadius},${smallRadius} 0 ${largeArcFlag} 0 ${innerArcStart.x}, ${innerArcStart.y}`;
536
+ dShape += `L ${s2.x} ${s2.y}`;
537
+ dShape += `L ${s3.x} ${s3.y}`;
538
+ dShape += `L ${s4.x} ${s4.y}`;
442
539
  dShape += `Z`;
443
540
  } else {
444
541
  dShape = `M ${upperArcStart.x},${upperArcStart.y} A ${bigRadius},${bigRadius} 0 ${largeArcFlag} 1 ${upperArcEnd.x},${upperArcEnd.y}`;
package/dist/orbit.min.js CHANGED
@@ -1,4 +1,4 @@
1
- (()=>{var H=class extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot.innerHTML=`
1
+ (()=>{var U=class extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot.innerHTML=`
2
2
  <style>
3
3
  :host {
4
4
  --o-fill: var(--o-gray-light);
@@ -42,7 +42,7 @@
42
42
  <path class="progress-bg" shape-rendering="geometricPrecision" vector-effect="non-scaling-stroke"></path>
43
43
  <path class="progress-bar" shape-rendering="geometricPrecision" vector-effect="non-scaling-stroke"></path>
44
44
  </svg>
45
- `}connectedCallback(){this.update(),this.observer=new MutationObserver(r=>{this.observer.disconnect(),r.forEach(n=>{this.update()}),this.observer.observe(this,{attributes:!0,childList:!0})}),this.observer.observe(this,{attributes:!0,childList:!0})}update(){let r=this.shadowRoot.querySelector(".progress-bg"),n=this.shadowRoot.querySelector(".progress-bar");this.updateArc(r,!0),this.updateArc(n,!1)}updateArc(r,n){let{d:h}=this.calculateArcParameters(n);r.setAttribute("d",h)}getAttributes(){let r=parseFloat(getComputedStyle(this).getPropertyValue("r")||0),n=parseFloat(getComputedStyle(this).getPropertyValue("--o-orbit-number")),h=parseFloat(getComputedStyle(this).getPropertyValue("--o-size-ratio")),o=parseFloat(getComputedStyle(this).getPropertyValue("--o-range")||360),e=parseFloat(getComputedStyle(this).getPropertyValue("--o-progress")||this.getAttribute("value")||0),s=this.getAttribute("shape")||"none",d=parseFloat(getComputedStyle(this).getPropertyValue("--o-stroke-width")),c=(r/n*h-d+.3)/2*100/r/2,l=o,t=parseFloat(this.getAttribute("max"))||100,b;this.classList.contains("outer-orbit")?b=c:this.classList.contains("quarter-outer-orbit")?b=c*-.5:this.classList.contains("inner-orbit")?b=c*-1:this.classList.contains("quarter-inner-orbit")?b=c*.5:b=0;let A=50+b;return{orbitRadius:r,progress:e,strokeWidth:d,realRadius:A,maxAngle:l,maxValue:t,shape:s,arcHeightPercentage:c,orbitNumber:n}}getProgressAngle(r){let{maxAngle:n,progress:h,maxValue:o}=this.getAttributes();return r?(o-1e-5)/o*n:h/o*n}calculateArcParameters(r){let n=this.getProgressAngle(r),{realRadius:h,arcHeightPercentage:o,orbitNumber:e,shape:s,strokeWidth:d}=this.getAttributes(),g=h,c,l,t,b,A,C,a,i,v,O,E,M,k,F,u=Math.PI/2,w=d,R=n*Math.PI/180,y=g+o,f=g-o!==0?g-o:g,p=w*2/e/2/y,$=w*2/e/2/f,P=p-u,x=R-p-u,S=$-u,L=R-$-u;c=50+y*Math.cos(P),l=50+y*Math.sin(P),t=50+y*Math.cos(x),b=50+y*Math.sin(x),E=50+y*Math.cos(x+3*Math.PI/180),k=50+y*Math.sin(x+3*Math.PI/180),C=50+f*Math.cos(S),a=50+f*Math.sin(S),i=50+f*Math.cos(L),v=50+f*Math.sin(L),M=50+f*Math.cos(L+3*Math.PI/180),F=50+f*Math.sin(L+3*Math.PI/180),A=n<=180?0:1;let m=`M ${c},${l} A ${y},${y} 0 ${A} 1 ${t},${b}`;return s==="arrow"&&(m+=`L ${(E+M)/2} ${(k+F)/2} `),(s==="circle"||s==="bullet")&&(m+=`A ${o}, ${o} 0 0 1 ${i},${v} `),m+=`L ${i} ${v}`,m+=`A ${f},${f} 0 ${A} 0 ${C},${a}`,s==="circle"&&(m+=`A ${o}, ${o} 0 0 1 ${c},${l} `),s==="bullet"&&(m+=`A ${o}, ${o} 0 0 0 ${c},${l} `),s==="arrow"&&(m+=`L ${C+3} ${(l+a)/2} `),m+="Z",{d:m}}};var T=document.createElement("template");T.innerHTML=`
45
+ `}connectedCallback(){this.update(),this.observer=new MutationObserver(i=>{this.observer.disconnect(),i.forEach(c=>{this.update()}),this.observer.observe(this,{attributes:!0,childList:!0})}),this.observer.observe(this,{attributes:!0,childList:!0})}update(){let i=this.shadowRoot.querySelector(".progress-bg"),c=this.shadowRoot.querySelector(".progress-bar");this.updateArc(i,!0),this.updateArc(c,!1)}updateArc(i,c){let{d:g}=this.calculateArcParameters(c);i.setAttribute("d",g)}getAttributes(){let i=parseFloat(getComputedStyle(this).getPropertyValue("r")||0),c=parseFloat(getComputedStyle(this).getPropertyValue("--o-orbit-number")),g=parseFloat(getComputedStyle(this).getPropertyValue("--o-size-ratio")),p=parseFloat(getComputedStyle(this).getPropertyValue("--o-range")||360),e=parseFloat(getComputedStyle(this).getPropertyValue("--o-progress")||this.getAttribute("value")||0),r=this.getAttribute("shape")||"none",y=parseFloat(getComputedStyle(this).getPropertyValue("--o-stroke-width")),$=i/c*g-y+.3,a=$/2*100/i/2,n=p,t=parseFloat(this.getAttribute("max"))||100,x;this.classList.contains("outer-orbit")?x=a:this.classList.contains("quarter-outer-orbit")?x=a*-.5:this.classList.contains("inner-orbit")?x=a*-1:this.classList.contains("quarter-inner-orbit")?x=a*.5:x=0;let E=50+x;return{orbitRadius:i,progress:e,strokeWidth:y,realRadius:E,maxAngle:n,maxValue:t,shape:r,arcHeightPercentage:a,orbitNumber:c,arcHeight:$}}getProgressAngle(i){let{maxAngle:c,progress:g,maxValue:p}=this.getAttributes();return i?(p-1e-5)/p*c:g/p*c}getControlPoint(i,c,g,p,e="clockwise"){let r=(i+g)/2,y=(c+p)/2,$=g-i,a=p-c,n,t;return e==="clockwise"?(n=r+a*.4,t=y-$*.4):(n=r-a*.4,t=y+$*.4),{xc:n,yc:t}}arcPoint(i,c,g=0,p=0){let e=i+g,r=c+p*Math.PI/180;return{x:50+e*Math.cos(r),y:50+e*Math.sin(r)}}calculateArcParameters(i){let c=this.getProgressAngle(i),{realRadius:g,arcHeightPercentage:p,orbitNumber:e,shape:r,strokeWidth:y,arcHeight:$}=this.getAttributes(),a=g,n,t,x=Math.PI/2,E=y,I=c*Math.PI/180,s=a+p,o=a-p!==0?a-p:a,M=E*1.25/e/s,V=E*1.25/e/o,P=M-x,S=I-M-x,A=V-x,m=I-V-x,b=this.arcPoint(s,P),v=this.arcPoint(s,S),w=this.arcPoint(o,A),k=this.arcPoint(o,m);if(n=c<=180?0:1,r==="rounded"){let l=$<10?5:$<5?2.5:10,h=this.arcPoint(s,P,0,l/e),u=this.arcPoint(s,S,0,-l/e),d=this.arcPoint(o,A,0,l/e),f=this.arcPoint(o,m,0,-l/e),L=this.arcPoint(s,P,-(l/2)/e,0),C=this.arcPoint(s,S,-(l/2)/e,0),R=this.arcPoint(o,A,l/2/e,0),F=this.arcPoint(o,m,l/2/e,0),z=this.getControlPoint(u.x,u.y,C.x,C.y),Q=this.getControlPoint(F.x,F.y,f.x,f.y),Z=this.getControlPoint(d.x,d.y,R.x,R.y),H=this.getControlPoint(L.x,L.y,h.x,h.y);t=`M ${h.x},${h.y} A ${s},${s} 0 ${n} 1 ${u.x},${u.y}`,t+=`Q ${z.xc}, ${z.yc} ${C.x} ${C.y} `,t+=`L ${C.x} ${C.y}`,t+=`L ${F.x} ${F.y}`,t+=`Q ${Q.xc}, ${Q.yc} ${f.x} ${f.y} `,t+=`A ${o},${o} 0 ${n} 0 ${d.x},${d.y}`,t+=`Q ${Z.xc}, ${Z.yc} ${R.x} ${R.y} `,t+=`L ${R.x} ${R.y}`,t+=`L ${L.x} ${L.y}`,t+=` Q ${H.xc}, ${H.yc} ${h.x} ${h.y} `,t+=" Z"}else if(r==="circle"||r==="circle-a"||r==="bullet")t=`M ${b.x},${b.y} A ${s},${s} 0 ${n} 1 ${v.x},${v.y}`,t+=` A 1,1 0 0 1 ${k.x},${k.y} `,t+=` A ${o},${o} 0 ${n} 0 ${w.x},${w.y}`,t+=` A 1,1 0 0 ${r==="circle"||r==="circle-a"?1:0} ${b.x},${b.y} `,t+=" Z";else if(r==="circle-b"){let l=$*1.36,h=this.arcPoint(s,P,0,l/e),u=this.arcPoint(s,S,0,-(l/e)),d=this.arcPoint(o,A,0,l/e),f=this.arcPoint(o,m,0,-(l/e));t=`M ${h.x},${h.y} A ${s},${s} 0 ${n} 1 ${u.x},${u.y}`,t+=` A 1,1 0 0 1 ${f.x},${f.y} `,t+=` A ${o},${o} 0 ${n} 0 ${d.x},${d.y}`,t+=` A 1,1 0 0 1 ${h.x},${h.y} `,t+=" Z"}else if(r==="arrow"){let l=this.arcPoint(a,S,0,24/e/2),h=this.arcPoint(a,P,0,24/e/2);t=`M ${b.x},${b.y} A ${s},${s} 0 ${n} 1 ${v.x},${v.y}`,t+=`L ${l.x} ${l.y}`,t+=`L ${k.x} ${k.y}`,t+=`A ${o},${o} 0 ${n} 0 ${w.x}, ${w.y}`,t+=`L ${h.x} ${h.y} `,t+="Z"}else if(r==="backslash"||r==="slash"){let l=this.arcPoint(s,P,0,r==="backslash"?0:24/e/2),h=this.arcPoint(s,S,0,r==="backslash"?0:24/e/2),u=this.arcPoint(o,A,0,r==="backslash"?24/e/2:0),d=this.arcPoint(o,m,0,r==="backslash"?24/e/2:0);t=`M ${l.x},${l.y} A ${s},${s} 0 ${n} 1 ${h.x},${h.y}`,t+=`L ${d.x} ${d.y}`,t+=`A ${o},${o} 0 ${n} 0 ${u.x}, ${u.y}`,t+="Z"}else if(r==="zigzag"){let l=this.arcPoint(a,P,-$/e/2,3),h=this.arcPoint(a,P,0/e/2,0),u=this.arcPoint(a,P,$/e/2,3),d=this.arcPoint(a,m,$/e/2,3),f=this.arcPoint(a,m,0/e/2,0),L=this.arcPoint(a,m,-$/e/2,3);t=`M ${b.x},${b.y} A ${s},${s} 0 ${n} 1 ${v.x},${v.y}`,t+=`L ${d.x} ${d.y}`,t+=`L ${f.x} ${f.y}`,t+=`L ${L.x} ${L.y}`,t+=`L ${k.x} ${k.y}`,t+=`A ${o},${o} 0 ${n} 0 ${w.x}, ${w.y}`,t+=`L ${l.x} ${l.y}`,t+=`L ${h.x} ${h.y}`,t+=`L ${u.x} ${u.y}`,t+="Z"}else t=`M ${b.x},${b.y} A ${s},${s} 0 ${n} 1 ${v.x},${v.y}`,t+=`L ${k.x} ${k.y}`,t+=`A ${o},${o} 0 ${n} 0 ${w.x}, ${w.y}`,t+="Z";return{d:t}}};var T=document.createElement("template");T.innerHTML=`
46
46
  <style>
47
47
  :host {
48
48
  --o-fill: var(--o-gray-light);
@@ -88,4 +88,4 @@
88
88
  <textPath href="#orbitPath" alignment-baseline="middle"></textPath>
89
89
  </text>
90
90
  </svg>
91
- `;var q=class extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot.appendChild(T.content.cloneNode(!0))}connectedCallback(){this.update(),this.observer=new MutationObserver(r=>{this.observer.disconnect(),r.forEach(n=>{this.update()}),this.observer.observe(this,{attributes:!0,childList:!0})}),this.observer.observe(this,{attributes:!0,childList:!0}),this.textObserver=new MutationObserver(()=>{let r=this.shadowRoot.querySelector("textPath");r.textContent=this.textContent}),this.textObserver.observe(this,{characterData:!0,subtree:!0})}disconnectedCallback(){this.observer.disconnect(),this.textObserver.disconnect()}update(){let{length:r,fontSize:n,textAnchor:h,fitRange:o}=this.getAttributes(),e=this.shadowRoot.getElementById("orbitPath"),s=this.shadowRoot.getElementById("orbitShape"),d=this.shadowRoot.querySelector("text"),g=this.shadowRoot.querySelector("textPath"),{dShape:c}=this.calculateArcParameters(),{dPath:l}=this.calculateTextArcParameters();s.setAttribute("d",c),e.setAttribute("d",l),h==="start"?(g.setAttribute("startOffset","0%"),g.setAttribute("text-anchor","start")):h==="middle"?(g.setAttribute("startOffset","50%"),g.setAttribute("text-anchor","middle")):h==="end"&&(g.setAttribute("startOffset","100%"),g.setAttribute("text-anchor","end")),o&&g.parentElement.setAttribute("textLength",e.getTotalLength()),d.style.fontSize=`calc(${n} * (100 / (${r}) * (12 / var(--o-orbit-number) ))`,g.textContent=this.textContent}getAttributes(){let r,n,h,o,e,s=parseFloat(getComputedStyle(this).getPropertyValue("--o-stroke-width")),d=parseFloat(getComputedStyle(this).getPropertyValue("r")||0),g=this.getAttribute("shape")||"none",c=this.hasAttribute("flip")||this.classList.contains("flip"),l=this.hasAttribute("fit-range")||this.classList.contains("fit-range")||!1,t=parseFloat(getComputedStyle(this).getPropertyValue("--o-force")),b=this.getAttribute("text-anchor")||"middle",A=getComputedStyle(this).getPropertyValue("font-size")||getComputedStyle(this).getPropertyValue("--font-size"),C=parseFloat(getComputedStyle(this).getPropertyValue("--o-range")||360),a=parseFloat(this.getAttribute("value"));if(a){n=this.getProgressAngle(C,a);let M=this.previousElementSibling,k=M?parseFloat(getComputedStyle(M).getPropertyValue("--o_stack")):0;this.style.setProperty("--o_stack",k+n),k>=0&&c&&this.style.setProperty("--o-angle-composite",parseFloat(k)+"deg"),k>0&&!c&&this.style.setProperty("--o-angle-composite",parseFloat(k)+"deg")}else r=getComputedStyle(this).getPropertyValue("--o-angle"),n=B(r);h=parseFloat(getComputedStyle(this).getPropertyValue("--o-orbit-number")),o=parseFloat(getComputedStyle(this).getPropertyValue("--o-size-ratio"));let i=d/h*o-s+.3,v=i/2*100/d/2,O=parseFloat(getComputedStyle(this).getPropertyValue("--o-gap"));this.classList.contains("outer-orbit")?e=v:this.classList.contains("quarter-outer-orbit")?e=v*-.5:this.classList.contains("inner-orbit")?e=v*-1:this.classList.contains("quarter-inner-orbit")?e=v*.5:e=0;let E=50+e;return{orbitRadius:d,arcHeight:i,realRadius:E,gap:O,arcAngle:n,shape:g,length:t,fontSize:A,flip:c,fitRange:l,textAnchor:b,arcHeightPercentage:v,innerOuter:e,orbitNumber:h,size:o,strokeWidth:s}}getProgressAngle(r,n){let h=n,o=parseFloat(this.getAttribute("max"))||100;return h/o*r}getControlPoint(r,n,h,o,e="clockwise"){let s=(r+h)/2,d=(n+o)/2,g=h-r,c=o-n,l,t;return e==="clockwise"?(l=s+c*.4,t=d-g*.4):(l=s-c*.4,t=d+g*.4),{xc:l,yc:t}}calculateArcParameters(){let{arcAngle:r,realRadius:n,gap:h,arcHeightPercentage:o,orbitNumber:e,shape:s,strokeWidth:d,arcHeight:g}=this.getAttributes(),c=n,l,t,b=Math.PI/2,A=d,C=r*Math.PI/180,a=c+o,i=c-o!==0?c-o:c,v=(h+A*1.25)/e/a,O=(h+A*1.25)/e/i,E=v-b,M=C-v-b,k=O-b,F=C-O-b;function u(p,$,P=0,x=0){let S=p+P,L=$+x*Math.PI/180;return{x:50+S*Math.cos(L),y:50+S*Math.sin(L)}}let w=u(a,E),R=u(a,M),y=u(i,k),f=u(i,F);if(l=r<=180?0:1,s==="rounded"){let p=g<10?5:g<5?2.5:10,$=u(a,E,0,p/e),P=u(a,M,0,-p/e),x=u(i,k,0,p/e),S=u(i,F,0,-p/e),L=u(a,E,-(p/2)/e,0),m=u(a,M,-(p/2)/e,0),V=u(i,k,p/2/e,0),z=u(i,F,p/2/e,0),X=this.getControlPoint(P.x,P.y,m.x,m.y),Y=this.getControlPoint(z.x,z.y,S.x,S.y),Q=this.getControlPoint(x.x,x.y,V.x,V.y),Z=this.getControlPoint(L.x,L.y,$.x,$.y);t=`M ${$.x},${$.y} A ${a},${a} 0 ${l} 1 ${P.x},${P.y}`,t+=`Q ${X.xc}, ${X.yc} ${m.x} ${m.y} `,t+=`L ${m.x} ${m.y}`,t+=`L ${z.x} ${z.y}`,t+=`Q ${Y.xc}, ${Y.yc} ${S.x} ${S.y} `,t+=`A ${i},${i} 0 ${l} 0 ${x.x},${x.y}`,t+=`Q ${Q.xc}, ${Q.yc} ${V.x} ${V.y} `,t+=`L ${V.x} ${V.y}`,t+=`L ${L.x} ${L.y}`,t+=` Q ${Z.xc}, ${Z.yc} ${$.x} ${$.y} `,t+=" Z"}else if(s==="circle"||s==="bullet")t=`M ${w.x},${w.y} A ${a},${a} 0 ${l} 1 ${R.x},${R.y}`,t+=` A 1,1 0 0 1 ${f.x},${f.y} `,t+=` A ${i},${i} 0 ${l} 0 ${y.x},${y.y}`,t+=` A 1,1 0 0 ${s==="circle"?1:0} ${w.x},${w.y} `,t+=" Z";else if(s==="circle1"){let p=g*1.36,$=u(a,E,0,p/e),P=u(a,M,0,-(p/e)),x=u(i,k,0,p/e),S=u(i,F,0,-(p/e));t=`M ${$.x},${$.y} A ${a},${a} 0 ${l} 1 ${P.x},${P.y}`,t+=` A 1,1 0 0 1 ${S.x},${S.y} `,t+=` A ${i},${i} 0 ${l} 0 ${x.x},${x.y}`,t+=` A 1,1 0 0 1 ${$.x},${$.y} `,t+=" Z"}else if(s==="arrow"){let p=u(c,M,0,24/e/2),$=u(c,E,0,24/e/2);t=`M ${w.x},${w.y} A ${a},${a} 0 ${l} 1 ${R.x},${R.y}`,t+=`L ${p.x} ${p.y}`,t+=`L ${f.x} ${f.y}`,t+=`A ${i},${i} 0 ${l} 0 ${y.x}, ${y.y}`,t+=`L ${$.x} ${$.y} `,t+="Z"}else if(s==="backslash"||s==="slash"){let p=u(a,E,0,s==="backslash"?0:24/e/2),$=u(a,M,0,s==="backslash"?0:24/e/2),P=u(i,k,0,s==="backslash"?24/e/2:0),x=u(i,F,0,s==="backslash"?24/e/2:0);t=`M ${p.x},${p.y} A ${a},${a} 0 ${l} 1 ${$.x},${$.y}`,t+=`L ${x.x} ${x.y}`,t+=`A ${i},${i} 0 ${l} 0 ${P.x}, ${P.y}`,t+="Z"}else s==="nr"?(t=`M ${w.x},${w.y} A ${a},${a} 0 ${l} 1 ${R.x},${R.y}`,t+=`L ${f.x} ${f.y}`,t+=`A ${i},${i} 0 ${l} 0 ${y.x}, ${y.y}`,t+="Z"):(t=`M ${w.x},${w.y} A ${a},${a} 0 ${l} 1 ${R.x},${R.y}`,t+=`L ${f.x} ${f.y}`,t+=`A ${i},${i} 0 ${l} 0 ${y.x}, ${y.y}`,t+="Z");return{dShape:t}}calculateTextArcParameters(){let{arcAngle:r,realRadius:n,gap:h,flip:o}=this.getAttributes(),e=n,s,d,g,c,l,t,b,A=h*.5;b=o?0:1,l=r<=180?0:1;let C=50+e*Math.cos((-90+A)*(Math.PI/180)),a=50+e*Math.sin((-90+A)*(Math.PI/180)),i=50+e*Math.cos((r-90-A)*Math.PI/180),v=50+e*Math.sin((r-90-A)*Math.PI/180);return o?(s=i,d=v,g=C,c=a):(s=C,d=a,g=i,c=v),t=`M ${s},${d} A ${e},${e} 0 ${l} ${b} ${g},${c}`,{dPath:t}}};function B(I){let r=I.match(/calc\(\s*([\d.]+)deg\s*\/\s*\(\s*(\d+)\s*-\s*(\d+)\s*\)\s*\)/);if(r){let n=parseFloat(r[1]),h=parseInt(r[2])-parseInt(r[3]);if(!isNaN(n)&&!isNaN(h)&&h!==0)return n/h}}var N={};N={resize:I=>{let r=document.querySelector(I);if(!r){console.error(`Not found: ${I}`);return}new ResizeObserver(h=>{for(let o of h){let{width:e}=o.contentRect,s=r.querySelectorAll(".gravity-spot");s?s.forEach(d=>{let g=getComputedStyle(d).getPropertyValue("--o-force"),c=e/500;d.style.setProperty("--o-force-ratio",`${c}`)}):console.error("No gravity-spot found")}}).observe(r)}};customElements.get("o-progress")||customElements.define("o-progress",H);customElements.get("o-arc")||customElements.define("o-arc",q);window.Orbit=N;})();
91
+ `;var q=class extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot.appendChild(T.content.cloneNode(!0))}connectedCallback(){this.update(),this.observer=new MutationObserver(i=>{this.observer.disconnect(),i.forEach(c=>{this.update()}),this.observer.observe(this,{attributes:!0,childList:!0})}),this.observer.observe(this,{attributes:!0,childList:!0}),this.textObserver=new MutationObserver(()=>{let i=this.shadowRoot.querySelector("textPath");i.textContent=this.textContent}),this.textObserver.observe(this,{characterData:!0,subtree:!0})}disconnectedCallback(){this.observer.disconnect(),this.textObserver.disconnect()}update(){let{length:i,fontSize:c,textAnchor:g,fitRange:p}=this.getAttributes(),e=this.shadowRoot.getElementById("orbitPath"),r=this.shadowRoot.getElementById("orbitShape"),y=this.shadowRoot.querySelector("text"),$=this.shadowRoot.querySelector("textPath"),{dShape:a}=this.calculateArcParameters(),{dPath:n}=this.calculateTextArcParameters();r.setAttribute("d",a),e.setAttribute("d",n),g==="start"?($.setAttribute("startOffset","0%"),$.setAttribute("text-anchor","start")):g==="middle"?($.setAttribute("startOffset","50%"),$.setAttribute("text-anchor","middle")):g==="end"&&($.setAttribute("startOffset","100%"),$.setAttribute("text-anchor","end")),p&&$.parentElement.setAttribute("textLength",e.getTotalLength()),y.style.fontSize=`calc(${c} * (100 / (${i}) * (12 / var(--o-orbit-number) ))`,$.textContent=this.textContent}getAttributes(){let i,c,g,p,e,r=parseFloat(getComputedStyle(this).getPropertyValue("--o-stroke-width")),y=parseFloat(getComputedStyle(this).getPropertyValue("r")||0),$=this.getAttribute("shape")||"none",a=this.hasAttribute("flip")||this.classList.contains("flip"),n=this.hasAttribute("fit-range")||this.classList.contains("fit-range")||!1,t=parseFloat(getComputedStyle(this).getPropertyValue("--o-force")),x=this.getAttribute("text-anchor")||"middle",E=getComputedStyle(this).getPropertyValue("font-size")||getComputedStyle(this).getPropertyValue("--font-size"),I=parseFloat(getComputedStyle(this).getPropertyValue("--o-range")||360),s=parseFloat(this.getAttribute("value"));if(s){c=this.getProgressAngle(I,s);let S=this.previousElementSibling,A=S?parseFloat(getComputedStyle(S).getPropertyValue("--o_stack")):0;this.style.setProperty("--o_stack",A+c),A>=0&&a&&this.style.setProperty("--o-angle-composite",parseFloat(A)+"deg"),A>0&&!a&&this.style.setProperty("--o-angle-composite",parseFloat(A)+"deg")}else i=getComputedStyle(this).getPropertyValue("--o-angle"),c=j(i);g=parseFloat(getComputedStyle(this).getPropertyValue("--o-orbit-number")),p=parseFloat(getComputedStyle(this).getPropertyValue("--o-size-ratio"));let o=y/g*p-r+.3,M=o/2*100/y/2,V=parseFloat(getComputedStyle(this).getPropertyValue("--o-gap"));this.classList.contains("outer-orbit")?e=M:this.classList.contains("quarter-outer-orbit")?e=M*-.5:this.classList.contains("inner-orbit")?e=M*-1:this.classList.contains("quarter-inner-orbit")?e=M*.5:e=0;let P=50+e;return{orbitRadius:y,arcHeight:o,realRadius:P,gap:V,arcAngle:c,shape:$,length:t,fontSize:E,flip:a,fitRange:n,textAnchor:x,arcHeightPercentage:M,innerOuter:e,orbitNumber:g,size:p,strokeWidth:r}}getProgressAngle(i,c){let g=c,p=parseFloat(this.getAttribute("max"))||100;return g/p*i}getControlPoint(i,c,g,p,e="clockwise"){let r=(i+g)/2,y=(c+p)/2,$=g-i,a=p-c,n,t;return e==="clockwise"?(n=r+a*.4,t=y-$*.4):(n=r-a*.4,t=y+$*.4),{xc:n,yc:t}}arcPoint(i,c,g=0,p=0){let e=i+g,r=c+p*Math.PI/180;return{x:50+e*Math.cos(r),y:50+e*Math.sin(r)}}calculateArcParameters(){let{arcAngle:i,realRadius:c,gap:g,arcHeightPercentage:p,orbitNumber:e,shape:r,strokeWidth:y,arcHeight:$}=this.getAttributes(),a=c,n,t,x=Math.PI/2,E=y,I=i*Math.PI/180,s=a+p,o=a-p!==0?a-p:a,M=(g+E*1.25)/e/s,V=(g+E*1.25)/e/o,P=M-x,S=I-M-x,A=V-x,m=I-V-x,b=this.arcPoint(s,P),v=this.arcPoint(s,S),w=this.arcPoint(o,A),k=this.arcPoint(o,m);if(n=i<=180?0:1,r==="rounded"){let l=$<10?5:$<5?2.5:10,h=this.arcPoint(s,P,0,l/e),u=this.arcPoint(s,S,0,-l/e),d=this.arcPoint(o,A,0,l/e),f=this.arcPoint(o,m,0,-l/e),L=this.arcPoint(s,P,-(l/2)/e,0),C=this.arcPoint(s,S,-(l/2)/e,0),R=this.arcPoint(o,A,l/2/e,0),F=this.arcPoint(o,m,l/2/e,0),z=this.getControlPoint(u.x,u.y,C.x,C.y),Q=this.getControlPoint(F.x,F.y,f.x,f.y),Z=this.getControlPoint(d.x,d.y,R.x,R.y),H=this.getControlPoint(L.x,L.y,h.x,h.y);t=`M ${h.x},${h.y} A ${s},${s} 0 ${n} 1 ${u.x},${u.y}`,t+=`Q ${z.xc}, ${z.yc} ${C.x} ${C.y} `,t+=`L ${C.x} ${C.y}`,t+=`L ${F.x} ${F.y}`,t+=`Q ${Q.xc}, ${Q.yc} ${f.x} ${f.y} `,t+=`A ${o},${o} 0 ${n} 0 ${d.x},${d.y}`,t+=`Q ${Z.xc}, ${Z.yc} ${R.x} ${R.y} `,t+=`L ${R.x} ${R.y}`,t+=`L ${L.x} ${L.y}`,t+=` Q ${H.xc}, ${H.yc} ${h.x} ${h.y} `,t+=" Z"}else if(r==="circle"||r==="circle-a"||r==="bullet")t=`M ${b.x},${b.y} A ${s},${s} 0 ${n} 1 ${v.x},${v.y}`,t+=` A 1,1 0 0 1 ${k.x},${k.y} `,t+=` A ${o},${o} 0 ${n} 0 ${w.x},${w.y}`,t+=` A 1,1 0 0 ${r==="circle"||r==="circle-a"?1:0} ${b.x},${b.y} `,t+=" Z";else if(r==="circle-b"){let l=$*1.36,h=this.arcPoint(s,P,0,l/e),u=this.arcPoint(s,S,0,-(l/e)),d=this.arcPoint(o,A,0,l/e),f=this.arcPoint(o,m,0,-(l/e));t=`M ${h.x},${h.y} A ${s},${s} 0 ${n} 1 ${u.x},${u.y}`,t+=` A 1,1 0 0 1 ${f.x},${f.y} `,t+=` A ${o},${o} 0 ${n} 0 ${d.x},${d.y}`,t+=` A 1,1 0 0 1 ${h.x},${h.y} `,t+=" Z"}else if(r==="arrow"){let l=this.arcPoint(a,S,0,24/e/2),h=this.arcPoint(a,P,0,24/e/2);t=`M ${b.x},${b.y} A ${s},${s} 0 ${n} 1 ${v.x},${v.y}`,t+=`L ${l.x} ${l.y}`,t+=`L ${k.x} ${k.y}`,t+=`A ${o},${o} 0 ${n} 0 ${w.x}, ${w.y}`,t+=`L ${h.x} ${h.y} `,t+="Z"}else if(r==="backslash"||r==="slash"){let l=this.arcPoint(s,P,0,r==="backslash"?0:24/e/2),h=this.arcPoint(s,S,0,r==="backslash"?0:24/e/2),u=this.arcPoint(o,A,0,r==="backslash"?24/e/2:0),d=this.arcPoint(o,m,0,r==="backslash"?24/e/2:0);t=`M ${l.x},${l.y} A ${s},${s} 0 ${n} 1 ${h.x},${h.y}`,t+=`L ${d.x} ${d.y}`,t+=`A ${o},${o} 0 ${n} 0 ${u.x}, ${u.y}`,t+="Z"}else if(r==="zigzag"){let l=this.arcPoint(a,P,-$/e/2,3),h=this.arcPoint(a,P,0/e/2,0),u=this.arcPoint(a,P,$/e/2,3),d=this.arcPoint(a,m,$/e/2,3),f=this.arcPoint(a,m,0/e/2,0),L=this.arcPoint(a,m,-$/e/2,3);t=`M ${b.x},${b.y} A ${s},${s} 0 ${n} 1 ${v.x},${v.y}`,t+=`L ${d.x} ${d.y}`,t+=`L ${f.x} ${f.y}`,t+=`L ${L.x} ${L.y}`,t+=`L ${k.x} ${k.y}`,t+=`A ${o},${o} 0 ${n} 0 ${w.x}, ${w.y}`,t+=`L ${l.x} ${l.y}`,t+=`L ${h.x} ${h.y}`,t+=`L ${u.x} ${u.y}`,t+="Z"}else t=`M ${b.x},${b.y} A ${s},${s} 0 ${n} 1 ${v.x},${v.y}`,t+=`L ${k.x} ${k.y}`,t+=`A ${o},${o} 0 ${n} 0 ${w.x}, ${w.y}`,t+="Z";return{dShape:t}}calculateTextArcParameters(){let{arcAngle:i,realRadius:c,gap:g,flip:p}=this.getAttributes(),e=c,r,y,$,a,n,t,x,E=g*.5;x=p?0:1,n=i<=180?0:1;let I=50+e*Math.cos((-90+E)*(Math.PI/180)),s=50+e*Math.sin((-90+E)*(Math.PI/180)),o=50+e*Math.cos((i-90-E)*Math.PI/180),M=50+e*Math.sin((i-90-E)*Math.PI/180);return p?(r=o,y=M,$=I,a=s):(r=I,y=s,$=o,a=M),t=`M ${r},${y} A ${e},${e} 0 ${n} ${x} ${$},${a}`,{dPath:t}}};function j(O){let i=O.match(/calc\(\s*([\d.]+)deg\s*\/\s*\(\s*(\d+)\s*-\s*(\d+)\s*\)\s*\)/);if(i){let c=parseFloat(i[1]),g=parseInt(i[2])-parseInt(i[3]);if(!isNaN(c)&&!isNaN(g)&&g!==0)return c/g}}var N={};N={resize:O=>{let i=document.querySelector(O);if(!i){console.error(`Not found: ${O}`);return}new ResizeObserver(g=>{for(let p of g){let{width:e}=p.contentRect,r=i.querySelectorAll(".gravity-spot");r?r.forEach(y=>{let $=getComputedStyle(y).getPropertyValue("--o-force"),a=e/500;y.style.setProperty("--o-force-ratio",`${a}`)}):console.error("No gravity-spot found")}}).observe(i)}};customElements.get("o-progress")||customElements.define("o-progress",U);customElements.get("o-arc")||customElements.define("o-arc",q);window.Orbit=N;})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zumer/orbit",
3
- "version": "1.2.2",
3
+ "version": "1.3.0",
4
4
  "description": "Orbit is a CSS framework for radial interfaces",
5
5
  "main": "./dist/orbit.js",
6
6
  "scripts": {