@jomae/catalog 0.7.0 → 0.9.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.
Files changed (189) hide show
  1. package/dist/generated/baseline-history.js +4 -4
  2. package/dist/generated/baseline.d.ts.map +1 -1
  3. package/dist/generated/baseline.js +113 -1
  4. package/dist/generated/baseline.js.map +1 -1
  5. package/dist/generated/guides.d.ts.map +1 -1
  6. package/dist/generated/guides.js +6 -2
  7. package/dist/generated/guides.js.map +1 -1
  8. package/dist/generated/lint-rules.d.ts +26 -0
  9. package/dist/generated/lint-rules.d.ts.map +1 -0
  10. package/dist/generated/lint-rules.js +361 -0
  11. package/dist/generated/lint-rules.js.map +1 -0
  12. package/dist/generated/sizes.d.ts.map +1 -1
  13. package/dist/generated/sizes.js +128 -13
  14. package/dist/generated/sizes.js.map +1 -1
  15. package/dist/generated/support-claims.d.ts.map +1 -1
  16. package/dist/generated/support-claims.js +7 -1
  17. package/dist/generated/support-claims.js.map +1 -1
  18. package/dist/index.d.ts +2 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +2 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/lint.d.ts +53 -0
  23. package/dist/lint.d.ts.map +1 -0
  24. package/dist/lint.js +41 -0
  25. package/dist/lint.js.map +1 -0
  26. package/dist/markdown.d.ts +7 -0
  27. package/dist/markdown.d.ts.map +1 -1
  28. package/dist/markdown.js +81 -2
  29. package/dist/markdown.js.map +1 -1
  30. package/dist/rules/abort-controller.d.ts.map +1 -1
  31. package/dist/rules/abort-controller.js +3 -0
  32. package/dist/rules/abort-controller.js.map +1 -1
  33. package/dist/rules/accordion.d.ts.map +1 -1
  34. package/dist/rules/accordion.js +3 -0
  35. package/dist/rules/accordion.js.map +1 -1
  36. package/dist/rules/array-grouping.d.ts.map +1 -1
  37. package/dist/rules/array-grouping.js +1 -0
  38. package/dist/rules/array-grouping.js.map +1 -1
  39. package/dist/rules/aspect-ratio.d.ts.map +1 -1
  40. package/dist/rules/aspect-ratio.js +4 -0
  41. package/dist/rules/aspect-ratio.js.map +1 -1
  42. package/dist/rules/base64.d.ts.map +1 -1
  43. package/dist/rules/base64.js +3 -0
  44. package/dist/rules/base64.js.map +1 -1
  45. package/dist/rules/broadcast-channel.d.ts.map +1 -1
  46. package/dist/rules/broadcast-channel.js +3 -0
  47. package/dist/rules/broadcast-channel.js.map +1 -1
  48. package/dist/rules/carousel.d.ts.map +1 -1
  49. package/dist/rules/carousel.js +5 -0
  50. package/dist/rules/carousel.js.map +1 -1
  51. package/dist/rules/clipboard.d.ts.map +1 -1
  52. package/dist/rules/clipboard.js +3 -0
  53. package/dist/rules/clipboard.js.map +1 -1
  54. package/dist/rules/container-queries.d.ts.map +1 -1
  55. package/dist/rules/container-queries.js +3 -0
  56. package/dist/rules/container-queries.js.map +1 -1
  57. package/dist/rules/date-time-input.d.ts.map +1 -1
  58. package/dist/rules/date-time-input.js +4 -0
  59. package/dist/rules/date-time-input.js.map +1 -1
  60. package/dist/rules/dialog.d.ts.map +1 -1
  61. package/dist/rules/dialog.js +4 -0
  62. package/dist/rules/dialog.js.map +1 -1
  63. package/dist/rules/discrete-transitions.d.ts.map +1 -1
  64. package/dist/rules/discrete-transitions.js +4 -0
  65. package/dist/rules/discrete-transitions.js.map +1 -1
  66. package/dist/rules/display-names.d.ts +3 -0
  67. package/dist/rules/display-names.d.ts.map +1 -0
  68. package/dist/rules/display-names.js +33 -0
  69. package/dist/rules/display-names.js.map +1 -0
  70. package/dist/rules/duration-format.d.ts.map +1 -1
  71. package/dist/rules/duration-format.js +3 -0
  72. package/dist/rules/duration-format.js.map +1 -1
  73. package/dist/rules/event-target.d.ts.map +1 -1
  74. package/dist/rules/event-target.js +1 -0
  75. package/dist/rules/event-target.js.map +1 -1
  76. package/dist/rules/focus-visible.d.ts.map +1 -1
  77. package/dist/rules/focus-visible.js +4 -0
  78. package/dist/rules/focus-visible.js.map +1 -1
  79. package/dist/rules/fullscreen.d.ts.map +1 -1
  80. package/dist/rules/fullscreen.js +3 -0
  81. package/dist/rules/fullscreen.js.map +1 -1
  82. package/dist/rules/height-animation.d.ts.map +1 -1
  83. package/dist/rules/height-animation.js +4 -0
  84. package/dist/rules/height-animation.js.map +1 -1
  85. package/dist/rules/index.d.ts.map +1 -1
  86. package/dist/rules/index.js +16 -0
  87. package/dist/rules/index.js.map +1 -1
  88. package/dist/rules/inert.d.ts.map +1 -1
  89. package/dist/rules/inert.js +4 -0
  90. package/dist/rules/inert.js.map +1 -1
  91. package/dist/rules/intersection-observer.d.ts.map +1 -1
  92. package/dist/rules/intersection-observer.js +1 -0
  93. package/dist/rules/intersection-observer.js.map +1 -1
  94. package/dist/rules/lazy-loading.d.ts.map +1 -1
  95. package/dist/rules/lazy-loading.js +4 -0
  96. package/dist/rules/lazy-loading.js.map +1 -1
  97. package/dist/rules/line-clamp.d.ts.map +1 -1
  98. package/dist/rules/line-clamp.js +4 -0
  99. package/dist/rules/line-clamp.js.map +1 -1
  100. package/dist/rules/list-format.d.ts +3 -0
  101. package/dist/rules/list-format.d.ts.map +1 -0
  102. package/dist/rules/list-format.js +37 -0
  103. package/dist/rules/list-format.js.map +1 -0
  104. package/dist/rules/masonry.d.ts.map +1 -1
  105. package/dist/rules/masonry.js +4 -0
  106. package/dist/rules/masonry.js.map +1 -1
  107. package/dist/rules/natural-sort.d.ts.map +1 -1
  108. package/dist/rules/natural-sort.js +4 -0
  109. package/dist/rules/natural-sort.js.map +1 -1
  110. package/dist/rules/number-format.d.ts.map +1 -1
  111. package/dist/rules/number-format.js +4 -0
  112. package/dist/rules/number-format.js.map +1 -1
  113. package/dist/rules/page-visibility.d.ts.map +1 -1
  114. package/dist/rules/page-visibility.js +3 -0
  115. package/dist/rules/page-visibility.js.map +1 -1
  116. package/dist/rules/popover.d.ts.map +1 -1
  117. package/dist/rules/popover.js +5 -0
  118. package/dist/rules/popover.js.map +1 -1
  119. package/dist/rules/random-uuid.d.ts.map +1 -1
  120. package/dist/rules/random-uuid.js +4 -0
  121. package/dist/rules/random-uuid.js.map +1 -1
  122. package/dist/rules/relative-time.d.ts.map +1 -1
  123. package/dist/rules/relative-time.js +4 -0
  124. package/dist/rules/relative-time.js.map +1 -1
  125. package/dist/rules/resizable-panels.d.ts.map +1 -1
  126. package/dist/rules/resizable-panels.js +3 -0
  127. package/dist/rules/resizable-panels.js.map +1 -1
  128. package/dist/rules/resize-observer.d.ts.map +1 -1
  129. package/dist/rules/resize-observer.js +4 -0
  130. package/dist/rules/resize-observer.js.map +1 -1
  131. package/dist/rules/scroll-animations.d.ts.map +1 -1
  132. package/dist/rules/scroll-animations.js +4 -0
  133. package/dist/rules/scroll-animations.js.map +1 -1
  134. package/dist/rules/scroll-lock.d.ts.map +1 -1
  135. package/dist/rules/scroll-lock.js +3 -0
  136. package/dist/rules/scroll-lock.js.map +1 -1
  137. package/dist/rules/scrollbars.d.ts.map +1 -1
  138. package/dist/rules/scrollbars.js +3 -0
  139. package/dist/rules/scrollbars.js.map +1 -1
  140. package/dist/rules/segmenter.d.ts +3 -0
  141. package/dist/rules/segmenter.d.ts.map +1 -0
  142. package/dist/rules/segmenter.js +41 -0
  143. package/dist/rules/segmenter.js.map +1 -0
  144. package/dist/rules/select.d.ts.map +1 -1
  145. package/dist/rules/select.js +3 -0
  146. package/dist/rules/select.js.map +1 -1
  147. package/dist/rules/signal-timeout.d.ts +3 -0
  148. package/dist/rules/signal-timeout.d.ts.map +1 -0
  149. package/dist/rules/signal-timeout.js +31 -0
  150. package/dist/rules/signal-timeout.js.map +1 -0
  151. package/dist/rules/smooth-scroll.d.ts.map +1 -1
  152. package/dist/rules/smooth-scroll.js +4 -0
  153. package/dist/rules/smooth-scroll.js.map +1 -1
  154. package/dist/rules/sticky.d.ts.map +1 -1
  155. package/dist/rules/sticky.js +4 -0
  156. package/dist/rules/sticky.js.map +1 -1
  157. package/dist/rules/structured-clone.d.ts.map +1 -1
  158. package/dist/rules/structured-clone.js +1 -0
  159. package/dist/rules/structured-clone.js.map +1 -1
  160. package/dist/rules/text-wrap-balance.d.ts.map +1 -1
  161. package/dist/rules/text-wrap-balance.js +3 -0
  162. package/dist/rules/text-wrap-balance.js.map +1 -1
  163. package/dist/rules/url-pattern.d.ts +3 -0
  164. package/dist/rules/url-pattern.d.ts.map +1 -0
  165. package/dist/rules/url-pattern.js +36 -0
  166. package/dist/rules/url-pattern.js.map +1 -0
  167. package/dist/rules/url-search-params.d.ts.map +1 -1
  168. package/dist/rules/url-search-params.js +1 -0
  169. package/dist/rules/url-search-params.js.map +1 -1
  170. package/dist/rules/web-animations.d.ts +3 -0
  171. package/dist/rules/web-animations.d.ts.map +1 -0
  172. package/dist/rules/web-animations.js +40 -0
  173. package/dist/rules/web-animations.js.map +1 -0
  174. package/dist/rules/web-locks.d.ts +3 -0
  175. package/dist/rules/web-locks.d.ts.map +1 -0
  176. package/dist/rules/web-locks.js +35 -0
  177. package/dist/rules/web-locks.js.map +1 -0
  178. package/dist/rules/web-share.d.ts.map +1 -1
  179. package/dist/rules/web-share.js +3 -0
  180. package/dist/rules/web-share.js.map +1 -1
  181. package/dist/rules/with-resolvers.d.ts +3 -0
  182. package/dist/rules/with-resolvers.d.ts.map +1 -0
  183. package/dist/rules/with-resolvers.js +30 -0
  184. package/dist/rules/with-resolvers.js.map +1 -0
  185. package/dist/schema.d.ts +4 -0
  186. package/dist/schema.d.ts.map +1 -1
  187. package/dist/schema.js +34 -0
  188. package/dist/schema.js.map +1 -1
  189. package/package.json +1 -1
@@ -78,6 +78,11 @@ export const carousel = {
78
78
  .carousel::scroll-button(inline-end) { content: "\\2192"; }
79
79
  .carousel > *::scroll-marker { content: ""; }
80
80
  .carousel > *::scroll-marker:target-current { opacity: 1; }`,
81
+ handRolled: [
82
+ "a scroll listener on a horizontal strip dividing scrollLeft by item width to work out the active index",
83
+ "prev and next buttons calling scrollBy, each with its own disabled state recomputed on every scroll",
84
+ "rendering dots from the item count and toggling an active class on whichever one is current",
85
+ ],
81
86
  },
82
87
  guides: [
83
88
  "carousel-snap-highlights",
@@ -1 +1 @@
1
- {"version":3,"file":"carousel.js","sourceRoot":"","sources":["../../src/rules/carousel.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAS;IAC5B,EAAE,EAAE,yBAAyB;IAC7B,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE;QACR,QAAQ;QACR,gBAAgB;QAChB,sBAAsB;QACtB,aAAa;QACb,gBAAgB;QAChB,aAAa;QACb,UAAU;QACV,eAAe;QACf,oBAAoB;QACpB,oBAAoB;KACrB;IACD,UAAU,EAAE,CAAC,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;IAC/D,MAAM,EAAE,8DAA8D;IACtE,KAAK,EAAE;QACL,SAAS,EACP,2eAA2e;QAC7e,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCX;QACE,OAAO,EAAE,6CAA6C;QACtD,MAAM,EAAE,kEAAkE;KAC3E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,yEAAyE;QAC/E,MAAM,EAAE;YACN,2LAA2L;YAC3L,2GAA2G;YAC3G,2EAA2E;YAC3E,kGAAkG;YAClG,gIAAgI;SACjI;QACD,OAAO,EAAE;;;;;;;;4DAQ+C;KACzD;IACD,MAAM,EAAE;QACN,0BAA0B;QAC1B,wBAAwB;QACxB,wBAAwB;QACxB,+BAA+B;KAChC;CACF,CAAC"}
1
+ {"version":3,"file":"carousel.js","sourceRoot":"","sources":["../../src/rules/carousel.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAS;IAC5B,EAAE,EAAE,yBAAyB;IAC7B,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE;QACR,QAAQ;QACR,gBAAgB;QAChB,sBAAsB;QACtB,aAAa;QACb,gBAAgB;QAChB,aAAa;QACb,UAAU;QACV,eAAe;QACf,oBAAoB;QACpB,oBAAoB;KACrB;IACD,UAAU,EAAE,CAAC,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;IAC/D,MAAM,EAAE,8DAA8D;IACtE,KAAK,EAAE;QACL,SAAS,EACP,2eAA2e;QAC7e,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCX;QACE,OAAO,EAAE,6CAA6C;QACtD,MAAM,EAAE,kEAAkE;KAC3E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,yEAAyE;QAC/E,MAAM,EAAE;YACN,2LAA2L;YAC3L,2GAA2G;YAC3G,2EAA2E;YAC3E,kGAAkG;YAClG,gIAAgI;SACjI;QACD,OAAO,EAAE;;;;;;;;4DAQ+C;QACxD,UAAU,EAAE;YACV,wGAAwG;YACxG,qGAAqG;YACrG,6FAA6F;SAC9F;KACF;IACD,MAAM,EAAE;QACN,0BAA0B;QAC1B,wBAAwB;QACxB,wBAAwB;QACxB,+BAA+B;KAChC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../src/rules/clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,SAAS,EAAE,IAmCvB,CAAC"}
1
+ {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../src/rules/clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,SAAS,EAAE,IAsCvB,CAAC"}
@@ -30,6 +30,9 @@ export const clipboard = {
30
30
  "You're running without focus or without a secure origin (HTTPS). The API rejects in both cases, so you still need a fallback path for that error.",
31
31
  ],
32
32
  snippet: "await navigator.clipboard.writeText(text);",
33
+ handRolled: [
34
+ "an off-screen textarea or contenteditable element created only so text can be selected and execCommand'd",
35
+ ],
33
36
  },
34
37
  };
35
38
  //# sourceMappingURL=clipboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/rules/clipboard.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAS;IAC7B,EAAE,EAAE,WAAW;IACf,KAAK,EAAE,gBAAgB;IACvB,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE;QACR,mBAAmB;QACnB,gBAAgB;QAChB,cAAc;QACd,yBAAyB;QACzB,gBAAgB;QAChB,gBAAgB;QAChB,eAAe;QACf,oBAAoB;KACrB;IACD,UAAU,EAAE,CAAC,iBAAiB,CAAC;IAC/B,MAAM,EAAE,iCAAiC;IACzC,KAAK,EAAE;QACL,SAAS,EACP,+QAA+Q;QACjR,OAAO,EAAE;;EAEX;QACE,MAAM,EACJ,sEAAsE;KACzE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,wEAAwE;QAC9E,MAAM,EAAE;YACN,gKAAgK;YAChK,mLAAmL;YACnL,8JAA8J;YAC9J,mJAAmJ;SACpJ;QACD,OAAO,EAAE,4CAA4C;KACtD;CACF,CAAC"}
1
+ {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/rules/clipboard.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAS;IAC7B,EAAE,EAAE,WAAW;IACf,KAAK,EAAE,gBAAgB;IACvB,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE;QACR,mBAAmB;QACnB,gBAAgB;QAChB,cAAc;QACd,yBAAyB;QACzB,gBAAgB;QAChB,gBAAgB;QAChB,eAAe;QACf,oBAAoB;KACrB;IACD,UAAU,EAAE,CAAC,iBAAiB,CAAC;IAC/B,MAAM,EAAE,iCAAiC;IACzC,KAAK,EAAE;QACL,SAAS,EACP,+QAA+Q;QACjR,OAAO,EAAE;;EAEX;QACE,MAAM,EACJ,sEAAsE;KACzE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,wEAAwE;QAC9E,MAAM,EAAE;YACN,gKAAgK;YAChK,mLAAmL;YACnL,8JAA8J;YAC9J,mJAAmJ;SACpJ;QACD,OAAO,EAAE,4CAA4C;QACrD,UAAU,EAAE;YACV,0GAA0G;SAC3G;KACF;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"container-queries.d.ts","sourceRoot":"","sources":["../../src/rules/container-queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,gBAAgB,EAAE,IAyD9B,CAAC"}
1
+ {"version":3,"file":"container-queries.d.ts","sourceRoot":"","sources":["../../src/rules/container-queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,gBAAgB,EAAE,IA4D9B,CAAC"}
@@ -51,6 +51,9 @@ export const containerQueries = {
51
51
  @container card (width >= 400px) {
52
52
  .card { grid-template-columns: 8rem 1fr; }
53
53
  }`,
54
+ handRolled: [
55
+ "a ResizeObserver toggling size classes on an element so it can style itself by its own width",
56
+ ],
54
57
  },
55
58
  guides: ["size-aware-styling"],
56
59
  };
@@ -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,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
+ {"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;QACE,UAAU,EAAE;YACV,8FAA8F;SAC/F;KACF;IACD,MAAM,EAAE,CAAC,oBAAoB,CAAC;CAC/B,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,IAmC3B,CAAC"}
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,IAuC3B,CAAC"}
@@ -30,6 +30,10 @@ export const dateTimeInput = {
30
30
  'You need type="week" or type="month". Their browser support has not caught up to type="date" and type="time".',
31
31
  ],
32
32
  snippet: `<input type="date" min="2024-01-01" required>`,
33
+ handRolled: [
34
+ "building a month grid from Date arithmetic, with the leading blanks worked out from getDay",
35
+ "a text input with a placeholder like dd/mm/yyyy and a hand-written parser checking what was typed",
36
+ ],
33
37
  },
34
38
  };
35
39
  //# sourceMappingURL=date-time-input.js.map
@@ -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,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
+ {"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;QACxD,UAAU,EAAE;YACV,4FAA4F;YAC5F,mGAAmG;SACpG;KACF;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,IA+DpB,CAAC"}
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,IAmEpB,CAAC"}
@@ -52,6 +52,10 @@ export const dialog = {
52
52
  </dialog>
53
53
  <script>document.querySelector("#d").showModal();</script>
54
54
  <style>dialog::backdrop { background: rgb(0 0 0 / 0.5); }</style>`,
55
+ handRolled: [
56
+ "a div with role=dialog and aria-modal, placed with position fixed and a z-index over the page",
57
+ "a document keydown listener added when an overlay opens and removed when it closes, only to catch Escape",
58
+ ],
55
59
  },
56
60
  guides: [
57
61
  "light-dismiss-a-dialog",
@@ -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,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
+ {"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;QAC9D,UAAU,EAAE;YACV,+FAA+F;YAC/F,0GAA0G;SAC3G;KACF;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,IA+DjC,CAAC"}
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,IAmEjC,CAAC"}
@@ -54,6 +54,10 @@ export const discreteTransitions = {
54
54
  }
55
55
  @starting-style { .el { opacity: 0; } }
56
56
  .el[hidden] { display: none; opacity: 0; }`,
57
+ handRolled: [
58
+ "a setTimeout matching the CSS duration, so an element stays mounted long enough to animate out",
59
+ "an isClosing or isLeaving flag held only to keep something rendered while its exit animation runs",
60
+ ],
57
61
  },
58
62
  guides: [
59
63
  "animate-element-entry-exit",
@@ -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,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
+ {"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;QACvC,UAAU,EAAE;YACV,gGAAgG;YAChG,mGAAmG;SACpG;KACF;IACD,MAAM,EAAE;QACN,4BAA4B;QAC5B,sBAAsB;QACtB,4BAA4B;KAC7B;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Rule } from "../schema.ts";
2
+ export declare const displayNames: Rule;
3
+ //# sourceMappingURL=display-names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display-names.d.ts","sourceRoot":"","sources":["../../src/rules/display-names.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,YAAY,EAAE,IAiC1B,CAAC"}
@@ -0,0 +1,33 @@
1
+ export const displayNames = {
2
+ id: "intl-display-names",
3
+ title: "Country and language names",
4
+ category: "formatting",
5
+ replaces: ["i18n-iso-countries", "country-list", "iso-639-1"],
6
+ featureIds: ["intl-display-names"],
7
+ native: "Intl.DisplayNames",
8
+ human: {
9
+ explainer: 'A list of country names is a data file, and one per language you support. i18n-iso-countries makes you register each locale you want; country-list and iso-639-1 carry English only. Intl.DisplayNames reads the names the browser already ships with its locale data, so "DE" renders as "Germany" in English and "Deutschland" in German with nothing bundled and nothing registered. It covers regions, languages, scripts and currencies through the same constructor.',
10
+ snippet: `const regions = new Intl.DisplayNames(["en"], { type: "region" });
11
+ regions.of("DE"); // "Germany"
12
+ regions.of("JP"); // "Japan"
13
+
14
+ new Intl.DisplayNames(["de"], { type: "language" }).of("fr");
15
+ // "Französisch"
16
+
17
+ new Intl.DisplayNames(["en"], { type: "currency" }).of("EUR");
18
+ // "Euro"`,
19
+ mdnUrl: "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames",
20
+ },
21
+ agent: {
22
+ when: "turning a country, language, script or currency code into its name in a given locale",
23
+ unless: [
24
+ "You need the reverse lookup, from a name back to a code. These libraries index both directions, where Intl.DisplayNames only goes code to name.",
25
+ "You need to render a list of every country, for a select menu. Intl.DisplayNames answers one code at a time and publishes no enumeration, so the list of codes still has to come from somewhere.",
26
+ "You need data beyond the name: alpha-3 codes, numeric codes, calling codes or capitals. i18n-iso-countries carries those, and Intl.DisplayNames takes ISO 3166-1 alpha-2 or UN M49 and returns a string.",
27
+ "You assert exact strings in tests, or need output identical across browsers. Names come from each engine's own CLDR snapshot, so they differ between engines and can change when a browser updates.",
28
+ "The same code runs on a Node build compiled with small-icu, where only English data is present and every other locale silently falls back.",
29
+ ],
30
+ snippet: `new Intl.DisplayNames(["en"], { type: "region" }).of("DE"); // "Germany"`,
31
+ },
32
+ };
33
+ //# sourceMappingURL=display-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display-names.js","sourceRoot":"","sources":["../../src/rules/display-names.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAS;IAChC,EAAE,EAAE,oBAAoB;IACxB,KAAK,EAAE,4BAA4B;IACnC,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,CAAC,oBAAoB,EAAE,cAAc,EAAE,WAAW,CAAC;IAC7D,UAAU,EAAE,CAAC,oBAAoB,CAAC;IAClC,MAAM,EAAE,mBAAmB;IAC3B,KAAK,EAAE;QACL,SAAS,EACP,4cAA4c;QAC9c,OAAO,EAAE;;;;;;;;UAQH;QACN,MAAM,EACJ,oGAAoG;KACvG;IACD,KAAK,EAAE;QACL,IAAI,EAAE,sFAAsF;QAC5F,MAAM,EAAE;YACN,iJAAiJ;YACjJ,kMAAkM;YAClM,0MAA0M;YAC1M,qMAAqM;YACrM,4IAA4I;SAC7I;QACD,OAAO,EAAE,0EAA0E;KACpF;CACF,CAAC"}
@@ -1 +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"}
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,IAwC5B,CAAC"}
@@ -31,6 +31,9 @@ new Intl.DurationFormat("de", { style: "narrow" }).format({
31
31
  hours: 1,
32
32
  minutes: 30,
33
33
  });`,
34
+ handRolled: [
35
+ "already-split hours, minutes and seconds joined with hardcoded unit labels and plural rules",
36
+ ],
34
37
  },
35
38
  guides: ["format-human-readable-durations"],
36
39
  };
@@ -1 +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"}
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;QACA,UAAU,EAAE;YACV,6FAA6F;SAC9F;KACF;IACD,MAAM,EAAE,CAAC,iCAAiC,CAAC;CAC5C,CAAC"}
@@ -1 +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"}
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,IAmDzB,CAAC"}
@@ -47,5 +47,6 @@ controller.abort();`,
47
47
  bus.addEventListener("ping", (e) => handle(e.detail), { signal });
48
48
  bus.dispatchEvent(new CustomEvent("ping", { detail: payload }));`,
49
49
  },
50
+ lintRule: "unicorn/prefer-event-target",
50
51
  };
51
52
  //# sourceMappingURL=event-target.js.map
@@ -1 +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"}
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;IACD,QAAQ,EAAE,6BAA6B;CACxC,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,IA0B1B,CAAC"}
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,IA8B1B,CAAC"}
@@ -22,6 +22,10 @@ button:focus-visible {
22
22
  "You need the exact same heuristic across every browser version, including ones that shipped :focus-visible before the spec's behavior settled. Small heuristic differences existed early on.",
23
23
  ],
24
24
  snippet: "button:focus-visible { outline: 2px solid var(--accent); }",
25
+ handRolled: [
26
+ "listening for keydown and mousedown on the document to track whether the last input was a keyboard",
27
+ "toggling a class such as using-keyboard on the body so focus rings can be shown conditionally",
28
+ ],
25
29
  },
26
30
  };
27
31
  //# sourceMappingURL=focus-visible.js.map
@@ -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,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
+ {"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;QACrE,UAAU,EAAE;YACV,oGAAoG;YACpG,+FAA+F;SAChG;KACF;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,IA8BxB,CAAC"}
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,IAiCxB,CAAC"}
@@ -24,6 +24,9 @@ export const fullscreen = {
24
24
  "You need the older vendor-prefixed fallback chain screenfull still maintains for browsers this old.",
25
25
  ],
26
26
  snippet: "document.fullscreenElement ? document.exitFullscreen() : el.requestFullscreen();",
27
+ handRolled: [
28
+ "a chain of vendor-prefixed calls such as webkitRequestFullscreen and msRequestFullscreen",
29
+ ],
27
30
  },
28
31
  };
29
32
  //# sourceMappingURL=fullscreen.js.map
@@ -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,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
+ {"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;QACpF,UAAU,EAAE;YACV,0FAA0F;SAC3F;KACF;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,IAgD7B,CAAC"}
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,IAoD7B,CAAC"}
@@ -43,6 +43,10 @@ export const heightAnimation = {
43
43
  snippet: `:root { interpolate-size: allow-keywords; }
44
44
  .panel { height: 0; overflow: hidden; transition: height 0.3s; }
45
45
  .panel[data-open] { height: auto; }`,
46
+ handRolled: [
47
+ "reading scrollHeight and animating max-height to that pixel value to open a panel",
48
+ "a transitionend listener setting height back to auto once an opening animation has finished",
49
+ ],
46
50
  },
47
51
  guides: ["animate-to-intrinsic-sizes", "calculate-with-intrinsic-sizes"],
48
52
  };
@@ -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,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,EAAE,gCAAgC,CAAC;CACzE,CAAC"}
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;QAChC,UAAU,EAAE;YACV,mFAAmF;YACnF,6FAA6F;SAC9F;KACF;IACD,MAAM,EAAE,CAAC,4BAA4B,EAAE,gCAAgC,CAAC;CACzE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AA0JzC;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,SAAS,IAAI,EAAqC,CAAC;AAEvE,yBAAyB;AACzB,eAAO,MAAM,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAE/C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAEpD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AA0KzC;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,SAAS,IAAI,EAAqC,CAAC;AAEvE,yBAAyB;AACzB,eAAO,MAAM,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAE/C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAEpD,CAAC"}
@@ -15,6 +15,7 @@ import { customHighlight } from "./custom-highlight.js";
15
15
  import { dateTimeInput } from "./date-time-input.js";
16
16
  import { dialog } from "./dialog.js";
17
17
  import { discreteTransitions } from "./discrete-transitions.js";
18
+ import { displayNames } from "./display-names.js";
18
19
  import { dragAndDrop } from "./drag-and-drop.js";
19
20
  import { durationFormat } from "./duration-format.js";
20
21
  import { eventTarget } from "./event-target.js";
@@ -28,6 +29,7 @@ import { inert } from "./inert.js";
28
29
  import { intersectionObserver } from "./intersection-observer.js";
29
30
  import { lazyLoading } from "./lazy-loading.js";
30
31
  import { lineClamp } from "./line-clamp.js";
32
+ import { listFormat } from "./list-format.js";
31
33
  import { masonry } from "./masonry.js";
32
34
  import { naturalSort } from "./natural-sort.js";
33
35
  import { numberFormat } from "./number-format.js";
@@ -41,8 +43,10 @@ import { screenWakeLock } from "./screen-wake-lock.js";
41
43
  import { scrollAnimations } from "./scroll-animations.js";
42
44
  import { scrollLock } from "./scroll-lock.js";
43
45
  import { scrollbars } from "./scrollbars.js";
46
+ import { segmenter } from "./segmenter.js";
44
47
  import { select } from "./select.js";
45
48
  import { serverSentEvents } from "./server-sent-events.js";
49
+ import { signalTimeout } from "./signal-timeout.js";
46
50
  import { smoothScroll } from "./smooth-scroll.js";
47
51
  import { speechRecognition } from "./speech-recognition.js";
48
52
  import { speechSynthesis } from "./speech-synthesis.js";
@@ -50,11 +54,15 @@ import { sticky } from "./sticky.js";
50
54
  import { structuredCloneRule } from "./structured-clone.js";
51
55
  import { textBoxTrim } from "./text-box-trim.js";
52
56
  import { textWrapBalance } from "./text-wrap-balance.js";
57
+ import { urlPattern } from "./url-pattern.js";
53
58
  import { urlSearchParams } from "./url-search-params.js";
54
59
  import { viewTransitions } from "./view-transitions.js";
60
+ import { webAnimations } from "./web-animations.js";
55
61
  import { webBluetooth } from "./web-bluetooth.js";
56
62
  import { webCrypto } from "./web-crypto.js";
63
+ import { webLocks } from "./web-locks.js";
57
64
  import { webShare } from "./web-share.js";
65
+ import { withResolvers } from "./with-resolvers.js";
58
66
  /**
59
67
  * Interpolates the {{browser:key}} tokens a rule's prose uses in place of a
60
68
  * hand-typed browser version. Done once here, so the website, the CLI, the
@@ -147,6 +155,14 @@ const rawRules = [
147
155
  serverSentEvents,
148
156
  urlSearchParams,
149
157
  webCrypto,
158
+ webLocks,
159
+ displayNames,
160
+ listFormat,
161
+ webAnimations,
162
+ segmenter,
163
+ urlPattern,
164
+ withResolvers,
165
+ signalTimeout,
150
166
  ];
151
167
  /**
152
168
  * Every rule in the catalog. Order is not significant: surfaces sort by
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"inert.d.ts","sourceRoot":"","sources":["../../src/rules/inert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,KAAK,EAAE,IAqCnB,CAAC"}
1
+ {"version":3,"file":"inert.d.ts","sourceRoot":"","sources":["../../src/rules/inert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,KAAK,EAAE,IAyCnB,CAAC"}
@@ -31,6 +31,10 @@ export const inert = {
31
31
  ],
32
32
  snippet: `page.inert = true; // opening the overlay
33
33
  page.inert = false; // closing it`,
34
+ handRolled: [
35
+ "a keydown handler watching for Tab and calling preventDefault so focus cannot leave an overlay",
36
+ "a querySelectorAll over a list of focusable selectors, used to decide where focus is allowed to go",
37
+ ],
34
38
  },
35
39
  guides: ["accessibility", "navigation-drawer"],
36
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"inert.js","sourceRoot":"","sources":["../../src/rules/inert.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,KAAK,GAAS;IACzB,EAAE,EAAE,OAAO;IACX,KAAK,EAAE,gBAAgB;IACvB,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE;QACR,YAAY;QACZ,kBAAkB;QAClB,kBAAkB;QAClB,YAAY;QACZ,gBAAgB;QAChB,YAAY;KACb;IACD,UAAU,EAAE,CAAC,OAAO,CAAC;IACrB,MAAM,EAAE,qBAAqB;IAC7B,KAAK,EAAE;QACL,SAAS,EACP,wdAAwd;QAC1d,OAAO,EAAE;;;iCAGoB;QAC7B,MAAM,EACJ,qFAAqF;KACxF;IACD,KAAK,EAAE;QACL,IAAI,EAAE,6DAA6D;QACnE,MAAM,EAAE;YACN,sNAAsN;YACtN,kMAAkM;YAClM,2KAA2K;YAC3K,2KAA2K;YAC3K,6NAA6N;SAC9N;QACD,OAAO,EAAE;mCACsB;KAChC;IACD,MAAM,EAAE,CAAC,eAAe,EAAE,mBAAmB,CAAC;CAC/C,CAAC"}
1
+ {"version":3,"file":"inert.js","sourceRoot":"","sources":["../../src/rules/inert.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,KAAK,GAAS;IACzB,EAAE,EAAE,OAAO;IACX,KAAK,EAAE,gBAAgB;IACvB,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE;QACR,YAAY;QACZ,kBAAkB;QAClB,kBAAkB;QAClB,YAAY;QACZ,gBAAgB;QAChB,YAAY;KACb;IACD,UAAU,EAAE,CAAC,OAAO,CAAC;IACrB,MAAM,EAAE,qBAAqB;IAC7B,KAAK,EAAE;QACL,SAAS,EACP,wdAAwd;QAC1d,OAAO,EAAE;;;iCAGoB;QAC7B,MAAM,EACJ,qFAAqF;KACxF;IACD,KAAK,EAAE;QACL,IAAI,EAAE,6DAA6D;QACnE,MAAM,EAAE;YACN,sNAAsN;YACtN,kMAAkM;YAClM,2KAA2K;YAC3K,2KAA2K;YAC3K,6NAA6N;SAC9N;QACD,OAAO,EAAE;mCACsB;QAC/B,UAAU,EAAE;YACV,gGAAgG;YAChG,oGAAoG;SACrG;KACF;IACD,MAAM,EAAE,CAAC,eAAe,EAAE,mBAAmB,CAAC;CAC/C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"intersection-observer.d.ts","sourceRoot":"","sources":["../../src/rules/intersection-observer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,oBAAoB,EAAE,IAqClC,CAAC"}
1
+ {"version":3,"file":"intersection-observer.d.ts","sourceRoot":"","sources":["../../src/rules/intersection-observer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,oBAAoB,EAAE,IAsClC,CAAC"}
@@ -32,5 +32,6 @@ observer.observe(document.querySelector("#target"));`,
32
32
  ],
33
33
  snippet: "new IntersectionObserver((entries) => { ... }, { threshold: 0.5 });",
34
34
  },
35
+ lintRule: "unicorn/prefer-observer-apis",
35
36
  };
36
37
  //# sourceMappingURL=intersection-observer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"intersection-observer.js","sourceRoot":"","sources":["../../src/rules/intersection-observer.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAS;IACxC,EAAE,EAAE,uBAAuB;IAC3B,KAAK,EAAE,qBAAqB;IAC5B,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE;QACR,6BAA6B;QAC7B,yBAAyB;QACzB,mBAAmB;QACnB,8BAA8B;QAC9B,uBAAuB;KACxB;IACD,UAAU,EAAE,CAAC,uBAAuB,CAAC;IACrC,MAAM,EAAE,sBAAsB;IAC9B,KAAK,EAAE;QACL,SAAS,EACP,wTAAwT;QAC1T,OAAO,EAAE;;;;;;;;qDAQwC;QACjD,MAAM,EACJ,4EAA4E;KAC/E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,mIAAmI;QACzI,MAAM,EAAE;YACN,uOAAuO;YACvO,+JAA+J;SAChK;QACD,OAAO,EACL,qEAAqE;KACxE;CACF,CAAC"}
1
+ {"version":3,"file":"intersection-observer.js","sourceRoot":"","sources":["../../src/rules/intersection-observer.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAS;IACxC,EAAE,EAAE,uBAAuB;IAC3B,KAAK,EAAE,qBAAqB;IAC5B,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE;QACR,6BAA6B;QAC7B,yBAAyB;QACzB,mBAAmB;QACnB,8BAA8B;QAC9B,uBAAuB;KACxB;IACD,UAAU,EAAE,CAAC,uBAAuB,CAAC;IACrC,MAAM,EAAE,sBAAsB;IAC9B,KAAK,EAAE;QACL,SAAS,EACP,wTAAwT;QAC1T,OAAO,EAAE;;;;;;;;qDAQwC;QACjD,MAAM,EACJ,4EAA4E;KAC/E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,mIAAmI;QACzI,MAAM,EAAE;YACN,uOAAuO;YACvO,+JAA+J;SAChK;QACD,OAAO,EACL,qEAAqE;KACxE;IACD,QAAQ,EAAE,8BAA8B;CACzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-loading.d.ts","sourceRoot":"","sources":["../../src/rules/lazy-loading.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,WAAW,EAAE,IAqCzB,CAAC"}
1
+ {"version":3,"file":"lazy-loading.d.ts","sourceRoot":"","sources":["../../src/rules/lazy-loading.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,WAAW,EAAE,IAyCzB,CAAC"}
@@ -31,6 +31,10 @@ export const lazyLoading = {
31
31
  ],
32
32
  snippet: `<img src="/photo.jpg" alt="" loading="lazy" />
33
33
  <iframe src="/embed" loading="lazy"></iframe>`,
34
+ handRolled: [
35
+ "an IntersectionObserver that swaps a data-src attribute into src when an image nears the viewport",
36
+ "a scroll listener deciding which images are close enough to start loading",
37
+ ],
34
38
  },
35
39
  guides: ["optimize-image-priority"],
36
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-loading.js","sourceRoot":"","sources":["../../src/rules/lazy-loading.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAS;IAC/B,EAAE,EAAE,cAAc;IAClB,KAAK,EAAE,gCAAgC;IACvC,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE;QACR,OAAO;QACP,WAAW;QACX,kBAAkB;QAClB,gBAAgB;QAChB,iCAAiC;QACjC,SAAS;QACT,cAAc;QACd,cAAc;KACf;IACD,UAAU,EAAE,CAAC,cAAc,CAAC;IAC5B,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE;QACL,SAAS,EACP,4XAA4X;QAC9X,OAAO,EAAE;iEACoD;QAC7D,MAAM,EACJ,uEAAuE;KAC1E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,gFAAgF;QACtF,MAAM,EAAE;YACN,gJAAgJ;YAChJ,6GAA6G;YAC7G,0IAA0I;YAC1I,4HAA4H;YAC5H,4GAA4G;SAC7G;QACD,OAAO,EAAE;8CACiC;KAC3C;IACD,MAAM,EAAE,CAAC,yBAAyB,CAAC;CACpC,CAAC"}
1
+ {"version":3,"file":"lazy-loading.js","sourceRoot":"","sources":["../../src/rules/lazy-loading.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAS;IAC/B,EAAE,EAAE,cAAc;IAClB,KAAK,EAAE,gCAAgC;IACvC,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE;QACR,OAAO;QACP,WAAW;QACX,kBAAkB;QAClB,gBAAgB;QAChB,iCAAiC;QACjC,SAAS;QACT,cAAc;QACd,cAAc;KACf;IACD,UAAU,EAAE,CAAC,cAAc,CAAC;IAC5B,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE;QACL,SAAS,EACP,4XAA4X;QAC9X,OAAO,EAAE;iEACoD;QAC7D,MAAM,EACJ,uEAAuE;KAC1E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,gFAAgF;QACtF,MAAM,EAAE;YACN,gJAAgJ;YAChJ,6GAA6G;YAC7G,0IAA0I;YAC1I,4HAA4H;YAC5H,4GAA4G;SAC7G;QACD,OAAO,EAAE;8CACiC;QAC1C,UAAU,EAAE;YACV,mGAAmG;YACnG,2EAA2E;SAC5E;KACF;IACD,MAAM,EAAE,CAAC,yBAAyB,CAAC;CACpC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"line-clamp.d.ts","sourceRoot":"","sources":["../../src/rules/line-clamp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,SAAS,EAAE,IAwCvB,CAAC"}
1
+ {"version":3,"file":"line-clamp.d.ts","sourceRoot":"","sources":["../../src/rules/line-clamp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,SAAS,EAAE,IA4CvB,CAAC"}
@@ -34,6 +34,10 @@ export const lineClamp = {
34
34
  "You're relying on a build tool to add this prefix for you and it doesn't; -webkit-line-clamp still needs to be written by hand, autoprefixer tools do not treat it as one they add automatically in every configuration.",
35
35
  ],
36
36
  snippet: ".excerpt { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden; }",
37
+ handRolled: [
38
+ "measuring rendered text in a hidden element or on a canvas to decide where a line should visually end",
39
+ "slicing a string by character count before rendering it, so a card title fits its two lines",
40
+ ],
37
41
  },
38
42
  };
39
43
  //# sourceMappingURL=line-clamp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"line-clamp.js","sourceRoot":"","sources":["../../src/rules/line-clamp.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAS;IAC7B,EAAE,EAAE,YAAY;IAChB,KAAK,EAAE,4BAA4B;IACnC,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE;QACR,mBAAmB;QACnB,kBAAkB;QAClB,UAAU;QACV,YAAY;QACZ,WAAW;KACZ;IACD,UAAU,EAAE,EAAE;IACd,cAAc,EAAE;QACd,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,YAAY;QACxB,IAAI,EAAE,maAAma;KAC1a;IACD,MAAM,EAAE,oBAAoB;IAC5B,KAAK,EAAE;QACL,SAAS,EACP,yVAAyV;QAC3V,OAAO,EAAE;;;;;EAKX;QACE,MAAM,EACJ,qEAAqE;KACxE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,wEAAwE;QAC9E,MAAM,EAAE;YACN,oIAAoI;YACpI,4IAA4I;YAC5I,0NAA0N;SAC3N;QACD,OAAO,EACL,2GAA2G;KAC9G;CACF,CAAC"}
1
+ {"version":3,"file":"line-clamp.js","sourceRoot":"","sources":["../../src/rules/line-clamp.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAS;IAC7B,EAAE,EAAE,YAAY;IAChB,KAAK,EAAE,4BAA4B;IACnC,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE;QACR,mBAAmB;QACnB,kBAAkB;QAClB,UAAU;QACV,YAAY;QACZ,WAAW;KACZ;IACD,UAAU,EAAE,EAAE;IACd,cAAc,EAAE;QACd,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,YAAY;QACxB,IAAI,EAAE,maAAma;KAC1a;IACD,MAAM,EAAE,oBAAoB;IAC5B,KAAK,EAAE;QACL,SAAS,EACP,yVAAyV;QAC3V,OAAO,EAAE;;;;;EAKX;QACE,MAAM,EACJ,qEAAqE;KACxE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,wEAAwE;QAC9E,MAAM,EAAE;YACN,oIAAoI;YACpI,4IAA4I;YAC5I,0NAA0N;SAC3N;QACD,OAAO,EACL,2GAA2G;QAC7G,UAAU,EAAE;YACV,uGAAuG;YACvG,6FAA6F;SAC9F;KACF;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Rule } from "../schema.ts";
2
+ export declare const listFormat: Rule;
3
+ //# sourceMappingURL=list-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-format.d.ts","sourceRoot":"","sources":["../../src/rules/list-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,UAAU,EAAE,IAqCxB,CAAC"}
@@ -0,0 +1,37 @@
1
+ export const listFormat = {
2
+ id: "intl-list-format",
3
+ title: "Joining a list into a sentence",
4
+ category: "formatting",
5
+ replaces: ["humanize-list"],
6
+ featureIds: ["intl-list-format"],
7
+ native: "Intl.ListFormat",
8
+ human: {
9
+ explainer: 'Commas between the items and an "and" before the last one looks like string work until there is a second language. Intl.ListFormat renders the list with the separators and the conjunction the locale actually uses, so English gets its serial comma and German gets "und" without either being written down. It also handles disjunctions, where the joining word is "or", and plain unit lists with no conjunction at all.',
10
+ snippet: `const fmt = new Intl.ListFormat("en", { type: "conjunction" });
11
+ fmt.format(["apples", "pears", "plums"]);
12
+ // "apples, pears, and plums"
13
+
14
+ new Intl.ListFormat("de").format(["Äpfel", "Birnen", "Pflaumen"]);
15
+ // "Äpfel, Birnen und Pflaumen"
16
+
17
+ new Intl.ListFormat("en", { type: "disjunction" }).format(["red", "blue"]);
18
+ // "red or blue"`,
19
+ mdnUrl: "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/ListFormat",
20
+ },
21
+ agent: {
22
+ when: 'joining several items into one phrase, such as "apples, pears, and plums"',
23
+ unless: [
24
+ 'You truncate long lists, as in "Ana, Ben and 4 others". Intl.ListFormat renders every item it is given, so deciding how many to show and building the "and N more" item stays your code.',
25
+ "You need a separator the locale does not use, such as joining with a slash or a bullet for a breadcrumb. That is Array.prototype.join, and neither the library nor Intl is involved.",
26
+ "The items are not already strings. format() throws a TypeError on anything else, where humanize-list coerces, so numbers and nulls that used to render now break.",
27
+ "You depend on humanize-list's exact output, including its oxfordComma option. Intl follows the locale's own convention, so switching changes visible text in English.",
28
+ "You need each item wrapped in markup. formatToParts() gives you the pieces and their types, but reassembling them into elements is work the plain format() call does not do.",
29
+ ],
30
+ snippet: `new Intl.ListFormat("en", { type: "conjunction" }).format([
31
+ "apples",
32
+ "pears",
33
+ "plums",
34
+ ]);`,
35
+ },
36
+ };
37
+ //# sourceMappingURL=list-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-format.js","sourceRoot":"","sources":["../../src/rules/list-format.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,EAAE,EAAE,kBAAkB;IACtB,KAAK,EAAE,gCAAgC;IACvC,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,CAAC,eAAe,CAAC;IAC3B,UAAU,EAAE,CAAC,kBAAkB,CAAC;IAChC,MAAM,EAAE,iBAAiB;IACzB,KAAK,EAAE;QACL,SAAS,EACP,gaAAga;QACla,OAAO,EAAE;;;;;;;;iBAQI;QACb,MAAM,EACJ,kGAAkG;KACrG;IACD,KAAK,EAAE;QACL,IAAI,EAAE,2EAA2E;QACjF,MAAM,EAAE;YACN,0LAA0L;YAC1L,sLAAsL;YACtL,mKAAmK;YACnK,uKAAuK;YACvK,8KAA8K;SAC/K;QACD,OAAO,EAAE;;;;IAIT;KACD;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"masonry.d.ts","sourceRoot":"","sources":["../../src/rules/masonry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,OAAO,EAAE,IA4DrB,CAAC"}
1
+ {"version":3,"file":"masonry.d.ts","sourceRoot":"","sources":["../../src/rules/masonry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,OAAO,EAAE,IAgErB,CAAC"}
@@ -55,6 +55,10 @@ export const masonry = {
55
55
  .gallery { columns: 16rem; }
56
56
  .gallery > * { break-inside: avoid; }
57
57
  }`,
58
+ handRolled: [
59
+ "distributing items into column arrays in JavaScript by tracking each column's running height",
60
+ "absolutely positioning items after measuring them so the gaps between rows close up",
61
+ ],
58
62
  },
59
63
  };
60
64
  //# sourceMappingURL=masonry.js.map
@@ -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,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"}
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;QACE,UAAU,EAAE;YACV,8FAA8F;YAC9F,qFAAqF;SACtF;KACF;CACF,CAAC"}
@@ -1 +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"}
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,IA6CzB,CAAC"}
@@ -36,6 +36,10 @@ export const naturalSort = {
36
36
  ],
37
37
  snippet: `const collator = new Intl.Collator(undefined, { numeric: true });
38
38
  list.sort(collator.compare);`,
39
+ handRolled: [
40
+ "a comparator pulling digits out of strings with a regex and comparing them as numbers",
41
+ "zero-padding numbers inside strings so a plain sort puts item10 after item9",
42
+ ],
39
43
  },
40
44
  };
41
45
  //# sourceMappingURL=natural-sort.js.map
@@ -1 +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"}
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;QACzB,UAAU,EAAE;YACV,uFAAuF;YACvF,6EAA6E;SAC9E;KACF;CACF,CAAC"}