@siteimprove/alfa-dom 0.112.0 → 0.113.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.
Files changed (132) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/h.d.ts +14 -13
  3. package/dist/h.js +15 -13
  4. package/dist/index.d.ts +2 -28
  5. package/dist/index.js +2 -28
  6. package/dist/jsx.d.ts +2 -3
  7. package/dist/native.d.ts +10 -2
  8. package/dist/native.js +18 -2
  9. package/dist/node/attribute/predicate/has-name.d.ts +1 -1
  10. package/dist/node/attribute/predicate/has-name.js +2 -3
  11. package/dist/node/attribute.d.ts +9 -13
  12. package/dist/node/attribute.js +3 -10
  13. package/dist/node/comment.d.ts +7 -11
  14. package/dist/node/comment.js +2 -9
  15. package/dist/node/document.d.ts +11 -14
  16. package/dist/node/document.js +8 -23
  17. package/dist/node/element/augment.d.ts +1 -1
  18. package/dist/node/element/augment.js +1 -1
  19. package/dist/node/element/predicate/has-attribute.d.ts +1 -1
  20. package/dist/node/element/predicate/has-display-size.d.ts +1 -1
  21. package/dist/node/element/predicate/has-id.d.ts +1 -1
  22. package/dist/node/element/predicate/has-input-type.d.ts +1 -1
  23. package/dist/node/element/predicate/has-name.d.ts +1 -1
  24. package/dist/node/element/predicate/has-namespace.d.ts +1 -1
  25. package/dist/node/element/predicate/has-tab-index.d.ts +1 -1
  26. package/dist/node/element/predicate/has-unique-id.d.ts +3 -2
  27. package/dist/node/element/predicate/has-unique-id.js +21 -20
  28. package/dist/node/element/predicate/index.d.ts +19 -0
  29. package/dist/node/element/predicate/index.js +19 -0
  30. package/dist/node/element/predicate/is-actually-disabled.d.ts +4 -2
  31. package/dist/node/element/predicate/is-actually-disabled.js +37 -38
  32. package/dist/node/element/predicate/is-browsing-context-container.d.ts +1 -1
  33. package/dist/node/element/predicate/is-content.d.ts +4 -2
  34. package/dist/node/element/predicate/is-content.js +2 -4
  35. package/dist/node/element/predicate/is-document-element.d.ts +3 -2
  36. package/dist/node/element/predicate/is-document-element.js +2 -3
  37. package/dist/node/element/predicate/is-draggable.d.ts +1 -1
  38. package/dist/node/element/predicate/is-editing-host.d.ts +1 -1
  39. package/dist/node/element/predicate/is-fallback.d.ts +5 -2
  40. package/dist/node/element/predicate/is-fallback.js +5 -6
  41. package/dist/node/element/predicate/is-replaced.d.ts +1 -1
  42. package/dist/node/element/predicate/is-scoped-to.d.ts +3 -2
  43. package/dist/node/element/predicate/is-scoped-to.js +5 -5
  44. package/dist/node/element/predicate/is-suggested-focusable.d.ts +1 -1
  45. package/dist/node/element/predicate/is-suggested-focusable.js +3 -3
  46. package/dist/node/fragment.d.ts +6 -9
  47. package/dist/node/fragment.js +5 -20
  48. package/dist/node/index.d.ts +56 -0
  49. package/dist/node/index.js +74 -0
  50. package/dist/{node.d.ts → node/node.d.ts} +40 -160
  51. package/dist/{node.js → node/node.js} +57 -92
  52. package/dist/node/predicate/has-box.d.ts +1 -2
  53. package/dist/node/predicate/has-child.d.ts +2 -2
  54. package/dist/node/predicate/has-child.js +2 -3
  55. package/dist/node/predicate/has-descendant.d.ts +2 -2
  56. package/dist/node/predicate/has-descendant.js +2 -3
  57. package/dist/node/predicate/has-inclusive-descendant.d.ts +2 -2
  58. package/dist/node/predicate/has-inclusive-descendant.js +2 -3
  59. package/dist/node/predicate/has-text-content.d.ts +2 -2
  60. package/dist/node/predicate/has-text-content.js +2 -3
  61. package/dist/node/predicate/index.d.ts +7 -0
  62. package/dist/node/predicate/index.js +7 -0
  63. package/dist/node/predicate/is-root.d.ts +1 -1
  64. package/dist/node/query/descendants.d.ts +10 -10
  65. package/dist/node/query/descendants.js +6 -6
  66. package/dist/node/query/element-id-map.d.ts +3 -3
  67. package/dist/node/query/index.d.ts +3 -3
  68. package/dist/node/shadow.d.ts +11 -14
  69. package/dist/node/shadow.js +9 -24
  70. package/dist/node/{element.d.ts → slotable/element.d.ts} +28 -27
  71. package/dist/node/{element.js → slotable/element.js} +40 -51
  72. package/dist/node/slotable/index.d.ts +12 -0
  73. package/dist/node/slotable/index.js +15 -0
  74. package/dist/node/slotable/slot.d.ts +21 -0
  75. package/dist/node/slotable/slot.js +23 -0
  76. package/dist/node/slotable/slotable.d.ts +31 -0
  77. package/dist/node/slotable/slotable.js +16 -0
  78. package/dist/node/{text.d.ts → slotable/text.d.ts} +8 -11
  79. package/dist/node/{text.js → slotable/text.js} +13 -10
  80. package/dist/node/traversal/get-nodes-between.d.ts +2 -2
  81. package/dist/node/traversal/get-nodes-between.js +30 -29
  82. package/dist/node/traversal/index.d.ts +2 -0
  83. package/dist/node/traversal/index.js +2 -0
  84. package/dist/node/traversal/lowest-common-ancestor.d.ts +2 -2
  85. package/dist/node/traversal/lowest-common-ancestor.js +2 -3
  86. package/dist/node/type.d.ts +6 -10
  87. package/dist/node/type.js +2 -9
  88. package/dist/style/declaration.d.ts +2 -2
  89. package/dist/style/index.d.ts +5 -0
  90. package/dist/style/index.js +5 -0
  91. package/dist/style/rule/condition.d.ts +1 -1
  92. package/dist/style/rule/font-face.d.ts +3 -3
  93. package/dist/style/rule/font-face.js +2 -2
  94. package/dist/style/rule/grouping.d.ts +4 -3
  95. package/dist/style/rule/grouping.js +2 -2
  96. package/dist/style/rule/import.d.ts +3 -3
  97. package/dist/style/rule/import.js +2 -4
  98. package/dist/style/rule/index.d.ts +65 -0
  99. package/dist/style/rule/index.js +83 -0
  100. package/dist/style/rule/keyframe.d.ts +3 -3
  101. package/dist/style/rule/keyframe.js +2 -2
  102. package/dist/style/rule/keyframes.d.ts +2 -2
  103. package/dist/style/rule/keyframes.js +2 -3
  104. package/dist/style/rule/layer.d.ts +5 -4
  105. package/dist/style/rule/layer.js +4 -4
  106. package/dist/style/rule/media.d.ts +2 -2
  107. package/dist/style/rule/media.js +2 -3
  108. package/dist/style/rule/namespace.d.ts +3 -3
  109. package/dist/style/rule/namespace.js +2 -2
  110. package/dist/style/rule/page.d.ts +3 -3
  111. package/dist/style/rule/page.js +2 -2
  112. package/dist/style/rule/rule.d.ts +42 -0
  113. package/dist/style/rule/rule.js +64 -0
  114. package/dist/style/rule/style.d.ts +3 -3
  115. package/dist/style/rule/style.js +2 -2
  116. package/dist/style/rule/supports.d.ts +2 -2
  117. package/dist/style/rule/supports.js +2 -3
  118. package/dist/style/sheet.d.ts +1 -1
  119. package/dist/style/sheet.js +2 -2
  120. package/package.json +29 -30
  121. package/dist/node/element/predicate.d.ts +0 -19
  122. package/dist/node/element/predicate.js +0 -19
  123. package/dist/node/predicate.d.ts +0 -7
  124. package/dist/node/predicate.js +0 -7
  125. package/dist/node/slot.d.ts +0 -29
  126. package/dist/node/slot.js +0 -41
  127. package/dist/node/slotable.d.ts +0 -29
  128. package/dist/node/slotable.js +0 -40
  129. package/dist/node/traversal.d.ts +0 -2
  130. package/dist/node/traversal.js +0 -2
  131. package/dist/style/rule.d.ts +0 -60
  132. package/dist/style/rule.js +0 -109
@@ -1,6 +1,6 @@
1
1
  import { Predicate } from "@siteimprove/alfa-predicate";
2
2
  import type { Attribute } from "../../attribute.js";
3
- import type { Element } from "../../element.js";
3
+ import type { Element } from "../../slotable/element.js";
4
4
  /**
5
5
  * @public
6
6
  */
@@ -1,5 +1,5 @@
1
1
  import type { Predicate } from "@siteimprove/alfa-predicate";
2
- import type { Element } from "../../element.js";
2
+ import type { Element } from "../../slotable/element.js";
3
3
  /**
4
4
  * @public
5
5
  */
@@ -1,6 +1,6 @@
1
1
  import { Iterable } from "@siteimprove/alfa-iterable";
2
2
  import { Predicate } from "@siteimprove/alfa-predicate";
3
- import type { Element } from "../../element.js";
3
+ import type { Element } from "../../slotable/element.js";
4
4
  /**
5
5
  * @public
6
6
  */
@@ -1,5 +1,5 @@
1
1
  import { Predicate } from "@siteimprove/alfa-predicate";
2
- import type { Element } from "../../element.js";
2
+ import type { Element } from "../../slotable/element.js";
3
3
  import { type InputType } from "../input-type.js";
4
4
  /**
5
5
  * @public
@@ -1,5 +1,5 @@
1
1
  import type { Refinement } from "@siteimprove/alfa-refinement";
2
- import type { Element } from "../../element.js";
2
+ import type { Element } from "../../slotable/element.js";
3
3
  /**
4
4
  * @public
5
5
  */
@@ -1,6 +1,6 @@
1
1
  import { Predicate } from "@siteimprove/alfa-predicate";
2
2
  import type { Namespace } from "../../../namespace.js";
3
- import type { Element } from "../../element.js";
3
+ import type { Element } from "../../slotable/element.js";
4
4
  /**
5
5
  * @public
6
6
  */
@@ -1,6 +1,6 @@
1
1
  import { Array } from "@siteimprove/alfa-array";
2
2
  import type { Predicate } from "@siteimprove/alfa-predicate";
3
- import type { Element } from "../../element.js";
3
+ import type { Element } from "../../slotable/element.js";
4
4
  /**
5
5
  * @public
6
6
  */
@@ -1,7 +1,8 @@
1
1
  import { Predicate } from "@siteimprove/alfa-predicate";
2
- import { Element } from "../../element.js";
2
+ import type { Refinement } from "@siteimprove/alfa-refinement";
3
+ import type { Element } from "../../slotable/element.js";
3
4
  /**
4
5
  * @public
5
6
  */
6
- export declare const hasUniqueId: Predicate<Element>;
7
+ export declare function hasUniqueId(isElement: Refinement<unknown, Element>): Predicate<Element>;
7
8
  //# sourceMappingURL=has-unique-id.d.ts.map
@@ -1,31 +1,32 @@
1
1
  import { Cache } from "@siteimprove/alfa-cache";
2
2
  import { Iterable } from "@siteimprove/alfa-iterable";
3
3
  import { Predicate } from "@siteimprove/alfa-predicate";
4
- import { Element } from "../../element.js";
5
4
  import { hasId } from "./has-id.js";
6
5
  const { and } = Predicate;
7
- const uniques = Cache.empty();
8
6
  /**
9
7
  * @public
10
8
  */
11
- export const hasUniqueId = and(hasId(), (element) => uniques
12
- .get(element.root(), () => {
13
- const counts = new Map();
14
- for (const node of element.root().descendants()) {
15
- if (Element.isElement(node) && node.id.isSome()) {
16
- const id = node.id.get();
17
- const count = counts.get(id);
18
- if (count === undefined) {
19
- counts.set(id, 1);
20
- }
21
- else {
22
- counts.set(id, 1 + count);
9
+ export function hasUniqueId(isElement) {
10
+ const uniques = Cache.empty();
11
+ return and(hasId(), (element) => uniques
12
+ .get(element.root(), () => {
13
+ const counts = new Map();
14
+ for (const node of element.root().descendants()) {
15
+ if (isElement(node) && node.id.isSome()) {
16
+ const id = node.id.get();
17
+ const count = counts.get(id);
18
+ if (count === undefined) {
19
+ counts.set(id, 1);
20
+ }
21
+ else {
22
+ counts.set(id, 1 + count);
23
+ }
23
24
  }
24
25
  }
25
- }
26
- return new Set(Iterable.map(Iterable.filter(counts, ([, count]) => count === 1), ([id]) => id));
27
- })
28
- // The initial hasId in the conjunction guarantee that there is one.
29
- // Still defaulting to an impossible one.
30
- .has(element.id.getOr("impossible id due to spaces")));
26
+ return new Set(Iterable.map(Iterable.filter(counts, ([, count]) => count === 1), ([id]) => id));
27
+ })
28
+ // The initial hasId in the conjunction guarantee that there is one.
29
+ // Still defaulting to an impossible one.
30
+ .has(element.id.getOr("impossible id due to spaces")));
31
+ }
31
32
  //# sourceMappingURL=has-unique-id.js.map
@@ -0,0 +1,19 @@
1
+ export * from "./has-attribute.js";
2
+ export * from "./has-display-size.js";
3
+ export * from "./has-id.js";
4
+ export * from "./has-input-type.js";
5
+ export * from "./has-name.js";
6
+ export * from "./has-namespace.js";
7
+ export * from "./has-tab-index.js";
8
+ export * from "./has-unique-id.js";
9
+ export * from "./is-actually-disabled.js";
10
+ export * from "./is-browsing-context-container.js";
11
+ export * from "./is-content.js";
12
+ export * from "./is-document-element.js";
13
+ export * from "./is-draggable.js";
14
+ export * from "./is-editing-host.js";
15
+ export * from "./is-fallback.js";
16
+ export * from "./is-replaced.js";
17
+ export * from "./is-scoped-to.js";
18
+ export * from "./is-suggested-focusable.js";
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,19 @@
1
+ export * from "./has-attribute.js";
2
+ export * from "./has-display-size.js";
3
+ export * from "./has-id.js";
4
+ export * from "./has-input-type.js";
5
+ export * from "./has-name.js";
6
+ export * from "./has-namespace.js";
7
+ export * from "./has-tab-index.js";
8
+ export * from "./has-unique-id.js";
9
+ export * from "./is-actually-disabled.js";
10
+ export * from "./is-browsing-context-container.js";
11
+ export * from "./is-content.js";
12
+ export * from "./is-document-element.js";
13
+ export * from "./is-draggable.js";
14
+ export * from "./is-editing-host.js";
15
+ export * from "./is-fallback.js";
16
+ export * from "./is-replaced.js";
17
+ export * from "./is-scoped-to.js";
18
+ export * from "./is-suggested-focusable.js";
19
+ //# sourceMappingURL=index.js.map
@@ -1,8 +1,10 @@
1
- import { Element } from "../../element.js";
1
+ import { Predicate } from "@siteimprove/alfa-predicate";
2
+ import type { Refinement } from "@siteimprove/alfa-refinement";
3
+ import type { Element } from "../../slotable/element.js";
2
4
  /**
3
5
  * {@link https://html.spec.whatwg.org/multipage#concept-element-disabled}
4
6
  *
5
7
  * @public
6
8
  */
7
- export declare function isActuallyDisabled(element: Element): boolean;
9
+ export declare function isActuallyDisabled(isElement: Refinement<unknown, Element>): Predicate<Element>;
8
10
  //# sourceMappingURL=is-actually-disabled.d.ts.map
@@ -1,47 +1,46 @@
1
1
  import { Predicate } from "@siteimprove/alfa-predicate";
2
- import { Element } from "../../element.js";
2
+ import { hasName } from "./has-name.js";
3
3
  const { equals } = Predicate;
4
4
  /**
5
5
  * {@link https://html.spec.whatwg.org/multipage#concept-element-disabled}
6
6
  *
7
7
  * @public
8
8
  */
9
- export function isActuallyDisabled(element) {
10
- switch (element.name) {
11
- // https://html.spec.whatwg.org/multipage#concept-fe-disabled
12
- case "button":
13
- case "input":
14
- case "select":
15
- case "textarea":
16
- // https://html.spec.whatwg.org/#attr-optgroup-disabled
17
- case "optgroup":
18
- return element.attribute("disabled").isSome();
19
- // https://html.spec.whatwg.org/multipage#concept-fieldset-disabled
20
- case "fieldset":
21
- if (element.attribute("disabled").isSome()) {
22
- return true;
23
- }
24
- return element
25
- .ancestors()
26
- .filter(Element.isElement)
27
- .find(Element.hasName("fieldset"))
28
- .reject(isActuallyDisabled)
29
- .flatMap((fieldset) => fieldset
30
- .descendants()
31
- .filter(Element.isElement)
32
- .find(Element.hasName("legend")))
33
- .some((legend) => legend.descendants().some(equals(element)));
34
- // https://html.spec.whatwg.org/multipage#concept-option-disabled
35
- case "option":
36
- if (element.attribute("disabled").isSome()) {
37
- return true;
38
- }
39
- return element
40
- .inclusiveAncestors()
41
- .filter(Element.isElement)
42
- .find(Element.hasName("optgroup"))
43
- .some(isActuallyDisabled);
44
- }
45
- return false;
9
+ export function isActuallyDisabled(isElement) {
10
+ return function isActuallyDisabled(element) {
11
+ switch (element.name) {
12
+ // https://html.spec.whatwg.org/multipage#concept-fe-disabled
13
+ case "button":
14
+ case "input":
15
+ case "select":
16
+ case "textarea":
17
+ // https://html.spec.whatwg.org/#attr-optgroup-disabled
18
+ case "optgroup":
19
+ return element.attribute("disabled").isSome();
20
+ // https://html.spec.whatwg.org/multipage#concept-fieldset-disabled
21
+ case "fieldset":
22
+ if (element.attribute("disabled").isSome()) {
23
+ return true;
24
+ }
25
+ return element
26
+ .ancestors()
27
+ .filter(isElement)
28
+ .find(hasName("fieldset"))
29
+ .reject(isActuallyDisabled)
30
+ .flatMap((fieldset) => fieldset.descendants().filter(isElement).find(hasName("legend")))
31
+ .some((legend) => legend.descendants().some(equals(element)));
32
+ // https://html.spec.whatwg.org/multipage#concept-option-disabled
33
+ case "option":
34
+ if (element.attribute("disabled").isSome()) {
35
+ return true;
36
+ }
37
+ return element
38
+ .inclusiveAncestors()
39
+ .filter(isElement)
40
+ .find(hasName("optgroup"))
41
+ .some(isActuallyDisabled);
42
+ }
43
+ return false;
44
+ };
46
45
  }
47
46
  //# sourceMappingURL=is-actually-disabled.js.map
@@ -1,4 +1,4 @@
1
- import type { Element } from "../../element.js";
1
+ import type { Element } from "../../slotable/element.js";
2
2
  /**
3
3
  * {@link https://html.spec.whatwg.org/#browsing-context-container}
4
4
  *
@@ -1,10 +1,12 @@
1
1
  import { Predicate } from "@siteimprove/alfa-predicate";
2
- import { Node } from "../../../node.js";
2
+ import { Refinement } from "@siteimprove/alfa-refinement";
3
+ import type { Element } from "../../slotable/element.js";
4
+ import type { BaseNode } from "../../node.js";
3
5
  /**
4
6
  * A node is actual content (not just a container) if it has no children,
5
7
  * or if it is a replaced element (assumed to be replaced by actual content).
6
8
  *
7
9
  * @public
8
10
  */
9
- export declare function isContent(options?: Node.Traversal): Predicate<Node>;
11
+ export declare function isContent(isElement: Refinement<unknown, Element>, defaultTraversal: BaseNode.Traversal): (options?: BaseNode.Traversal) => Predicate<BaseNode>;
10
12
  //# sourceMappingURL=is-content.d.ts.map
@@ -1,7 +1,5 @@
1
1
  import { Predicate } from "@siteimprove/alfa-predicate";
2
2
  import { Refinement } from "@siteimprove/alfa-refinement";
3
- import { Element } from "../../element.js";
4
- import { Node } from "../../../node.js";
5
3
  import { isReplaced } from "./is-replaced.js";
6
4
  const { or } = Predicate;
7
5
  const { and } = Refinement;
@@ -11,7 +9,7 @@ const { and } = Refinement;
11
9
  *
12
10
  * @public
13
11
  */
14
- export function isContent(options = Node.Traversal.empty) {
15
- return or((node) => node.children(options).isEmpty(), and(Element.isElement, isReplaced));
12
+ export function isContent(isElement, defaultTraversal) {
13
+ return (options = defaultTraversal) => or((node) => node.children(options).isEmpty(), and(isElement, isReplaced));
16
14
  }
17
15
  //# sourceMappingURL=is-content.js.map
@@ -1,6 +1,7 @@
1
- import { Element } from "../../element.js";
1
+ import { Refinement } from "@siteimprove/alfa-refinement";
2
+ import type { Element } from "../../slotable/element.js";
2
3
  /**
3
4
  * @public
4
5
  */
5
- export declare function isDocumentElement(value: unknown): value is Element<"html">;
6
+ export declare function isDocumentElement(isElement: Refinement<unknown, Element>): Refinement<unknown, Element<"html">>;
6
7
  //# sourceMappingURL=is-document-element.d.ts.map
@@ -1,5 +1,4 @@
1
1
  import { Refinement } from "@siteimprove/alfa-refinement";
2
- import { Element } from "../../element.js";
3
2
  import { Namespace } from "../../../namespace.js";
4
3
  import { hasName } from "./has-name.js";
5
4
  import { hasNamespace } from "./has-namespace.js";
@@ -7,7 +6,7 @@ const { and, test } = Refinement;
7
6
  /**
8
7
  * @public
9
8
  */
10
- export function isDocumentElement(value) {
11
- return test(and(Element.isElement, and(hasName("html"), hasNamespace(Namespace.HTML))), value);
9
+ export function isDocumentElement(isElement) {
10
+ return (value) => test(and(isElement, and(hasName("html"), hasNamespace(Namespace.HTML))), value);
12
11
  }
13
12
  //# sourceMappingURL=is-document-element.js.map
@@ -1,4 +1,4 @@
1
- import type { Element } from "../../element.js";
1
+ import type { Element } from "../../slotable/element.js";
2
2
  /**
3
3
  * {@link https://html.spec.whatwg.org/#dom-draggable}
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { Element } from "../../element.js";
1
+ import type { Element } from "../../slotable/element.js";
2
2
  /**
3
3
  * {@link https://html.spec.whatwg.org/#editing-host}
4
4
  *
@@ -1,4 +1,7 @@
1
- import type { Node } from "../../../node.js";
1
+ import { Predicate } from "@siteimprove/alfa-predicate";
2
+ import { Refinement } from "@siteimprove/alfa-refinement";
3
+ import type { Element } from "../../slotable/element.js";
4
+ import type { BaseNode } from "../../node.js";
2
5
  /**
3
6
  * Children of <iframe>, <audio>, <video> elements act as fallback content in
4
7
  * legacy user agents.
@@ -11,5 +14,5 @@ import type { Node } from "../../../node.js";
11
14
  *
12
15
  * @public
13
16
  */
14
- export declare function isFallback(node: Node): boolean;
17
+ export declare function isFallback(isElement: Refinement<unknown, Element>): Predicate<BaseNode>;
15
18
  //# sourceMappingURL=is-fallback.d.ts.map
@@ -1,8 +1,7 @@
1
1
  import { Predicate } from "@siteimprove/alfa-predicate";
2
2
  import { Refinement } from "@siteimprove/alfa-refinement";
3
- import { Element } from "../../element.js";
4
3
  import { hasName } from "./has-name.js";
5
- const { not, or, test } = Predicate;
4
+ const { not, or } = Predicate;
6
5
  const { and } = Refinement;
7
6
  /**
8
7
  * Children of <iframe>, <audio>, <video> elements act as fallback content in
@@ -16,13 +15,13 @@ const { and } = Refinement;
16
15
  *
17
16
  * @public
18
17
  */
19
- export function isFallback(node) {
20
- return test(or(hasParentName("iframe"), and(hasParentName("audio", "video"), not(and(Element.isElement, hasName("track", "source"))))), node);
18
+ export function isFallback(isElement) {
19
+ return or(hasParentName(isElement, "iframe"), and(hasParentName(isElement, "audio", "video"), not(and(isElement, hasName("track", "source")))));
21
20
  }
22
- function hasParentName(name, ...names) {
21
+ function hasParentName(isElement, name, ...names) {
23
22
  return (node) => node
24
23
  .parent()
25
- .filter(Element.isElement)
24
+ .filter(isElement)
26
25
  .some(hasName(name, ...names));
27
26
  }
28
27
  //# sourceMappingURL=is-fallback.js.map
@@ -1,4 +1,4 @@
1
- import type { Element } from "../../element.js";
1
+ import type { Element } from "../../slotable/element.js";
2
2
  /**
3
3
  * {@link https://html.spec.whatwg.org/#replaced-elements}
4
4
  *
@@ -1,7 +1,8 @@
1
1
  import type { Predicate } from "@siteimprove/alfa-predicate";
2
- import { Element } from "../../element.js";
2
+ import type { Refinement } from "@siteimprove/alfa-refinement";
3
+ import type { Element } from "../../slotable/element.js";
3
4
  /**
4
5
  * @public
5
6
  */
6
- export declare function isScopedTo(name: string, ...rest: Array<string>): Predicate<Element>;
7
+ export declare function isScopedTo(isElement: Refinement<unknown, Element>): (name: string, ...rest: Array<string>) => Predicate<Element>;
7
8
  //# sourceMappingURL=is-scoped-to.d.ts.map
@@ -1,11 +1,11 @@
1
- import { Element } from "../../element.js";
1
+ import { hasName } from "./has-name.js";
2
2
  /**
3
3
  * @public
4
4
  */
5
- export function isScopedTo(name, ...rest) {
6
- return (element) => element
5
+ export function isScopedTo(isElement) {
6
+ return (name, ...rest) => (element) => element
7
7
  .ancestors()
8
- .filter(Element.isElement)
9
- .some(Element.hasName(name, ...rest));
8
+ .filter(isElement)
9
+ .some(hasName(name, ...rest));
10
10
  }
11
11
  //# sourceMappingURL=is-scoped-to.js.map
@@ -1,4 +1,4 @@
1
- import { Element } from "../../element.js";
1
+ import type { Element } from "../../slotable/element.js";
2
2
  /**
3
3
  * {@link https://html.spec.whatwg.org/multipage/#tabindex-value}
4
4
  *
@@ -1,4 +1,5 @@
1
- import { Element } from "../../element.js";
1
+ import { isBrowsingContextContainer } from "./is-browsing-context-container.js";
2
+ import { isEditingHost } from "./is-editing-host.js";
2
3
  /**
3
4
  * {@link https://html.spec.whatwg.org/multipage/#tabindex-value}
4
5
  *
@@ -34,7 +35,6 @@ export function isSuggestedFocusable(element) {
34
35
  // The type is ensured by the switch on the name.
35
36
  return element.isSummaryForItsParentDetails();
36
37
  }
37
- return (Element.isEditingHost(element) ||
38
- Element.isBrowsingContextContainer(element));
38
+ return isEditingHost(element) || isBrowsingContextContainer(element);
39
39
  }
40
40
  //# sourceMappingURL=is-suggested-focusable.js.map
@@ -1,11 +1,12 @@
1
1
  import type { Device } from "@siteimprove/alfa-device";
2
- import { Trampoline } from "@siteimprove/alfa-trampoline";
3
2
  import { Iterable } from "@siteimprove/alfa-iterable";
4
- import { Node } from "../node.js";
3
+ import { Trampoline } from "@siteimprove/alfa-trampoline";
4
+ import { BaseNode } from "./node.js";
5
+ import type { Node } from "./index.js";
5
6
  /**
6
7
  * @public
7
8
  */
8
- export declare class Fragment extends Node<"fragment"> {
9
+ export declare class Fragment extends BaseNode<"fragment"> {
9
10
  static of(children: Iterable<Node>, externalId?: string, internalId?: string, extraData?: any): Fragment;
10
11
  static empty(): Fragment;
11
12
  protected constructor(children: Array<Node>, externalId?: string, internalId?: string, extraData?: any);
@@ -23,16 +24,12 @@ export declare class Fragment extends Node<"fragment"> {
23
24
  * @public
24
25
  */
25
26
  export declare namespace Fragment {
26
- interface JSON extends Node.JSON<"fragment"> {
27
+ interface JSON extends BaseNode.JSON<"fragment"> {
27
28
  }
28
29
  function isFragment(value: unknown): value is Fragment;
29
30
  /**
30
31
  * @internal
31
32
  */
32
- function fromFragment(json: JSON, device?: Device): Trampoline<Fragment>;
33
- /**
34
- * @internal
35
- */
36
- function cloneFragment(options: Node.ElementReplacementOptions, device?: Device): (fragment: Fragment) => Trampoline<Fragment>;
33
+ function fromFragment(json: JSON, fromNode: (json: Node.JSON, device?: Device) => Trampoline<Node>, device?: Device): Trampoline<Fragment>;
37
34
  }
38
35
  //# sourceMappingURL=fragment.d.ts.map
@@ -1,12 +1,11 @@
1
+ import { Iterable } from "@siteimprove/alfa-iterable";
1
2
  import { String } from "@siteimprove/alfa-string";
2
3
  import { Trampoline } from "@siteimprove/alfa-trampoline";
3
- import { Iterable } from "@siteimprove/alfa-iterable";
4
- import { Node } from "../node.js";
5
- import { Element } from "./element.js";
4
+ import { BaseNode } from "./node.js";
6
5
  /**
7
6
  * @public
8
7
  */
9
- export class Fragment extends Node {
8
+ export class Fragment extends BaseNode {
10
9
  static of(children, externalId, internalId, extraData) {
11
10
  return new Fragment(Array.from(children), externalId, internalId, extraData);
12
11
  }
@@ -46,23 +45,9 @@ export class Fragment extends Node {
46
45
  /**
47
46
  * @internal
48
47
  */
49
- function fromFragment(json, device) {
50
- return Trampoline.traverse(json.children ?? [], (child) => Node.fromNode(child, device)).map((children) => Fragment.of(children));
48
+ function fromFragment(json, fromNode, device) {
49
+ return Trampoline.traverse(json.children ?? [], (child) => fromNode(child, device)).map((children) => Fragment.of(children));
51
50
  }
52
51
  Fragment.fromFragment = fromFragment;
53
- /**
54
- * @internal
55
- */
56
- function cloneFragment(options, device) {
57
- return (fragment) => Trampoline.traverse(fragment.children(), (child) => {
58
- if (Element.isElement(child) && options.predicate(child)) {
59
- return Trampoline.done(Array.from(options.newElements));
60
- }
61
- return Node.cloneNode(child, options, device).map((node) => [node]);
62
- }).map((children) => {
63
- return Fragment.of(Iterable.flatten(children), fragment.externalId);
64
- });
65
- }
66
- Fragment.cloneFragment = cloneFragment;
67
52
  })(Fragment || (Fragment = {}));
68
53
  //# sourceMappingURL=fragment.js.map
@@ -0,0 +1,56 @@
1
+ import type { Device } from "@siteimprove/alfa-device";
2
+ import { Refinement } from "@siteimprove/alfa-refinement";
3
+ import type { Trampoline } from "@siteimprove/alfa-trampoline";
4
+ import { BaseNode as BaseNode } from "./node.js";
5
+ import { Attribute } from "./attribute.js";
6
+ import { Comment } from "./comment.js";
7
+ import { Document } from "./document.js";
8
+ import { Shadow } from "./shadow.js";
9
+ import { Element, Text } from "./slotable/index.js";
10
+ import { Fragment } from "./fragment.js";
11
+ import { Type } from "./type.js";
12
+ import * as predicate from "./predicate/index.js";
13
+ export * from "./attribute.js";
14
+ export * from "./comment.js";
15
+ export * from "./document.js";
16
+ export * from "./shadow.js";
17
+ export * from "./slotable/index.js";
18
+ import "./element/augment.js";
19
+ export * from "./fragment.js";
20
+ export * from "./type.js";
21
+ /** @public */
22
+ export type Node = Attribute | Comment | Document | Element | Fragment | Shadow | Type | Text;
23
+ /**
24
+ * @public
25
+ */
26
+ export declare namespace Node {
27
+ type JSON = Attribute.JSON | Comment.JSON | Document.JSON | Element.JSON | Fragment.JSON | Shadow.JSON | Type.JSON | Text.JSON;
28
+ const isNode: Refinement<unknown, Node>;
29
+ type SerializationOptions = BaseNode.SerializationOptions;
30
+ export import Traversal = BaseNode.Traversal;
31
+ const flatTree: Traversal;
32
+ const fullTree: Traversal;
33
+ const composedNested: Traversal;
34
+ function from(json: Element.JSON, device?: Device): Element;
35
+ function from(json: Attribute.JSON, device?: Device): Attribute;
36
+ function from(json: Text.JSON, device?: Device): Text;
37
+ function from(json: Comment.JSON, device?: Device): Comment;
38
+ function from(json: Document.JSON, device?: Device): Document;
39
+ function from(json: Type.JSON, device?: Device): Document;
40
+ function from(json: Fragment.JSON, device?: Device): Fragment;
41
+ function from(json: JSON, device?: Device): Node;
42
+ /**
43
+ * @internal
44
+ */
45
+ function fromNode(json: JSON, device?: Device): Trampoline<Node>;
46
+ const getNodesBetween: (node1: Node, node2: Node, includeOptions?: {
47
+ includeFirst: boolean;
48
+ includeSecond: boolean;
49
+ }) => import("@siteimprove/alfa-sequence").Sequence<Node>;
50
+ const hasBox: typeof predicate.hasBox, isRoot: typeof predicate.isRoot;
51
+ const hasChild: (predicate: import("@siteimprove/alfa-predicate").Predicate<Node>, options?: Node.Traversal) => import("@siteimprove/alfa-predicate").Predicate<Node>;
52
+ const hasDescendant: (predicate: import("@siteimprove/alfa-predicate").Predicate<Node>, options?: Node.Traversal) => import("@siteimprove/alfa-predicate").Predicate<Node>;
53
+ const hasInclusiveDescendant: (predicate: import("@siteimprove/alfa-predicate").Predicate<Node>, options?: Node.Traversal) => import("@siteimprove/alfa-predicate").Predicate<Node>;
54
+ const hasTextContent: (predicate?: import("@siteimprove/alfa-predicate").Predicate<string>, options?: Node.Traversal) => import("@siteimprove/alfa-predicate").Predicate<Node>;
55
+ }
56
+ //# sourceMappingURL=index.d.ts.map