@digilogiclabs/saas-factory-ui 2.9.0 → 2.9.2

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.
@@ -30549,10 +30549,44 @@ function buildPolyhedron(sides) {
30549
30549
  })
30550
30550
  );
30551
30551
  const faceInradius = Math.min(...built.map((f) => edgeDist(f.pts)));
30552
- const result = { faces: built, faceRadius, faceInradius };
30552
+ const opposite = built.map((_, i) => oppOf(i));
30553
+ const result = {
30554
+ faces: built,
30555
+ opposite,
30556
+ faceRadius,
30557
+ faceInradius
30558
+ };
30553
30559
  polyhedronCache.set(sides, result);
30554
30560
  return result;
30555
30561
  }
30562
+ function dealFaceValues(geo, sides, rolled) {
30563
+ const n = geo.faces.length;
30564
+ const out = new Array(n).fill(0);
30565
+ const used = /* @__PURE__ */ new Set([rolled]);
30566
+ out[0] = rolled;
30567
+ const opp0 = geo.opposite[0];
30568
+ if (opp0 >= 0) {
30569
+ out[opp0] = sides + 1 - rolled;
30570
+ used.add(sides + 1 - rolled);
30571
+ }
30572
+ const values = [];
30573
+ for (let v = 1; v <= sides; v++) if (!used.has(v)) values.push(v);
30574
+ for (let i = values.length - 1; i > 0; i--) {
30575
+ const j = Math.floor(Math.random() * (i + 1));
30576
+ [values[i], values[j]] = [values[j], values[i]];
30577
+ }
30578
+ for (let fi = 1; fi < n; fi++) {
30579
+ if (out[fi] !== 0) continue;
30580
+ const v = values.shift();
30581
+ out[fi] = v;
30582
+ const o = geo.opposite[fi];
30583
+ if (o >= 0 && out[o] === 0) {
30584
+ out[o] = sides + 1 - v;
30585
+ values.splice(values.indexOf(sides + 1 - v), 1);
30586
+ }
30587
+ }
30588
+ return out;
30589
+ }
30556
30590
  function formatDieValue(v, sides) {
30557
30591
  return sides > 8 && (v === 6 || v === 9) ? `${v}.` : String(v);
30558
30592
  }
@@ -30738,7 +30772,7 @@ function DiceRoller({
30738
30772
  const dieWrapperRefs = useRef40([]);
30739
30773
  const cubeRefs = useRef40([]);
30740
30774
  const shadowRefs = useRef40([]);
30741
- const numeralRefs = useRef40([]);
30775
+ const faceTextRefs = useRef40([]);
30742
30776
  const currentPositionsRef = useRef40(null);
30743
30777
  const rollingRef = useRef40(false);
30744
30778
  const dieSetters = useRef40([]);
@@ -30768,14 +30802,16 @@ function DiceRoller({
30768
30802
  }
30769
30803
  return shadowSetters.current[i];
30770
30804
  };
30771
- const numeralSetters = useRef40([]);
30772
- const getNumeralSetter = (i) => {
30773
- if (!numeralSetters.current[i]) {
30774
- numeralSetters.current[i] = (el) => {
30775
- numeralRefs.current[i] = el;
30805
+ const faceTextSetters = useRef40([]);
30806
+ const getFaceTextSetter = (i, fi) => {
30807
+ if (!faceTextSetters.current[i]) faceTextSetters.current[i] = [];
30808
+ if (!faceTextSetters.current[i][fi]) {
30809
+ faceTextSetters.current[i][fi] = (el) => {
30810
+ if (!faceTextRefs.current[i]) faceTextRefs.current[i] = [];
30811
+ faceTextRefs.current[i][fi] = el;
30776
30812
  };
30777
30813
  }
30778
- return numeralSetters.current[i];
30814
+ return faceTextSetters.current[i][fi];
30779
30815
  };
30780
30816
  const sheenGradientId = useId3();
30781
30817
  const timersRef = useRef40([]);
@@ -30975,22 +31011,48 @@ function DiceRoller({
30975
31011
  }, capturedStep * stepMs);
30976
31012
  timersRef.current.push(timer);
30977
31013
  }
31014
+ let dealtAll = null;
31015
+ const writeDealtValues = () => {
31016
+ if (!dealtAll) return;
31017
+ for (let i = 0; i < clampedCount; i++) {
31018
+ const texts = faceTextRefs.current[i];
31019
+ const dealt = dealtAll[i];
31020
+ if (!texts || !dealt) continue;
31021
+ for (let fi = 0; fi < dealt.length; fi++) {
31022
+ const el = texts[fi];
31023
+ if (el) el.textContent = formatDieValue(dealt[fi], sides);
31024
+ }
31025
+ }
31026
+ };
30978
31027
  if (sides !== 6) {
30979
- const flickerTicks = 8;
30980
- const flickerStep = Math.max(60, Math.floor(TUMBLE_MS / flickerTicks));
31028
+ const geo = buildPolyhedron(sides);
31029
+ dealtAll = vals.map(
31030
+ (v) => dealFaceValues(geo, sides, v)
31031
+ );
31032
+ const finalAt = Math.floor(TUMBLE_MS * 0.72);
31033
+ const flickerTicks = 6;
31034
+ const flickerStep = Math.max(
31035
+ 50,
31036
+ Math.floor((finalAt - 60) / flickerTicks)
31037
+ );
30981
31038
  for (let f = 1; f <= flickerTicks; f++) {
30982
31039
  const t = setTimeout(() => {
30983
31040
  for (let i = 0; i < clampedCount; i++) {
30984
- const el = numeralRefs.current[i];
30985
- if (el)
30986
- el.textContent = formatDieValue(
30987
- Math.floor(Math.random() * sides) + 1,
30988
- sides
30989
- );
31041
+ const texts = faceTextRefs.current[i];
31042
+ if (!texts) continue;
31043
+ for (const el of texts) {
31044
+ if (el)
31045
+ el.textContent = formatDieValue(
31046
+ Math.floor(Math.random() * sides) + 1,
31047
+ sides
31048
+ );
31049
+ }
30990
31050
  }
30991
31051
  }, f * flickerStep);
30992
31052
  timersRef.current.push(t);
30993
31053
  }
31054
+ const finalTimer = setTimeout(writeDealtValues, finalAt);
31055
+ timersRef.current.push(finalTimer);
30994
31056
  }
30995
31057
  requestAnimationFrame(() => {
30996
31058
  requestAnimationFrame(() => {
@@ -31012,12 +31074,7 @@ function DiceRoller({
31012
31074
  });
31013
31075
  });
31014
31076
  const settleTimer = setTimeout(() => {
31015
- if (sides !== 6) {
31016
- for (let i = 0; i < clampedCount; i++) {
31017
- const el = numeralRefs.current[i];
31018
- if (el) el.textContent = formatDieValue(vals[i], sides);
31019
- }
31020
- }
31077
+ writeDealtValues();
31021
31078
  setResults(vals);
31022
31079
  setRolling(false);
31023
31080
  rollingRef.current = false;
@@ -31248,7 +31305,7 @@ function DiceRoller({
31248
31305
  /* @__PURE__ */ jsx113(
31249
31306
  "text",
31250
31307
  {
31251
- ref: fi === 0 ? getNumeralSetter(d) : void 0,
31308
+ ref: getFaceTextSetter(d, fi),
31252
31309
  x: S / 2,
31253
31310
  y: S / 2,
31254
31311
  textAnchor: "middle",
@@ -44262,6 +44319,7 @@ export {
44262
44319
  cssAnimations,
44263
44320
  d6LandingRotation,
44264
44321
  dailyTrendingConfig,
44322
+ dealFaceValues,
44265
44323
  detectAuthProvider,
44266
44324
  detectDelimiter,
44267
44325
  detectHeader,