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,289 @@
1
+ // other highlighter that could be used: https://github.com/shikijs/shiki
2
+
3
+ const libRoot = 'https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.7.0/build/';
4
+ const libPromise = import(libRoot + 'es/highlight.min.js');
5
+
6
+ class code extends HTMLElement {
7
+ constructor() {
8
+ super();
9
+ let shadowRoot = this.attachShadow({mode:'open'});
10
+ shadowRoot.innerHTML =
11
+ `<style>
12
+ :host {
13
+ position:relative;
14
+ white-space:normal !important;
15
+ display:grid !important; /* todo, move main css? would also be useful there. Why important? could be problematic */
16
+ }
17
+ :host > * {
18
+ grid-area:1/1;
19
+ line-height:inherit;
20
+ font:inherit;
21
+ white-space:pre;
22
+ }
23
+ #code {
24
+ inline-size:max-content;
25
+ }
26
+ textarea {
27
+ display:none;
28
+ resize:none;
29
+ background-color:transparent;
30
+ color:#0000;
31
+ caret-color:#000;
32
+ border:0;
33
+ margin:0;
34
+ padding:0;
35
+ outline:none;
36
+ }
37
+ #tools {
38
+ white-space:normal;
39
+ transition:.1s;
40
+ display:flex;
41
+ justify-content:flex-end;
42
+ align-items:start;
43
+ gap:.3em;
44
+ pointer-events:none;
45
+ }
46
+ #tools::slotted(button) {
47
+ position:sticky !important;
48
+ right:0;
49
+ top:0;
50
+ pointer-events:all;
51
+ margin:0 !important;
52
+ padding:.3rem !important;
53
+ text-align:center !important;
54
+ background-color:transparent !important;
55
+ color:inherit !important;
56
+ }
57
+ :host(:not(:hover)) #tools {
58
+ opacity:0;
59
+ visibility:hidden;
60
+ }
61
+ :host([editable]) textarea {
62
+ display:block !important;
63
+ }
64
+ </style>
65
+
66
+ <div id=code></div>
67
+ <textarea autocomplete=off autocorrect=off autocapitalize=off spellcheck=false autocorrect=off></textarea>
68
+ <slot id=tools name=tools></slot>
69
+ <link rel="stylesheet" href="${libRoot}styles/github.min.css">
70
+ `;
71
+ // would be great, if in the case of a hightlighted textarea, the original textarea would be used
72
+
73
+ this.sourceMutationObserver = new MutationObserver(()=>{
74
+ this.value = this.getSourceValue();
75
+ });
76
+
77
+ this.textarea = this.shadowRoot.querySelector('textarea');
78
+ }
79
+ connectedCallback() {
80
+ requestAnimationFrame(()=>this._init());
81
+ }
82
+ _init(){
83
+
84
+ this.textarea.addEventListener('input', e => {
85
+ this.setHightlightValue(e.target.value);
86
+ this.setSourceValue(e.target.value);
87
+ });
88
+
89
+ this.textarea.addEventListener('blur', e => { // if textarea is focused, the code is not updated
90
+ if (this.unUpdatedValue == null) return;
91
+ this.value = this.unUpdatedValue;
92
+ });
93
+
94
+ const elementId = this.getAttribute('element');
95
+ if (elementId) {
96
+ this.setForeignElement(document.getElementById(elementId));
97
+ return;
98
+ } else {
99
+ this.sourceElement = this.querySelector('pre>code,textarea,style,script') || this;
100
+ }
101
+
102
+ if (this.sourceElement.tagName === 'TEXTAREA') {
103
+ this.setAttribute('editable','');
104
+ }
105
+
106
+ this.value = this.getSourceValue();
107
+ }
108
+ get language(){
109
+ if (this.hasAttribute('language')) return this.getAttribute('language');
110
+ const el = this.sourceElement;
111
+ if (el.tagName === 'STYLE') return 'css';
112
+ if (el.tagName === 'TEMPLATE') return 'html';
113
+ if (el.tagName === 'SCRIPT') {
114
+ const type = el.getAttribute('type');
115
+ if (type==='module') return 'javascript';
116
+ if (type) return type.replace(/^text\/(x-)?/, '');
117
+ return 'javascript';
118
+ }
119
+ if (this.isForeign) return 'html';
120
+ return false;
121
+ }
122
+ setHightlightValue(value){
123
+ if (!this.libLoaded) this.shadowRoot.querySelector('#code').innerHTML = htmlEncode(value); // fast display and then highlight
124
+ libPromise.then( ({default:hljs})=>{
125
+ this.libLoaded = true;
126
+ const language = this.language;
127
+ requestAnimationFrame(()=>{
128
+ this.shadowRoot.querySelector('#code').innerHTML = (
129
+ language ?
130
+ hljs.highlight(value, {language}) :
131
+ hljs.highlightAuto(value)
132
+ ).value + '<br>';
133
+ });
134
+ });
135
+ }
136
+ setSourceValue(value){
137
+
138
+ // //this._recentlySetSourceValue = true;
139
+ // setTimeout(()=>this._recentlySetSourceValue = false);
140
+
141
+ const el = this.sourceElement;
142
+ if (el.tagName === 'TEXTAREA') { el.value = value; return; }
143
+ if (this.isForeign) {
144
+ el.innerHTML = value;
145
+ } else {
146
+ el.textContent = value;
147
+ }
148
+ }
149
+ getSourceValue(){
150
+ const el = this.sourceElement;
151
+ if (el.tagName === 'TEXTAREA') return el.value;
152
+ if (el.tagName === 'SCRIPT') return el.textContent.replaceAll('\\/script>','/script>');
153
+ if (this.isForeign) {
154
+ return el.innerHTML;
155
+ } else {
156
+ return el.textContent;
157
+ }
158
+ }
159
+ setForeignElement(element){
160
+ this.isForeign = true;
161
+ this.sourceElement = element;
162
+ if (!element) console.error('u2-code: element not found');
163
+ this.sourceMutationObserver.disconnect();
164
+ this.sourceMutationObserver.observe(element, {subtree:true, characterData:true, attributes:true, childList:true});
165
+ this.value = this.getSourceValue();
166
+ }
167
+ get value(){
168
+ return this.textarea.value; // better this one
169
+ //return this.getSourceValue();
170
+ }
171
+ set value(value){
172
+ if (this.trim) value = trimCode(value);
173
+
174
+ if (value === this.textarea.value) return;
175
+
176
+ // setInputValueKeepSelection(this.textarea, value); way too slow
177
+ this.unUpdatedValue = null;
178
+ if (this.textarea.matches(':focus')) {
179
+ this.unUpdatedValue = value;
180
+ return;
181
+ }
182
+
183
+ this.setHightlightValue(value);
184
+ this.textarea.value = value;
185
+
186
+ }
187
+ setSelectionRange(start, end){
188
+ this.textarea.setSelectionRange(start, end);
189
+ }
190
+ focus(){
191
+ this.textarea.focus();
192
+ }
193
+ attributeChangedCallback(name, oldValue, newValue) {
194
+ if (oldValue === newValue) return;
195
+ if (name === 'trim') {
196
+ this.trim = newValue!=null;
197
+ if (this.sourceElement) this.value = this.getSourceValue();
198
+ }
199
+ if (name === 'editable') this.shadowRoot.getElementById('code').inert = newValue!=null;
200
+ if (name === 'element') this.setForeignElement(document.getElementById(newValue));
201
+ }
202
+ static observedAttributes = ['trim', 'editable', 'element'];
203
+
204
+ }
205
+
206
+ customElements.define('u2-code', code);
207
+
208
+
209
+ function trimCode(value){
210
+ const lines = value.split('\n');
211
+ // remove first and last lines if only contains whitespaces
212
+ while (lines[0] != null && lines[0].trim() === '') lines.shift();
213
+ while (lines.length && lines[lines.length - 1].trim() === '') lines.pop();
214
+ // evaluate min num of starting whitespace
215
+ let minWhitespace = 999;
216
+ for (const line of lines) {
217
+ if (line.match(/^\s*$/)) continue; // ignore empty lines
218
+ const num = line.match(/^\s*/)[0].length;
219
+ if (num < minWhitespace) minWhitespace = num;
220
+ }
221
+ // remove starting minWhitespaces and join lines
222
+ return lines.map(line => line.slice(minWhitespace)).join('\n');
223
+ }
224
+ function htmlEncode(input) {
225
+ return input.replace(/[\u00A0-\u9999<>\&]/g, function(i) {
226
+ return '&#'+i.charCodeAt(0)+';';
227
+ });
228
+ }
229
+
230
+
231
+
232
+ /* helper */
233
+
234
+
235
+ // /* functions */
236
+ // function setInputValueKeepSelection(input, newValue) {
237
+ // // if (document.activeElement !== input) { // not good for shadow dom
238
+ // // input.value = newValue;
239
+ // // return;
240
+ // // }
241
+ // if (!input.matches(':focus')) {
242
+ // input.value = newValue;
243
+ // return;
244
+ // }
245
+ // if (input.value === newValue) return;
246
+ // const selectionStart = input.selectionStart;
247
+ // const selectionEnd = input.selectionEnd;
248
+ // const oldString = input.value;
249
+ // const newPositionStart = positionAfterUpdate(oldString, selectionStart, newValue);
250
+ // const newPositionEnd = positionAfterUpdate(oldString, selectionEnd, newValue);
251
+ // input.value = newValue;
252
+ // input.setSelectionRange(newPositionStart, newPositionEnd);
253
+ // }
254
+
255
+ // function positionAfterUpdate(initialString, initialPosition, newString) {
256
+ // let minDistance = Infinity;
257
+ // let newPosition = -1;
258
+ // for (let i = 0; i <= newString.length; i++) {
259
+ // const a = initialString.substring(0, initialPosition) + newString.substring(i);
260
+ // const b = newString.substring(0, i) + initialString.substring(initialPosition);
261
+ // const distance = levenshteinDistance(a, b);
262
+ // if (distance < minDistance) {
263
+ // minDistance = distance;
264
+ // newPosition = i;
265
+ // }
266
+ // }
267
+ // return newPosition;
268
+ // }
269
+
270
+
271
+
272
+ // function levenshteinDistance(a, b) {
273
+ // if (a.length > b.length) [a, b] = [b, a];
274
+ // const previousRow = Array.from({length: a.length + 1}, (_, i) => i);
275
+ // const currentRow = new Array(a.length + 1);
276
+ // for (let i = 1; i <= b.length; i++) {
277
+ // currentRow[0] = i;
278
+ // for (let j = 1; j <= a.length; j++) {
279
+ // const cost = a[j - 1] === b[i - 1] ? 0 : 1;
280
+ // currentRow[j] = Math.min(
281
+ // currentRow[j - 1] + 1,
282
+ // previousRow[j] + 1,
283
+ // previousRow[j - 1] + cost
284
+ // );
285
+ // }
286
+ // [previousRow, currentRow] = [currentRow, previousRow];
287
+ // }
288
+ // return previousRow[a.length];
289
+ // }
@@ -0,0 +1,66 @@
1
+ {
2
+ "schemaVersion": "1.0.0",
3
+ "readme": "README.md",
4
+ "modules": [
5
+ {
6
+ "kind": "javascript-module",
7
+ "path": "code.js",
8
+ "declarations": [
9
+ {
10
+ "kind": "class",
11
+ "description": "A custom HTML element for displaying highlighted, editable code blocks.",
12
+ "name": "code",
13
+ "members": [
14
+ {
15
+ "kind": "getter",
16
+ "name": "language",
17
+ "description": "Gets the language of the code block."
18
+ },{
19
+ "kind": "getter",
20
+ "name": "value",
21
+ "description": "Gets the value of the code block."
22
+ }
23
+ ],
24
+ "events": [],
25
+ "attributes": [
26
+ {
27
+ "name": "trim",
28
+ "u2-type": "boolean",
29
+ "description": "Trims empty first and last lines, and most importantly, indentation."
30
+ },
31
+ {
32
+ "name": "editable",
33
+ "u2-type": "boolean",
34
+ "description": "Makes the code block editable."
35
+ },
36
+ {
37
+ "name": "language",
38
+ "description": "Defines the code language (auto-detect if not set). See https://highlightjs.readthedocs.io/en/latest/supported-languages.html for a list of supported languages.",
39
+ "u2Examples": ["javascript", "html", "css", "json", "xml", "markdown", "php"]
40
+ },
41
+ {
42
+ "name": "element",
43
+ "description": "ID of the element whose innerHTML should be used as code."
44
+ }
45
+ ],
46
+ "cssProperties": [],
47
+ "superclass": {
48
+ "name": "HTMLElement"
49
+ },
50
+ "tagName": "u2-code",
51
+ "customElement": true
52
+ }
53
+ ],
54
+ "exports": [
55
+ {
56
+ "kind": "custom-element-definition",
57
+ "name": "u2-code",
58
+ "declaration": {
59
+ "name": "code",
60
+ "module": "code.js"
61
+ }
62
+ }
63
+ ]
64
+ }
65
+ ]
66
+ }
@@ -0,0 +1,35 @@
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 href="../code.css" rel=stylesheet>
12
+ <script src="../code.js" type=module async></script>
13
+
14
+ <body>
15
+
16
+
17
+ <section class="main">
18
+ <u2-code trim editable>
19
+ <script>
20
+ // Code-Element
21
+ if (de) {
22
+ alert('Hallo, Welt!');
23
+ } else {
24
+ alert('Hello, World!');
25
+ }
26
+ </script>
27
+ </u2-code>
28
+ </section>
29
+
30
+ <style class="main">
31
+ u2-code {
32
+ font-size:15px;
33
+ max-block-size:11rem;
34
+ }
35
+ </style>
@@ -0,0 +1,162 @@
1
+ <!DOCTYPE HTML>
2
+ <html lang=en>
3
+ <head>
4
+ <meta charset=utf-8>
5
+ <meta name=viewport content="width=device-width">
6
+ <title>u2-code</title>
7
+ <script src="../../../u2/tests/test-init.js" type=module async></script>
8
+
9
+ <link rel=stylesheet href="../../../css/classless/full.css">
10
+ <link rel=stylesheet href="../../../css/classless/aria.css">
11
+ <link rel=stylesheet href="../../../css/classless/simple.css">
12
+
13
+
14
+ <link href="../../../el/ico/ico.css" rel=stylesheet>
15
+ <script src="../../../el/ico/ico.js" type=module async></script>
16
+
17
+ <style>
18
+ html {
19
+ --u2-ico-dir:'https://cdn.jsdelivr.net/npm/@adobe/spectrum-css-workflow-icons@1.4.2/24/{IconName}.svg';
20
+ }
21
+ </style>
22
+
23
+ <link href="../../../el/tooltip/tooltip.css" rel=stylesheet>
24
+ <script src="../../../el/tooltip/tooltip.js" type=module async></script>
25
+
26
+ <style>
27
+ u2-tooltip {
28
+ font-size:max(12px, .7rem);
29
+ background:var(--color-text);
30
+ color:var(--color-bg);
31
+ border-radius:.3rem;
32
+ }
33
+ </style>
34
+
35
+
36
+ <link href="../code.css" rel=stylesheet >
37
+ <script src="../code.js" type=module async></script>
38
+
39
+ <style>
40
+ button::after {
41
+ display: none !important;
42
+ content: '' !important;
43
+ background: red;
44
+ }
45
+ </style>
46
+
47
+ </head>
48
+
49
+ <body>
50
+
51
+ <section>
52
+
53
+ <h2>pre > code (preferred) + buttons</h2>
54
+ <u2-code trim editable>
55
+
56
+ <pre><code>&lt;u2-code&gt;
57
+ &lt;pre&gt;
58
+ &lt;code&gt;
59
+ Shows decoded innerHTML
60
+ &lt;/code&gt;
61
+ &lt;/pre&gt;
62
+ &lt;/u2-code&gt;</code></pre>
63
+
64
+ <button slot=tools onclick="document.fullscreenElement ? document.exitFullscreen() : this.parentNode.requestFullscreen()">
65
+ <u2-ico icon=full-screen style="font-size:1.2rem"></u2-ico>
66
+ <u2-ico icon=full-screen-exit style="font-size:1.2rem"></u2-ico>
67
+ <style>
68
+ u2-code:fullscreen [icon=full-screen] { display:none }
69
+ u2-code:not(:fullscreen) [icon=full-screen-exit] { display:none }
70
+ </style>
71
+ <u2-tooltip>Fullscreen</u2-tooltip>
72
+ </button>
73
+ <button slot=tools onclick="navigator.clipboard.writeText(this.parentNode.value); this.querySelector('.-done').showFor(this)" style="bottom:0; top:auto">
74
+ <u2-ico icon=copy style="font-size:1.2rem"></u2-ico>
75
+ <span><u2-tooltip class=-done>Copied</u2-tooltip></span>
76
+ <u2-tooltip>Copy</u2-tooltip>
77
+ </button>
78
+
79
+ </u2-code>
80
+
81
+ <h2>direct, no tag</h2>
82
+ <u2-code trim editable language=html>
83
+ &lt;u2-code&gt;
84
+ Shows decoded innerHTML
85
+ &lt;/u2-code&gt;
86
+ </u2-code>
87
+
88
+ <h2>foreign element (live! innerHTML)</h2>
89
+ <u2-code element=demo trim editable language=html> </u2-code>
90
+ <div id=demo contenteditable>
91
+ <div style="padding:.5rem; border-radius:1em; background:#0004">
92
+ Change the <b>code</b> or change this box
93
+ <b style="font-size:1.3em">
94
+ directly!
95
+ </b>
96
+ </div>
97
+ </div>
98
+
99
+ <h2>Style Tag (live!)</h2>
100
+ <u2-code trim editable>
101
+ <style contenteditable>
102
+ u2-code {
103
+ padding:.5rem;
104
+ font-size:14px;
105
+ background:#fff;
106
+ box-shadow:0 0 .3rem #0003;
107
+ max-block-size:11rem;
108
+ border-radius:.5rem;
109
+ }
110
+ </style>
111
+ </u2-code>
112
+
113
+ <h2>Script Tag</h2>
114
+ <u2-code trim editable>
115
+ <script type=html>
116
+ <script type="html">
117
+ alert('Shows raw content');
118
+ alert('Exeption: /script> has to be translated to \\/script> to not break out');
119
+ <\/script>
120
+ </script>
121
+ </u2-code>
122
+
123
+ <h2>Textarea</h2>
124
+ <label>
125
+ Label
126
+
127
+ <u2-code trim>
128
+ <textarea>
129
+ &lt;u2-code&gt;
130
+ &lt;textarea&gt;
131
+ &amp;lt;u2-code&amp;gt;...
132
+ &lt;/textarea&gt;
133
+ &lt;/u2-code&gt;
134
+ </textarea>
135
+ </u2-code>
136
+
137
+ </label>
138
+
139
+ <h2>Textarea auto-height when js disabled</h2>
140
+
141
+ <label>
142
+ Label
143
+ <u2-code language=html trim style="min-block-size:140px; max-block-size:200px">
144
+
145
+ <textarea autocomplete=off autocorrect=off autocapitalize=off spellcheck=false>&lt;u2-code&gt;
146
+ For this test, you should deactivate javascript.
147
+ This u2-code element has min-height:140px; max-block-size:200px
148
+ It resizes between these values even without js (only chromium for now)
149
+ &lt;/u2-code&gt;</textarea>
150
+ </u2-code>
151
+
152
+ </label>
153
+
154
+ <!--h2>Template tag</h2>
155
+ <u2-code trim editable>
156
+ <template>
157
+ Shows parsed DOM, useful?
158
+ <input type=checkbox checked>
159
+ </template>
160
+ </u2-code-->
161
+
162
+ </section>
@@ -0,0 +1,35 @@
1
+ # &lt;u2-copy&gt; - element
2
+ Displays formatted copys
3
+
4
+ ## Usage
5
+
6
+ ```html
7
+ original: <span id=source contenteditable>Hello <b>World</b></span>
8
+ <br>
9
+ copy: <u2-copy for=source sync></u2-copy>
10
+ ```
11
+
12
+ ## Install
13
+
14
+ ```html
15
+ <link href="https://cdn.jsdelivr.net/gh/u2ui/u2@x.x.x/el/copy/copy.min.css" rel=stylesheet>
16
+ <script src="https://cdn.jsdelivr.net/gh/u2ui/u2@x.x.x/el/copy/copy.min.js" type=module async></script>
17
+ ```
18
+
19
+ ## Demos
20
+
21
+ [minimal.html](http://gcdn.li/u2ui/u2@main/el/copy/tests/minimal.html)
22
+ [test.html](http://gcdn.li/u2ui/u2@main/el/copy/tests/test.html)
23
+
24
+ ## Attributes
25
+
26
+ Attribute | Description
27
+ --- | ---
28
+ `for` | ID of the original-element, has to be present to be useful
29
+ `sync` | bool, if present changes are reflected immediately
30
+
31
+ ## About
32
+
33
+ - MIT License, Copyright (c) 2022 <u2> (like all repositories in this organization) <br>
34
+ - Suggestions, ideas, finding bugs and making pull requests make us very happy. ♥
35
+
@@ -0,0 +1,3 @@
1
+ u2-copy {
2
+ display: contents;
3
+ }