@davidsouther/jiffies 2.2.4 → 2.3.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 (367) hide show
  1. package/LICENSE +1 -1
  2. package/lib/cjs/assert.d.ts +2 -2
  3. package/lib/cjs/awaitable.d.ts +1 -1
  4. package/lib/cjs/components/button_bar.d.ts +2 -2
  5. package/lib/cjs/components/inline_edit.d.ts +2 -2
  6. package/lib/cjs/components/logger.d.ts +1 -1
  7. package/lib/cjs/components/select.d.ts +4 -7
  8. package/lib/cjs/components/test.d.ts +1 -1
  9. package/lib/cjs/components/virtual_scroll.d.ts +6 -4
  10. package/lib/cjs/context.d.ts +5 -9
  11. package/lib/cjs/debounce.d.ts +1 -1
  12. package/lib/cjs/diff.d.ts +2 -2
  13. package/lib/cjs/display.d.ts +1 -1
  14. package/lib/cjs/dom/css/border.d.ts +2 -2
  15. package/lib/cjs/dom/css/constants.d.ts +3 -3
  16. package/lib/cjs/dom/css/core.d.ts +1 -1
  17. package/lib/cjs/dom/css/fstyle.d.ts +2 -2
  18. package/lib/cjs/dom/css/sizing.d.ts +2 -2
  19. package/lib/cjs/dom/dom.d.ts +8 -8
  20. package/lib/cjs/dom/fc.d.ts +8 -12
  21. package/lib/cjs/dom/form/form.d.ts +5 -6
  22. package/lib/cjs/dom/html.d.ts +112 -113
  23. package/lib/cjs/dom/observable.d.ts +1 -1
  24. package/lib/cjs/dom/provide.d.ts +1 -1
  25. package/lib/cjs/dom/router/router.d.ts +2 -2
  26. package/lib/cjs/dom/svg.d.ts +64 -64
  27. package/lib/cjs/dom/types/css.d.ts +10 -32
  28. package/lib/cjs/dom/types/html.d.ts +4 -6
  29. package/lib/cjs/equal.d.ts +8 -5
  30. package/lib/cjs/flags.d.ts +1 -1
  31. package/lib/cjs/fs.d.ts +3 -3
  32. package/lib/cjs/fs_node.d.ts +1 -1
  33. package/lib/cjs/lock.d.ts +1 -1
  34. package/lib/cjs/log.d.ts +9 -9
  35. package/lib/cjs/observable/event.d.ts +2 -2
  36. package/lib/cjs/observable/observable.d.ts +37 -35
  37. package/lib/cjs/result.d.ts +21 -21
  38. package/lib/cjs/safe.d.ts +1 -1
  39. package/lib/cjs/scope/describe.d.ts +4 -4
  40. package/lib/cjs/scope/display/console.d.ts +1 -1
  41. package/lib/cjs/scope/display/dom.d.ts +2 -2
  42. package/lib/cjs/scope/display/junit.d.ts +1 -1
  43. package/lib/cjs/scope/execute.d.ts +2 -2
  44. package/lib/cjs/scope/index.d.ts +3 -3
  45. package/lib/cjs/scope/scope.d.ts +3 -3
  46. package/lib/cjs/scope/state.d.ts +1 -1
  47. package/lib/cjs/server/http/apps.d.ts +1 -1
  48. package/lib/cjs/server/http/css.d.ts +1 -1
  49. package/lib/cjs/server/http/index.d.ts +4 -9
  50. package/lib/cjs/server/http/response.d.ts +3 -3
  51. package/lib/cjs/server/http/sitemap.d.ts +1 -1
  52. package/lib/cjs/server/http/static.d.ts +1 -1
  53. package/lib/cjs/server/http/typescript.d.ts +1 -1
  54. package/lib/cjs/test_all.d.ts +9 -9
  55. package/lib/cjs/tsconfig.tsbuildinfo +1 -1
  56. package/lib/esm/assert.d.ts +2 -2
  57. package/lib/esm/awaitable.d.ts +1 -1
  58. package/lib/esm/components/button_bar.d.ts +2 -2
  59. package/lib/esm/components/inline_edit.d.ts +2 -2
  60. package/lib/esm/components/logger.d.ts +1 -1
  61. package/lib/esm/components/select.d.ts +3 -3
  62. package/lib/esm/components/test.d.ts +1 -1
  63. package/lib/esm/components/virtual_scroll.d.ts +6 -4
  64. package/lib/esm/context.d.ts +5 -9
  65. package/lib/esm/debounce.d.ts +1 -2
  66. package/lib/esm/diff.d.ts +2 -2
  67. package/lib/esm/display.d.ts +1 -1
  68. package/lib/esm/dom/css/border.d.ts +2 -2
  69. package/lib/esm/dom/css/constants.d.ts +3 -3
  70. package/lib/esm/dom/css/core.d.ts +1 -1
  71. package/lib/esm/dom/css/fstyle.d.ts +2 -2
  72. package/lib/esm/dom/css/sizing.d.ts +2 -2
  73. package/lib/esm/dom/dom.d.ts +8 -8
  74. package/lib/esm/dom/fc.d.ts +8 -12
  75. package/lib/esm/dom/form/form.d.ts +5 -6
  76. package/lib/esm/dom/html.d.ts +112 -113
  77. package/lib/esm/dom/observable.d.ts +1 -1
  78. package/lib/esm/dom/provide.d.ts +1 -1
  79. package/lib/esm/dom/router/router.d.ts +2 -2
  80. package/lib/esm/dom/svg.d.ts +64 -64
  81. package/lib/esm/dom/types/css.d.ts +10 -32
  82. package/lib/esm/dom/types/html.d.ts +4 -6
  83. package/lib/esm/equal.d.ts +8 -5
  84. package/lib/esm/flags.d.ts +1 -1
  85. package/lib/esm/fs.d.ts +3 -3
  86. package/lib/esm/fs_node.d.ts +1 -1
  87. package/lib/esm/lock.d.ts +1 -1
  88. package/lib/esm/log.d.ts +9 -9
  89. package/lib/esm/observable/event.d.ts +2 -2
  90. package/lib/esm/observable/observable.d.ts +37 -35
  91. package/lib/esm/result.d.ts +21 -21
  92. package/lib/esm/safe.d.ts +1 -1
  93. package/lib/esm/scope/describe.d.ts +4 -4
  94. package/lib/esm/scope/display/console.d.ts +1 -1
  95. package/lib/esm/scope/display/dom.d.ts +2 -2
  96. package/lib/esm/scope/display/junit.d.ts +1 -1
  97. package/lib/esm/scope/execute.d.ts +2 -2
  98. package/lib/esm/scope/index.d.ts +3 -3
  99. package/lib/esm/scope/scope.d.ts +3 -3
  100. package/lib/esm/scope/state.d.ts +1 -1
  101. package/lib/esm/server/http/apps.d.ts +1 -1
  102. package/lib/esm/server/http/css.d.ts +1 -1
  103. package/lib/esm/server/http/index.d.ts +4 -9
  104. package/lib/esm/server/http/response.d.ts +3 -3
  105. package/lib/esm/server/http/sitemap.d.ts +1 -1
  106. package/lib/esm/server/http/static.d.ts +1 -1
  107. package/lib/esm/server/http/typescript.d.ts +1 -1
  108. package/lib/esm/test_all.d.ts +9 -9
  109. package/lib/esm/tsconfig.tsbuildinfo +1 -1
  110. package/package.json +11 -9
  111. package/src/assert.ts +5 -5
  112. package/src/components/button_bar.ts +28 -30
  113. package/src/components/inline_edit.ts +8 -7
  114. package/src/components/logger.ts +6 -6
  115. package/src/components/select.ts +7 -7
  116. package/src/components/test.ts +5 -0
  117. package/src/components/virtual_scroll.test.ts +9 -6
  118. package/src/components/virtual_scroll.ts +29 -24
  119. package/src/context.test.ts +4 -4
  120. package/src/context.ts +16 -11
  121. package/src/debounce.ts +9 -3
  122. package/src/diff.test.ts +4 -4
  123. package/src/diff.ts +14 -16
  124. package/src/dom/css/border.ts +11 -11
  125. package/src/dom/css/core.ts +1 -1
  126. package/src/dom/css/fstyle.ts +4 -4
  127. package/src/dom/css/sizing.ts +1 -1
  128. package/src/dom/dom.ts +57 -47
  129. package/src/dom/fc.test.ts +8 -8
  130. package/src/dom/fc.ts +32 -35
  131. package/src/dom/form/form.app.ts +9 -9
  132. package/src/dom/form/form.ts +25 -16
  133. package/src/dom/form/index.html +3 -2
  134. package/src/dom/html.test.ts +12 -10
  135. package/src/dom/html.ts +2 -3
  136. package/src/dom/observable.test.ts +6 -6
  137. package/src/dom/observable.ts +2 -2
  138. package/src/dom/provide.ts +1 -1
  139. package/src/dom/router/link.ts +3 -3
  140. package/src/dom/router/router.ts +5 -5
  141. package/src/dom/svg.ts +7 -6
  142. package/src/dom/test.ts +3 -0
  143. package/src/dom/types/css.ts +43 -61
  144. package/src/dom/types/html.ts +2 -4
  145. package/src/dom/xml.ts +2 -2
  146. package/src/equal.test.ts +3 -3
  147. package/src/equal.ts +27 -14
  148. package/src/flags.test.ts +2 -2
  149. package/src/flags.ts +2 -2
  150. package/src/fs.test.ts +5 -5
  151. package/src/fs.ts +26 -20
  152. package/src/fs_node.ts +4 -4
  153. package/src/fs_win.test.ts +1 -1
  154. package/src/generator.test.ts +4 -3
  155. package/src/generator.ts +1 -1
  156. package/src/hooks/_notes +4 -1
  157. package/src/index.html +7 -7
  158. package/src/lock.test.ts +4 -4
  159. package/src/lock.ts +8 -7
  160. package/src/log.ts +28 -18
  161. package/src/observable/event.ts +7 -7
  162. package/src/observable/observable.test.ts +3 -3
  163. package/src/observable/observable.ts +71 -52
  164. package/src/result.test.ts +7 -10
  165. package/src/result.ts +51 -47
  166. package/src/safe.ts +1 -1
  167. package/src/scope/describe.ts +12 -11
  168. package/src/scope/display/console.ts +4 -4
  169. package/src/scope/display/dom.ts +9 -9
  170. package/src/scope/display/junit.ts +21 -24
  171. package/src/scope/execute.ts +17 -12
  172. package/src/scope/expect.ts +22 -22
  173. package/src/scope/fix.ts +10 -7
  174. package/src/scope/index.ts +3 -3
  175. package/src/scope/scope.ts +2 -2
  176. package/src/scope/state.ts +2 -2
  177. package/src/server/http/apps.ts +5 -5
  178. package/src/server/http/css.ts +10 -26
  179. package/src/server/http/index.ts +30 -24
  180. package/src/server/http/response.ts +12 -5
  181. package/src/server/http/sitemap.ts +8 -8
  182. package/src/server/http/static.ts +9 -6
  183. package/src/server/http/typescript.ts +25 -25
  184. package/src/server/main.ts +7 -4
  185. package/src/test.mjs +8 -8
  186. package/src/test_all.ts +16 -13
  187. package/src/transpile.mjs +6 -18
  188. package/build/pico.css +0 -2466
  189. package/build/pico.css.map +0 -1
  190. package/lib/cjs/assert.js +0 -46
  191. package/lib/cjs/awaitable.js +0 -2
  192. package/lib/cjs/case.js +0 -9
  193. package/lib/cjs/components/button_bar.js +0 -29
  194. package/lib/cjs/components/inline_edit.js +0 -51
  195. package/lib/cjs/components/logger.js +0 -27
  196. package/lib/cjs/components/select.js +0 -6
  197. package/lib/cjs/components/test.js +0 -7
  198. package/lib/cjs/components/virtual_scroll.js +0 -102
  199. package/lib/cjs/components/virtual_scroll.test.js +0 -22
  200. package/lib/cjs/context.js +0 -48
  201. package/lib/cjs/context.test.js +0 -48
  202. package/lib/cjs/debounce.js +0 -12
  203. package/lib/cjs/diff.js +0 -58
  204. package/lib/cjs/diff.test.js +0 -41
  205. package/lib/cjs/display.js +0 -16
  206. package/lib/cjs/dom/css/border.js +0 -33
  207. package/lib/cjs/dom/css/constants.js +0 -31
  208. package/lib/cjs/dom/css/core.js +0 -31
  209. package/lib/cjs/dom/css/fstyle.js +0 -36
  210. package/lib/cjs/dom/css/sizing.js +0 -14
  211. package/lib/cjs/dom/dom.js +0 -110
  212. package/lib/cjs/dom/fc.js +0 -39
  213. package/lib/cjs/dom/fc.test.js +0 -23
  214. package/lib/cjs/dom/form/form.app.js +0 -27
  215. package/lib/cjs/dom/form/form.js +0 -49
  216. package/lib/cjs/dom/form/form.test.js +0 -1
  217. package/lib/cjs/dom/html.js +0 -119
  218. package/lib/cjs/dom/html.test.js +0 -60
  219. package/lib/cjs/dom/observable.js +0 -10
  220. package/lib/cjs/dom/observable.test.js +0 -35
  221. package/lib/cjs/dom/provide.js +0 -12
  222. package/lib/cjs/dom/router/link.js +0 -7
  223. package/lib/cjs/dom/router/router.js +0 -55
  224. package/lib/cjs/dom/svg.js +0 -69
  225. package/lib/cjs/dom/test.js +0 -13
  226. package/lib/cjs/dom/types/css.js +0 -24
  227. package/lib/cjs/dom/types/dom.js +0 -1
  228. package/lib/cjs/dom/types/html.js +0 -2
  229. package/lib/cjs/dom/xml.js +0 -8
  230. package/lib/cjs/equal.js +0 -48
  231. package/lib/cjs/equal.test.js +0 -22
  232. package/lib/cjs/flags.js +0 -52
  233. package/lib/cjs/flags.test.js +0 -37
  234. package/lib/cjs/fs.js +0 -235
  235. package/lib/cjs/fs.test.js +0 -86
  236. package/lib/cjs/fs_node.js +0 -50
  237. package/lib/cjs/fs_win.test.js +0 -10
  238. package/lib/cjs/generator.js +0 -14
  239. package/lib/cjs/generator.test.js +0 -26
  240. package/lib/cjs/is_browser.js +0 -4
  241. package/lib/cjs/loader-register.d.mts +0 -1
  242. package/lib/cjs/loader-register.d.ts +0 -1
  243. package/lib/cjs/loader-register.js +0 -4
  244. package/lib/cjs/loader-register.mjs +0 -4
  245. package/lib/cjs/loader.d.mts +0 -23
  246. package/lib/cjs/loader.mjs +0 -41
  247. package/lib/cjs/lock.js +0 -27
  248. package/lib/cjs/lock.test.js +0 -18
  249. package/lib/cjs/log.js +0 -98
  250. package/lib/cjs/observable/event.js +0 -61
  251. package/lib/cjs/observable/observable.js +0 -363
  252. package/lib/cjs/observable/observable.test.js +0 -65
  253. package/lib/cjs/package.json +0 -1
  254. package/lib/cjs/range.js +0 -11
  255. package/lib/cjs/result.js +0 -80
  256. package/lib/cjs/result.test.js +0 -78
  257. package/lib/cjs/safe.js +0 -14
  258. package/lib/cjs/scope/describe.js +0 -73
  259. package/lib/cjs/scope/display/console.js +0 -25
  260. package/lib/cjs/scope/display/dom.js +0 -30
  261. package/lib/cjs/scope/display/junit.js +0 -21
  262. package/lib/cjs/scope/execute.js +0 -91
  263. package/lib/cjs/scope/expect.js +0 -110
  264. package/lib/cjs/scope/fix.js +0 -26
  265. package/lib/cjs/scope/index.js +0 -15
  266. package/lib/cjs/scope/scope.js +0 -2
  267. package/lib/cjs/scope/state.js +0 -12
  268. package/lib/cjs/server/http/apps.js +0 -27
  269. package/lib/cjs/server/http/css.js +0 -54
  270. package/lib/cjs/server/http/index.js +0 -77
  271. package/lib/cjs/server/http/response.js +0 -45
  272. package/lib/cjs/server/http/sitemap.js +0 -46
  273. package/lib/cjs/server/http/static.js +0 -25
  274. package/lib/cjs/server/http/typescript.js +0 -44
  275. package/lib/cjs/server/main.js +0 -14
  276. package/lib/cjs/test.mjs +0 -28
  277. package/lib/cjs/test_all.js +0 -30
  278. package/lib/cjs/transpile.mjs +0 -22
  279. package/lib/esm/assert.js +0 -38
  280. package/lib/esm/awaitable.js +0 -1
  281. package/lib/esm/case.js +0 -5
  282. package/lib/esm/components/button_bar.js +0 -27
  283. package/lib/esm/components/inline_edit.js +0 -48
  284. package/lib/esm/components/logger.js +0 -22
  285. package/lib/esm/components/select.js +0 -3
  286. package/lib/esm/components/test.js +0 -3
  287. package/lib/esm/components/virtual_scroll.js +0 -94
  288. package/lib/esm/components/virtual_scroll.test.js +0 -20
  289. package/lib/esm/context.js +0 -43
  290. package/lib/esm/context.test.js +0 -46
  291. package/lib/esm/debounce.js +0 -8
  292. package/lib/esm/diff.js +0 -54
  293. package/lib/esm/diff.test.js +0 -39
  294. package/lib/esm/display.js +0 -11
  295. package/lib/esm/dom/css/border.js +0 -27
  296. package/lib/esm/dom/css/constants.js +0 -28
  297. package/lib/esm/dom/css/core.js +0 -24
  298. package/lib/esm/dom/css/fstyle.js +0 -32
  299. package/lib/esm/dom/css/sizing.js +0 -10
  300. package/lib/esm/dom/dom.js +0 -104
  301. package/lib/esm/dom/fc.js +0 -35
  302. package/lib/esm/dom/fc.test.js +0 -21
  303. package/lib/esm/dom/form/form.app.js +0 -23
  304. package/lib/esm/dom/form/form.js +0 -34
  305. package/lib/esm/dom/form/form.test.js +0 -1
  306. package/lib/esm/dom/html.js +0 -114
  307. package/lib/esm/dom/html.test.js +0 -58
  308. package/lib/esm/dom/observable.js +0 -6
  309. package/lib/esm/dom/observable.test.js +0 -33
  310. package/lib/esm/dom/provide.js +0 -7
  311. package/lib/esm/dom/router/link.js +0 -3
  312. package/lib/esm/dom/router/router.js +0 -52
  313. package/lib/esm/dom/svg.js +0 -65
  314. package/lib/esm/dom/test.js +0 -9
  315. package/lib/esm/dom/types/css.js +0 -23
  316. package/lib/esm/dom/types/dom.js +0 -1
  317. package/lib/esm/dom/types/html.js +0 -1
  318. package/lib/esm/dom/xml.js +0 -4
  319. package/lib/esm/equal.js +0 -41
  320. package/lib/esm/equal.test.js +0 -20
  321. package/lib/esm/flags.js +0 -48
  322. package/lib/esm/flags.test.js +0 -35
  323. package/lib/esm/fs.js +0 -226
  324. package/lib/esm/fs.test.js +0 -84
  325. package/lib/esm/fs_node.js +0 -45
  326. package/lib/esm/fs_win.test.js +0 -8
  327. package/lib/esm/generator.js +0 -10
  328. package/lib/esm/generator.test.js +0 -24
  329. package/lib/esm/is_browser.js +0 -1
  330. package/lib/esm/loader-register.d.mts +0 -1
  331. package/lib/esm/loader-register.mjs +0 -2
  332. package/lib/esm/loader.d.mts +0 -23
  333. package/lib/esm/loader.mjs +0 -36
  334. package/lib/esm/lock.js +0 -23
  335. package/lib/esm/lock.test.js +0 -16
  336. package/lib/esm/log.js +0 -88
  337. package/lib/esm/observable/event.js +0 -46
  338. package/lib/esm/observable/observable.js +0 -343
  339. package/lib/esm/observable/observable.test.js +0 -63
  340. package/lib/esm/range.js +0 -7
  341. package/lib/esm/result.js +0 -65
  342. package/lib/esm/result.test.js +0 -76
  343. package/lib/esm/safe.js +0 -10
  344. package/lib/esm/scope/describe.js +0 -60
  345. package/lib/esm/scope/display/console.js +0 -21
  346. package/lib/esm/scope/display/dom.js +0 -26
  347. package/lib/esm/scope/display/junit.js +0 -17
  348. package/lib/esm/scope/execute.js +0 -85
  349. package/lib/esm/scope/expect.js +0 -104
  350. package/lib/esm/scope/fix.js +0 -22
  351. package/lib/esm/scope/index.js +0 -3
  352. package/lib/esm/scope/scope.js +0 -1
  353. package/lib/esm/scope/state.js +0 -8
  354. package/lib/esm/server/http/apps.js +0 -23
  355. package/lib/esm/server/http/css.js +0 -50
  356. package/lib/esm/server/http/index.js +0 -73
  357. package/lib/esm/server/http/response.js +0 -40
  358. package/lib/esm/server/http/sitemap.js +0 -42
  359. package/lib/esm/server/http/static.js +0 -21
  360. package/lib/esm/server/http/typescript.js +0 -40
  361. package/lib/esm/server/main.js +0 -12
  362. package/lib/esm/test.mjs +0 -26
  363. package/lib/esm/test_all.js +0 -28
  364. package/lib/esm/transpile.mjs +0 -18
  365. package/src/components/test.js +0 -3
  366. package/src/loader-register.mjs +0 -3
  367. package/src/loader.mjs +0 -46
package/src/dom/fc.ts CHANGED
@@ -1,59 +1,56 @@
1
1
  import {
2
2
  CLEAR,
3
- DenormChildren,
4
- DomAttrs,
3
+ type DenormChildren,
4
+ type DomAttrs,
5
5
  normalizeArguments,
6
6
  update,
7
- } from "./dom.js";
7
+ } from "./dom.ts";
8
8
 
9
9
  export type Attrs<S> = S & Partial<DomAttrs>;
10
10
 
11
11
  export const State = Symbol();
12
- export interface FCComponent<P extends object, S extends object>
12
+ export interface FCComponent<Props extends object, State extends object>
13
13
  extends Element {
14
- [State]?: Partial<S>;
14
+ [State]?: Partial<State>;
15
15
  update(
16
- attrs?: Partial<Attrs<P> & DomAttrs> | DenormChildren,
16
+ attrs?: Partial<Attrs<Props> & DomAttrs> | DenormChildren,
17
17
  ...children: DenormChildren[]
18
18
  ): this;
19
19
  }
20
- export interface RenderFn<P extends object, S extends object> {
21
- (el: FCComponent<P, S>, attrs: Attrs<P>, children: DenormChildren[]):
22
- | Element
23
- | Element[];
24
- }
20
+ export type RenderFn<Props extends object, State extends object> = (
21
+ el: FCComponent<Props, State>,
22
+ attrs: Attrs<Props>,
23
+ children: DenormChildren[],
24
+ ) => Element | Element[];
25
25
 
26
- export interface FCComponentCtor<P extends object, S extends object> {
27
- (
28
- attrs?: Attrs<P> | DenormChildren,
29
- ...children: DenormChildren[]
30
- ): FCComponent<P, S>;
31
- }
26
+ export type FCComponentCtor<Props extends object, State extends object> = (
27
+ attrs?: Attrs<Props> | DenormChildren,
28
+ ...children: DenormChildren[]
29
+ ) => FCComponent<Props, State>;
32
30
 
33
- export function FC<P extends object, S extends object = {}>(
31
+ export function FC<Props extends object, State extends object = object>(
34
32
  name: string,
35
- component: RenderFn<P, S>
36
- ): FCComponentCtor<P, S> {
37
- class FCImpl extends HTMLElement implements FCComponent<P, S> {
38
- constructor() {
39
- super();
40
- }
41
-
42
- [State]: Partial<S> = {};
43
- #attrs: Attrs<P> = {} as Attrs<P>;
33
+ component: RenderFn<Props, State>,
34
+ ): FCComponentCtor<Props, State> {
35
+ class FCImpl extends HTMLElement implements FCComponent<Props, State> {
36
+ [State]: Partial<State> = {};
37
+ #attrs: Attrs<Props> = {} as Attrs<Props>;
44
38
  #children: DenormChildren[] = [];
45
39
 
46
- update(attrs?: Attrs<P> | DenormChildren, ...children: DenormChildren[]) {
40
+ update(
41
+ attrs?: Attrs<Props> | DenormChildren,
42
+ ...children: DenormChildren[]
43
+ ) {
47
44
  [attrs, children] = normalizeArguments(attrs, children) as [
48
- Attrs<P>,
49
- DenormChildren[]
45
+ Attrs<Props>,
46
+ DenormChildren[],
50
47
  ];
51
48
  if (children[0] === CLEAR) {
52
49
  this.#children = [];
53
50
  } else if (children.length > 0) {
54
51
  this.#children = children;
55
52
  }
56
- this.#attrs = { ...this.#attrs, ...(attrs as Attrs<P>) };
53
+ this.#attrs = { ...this.#attrs, ...(attrs as Attrs<Props>) };
57
54
 
58
55
  // Apply updates from the attrs to the dom node itself
59
56
  update(this, this.#attrs, []);
@@ -67,11 +64,11 @@ export function FC<P extends object, S extends object = {}>(
67
64
 
68
65
  customElements.define(name, FCImpl);
69
66
 
70
- const ctor: FCComponentCtor<P, S> = (
71
- attrs?: Attrs<P> | DenormChildren,
67
+ const ctor: FCComponentCtor<Props, State> = (
68
+ attrs?: Attrs<Props> | DenormChildren,
72
69
  ...children: DenormChildren[]
73
- ): FCComponent<P, S> => {
74
- const element = document.createElement(name) as FCComponent<P, S>;
70
+ ): FCComponent<Props, State> => {
71
+ const element = document.createElement(name) as FCComponent<Props, State>;
75
72
  element.update(attrs, ...children);
76
73
  return element;
77
74
  };
@@ -1,5 +1,5 @@
1
- import { article, button, div, main, small } from "../html.js"
2
- import { Form, Input } from "./form.js"
1
+ import { article, button, div, main, small } from "../html.ts";
2
+ import { Form, Input } from "./form.ts";
3
3
 
4
4
  export const App = () =>
5
5
  main(
@@ -10,7 +10,7 @@ export const App = () =>
10
10
  events: {
11
11
  submit(event) {
12
12
  console.log(
13
- "Should see fields for firstname, lastname, email, etc"
13
+ "Should see fields for firstname, lastname, email, etc",
14
14
  );
15
15
  console.log(event);
16
16
  },
@@ -19,7 +19,7 @@ export const App = () =>
19
19
  div(
20
20
  { class: "grid" },
21
21
  Input({ id: "firstname", placeholder: "First name" }),
22
- Input({ id: "lastname", placeholder: "Last name" })
22
+ Input({ id: "lastname", placeholder: "Last name" }),
23
23
  ),
24
24
  Input(
25
25
  {
@@ -28,7 +28,7 @@ export const App = () =>
28
28
  placeholder: "Email address",
29
29
  required: true,
30
30
  },
31
- small("We will never share your email with anyone.")
31
+ small("We will never share your email with anyone."),
32
32
  ),
33
33
  button({ type: "submit" }, "Submit"),
34
34
  div(
@@ -40,11 +40,11 @@ export const App = () =>
40
40
  "aria-invalid": "true",
41
41
  }),
42
42
  Input({ id: "disabled", placeholder: "Disabled", disabled: true }),
43
- Input({ id: "readonly", value: "Readonly", readOnly: true })
44
- )
43
+ Input({ id: "readonly", value: "Readonly", readOnly: true }),
44
+ ),
45
45
  // Dropdown({id: 'fruit', label: "Fruit", placeholder: "Select a fruit...", options: ['Banana', 'Watermelon', 'Apple', 'Orange', 'Mango']}),
46
46
  // Radios({legend: 'Size', options: {small: 'Small', medium: 'Medium', large: 'Large', extralarge: "Extra Large"}, checked: 'small'}),
47
47
  // Checkboxes({options: {terms: 'I agree to the Terms and Conditions', termsSharing: {label: 'I agree to share my information with partners', disabled: true, checked: true}}),
48
- )
49
- )
48
+ ),
49
+ ),
50
50
  );
@@ -1,12 +1,12 @@
1
- import { Attrs, DenormChildren } from "../dom.js"
2
- import { form, input, label, option, select } from "../html.js"
3
- import {
1
+ import type { Attrs, DenormChildren } from "../dom.ts";
2
+ import { form, input, label, option, select } from "../html.ts";
3
+ import type {
4
4
  FormAttributes,
5
5
  InputAttributes,
6
6
  LabelAttributes,
7
7
  OptionAttributes,
8
8
  SelectAttributes,
9
- } from "../types/html"
9
+ } from "../types/html";
10
10
 
11
11
  export const Form = (attrs: FormAttributes, ...children: DenormChildren[]) => {
12
12
  if (attrs.events?.submit) {
@@ -19,18 +19,24 @@ export const Form = (attrs: FormAttributes, ...children: DenormChildren[]) => {
19
19
  return form(attrs as Attrs<HTMLFormElement>, ...children);
20
20
  };
21
21
  export const Input = (attrs: InputAttributes, ...children: DenormChildren[]) =>
22
- label(input(attrs as Attrs<HTMLInputElement>), ...children);
22
+ label(
23
+ input(
24
+ // @ts-expect-error
25
+ attrs as Attrs<HTMLInputElement>,
26
+ ),
27
+ ...children,
28
+ );
23
29
 
24
30
  export const Select = (
25
- attrs: { options: string[] | {}; selected?: string } & SelectAttributes &
26
- LabelAttributes
31
+ attrs: { options: string[] | object; selected?: string } & SelectAttributes &
32
+ LabelAttributes,
27
33
  ) =>
28
34
  label(
29
35
  { style: attrs.style ?? {} },
30
36
  select(
31
37
  { events: attrs.events ?? {} },
32
- ...prepareOptions(attrs.options, attrs.selected).map(Option)
33
- )
38
+ ...prepareOptions(attrs.options as string[], attrs.selected).map(Option),
39
+ ),
34
40
  );
35
41
  export const Button = () => {};
36
42
 
@@ -41,21 +47,24 @@ const prepareOptions = (
41
47
  string,
42
48
  string | { label: string; disabled?: boolean; selected?: boolean }
43
49
  >,
44
- selected?: string
50
+ selected?: string,
45
51
  ): Parameters<typeof Option>[0][] =>
46
52
  Array.isArray(attrs)
47
53
  ? attrs.map((value) => ({
48
54
  value,
49
55
  label: value,
50
- selected: selected == value,
56
+ selected: selected === value,
51
57
  }))
52
58
  : Object.entries(attrs).map(([value, label]) =>
53
59
  typeof label === "string"
54
60
  ? { value, label, selected: selected === value }
55
- : { value, ...label }
61
+ : { value, ...label },
56
62
  );
57
63
  export const Option = (attrs: OptionAttributes) =>
58
- option(attrs as Attrs<HTMLOptionElement>);
64
+ option(
65
+ // @ts-expect-error
66
+ attrs as Attrs<HTMLOptionElement>,
67
+ );
59
68
 
60
69
  export const Dropdown = (
61
70
  attrs: SelectAttributes | { selected?: string },
@@ -63,14 +72,14 @@ export const Dropdown = (
63
72
  ) =>
64
73
  Select({
65
74
  ...attrs,
66
- options: typeof options[0] == "string" ? options : options[0],
75
+ options: typeof options[0] === "string" ? options : options[0],
67
76
  });
68
77
  export const Radios = () => {};
69
78
  export const Checks = () => {};
70
79
  export const Switches = () => {};
71
80
 
72
- export const Radio = (attrs: Omit<InputAttributes, "type">) =>
81
+ export const Radio = (_attrs: Omit<InputAttributes, "type">) =>
73
82
  Input({ type: "radio" });
74
- export const Checkbox = (attrs: Omit<InputAttributes, "type">) =>
83
+ export const Checkbox = (_attrs: Omit<InputAttributes, "type">) =>
75
84
  Input({ type: "checkbox" });
76
85
  export const Switch = () => Checkbox({ role: "switch" });
@@ -1,5 +1,5 @@
1
1
  <!DOCTYPE html>
2
- <html>
2
+ <html lang="en-us">
3
3
  <head>
4
4
  <title>Jiffies Form</title>
5
5
  <base href="/dom/form/" />
@@ -7,7 +7,8 @@
7
7
  </head>
8
8
  <body>
9
9
  <script type="module">
10
- import {App} from './form.app.js';
10
+ import {App} from './form.app.ts';
11
+
11
12
  document.body.appendChild(App());
12
13
  </script>
13
14
  </body>
@@ -1,14 +1,12 @@
1
- import { describe, it } from "../scope/describe.js"
2
- import { expect } from "../scope/expect.js"
3
- import { table, tbody, td, th, thead, tr, button } from "./html.js"
1
+ import { describe, it } from "../scope/describe.ts";
2
+ import { expect } from "../scope/expect.ts";
3
+ import { button, table, tbody, td, th, thead, tr } from "./html.ts";
4
4
 
5
5
  describe("html", () => {
6
6
  it("creates HTML Elements", () => {
7
- let tableBody;
8
- const myTable = table(
9
- thead(tr(th("Col A"), th("Col B"))),
10
- (tableBody = tbody())
11
- );
7
+ const tableBody = tbody();
8
+ const tableHead = thead(tr(th("Col A"), th("Col B")));
9
+ const myTable = table(tableHead, tableBody);
12
10
  for (let x = 1; x <= 3; x++) {
13
11
  tableBody.appendChild(tr(td(`${x}`), td(`${x * 2}`)));
14
12
  }
@@ -59,13 +57,17 @@ describe("html", () => {
59
57
  const btn = button({
60
58
  class: "test-class",
61
59
  style: { flexDirection: "column" },
62
- events: { click: () => (clicked = true) },
60
+ events: {
61
+ click: () => {
62
+ clicked = true;
63
+ },
64
+ },
63
65
  });
64
66
  btn.dispatchEvent(new Event("click"));
65
67
 
66
68
  expect(btn.classList.contains("test-class")).toBe(true);
67
69
  expect((btn as unknown as HTMLButtonElement).style.flexDirection).toBe(
68
- "column"
70
+ "column",
69
71
  );
70
72
  expect(clicked).toBe(true);
71
73
  });
package/src/dom/html.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { DenormAttrs, DenormChildren, up } from "./dom.js"
1
+ import { type DenormAttrs, type DenormChildren, up } from "./dom.ts";
2
2
 
3
3
  const makeHTMLElement =
4
4
  <K extends keyof HTMLElementTagNameMap>(name: K) =>
@@ -9,7 +9,7 @@ const makeHTMLElement =
9
9
  up(
10
10
  document.createElement(name),
11
11
  attrs,
12
- ...children
12
+ ...children,
13
13
  ) as HTMLElementTagNameMap[K];
14
14
 
15
15
  export const a = makeHTMLElement("a");
@@ -85,7 +85,6 @@ export const optgroup = makeHTMLElement("optgroup");
85
85
  export const option = makeHTMLElement("option");
86
86
  export const output = makeHTMLElement("output");
87
87
  export const p = makeHTMLElement("p");
88
- export const param = makeHTMLElement("param");
89
88
  export const picture = makeHTMLElement("picture");
90
89
  export const pre = makeHTMLElement("pre");
91
90
  export const progress = makeHTMLElement("progress");
@@ -1,9 +1,9 @@
1
- import { O } from "./observable.js"
2
- import { Subject, map } from "../observable/observable.js"
3
- import { describe, it } from "../scope/describe.js"
4
- import { expect } from "../scope/expect.js"
5
- import { div, span } from "./html.js"
6
- import { DOMUpdates } from "./dom.js"
1
+ import { map, Subject } from "../observable/observable.ts";
2
+ import { describe, it } from "../scope/describe.ts";
3
+ import { expect } from "../scope/expect.ts";
4
+ import type { DOMUpdates } from "./dom.ts";
5
+ import { div, span } from "./html.ts";
6
+ import { O } from "./observable.ts";
7
7
 
8
8
  describe("DOM Observable", () => {
9
9
  it("updates a dom node with observable results", async () => {
@@ -1,8 +1,8 @@
1
- import { Observable } from "../observable/observable.js"
1
+ import type { Observable } from "../observable/observable.ts";
2
2
 
3
3
  export function O<E extends Element>(
4
4
  element: E,
5
- observable: Observable<Parameters<E["update"]>>
5
+ observable: Observable<Parameters<E["update"]>>,
6
6
  ): E {
7
7
  observable.subscribe((t) => {
8
8
  element.update(...t);
@@ -1,4 +1,4 @@
1
- import { Option } from "../result.js"
1
+ import type { Option } from "../result.ts";
2
2
 
3
3
  let registry: Record<string, unknown> = {};
4
4
 
@@ -1,5 +1,5 @@
1
- import { a } from "../html.js"
2
- import { Router } from "./router.js"
1
+ import { a } from "../html.ts";
2
+ import { Router } from "./router.ts";
3
3
 
4
4
  export interface Link {
5
5
  href: string;
@@ -10,5 +10,5 @@ export interface Link {
10
10
  export const link = ({ href, link }: Link) =>
11
11
  a(
12
12
  { href: Router.href(href), events: { click: Router.navigate(href) } },
13
- link
13
+ link,
14
14
  );
@@ -1,5 +1,5 @@
1
- import { DOMElement } from "../dom.js";
2
- import { Link } from "./link.js";
1
+ import type { DOMElement } from "../dom.ts";
2
+ import type { Link } from "./link.ts";
3
3
 
4
4
  export interface Router {
5
5
  current?: string;
@@ -7,9 +7,9 @@ export interface Router {
7
7
  (target: DOMElement): DOMElement;
8
8
  }
9
9
 
10
- let baseURI = `${document.baseURI}`;
10
+ const baseURI = `${document.baseURI}`;
11
11
  const normalizeHref = () => {
12
- return location.href + "/" === baseURI ? baseURI : location.href;
12
+ return `${location.href}/` === baseURI ? baseURI : location.href;
13
13
  };
14
14
 
15
15
  let globalRouter: Router;
@@ -40,7 +40,7 @@ export const Router = {
40
40
  (
41
41
  links.find(({ href }) => link.endsWith(href))?.target ??
42
42
  (() => undefined)
43
- )()
43
+ )(),
44
44
  );
45
45
  return true;
46
46
  };
package/src/dom/svg.ts CHANGED
@@ -1,4 +1,9 @@
1
- import { DenormAttrs, DenormChildren, up } from "./dom.js"
1
+ import {
2
+ type DenormAttrs,
3
+ type DenormChildren,
4
+ SVG_NAMESPACE_URI,
5
+ up,
6
+ } from "./dom.js";
2
7
 
3
8
  const makeSVGElement =
4
9
  <K extends keyof SVGElementTagNameMap>(name: K) =>
@@ -6,11 +11,7 @@ const makeSVGElement =
6
11
  attrs?: DenormAttrs<SVGElementTagNameMap[K]>,
7
12
  ...children: DenormChildren[]
8
13
  ) =>
9
- up(
10
- document.createElementNS("http://www.w3.org/2000/svg", name),
11
- attrs,
12
- ...children
13
- );
14
+ up(document.createElementNS(SVG_NAMESPACE_URI, name), attrs, ...children);
14
15
 
15
16
  export const a = makeSVGElement("a");
16
17
  export const animate = makeSVGElement("animate");
package/src/dom/test.ts CHANGED
@@ -1,4 +1,7 @@
1
+ import { IsBrowser } from "../is_browser.js";
2
+
1
3
  export async function loadTests() {
4
+ if (!IsBrowser) return;
2
5
  if (process?.env.CI?.toLowerCase() === "true") return;
3
6
  await Promise.all([
4
7
  import("./html.test.js"),