@digilogiclabs/saas-factory-ui 2.8.2 → 2.9.1
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/index.d.mts +43 -7
- package/dist/index.d.ts +43 -7
- package/dist/index.js +329 -146
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +330 -146
- package/dist/index.mjs.map +1 -1
- package/dist/web/index.d.mts +43 -7
- package/dist/web/index.d.ts +43 -7
- package/dist/web/index.js +329 -146
- package/dist/web/index.js.map +1 -1
- package/dist/web/index.mjs +330 -146
- package/dist/web/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/web/index.js
CHANGED
|
@@ -497,6 +497,7 @@ __export(index_exports, {
|
|
|
497
497
|
audioAppTabs: () => audioAppTabs,
|
|
498
498
|
audioPlayerVariants: () => audioPlayerVariants,
|
|
499
499
|
breadcrumbsVariants: () => breadcrumbsVariants,
|
|
500
|
+
buildPolyhedron: () => buildPolyhedron,
|
|
500
501
|
cn: () => cn,
|
|
501
502
|
commonValidators: () => commonValidators,
|
|
502
503
|
containerVariants: () => containerVariants2,
|
|
@@ -507,6 +508,7 @@ __export(index_exports, {
|
|
|
507
508
|
cssAnimations: () => cssAnimations,
|
|
508
509
|
d6LandingRotation: () => d6LandingRotation,
|
|
509
510
|
dailyTrendingConfig: () => dailyTrendingConfig,
|
|
511
|
+
dealFaceValues: () => dealFaceValues,
|
|
510
512
|
detectAuthProvider: () => detectAuthProvider,
|
|
511
513
|
detectDelimiter: () => detectDelimiter,
|
|
512
514
|
detectHeader: () => detectHeader,
|
|
@@ -30361,17 +30363,226 @@ function d6LandingRotation(value) {
|
|
|
30361
30363
|
y: Math.abs(p.y) === 180 ? 180 : -p.y || 0
|
|
30362
30364
|
};
|
|
30363
30365
|
}
|
|
30364
|
-
var
|
|
30365
|
-
|
|
30366
|
-
|
|
30367
|
-
|
|
30368
|
-
|
|
30369
|
-
|
|
30370
|
-
|
|
30371
|
-
|
|
30372
|
-
|
|
30366
|
+
var PHI = (1 + Math.sqrt(5)) / 2;
|
|
30367
|
+
var dot3 = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
30368
|
+
var cross3 = (a, b) => [
|
|
30369
|
+
a[1] * b[2] - a[2] * b[1],
|
|
30370
|
+
a[2] * b[0] - a[0] * b[2],
|
|
30371
|
+
a[0] * b[1] - a[1] * b[0]
|
|
30372
|
+
];
|
|
30373
|
+
var sub3 = (a, b) => [
|
|
30374
|
+
a[0] - b[0],
|
|
30375
|
+
a[1] - b[1],
|
|
30376
|
+
a[2] - b[2]
|
|
30377
|
+
];
|
|
30378
|
+
var scale3 = (a, s) => [a[0] * s, a[1] * s, a[2] * s];
|
|
30379
|
+
var len3 = (a) => Math.hypot(a[0], a[1], a[2]);
|
|
30380
|
+
var norm3 = (a) => scale3(a, 1 / len3(a));
|
|
30381
|
+
function rotateAround(p, axis, angle) {
|
|
30382
|
+
const cosA = Math.cos(angle);
|
|
30383
|
+
const sinA = Math.sin(angle);
|
|
30384
|
+
const t1 = scale3(p, cosA);
|
|
30385
|
+
const t2 = scale3(cross3(axis, p), sinA);
|
|
30386
|
+
const t3 = scale3(axis, dot3(axis, p) * (1 - cosA));
|
|
30387
|
+
return [t1[0] + t2[0] + t3[0], t1[1] + t2[1] + t3[1], t1[2] + t2[2] + t3[2]];
|
|
30388
|
+
}
|
|
30389
|
+
function rotationTo(from, to) {
|
|
30390
|
+
const c = dot3(from, to);
|
|
30391
|
+
if (c > 1 - 1e-9) return (p) => p;
|
|
30392
|
+
const axis = c < -1 + 1e-9 ? norm3(
|
|
30393
|
+
Math.abs(from[0]) < 0.9 ? cross3(from, [1, 0, 0]) : cross3(from, [0, 1, 0])
|
|
30394
|
+
) : norm3(cross3(from, to));
|
|
30395
|
+
const angle = Math.acos(Math.max(-1, Math.min(1, c)));
|
|
30396
|
+
return (p) => rotateAround(p, axis, angle);
|
|
30397
|
+
}
|
|
30398
|
+
function solidVertices(sides) {
|
|
30399
|
+
switch (sides) {
|
|
30400
|
+
case 4:
|
|
30401
|
+
return [
|
|
30402
|
+
[1, 1, 1],
|
|
30403
|
+
[1, -1, -1],
|
|
30404
|
+
[-1, 1, -1],
|
|
30405
|
+
[-1, -1, 1]
|
|
30406
|
+
];
|
|
30407
|
+
case 8:
|
|
30408
|
+
return [
|
|
30409
|
+
[1, 0, 0],
|
|
30410
|
+
[-1, 0, 0],
|
|
30411
|
+
[0, 1, 0],
|
|
30412
|
+
[0, -1, 0],
|
|
30413
|
+
[0, 0, 1],
|
|
30414
|
+
[0, 0, -1]
|
|
30415
|
+
];
|
|
30416
|
+
case 10: {
|
|
30417
|
+
const h = 0.15;
|
|
30418
|
+
const cos36 = Math.cos(Math.PI / 5);
|
|
30419
|
+
const zApex = 2 * h / (1 - cos36) * cos36 + h;
|
|
30420
|
+
const verts = [
|
|
30421
|
+
[0, 0, zApex],
|
|
30422
|
+
[0, 0, -zApex]
|
|
30423
|
+
];
|
|
30424
|
+
for (let k = 0; k < 10; k++) {
|
|
30425
|
+
const a = k * Math.PI / 5;
|
|
30426
|
+
verts.push([Math.cos(a), Math.sin(a), k % 2 === 0 ? h : -h]);
|
|
30427
|
+
}
|
|
30428
|
+
return verts;
|
|
30429
|
+
}
|
|
30430
|
+
case 12: {
|
|
30431
|
+
const v = [];
|
|
30432
|
+
for (const sx of [1, -1])
|
|
30433
|
+
for (const sy of [1, -1])
|
|
30434
|
+
for (const sz of [1, -1]) v.push([sx, sy, sz]);
|
|
30435
|
+
const b = 1 / PHI;
|
|
30436
|
+
for (const s1 of [1, -1])
|
|
30437
|
+
for (const s2 of [1, -1]) {
|
|
30438
|
+
v.push([0, s1 * b, s2 * PHI]);
|
|
30439
|
+
v.push([s1 * b, s2 * PHI, 0]);
|
|
30440
|
+
v.push([s2 * PHI, 0, s1 * b]);
|
|
30441
|
+
}
|
|
30442
|
+
return v;
|
|
30443
|
+
}
|
|
30444
|
+
case 20: {
|
|
30445
|
+
const v = [];
|
|
30446
|
+
for (const s1 of [1, -1])
|
|
30447
|
+
for (const s2 of [1, -1]) {
|
|
30448
|
+
v.push([0, s1, s2 * PHI]);
|
|
30449
|
+
v.push([s1, s2 * PHI, 0]);
|
|
30450
|
+
v.push([s2 * PHI, 0, s1]);
|
|
30451
|
+
}
|
|
30452
|
+
return v;
|
|
30453
|
+
}
|
|
30373
30454
|
}
|
|
30374
|
-
}
|
|
30455
|
+
}
|
|
30456
|
+
function computeFaces(verts) {
|
|
30457
|
+
const faces = [];
|
|
30458
|
+
const seen = /* @__PURE__ */ new Set();
|
|
30459
|
+
for (let i = 0; i < verts.length; i++)
|
|
30460
|
+
for (let j = i + 1; j < verts.length; j++)
|
|
30461
|
+
for (let k = j + 1; k < verts.length; k++) {
|
|
30462
|
+
let n = cross3(sub3(verts[j], verts[i]), sub3(verts[k], verts[i]));
|
|
30463
|
+
if (len3(n) < 1e-9) continue;
|
|
30464
|
+
n = norm3(n);
|
|
30465
|
+
let d = dot3(n, verts[i]);
|
|
30466
|
+
if (d < 0) {
|
|
30467
|
+
n = scale3(n, -1);
|
|
30468
|
+
d = -d;
|
|
30469
|
+
}
|
|
30470
|
+
if (verts.some((p) => dot3(n, p) > d + 1e-4)) continue;
|
|
30471
|
+
const ids = verts.flatMap(
|
|
30472
|
+
(p, idx) => Math.abs(dot3(n, p) - d) < 1e-4 ? [idx] : []
|
|
30473
|
+
);
|
|
30474
|
+
const key = ids.join(",");
|
|
30475
|
+
if (seen.has(key)) continue;
|
|
30476
|
+
seen.add(key);
|
|
30477
|
+
faces.push({ normal: n, ids });
|
|
30478
|
+
}
|
|
30479
|
+
return faces;
|
|
30480
|
+
}
|
|
30481
|
+
var polyhedronCache = /* @__PURE__ */ new Map();
|
|
30482
|
+
function buildPolyhedron(sides) {
|
|
30483
|
+
const cached = polyhedronCache.get(sides);
|
|
30484
|
+
if (cached) return cached;
|
|
30485
|
+
let verts = solidVertices(sides);
|
|
30486
|
+
const rough = computeFaces(verts);
|
|
30487
|
+
const front = rough.reduce(
|
|
30488
|
+
(best, f) => f.normal[2] > best.normal[2] + 1e-9 ? f : best
|
|
30489
|
+
);
|
|
30490
|
+
const rot = rotationTo(front.normal, [0, 0, 1]);
|
|
30491
|
+
verts = verts.map(rot);
|
|
30492
|
+
const rMax = Math.max(...verts.map(len3));
|
|
30493
|
+
verts = verts.map((p) => scale3(p, 1 / rMax));
|
|
30494
|
+
const raw = computeFaces(verts);
|
|
30495
|
+
const built = raw.map((f) => {
|
|
30496
|
+
const faceVerts = f.ids.map((i) => verts[i]);
|
|
30497
|
+
const centroid = scale3(
|
|
30498
|
+
faceVerts.reduce((a, b) => [a[0] + b[0], a[1] + b[1], a[2] + b[2]]),
|
|
30499
|
+
1 / faceVerts.length
|
|
30500
|
+
);
|
|
30501
|
+
const w = f.normal;
|
|
30502
|
+
let vRaw = sub3([0, 1, 0], scale3(w, w[1]));
|
|
30503
|
+
if (len3(vRaw) < 1e-6) vRaw = sub3([0, 0, 1], scale3(w, w[2]));
|
|
30504
|
+
const v = norm3(vRaw);
|
|
30505
|
+
const u = cross3(v, w);
|
|
30506
|
+
const pts = faceVerts.map((p) => [
|
|
30507
|
+
dot3(sub3(p, centroid), u),
|
|
30508
|
+
dot3(sub3(p, centroid), v)
|
|
30509
|
+
]).sort((a, b) => Math.atan2(a[1], a[0]) - Math.atan2(b[1], b[0]));
|
|
30510
|
+
return { normal: w, centroid, u, v, pts, value: 0 };
|
|
30511
|
+
});
|
|
30512
|
+
built.sort((a, b) => b.normal[2] - a.normal[2]);
|
|
30513
|
+
const oppOf = (i) => built.findIndex((g) => dot3(built[i].normal, g.normal) < -0.9999);
|
|
30514
|
+
const pool = [];
|
|
30515
|
+
for (let v2 = 1; v2 < sides; v2++) pool.push(v2);
|
|
30516
|
+
built[0].value = sides;
|
|
30517
|
+
const opp0 = oppOf(0);
|
|
30518
|
+
if (opp0 >= 0) {
|
|
30519
|
+
built[opp0].value = 1;
|
|
30520
|
+
pool.splice(pool.indexOf(1), 1);
|
|
30521
|
+
}
|
|
30522
|
+
for (let i = 1; i < built.length; i++) {
|
|
30523
|
+
if (built[i].value !== 0) continue;
|
|
30524
|
+
const v2 = pool.shift();
|
|
30525
|
+
built[i].value = v2;
|
|
30526
|
+
const j = oppOf(i);
|
|
30527
|
+
if (j >= 0 && built[j].value === 0) {
|
|
30528
|
+
built[j].value = sides + 1 - v2;
|
|
30529
|
+
pool.splice(pool.indexOf(sides + 1 - v2), 1);
|
|
30530
|
+
}
|
|
30531
|
+
}
|
|
30532
|
+
const faceRadius = Math.max(
|
|
30533
|
+
...built.flatMap((f) => f.pts.map(([x, y]) => Math.hypot(x, y)))
|
|
30534
|
+
);
|
|
30535
|
+
const edgeDist = (pts) => Math.min(
|
|
30536
|
+
...pts.map((p1, i2) => {
|
|
30537
|
+
const p2 = pts[(i2 + 1) % pts.length];
|
|
30538
|
+
const dx = p2[0] - p1[0];
|
|
30539
|
+
const dy = p2[1] - p1[1];
|
|
30540
|
+
const t = Math.max(
|
|
30541
|
+
0,
|
|
30542
|
+
Math.min(1, -(p1[0] * dx + p1[1] * dy) / (dx * dx + dy * dy))
|
|
30543
|
+
);
|
|
30544
|
+
return Math.hypot(p1[0] + t * dx, p1[1] + t * dy);
|
|
30545
|
+
})
|
|
30546
|
+
);
|
|
30547
|
+
const faceInradius = Math.min(...built.map((f) => edgeDist(f.pts)));
|
|
30548
|
+
const opposite = built.map((_, i) => oppOf(i));
|
|
30549
|
+
const result = {
|
|
30550
|
+
faces: built,
|
|
30551
|
+
opposite,
|
|
30552
|
+
faceRadius,
|
|
30553
|
+
faceInradius
|
|
30554
|
+
};
|
|
30555
|
+
polyhedronCache.set(sides, result);
|
|
30556
|
+
return result;
|
|
30557
|
+
}
|
|
30558
|
+
function dealFaceValues(geo, sides, rolled) {
|
|
30559
|
+
const n = geo.faces.length;
|
|
30560
|
+
const out = new Array(n).fill(0);
|
|
30561
|
+
const used = /* @__PURE__ */ new Set([rolled]);
|
|
30562
|
+
out[0] = rolled;
|
|
30563
|
+
const opp0 = geo.opposite[0];
|
|
30564
|
+
if (opp0 >= 0) {
|
|
30565
|
+
out[opp0] = sides + 1 - rolled;
|
|
30566
|
+
used.add(sides + 1 - rolled);
|
|
30567
|
+
}
|
|
30568
|
+
const values = [];
|
|
30569
|
+
for (let v = 1; v <= sides; v++) if (!used.has(v)) values.push(v);
|
|
30570
|
+
for (let i = values.length - 1; i > 0; i--) {
|
|
30571
|
+
const j = Math.floor(Math.random() * (i + 1));
|
|
30572
|
+
[values[i], values[j]] = [values[j], values[i]];
|
|
30573
|
+
}
|
|
30574
|
+
for (let fi = 1; fi < n; fi++) {
|
|
30575
|
+
if (out[fi] !== 0) continue;
|
|
30576
|
+
const v = values.shift();
|
|
30577
|
+
out[fi] = v;
|
|
30578
|
+
const o = geo.opposite[fi];
|
|
30579
|
+
if (o >= 0 && out[o] === 0) {
|
|
30580
|
+
out[o] = sides + 1 - v;
|
|
30581
|
+
values.splice(values.indexOf(sides + 1 - v), 1);
|
|
30582
|
+
}
|
|
30583
|
+
}
|
|
30584
|
+
return out;
|
|
30585
|
+
}
|
|
30375
30586
|
function formatDieValue(v, sides) {
|
|
30376
30587
|
return sides > 8 && (v === 6 || v === 9) ? `${v}.` : String(v);
|
|
30377
30588
|
}
|
|
@@ -30557,7 +30768,7 @@ function DiceRoller({
|
|
|
30557
30768
|
const dieWrapperRefs = (0, import_react69.useRef)([]);
|
|
30558
30769
|
const cubeRefs = (0, import_react69.useRef)([]);
|
|
30559
30770
|
const shadowRefs = (0, import_react69.useRef)([]);
|
|
30560
|
-
const
|
|
30771
|
+
const faceTextRefs = (0, import_react69.useRef)([]);
|
|
30561
30772
|
const currentPositionsRef = (0, import_react69.useRef)(null);
|
|
30562
30773
|
const rollingRef = (0, import_react69.useRef)(false);
|
|
30563
30774
|
const dieSetters = (0, import_react69.useRef)([]);
|
|
@@ -30587,15 +30798,18 @@ function DiceRoller({
|
|
|
30587
30798
|
}
|
|
30588
30799
|
return shadowSetters.current[i];
|
|
30589
30800
|
};
|
|
30590
|
-
const
|
|
30591
|
-
const
|
|
30592
|
-
if (!
|
|
30593
|
-
|
|
30594
|
-
|
|
30801
|
+
const faceTextSetters = (0, import_react69.useRef)([]);
|
|
30802
|
+
const getFaceTextSetter = (i, fi) => {
|
|
30803
|
+
if (!faceTextSetters.current[i]) faceTextSetters.current[i] = [];
|
|
30804
|
+
if (!faceTextSetters.current[i][fi]) {
|
|
30805
|
+
faceTextSetters.current[i][fi] = (el) => {
|
|
30806
|
+
if (!faceTextRefs.current[i]) faceTextRefs.current[i] = [];
|
|
30807
|
+
faceTextRefs.current[i][fi] = el;
|
|
30595
30808
|
};
|
|
30596
30809
|
}
|
|
30597
|
-
return
|
|
30810
|
+
return faceTextSetters.current[i][fi];
|
|
30598
30811
|
};
|
|
30812
|
+
const sheenGradientId = (0, import_react69.useId)();
|
|
30599
30813
|
const timersRef = (0, import_react69.useRef)([]);
|
|
30600
30814
|
const rafHandleRef = (0, import_react69.useRef)(null);
|
|
30601
30815
|
const arenaRef = (0, import_react69.useRef)(null);
|
|
@@ -30799,12 +31013,15 @@ function DiceRoller({
|
|
|
30799
31013
|
for (let f = 1; f <= flickerTicks; f++) {
|
|
30800
31014
|
const t = setTimeout(() => {
|
|
30801
31015
|
for (let i = 0; i < clampedCount; i++) {
|
|
30802
|
-
const
|
|
30803
|
-
if (
|
|
30804
|
-
|
|
30805
|
-
|
|
30806
|
-
|
|
30807
|
-
|
|
31016
|
+
const texts = faceTextRefs.current[i];
|
|
31017
|
+
if (!texts) continue;
|
|
31018
|
+
for (const el of texts) {
|
|
31019
|
+
if (el)
|
|
31020
|
+
el.textContent = formatDieValue(
|
|
31021
|
+
Math.floor(Math.random() * sides) + 1,
|
|
31022
|
+
sides
|
|
31023
|
+
);
|
|
31024
|
+
}
|
|
30808
31025
|
}
|
|
30809
31026
|
}, f * flickerStep);
|
|
30810
31027
|
timersRef.current.push(t);
|
|
@@ -30831,9 +31048,19 @@ function DiceRoller({
|
|
|
30831
31048
|
});
|
|
30832
31049
|
const settleTimer = setTimeout(() => {
|
|
30833
31050
|
if (sides !== 6) {
|
|
31051
|
+
const geo = buildPolyhedron(sides);
|
|
30834
31052
|
for (let i = 0; i < clampedCount; i++) {
|
|
30835
|
-
const
|
|
30836
|
-
if (
|
|
31053
|
+
const texts = faceTextRefs.current[i];
|
|
31054
|
+
if (!texts) continue;
|
|
31055
|
+
const dealt = dealFaceValues(
|
|
31056
|
+
geo,
|
|
31057
|
+
sides,
|
|
31058
|
+
vals[i]
|
|
31059
|
+
);
|
|
31060
|
+
for (let fi = 0; fi < dealt.length; fi++) {
|
|
31061
|
+
const el = texts[fi];
|
|
31062
|
+
if (el) el.textContent = formatDieValue(dealt[fi], sides);
|
|
31063
|
+
}
|
|
30837
31064
|
}
|
|
30838
31065
|
}
|
|
30839
31066
|
setResults(vals);
|
|
@@ -30981,99 +31208,97 @@ function DiceRoller({
|
|
|
30981
31208
|
},
|
|
30982
31209
|
val
|
|
30983
31210
|
)) : (() => {
|
|
30984
|
-
const
|
|
31211
|
+
const geo = buildPolyhedron(sides);
|
|
31212
|
+
const R = effectiveSize / 2;
|
|
31213
|
+
const S = Math.ceil(geo.faceRadius * R * 2) + 6;
|
|
31214
|
+
const fontSize = geo.faceInradius * R * 1.15;
|
|
30985
31215
|
const shown = results?.[d] ?? sides;
|
|
30986
|
-
|
|
30987
|
-
|
|
30988
|
-
|
|
30989
|
-
|
|
30990
|
-
|
|
30991
|
-
|
|
30992
|
-
|
|
30993
|
-
backfaceVisibility: "hidden"
|
|
30994
|
-
};
|
|
30995
|
-
return /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)(import_jsx_runtime113.Fragment, { children: [
|
|
30996
|
-
Array.from({ length: edgeLayers }, (_2, li) => {
|
|
30997
|
-
const z = -depth / 2 + depth * (li + 0.5) / edgeLayers;
|
|
30998
|
-
return /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)(
|
|
30999
|
-
"svg",
|
|
31000
|
-
{
|
|
31001
|
-
viewBox: "0 0 100 100",
|
|
31002
|
-
width: "100%",
|
|
31003
|
-
height: "100%",
|
|
31004
|
-
style: {
|
|
31005
|
-
position: "absolute",
|
|
31006
|
-
inset: 0,
|
|
31007
|
-
display: "block",
|
|
31008
|
-
overflow: "visible",
|
|
31009
|
-
transform: `translateZ(${z}px)`
|
|
31010
|
-
},
|
|
31011
|
-
"aria-hidden": "true",
|
|
31012
|
-
children: [
|
|
31013
|
-
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
31014
|
-
"polygon",
|
|
31015
|
-
{
|
|
31016
|
-
points: shape.points,
|
|
31017
|
-
fill: colors.face
|
|
31018
|
-
}
|
|
31019
|
-
),
|
|
31020
|
-
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
31021
|
-
"polygon",
|
|
31022
|
-
{
|
|
31023
|
-
points: shape.points,
|
|
31024
|
-
fill: "#000",
|
|
31025
|
-
opacity: 0.22
|
|
31026
|
-
}
|
|
31027
|
-
)
|
|
31028
|
-
]
|
|
31029
|
-
},
|
|
31030
|
-
li
|
|
31031
|
-
);
|
|
31032
|
-
}),
|
|
31033
|
-
/* @__PURE__ */ (0, import_jsx_runtime113.jsxs)(
|
|
31216
|
+
return /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(import_jsx_runtime113.Fragment, { children: geo.faces.map((f, fi) => {
|
|
31217
|
+
const m = `matrix3d(${f.u[0]},${f.u[1]},${f.u[2]},0,${f.v[0]},${f.v[1]},${f.v[2]},0,${f.normal[0]},${f.normal[1]},${f.normal[2]},0,${f.centroid[0] * R},${f.centroid[1] * R},${f.centroid[2] * R},1)`;
|
|
31218
|
+
const gid = `${sheenGradientId}-${d}-${fi}`;
|
|
31219
|
+
const pts = f.pts.map(
|
|
31220
|
+
([x, y]) => `${(x * R + S / 2).toFixed(2)},${(y * R + S / 2).toFixed(2)}`
|
|
31221
|
+
).join(" ");
|
|
31222
|
+
return /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)(
|
|
31034
31223
|
"svg",
|
|
31035
31224
|
{
|
|
31036
|
-
|
|
31037
|
-
|
|
31038
|
-
|
|
31225
|
+
width: S,
|
|
31226
|
+
height: S,
|
|
31227
|
+
viewBox: `0 0 ${S} ${S}`,
|
|
31039
31228
|
style: {
|
|
31040
|
-
|
|
31041
|
-
|
|
31229
|
+
position: "absolute",
|
|
31230
|
+
left: "50%",
|
|
31231
|
+
top: "50%",
|
|
31232
|
+
marginLeft: -S / 2,
|
|
31233
|
+
marginTop: -S / 2,
|
|
31234
|
+
overflow: "visible",
|
|
31235
|
+
transform: m,
|
|
31236
|
+
// Convex solid: a face is either front-
|
|
31237
|
+
// facing or hidden behind nearer faces,
|
|
31238
|
+
// so hiding backfaces is both correct
|
|
31239
|
+
// and the mirrored-numeral guard.
|
|
31240
|
+
backfaceVisibility: "hidden"
|
|
31042
31241
|
},
|
|
31043
31242
|
"aria-hidden": "true",
|
|
31044
31243
|
children: [
|
|
31045
|
-
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
31046
|
-
"
|
|
31244
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)(
|
|
31245
|
+
"radialGradient",
|
|
31047
31246
|
{
|
|
31048
|
-
|
|
31049
|
-
|
|
31050
|
-
|
|
31051
|
-
|
|
31052
|
-
|
|
31053
|
-
|
|
31247
|
+
id: gid,
|
|
31248
|
+
cx: "32%",
|
|
31249
|
+
cy: "26%",
|
|
31250
|
+
r: "80%",
|
|
31251
|
+
children: [
|
|
31252
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
31253
|
+
"stop",
|
|
31254
|
+
{
|
|
31255
|
+
offset: "0%",
|
|
31256
|
+
stopColor: "#fff",
|
|
31257
|
+
stopOpacity: "0.38"
|
|
31258
|
+
}
|
|
31259
|
+
),
|
|
31260
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
31261
|
+
"stop",
|
|
31262
|
+
{
|
|
31263
|
+
offset: "55%",
|
|
31264
|
+
stopColor: "#fff",
|
|
31265
|
+
stopOpacity: "0.08"
|
|
31266
|
+
}
|
|
31267
|
+
),
|
|
31268
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
31269
|
+
"stop",
|
|
31270
|
+
{
|
|
31271
|
+
offset: "100%",
|
|
31272
|
+
stopColor: "#fff",
|
|
31273
|
+
stopOpacity: "0"
|
|
31274
|
+
}
|
|
31275
|
+
)
|
|
31276
|
+
]
|
|
31054
31277
|
}
|
|
31055
|
-
),
|
|
31278
|
+
) }),
|
|
31056
31279
|
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
31057
31280
|
"polygon",
|
|
31058
31281
|
{
|
|
31059
|
-
points:
|
|
31060
|
-
fill:
|
|
31282
|
+
points: pts,
|
|
31283
|
+
fill: colors.face,
|
|
31061
31284
|
stroke: colors.faceBorder,
|
|
31062
31285
|
strokeWidth: 1.5,
|
|
31063
31286
|
strokeLinejoin: "round",
|
|
31064
|
-
|
|
31065
|
-
|
|
31287
|
+
style: {
|
|
31288
|
+
transition: "fill 0.3s, stroke 0.3s"
|
|
31289
|
+
}
|
|
31066
31290
|
}
|
|
31067
31291
|
),
|
|
31292
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)("polygon", { points: pts, fill: `url(#${gid})` }),
|
|
31068
31293
|
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
31069
31294
|
"text",
|
|
31070
31295
|
{
|
|
31071
|
-
ref:
|
|
31072
|
-
x:
|
|
31073
|
-
y:
|
|
31296
|
+
ref: getFaceTextSetter(d, fi),
|
|
31297
|
+
x: S / 2,
|
|
31298
|
+
y: S / 2,
|
|
31074
31299
|
textAnchor: "middle",
|
|
31075
31300
|
dominantBaseline: "central",
|
|
31076
|
-
fontSize
|
|
31301
|
+
fontSize,
|
|
31077
31302
|
fontWeight: 800,
|
|
31078
31303
|
fill: colors.pip,
|
|
31079
31304
|
style: {
|
|
@@ -31081,59 +31306,17 @@ function DiceRoller({
|
|
|
31081
31306
|
transition: "fill 0.3s",
|
|
31082
31307
|
userSelect: "none"
|
|
31083
31308
|
},
|
|
31084
|
-
children: formatDieValue(
|
|
31309
|
+
children: formatDieValue(
|
|
31310
|
+
fi === 0 ? shown : f.value,
|
|
31311
|
+
sides
|
|
31312
|
+
)
|
|
31085
31313
|
}
|
|
31086
31314
|
)
|
|
31087
31315
|
]
|
|
31088
|
-
}
|
|
31089
|
-
|
|
31090
|
-
|
|
31091
|
-
|
|
31092
|
-
{
|
|
31093
|
-
viewBox: "0 0 100 100",
|
|
31094
|
-
width: "100%",
|
|
31095
|
-
height: "100%",
|
|
31096
|
-
style: {
|
|
31097
|
-
...cardFaceStyle,
|
|
31098
|
-
transform: `rotateY(180deg) translateZ(${depth / 2}px)`
|
|
31099
|
-
},
|
|
31100
|
-
"aria-hidden": "true",
|
|
31101
|
-
children: [
|
|
31102
|
-
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
31103
|
-
"polygon",
|
|
31104
|
-
{
|
|
31105
|
-
points: shape.points,
|
|
31106
|
-
fill: colors.face,
|
|
31107
|
-
stroke: colors.faceBorder,
|
|
31108
|
-
strokeWidth: 2.5,
|
|
31109
|
-
strokeLinejoin: "round",
|
|
31110
|
-
style: { transition: "fill 0.3s, stroke 0.3s" }
|
|
31111
|
-
}
|
|
31112
|
-
),
|
|
31113
|
-
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
31114
|
-
"polygon",
|
|
31115
|
-
{
|
|
31116
|
-
points: shape.points,
|
|
31117
|
-
fill: "none",
|
|
31118
|
-
stroke: colors.faceBorder,
|
|
31119
|
-
strokeWidth: 1.5,
|
|
31120
|
-
strokeLinejoin: "round",
|
|
31121
|
-
opacity: 0.55,
|
|
31122
|
-
transform: "translate(50 50) scale(0.76) translate(-50 -50)"
|
|
31123
|
-
}
|
|
31124
|
-
),
|
|
31125
|
-
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
31126
|
-
"polygon",
|
|
31127
|
-
{
|
|
31128
|
-
points: shape.points,
|
|
31129
|
-
fill: "#000",
|
|
31130
|
-
opacity: 0.14
|
|
31131
|
-
}
|
|
31132
|
-
)
|
|
31133
|
-
]
|
|
31134
|
-
}
|
|
31135
|
-
)
|
|
31136
|
-
] });
|
|
31316
|
+
},
|
|
31317
|
+
fi
|
|
31318
|
+
);
|
|
31319
|
+
}) });
|
|
31137
31320
|
})()
|
|
31138
31321
|
}
|
|
31139
31322
|
)
|