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,80 @@
1
+ const throttle = (func, ms) => {
2
+ let timeOut;
3
+ return (...args) => {
4
+ if (timeOut) return;
5
+ timeOut = setTimeout(()=>{
6
+ requestAnimationFrame(()=>{
7
+ func(...args);
8
+ timeOut = null;
9
+ });
10
+ }, ms);
11
+ }
12
+ }
13
+
14
+ class textfit extends HTMLElement {
15
+ constructor() {
16
+ super();
17
+ let shadowRoot = this.attachShadow({ mode: 'open' });
18
+ shadowRoot.innerHTML = `
19
+ <style>
20
+ :host {
21
+ isolation:isolate;
22
+ contain: inline-size;
23
+ display:block;
24
+ max-width: 100%;
25
+ }
26
+ slot {
27
+ display:block;
28
+ }
29
+ </style>
30
+ <slot></slot>
31
+ `;
32
+ this.slotEl = shadowRoot.querySelector('slot');
33
+
34
+ this.render = throttle(this.render.bind(this), 20);
35
+ //this.render = this.render.bind(this);
36
+
37
+ this.addEventListener('input',this.render); // contenteditable
38
+ addEventListener('load',this.render); // e.g. font switch
39
+ this._rObserver = new ResizeObserver(this.render); // todo? render can in turn trigger the observer, should we intercept that?
40
+ }
41
+
42
+ connectedCallback() {
43
+ this.render();
44
+ this._rObserver && this._rObserver.observe(this);
45
+ }
46
+ disconnectedCallback() {
47
+ removeEventListener('load',this.render); // e.g. font switch
48
+ this._rObserver.disconnect(this);
49
+ }
50
+
51
+ render(e){
52
+ const style = getComputedStyle(this);
53
+ const font = style.getPropertyValue('font-family');
54
+ const weight = style.getPropertyValue('font-weight');
55
+ const fStyle = style.getPropertyValue('font-style');
56
+ const canvas = document.createElement('canvas');
57
+ const c2d = canvas.getContext('2d');
58
+ c2d.direction = 'ltr';
59
+ c2d.font = fStyle + ' ' + weight + ' 100px ' + font;
60
+ const text = this.innerText;
61
+ const measure = c2d.measureText(text);
62
+ const left = measure.actualBoundingBoxLeft;
63
+ const right = measure.actualBoundingBoxRight;
64
+ //const ascent = measure.actualBoundingBoxAscent;
65
+ //const descent = measure.actualBoundingBoxDescent;
66
+
67
+ //this.style.fontSize = '1px';
68
+ const space = this.clientWidth; // how wide is the content, with the smallest font-size possible
69
+ //this.style.fontSize = '';
70
+
71
+ this.slotEl.style.marginLeft = left/100 + 'em';
72
+
73
+ const widthAt100px = right + left;
74
+ let fs = (space / widthAt100px) * 100;
75
+
76
+ this.style.setProperty('--js-font-size', fs+'px');
77
+ }
78
+ }
79
+
80
+ customElements.define('u2-textfit', textfit);
@@ -0,0 +1,72 @@
1
+ # &lt;u2-time&gt; - element
2
+ The better time-element, e.g. live changing relative dates
3
+
4
+ ## Features
5
+
6
+ - live changing relative dates
7
+ - generates a title attribute with the absolute date
8
+
9
+ ## Usage
10
+
11
+ ```html
12
+ <u2-time datetime="2013-04-01T18:02" type=relative lang=de>1. April 2013 18:02</u2-time>.
13
+ ```
14
+
15
+ ```css
16
+ u2-time {
17
+ }
18
+ ```
19
+
20
+ ## Install
21
+
22
+ ```html
23
+ <link href="https://cdn.jsdelivr.net/gh/u2ui/u2@x.x.x/el/time/time.min.css" rel=stylesheet>
24
+ <script src="https://cdn.jsdelivr.net/gh/u2ui/u2@x.x.x/el/time/time.min.js" type=module async></script>
25
+ ```
26
+
27
+ ## Demos
28
+
29
+ [minimal.html](http://gcdn.li/u2ui/u2@main/el/time/tests/minimal.html)
30
+ [test.html](http://gcdn.li/u2ui/u2@main/el/time/tests/test.html)
31
+
32
+ ## Attributes
33
+
34
+ Attribute | Options | Default | Description
35
+ --- | --- | --- | ---
36
+ `datetime` | ISO 8601 date | required | e.g. `2011-10-10T14:48:00`
37
+ `lang` | language | parent lang | If not present navigator.language is used
38
+ `type` | date, relative | relative | The way the date should be displayed
39
+
40
+
41
+ ### If type=date
42
+
43
+ Attribute | Options | Default | Description
44
+ --- | --- | --- | ---
45
+ `weekday` | narrow, short, long, none | short | Format weekday as `Sun` or `Sunday`
46
+ `year` | numeric, 2-digit, none | numeric | Format year as `14` or `2014`
47
+ `month` | numeric, 2-digit, narrow, short, long, none | numeric | Format month as `Jun` or `June`
48
+ `day` | numeric, 2-digit, none | numeric | Format day as `01` or `1`
49
+ `hour` | numeric, 2-digit, none | none | Format hour as `01` or `1`
50
+ `minute` | numeric, 2-digit, none | none | Format minute as `05` or `5`
51
+ `second` | numeric, 2-digit, none | none | Format second as `05` or `5`
52
+
53
+ ### If type=relative
54
+
55
+ Attribute | Options | Default | Description
56
+ --- | --- | --- | ---
57
+ `mode` | narrow, short, long | short | `28 minutes ago` , `29 min. ago`
58
+
59
+ ## Todo
60
+
61
+ - recognise the resolution of the given date (has time or not)
62
+ - optional provide date as innerHTML
63
+
64
+ ## Similar projects
65
+
66
+ https://github.com/github/relative-time-element
67
+
68
+ ## About
69
+
70
+ - MIT License, Copyright (c) 2022 <u2> (like all repositories in this organization) <br>
71
+ - Suggestions, ideas, finding bugs and making pull requests make us very happy. ♥
72
+
@@ -0,0 +1,118 @@
1
+ {
2
+ "schemaVersion": "1.0.0",
3
+ "readme": "README.md",
4
+ "modules": [
5
+ {
6
+ "kind": "javascript-module",
7
+ "path": "time.js",
8
+ "declarations": [
9
+ {
10
+ "kind": "class",
11
+ "description": "A better time-element, e.g. live changing relative dates",
12
+ "name": "u2-time",
13
+ "members": [
14
+ {
15
+ "kind": "method",
16
+ "name": "render",
17
+ "description": "Render the time element"
18
+ },
19
+ {
20
+ "kind": "method",
21
+ "name": "reset",
22
+ "description": "Reset the time element"
23
+ },
24
+ {
25
+ "kind": "method",
26
+ "name": "attributeChanged",
27
+ "description": "Handle attribute changes"
28
+ },
29
+ {
30
+ "kind": "method",
31
+ "name": "connected",
32
+ "description": "Handle element connection"
33
+ },
34
+ {
35
+ "kind": "method",
36
+ "name": "disconnected",
37
+ "description": "Handle element disconnection"
38
+ }
39
+ ],
40
+ "events": [],
41
+ "attributes": [
42
+ {
43
+ "name": "datetime",
44
+ "description": "The date and time to display, in ISO 8601 format"
45
+ },
46
+ {
47
+ "name": "lang",
48
+ "description": "The language to use for formatting the date and time",
49
+ "u2Examples": ["de-CH","de","fr-CA","ja-JP","zh-Hans-CN"]
50
+ },
51
+ {
52
+ "name": "type",
53
+ "description": "The type of display to use, either 'date' or 'relative'",
54
+ "u2-type": ["date","relative"]
55
+ },
56
+ {
57
+ "name": "weekday",
58
+ "description": "The format to use for the weekday, either 'narrow', 'short', 'long', or 'none'",
59
+ "u2-type": ["narrow","short","long","none"]
60
+ },
61
+ {
62
+ "name": "year",
63
+ "description": "The format to use for the year, either 'numeric', '2-digit', or 'none'",
64
+ "u2-type": ["numeric","2-digit","none"]
65
+ },
66
+ {
67
+ "name": "month",
68
+ "description": "The format to use for the month, either 'numeric', '2-digit', 'narrow', 'short', 'long', or 'none'",
69
+ "u2-type": ["numeric","2-digit","narrow","short","long","none"]
70
+ },
71
+ {
72
+ "name": "day",
73
+ "description": "The format to use for the day, either 'numeric', '2-digit', or 'none'",
74
+ "u2-type": ["numeric","2-digit","none"]
75
+ },
76
+ {
77
+ "name": "hour",
78
+ "description": "The format to use for the hour, either 'numeric', '2-digit', or 'none'",
79
+ "u2-type": ["numeric","2-digit","none"]
80
+ },
81
+ {
82
+ "name": "minute",
83
+ "description": "The format to use for the minute, either 'numeric', '2-digit', or 'none'",
84
+ "u2-type": ["numeric","2-digit","none"]
85
+ },
86
+ {
87
+ "name": "second",
88
+ "description": "The format to use for the second, either 'numeric', '2-digit', or 'none'",
89
+ "u2-type": ["numeric","2-digit","none"]
90
+ },
91
+ {
92
+ "name": "mode",
93
+ "description": "The mode to use for the relative type, either 'narrow', 'short', or 'long'",
94
+ "u2-type": ["narrow","short","long"]
95
+ }
96
+ ],
97
+ "cssProperties": [],
98
+ "superclass": {
99
+ "name": "HTMLElement"
100
+ },
101
+ "tagName": "u2-time",
102
+ "customElement": true
103
+ }
104
+ ],
105
+ "exports": [
106
+ {
107
+ "kind": "custom-element-definition",
108
+ "name": "u2-time",
109
+ "declaration": {
110
+ "name": "u2-time",
111
+ "module": "time.js"
112
+ }
113
+ }
114
+ ]
115
+ }
116
+ ]
117
+ }
118
+
@@ -0,0 +1,19 @@
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
+ <script src="../time.js" type=module async></script>
9
+
10
+ <body>
11
+
12
+ <section class="main">
13
+ <u2-time datetime="2013-04-01T18:02" type=relative lang=de>1. April 2013 18:02</u2-time>.
14
+ </section>
15
+
16
+ <style>
17
+ u2-time {
18
+ }
19
+ </style>
@@ -0,0 +1,160 @@
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
+
9
+
10
+ <link rel=stylesheet href="../../../css/classless/full.css">
11
+ <link rel=stylesheet href="../../../css/classless/aria.css">
12
+ <link rel=stylesheet href="../../../css/classless/simple.css">
13
+
14
+
15
+ <script src="../time.js" type=module async></script>
16
+ <!--link rel=stylesheet href="./tabs.css"-->
17
+
18
+ <body>
19
+
20
+ <h3>Set datetime attribute</h3>
21
+ <section lang=de>
22
+ Zurückgestellt: <u2-time datetime="" id=testSet></u2-time><br>
23
+ <button onclick="testSet.setAttribute('datetime', Date.now());">reset</button>
24
+ <script>
25
+ testSet.setAttribute('datetime', Date.now());
26
+ </script>
27
+
28
+ <form onchange="Array.from(this.elements).forEach(e=>testSet.setAttribute(e.name, e.value))">
29
+ <label>
30
+ datetime
31
+ <select name=datetime>
32
+ <option value="2031-10-10T14:48:50">2031-10-10T14:48:50
33
+ <option value="1999-11-10T11:38:10">1999-11-10T11:38:10
34
+ </select>
35
+ </label>
36
+ <label>
37
+ lang
38
+ <select name=lang>
39
+ <option value="de">de
40
+ <option value="en">en
41
+ <option value="es">es
42
+ <option value="it">it
43
+ <option value="fr">fr
44
+ </select>
45
+ </label>
46
+ <label>
47
+ type
48
+ <select name=type>
49
+ <option value="relative">relative (default)
50
+ <option value="date">date
51
+ </select>
52
+ </label>
53
+ <label>
54
+ weekday
55
+ <select name=weekday>
56
+ <option value="short">short (default)
57
+ <option value="narrow">narrow
58
+ <option value="long">long
59
+ <option value="none">none
60
+ </select>
61
+ </label>
62
+ <label>
63
+ year
64
+ <select name=year>
65
+ <option value="numeric">numeric (default)
66
+ <option value="2-digit">2-digit
67
+ <option value="none">none
68
+ </select>
69
+ </label>
70
+ <label>
71
+ month
72
+ <select name=month>
73
+ <option value="numeric">numeric (default)
74
+ <option value="2-digit">2-digit
75
+ <option value="narrow">narrow
76
+ <option value="short">short
77
+ <option value="long">long
78
+ <option value="none">none
79
+ </select>
80
+ </label>
81
+ <label>
82
+ day
83
+ <select name=day>
84
+ <option value="numeric">numeric (default)
85
+ <option value="2-digit">2-digit
86
+ <option value="none">none
87
+ </select>
88
+ </label>
89
+ <label>
90
+ hour
91
+ <select name=hour>
92
+ <option value="none">none (default)
93
+ <option value="numeric">numeric
94
+ <option value="2-digit">2-digit
95
+ </select>
96
+ </label>
97
+ <label>
98
+ minute
99
+ <select name=minute>
100
+ <option value="none">none (default)
101
+ <option value="numeric">numeric
102
+ <option value="2-digit">2-digit
103
+ </select>
104
+ </label>
105
+ <label>
106
+ second
107
+ <select name=second>
108
+ <option value="none">none (default)
109
+ <option value="numeric">numeric
110
+ <option value="2-digit">2-digit
111
+ </select>
112
+ </label>
113
+ <label>
114
+ mode
115
+ <select name=mode>
116
+ <option value="short">short (default)
117
+ <option value="narrow">narrow
118
+ <option value="long">long
119
+ </select>
120
+ </label>
121
+ </form>
122
+ <style>
123
+ label {
124
+ display:flex;
125
+ gap:1rem;
126
+ }
127
+ </style>
128
+ </section>
129
+
130
+ <h3>English; type=relative</h3>
131
+ <div lang=en>
132
+ A cold winter month <u2-time datetime="2011-11" type=relative>many years ago</u2-time>
133
+ </div>
134
+
135
+ <h3>English from &lt;head&gt; type=relative</h3>
136
+ <div>
137
+ Google released Gmail Blue <u2-time datetime="2013-04-01" type=relative>on 2013-04-01</u2-time>.
138
+ </div>
139
+
140
+ <h3>Deutsch, type=relative</h3>
141
+ <div lang=de>
142
+ Weltuntergang <u2-time datetime="2050-01-01" type=relative>am 2050-01-01</u2-time>.
143
+ </div>
144
+
145
+
146
+
147
+ <h3>no type and no innerHTML => relative</h3>
148
+ <div>
149
+ Google released Gmail Blue <u2-time datetime="2013-04-01"></u2-time>.
150
+ </div>
151
+
152
+ <h3>type=date</h3>
153
+ <div>
154
+ <u2-time datetime="2013-04-01T18:00" type=date>on 2013-04-01</u2-time>.
155
+ </div>
156
+
157
+ <h3>type=date weekday=none hour minute month=long</h3>
158
+ <div>
159
+ <u2-time datetime="2013-04-01T18:00" type=date weekday="none" month=long hour minute></u2-time>.
160
+ </div>
@@ -0,0 +1,141 @@
1
+
2
+ class Time extends HTMLElement {
3
+ constructor() {
4
+ super();
5
+ this.attachShadow({mode: 'open'});
6
+ this.outEl = this.shadowRoot;
7
+ }
8
+ connectedCallback() {
9
+ this.reset();
10
+ }
11
+ disconnectedCallback() {
12
+ clearInterval(this.__timer);
13
+ }
14
+ static observedAttributes = ['datetime', 'lang', 'type', 'weekday', 'year', 'month', 'day', 'hour', 'minute', 'second', 'mode'];
15
+ attributeChangedCallback(name, old, value) {
16
+ if (old === value) return;
17
+ this.reset();
18
+ }
19
+ reset() {
20
+ this.__type = this.getAttribute('type') || 'relative';
21
+ let show = this.getAttribute('type') || this.innerHTML === '';
22
+ if (!show) return;
23
+
24
+ let date = this.getAttribute('datetime');
25
+ date = date.match(/^-?[0-9.]+$/) ? Number(date) : Date.parse(date);
26
+ date = new Date(date);
27
+ this.__date = date;
28
+
29
+ this.__lang = langFromElement(this) || 'default';
30
+ this.render();
31
+ }
32
+ render() {
33
+ let content = '';
34
+ let title = '';
35
+
36
+ let date = this.__date;
37
+
38
+ const valid = !isNaN(date);
39
+ if (valid) {
40
+ let fn = types[this.__type];
41
+ if (!fn) { console.warn('type ' + this.__type + ' is not supported'); return; }
42
+ let {show} = fn(this, date);
43
+ content = show;
44
+ if (this.__type === 'relative') {
45
+ title = types['date'](this, date).show;// provide a title-attribute if it is relative
46
+ clearInterval(this.__timer);
47
+ this.__timer = setTimeout(() => this.render(), 1000); // todo: evaluate exact next tic, challange!
48
+ }
49
+ }
50
+ this.outEl.innerHTML = `<time datetime="${this.getAttribute('datetime')}" title="${title}">${content}<slot hidden="${valid}"/></time>`;
51
+ }
52
+ }
53
+
54
+
55
+ const types = {
56
+ relative(el, date) {
57
+ const mode = el.getAttribute('mode') || 'long';
58
+ const rtf = new Intl.RelativeTimeFormat(el.__lang, {
59
+ //localeMatcher: , // 'best fit', 'lookup'
60
+ numeric: 'auto', // always, auto
61
+ style: mode // long, narrow, short
62
+ });
63
+ const now = Date.now();
64
+ const elapsed = date - now;
65
+ const { unit, rounded } = elapsedToUnit(elapsed);
66
+ return {
67
+ show:rtf.format(rounded, unit),
68
+ }
69
+ },
70
+ date(el, date) {
71
+ const defaults = {
72
+ weekday: { default: 'short', showAnyway: 1 }, // "narrow", "short", "long".
73
+ //era: // "narrow", "short", "long".
74
+ year: { default: 'numeric', showAnyway: 1 }, // "numeric", "2-digit".
75
+ month: { default: 'short', showAnyway: 1 }, // "numeric", "2-digit", "narrow", "short", "long".
76
+ day: { default: 'numeric', showAnyway: 1 }, // "numeric", "2-digit".
77
+ hour: { default: 'numeric', showAnyway: 0 }, // "numeric", "2-digit".
78
+ minute: { default: 'numeric', showAnyway: 0 }, // "numeric", "2-digit".
79
+ second: { default: 'numeric', showAnyway: 0 }, // "numeric", "2-digit".
80
+ timeZoneName: { default: 'short', showAnyway: 0 }, // "short", "long".
81
+ };
82
+ const options = {};
83
+ for (let [key, opts] of Object.entries(defaults)) {
84
+ const val = el.getAttribute(key);
85
+ if (val === null) {
86
+ if (opts.showAnyway) options[key] = opts.default;
87
+ continue;
88
+ }
89
+ else if (val === '' || val === 'true') options[key] = opts.default;
90
+ else if (val === 'none') options[key] = undefined;
91
+ else options[key] = val;
92
+ }
93
+ if (options.second && !options.minute) options.minute = options.second;
94
+ if (options.minute && !options.hour) options.hour = options.minute;
95
+
96
+ const formatter = new Intl.DateTimeFormat(el.__lang, options);
97
+ // let html = '';
98
+ // for (const part of formatter.formatToParts(date)) {
99
+ // html += `<span part="${part.type}">${part.value}</span>`;
100
+ // }
101
+
102
+ return {
103
+ //html: formatter.formatToParts(date).map(part => `<span part="${part.type}">${part.value}</span>`).join(''),
104
+ show: formatter.format(date),
105
+ }
106
+ },
107
+ }
108
+
109
+ function langFromElement(el) {
110
+ let langEl = el.closest('[lang]')||document.documentElement;
111
+ // todo: for tables i should check col and colgroup
112
+ // https://www.w3.org/TR/1999/REC-html401-19991224/struct/tables.html#alignment-inheritance
113
+
114
+ // let list = navigator.languages;
115
+ // try {
116
+ // list = Intl.getCanonicalLocales(lang);
117
+ // } catch (e) {}
118
+ // Intl.NumberFormat(list).format();
119
+ return langEl.lang || navigator.language;
120
+ }
121
+
122
+ function elapsedToUnit(elapsed, min = 'second') {
123
+ for (let unit in units)
124
+ if (Math.abs(elapsed) > units[unit] || unit === min) {
125
+ return {
126
+ unit,
127
+ rounded: Math.round(elapsed / units[unit]),
128
+ };
129
+ }
130
+ }
131
+ const units = {
132
+ year: 24 * 60 * 60 * 1000 * 365,
133
+ month: 24 * 60 * 60 * 1000 * 365 / 12,
134
+ day: 24 * 60 * 60 * 1000,
135
+ hour: 60 * 60 * 1000,
136
+ minute: 60 * 1000,
137
+ second: 1000
138
+ }
139
+
140
+
141
+ customElements.define('u2-time', Time);