@astryxdesign/lab 0.7.6-canary.cdc5ec0 → 0.7.6-canary.ce052bf
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/CodeEditor/CodeEditor.d.ts.map +1 -1
- package/dist/CodeEditor/CodeEditor.js +13 -1
- package/dist/DiffViewer/DiffViewer.d.ts.map +1 -1
- package/dist/DiffViewer/DiffViewer.js +4 -3
- package/dist/LogStream/LogStream.d.ts.map +1 -1
- package/dist/LogStream/LogStream.js +8 -8
- package/dist/lab.css +4 -0
- package/package.json +5 -4
- package/src/CircularProgress/__tests__/CircularProgressMotion.a11y.chromium.spec.ts +106 -62
- package/src/CodeEditor/CodeEditor.test.tsx +27 -0
- package/src/CodeEditor/CodeEditor.tsx +16 -4
- package/src/DiffViewer/DiffViewer.tsx +4 -0
- package/src/LogStream/LogStream.tsx +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeEditor.d.ts","sourceRoot":"","sources":["../../src/CodeEditor/CodeEditor.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAkBlD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"CodeEditor.d.ts","sourceRoot":"","sources":["../../src/CodeEditor/CodeEditor.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAkBlD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,8BAA8B,CAAC;AA2F5D,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,CACX;IACC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,+BAA+B;IAC/B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,uBAAuB;IACvB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;IAC5D;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAsED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,QAAsB,EACtB,cAAsB,EACtB,UAAkB,EAClB,WAAW,EACX,SAAS,EACT,IAAW,EACX,SAAS,EAAE,eAAe,EAC1B,KAAK,EACL,UAAqE,EACrE,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,eAAe,+BAsVjB;yBAvWe,UAAU"}
|
|
@@ -35,6 +35,9 @@ const styles = {
|
|
|
35
35
|
k1xSpc: "x78zum5",
|
|
36
36
|
kaIpWk: "xh6dtrn",
|
|
37
37
|
kWkggS: "xwmxj5m",
|
|
38
|
+
kMzoRj: "x1litavf",
|
|
39
|
+
ksu8eU: "x1y0btm7",
|
|
40
|
+
kVAM5u: "x14i3s5s",
|
|
38
41
|
kVQacm: "xb3r6kr",
|
|
39
42
|
$$css: true
|
|
40
43
|
},
|
|
@@ -51,6 +54,9 @@ const styles = {
|
|
|
51
54
|
k9WMMc: "xp4054r",
|
|
52
55
|
kfSwDN: "x87ps6o",
|
|
53
56
|
kMwMTN: "xnbbluu",
|
|
57
|
+
kWqL5O: "x1pcaw5z",
|
|
58
|
+
kSWEuD: "x32b0ac",
|
|
59
|
+
k26BEO: "xtgwc6q",
|
|
54
60
|
$$css: true
|
|
55
61
|
},
|
|
56
62
|
editor: {
|
|
@@ -450,6 +456,7 @@ export function CodeEditor({
|
|
|
450
456
|
}), stylex.props(styles.root, focused && styles.rootFocused, xstyle), className, style),
|
|
451
457
|
...props,
|
|
452
458
|
children: /*#__PURE__*/_jsxs("div", {
|
|
459
|
+
dir: "ltr",
|
|
453
460
|
...{
|
|
454
461
|
className: "x78zum5 x98rzlu xysyzu8"
|
|
455
462
|
},
|
|
@@ -468,7 +475,12 @@ export function CodeEditor({
|
|
|
468
475
|
position: 'relative',
|
|
469
476
|
flex: 1
|
|
470
477
|
},
|
|
471
|
-
children: [showPlaceholder &&
|
|
478
|
+
children: [showPlaceholder &&
|
|
479
|
+
/*#__PURE__*/
|
|
480
|
+
// The placeholder is prose, not code: it takes its own text's
|
|
481
|
+
// direction, so an Arabic or Hebrew hint still reads correctly.
|
|
482
|
+
_jsx("div", {
|
|
483
|
+
dir: "auto",
|
|
472
484
|
...stylex.props(styles.placeholder, sizeStyle),
|
|
473
485
|
children: placeholder
|
|
474
486
|
}), /*#__PURE__*/_jsx("code", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DiffViewer.d.ts","sourceRoot":"","sources":["../../src/DiffViewer/DiffViewer.tsx"],"names":[],"mappings":"AAqCA,OAAO,EAQL,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,GAAG,EAET,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAGL,KAAK,YAAY,EAGlB,MAAM,8BAA8B,CAAC;AAOtC,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,iCAAiC,CAAC;AAqBzC,OAAO,KAAK,EACV,cAAc,EAGd,iBAAiB,EAElB,MAAM,aAAa,CAAC;AAGrB,uEAAuE;AACvE,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpE;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEjE,MAAM,WAAW,eAAgB,SAAQ,SAAS,CAAC,cAAc,CAAC;IAChE,yCAAyC;IACzC,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC1B;;;OAGG;IACH,IAAI,EAAE,cAAc,CAAC;IACrB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IACjC;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IAC5C;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAC5C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAC5C;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,uEAAuE;IACvE,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,SAAS,CAAC;IAC7D;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,CAClB,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,KACjC,IAAI,CAAC;IACV,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B;;;OAGG;IACH,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC;
|
|
1
|
+
{"version":3,"file":"DiffViewer.d.ts","sourceRoot":"","sources":["../../src/DiffViewer/DiffViewer.tsx"],"names":[],"mappings":"AAqCA,OAAO,EAQL,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,GAAG,EAET,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAGL,KAAK,YAAY,EAGlB,MAAM,8BAA8B,CAAC;AAOtC,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,iCAAiC,CAAC;AAqBzC,OAAO,KAAK,EACV,cAAc,EAGd,iBAAiB,EAElB,MAAM,aAAa,CAAC;AAGrB,uEAAuE;AACvE,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpE;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEjE,MAAM,WAAW,eAAgB,SAAQ,SAAS,CAAC,cAAc,CAAC;IAChE,yCAAyC;IACzC,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC1B;;;OAGG;IACH,IAAI,EAAE,cAAc,CAAC;IACrB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IACjC;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IAC5C;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAC5C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAC5C;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,uEAAuE;IACvE,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,SAAS,CAAC;IAC7D;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,CAClB,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,KACjC,IAAI,CAAC;IACV,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B;;;OAGG;IACH,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC;AAq2BD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,EACzB,GAAG,EACH,IAAI,EACJ,QAAoB,EACpB,QAAQ,EAAE,YAAY,EACtB,aAAa,EACb,cAAqB,EACrB,SAAiB,EACjB,eAA2B,EAC3B,eAAwB,EACxB,mBAA0B,EAC1B,aAAoB,EACpB,WAAW,EAAE,eAAe,EAC5B,kBAA0B,EAC1B,iBAAiB,EACjB,SAAS,EACT,oBAAoB,EACpB,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,eAAe,+BAopBjB;yBA5qBe,UAAU"}
|
|
@@ -524,6 +524,7 @@ const styles = {
|
|
|
524
524
|
khDVqt: "x126k92a",
|
|
525
525
|
kTgw9: "x1lldw8n",
|
|
526
526
|
kHjlTd: "xj0a0fe",
|
|
527
|
+
"--_astryx-text-overflow-wrap": "x5ujdhh",
|
|
527
528
|
$$css: true
|
|
528
529
|
},
|
|
529
530
|
added: {
|
|
@@ -966,7 +967,7 @@ export function DiffViewer({
|
|
|
966
967
|
},
|
|
967
968
|
children: /*#__PURE__*/_jsx("div", {
|
|
968
969
|
...{
|
|
969
|
-
className: "x1q06l6i xj0a0fe x41o525"
|
|
970
|
+
className: "x1q06l6i xj0a0fe x5ujdhh x41o525"
|
|
970
971
|
},
|
|
971
972
|
children: note
|
|
972
973
|
})
|
|
@@ -1065,7 +1066,7 @@ export function DiffViewer({
|
|
|
1065
1066
|
className: "xu0wf1k xrrkdod x1yc453h x11ds9ch xt5rlkq x1sdyfia xszpfcc xykt701 xgtxpae x1osaytk"
|
|
1066
1067
|
},
|
|
1067
1068
|
1: {
|
|
1068
|
-
className: "xu0wf1k xrrkdod x1yc453h x11ds9ch xt5rlkq xszpfcc xykt701 xgtxpae x1osaytk x126k92a x1lldw8n xj0a0fe"
|
|
1069
|
+
className: "xu0wf1k xrrkdod x1yc453h x11ds9ch xt5rlkq xszpfcc xykt701 xgtxpae x1osaytk x126k92a x1lldw8n xj0a0fe x5ujdhh"
|
|
1069
1070
|
}
|
|
1070
1071
|
}[!!isWrapped << 0],
|
|
1071
1072
|
children: isOld ? renderHunkText(row.header) : /*#__PURE__*/_jsxs(_Fragment, {
|
|
@@ -1109,7 +1110,7 @@ export function DiffViewer({
|
|
|
1109
1110
|
},
|
|
1110
1111
|
children: note != null && /*#__PURE__*/_jsx("div", {
|
|
1111
1112
|
...{
|
|
1112
|
-
className: "x1q06l6i xj0a0fe x41o525"
|
|
1113
|
+
className: "x1q06l6i xj0a0fe x5ujdhh x41o525"
|
|
1113
1114
|
},
|
|
1114
1115
|
children: note
|
|
1115
1116
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogStream.d.ts","sourceRoot":"","sources":["../../src/LogStream/LogStream.tsx"],"names":[],"mappings":"AAyBA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAkBlD,iCAAiC;AACjC,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAEjE,0EAA0E;AAC1E,MAAM,WAAW,QAAQ;IACvB,4CAA4C;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,IAAI,CAC1C,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,CACX;IACC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,6DAA6D;IAC7D,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACjC;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,SAAS,CAAC;CAC9C;
|
|
1
|
+
{"version":3,"file":"LogStream.d.ts","sourceRoot":"","sources":["../../src/LogStream/LogStream.tsx"],"names":[],"mappings":"AAyBA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAkBlD,iCAAiC;AACjC,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAEjE,0EAA0E;AAC1E,MAAM,WAAW,QAAQ;IACvB,4CAA4C;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,IAAI,CAC1C,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,CACX;IACC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,6DAA6D;IAC7D,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACjC;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,SAAS,CAAC;CAC9C;AAwOD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,OAAmB,EACnB,WAAW,EACX,cAAc,EACd,SAAS,EACT,aAAoB,EACpB,KAAoB,EACpB,WAAW,EACX,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,cAAc,+BAqNhB;yBAnOe,SAAS"}
|
|
@@ -364,28 +364,28 @@ export function LogStream({
|
|
|
364
364
|
}), /*#__PURE__*/_jsx("span", {
|
|
365
365
|
...{
|
|
366
366
|
0: {
|
|
367
|
-
className: "xeuugli xj0a0fe x126k92a"
|
|
367
|
+
className: "xeuugli xj0a0fe x5ujdhh x126k92a"
|
|
368
368
|
},
|
|
369
369
|
4: {
|
|
370
|
-
className: "xeuugli xj0a0fe x126k92a x45uw2j"
|
|
370
|
+
className: "xeuugli xj0a0fe x5ujdhh x126k92a x45uw2j"
|
|
371
371
|
},
|
|
372
372
|
2: {
|
|
373
|
-
className: "xeuugli xj0a0fe x126k92a xbz8ry5"
|
|
373
|
+
className: "xeuugli xj0a0fe x5ujdhh x126k92a xbz8ry5"
|
|
374
374
|
},
|
|
375
375
|
6: {
|
|
376
|
-
className: "xeuugli xj0a0fe x126k92a xbz8ry5"
|
|
376
|
+
className: "xeuugli xj0a0fe x5ujdhh x126k92a xbz8ry5"
|
|
377
377
|
},
|
|
378
378
|
1: {
|
|
379
|
-
className: "xeuugli xj0a0fe x126k92a x1gnejgv"
|
|
379
|
+
className: "xeuugli xj0a0fe x5ujdhh x126k92a x1gnejgv"
|
|
380
380
|
},
|
|
381
381
|
5: {
|
|
382
|
-
className: "xeuugli xj0a0fe x126k92a x1gnejgv"
|
|
382
|
+
className: "xeuugli xj0a0fe x5ujdhh x126k92a x1gnejgv"
|
|
383
383
|
},
|
|
384
384
|
3: {
|
|
385
|
-
className: "xeuugli xj0a0fe x126k92a x1gnejgv"
|
|
385
|
+
className: "xeuugli xj0a0fe x5ujdhh x126k92a x1gnejgv"
|
|
386
386
|
},
|
|
387
387
|
7: {
|
|
388
|
-
className: "xeuugli xj0a0fe x126k92a x1gnejgv"
|
|
388
|
+
className: "xeuugli xj0a0fe x5ujdhh x126k92a x1gnejgv"
|
|
389
389
|
}
|
|
390
390
|
}[!!isTerminal << 2 | !!(isTerminal && entry.level === 'error') << 1 | !!(isTerminal && entry.level === 'warn') << 0],
|
|
391
391
|
children: entry.message
|
package/dist/lab.css
CHANGED
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
@keyframes x17t2jll-B{0%{transform:translateY(0);opacity:.35;}30%{transform:translateY(-3px);opacity:1;}60%{transform:translateY(0);opacity:.35;}100%{transform:translateY(0);opacity:.35;}}
|
|
31
31
|
:root, .x1ucsbpz{--icon-layer-primary-fill:none;--icon-layer-primary-stroke:currentColor;--icon-layer-primary-opacity:1;--icon-layer-primary-stroke-role-fill:none;--icon-layer-primary-stroke-role-stroke:currentColor;--icon-layer-primary-stroke-role-opacity:1;--icon-layer-primary-stroke-role-width:1.5;--icon-layer-secondary-fill:none;--icon-layer-secondary-stroke:currentColor;--icon-layer-secondary-opacity:1;--icon-layer-secondary-stroke-role-fill:none;--icon-layer-secondary-stroke-role-stroke:currentColor;--icon-layer-secondary-stroke-role-opacity:1;--icon-layer-secondary-stroke-role-width:1.5;--icon-size:24px;--icon-stroke-width:1.5;--icon-stroke-linecap:round;--icon-stroke-linejoin:round;--icon-padding:0px;--icon-inline-offset:0px;--icon-block-offset:0px;--icon-bold-stroke-boost:0.5;--icon-gap:0.75;--icon-gap-linejoin:round;}
|
|
32
32
|
:root, .xc6kv0w{--transfer-list-panel-min-block-size:12rem;--transfer-list-panel-max-block-size:20rem;}
|
|
33
|
+
.x5ujdhh{--_astryx-text-overflow-wrap:anywhere}
|
|
33
34
|
.x1eijsz{--icon-layer-primary-fill:currentColor}
|
|
34
35
|
.xawlqpt{--icon-layer-primary-fill:none}
|
|
35
36
|
.xgmpc9a{--icon-layer-primary-opacity:1}
|
|
@@ -649,6 +650,9 @@
|
|
|
649
650
|
.x1q0q8m5:not(#\#):not(#\#):not(#\#):not(#\#){border-bottom-style:solid}
|
|
650
651
|
.x1qhh985:not(#\#):not(#\#):not(#\#):not(#\#){border-bottom-width:0}
|
|
651
652
|
.x92x3c3:not(#\#):not(#\#):not(#\#):not(#\#){border-bottom-width:var(--border-width)}
|
|
653
|
+
.xtgwc6q:not(#\#):not(#\#):not(#\#):not(#\#){border-right-color:var(--color-border)}
|
|
654
|
+
.x32b0ac:not(#\#):not(#\#):not(#\#):not(#\#){border-right-style:solid}
|
|
655
|
+
.x1pcaw5z:not(#\#):not(#\#):not(#\#):not(#\#){border-right-width:var(--border-width)}
|
|
652
656
|
.x5mp61g:not(#\#):not(#\#):not(#\#):not(#\#){border-top-color:var(--color-border-orange)}
|
|
653
657
|
.x1pc3f07:not(#\#):not(#\#):not(#\#):not(#\#){border-top-color:var(--color-border)}
|
|
654
658
|
.x13fuv20:not(#\#):not(#\#):not(#\#):not(#\#){border-top-style:solid}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@astryxdesign/lab",
|
|
3
|
-
"version": "0.7.6-canary.
|
|
3
|
+
"version": "0.7.6-canary.ce052bf",
|
|
4
4
|
"description": "Experimental Astryx components — published to npm only under the @canary dist-tag for early testing; never released as a stable (latest) version.",
|
|
5
5
|
"author": "Meta Open Source",
|
|
6
6
|
"license": "MIT",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
51
|
"@stylexjs/stylex": ">=0.10.0",
|
|
52
|
-
"@astryxdesign/core": "0.7.6-canary.
|
|
52
|
+
"@astryxdesign/core": "0.7.6-canary.ce052bf",
|
|
53
53
|
"react": ">=19.0.0",
|
|
54
54
|
"react-dom": ">=19.0.0"
|
|
55
55
|
},
|
|
@@ -59,8 +59,9 @@
|
|
|
59
59
|
"d3-shape": "^3.2.0"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
|
-
"@astryxdesign/a11y-spec": "0.7.6-canary.
|
|
63
|
-
"@astryxdesign/cli": "0.7.6-canary.
|
|
62
|
+
"@astryxdesign/a11y-spec": "0.7.6-canary.ce052bf",
|
|
63
|
+
"@astryxdesign/cli": "0.7.6-canary.ce052bf",
|
|
64
|
+
"@astryxdesign/interaction-harness": "0.7.6-canary.ce052bf",
|
|
64
65
|
"@babel/cli": "^7.29.7",
|
|
65
66
|
"@babel/core": "^7.29.7",
|
|
66
67
|
"@babel/preset-react": "^7.29.7",
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @file CircularProgressMotion.a11y.chromium.spec.ts
|
|
5
5
|
* @input Built CircularProgress stories in real Chromium (Web Animations
|
|
6
|
-
* seeking, CDP screencast, tracing)
|
|
6
|
+
* seeking, CDP screencast, tracing), the interaction harness's busy-window
|
|
7
|
+
* control and proof
|
|
7
8
|
* @output Browser evidence that a determinate value change keeps moving while
|
|
8
9
|
* a script holds the main thread and paints nothing per frame, that the
|
|
9
10
|
* ring at rest draws what the stroked circle drew, and that the arc stays
|
|
@@ -24,6 +25,14 @@ import {
|
|
|
24
25
|
serveStorybook,
|
|
25
26
|
type StaticServer,
|
|
26
27
|
} from '@astryxdesign/a11y-spec/storybook';
|
|
28
|
+
import {
|
|
29
|
+
busyWindowProof,
|
|
30
|
+
CONTROL_RGB,
|
|
31
|
+
inPresentationOrder,
|
|
32
|
+
startBusyControl,
|
|
33
|
+
trackMarker,
|
|
34
|
+
type TrackedFrame,
|
|
35
|
+
} from '@astryxdesign/interaction-harness';
|
|
27
36
|
|
|
28
37
|
let storybook: StaticServer;
|
|
29
38
|
test.beforeAll(async () => {
|
|
@@ -151,35 +160,59 @@ async function colors(page: Page) {
|
|
|
151
160
|
|
|
152
161
|
/**
|
|
153
162
|
* For each degree clockwise from 12 o'clock, whether the ring's centerline is
|
|
154
|
-
* drawn in the fill color in the given screenshot
|
|
163
|
+
* drawn in the fill color in the given screenshot: PNGs of the ring box, or,
|
|
164
|
+
* with `frame`, PNGs of the whole viewport (`viewportWidth` CSS px wide) read
|
|
165
|
+
* at the ring box, the same pixels a crop to that box would hold.
|
|
155
166
|
*/
|
|
156
167
|
async function inkByDegree(
|
|
157
168
|
page: Page,
|
|
158
169
|
shots: string[],
|
|
159
170
|
palette: {fill: number[]; track: number[]},
|
|
171
|
+
frame?: {ring: Box; viewportWidth: number},
|
|
160
172
|
): Promise<boolean[][]> {
|
|
161
173
|
const scratch = await page.context().newPage();
|
|
162
174
|
try {
|
|
163
175
|
return await scratch.evaluate(
|
|
164
|
-
async ({items, fill, track, diameter, stroke}) => {
|
|
176
|
+
async ({items, fill, track, diameter, stroke, region}) => {
|
|
165
177
|
const out: boolean[][] = [];
|
|
166
178
|
for (const item of items) {
|
|
167
179
|
const bitmap = await createImageBitmap(
|
|
168
180
|
await (await fetch(`data:image/png;base64,${item}`)).blob(),
|
|
169
181
|
);
|
|
170
|
-
|
|
182
|
+
// The ring box in the shot's pixels: the whole shot, or the box's
|
|
183
|
+
// pixels in a viewport frame.
|
|
184
|
+
const frameScale =
|
|
185
|
+
region == null ? 1 : bitmap.width / region.viewportWidth;
|
|
186
|
+
const x0 =
|
|
187
|
+
region == null ? 0 : Math.round(region.ring.x * frameScale);
|
|
188
|
+
const y0 =
|
|
189
|
+
region == null ? 0 : Math.round(region.ring.y * frameScale);
|
|
190
|
+
const boxWidth =
|
|
191
|
+
region == null
|
|
192
|
+
? bitmap.width
|
|
193
|
+
: Math.round(region.ring.width * frameScale);
|
|
194
|
+
const boxHeight =
|
|
195
|
+
region == null
|
|
196
|
+
? bitmap.height
|
|
197
|
+
: Math.round(region.ring.height * frameScale);
|
|
198
|
+
const canvas = new OffscreenCanvas(boxWidth, boxHeight);
|
|
171
199
|
const context = canvas.getContext('2d');
|
|
172
200
|
if (context == null) {
|
|
173
201
|
throw new Error('no 2d context');
|
|
174
202
|
}
|
|
175
|
-
context.drawImage(
|
|
176
|
-
|
|
203
|
+
context.drawImage(
|
|
204
|
+
bitmap,
|
|
205
|
+
x0,
|
|
206
|
+
y0,
|
|
207
|
+
boxWidth,
|
|
208
|
+
boxHeight,
|
|
177
209
|
0,
|
|
178
210
|
0,
|
|
179
|
-
|
|
180
|
-
|
|
211
|
+
boxWidth,
|
|
212
|
+
boxHeight,
|
|
181
213
|
);
|
|
182
|
-
const
|
|
214
|
+
const {data, width} = context.getImageData(0, 0, boxWidth, boxHeight);
|
|
215
|
+
const scale = boxWidth / diameter;
|
|
183
216
|
const r = ((diameter - stroke) / 2) * scale;
|
|
184
217
|
const c = (diameter / 2) * scale;
|
|
185
218
|
const d = (a: number[], b: number[]) =>
|
|
@@ -199,7 +232,13 @@ async function inkByDegree(
|
|
|
199
232
|
}
|
|
200
233
|
return out;
|
|
201
234
|
},
|
|
202
|
-
{
|
|
235
|
+
{
|
|
236
|
+
items: shots,
|
|
237
|
+
...palette,
|
|
238
|
+
diameter: DIAMETER,
|
|
239
|
+
stroke: STROKE,
|
|
240
|
+
region: frame ?? null,
|
|
241
|
+
},
|
|
203
242
|
);
|
|
204
243
|
} finally {
|
|
205
244
|
await scratch.close();
|
|
@@ -262,6 +301,10 @@ test('a value change keeps moving while a script holds the main thread', async (
|
|
|
262
301
|
everyNthFrame: 1,
|
|
263
302
|
});
|
|
264
303
|
await page.waitForTimeout(300);
|
|
304
|
+
// The harness's busy-window control, through the block: a box the
|
|
305
|
+
// compositor moves along the top edge, clear of the ring, in the same
|
|
306
|
+
// screencast.
|
|
307
|
+
const control = await startBusyControl(page);
|
|
265
308
|
// A value change, one presented frame, then 700 ms of script.
|
|
266
309
|
const busy = await page.evaluate(
|
|
267
310
|
async ({storyId}) =>
|
|
@@ -297,67 +340,68 @@ test('a value change keeps moving while a script holds the main thread', async (
|
|
|
297
340
|
}),
|
|
298
341
|
{storyId: STORY},
|
|
299
342
|
);
|
|
343
|
+
// Gone once the block ends, so the page is still again when the
|
|
344
|
+
// screencast stops.
|
|
345
|
+
await control.remove();
|
|
300
346
|
await page.waitForTimeout(300);
|
|
301
347
|
await cdp.send('Page.stopScreencast');
|
|
302
348
|
await Promise.all(acks);
|
|
303
349
|
await cdp.detach();
|
|
304
350
|
// A lost acknowledgement stalls the screencast and thins the frames.
|
|
305
351
|
expect(ackFailures).toEqual([]);
|
|
306
|
-
//
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
Math.round(ring.width * scale),
|
|
320
|
-
Math.round(ring.height * scale),
|
|
321
|
-
);
|
|
322
|
-
const context = canvas.getContext('2d');
|
|
323
|
-
if (context == null) {
|
|
324
|
-
throw new Error('no 2d context');
|
|
325
|
-
}
|
|
326
|
-
context.drawImage(
|
|
327
|
-
bitmap,
|
|
328
|
-
Math.round(ring.x * scale),
|
|
329
|
-
Math.round(ring.y * scale),
|
|
330
|
-
canvas.width,
|
|
331
|
-
canvas.height,
|
|
332
|
-
0,
|
|
333
|
-
0,
|
|
334
|
-
canvas.width,
|
|
335
|
-
canvas.height,
|
|
336
|
-
);
|
|
337
|
-
const blob = await canvas.convertToBlob({type: 'image/png'});
|
|
338
|
-
const bytes = new Uint8Array(await blob.arrayBuffer());
|
|
339
|
-
let binary = '';
|
|
340
|
-
for (const byte of bytes) {
|
|
341
|
-
binary += String.fromCharCode(byte);
|
|
342
|
-
}
|
|
343
|
-
out.push(btoa(binary));
|
|
344
|
-
}
|
|
345
|
-
return out;
|
|
346
|
-
},
|
|
347
|
-
{items: raw.map(f => f.data), ring: box},
|
|
348
|
-
);
|
|
349
|
-
} finally {
|
|
350
|
-
await scratch.close();
|
|
351
|
-
}
|
|
352
|
-
const rows = await inkByDegree(page, crops, palette);
|
|
353
|
-
const frames = rows.map((row, i) => ({t: raw[i].t, ...span(row)}));
|
|
352
|
+
// Chromium encodes each frame off its main thread and can send a slow one
|
|
353
|
+
// after the next: frames go by the swap timestamp each one carries. A frame
|
|
354
|
+
// that shows the arc behind an earlier one still has its own later
|
|
355
|
+
// timestamp, so it stays in place.
|
|
356
|
+
const presented = inPresentationOrder(raw);
|
|
357
|
+
// How far the arc reaches in each frame, read at the ring.
|
|
358
|
+
const rows = await inkByDegree(
|
|
359
|
+
page,
|
|
360
|
+
presented.map(f => f.data),
|
|
361
|
+
palette,
|
|
362
|
+
{ring: box, viewportWidth: 240},
|
|
363
|
+
);
|
|
364
|
+
const frames = rows.map((row, i) => ({t: presented[i].t, ...span(row)}));
|
|
354
365
|
const inside = frames.filter(
|
|
355
366
|
f => f.t >= busy.from + 20 && f.t <= busy.to - 20,
|
|
356
367
|
);
|
|
357
|
-
// The
|
|
358
|
-
//
|
|
359
|
-
const
|
|
360
|
-
|
|
368
|
+
// The control, in the frames around the block (the proof reads it from the
|
|
369
|
+
// last frame before the block through the block's end).
|
|
370
|
+
const controlFrames = await trackMarker(
|
|
371
|
+
page,
|
|
372
|
+
presented
|
|
373
|
+
.filter(f => f.t >= busy.from - 250 && f.t <= busy.to)
|
|
374
|
+
.map(f => ({
|
|
375
|
+
t: f.t,
|
|
376
|
+
data: f.data,
|
|
377
|
+
format: 'png' as const,
|
|
378
|
+
viewportWidth: 240,
|
|
379
|
+
viewportHeight: 160,
|
|
380
|
+
})),
|
|
381
|
+
{rgb: CONTROL_RGB},
|
|
382
|
+
);
|
|
383
|
+
// The change runs through the block: the arc's reach shows a new degree on
|
|
384
|
+
// every frame the control moved on, and stalls no longer than the control,
|
|
385
|
+
// until it settles (the harness's busy proof: the screencast's capture rate
|
|
386
|
+
// thins both alike). It settles 3 degrees short of its end: on the change's
|
|
387
|
+
// own clock each 1-degree step of the reading takes 2 to 8 ms up to 324,
|
|
388
|
+
// then 12, 12 and 18 ms for 325, 326 and 327 before it rests at 328, so
|
|
389
|
+
// from 325 two frames can read the same degree while the arc still moves.
|
|
390
|
+
// It stays one piece the whole way, and lands at 90%.
|
|
391
|
+
const arc: TrackedFrame[] = frames.map(f => ({
|
|
392
|
+
t: f.t,
|
|
393
|
+
box: {x: f.last, y: 0, width: 1, height: 1},
|
|
394
|
+
pixels: 1,
|
|
395
|
+
}));
|
|
396
|
+
const proof = busyWindowProof(arc, busy, {
|
|
397
|
+
axis: 'x',
|
|
398
|
+
settledWithin: 3,
|
|
399
|
+
control: controlFrames,
|
|
400
|
+
});
|
|
401
|
+
test
|
|
402
|
+
.info()
|
|
403
|
+
.annotations.push({type: 'busy window', description: proof.summary});
|
|
404
|
+
expect(proof.verdict.failures, proof.summary).toEqual([]);
|
|
361
405
|
for (const frame of inside) {
|
|
362
406
|
expect(frame.pieces, `pieces at ${frame.t}`).toBe(1);
|
|
363
407
|
}
|
|
@@ -51,6 +51,33 @@ function renderEditor(value = '', props: {escapeHint?: string} = {}) {
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
describe('CodeEditor', () => {
|
|
54
|
+
it('keeps the code left-to-right inside a right-to-left page', () => {
|
|
55
|
+
render(
|
|
56
|
+
<div dir="rtl">
|
|
57
|
+
<CodeEditor label="Code" value="const a = 1;" onChange={() => {}} />
|
|
58
|
+
</div>,
|
|
59
|
+
);
|
|
60
|
+
const editor = screen.getByRole('textbox', {name: 'Code'});
|
|
61
|
+
expect(editor.closest('[dir]')).toHaveAttribute('dir', 'ltr');
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('lets the placeholder take its own text direction', () => {
|
|
65
|
+
render(
|
|
66
|
+
<div dir="rtl">
|
|
67
|
+
<CodeEditor
|
|
68
|
+
label="Code"
|
|
69
|
+
value=""
|
|
70
|
+
onChange={() => {}}
|
|
71
|
+
placeholder="اكتب الكود هنا..."
|
|
72
|
+
/>
|
|
73
|
+
</div>,
|
|
74
|
+
);
|
|
75
|
+
expect(screen.getByText('اكتب الكود هنا...')).toHaveAttribute(
|
|
76
|
+
'dir',
|
|
77
|
+
'auto',
|
|
78
|
+
);
|
|
79
|
+
});
|
|
80
|
+
|
|
54
81
|
it('uses the label prop as the accessible name', () => {
|
|
55
82
|
render(
|
|
56
83
|
<CodeEditor
|
|
@@ -58,7 +58,9 @@ const styles = stylex.create({
|
|
|
58
58
|
display: 'flex',
|
|
59
59
|
borderRadius: radiusVars['--radius-element'],
|
|
60
60
|
backgroundColor: colorVars['--color-background-muted'],
|
|
61
|
-
|
|
61
|
+
borderWidth: borderVars['--border-width'],
|
|
62
|
+
borderStyle: 'solid',
|
|
63
|
+
borderColor: colorVars['--color-border'],
|
|
62
64
|
overflow: 'hidden',
|
|
63
65
|
},
|
|
64
66
|
rootFocused: {
|
|
@@ -73,7 +75,9 @@ const styles = stylex.create({
|
|
|
73
75
|
textAlign: 'end',
|
|
74
76
|
userSelect: 'none',
|
|
75
77
|
color: colorVars['--color-text-disabled'],
|
|
76
|
-
|
|
78
|
+
borderRightWidth: borderVars['--border-width'],
|
|
79
|
+
borderRightStyle: 'solid',
|
|
80
|
+
borderRightColor: colorVars['--color-border'],
|
|
77
81
|
},
|
|
78
82
|
gutterLine: {
|
|
79
83
|
fontFamily: typographyVars['--font-family-code'],
|
|
@@ -556,7 +560,13 @@ export function CodeEditor({
|
|
|
556
560
|
style,
|
|
557
561
|
)}
|
|
558
562
|
{...props}>
|
|
559
|
-
|
|
563
|
+
{/* Code, with its line numbers, keeps its own left-to-right direction
|
|
564
|
+
inside a right-to-left page (design:bidirectionality DR2): lines read
|
|
565
|
+
and indent correctly, and a long line scrolls from its start. */}
|
|
566
|
+
<div
|
|
567
|
+
dir="ltr"
|
|
568
|
+
{...stylex.props(styles.editorContainer)}
|
|
569
|
+
style={containerStyle}>
|
|
560
570
|
{hasLineNumbers && (
|
|
561
571
|
<div
|
|
562
572
|
{...stylex.props(styles.gutter, gutterSizeStyle)}
|
|
@@ -570,7 +580,9 @@ export function CodeEditor({
|
|
|
570
580
|
)}
|
|
571
581
|
<div style={{position: 'relative', flex: 1}}>
|
|
572
582
|
{showPlaceholder && (
|
|
573
|
-
|
|
583
|
+
// The placeholder is prose, not code: it takes its own text's
|
|
584
|
+
// direction, so an Arabic or Hebrew hint still reads correctly.
|
|
585
|
+
<div dir="auto" {...stylex.props(styles.placeholder, sizeStyle)}>
|
|
574
586
|
{placeholder}
|
|
575
587
|
</div>
|
|
576
588
|
)}
|
|
@@ -822,6 +822,8 @@ const styles = stylex.create({
|
|
|
822
822
|
whiteSpace: 'pre-wrap',
|
|
823
823
|
wordBreak: 'normal',
|
|
824
824
|
overflowWrap: 'anywhere',
|
|
825
|
+
// Text inside keeps `anywhere` too (Text FR3).
|
|
826
|
+
'--_astryx-text-overflow-wrap': 'anywhere',
|
|
825
827
|
},
|
|
826
828
|
// Row tints are a background-image layer so a pinned (sticky) cell can lay
|
|
827
829
|
// them over an opaque syntax background.
|
|
@@ -960,6 +962,8 @@ const annotationStyles = stylex.create({
|
|
|
960
962
|
content: {
|
|
961
963
|
direction: {default: null, ':is([dir="rtl"] *)': 'rtl'},
|
|
962
964
|
overflowWrap: 'anywhere',
|
|
965
|
+
// Text inside keeps `anywhere` too (Text FR3).
|
|
966
|
+
'--_astryx-text-overflow-wrap': 'anywhere',
|
|
963
967
|
contain: 'inline-size',
|
|
964
968
|
},
|
|
965
969
|
});
|