u2ui 1.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 (440) hide show
  1. package/.htaccess +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +36 -0
  4. package/attr/behavior/README.md +25 -0
  5. package/attr/behavior/behavior.js +261 -0
  6. package/attr/behavior/manifest.json +43 -0
  7. package/attr/behavior/tests/minimal.html +19 -0
  8. package/attr/behavior/tests/test.html +98 -0
  9. package/attr/confirm/README.md +36 -0
  10. package/attr/confirm/confirm.js +90 -0
  11. package/attr/confirm/manifest.json +43 -0
  12. package/attr/confirm/tests/minimal.html +23 -0
  13. package/attr/confirm/tests/test.html +79 -0
  14. package/attr/draghandle/README.md +41 -0
  15. package/attr/draghandle/draghandle.js +42 -0
  16. package/attr/draghandle/tests/minimal.html +44 -0
  17. package/attr/focusgroup/README.md +49 -0
  18. package/attr/focusgroup/focusgroup.js +100 -0
  19. package/attr/focusgroup/manifest.json +38 -0
  20. package/attr/focusgroup/tests/minimal.html +27 -0
  21. package/attr/focusgroup/tests/test.html +154 -0
  22. package/attr/href/README.md +38 -0
  23. package/attr/href/href.js +42 -0
  24. package/attr/href/manifest.json +43 -0
  25. package/attr/href/tests/minimal.html +17 -0
  26. package/attr/href/tests/test.html +70 -0
  27. package/attr/intersect/README.md +42 -0
  28. package/attr/intersect/intersect.js +99 -0
  29. package/attr/intersect/manifest.json +57 -0
  30. package/attr/intersect/tests/minimal.html +30 -0
  31. package/attr/intersect/tests/test.html +64 -0
  32. package/attr/navigable/README.md +31 -0
  33. package/attr/navigable/TargetObserver.js +91 -0
  34. package/attr/navigable/U2TargetObserver.js +75 -0
  35. package/attr/navigable/manifest.json +42 -0
  36. package/attr/navigable/navigable.js +87 -0
  37. package/attr/navigable/tests/U1TargetObserver.html +56 -0
  38. package/attr/navigable/tests/minimal.html +17 -0
  39. package/attr/navigable/tests/targetObserver.html +106 -0
  40. package/attr/navigable/tests/test.html +84 -0
  41. package/attr/parallax/README.md +48 -0
  42. package/attr/parallax/parallax.js +119 -0
  43. package/attr/parallax/tests/minimal.html +25 -0
  44. package/attr/parallax/tests/performance.html +102 -0
  45. package/attr/parallax/tests/test.html +108 -0
  46. package/attr/skin/README.md +59 -0
  47. package/attr/skin/skin.css +51 -0
  48. package/attr/skin/tests/minimal.html +34 -0
  49. package/attr/skin/tests/test.html +96 -0
  50. package/class/badge/README.md +25 -0
  51. package/class/badge/badge.css +35 -0
  52. package/class/badge/tests/minimal.html +17 -0
  53. package/class/badge/tests/test.html +112 -0
  54. package/class/card1/README.md +45 -0
  55. package/class/card1/card1.css +30 -0
  56. package/class/card1/tests/minimal.html +33 -0
  57. package/class/card1/tests/test.html +78 -0
  58. package/class/flex/README.md +62 -0
  59. package/class/flex/flex.css +25 -0
  60. package/class/flex/tests/minimal.html +31 -0
  61. package/class/flex/tests/test.html +58 -0
  62. package/class/grid/README.md +52 -0
  63. package/class/grid/grid.css +40 -0
  64. package/class/grid/tests/minimal.html +34 -0
  65. package/class/grid/tests/test.html +78 -0
  66. package/class/input/README.md +49 -0
  67. package/class/input/input.css +33 -0
  68. package/class/input/tests/minimal.html +39 -0
  69. package/class/input/tests/test.html +29 -0
  70. package/class/reset/README.md +47 -0
  71. package/class/reset/reset.css +8 -0
  72. package/class/reset/tests/minimal.html +23 -0
  73. package/class/table/README.md +57 -0
  74. package/class/table/table.css +126 -0
  75. package/class/table/tests/minimal.html +40 -0
  76. package/class/table/tests/test.html +226 -0
  77. package/class/unstyle/README.md +32 -0
  78. package/class/unstyle/tests/minimal.html +22 -0
  79. package/class/unstyle/tests/test.html +32 -0
  80. package/class/unstyle/unstyle.css +12 -0
  81. package/class/width/README.md +48 -0
  82. package/class/width/tests/minimal.html +27 -0
  83. package/class/width/tests/test.html +101 -0
  84. package/class/width/width.css +22 -0
  85. package/css/base/README.md +25 -0
  86. package/css/base/base.css +127 -0
  87. package/css/base/beta.css +50 -0
  88. package/css/base/full.css +5 -0
  89. package/css/base/nomotion.css +9 -0
  90. package/css/base/print.css +36 -0
  91. package/css/base/tests/nomotion.html +89 -0
  92. package/css/base/tests/test.html +539 -0
  93. package/css/classes/README.md +17 -0
  94. package/css/classes/classes.css +78 -0
  95. package/css/classes/tests/test.html +63 -0
  96. package/css/classless/README.md +26 -0
  97. package/css/classless/aria.css +64 -0
  98. package/css/classless/classless.css +124 -0
  99. package/css/classless/full.css +11 -0
  100. package/css/classless/more.css +340 -0
  101. package/css/classless/simple.css +103 -0
  102. package/css/classless/snippeds/a/icons.css +12 -0
  103. package/css/classless/snippeds/experiments/conventions.css +41 -0
  104. package/css/classless/snippeds/hr/gradient.css +3 -0
  105. package/css/classless/snippeds/hr/section_sign.css +16 -0
  106. package/css/classless/snippeds/hr/tests.html +50 -0
  107. package/css/classless/tests/aria.html +101 -0
  108. package/css/classless/tests/foreign/classless-almond.css.html +445 -0
  109. package/css/classless/tests/foreign/classless-classless.css.html +831 -0
  110. package/css/classless/tests/foreign/classless-mvp.html +415 -0
  111. package/css/classless/tests/foreign/classless.sakura.html +224 -0
  112. package/css/classless/tests/foreign/stylestage.dev.html +304 -0
  113. package/css/classless/tests/foreign/test-homogenizer.html +433 -0
  114. package/css/classless/tests/foreign/test-html5-elements-tester.html +956 -0
  115. package/css/classless/tests/foreign/test-opinionated_css.html +148 -0
  116. package/css/classless/tests/list-bullet.html +110 -0
  117. package/css/classless/tests/more.html +246 -0
  118. package/css/classless/tests/oklch.experiments.html +280 -0
  119. package/css/classless/tests/test.html +106 -0
  120. package/css/classless/tests/variables.html +109 -0
  121. package/css/classless/variables.css +99 -0
  122. package/css/norm/README.md +37 -0
  123. package/css/norm/beta.css +40 -0
  124. package/css/norm/norm.css +98 -0
  125. package/css/norm/oldies.css +60 -0
  126. package/css/norm/tests/test.html +434 -0
  127. package/css/norm/tests/test.js +103 -0
  128. package/el/accordion/README.md +59 -0
  129. package/el/accordion/accordion.css +7 -0
  130. package/el/accordion/accordion.js +258 -0
  131. package/el/accordion/manifest.json +57 -0
  132. package/el/accordion/tests/minimal.html +44 -0
  133. package/el/accordion/tests/test.html +168 -0
  134. package/el/alert/README.md +67 -0
  135. package/el/alert/alert copy.js +224 -0
  136. package/el/alert/alert.css +73 -0
  137. package/el/alert/alert.js +187 -0
  138. package/el/alert/manifest.json +77 -0
  139. package/el/alert/tests/minimal.html +36 -0
  140. package/el/alert/tests/test.html +105 -0
  141. package/el/buttongroup/README.md +36 -0
  142. package/el/buttongroup/buttongroup.css +30 -0
  143. package/el/buttongroup/buttongroup.js +56 -0
  144. package/el/buttongroup/tests/minimal.html +31 -0
  145. package/el/buttongroup/tests/test.html +83 -0
  146. package/el/bytes/README.md +41 -0
  147. package/el/bytes/bytes.css +6 -0
  148. package/el/bytes/bytes.js +97 -0
  149. package/el/bytes/manifest.json +95 -0
  150. package/el/bytes/tests/minimal.html +19 -0
  151. package/el/bytes/tests/test.html +117 -0
  152. package/el/carousel/README.md +52 -0
  153. package/el/carousel/carousel.css +46 -0
  154. package/el/carousel/carousel.js +371 -0
  155. package/el/carousel/manifest.json +58 -0
  156. package/el/carousel/tests/experiments.html +77 -0
  157. package/el/carousel/tests/minimal.html +31 -0
  158. package/el/carousel/tests/nested.html +54 -0
  159. package/el/carousel/tests/test.html +136 -0
  160. package/el/carousel-nav/README.md +40 -0
  161. package/el/carousel-nav/carousel-nav.js +74 -0
  162. package/el/carousel-nav/tests/minimal.html +32 -0
  163. package/el/carousel-nav/tests/test.html +59 -0
  164. package/el/code/README.md +68 -0
  165. package/el/code/code.css +46 -0
  166. package/el/code/code.js +289 -0
  167. package/el/code/manifest.json +66 -0
  168. package/el/code/tests/minimal.html +35 -0
  169. package/el/code/tests/test.html +162 -0
  170. package/el/copy/README.md +35 -0
  171. package/el/copy/copy.css +3 -0
  172. package/el/copy/copy.js +118 -0
  173. package/el/copy/manifest.json +49 -0
  174. package/el/copy/tests/minimal.html +21 -0
  175. package/el/copy/tests/test.html +75 -0
  176. package/el/counter/README.md +47 -0
  177. package/el/counter/counter.css +8 -0
  178. package/el/counter/counter.js +95 -0
  179. package/el/counter/manifest.json +59 -0
  180. package/el/counter/tests/minimal.html +27 -0
  181. package/el/counter/tests/test.html +106 -0
  182. package/el/ico/README.md +162 -0
  183. package/el/ico/font/Font Awesome.css +22 -0
  184. package/el/ico/font/LigatureSymbols.css +7 -0
  185. package/el/ico/font/Material Icons.css +6 -0
  186. package/el/ico/font/RemixFilled.css +8 -0
  187. package/el/ico/font/RemixOutlined.css +8 -0
  188. package/el/ico/font/old/anicons.css +31 -0
  189. package/el/ico/font/old/devicons.css +210 -0
  190. package/el/ico/font/old/material.all.css +36 -0
  191. package/el/ico/font/old/remix.css +15 -0
  192. package/el/ico/font/old/utf8.css +54 -0
  193. package/el/ico/ico.css +111 -0
  194. package/el/ico/ico.js +189 -0
  195. package/el/ico/manifest.json +86 -0
  196. package/el/ico/tests/combinations.html +86 -0
  197. package/el/ico/tests/emojis.html +213 -0
  198. package/el/ico/tests/fonts.html +110 -0
  199. package/el/ico/tests/ico-directory.html +254 -0
  200. package/el/ico/tests/minimal.html +46 -0
  201. package/el/ico/tests/test.html +210 -0
  202. package/el/ico/tests/util-multi.svg +6 -0
  203. package/el/ico/tests/util.css +2 -0
  204. package/el/ico/tests/util.js +110 -0
  205. package/el/input/README.md +39 -0
  206. package/el/input/input.css +35 -0
  207. package/el/input/input.js +331 -0
  208. package/el/input/tests/formParticipation.html +113 -0
  209. package/el/input/tests/minimal.html +33 -0
  210. package/el/input/tests/test.html +258 -0
  211. package/el/masonry/README.md +51 -0
  212. package/el/masonry/manifest.json +60 -0
  213. package/el/masonry/masonry.css +27 -0
  214. package/el/masonry/masonry.js +92 -0
  215. package/el/masonry/tests/minimal.html +39 -0
  216. package/el/masonry/tests/test.html +42 -0
  217. package/el/number/README.md +47 -0
  218. package/el/number/manifest.json +121 -0
  219. package/el/number/number.css +6 -0
  220. package/el/number/number.js +67 -0
  221. package/el/number/tests/minimal.html +25 -0
  222. package/el/number/tests/test.html +138 -0
  223. package/el/out/README.md +32 -0
  224. package/el/out/manifest.json +38 -0
  225. package/el/out/out.css +2 -0
  226. package/el/out/out.js +59 -0
  227. package/el/out/tests/minimal.html +25 -0
  228. package/el/out/tests/test.html +37 -0
  229. package/el/parallax-bg/README.md +36 -0
  230. package/el/parallax-bg/parallax-bg.css +13 -0
  231. package/el/parallax-bg/parallax-bg.js +186 -0
  232. package/el/parallax-bg/tests/bg.jpg +0 -0
  233. package/el/parallax-bg/tests/bg1.jpg +0 -0
  234. package/el/parallax-bg/tests/bg2.jpg +0 -0
  235. package/el/parallax-bg/tests/demo.html +88 -0
  236. package/el/parallax-bg/tests/minimal.html +30 -0
  237. package/el/parallax-bg/tests/test.html +64 -0
  238. package/el/parallax-bg/tests/visible.html +90 -0
  239. package/el/qrcode/README.md +38 -0
  240. package/el/qrcode/manifest.json +43 -0
  241. package/el/qrcode/package.json +22 -0
  242. package/el/qrcode/qrcode.css +13 -0
  243. package/el/qrcode/qrcode.js +46 -0
  244. package/el/qrcode/tests/minimal.html +26 -0
  245. package/el/qrcode/tests/test.html +31 -0
  246. package/el/rating/README.md +45 -0
  247. package/el/rating/manifest.json +65 -0
  248. package/el/rating/rating.css +11 -0
  249. package/el/rating/rating.js +139 -0
  250. package/el/rating/tests/minimal.html +26 -0
  251. package/el/rating/tests/tests.html +77 -0
  252. package/el/rte/README.md +37 -0
  253. package/el/rte/rte.css +9 -0
  254. package/el/rte/rte.js +56 -0
  255. package/el/rte/tests/minimal.html +25 -0
  256. package/el/rte/tests/test.html +37 -0
  257. package/el/skeleton/README.md +30 -0
  258. package/el/skeleton/manifest.json +51 -0
  259. package/el/skeleton/skeleton.css +61 -0
  260. package/el/skeleton/skeleton.js +72 -0
  261. package/el/skeleton/tests/minimal.html +22 -0
  262. package/el/skeleton/tests/test.html +22 -0
  263. package/el/splitbutton/README.md +39 -0
  264. package/el/splitbutton/splitbutton.css +48 -0
  265. package/el/splitbutton/splitbutton.js +26 -0
  266. package/el/splitbutton/tests/minimal.html +30 -0
  267. package/el/splitbutton/tests/test.html +68 -0
  268. package/el/splitpanel/README.md +39 -0
  269. package/el/splitpanel/manifest.json +49 -0
  270. package/el/splitpanel/splitpanel.css +17 -0
  271. package/el/splitpanel/splitpanel.js +116 -0
  272. package/el/splitpanel/tests/minimal.html +31 -0
  273. package/el/splitpanel/tests/tests.html +121 -0
  274. package/el/table/README.md +68 -0
  275. package/el/table/manifest.json +43 -0
  276. package/el/table/table.css +59 -0
  277. package/el/table/table.js +194 -0
  278. package/el/table/tests/minimal.html +38 -0
  279. package/el/table/tests/test.html +108 -0
  280. package/el/tabs/README.md +50 -0
  281. package/el/tabs/manifest.json +59 -0
  282. package/el/tabs/tabs.css +23 -0
  283. package/el/tabs/tabs.js +210 -0
  284. package/el/tabs/tests/minimal.html +35 -0
  285. package/el/tabs/tests/test.html +180 -0
  286. package/el/textfit/README.md +34 -0
  287. package/el/textfit/manifest.json +45 -0
  288. package/el/textfit/tests/minimal.html +25 -0
  289. package/el/textfit/tests/test.html +26 -0
  290. package/el/textfit/textfit.css +6 -0
  291. package/el/textfit/textfit.js +80 -0
  292. package/el/time/README.md +72 -0
  293. package/el/time/manifest.json +118 -0
  294. package/el/time/tests/minimal.html +19 -0
  295. package/el/time/tests/test.html +160 -0
  296. package/el/time/time copy.js +141 -0
  297. package/el/time/time.js +168 -0
  298. package/el/time/time.old.uhtml.js +129 -0
  299. package/el/tooltip/README.md +48 -0
  300. package/el/tooltip/manifest.json +69 -0
  301. package/el/tooltip/tests/minimal.html +25 -0
  302. package/el/tooltip/tests/test.html +178 -0
  303. package/el/tooltip/tooltip.css +97 -0
  304. package/el/tooltip/tooltip.js +82 -0
  305. package/el/tree1/README.md +111 -0
  306. package/el/tree1/manifest.json +78 -0
  307. package/el/tree1/tests/animated.html +134 -0
  308. package/el/tree1/tests/custom.html +51 -0
  309. package/el/tree1/tests/minimal.html +44 -0
  310. package/el/tree1/tests/test.html +260 -0
  311. package/el/tree1/tree1.css +26 -0
  312. package/el/tree1/tree1.js +265 -0
  313. package/el/typewriter/README.md +62 -0
  314. package/el/typewriter/manifest.json +66 -0
  315. package/el/typewriter/tests/minimal.html +25 -0
  316. package/el/typewriter/tests/test.html +78 -0
  317. package/el/typewriter/typewriter.css +6 -0
  318. package/el/typewriter/typewriter.js +166 -0
  319. package/el/typewriter/typewriter.mp3 +0 -0
  320. package/js/Placer/Placer.js +156 -0
  321. package/js/Placer/README.md +62 -0
  322. package/js/Placer/tests/minimal.html +34 -0
  323. package/js/Placer/tests/test.html +49 -0
  324. package/js/PointerObserver/PointerObserver.js +130 -0
  325. package/js/PointerObserver/README.md +34 -0
  326. package/js/PointerObserver/tests/minimal.html +29 -0
  327. package/js/PointerObserver/tests/test.html +35 -0
  328. package/js/SelectorObserver/README.md +47 -0
  329. package/js/SelectorObserver/SelectorObserver.js +201 -0
  330. package/js/SelectorObserver/tests/minimal.html +21 -0
  331. package/js/SelectorObserver/tests/test.html +57 -0
  332. package/js/SelectorObserver/tests/tests.html +161 -0
  333. package/js/contextmenu/README.md +93 -0
  334. package/js/contextmenu/contextmenu.js +336 -0
  335. package/js/contextmenu/tests/minimal.html +44 -0
  336. package/js/contextmenu/tests/test.html +131 -0
  337. package/js/dialog/README.md +49 -0
  338. package/js/dialog/dialog.js +261 -0
  339. package/js/dialog/notification.mp3 +0 -0
  340. package/js/dialog/tests/minimal.html +29 -0
  341. package/js/dialog/tests/notification.mp3 +0 -0
  342. package/js/dialog/tests/test.html +135 -0
  343. package/js/rte/README.md +44 -0
  344. package/js/rte/old/NodeCleaner.js +315 -0
  345. package/js/rte/old/Rte/Rte.mjs +316 -0
  346. package/js/rte/old/Rte/Rte.ui.items.mjs +543 -0
  347. package/js/rte/old/Rte/Rte.ui.mjs +154 -0
  348. package/js/rte/old/Rte/crossbrowser.mjs +323 -0
  349. package/js/rte/old/Rte/font/tinymce.svg +98 -0
  350. package/js/rte/old/Rte/font/tinymce.woff +0 -0
  351. package/js/rte/old/Rte/helpers.mjs +159 -0
  352. package/js/rte/old/Rte/htmlparser.mjs +178 -0
  353. package/js/rte/old/Rte/index.mjs +5 -0
  354. package/js/rte/old/Rte/main.css +189 -0
  355. package/js/rte/old/old.rte.js +132 -0
  356. package/js/rte/old/range-selection.old.js +394 -0
  357. package/js/rte/rte.js +7 -0
  358. package/js/rte/src/behavior.js +228 -0
  359. package/js/rte/src/events.js +73 -0
  360. package/js/rte/src/fixes.js +251 -0
  361. package/js/rte/src/range.js +472 -0
  362. package/js/rte/src/rte.js +72 -0
  363. package/js/rte/src/ui/items/ai.js +167 -0
  364. package/js/rte/src/ui/items/code.js +93 -0
  365. package/js/rte/src/ui/items/undo.js +183 -0
  366. package/js/rte/src/ui.items.js +571 -0
  367. package/js/rte/src/ui.js +269 -0
  368. package/js/rte/src/util/htmlparser.js +178 -0
  369. package/js/rte/src/util/indentHtml.js +48 -0
  370. package/js/rte/tests/ai.html +81 -0
  371. package/js/rte/tests/behavior.html +88 -0
  372. package/js/rte/tests/events.html +69 -0
  373. package/js/rte/tests/fixes.html +95 -0
  374. package/js/rte/tests/minimal.html +34 -0
  375. package/js/rte/tests/notes.md +6 -0
  376. package/js/rte/tests/range.html +167 -0
  377. package/js/rte/tests/selection-explorer.html +222 -0
  378. package/js/rte/tests/test.html +92 -0
  379. package/js/shortcut/README.md +33 -0
  380. package/js/shortcut/shortcut.js +89 -0
  381. package/js/shortcut/tests/minimal.html +23 -0
  382. package/js/shortcut/tests/test.html +68 -0
  383. package/package.json +12 -0
  384. package/u2/README.md +4 -0
  385. package/u2/auto.js +161 -0
  386. package/u2/auto.ui.js +85 -0
  387. package/u2/experiments/Waiter/test.html +132 -0
  388. package/u2/experiments/getElementByIdPromise/test.html +76 -0
  389. package/u2/experiments/patchInputValue.html +124 -0
  390. package/u2/experiments/radiobutton/test.html +75 -0
  391. package/u2/experiments/tests/test.html +223 -0
  392. package/u2/experiments/u1-responsive/responsive.js +62 -0
  393. package/u2/experiments/u1-responsive/test.html +65 -0
  394. package/u2/experiments/u2Element.js +139 -0
  395. package/u2/experiments/u2Element.test.html +47 -0
  396. package/u2/old-stuff/IterableWeakMap/mod.js +70 -0
  397. package/u2/old-stuff/css/onStyleSheet/mod.js +114 -0
  398. package/u2/old-stuff/css/onStyleSheet/monkeypatches.js +28 -0
  399. package/u2/old-stuff/css/onStyleSheet/test/include.css +19 -0
  400. package/u2/old-stuff/css/onStyleSheet/test/style-has-include.css +6 -0
  401. package/u2/old-stuff/css/onStyleSheet/test/style-no-include.css +3 -0
  402. package/u2/old-stuff/css/onStyleSheet/test/test.html +48 -0
  403. package/u2/old-stuff/css/parser/mod.js +182 -0
  404. package/u2/old-stuff/css/parser/parser_old/mod.js +128 -0
  405. package/u2/old-stuff/css/parser/parser_old/test.html +43 -0
  406. package/u2/old-stuff/css/parser/parser_old/util.js +22 -0
  407. package/u2/old-stuff/css/parser/style.html +52 -0
  408. package/u2/old-stuff/css/parser/test.html +38 -0
  409. package/u2/old-stuff/el/ai-texter/README.md +23 -0
  410. package/u2/old-stuff/el/ai-texter/ai-texter.css +12 -0
  411. package/u2/old-stuff/el/ai-texter/ai-texter.js +153 -0
  412. package/u2/old-stuff/el/ai-texter/tests/minimal.html +47 -0
  413. package/u2/old-stuff/el/ai-texter/tests/test.html +71 -0
  414. package/u2/old-stuff/init.js +38 -0
  415. package/u2/old-stuff/markHashLinks.js +51 -0
  416. package/u2/old-stuff/onElement/mod.js +73 -0
  417. package/u2/old-stuff/test-helpers/mod.js +36 -0
  418. package/u2/old-stuff/test-helpers/test.html +4 -0
  419. package/u2/old-stuff/tests/init.js.html +51 -0
  420. package/u2/old-stuff/viewport.js +64 -0
  421. package/u2/projects.json +468 -0
  422. package/u2/tests/boilerplate.html +46 -0
  423. package/u2/tests/kacheln.html +245 -0
  424. package/u2/tests/showcase.html +270 -0
  425. package/u2/tests/showcase2.html +157 -0
  426. package/u2/tests/test-init.js +35 -0
  427. package/u2/tests/test.html +355 -0
  428. package/u2/tools/baseElement.js +95 -0
  429. package/u2/tools/baseElement.test.html +119 -0
  430. package/u2/tools/ce-inspector.js +308 -0
  431. package/u2/tools/ce-inspector.test.html +66 -0
  432. package/u2/tools/ce-manfest-from-element.js +207 -0
  433. package/u2/tools/dev-iframe.js +213 -0
  434. package/u2/tools/dev-iframe.test.html +75 -0
  435. package/u2/tools/eventsExplorer.js +101 -0
  436. package/u2/tools/logo/u1.svg +9 -0
  437. package/u2/tools/logo/u1ui.svg +6 -0
  438. package/u2/tools/update.repos.json.js +234 -0
  439. package/u2/u2.js +14 -0
  440. package/u2/utils.js +59 -0
@@ -0,0 +1,118 @@
1
+ // function getElementByIdPromise(id) {
2
+ // return new Promise((resolve) => {
3
+ // const check = () => {
4
+ // const element = document.getElementById(id);
5
+ // element ? resolve(element) : requestAnimationFrame(check);
6
+ // };
7
+ // check();
8
+ // });
9
+ // }
10
+
11
+ function getElementByIdPromise(id) {
12
+ let { promise, resolve } = Promise.withResolvers();
13
+ const weakRef = new WeakRef(resolve);
14
+ const check = () => {
15
+ const resolve = weakRef.deref();
16
+ if (!resolve) return;
17
+ const element = document.getElementById(id);
18
+ element ? resolve(element) : requestAnimationFrame(check);
19
+ };
20
+ check();
21
+ return promise;
22
+ }
23
+
24
+
25
+ class U2Copy extends HTMLElement {
26
+ constructor() {
27
+ super();
28
+ this.mutationObserver = new MutationObserver(() => {
29
+ this.updateContent();
30
+ });
31
+ //this.attachShadow({ mode: 'open' });
32
+ }
33
+
34
+ static get observedAttributes() {
35
+ return ['for', 'isolate', 'sync'];
36
+ }
37
+
38
+ attributeChangedCallback(name, oldValue, newValue) {
39
+ if (oldValue === newValue) return;
40
+ if (name === 'for') {
41
+ this._targetElement = null;
42
+ this._targetElementPromise = getElementByIdPromise(newValue);
43
+ this.innerHTML = '';
44
+ this._targetElementPromise.then(target => {
45
+ this._targetElement = target;
46
+ if (!this._targetElement) return;
47
+ if (this.sync) this.sync = true;
48
+ this.updateContent();
49
+ });
50
+ }
51
+ if (name === 'sync') {
52
+ this.sync = newValue!==null;
53
+ }
54
+ }
55
+ set sync(value) {
56
+ if (!value) {
57
+ this.mutationObserver.disconnect();
58
+ } else {
59
+ if (this._targetElement) {
60
+ this.mutationObserver.observe(this._targetElement, { childList: true, subtree: true, characterData: true });
61
+ }
62
+ }
63
+ this._sync = value;
64
+ }
65
+ get sync() {
66
+ return this._sync;
67
+ }
68
+
69
+ connectedCallback() {
70
+ //this.updateContent();
71
+ }
72
+ disconnectedCallback() {
73
+ this.mutationObserver.disconnect();
74
+ }
75
+
76
+ updateContent() {
77
+ this.innerHTML = '';
78
+ if (this._targetElement) {
79
+ let content = this._targetElement.innerHTML;
80
+ // replace all ids with unique ids and if references are made (label[for]) to the original id, replace them with the new id
81
+ const fragment = document.createRange().createContextualFragment(content);
82
+ const elements = fragment.querySelectorAll('[id]');
83
+
84
+ // todo:
85
+ // aria-Attribute (z.B. aria-labelledby, aria-describedby, aria-controls, aria-owns, aria-activedescendant, aria-flowto)
86
+ // svg: use xlink:href, clip-path, mask, fill, stroke, filter, marker, pattern, gradient
87
+ // headers attribute in table cells
88
+ // usemap attribute in img
89
+ // form attribute in input, button, select, textarea, label
90
+ // href-Attribute in a, area
91
+ // list-Attribute in input-elements
92
+
93
+ const idMap = new Map();
94
+ elements.forEach(element => {
95
+ const id = element.id;
96
+ const newId = id + '-' + Math.random().toString(36).substring(2);
97
+ idMap.set(id, newId);
98
+ element.id = newId;
99
+ });
100
+ const references = fragment.querySelectorAll('[for]');
101
+ references.forEach(element => {
102
+ const id = element.getAttribute('for');
103
+ if (idMap.has(id)) {
104
+ element.setAttribute('for', idMap.get(id));
105
+ }
106
+ });
107
+
108
+ this.appendChild(fragment);
109
+ // if (this.hasAttribute('isolate')) {
110
+ // this.shadowRoot.innerHTML = content;
111
+ // } else {
112
+ // this.innerHTML = content;
113
+ // }
114
+ }
115
+ }
116
+ }
117
+
118
+ customElements.define('u2-copy', U2Copy);
@@ -0,0 +1,49 @@
1
+ {
2
+ "schemaVersion": "1.0.0",
3
+ "readme": "README.md",
4
+ "modules": [
5
+ {
6
+ "kind": "javascript-module",
7
+ "path": "copy.js",
8
+ "declarations": [
9
+ {
10
+ "kind": "class",
11
+ "description": "copys the content of an other element",
12
+ "name": "u2-copy",
13
+ "members": [
14
+ ],
15
+ "events": [],
16
+ "attributes": [
17
+ {
18
+ "name": "for",
19
+ "description": "The id of the element to copy",
20
+ "type": "string"
21
+ },{
22
+ "name": "sync",
23
+ "description": "If true, the copy will be updated when the original element changes",
24
+ "type": "boolean"
25
+ }
26
+ ],
27
+ "cssProperties": [],
28
+ "cssParts": [],
29
+ "superclass": {
30
+ "name": "HTMLElement"
31
+ },
32
+ "tagName": "u2-copy",
33
+ "customElement": true
34
+ }
35
+ ],
36
+ "exports": [
37
+ {
38
+ "kind": "custom-element-definition",
39
+ "name": "u2-copy",
40
+ "declaration": {
41
+ "name": "u2-copy",
42
+ "module": "copy.js"
43
+ }
44
+ }
45
+ ]
46
+ }
47
+ ]
48
+ }
49
+
@@ -0,0 +1,21 @@
1
+ <!DOCTYPE html>
2
+ <html lang=en>
3
+ <head>
4
+ <meta charset=utf-8>
5
+ <meta name=viewport content="width=device-width">
6
+ <script src="../../../u2/tests/test-init.js" type=module async></script>
7
+
8
+ <link rel=stylesheet href="../../../css/classless/full.css">
9
+ <link rel=stylesheet href="../../../css/classless/aria.css">
10
+ <link rel=stylesheet href="../../../css/classless/simple.css">
11
+
12
+ <script src="../copy.js" type=module async></script>
13
+ <link href="../copy.css" rel=stylesheet>
14
+
15
+ <body>
16
+
17
+ <section class="main">
18
+ original: <span id=source contenteditable>Hello <b>World</b></span>
19
+ <br>
20
+ copy: <u2-copy for=source sync></u2-copy>
21
+ </section>
@@ -0,0 +1,75 @@
1
+ <!DOCTYPE HTML>
2
+ <html lang=en>
3
+ <head>
4
+ <meta charset=utf-8>
5
+ <meta name=viewport content="width=device-width">
6
+ <title>Test</title>
7
+ <script src="../../../u2/tests/test-init.js" type=module async></script>
8
+ <script src="../../../u2/auto.js" type=module async></script>
9
+
10
+
11
+ <link rel=stylesheet href="../../../css/classless/full.css">
12
+ <link rel=stylesheet href="../../../css/classless/simple.css">
13
+
14
+
15
+ <script src="../copy.js" type=module async></script>
16
+ <link href="../copy.css" rel=stylesheet>
17
+
18
+ <style>
19
+ body {
20
+ --u2-ico-dir: 'https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/icons/';
21
+ }
22
+ [contenteditable] {
23
+ background-color: #fee;
24
+ padding: 1em;
25
+ margin: 1em 0;
26
+ }
27
+ u2-copy {
28
+ display: block;
29
+ margin: 1em 0;
30
+ padding: 1em;
31
+ background-color: var(--color-light);
32
+ }
33
+
34
+ </style>
35
+
36
+ <body>
37
+
38
+ <section>
39
+
40
+ <h2>Source</h2>
41
+
42
+ <h4>This is "source 1", a contenteditable element thats contents will be copied:</h4>
43
+ <ul>
44
+ <li>IDs will be renamed
45
+ <li>For attributes will be referenced
46
+ </ul>
47
+ <div id="source1" contenteditable>
48
+ Text <label for="input1">label</label>
49
+ <input id="input1" type="text" value="value">
50
+ </div>
51
+
52
+
53
+ <h4>Copy synced</h4>
54
+ <u2-copy for="source1" sync></u2-copy>
55
+
56
+ <h4>Copy not synced</h4>
57
+ <u2-copy for="source1"></u2-copy>
58
+
59
+ <h2>Source Element appears delayed</h2>
60
+
61
+ <h4>This is source 2:</h4>
62
+ <div contenteditable id="source2">Content 2</div>
63
+
64
+ <h4>This is will_be_source_3:</h4>
65
+ <div id="will_be_source3" contenteditable>Content 3</div>
66
+
67
+ Select the source dynamically:<br>
68
+ <button onclick="copy2.setAttribute('for', 'source1')">Set source 1</button><br>
69
+ <button onclick="copy2.setAttribute('for', 'source2')">Set source 2</button><br>
70
+ <button onclick="copy2.setAttribute('for', 'source3'); setTimeout(()=> will_be_source3.id = 'source3', 1000)">Set source 3</button><br>
71
+
72
+
73
+
74
+ <u2-copy sync id="copy2"></u2-copy>
75
+
@@ -0,0 +1,47 @@
1
+ # &lt;u2-counter&gt; - element
2
+ Animated Number Counter
3
+
4
+ ## Features
5
+
6
+ - The counter starts when the element comes into the viewport
7
+ - Attribute `once` to count only once
8
+ - It counts using a easeOutCubic timing function
9
+ - Attribute `value="12.30"` defines target value
10
+ - ...and decimal places to be displayed!
11
+ - Optional attribute `from="-10"` defines start value. Without it, it will start at 0
12
+ - You can set the property `element.value` to start counting.
13
+ - Counter elements get a css variable `--js-final-inline-size` which is set to their `min-width` by default.
14
+ - Use the inner HTML as fallback.
15
+
16
+ ## Usage
17
+
18
+ ```html
19
+ Counter: <u2-counter from=-11.0 value=200.0>200.0</u2-counter>
20
+ ```
21
+
22
+ ```css
23
+ u2-counter {
24
+ font-size:3rem;
25
+ text-align:right;
26
+ padding:.3em;
27
+ background:#eee;
28
+ }
29
+ ```
30
+
31
+ ## Install
32
+
33
+ ```html
34
+ <link href="https://cdn.jsdelivr.net/gh/u2ui/u2@x.x.x/el/counter/counter.min.css" rel=stylesheet>
35
+ <script src="https://cdn.jsdelivr.net/gh/u2ui/u2@x.x.x/el/counter/counter.min.js" type=module async></script>
36
+ ```
37
+
38
+ ## Demos
39
+
40
+ [minimal.html](http://gcdn.li/u2ui/u2@main/el/counter/tests/minimal.html)
41
+ [test.html](http://gcdn.li/u2ui/u2@main/el/counter/tests/test.html)
42
+
43
+ ## About
44
+
45
+ - MIT License, Copyright (c) 2022 <u2> (like all repositories in this organization) <br>
46
+ - Suggestions, ideas, finding bugs and making pull requests make us very happy. ♥
47
+
@@ -0,0 +1,8 @@
1
+ u2-counter {
2
+ text-align:center;
3
+ display:inline-block;
4
+ min-inline-size:var(--js-final-inline-size);
5
+ font-variant: tabular-nums;
6
+ font-feature-settings: "tnum";
7
+ box-sizing:border-box;
8
+ }
@@ -0,0 +1,95 @@
1
+ class counter extends HTMLElement {
2
+ constructor() {
3
+ super();
4
+
5
+ this._start = 0;
6
+ this._end = Number(this.innerHTML.replace("'",''));
7
+
8
+ this.animatedValue = 0;
9
+
10
+ this._observer = new IntersectionObserver((entries)=>{
11
+ if (entries[0].isIntersecting) {
12
+ this._animate(this._start, this._end)
13
+ if (this.hasAttribute('once')) this._observer.disconnect(this);
14
+ } else {
15
+ this._reset();
16
+ }
17
+ });
18
+ }
19
+ static observedAttributes = ['value', 'from', 'no-grouping', 'once'];
20
+ attributeChangedCallback(name, oldValue, newValue) {
21
+ if (name === 'value') this.value = newValue;
22
+ if (name === 'from') this._start = parseFloat(newValue);
23
+ if (name === 'no-grouping') this.noGrouping = newValue!==null;
24
+ }
25
+ set value(value){
26
+ let [ integer, digits='' ] = value.trim().split('.');
27
+ this._minDigits = digits.length;
28
+
29
+ this._end = Number(value);
30
+ // todo: recalculate finalWidth
31
+ this._animate(this.animatedValue, this._end);
32
+ }
33
+
34
+ connectedCallback() {
35
+ // measure final-width
36
+ this.innerHTML = format(this, this._end);
37
+ const writingMode = getComputedStyle(this).getPropertyValue('writing-mode');
38
+ const vertical = writingMode.includes('vertical');
39
+ const inlineSizePx = vertical ? this.offsetHeight : this.offsetWidth;
40
+ const fontSizePx = Number(getComputedStyle(this).getPropertyValue('font-size').slice(0,-2));
41
+ const em = inlineSizePx / fontSizePx;
42
+ this.style.setProperty('--js-final-inline-size', em+'em');
43
+
44
+ this._reset();
45
+ this._observer.observe(this);
46
+ }
47
+ disconnectedCallback() {
48
+ this._observer.disconnect(this)
49
+ }
50
+ _animate(from, to) {
51
+ const duration = 2000;
52
+ let diff = to - from;
53
+ this._stop();
54
+ this.animatedValue = from;
55
+ let start = performance.now();
56
+ this._interval = setInterval(()=>{
57
+ let now = performance.now();
58
+ let progress = (now - start) / duration;
59
+ if (progress>1) progress = 1;
60
+ this.animatedValue = from + diff * easeOutCubic(progress);
61
+ if (progress >= 1) {
62
+ this.animatedValue = to;
63
+ this._stop();
64
+ }
65
+ this._draw()
66
+ },15)
67
+ }
68
+ _stop() {
69
+ clearInterval(this._interval);
70
+ }
71
+ _reset() {
72
+ this._stop();
73
+ this.animatedValue = this._end;
74
+ this._draw();
75
+ }
76
+ _draw(){
77
+ requestAnimationFrame(()=> this.innerHTML = format(this, this.animatedValue) );
78
+ }
79
+ }
80
+
81
+ // https://easings.net/de
82
+ function easeOutCubic(x) {
83
+ return 1 - Math.pow(1 - x, 3);
84
+ }
85
+
86
+ function format(el, val){
87
+ return new Intl.NumberFormat(undefined, {
88
+ style: 'decimal',
89
+ minimumFractionDigits: el._minDigits || 0,
90
+ maximumFractionDigits: el._minDigits || 0,
91
+ useGrouping: !el.noGrouping
92
+ }).format(val);
93
+ }
94
+
95
+ customElements.define('u2-counter', counter)
@@ -0,0 +1,59 @@
1
+ {
2
+ "schemaVersion": "1.0.0",
3
+ "readme": "README.md",
4
+ "modules": [
5
+ {
6
+ "kind": "javascript-module",
7
+ "path": "counter.js",
8
+ "declarations": [
9
+ {
10
+ "kind": "class",
11
+ "description": "Animated Number Counter",
12
+ "name": "counter",
13
+ "members": [],
14
+ "events": [],
15
+ "attributes": [
16
+ {
17
+ "name": "value",
18
+ "description": "The value to count to, if not set, the innerHTML will be used as the value",
19
+ "u2-type": "number",
20
+ "u2Examples": ["10", "100", "-999", "71934"]
21
+ },{
22
+ "name": "from",
23
+ "description": "The value to start counting from, if not set, 0 will be used",
24
+ "u2-type": "number",
25
+ "u2Examples": ["0", "100", "-999", "71934"]
26
+ },{
27
+ "name": "once",
28
+ "description": "If set, the counter will only count once, else it will count every time it is in view",
29
+ "u2-type": "boolean"
30
+ },{
31
+ "name": "no-grouping",
32
+ "description": "If set, the counter will not use grouping separators",
33
+ "u2-type": "boolean"
34
+ }
35
+ ],
36
+ "cssProperties": [
37
+ {
38
+ "name": "--js-final-inline-size",
39
+ "description": "Read only! The final width of the counter"
40
+ }
41
+ ],
42
+ "superclass": {"name": "HTMLElement"},
43
+ "tagName": "u2-counter",
44
+ "customElement": true
45
+ }
46
+ ],
47
+ "exports": [
48
+ {
49
+ "kind": "custom-element-definition",
50
+ "name": "u2-counter",
51
+ "declaration": {
52
+ "name": "counter",
53
+ "module": "counter.js"
54
+ }
55
+ }
56
+ ]
57
+ }
58
+ ]
59
+ }
@@ -0,0 +1,27 @@
1
+ <!DOCTYPE html>
2
+ <html lang=en>
3
+ <head>
4
+ <meta charset=utf-8>
5
+ <meta name=viewport content="width=device-width">
6
+ <script src="../../../u2/tests/test-init.js" type=module async></script>
7
+
8
+ <link rel=stylesheet href="../../../css/classless/full.css">
9
+ <link rel=stylesheet href="../../../css/classless/simple.css">
10
+
11
+ <link rel=stylesheet href="../counter.css">
12
+ <script src="../counter.js" type=module async></script>
13
+
14
+ <body>
15
+
16
+ <section class="main">
17
+ Counter: <u2-counter from=-11.0 value=200.0>200.0</u2-counter>
18
+ </section>
19
+
20
+ <style class="main">
21
+ u2-counter {
22
+ font-size:3rem;
23
+ text-align:right;
24
+ padding:.3em;
25
+ background:#eee;
26
+ }
27
+ </style>
@@ -0,0 +1,106 @@
1
+ <!DOCTYPE HTML>
2
+ <html lang=en>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name=viewport content="width=device-width">
6
+ <script src="../../../u2/tests/test-init.js" type=module async></script>
7
+
8
+ <link rel=stylesheet href="../../../css/classless/full.css">
9
+ <link rel=stylesheet href="../../../css/classless/aria.css">
10
+ <link rel=stylesheet href="../../../css/classless/simple.css">
11
+
12
+ <link rel=stylesheet href="../counter.css">
13
+ <script src="../counter.js" type=module async></script>
14
+
15
+ </head>
16
+
17
+ <body>
18
+
19
+ <header>
20
+ <h1>u2-counter</h1>
21
+ </header>
22
+
23
+ <section>
24
+ <h2>Test</h2>
25
+ <table>
26
+ <tr>
27
+ <td> Use "value"-Attribute:
28
+ <td align=right> <u2-counter value="5000"></u2-counter>
29
+ <tr>
30
+ <td> Use "value"-Attribute with digits "1.00" (not working when using innerHTML)
31
+ <td align=right> <u2-counter value="1.00"></u2-counter>
32
+ <tr>
33
+ <td> Attribute "from"
34
+ <td align=right> <u2-counter no-grouping from=1000 value="-1000"></u2-counter>
35
+ <tr>
36
+ <td> Attribute "no-grouping"
37
+ <td align=right> <u2-counter no-grouping>5000</u2-counter>
38
+ <tr>
39
+ <td> Use innerHTML:
40
+ <td align=right> <u2-counter>5000</u2-counter>
41
+ </table>
42
+ </section>
43
+
44
+ <section>
45
+ <h2>API tests</h2>
46
+ <u2-counter id=counter1>100000</u2-counter>
47
+ <label>
48
+ Set value: <input placeholder onchange="counter1.setAttribute('value', this.value)" style="width:5em">
49
+ </label>
50
+ </section>
51
+
52
+
53
+ <section>
54
+ <h2>Scroll test</h2>
55
+ <div style="overflow:auto; height:200px">
56
+ Scroll down to start the counter
57
+ <br>
58
+ <br>
59
+ <br>
60
+ <br>
61
+ <br>
62
+ <br>
63
+ <br>
64
+ <br>
65
+ <br>
66
+ <br>
67
+ <br>
68
+ <br>
69
+ <br>
70
+ <br>
71
+ <br>
72
+ <br>
73
+ <br>
74
+ <br>
75
+ <br>
76
+ <br>
77
+ <br>
78
+ <br>
79
+ <br>
80
+ <br>
81
+ <u2-counter style="font-size:2em; margin:auto; padding:1rem; background:#999; border-radius:2rem">1386</u2-counter>
82
+ <u2-counter style="font-size:2em; margin:auto; padding:1rem; background:#999; border-radius:2rem">-10</u2-counter>
83
+ once-attribute: <u2-counter once style="font-size:2em; margin:auto; padding:1rem; background:#999; border-radius:2rem" value=876.0></u2-counter>
84
+ </div>
85
+ </section>
86
+
87
+
88
+
89
+ <section>
90
+ <h2>remove from dom and reattache</h2>
91
+
92
+ <div id=container3>
93
+ <u2-counter id=counter3 style="font-size:2em; margin:auto; padding:1rem; background:#999; border-radius:2rem">345</u2-counter>
94
+ <button id=button3>remove / attache</button>
95
+ </div>
96
+ <script>
97
+ let counter3 = window.counter3;
98
+ let to = null;
99
+ button3.onclick = ()=>{
100
+ counter3.remove();
101
+ clearTimeout(to);
102
+ to = setTimeout(()=>container3.append(counter3), 2000);
103
+ }
104
+ </script>
105
+
106
+ </section>