@trebired/frontend 13.18.0 → 13.19.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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 13.19.0
4
+
5
+ - The scroll-state boot script now gets the state right on a reload or a back/forward navigation. The browser restores the scroll position after the boot script runs, so the first value was always "not scrolled"; the script now remembers the position in `sessionStorage` on `pagehide` and seeds the state from it when the navigation is a reload or a history traversal, and the real position takes over as soon as the page has loaded.
6
+ - Added `data-…-scroll-settling`, set on `<html>` until the page has loaded and the state has settled. Styles that transition on the scroll state can switch the transition off while it is present, so a late correction lands in one frame instead of animating.
7
+ - The boot script also re-reads the state on `DOMContentLoaded`, on `pageshow` and in the first animation frame.
8
+
3
9
  ## 13.18.0
4
10
 
5
11
  - Added the scroll-state system, so a header that changes appearance once the page is scrolled no longer has to compute that in React. `createScrollStateBootScript()` returns a boot script that sets `data-…-scrolled` on `<html>` before the first paint and keeps it current from then on, so the correct header is painted immediately even when a reload restores a scrolled position.
@@ -1,5 +1,7 @@
1
1
  declare const SCROLL_STATE_ATTRIBUTE: `data-${string}`;
2
2
  declare const SCROLL_STATE_SELECTOR: string;
3
+ declare const SCROLL_SETTLING_ATTRIBUTE: `data-${string}`;
4
+ declare const SCROLL_SETTLING_SELECTOR: string;
3
5
  declare const DEFAULT_SCROLL_THRESHOLD = 24;
4
6
  type ScrollStateOptions = {
5
7
  threshold?: number;
@@ -8,6 +10,6 @@ declare function readScrollState(options?: ScrollStateOptions): boolean;
8
10
  declare function applyScrollState(options?: ScrollStateOptions): boolean;
9
11
  declare function bindScrollState(options?: ScrollStateOptions): () => void;
10
12
  declare function createScrollStateBootScript(options?: ScrollStateOptions): string;
11
- export { DEFAULT_SCROLL_THRESHOLD, SCROLL_STATE_ATTRIBUTE, SCROLL_STATE_SELECTOR, applyScrollState, bindScrollState, createScrollStateBootScript, readScrollState, };
13
+ export { DEFAULT_SCROLL_THRESHOLD, SCROLL_SETTLING_ATTRIBUTE, SCROLL_SETTLING_SELECTOR, SCROLL_STATE_ATTRIBUTE, SCROLL_STATE_SELECTOR, applyScrollState, bindScrollState, createScrollStateBootScript, readScrollState, };
12
14
  export type { ScrollStateOptions };
13
15
  //# sourceMappingURL=scroll.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../src/layout/scroll.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,sBAAsB,kBAA+B,CAAC;AAC5D,QAAA,MAAM,qBAAqB,QAA2C,CAAC;AACvE,QAAA,MAAM,wBAAwB,KAAK,CAAC;AAEpC,KAAK,kBAAkB,GAAG;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAOF,iBAAS,eAAe,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAGlE;AAED,iBAAS,gBAAgB,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAMnE;AAOD,iBAAS,eAAe,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,IAAI,CAYrE;AAED,iBAAS,2BAA2B,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAW7E;AAED,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,2BAA2B,EAC3B,eAAe,GAChB,CAAC;AACF,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../src/layout/scroll.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,sBAAsB,kBAA+B,CAAC;AAC5D,QAAA,MAAM,qBAAqB,QAA2C,CAAC;AACvE,QAAA,MAAM,yBAAyB,kBAAsC,CAAC;AACtE,QAAA,MAAM,wBAAwB,QAA0C,CAAC;AAEzE,QAAA,MAAM,wBAAwB,KAAK,CAAC;AAEpC,KAAK,kBAAkB,GAAG;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAOF,iBAAS,eAAe,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAGlE;AAED,iBAAS,gBAAgB,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAMnE;AAOD,iBAAS,eAAe,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,IAAI,CAYrE;AAuCD,iBAAS,2BAA2B,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAY7E;AAED,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,2BAA2B,EAC3B,eAAe,GAChB,CAAC;AACF,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1,6 +1,9 @@
1
- import { frontendDataAttr, frontendDataSelector } from "../namespace/index.js";
1
+ import { FRONTEND_PREFIX, frontendDataAttr, frontendDataSelector } from "../namespace/index.js";
2
2
  const SCROLL_STATE_ATTRIBUTE = frontendDataAttr("scrolled");
3
3
  const SCROLL_STATE_SELECTOR = frontendDataSelector("scrolled", "true");
4
+ const SCROLL_SETTLING_ATTRIBUTE = frontendDataAttr("scroll-settling");
5
+ const SCROLL_SETTLING_SELECTOR = frontendDataSelector("scroll-settling");
6
+ const SCROLL_STORAGE_PREFIX = `${FRONTEND_PREFIX}:scroll:`;
4
7
  const DEFAULT_SCROLL_THRESHOLD = 24;
5
8
  function scrollStateThreshold(options = {}) {
6
9
  const value = Number(options.threshold);
@@ -37,17 +40,51 @@ function bindScrollState(options = {}) {
37
40
  window.removeEventListener("resize", update);
38
41
  };
39
42
  }
43
+ function scrollStateSeedSource() {
44
+ return [
45
+ `var K=${JSON.stringify(SCROLL_STORAGE_PREFIX)}+location.pathname+location.search,N='',S=0;`,
46
+ "try{N=(performance.getEntriesByType('navigation')[0]||{}).type||''}catch(e){}",
47
+ "if(N==='reload'||N==='back_forward'){try{S=parseFloat(sessionStorage.getItem(K))||0}catch(e){}}",
48
+ "window.addEventListener('pagehide',function(){",
49
+ "try{sessionStorage.setItem(K,String(window.scrollY||window.pageYOffset||0))}catch(e){}});",
50
+ ];
51
+ }
52
+ function scrollStateUpdateSource() {
53
+ return [
54
+ "var u=function(){var v=window.scrollY||window.pageYOffset||0;",
55
+ "if(S){if(v)S=0;else v=S}",
56
+ "h.setAttribute(A,v>T?'true':'false')};",
57
+ ];
58
+ }
59
+ function scrollStateSettleSource() {
60
+ return [
61
+ "h.setAttribute(G,'');",
62
+ "window.addEventListener('load',function(){S=0;u();",
63
+ "var f=function(){h.removeAttribute(G)};",
64
+ "if(window.requestAnimationFrame)window.requestAnimationFrame(f);else f()});",
65
+ ];
66
+ }
67
+ function scrollStateListenerSource() {
68
+ return [
69
+ "window.addEventListener('scroll',u,{passive:true});",
70
+ "window.addEventListener('resize',u,{passive:true});",
71
+ "window.addEventListener('pageshow',u);",
72
+ "document.addEventListener('DOMContentLoaded',u);",
73
+ "if(window.requestAnimationFrame)window.requestAnimationFrame(u);",
74
+ ];
75
+ }
40
76
  function createScrollStateBootScript(options = {}) {
41
77
  return [
42
78
  "(function(){try{",
43
- `var A=${JSON.stringify(SCROLL_STATE_ATTRIBUTE)},T=${scrollStateThreshold(options)};`,
44
- "var h=document.documentElement;",
45
- "var u=function(){h.setAttribute(A,(window.scrollY||window.pageYOffset||0)>T?'true':'false')};",
79
+ `var A=${JSON.stringify(SCROLL_STATE_ATTRIBUTE)},G=${JSON.stringify(SCROLL_SETTLING_ATTRIBUTE)};`,
80
+ `var T=${scrollStateThreshold(options)},h=document.documentElement;`,
81
+ ...scrollStateSeedSource(),
82
+ ...scrollStateUpdateSource(),
46
83
  "u();",
47
- "window.addEventListener('scroll',u,{passive:true});",
48
- "window.addEventListener('resize',u,{passive:true});",
84
+ ...scrollStateSettleSource(),
85
+ ...scrollStateListenerSource(),
49
86
  "}catch(e){}})();",
50
87
  ].join("");
51
88
  }
52
- export { DEFAULT_SCROLL_THRESHOLD, SCROLL_STATE_ATTRIBUTE, SCROLL_STATE_SELECTOR, applyScrollState, bindScrollState, createScrollStateBootScript, readScrollState, };
89
+ export { DEFAULT_SCROLL_THRESHOLD, SCROLL_SETTLING_ATTRIBUTE, SCROLL_SETTLING_SELECTOR, SCROLL_STATE_ATTRIBUTE, SCROLL_STATE_SELECTOR, applyScrollState, bindScrollState, createScrollStateBootScript, readScrollState, };
53
90
  //# sourceMappingURL=scroll.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/layout/scroll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAC5D,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACvE,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAMpC,SAAS,oBAAoB,CAAC,UAA8B,EAAE;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,wBAAwB,CAAC;AACjF,CAAC;AAED,SAAS,eAAe,CAAC,UAA8B,EAAE;IACvD,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,gBAAgB,CAAC,UAA8B,EAAE;IACxD,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACpC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,gBAAgB;IACvB,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAClD,OAAO,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,eAAe,CAAC,UAA8B,EAAE;IACvD,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,gBAAgB,EAAE;QAAE,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;IAChF,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC,CAAC;IACF,MAAM,EAAE,CAAC;IACT,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,OAAO,GAAG,EAAE;QACV,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,UAA8B,EAAE;IACnE,OAAO;QACL,kBAAkB;QAClB,SAAS,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,MAAM,oBAAoB,CAAC,OAAO,CAAC,GAAG;QACrF,iCAAiC;QACjC,+FAA+F;QAC/F,MAAM;QACN,qDAAqD;QACrD,qDAAqD;QACrD,kBAAkB;KACnB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAED,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,2BAA2B,EAC3B,eAAe,GAChB,CAAC"}
1
+ {"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/layout/scroll.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  declare const SCROLL_STATE_ATTRIBUTE: `data-${string}`;
2
2
  declare const SCROLL_STATE_SELECTOR: string;
3
+ declare const SCROLL_SETTLING_ATTRIBUTE: `data-${string}`;
4
+ declare const SCROLL_SETTLING_SELECTOR: string;
3
5
  declare const DEFAULT_SCROLL_THRESHOLD = 24;
4
6
  type ScrollStateOptions = {
5
7
  threshold?: number;
@@ -8,6 +10,6 @@ declare function readScrollState(options?: ScrollStateOptions): boolean;
8
10
  declare function applyScrollState(options?: ScrollStateOptions): boolean;
9
11
  declare function bindScrollState(options?: ScrollStateOptions): () => void;
10
12
  declare function createScrollStateBootScript(options?: ScrollStateOptions): string;
11
- export { DEFAULT_SCROLL_THRESHOLD, SCROLL_STATE_ATTRIBUTE, SCROLL_STATE_SELECTOR, applyScrollState, bindScrollState, createScrollStateBootScript, readScrollState, };
13
+ export { DEFAULT_SCROLL_THRESHOLD, SCROLL_SETTLING_ATTRIBUTE, SCROLL_SETTLING_SELECTOR, SCROLL_STATE_ATTRIBUTE, SCROLL_STATE_SELECTOR, applyScrollState, bindScrollState, createScrollStateBootScript, readScrollState, };
12
14
  export type { ScrollStateOptions };
13
15
  //# sourceMappingURL=scroll.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../src/layout/scroll.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,sBAAsB,kBAA+B,CAAC;AAC5D,QAAA,MAAM,qBAAqB,QAA2C,CAAC;AACvE,QAAA,MAAM,wBAAwB,KAAK,CAAC;AAEpC,KAAK,kBAAkB,GAAG;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAOF,iBAAS,eAAe,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAGlE;AAED,iBAAS,gBAAgB,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAMnE;AAOD,iBAAS,eAAe,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,IAAI,CAYrE;AAED,iBAAS,2BAA2B,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAW7E;AAED,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,2BAA2B,EAC3B,eAAe,GAChB,CAAC;AACF,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../src/layout/scroll.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,sBAAsB,kBAA+B,CAAC;AAC5D,QAAA,MAAM,qBAAqB,QAA2C,CAAC;AACvE,QAAA,MAAM,yBAAyB,kBAAsC,CAAC;AACtE,QAAA,MAAM,wBAAwB,QAA0C,CAAC;AAEzE,QAAA,MAAM,wBAAwB,KAAK,CAAC;AAEpC,KAAK,kBAAkB,GAAG;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAOF,iBAAS,eAAe,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAGlE;AAED,iBAAS,gBAAgB,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAMnE;AAOD,iBAAS,eAAe,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,IAAI,CAYrE;AAuCD,iBAAS,2BAA2B,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAY7E;AAED,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,2BAA2B,EAC3B,eAAe,GAChB,CAAC;AACF,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1,6 +1,9 @@
1
- import { frontendDataAttr, frontendDataSelector } from "../../namespace/index.js";
1
+ import { FRONTEND_PREFIX, frontendDataAttr, frontendDataSelector } from "../../namespace/index.js";
2
2
  const SCROLL_STATE_ATTRIBUTE = frontendDataAttr("scrolled");
3
3
  const SCROLL_STATE_SELECTOR = frontendDataSelector("scrolled", "true");
4
+ const SCROLL_SETTLING_ATTRIBUTE = frontendDataAttr("scroll-settling");
5
+ const SCROLL_SETTLING_SELECTOR = frontendDataSelector("scroll-settling");
6
+ const SCROLL_STORAGE_PREFIX = `${FRONTEND_PREFIX}:scroll:`;
4
7
  const DEFAULT_SCROLL_THRESHOLD = 24;
5
8
  function scrollStateThreshold(options = {}) {
6
9
  const value = Number(options.threshold);
@@ -37,17 +40,51 @@ function bindScrollState(options = {}) {
37
40
  window.removeEventListener("resize", update);
38
41
  };
39
42
  }
43
+ function scrollStateSeedSource() {
44
+ return [
45
+ `var K=${JSON.stringify(SCROLL_STORAGE_PREFIX)}+location.pathname+location.search,N='',S=0;`,
46
+ "try{N=(performance.getEntriesByType('navigation')[0]||{}).type||''}catch(e){}",
47
+ "if(N==='reload'||N==='back_forward'){try{S=parseFloat(sessionStorage.getItem(K))||0}catch(e){}}",
48
+ "window.addEventListener('pagehide',function(){",
49
+ "try{sessionStorage.setItem(K,String(window.scrollY||window.pageYOffset||0))}catch(e){}});",
50
+ ];
51
+ }
52
+ function scrollStateUpdateSource() {
53
+ return [
54
+ "var u=function(){var v=window.scrollY||window.pageYOffset||0;",
55
+ "if(S){if(v)S=0;else v=S}",
56
+ "h.setAttribute(A,v>T?'true':'false')};",
57
+ ];
58
+ }
59
+ function scrollStateSettleSource() {
60
+ return [
61
+ "h.setAttribute(G,'');",
62
+ "window.addEventListener('load',function(){S=0;u();",
63
+ "var f=function(){h.removeAttribute(G)};",
64
+ "if(window.requestAnimationFrame)window.requestAnimationFrame(f);else f()});",
65
+ ];
66
+ }
67
+ function scrollStateListenerSource() {
68
+ return [
69
+ "window.addEventListener('scroll',u,{passive:true});",
70
+ "window.addEventListener('resize',u,{passive:true});",
71
+ "window.addEventListener('pageshow',u);",
72
+ "document.addEventListener('DOMContentLoaded',u);",
73
+ "if(window.requestAnimationFrame)window.requestAnimationFrame(u);",
74
+ ];
75
+ }
40
76
  function createScrollStateBootScript(options = {}) {
41
77
  return [
42
78
  "(function(){try{",
43
- `var A=${JSON.stringify(SCROLL_STATE_ATTRIBUTE)},T=${scrollStateThreshold(options)};`,
44
- "var h=document.documentElement;",
45
- "var u=function(){h.setAttribute(A,(window.scrollY||window.pageYOffset||0)>T?'true':'false')};",
79
+ `var A=${JSON.stringify(SCROLL_STATE_ATTRIBUTE)},G=${JSON.stringify(SCROLL_SETTLING_ATTRIBUTE)};`,
80
+ `var T=${scrollStateThreshold(options)},h=document.documentElement;`,
81
+ ...scrollStateSeedSource(),
82
+ ...scrollStateUpdateSource(),
46
83
  "u();",
47
- "window.addEventListener('scroll',u,{passive:true});",
48
- "window.addEventListener('resize',u,{passive:true});",
84
+ ...scrollStateSettleSource(),
85
+ ...scrollStateListenerSource(),
49
86
  "}catch(e){}})();",
50
87
  ].join("");
51
88
  }
52
- export { DEFAULT_SCROLL_THRESHOLD, SCROLL_STATE_ATTRIBUTE, SCROLL_STATE_SELECTOR, applyScrollState, bindScrollState, createScrollStateBootScript, readScrollState, };
89
+ export { DEFAULT_SCROLL_THRESHOLD, SCROLL_SETTLING_ATTRIBUTE, SCROLL_SETTLING_SELECTOR, SCROLL_STATE_ATTRIBUTE, SCROLL_STATE_SELECTOR, applyScrollState, bindScrollState, createScrollStateBootScript, readScrollState, };
53
90
  //# sourceMappingURL=scroll.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/layout/scroll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAC5D,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACvE,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAMpC,SAAS,oBAAoB,CAAC,UAA8B,EAAE;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,wBAAwB,CAAC;AACjF,CAAC;AAED,SAAS,eAAe,CAAC,UAA8B,EAAE;IACvD,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,gBAAgB,CAAC,UAA8B,EAAE;IACxD,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACpC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,gBAAgB;IACvB,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAClD,OAAO,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,eAAe,CAAC,UAA8B,EAAE;IACvD,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,gBAAgB,EAAE;QAAE,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;IAChF,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC,CAAC;IACF,MAAM,EAAE,CAAC;IACT,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,OAAO,GAAG,EAAE;QACV,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,UAA8B,EAAE;IACnE,OAAO;QACL,kBAAkB;QAClB,SAAS,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,MAAM,oBAAoB,CAAC,OAAO,CAAC,GAAG;QACrF,iCAAiC;QACjC,+FAA+F;QAC/F,MAAM;QACN,qDAAqD;QACrD,qDAAqD;QACrD,kBAAkB;KACnB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAED,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,2BAA2B,EAC3B,eAAe,GAChB,CAAC"}
1
+ {"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/layout/scroll.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  }
9
9
  },
10
10
  "name": "@trebired/frontend",
11
- "version": "13.18.0",
11
+ "version": "13.19.0",
12
12
  "description": "Generic browser runtime systems for Trebired frontend packages and applications.",
13
13
  "type": "module",
14
14
  "private": false,