@sprawlify/primitives 0.0.25 → 0.0.26

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.
Files changed (88) hide show
  1. package/dist/date-utils.d.cts +5 -5
  2. package/dist/date-utils.d.mts +1 -1
  3. package/dist/dom-query.d.cts +1 -1
  4. package/dist/dom-query.d.mts +1 -1
  5. package/dist/{index-DYzqCFaj.d.mts → index-BTwu-8ey.d.mts} +5 -5
  6. package/dist/machines/accordion/index.d.cts +1 -1
  7. package/dist/machines/accordion/index.d.mts +1 -1
  8. package/dist/machines/angle-slider/index.d.cts +1 -1
  9. package/dist/machines/angle-slider/index.d.mts +1 -1
  10. package/dist/machines/bottom-sheet/index.d.cts +1 -1
  11. package/dist/machines/bottom-sheet/index.d.mts +1 -1
  12. package/dist/machines/carousel/index.cjs +6 -2
  13. package/dist/machines/carousel/index.d.cts +1 -1
  14. package/dist/machines/carousel/index.d.mts +1 -1
  15. package/dist/machines/carousel/index.mjs +6 -2
  16. package/dist/machines/checkbox/index.d.cts +1 -1
  17. package/dist/machines/checkbox/index.d.mts +1 -1
  18. package/dist/machines/clipboard/index.d.cts +1 -1
  19. package/dist/machines/clipboard/index.d.mts +1 -1
  20. package/dist/machines/collapsible/index.d.cts +1 -1
  21. package/dist/machines/collapsible/index.d.mts +1 -1
  22. package/dist/machines/color-picker/index.d.cts +1 -1
  23. package/dist/machines/color-picker/index.d.mts +1 -1
  24. package/dist/machines/combobox/index.d.cts +1 -1
  25. package/dist/machines/combobox/index.d.mts +1 -1
  26. package/dist/machines/date-picker/index.d.cts +1 -1
  27. package/dist/machines/date-picker/index.d.mts +2 -2
  28. package/dist/machines/dialog/index.d.cts +1 -1
  29. package/dist/machines/dialog/index.d.mts +1 -1
  30. package/dist/machines/editable/index.d.cts +1 -1
  31. package/dist/machines/editable/index.d.mts +1 -1
  32. package/dist/machines/file-upload/index.d.cts +1 -1
  33. package/dist/machines/file-upload/index.d.mts +1 -1
  34. package/dist/machines/floating-panel/index.d.cts +1 -1
  35. package/dist/machines/floating-panel/index.d.mts +1 -1
  36. package/dist/machines/hover-card/index.d.cts +1 -1
  37. package/dist/machines/hover-card/index.d.mts +1 -1
  38. package/dist/machines/listbox/index.d.cts +1 -1
  39. package/dist/machines/listbox/index.d.mts +1 -1
  40. package/dist/machines/marquee/index.d.cts +3 -3
  41. package/dist/machines/marquee/index.d.mts +3 -3
  42. package/dist/machines/menu/index.d.cts +1 -1
  43. package/dist/machines/menu/index.d.mts +1 -1
  44. package/dist/machines/navigation-menu/index.d.cts +1 -1
  45. package/dist/machines/navigation-menu/index.d.mts +1 -1
  46. package/dist/machines/number-input/index.d.cts +1 -1
  47. package/dist/machines/number-input/index.d.mts +1 -1
  48. package/dist/machines/password-input/index.d.cts +1 -1
  49. package/dist/machines/password-input/index.d.mts +1 -1
  50. package/dist/machines/pin-input/index.d.cts +1 -1
  51. package/dist/machines/pin-input/index.d.mts +1 -1
  52. package/dist/machines/popover/index.d.cts +1 -1
  53. package/dist/machines/popover/index.d.mts +1 -1
  54. package/dist/machines/progress/index.d.cts +1 -1
  55. package/dist/machines/progress/index.d.mts +1 -1
  56. package/dist/machines/radio-group/index.d.cts +1 -1
  57. package/dist/machines/radio-group/index.d.mts +1 -1
  58. package/dist/machines/scroll-area/index.d.cts +1 -1
  59. package/dist/machines/scroll-area/index.d.mts +1 -1
  60. package/dist/machines/select/index.d.cts +1 -1
  61. package/dist/machines/select/index.d.mts +1 -1
  62. package/dist/machines/signature-pad/index.d.cts +1 -1
  63. package/dist/machines/signature-pad/index.d.mts +1 -1
  64. package/dist/machines/slider/index.d.cts +1 -1
  65. package/dist/machines/slider/index.d.mts +1 -1
  66. package/dist/machines/splitter/index.d.cts +1 -1
  67. package/dist/machines/splitter/index.d.mts +1 -1
  68. package/dist/machines/steps/index.d.cts +1 -1
  69. package/dist/machines/steps/index.d.mts +1 -1
  70. package/dist/machines/tabs/index.d.cts +1 -1
  71. package/dist/machines/tabs/index.d.mts +1 -1
  72. package/dist/machines/tags-input/index.d.cts +1 -1
  73. package/dist/machines/tags-input/index.d.mts +1 -1
  74. package/dist/machines/timer/index.d.cts +1 -1
  75. package/dist/machines/timer/index.d.mts +1 -1
  76. package/dist/machines/toast/index.d.cts +1 -1
  77. package/dist/machines/toast/index.d.mts +1 -1
  78. package/dist/machines/tooltip/index.d.cts +1 -1
  79. package/dist/machines/tooltip/index.d.mts +1 -1
  80. package/dist/machines/tour/index.d.cts +1 -1
  81. package/dist/machines/tour/index.d.mts +1 -1
  82. package/dist/machines/tree-view/index.d.cts +1 -1
  83. package/dist/machines/tree-view/index.d.mts +1 -1
  84. package/dist/{scroll-snap-D4hJV_c8.mjs → scroll-snap-B279jSp5.mjs} +49 -9
  85. package/dist/{scroll-snap-BsPbmOTg.cjs → scroll-snap-BvaE_jFu.cjs} +49 -9
  86. package/dist/scroll-snap.cjs +1 -1
  87. package/dist/scroll-snap.mjs +1 -1
  88. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  const require_dom_query = require('./dom-query-CWZdWUGp.cjs');
2
2
 
3
3
  //#region src/shared/scroll-snap/index.ts
4
+ const getDirection = (element) => require_dom_query.getComputedStyle(element).direction;
4
5
  function getScrollPadding(element) {
5
6
  const style = require_dom_query.getComputedStyle(element);
6
7
  const rect = element.getBoundingClientRect();
@@ -41,6 +42,7 @@ function getDescendants(parent) {
41
42
  }
42
43
  function getSnapPositions(parent, subtree = false) {
43
44
  const parentRect = parent.getBoundingClientRect();
45
+ const isRtl = getDirection(parent) === "rtl";
44
46
  const positions = {
45
47
  x: {
46
48
  start: [],
@@ -57,15 +59,30 @@ function getSnapPositions(parent, subtree = false) {
57
59
  for (const axis of ["x", "y"]) {
58
60
  const orthogonalAxis = axis === "x" ? "y" : "x";
59
61
  const axisStart = axis === "x" ? "left" : "top";
62
+ const axisEnd = axis === "x" ? "right" : "bottom";
60
63
  const axisSize = axis === "x" ? "width" : "height";
61
64
  const axisScroll = axis === "x" ? "scrollLeft" : "scrollTop";
65
+ const useRtlCalc = isRtl && axis === "x";
62
66
  for (const child of children) {
63
67
  const childRect = child.getBoundingClientRect();
64
68
  if (!isRectIntersecting(parentRect, childRect, orthogonalAxis)) continue;
65
69
  let [childAlignY, childAlignX] = require_dom_query.getComputedStyle(child).getPropertyValue("scroll-snap-align").split(" ");
66
70
  if (typeof childAlignX === "undefined") childAlignX = childAlignY;
67
71
  const childAlign = axis === "x" ? childAlignX : childAlignY;
68
- const childOffsetStart = childRect[axisStart] - parentRect[axisStart] + parent[axisScroll];
72
+ let childOffsetStart;
73
+ let childOffsetEnd;
74
+ let childOffsetCenter;
75
+ if (useRtlCalc) {
76
+ const scrollOffset = Math.abs(parent[axisScroll]);
77
+ const rightOffset = parentRect[axisEnd] - childRect[axisEnd] + scrollOffset;
78
+ childOffsetStart = rightOffset;
79
+ childOffsetEnd = rightOffset + childRect[axisSize];
80
+ childOffsetCenter = rightOffset + childRect[axisSize] / 2;
81
+ } else {
82
+ childOffsetStart = childRect[axisStart] - parentRect[axisStart] + parent[axisScroll];
83
+ childOffsetEnd = childOffsetStart + childRect[axisSize];
84
+ childOffsetCenter = childOffsetStart + childRect[axisSize] / 2;
85
+ }
69
86
  switch (childAlign) {
70
87
  case "none": break;
71
88
  case "start":
@@ -77,13 +94,13 @@ function getSnapPositions(parent, subtree = false) {
77
94
  case "center":
78
95
  positions[axis].center.push({
79
96
  node: child,
80
- position: childOffsetStart + childRect[axisSize] / 2
97
+ position: childOffsetCenter
81
98
  });
82
99
  break;
83
100
  case "end":
84
101
  positions[axis].end.push({
85
102
  node: child,
86
- position: childOffsetStart + childRect[axisSize]
103
+ position: childOffsetEnd
87
104
  });
88
105
  break;
89
106
  }
@@ -92,6 +109,7 @@ function getSnapPositions(parent, subtree = false) {
92
109
  return positions;
93
110
  }
94
111
  function getScrollSnapPositions(element) {
112
+ const dir = getDirection(element);
95
113
  const rect = element.getBoundingClientRect();
96
114
  const scrollPadding = getScrollPadding(element);
97
115
  const snapPositions = getSnapPositions(element);
@@ -99,12 +117,23 @@ function getScrollSnapPositions(element) {
99
117
  x: element.scrollWidth - element.offsetWidth,
100
118
  y: element.scrollHeight - element.offsetHeight
101
119
  };
102
- return {
103
- x: uniq([
104
- ...snapPositions.x.start.map((v) => v.position - scrollPadding.x.before),
120
+ const isRtl = dir === "rtl";
121
+ const usesNegativeScrollLeft = isRtl && element.scrollLeft <= 0;
122
+ let xPositions;
123
+ if (isRtl) {
124
+ xPositions = uniq([
125
+ ...snapPositions.x.start.map((v) => v.position - scrollPadding.x.after),
105
126
  ...snapPositions.x.center.map((v) => v.position - rect.width / 2),
106
- ...snapPositions.x.end.map((v) => v.position - rect.width + scrollPadding.x.after)
107
- ].map(clamp(0, maxScroll.x))),
127
+ ...snapPositions.x.end.map((v) => v.position - rect.width + scrollPadding.x.before)
128
+ ].map(clamp(0, maxScroll.x)));
129
+ if (usesNegativeScrollLeft) xPositions = xPositions.map((pos) => -pos);
130
+ } else xPositions = uniq([
131
+ ...snapPositions.x.start.map((v) => v.position - scrollPadding.x.before),
132
+ ...snapPositions.x.center.map((v) => v.position - rect.width / 2),
133
+ ...snapPositions.x.end.map((v) => v.position - rect.width + scrollPadding.x.after)
134
+ ].map(clamp(0, maxScroll.x)));
135
+ return {
136
+ x: xPositions,
108
137
  y: uniq([
109
138
  ...snapPositions.y.start.map((v) => v.position - scrollPadding.y.before),
110
139
  ...snapPositions.y.center.map((v) => v.position - rect.height / 2),
@@ -113,13 +142,24 @@ function getScrollSnapPositions(element) {
113
142
  };
114
143
  }
115
144
  function findSnapPoint(parent, axis, predicate) {
145
+ const dir = getDirection(parent);
146
+ const scrollPadding = getScrollPadding(parent);
116
147
  const snapPositions = getSnapPositions(parent);
117
148
  const items = [
118
149
  ...snapPositions[axis].start,
119
150
  ...snapPositions[axis].center,
120
151
  ...snapPositions[axis].end
121
152
  ];
122
- for (const item of items) if (predicate(item.node)) return item.position;
153
+ const isRtl = dir === "rtl";
154
+ const usesNegativeScrollLeft = isRtl && axis === "x" && parent.scrollLeft <= 0;
155
+ for (const item of items) if (predicate(item.node)) {
156
+ let position;
157
+ if (axis === "x" && isRtl) {
158
+ position = item.position - scrollPadding.x.after;
159
+ if (usesNegativeScrollLeft) position = -position;
160
+ } else position = item.position - (axis === "x" ? scrollPadding.x.before : scrollPadding.y.before);
161
+ return position;
162
+ }
123
163
  }
124
164
  function getSnapPointTarget(parent, snapPoint) {
125
165
  const rect = parent.getBoundingClientRect();
@@ -1,5 +1,5 @@
1
1
  require('./dom-query-CWZdWUGp.cjs');
2
- const require_scroll_snap = require('./scroll-snap-BsPbmOTg.cjs');
2
+ const require_scroll_snap = require('./scroll-snap-BvaE_jFu.cjs');
3
3
 
4
4
  exports.findSnapPoint = require_scroll_snap.findSnapPoint;
5
5
  exports.getScrollSnapPositions = require_scroll_snap.getScrollSnapPositions;
@@ -1,4 +1,4 @@
1
1
  import "./dom-query-Bwyyt0Vp.mjs";
2
- import { i as getSnapPositions, n as getScrollSnapPositions, r as getSnapPointTarget, t as findSnapPoint } from "./scroll-snap-D4hJV_c8.mjs";
2
+ import { i as getSnapPositions, n as getScrollSnapPositions, r as getSnapPointTarget, t as findSnapPoint } from "./scroll-snap-B279jSp5.mjs";
3
3
 
4
4
  export { findSnapPoint, getScrollSnapPositions, getSnapPointTarget, getSnapPositions };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sprawlify/primitives",
3
- "version": "0.0.25",
3
+ "version": "0.0.26",
4
4
  "type": "module",
5
5
  "description": "A set of primitive components for building user interfaces.",
6
6
  "author": "sprawlify <npm@sprawlify.com>",