@jomae/catalog 0.4.0 → 0.6.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/README.md +20 -2
- package/dist/baseline.d.ts +25 -0
- package/dist/baseline.d.ts.map +1 -1
- package/dist/baseline.js +25 -1
- package/dist/baseline.js.map +1 -1
- package/dist/categories.d.ts +20 -0
- package/dist/categories.d.ts.map +1 -0
- package/dist/categories.js +62 -0
- package/dist/categories.js.map +1 -0
- package/dist/detect.d.ts +2 -1
- package/dist/detect.d.ts.map +1 -1
- package/dist/detect.js +17 -2
- package/dist/detect.js.map +1 -1
- package/dist/generated/baseline-history.d.ts +21 -0
- package/dist/generated/baseline-history.d.ts.map +1 -0
- package/dist/generated/baseline-history.js +20 -0
- package/dist/generated/baseline-history.js.map +1 -0
- package/dist/generated/baseline.d.ts +10 -0
- package/dist/generated/baseline.d.ts.map +1 -1
- package/dist/generated/baseline.js +250 -67
- package/dist/generated/baseline.js.map +1 -1
- package/dist/generated/guides.d.ts +16 -0
- package/dist/generated/guides.d.ts.map +1 -0
- package/dist/generated/guides.js +153 -0
- package/dist/generated/guides.js.map +1 -0
- package/dist/generated/sizes.d.ts.map +1 -1
- package/dist/generated/sizes.js +280 -55
- package/dist/generated/sizes.js.map +1 -1
- package/dist/generated/support-claims.d.ts +15 -0
- package/dist/generated/support-claims.d.ts.map +1 -0
- package/dist/generated/support-claims.js +69 -0
- package/dist/generated/support-claims.js.map +1 -0
- package/dist/guides.d.ts +46 -0
- package/dist/guides.d.ts.map +1 -0
- package/dist/guides.js +55 -0
- package/dist/guides.js.map +1 -0
- package/dist/history.d.ts +11 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +14 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/rules/abort-controller.d.ts.map +1 -1
- package/dist/rules/abort-controller.js +2 -1
- package/dist/rules/abort-controller.js.map +1 -1
- package/dist/rules/accordion.d.ts.map +1 -1
- package/dist/rules/accordion.js +3 -0
- package/dist/rules/accordion.js.map +1 -1
- package/dist/rules/array-grouping.d.ts +3 -0
- package/dist/rules/array-grouping.d.ts.map +1 -0
- package/dist/rules/array-grouping.js +29 -0
- package/dist/rules/array-grouping.js.map +1 -0
- package/dist/rules/aspect-ratio.d.ts.map +1 -1
- package/dist/rules/aspect-ratio.js +1 -0
- package/dist/rules/aspect-ratio.js.map +1 -1
- package/dist/rules/base64.d.ts +3 -0
- package/dist/rules/base64.d.ts.map +1 -0
- package/dist/rules/base64.js +41 -0
- package/dist/rules/base64.js.map +1 -0
- package/dist/rules/broadcast-channel.d.ts.map +1 -1
- package/dist/rules/broadcast-channel.js +1 -0
- package/dist/rules/broadcast-channel.js.map +1 -1
- package/dist/rules/carousel.d.ts.map +1 -1
- package/dist/rules/carousel.js +7 -0
- package/dist/rules/carousel.js.map +1 -1
- package/dist/rules/clipboard.d.ts.map +1 -1
- package/dist/rules/clipboard.js +4 -1
- package/dist/rules/clipboard.js.map +1 -1
- package/dist/rules/color-functions.d.ts.map +1 -1
- package/dist/rules/color-functions.js +1 -0
- package/dist/rules/color-functions.js.map +1 -1
- package/dist/rules/compression-streams.d.ts.map +1 -1
- package/dist/rules/compression-streams.js +2 -1
- package/dist/rules/compression-streams.js.map +1 -1
- package/dist/rules/container-queries.d.ts.map +1 -1
- package/dist/rules/container-queries.js +2 -0
- package/dist/rules/container-queries.js.map +1 -1
- package/dist/rules/content-visibility.d.ts.map +1 -1
- package/dist/rules/content-visibility.js +3 -1
- package/dist/rules/content-visibility.js.map +1 -1
- package/dist/rules/custom-highlight.d.ts +3 -0
- package/dist/rules/custom-highlight.d.ts.map +1 -0
- package/dist/rules/custom-highlight.js +39 -0
- package/dist/rules/custom-highlight.js.map +1 -0
- package/dist/rules/date-time-input.d.ts.map +1 -1
- package/dist/rules/date-time-input.js +2 -0
- package/dist/rules/date-time-input.js.map +1 -1
- package/dist/rules/dialog.d.ts.map +1 -1
- package/dist/rules/dialog.js +8 -0
- package/dist/rules/dialog.js.map +1 -1
- package/dist/rules/discrete-transitions.d.ts.map +1 -1
- package/dist/rules/discrete-transitions.js +6 -0
- package/dist/rules/discrete-transitions.js.map +1 -1
- package/dist/rules/drag-and-drop.d.ts.map +1 -1
- package/dist/rules/drag-and-drop.js +26 -8
- package/dist/rules/drag-and-drop.js.map +1 -1
- package/dist/rules/duration-format.d.ts +3 -0
- package/dist/rules/duration-format.d.ts.map +1 -0
- package/dist/rules/duration-format.js +37 -0
- package/dist/rules/duration-format.js.map +1 -0
- package/dist/rules/event-target.d.ts +3 -0
- package/dist/rules/event-target.d.ts.map +1 -0
- package/dist/rules/event-target.js +51 -0
- package/dist/rules/event-target.js.map +1 -0
- package/dist/rules/fetch.d.ts +3 -0
- package/dist/rules/fetch.d.ts.map +1 -0
- package/dist/rules/fetch.js +46 -0
- package/dist/rules/fetch.js.map +1 -0
- package/dist/rules/field-sizing.d.ts.map +1 -1
- package/dist/rules/field-sizing.js +3 -1
- package/dist/rules/field-sizing.js.map +1 -1
- package/dist/rules/fluid-type.d.ts.map +1 -1
- package/dist/rules/fluid-type.js +3 -1
- package/dist/rules/fluid-type.js.map +1 -1
- package/dist/rules/focus-visible.d.ts.map +1 -1
- package/dist/rules/focus-visible.js +1 -0
- package/dist/rules/focus-visible.js.map +1 -1
- package/dist/rules/fullscreen.d.ts.map +1 -1
- package/dist/rules/fullscreen.js +2 -1
- package/dist/rules/fullscreen.js.map +1 -1
- package/dist/rules/height-animation.d.ts.map +1 -1
- package/dist/rules/height-animation.js +2 -0
- package/dist/rules/height-animation.js.map +1 -1
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +64 -3
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/inert.d.ts +3 -0
- package/dist/rules/inert.d.ts.map +1 -0
- package/dist/rules/inert.js +37 -0
- package/dist/rules/inert.js.map +1 -0
- package/dist/rules/intersection-observer.d.ts.map +1 -1
- package/dist/rules/intersection-observer.js +2 -0
- package/dist/rules/intersection-observer.js.map +1 -1
- package/dist/rules/lazy-loading.d.ts.map +1 -1
- package/dist/rules/lazy-loading.js +2 -0
- package/dist/rules/lazy-loading.js.map +1 -1
- package/dist/rules/line-clamp.d.ts.map +1 -1
- package/dist/rules/line-clamp.js +2 -1
- package/dist/rules/line-clamp.js.map +1 -1
- package/dist/rules/masonry.d.ts.map +1 -1
- package/dist/rules/masonry.js +1 -0
- package/dist/rules/masonry.js.map +1 -1
- package/dist/rules/natural-sort.d.ts +3 -0
- package/dist/rules/natural-sort.d.ts.map +1 -0
- package/dist/rules/natural-sort.js +41 -0
- package/dist/rules/natural-sort.js.map +1 -0
- package/dist/rules/number-format.d.ts.map +1 -1
- package/dist/rules/number-format.js +3 -1
- package/dist/rules/number-format.js.map +1 -1
- package/dist/rules/page-visibility.d.ts.map +1 -1
- package/dist/rules/page-visibility.js +5 -0
- package/dist/rules/page-visibility.js.map +1 -1
- package/dist/rules/popover.d.ts.map +1 -1
- package/dist/rules/popover.js +8 -1
- package/dist/rules/popover.js.map +1 -1
- package/dist/rules/random-uuid.d.ts +3 -0
- package/dist/rules/random-uuid.d.ts.map +1 -0
- package/dist/rules/random-uuid.js +31 -0
- package/dist/rules/random-uuid.js.map +1 -0
- package/dist/rules/relative-time.d.ts.map +1 -1
- package/dist/rules/relative-time.js +1 -0
- package/dist/rules/relative-time.js.map +1 -1
- package/dist/rules/resizable-panels.d.ts.map +1 -1
- package/dist/rules/resizable-panels.js +4 -7
- package/dist/rules/resizable-panels.js.map +1 -1
- package/dist/rules/resize-observer.d.ts.map +1 -1
- package/dist/rules/resize-observer.js +2 -1
- package/dist/rules/resize-observer.js.map +1 -1
- package/dist/rules/screen-wake-lock.d.ts.map +1 -1
- package/dist/rules/screen-wake-lock.js +3 -1
- package/dist/rules/screen-wake-lock.js.map +1 -1
- package/dist/rules/scroll-animations.d.ts.map +1 -1
- package/dist/rules/scroll-animations.js +9 -1
- package/dist/rules/scroll-animations.js.map +1 -1
- package/dist/rules/scroll-lock.d.ts.map +1 -1
- package/dist/rules/scroll-lock.js +8 -7
- package/dist/rules/scroll-lock.js.map +1 -1
- package/dist/rules/scrollbars.d.ts.map +1 -1
- package/dist/rules/scrollbars.js +5 -0
- package/dist/rules/scrollbars.js.map +1 -1
- package/dist/rules/select.d.ts.map +1 -1
- package/dist/rules/select.js +7 -0
- package/dist/rules/select.js.map +1 -1
- package/dist/rules/server-sent-events.d.ts +3 -0
- package/dist/rules/server-sent-events.d.ts.map +1 -0
- package/dist/rules/server-sent-events.js +38 -0
- package/dist/rules/server-sent-events.js.map +1 -0
- package/dist/rules/smooth-scroll.d.ts.map +1 -1
- package/dist/rules/smooth-scroll.js +2 -0
- package/dist/rules/smooth-scroll.js.map +1 -1
- package/dist/rules/speech-recognition.d.ts.map +1 -1
- package/dist/rules/speech-recognition.js +19 -10
- package/dist/rules/speech-recognition.js.map +1 -1
- package/dist/rules/speech-synthesis.d.ts.map +1 -1
- package/dist/rules/speech-synthesis.js +3 -0
- package/dist/rules/speech-synthesis.js.map +1 -1
- package/dist/rules/sticky.d.ts.map +1 -1
- package/dist/rules/sticky.js +2 -0
- package/dist/rules/sticky.js.map +1 -1
- package/dist/rules/structured-clone.d.ts.map +1 -1
- package/dist/rules/structured-clone.js +13 -2
- package/dist/rules/structured-clone.js.map +1 -1
- package/dist/rules/text-box-trim.d.ts.map +1 -1
- package/dist/rules/text-box-trim.js +3 -1
- package/dist/rules/text-box-trim.js.map +1 -1
- package/dist/rules/text-wrap-balance.d.ts.map +1 -1
- package/dist/rules/text-wrap-balance.js +2 -0
- package/dist/rules/text-wrap-balance.js.map +1 -1
- package/dist/rules/url-search-params.d.ts +3 -0
- package/dist/rules/url-search-params.d.ts.map +1 -0
- package/dist/rules/url-search-params.js +42 -0
- package/dist/rules/url-search-params.js.map +1 -0
- package/dist/rules/view-transitions.d.ts.map +1 -1
- package/dist/rules/view-transitions.js +9 -0
- package/dist/rules/view-transitions.js.map +1 -1
- package/dist/rules/web-bluetooth.d.ts.map +1 -1
- package/dist/rules/web-bluetooth.js +1 -0
- package/dist/rules/web-bluetooth.js.map +1 -1
- package/dist/rules/web-crypto.d.ts +3 -0
- package/dist/rules/web-crypto.d.ts.map +1 -0
- package/dist/rules/web-crypto.js +32 -0
- package/dist/rules/web-crypto.js.map +1 -0
- package/dist/rules/web-share.d.ts.map +1 -1
- package/dist/rules/web-share.js +1 -0
- package/dist/rules/web-share.js.map +1 -1
- package/dist/schema.d.ts +22 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +63 -4
- package/dist/schema.js.map +1 -1
- package/dist/support.d.ts +11 -0
- package/dist/support.d.ts.map +1 -0
- package/dist/support.js +31 -0
- package/dist/support.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export const containerQueries = {
|
|
2
2
|
id: "container-queries",
|
|
3
3
|
title: "Element size queries",
|
|
4
|
+
category: "layout",
|
|
4
5
|
replaces: [
|
|
5
6
|
"react-resize-detector",
|
|
6
7
|
"react-use-measure",
|
|
@@ -51,5 +52,6 @@ export const containerQueries = {
|
|
|
51
52
|
.card { grid-template-columns: 8rem 1fr; }
|
|
52
53
|
}`,
|
|
53
54
|
},
|
|
55
|
+
guides: ["size-aware-styling"],
|
|
54
56
|
};
|
|
55
57
|
//# sourceMappingURL=container-queries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container-queries.js","sourceRoot":"","sources":["../../src/rules/container-queries.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAS;IACpC,EAAE,EAAE,mBAAmB;IACvB,KAAK,EAAE,sBAAsB;IAC7B,QAAQ,EAAE;QACR,uBAAuB;QACvB,mBAAmB;QACnB,cAAc;QACd,uBAAuB;QACvB,yBAAyB;QACzB,YAAY;KACb;IACD,UAAU,EAAE,CAAC,mBAAmB,CAAC;IACjC,MAAM,EAAE,mBAAmB;IAC3B,KAAK,EAAE;QACL,SAAS,EACP,6YAA6Y;QAC/Y,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;EAsBX;QACE,MAAM,EACJ,oFAAoF;KACvF;IACD,KAAK,EAAE;QACL,IAAI,EAAE,oFAAoF;QAC1F,MAAM,EAAE;YACN,qIAAqI;YACrI,yKAAyK;YACzK,4HAA4H;YAC5H,mIAAmI;SACpI;QACD,OAAO,EAAE;;;EAGX;KACC;
|
|
1
|
+
{"version":3,"file":"container-queries.js","sourceRoot":"","sources":["../../src/rules/container-queries.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAS;IACpC,EAAE,EAAE,mBAAmB;IACvB,KAAK,EAAE,sBAAsB;IAC7B,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE;QACR,uBAAuB;QACvB,mBAAmB;QACnB,cAAc;QACd,uBAAuB;QACvB,yBAAyB;QACzB,YAAY;KACb;IACD,UAAU,EAAE,CAAC,mBAAmB,CAAC;IACjC,MAAM,EAAE,mBAAmB;IAC3B,KAAK,EAAE;QACL,SAAS,EACP,6YAA6Y;QAC/Y,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;EAsBX;QACE,MAAM,EACJ,oFAAoF;KACvF;IACD,KAAK,EAAE;QACL,IAAI,EAAE,oFAAoF;QAC1F,MAAM,EAAE;YACN,qIAAqI;YACrI,yKAAyK;YACzK,4HAA4H;YAC5H,mIAAmI;SACpI;QACD,OAAO,EAAE;;;EAGX;KACC;IACD,MAAM,EAAE,CAAC,oBAAoB,CAAC;CAC/B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-visibility.d.ts","sourceRoot":"","sources":["../../src/rules/content-visibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"content-visibility.d.ts","sourceRoot":"","sources":["../../src/rules/content-visibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,iBAAiB,EAAE,IAoC/B,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export const contentVisibility = {
|
|
2
2
|
id: "content-visibility",
|
|
3
3
|
title: "Off-screen rendering",
|
|
4
|
+
category: "layout",
|
|
4
5
|
replaces: [
|
|
5
6
|
"react-window",
|
|
6
7
|
"react-virtualized",
|
|
@@ -25,9 +26,10 @@ export const contentVisibility = {
|
|
|
25
26
|
"You need the DOM node count itself reduced for a very large list. content-visibility still keeps every row in the DOM; it only skips the layout and paint work for the ones off-screen.",
|
|
26
27
|
"You need data fetched in pages as the user scrolls. That is application logic a virtualization library's scroll callback gives you; content-visibility does not fetch anything.",
|
|
27
28
|
"Your rows vary a lot in height and you cannot estimate contain-intrinsic-size well. A wrong estimate makes the scrollbar and scroll position jump when the real size is measured.",
|
|
28
|
-
"You support Safari below version
|
|
29
|
+
"You support Safari below version {{safari:css.properties.content-visibility.auto}} or Firefox below {{firefox:css.properties.content-visibility.auto}}. content-visibility: auto landed there long after Chrome {{chrome:css.properties.content-visibility.auto}}, so on an older target the property is ignored and the long list costs exactly what it did before.",
|
|
29
30
|
],
|
|
30
31
|
snippet: ".row { content-visibility: auto; contain-intrinsic-size: auto 48px; }",
|
|
31
32
|
},
|
|
33
|
+
guides: ["defer-rendering-heavy-content"],
|
|
32
34
|
};
|
|
33
35
|
//# sourceMappingURL=content-visibility.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-visibility.js","sourceRoot":"","sources":["../../src/rules/content-visibility.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAS;IACrC,EAAE,EAAE,oBAAoB;IACxB,KAAK,EAAE,sBAAsB;IAC7B,QAAQ,EAAE;QACR,cAAc;QACd,mBAAmB;QACnB,sBAAsB;QACtB,yBAAyB;QACzB,sBAAsB;QACtB,qBAAqB;KACtB;IACD,UAAU,EAAE,CAAC,oBAAoB,CAAC;IAClC,MAAM,EAAE,0BAA0B;IAClC,KAAK,EAAE;QACL,SAAS,EACP,ocAAoc;QACtc,OAAO,EAAE;;;EAGX;QACE,MAAM,EACJ,qEAAqE;KACxE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,mFAAmF;QACzF,MAAM,EAAE;YACN,yLAAyL;YACzL,iLAAiL;YACjL,mLAAmL;YACnL,
|
|
1
|
+
{"version":3,"file":"content-visibility.js","sourceRoot":"","sources":["../../src/rules/content-visibility.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAS;IACrC,EAAE,EAAE,oBAAoB;IACxB,KAAK,EAAE,sBAAsB;IAC7B,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE;QACR,cAAc;QACd,mBAAmB;QACnB,sBAAsB;QACtB,yBAAyB;QACzB,sBAAsB;QACtB,qBAAqB;KACtB;IACD,UAAU,EAAE,CAAC,oBAAoB,CAAC;IAClC,MAAM,EAAE,0BAA0B;IAClC,KAAK,EAAE;QACL,SAAS,EACP,ocAAoc;QACtc,OAAO,EAAE;;;EAGX;QACE,MAAM,EACJ,qEAAqE;KACxE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,mFAAmF;QACzF,MAAM,EAAE;YACN,yLAAyL;YACzL,iLAAiL;YACjL,mLAAmL;YACnL,sWAAsW;SACvW;QACD,OAAO,EACL,uEAAuE;KAC1E;IACD,MAAM,EAAE,CAAC,+BAA+B,CAAC;CAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-highlight.d.ts","sourceRoot":"","sources":["../../src/rules/custom-highlight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,eAAe,EAAE,IAuC7B,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export const customHighlight = {
|
|
2
|
+
id: "custom-highlight",
|
|
3
|
+
title: "Highlighting search matches",
|
|
4
|
+
category: "typography",
|
|
5
|
+
replaces: ["mark.js", "react-highlight-words", "react-highlighter"],
|
|
6
|
+
featureIds: ["highlight"],
|
|
7
|
+
native: "the CSS Custom Highlight API",
|
|
8
|
+
human: {
|
|
9
|
+
explainer: "These libraries find the matches and then wrap each one in a <mark> or a <span>, editing the document the user is reading. Splitting text nodes that way invalidates cached offsets, drops the user's selection, and re-runs on every keystroke in a search field. The Custom Highlight API registers Range objects with the browser instead, and ::highlight() styles them at paint time, so the text stays exactly one node and nothing in the DOM moves.",
|
|
10
|
+
snippet: `const ranges = [];
|
|
11
|
+
for (const node of textNodes) {
|
|
12
|
+
const index = node.textContent.toLowerCase().indexOf(query);
|
|
13
|
+
if (index === -1) continue;
|
|
14
|
+
const range = new Range();
|
|
15
|
+
range.setStart(node, index);
|
|
16
|
+
range.setEnd(node, index + query.length);
|
|
17
|
+
ranges.push(range);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
CSS.highlights.set("search", new Highlight(...ranges));`,
|
|
21
|
+
mdnUrl: "https://developer.mozilla.org/en-US/docs/Web/API/CSS_Custom_Highlight_API",
|
|
22
|
+
},
|
|
23
|
+
agent: {
|
|
24
|
+
when: "highlighting search matches or ranges of text without changing the markup",
|
|
25
|
+
unless: [
|
|
26
|
+
"A highlight has to be interactive, for example a click target, a tooltip anchor, or something you scroll into view. Highlight ranges are paint-only and are not elements, so there is nothing to attach a listener or an anchor name to.",
|
|
27
|
+
"You style highlights with more than colour, background-color, text-decoration and text-shadow. ::highlight() ignores everything else, so a rounded background or a border still needs real elements.",
|
|
28
|
+
"Finding the matches is what you are buying: diacritic folding, stemming, or matching across element boundaries. The API takes Ranges you have already computed and does not help you compute them.",
|
|
29
|
+
"Your support target reaches below Safari {{safari:highlight}} or Firefox {{firefox:highlight}}. Custom highlights only became Baseline newly available in March 2026, so those browsers need the wrapping approach as a fallback.",
|
|
30
|
+
"The highlighting has to survive being copied out of the page or serialised back to HTML, where a paint-time highlight leaves no trace.",
|
|
31
|
+
],
|
|
32
|
+
snippet: `CSS.highlights.set("search", new Highlight(...ranges));
|
|
33
|
+
|
|
34
|
+
/* CSS */
|
|
35
|
+
::highlight(search) { background-color: #fde68a; color: #111; }`,
|
|
36
|
+
},
|
|
37
|
+
guides: ["highlight-text-ranges"],
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=custom-highlight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-highlight.js","sourceRoot":"","sources":["../../src/rules/custom-highlight.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,EAAE,EAAE,kBAAkB;IACtB,KAAK,EAAE,6BAA6B;IACpC,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,CAAC,SAAS,EAAE,uBAAuB,EAAE,mBAAmB,CAAC;IACnE,UAAU,EAAE,CAAC,WAAW,CAAC;IACzB,MAAM,EAAE,8BAA8B;IACtC,KAAK,EAAE;QACL,SAAS,EACP,6bAA6b;QAC/b,OAAO,EAAE;;;;;;;;;;wDAU2C;QACpD,MAAM,EACJ,2EAA2E;KAC9E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,2EAA2E;QACjF,MAAM,EAAE;YACN,0OAA0O;YAC1O,sMAAsM;YACtM,oMAAoM;YACpM,mOAAmO;YACnO,wIAAwI;SACzI;QACD,OAAO,EAAE;;;gEAGmD;KAC7D;IACD,MAAM,EAAE,CAAC,uBAAuB,CAAC;CAClC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-time-input.d.ts","sourceRoot":"","sources":["../../src/rules/date-time-input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"date-time-input.d.ts","sourceRoot":"","sources":["../../src/rules/date-time-input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,aAAa,EAAE,IAmC3B,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export const dateTimeInput = {
|
|
2
2
|
id: "date-time-input",
|
|
3
3
|
title: "Date and time pickers",
|
|
4
|
+
category: "forms",
|
|
4
5
|
replaces: [
|
|
5
6
|
"react-datepicker",
|
|
6
7
|
"flatpickr",
|
|
@@ -22,6 +23,7 @@ export const dateTimeInput = {
|
|
|
22
23
|
agent: {
|
|
23
24
|
when: "collecting a single date or time value from a form",
|
|
24
25
|
unless: [
|
|
26
|
+
"The displayed format has to be yours. The control renders in the user's own locale and there is no way to force dd/mm/yyyy, which is one of the most common reasons teams keep a date picker.",
|
|
25
27
|
"You need a date range, picking a start and end date in one control. The native input only holds one value.",
|
|
26
28
|
"You need the calendar's own appearance to match your design. Its popup is rendered by the browser or OS and cannot be restyled.",
|
|
27
29
|
"You need to disable specific dates, such as holidays or already-booked days, rather than a single continuous min/max range.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-time-input.js","sourceRoot":"","sources":["../../src/rules/date-time-input.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAS;IACjC,EAAE,EAAE,iBAAiB;IACrB,KAAK,EAAE,uBAAuB;IAC9B,QAAQ,EAAE;QACR,kBAAkB;QAClB,WAAW;QACX,iBAAiB;QACjB,kBAAkB;QAClB,qBAAqB;QACrB,iBAAiB;KAClB;IACD,UAAU,EAAE,CAAC,iBAAiB,CAAC;IAC/B,MAAM,EAAE,6CAA6C;IACrD,KAAK,EAAE;QACL,SAAS,EACP,8YAA8Y;QAChZ,OAAO,EAAE;;;SAGJ;QACL,MAAM,EACJ,iFAAiF;KACpF;IACD,KAAK,EAAE;QACL,IAAI,EAAE,oDAAoD;QAC1D,MAAM,EAAE;YACN,4GAA4G;YAC5G,iIAAiI;YACjI,6HAA6H;YAC7H,+GAA+G;SAChH;QACD,OAAO,EAAE,+CAA+C;KACzD;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"date-time-input.js","sourceRoot":"","sources":["../../src/rules/date-time-input.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAS;IACjC,EAAE,EAAE,iBAAiB;IACrB,KAAK,EAAE,uBAAuB;IAC9B,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE;QACR,kBAAkB;QAClB,WAAW;QACX,iBAAiB;QACjB,kBAAkB;QAClB,qBAAqB;QACrB,iBAAiB;KAClB;IACD,UAAU,EAAE,CAAC,iBAAiB,CAAC;IAC/B,MAAM,EAAE,6CAA6C;IACrD,KAAK,EAAE;QACL,SAAS,EACP,8YAA8Y;QAChZ,OAAO,EAAE;;;SAGJ;QACL,MAAM,EACJ,iFAAiF;KACpF;IACD,KAAK,EAAE;QACL,IAAI,EAAE,oDAAoD;QAC1D,MAAM,EAAE;YACN,+LAA+L;YAC/L,4GAA4G;YAC5G,iIAAiI;YACjI,6HAA6H;YAC7H,+GAA+G;SAChH;QACD,OAAO,EAAE,+CAA+C;KACzD;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/rules/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/rules/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,MAAM,EAAE,IA+DpB,CAAC"}
|
package/dist/rules/dialog.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export const dialog = {
|
|
2
2
|
id: "dialog-element",
|
|
3
3
|
title: "Modal dialogs",
|
|
4
|
+
category: "forms",
|
|
4
5
|
replaces: [
|
|
5
6
|
"react-modal",
|
|
6
7
|
"react-responsive-modal",
|
|
@@ -11,6 +12,7 @@ export const dialog = {
|
|
|
11
12
|
"vue-js-modal",
|
|
12
13
|
"vue-final-modal",
|
|
13
14
|
"svelte-modals",
|
|
15
|
+
"dialog-polyfill",
|
|
14
16
|
],
|
|
15
17
|
featureIds: ["dialog"],
|
|
16
18
|
native: "<dialog> with showModal()",
|
|
@@ -51,5 +53,11 @@ export const dialog = {
|
|
|
51
53
|
<script>document.querySelector("#d").showModal();</script>
|
|
52
54
|
<style>dialog::backdrop { background: rgb(0 0 0 / 0.5); }</style>`,
|
|
53
55
|
},
|
|
56
|
+
guides: [
|
|
57
|
+
"light-dismiss-a-dialog",
|
|
58
|
+
"declarative-dialog-popover-control",
|
|
59
|
+
"platform-controls-dismiss-dialog",
|
|
60
|
+
"animate-to-from-top-layer",
|
|
61
|
+
],
|
|
54
62
|
};
|
|
55
63
|
//# sourceMappingURL=dialog.js.map
|
package/dist/rules/dialog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../src/rules/dialog.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAS;IAC1B,EAAE,EAAE,gBAAgB;IACpB,KAAK,EAAE,eAAe;IACtB,QAAQ,EAAE;QACR,aAAa;QACb,wBAAwB;QACxB,kBAAkB;QAClB,eAAe;QACf,YAAY;QACZ,aAAa;QACb,cAAc;QACd,iBAAiB;QACjB,eAAe;
|
|
1
|
+
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../src/rules/dialog.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAS;IAC1B,EAAE,EAAE,gBAAgB;IACpB,KAAK,EAAE,eAAe;IACtB,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE;QACR,aAAa;QACb,wBAAwB;QACxB,kBAAkB;QAClB,eAAe;QACf,YAAY;QACZ,aAAa;QACb,cAAc;QACd,iBAAiB;QACjB,eAAe;QACf,iBAAiB;KAClB;IACD,UAAU,EAAE,CAAC,QAAQ,CAAC;IACtB,MAAM,EAAE,2BAA2B;IACnC,KAAK,EAAE;QACL,SAAS,EACP,6XAA6X;QAC/X,OAAO,EAAE;;;;;;;;;;;;;;;;;SAiBJ;QACL,MAAM,EACJ,8EAA8E;KACjF;IACD,KAAK,EAAE;QACL,IAAI,EAAE,uDAAuD;QAC7D,MAAM,EAAE;YACN,8IAA8I;YAC9I,gIAAgI;YAChI,oGAAoG;YACpG,yKAAyK;YACzK,6IAA6I;SAC9I;QACD,OAAO,EAAE;;;;kEAIqD;KAC/D;IACD,MAAM,EAAE;QACN,wBAAwB;QACxB,oCAAoC;QACpC,kCAAkC;QAClC,2BAA2B;KAC5B;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discrete-transitions.d.ts","sourceRoot":"","sources":["../../src/rules/discrete-transitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"discrete-transitions.d.ts","sourceRoot":"","sources":["../../src/rules/discrete-transitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,mBAAmB,EAAE,IA+DjC,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export const discreteTransitions = {
|
|
2
2
|
id: "discrete-transitions",
|
|
3
3
|
title: "Enter and exit transitions",
|
|
4
|
+
category: "animation",
|
|
4
5
|
replaces: [
|
|
5
6
|
"framer-motion",
|
|
6
7
|
"motion",
|
|
@@ -54,5 +55,10 @@ export const discreteTransitions = {
|
|
|
54
55
|
@starting-style { .el { opacity: 0; } }
|
|
55
56
|
.el[hidden] { display: none; opacity: 0; }`,
|
|
56
57
|
},
|
|
58
|
+
guides: [
|
|
59
|
+
"animate-element-entry-exit",
|
|
60
|
+
"physics-based-easing",
|
|
61
|
+
"dynamic-sibling-animations",
|
|
62
|
+
],
|
|
57
63
|
};
|
|
58
64
|
//# sourceMappingURL=discrete-transitions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discrete-transitions.js","sourceRoot":"","sources":["../../src/rules/discrete-transitions.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAS;IACvC,EAAE,EAAE,sBAAsB;IAC1B,KAAK,EAAE,4BAA4B;IACnC,QAAQ,EAAE;QACR,eAAe;QACf,QAAQ;QACR,wBAAwB;QACxB,cAAc;KACf;IACD,UAAU,EAAE,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;IACrD,MAAM,EAAE,0DAA0D;IAClE,KAAK,EAAE;QACL,SAAS,EACP,6hBAA6hB;QAC/hB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;EAsBX;QACE,MAAM,EAAE,kEAAkE;KAC3E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,mFAAmF;QACzF,MAAM,EAAE;YACN,gOAAgO;YAChO,0KAA0K;YAC1K,0DAA0D;YAC1D,qHAAqH;YACrH,qHAAqH;YACrH,gHAAgH;YAChH,oKAAoK;SACrK;QACD,OAAO,EAAE;;;;;2CAK8B;KACxC;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"discrete-transitions.js","sourceRoot":"","sources":["../../src/rules/discrete-transitions.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAS;IACvC,EAAE,EAAE,sBAAsB;IAC1B,KAAK,EAAE,4BAA4B;IACnC,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE;QACR,eAAe;QACf,QAAQ;QACR,wBAAwB;QACxB,cAAc;KACf;IACD,UAAU,EAAE,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;IACrD,MAAM,EAAE,0DAA0D;IAClE,KAAK,EAAE;QACL,SAAS,EACP,6hBAA6hB;QAC/hB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;EAsBX;QACE,MAAM,EAAE,kEAAkE;KAC3E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,mFAAmF;QACzF,MAAM,EAAE;YACN,gOAAgO;YAChO,0KAA0K;YAC1K,0DAA0D;YAC1D,qHAAqH;YACrH,qHAAqH;YACrH,gHAAgH;YAChH,oKAAoK;SACrK;QACD,OAAO,EAAE;;;;;2CAK8B;KACxC;IACD,MAAM,EAAE;QACN,4BAA4B;QAC5B,sBAAsB;QACtB,4BAA4B;KAC7B;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drag-and-drop.d.ts","sourceRoot":"","sources":["../../src/rules/drag-and-drop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"drag-and-drop.d.ts","sourceRoot":"","sources":["../../src/rules/drag-and-drop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,WAAW,EAAE,IA+CzB,CAAC"}
|
|
@@ -1,18 +1,32 @@
|
|
|
1
1
|
export const dragAndDrop = {
|
|
2
2
|
id: "drag-and-drop",
|
|
3
3
|
title: "Reordering a list by dragging",
|
|
4
|
+
category: "forms",
|
|
4
5
|
replaces: ["sortablejs", "react-sortablejs"],
|
|
5
6
|
featureIds: ["draganddrop"],
|
|
6
7
|
native: "draggable and the drag events",
|
|
7
8
|
human: {
|
|
8
9
|
explainer: "Sortable.js tracks pointer position, computes where a dragged item would land, and reorders the DOM to match, all in its own event handling. The native drag-and-drop API does the same core job: mark an element draggable, listen for dragstart, dragover, and drop, and move it yourself in the drop handler. It gives you the events and the ghost image; the reordering logic is still yours to write.",
|
|
9
|
-
snippet:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
})
|
|
10
|
+
snippet: `<!-- Without draggable, dragstart never fires. -->
|
|
11
|
+
<li draggable="true" data-id="a1">Item</li>
|
|
12
|
+
|
|
13
|
+
<script>
|
|
14
|
+
el.addEventListener("dragstart", (e) => {
|
|
15
|
+
e.dataTransfer.setData("text/plain", el.dataset.id);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
// Without preventDefault here, the element is not a drop target and the
|
|
19
|
+
// drop event below never fires at all. This is the step people miss.
|
|
20
|
+
list.addEventListener("dragover", (e) => {
|
|
21
|
+
e.preventDefault();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
list.addEventListener("drop", (e) => {
|
|
25
|
+
e.preventDefault();
|
|
26
|
+
const id = e.dataTransfer.getData("text/plain");
|
|
27
|
+
// move the item with this id to the drop position
|
|
28
|
+
});
|
|
29
|
+
</script>`,
|
|
16
30
|
mdnUrl: "https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API",
|
|
17
31
|
},
|
|
18
32
|
agent: {
|
|
@@ -23,7 +37,11 @@ list.addEventListener("drop", (e) => {
|
|
|
23
37
|
"You want the dataTransfer API's plain-text-and-files model to also carry rich in-memory objects between drag and drop without round-tripping through a serialized string.",
|
|
24
38
|
"You need accessible, keyboard-operable reordering. The native drag events are pointer-only; keyboard support is separate work either way.",
|
|
25
39
|
],
|
|
26
|
-
snippet:
|
|
40
|
+
snippet: `<li draggable="true">Item</li>
|
|
41
|
+
el.addEventListener("dragstart", (e) => e.dataTransfer.setData("text/plain", id));
|
|
42
|
+
// dragover must preventDefault or drop never fires.
|
|
43
|
+
list.addEventListener("dragover", (e) => e.preventDefault());
|
|
44
|
+
list.addEventListener("drop", (e) => { e.preventDefault(); /* reorder */ });`,
|
|
27
45
|
},
|
|
28
46
|
};
|
|
29
47
|
//# sourceMappingURL=drag-and-drop.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drag-and-drop.js","sourceRoot":"","sources":["../../src/rules/drag-and-drop.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAS;IAC/B,EAAE,EAAE,eAAe;IACnB,KAAK,EAAE,+BAA+B;IACtC,QAAQ,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC5C,UAAU,EAAE,CAAC,aAAa,CAAC;IAC3B,MAAM,EAAE,+BAA+B;IACvC,KAAK,EAAE;QACL,SAAS,EACP,6YAA6Y;QAC/Y,OAAO,EAAE
|
|
1
|
+
{"version":3,"file":"drag-and-drop.js","sourceRoot":"","sources":["../../src/rules/drag-and-drop.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAS;IAC/B,EAAE,EAAE,eAAe;IACnB,KAAK,EAAE,+BAA+B;IACtC,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC5C,UAAU,EAAE,CAAC,aAAa,CAAC;IAC3B,MAAM,EAAE,+BAA+B;IACvC,KAAK,EAAE;QACL,SAAS,EACP,6YAA6Y;QAC/Y,OAAO,EAAE;;;;;;;;;;;;;;;;;;;UAmBH;QACN,MAAM,EACJ,yEAAyE;KAC5E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,iEAAiE;QACvE,MAAM,EAAE;YACN,0IAA0I;YAC1I,iMAAiM;YACjM,2KAA2K;YAC3K,2IAA2I;SAC5I;QACD,OAAO,EAAE;;;;6EAIgE;KAC1E;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration-format.d.ts","sourceRoot":"","sources":["../../src/rules/duration-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,cAAc,EAAE,IAqC5B,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export const durationFormat = {
|
|
2
|
+
id: "duration-format",
|
|
3
|
+
title: "Human-readable durations",
|
|
4
|
+
category: "formatting",
|
|
5
|
+
replaces: ["humanize-duration", "pretty-ms"],
|
|
6
|
+
featureIds: ["intl-duration-format"],
|
|
7
|
+
native: "Intl.DurationFormat",
|
|
8
|
+
human: {
|
|
9
|
+
explainer: 'These libraries carry their own unit names and plural rules for every language they support, which is where most of their weight goes. Intl.DurationFormat takes a plain object of years, hours, minutes and seconds and renders it in the requested locale using the data the browser already holds. The three styles, long, short and narrow, cover the usual range from "1 hour, 30 minutes" down to "1h 30m".',
|
|
10
|
+
snippet: `const fmt = new Intl.DurationFormat("en", { style: "long" });
|
|
11
|
+
fmt.format({ hours: 1, minutes: 30 });
|
|
12
|
+
// "1 hour, 30 minutes"
|
|
13
|
+
|
|
14
|
+
new Intl.DurationFormat("de", { style: "narrow" }).format({
|
|
15
|
+
minutes: 45,
|
|
16
|
+
seconds: 10,
|
|
17
|
+
});
|
|
18
|
+
// "45 Min. 10 Sek."`,
|
|
19
|
+
mdnUrl: "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DurationFormat",
|
|
20
|
+
},
|
|
21
|
+
agent: {
|
|
22
|
+
when: 'rendering a length of time as text, such as "1 hour, 30 minutes"',
|
|
23
|
+
unless: [
|
|
24
|
+
"You pass milliseconds and expect the library to split them into units. Intl.DurationFormat formats a duration object you have already broken down, so the arithmetic stays yours until Temporal.Duration is available.",
|
|
25
|
+
"You need the exact output shape of the current library. humanize-duration and pretty-ms have their own conventions for rounding, unit selection and separators, and changing them is a visible change to every screen.",
|
|
26
|
+
"Your support target predates Intl.DurationFormat becoming Baseline newly available, in which case the library is the fallback.",
|
|
27
|
+
"You need a compact form the standard does not model, such as a stopwatch reading of 01:30:05, which is padding and string joining rather than locale formatting.",
|
|
28
|
+
"You rely on the library's largest and smallest unit options to drop units automatically, which Intl expects you to decide before you call it.",
|
|
29
|
+
],
|
|
30
|
+
snippet: `new Intl.DurationFormat("en", { style: "long" }).format({
|
|
31
|
+
hours: 1,
|
|
32
|
+
minutes: 30,
|
|
33
|
+
});`,
|
|
34
|
+
},
|
|
35
|
+
guides: ["format-human-readable-durations"],
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=duration-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration-format.js","sourceRoot":"","sources":["../../src/rules/duration-format.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAS;IAClC,EAAE,EAAE,iBAAiB;IACrB,KAAK,EAAE,0BAA0B;IACjC,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,CAAC,mBAAmB,EAAE,WAAW,CAAC;IAC5C,UAAU,EAAE,CAAC,sBAAsB,CAAC;IACpC,MAAM,EAAE,qBAAqB;IAC7B,KAAK,EAAE;QACL,SAAS,EACP,mZAAmZ;QACrZ,OAAO,EAAE;;;;;;;;qBAQQ;QACjB,MAAM,EACJ,sGAAsG;KACzG;IACD,KAAK,EAAE;QACL,IAAI,EAAE,kEAAkE;QACxE,MAAM,EAAE;YACN,wNAAwN;YACxN,wNAAwN;YACxN,gIAAgI;YAChI,kKAAkK;YAClK,+IAA+I;SAChJ;QACD,OAAO,EAAE;;;IAGT;KACD;IACD,MAAM,EAAE,CAAC,iCAAiC,CAAC;CAC5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-target.d.ts","sourceRoot":"","sources":["../../src/rules/event-target.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,WAAW,EAAE,IAkDzB,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export const eventTarget = {
|
|
2
|
+
id: "event-target",
|
|
3
|
+
title: "Event emitters",
|
|
4
|
+
category: "async-data",
|
|
5
|
+
replaces: [
|
|
6
|
+
"mitt",
|
|
7
|
+
"tiny-emitter",
|
|
8
|
+
"nanoevents",
|
|
9
|
+
"eventemitter3",
|
|
10
|
+
"event-emitter",
|
|
11
|
+
],
|
|
12
|
+
featureIds: [],
|
|
13
|
+
manualBaseline: {
|
|
14
|
+
status: "widely",
|
|
15
|
+
verifiedOn: "2026-09-06",
|
|
16
|
+
note: "web-features tracks addEventListener and CustomEvent under 'events', which reports Safari {{safari:events}} because the event model itself is that old. What this rule needs is newer: constructing a bare EventTarget is Safari {{safari:api.EventTarget.EventTarget}}, and the AbortSignal option on addEventListener is Safari {{safari:api.EventTarget.addEventListener.options_parameter.options_signal_parameter}}. Deriving from 'events' would publish a floor a decade below what the snippet requires. Widely available on the newer of those dates, Safari {{safari:api.EventTarget.addEventListener.options_parameter.options_signal_parameter}} in September 2021.",
|
|
17
|
+
},
|
|
18
|
+
native: "EventTarget with CustomEvent",
|
|
19
|
+
human: {
|
|
20
|
+
explainer: "An application event bus is usually a small class with on, off and emit. EventTarget is that class, already in the platform: make a bare new EventTarget(), or extend it, then dispatch a CustomEvent and listen with addEventListener. Passing an AbortSignal to addEventListener takes a whole group of listeners off in one abort() call, which is the part hand-rolled emitters usually leave to the caller.",
|
|
21
|
+
snippet: `const bus = new EventTarget();
|
|
22
|
+
|
|
23
|
+
const controller = new AbortController();
|
|
24
|
+
bus.addEventListener(
|
|
25
|
+
"cart:add",
|
|
26
|
+
(event) => render(event.detail.sku),
|
|
27
|
+
{ signal: controller.signal },
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
bus.dispatchEvent(new CustomEvent("cart:add", { detail: { sku: "A1" } }));
|
|
31
|
+
|
|
32
|
+
// Removes every listener registered with this signal.
|
|
33
|
+
controller.abort();`,
|
|
34
|
+
mdnUrl: "https://developer.mozilla.org/en-US/docs/Web/API/EventTarget",
|
|
35
|
+
},
|
|
36
|
+
agent: {
|
|
37
|
+
when: "passing messages between parts of an app through a small event bus",
|
|
38
|
+
unless: [
|
|
39
|
+
"Your emit calls pass several arguments. A CustomEvent carries one detail property, so each emit has to become an object and each handler reads event.detail.",
|
|
40
|
+
"You use wildcard listeners or read the registered listener list, as mitt's all map allows. EventTarget exposes neither.",
|
|
41
|
+
"You need the bus in Node below {{nodejs:api.EventTarget}}, where EventTarget is not a global. Node's own EventEmitter covers that without a dependency.",
|
|
42
|
+
"You depend on the library's dispatch ordering or on re-entrant emits behaving a particular way, which DOM event dispatch does not promise to match.",
|
|
43
|
+
"Your support target reaches below Safari {{safari:api.EventTarget.EventTarget}}, where new EventTarget() cannot be constructed, or below Safari {{safari:api.EventTarget.addEventListener.options_parameter.options_signal_parameter}}, where addEventListener ignores the signal option and listeners never come off.",
|
|
44
|
+
"The package is also pulled in transitively by something else, so dropping your direct dependency does not remove the bytes from the bundle.",
|
|
45
|
+
],
|
|
46
|
+
snippet: `const bus = new EventTarget();
|
|
47
|
+
bus.addEventListener("ping", (e) => handle(e.detail), { signal });
|
|
48
|
+
bus.dispatchEvent(new CustomEvent("ping", { detail: payload }));`,
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=event-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-target.js","sourceRoot":"","sources":["../../src/rules/event-target.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAS;IAC/B,EAAE,EAAE,cAAc;IAClB,KAAK,EAAE,gBAAgB;IACvB,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE;QACR,MAAM;QACN,cAAc;QACd,YAAY;QACZ,eAAe;QACf,eAAe;KAChB;IACD,UAAU,EAAE,EAAE;IACd,cAAc,EAAE;QACd,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,YAAY;QACxB,IAAI,EAAE,ipBAAipB;KACxpB;IACD,MAAM,EAAE,8BAA8B;IACtC,KAAK,EAAE;QACL,SAAS,EACP,kZAAkZ;QACpZ,OAAO,EAAE;;;;;;;;;;;;oBAYO;QAChB,MAAM,EAAE,8DAA8D;KACvE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,oEAAoE;QAC1E,MAAM,EAAE;YACN,8JAA8J;YAC9J,yHAAyH;YACzH,yJAAyJ;YACzJ,qJAAqJ;YACrJ,wTAAwT;YACxT,6IAA6I;SAC9I;QACD,OAAO,EAAE;;iEAEoD;KAC9D;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/rules/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,SAAS,EAAE,IA6CvB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export const fetchRule = {
|
|
2
|
+
id: "fetch",
|
|
3
|
+
title: "HTTP requests",
|
|
4
|
+
category: "async-data",
|
|
5
|
+
replaces: [
|
|
6
|
+
"axios",
|
|
7
|
+
"superagent",
|
|
8
|
+
"redaxios",
|
|
9
|
+
"whatwg-fetch",
|
|
10
|
+
"unfetch",
|
|
11
|
+
"isomorphic-fetch",
|
|
12
|
+
"cross-fetch",
|
|
13
|
+
],
|
|
14
|
+
featureIds: ["fetch"],
|
|
15
|
+
native: "fetch()",
|
|
16
|
+
human: {
|
|
17
|
+
explainer: "axios was written when fetch was not everywhere and XMLHttpRequest was the floor. Most of what it adds is now a few lines at the call site: fetch resolves for any response the server sent, so you check response.ok yourself, and it hands back a stream, so you call response.json(). Cancellation is an AbortController, and a timeout is AbortSignal.timeout() passed as the signal. Interceptors and upload progress are what is genuinely missing, and they are the reasons to keep the library.",
|
|
18
|
+
snippet: `const res = await fetch("/api/items", {
|
|
19
|
+
method: "POST",
|
|
20
|
+
headers: { "Content-Type": "application/json" },
|
|
21
|
+
body: JSON.stringify(payload),
|
|
22
|
+
// Aborts and rejects after five seconds.
|
|
23
|
+
signal: AbortSignal.timeout(5000),
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
// fetch only rejects on a network error, so check the status yourself.
|
|
27
|
+
if (!res.ok) throw new Error(\`\${res.status} \${res.statusText}\`);
|
|
28
|
+
const items = await res.json();`,
|
|
29
|
+
mdnUrl: "https://developer.mozilla.org/en-US/docs/Web/API/Window/fetch",
|
|
30
|
+
},
|
|
31
|
+
agent: {
|
|
32
|
+
when: "making HTTP requests from the browser or from Node {{nodejs:api.fetch}} and up",
|
|
33
|
+
unless: [
|
|
34
|
+
"You use interceptors to attach auth headers or refresh a token on 401 across every call. fetch has no hook for that, so it becomes a wrapper every request has to route through.",
|
|
35
|
+
"You rely on a 4xx or 5xx rejecting. fetch resolves for any response the server sent, so every call site needs an explicit response.ok check and existing catch blocks quietly stop firing.",
|
|
36
|
+
"You need upload progress. Download progress can come off the response stream, but tracking bytes sent still needs XMLHttpRequest, which is what axios uses underneath.",
|
|
37
|
+
"You share one client with Node below {{nodejs:api.fetch}}, where there is no global fetch, or you depend on axios features with no equivalent: XSRF cookie handling, automatic transforms, or the adapter system.",
|
|
38
|
+
"Your tests mock axios directly. Moving to fetch means rewriting those mocks, which is real work for no behaviour change.",
|
|
39
|
+
"You need a request timeout below Chrome {{chrome:abortsignal-timeout}}, Safari {{safari:abortsignal-timeout}} or Firefox {{firefox:abortsignal-timeout}}. fetch itself is far older than all three, but AbortSignal.timeout() is not, so an older target needs a setTimeout calling controller.abort().",
|
|
40
|
+
],
|
|
41
|
+
snippet: `const res = await fetch(url, { signal: AbortSignal.timeout(5000) });
|
|
42
|
+
if (!res.ok) throw new Error(String(res.status));
|
|
43
|
+
const data = await res.json();`,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/rules/fetch.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAS;IAC7B,EAAE,EAAE,OAAO;IACX,KAAK,EAAE,eAAe;IACtB,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE;QACR,OAAO;QACP,YAAY;QACZ,UAAU;QACV,cAAc;QACd,SAAS;QACT,kBAAkB;QAClB,aAAa;KACd;IACD,UAAU,EAAE,CAAC,OAAO,CAAC;IACrB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE;QACL,SAAS,EACP,yeAAye;QAC3e,OAAO,EAAE;;;;;;;;;;gCAUmB;QAC5B,MAAM,EAAE,+DAA+D;KACxE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,gFAAgF;QACtF,MAAM,EAAE;YACN,kLAAkL;YAClL,4LAA4L;YAC5L,wKAAwK;YACxK,mNAAmN;YACnN,0HAA0H;YAC1H,ySAAyS;SAC1S;QACD,OAAO,EAAE;;+BAEkB;KAC5B;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-sizing.d.ts","sourceRoot":"","sources":["../../src/rules/field-sizing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"field-sizing.d.ts","sourceRoot":"","sources":["../../src/rules/field-sizing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,WAAW,EAAE,IA6CzB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export const fieldSizing = {
|
|
2
2
|
id: "field-sizing",
|
|
3
3
|
title: "Auto-growing textareas",
|
|
4
|
+
category: "forms",
|
|
4
5
|
replaces: [
|
|
5
6
|
"react-textarea-autosize",
|
|
6
7
|
"autosize",
|
|
@@ -30,7 +31,7 @@ input[type="text"] {
|
|
|
30
31
|
agent: {
|
|
31
32
|
when: "a textarea or input should grow to fit what the user has typed",
|
|
32
33
|
unless: [
|
|
33
|
-
"
|
|
34
|
+
"Your support target reaches below Chrome {{chrome:field-sizing}}, Firefox {{firefox:field-sizing}} or Safari {{safari:field-sizing}}. Every engine ships field-sizing now, but Safari only at the end of 2025 and Firefox in 2026, so an older target still needs the fallback.",
|
|
34
35
|
"You need the measured height in JavaScript, for example to sync a neighbouring element.",
|
|
35
36
|
"You need to animate the height change. field-sizing resizes without a transition.",
|
|
36
37
|
],
|
|
@@ -40,5 +41,6 @@ input[type="text"] {
|
|
|
40
41
|
max-height: 12lh;
|
|
41
42
|
}`,
|
|
42
43
|
},
|
|
44
|
+
guides: ["form-fields-automatically-fit-contents"],
|
|
43
45
|
};
|
|
44
46
|
//# sourceMappingURL=field-sizing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-sizing.js","sourceRoot":"","sources":["../../src/rules/field-sizing.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAS;IAC/B,EAAE,EAAE,cAAc;IAClB,KAAK,EAAE,wBAAwB;IAC/B,QAAQ,EAAE;QACR,yBAAyB;QACzB,UAAU;QACV,yBAAyB;QACzB,uBAAuB;QACvB,cAAc;KACf;IACD,UAAU,EAAE,CAAC,cAAc,CAAC;IAC5B,MAAM,EAAE,uBAAuB;IAC/B,KAAK,EAAE;QACL,SAAS,EACP,oYAAoY;QACtY,OAAO,EAAE;;;;;;;;;;;;EAYX;QACE,MAAM,EAAE,+DAA+D;KACxE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,gEAAgE;QACtE,MAAM,EAAE;YACN,
|
|
1
|
+
{"version":3,"file":"field-sizing.js","sourceRoot":"","sources":["../../src/rules/field-sizing.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAS;IAC/B,EAAE,EAAE,cAAc;IAClB,KAAK,EAAE,wBAAwB;IAC/B,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE;QACR,yBAAyB;QACzB,UAAU;QACV,yBAAyB;QACzB,uBAAuB;QACvB,cAAc;KACf;IACD,UAAU,EAAE,CAAC,cAAc,CAAC;IAC5B,MAAM,EAAE,uBAAuB;IAC/B,KAAK,EAAE;QACL,SAAS,EACP,oYAAoY;QACtY,OAAO,EAAE;;;;;;;;;;;;EAYX;QACE,MAAM,EAAE,+DAA+D;KACxE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,gEAAgE;QACtE,MAAM,EAAE;YACN,iRAAiR;YACjR,yFAAyF;YACzF,mFAAmF;SACpF;QACD,OAAO,EAAE;;;;EAIX;KACC;IACD,MAAM,EAAE,CAAC,wCAAwC,CAAC;CACnD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fluid-type.d.ts","sourceRoot":"","sources":["../../src/rules/fluid-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"fluid-type.d.ts","sourceRoot":"","sources":["../../src/rules/fluid-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,SAAS,EAAE,IAgCvB,CAAC"}
|
package/dist/rules/fluid-type.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export const fluidType = {
|
|
2
2
|
id: "fluid-type-clamp",
|
|
3
3
|
title: "Fluid type scales",
|
|
4
|
-
|
|
4
|
+
category: "typography",
|
|
5
|
+
replaces: ["fittext.js"],
|
|
5
6
|
featureIds: ["min-max-clamp"],
|
|
6
7
|
native: "clamp() with a viewport-relative middle value",
|
|
7
8
|
human: {
|
|
@@ -27,5 +28,6 @@ export const fluidType = {
|
|
|
27
28
|
snippet: `h1 { font-size: clamp(2rem, 1.5rem + 2.5vw, 4rem); }
|
|
28
29
|
.card h2 { font-size: clamp(1.25rem, 0.9rem + 2cqi, 2rem); }`,
|
|
29
30
|
},
|
|
31
|
+
guides: ["fluid-scaling"],
|
|
30
32
|
};
|
|
31
33
|
//# sourceMappingURL=fluid-type.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fluid-type.js","sourceRoot":"","sources":["../../src/rules/fluid-type.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAS;IAC7B,EAAE,EAAE,kBAAkB;IACtB,KAAK,EAAE,mBAAmB;IAC1B,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"fluid-type.js","sourceRoot":"","sources":["../../src/rules/fluid-type.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAS;IAC7B,EAAE,EAAE,kBAAkB;IACtB,KAAK,EAAE,mBAAmB;IAC1B,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,CAAC,YAAY,CAAC;IACxB,UAAU,EAAE,CAAC,eAAe,CAAC;IAC7B,MAAM,EAAE,+CAA+C;IACvD,KAAK,EAAE;QACL,SAAS,EACP,uaAAua;QACza,OAAO,EAAE;;;;;;;;EAQX;QACE,MAAM,EAAE,wDAAwD;KACjE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,6FAA6F;QACnG,MAAM,EAAE;YACN,oMAAoM;YACpM,gGAAgG;YAChG,kDAAkD;SACnD;QACD,OAAO,EAAE;6DACgD;KAC1D;IACD,MAAM,EAAE,CAAC,eAAe,CAAC;CAC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-visible.d.ts","sourceRoot":"","sources":["../../src/rules/focus-visible.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"focus-visible.d.ts","sourceRoot":"","sources":["../../src/rules/focus-visible.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,YAAY,EAAE,IA0B1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-visible.js","sourceRoot":"","sources":["../../src/rules/focus-visible.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAS;IAChC,EAAE,EAAE,eAAe;IACnB,KAAK,EAAE,6BAA6B;IACpC,QAAQ,EAAE,CAAC,eAAe,CAAC;IAC3B,UAAU,EAAE,CAAC,eAAe,CAAC;IAC7B,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE;QACL,SAAS,EACP,8XAA8X;QAChY,OAAO,EAAE;;;;;EAKX;QACE,MAAM,EAAE,iEAAiE;KAC1E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,0FAA0F;QAChG,MAAM,EAAE;YACN,gJAAgJ;YAChJ,8LAA8L;SAC/L;QACD,OAAO,EAAE,4DAA4D;KACtE;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"focus-visible.js","sourceRoot":"","sources":["../../src/rules/focus-visible.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAS;IAChC,EAAE,EAAE,eAAe;IACnB,KAAK,EAAE,6BAA6B;IACpC,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE,CAAC,eAAe,CAAC;IAC3B,UAAU,EAAE,CAAC,eAAe,CAAC;IAC7B,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE;QACL,SAAS,EACP,8XAA8X;QAChY,OAAO,EAAE;;;;;EAKX;QACE,MAAM,EAAE,iEAAiE;KAC1E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,0FAA0F;QAChG,MAAM,EAAE;YACN,gJAAgJ;YAChJ,8LAA8L;SAC/L;QACD,OAAO,EAAE,4DAA4D;KACtE;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fullscreen.d.ts","sourceRoot":"","sources":["../../src/rules/fullscreen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"fullscreen.d.ts","sourceRoot":"","sources":["../../src/rules/fullscreen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,UAAU,EAAE,IA8BxB,CAAC"}
|
package/dist/rules/fullscreen.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export const fullscreen = {
|
|
2
2
|
id: "fullscreen",
|
|
3
3
|
title: "Fullscreen toggling",
|
|
4
|
+
category: "device-apis",
|
|
4
5
|
replaces: ["screenfull", "react-full-screen", "vue-fullscreen"],
|
|
5
6
|
featureIds: ["fullscreen"],
|
|
6
7
|
native: "Element.requestFullscreen()",
|
|
@@ -18,7 +19,7 @@ export const fullscreen = {
|
|
|
18
19
|
agent: {
|
|
19
20
|
when: "toggling an element, such as a video player or image viewer, into and out of fullscreen",
|
|
20
21
|
unless: [
|
|
21
|
-
"You support Safari
|
|
22
|
+
"You support Safari below {{safari:api.Element.requestFullscreen}}, where the unprefixed API only recently landed.",
|
|
22
23
|
"You're targeting iOS Safari specifically. It still doesn't support fullscreen on arbitrary elements, only on the built-in video player.",
|
|
23
24
|
"You need the older vendor-prefixed fallback chain screenfull still maintains for browsers this old.",
|
|
24
25
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fullscreen.js","sourceRoot":"","sources":["../../src/rules/fullscreen.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,EAAE,EAAE,YAAY;IAChB,KAAK,EAAE,qBAAqB;IAC5B,QAAQ,EAAE,CAAC,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,CAAC;IAC/D,UAAU,EAAE,CAAC,YAAY,CAAC;IAC1B,MAAM,EAAE,6BAA6B;IACrC,KAAK,EAAE;QACL,SAAS,EACP,gQAAgQ;QAClQ,OAAO,EAAE;;;;;;EAMX;QACE,MAAM,EACJ,4EAA4E;KAC/E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,yFAAyF;QAC/F,MAAM,EAAE;YACN,
|
|
1
|
+
{"version":3,"file":"fullscreen.js","sourceRoot":"","sources":["../../src/rules/fullscreen.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,EAAE,EAAE,YAAY;IAChB,KAAK,EAAE,qBAAqB;IAC5B,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,CAAC,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,CAAC;IAC/D,UAAU,EAAE,CAAC,YAAY,CAAC;IAC1B,MAAM,EAAE,6BAA6B;IACrC,KAAK,EAAE;QACL,SAAS,EACP,gQAAgQ;QAClQ,OAAO,EAAE;;;;;;EAMX;QACE,MAAM,EACJ,4EAA4E;KAC/E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,yFAAyF;QAC/F,MAAM,EAAE;YACN,mHAAmH;YACnH,yIAAyI;YACzI,qGAAqG;SACtG;QACD,OAAO,EACL,kFAAkF;KACrF;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"height-animation.d.ts","sourceRoot":"","sources":["../../src/rules/height-animation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"height-animation.d.ts","sourceRoot":"","sources":["../../src/rules/height-animation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,eAAe,EAAE,IAgD7B,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export const heightAnimation = {
|
|
2
2
|
id: "height-auto-animation",
|
|
3
3
|
title: "Animating to height auto",
|
|
4
|
+
category: "animation",
|
|
4
5
|
replaces: ["react-collapse", "react-animate-height", "react-smooth-collapse"],
|
|
5
6
|
featureIds: ["interpolate-size", "calc-size"],
|
|
6
7
|
native: "interpolate-size: allow-keywords, or calc-size()",
|
|
@@ -43,5 +44,6 @@ export const heightAnimation = {
|
|
|
43
44
|
.panel { height: 0; overflow: hidden; transition: height 0.3s; }
|
|
44
45
|
.panel[data-open] { height: auto; }`,
|
|
45
46
|
},
|
|
47
|
+
guides: ["animate-to-intrinsic-sizes"],
|
|
46
48
|
};
|
|
47
49
|
//# sourceMappingURL=height-animation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"height-animation.js","sourceRoot":"","sources":["../../src/rules/height-animation.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,EAAE,EAAE,uBAAuB;IAC3B,KAAK,EAAE,0BAA0B;IACjC,QAAQ,EAAE,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,uBAAuB,CAAC;IAC7E,UAAU,EAAE,CAAC,kBAAkB,EAAE,WAAW,CAAC;IAC7C,MAAM,EAAE,kDAAkD;IAC1D,KAAK,EAAE;QACL,SAAS,EACP,ybAAyb;QAC3b,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;EAsBX;QACE,MAAM,EAAE,4DAA4D;KACrE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,qEAAqE;QAC3E,MAAM,EAAE;YACN,4NAA4N;YAC5N,6IAA6I;YAC7I,gGAAgG;YAChG,8GAA8G;SAC/G;QACD,OAAO,EAAE;;oCAEuB;KACjC;
|
|
1
|
+
{"version":3,"file":"height-animation.js","sourceRoot":"","sources":["../../src/rules/height-animation.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,EAAE,EAAE,uBAAuB;IAC3B,KAAK,EAAE,0BAA0B;IACjC,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,uBAAuB,CAAC;IAC7E,UAAU,EAAE,CAAC,kBAAkB,EAAE,WAAW,CAAC;IAC7C,MAAM,EAAE,kDAAkD;IAC1D,KAAK,EAAE;QACL,SAAS,EACP,ybAAyb;QAC3b,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;EAsBX;QACE,MAAM,EAAE,4DAA4D;KACrE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,qEAAqE;QAC3E,MAAM,EAAE;YACN,4NAA4N;YAC5N,6IAA6I;YAC7I,gGAAgG;YAChG,8GAA8G;SAC/G;QACD,OAAO,EAAE;;oCAEuB;KACjC;IACD,MAAM,EAAE,CAAC,4BAA4B,CAAC;CACvC,CAAC"}
|