@master/css 2.0.0-alpha.71 → 2.0.0-alpha.73

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 (699) hide show
  1. package/index.js +1 -1
  2. package/package.json +32 -1
  3. package/esm/apis/configure.d.ts +0 -2
  4. package/esm/apis/configure.js +0 -11
  5. package/esm/apis/configure.js.map +0 -1
  6. package/esm/apis/extend.d.ts +0 -5
  7. package/esm/apis/extend.js +0 -61
  8. package/esm/apis/extend.js.map +0 -1
  9. package/esm/apis/fill-color-scale.d.ts +0 -1
  10. package/esm/apis/fill-color-scale.js +0 -60
  11. package/esm/apis/fill-color-scale.js.map +0 -1
  12. package/esm/apis/index.d.ts +0 -7
  13. package/esm/apis/index.js +0 -8
  14. package/esm/apis/index.js.map +0 -1
  15. package/esm/apis/init.d.ts +0 -3
  16. package/esm/apis/init.js +0 -13
  17. package/esm/apis/init.js.map +0 -1
  18. package/esm/apis/render-from-html.d.ts +0 -3
  19. package/esm/apis/render-from-html.js +0 -19
  20. package/esm/apis/render-from-html.js.map +0 -1
  21. package/esm/apis/render-into-html.d.ts +0 -3
  22. package/esm/apis/render-into-html.js +0 -10
  23. package/esm/apis/render-into-html.js.map +0 -1
  24. package/esm/apis/render.d.ts +0 -3
  25. package/esm/apis/render.js +0 -14
  26. package/esm/apis/render.js.map +0 -1
  27. package/esm/config/breakpoints.d.ts +0 -13
  28. package/esm/config/breakpoints.js +0 -14
  29. package/esm/config/breakpoints.js.map +0 -1
  30. package/esm/config/colors.d.ts +0 -25
  31. package/esm/config/colors.js +0 -266
  32. package/esm/config/colors.js.map +0 -1
  33. package/esm/config/index.d.ts +0 -12
  34. package/esm/config/index.js +0 -22
  35. package/esm/config/index.js.map +0 -1
  36. package/esm/config/root-size.d.ts +0 -2
  37. package/esm/config/root-size.js +0 -3
  38. package/esm/config/root-size.js.map +0 -1
  39. package/esm/config/rules.d.ts +0 -3
  40. package/esm/config/rules.js +0 -390
  41. package/esm/config/rules.js.map +0 -1
  42. package/esm/config/scheme.d.ts +0 -8
  43. package/esm/config/scheme.js +0 -9
  44. package/esm/config/scheme.js.map +0 -1
  45. package/esm/config/selectors.d.ts +0 -19
  46. package/esm/config/selectors.js +0 -20
  47. package/esm/config/selectors.js.map +0 -1
  48. package/esm/config/semantics.d.ts +0 -82
  49. package/esm/config/semantics.js +0 -83
  50. package/esm/config/semantics.js.map +0 -1
  51. package/esm/config/themes.d.ts +0 -2
  52. package/esm/config/themes.js +0 -3
  53. package/esm/config/themes.js.map +0 -1
  54. package/esm/config/values.d.ts +0 -126
  55. package/esm/config/values.js +0 -85
  56. package/esm/config/values.js.map +0 -1
  57. package/esm/constants/start-symbol.d.ts +0 -5
  58. package/esm/constants/start-symbol.js +0 -6
  59. package/esm/constants/start-symbol.js.map +0 -1
  60. package/esm/css.d.ts +0 -74
  61. package/esm/css.js +0 -962
  62. package/esm/css.js.map +0 -1
  63. package/esm/index.d.ts +0 -4
  64. package/esm/index.js +0 -5
  65. package/esm/index.js.map +0 -1
  66. package/esm/interfaces/config.d.ts +0 -25
  67. package/esm/interfaces/config.js +0 -2
  68. package/esm/interfaces/config.js.map +0 -1
  69. package/esm/interfaces/declaration.d.ts +0 -5
  70. package/esm/interfaces/declaration.js +0 -2
  71. package/esm/interfaces/declaration.js.map +0 -1
  72. package/esm/interfaces/media-feature-rule.d.ts +0 -7
  73. package/esm/interfaces/media-feature-rule.js +0 -2
  74. package/esm/interfaces/media-feature-rule.js.map +0 -1
  75. package/esm/interfaces/media.d.ts +0 -8
  76. package/esm/interfaces/media.js +0 -2
  77. package/esm/interfaces/media.js.map +0 -1
  78. package/esm/polyfills/css-escape.d.ts +0 -2
  79. package/esm/polyfills/css-escape.js +0 -91
  80. package/esm/polyfills/css-escape.js.map +0 -1
  81. package/esm/rule.d.ts +0 -54
  82. package/esm/rule.js +0 -604
  83. package/esm/rule.js.map +0 -1
  84. package/esm/rules/accent-color.d.ts +0 -7
  85. package/esm/rules/accent-color.js +0 -8
  86. package/esm/rules/accent-color.js.map +0 -1
  87. package/esm/rules/align-content.d.ts +0 -6
  88. package/esm/rules/align-content.js +0 -7
  89. package/esm/rules/align-content.js.map +0 -1
  90. package/esm/rules/align-items.d.ts +0 -6
  91. package/esm/rules/align-items.js +0 -7
  92. package/esm/rules/align-items.js.map +0 -1
  93. package/esm/rules/align-self.d.ts +0 -6
  94. package/esm/rules/align-self.js +0 -7
  95. package/esm/rules/align-self.js.map +0 -1
  96. package/esm/rules/animation-delay.d.ts +0 -7
  97. package/esm/rules/animation-delay.js +0 -8
  98. package/esm/rules/animation-delay.js.map +0 -1
  99. package/esm/rules/animation-direction.d.ts +0 -6
  100. package/esm/rules/animation-direction.js +0 -7
  101. package/esm/rules/animation-direction.js.map +0 -1
  102. package/esm/rules/animation-duration.d.ts +0 -7
  103. package/esm/rules/animation-duration.js +0 -8
  104. package/esm/rules/animation-duration.js.map +0 -1
  105. package/esm/rules/animation-fill-mode.d.ts +0 -6
  106. package/esm/rules/animation-fill-mode.js +0 -7
  107. package/esm/rules/animation-fill-mode.js.map +0 -1
  108. package/esm/rules/animation-iteration-count.d.ts +0 -7
  109. package/esm/rules/animation-iteration-count.js +0 -8
  110. package/esm/rules/animation-iteration-count.js.map +0 -1
  111. package/esm/rules/animation-name.d.ts +0 -6
  112. package/esm/rules/animation-name.js +0 -7
  113. package/esm/rules/animation-name.js.map +0 -1
  114. package/esm/rules/animation-play-state.d.ts +0 -6
  115. package/esm/rules/animation-play-state.js +0 -7
  116. package/esm/rules/animation-play-state.js.map +0 -1
  117. package/esm/rules/animation-timing-function.d.ts +0 -6
  118. package/esm/rules/animation-timing-function.js +0 -7
  119. package/esm/rules/animation-timing-function.js.map +0 -1
  120. package/esm/rules/animation.d.ts +0 -8
  121. package/esm/rules/animation.js +0 -9
  122. package/esm/rules/animation.js.map +0 -1
  123. package/esm/rules/appearance.d.ts +0 -5
  124. package/esm/rules/appearance.js +0 -6
  125. package/esm/rules/appearance.js.map +0 -1
  126. package/esm/rules/aspect-radio.d.ts +0 -7
  127. package/esm/rules/aspect-radio.js +0 -8
  128. package/esm/rules/aspect-radio.js.map +0 -1
  129. package/esm/rules/backdrop-filter.d.ts +0 -11
  130. package/esm/rules/backdrop-filter.js +0 -26
  131. package/esm/rules/backdrop-filter.js.map +0 -1
  132. package/esm/rules/background-attachment.d.ts +0 -6
  133. package/esm/rules/background-attachment.js +0 -7
  134. package/esm/rules/background-attachment.js.map +0 -1
  135. package/esm/rules/background-blend-mode.d.ts +0 -5
  136. package/esm/rules/background-blend-mode.js +0 -6
  137. package/esm/rules/background-blend-mode.js.map +0 -1
  138. package/esm/rules/background-clip.d.ts +0 -9
  139. package/esm/rules/background-clip.js +0 -13
  140. package/esm/rules/background-clip.js.map +0 -1
  141. package/esm/rules/background-color.d.ts +0 -8
  142. package/esm/rules/background-color.js +0 -9
  143. package/esm/rules/background-color.js.map +0 -1
  144. package/esm/rules/background-image.d.ts +0 -7
  145. package/esm/rules/background-image.js +0 -8
  146. package/esm/rules/background-image.js.map +0 -1
  147. package/esm/rules/background-origin.d.ts +0 -6
  148. package/esm/rules/background-origin.js +0 -7
  149. package/esm/rules/background-origin.js.map +0 -1
  150. package/esm/rules/background-position.d.ts +0 -7
  151. package/esm/rules/background-position.js +0 -8
  152. package/esm/rules/background-position.js.map +0 -1
  153. package/esm/rules/background-repeat.d.ts +0 -6
  154. package/esm/rules/background-repeat.js +0 -7
  155. package/esm/rules/background-repeat.js.map +0 -1
  156. package/esm/rules/background-size.d.ts +0 -6
  157. package/esm/rules/background-size.js +0 -7
  158. package/esm/rules/background-size.js.map +0 -1
  159. package/esm/rules/background.d.ts +0 -8
  160. package/esm/rules/background.js +0 -9
  161. package/esm/rules/background.js.map +0 -1
  162. package/esm/rules/border-collapse.d.ts +0 -6
  163. package/esm/rules/border-collapse.js +0 -7
  164. package/esm/rules/border-collapse.js.map +0 -1
  165. package/esm/rules/border-color.d.ts +0 -11
  166. package/esm/rules/border-color.js +0 -15
  167. package/esm/rules/border-color.js.map +0 -1
  168. package/esm/rules/border-image-outset.d.ts +0 -5
  169. package/esm/rules/border-image-outset.js +0 -6
  170. package/esm/rules/border-image-outset.js.map +0 -1
  171. package/esm/rules/border-image-repeat.d.ts +0 -6
  172. package/esm/rules/border-image-repeat.js +0 -7
  173. package/esm/rules/border-image-repeat.js.map +0 -1
  174. package/esm/rules/border-image-slice.d.ts +0 -6
  175. package/esm/rules/border-image-slice.js +0 -7
  176. package/esm/rules/border-image-slice.js.map +0 -1
  177. package/esm/rules/border-image-source.d.ts +0 -6
  178. package/esm/rules/border-image-source.js +0 -7
  179. package/esm/rules/border-image-source.js.map +0 -1
  180. package/esm/rules/border-image-width.d.ts +0 -6
  181. package/esm/rules/border-image-width.js +0 -7
  182. package/esm/rules/border-image-width.js.map +0 -1
  183. package/esm/rules/border-image.d.ts +0 -6
  184. package/esm/rules/border-image.js +0 -7
  185. package/esm/rules/border-image.js.map +0 -1
  186. package/esm/rules/border-radius.d.ts +0 -9
  187. package/esm/rules/border-radius.js +0 -74
  188. package/esm/rules/border-radius.js.map +0 -1
  189. package/esm/rules/border-spacing.d.ts +0 -5
  190. package/esm/rules/border-spacing.js +0 -6
  191. package/esm/rules/border-spacing.js.map +0 -1
  192. package/esm/rules/border-style.d.ts +0 -9
  193. package/esm/rules/border-style.js +0 -13
  194. package/esm/rules/border-style.js.map +0 -1
  195. package/esm/rules/border-width.d.ts +0 -9
  196. package/esm/rules/border-width.js +0 -13
  197. package/esm/rules/border-width.js.map +0 -1
  198. package/esm/rules/border.d.ts +0 -10
  199. package/esm/rules/border.js +0 -14
  200. package/esm/rules/border.js.map +0 -1
  201. package/esm/rules/box-decoration-break.d.ts +0 -9
  202. package/esm/rules/box-decoration-break.js +0 -13
  203. package/esm/rules/box-decoration-break.js.map +0 -1
  204. package/esm/rules/box-shadow.d.ts +0 -7
  205. package/esm/rules/box-shadow.js +0 -8
  206. package/esm/rules/box-shadow.js.map +0 -1
  207. package/esm/rules/box-sizing.d.ts +0 -6
  208. package/esm/rules/box-sizing.js +0 -7
  209. package/esm/rules/box-sizing.js.map +0 -1
  210. package/esm/rules/break-after.d.ts +0 -5
  211. package/esm/rules/break-after.js +0 -6
  212. package/esm/rules/break-after.js.map +0 -1
  213. package/esm/rules/break-before.d.ts +0 -5
  214. package/esm/rules/break-before.js +0 -6
  215. package/esm/rules/break-before.js.map +0 -1
  216. package/esm/rules/break-inside.d.ts +0 -5
  217. package/esm/rules/break-inside.js +0 -6
  218. package/esm/rules/break-inside.js.map +0 -1
  219. package/esm/rules/caret-color.d.ts +0 -7
  220. package/esm/rules/caret-color.js +0 -8
  221. package/esm/rules/caret-color.js.map +0 -1
  222. package/esm/rules/clear.d.ts +0 -5
  223. package/esm/rules/clear.js +0 -6
  224. package/esm/rules/clear.js.map +0 -1
  225. package/esm/rules/clip-path.d.ts +0 -6
  226. package/esm/rules/clip-path.js +0 -7
  227. package/esm/rules/clip-path.js.map +0 -1
  228. package/esm/rules/color.d.ts +0 -8
  229. package/esm/rules/color.js +0 -9
  230. package/esm/rules/color.js.map +0 -1
  231. package/esm/rules/column-span.d.ts +0 -6
  232. package/esm/rules/column-span.js +0 -7
  233. package/esm/rules/column-span.js.map +0 -1
  234. package/esm/rules/columns.d.ts +0 -8
  235. package/esm/rules/columns.js +0 -9
  236. package/esm/rules/columns.js.map +0 -1
  237. package/esm/rules/contain.d.ts +0 -5
  238. package/esm/rules/contain.js +0 -6
  239. package/esm/rules/contain.js.map +0 -1
  240. package/esm/rules/content.d.ts +0 -5
  241. package/esm/rules/content.js +0 -6
  242. package/esm/rules/content.js.map +0 -1
  243. package/esm/rules/counter-increment.d.ts +0 -6
  244. package/esm/rules/counter-increment.js +0 -7
  245. package/esm/rules/counter-increment.js.map +0 -1
  246. package/esm/rules/cursor.d.ts +0 -5
  247. package/esm/rules/cursor.js +0 -6
  248. package/esm/rules/cursor.js.map +0 -1
  249. package/esm/rules/cx.d.ts +0 -6
  250. package/esm/rules/cx.js +0 -7
  251. package/esm/rules/cx.js.map +0 -1
  252. package/esm/rules/cy.d.ts +0 -6
  253. package/esm/rules/cy.js +0 -7
  254. package/esm/rules/cy.js.map +0 -1
  255. package/esm/rules/direction.d.ts +0 -5
  256. package/esm/rules/direction.js +0 -6
  257. package/esm/rules/direction.js.map +0 -1
  258. package/esm/rules/display.d.ts +0 -6
  259. package/esm/rules/display.js +0 -7
  260. package/esm/rules/display.js.map +0 -1
  261. package/esm/rules/fill.d.ts +0 -7
  262. package/esm/rules/fill.js +0 -8
  263. package/esm/rules/fill.js.map +0 -1
  264. package/esm/rules/filter.d.ts +0 -8
  265. package/esm/rules/filter.js +0 -20
  266. package/esm/rules/filter.js.map +0 -1
  267. package/esm/rules/flex-basis.d.ts +0 -5
  268. package/esm/rules/flex-basis.js +0 -6
  269. package/esm/rules/flex-basis.js.map +0 -1
  270. package/esm/rules/flex-direction.d.ts +0 -6
  271. package/esm/rules/flex-direction.js +0 -7
  272. package/esm/rules/flex-direction.js.map +0 -1
  273. package/esm/rules/flex-grow.d.ts +0 -6
  274. package/esm/rules/flex-grow.js +0 -7
  275. package/esm/rules/flex-grow.js.map +0 -1
  276. package/esm/rules/flex-shrink.d.ts +0 -6
  277. package/esm/rules/flex-shrink.js +0 -7
  278. package/esm/rules/flex-shrink.js.map +0 -1
  279. package/esm/rules/flex-wrap.d.ts +0 -6
  280. package/esm/rules/flex-wrap.js +0 -7
  281. package/esm/rules/flex-wrap.js.map +0 -1
  282. package/esm/rules/flex.d.ts +0 -7
  283. package/esm/rules/flex.js +0 -8
  284. package/esm/rules/flex.js.map +0 -1
  285. package/esm/rules/float.d.ts +0 -5
  286. package/esm/rules/float.js +0 -6
  287. package/esm/rules/float.js.map +0 -1
  288. package/esm/rules/font-family.d.ts +0 -6
  289. package/esm/rules/font-family.js +0 -7
  290. package/esm/rules/font-family.js.map +0 -1
  291. package/esm/rules/font-size.d.ts +0 -6
  292. package/esm/rules/font-size.js +0 -7
  293. package/esm/rules/font-size.js.map +0 -1
  294. package/esm/rules/font-smoothing.d.ts +0 -9
  295. package/esm/rules/font-smoothing.js +0 -34
  296. package/esm/rules/font-smoothing.js.map +0 -1
  297. package/esm/rules/font-style.d.ts +0 -7
  298. package/esm/rules/font-style.js +0 -8
  299. package/esm/rules/font-style.js.map +0 -1
  300. package/esm/rules/font-variant-numeric.d.ts +0 -6
  301. package/esm/rules/font-variant-numeric.js +0 -7
  302. package/esm/rules/font-variant-numeric.js.map +0 -1
  303. package/esm/rules/font-weight.d.ts +0 -7
  304. package/esm/rules/font-weight.js +0 -8
  305. package/esm/rules/font-weight.js.map +0 -1
  306. package/esm/rules/font.d.ts +0 -8
  307. package/esm/rules/font.js +0 -9
  308. package/esm/rules/font.js.map +0 -1
  309. package/esm/rules/gap.d.ts +0 -9
  310. package/esm/rules/gap.js +0 -17
  311. package/esm/rules/gap.js.map +0 -1
  312. package/esm/rules/grid-area.d.ts +0 -7
  313. package/esm/rules/grid-area.js +0 -8
  314. package/esm/rules/grid-area.js.map +0 -1
  315. package/esm/rules/grid-auto-columns.d.ts +0 -6
  316. package/esm/rules/grid-auto-columns.js +0 -7
  317. package/esm/rules/grid-auto-columns.js.map +0 -1
  318. package/esm/rules/grid-auto-flow.d.ts +0 -6
  319. package/esm/rules/grid-auto-flow.js +0 -7
  320. package/esm/rules/grid-auto-flow.js.map +0 -1
  321. package/esm/rules/grid-auto-rows.d.ts +0 -5
  322. package/esm/rules/grid-auto-rows.js +0 -6
  323. package/esm/rules/grid-auto-rows.js.map +0 -1
  324. package/esm/rules/grid-column-end.d.ts +0 -7
  325. package/esm/rules/grid-column-end.js +0 -8
  326. package/esm/rules/grid-column-end.js.map +0 -1
  327. package/esm/rules/grid-column-start.d.ts +0 -7
  328. package/esm/rules/grid-column-start.js +0 -8
  329. package/esm/rules/grid-column-start.js.map +0 -1
  330. package/esm/rules/grid-column.d.ts +0 -9
  331. package/esm/rules/grid-column.js +0 -14
  332. package/esm/rules/grid-column.js.map +0 -1
  333. package/esm/rules/grid-columns.d.ts +0 -10
  334. package/esm/rules/grid-columns.js +0 -21
  335. package/esm/rules/grid-columns.js.map +0 -1
  336. package/esm/rules/grid-row-end.d.ts +0 -6
  337. package/esm/rules/grid-row-end.js +0 -7
  338. package/esm/rules/grid-row-end.js.map +0 -1
  339. package/esm/rules/grid-row-start.d.ts +0 -6
  340. package/esm/rules/grid-row-start.js +0 -7
  341. package/esm/rules/grid-row-start.js.map +0 -1
  342. package/esm/rules/grid-row.d.ts +0 -9
  343. package/esm/rules/grid-row.js +0 -14
  344. package/esm/rules/grid-row.js.map +0 -1
  345. package/esm/rules/grid-rows.d.ts +0 -9
  346. package/esm/rules/grid-rows.js +0 -21
  347. package/esm/rules/grid-rows.js.map +0 -1
  348. package/esm/rules/grid-template-areas.d.ts +0 -5
  349. package/esm/rules/grid-template-areas.js +0 -6
  350. package/esm/rules/grid-template-areas.js.map +0 -1
  351. package/esm/rules/grid-template-columns.d.ts +0 -6
  352. package/esm/rules/grid-template-columns.js +0 -7
  353. package/esm/rules/grid-template-columns.js.map +0 -1
  354. package/esm/rules/grid-template-rows.d.ts +0 -5
  355. package/esm/rules/grid-template-rows.js +0 -6
  356. package/esm/rules/grid-template-rows.js.map +0 -1
  357. package/esm/rules/grid-template.d.ts +0 -6
  358. package/esm/rules/grid-template.js +0 -7
  359. package/esm/rules/grid-template.js.map +0 -1
  360. package/esm/rules/grid.d.ts +0 -6
  361. package/esm/rules/grid.js +0 -7
  362. package/esm/rules/grid.js.map +0 -1
  363. package/esm/rules/group.d.ts +0 -9
  364. package/esm/rules/group.js +0 -105
  365. package/esm/rules/group.js.map +0 -1
  366. package/esm/rules/height.d.ts +0 -6
  367. package/esm/rules/height.js +0 -7
  368. package/esm/rules/height.js.map +0 -1
  369. package/esm/rules/inset.d.ts +0 -9
  370. package/esm/rules/inset.js +0 -12
  371. package/esm/rules/inset.js.map +0 -1
  372. package/esm/rules/isolation.d.ts +0 -5
  373. package/esm/rules/isolation.js +0 -6
  374. package/esm/rules/isolation.js.map +0 -1
  375. package/esm/rules/justify-content.d.ts +0 -6
  376. package/esm/rules/justify-content.js +0 -7
  377. package/esm/rules/justify-content.js.map +0 -1
  378. package/esm/rules/justify-items.d.ts +0 -6
  379. package/esm/rules/justify-items.js +0 -7
  380. package/esm/rules/justify-items.js.map +0 -1
  381. package/esm/rules/justify-self.d.ts +0 -6
  382. package/esm/rules/justify-self.js +0 -7
  383. package/esm/rules/justify-self.js.map +0 -1
  384. package/esm/rules/letter-spacing.d.ts +0 -7
  385. package/esm/rules/letter-spacing.js +0 -8
  386. package/esm/rules/letter-spacing.js.map +0 -1
  387. package/esm/rules/line-clamp.d.ts +0 -9
  388. package/esm/rules/line-clamp.js +0 -12
  389. package/esm/rules/line-clamp.js.map +0 -1
  390. package/esm/rules/line-height.d.ts +0 -7
  391. package/esm/rules/line-height.js +0 -8
  392. package/esm/rules/line-height.js.map +0 -1
  393. package/esm/rules/lines.d.ts +0 -9
  394. package/esm/rules/lines.js +0 -17
  395. package/esm/rules/lines.js.map +0 -1
  396. package/esm/rules/list-style-image.d.ts +0 -6
  397. package/esm/rules/list-style-image.js +0 -7
  398. package/esm/rules/list-style-image.js.map +0 -1
  399. package/esm/rules/list-style-position.d.ts +0 -6
  400. package/esm/rules/list-style-position.js +0 -7
  401. package/esm/rules/list-style-position.js.map +0 -1
  402. package/esm/rules/list-style-type.d.ts +0 -6
  403. package/esm/rules/list-style-type.js +0 -7
  404. package/esm/rules/list-style-type.js.map +0 -1
  405. package/esm/rules/list-style.d.ts +0 -6
  406. package/esm/rules/list-style.js +0 -7
  407. package/esm/rules/list-style.js.map +0 -1
  408. package/esm/rules/margin.d.ts +0 -9
  409. package/esm/rules/margin.js +0 -14
  410. package/esm/rules/margin.js.map +0 -1
  411. package/esm/rules/mask-image.d.ts +0 -8
  412. package/esm/rules/mask-image.js +0 -12
  413. package/esm/rules/mask-image.js.map +0 -1
  414. package/esm/rules/max-height.d.ts +0 -6
  415. package/esm/rules/max-height.js +0 -7
  416. package/esm/rules/max-height.js.map +0 -1
  417. package/esm/rules/max-width.d.ts +0 -6
  418. package/esm/rules/max-width.js +0 -7
  419. package/esm/rules/max-width.js.map +0 -1
  420. package/esm/rules/min-height.d.ts +0 -6
  421. package/esm/rules/min-height.js +0 -7
  422. package/esm/rules/min-height.js.map +0 -1
  423. package/esm/rules/min-width.d.ts +0 -6
  424. package/esm/rules/min-width.js +0 -7
  425. package/esm/rules/min-width.js.map +0 -1
  426. package/esm/rules/mix-blend-mode.d.ts +0 -6
  427. package/esm/rules/mix-blend-mode.js +0 -7
  428. package/esm/rules/mix-blend-mode.js.map +0 -1
  429. package/esm/rules/object-fit.d.ts +0 -6
  430. package/esm/rules/object-fit.js +0 -7
  431. package/esm/rules/object-fit.js.map +0 -1
  432. package/esm/rules/object-position.d.ts +0 -6
  433. package/esm/rules/object-position.js +0 -7
  434. package/esm/rules/object-position.js.map +0 -1
  435. package/esm/rules/opacity.d.ts +0 -6
  436. package/esm/rules/opacity.js +0 -7
  437. package/esm/rules/opacity.js.map +0 -1
  438. package/esm/rules/order.d.ts +0 -7
  439. package/esm/rules/order.js +0 -9
  440. package/esm/rules/order.js.map +0 -1
  441. package/esm/rules/outline-color.d.ts +0 -7
  442. package/esm/rules/outline-color.js +0 -8
  443. package/esm/rules/outline-color.js.map +0 -1
  444. package/esm/rules/outline-offset.d.ts +0 -5
  445. package/esm/rules/outline-offset.js +0 -6
  446. package/esm/rules/outline-offset.js.map +0 -1
  447. package/esm/rules/outline-style.d.ts +0 -6
  448. package/esm/rules/outline-style.js +0 -7
  449. package/esm/rules/outline-style.js.map +0 -1
  450. package/esm/rules/outline-width.d.ts +0 -6
  451. package/esm/rules/outline-width.js +0 -7
  452. package/esm/rules/outline-width.js.map +0 -1
  453. package/esm/rules/outline.d.ts +0 -7
  454. package/esm/rules/outline.js +0 -8
  455. package/esm/rules/outline.js.map +0 -1
  456. package/esm/rules/overflow.d.ts +0 -9
  457. package/esm/rules/overflow.js +0 -27
  458. package/esm/rules/overflow.js.map +0 -1
  459. package/esm/rules/overscroll-behavior.d.ts +0 -8
  460. package/esm/rules/overscroll-behavior.js +0 -16
  461. package/esm/rules/overscroll-behavior.js.map +0 -1
  462. package/esm/rules/padding.d.ts +0 -9
  463. package/esm/rules/padding.js +0 -14
  464. package/esm/rules/padding.js.map +0 -1
  465. package/esm/rules/place-content.d.ts +0 -6
  466. package/esm/rules/place-content.js +0 -7
  467. package/esm/rules/place-content.js.map +0 -1
  468. package/esm/rules/place-items.d.ts +0 -6
  469. package/esm/rules/place-items.js +0 -7
  470. package/esm/rules/place-items.js.map +0 -1
  471. package/esm/rules/place-self.d.ts +0 -6
  472. package/esm/rules/place-self.js +0 -7
  473. package/esm/rules/place-self.js.map +0 -1
  474. package/esm/rules/placement.d.ts +0 -8
  475. package/esm/rules/placement.js +0 -30
  476. package/esm/rules/placement.js.map +0 -1
  477. package/esm/rules/pointer-events.d.ts +0 -5
  478. package/esm/rules/pointer-events.js +0 -6
  479. package/esm/rules/pointer-events.js.map +0 -1
  480. package/esm/rules/position.d.ts +0 -5
  481. package/esm/rules/position.js +0 -6
  482. package/esm/rules/position.js.map +0 -1
  483. package/esm/rules/quotes.d.ts +0 -5
  484. package/esm/rules/quotes.js +0 -6
  485. package/esm/rules/quotes.js.map +0 -1
  486. package/esm/rules/resize.d.ts +0 -5
  487. package/esm/rules/resize.js +0 -6
  488. package/esm/rules/resize.js.map +0 -1
  489. package/esm/rules/rx.d.ts +0 -6
  490. package/esm/rules/rx.js +0 -7
  491. package/esm/rules/rx.js.map +0 -1
  492. package/esm/rules/ry.d.ts +0 -6
  493. package/esm/rules/ry.js +0 -7
  494. package/esm/rules/ry.js.map +0 -1
  495. package/esm/rules/scroll-behavior.d.ts +0 -5
  496. package/esm/rules/scroll-behavior.js +0 -6
  497. package/esm/rules/scroll-behavior.js.map +0 -1
  498. package/esm/rules/scroll-margin.d.ts +0 -9
  499. package/esm/rules/scroll-margin.js +0 -46
  500. package/esm/rules/scroll-margin.js.map +0 -1
  501. package/esm/rules/scroll-padding.d.ts +0 -9
  502. package/esm/rules/scroll-padding.js +0 -46
  503. package/esm/rules/scroll-padding.js.map +0 -1
  504. package/esm/rules/scroll-snap-align.d.ts +0 -6
  505. package/esm/rules/scroll-snap-align.js +0 -7
  506. package/esm/rules/scroll-snap-align.js.map +0 -1
  507. package/esm/rules/scroll-snap-stop.d.ts +0 -6
  508. package/esm/rules/scroll-snap-stop.js +0 -7
  509. package/esm/rules/scroll-snap-stop.js.map +0 -1
  510. package/esm/rules/scroll-snap-type.d.ts +0 -6
  511. package/esm/rules/scroll-snap-type.js +0 -7
  512. package/esm/rules/scroll-snap-type.js.map +0 -1
  513. package/esm/rules/shape-image-threshold.d.ts +0 -6
  514. package/esm/rules/shape-image-threshold.js +0 -7
  515. package/esm/rules/shape-image-threshold.js.map +0 -1
  516. package/esm/rules/shape-margin.d.ts +0 -6
  517. package/esm/rules/shape-margin.js +0 -7
  518. package/esm/rules/shape-margin.js.map +0 -1
  519. package/esm/rules/shape-outside.d.ts +0 -6
  520. package/esm/rules/shape-outside.js +0 -7
  521. package/esm/rules/shape-outside.js.map +0 -1
  522. package/esm/rules/spacing.d.ts +0 -9
  523. package/esm/rules/spacing.js +0 -49
  524. package/esm/rules/spacing.js.map +0 -1
  525. package/esm/rules/stroke-dasharray.d.ts +0 -5
  526. package/esm/rules/stroke-dasharray.js +0 -6
  527. package/esm/rules/stroke-dasharray.js.map +0 -1
  528. package/esm/rules/stroke-dashoffset.d.ts +0 -5
  529. package/esm/rules/stroke-dashoffset.js +0 -6
  530. package/esm/rules/stroke-dashoffset.js.map +0 -1
  531. package/esm/rules/stroke-width.d.ts +0 -6
  532. package/esm/rules/stroke-width.js +0 -7
  533. package/esm/rules/stroke-width.js.map +0 -1
  534. package/esm/rules/stroke.d.ts +0 -6
  535. package/esm/rules/stroke.js +0 -7
  536. package/esm/rules/stroke.js.map +0 -1
  537. package/esm/rules/table-layout.d.ts +0 -5
  538. package/esm/rules/table-layout.js +0 -6
  539. package/esm/rules/table-layout.js.map +0 -1
  540. package/esm/rules/text-align.d.ts +0 -6
  541. package/esm/rules/text-align.js +0 -7
  542. package/esm/rules/text-align.js.map +0 -1
  543. package/esm/rules/text-decoration-color.d.ts +0 -7
  544. package/esm/rules/text-decoration-color.js +0 -8
  545. package/esm/rules/text-decoration-color.js.map +0 -1
  546. package/esm/rules/text-decoration-line.d.ts +0 -6
  547. package/esm/rules/text-decoration-line.js +0 -7
  548. package/esm/rules/text-decoration-line.js.map +0 -1
  549. package/esm/rules/text-decoration-style.d.ts +0 -6
  550. package/esm/rules/text-decoration-style.js +0 -7
  551. package/esm/rules/text-decoration-style.js.map +0 -1
  552. package/esm/rules/text-decoration-thickness.d.ts +0 -7
  553. package/esm/rules/text-decoration-thickness.js +0 -8
  554. package/esm/rules/text-decoration-thickness.js.map +0 -1
  555. package/esm/rules/text-decoration.d.ts +0 -8
  556. package/esm/rules/text-decoration.js +0 -9
  557. package/esm/rules/text-decoration.js.map +0 -1
  558. package/esm/rules/text-fill-color.d.ts +0 -10
  559. package/esm/rules/text-fill-color.js +0 -13
  560. package/esm/rules/text-fill-color.js.map +0 -1
  561. package/esm/rules/text-indent.d.ts +0 -5
  562. package/esm/rules/text-indent.js +0 -6
  563. package/esm/rules/text-indent.js.map +0 -1
  564. package/esm/rules/text-orientation.d.ts +0 -6
  565. package/esm/rules/text-orientation.js +0 -7
  566. package/esm/rules/text-orientation.js.map +0 -1
  567. package/esm/rules/text-overflow.d.ts +0 -6
  568. package/esm/rules/text-overflow.js +0 -7
  569. package/esm/rules/text-overflow.js.map +0 -1
  570. package/esm/rules/text-rendering.d.ts +0 -6
  571. package/esm/rules/text-rendering.js +0 -7
  572. package/esm/rules/text-rendering.js.map +0 -1
  573. package/esm/rules/text-shadow.d.ts +0 -6
  574. package/esm/rules/text-shadow.js +0 -7
  575. package/esm/rules/text-shadow.js.map +0 -1
  576. package/esm/rules/text-size.d.ts +0 -8
  577. package/esm/rules/text-size.js +0 -18
  578. package/esm/rules/text-size.js.map +0 -1
  579. package/esm/rules/text-stroke-color.d.ts +0 -10
  580. package/esm/rules/text-stroke-color.js +0 -13
  581. package/esm/rules/text-stroke-color.js.map +0 -1
  582. package/esm/rules/text-stroke-width.d.ts +0 -8
  583. package/esm/rules/text-stroke-width.js +0 -11
  584. package/esm/rules/text-stroke-width.js.map +0 -1
  585. package/esm/rules/text-stroke.d.ts +0 -8
  586. package/esm/rules/text-stroke.js +0 -11
  587. package/esm/rules/text-stroke.js.map +0 -1
  588. package/esm/rules/text-transform.d.ts +0 -6
  589. package/esm/rules/text-transform.js +0 -7
  590. package/esm/rules/text-transform.js.map +0 -1
  591. package/esm/rules/text-underline-offset.d.ts +0 -5
  592. package/esm/rules/text-underline-offset.js +0 -6
  593. package/esm/rules/text-underline-offset.js.map +0 -1
  594. package/esm/rules/touch-action.d.ts +0 -5
  595. package/esm/rules/touch-action.js +0 -6
  596. package/esm/rules/touch-action.js.map +0 -1
  597. package/esm/rules/transform-box.d.ts +0 -6
  598. package/esm/rules/transform-box.js +0 -7
  599. package/esm/rules/transform-box.js.map +0 -1
  600. package/esm/rules/transform-origin.d.ts +0 -7
  601. package/esm/rules/transform-origin.js +0 -8
  602. package/esm/rules/transform-origin.js.map +0 -1
  603. package/esm/rules/transform-style.d.ts +0 -6
  604. package/esm/rules/transform-style.js +0 -7
  605. package/esm/rules/transform-style.js.map +0 -1
  606. package/esm/rules/transform.d.ts +0 -9
  607. package/esm/rules/transform.js +0 -45
  608. package/esm/rules/transform.js.map +0 -1
  609. package/esm/rules/transition-delay.d.ts +0 -7
  610. package/esm/rules/transition-delay.js +0 -8
  611. package/esm/rules/transition-delay.js.map +0 -1
  612. package/esm/rules/transition-duration.d.ts +0 -7
  613. package/esm/rules/transition-duration.js +0 -8
  614. package/esm/rules/transition-duration.js.map +0 -1
  615. package/esm/rules/transition-property.d.ts +0 -6
  616. package/esm/rules/transition-property.js +0 -7
  617. package/esm/rules/transition-property.js.map +0 -1
  618. package/esm/rules/transition-timing-function.d.ts +0 -6
  619. package/esm/rules/transition-timing-function.js +0 -7
  620. package/esm/rules/transition-timing-function.js.map +0 -1
  621. package/esm/rules/transition.d.ts +0 -7
  622. package/esm/rules/transition.js +0 -8
  623. package/esm/rules/transition.js.map +0 -1
  624. package/esm/rules/user-drag.d.ts +0 -8
  625. package/esm/rules/user-drag.js +0 -12
  626. package/esm/rules/user-drag.js.map +0 -1
  627. package/esm/rules/user-select.d.ts +0 -8
  628. package/esm/rules/user-select.js +0 -12
  629. package/esm/rules/user-select.js.map +0 -1
  630. package/esm/rules/variable.d.ts +0 -9
  631. package/esm/rules/variable.js +0 -12
  632. package/esm/rules/variable.js.map +0 -1
  633. package/esm/rules/vertical-align.d.ts +0 -6
  634. package/esm/rules/vertical-align.js +0 -7
  635. package/esm/rules/vertical-align.js.map +0 -1
  636. package/esm/rules/visibility.d.ts +0 -5
  637. package/esm/rules/visibility.js +0 -6
  638. package/esm/rules/visibility.js.map +0 -1
  639. package/esm/rules/white-space.d.ts +0 -6
  640. package/esm/rules/white-space.js +0 -7
  641. package/esm/rules/white-space.js.map +0 -1
  642. package/esm/rules/width.d.ts +0 -6
  643. package/esm/rules/width.js +0 -7
  644. package/esm/rules/width.js.map +0 -1
  645. package/esm/rules/will-change.d.ts +0 -5
  646. package/esm/rules/will-change.js +0 -6
  647. package/esm/rules/will-change.js.map +0 -1
  648. package/esm/rules/word-break.d.ts +0 -6
  649. package/esm/rules/word-break.js +0 -7
  650. package/esm/rules/word-break.js.map +0 -1
  651. package/esm/rules/word-spacing.d.ts +0 -6
  652. package/esm/rules/word-spacing.js +0 -7
  653. package/esm/rules/word-spacing.js.map +0 -1
  654. package/esm/rules/writing-mode.d.ts +0 -6
  655. package/esm/rules/writing-mode.js +0 -7
  656. package/esm/rules/writing-mode.js.map +0 -1
  657. package/esm/rules/x.d.ts +0 -6
  658. package/esm/rules/x.js +0 -7
  659. package/esm/rules/x.js.map +0 -1
  660. package/esm/rules/y.d.ts +0 -6
  661. package/esm/rules/y.js +0 -7
  662. package/esm/rules/y.js.map +0 -1
  663. package/esm/rules/z-index.d.ts +0 -7
  664. package/esm/rules/z-index.js +0 -8
  665. package/esm/rules/z-index.js.map +0 -1
  666. package/esm/utils/concat-arrays.d.ts +0 -1
  667. package/esm/utils/concat-arrays.js +0 -8
  668. package/esm/utils/concat-arrays.js.map +0 -1
  669. package/esm/utils/get-border-props.d.ts +0 -3
  670. package/esm/utils/get-border-props.js +0 -44
  671. package/esm/utils/get-border-props.js.map +0 -1
  672. package/esm/utils/get-css-property-text.d.ts +0 -5
  673. package/esm/utils/get-css-property-text.js +0 -8
  674. package/esm/utils/get-css-property-text.js.map +0 -1
  675. package/esm/utils/get-type.d.ts +0 -7
  676. package/esm/utils/get-type.js +0 -10
  677. package/esm/utils/get-type.js.map +0 -1
  678. package/esm/utils/hex-to-rgb.d.ts +0 -1
  679. package/esm/utils/hex-to-rgb.js +0 -8
  680. package/esm/utils/hex-to-rgb.js.map +0 -1
  681. package/esm/utils/is-plain-object.d.ts +0 -8
  682. package/esm/utils/is-plain-object.js +0 -13
  683. package/esm/utils/is-plain-object.js.map +0 -1
  684. package/esm/utils/is-symbol.d.ts +0 -7
  685. package/esm/utils/is-symbol.js +0 -11
  686. package/esm/utils/is-symbol.js.map +0 -1
  687. package/esm/utils/normalize-css-calc-text.d.ts +0 -5
  688. package/esm/utils/normalize-css-calc-text.js +0 -56
  689. package/esm/utils/normalize-css-calc-text.js.map +0 -1
  690. package/esm/utils/parse-value-unit.d.ts +0 -2
  691. package/esm/utils/parse-value-unit.js +0 -48
  692. package/esm/utils/parse-value-unit.js.map +0 -1
  693. package/esm/utils/parse-value.d.ts +0 -6
  694. package/esm/utils/parse-value.js +0 -84
  695. package/esm/utils/parse-value.js.map +0 -1
  696. package/esm/utils/rgb-to-hex.d.ts +0 -1
  697. package/esm/utils/rgb-to-hex.js +0 -4
  698. package/esm/utils/rgb-to-hex.js.map +0 -1
  699. package/index.js.map +0 -7
package/esm/css.js DELETED
@@ -1,962 +0,0 @@
1
- import { defaultConfig } from './config';
2
- import { init } from './apis/init';
3
- import { MasterCSSRule } from './rule';
4
- const selectorSymbols = [',', '.', '#', '[', '!', '*', '>', '+', '~', ':', '@'];
5
- const vendorPrefixSelectorRegExp = /^::-[a-z]+-/m;
6
- const hasDocument = typeof document !== 'undefined';
7
- let STYLE;
8
- if (hasDocument) {
9
- STYLE = document.createElement('style');
10
- STYLE.title = 'master';
11
- }
12
- const MAX_WIDTH = 'max-width';
13
- const MIN_WIDTH = 'min-width';
14
- const ATTRIBUTES = 'attributes';
15
- const isBrowser = typeof window !== 'undefined';
16
- const MutationObserver = isBrowser
17
- ? window.MutationObserver
18
- : Object;
19
- export default class MasterCSS extends MutationObserver {
20
- config;
21
- root;
22
- static init = init;
23
- static defaultConfig = defaultConfig;
24
- static instances = [];
25
- static root;
26
- /**
27
- * 全部 sheet 根據目前蒐集到的所有 DOM class 重新 findAndNew
28
- */
29
- static refresh(config) {
30
- for (const eachInstance of this.instances) {
31
- eachInstance.refresh(config);
32
- }
33
- }
34
- style;
35
- rules = [];
36
- ruleOfClass = {};
37
- countOfClass = {};
38
- host;
39
- semantics;
40
- classes;
41
- colorsThemesMap;
42
- colorNames;
43
- themeNames;
44
- relationThemesMap;
45
- relations;
46
- selectors;
47
- schemeMQL;
48
- constructor(config = defaultConfig, root) {
49
- super((mutationRecords) => {
50
- // console.time('css engine');
51
- const correctionOfClassName = {};
52
- const attributeMutationRecords = [];
53
- const updatedElements = [];
54
- const unchangedElements = [];
55
- /**
56
- * 取得所有深層後代的 class names
57
- */
58
- const handleClassNameDeeply = (element, remove) => {
59
- if (remove) {
60
- element.classList.forEach(removeClassName);
61
- }
62
- else {
63
- element.classList.forEach(addClassName);
64
- }
65
- const children = element.children;
66
- for (let i = 0; i < children.length; i++) {
67
- const eachChildren = children[i];
68
- if (eachChildren.classList) {
69
- updatedElements.push(eachChildren);
70
- handleClassNameDeeply(eachChildren, remove);
71
- }
72
- }
73
- };
74
- const addClassName = (className) => {
75
- if (className in correctionOfClassName) {
76
- correctionOfClassName[className]++;
77
- }
78
- else {
79
- correctionOfClassName[className] = 1;
80
- }
81
- };
82
- const removeClassName = (className) => {
83
- if (className in correctionOfClassName) {
84
- correctionOfClassName[className]--;
85
- }
86
- else {
87
- correctionOfClassName[className] = -1;
88
- }
89
- };
90
- const handleNodes = (nodes, remove) => {
91
- for (let i = 0; i < nodes.length; i++) {
92
- const eachNode = nodes[i];
93
- if (eachNode.classList && !updatedElements.includes(eachNode) && !unchangedElements.includes(eachNode)) {
94
- if (eachNode.isConnected !== remove) {
95
- updatedElements.push(eachNode);
96
- handleClassNameDeeply(eachNode, remove);
97
- }
98
- else {
99
- unchangedElements.push(eachNode);
100
- }
101
- }
102
- }
103
- };
104
- for (let i = 0; i < mutationRecords.length; i++) {
105
- const mutationRecord = mutationRecords[i];
106
- const { addedNodes, removedNodes, type, target, oldValue } = mutationRecord;
107
- if (type === ATTRIBUTES) {
108
- /**
109
- * 防止同樣的 MutationRecord 重複執行
110
- * According to this history,
111
- * MutationObserver was designed to work that way.
112
- * Any call to setAttribute triggers a mutation,
113
- * regardless of whether the value is being changed or set to the current value
114
- */
115
- if (target['className'] === oldValue // prevent same class to execute
116
- || attributeMutationRecords
117
- .find((eachAttributeMutationRecord) => eachAttributeMutationRecord.target === target)) {
118
- continue;
119
- }
120
- else {
121
- /**
122
- * 第一個匹配到的 oldValue 一定是該批變動前的原始狀態值
123
- */
124
- attributeMutationRecords.push(mutationRecord);
125
- }
126
- }
127
- else {
128
- // 先判斷節點新增或移除
129
- handleNodes(addedNodes, false);
130
- handleNodes(removedNodes, true);
131
- }
132
- }
133
- if (!attributeMutationRecords.length && !Object.keys(correctionOfClassName).length) {
134
- // console.timeEnd('css engine');
135
- return;
136
- }
137
- for (const { oldValue, target } of attributeMutationRecords) {
138
- /**
139
- * 如果被操作的元素中包含了屬性變更的目標,
140
- * 則將該目標從 existedAttributeMutationTargets 中移除,
141
- * 以防止執行接下來的屬性變更處理
142
- *
143
- * 該批 mutationRecords 中,某個 target 同時有 attribute 及 childList 的變更,
144
- * 則以 childList 節點插入及移除的 target.className 為主
145
- */
146
- const updated = updatedElements.includes(target);
147
- const classNames = target.classList;
148
- const oldClassNames = oldValue ? oldValue.split(' ') : [];
149
- if (updated) {
150
- if (target.isConnected) {
151
- continue;
152
- }
153
- else {
154
- for (const oldClassName of oldClassNames) {
155
- if (!classNames.contains(oldClassName)) {
156
- removeClassName(oldClassName);
157
- }
158
- }
159
- }
160
- }
161
- else {
162
- if (target.isConnected) {
163
- classNames.forEach((className) => {
164
- if (!oldClassNames.includes(className)) {
165
- addClassName(className);
166
- }
167
- });
168
- for (const oldClassName of oldClassNames) {
169
- if (!classNames.contains(oldClassName)) {
170
- removeClassName(oldClassName);
171
- }
172
- }
173
- }
174
- else {
175
- for (const oldClassName of oldClassNames) {
176
- removeClassName(oldClassName);
177
- }
178
- }
179
- }
180
- }
181
- for (const className in correctionOfClassName) {
182
- const correction = correctionOfClassName[className];
183
- const count = (this.countOfClass[className] || 0) + correction;
184
- if (count === 0) {
185
- // remove
186
- delete this.countOfClass[className];
187
- /**
188
- * class name 從 DOM tree 中被移除,
189
- * 匹配並刪除對應的 rule
190
- */
191
- this.delete(className);
192
- }
193
- else {
194
- if (!(className in this.countOfClass)) {
195
- // add
196
- /**
197
- * 新 class name 被 connected 至 DOM tree,
198
- * 匹配並創建對應的 Rule
199
- */
200
- this.findAndInsert(className);
201
- }
202
- this.countOfClass[className] = count;
203
- }
204
- }
205
- // console.timeEnd('css engine');
206
- });
207
- this.config = config;
208
- this.root = root;
209
- this.cache();
210
- if (hasDocument && root) {
211
- const isDocumentRoot = root === document;
212
- this.host = isDocumentRoot ? document.documentElement : root.host;
213
- // sync theme
214
- this.scheme = this.storageScheme || config.scheme.preference;
215
- const container = isDocumentRoot ? document.head : root;
216
- const styleSheets = isDocumentRoot ? document.styleSheets : root.styleSheets;
217
- // @ts-ignore
218
- for (const sheet of styleSheets) {
219
- if (sheet.title === 'master') {
220
- this.style = sheet.ownerNode;
221
- }
222
- }
223
- if (this.style) {
224
- for (let index = 0; index < this.style.sheet.cssRules.length; index++) {
225
- const getRule = (cssRule) => {
226
- if (cssRule.selectorText) {
227
- const selectorTexts = cssRule.selectorText.split(', ');
228
- const escapedClassNames = selectorTexts[0].split(' ');
229
- for (let i = 0; i < escapedClassNames.length; i++) {
230
- const eachSelectorText = escapedClassNames[i];
231
- if (eachSelectorText[0] === '.') {
232
- const escapedClassName = eachSelectorText.slice(1);
233
- let className = '';
234
- for (let j = 0; j < escapedClassName.length; j++) {
235
- const char = escapedClassName[j];
236
- const nextChar = escapedClassName[j + 1];
237
- if (char === '\\') {
238
- j++;
239
- if (nextChar !== '\\') {
240
- className += nextChar;
241
- continue;
242
- }
243
- }
244
- else if (selectorSymbols.includes(char)) {
245
- break;
246
- }
247
- className += char;
248
- }
249
- if (!(className in this.ruleOfClass) && !(className in this.classes)) {
250
- const currentRule = this.findAndNew(className);
251
- if (currentRule)
252
- return currentRule;
253
- }
254
- }
255
- }
256
- }
257
- else if (cssRule.cssRules) {
258
- for (let index = 0; index < cssRule.cssRules.length; index++) {
259
- const currentRule = getRule(cssRule.cssRules[index]);
260
- if (currentRule)
261
- return currentRule;
262
- }
263
- }
264
- };
265
- const rule = getRule(this.style.sheet.cssRules[index]);
266
- if (rule) {
267
- this.rules.push(rule);
268
- this.ruleOfClass[rule.className] = rule;
269
- for (let i = 0; i < rule.natives.length; i++) {
270
- rule.natives[i].cssRule = this.style.sheet.cssRules[index + i];
271
- }
272
- index += rule.natives.length - 1;
273
- }
274
- }
275
- }
276
- else {
277
- this.style = STYLE.cloneNode();
278
- /** 使用 prepend 而非 append 去降低 rules 類的優先層級,無法強制排在所有 <style> 之後 */
279
- container.prepend(this.style);
280
- }
281
- }
282
- MasterCSS.instances.push(this);
283
- }
284
- get storageScheme() {
285
- const { storage } = this.config.scheme;
286
- return localStorage.getItem(storage.key);
287
- }
288
- #scheme;
289
- theme;
290
- set scheme(scheme) {
291
- if (scheme !== this.#scheme) {
292
- this.#scheme = scheme;
293
- let theme = '';
294
- const { storage } = this.config.scheme;
295
- if (scheme === 'system') {
296
- // 按照系統的主題切換,目前只支援 light dark
297
- this.schemeMQL = window.matchMedia('(prefers-color-scheme:dark)');
298
- this.schemeMQL.addEventListener('change', this.onSchemeChange);
299
- theme = this.schemeMQL.matches ? 'dark' : 'light';
300
- }
301
- else {
302
- this.removeSchemeListener();
303
- theme = scheme;
304
- }
305
- if (this.storageScheme !== scheme && storage.sync) {
306
- localStorage.setItem(storage.key, scheme);
307
- }
308
- if (this.theme) {
309
- this.host.classList.remove(this.theme);
310
- }
311
- if (this.host === document.documentElement) {
312
- this.host.style.colorScheme = theme;
313
- }
314
- this.host.classList.add(theme);
315
- this.theme = theme;
316
- }
317
- }
318
- removeSchemeListener() {
319
- if (this.schemeMQL) {
320
- this.schemeMQL.removeEventListener('change', this.onSchemeChange);
321
- this.schemeMQL = null;
322
- }
323
- }
324
- onSchemeChange(mediaQueryList) {
325
- this.scheme = mediaQueryList.matches ? 'dark' : 'light';
326
- }
327
- cache() {
328
- this.semantics = [];
329
- this.classes = {};
330
- this.colorsThemesMap = {};
331
- this.relationThemesMap = {};
332
- this.relations = {};
333
- this.colorNames = [];
334
- this.themeNames = [''];
335
- this.selectors = {};
336
- const { semantics, classes, selectors, themes, colors } = this.config;
337
- function escapeString(str) {
338
- return str.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&');
339
- }
340
- if (semantics) {
341
- for (const semanticName in semantics) {
342
- this.semantics.push([new RegExp('^' + escapeString(semanticName) + '(?=!|\\*|>|\\+|~|:|\\[|@|_|\\.|$)', 'm'), semanticName]);
343
- }
344
- }
345
- if (selectors) {
346
- for (const [replacedSelectorText, newSelectorText] of Object.entries(selectors)) {
347
- const regexp = new RegExp(escapeString(replacedSelectorText) + '(?![a-z-])');
348
- for (const eachNewSelectorText of Array.isArray(newSelectorText) ? newSelectorText : [newSelectorText]) {
349
- const vendor = eachNewSelectorText.match(vendorPrefixSelectorRegExp)?.[0] ?? '';
350
- let selectorValues = this.selectors[vendor];
351
- if (!selectorValues) {
352
- selectorValues = this.selectors[vendor] = [];
353
- }
354
- let currentSelectValue = selectorValues.find(([_valueRegexp]) => _valueRegexp === regexp);
355
- if (!currentSelectValue) {
356
- currentSelectValue = [regexp, []];
357
- selectorValues.push(currentSelectValue);
358
- }
359
- currentSelectValue[1].push(eachNewSelectorText);
360
- }
361
- }
362
- }
363
- const semanticNames = [
364
- ...(classes ? Object.keys(classes) : []),
365
- ...((themes && !Array.isArray(themes))
366
- ? Object.entries(themes).flatMap(([_, { classes }]) => classes ? Object.keys(classes) : [])
367
- : [])
368
- ];
369
- const handleSemanticName = (semanticName) => {
370
- if (semanticName in this.classes)
371
- return;
372
- const currentClass = this.classes[semanticName] = [];
373
- const handleClassNames = (theme, className) => {
374
- if (!className)
375
- return;
376
- const classNames = Array.isArray(className)
377
- ? className
378
- : className
379
- .replace(/(?:\n(?:\s*))+/g, ' ')
380
- .trim()
381
- .split(' ');
382
- for (const eachClassName of classNames) {
383
- const handle = (className) => {
384
- if (className in this.relationThemesMap) {
385
- if (theme in this.relationThemesMap[className]) {
386
- this.relationThemesMap[className][theme].push(semanticName);
387
- }
388
- else {
389
- this.relationThemesMap[className][theme] = [semanticName];
390
- }
391
- }
392
- else {
393
- this.relationThemesMap[className] = { [theme]: [semanticName] };
394
- }
395
- if (!currentClass.includes(className)) {
396
- currentClass.push(className);
397
- }
398
- };
399
- if (semanticNames.includes(eachClassName)) {
400
- handleSemanticName(eachClassName);
401
- for (const parentClassName of this.classes[eachClassName]) {
402
- handle(parentClassName);
403
- }
404
- }
405
- else {
406
- handle(eachClassName);
407
- }
408
- }
409
- };
410
- handleClassNames('', classes?.[semanticName]);
411
- if (themes && !Array.isArray(themes)) {
412
- for (const [eachTheme, { classes }] of Object.entries(themes)) {
413
- handleClassNames(eachTheme, classes?.[semanticName]);
414
- }
415
- }
416
- };
417
- for (const eachSemanticName of semanticNames) {
418
- handleSemanticName(eachSemanticName);
419
- }
420
- for (const className in this.relationThemesMap) {
421
- const currentRelation = this.relations[className] = [];
422
- for (const semanticNames of Object.values(this.relationThemesMap[className])) {
423
- for (const eachSemanticName of semanticNames) {
424
- if (!currentRelation.includes(eachSemanticName)) {
425
- currentRelation.push(eachSemanticName);
426
- }
427
- }
428
- }
429
- }
430
- const mergeColors = (theme, colors) => {
431
- if (!colors)
432
- return;
433
- for (const colorName in colors) {
434
- let levels = colors[colorName];
435
- if (typeof levels === 'string') {
436
- levels = { '': levels };
437
- }
438
- if (colorName in this.colorsThemesMap) {
439
- const levelsThemes = this.colorsThemesMap[colorName];
440
- for (const level in levels) {
441
- const color = levels[level];
442
- if (level in levelsThemes) {
443
- levelsThemes[level][theme] = color;
444
- }
445
- else {
446
- levelsThemes[level] = { [theme]: color };
447
- }
448
- }
449
- }
450
- else {
451
- this.colorNames.push(colorName);
452
- this.colorsThemesMap[colorName] = Object
453
- .entries(levels)
454
- .reduce((obj, [level, color]) => {
455
- obj[level] = { [theme]: color };
456
- return obj;
457
- }, {});
458
- }
459
- }
460
- };
461
- mergeColors('', colors);
462
- if (themes) {
463
- if (Array.isArray(themes)) {
464
- this.themeNames.push(...themes);
465
- }
466
- else {
467
- for (const eachTheme in themes) {
468
- const themeValue = themes[eachTheme];
469
- mergeColors(eachTheme, themeValue.colors);
470
- this.themeNames.push(eachTheme);
471
- }
472
- }
473
- }
474
- }
475
- observe(options = { subtree: true, childList: true }) {
476
- if (options.subtree) {
477
- /**
478
- * 待所有 DOM 結構完成解析後,開始繪製 MasterCSSRule 樣式
479
- */
480
- this.host
481
- .querySelectorAll('[class]')
482
- .forEach((element) => {
483
- element.classList.forEach((className) => {
484
- if (className in this.countOfClass) {
485
- this.countOfClass[className]++;
486
- }
487
- else {
488
- this.countOfClass[className] = 1;
489
- this.findAndInsert(className);
490
- }
491
- });
492
- });
493
- }
494
- super.observe(this.root, {
495
- ...options,
496
- attributes: true,
497
- attributeOldValue: true,
498
- attributeFilter: ['class'],
499
- });
500
- return this;
501
- }
502
- disconnect() {
503
- super.disconnect();
504
- // @ts-ignore
505
- this.ruleOfClass = {};
506
- // @ts-ignore
507
- this.countOfClass = {};
508
- this.rules.length = 0;
509
- const sheet = this.style.sheet;
510
- if (sheet) {
511
- for (let i = sheet.cssRules.length - 1; i >= 0; i--) {
512
- sheet.deleteRule(i);
513
- }
514
- }
515
- }
516
- /**
517
- * 尋找匹配的 MasterCSSRule 生成實例
518
- */
519
- findAndNew(name) {
520
- const findAndNewRule = (className) => {
521
- if (className in this.ruleOfClass)
522
- return this.ruleOfClass[className];
523
- for (const EachRule of this.config.Rules) {
524
- const matching = EachRule.match(className, this.colorNames);
525
- if (matching)
526
- return new EachRule(className, matching, this);
527
- }
528
- for (const eachSemanticEntry of this.semantics) {
529
- if (className.match(eachSemanticEntry[0]))
530
- return new MasterCSSRule(className, { origin: 'semantics', value: eachSemanticEntry[1] }, this);
531
- }
532
- };
533
- return name in this.classes
534
- ? this.classes[name]
535
- .map(findAndNewRule)
536
- .filter(eachRule => eachRule)
537
- : findAndNewRule(name);
538
- }
539
- /**
540
- * 根據目前蒐集到的所有 DOM class 重新 findAndNew
541
- */
542
- refresh(config) {
543
- this.config = config;
544
- this.cache();
545
- if (!this.style) {
546
- return;
547
- }
548
- const element = STYLE.cloneNode();
549
- this.style.replaceWith(element);
550
- // @ts-ignore
551
- this.style = style;
552
- this.rules.length = 0;
553
- // @ts-ignore
554
- this.ruleOfClass = {};
555
- /**
556
- * 拿當前所有的 classNames 按照最新的 colors, breakpoints, config.Rules 匹配並生成新的 style
557
- * 所以 refresh 過後 rules 可能會變多也可能會變少
558
- */
559
- for (const name in this.countOfClass) {
560
- this.findAndInsert(name);
561
- }
562
- }
563
- destroy() {
564
- const instances = MasterCSS.instances;
565
- this.disconnect();
566
- instances.splice(instances.indexOf(this), 1);
567
- this.style.remove();
568
- this.removeSchemeListener();
569
- }
570
- /**
571
- * 1. where
572
- * 2. normal
573
- * 3. where selectors
574
- * 4. normal selectors
575
- * 5. media where
576
- * 6. media normal
577
- * 7. media selectors
578
- * 8. media width where
579
- * 9. media width
580
- * 10. media width selectors
581
- */
582
- insert(rule) {
583
- if (this.ruleOfClass[rule.className])
584
- return;
585
- const { validateRule } = this.config;
586
- if (validateRule && !validateRule(rule, this)) {
587
- return;
588
- }
589
- let index;
590
- /**
591
- * 必須按斷點值遞增,並透過索引插入,
592
- * 以實現響應式先後套用的規則
593
- * @example <1 <2 <3 ALL >=1 >=2 >=3
594
- * @description
595
- */
596
- const endIndex = this.rules.length - 1;
597
- const { media, order, prioritySelectorIndex, hasWhere, className } = rule;
598
- const findPrioritySelectorInsertIndex = (rules, findStartIndex, findEndIndex, ignoreRule) => {
599
- let sIndex = 0;
600
- let eIndex;
601
- // 1. 找尋目標陣列
602
- if (findStartIndex) {
603
- sIndex = rules.findIndex(findStartIndex);
604
- }
605
- if (findEndIndex) {
606
- eIndex = rules.findIndex(findEndIndex);
607
- }
608
- if (sIndex === -1) {
609
- sIndex = rules.length;
610
- }
611
- if (eIndex === undefined || eIndex === -1) {
612
- eIndex = rules.length;
613
- }
614
- const targetRules = rules.slice(sIndex, eIndex);
615
- // 2. 由目標陣列找尋插入點
616
- for (let i = 0; i < targetRules.length; i++) {
617
- const currentRule = targetRules[i];
618
- if (currentRule.prioritySelectorIndex === -1 || ignoreRule && ignoreRule(currentRule))
619
- continue;
620
- if (currentRule.prioritySelectorIndex < prioritySelectorIndex
621
- || currentRule.prioritySelectorIndex === prioritySelectorIndex
622
- && (hasWhere && !currentRule.hasWhere
623
- || currentRule.order >= order))
624
- return sIndex + i;
625
- }
626
- return sIndex + targetRules.length;
627
- };
628
- if (media) {
629
- const mediaStartIndex = this.rules.findIndex(eachRule => eachRule.media);
630
- if (mediaStartIndex !== -1) {
631
- const maxWidthFeature = media.features[MAX_WIDTH];
632
- const minWidthFeature = media.features[MIN_WIDTH];
633
- if (maxWidthFeature && minWidthFeature) {
634
- /**
635
- * 範圍越小 ( 越限定 越侷限 ) 越優先,
636
- * 按照範圍 max-width - min-width 遞減排序
637
- * find 第一個所遇到同樣 feature 且範圍值比自己大的 rule,
638
- * 並插入在該 rule 之後,讓自己優先被套用
639
- */
640
- const range = maxWidthFeature.value - minWidthFeature.value;
641
- for (let i = endIndex; i >= mediaStartIndex; i--) {
642
- index = i;
643
- const eachRule = this.rules[i];
644
- const eachMedia = eachRule.media;
645
- const eachMaxWidthFeature = eachMedia.features[MAX_WIDTH];
646
- const eachMinWidthFeature = eachMedia.features[MIN_WIDTH];
647
- if (!eachMaxWidthFeature || !eachMinWidthFeature) {
648
- index++;
649
- break;
650
- }
651
- const eachRange = eachMaxWidthFeature.value - eachMinWidthFeature.value;
652
- if (eachRange === range) {
653
- if (hasWhere !== eachRule.hasWhere)
654
- continue;
655
- if (prioritySelectorIndex !== -1) {
656
- const sameRangeRules = [this.rules[i]];
657
- for (let j = i - 1; j >= mediaStartIndex; j--) {
658
- const currentMediaRule = this.rules[j];
659
- if (currentMediaRule.hasWhere !== hasWhere)
660
- break;
661
- const currentMedia = currentMediaRule.media;
662
- const currentMaxWidthFeature = currentMedia.features[MAX_WIDTH];
663
- const currentMinWidthFeature = currentMedia.features[MIN_WIDTH];
664
- if (!currentMaxWidthFeature
665
- || !currentMinWidthFeature
666
- || (currentMaxWidthFeature.value - currentMinWidthFeature.value !== eachRange))
667
- break;
668
- sameRangeRules.unshift(this.rules[j]);
669
- }
670
- index = findPrioritySelectorInsertIndex(this.rules, eachRule => eachRule.media && eachRule.prioritySelectorIndex !== -1 && eachRule.media.features[MIN_WIDTH] && eachRule.media.features[MAX_WIDTH]);
671
- }
672
- break;
673
- }
674
- else if (eachRange > range) {
675
- break;
676
- }
677
- }
678
- }
679
- else if (minWidthFeature) {
680
- /**
681
- * find 第一個所遇到同樣 feature 且值比自己大的 rule,
682
- * 並插入在該 rule 之後,讓自己優先被套用
683
- */
684
- for (let i = mediaStartIndex; i <= endIndex; i++) {
685
- index = i;
686
- const eachRule = this.rules[i];
687
- const eachMedia = eachRule.media;
688
- const eachMaxWidthFeature = eachMedia.features[MAX_WIDTH];
689
- const eachMinWidthFeature = eachMedia.features[MIN_WIDTH];
690
- if (eachMaxWidthFeature) {
691
- /**
692
- * 永遠插入在 range feature 前
693
- */
694
- if (eachMinWidthFeature) {
695
- break;
696
- }
697
- else {
698
- continue;
699
- }
700
- }
701
- const value = eachMinWidthFeature?.value;
702
- if (value === minWidthFeature.value) {
703
- if (!hasWhere && eachRule.hasWhere) {
704
- index++;
705
- continue;
706
- }
707
- if (prioritySelectorIndex !== -1) {
708
- index = findPrioritySelectorInsertIndex(this.rules, eachRule => eachRule.media, eachRule => eachRule.media && eachRule.prioritySelectorIndex !== -1 && eachRule.media.features[MIN_WIDTH] && eachRule.media.features[MAX_WIDTH], eachRule => !eachRule.media.features[MIN_WIDTH] && !eachRule.media.features[MAX_WIDTH]);
709
- }
710
- else {
711
- for (let j = i; j <= endIndex; j++) {
712
- const currentMediaRule = this.rules[j];
713
- const currentMedia = currentMediaRule.media;
714
- const currentMinWidthFeature = currentMedia.features[MIN_WIDTH];
715
- const currentMaxWidthFeature = currentMedia.features[MAX_WIDTH];
716
- if (currentMaxWidthFeature)
717
- continue;
718
- if (currentMediaRule.hasWhere !== hasWhere
719
- || currentMinWidthFeature.value !== value
720
- || currentMediaRule.order >= order)
721
- break;
722
- index = j + 1;
723
- }
724
- }
725
- break;
726
- }
727
- else if (value > minWidthFeature.value) {
728
- break;
729
- }
730
- else {
731
- index++;
732
- }
733
- }
734
- }
735
- else if (maxWidthFeature) {
736
- /**
737
- * find 第一個所遇到同樣 feature 且值比自己大的 rule,
738
- * 並插入在該 rule 之後,讓自己優先被套用
739
- */
740
- for (let i = endIndex; i >= mediaStartIndex; i--) {
741
- index = i;
742
- const eachRule = this.rules[i];
743
- const eachMedia = eachRule.media;
744
- const eachMaxWidthFeature = eachMedia.features[MAX_WIDTH];
745
- const eachMinWidthFeature = eachMedia.features[MIN_WIDTH];
746
- if (eachMinWidthFeature) {
747
- /**
748
- * 永遠插入在 range feature 前
749
- */
750
- continue;
751
- }
752
- const value = eachMaxWidthFeature?.value;
753
- if (!value || value > maxWidthFeature.value) {
754
- index++;
755
- break;
756
- }
757
- else if (value === maxWidthFeature.value) {
758
- if (hasWhere && !eachRule.hasWhere)
759
- continue;
760
- if (prioritySelectorIndex !== -1) {
761
- index = findPrioritySelectorInsertIndex(this.rules, eachRule => eachRule.media, eachRule => eachRule.media && eachRule.prioritySelectorIndex !== -1 && eachRule.media.features[MIN_WIDTH] && eachRule.media.features[MAX_WIDTH], eachRule => !eachRule.media.features[MIN_WIDTH] && !eachRule.media.features[MAX_WIDTH]);
762
- }
763
- else {
764
- const sameRangeRules = [this.rules[i]];
765
- for (let j = i - 1; j >= mediaStartIndex; j--) {
766
- const currentMediaRule = this.rules[j];
767
- const currentMedia = currentMediaRule.media;
768
- const currentMinWidthFeature = currentMedia.features[MIN_WIDTH];
769
- const currentMaxWidthFeature = currentMedia.features[MAX_WIDTH];
770
- if (!currentMinWidthFeature
771
- && (!currentMaxWidthFeature
772
- || currentMaxWidthFeature.value !== value
773
- || currentMediaRule.hasWhere !== hasWhere))
774
- break;
775
- sameRangeRules.unshift(currentMediaRule);
776
- }
777
- for (let j = 0; j < sameRangeRules.length; j++) {
778
- const currentMediaRule = sameRangeRules[j];
779
- if (currentMediaRule.media.features[MIN_WIDTH])
780
- continue;
781
- if (currentMediaRule.order >= order)
782
- break;
783
- index = i - sameRangeRules.length + 2 + j;
784
- }
785
- }
786
- break;
787
- }
788
- }
789
- }
790
- }
791
- /**
792
- * 如果找不到目標位置則插在最後面
793
- */
794
- if (index === undefined) {
795
- if (mediaStartIndex === -1) {
796
- // 無任何 media 時,優先級最高
797
- index = endIndex + 1;
798
- }
799
- else if (prioritySelectorIndex !== -1) {
800
- // 含有優先 selector
801
- index = mediaStartIndex +
802
- findPrioritySelectorInsertIndex(this.rules.slice(mediaStartIndex), undefined, eachRule => eachRule.media.features[MAX_WIDTH] || eachRule.media.features[MIN_WIDTH]);
803
- }
804
- else if (hasWhere) {
805
- // 不含優先 selector,且含有 where,優先級最低
806
- let i = mediaStartIndex;
807
- for (; i < this.rules.length; i++) {
808
- const eachRule = this.rules[i];
809
- if (eachRule.prioritySelectorIndex !== -1 || !eachRule.hasWhere || eachRule.order >= order) {
810
- index = i;
811
- break;
812
- }
813
- }
814
- if (index === undefined) {
815
- index = i;
816
- }
817
- }
818
- else {
819
- // 不含優先 selector,且不含有 where,優先級緊接非 min-width / max-width 的 where 之後
820
- for (let i = mediaStartIndex; i <= endIndex; i++) {
821
- index = i;
822
- const eachRule = this.rules[i];
823
- const eachMedia = eachRule.media;
824
- if (eachRule.prioritySelectorIndex !== -1 || eachMedia.features[MAX_WIDTH] || eachMedia.features[MIN_WIDTH])
825
- break;
826
- if (eachRule.hasWhere) {
827
- index++;
828
- }
829
- else if (eachRule.order >= order) {
830
- break;
831
- }
832
- }
833
- }
834
- }
835
- }
836
- else {
837
- if (prioritySelectorIndex === -1) {
838
- // 不含優先 selector
839
- if (hasWhere) {
840
- // 含有 where,優先級最低
841
- index = this.rules.findIndex(eachRule => !eachRule.hasWhere
842
- || eachRule.media
843
- || eachRule.prioritySelectorIndex !== -1
844
- || eachRule.order >= order);
845
- if (index === -1) {
846
- index = endIndex + 1;
847
- }
848
- }
849
- else {
850
- // 不含 where,優先級緊接 where 之後
851
- let i = 0;
852
- for (; i < this.rules.length; i++) {
853
- const eachRule = this.rules[i];
854
- if (eachRule.media || !eachRule.hasWhere && (eachRule.order >= order || eachRule.prioritySelectorIndex !== -1)) {
855
- index = i;
856
- break;
857
- }
858
- }
859
- if (index === undefined) {
860
- index = i;
861
- }
862
- }
863
- }
864
- else {
865
- // 含有優先 selector
866
- index = findPrioritySelectorInsertIndex(this.rules, undefined, eachRule => eachRule.media);
867
- }
868
- }
869
- this.rules.splice(index, 0, rule);
870
- this.ruleOfClass[className] = rule;
871
- // 只在瀏覽器端運行
872
- if (this.style) {
873
- const sheet = this.style.sheet;
874
- let cssRuleIndex = 0;
875
- const getCssRuleIndex = (index) => {
876
- const previousRule = this.rules[index];
877
- if (previousRule) {
878
- if (!previousRule.natives.length)
879
- return getCssRuleIndex(index - 1);
880
- const lastNativeCssRule = previousRule.natives[previousRule.natives.length - 1].cssRule;
881
- for (let i = 0; i < sheet.cssRules.length; i++) {
882
- if (sheet.cssRules[i] === lastNativeCssRule) {
883
- cssRuleIndex = i + 1;
884
- break;
885
- }
886
- }
887
- }
888
- };
889
- getCssRuleIndex(index - 1);
890
- for (let i = 0; i < rule.natives.length;) {
891
- try {
892
- const native = rule.natives[i];
893
- sheet.insertRule(native.text, cssRuleIndex);
894
- native.cssRule = sheet.cssRules[cssRuleIndex++];
895
- i++;
896
- }
897
- catch (error) {
898
- console.error(error);
899
- rule.natives.splice(i, 1);
900
- }
901
- }
902
- }
903
- }
904
- delete(className) {
905
- /**
906
- * class name 從 DOM tree 中被移除,
907
- * 匹配並刪除對應的 rule
908
- */
909
- const sheet = this.style.sheet;
910
- const deleteRule = (name) => {
911
- const rule = this.ruleOfClass[name];
912
- if (!rule
913
- || name in this.relations && this.relations[name].some(eachClassName => eachClassName in this.countOfClass))
914
- return;
915
- if (rule.natives.length) {
916
- const firstNative = rule.natives[0];
917
- for (let index = 0; index < sheet.cssRules.length; index++) {
918
- const eachCssRule = sheet.cssRules[index];
919
- if (eachCssRule === firstNative.cssRule) {
920
- for (let i = 0; i < rule.natives.length; i++) {
921
- sheet.deleteRule(index);
922
- }
923
- this.rules.splice(this.rules.indexOf(rule), 1);
924
- break;
925
- }
926
- }
927
- }
928
- delete this.ruleOfClass[name];
929
- };
930
- if (className in this.classes) {
931
- for (const eachClassName of this.classes[className]) {
932
- if (!(eachClassName in this.countOfClass)) {
933
- deleteRule(eachClassName);
934
- }
935
- }
936
- delete this.ruleOfClass[className];
937
- }
938
- else {
939
- deleteRule(className);
940
- }
941
- }
942
- findAndInsert(className) {
943
- const rule = this.findAndNew(className);
944
- if (Array.isArray(rule)) {
945
- for (const eachRule of rule) {
946
- this.insert(eachRule);
947
- }
948
- }
949
- else if (rule) {
950
- this.insert(rule);
951
- }
952
- }
953
- get text() {
954
- return this.rules.map((eachRule) => eachRule.natives
955
- .map((eachNativeRule) => eachNativeRule.text)
956
- .join('')).join('');
957
- }
958
- }
959
- if (isBrowser) {
960
- window.MasterCSS = MasterCSS;
961
- }
962
- //# sourceMappingURL=css.js.map