@jomae/catalog 0.3.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 +21 -3
- package/dist/baseline.d.ts +36 -0
- package/dist/baseline.d.ts.map +1 -1
- package/dist/baseline.js +75 -2
- 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/format.js +1 -1
- package/dist/format.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 +16 -0
- package/dist/generated/baseline.d.ts.map +1 -1
- package/dist/generated/baseline.js +683 -44
- 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 +683 -48
- 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 +3 -0
- package/dist/rules/abort-controller.d.ts.map +1 -0
- package/dist/rules/abort-controller.js +26 -0
- package/dist/rules/abort-controller.js.map +1 -0
- 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 +3 -0
- package/dist/rules/broadcast-channel.d.ts.map +1 -0
- package/dist/rules/broadcast-channel.js +26 -0
- package/dist/rules/broadcast-channel.js.map +1 -0
- package/dist/rules/carousel.d.ts.map +1 -1
- package/dist/rules/carousel.js +10 -0
- package/dist/rules/carousel.js.map +1 -1
- package/dist/rules/clipboard.d.ts +3 -0
- package/dist/rules/clipboard.d.ts.map +1 -0
- package/dist/rules/clipboard.js +35 -0
- package/dist/rules/clipboard.js.map +1 -0
- package/dist/rules/color-functions.d.ts.map +1 -1
- package/dist/rules/color-functions.js +9 -1
- package/dist/rules/color-functions.js.map +1 -1
- package/dist/rules/compression-streams.d.ts +3 -0
- package/dist/rules/compression-streams.d.ts.map +1 -0
- package/dist/rules/compression-streams.js +26 -0
- package/dist/rules/compression-streams.js.map +1 -0
- package/dist/rules/container-queries.d.ts.map +1 -1
- package/dist/rules/container-queries.js +3 -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 +11 -2
- 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 +4 -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 +11 -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 +3 -0
- package/dist/rules/drag-and-drop.d.ts.map +1 -0
- package/dist/rules/drag-and-drop.js +47 -0
- package/dist/rules/drag-and-drop.js.map +1 -0
- 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 +10 -2
- 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 +3 -0
- package/dist/rules/focus-visible.d.ts.map +1 -0
- package/dist/rules/focus-visible.js +27 -0
- package/dist/rules/focus-visible.js.map +1 -0
- package/dist/rules/fullscreen.d.ts +3 -0
- package/dist/rules/fullscreen.d.ts.map +1 -0
- package/dist/rules/fullscreen.js +29 -0
- package/dist/rules/fullscreen.js.map +1 -0
- 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 +102 -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 +3 -0
- package/dist/rules/intersection-observer.d.ts.map +1 -0
- package/dist/rules/intersection-observer.js +36 -0
- package/dist/rules/intersection-observer.js.map +1 -0
- package/dist/rules/lazy-loading.d.ts.map +1 -1
- package/dist/rules/lazy-loading.js +4 -0
- package/dist/rules/lazy-loading.js.map +1 -1
- package/dist/rules/line-clamp.d.ts +3 -0
- package/dist/rules/line-clamp.d.ts.map +1 -0
- package/dist/rules/line-clamp.js +39 -0
- package/dist/rules/line-clamp.js.map +1 -0
- package/dist/rules/masonry.d.ts.map +1 -1
- package/dist/rules/masonry.js +3 -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 +3 -0
- package/dist/rules/number-format.d.ts.map +1 -0
- package/dist/rules/number-format.js +27 -0
- package/dist/rules/number-format.js.map +1 -0
- package/dist/rules/page-visibility.d.ts +3 -0
- package/dist/rules/page-visibility.d.ts.map +1 -0
- package/dist/rules/page-visibility.js +29 -0
- package/dist/rules/page-visibility.js.map +1 -0
- package/dist/rules/popover.d.ts.map +1 -1
- package/dist/rules/popover.js +10 -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 +3 -0
- package/dist/rules/relative-time.d.ts.map +1 -0
- package/dist/rules/relative-time.js +24 -0
- package/dist/rules/relative-time.js.map +1 -0
- package/dist/rules/resizable-panels.d.ts.map +1 -1
- package/dist/rules/resizable-panels.js +4 -2
- package/dist/rules/resizable-panels.js.map +1 -1
- package/dist/rules/resize-observer.d.ts +3 -0
- package/dist/rules/resize-observer.d.ts.map +1 -0
- package/dist/rules/resize-observer.js +28 -0
- package/dist/rules/resize-observer.js.map +1 -0
- package/dist/rules/screen-wake-lock.d.ts +3 -0
- package/dist/rules/screen-wake-lock.d.ts.map +1 -0
- package/dist/rules/screen-wake-lock.js +25 -0
- package/dist/rules/screen-wake-lock.js.map +1 -0
- 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 +8 -0
- package/dist/rules/scrollbars.js.map +1 -1
- package/dist/rules/select.d.ts.map +1 -1
- package/dist/rules/select.js +17 -1
- 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 +3 -0
- package/dist/rules/smooth-scroll.js.map +1 -1
- package/dist/rules/speech-recognition.d.ts +3 -0
- package/dist/rules/speech-recognition.d.ts.map +1 -0
- package/dist/rules/speech-recognition.js +36 -0
- package/dist/rules/speech-recognition.js.map +1 -0
- package/dist/rules/speech-synthesis.d.ts +3 -0
- package/dist/rules/speech-synthesis.d.ts.map +1 -0
- package/dist/rules/speech-synthesis.js +25 -0
- package/dist/rules/speech-synthesis.js.map +1 -0
- package/dist/rules/sticky.d.ts.map +1 -1
- package/dist/rules/sticky.js +4 -0
- package/dist/rules/sticky.js.map +1 -1
- package/dist/rules/structured-clone.d.ts +3 -0
- package/dist/rules/structured-clone.d.ts.map +1 -0
- package/dist/rules/structured-clone.js +32 -0
- package/dist/rules/structured-clone.js.map +1 -0
- 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 +3 -0
- package/dist/rules/web-bluetooth.d.ts.map +1 -0
- package/dist/rules/web-bluetooth.js +26 -0
- package/dist/rules/web-bluetooth.js.map +1 -0
- 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 +3 -0
- package/dist/rules/web-share.d.ts.map +1 -0
- package/dist/rules/web-share.js +28 -0
- package/dist/rules/web-share.js.map +1 -0
- package/dist/schema.d.ts +22 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +64 -5
- 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 +2 -2
package/dist/rules/masonry.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
export const masonry = {
|
|
2
2
|
id: "css-masonry",
|
|
3
3
|
title: "Masonry layouts",
|
|
4
|
+
category: "layout",
|
|
4
5
|
replaces: [
|
|
5
6
|
"react-masonry-css",
|
|
6
7
|
"masonry-layout",
|
|
7
8
|
"react-masonry-component",
|
|
8
9
|
"muuri",
|
|
9
10
|
"react-photo-gallery",
|
|
11
|
+
"vue-masonry",
|
|
12
|
+
"vue-masonry-css",
|
|
10
13
|
],
|
|
11
14
|
featureIds: ["masonry"],
|
|
12
15
|
native: "CSS masonry item placement",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masonry.js","sourceRoot":"","sources":["../../src/rules/masonry.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,OAAO,GAAS;IAC3B,EAAE,EAAE,aAAa;IACjB,KAAK,EAAE,iBAAiB;IACxB,QAAQ,EAAE;QACR,mBAAmB;QACnB,gBAAgB;QAChB,yBAAyB;QACzB,OAAO;QACP,qBAAqB;
|
|
1
|
+
{"version":3,"file":"masonry.js","sourceRoot":"","sources":["../../src/rules/masonry.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,OAAO,GAAS;IAC3B,EAAE,EAAE,aAAa;IACjB,KAAK,EAAE,iBAAiB;IACxB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE;QACR,mBAAmB;QACnB,gBAAgB;QAChB,yBAAyB;QACzB,OAAO;QACP,qBAAqB;QACrB,aAAa;QACb,iBAAiB;KAClB;IACD,UAAU,EAAE,CAAC,SAAS,CAAC;IACvB,MAAM,EAAE,4BAA4B;IACpC,KAAK,EAAE;QACL,SAAS,EACP,wiBAAwiB;QAC1iB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;EAoBX;QACE,MAAM,EACJ,iFAAiF;KACpF;IACD,KAAK,EAAE;QACL,IAAI,EAAE,uFAAuF;QAC7F,MAAM,EAAE;YACN,8LAA8L;YAC9L,6EAA6E;YAC7E,iEAAiE;YACjE,yHAAyH;SAC1H;QACD,OAAO,EAAE;;;;;;;;EAQX;KACC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"natural-sort.d.ts","sourceRoot":"","sources":["../../src/rules/natural-sort.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,WAAW,EAAE,IAyCzB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export const naturalSort = {
|
|
2
|
+
id: "natural-sort",
|
|
3
|
+
title: "Natural and locale-aware sorting",
|
|
4
|
+
category: "formatting",
|
|
5
|
+
replaces: [
|
|
6
|
+
"natural-compare",
|
|
7
|
+
"natural-compare-lite",
|
|
8
|
+
"natural-orderby",
|
|
9
|
+
"string-natural-compare",
|
|
10
|
+
],
|
|
11
|
+
featureIds: ["intl"],
|
|
12
|
+
native: "Intl.Collator with numeric: true",
|
|
13
|
+
human: {
|
|
14
|
+
explainer: 'A plain sort() compares strings code unit by code unit, which puts "item10" before "item9" and files every accented word after z. Intl.Collator with numeric: true reads runs of digits as numbers and orders letters the way the locale expects. Passing collator.compare straight to sort() is also faster than a comparator that re-parses on every call, because the collator is built once.',
|
|
15
|
+
snippet: `const collator = new Intl.Collator("en", {
|
|
16
|
+
numeric: true,
|
|
17
|
+
sensitivity: "base",
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
["item10", "item9", "Item2"].sort(collator.compare);
|
|
21
|
+
// ["Item2", "item9", "item10"]
|
|
22
|
+
|
|
23
|
+
// Locale rules, not code unit order.
|
|
24
|
+
["Öl", "Oase", "Zebra"].sort(new Intl.Collator("de").compare);
|
|
25
|
+
// ["Oase", "Öl", "Zebra"]`,
|
|
26
|
+
mdnUrl: "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Collator",
|
|
27
|
+
},
|
|
28
|
+
agent: {
|
|
29
|
+
when: "sorting strings that contain numbers, or sorting for a human reader",
|
|
30
|
+
unless: [
|
|
31
|
+
"You need byte-identical output to the library's algorithm. Tie-breaking on case, punctuation and leading zeroes differs between implementations, so a snapshot test or a stored sort order will move.",
|
|
32
|
+
"The ordering has to match a server that sorts with a different collation, in which case the two need to agree on one algorithm rather than each picking its own.",
|
|
33
|
+
"You sort very large lists and measured Intl.Collator as too slow for the case. It is usually faster, but only when the collator is created once outside the sort.",
|
|
34
|
+
"You sort identifiers rather than text for people, where a stable code point order is the correct behaviour and locale rules would be wrong.",
|
|
35
|
+
"The package arrived as a direct dependency of your tooling rather than your application code, where removing it changes nothing that ships.",
|
|
36
|
+
],
|
|
37
|
+
snippet: `const collator = new Intl.Collator(undefined, { numeric: true });
|
|
38
|
+
list.sort(collator.compare);`,
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=natural-sort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"natural-sort.js","sourceRoot":"","sources":["../../src/rules/natural-sort.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAS;IAC/B,EAAE,EAAE,cAAc;IAClB,KAAK,EAAE,kCAAkC;IACzC,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE;QACR,iBAAiB;QACjB,sBAAsB;QACtB,iBAAiB;QACjB,wBAAwB;KACzB;IACD,UAAU,EAAE,CAAC,MAAM,CAAC;IACpB,MAAM,EAAE,kCAAkC;IAC1C,KAAK,EAAE;QACL,SAAS,EACP,kYAAkY;QACpY,OAAO,EAAE;;;;;;;;;;2BAUc;QACvB,MAAM,EACJ,gGAAgG;KACnG;IACD,KAAK,EAAE;QACL,IAAI,EAAE,qEAAqE;QAC3E,MAAM,EAAE;YACN,uMAAuM;YACvM,kKAAkK;YAClK,mKAAmK;YACnK,6IAA6I;YAC7I,6IAA6I;SAC9I;QACD,OAAO,EAAE;6BACgB;KAC1B;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-format.d.ts","sourceRoot":"","sources":["../../src/rules/number-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,YAAY,EAAE,IA4B1B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export const numberFormat = {
|
|
2
|
+
id: "number-format",
|
|
3
|
+
title: "Locale-aware number and currency formatting",
|
|
4
|
+
category: "formatting",
|
|
5
|
+
replaces: ["numeral", "accounting", "currency.js", "format-number"],
|
|
6
|
+
featureIds: ["intl"],
|
|
7
|
+
native: "Intl.NumberFormat",
|
|
8
|
+
human: {
|
|
9
|
+
explainer: "These libraries hardcode their own thousands separators, currency symbols, and rounding rules, and most ship a single locale by default. Intl.NumberFormat is the same formatting logic the operating system already has: pass a locale and a style, currency, percent, or unit, and it places the symbol, separator, and decimal grouping the way that locale actually expects, with no formatting rules to maintain.",
|
|
10
|
+
snippet: `new Intl.NumberFormat("en-US", {
|
|
11
|
+
style: "currency",
|
|
12
|
+
currency: "USD",
|
|
13
|
+
}).format(1234.5); // "$1,234.50"`,
|
|
14
|
+
mdnUrl: "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat",
|
|
15
|
+
},
|
|
16
|
+
agent: {
|
|
17
|
+
when: "formatting a number as currency, a percentage, or a locale-correct thousands-grouped number for display",
|
|
18
|
+
unless: [
|
|
19
|
+
'You format units or compact notation. style: "unit" and notation: "compact" arrived long after the rest of Intl.NumberFormat, in Chrome {{chrome:javascript.builtins.Intl.NumberFormat.NumberFormat.options_parameter.options_unit_parameter}}, Firefox {{firefox:javascript.builtins.Intl.NumberFormat.NumberFormat.options_parameter.options_unit_parameter}} and Safari {{safari:javascript.builtins.Intl.NumberFormat.NumberFormat.options_parameter.options_unit_parameter}}, so an older target does not get them.',
|
|
20
|
+
"You need safe decimal arithmetic, such as adding money values without floating-point rounding errors. currency.js and accounting.js do that math for you; Intl.NumberFormat only formats a number you already computed correctly.",
|
|
21
|
+
"You need to parse a formatted string back into a number. Intl.NumberFormat is format-only; these libraries often provide the reverse direction too.",
|
|
22
|
+
"You need a custom format pattern, such as a specific abbreviation style, that the options Intl.NumberFormat exposes cannot express.",
|
|
23
|
+
],
|
|
24
|
+
snippet: 'new Intl.NumberFormat("en-US", { style: "currency", currency: "USD" }).format(value);',
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=number-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-format.js","sourceRoot":"","sources":["../../src/rules/number-format.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAS;IAChC,EAAE,EAAE,eAAe;IACnB,KAAK,EAAE,6CAA6C;IACpD,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC;IACnE,UAAU,EAAE,CAAC,MAAM,CAAC;IACpB,MAAM,EAAE,mBAAmB;IAC3B,KAAK,EAAE;QACL,SAAS,EACP,wZAAwZ;QAC1Z,OAAO,EAAE;;;kCAGqB;QAC9B,MAAM,EACJ,oGAAoG;KACvG;IACD,KAAK,EAAE;QACL,IAAI,EAAE,yGAAyG;QAC/G,MAAM,EAAE;YACN,0fAA0f;YAC1f,mOAAmO;YACnO,qJAAqJ;YACrJ,qIAAqI;SACtI;QACD,OAAO,EACL,uFAAuF;KAC1F;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-visibility.d.ts","sourceRoot":"","sources":["../../src/rules/page-visibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,cAAc,EAAE,IA6B5B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export const pageVisibility = {
|
|
2
|
+
id: "page-visibility",
|
|
3
|
+
title: "Tab visibility",
|
|
4
|
+
category: "async-data",
|
|
5
|
+
replaces: ["react-page-visibility", "visibilityjs"],
|
|
6
|
+
featureIds: ["page-visibility"],
|
|
7
|
+
native: "document.visibilityState and the visibilitychange event",
|
|
8
|
+
human: {
|
|
9
|
+
explainer: "These libraries wrap document.visibilityState with framework-friendly plumbing around a value the browser already exposes. Reading it directly tells you whether the tab is the one the person is currently looking at, useful for pausing polling, video, or animation when it isn't.",
|
|
10
|
+
snippet: `document.addEventListener("visibilitychange", () => {
|
|
11
|
+
if (document.visibilityState === "hidden") pausePolling();
|
|
12
|
+
else resumePolling();
|
|
13
|
+
});`,
|
|
14
|
+
mdnUrl: "https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilitychange_event",
|
|
15
|
+
},
|
|
16
|
+
agent: {
|
|
17
|
+
when: "pausing or resuming work, such as polling or video playback, based on whether the tab is visible",
|
|
18
|
+
unless: [
|
|
19
|
+
"You need a framework hook's re-render-on-change ergonomics rather than an event listener you manage yourself.",
|
|
20
|
+
"You need to distinguish a window occluded by another window from a genuinely backgrounded tab. visibilityState only reports the latter.",
|
|
21
|
+
],
|
|
22
|
+
snippet: `document.addEventListener("visibilitychange", () => { ... });`,
|
|
23
|
+
},
|
|
24
|
+
guides: [
|
|
25
|
+
"detect-initial-visibility-state",
|
|
26
|
+
"calculate-total-foreground-time",
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=page-visibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-visibility.js","sourceRoot":"","sources":["../../src/rules/page-visibility.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAS;IAClC,EAAE,EAAE,iBAAiB;IACrB,KAAK,EAAE,gBAAgB;IACvB,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,CAAC,uBAAuB,EAAE,cAAc,CAAC;IACnD,UAAU,EAAE,CAAC,iBAAiB,CAAC;IAC/B,MAAM,EAAE,yDAAyD;IACjE,KAAK,EAAE;QACL,SAAS,EACP,wRAAwR;QAC1R,OAAO,EAAE;;;IAGT;QACA,MAAM,EACJ,kFAAkF;KACrF;IACD,KAAK,EAAE;QACL,IAAI,EAAE,kGAAkG;QACxG,MAAM,EAAE;YACN,+GAA+G;YAC/G,yIAAyI;SAC1I;QACD,OAAO,EAAE,+DAA+D;KACzE;IACD,MAAM,EAAE;QACN,iCAAiC;QACjC,iCAAiC;KAClC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../src/rules/popover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../src/rules/popover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,OAAO,EAAE,IAuErB,CAAC"}
|
package/dist/rules/popover.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export const popover = {
|
|
2
2
|
id: "popover-anchor-positioning",
|
|
3
3
|
title: "Tooltips, dropdowns and popovers",
|
|
4
|
+
category: "forms",
|
|
4
5
|
replaces: [
|
|
5
6
|
"@floating-ui/react",
|
|
6
7
|
"@floating-ui/react-dom",
|
|
@@ -11,6 +12,9 @@ export const popover = {
|
|
|
11
12
|
"@tippyjs/react",
|
|
12
13
|
"react-popper",
|
|
13
14
|
"react-tooltip",
|
|
15
|
+
"floating-vue",
|
|
16
|
+
"v-tooltip",
|
|
17
|
+
"@oddbird/popover-polyfill",
|
|
14
18
|
],
|
|
15
19
|
featureIds: ["popover", "anchor-positioning"],
|
|
16
20
|
native: "The Popover API with CSS anchor positioning",
|
|
@@ -41,7 +45,7 @@ export const popover = {
|
|
|
41
45
|
agent: {
|
|
42
46
|
when: "building a tooltip, dropdown menu or popover anchored to a trigger",
|
|
43
47
|
unless: [
|
|
44
|
-
"You need Baseline-level support for the positioning.
|
|
48
|
+
"You need Baseline-level support for the positioning. Anchor positioning is in all three engines now, but only from Chrome {{chrome:css.properties.anchor-name}}, Safari {{safari:css.properties.anchor-name}} and Firefox {{firefox:css.properties.anchor-name}}, so anything older needs a JavaScript fallback or a static position.",
|
|
45
49
|
"You need collision handling beyond position-try-fallbacks, such as shifting along an axis to stay in view rather than flipping.",
|
|
46
50
|
"You need an arrow that tracks the trigger across a flip.",
|
|
47
51
|
"A popover must stay open while a second one opens, or nest inside another. Auto popovers close their ancestors.",
|
|
@@ -59,5 +63,10 @@ export const popover = {
|
|
|
59
63
|
}
|
|
60
64
|
</style>`,
|
|
61
65
|
},
|
|
66
|
+
guides: [
|
|
67
|
+
"position-aware-tooltips",
|
|
68
|
+
"interest-triggered-tooltips",
|
|
69
|
+
"resilient-context-menus-and-nested-dropdowns",
|
|
70
|
+
],
|
|
62
71
|
};
|
|
63
72
|
//# sourceMappingURL=popover.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popover.js","sourceRoot":"","sources":["../../src/rules/popover.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,OAAO,GAAS;IAC3B,EAAE,EAAE,4BAA4B;IAChC,KAAK,EAAE,kCAAkC;IACzC,QAAQ,EAAE;QACR,oBAAoB;QACpB,wBAAwB;QACxB,kBAAkB;QAClB,gBAAgB;QAChB,WAAW;QACX,UAAU;QACV,gBAAgB;QAChB,cAAc;QACd,eAAe;
|
|
1
|
+
{"version":3,"file":"popover.js","sourceRoot":"","sources":["../../src/rules/popover.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,OAAO,GAAS;IAC3B,EAAE,EAAE,4BAA4B;IAChC,KAAK,EAAE,kCAAkC;IACzC,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE;QACR,oBAAoB;QACpB,wBAAwB;QACxB,kBAAkB;QAClB,gBAAgB;QAChB,WAAW;QACX,UAAU;QACV,gBAAgB;QAChB,cAAc;QACd,eAAe;QACf,cAAc;QACd,WAAW;QACX,2BAA2B;KAC5B;IACD,UAAU,EAAE,CAAC,SAAS,EAAE,oBAAoB,CAAC;IAC7C,MAAM,EAAE,6CAA6C;IACrD,KAAK,EAAE;QACL,SAAS,EACP,ugBAAugB;QACzgB,OAAO,EAAE;;;;;;;;;;;;;;;;;;SAkBJ;QACL,OAAO,EAAE,6CAA6C;QACtD,MAAM,EAAE,8DAA8D;KACvE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,oEAAoE;QAC1E,MAAM,EAAE;YACN,uUAAuU;YACvU,iIAAiI;YACjI,0DAA0D;YAC1D,iHAAiH;YACjH,uEAAuE;SACxE;QACD,OAAO,EAAE;;;;;;;;;;SAUJ;KACN;IACD,MAAM,EAAE;QACN,yBAAyB;QACzB,6BAA6B;QAC7B,8CAA8C;KAC/C;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random-uuid.d.ts","sourceRoot":"","sources":["../../src/rules/random-uuid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,UAAU,EAAE,IA+BxB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export const randomUuid = {
|
|
2
|
+
id: "random-uuid",
|
|
3
|
+
title: "Generating UUIDs",
|
|
4
|
+
category: "async-data",
|
|
5
|
+
replaces: ["uuid", "uuidv4", "@lukeed/uuid", "uuid-random"],
|
|
6
|
+
featureIds: [],
|
|
7
|
+
manualBaseline: {
|
|
8
|
+
status: "widely",
|
|
9
|
+
verifiedOn: "2026-09-06",
|
|
10
|
+
note: "web-features has no ID for crypto.randomUUID() on its own. The nearest is 'web-cryptography', which spans the whole Web Crypto API and reports Safari {{safari:web-cryptography}}, where randomUUID needs Safari {{safari:api.Crypto.randomUUID}}, Chrome {{chrome:api.Crypto.randomUUID}} and Firefox {{firefox:api.Crypto.randomUUID}}. Deriving from that ID would publish a support table this rule cannot honour. The tier is widely available on the method's own dates: Safari {{safari:api.Crypto.randomUUID}} shipped in March 2022.",
|
|
11
|
+
},
|
|
12
|
+
native: "crypto.randomUUID()",
|
|
13
|
+
human: {
|
|
14
|
+
explainer: "The uuid package exists because producing a v4 identifier used to mean pulling random bytes and formatting the hyphens by hand. crypto.randomUUID() returns the finished string from the same cryptographically strong source the library uses, with nothing to import and nothing to bundle. Every current browser has it, and Node exposes it on the global crypto object from v19 and on node:crypto well before that.",
|
|
15
|
+
snippet: `const id = crypto.randomUUID();
|
|
16
|
+
// "36b8f84d-df4e-4d49-b662-bcde71a8764f"`,
|
|
17
|
+
mdnUrl: "https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID",
|
|
18
|
+
},
|
|
19
|
+
agent: {
|
|
20
|
+
when: "generating a random v4 UUID",
|
|
21
|
+
unless: [
|
|
22
|
+
"You need a version other than 4. randomUUID only makes v4, so v1, v5 and v7 still need the library, and v7 sorting by creation time is a common reason to want it.",
|
|
23
|
+
"You parse, validate or stringify UUIDs you already have. The library exports validate(), parse() and stringify(); the platform covers generation only.",
|
|
24
|
+
"The code runs on plain http somewhere other than localhost. randomUUID is only defined in a secure context, so an insecure page throws a TypeError.",
|
|
25
|
+
"You support browsers below Chrome {{chrome:api.Crypto.randomUUID}}, Firefox {{firefox:api.Crypto.randomUUID}} or Safari {{safari:api.Crypto.randomUUID}}. randomUUID landed years later than the rest of Web Crypto, so the surrounding API being present is not proof this method is.",
|
|
26
|
+
"You need identifiers shorter or differently shaped than a 36-character UUID, which is what nanoid and short-uuid are for.",
|
|
27
|
+
],
|
|
28
|
+
snippet: "const id = crypto.randomUUID();",
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=random-uuid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random-uuid.js","sourceRoot":"","sources":["../../src/rules/random-uuid.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,EAAE,EAAE,aAAa;IACjB,KAAK,EAAE,kBAAkB;IACzB,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,CAAC;IAC3D,UAAU,EAAE,EAAE;IACd,cAAc,EAAE;QACd,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,YAAY;QACxB,IAAI,EAAE,+gBAA+gB;KACthB;IACD,MAAM,EAAE,qBAAqB;IAC7B,KAAK,EAAE;QACL,SAAS,EACP,2ZAA2Z;QAC7Z,OAAO,EAAE;0CAC6B;QACtC,MAAM,EACJ,oEAAoE;KACvE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,6BAA6B;QACnC,MAAM,EAAE;YACN,oKAAoK;YACpK,wJAAwJ;YACxJ,qJAAqJ;YACrJ,wRAAwR;YACxR,2HAA2H;SAC5H;QACD,OAAO,EAAE,iCAAiC;KAC3C;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relative-time.d.ts","sourceRoot":"","sources":["../../src/rules/relative-time.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,YAAY,EAAE,IAyB1B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const relativeTime = {
|
|
2
|
+
id: "relative-time",
|
|
3
|
+
title: "Relative time formatting",
|
|
4
|
+
category: "formatting",
|
|
5
|
+
replaces: ["javascript-time-ago", "timeago.js", "react-timeago"],
|
|
6
|
+
featureIds: ["intl-relative-time-format"],
|
|
7
|
+
native: "Intl.RelativeTimeFormat",
|
|
8
|
+
human: {
|
|
9
|
+
explainer: 'These libraries hardcode the phrasing for every locale they support: "5 minutes ago", "in 2 days", and all the plural and grammar rules behind them. Intl.RelativeTimeFormat is that same locale data, shipped inside the browser and kept current by the platform instead of a dependency you update by hand.',
|
|
10
|
+
snippet: `const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
|
|
11
|
+
rtf.format(-5, "minute"); // "5 minutes ago"`,
|
|
12
|
+
mdnUrl: "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat",
|
|
13
|
+
},
|
|
14
|
+
agent: {
|
|
15
|
+
when: 'formatting a timestamp as relative text, such as "5 minutes ago" or "in 2 days"',
|
|
16
|
+
unless: [
|
|
17
|
+
'You need the value to keep ticking on its own, updating from "5 seconds ago" to "6 seconds ago" without a re-render you trigger yourself. Intl.RelativeTimeFormat only formats a value you pass it once; the scheduling these libraries add is still real code.',
|
|
18
|
+
'You need to pick the unit automatically from a raw millisecond difference. Intl.RelativeTimeFormat takes a number and a unit you already chose, such as "day" or "hour", not a duration it breaks down for you.',
|
|
19
|
+
"You need a locale Intl's relative-time data doesn't cover well on your target browsers, or offline locale data bundled ahead of time.",
|
|
20
|
+
],
|
|
21
|
+
snippet: 'new Intl.RelativeTimeFormat("en", { numeric: "auto" }).format(-5, "minute");',
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=relative-time.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relative-time.js","sourceRoot":"","sources":["../../src/rules/relative-time.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAS;IAChC,EAAE,EAAE,eAAe;IACnB,KAAK,EAAE,0BAA0B;IACjC,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,CAAC,qBAAqB,EAAE,YAAY,EAAE,eAAe,CAAC;IAChE,UAAU,EAAE,CAAC,2BAA2B,CAAC;IACzC,MAAM,EAAE,yBAAyB;IACjC,KAAK,EAAE;QACL,SAAS,EACP,gTAAgT;QAClT,OAAO,EAAE;6CACgC;QACzC,MAAM,EACJ,0GAA0G;KAC7G;IACD,KAAK,EAAE;QACL,IAAI,EAAE,iFAAiF;QACvF,MAAM,EAAE;YACN,iQAAiQ;YACjQ,iNAAiN;YACjN,uIAAuI;SACxI;QACD,OAAO,EACL,8EAA8E;KACjF;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resizable-panels.d.ts","sourceRoot":"","sources":["../../src/rules/resizable-panels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"resizable-panels.d.ts","sourceRoot":"","sources":["../../src/rules/resizable-panels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,eAAe,EAAE,IA+B7B,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export const resizablePanels = {
|
|
2
2
|
id: "resizable-panels",
|
|
3
3
|
title: "Resizable panels",
|
|
4
|
-
|
|
4
|
+
category: "layout",
|
|
5
|
+
replaces: ["re-resizable"],
|
|
5
6
|
featureIds: ["resize"],
|
|
6
7
|
native: "resize",
|
|
7
8
|
human: {
|
|
@@ -17,7 +18,8 @@ export const resizablePanels = {
|
|
|
17
18
|
agent: {
|
|
18
19
|
when: "letting someone drag-resize a single panel, such as a sidebar or a textarea",
|
|
19
20
|
unless: [
|
|
20
|
-
"
|
|
21
|
+
"The panels have to be resizable on a phone. Safari on iOS does not implement the resize property at all, so the handle simply is not there.",
|
|
22
|
+
"You need the block/inline logical values rather than horizontal/vertical/both. Those reached Chrome {{chrome:css.properties.resize.block}}, Firefox {{firefox:css.properties.resize.block}} and Safari {{safari:css.properties.resize.block}}; the classic physical-direction values have been supported everywhere for over a decade.",
|
|
21
23
|
"You need multiple panels to resize together, such as a split view where dragging one edge shrinks its neighbor. resize only affects the element it is set on.",
|
|
22
24
|
"You need to read back or persist the size someone chose. resize has no resize event; ResizeObserver still covers that, and it is a JavaScript API, not CSS.",
|
|
23
25
|
"You need to style the drag handle itself, or place it somewhere other than the element's edge or corner. The native handle's appearance is fixed.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resizable-panels.js","sourceRoot":"","sources":["../../src/rules/resizable-panels.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,EAAE,EAAE,kBAAkB;IACtB,KAAK,EAAE,kBAAkB;IACzB,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"resizable-panels.js","sourceRoot":"","sources":["../../src/rules/resizable-panels.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,EAAE,EAAE,kBAAkB;IACtB,KAAK,EAAE,kBAAkB;IACzB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,CAAC,cAAc,CAAC;IAC1B,UAAU,EAAE,CAAC,QAAQ,CAAC;IACtB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE;QACL,SAAS,EACP,ubAAub;QACzb,OAAO,EAAE;;;;;EAKX;QACE,MAAM,EAAE,yDAAyD;KAClE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,6EAA6E;QACnF,MAAM,EAAE;YACN,6IAA6I;YAC7I,wUAAwU;YACxU,+JAA+J;YAC/J,6JAA6J;YAC7J,mJAAmJ;YACnJ,uJAAuJ;SACxJ;QACD,OAAO,EACL,sFAAsF;KACzF;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resize-observer.d.ts","sourceRoot":"","sources":["../../src/rules/resize-observer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,cAAc,EAAE,IA2B5B,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const resizeObserver = {
|
|
2
|
+
id: "resize-observer",
|
|
3
|
+
title: "Element resize tracking",
|
|
4
|
+
category: "async-data",
|
|
5
|
+
replaces: ["resize-observer-polyfill", "@juggle/resize-observer"],
|
|
6
|
+
featureIds: ["resize-observer"],
|
|
7
|
+
native: "ResizeObserver",
|
|
8
|
+
human: {
|
|
9
|
+
explainer: "These polyfills exist because ResizeObserver had gaps in browser support. That gap closed years ago: every major engine ships it natively now. Calling it directly watches an element's box for size changes and calls you back, with no listener on window resize and no manual layout math.",
|
|
10
|
+
snippet: `const observer = new ResizeObserver((entries) => {
|
|
11
|
+
for (const entry of entries) {
|
|
12
|
+
console.log(entry.contentBoxSize);
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
observer.observe(document.querySelector("#panel"));`,
|
|
16
|
+
mdnUrl: "https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver",
|
|
17
|
+
},
|
|
18
|
+
agent: {
|
|
19
|
+
when: "running code when an element's own box changes size, not just the viewport",
|
|
20
|
+
unless: [
|
|
21
|
+
"You need a framework hook's ergonomics, such as a ref and a reactive size value, rather than managing an observer instance yourself.",
|
|
22
|
+
"You're targeting an engine old enough that the polyfill's manual measurement fallback is still doing real work.",
|
|
23
|
+
"You need devicePixelContentBoxSize specifically. Chrome has it from {{chrome:api.ResizeObserverEntry.devicePixelContentBoxSize}} and Firefox from {{firefox:api.ResizeObserverEntry.devicePixelContentBoxSize}}, but Safari does not implement it at all.",
|
|
24
|
+
],
|
|
25
|
+
snippet: "new ResizeObserver((entries) => { ... }).observe(el);",
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=resize-observer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resize-observer.js","sourceRoot":"","sources":["../../src/rules/resize-observer.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAS;IAClC,EAAE,EAAE,iBAAiB;IACrB,KAAK,EAAE,yBAAyB;IAChC,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,CAAC,0BAA0B,EAAE,yBAAyB,CAAC;IACjE,UAAU,EAAE,CAAC,iBAAiB,CAAC;IAC/B,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE;QACL,SAAS,EACP,+RAA+R;QACjS,OAAO,EAAE;;;;;oDAKuC;QAChD,MAAM,EAAE,iEAAiE;KAC1E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,4EAA4E;QAClF,MAAM,EAAE;YACN,sIAAsI;YACtI,iHAAiH;YACjH,2PAA2P;SAC5P;QACD,OAAO,EAAE,uDAAuD;KACjE;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-wake-lock.d.ts","sourceRoot":"","sources":["../../src/rules/screen-wake-lock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,cAAc,EAAE,IAyB5B,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export const screenWakeLock = {
|
|
2
|
+
id: "screen-wake-lock",
|
|
3
|
+
title: "Keeping the screen awake",
|
|
4
|
+
category: "device-apis",
|
|
5
|
+
replaces: ["nosleep.js", "react-use-wake-lock"],
|
|
6
|
+
featureIds: ["screen-wake-lock"],
|
|
7
|
+
native: 'navigator.wakeLock.request("screen")',
|
|
8
|
+
human: {
|
|
9
|
+
explainer: "nosleep.js kept the screen on with a trick: playing a silent, invisible video, because there was no direct way to ask for this. The Wake Lock API asks directly, and releases automatically when the tab is backgrounded rather than needing you to remember to stop the video yourself.",
|
|
10
|
+
snippet: `const lock = await navigator.wakeLock.request("screen");
|
|
11
|
+
// later, or automatically when the tab backgrounds
|
|
12
|
+
await lock.release();`,
|
|
13
|
+
mdnUrl: "https://developer.mozilla.org/en-US/docs/Web/API/Screen_Wake_Lock_API",
|
|
14
|
+
},
|
|
15
|
+
agent: {
|
|
16
|
+
when: "keeping the screen from sleeping while a page is active, such as during a recipe, presentation, or workout",
|
|
17
|
+
unless: [
|
|
18
|
+
"You support Safari below {{safari:api.WakeLock}} on desktop or below {{safari_ios:api.WakeLock}} on iOS. The phone cases this rule is for, a recipe or a workout screen, are exactly the ones iOS was last to allow.",
|
|
19
|
+
"You need the lock to survive the tab losing focus. The platform releases it the moment the tab backgrounds, with no way to opt out, so a library that re-acquires on visibilitychange is doing real work.",
|
|
20
|
+
"You need this in a non-secure (non-HTTPS) context, where the API isn't available at all.",
|
|
21
|
+
],
|
|
22
|
+
snippet: `const lock = await navigator.wakeLock.request("screen");`,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=screen-wake-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-wake-lock.js","sourceRoot":"","sources":["../../src/rules/screen-wake-lock.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAS;IAClC,EAAE,EAAE,kBAAkB;IACtB,KAAK,EAAE,0BAA0B;IACjC,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,CAAC,YAAY,EAAE,qBAAqB,CAAC;IAC/C,UAAU,EAAE,CAAC,kBAAkB,CAAC;IAChC,MAAM,EAAE,sCAAsC;IAC9C,KAAK,EAAE;QACL,SAAS,EACP,0RAA0R;QAC5R,OAAO,EAAE;;sBAES;QAClB,MAAM,EACJ,uEAAuE;KAC1E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,4GAA4G;QAClH,MAAM,EAAE;YACN,sNAAsN;YACtN,2MAA2M;YAC3M,0FAA0F;SAC3F;QACD,OAAO,EAAE,0DAA0D;KACpE;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll-animations.d.ts","sourceRoot":"","sources":["../../src/rules/scroll-animations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"scroll-animations.d.ts","sourceRoot":"","sources":["../../src/rules/scroll-animations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,gBAAgB,EAAE,IAmE9B,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export const scrollAnimations = {
|
|
2
2
|
id: "scroll-driven-animations",
|
|
3
3
|
title: "Scroll-triggered animations",
|
|
4
|
+
category: "animation",
|
|
4
5
|
replaces: ["aos", "scrollreveal", "wowjs", "wow.js", "scrollmagic", "rellax"],
|
|
5
6
|
featureIds: ["scroll-driven-animations"],
|
|
6
7
|
native: "animation-timeline: view() and scroll()",
|
|
@@ -40,7 +41,7 @@ export const scrollAnimations = {
|
|
|
40
41
|
agent: {
|
|
41
42
|
when: "fading or moving elements in as they scroll into view, or driving a reading-progress bar",
|
|
42
43
|
unless: [
|
|
43
|
-
"You need
|
|
44
|
+
"You need Firefox support. Chrome {{chrome:scroll-driven-animations}} and Safari {{safari:scroll-driven-animations}} ship scroll-driven animations but Firefox does not, so wrap them in @supports and make sure the un-animated state is the visible one.",
|
|
44
45
|
"You need a callback in JavaScript when an element enters view, for analytics, lazy loading or infinite scroll. That is what IntersectionObserver is for and CSS does not replace it.",
|
|
45
46
|
"You need to animate something that is not a descendant of, or a sibling reachable from, the scrolling element. Timeline scope is limited.",
|
|
46
47
|
"The animation must run once and stay put. A view timeline is scrubbed, so it reverses when the user scrolls back up.",
|
|
@@ -55,5 +56,12 @@ export const scrollAnimations = {
|
|
|
55
56
|
}
|
|
56
57
|
}`,
|
|
57
58
|
},
|
|
59
|
+
guides: [
|
|
60
|
+
"parallax-scroll-effects",
|
|
61
|
+
"scrollytelling",
|
|
62
|
+
"scroll-entry-exit-effects",
|
|
63
|
+
"scroll-progress-indicator",
|
|
64
|
+
"shrinking-header-on-scroll",
|
|
65
|
+
],
|
|
58
66
|
};
|
|
59
67
|
//# sourceMappingURL=scroll-animations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll-animations.js","sourceRoot":"","sources":["../../src/rules/scroll-animations.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAS;IACpC,EAAE,EAAE,0BAA0B;IAC9B,KAAK,EAAE,6BAA6B;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC;IAC7E,UAAU,EAAE,CAAC,0BAA0B,CAAC;IACxC,MAAM,EAAE,yCAAyC;IACjD,KAAK,EAAE;QACL,SAAS,EACP,ugBAAugB;QACzgB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BX;QACE,MAAM,EACJ,qEAAqE;KACxE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,0FAA0F;QAChG,MAAM,EAAE;YACN,
|
|
1
|
+
{"version":3,"file":"scroll-animations.js","sourceRoot":"","sources":["../../src/rules/scroll-animations.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAS;IACpC,EAAE,EAAE,0BAA0B;IAC9B,KAAK,EAAE,6BAA6B;IACpC,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC;IAC7E,UAAU,EAAE,CAAC,0BAA0B,CAAC;IACxC,MAAM,EAAE,yCAAyC;IACjD,KAAK,EAAE;QACL,SAAS,EACP,ugBAAugB;QACzgB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BX;QACE,MAAM,EACJ,qEAAqE;KACxE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,0FAA0F;QAChG,MAAM,EAAE;YACN,2PAA2P;YAC3P,sLAAsL;YACtL,2IAA2I;YAC3I,sHAAsH;YACtH,4IAA4I;SAC7I;QACD,OAAO,EAAE;;;;;;;EAOX;KACC;IACD,MAAM,EAAE;QACN,yBAAyB;QACzB,gBAAgB;QAChB,2BAA2B;QAC3B,2BAA2B;QAC3B,4BAA4B;KAC7B;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll-lock.d.ts","sourceRoot":"","sources":["../../src/rules/scroll-lock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"scroll-lock.d.ts","sourceRoot":"","sources":["../../src/rules/scroll-lock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,UAAU,EAAE,IA0CxB,CAAC"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
export const scrollLock = {
|
|
2
2
|
id: "overscroll-behavior",
|
|
3
3
|
title: "Scroll chaining and body scroll lock",
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
category: "scrolling",
|
|
5
|
+
replaces: ["body-scroll-lock"],
|
|
6
|
+
featureIds: [],
|
|
7
|
+
manualBaseline: {
|
|
8
|
+
status: "widely",
|
|
9
|
+
verifiedOn: "2026-09-06",
|
|
10
|
+
note: "web-features rolls the logical longhands (overscroll-behavior-block and -inline) into the 'overscroll-behavior' ID, which reports Chrome {{chrome:overscroll-behavior}}, Firefox {{firefox:overscroll-behavior}} and no Safari at all. All this rule uses is overscroll-behavior: contain, which BCD puts at Chrome {{chrome:css.properties.overscroll-behavior.contain}}, Firefox {{firefox:css.properties.overscroll-behavior.contain}} and Safari {{safari:css.properties.overscroll-behavior.contain}}. Deriving from that ID would badge a technique every engine has had for years as limited availability.",
|
|
11
|
+
},
|
|
11
12
|
native: "overscroll-behavior: contain",
|
|
12
13
|
human: {
|
|
13
14
|
explainer: "Reaching the end of a scrollable modal and having the page behind it start scrolling is scroll chaining. overscroll-behavior: contain stops the scroll at that boundary, which is the behaviour body-scroll-lock reimplements by fixing the body and compensating for the scrollbar. contain also disables pull-to-refresh inside that element, which is usually what you want in a drawer. Note that a modal opened with showModal() already blocks background scrolling, so check whether you need this at all.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll-lock.js","sourceRoot":"","sources":["../../src/rules/scroll-lock.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,EAAE,EAAE,qBAAqB;IACzB,KAAK,EAAE,sCAAsC;IAC7C,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"scroll-lock.js","sourceRoot":"","sources":["../../src/rules/scroll-lock.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,EAAE,EAAE,qBAAqB;IACzB,KAAK,EAAE,sCAAsC;IAC7C,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,CAAC,kBAAkB,CAAC;IAC9B,UAAU,EAAE,EAAE;IACd,cAAc,EAAE;QACd,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,YAAY;QACxB,IAAI,EAAE,mlBAAmlB;KAC1lB;IACD,MAAM,EAAE,8BAA8B;IACtC,KAAK,EAAE;QACL,SAAS,EACP,mfAAmf;QACrf,OAAO,EAAE;;;;;;;;;;EAUX;QACE,MAAM,EACJ,sEAAsE;KACzE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,4FAA4F;QAClG,MAAM,EAAE;YACN,0KAA0K;YAC1K,2MAA2M;YAC3M,0IAA0I;YAC1I,kFAAkF;SACnF;QACD,OAAO,EAAE;;;EAGX;KACC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollbars.d.ts","sourceRoot":"","sources":["../../src/rules/scrollbars.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"scrollbars.d.ts","sourceRoot":"","sources":["../../src/rules/scrollbars.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,UAAU,EAAE,IAoDxB,CAAC"}
|
package/dist/rules/scrollbars.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export const scrollbars = {
|
|
2
2
|
id: "styled-scrollbars",
|
|
3
3
|
title: "Styled scrollbars",
|
|
4
|
+
category: "scrolling",
|
|
4
5
|
replaces: [
|
|
5
6
|
"react-custom-scrollbars",
|
|
6
7
|
"react-custom-scrollbars-2",
|
|
@@ -9,6 +10,9 @@ export const scrollbars = {
|
|
|
9
10
|
"overlayscrollbars",
|
|
10
11
|
"overlayscrollbars-react",
|
|
11
12
|
"perfect-scrollbar",
|
|
13
|
+
"vue-perfect-scrollbar",
|
|
14
|
+
"overlayscrollbars-vue",
|
|
15
|
+
"ngx-perfect-scrollbar",
|
|
12
16
|
],
|
|
13
17
|
featureIds: ["scrollbar-width", "scrollbar-color", "scrollbar-gutter"],
|
|
14
18
|
native: "scrollbar-width, scrollbar-color and scrollbar-gutter",
|
|
@@ -41,5 +45,9 @@ html {
|
|
|
41
45
|
scrollbar-color: #666 transparent;
|
|
42
46
|
}`,
|
|
43
47
|
},
|
|
48
|
+
guides: [
|
|
49
|
+
"customize-scrollbar-color-and-thickness",
|
|
50
|
+
"adapt-scrollbar-to-contrast-preferences",
|
|
51
|
+
],
|
|
44
52
|
};
|
|
45
53
|
//# sourceMappingURL=scrollbars.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollbars.js","sourceRoot":"","sources":["../../src/rules/scrollbars.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,EAAE,EAAE,mBAAmB;IACvB,KAAK,EAAE,mBAAmB;IAC1B,QAAQ,EAAE;QACR,yBAAyB;QACzB,2BAA2B;QAC3B,WAAW;QACX,iBAAiB;QACjB,mBAAmB;QACnB,yBAAyB;QACzB,mBAAmB;
|
|
1
|
+
{"version":3,"file":"scrollbars.js","sourceRoot":"","sources":["../../src/rules/scrollbars.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,EAAE,EAAE,mBAAmB;IACvB,KAAK,EAAE,mBAAmB;IAC1B,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE;QACR,yBAAyB;QACzB,2BAA2B;QAC3B,WAAW;QACX,iBAAiB;QACjB,mBAAmB;QACnB,yBAAyB;QACzB,mBAAmB;QACnB,uBAAuB;QACvB,uBAAuB;QACvB,uBAAuB;KACxB;IACD,UAAU,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,CAAC;IACtE,MAAM,EAAE,uDAAuD;IAC/D,KAAK,EAAE;QACL,SAAS,EACP,wdAAwd;QAC1d,OAAO,EAAE;;;;;;;;;;EAUX;QACE,MAAM,EAAE,kEAAkE;KAC3E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,gGAAgG;QACtG,MAAM,EAAE;YACN,iMAAiM;YACjM,yGAAyG;YACzG,6HAA6H;YAC7H,iHAAiH;SAClH;QACD,OAAO,EAAE;;;;EAIX;KACC;IACD,MAAM,EAAE;QACN,yCAAyC;QACzC,yCAAyC;KAC1C;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/rules/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/rules/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,MAAM,EAAE,IAsEpB,CAAC"}
|
package/dist/rules/select.js
CHANGED
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
export const select = {
|
|
2
2
|
id: "customizable-select",
|
|
3
3
|
title: "Custom select menus",
|
|
4
|
-
|
|
4
|
+
category: "forms",
|
|
5
|
+
replaces: [
|
|
6
|
+
"react-select",
|
|
7
|
+
"choices.js",
|
|
8
|
+
"select2",
|
|
9
|
+
"tom-select",
|
|
10
|
+
"vue-select",
|
|
11
|
+
"vue-multiselect",
|
|
12
|
+
"@ng-select/ng-select",
|
|
13
|
+
"svelte-select",
|
|
14
|
+
],
|
|
5
15
|
featureIds: ["customizable-select"],
|
|
6
16
|
native: "appearance: base-select on <select>",
|
|
7
17
|
human: {
|
|
@@ -51,5 +61,11 @@ export const select = {
|
|
|
51
61
|
select, select::picker(select) { appearance: base-select; }
|
|
52
62
|
</style>`,
|
|
53
63
|
},
|
|
64
|
+
guides: [
|
|
65
|
+
"animated-select-picker",
|
|
66
|
+
"branded-select-styling",
|
|
67
|
+
"custom-select-picker-layouts",
|
|
68
|
+
"select-menu-interaction",
|
|
69
|
+
],
|
|
54
70
|
};
|
|
55
71
|
//# sourceMappingURL=select.js.map
|
package/dist/rules/select.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/rules/select.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAS;IAC1B,EAAE,EAAE,qBAAqB;IACzB,KAAK,EAAE,qBAAqB;IAC5B,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/rules/select.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAS;IAC1B,EAAE,EAAE,qBAAqB;IACzB,KAAK,EAAE,qBAAqB;IAC5B,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE;QACR,cAAc;QACd,YAAY;QACZ,SAAS;QACT,YAAY;QACZ,YAAY;QACZ,iBAAiB;QACjB,sBAAsB;QACtB,eAAe;KAChB;IACD,UAAU,EAAE,CAAC,qBAAqB,CAAC;IACnC,MAAM,EAAE,qCAAqC;IAC7C,KAAK,EAAE;QACL,SAAS,EACP,+YAA+Y;QACjZ,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;SA0BJ;QACL,MAAM,EAAE,6DAA6D;KACtE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,4EAA4E;QAClF,MAAM,EAAE;YACN,0LAA0L;YAC1L,qFAAqF;YACrF,gLAAgL;YAChL,qEAAqE;SACtE;QACD,OAAO,EAAE;;;;;;SAMJ;KACN;IACD,MAAM,EAAE;QACN,wBAAwB;QACxB,wBAAwB;QACxB,8BAA8B;QAC9B,yBAAyB;KAC1B;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-sent-events.d.ts","sourceRoot":"","sources":["../../src/rules/server-sent-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,gBAAgB,EAAE,IAqC9B,CAAC"}
|