@plitzi/sdk-dev-tools 0.37.9 → 0.38.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 (190) hide show
  1. package/CHANGELOG.md +621 -0
  2. package/dist/DevToolsContainer.d.ts +7 -1
  3. package/dist/DevToolsContainer.mjs +66 -60
  4. package/dist/agentInspector/flowRuns.d.ts +22 -0
  5. package/dist/agentInspector/flowRuns.mjs +26 -0
  6. package/dist/agentInspector/inspector.d.ts +27 -0
  7. package/dist/agentInspector/inspector.mjs +20 -0
  8. package/dist/agentInspector/report.d.ts +36 -0
  9. package/dist/agentInspector/report.mjs +53 -0
  10. package/dist/agentInspector/useAgentInspector.d.ts +15 -0
  11. package/dist/agentInspector/useAgentInspector.mjs +36 -0
  12. package/dist/components/DevToolsOverlay/DevToolsOverlay.d.ts +6 -1
  13. package/dist/components/DevToolsOverlay/DevToolsOverlay.mjs +25 -15
  14. package/dist/components/DevToolsPanel/DevToolsBody.d.ts +3 -1
  15. package/dist/components/DevToolsPanel/DevToolsBody.mjs +35 -31
  16. package/dist/components/DevToolsPanel/DevToolsHeader.d.ts +3 -1
  17. package/dist/components/DevToolsPanel/DevToolsHeader.mjs +20 -10
  18. package/dist/components/DevToolsPanel/DevToolsPanel.d.ts +3 -1
  19. package/dist/components/DevToolsPanel/DevToolsPanel.mjs +25 -23
  20. package/dist/components/DevToolsPanel/DevToolsSubHeader.mjs +41 -45
  21. package/dist/components/DevToolsPanel/tabs/ActionsViewer/ActionsViewer.mjs +10 -10
  22. package/dist/components/DevToolsPanel/tabs/ElementsViewer/ElementsViewer.d.ts +4 -0
  23. package/dist/components/DevToolsPanel/tabs/ElementsViewer/ElementsViewer.mjs +33 -18
  24. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsAttributes/DetailsAttributes.mjs +16 -0
  25. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsAttributes/index.d.ts +3 -0
  26. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsAttributes/index.mjs +5 -0
  27. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsDefinition/DetailsDefinition.mjs +18 -0
  28. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsDefinition/index.d.ts +3 -0
  29. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsDefinition/index.mjs +5 -0
  30. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsRow/DetailsRow.d.ts +8 -0
  31. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsRow/DetailsRow.mjs +14 -0
  32. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsRow/index.d.ts +3 -0
  33. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsRow/index.mjs +5 -0
  34. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsRuntime/DetailsRuntime.d.ts +9 -0
  35. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsRuntime/DetailsRuntime.mjs +54 -0
  36. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsRuntime/index.d.ts +3 -0
  37. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsRuntime/index.mjs +5 -0
  38. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsValue/DetailsValue.d.ts +9 -0
  39. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsValue/DetailsValue.mjs +15 -0
  40. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsValue/index.d.ts +3 -0
  41. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/DetailsValue/index.mjs +5 -0
  42. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/ElementDetails/ElementDetails.d.ts +7 -0
  43. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/ElementDetails/ElementDetails.mjs +46 -0
  44. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/ElementDetails/index.d.ts +3 -0
  45. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/ElementDetails/index.mjs +5 -0
  46. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/ElementLink/ElementLink.d.ts +7 -0
  47. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/ElementLink/ElementLink.mjs +14 -0
  48. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/ElementLink/index.d.ts +3 -0
  49. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/ElementLink/index.mjs +5 -0
  50. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/ElementsTree/ElementsTree.d.ts +12 -0
  51. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/ElementsTree/ElementsTree.mjs +39 -0
  52. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/ElementsTree/index.d.ts +3 -0
  53. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/ElementsTree/index.mjs +5 -0
  54. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/TreeRow/TreeRow.d.ts +10 -0
  55. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/TreeRow/TreeRow.mjs +36 -0
  56. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/TreeRow/index.d.ts +3 -0
  57. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/TreeRow/index.mjs +5 -0
  58. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/TreeSection/TreeSection.d.ts +13 -0
  59. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/TreeSection/TreeSection.mjs +39 -0
  60. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/TreeSection/index.d.ts +3 -0
  61. package/dist/components/DevToolsPanel/tabs/ElementsViewer/components/TreeSection/index.mjs +5 -0
  62. package/dist/components/DevToolsPanel/tabs/ElementsViewer/helpers/renderTree.d.ts +31 -0
  63. package/dist/components/DevToolsPanel/tabs/ElementsViewer/helpers/renderTree.mjs +61 -0
  64. package/dist/components/DevToolsPanel/tabs/FlagsViewer/FlagSource.d.ts +7 -0
  65. package/dist/components/DevToolsPanel/tabs/FlagsViewer/FlagSource.mjs +23 -0
  66. package/dist/components/DevToolsPanel/tabs/FlagsViewer/FlagsListItem.d.ts +11 -0
  67. package/dist/components/DevToolsPanel/tabs/FlagsViewer/FlagsListItem.mjs +66 -0
  68. package/dist/components/DevToolsPanel/tabs/FlagsViewer/FlagsViewer.d.ts +10 -0
  69. package/dist/components/DevToolsPanel/tabs/FlagsViewer/FlagsViewer.mjs +43 -0
  70. package/dist/components/DevToolsPanel/tabs/FlagsViewer/index.d.ts +3 -0
  71. package/dist/components/DevToolsPanel/tabs/FlagsViewer/index.mjs +5 -0
  72. package/dist/components/DevToolsPanel/tabs/Logs/Log.d.ts +3 -8
  73. package/dist/components/DevToolsPanel/tabs/Logs/Log.mjs +42 -31
  74. package/dist/components/DevToolsPanel/tabs/Logs/Logs.mjs +1 -6
  75. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogInteraction/BodyHeader.mjs +53 -54
  76. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogInteraction/LogInteraction.mjs +17 -17
  77. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogNavigation/LogNavigationBody.mjs +26 -26
  78. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogRealtime/LogRealtime.d.ts +10 -0
  79. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogRealtime/LogRealtime.mjs +58 -0
  80. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogRealtime/index.d.ts +3 -0
  81. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogRealtime/index.mjs +5 -0
  82. package/dist/components/DevToolsPanel/tabs/QaViewer/QaAllChecksButton.d.ts +3 -0
  83. package/dist/components/DevToolsPanel/tabs/QaViewer/QaAllChecksButton.mjs +16 -0
  84. package/dist/components/DevToolsPanel/tabs/QaViewer/QaCheckRow.d.ts +7 -0
  85. package/dist/components/DevToolsPanel/tabs/QaViewer/QaCheckRow.mjs +47 -0
  86. package/dist/components/DevToolsPanel/tabs/QaViewer/QaChecks.d.ts +3 -0
  87. package/dist/components/DevToolsPanel/tabs/QaViewer/QaChecks.mjs +24 -0
  88. package/dist/components/DevToolsPanel/tabs/QaViewer/QaDivider.d.ts +3 -0
  89. package/dist/components/DevToolsPanel/tabs/QaViewer/QaDivider.mjs +5 -0
  90. package/dist/components/DevToolsPanel/tabs/QaViewer/QaFindingItem.d.ts +7 -0
  91. package/dist/components/DevToolsPanel/tabs/QaViewer/QaFindingItem.mjs +32 -0
  92. package/dist/components/DevToolsPanel/tabs/QaViewer/QaInspectorDetails.d.ts +9 -0
  93. package/dist/components/DevToolsPanel/tabs/QaViewer/QaInspectorDetails.mjs +135 -0
  94. package/dist/components/DevToolsPanel/tabs/QaViewer/QaInspectorEmpty.d.ts +3 -0
  95. package/dist/components/DevToolsPanel/tabs/QaViewer/QaInspectorEmpty.mjs +17 -0
  96. package/dist/components/DevToolsPanel/tabs/QaViewer/QaInspectorPanel.d.ts +3 -0
  97. package/dist/components/DevToolsPanel/tabs/QaViewer/QaInspectorPanel.mjs +22 -0
  98. package/dist/components/DevToolsPanel/tabs/QaViewer/QaProperty.d.ts +8 -0
  99. package/dist/components/DevToolsPanel/tabs/QaViewer/QaProperty.mjs +14 -0
  100. package/dist/components/DevToolsPanel/tabs/QaViewer/QaRescanButton.d.ts +3 -0
  101. package/dist/components/DevToolsPanel/tabs/QaViewer/QaRescanButton.mjs +15 -0
  102. package/dist/components/DevToolsPanel/tabs/QaViewer/QaRuleItem.d.ts +7 -0
  103. package/dist/components/DevToolsPanel/tabs/QaViewer/QaRuleItem.mjs +38 -0
  104. package/dist/components/DevToolsPanel/tabs/QaViewer/QaToolChip.d.ts +13 -0
  105. package/dist/components/DevToolsPanel/tabs/QaViewer/QaToolChip.mjs +27 -0
  106. package/dist/components/DevToolsPanel/tabs/QaViewer/QaToolbar.d.ts +3 -0
  107. package/dist/components/DevToolsPanel/tabs/QaViewer/QaToolbar.mjs +58 -0
  108. package/dist/components/DevToolsPanel/tabs/QaViewer/QaViewer.d.ts +8 -0
  109. package/dist/components/DevToolsPanel/tabs/QaViewer/QaViewer.mjs +14 -0
  110. package/dist/components/DevToolsPanel/tabs/QaViewer/QaVisionSelect.d.ts +3 -0
  111. package/dist/components/DevToolsPanel/tabs/QaViewer/QaVisionSelect.mjs +50 -0
  112. package/dist/components/DevToolsPanel/tabs/QaViewer/index.d.ts +3 -0
  113. package/dist/components/DevToolsPanel/tabs/QaViewer/index.mjs +5 -0
  114. package/dist/components/DevToolsPanel/tabs/TracingViewer/TracingViewer.mjs +31 -31
  115. package/dist/components/DevToolsPanel/tabs/VariablesViewer/VariablesStyleList.mjs +7 -10
  116. package/dist/components/DevToolsPanel/tabs/VariablesViewer/VariablesViewer.mjs +12 -12
  117. package/dist/highlight/index.d.ts +2 -0
  118. package/dist/highlight/index.mjs +5 -0
  119. package/dist/highlight/useHighlightElement.d.ts +6 -0
  120. package/dist/{components/DevToolsPanel/tabs/TracingViewer → highlight}/useHighlightElement.mjs +1 -1
  121. package/dist/qa/QaContext.d.ts +29 -0
  122. package/dist/qa/QaContext.mjs +73 -0
  123. package/dist/qa/QaLayer.d.ts +9 -0
  124. package/dist/qa/QaLayer.mjs +69 -0
  125. package/dist/qa/checks/contrast.d.ts +6 -0
  126. package/dist/qa/checks/contrast.mjs +23 -0
  127. package/dist/qa/checks/dom.d.ts +15 -0
  128. package/dist/qa/checks/dom.mjs +4 -0
  129. package/dist/qa/checks/headings.d.ts +6 -0
  130. package/dist/qa/checks/headings.mjs +28 -0
  131. package/dist/qa/checks/images.d.ts +6 -0
  132. package/dist/qa/checks/images.mjs +20 -0
  133. package/dist/qa/checks/index.d.ts +15 -0
  134. package/dist/qa/checks/index.mjs +47 -0
  135. package/dist/qa/checks/names.d.ts +9 -0
  136. package/dist/qa/checks/names.mjs +27 -0
  137. package/dist/qa/checks/overflow.d.ts +3 -0
  138. package/dist/qa/checks/overflow.mjs +24 -0
  139. package/dist/qa/checks/targets.d.ts +8 -0
  140. package/dist/qa/checks/targets.mjs +17 -0
  141. package/dist/qa/findings.d.ts +5 -0
  142. package/dist/qa/findings.mjs +11 -0
  143. package/dist/qa/inspect/colour.d.ts +33 -0
  144. package/dist/qa/inspect/colour.mjs +111 -0
  145. package/dist/qa/inspect/describe.d.ts +32 -0
  146. package/dist/qa/inspect/describe.mjs +42 -0
  147. package/dist/qa/inspect/measure.d.ts +20 -0
  148. package/dist/qa/inspect/measure.mjs +23 -0
  149. package/dist/qa/inspect/rules.d.ts +12 -0
  150. package/dist/qa/inspect/rules.mjs +29 -0
  151. package/dist/qa/overlays/QaBoxModel.d.ts +9 -0
  152. package/dist/qa/overlays/QaBoxModel.mjs +49 -0
  153. package/dist/qa/overlays/QaContrastBadge.d.ts +7 -0
  154. package/dist/qa/overlays/QaContrastBadge.mjs +13 -0
  155. package/dist/qa/overlays/QaGrid.d.ts +10 -0
  156. package/dist/qa/overlays/QaGrid.mjs +24 -0
  157. package/dist/qa/overlays/QaInspector.d.ts +7 -0
  158. package/dist/qa/overlays/QaInspector.mjs +50 -0
  159. package/dist/qa/overlays/QaMeasure.d.ts +7 -0
  160. package/dist/qa/overlays/QaMeasure.mjs +39 -0
  161. package/dist/qa/overlays/QaSwatch.d.ts +6 -0
  162. package/dist/qa/overlays/QaSwatch.mjs +11 -0
  163. package/dist/qa/overlays/QaTabOrder.d.ts +6 -0
  164. package/dist/qa/overlays/QaTabOrder.mjs +39 -0
  165. package/dist/qa/overlays/QaTooltip.d.ts +6 -0
  166. package/dist/qa/overlays/QaTooltip.mjs +65 -0
  167. package/dist/qa/overlays/QaViewport.d.ts +10 -0
  168. package/dist/qa/overlays/QaViewport.mjs +27 -0
  169. package/dist/qa/qaCss.d.ts +12 -0
  170. package/dist/qa/qaCss.mjs +45 -0
  171. package/dist/qa/qaSettings.d.ts +38 -0
  172. package/dist/qa/qaSettings.mjs +28 -0
  173. package/dist/qa/tabOrder.d.ts +2 -0
  174. package/dist/qa/tabOrder.mjs +8 -0
  175. package/dist/qa/usePageBox.d.ts +13 -0
  176. package/dist/qa/usePageBox.mjs +23 -0
  177. package/package.json +373 -33
  178. package/dist/components/DevToolsPanel/tabs/ElementsViewer/DetailsAttributes.mjs +0 -19
  179. package/dist/components/DevToolsPanel/tabs/ElementsViewer/DetailsDefinition.mjs +0 -20
  180. package/dist/components/DevToolsPanel/tabs/ElementsViewer/DetailsValue.d.ts +0 -10
  181. package/dist/components/DevToolsPanel/tabs/ElementsViewer/DetailsValue.mjs +0 -31
  182. package/dist/components/DevToolsPanel/tabs/ElementsViewer/ElementDetails.d.ts +0 -8
  183. package/dist/components/DevToolsPanel/tabs/ElementsViewer/ElementDetails.mjs +0 -21
  184. package/dist/components/DevToolsPanel/tabs/ElementsViewer/ElementsList.d.ts +0 -8
  185. package/dist/components/DevToolsPanel/tabs/ElementsViewer/ElementsList.mjs +0 -42
  186. package/dist/components/DevToolsPanel/tabs/ElementsViewer/ElementsListItem.d.ts +0 -9
  187. package/dist/components/DevToolsPanel/tabs/ElementsViewer/ElementsListItem.mjs +0 -24
  188. package/dist/components/DevToolsPanel/tabs/TracingViewer/useHighlightElement.d.ts +0 -2
  189. /package/dist/components/DevToolsPanel/tabs/ElementsViewer/{DetailsAttributes.d.ts → components/DetailsAttributes/DetailsAttributes.d.ts} +0 -0
  190. /package/dist/components/DevToolsPanel/tabs/ElementsViewer/{DetailsDefinition.d.ts → components/DetailsDefinition/DetailsDefinition.d.ts} +0 -0
@@ -0,0 +1,111 @@
1
+ //#region src/qa/inspect/colour.ts
2
+ var e, t = () => {
3
+ if (e === void 0) try {
4
+ let t = document.createElement("canvas");
5
+ t.width = 1, t.height = 1, e = t.getContext("2d", { willReadFrequently: !0 });
6
+ } catch {
7
+ e = null;
8
+ }
9
+ return e;
10
+ }, n = /^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:[\s,/]+([\d.]+%?))?\s*\)$/i, r = (e) => e === void 0 ? 1 : e.endsWith("%") ? parseFloat(e) / 100 : parseFloat(e), i = (e) => {
11
+ let t = e.trim(), i = n.exec(t);
12
+ if (i) return [
13
+ Number(i[1]),
14
+ Number(i[2]),
15
+ Number(i[3]),
16
+ r(i.at(4))
17
+ ];
18
+ let a = /^#([\da-f]{3}|[\da-f]{6})$/i.exec(t)?.[1];
19
+ if (!a) return t === "transparent" ? [
20
+ 0,
21
+ 0,
22
+ 0,
23
+ 0
24
+ ] : void 0;
25
+ let o = a.length === 3 ? a.replace(/./g, (e) => e + e) : a, [s, c, l] = [
26
+ 0,
27
+ 2,
28
+ 4
29
+ ].map((e) => parseInt(o.slice(e, e + 2), 16));
30
+ return [
31
+ s,
32
+ c,
33
+ l,
34
+ 1
35
+ ];
36
+ }, a = (e) => {
37
+ let n = t();
38
+ if (!n) return i(e);
39
+ n.clearRect(0, 0, 1, 1), n.fillStyle = "#000", n.fillStyle = e, n.fillRect(0, 0, 1, 1);
40
+ let [r, a, o, s] = n.getImageData(0, 0, 1, 1).data;
41
+ return [
42
+ r,
43
+ a,
44
+ o,
45
+ s / 255
46
+ ];
47
+ }, o = (e, t) => {
48
+ let n = e[3] + t[3] * (1 - e[3]);
49
+ if (n === 0) return [
50
+ 0,
51
+ 0,
52
+ 0,
53
+ 0
54
+ ];
55
+ let r = (r) => (e[r] * e[3] + t[r] * t[3] * (1 - e[3])) / n;
56
+ return [
57
+ r(0),
58
+ r(1),
59
+ r(2),
60
+ n
61
+ ];
62
+ }, s = ([e, t, n]) => {
63
+ let [r, i, a] = [
64
+ e,
65
+ t,
66
+ n
67
+ ].map((e) => {
68
+ let t = e / 255;
69
+ return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
70
+ });
71
+ return .2126 * r + .7152 * i + .0722 * a;
72
+ }, c = (e, t) => {
73
+ let [n, r] = [s(e), s(t)].sort((e, t) => t - e);
74
+ return (n + .05) / (r + .05);
75
+ }, l = ([e, t, n, r]) => {
76
+ let i = `#${[
77
+ e,
78
+ t,
79
+ n
80
+ ].map((e) => Math.round(e).toString(16).padStart(2, "0")).join("")}`;
81
+ return r < 1 ? `${i} · ${String(Math.round(r * 100))}%` : i;
82
+ }, u = () => {
83
+ let e = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Map(), n = (t) => (e.has(t) || e.set(t, a(t)), e.get(t)), r = (e) => {
84
+ let t = e.ownerDocument.documentElement;
85
+ return e.ownerDocument.defaultView?.getComputedStyle(t).colorScheme.includes("dark") ?? !1 ? [
86
+ 18,
87
+ 18,
88
+ 18,
89
+ 1
90
+ ] : [
91
+ 255,
92
+ 255,
93
+ 255,
94
+ 1
95
+ ];
96
+ }, i = (e) => {
97
+ if (t.has(e)) return t.get(e);
98
+ let a = e.ownerDocument.defaultView?.getComputedStyle(e), s;
99
+ if (a && (!a.backgroundImage || a.backgroundImage === "none")) {
100
+ let t = n(a.backgroundColor), c = e.parentElement, l = c ? i(c) : r(e);
101
+ t && t[3] >= 1 ? s = t : l && (s = t && t[3] > 0 ? o(t, l) : l);
102
+ }
103
+ return t.set(e, s), s;
104
+ };
105
+ return {
106
+ colour: n,
107
+ backdrop: i
108
+ };
109
+ }, d = (e) => u().backdrop(e), f = (e, t) => e >= 24 || e >= 18.66 && t >= 700;
110
+ //#endregion
111
+ export { d as backdropOf, u as colourReader, c as contrastRatio, f as isLargeText, o as over, l as toHex, a as toRgba };
@@ -0,0 +1,32 @@
1
+ /** What a designer asks of an element on the page: what it is, how big, how it is spaced, set and coloured. */
2
+ export interface ElementSummary {
3
+ /** `heading · lp-hero-title`, or the tag where the element is not one of the space's. */
4
+ name: string;
5
+ tag: string;
6
+ width: number;
7
+ height: number;
8
+ display: string;
9
+ position: string;
10
+ padding: string;
11
+ margin: string;
12
+ border: string;
13
+ radius: string;
14
+ gap: string;
15
+ font: string;
16
+ lineHeight: string;
17
+ letterSpacing: string;
18
+ colour: string;
19
+ background: string | undefined;
20
+ /** The text against what is behind it, when that can be read — and what it needs to pass AA. */
21
+ contrast: {
22
+ ratio: number;
23
+ needs: number;
24
+ } | undefined;
25
+ opacity: string;
26
+ zIndex: string;
27
+ /** The space's own classes: the SDK's wrappers left out. */
28
+ classes: string[];
29
+ }
30
+ /** Four sides the way a shorthand writes them: one value when all agree, two when opposite sides do. */
31
+ export declare const sidesOf: (style: CSSStyleDeclaration, property: "padding" | "margin") => string;
32
+ export declare const summarize: (element: Element) => ElementSummary | undefined;
@@ -0,0 +1,42 @@
1
+ import { backdropOf as e, contrastRatio as t, isLargeText as n, over as r, toHex as i, toRgba as a } from "./colour.mjs";
2
+ //#region src/qa/inspect/describe.ts
3
+ var o = [
4
+ "top",
5
+ "right",
6
+ "bottom",
7
+ "left"
8
+ ], s = (e, t) => {
9
+ let [n, r, i, a] = o.map((n) => e.getPropertyValue(`${t}-${n}`) || "0px");
10
+ return n === r && r === i && i === a ? n : n === i && r === a ? `${n} ${r}` : `${n} ${r} ${i} ${a}`;
11
+ }, c = (e) => !e.startsWith("plitzi-component") && !e.startsWith("plitzi__") && !e.startsWith("devtools-"), l = (e) => e.split(",")[0]?.replace(/["']/g, "").trim() ?? e, u = (o) => {
12
+ let u = o.ownerDocument.defaultView;
13
+ if (!u) return;
14
+ let d = u.getComputedStyle(o), f = o.getBoundingClientRect(), p = o.getAttribute("data-type"), m = o.getAttribute("data-plitzi-el"), h = o.tagName.toLowerCase(), g = a(d.color), _ = a(d.backgroundColor), v = e(o), y = parseFloat(d.fontSize), b = Number(d.fontWeight) || 400, x = g && v ? {
15
+ ratio: t(r(g, v), v),
16
+ needs: n(y, b) ? 3 : 4.5
17
+ } : void 0;
18
+ return {
19
+ name: p && m ? `${p} · ${m}` : h,
20
+ tag: h,
21
+ width: Math.round(f.width),
22
+ height: Math.round(f.height),
23
+ display: d.display,
24
+ position: d.position,
25
+ padding: s(d, "padding"),
26
+ margin: s(d, "margin"),
27
+ border: `${d.borderTopWidth} ${d.borderTopStyle}`,
28
+ radius: d.borderTopLeftRadius,
29
+ gap: d.gap === "normal" ? "" : d.gap,
30
+ font: `${l(d.fontFamily)} ${d.fontSize} · ${d.fontWeight}`,
31
+ lineHeight: d.lineHeight,
32
+ letterSpacing: d.letterSpacing,
33
+ colour: g ? i(g) : d.color,
34
+ background: _ && _[3] > 0 ? i(_) : void 0,
35
+ contrast: x,
36
+ opacity: d.opacity,
37
+ zIndex: d.zIndex,
38
+ classes: [...o.classList].filter(c)
39
+ };
40
+ };
41
+ //#endregion
42
+ export { s as sidesOf, u as summarize };
@@ -0,0 +1,20 @@
1
+ /** A box on the screen, as `getBoundingClientRect` gives it. */
2
+ export interface Box {
3
+ left: number;
4
+ top: number;
5
+ right: number;
6
+ bottom: number;
7
+ }
8
+ /** A distance to draw: a line from one point to another and its length in px. */
9
+ export interface Distance {
10
+ x1: number;
11
+ y1: number;
12
+ x2: number;
13
+ y2: number;
14
+ length: number;
15
+ }
16
+ /**
17
+ * The distances between two boxes, as a design tool draws them: the gap between them on each axis they are apart on,
18
+ * or, when one holds the other, from each of its sides to the outer box's.
19
+ */
20
+ export declare const distancesBetween: (from: Box, to: Box) => Distance[];
@@ -0,0 +1,23 @@
1
+ //#region src/qa/inspect/measure.ts
2
+ var e = (e, t, n, r) => ({
3
+ x1: e,
4
+ y1: t,
5
+ x2: n,
6
+ y2: r,
7
+ length: Math.round(Math.hypot(n - e, r - t))
8
+ }), t = (e, t) => (e + t) / 2, n = (n, r) => {
9
+ let i = n.left >= r.left && n.right <= r.right && n.top >= r.top && n.bottom <= r.bottom, a = r.left >= n.left && r.right <= n.right && r.top >= n.top && r.bottom <= n.bottom;
10
+ if (i || a) {
11
+ let [a, o] = i ? [n, r] : [r, n], s = t(a.left, a.right), c = t(a.top, a.bottom);
12
+ return [
13
+ e(s, o.top, s, a.top),
14
+ e(a.right, c, o.right, c),
15
+ e(s, a.bottom, s, o.bottom),
16
+ e(o.left, c, a.left, c)
17
+ ].filter((e) => e.length > 0);
18
+ }
19
+ let o = [], s = t(Math.max(n.top, r.top), Math.min(n.bottom, r.bottom)), c = t(Math.max(n.left, r.left), Math.min(n.right, r.right)), l = n.bottom > r.top && r.bottom > n.top ? s : t(n.top, n.bottom), u = n.right > r.left && r.right > n.left ? c : t(n.left, n.right);
20
+ return r.left >= n.right ? o.push(e(n.right, l, r.left, l)) : n.left >= r.right && o.push(e(r.right, l, n.left, l)), r.top >= n.bottom ? o.push(e(u, n.bottom, u, r.top)) : n.top >= r.bottom && o.push(e(u, r.bottom, u, n.top)), o;
21
+ };
22
+ //#endregion
23
+ export { n as distancesBetween };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The CSS rules that reach an element, as written — the class it wears, its variant, an ancestor's condition, a rule
3
+ * of the space's own CSS — rather than the values they resolved to.
4
+ */
5
+ export interface MatchedRule {
6
+ selector: string;
7
+ /** `color: red; padding: 8px`. */
8
+ declarations: string;
9
+ /** The media query it sits under, when there is one. */
10
+ media?: string;
11
+ }
12
+ export declare const matchedRules: (element: Element) => MatchedRule[];
@@ -0,0 +1,29 @@
1
+ //#region src/qa/inspect/rules.ts
2
+ var e = /^(\*|:root|:host|html|body|::?before|::?after|::backdrop|::?marker)$/, t = (t) => t.split(",").every((t) => e.test(t.trim())), n = (e) => e.includes("[data-plitzi-qa") || e.includes("devtools-element-"), r = (e) => [...e].every((e) => e.startsWith("--tw-")), i = 60, a = (e, t) => t ? e.includes("&") ? e.replaceAll("&", `:is(${t})`) : `:is(${t}) ${e}` : e, o = (e, t) => {
3
+ try {
4
+ return e.matches(t);
5
+ } catch {
6
+ return !1;
7
+ }
8
+ }, s = (e, c, l, u, d) => {
9
+ let f = e.ownerDocument.defaultView;
10
+ for (let p of c) {
11
+ if (l.length >= i) return;
12
+ if (p instanceof CSSStyleRule) {
13
+ let i = a(p.selectorText, u);
14
+ p.style.length > 0 && !t(p.selectorText) && !n(p.selectorText) && !r(p.style) && o(e, i) && l.push({
15
+ selector: p.selectorText,
16
+ declarations: p.style.cssText,
17
+ ...d ? { media: d } : {}
18
+ }), p.cssRules.length > 0 && s(e, p.cssRules, l, i, d);
19
+ } else p instanceof CSSMediaRule ? (typeof f?.matchMedia != "function" || f.matchMedia(p.media.mediaText).matches) && s(e, p.cssRules, l, u, p.media.mediaText) : p instanceof CSSGroupingRule && s(e, p.cssRules, l, u, d);
20
+ }
21
+ }, c = (e) => {
22
+ let t = [];
23
+ for (let n of e.ownerDocument.styleSheets) try {
24
+ s(e, n.cssRules, t, void 0, void 0);
25
+ } catch {}
26
+ return t;
27
+ };
28
+ //#endregion
29
+ export { c as matchedRules };
@@ -0,0 +1,9 @@
1
+ export type QaBoxModelProps = {
2
+ element: Element;
3
+ };
4
+ /**
5
+ * The element's box as a browser's inspector draws it: its margin in orange outside it, its padding in green inside
6
+ * its border, its content in blue.
7
+ */
8
+ declare const QaBoxModel: ({ element }: QaBoxModelProps) => import('react').JSX.Element | null;
9
+ export default QaBoxModel;
@@ -0,0 +1,49 @@
1
+ import { Fragment as e, jsx as t, jsxs as n } from "react/jsx-runtime";
2
+ //#region src/qa/overlays/QaBoxModel.tsx
3
+ var r = (e) => parseFloat(e) || 0, i = (e, t, n, r, i) => ({
4
+ borderStyle: "solid",
5
+ borderColor: e,
6
+ borderWidth: `${String(t)}px ${String(n)}px ${String(r)}px ${String(i)}px`
7
+ }), a = ({ element: a }) => {
8
+ let o = a.ownerDocument.defaultView;
9
+ if (!o) return null;
10
+ let s = o.getComputedStyle(a), c = a.getBoundingClientRect(), l = [
11
+ s.marginTop,
12
+ s.marginRight,
13
+ s.marginBottom,
14
+ s.marginLeft
15
+ ].map(r), u = [
16
+ s.borderTopWidth,
17
+ s.borderRightWidth,
18
+ s.borderBottomWidth,
19
+ s.borderLeftWidth
20
+ ].map(r), d = [
21
+ s.paddingTop,
22
+ s.paddingRight,
23
+ s.paddingBottom,
24
+ s.paddingLeft
25
+ ].map(r), [f, p, m, h] = l.map((e) => Math.max(e, 0)), [g, _, v, y] = u, [b, x, S, C] = d;
26
+ return /* @__PURE__ */ n(e, { children: [/* @__PURE__ */ t("div", {
27
+ className: "pointer-events-none fixed z-[999997] box-border",
28
+ style: {
29
+ left: c.left - h,
30
+ top: c.top - f,
31
+ width: c.width + h + p,
32
+ height: c.height + f + m,
33
+ ...i("rgba(249, 115, 22, 0.32)", f, p, m, h)
34
+ }
35
+ }), /* @__PURE__ */ t("div", {
36
+ className: "pointer-events-none fixed z-[999997] box-border",
37
+ style: {
38
+ left: c.left + y,
39
+ top: c.top + g,
40
+ width: Math.max(c.width - y - _, 0),
41
+ height: Math.max(c.height - g - v, 0),
42
+ backgroundColor: "rgba(59, 130, 246, 0.24)",
43
+ backgroundClip: "padding-box",
44
+ ...i("rgba(34, 197, 94, 0.32)", b, x, S, C)
45
+ }
46
+ })] });
47
+ };
48
+ //#endregion
49
+ export { a as default };
@@ -0,0 +1,7 @@
1
+ export type QaContrastBadgeProps = {
2
+ ratio: number;
3
+ needs: number;
4
+ };
5
+ /** The text's contrast against what is behind it, and whether it passes AA for its size. */
6
+ declare const QaContrastBadge: ({ ratio, needs }: QaContrastBadgeProps) => import('react').JSX.Element;
7
+ export default QaContrastBadge;
@@ -0,0 +1,13 @@
1
+ import e from "clsx";
2
+ import { jsxs as t } from "react/jsx-runtime";
3
+ //#region src/qa/overlays/QaContrastBadge.tsx
4
+ var n = ({ ratio: n, needs: r }) => /* @__PURE__ */ t("span", {
5
+ className: e("rounded px-1 font-semibold", {
6
+ "bg-emerald-500/20 text-emerald-300": n >= r,
7
+ "bg-rose-500/25 text-rose-300": n < r
8
+ }),
9
+ title: `AA needs ${String(r)}:1 for this size`,
10
+ children: [n.toFixed(2), ":1"]
11
+ });
12
+ //#endregion
13
+ export { n as default };
@@ -0,0 +1,10 @@
1
+ import { PageBox } from '../usePageBox';
2
+ export type QaGridProps = {
3
+ box: PageBox;
4
+ };
5
+ /**
6
+ * The layout grid over the page — the builder's, from the same definition — held to the viewport like a design tool's,
7
+ * across the page's box rather than the window's when the panel is docked beside it.
8
+ */
9
+ declare const QaGrid: ({ box }: QaGridProps) => import('react').JSX.Element;
10
+ export default QaGrid;
@@ -0,0 +1,24 @@
1
+ import { jsx as e } from "react/jsx-runtime";
2
+ import { LAYOUT_GRIDS as t, displayModeAt as n, layoutGridLook as r } from "@plitzi/sdk-shared/style";
3
+ //#region src/qa/overlays/QaGrid.tsx
4
+ var i = ({ box: i }) => {
5
+ let a = r(t[n(i.viewportWidth)]);
6
+ return /* @__PURE__ */ e("div", {
7
+ "aria-hidden": "true",
8
+ className: "pointer-events-none fixed top-0 bottom-0 z-[999998]",
9
+ style: {
10
+ left: i.left,
11
+ width: i.width
12
+ },
13
+ children: /* @__PURE__ */ e("div", {
14
+ className: "absolute top-0 bottom-0 left-1/2 -translate-x-1/2",
15
+ style: {
16
+ width: a.width,
17
+ backgroundImage: a.backgroundImage,
18
+ boxShadow: a.boxShadow
19
+ }
20
+ })
21
+ });
22
+ };
23
+ //#endregion
24
+ export { i as default };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The inspector over the page: point at an element for its box and how it is set; click to keep it in the QA tab —
3
+ * the page's own click does not happen, so a link can be inspected without leaving; hold Alt over another for the
4
+ * distances between them. Escape puts it away.
5
+ */
6
+ declare const QaInspector: () => import('react').JSX.Element;
7
+ export default QaInspector;
@@ -0,0 +1,50 @@
1
+ import e from "../QaContext.mjs";
2
+ import t from "./QaBoxModel.mjs";
3
+ import n from "./QaMeasure.mjs";
4
+ import r from "./QaTooltip.mjs";
5
+ import { use as i, useEffect as a, useState as o } from "react";
6
+ import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
7
+ //#region src/qa/overlays/QaInspector.tsx
8
+ var u = () => {
9
+ let { pageRef: u, pinned: d, setPinned: f, setSetting: p } = i(e), [m, h] = o(), [g, _] = o(!1), [, v] = o(0);
10
+ a(() => {
11
+ let e = u.current;
12
+ if (!e) return;
13
+ let t = (t) => t instanceof Element && e.contains(t), n = 0, r = () => {
14
+ cancelAnimationFrame(n), n = requestAnimationFrame(() => v((e) => e + 1));
15
+ }, i = (e) => {
16
+ _(e.altKey), h(t(e.target) ? e.target : void 0);
17
+ }, a = (e) => {
18
+ t(e.target) && (e.preventDefault(), e.stopPropagation(), f(e.target));
19
+ }, o = (e) => {
20
+ _(e.altKey), e.type === "keydown" && e.key === "Escape" && p("inspect", !1);
21
+ };
22
+ return document.addEventListener("pointermove", i, !0), document.addEventListener("click", a, !0), document.addEventListener("keydown", o, !0), document.addEventListener("keyup", o, !0), document.addEventListener("scroll", r, !0), window.addEventListener("resize", r), () => {
23
+ cancelAnimationFrame(n), document.removeEventListener("pointermove", i, !0), document.removeEventListener("click", a, !0), document.removeEventListener("keydown", o, !0), document.removeEventListener("keyup", o, !0), document.removeEventListener("scroll", r, !0), window.removeEventListener("resize", r);
24
+ };
25
+ }, [
26
+ u,
27
+ f,
28
+ p
29
+ ]);
30
+ let y = d?.isConnected ? d : void 0, b = y?.getBoundingClientRect();
31
+ return /* @__PURE__ */ l(s, { children: [
32
+ b && /* @__PURE__ */ c("div", {
33
+ className: "pointer-events-none fixed z-[999998] box-border outline-2 outline-violet-500",
34
+ style: {
35
+ left: b.left,
36
+ top: b.top,
37
+ width: b.width,
38
+ height: b.height
39
+ }
40
+ }),
41
+ m && m !== y && /* @__PURE__ */ c(t, { element: m }),
42
+ y && m && m !== y && g && /* @__PURE__ */ c(n, {
43
+ from: y,
44
+ to: m
45
+ }),
46
+ m && !g && /* @__PURE__ */ c(r, { element: m })
47
+ ] });
48
+ };
49
+ //#endregion
50
+ export { u as default };
@@ -0,0 +1,7 @@
1
+ export type QaMeasureProps = {
2
+ from: Element;
3
+ to: Element;
4
+ };
5
+ /** The distances between two elements, drawn and labelled — what a designer measures spacing with. */
6
+ declare const QaMeasure: ({ from, to }: QaMeasureProps) => import('react').JSX.Element;
7
+ export default QaMeasure;
@@ -0,0 +1,39 @@
1
+ import { distancesBetween as e } from "../inspect/measure.mjs";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
+ //#region src/qa/overlays/QaMeasure.tsx
4
+ var r = ({ from: r, to: i }) => {
5
+ let a = e(r.getBoundingClientRect(), i.getBoundingClientRect());
6
+ return /* @__PURE__ */ t("svg", {
7
+ className: "pointer-events-none fixed inset-0 z-[999998] h-full w-full overflow-visible",
8
+ "aria-hidden": "true",
9
+ children: a.map(({ x1: e, y1: r, x2: i, y2: a, length: o }) => /* @__PURE__ */ n("g", { children: [
10
+ /* @__PURE__ */ t("line", {
11
+ x1: e,
12
+ y1: r,
13
+ x2: i,
14
+ y2: a,
15
+ stroke: "#f43f5e",
16
+ strokeWidth: 1
17
+ }),
18
+ /* @__PURE__ */ t("rect", {
19
+ x: (e + i) / 2 - 16,
20
+ y: (r + a) / 2 - 9,
21
+ width: 32,
22
+ height: 18,
23
+ rx: 4,
24
+ fill: "#f43f5e"
25
+ }),
26
+ /* @__PURE__ */ t("text", {
27
+ x: (e + i) / 2,
28
+ y: (r + a) / 2 + 4,
29
+ textAnchor: "middle",
30
+ fill: "#ffffff",
31
+ fontSize: 11,
32
+ fontFamily: "ui-monospace, monospace",
33
+ children: o
34
+ })
35
+ ] }, `${String(e)}-${String(r)}-${String(i)}-${String(a)}`))
36
+ });
37
+ };
38
+ //#endregion
39
+ export { r as default };
@@ -0,0 +1,6 @@
1
+ export type QaSwatchProps = {
2
+ colour: string;
3
+ };
4
+ /** A colour as a chip and its value. */
5
+ declare const QaSwatch: ({ colour }: QaSwatchProps) => import('react').JSX.Element;
6
+ export default QaSwatch;
@@ -0,0 +1,11 @@
1
+ import { jsx as e, jsxs as t } from "react/jsx-runtime";
2
+ //#region src/qa/overlays/QaSwatch.tsx
3
+ var n = ({ colour: n }) => /* @__PURE__ */ t("span", {
4
+ className: "inline-flex items-center gap-1",
5
+ children: [/* @__PURE__ */ e("span", {
6
+ className: "h-2.5 w-2.5 shrink-0 rounded-sm ring-1 ring-white/30",
7
+ style: { backgroundColor: n.split(" ")[0] }
8
+ }), n]
9
+ });
10
+ //#endregion
11
+ export { n as default };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The order the Tab key walks the page's controls in, numbered on each — where a keyboard user goes next, and whether
3
+ * that is where they would expect.
4
+ */
5
+ declare const QaTabOrder: () => import('react').JSX.Element;
6
+ export default QaTabOrder;
@@ -0,0 +1,39 @@
1
+ import e from "../QaContext.mjs";
2
+ import { tabOrderOf as t } from "../tabOrder.mjs";
3
+ import { use as n, useEffect as r, useState as i } from "react";
4
+ import { Fragment as a, jsx as o } from "react/jsx-runtime";
5
+ //#region src/qa/overlays/QaTabOrder.tsx
6
+ var s = 200, c = () => {
7
+ let { pageRef: c } = n(e), [l, u] = i([]), [, d] = i(0);
8
+ return r(() => {
9
+ let e = c.current;
10
+ if (!e) return;
11
+ let n = 0, r, i = () => {
12
+ clearTimeout(r), r = setTimeout(() => u(t(e)), s);
13
+ }, a = () => {
14
+ cancelAnimationFrame(n), n = requestAnimationFrame(() => d((e) => e + 1));
15
+ };
16
+ i();
17
+ let o = new MutationObserver(i);
18
+ return o.observe(e, {
19
+ childList: !0,
20
+ subtree: !0,
21
+ attributes: !0,
22
+ attributeFilter: ["tabindex", "disabled"]
23
+ }), document.addEventListener("scroll", a, !0), window.addEventListener("resize", i), () => {
24
+ clearTimeout(r), cancelAnimationFrame(n), o.disconnect(), document.removeEventListener("scroll", a, !0), window.removeEventListener("resize", i);
25
+ };
26
+ }, [c]), /* @__PURE__ */ o(a, { children: l.map((e, t) => {
27
+ let n = e.getBoundingClientRect();
28
+ return n.bottom < 0 || n.top > window.innerHeight ? null : /* @__PURE__ */ o("span", {
29
+ className: "pointer-events-none fixed z-[999998] flex h-[18px] min-w-[18px] -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-full bg-sky-600 px-1 font-mono text-[10px] font-semibold text-white shadow ring-2 ring-white/80",
30
+ style: {
31
+ left: n.left,
32
+ top: n.top
33
+ },
34
+ children: t + 1
35
+ }, t);
36
+ }) });
37
+ };
38
+ //#endregion
39
+ export { c as default };
@@ -0,0 +1,6 @@
1
+ export type QaTooltipProps = {
2
+ element: Element;
3
+ };
4
+ /** What the element is and how it is set, by the pointer: a browser inspector's label, for a designer. */
5
+ declare const QaTooltip: ({ element }: QaTooltipProps) => import('react').JSX.Element | null;
6
+ export default QaTooltip;
@@ -0,0 +1,65 @@
1
+ import e from "./QaContrastBadge.mjs";
2
+ import t from "./QaSwatch.mjs";
3
+ import { summarize as n } from "../inspect/describe.mjs";
4
+ import { useMemo as r } from "react";
5
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
6
+ //#region src/qa/overlays/QaTooltip.tsx
7
+ var o = 8, s = ({ element: s }) => {
8
+ let c = r(() => n(s), [s]);
9
+ if (!c) return null;
10
+ let l = s.getBoundingClientRect(), u = l.top < 120;
11
+ return /* @__PURE__ */ a("div", {
12
+ className: "pointer-events-none fixed z-[999999] flex max-w-[360px] flex-col gap-1 rounded-lg bg-zinc-900/95 px-2.5 py-2 font-mono text-[11px] leading-snug text-zinc-100 shadow-xl ring-1 ring-white/10",
13
+ style: {
14
+ left: Math.max(o, l.left),
15
+ ...u ? { top: l.bottom + o } : { bottom: window.innerHeight - l.top + o }
16
+ },
17
+ children: [
18
+ /* @__PURE__ */ a("span", {
19
+ className: "flex items-center gap-2",
20
+ children: [/* @__PURE__ */ i("span", {
21
+ className: "truncate font-semibold text-violet-300",
22
+ children: c.name
23
+ }), /* @__PURE__ */ a("span", {
24
+ className: "text-zinc-400",
25
+ children: [
26
+ c.width,
27
+ " × ",
28
+ c.height
29
+ ]
30
+ })]
31
+ }),
32
+ /* @__PURE__ */ a("span", {
33
+ className: "text-zinc-300",
34
+ children: [
35
+ c.font,
36
+ " / ",
37
+ c.lineHeight
38
+ ]
39
+ }),
40
+ /* @__PURE__ */ a("span", {
41
+ className: "flex flex-wrap items-center gap-x-3 gap-y-1",
42
+ children: [
43
+ /* @__PURE__ */ i(t, { colour: c.colour }),
44
+ c.background && /* @__PURE__ */ i(t, { colour: c.background }),
45
+ c.contrast && /* @__PURE__ */ i(e, {
46
+ ratio: c.contrast.ratio,
47
+ needs: c.contrast.needs
48
+ })
49
+ ]
50
+ }),
51
+ /* @__PURE__ */ a("span", {
52
+ className: "text-zinc-400",
53
+ children: [
54
+ "padding ",
55
+ c.padding,
56
+ " · margin ",
57
+ c.margin,
58
+ c.gap && ` · gap ${c.gap}`
59
+ ]
60
+ })
61
+ ]
62
+ });
63
+ };
64
+ //#endregion
65
+ export { s as default };
@@ -0,0 +1,10 @@
1
+ import { PageBox } from '../usePageBox';
2
+ export type QaViewportProps = {
3
+ box: PageBox;
4
+ };
5
+ /**
6
+ * The window's size and the breakpoint whose rules the page shows at it — and the page's own width when the panel
7
+ * docked beside it makes the two differ, which is when a layout looks wrong for a reason that is not the layout.
8
+ */
9
+ declare const QaViewport: ({ box }: QaViewportProps) => import('react').JSX.Element;
10
+ export default QaViewport;