edge.mjs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. const namedEdges = {
  2. start: 0,
  3. center: 0.5,
  4. end: 1,
  5. };
  6. function resolveEdge(edge, length, inset = 0) {
  7. let delta = 0;
  8. /**
  9. * If we have this edge defined as a preset, replace the definition
  10. * with the numerical value.
  11. */
  12. if (edge in namedEdges) {
  13. edge = namedEdges[edge];
  14. }
  15. /**
  16. * Handle unit values
  17. */
  18. if (typeof edge === "string") {
  19. const asNumber = parseFloat(edge);
  20. if (edge.endsWith("px")) {
  21. delta = asNumber;
  22. }
  23. else if (edge.endsWith("%")) {
  24. edge = asNumber / 100;
  25. }
  26. else if (edge.endsWith("vw")) {
  27. delta = (asNumber / 100) * document.documentElement.clientWidth;
  28. }
  29. else if (edge.endsWith("vh")) {
  30. delta = (asNumber / 100) * document.documentElement.clientHeight;
  31. }
  32. else {
  33. edge = asNumber;
  34. }
  35. }
  36. /**
  37. * If the edge is defined as a number, handle as a progress value.
  38. */
  39. if (typeof edge === "number") {
  40. delta = length * edge;
  41. }
  42. return inset + delta;
  43. }
  44. export { namedEdges, resolveEdge };