drab 6.5.1 → 7.0.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.
Files changed (39) hide show
  1. package/dist/announcer/index.d.ts +2 -0
  2. package/dist/base/index.d.ts +101 -1536
  3. package/dist/base/index.js +87 -76
  4. package/dist/contextmenu/index.d.ts +1045 -3
  5. package/dist/contextmenu/index.js +15 -15
  6. package/dist/define.d.ts +11 -1
  7. package/dist/define.js +11 -5
  8. package/dist/dialog/index.d.ts +1047 -6
  9. package/dist/dialog/index.js +28 -25
  10. package/dist/editor/index.d.ts +1047 -12
  11. package/dist/editor/index.js +36 -36
  12. package/dist/fullscreen/index.d.ts +1045 -7
  13. package/dist/fullscreen/index.js +8 -8
  14. package/dist/index.d.ts +0 -3
  15. package/dist/index.js +0 -3
  16. package/dist/intersect/index.d.ts +1059 -16
  17. package/dist/intersect/index.js +26 -33
  18. package/dist/prefetch/index.d.ts +706 -25
  19. package/dist/prefetch/index.js +25 -44
  20. package/dist/share/index.d.ts +1413 -11
  21. package/dist/share/index.js +50 -18
  22. package/dist/tablesort/index.d.ts +1390 -5
  23. package/dist/tablesort/index.js +5 -5
  24. package/dist/tabs/index.d.ts +702 -4
  25. package/dist/tabs/index.js +3 -3
  26. package/dist/types/index.d.ts +29 -0
  27. package/dist/wakelock/index.d.ts +1390 -6
  28. package/dist/wakelock/index.js +16 -16
  29. package/package.json +5 -24
  30. package/dist/base/define.js +0 -3
  31. package/dist/copy/define.d.ts +0 -1
  32. package/dist/copy/define.js +0 -3
  33. package/dist/copy/index.d.ts +0 -30
  34. package/dist/copy/index.js +0 -39
  35. package/dist/youtube/define.d.ts +0 -1
  36. package/dist/youtube/define.js +0 -3
  37. package/dist/youtube/index.d.ts +0 -31
  38. package/dist/youtube/index.js +0 -56
  39. /package/dist/{base/define.d.ts → types/index.js} +0 -0
@@ -1,4 +1,4 @@
1
- import { Base } from "../base/index.js";
1
+ import { Lifecycle, Trigger } from "../base/index.js";
2
2
  /**
3
3
  * The `Prefetch` element can prefetch a url, or enhance the `HTMLAnchorElement` by loading the HTML for a page before it is navigated to. This element speeds up the navigation for multi-page applications (MPAs).
4
4
  *
@@ -29,14 +29,14 @@ import { Base } from "../base/index.js";
29
29
  *
30
30
  * This element can be deprecated once the Speculation Rules API is supported across browsers. The API will be able to prefetch assets in a similar way with the `source: "document"` and `eagerness` features, and will work without JavaScript.
31
31
  */
32
- export class Prefetch extends Base {
33
- #prefetchedUrls = [];
32
+ export class Prefetch extends Lifecycle(Trigger()) {
33
+ #prefetchedUrls = new Set();
34
34
  constructor() {
35
35
  super();
36
36
  }
37
37
  /** When to prefetch the url. */
38
38
  get #strategy() {
39
- return (this.getAttribute("strategy") ?? "hover");
39
+ return this.getAttribute("strategy");
40
40
  }
41
41
  /** Prerender with the Speculation Rules API. */
42
42
  get #prerender() {
@@ -47,16 +47,16 @@ export class Prefetch extends Base {
47
47
  return this.getAttribute("url");
48
48
  }
49
49
  /**
50
- * Appends `<link rel="prefetch">` or `<script type="speculationrules">` to the head of the document.
50
+ * Appends `<link rel="prefetch">` or `<script type="speculationrules">`
51
+ * to the head of the document.
51
52
  *
52
53
  * @param options Configuration options.
53
54
  */
54
- appendTag(options) {
55
- const { url, prerender } = options;
55
+ prefetch(options) {
56
+ const { url } = options;
56
57
  // if not the current page and not already prefetched
57
- if (!(url === window.location.href) &&
58
- !this.#prefetchedUrls.includes(url)) {
59
- this.#prefetchedUrls.push(url);
58
+ if (!(url === window.location.href) && !this.#prefetchedUrls.has(url)) {
59
+ this.#prefetchedUrls.add(url);
60
60
  if (HTMLScriptElement.supports &&
61
61
  HTMLScriptElement.supports("speculationrules")) {
62
62
  const rules = {
@@ -65,9 +65,8 @@ export class Prefetch extends Base {
65
65
  // https://github.com/WICG/nav-speculation/issues/162#issuecomment-1977818473
66
66
  prefetch: [{ source: "list", urls: [url] }],
67
67
  };
68
- if (prerender) {
68
+ if (options.prerender)
69
69
  rules.prerender = rules.prefetch;
70
- }
71
70
  const script = document.createElement("script");
72
71
  script.type = "speculationrules";
73
72
  script.textContent = JSON.stringify(rules);
@@ -82,35 +81,25 @@ export class Prefetch extends Base {
82
81
  }
83
82
  }
84
83
  }
85
- /**
86
- * Use to prefetch/prerender HTML.
87
- *
88
- * Can be used more than once with different options for different selectors.
89
- *
90
- * @param options Prefetch options.
91
- */
92
- prefetch(options = {
93
- anchors: this.getTrigger(HTMLAnchorElement),
94
- prerender: this.#prerender,
95
- strategy: this.#strategy,
96
- }) {
97
- // defaults if partially defined
98
- const { anchors = this.getTrigger(HTMLAnchorElement), prerender = this.#prerender, strategy = this.#strategy, } = options;
84
+ mount() {
85
+ // immediately prefetch the `url` attribute if it exists
86
+ if (this.#url)
87
+ this.prefetch({ url: this.#url, prerender: this.#prerender });
88
+ // prefetch the `trigger` elements
89
+ const anchors = this.triggers(HTMLAnchorElement);
90
+ const prerender = this.#prerender;
91
+ const strategy = this.#strategy;
99
92
  let prefetchTimer;
100
- /**
101
- * @param delay ms delay - for `hover`
102
- * @returns the event listener with delay
103
- */
104
93
  const listener = (delay = 200) => (e) => {
105
94
  const { href } = e.currentTarget;
106
- prefetchTimer = setTimeout(() => this.appendTag({ url: href, prerender }), delay);
95
+ prefetchTimer = setTimeout(() => this.prefetch({ url: href, prerender }), delay);
107
96
  };
108
97
  const reset = () => clearTimeout(prefetchTimer);
109
98
  const observer = new IntersectionObserver((entries) => {
110
- for (const e of entries) {
111
- if (e.isIntersecting) {
112
- this.appendTag({
113
- url: e.target.href,
99
+ for (const entry of entries) {
100
+ if (entry.isIntersecting) {
101
+ this.prefetch({
102
+ url: entry.target.href,
114
103
  prerender,
115
104
  });
116
105
  }
@@ -118,7 +107,7 @@ export class Prefetch extends Base {
118
107
  });
119
108
  for (const anchor of anchors) {
120
109
  if (strategy === "load") {
121
- this.appendTag({ url: anchor.href, prerender });
110
+ this.prefetch({ url: anchor.href, prerender });
122
111
  }
123
112
  else if (strategy === "visible") {
124
113
  observer.observe(anchor);
@@ -135,12 +124,4 @@ export class Prefetch extends Base {
135
124
  }
136
125
  }
137
126
  }
138
- mount() {
139
- // immediately prefetch the `url` attribute if it exists
140
- if (this.#url) {
141
- this.appendTag({ url: this.#url, prerender: this.#prerender });
142
- }
143
- // prefetch the `trigger` elements
144
- this.prefetch();
145
- }
146
127
  }