cursedbelt 5.67.0 → 5.69.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/dist/looks.css +41 -0
- package/dist/react/canvas-hud/CanvasToolbar.d.ts +67 -0
- package/dist/react/canvas-hud/CanvasToolbar.d.ts.map +1 -0
- package/dist/react/canvas-hud/CanvasToolbar.js +84 -0
- package/dist/react/canvas-hud/CanvasToolbar.js.map +1 -0
- package/dist/react/canvas-hud/index.d.ts +2 -0
- package/dist/react/canvas-hud/index.d.ts.map +1 -1
- package/dist/react/canvas-hud/index.js +1 -0
- package/dist/react/canvas-hud/index.js.map +1 -1
- package/dist/react/components/ActionBar.d.ts.map +1 -1
- package/dist/react/components/ActionBar.js +9 -1
- package/dist/react/components/ActionBar.js.map +1 -1
- package/dist/react/components/DataTable/DataTable.d.ts.map +1 -1
- package/dist/react/components/DataTable/DataTable.js +3 -3
- package/dist/react/components/DataTable/DataTable.js.map +1 -1
- package/dist/react/components/EntityCard.d.ts +35 -0
- package/dist/react/components/EntityCard.d.ts.map +1 -0
- package/dist/react/components/EntityCard.js +18 -0
- package/dist/react/components/EntityCard.js.map +1 -0
- package/dist/react/components/Grid.d.ts.map +1 -1
- package/dist/react/components/Grid.js +4 -2
- package/dist/react/components/Grid.js.map +1 -1
- package/dist/react/components/ScrollArea.d.ts +1 -1
- package/dist/react/components/ScrollArea.js +1 -1
- package/dist/react/components/SecretInput.d.ts.map +1 -1
- package/dist/react/components/SecretInput.js +8 -2
- package/dist/react/components/SecretInput.js.map +1 -1
- package/dist/react/components/SegmentedControl.d.ts.map +1 -1
- package/dist/react/components/SegmentedControl.js +5 -1
- package/dist/react/components/SegmentedControl.js.map +1 -1
- package/dist/react/hooks/useKeyboardOpen.d.ts +13 -0
- package/dist/react/hooks/useKeyboardOpen.d.ts.map +1 -0
- package/dist/react/hooks/useKeyboardOpen.js +30 -0
- package/dist/react/hooks/useKeyboardOpen.js.map +1 -0
- package/dist/react/index.d.ts +3 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +3 -0
- package/dist/react/index.js.map +1 -1
- package/dist/react/look/AppearanceMenu.d.ts +29 -0
- package/dist/react/look/AppearanceMenu.d.ts.map +1 -0
- package/dist/react/look/AppearanceMenu.js +39 -0
- package/dist/react/look/AppearanceMenu.js.map +1 -0
- package/dist/react/look/AppearancePanel.d.ts +18 -0
- package/dist/react/look/AppearancePanel.d.ts.map +1 -0
- package/dist/react/look/AppearancePanel.js +20 -0
- package/dist/react/look/AppearancePanel.js.map +1 -0
- package/dist/react/look/LookPicker.d.ts +6 -1
- package/dist/react/look/LookPicker.d.ts.map +1 -1
- package/dist/react/look/LookPicker.js +2 -2
- package/dist/react/look/LookPicker.js.map +1 -1
- package/dist/react/media/denseGallery.css +2 -0
- package/dist/styles-areas/canvas-hud.css +6 -4
- package/dist/styles-areas/core.css +45 -44
- package/dist/styles-areas/fields.css +2 -2
- package/dist/styles-areas/filter-rail.css +5 -5
- package/dist/styles-areas/nav.css +6 -6
- package/dist/styles-areas/notifications.css +3 -3
- package/dist/styles-areas/place-bar.css +2 -2
- package/dist/styles-utilities.css +43 -8
- package/dist/testing/appleDevices.d.ts +68 -0
- package/dist/testing/appleDevices.d.ts.map +1 -0
- package/dist/testing/appleDevices.js +65 -0
- package/dist/testing/appleDevices.js.map +1 -0
- package/dist/testing/appleWalk.d.ts +72 -0
- package/dist/testing/appleWalk.d.ts.map +1 -0
- package/dist/testing/appleWalk.js +209 -0
- package/dist/testing/appleWalk.js.map +1 -0
- package/dist/testing/designAudit.d.ts +1 -1
- package/dist/testing/designAudit.d.ts.map +1 -1
- package/dist/testing/designAudit.js +12 -0
- package/dist/testing/designAudit.js.map +1 -1
- package/dist/testing/designBaseline.d.ts +14 -0
- package/dist/testing/designBaseline.d.ts.map +1 -1
- package/dist/testing/designBaseline.js +26 -28
- package/dist/testing/designBaseline.js.map +1 -1
- package/dist/testing/index.d.ts +6 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +9 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/lookPrePaint.d.ts +19 -0
- package/dist/testing/lookPrePaint.d.ts.map +1 -0
- package/dist/testing/lookPrePaint.js +56 -0
- package/dist/testing/lookPrePaint.js.map +1 -0
- package/dist/testing/phoneRules.d.ts +98 -0
- package/dist/testing/phoneRules.d.ts.map +1 -0
- package/dist/testing/phoneRules.js +282 -0
- package/dist/testing/phoneRules.js.map +1 -0
- package/dist/testing/safariDriver.d.ts +103 -0
- package/dist/testing/safariDriver.d.ts.map +1 -0
- package/dist/testing/safariDriver.js +288 -0
- package/dist/testing/safariDriver.js.map +1 -0
- package/dist/testing/safariRules.d.ts +57 -0
- package/dist/testing/safariRules.d.ts.map +1 -0
- package/dist/testing/safariRules.js +191 -0
- package/dist/testing/safariRules.js.map +1 -0
- package/package.json +2 -1
- package/scripts/styleAreas.ts +1 -0
- package/src/fonts/inter-OFL.txt +93 -0
- package/src/fonts/inter-latin-wght-normal.woff2 +0 -0
- package/src/looks.css +41 -0
- package/src/looks.spec.ts +59 -1
- package/src/react/canvas-hud/CanvasToolbar.tsx +177 -0
- package/src/react/canvas-hud/index.ts +2 -0
- package/src/react/components/ActionBar.spec.tsx +49 -1
- package/src/react/components/ActionBar.tsx +10 -2
- package/src/react/components/DataTable/DataTable.tsx +6 -1
- package/src/react/components/EntityCard.tsx +76 -0
- package/src/react/components/Grid.tsx +4 -2
- package/src/react/components/ScrollArea.tsx +1 -1
- package/src/react/components/SecretInput.spec.tsx +14 -0
- package/src/react/components/SecretInput.tsx +13 -1
- package/src/react/components/SegmentedControl.spec.tsx +1 -1
- package/src/react/components/SegmentedControl.tsx +5 -1
- package/src/react/components/tooltipWarm.spec.tsx +15 -0
- package/src/react/hooks/useKeyboardOpen.ts +29 -0
- package/src/react/index.ts +3 -0
- package/src/react/look/AppearanceMenu.spec.tsx +90 -0
- package/src/react/look/AppearanceMenu.tsx +64 -0
- package/src/react/look/AppearancePanel.tsx +54 -0
- package/src/react/look/LookPicker.tsx +14 -2
- package/src/react/media/denseGallery.css +2 -0
- package/src/styles-areas/canvas-hud.css +6 -4
- package/src/styles-areas/core.css +45 -44
- package/src/styles-areas/fields.css +2 -2
- package/src/styles-areas/filter-rail.css +5 -5
- package/src/styles-areas/nav.css +6 -6
- package/src/styles-areas/notifications.css +3 -3
- package/src/styles-areas/place-bar.css +2 -2
- package/src/styles-utilities.css +43 -8
- package/src/testing/appleDevices.spec.ts +36 -0
- package/src/testing/appleDevices.ts +97 -0
- package/src/testing/appleWalk.ts +232 -0
- package/src/testing/designAudit.ts +12 -0
- package/src/testing/designBaseline.spec.ts +9 -0
- package/src/testing/designBaseline.ts +26 -34
- package/src/testing/index.ts +18 -0
- package/src/testing/lookPrePaint.spec.ts +43 -0
- package/src/testing/lookPrePaint.ts +60 -0
- package/src/testing/phoneRules.spec.ts +75 -0
- package/src/testing/phoneRules.ts +332 -0
- package/src/testing/safariDriver.ts +331 -0
- package/src/testing/safariRules.spec.ts +92 -0
- package/src/testing/safariRules.ts +195 -0
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 119 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
@source inline("focus-within:ring-2 focus-within:ring-field-ring/30 focus-within:ring-offset-1");
|
|
41
41
|
@source inline("focus-within:ring-ring group-focus-within:opacity-100 h-105 h-12 h-3.5");
|
|
42
42
|
@source inline("has-[[aria-invalid=true]]:border-field-error hover:bg-muted/50 hover:border-field-ring");
|
|
43
|
-
@source inline("hover:scale-110 hover:text-warning italic
|
|
43
|
+
@source inline("hover:scale-110 hover:text-warning italic left-2.5 li list-none max-h-64");
|
|
44
44
|
@source inline("max-h-[var(--sheet-h-lg)] max-h-[var(--sheet-h-md)] max-h-[var(--sheet-h-sm)] max-w-sm");
|
|
45
45
|
@source inline("md:flex-col md:gap-0.5 md:justify-start md:overflow-visible md:text-left md:w-full min-h-20");
|
|
46
46
|
@source inline("min-w-24 min-w-64 min-w-[var(--anchor-width)] min-w-full min-w-max mix-blend-difference mr-2");
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 30 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
@source inline("-mx-2 -outline-offset-2 [&_button]:min-h-0 [&_button]:min-w-0 [&_button]:p-0 [&_button]:size-7");
|
|
28
28
|
@source inline("bg-card-overlay border-r duration-150 group-data-[state=open]/rail-section:rotate-90");
|
|
29
29
|
@source inline("group-focus-within/rail-row:opacity-100 group-hover/rail-row:opacity-100 group/rail-row");
|
|
30
|
-
@source inline("group/rail-section
|
|
31
|
-
@source inline("
|
|
32
|
-
@source inline("pointer-coarse:[&_button]:
|
|
33
|
-
@source inline("
|
|
30
|
+
@source inline("group/rail-section last:mb-0 mx-2 opacity-100 outline-2 outline-accent outline-dashed");
|
|
31
|
+
@source inline("place-items-center pointer-coarse:[&_button]:min-h-11 pointer-coarse:[&_button]:min-w-11");
|
|
32
|
+
@source inline("pointer-coarse:[&_button]:size-11 pt-1 self-stretch shadow-[inset_3px_0_0_0_var(--accent)] w-14");
|
|
33
|
+
@source inline("w-3 w-56");
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 141 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
@@ -42,11 +42,11 @@
|
|
|
42
42
|
@source inline("group-hover/tile:opacity-100 group/navitem group/tile h-12 h-[var(--header-h)]");
|
|
43
43
|
@source inline("h-[var(--header-h-dense)] h-[var(--header-h-roomy)] h-dvh hover:border-foreground/20");
|
|
44
44
|
@source inline("hover:decoration-border hover:scale-110 hover:underline-offset-4 inset-x-2 inset-x-3 inset-y-1");
|
|
45
|
-
@source inline("inset-y-1.5 items-stretch justify-around
|
|
46
|
-
@source inline("
|
|
47
|
-
@source inline("max-h-[var(--sheet-h-
|
|
48
|
-
@source inline("max-md
|
|
49
|
-
@source inline("max-
|
|
45
|
+
@source inline("inset-y-1.5 items-stretch justify-around left-3 lg:flex lg:flex-col lg:hidden lg:shrink-0");
|
|
46
|
+
@source inline("list-none max-h-72 max-h-[inherit] max-h-[var(--palette-max-h)] max-h-[var(--sheet-h-lg)]");
|
|
47
|
+
@source inline("max-h-[var(--sheet-h-md)] max-h-[var(--sheet-h-sm)] max-md:-right-0.5 max-md:-top-0.5");
|
|
48
|
+
@source inline("max-md:absolute max-md:hidden max-sm:flex-none max-sm:justify-center max-sm:px-0 max-sm:w-10");
|
|
49
|
+
@source inline("max-w max-w-48 max-w-64 max-w-80 max-w-sm md:flex md:flex-col md:gap-4 md:hidden");
|
|
50
50
|
@source inline("md:pointer-coarse:w-auto md:px-3 md:px-6 md:shrink-0 min-h-10 min-h-12 min-h-dvh min-w-3.5");
|
|
51
51
|
@source inline("min-w-8 min-w-9 mix-blend-difference mt-auto mx-1 no-underline opacity-55 opacity-80");
|
|
52
52
|
@source inline("pb-[env(safe-area-inset-bottom,0px)] pl-11 pl-9 place-items-center");
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 32 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
*/
|
|
27
27
|
@source inline("-right-0.5 -top-0.5 [&::-webkit-scrollbar]:hidden [scrollbar-width:none] bg-accent/15");
|
|
28
28
|
@source inline("group-focus-within:opacity-100 group-focus-within:pointer-events-auto");
|
|
29
|
-
@source inline("group-hover:pointer-events-auto hover:bg-muted/80
|
|
30
|
-
@source inline("
|
|
29
|
+
@source inline("group-hover:pointer-events-auto hover:bg-muted/80 list-none min-w-4 ml-1.5 ml-2 pb pb-0.5");
|
|
30
|
+
@source inline("pointer-coarse:basis-full pointer-coarse:bg-transparent pointer-coarse:justify-end");
|
|
31
31
|
@source inline("pointer-coarse:p-0 pointer-coarse:pointer-events-auto pointer-coarse:shadow-none");
|
|
32
32
|
@source inline("pointer-coarse:static py py-10 right-3 ring-1 ring-accent ring-accent/30 ring-inset self-stretch");
|
|
33
33
|
@source inline("text-muted-foreground/50 top-3");
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 29 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
@source inline("-mt-5 -top-1 bg-accent/15 border-l border-r data-[state=closed]:slide-out-to-bottom");
|
|
28
28
|
@source inline("data-[state=closed]:slide-out-to-left data-[state=closed]:slide-out-to-right");
|
|
29
29
|
@source inline("data-[state=open]:slide-in-from-bottom data-[state=open]:slide-in-from-left");
|
|
30
|
-
@source inline("data-[state=open]:slide-in-from-right inset-x-3 items-stretch justify-around
|
|
30
|
+
@source inline("data-[state=open]:slide-in-from-right inset-x-3 items-stretch justify-around list-none");
|
|
31
31
|
@source inline("max-h-[var(--sheet-h-lg)] max-h-[var(--sheet-h-md)] max-h-[var(--sheet-h-sm)] max-w-sm min-h-12");
|
|
32
32
|
@source inline("min-w-3.5 no-underline place-items-center pt-0 px-0.5 rounded-l-xl rounded-r-xl rounded-t-xl");
|
|
33
33
|
@source inline("shadow-lg");
|
|
@@ -357,6 +357,15 @@
|
|
|
357
357
|
.z-\[var\(--z-popover\)\] {
|
|
358
358
|
z-index: var(--z-popover);
|
|
359
359
|
}
|
|
360
|
+
.order-1 {
|
|
361
|
+
order: 1;
|
|
362
|
+
}
|
|
363
|
+
.order-2 {
|
|
364
|
+
order: 2;
|
|
365
|
+
}
|
|
366
|
+
.order-3 {
|
|
367
|
+
order: 3;
|
|
368
|
+
}
|
|
360
369
|
.col-span-2 {
|
|
361
370
|
grid-column: span 2 / span 2;
|
|
362
371
|
}
|
|
@@ -707,9 +716,6 @@
|
|
|
707
716
|
.h-105 {
|
|
708
717
|
height: calc(var(--spacing) * 105);
|
|
709
718
|
}
|
|
710
|
-
.h-\[calc\(100dvh-…\)\] {
|
|
711
|
-
height: calc(100dvh - …);
|
|
712
|
-
}
|
|
713
719
|
.h-\[min\(var\(--region-h-lg\)\,var\(--region-h-phone\)\)\] {
|
|
714
720
|
height: min(var(--region-h-lg), var(--region-h-phone));
|
|
715
721
|
}
|
|
@@ -827,6 +833,9 @@
|
|
|
827
833
|
.min-h-12 {
|
|
828
834
|
min-height: calc(var(--spacing) * 12);
|
|
829
835
|
}
|
|
836
|
+
.min-h-14 {
|
|
837
|
+
min-height: calc(var(--spacing) * 14);
|
|
838
|
+
}
|
|
830
839
|
.min-h-20 {
|
|
831
840
|
min-height: calc(var(--spacing) * 20);
|
|
832
841
|
}
|
|
@@ -1124,6 +1133,9 @@
|
|
|
1124
1133
|
.min-w-24 {
|
|
1125
1134
|
min-width: calc(var(--spacing) * 24);
|
|
1126
1135
|
}
|
|
1136
|
+
.min-w-26 {
|
|
1137
|
+
min-width: calc(var(--spacing) * 26);
|
|
1138
|
+
}
|
|
1127
1139
|
.min-w-28 {
|
|
1128
1140
|
min-width: calc(var(--spacing) * 28);
|
|
1129
1141
|
}
|
|
@@ -1184,6 +1196,9 @@
|
|
|
1184
1196
|
.grow {
|
|
1185
1197
|
flex-grow: 1;
|
|
1186
1198
|
}
|
|
1199
|
+
.basis-0 {
|
|
1200
|
+
flex-basis: 0px;
|
|
1201
|
+
}
|
|
1187
1202
|
.basis-40 {
|
|
1188
1203
|
flex-basis: calc(var(--spacing) * 40);
|
|
1189
1204
|
}
|
|
@@ -1317,8 +1332,8 @@
|
|
|
1317
1332
|
.appearance-none {
|
|
1318
1333
|
appearance: none;
|
|
1319
1334
|
}
|
|
1320
|
-
.auto-cols-
|
|
1321
|
-
grid-auto-columns: minmax(
|
|
1335
|
+
.auto-cols-\[minmax\(min-content\,1fr\)\] {
|
|
1336
|
+
grid-auto-columns: minmax(min-content,1fr);
|
|
1322
1337
|
}
|
|
1323
1338
|
.grid-flow-col {
|
|
1324
1339
|
grid-auto-flow: column;
|
|
@@ -3467,9 +3482,6 @@
|
|
|
3467
3482
|
.\[background\:var\(--cb-swatch-fill\,var\(--muted\)\)\] {
|
|
3468
3483
|
background: var(--cb-swatch-fill,var(--muted));
|
|
3469
3484
|
}
|
|
3470
|
-
.\[overflow-clip-margin\:calc\(var\(--spacing\)\*1\)\] {
|
|
3471
|
-
overflow-clip-margin: calc(var(--spacing) * 1);
|
|
3472
|
-
}
|
|
3473
3485
|
.fade-in {
|
|
3474
3486
|
--tw-enter-opacity: 0;
|
|
3475
3487
|
}
|
|
@@ -4435,6 +4447,11 @@
|
|
|
4435
4447
|
.data-\[state\=unchecked\]\:bg-muted[data-state="unchecked"] {
|
|
4436
4448
|
background-color: var(--muted);
|
|
4437
4449
|
}
|
|
4450
|
+
@supports (overflow-clip-margin:1px) {
|
|
4451
|
+
.supports-\[overflow-clip-margin\:1px\]\:\[overflow-clip-margin\:calc\(var\(--spacing\)\*1\)\] {
|
|
4452
|
+
overflow-clip-margin: calc(var(--spacing) * 1);
|
|
4453
|
+
}
|
|
4454
|
+
}
|
|
4438
4455
|
@media (prefers-reduced-motion: reduce) {
|
|
4439
4456
|
.motion-reduce\:animate-none {
|
|
4440
4457
|
animation: none;
|
|
@@ -4934,12 +4951,24 @@
|
|
|
4934
4951
|
}
|
|
4935
4952
|
}
|
|
4936
4953
|
@container (width >= 48rem) {
|
|
4954
|
+
.\@3xl\:order-none {
|
|
4955
|
+
order: 0;
|
|
4956
|
+
}
|
|
4937
4957
|
.\@3xl\:block {
|
|
4938
4958
|
display: block;
|
|
4939
4959
|
}
|
|
4960
|
+
.\@3xl\:flex {
|
|
4961
|
+
display: flex;
|
|
4962
|
+
}
|
|
4940
4963
|
.\@3xl\:hidden {
|
|
4941
4964
|
display: none;
|
|
4942
4965
|
}
|
|
4966
|
+
.\@3xl\:shrink-0 {
|
|
4967
|
+
flex-shrink: 0;
|
|
4968
|
+
}
|
|
4969
|
+
.\@3xl\:basis-auto {
|
|
4970
|
+
flex-basis: auto;
|
|
4971
|
+
}
|
|
4943
4972
|
}
|
|
4944
4973
|
.dark\:bg-amber-900\/40:where(.dark, .dark *) {
|
|
4945
4974
|
background-color: color-mix(in srgb, oklch(41.4% 0.112 45.904) 40%, transparent);
|
|
@@ -5239,6 +5268,9 @@
|
|
|
5239
5268
|
min-width: calc(var(--spacing) * 11);
|
|
5240
5269
|
}
|
|
5241
5270
|
}
|
|
5271
|
+
.\[\&_select\]\:w-full select {
|
|
5272
|
+
width: 100%;
|
|
5273
|
+
}
|
|
5242
5274
|
.\[\&_sup\]\:leading-none sup {
|
|
5243
5275
|
--tw-leading: 1;
|
|
5244
5276
|
line-height: 1;
|
|
@@ -5313,6 +5345,9 @@
|
|
|
5313
5345
|
display: none;
|
|
5314
5346
|
}
|
|
5315
5347
|
}
|
|
5348
|
+
.\[\&\>\*\>button\]\:w-full > * > button {
|
|
5349
|
+
width: 100%;
|
|
5350
|
+
}
|
|
5316
5351
|
.\[\&\>\:first-child\]\:w-\[var\(--cb-sidebar-side\)\] > :first-child {
|
|
5317
5352
|
width: var(--cb-sidebar-side);
|
|
5318
5353
|
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Apple screens every app is held to (forge task apple-device-testing, 2026-10-06): the
|
|
3
|
+
* smallest iPhone still sold, today's common one and that one on its side, an iPad both ways,
|
|
4
|
+
* and the Mac's Safari — all in Playwright's WebKit, the engine Apple ships to every one of them.
|
|
5
|
+
*
|
|
6
|
+
* 🔴 WebKit, not Chromium in a phone's clothes. Each app's browser gate already audits at 390 and
|
|
7
|
+
* 1440 in Chromium (`designBaseline.ts`, REV-9); what this roster adds is the engine the owner's
|
|
8
|
+
* devices actually run, with a real touchscreen (`hasTouch`, so `(pointer: coarse)` applies and a
|
|
9
|
+
* tap is a tap, not a mouse) and the viewport Safari leaves once its own chrome has taken its share.
|
|
10
|
+
* On 2026-10-06 orbgem measured the gap this closes: Playwright's WebKit reported itself as 26.6
|
|
11
|
+
* while the Mac's Safari was 27.0.1 — close enough to find layout faults, and `safariRules.ts` is
|
|
12
|
+
* for the styles only the shipped release can rule on.
|
|
13
|
+
*
|
|
14
|
+
* No Playwright import, on purpose (see `designAudit.ts`'s header): the caller hands in
|
|
15
|
+
* Playwright's `devices` registry and gets back the options for `browser.newContext`.
|
|
16
|
+
*/
|
|
17
|
+
export type AppleDeviceKind = 'phone' | 'tablet' | 'desktop';
|
|
18
|
+
export interface AppleDevice {
|
|
19
|
+
/** The name a report prints and a baseline label carries — Playwright's, so it is also the registry key. */
|
|
20
|
+
name: string;
|
|
21
|
+
/** `name`, as a file and label stem: `iphone-se-3rd-gen`. */
|
|
22
|
+
slug: string;
|
|
23
|
+
kind: AppleDeviceKind;
|
|
24
|
+
landscape: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* The on-screen keyboard's height in CSS px when a field takes focus, suggestion row included,
|
|
27
|
+
* or `null` where the keyboard rule does not run: on its side (the keyboard covers nearly all
|
|
28
|
+
* of a landscape phone, and iOS scrolls the field itself) and on a desktop (a hardware keyboard).
|
|
29
|
+
*/
|
|
30
|
+
keyboard: number | null;
|
|
31
|
+
}
|
|
32
|
+
export declare const KEYBOARD_PHONE = 336;
|
|
33
|
+
export declare const KEYBOARD_TABLET = 408;
|
|
34
|
+
/** The whole roster: what `bun run test:browser` walks. */
|
|
35
|
+
export declare const APPLE_DEVICES: readonly AppleDevice[];
|
|
36
|
+
/**
|
|
37
|
+
* The gate's subset — one of each kind, the strictest of each: the narrowest phone, the iPad in
|
|
38
|
+
* the orientation that shares the desktop's layout breakpoints, and the Mac. A gate has a budget
|
|
39
|
+
* (`$FORGE/tools/check-gate-time.ts`); the rest of the roster runs in the app's full browser suite.
|
|
40
|
+
*/
|
|
41
|
+
export declare const APPLE_GATE_DEVICES: readonly AppleDevice[];
|
|
42
|
+
/** Finds a device by name or slug; throws naming the roster, so a typo fails loud. */
|
|
43
|
+
export declare function appleDevice(nameOrSlug: string): AppleDevice;
|
|
44
|
+
/** The slice of a Playwright device descriptor a context is made from. */
|
|
45
|
+
export interface DeviceDescriptorLike {
|
|
46
|
+
viewport?: {
|
|
47
|
+
width: number;
|
|
48
|
+
height: number;
|
|
49
|
+
};
|
|
50
|
+
userAgent?: string;
|
|
51
|
+
deviceScaleFactor?: number;
|
|
52
|
+
isMobile?: boolean;
|
|
53
|
+
hasTouch?: boolean;
|
|
54
|
+
defaultBrowserType?: string;
|
|
55
|
+
}
|
|
56
|
+
/** The laptop REV-2 names (1440×900), in place of Playwright's 1280×720 for 'Desktop Safari'. */
|
|
57
|
+
export declare const DESKTOP_SAFARI_VIEWPORT: {
|
|
58
|
+
readonly width: 1440;
|
|
59
|
+
readonly height: 900;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* `browser.newContext` options for `device`, from Playwright's registry (`import { devices } from
|
|
63
|
+
* 'playwright'`). The desktop takes the review protocol's laptop size; everything else is the
|
|
64
|
+
* device's own screen, scale and touch. Throws when the registry lacks the device — a Playwright
|
|
65
|
+
* too old to know it would otherwise open a bare desktop window and call it an iPhone.
|
|
66
|
+
*/
|
|
67
|
+
export declare function appleContext<T extends DeviceDescriptorLike>(registry: Record<string, T>, device: AppleDevice): T;
|
|
68
|
+
//# sourceMappingURL=appleDevices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appleDevices.d.ts","sourceRoot":"","sources":["../../src/testing/appleDevices.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,4GAA4G;IAC5G,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,eAAe,MAAM,CAAC;AAWnC,2DAA2D;AAC3D,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAO/C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,WAAW,EAEpD,CAAC;AAEF,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,CAI3D;AAED,0EAA0E;AAC1E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,iGAAiG;AACjG,eAAO,MAAM,uBAAuB;;;CAAwC,CAAC;AAE7E;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,oBAAoB,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,CAAC,CAKhH"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Apple screens every app is held to (forge task apple-device-testing, 2026-10-06): the
|
|
3
|
+
* smallest iPhone still sold, today's common one and that one on its side, an iPad both ways,
|
|
4
|
+
* and the Mac's Safari — all in Playwright's WebKit, the engine Apple ships to every one of them.
|
|
5
|
+
*
|
|
6
|
+
* 🔴 WebKit, not Chromium in a phone's clothes. Each app's browser gate already audits at 390 and
|
|
7
|
+
* 1440 in Chromium (`designBaseline.ts`, REV-9); what this roster adds is the engine the owner's
|
|
8
|
+
* devices actually run, with a real touchscreen (`hasTouch`, so `(pointer: coarse)` applies and a
|
|
9
|
+
* tap is a tap, not a mouse) and the viewport Safari leaves once its own chrome has taken its share.
|
|
10
|
+
* On 2026-10-06 orbgem measured the gap this closes: Playwright's WebKit reported itself as 26.6
|
|
11
|
+
* while the Mac's Safari was 27.0.1 — close enough to find layout faults, and `safariRules.ts` is
|
|
12
|
+
* for the styles only the shipped release can rule on.
|
|
13
|
+
*
|
|
14
|
+
* No Playwright import, on purpose (see `designAudit.ts`'s header): the caller hands in
|
|
15
|
+
* Playwright's `devices` registry and gets back the options for `browser.newContext`.
|
|
16
|
+
*/
|
|
17
|
+
export const KEYBOARD_PHONE = 336;
|
|
18
|
+
export const KEYBOARD_TABLET = 408;
|
|
19
|
+
const slugOf = (name) => name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
|
|
20
|
+
const device = (name, kind, landscape, keyboard) => ({
|
|
21
|
+
name,
|
|
22
|
+
slug: slugOf(name),
|
|
23
|
+
kind,
|
|
24
|
+
landscape,
|
|
25
|
+
keyboard,
|
|
26
|
+
});
|
|
27
|
+
/** The whole roster: what `bun run test:browser` walks. */
|
|
28
|
+
export const APPLE_DEVICES = [
|
|
29
|
+
device('iPhone SE (3rd gen)', 'phone', false, KEYBOARD_PHONE),
|
|
30
|
+
device('iPhone 17', 'phone', false, KEYBOARD_PHONE),
|
|
31
|
+
device('iPhone 17 landscape', 'phone', true, null),
|
|
32
|
+
device('iPad (gen 7)', 'tablet', false, KEYBOARD_TABLET),
|
|
33
|
+
device('iPad (gen 7) landscape', 'tablet', true, null),
|
|
34
|
+
device('Desktop Safari', 'desktop', false, null),
|
|
35
|
+
];
|
|
36
|
+
/**
|
|
37
|
+
* The gate's subset — one of each kind, the strictest of each: the narrowest phone, the iPad in
|
|
38
|
+
* the orientation that shares the desktop's layout breakpoints, and the Mac. A gate has a budget
|
|
39
|
+
* (`$FORGE/tools/check-gate-time.ts`); the rest of the roster runs in the app's full browser suite.
|
|
40
|
+
*/
|
|
41
|
+
export const APPLE_GATE_DEVICES = APPLE_DEVICES.filter((d) => ['iPhone SE (3rd gen)', 'iPad (gen 7) landscape', 'Desktop Safari'].includes(d.name));
|
|
42
|
+
/** Finds a device by name or slug; throws naming the roster, so a typo fails loud. */
|
|
43
|
+
export function appleDevice(nameOrSlug) {
|
|
44
|
+
const found = APPLE_DEVICES.find((d) => d.name === nameOrSlug || d.slug === nameOrSlug);
|
|
45
|
+
if (!found)
|
|
46
|
+
throw new Error(`no Apple device "${nameOrSlug}" — the roster: ${APPLE_DEVICES.map((d) => d.name).join(', ')}`);
|
|
47
|
+
return found;
|
|
48
|
+
}
|
|
49
|
+
/** The laptop REV-2 names (1440×900), in place of Playwright's 1280×720 for 'Desktop Safari'. */
|
|
50
|
+
export const DESKTOP_SAFARI_VIEWPORT = { width: 1440, height: 900 };
|
|
51
|
+
/**
|
|
52
|
+
* `browser.newContext` options for `device`, from Playwright's registry (`import { devices } from
|
|
53
|
+
* 'playwright'`). The desktop takes the review protocol's laptop size; everything else is the
|
|
54
|
+
* device's own screen, scale and touch. Throws when the registry lacks the device — a Playwright
|
|
55
|
+
* too old to know it would otherwise open a bare desktop window and call it an iPhone.
|
|
56
|
+
*/
|
|
57
|
+
export function appleContext(registry, device) {
|
|
58
|
+
const found = registry[device.name];
|
|
59
|
+
if (!found?.viewport)
|
|
60
|
+
throw new Error(`Playwright's devices registry has no "${device.name}" — upgrade playwright, or pick from: ${APPLE_DEVICES.map((d) => d.name).join(', ')}`);
|
|
61
|
+
if (device.kind === 'desktop')
|
|
62
|
+
return { ...found, viewport: { ...DESKTOP_SAFARI_VIEWPORT } };
|
|
63
|
+
return { ...found };
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=appleDevices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appleDevices.js","sourceRoot":"","sources":["../../src/testing/appleDevices.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAmBH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AAEnC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACtG,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,IAAqB,EAAE,SAAkB,EAAE,QAAuB,EAAe,EAAE,CAAC,CAAC;IACjH,IAAI;IACJ,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;IAClB,IAAI;IACJ,SAAS;IACT,QAAQ;CACT,CAAC,CAAC;AAEH,2DAA2D;AAC3D,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,MAAM,CAAC,qBAAqB,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC;IAC7D,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC;IACnD,MAAM,CAAC,qBAAqB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;IAClD,MAAM,CAAC,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,CAAC;IACxD,MAAM,CAAC,wBAAwB,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC;IACtD,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC;CACjD,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA2B,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACnF,CAAC,qBAAqB,EAAE,wBAAwB,EAAE,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CACrF,CAAC;AAEF,sFAAsF;AACtF,MAAM,UAAU,WAAW,CAAC,UAAkB;IAC5C,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IACxF,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,UAAU,mBAAmB,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5H,OAAO,KAAK,CAAC;AACf,CAAC;AAYD,iGAAiG;AACjG,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAW,CAAC;AAE7E;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAiC,QAA2B,EAAE,MAAmB;IAC3G,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK,EAAE,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,MAAM,CAAC,IAAI,yCAAyC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClL,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,EAAE,GAAG,uBAAuB,EAAE,EAAE,CAAC;IAC7F,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { AppleDevice } from './appleDevices.js';
|
|
2
|
+
import { type AuditDesignOptions, type DesignViolation, type EvaluatingPage } from './designAudit.js';
|
|
3
|
+
import { type KeyboardView } from './phoneRules.js';
|
|
4
|
+
/**
|
|
5
|
+
* Installed once per page, BEFORE the app runs (`context.addInitScript`), so the app subscribes to
|
|
6
|
+
* the stand-in. It speaks on the real viewport as well, for a harness that could only install it
|
|
7
|
+
* afterwards (the shipped Safari over WebDriver): a keyboard nobody hears passes every rule.
|
|
8
|
+
*/
|
|
9
|
+
export declare const KEYBOARD_STANDIN = "(() => {\n const real = window.visualViewport;\n if (!real || window.__keyboard) return;\n const fake = new EventTarget();\n const cover = { px: 0, pan: 0 };\n for (const key of [\"width\", \"offsetLeft\", \"pageLeft\", \"pageTop\", \"scale\"]) Object.defineProperty(fake, key, { get: () => real[key] });\n Object.defineProperty(fake, \"height\", { get: () => real.height - cover.px });\n Object.defineProperty(fake, \"offsetTop\", { get: () => real.offsetTop + cover.pan });\n real.addEventListener(\"resize\", () => fake.dispatchEvent(new Event(\"resize\")));\n Object.defineProperty(window, \"visualViewport\", { get: () => fake });\n window.__keyboard = (px, pan = 0) => { cover.px = px; cover.pan = pan; for (const target of [fake, real]) { target.dispatchEvent(new Event(\"resize\")); target.dispatchEvent(new Event(\"scroll\")); } };\n})()";
|
|
10
|
+
/**
|
|
11
|
+
* Waits for the page to settle: three 100ms polls in a row with no DOM mutation, no finite animation
|
|
12
|
+
* running and no visible loading indicator (cb's Spinner is `.animate-spin`; anything else may say
|
|
13
|
+
* `aria-busy`), capped at 5s so a ticking clock or a spinner that never stops cannot stall a gate.
|
|
14
|
+
* A resize or a navigation can swap a whole layout — family's phone shell remounts its page behind a
|
|
15
|
+
* Spinner and fills it ~450ms later, with no DOM mutation in between — and a frame audited before
|
|
16
|
+
* that is the empty shell. Shared by the Chromium audit (`designBaseline.ts`) and the Apple pass.
|
|
17
|
+
*/
|
|
18
|
+
export declare function settleInPage(): Promise<void>;
|
|
19
|
+
/** Scrolls the page's main pane to `to` and says how far it can go. */
|
|
20
|
+
export declare function scrollMainInPage(to: number): {
|
|
21
|
+
at: number;
|
|
22
|
+
end: number;
|
|
23
|
+
};
|
|
24
|
+
/** Finishes every finite animation on the document's timeline; endless motion and scroll-driven motion are left alone. */
|
|
25
|
+
export declare function atRestInPage(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Focuses the field at `css` the way a tap would land on it — scrolled into view, the caret on a
|
|
28
|
+
* visible line of an editor — and answers whether it took focus. In-page rather than a Playwright
|
|
29
|
+
* tap: WebDriver calls an editor's document "not interactable", and a focus is no less true.
|
|
30
|
+
*/
|
|
31
|
+
export declare function focusFieldInPage(css: string): boolean;
|
|
32
|
+
/** With the focused field tapped, raises the stood-in keyboard of `keyboard` px over it and reports where the line being typed on ended up. */
|
|
33
|
+
export declare function keyboardViewInPage([keyboard, what]: readonly [number, string]): Promise<KeyboardView>;
|
|
34
|
+
/** Installs the stand-in from its source when the context did not (a page `setContent` made); a no-op once it is there. */
|
|
35
|
+
export declare function installKeyboardStandinInPage(source: string): boolean;
|
|
36
|
+
/** Lowers the stood-in keyboard. */
|
|
37
|
+
export declare function keyboardDownInPage(): void;
|
|
38
|
+
/** The slice of a Playwright `Page` the walk needs: `evaluate`, and a screenshot where one is wanted. */
|
|
39
|
+
export interface ApplePage extends EvaluatingPage {
|
|
40
|
+
viewportSize(): {
|
|
41
|
+
width: number;
|
|
42
|
+
height: number;
|
|
43
|
+
} | null;
|
|
44
|
+
screenshot?(options: {
|
|
45
|
+
path: string;
|
|
46
|
+
}): Promise<unknown>;
|
|
47
|
+
waitForTimeout?(ms: number): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
export interface AuditAppleOptions extends AuditDesignOptions {
|
|
50
|
+
/** A page that scrolls: read to its end a screen at a time, so what arrives on scroll is judged where it arrives. */
|
|
51
|
+
long?: boolean;
|
|
52
|
+
/** A field to type into with the keyboard up, as a selector; on a device with a keyboard height. */
|
|
53
|
+
keyboard?: string;
|
|
54
|
+
/** Where to write screenshots (`<shots>/<device slug>/<route slug>[-NN|-keyboard].png`); none when unset. */
|
|
55
|
+
shots?: string;
|
|
56
|
+
/** Frames a long page is read through at most. */
|
|
57
|
+
maxFrames?: number;
|
|
58
|
+
/** Whether the pointer is a finger; the device's kind decides unless said. The shipped Safari at a phone's width has a mouse. */
|
|
59
|
+
touch?: boolean;
|
|
60
|
+
}
|
|
61
|
+
/** The same fault seen on two screens of one read-through is one fault. */
|
|
62
|
+
export declare function dedupe(findings: DesignViolation[]): DesignViolation[];
|
|
63
|
+
/**
|
|
64
|
+
* Judges one screen on one Apple device: the design audit (less LAY-13, which `measurePhone`
|
|
65
|
+
* owns here by the reach a finger gets rather than the box) plus the phone rules, at rest, a
|
|
66
|
+
* screen at a time for a long page, and with the keyboard up over `options.keyboard`.
|
|
67
|
+
*/
|
|
68
|
+
export declare function auditApple(page: ApplePage, route: string, device: AppleDevice, options?: AuditAppleOptions): Promise<{
|
|
69
|
+
violations: DesignViolation[];
|
|
70
|
+
textNodes: number;
|
|
71
|
+
}>;
|
|
72
|
+
//# sourceMappingURL=appleWalk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appleWalk.d.ts","sourceRoot":"","sources":["../../src/testing/appleWalk.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,KAAK,kBAAkB,EAAe,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnH,OAAO,EAA6B,KAAK,YAAY,EAA6C,MAAM,iBAAiB,CAAC;AAE1H;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,61BAWxB,CAAC;AAEN;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAqB5C;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAQxE;AAED,0HAA0H;AAC1H,wBAAgB,YAAY,IAAI,IAAI,CAKnC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAarD;AAED,+IAA+I;AAC/I,wBAAsB,kBAAkB,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CA0B3G;AAED,2HAA2H;AAC3H,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGpE;AAED,oCAAoC;AACpC,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,yGAAyG;AACzG,MAAM,WAAW,SAAU,SAAQ,cAAc;IAC/C,YAAY,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzD,UAAU,CAAC,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,cAAc,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,qHAAqH;IACrH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oGAAoG;IACpG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6GAA6G;IAC7G,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iIAAiI;IACjI,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAKD,2EAA2E;AAC3E,wBAAgB,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAErE;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC;IAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA+CpL"}
|