@davidsouther/jiffies 1.0.0-beta.1 → 2.0.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 (447) hide show
  1. package/{build → lib/cjs}/assert.d.ts +0 -0
  2. package/lib/cjs/assert.js +40 -0
  3. package/{build → lib/cjs}/case.d.ts +0 -0
  4. package/lib/cjs/case.js +9 -0
  5. package/{build → lib/cjs}/components/button_bar.d.ts +1 -1
  6. package/lib/cjs/components/button_bar.js +29 -0
  7. package/{build → lib/cjs}/components/inline_edit.d.ts +1 -1
  8. package/lib/cjs/components/inline_edit.js +51 -0
  9. package/{build → lib/cjs}/components/logger.d.ts +2 -3
  10. package/lib/cjs/components/logger.js +27 -0
  11. package/lib/cjs/components/select.d.ts +10 -0
  12. package/lib/cjs/components/select.js +6 -0
  13. package/lib/cjs/components/test.d.ts +1 -0
  14. package/lib/cjs/components/test.js +7 -0
  15. package/{build → lib/cjs}/components/virtual_scroll.d.ts +3 -4
  16. package/lib/cjs/components/virtual_scroll.js +102 -0
  17. package/{build → lib/cjs}/components/virtual_scroll.test.d.ts +0 -0
  18. package/lib/cjs/components/virtual_scroll.test.js +22 -0
  19. package/{build → lib/cjs}/context.d.ts +0 -0
  20. package/lib/cjs/context.js +48 -0
  21. package/{build → lib/cjs}/context.test.d.ts +0 -0
  22. package/lib/cjs/context.test.js +48 -0
  23. package/{build → lib/cjs}/debounce.d.ts +0 -0
  24. package/lib/cjs/debounce.js +11 -0
  25. package/lib/cjs/diff.d.ts +15 -0
  26. package/lib/cjs/diff.js +58 -0
  27. package/{build/components/index.d.ts → lib/cjs/diff.test.d.ts} +0 -0
  28. package/lib/cjs/diff.test.js +41 -0
  29. package/{build → lib/cjs}/display.d.ts +0 -0
  30. package/lib/cjs/display.js +16 -0
  31. package/{build → lib/cjs}/dom/css/border.d.ts +0 -0
  32. package/lib/cjs/dom/css/border.js +33 -0
  33. package/{build → lib/cjs}/dom/css/constants.d.ts +0 -0
  34. package/lib/cjs/dom/css/constants.js +31 -0
  35. package/{build → lib/cjs}/dom/css/core.d.ts +0 -0
  36. package/lib/cjs/dom/css/core.js +31 -0
  37. package/{build → lib/cjs}/dom/css/fstyle.d.ts +0 -0
  38. package/lib/cjs/dom/css/fstyle.js +36 -0
  39. package/{build → lib/cjs}/dom/css/sizing.d.ts +0 -0
  40. package/lib/cjs/dom/css/sizing.js +14 -0
  41. package/lib/cjs/dom/dom.d.ts +27 -0
  42. package/lib/cjs/dom/dom.js +110 -0
  43. package/{build → lib/cjs}/dom/fc.d.ts +5 -5
  44. package/lib/cjs/dom/fc.js +39 -0
  45. package/{build → lib/cjs}/dom/fc.test.d.ts +0 -0
  46. package/lib/cjs/dom/fc.test.js +23 -0
  47. package/lib/cjs/dom/form/form.app.d.ts +1 -0
  48. package/lib/cjs/dom/form/form.app.js +27 -0
  49. package/lib/cjs/dom/form/form.d.ts +26 -0
  50. package/lib/cjs/dom/form/form.js +49 -0
  51. package/{build → lib/cjs}/dom/form/form.test.d.ts +0 -0
  52. package/{build → lib/cjs}/dom/form/form.test.js +0 -0
  53. package/lib/cjs/dom/html.d.ts +113 -0
  54. package/lib/cjs/dom/html.js +119 -0
  55. package/{build → lib/cjs}/dom/html.test.d.ts +0 -0
  56. package/lib/cjs/dom/html.test.js +60 -0
  57. package/lib/cjs/dom/observable.d.ts +2 -0
  58. package/lib/cjs/dom/observable.js +10 -0
  59. package/{build/components/index.js → lib/cjs/dom/observable.test.d.ts} +0 -0
  60. package/lib/cjs/dom/observable.test.js +35 -0
  61. package/lib/cjs/dom/provide.d.ts +3 -0
  62. package/lib/cjs/dom/provide.js +12 -0
  63. package/lib/cjs/dom/router/link.d.ts +6 -0
  64. package/lib/cjs/dom/router/link.js +7 -0
  65. package/{build → lib/cjs}/dom/router/router.d.ts +3 -3
  66. package/lib/cjs/dom/router/router.js +52 -0
  67. package/lib/cjs/dom/svg.d.ts +64 -0
  68. package/lib/cjs/dom/svg.js +69 -0
  69. package/lib/cjs/dom/test.d.ts +1 -0
  70. package/lib/cjs/dom/test.js +13 -0
  71. package/{build → lib/cjs}/dom/types/css.d.ts +0 -0
  72. package/lib/cjs/dom/types/css.js +24 -0
  73. package/{build → lib/cjs}/dom/types/dom.d.ts +0 -0
  74. package/{build → lib/cjs}/dom/types/dom.js +0 -0
  75. package/{build → lib/cjs}/dom/types/html.d.ts +1 -1
  76. package/lib/cjs/dom/types/html.js +2 -0
  77. package/{build → lib/cjs}/dom/xml.d.ts +0 -0
  78. package/lib/cjs/dom/xml.js +8 -0
  79. package/lib/cjs/equal.d.ts +5 -0
  80. package/lib/cjs/equal.js +43 -0
  81. package/{build → lib/cjs}/equal.test.d.ts +0 -0
  82. package/lib/cjs/equal.test.js +22 -0
  83. package/{build → lib/cjs}/flags.d.ts +0 -0
  84. package/lib/cjs/flags.js +52 -0
  85. package/{build → lib/cjs}/flags.test.d.ts +0 -0
  86. package/lib/cjs/flags.test.js +37 -0
  87. package/lib/cjs/fs.d.ts +48 -0
  88. package/lib/cjs/fs.js +151 -0
  89. package/{build/components/test.d.ts → lib/cjs/fs.test.d.ts} +0 -0
  90. package/lib/cjs/fs.test.js +45 -0
  91. package/{build → lib/cjs}/generator.d.ts +0 -0
  92. package/lib/cjs/generator.js +14 -0
  93. package/{build → lib/cjs}/generator.test.d.ts +0 -0
  94. package/lib/cjs/generator.test.js +26 -0
  95. package/{build → lib/cjs}/is_browser.d.ts +0 -0
  96. package/lib/cjs/is_browser.js +4 -0
  97. package/{build → lib/cjs}/loader.d.mts +0 -0
  98. package/lib/cjs/loader.mjs +40 -0
  99. package/{build → lib/cjs}/lock.d.ts +0 -0
  100. package/lib/cjs/lock.js +27 -0
  101. package/{build → lib/cjs}/lock.test.d.ts +0 -0
  102. package/lib/cjs/lock.test.js +18 -0
  103. package/{build → lib/cjs}/log.d.ts +0 -0
  104. package/lib/cjs/log.js +54 -0
  105. package/lib/cjs/observable/event.d.ts +35 -0
  106. package/lib/cjs/observable/event.js +61 -0
  107. package/lib/cjs/observable/observable.d.ts +132 -0
  108. package/lib/cjs/observable/observable.js +363 -0
  109. package/{build/dom/test.d.ts → lib/cjs/observable/observable.test.d.ts} +0 -0
  110. package/lib/cjs/observable/observable.test.js +65 -0
  111. package/{build → lib/cjs}/range.d.ts +0 -0
  112. package/lib/cjs/range.js +11 -0
  113. package/{build → lib/cjs}/result.d.ts +11 -11
  114. package/lib/cjs/result.js +80 -0
  115. package/{build → lib/cjs}/result.test.d.ts +0 -0
  116. package/lib/cjs/result.test.js +73 -0
  117. package/{build → lib/cjs}/safe.d.ts +0 -0
  118. package/lib/cjs/safe.js +14 -0
  119. package/{build → lib/cjs}/scope/describe.d.ts +4 -0
  120. package/lib/cjs/scope/describe.js +73 -0
  121. package/{build → lib/cjs}/scope/display/console.d.ts +0 -0
  122. package/lib/cjs/scope/display/console.js +25 -0
  123. package/{build → lib/cjs}/scope/display/dom.d.ts +2 -2
  124. package/lib/cjs/scope/display/dom.js +30 -0
  125. package/{build → lib/cjs}/scope/display/junit.d.ts +0 -0
  126. package/lib/cjs/scope/display/junit.js +21 -0
  127. package/{build → lib/cjs}/scope/execute.d.ts +1 -1
  128. package/lib/cjs/scope/execute.js +91 -0
  129. package/{build → lib/cjs}/scope/expect.d.ts +1 -1
  130. package/lib/cjs/scope/expect.js +114 -0
  131. package/{build → lib/cjs}/scope/fix.d.ts +0 -0
  132. package/lib/cjs/scope/fix.js +26 -0
  133. package/{build → lib/cjs}/scope/index.d.ts +0 -0
  134. package/lib/cjs/scope/index.js +15 -0
  135. package/{build → lib/cjs}/scope/scope.d.ts +0 -0
  136. package/lib/cjs/scope/scope.js +2 -0
  137. package/lib/cjs/scope/state.d.ts +1 -0
  138. package/lib/cjs/scope/state.js +11 -0
  139. package/{build → lib/cjs}/server/http/apps.d.ts +0 -0
  140. package/lib/cjs/server/http/apps.js +27 -0
  141. package/lib/cjs/server/http/css.d.ts +5 -0
  142. package/lib/cjs/server/http/css.js +54 -0
  143. package/{build → lib/cjs}/server/http/index.d.ts +0 -0
  144. package/lib/cjs/server/http/index.js +77 -0
  145. package/{build → lib/cjs}/server/http/response.d.ts +0 -0
  146. package/lib/cjs/server/http/response.js +45 -0
  147. package/{build → lib/cjs}/server/http/sitemap.d.ts +0 -0
  148. package/lib/cjs/server/http/sitemap.js +46 -0
  149. package/{build → lib/cjs}/server/http/static.d.ts +0 -0
  150. package/lib/cjs/server/http/static.js +25 -0
  151. package/{build → lib/cjs}/server/http/typescript.d.ts +0 -0
  152. package/lib/cjs/server/http/typescript.js +44 -0
  153. package/{build → lib/cjs}/server/main.d.ts +0 -0
  154. package/lib/cjs/server/main.js +14 -0
  155. package/{build → lib/cjs}/test.d.mts +0 -0
  156. package/lib/cjs/test.mjs +28 -0
  157. package/lib/cjs/test_all.d.ts +9 -0
  158. package/lib/cjs/test_all.js +30 -0
  159. package/{build → lib/cjs}/transpile.d.mts +0 -0
  160. package/lib/cjs/transpile.mjs +22 -0
  161. package/lib/cjs/tsconfig.tsbuildinfo +1 -0
  162. package/lib/esm/assert.d.ts +23 -0
  163. package/{build → lib/esm}/assert.js +1 -1
  164. package/lib/esm/case.d.ts +1 -0
  165. package/{build → lib/esm}/case.js +0 -0
  166. package/lib/esm/components/button_bar.d.ts +8 -0
  167. package/lib/esm/components/button_bar.js +27 -0
  168. package/lib/esm/components/inline_edit.d.ts +12 -0
  169. package/{build → lib/esm}/components/inline_edit.js +3 -3
  170. package/lib/esm/components/logger.d.ts +6 -0
  171. package/{build → lib/esm}/components/logger.js +3 -3
  172. package/lib/esm/components/select.d.ts +10 -0
  173. package/{build → lib/esm}/components/select.js +2 -2
  174. package/lib/esm/components/test.d.ts +1 -0
  175. package/lib/esm/components/test.js +3 -0
  176. package/lib/esm/components/virtual_scroll.d.ts +40 -0
  177. package/{build → lib/esm}/components/virtual_scroll.js +3 -3
  178. package/{build/dom/types/html.js → lib/esm/components/virtual_scroll.test.d.ts} +0 -0
  179. package/{build → lib/esm}/components/virtual_scroll.test.js +3 -4
  180. package/lib/esm/context.d.ts +15 -0
  181. package/{build → lib/esm}/context.js +3 -3
  182. package/{build/scope/scope.js → lib/esm/context.test.d.ts} +0 -0
  183. package/{build → lib/esm}/context.test.js +0 -0
  184. package/lib/esm/debounce.d.ts +1 -0
  185. package/{build → lib/esm}/debounce.js +0 -0
  186. package/lib/esm/diff.d.ts +15 -0
  187. package/lib/esm/diff.js +54 -0
  188. package/{build/test_all.d.ts → lib/esm/diff.test.d.ts} +0 -0
  189. package/lib/esm/diff.test.js +39 -0
  190. package/lib/esm/display.d.ts +5 -0
  191. package/lib/esm/display.js +11 -0
  192. package/lib/esm/dom/css/border.d.ts +11 -0
  193. package/{build → lib/esm}/dom/css/border.js +0 -0
  194. package/lib/esm/dom/css/constants.d.ts +31 -0
  195. package/{build → lib/esm}/dom/css/constants.js +0 -0
  196. package/lib/esm/dom/css/core.d.ts +5 -0
  197. package/{build → lib/esm}/dom/css/core.js +0 -0
  198. package/lib/esm/dom/css/fstyle.d.ts +5 -0
  199. package/{build → lib/esm}/dom/css/fstyle.js +0 -0
  200. package/lib/esm/dom/css/sizing.d.ts +5 -0
  201. package/{build → lib/esm}/dom/css/sizing.js +0 -0
  202. package/lib/esm/dom/dom.d.ts +27 -0
  203. package/{build → lib/esm}/dom/dom.js +44 -34
  204. package/lib/esm/dom/fc.d.ts +14 -0
  205. package/{build → lib/esm}/dom/fc.js +1 -1
  206. package/lib/esm/dom/fc.test.d.ts +1 -0
  207. package/{build → lib/esm}/dom/fc.test.js +0 -0
  208. package/lib/esm/dom/form/form.app.d.ts +1 -0
  209. package/{build → lib/esm}/dom/form/form.app.js +0 -0
  210. package/lib/esm/dom/form/form.d.ts +26 -0
  211. package/{build → lib/esm}/dom/form/form.js +14 -5
  212. package/lib/esm/dom/form/form.test.d.ts +0 -0
  213. package/lib/esm/dom/form/form.test.js +1 -0
  214. package/lib/esm/dom/html.d.ts +113 -0
  215. package/{build → lib/esm}/dom/html.js +0 -0
  216. package/lib/esm/dom/html.test.d.ts +1 -0
  217. package/{build → lib/esm}/dom/html.test.js +4 -4
  218. package/lib/esm/dom/observable.d.ts +2 -0
  219. package/lib/esm/dom/observable.js +6 -0
  220. package/lib/esm/dom/observable.test.d.ts +1 -0
  221. package/lib/esm/dom/observable.test.js +33 -0
  222. package/lib/esm/dom/provide.d.ts +3 -0
  223. package/lib/esm/dom/provide.js +7 -0
  224. package/lib/esm/dom/router/link.d.ts +6 -0
  225. package/{build → lib/esm}/dom/router/link.js +0 -0
  226. package/lib/esm/dom/router/router.d.ts +12 -0
  227. package/{build → lib/esm}/dom/router/router.js +0 -0
  228. package/lib/esm/dom/svg.d.ts +64 -0
  229. package/{build → lib/esm}/dom/svg.js +0 -0
  230. package/lib/esm/dom/test.d.ts +1 -0
  231. package/lib/esm/dom/test.js +9 -0
  232. package/lib/esm/dom/types/css.d.ts +6612 -0
  233. package/{build → lib/esm}/dom/types/css.js +0 -0
  234. package/lib/esm/dom/types/dom.d.ts +0 -0
  235. package/lib/esm/dom/types/dom.js +1 -0
  236. package/lib/esm/dom/types/html.d.ts +616 -0
  237. package/lib/esm/dom/types/html.js +1 -0
  238. package/lib/esm/dom/xml.d.ts +1 -0
  239. package/{build → lib/esm}/dom/xml.js +1 -2
  240. package/lib/esm/equal.d.ts +5 -0
  241. package/lib/esm/equal.js +37 -0
  242. package/lib/esm/equal.test.d.ts +1 -0
  243. package/{build → lib/esm}/equal.test.js +0 -0
  244. package/lib/esm/flags.d.ts +7 -0
  245. package/{build → lib/esm}/flags.js +1 -1
  246. package/lib/esm/flags.test.d.ts +1 -0
  247. package/{build → lib/esm}/flags.test.js +0 -0
  248. package/lib/esm/fs.d.ts +48 -0
  249. package/lib/esm/fs.js +144 -0
  250. package/lib/esm/fs.test.d.ts +1 -0
  251. package/lib/esm/fs.test.js +43 -0
  252. package/lib/esm/generator.d.ts +1 -0
  253. package/{build → lib/esm}/generator.js +0 -0
  254. package/lib/esm/generator.test.d.ts +1 -0
  255. package/{build → lib/esm}/generator.test.js +0 -0
  256. package/lib/esm/is_browser.d.ts +1 -0
  257. package/{build → lib/esm}/is_browser.js +0 -0
  258. package/lib/esm/loader.d.mts +22 -0
  259. package/{build → lib/esm}/loader.mjs +0 -0
  260. package/lib/esm/lock.d.ts +1 -0
  261. package/{build → lib/esm}/lock.js +0 -0
  262. package/lib/esm/lock.test.d.ts +1 -0
  263. package/{build → lib/esm}/lock.test.js +0 -0
  264. package/lib/esm/log.d.ts +26 -0
  265. package/{build → lib/esm}/log.js +16 -4
  266. package/lib/esm/observable/event.d.ts +35 -0
  267. package/lib/esm/observable/event.js +46 -0
  268. package/lib/esm/observable/observable.d.ts +132 -0
  269. package/lib/esm/observable/observable.js +343 -0
  270. package/lib/esm/observable/observable.test.d.ts +1 -0
  271. package/lib/esm/observable/observable.test.js +63 -0
  272. package/lib/esm/range.d.ts +1 -0
  273. package/{build → lib/esm}/range.js +0 -0
  274. package/lib/esm/result.d.ts +31 -0
  275. package/{build → lib/esm}/result.js +3 -3
  276. package/lib/esm/result.test.d.ts +1 -0
  277. package/{build → lib/esm}/result.test.js +0 -0
  278. package/lib/esm/safe.d.ts +1 -0
  279. package/{build → lib/esm}/safe.js +0 -0
  280. package/lib/esm/scope/describe.d.ts +18 -0
  281. package/{build → lib/esm}/scope/describe.js +14 -6
  282. package/lib/esm/scope/display/console.d.ts +2 -0
  283. package/{build → lib/esm}/scope/display/console.js +0 -0
  284. package/lib/esm/scope/display/dom.d.ts +3 -0
  285. package/{build → lib/esm}/scope/display/dom.js +0 -0
  286. package/lib/esm/scope/display/junit.d.ts +2 -0
  287. package/{build → lib/esm}/scope/display/junit.js +0 -0
  288. package/lib/esm/scope/execute.d.ts +12 -0
  289. package/{build → lib/esm}/scope/execute.js +3 -3
  290. package/lib/esm/scope/expect.d.ts +23 -0
  291. package/{build → lib/esm}/scope/expect.js +4 -3
  292. package/lib/esm/scope/fix.d.ts +4 -0
  293. package/{build → lib/esm}/scope/fix.js +0 -0
  294. package/{build/scope/index.js → lib/esm/scope/index.d.ts} +0 -0
  295. package/lib/esm/scope/index.js +3 -0
  296. package/lib/esm/scope/scope.d.ts +17 -0
  297. package/lib/esm/scope/scope.js +1 -0
  298. package/lib/esm/scope/state.d.ts +1 -0
  299. package/lib/esm/scope/state.js +7 -0
  300. package/lib/esm/server/http/apps.d.ts +5 -0
  301. package/{build → lib/esm}/server/http/apps.js +0 -0
  302. package/lib/esm/server/http/css.d.ts +5 -0
  303. package/lib/esm/server/http/css.js +50 -0
  304. package/lib/esm/server/http/index.d.ts +21 -0
  305. package/{build → lib/esm}/server/http/index.js +4 -2
  306. package/lib/esm/server/http/response.d.ts +4 -0
  307. package/{build → lib/esm}/server/http/response.js +6 -3
  308. package/lib/esm/server/http/sitemap.d.ts +2 -0
  309. package/{build → lib/esm}/server/http/sitemap.js +0 -0
  310. package/lib/esm/server/http/static.d.ts +2 -0
  311. package/{build → lib/esm}/server/http/static.js +0 -0
  312. package/lib/esm/server/http/typescript.d.ts +5 -0
  313. package/{build → lib/esm}/server/http/typescript.js +0 -0
  314. package/lib/esm/server/main.d.ts +2 -0
  315. package/{build → lib/esm}/server/main.js +5 -2
  316. package/lib/esm/test.d.mts +2 -0
  317. package/lib/esm/test.mjs +26 -0
  318. package/lib/esm/test_all.d.ts +9 -0
  319. package/lib/esm/test_all.js +28 -0
  320. package/lib/esm/transpile.d.mts +3 -0
  321. package/{build → lib/esm}/transpile.mjs +0 -0
  322. package/lib/esm/tsconfig.tsbuildinfo +1 -0
  323. package/package.json +18 -16
  324. package/src/assert.ts +1 -1
  325. package/src/components/button_bar.ts +33 -27
  326. package/src/components/inline_edit.ts +3 -3
  327. package/src/components/logger.ts +5 -6
  328. package/src/components/select.ts +3 -3
  329. package/src/components/test.js +3 -2
  330. package/src/components/virtual_scroll.test.ts +4 -4
  331. package/src/components/virtual_scroll.ts +8 -8
  332. package/src/context.ts +3 -3
  333. package/src/diff.test.ts +48 -0
  334. package/src/diff.ts +84 -0
  335. package/src/display.ts +8 -2
  336. package/src/dom/css/border.ts +3 -3
  337. package/src/dom/css/core.ts +1 -1
  338. package/src/dom/css/fstyle.ts +2 -2
  339. package/src/dom/css/sizing.ts +1 -1
  340. package/src/dom/dom.ts +73 -60
  341. package/src/dom/fc.test.ts +3 -3
  342. package/src/dom/fc.ts +11 -10
  343. package/src/dom/form/form.app.ts +2 -2
  344. package/src/dom/form/form.ts +33 -10
  345. package/src/dom/html.test.ts +8 -8
  346. package/src/dom/html.ts +7 -10
  347. package/src/dom/observable.test.ts +43 -0
  348. package/src/dom/observable.ts +11 -0
  349. package/src/dom/provide.ts +11 -0
  350. package/src/dom/router/link.ts +2 -2
  351. package/src/dom/router/router.ts +5 -5
  352. package/src/dom/svg.ts +1 -1
  353. package/src/dom/test.ts +8 -2
  354. package/src/dom/types/html.ts +1 -1
  355. package/src/dom/xml.ts +1 -2
  356. package/src/equal.ts +22 -11
  357. package/src/flags.ts +1 -1
  358. package/src/fs.test.ts +53 -0
  359. package/src/fs.ts +180 -0
  360. package/src/index.html +16 -13
  361. package/src/log.ts +8 -4
  362. package/src/observable/_notes +21 -8
  363. package/src/observable/event.ts +93 -0
  364. package/src/observable/observable.test.ts +73 -0
  365. package/src/observable/observable.ts +463 -0
  366. package/src/pico/_variables.scss +66 -0
  367. package/src/pico/components/_accordion.scss +112 -0
  368. package/src/pico/components/_button-group.scss +51 -0
  369. package/src/pico/components/_card.scss +47 -0
  370. package/src/pico/components/_dropdown.scss +203 -0
  371. package/src/pico/components/_modal.scss +181 -0
  372. package/src/pico/components/_nav.scss +79 -0
  373. package/src/pico/components/_progress.scss +70 -0
  374. package/src/pico/components/_property.scss +34 -0
  375. package/src/pico/content/_button.scss +152 -0
  376. package/src/pico/content/_code.scss +63 -0
  377. package/src/pico/content/_embedded.scss +0 -0
  378. package/src/pico/content/_form-alt.scss +276 -0
  379. package/src/pico/content/_form.scss +259 -0
  380. package/src/pico/content/_misc.scss +0 -0
  381. package/src/pico/content/_table.scss +28 -0
  382. package/src/pico/content/_toggle.scss +132 -0
  383. package/src/pico/content/_typography.scss +232 -0
  384. package/src/pico/layout/_container.scss +40 -0
  385. package/src/pico/layout/_document.scss +0 -0
  386. package/src/pico/layout/_flex.scss +46 -0
  387. package/src/pico/layout/_grid.scss +24 -0
  388. package/src/pico/layout/_scroller.scss +16 -0
  389. package/src/pico/layout/_section.scss +8 -0
  390. package/src/pico/layout/_sectioning.scss +55 -0
  391. package/src/pico/pico.scss +60 -0
  392. package/src/pico/reset/_accessibility.scss +34 -0
  393. package/src/pico/reset/_button.scss +17 -0
  394. package/src/pico/reset/_code.scss +15 -0
  395. package/src/pico/reset/_document.scss +48 -0
  396. package/src/pico/reset/_embedded.scss +39 -0
  397. package/src/pico/reset/_form.scss +97 -0
  398. package/src/pico/reset/_misc.scss +23 -0
  399. package/src/pico/reset/_nav.scss +5 -0
  400. package/src/pico/reset/_progress.scss +4 -0
  401. package/src/pico/reset/_table.scss +8 -0
  402. package/src/pico/reset/_typography.scss +25 -0
  403. package/src/pico/themes/default/_colors.scss +65 -0
  404. package/src/pico/themes/default/_dark.scss +148 -0
  405. package/src/pico/themes/default/_light.scss +149 -0
  406. package/src/pico/themes/default/_styles.scss +272 -0
  407. package/src/pico/themes/default.scss +34 -0
  408. package/src/pico/utilities/_accessibility.scss +3 -0
  409. package/src/pico/utilities/_loading.scss +52 -0
  410. package/src/pico/utilities/_reduce-motion.scss +27 -0
  411. package/src/pico/utilities/_tooltip.scss +101 -0
  412. package/src/result.ts +17 -21
  413. package/src/scope/describe.ts +16 -6
  414. package/src/scope/display/console.ts +4 -4
  415. package/src/scope/display/dom.ts +7 -7
  416. package/src/scope/display/junit.ts +3 -3
  417. package/src/scope/execute.ts +5 -8
  418. package/src/scope/expect.ts +12 -11
  419. package/src/scope/state.ts +10 -0
  420. package/src/server/http/css.ts +65 -0
  421. package/src/server/http/index.ts +4 -2
  422. package/src/server/http/response.ts +7 -4
  423. package/src/server/http/sitemap.ts +1 -1
  424. package/src/server/main.ts +9 -2
  425. package/src/test.mjs +22 -18
  426. package/src/test_all.ts +20 -9
  427. package/src/zip/spec.txt +3260 -0
  428. package/build/components/button_bar.js +0 -16
  429. package/build/components/select.d.ts +0 -13
  430. package/build/components/test.js +0 -2
  431. package/build/display.js +0 -3
  432. package/build/dom/dom.d.ts +0 -27
  433. package/build/dom/form/form.app.d.ts +0 -1
  434. package/build/dom/form/form.d.ts +0 -25
  435. package/build/dom/html.d.ts +0 -117
  436. package/build/dom/router/link.d.ts +0 -6
  437. package/build/dom/svg.d.ts +0 -64
  438. package/build/dom/test.js +0 -2
  439. package/build/equal.d.ts +0 -4
  440. package/build/equal.js +0 -22
  441. package/build/index.d.ts +0 -13
  442. package/build/index.js +0 -13
  443. package/build/parcel_resolver.d.ts +0 -3
  444. package/build/parcel_resolver.js +0 -19
  445. package/build/test.mjs +0 -23
  446. package/build/test_all.js +0 -19
  447. package/src/observable/observable._js +0 -175
@@ -0,0 +1,73 @@
1
+ import { describe, expect, it } from "../scope/index.js"
2
+ import { Observable, Subject, filter, map } from "./observable.js"
3
+
4
+ describe("Observables", () => {
5
+ describe("basics", () => {
6
+ it("can create and observe a scalar subject", async () => {
7
+ const subject = new Subject<number>();
8
+
9
+ let resolved = 42;
10
+
11
+ subject.subscribe({
12
+ next: (n) => {
13
+ resolved = n;
14
+ },
15
+ });
16
+
17
+ expect(resolved).toBe(42);
18
+ await subject.next(64);
19
+ expect(resolved).toBe(64);
20
+ });
21
+ });
22
+
23
+ describe("creation", () => {
24
+ it("builds an observable of items", async () => {
25
+ const stream = Observable.of(2, 4, 8, 16);
26
+ let values: number[] = [];
27
+ await new Promise<void>((resolve) => {
28
+ stream.subscribe({
29
+ next: (n) => {
30
+ values.unshift(n);
31
+ },
32
+ complete: () => {
33
+ resolve();
34
+ },
35
+ });
36
+ });
37
+ expect(values).toEqual([16, 8, 4, 2]);
38
+ });
39
+ });
40
+
41
+ describe("pipes", () => {
42
+ it("runs a pipe", async () => {
43
+ const subject = new Subject<number>();
44
+
45
+ let resolved = 0;
46
+ const inflate = (i: number) => (n: number) => n + i;
47
+ const biggerThan = (i: number) => (n: number) => n > i;
48
+ const assign = (n: number) => {
49
+ resolved = n;
50
+ };
51
+
52
+ subject.pipe(map(inflate(22)), filter(biggerThan(70))).subscribe(assign);
53
+
54
+ expect(resolved).toBe(0);
55
+ await subject.next(42);
56
+ expect(resolved).toBe(0);
57
+ await subject.next(50);
58
+ expect(resolved).toBe(72);
59
+ });
60
+ });
61
+
62
+ describe("Subject", () => {
63
+ it("is callable", async () => {
64
+ const subject = new Subject<number>();
65
+ let resolved = 0;
66
+ subject.subscribe((n) => {
67
+ resolved = n;
68
+ });
69
+ await subject.next(42);
70
+ expect(resolved).toBe(42);
71
+ });
72
+ });
73
+ });
@@ -0,0 +1,463 @@
1
+ import { DEFAULT_LOGGER, Logger } from "../log.js"
2
+
3
+ export interface FullSubscriber<T, E> {
4
+ // (t: T): void | Promise<undefined>;
5
+ next?: (t: T) => void | Promise<undefined>;
6
+ error?: (e: E) => void | Promise<undefined>;
7
+ complete?: () => void | Promise<undefined>;
8
+ }
9
+
10
+ export type Subscriber<T, E> =
11
+ | FullSubscriber<T, E>
12
+ // | EventSubscriber<T, E>
13
+ | ((t: T) => void | Promise<undefined>);
14
+
15
+ export interface Subscription {
16
+ // (): void;
17
+ unsubscribe(): void;
18
+ }
19
+
20
+ export interface Observable<T, E = unknown> {
21
+ // (subscriber: Subscriber<T, E>): Subscription;
22
+ subscribe(subscriber: Subscriber<T, E>): Subscription;
23
+ pipe<T1>(o1: Subscriber<T, E> & Observable<T1, E>): Observable<T1, E>;
24
+ pipe<T1, T2>(
25
+ o1: Subscriber<T, E> & Observable<T1, E>,
26
+ o2: Subscriber<T1, E> & Observable<T2, E>
27
+ ): Observable<T2, E>;
28
+ filter(fn: (t: T) => boolean): Observable<T, E>;
29
+ distinct(fn?: (t1: T, t2: T) => boolean): Observable<T, E>;
30
+ map<U>(fn: (t: T) => U): Observable<U, E>;
31
+ reduce<A>(fn: (acc: A, t: T) => A, init: A): Observable<A, E>;
32
+ replay(n: number): Observable<T, E>;
33
+ tap(s: Subscriber<T, E>): Observable<T, E>;
34
+ }
35
+
36
+ export const Observable = {
37
+ of<T, E>(...ts: T[]): Observable<T, E> {
38
+ const subject = new Subject<T, E>();
39
+ (async function next() {
40
+ if (subject.cold) {
41
+ subject.onWarm(next);
42
+ return;
43
+ }
44
+ if (ts.length === 0) {
45
+ subject.complete();
46
+ return;
47
+ }
48
+ const t = ts.shift()!;
49
+ await subject.next(t);
50
+ next();
51
+ })();
52
+ return subject;
53
+ },
54
+ combineLatest<T1, T2, E>(
55
+ o1: Observable<T1, E>,
56
+ o2: Observable<T2, E>
57
+ ): Observable<[T1, T2], E> {
58
+ let latestSubject = new Subject<[T1, T2], E>();
59
+ let o1LatestSet = false;
60
+ let o1Latest: T1;
61
+ let o2LatestSet = false;
62
+ let o2Latest: T2;
63
+
64
+ function next() {
65
+ if (o1LatestSet && o2LatestSet) {
66
+ latestSubject.next([o1Latest, o2Latest]);
67
+ }
68
+ }
69
+
70
+ function error(e: E) {
71
+ latestSubject.error(e);
72
+ }
73
+
74
+ function complete() {
75
+ latestSubject.complete();
76
+ o1sub.unsubscribe();
77
+ o2sub.unsubscribe();
78
+ }
79
+
80
+ let o1sub = o1.subscribe({
81
+ next(t: T1) {
82
+ o1Latest = t;
83
+ o1LatestSet = true;
84
+ next();
85
+ },
86
+ error,
87
+ complete,
88
+ });
89
+
90
+ let o2sub = o2.subscribe({
91
+ next(t: T2) {
92
+ o2Latest = t;
93
+ o2LatestSet = true;
94
+ next();
95
+ },
96
+ error,
97
+ complete,
98
+ });
99
+
100
+ return latestSubject;
101
+ },
102
+ };
103
+
104
+ interface Scheduler {
105
+ execute(fn: () => (void | Promise<undefined>)[]): void | Promise<undefined>;
106
+ }
107
+
108
+ export const AsyncScheduler: Scheduler = {
109
+ execute(fn: () => Promise<undefined>[]): Promise<undefined> {
110
+ return Promise.all(fn()).then(() => undefined);
111
+ },
112
+ };
113
+
114
+ export const SyncScheduler: Scheduler = {
115
+ execute(fn: () => void[]): void {
116
+ fn();
117
+ },
118
+ };
119
+
120
+ export class Subject<T, E = unknown, T2 = T>
121
+ implements FullSubscriber<T, E>, Observable<T, E>
122
+ {
123
+ #coldWaiters = new Set<Function>();
124
+ #subscribers = new Set<FullSubscriber<T, E>>();
125
+ #complete = false;
126
+
127
+ get $(): Observable<T, E> {
128
+ return this;
129
+ }
130
+
131
+ get hot(): boolean {
132
+ return this.#subscribers.size > 0;
133
+ }
134
+
135
+ get cold(): boolean {
136
+ return !this.hot;
137
+ }
138
+
139
+ constructor(private readonly scheduler: Scheduler = AsyncScheduler) {}
140
+
141
+ onWarm(fn: Function) {
142
+ if (this.cold) this.#coldWaiters.add(fn);
143
+ }
144
+
145
+ next(t: T | T2): void | Promise<undefined> {
146
+ if (this.#complete)
147
+ throw new Error("Cannot call next on a completed subject");
148
+ return this.scheduler.execute(() =>
149
+ [...this.#subscribers].map((s) => s.next?.(t as T))
150
+ );
151
+ }
152
+
153
+ error(e: E): void | Promise<undefined> {
154
+ if (this.#complete)
155
+ throw new Error("Cannot call error on a completed subject");
156
+ return this.scheduler.execute(() =>
157
+ [...this.#subscribers].map((s) => s.error?.(e))
158
+ );
159
+ }
160
+
161
+ complete(): void | Promise<undefined> {
162
+ if (this.#complete)
163
+ throw new Error("Cannot call complete on a completed subject");
164
+ this.#complete = true;
165
+ const finished = this.scheduler.execute(() =>
166
+ [...this.#subscribers].map((s) => s.complete?.())
167
+ );
168
+ this.#subscribers.clear(); // Free subscribers for garbage collection
169
+ return finished;
170
+ }
171
+
172
+ subscribe(subscriber: Subscriber<T, E>): Subscription {
173
+ if (this.#complete)
174
+ throw new Error("Cannot call subscribe on a completed subject");
175
+
176
+ if (subscriber instanceof Function) {
177
+ subscriber = { next: subscriber };
178
+ }
179
+
180
+ this.#subscribers.add(subscriber);
181
+
182
+ [...this.#coldWaiters].forEach((w) => w());
183
+ this.#coldWaiters.clear();
184
+
185
+ return {
186
+ unsubscribe: () =>
187
+ this.#subscribers.delete(subscriber as FullSubscriber<T, E>),
188
+ };
189
+ }
190
+
191
+ pipe<T1>(o1: Subscriber<T, E> & Observable<T1, E>): Observable<T1, E>;
192
+ pipe<T1, T2>(
193
+ o1: Subscriber<T, E> & Observable<T1, E>,
194
+ o2: Subscriber<T1, E> & Observable<T2, E>
195
+ ): Observable<T2, E>;
196
+ pipe(
197
+ ...os: (Subscriber<unknown, unknown> & Observable<unknown, unknown>)[]
198
+ ): Observable<unknown, E> {
199
+ this.subscribe(os[0]);
200
+ for (let i = 1; i < os.length; i++) {
201
+ os[i - 1].subscribe(os[i]);
202
+ }
203
+ return os[os.length - 1];
204
+ }
205
+
206
+ filter(fn: (t: T) => boolean): Observable<T, E> {
207
+ return this.pipe(operator.filter(fn));
208
+ }
209
+
210
+ distinct(fn: (t1: T, t2: T) => boolean = Object.is): Observable<T, E> {
211
+ return this.pipe(operator.distinct(fn));
212
+ }
213
+
214
+ map<U>(fn: (t: T) => U): Observable<U, E> {
215
+ return this.pipe(operator.map(fn));
216
+ }
217
+
218
+ reduce<A>(fn: (acc: A, t: T) => A, init: A): Observable<A, E> {
219
+ return this.pipe(operator.reduce(fn, init));
220
+ }
221
+
222
+ replay(n: number): Observable<T, E> {
223
+ return this.pipe(operator.replay(n));
224
+ }
225
+
226
+ tap(s: Subscriber<T, E>): Observable<T, E> {
227
+ return this.pipe(operator.tap(s));
228
+ }
229
+ }
230
+
231
+ export class BehaviorSubject<T, E = unknown, T2 = T> extends Subject<T, E, T2> {
232
+ #current: T;
233
+
234
+ constructor(t: T, scheduler?: Scheduler) {
235
+ super(scheduler);
236
+ this.#current = t;
237
+ }
238
+
239
+ next(t: T | T2) {
240
+ this.#current = t as T;
241
+ return super.next(t);
242
+ }
243
+
244
+ subscribe(subscriber: Subscriber<T, E>): Subscription {
245
+ if (subscriber instanceof Function) {
246
+ subscriber = { next: subscriber };
247
+ }
248
+ subscriber.next?.(this.#current);
249
+ return super.subscribe(subscriber);
250
+ }
251
+
252
+ get current(): T {
253
+ return this.#current;
254
+ }
255
+ }
256
+
257
+ export class ReplaySubject<T, E = unknown> extends Subject<T, E> {
258
+ #history: T[] = [];
259
+
260
+ constructor(private readonly n: number, scheduler?: Scheduler) {
261
+ super(scheduler);
262
+ }
263
+
264
+ next(t: T) {
265
+ this.#history.push(t);
266
+ if (this.#history.length > this.n) {
267
+ this.#history.shift();
268
+ }
269
+ return super.next(t);
270
+ }
271
+
272
+ subscribe(subscriber: Subscriber<T, E>): Subscription {
273
+ if (subscriber instanceof Function) {
274
+ subscriber = { next: subscriber };
275
+ }
276
+ const history = [...this.#history];
277
+ (function send() {
278
+ if (history.length == 0) return;
279
+ const t = history.shift()!;
280
+ subscriber.next?.(t);
281
+ new Promise(send);
282
+ })();
283
+ return super.subscribe(subscriber);
284
+ }
285
+ }
286
+
287
+ export function eventListener<E extends Event>() {
288
+ const observable = new Subject<E, unknown>();
289
+ function listener(e: E) {
290
+ e.preventDefault();
291
+ observable.next(e);
292
+ }
293
+
294
+ return [observable, listener];
295
+ }
296
+
297
+ export class EventHandler<E extends Event> extends Subject<E> {
298
+ constructor(private readonly eventFn: (e: E) => void | Promise<undefined>) {
299
+ super();
300
+ }
301
+
302
+ next(e: E) {
303
+ e.preventDefault();
304
+ super.next(e);
305
+ }
306
+ }
307
+
308
+ export const watch =
309
+ <T, E>(logger: Logger = DEFAULT_LOGGER) =>
310
+ (observable: Observable<T, E>) => {
311
+ observable.tap({
312
+ next(t: T) {
313
+ logger.info(t);
314
+ },
315
+ complete() {
316
+ logger.info("Observable completed");
317
+ },
318
+ error(e: E) {
319
+ logger.warn(e);
320
+ },
321
+ });
322
+ };
323
+
324
+ class MapOperator<T, U, E>
325
+ extends Subject<U, E, T>
326
+ implements FullSubscriber<T, E>, Observable<U, E>
327
+ {
328
+ constructor(private readonly mapFn: (t: T) => U) {
329
+ super();
330
+ }
331
+
332
+ next(t: T): void | Promise<undefined> {
333
+ return super.next(this.mapFn(t));
334
+ }
335
+ }
336
+
337
+ class FilterOperator<T, E>
338
+ extends Subject<T, E>
339
+ implements FullSubscriber<T, E>, Observable<T, E>
340
+ {
341
+ constructor(private readonly filterFn: (t: T) => boolean) {
342
+ super();
343
+ }
344
+
345
+ next(t: T): void | Promise<undefined> {
346
+ return this.filterFn(t) ? super.next(t) : undefined;
347
+ }
348
+ }
349
+
350
+ class DistinctOperator<T, E>
351
+ extends Subject<T, E>
352
+ implements FullSubscriber<T, E>, Observable<T, E>
353
+ {
354
+ #prior: T | undefined = undefined;
355
+
356
+ constructor(
357
+ private readonly distinctFn: (t1: T, t2: T) => boolean = Object.is
358
+ ) {
359
+ super();
360
+ }
361
+
362
+ next(t: T): void | Promise<undefined> {
363
+ if (this.#prior === undefined) {
364
+ this.#prior = t;
365
+ return super.next(t);
366
+ }
367
+ const same = this.distinctFn(this.#prior!, t);
368
+ if (!same) {
369
+ this.#prior = t;
370
+ return super.next(t);
371
+ }
372
+ return undefined;
373
+ }
374
+ }
375
+
376
+ class ReduceOperator<A, T, E> extends BehaviorSubject<A, E, T> {
377
+ constructor(private readonly fn: (acc: A, t: T) => A, init: A) {
378
+ super(init);
379
+ }
380
+
381
+ next(t: T) {
382
+ return super.next(this.fn(this.current, t));
383
+ }
384
+ }
385
+
386
+ export class TakeUntilOperator<T, E> extends Subject<T, E> {
387
+ constructor(o: Observable<unknown, unknown>) {
388
+ super();
389
+ o.subscribe(() => this.complete());
390
+ }
391
+ }
392
+ export class TapOperator<T, E> extends Subject<T, E> {
393
+ private readonly subscriber: FullSubscriber<T, E>;
394
+ constructor(fn: Subscriber<T, E>) {
395
+ super();
396
+ this.subscriber = fn instanceof Function ? { next: fn } : fn;
397
+ }
398
+
399
+ next(t: T) {
400
+ this.subscriber.next?.(t);
401
+ return super.next(t);
402
+ }
403
+
404
+ error(e: E) {
405
+ this.subscriber.error?.(e);
406
+ return super.error(e);
407
+ }
408
+
409
+ complete() {
410
+ this.subscriber.complete?.();
411
+ return super.complete();
412
+ }
413
+ }
414
+
415
+ class FirstOperator<T, E> extends Subject<T, E> {
416
+ next(t: T): void | Promise<undefined> {
417
+ const next = super.next(t);
418
+ this.complete();
419
+ return next;
420
+ }
421
+ }
422
+
423
+ class LastOperator<T, E = Error> extends Subject<T, E> {
424
+ #latest?: T;
425
+
426
+ next(t: T) {
427
+ this.#latest = t;
428
+ }
429
+
430
+ complete(): void | Promise<undefined> {
431
+ if (this.#latest !== undefined) {
432
+ super.next(this.#latest);
433
+ }
434
+ return super.complete();
435
+ }
436
+ }
437
+
438
+ export const filter = <T, E>(fn: (t: T) => boolean) =>
439
+ new FilterOperator<T, E>(fn);
440
+ export const distinct = <T, E>(fn?: (t1: T, t2: T) => boolean) =>
441
+ new DistinctOperator<T, E>(fn ?? Object.is);
442
+ export const first = <T, E>() => new FirstOperator<T, E>();
443
+ export const last = <T, E>() => new LastOperator<T, E>();
444
+ export const map = <T1, T2, E>(fn: (t: T1) => T2) =>
445
+ new MapOperator<T1, T2, E>(fn);
446
+ export const replay = <T, E>(n: number) => new ReplaySubject<T, E>(n);
447
+ export const reduce = <A, T, E>(fn: (acc: A, t: T) => A, init: A) =>
448
+ new ReduceOperator<A, T, E>(fn, init);
449
+ export const takeUntil = <T, E>(o: Observable<unknown, unknown>) =>
450
+ new TakeUntilOperator<T, E>(o);
451
+ export const tap = <T, E>(fn: Subscriber<T, E>) => new TapOperator<T, E>(fn);
452
+
453
+ export const operator = {
454
+ filter,
455
+ distinct,
456
+ first,
457
+ last,
458
+ map,
459
+ replay,
460
+ reduce,
461
+ takeUntil,
462
+ tap,
463
+ };
@@ -0,0 +1,66 @@
1
+ // Config
2
+ // ––––––––––––––––––––
3
+
4
+ // Enable <header>, <main>, <footer> inside <body> as a container
5
+ $enable-semantic-container: true !default;
6
+
7
+ // Enable .container and .container-fluid
8
+ $enable-class-container: false !default;
9
+
10
+ // Enable a centered viewport for <header>, <main>, <footer> inside <body>
11
+ // Options are "all" to center all, "main" to only center main, and "none" to treat all as fluid.
12
+ $enable-viewport: "none" !default;
13
+
14
+ // Enable responsive spacings for <header>, <main>, <footer>, <section>, <article>
15
+ // Fixed spacings if disabled
16
+ $enable-responsive-spacings: true !default;
17
+
18
+ // Enable responsive typography
19
+ // Fixed root element size if disabled
20
+ $enable-responsive-typography: true !default;
21
+
22
+ // Enable .classes
23
+ // .classless version if disabled
24
+ $enable-classes: true !default;
25
+
26
+ // Enable .grid class
27
+ $enable-grid: true !default;
28
+
29
+ // Enable transitions
30
+ $enable-transitions: true !default;
31
+
32
+ // Enable overriding with !important
33
+ $enable-important: true !default;
34
+
35
+ // Responsive
36
+ // ––––––––––––––––––––
37
+
38
+ // xs: Extra small (portrait phones)
39
+ // sm: Small (landscape phones)
40
+ // md: Medium (tablets)
41
+ // lg: Large (desktops)
42
+ // xl: Extra large (large desktops, TVs)
43
+
44
+ // NOTE:
45
+ // To provide an easy and fine styling on each breakpoint
46
+ // we didn't use @each, @mixin or @include.
47
+ // That means you need to edit each CSS selector file to add a breakpoint
48
+
49
+ // Breakpoints
50
+ // 'null' disable the breakpoint
51
+ $breakpoints: (
52
+ xs: 0,
53
+ sm: 576px,
54
+ md: 768px,
55
+ lg: 992px,
56
+ xl: 1200px,
57
+ ) !default;
58
+
59
+ // Viewports
60
+ $viewports: (
61
+ // 'null' disable the viewport on a breakpoint
62
+ sm: 510px,
63
+ md: 700px,
64
+ lg: 920px,
65
+ xl: 1130px
66
+ ) !default;
@@ -0,0 +1,112 @@
1
+ details {
2
+ display: block;
3
+ margin-bottom: var(--spacing);
4
+ padding-bottom: var(--spacing);
5
+ border-bottom: var(--border-width) solid var(--accordion-border-color);
6
+
7
+ summary {
8
+ line-height: 1rem;
9
+ list-style-type: none;
10
+ cursor: pointer;
11
+
12
+ &:not([role]) {
13
+ color: var(--accordion-close-summary-color);
14
+ }
15
+
16
+ @if $enable-transitions {
17
+ transition: color var(--transition);
18
+ }
19
+
20
+ // Reset marker
21
+ &::-webkit-details-marker {
22
+ display: none;
23
+ }
24
+
25
+ &::marker {
26
+ display: none;
27
+ }
28
+
29
+ &::-moz-list-bullet {
30
+ list-style-type: none;
31
+ }
32
+
33
+ // Marker
34
+ &::after {
35
+ display: block;
36
+ width: 1rem;
37
+ height: 1rem;
38
+ margin-inline-start: calc(var(--spacing, 1rem) * 0.5);
39
+ float: right;
40
+ transform: rotate(-90deg);
41
+ background-image: var(--icon-chevron);
42
+ background-position: right center;
43
+ background-size: 1rem auto;
44
+ background-repeat: no-repeat;
45
+ content: "";
46
+
47
+ @if $enable-transitions {
48
+ transition: transform var(--transition);
49
+ }
50
+ }
51
+
52
+ &:focus {
53
+ outline: none;
54
+
55
+ &:not([role="button"]) {
56
+ color: var(--accordion-active-summary-color);
57
+ }
58
+ }
59
+
60
+ // Type button
61
+ &[role="button"] {
62
+ width: 100%;
63
+ text-align: left;
64
+
65
+ // Marker
66
+ &::after {
67
+ height: calc(1rem * var(--line-height, 1.5));
68
+ background-image: var(--icon-chevron-button);
69
+ }
70
+
71
+ @if $enable-classes {
72
+ // .contrast
73
+ &:not(.outline).contrast {
74
+ // Marker
75
+ &::after {
76
+ background-image: var(--icon-chevron-button-inverse);
77
+ }
78
+ }
79
+ }
80
+ }
81
+ }
82
+
83
+ // Open
84
+ &[open] {
85
+ > summary {
86
+ margin-bottom: calc(var(--spacing));
87
+
88
+ &:not([role]) {
89
+ &:not(:focus) {
90
+ color: var(--accordion-open-summary-color);
91
+ }
92
+ }
93
+
94
+ &::after {
95
+ transform: rotate(0);
96
+ }
97
+ }
98
+ }
99
+ }
100
+
101
+ [dir="rtl"] {
102
+ details {
103
+ summary {
104
+ text-align: right;
105
+
106
+ &::after {
107
+ float: left;
108
+ background-position: left center;
109
+ }
110
+ }
111
+ }
112
+ }