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,59 @@
1
+ # <u2-accordion> - element
2
+ rendering accordion
3
+
4
+ ## Features
5
+
6
+ - Minimal
7
+ - Use markup as usual
8
+ - Navigateable through keys
9
+ - Content is searchable (using `hidden=until-found`)
10
+
11
+ ## Usage
12
+
13
+ ```html
14
+ <u2-accordion single>
15
+ <h4>Accordion</h4>
16
+ <article>
17
+ Content 1, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna.
18
+ </article>
19
+ <h4>Component</h4>
20
+ <article>
21
+ Content 2, lorem ipsum dolor sit amet, consectetur adipisicing elit sed do eiusmod tempor incididunt.
22
+ </article>
23
+ </u2-accordion>
24
+ ```
25
+
26
+ ```css
27
+ u2-accordion {
28
+ &::part(trigger) {
29
+ background-color: #f0f0f0;
30
+ }
31
+ &::part(title) {
32
+ font-size: 1.2em;
33
+ }
34
+ &::part(icon) {
35
+ color: #f00;
36
+ }
37
+ &::part(content) {
38
+ background-color: #f8f8f8;
39
+ }
40
+ }
41
+ ```
42
+
43
+ ## Install
44
+
45
+ ```html
46
+ <link href="https://cdn.jsdelivr.net/gh/u2ui/u2@x.x.x/el/accordion/accordion.min.css" rel=stylesheet>
47
+ <script src="https://cdn.jsdelivr.net/gh/u2ui/u2@x.x.x/el/accordion/accordion.min.js" type=module async></script>
48
+ ```
49
+
50
+ ## Demos
51
+
52
+ [minimal.html](http://gcdn.li/u2ui/u2@main/el/accordion/tests/minimal.html)
53
+ [test.html](http://gcdn.li/u2ui/u2@main/el/accordion/tests/test.html)
54
+
55
+ ## About
56
+
57
+ - MIT License, Copyright (c) 2022 <u2> (like all repositories in this organization) <br>
58
+ - Suggestions, ideas, finding bugs and making pull requests make us very happy. ♥
59
+
@@ -0,0 +1,7 @@
1
+ /*
2
+ there are no style-fallbacks for accordion, as without js, they should be headings and paragraphs
3
+ */
4
+
5
+ u2-accordion:not(:defined) {
6
+ display:contents;
7
+ }
@@ -0,0 +1,258 @@
1
+ // See https://www.w3.org/TR/wai-aria-practices-1.1/#tabpanel
2
+
3
+ const icoCssUrl = import.meta.resolve('../../el/ico/ico.css');
4
+
5
+
6
+ customElements.define('u2-accordion', class extends HTMLElement {
7
+
8
+ constructor() {
9
+ super();
10
+
11
+ import('../ico/ico.js');
12
+
13
+ let shadowRoot = this.attachShadow({ mode: 'open', slotAssignment: 'manual' });
14
+ shadowRoot.innerHTML = `
15
+ <style>
16
+ @import url('${icoCssUrl}');
17
+ :host {
18
+ display:block;
19
+ --u2-ico-dir:'https://cdn.jsdelivr.net/npm/@material-icons/svg@1.0.11/svg/{icon_name}/baseline.svg';
20
+ }
21
+ :host(:active) {
22
+ xoutline:none !important;
23
+ }
24
+ #accordion {
25
+ display:flex;
26
+ flex-direction:column;
27
+ gap:0.5em;
28
+ }
29
+ .trigger {
30
+ display:flex;
31
+ align-items:baseline;
32
+ cursor:pointer;
33
+ padding-inline:1em;
34
+ padding-block:.5em;
35
+ background-color:#ddd;
36
+ background-color:var(--color-light);
37
+ & .icon {
38
+ margin-inline-start:auto;
39
+ display:flex;
40
+ transition:0.2s;
41
+
42
+ & > u2-ico {
43
+ --size:1em;
44
+ }
45
+ [aria-expanded="true"] > & {
46
+ transform:rotate(180deg);
47
+ }
48
+ }
49
+ }
50
+ .trigger:is(:focus,:active) {
51
+ xoutline:2px solid blue;
52
+ outline:--u2-focus-outline;
53
+ }
54
+ .title::slotted(*) {
55
+ margin:0 !important;
56
+ flex:1 1 auto;
57
+ font-size:1em;
58
+ }
59
+ .content {
60
+ display:block;
61
+ padding:1em;
62
+ background-color: #9999990a;
63
+
64
+ overflow:auto;
65
+ transition:.3s;
66
+ transition-behavior: allow-discrete;
67
+ }
68
+ .content[hidden="until-found"] {
69
+ content-visibility:visible;
70
+ xopacity:0;
71
+ overflow:hidden;
72
+ block-size:0;
73
+ max-block-size:0;
74
+ padding-block:0;
75
+ }
76
+ </style>
77
+ <div id=accordion role=presentation></div>
78
+ `;
79
+ this.items = this.shadowRoot.querySelector('#accordion').children;
80
+
81
+ this._onClick = this._onClick.bind(this);
82
+ this._onKeyDown = this._onKeyDown.bind(this);
83
+
84
+ this.mutationObserver = new MutationObserver(() => this._build());
85
+ }
86
+
87
+ connectedCallback() {
88
+ this._build();
89
+ this.shadowRoot.addEventListener('click', this._onClick);
90
+ this.shadowRoot.addEventListener('keydown', this._onKeyDown);
91
+ this.mutationObserver.observe(this, { childList: true });
92
+ }
93
+ disconnectedCallback() {
94
+ this.shadowRoot.removeEventListener('click', this._onClick);
95
+ this.shadowRoot.removeEventListener('keydown', this._onKeyDown);
96
+ this.mutationObserver.disconnect();
97
+ }
98
+
99
+ _build() {
100
+
101
+ const container = this.shadowRoot.querySelector('#accordion');
102
+ const icon = this.getAttribute('icon') || 'expand-more';
103
+
104
+ let hLevel = 6;
105
+ // get highest heading level
106
+ for (let node of this.children) {
107
+ if (!node.tagName.match(/^H[1-6]$/)) continue;
108
+ let level = parseInt(node.tagName[1]);
109
+ if (level < hLevel) hLevel = level;
110
+ }
111
+
112
+
113
+
114
+ let index = -1;
115
+ let activeContent = null;
116
+ let collectedContents = [];
117
+ for (let node of this.childNodes) {
118
+ if (node.tagName === 'H'+hLevel) {
119
+ activeContent && activeContent.assign(...collectedContents);
120
+ index++;
121
+ let panel = container.childNodes[index];
122
+ if (!panel) {
123
+ panel = document.createElement('div');
124
+ panel.innerHTML = `
125
+ <span class=trigger id=title${index} role=button part=trigger tabindex=0 aria-controls=content${index} aria-expanded=false>
126
+ <slot class=title part=title></slot>
127
+ <slot class=icon part=icon>
128
+ <u2-ico icon=${icon}>▾</u2-ico>
129
+ </slot>
130
+ </span>
131
+ <slot class=content id=content${index} role=region part=content hidden=until-found aria-hidden=true aria-labelledby=title${index}></slot>
132
+ `;
133
+ container.appendChild(panel);
134
+ }
135
+ const title = panel.querySelector('.title');
136
+ title.assign(node);
137
+ activeContent = panel.querySelector('.content');
138
+ collectedContents = [];
139
+ } else {
140
+ if (activeContent) collectedContents.push(node);
141
+ }
142
+ }
143
+ activeContent && activeContent.assign(...collectedContents);
144
+ }
145
+
146
+ // get selected() {
147
+ // return this._selected;
148
+ // }
149
+
150
+ // set selected(index) {
151
+ // this._selected = index;
152
+ // this._selectTab(index);
153
+ // this.setAttribute('selected', index);
154
+ // }
155
+ // _selectTab(idx = null) { // todo? merge into `set selected()`?
156
+ // [...this.items].forEach((panel, i) => {
157
+ // let select = i === idx;
158
+ // let trigger = panel.querySelector('.trigger');
159
+ // //trigger.setAttribute('tabindex', select ? 0 : -1);
160
+ // trigger.setAttribute('aria-expanded', select);
161
+ // let content = panel.querySelector('.content');
162
+ // content.setAttribute('tabindex', select ? 0 : -1);
163
+ // if (select) {
164
+ // content.removeAttribute('hidden');
165
+ // } else {
166
+ // content.setAttribute('hidden', 'until-found');
167
+ // }
168
+ // });
169
+ // }
170
+
171
+
172
+ _getTargetTriggerFromEvent(event) {
173
+ const path = event.composedPath();
174
+ const rootIndex = path.indexOf(this.shadowRoot);
175
+ if (rootIndex === -1) return;
176
+ const target = path[rootIndex - 3];
177
+ if (!target?.classList.contains('trigger')) return;
178
+ return target;
179
+ }
180
+
181
+ _focusItem(index) {
182
+ this.items[index]?.querySelector('.trigger').focus();
183
+ if (this.getAttribute('single') !== null) {
184
+ this._toggleItem(index, true);
185
+ }
186
+ }
187
+ _toggleItem(index, expand){
188
+ const panel = this.items[index];
189
+ const trigger = panel.querySelector('.trigger');
190
+ const content = panel.querySelector('.content');
191
+ expand ??= trigger.getAttribute('aria-expanded') !== 'true';
192
+ trigger.setAttribute('aria-expanded', expand);
193
+ content.setAttribute('aria-hidden', !expand);
194
+ if (expand) {
195
+ content.removeAttribute('hidden');
196
+ trigger.scrollIntoView({
197
+ behavior: 'smooth',
198
+ block: 'nearest',
199
+ inline: 'center'
200
+ });
201
+ if (this.getAttribute('single') !== null) {
202
+ [...this.items].forEach((item, i) => { i !== index && this._toggleItem(i, false); });
203
+ }
204
+ } else {
205
+ content.setAttribute('hidden', 'until-found');
206
+ }
207
+ }
208
+
209
+ _onClick(e) {
210
+ if (e.ctrlKey || e.altKey || e.metaKey) return;
211
+ const trigger = this._getTargetTriggerFromEvent(e);
212
+ if (!trigger) return;
213
+ const panel = trigger.parentElement;
214
+ const index = [...panel.parentElement.children].indexOf(panel);
215
+ // beta, should not be here but in "_selectTab"?
216
+ // let event = new CustomEvent('u2-activate', { bubbles: true, cancelable: true });
217
+ // target.dispatchEvent(event);
218
+ // if (event.defaultPrevented) return;
219
+ this._toggleItem(index);
220
+ trigger.focus();
221
+ }
222
+ _onKeyDown(e) {
223
+ if (e.ctrlKey || e.altKey || e.metaKey) return;
224
+ const trigger = this._getTargetTriggerFromEvent(e);
225
+ if (!trigger) return;
226
+ const panel = trigger.parentElement;
227
+ const idx = [...panel.parentElement.children].indexOf(panel);
228
+
229
+ const actions = {
230
+ ArrowUp: (idx) => this._focusItem(idx - 1),
231
+ ArrowDown: (idx) => this._focusItem(idx + 1),
232
+ Home: () => this._focusItem(0),
233
+ End: () => this._focusItem(this.items.length - 1),
234
+ Enter: () => this._toggleItem(idx),
235
+ Space: () => this._toggleItem(idx),
236
+ };
237
+ if (actions[e.code]) {
238
+ e.preventDefault();
239
+ actions[e.code](idx);
240
+ }
241
+ }
242
+
243
+ // static observedAttributes = ['selected'];
244
+ // attributeChangedCallback(name, oldValue, newValue) {
245
+ // if (oldValue === newValue) return;
246
+ // if (name === 'selected') this.selected = parseInt(newValue);
247
+ // }
248
+
249
+ });
250
+
251
+
252
+ // // beta, does not work if initial u2-target is already fired
253
+ // // problem: sometimes, on initial load, the event is fired before the listener is added
254
+ // document.addEventListener('u2-target', e => {
255
+ // let accordion = document.querySelectorAll('u2-accordion > :target');
256
+ // for (let tab of accordion) tab.click();
257
+ // });
258
+
@@ -0,0 +1,57 @@
1
+ {
2
+ "schemaVersion": "1.0.0",
3
+ "readme": "README.md",
4
+ "modules": [
5
+ {
6
+ "kind": "javascript-module",
7
+ "path": "accordion.js",
8
+ "declarations": [
9
+ {
10
+ "kind": "class",
11
+ "description": "",
12
+ "name": "accordion",
13
+ "members": [
14
+ ],
15
+ "events": [
16
+ ],
17
+ "attributes": [
18
+ {
19
+ "name": "single",
20
+ "description": "If true, only one panel can be open at a time and it will be opened by focus",
21
+ "u2-type": "boolean"
22
+ }
23
+ ],
24
+ "cssParts": [
25
+ {
26
+ "name": "trigger",
27
+ "description": "The header of the panel"
28
+ }, {
29
+ "name": "title",
30
+ "description": "The title inside the header of the panel"
31
+ },{
32
+ "name": "icon",
33
+ "description": "The icon inside the header of the panel"
34
+ },{
35
+ "name": "content",
36
+ "description": "The content of the panel"
37
+ }
38
+
39
+ ],
40
+ "superclass": { "name": "HTMLElement" },
41
+ "tagName": "u2-accordion",
42
+ "customElement": true
43
+ }
44
+ ],
45
+ "exports": [
46
+ {
47
+ "kind": "custom-element-definition",
48
+ "name": "u2-accordion",
49
+ "declaration": {
50
+ "name": "accordion",
51
+ "module": "accordion.js"
52
+ }
53
+ }
54
+ ]
55
+ }
56
+ ]
57
+ }
@@ -0,0 +1,44 @@
1
+ <!DOCTYPE html>
2
+ <html lang=en>
3
+ <head>
4
+ <meta charset=utf-8>
5
+ <meta name=viewport content="width=device-width">
6
+
7
+ <link href="../../../css/classless/full.css" rel=stylesheet>
8
+ <link href="../../../css/classless/simple.css" rel=stylesheet>
9
+ <link href="../../../attr/skin/skin.css" rel=stylesheet>
10
+
11
+ <link rel=stylesheet href="../accordion.css">
12
+ <script src="../accordion.js" type=module async></script>
13
+
14
+ <body>
15
+
16
+ <section class=main>
17
+ <u2-accordion single>
18
+ <h4>Accordion</h4>
19
+ <article>
20
+ Content 1, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna.
21
+ </article>
22
+ <h4>Component</h4>
23
+ <article>
24
+ Content 2, lorem ipsum dolor sit amet, consectetur adipisicing elit sed do eiusmod tempor incididunt.
25
+ </article>
26
+ </u2-accordion>
27
+ </section>
28
+
29
+ <style class=main>
30
+ u2-accordion {
31
+ &::part(trigger) {
32
+ background-color: #f0f0f0;
33
+ }
34
+ &::part(title) {
35
+ font-size: 1.2em;
36
+ }
37
+ &::part(icon) {
38
+ color: #f00;
39
+ }
40
+ &::part(content) {
41
+ background-color: #f8f8f8;
42
+ }
43
+ }
44
+ </style>
@@ -0,0 +1,168 @@
1
+ <!DOCTYPE HTML>
2
+ <html lang=en>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name=viewport content="width=device-width">
6
+
7
+ <link rel=stylesheet href="../../../css/classless/full.css">
8
+ <!--link rel=stylesheet href="../../../css/classless/aria.css"-->
9
+ <link rel=stylesheet href="../../../css/classless/simple.css">
10
+
11
+
12
+ <link rel=stylesheet href="../accordion.css">
13
+ <script src="../accordion.js" type=module async></script>
14
+
15
+ <script type=module async src=../../../attr/navigable/navigable.js crossorigin></script>
16
+
17
+ </head>
18
+
19
+ <body>
20
+
21
+ <header>
22
+ <h1>u2-accordion tests</h1>
23
+ As you use the browsers search funktion, you find the contents of the tab-panels. (chrome for now)
24
+ </header>
25
+
26
+ <section>
27
+ <h2>Simple</h2>
28
+ <u2-accordion>
29
+ Content bevore first heading
30
+ <h2>H2 as Tab</h2>
31
+ Heading Elements (h1-h6) are automatically used as accordion
32
+ <h3>H3 creates no new Panel, its always the highest heading level</h3>
33
+ <p>A Paragraph</p>
34
+ <h2>H2 as Tab</h2>
35
+ Heading Elements (h1-h6) are automatically used as accordion
36
+ <h2>Title 3, its a very long title to test the wrapping of the title text</h2>
37
+ content panel 3 <span>test</span>
38
+ <p>A Paragraph</p>
39
+ </u2-accordion>
40
+ </section>
41
+
42
+ <section>
43
+ <h2>Tablist browser-navigable accordion (beta)</h2>
44
+ <u2-accordion>
45
+ <h2 u2-navigable id="nav1">H2 as Tab</h2>
46
+ Heading Elements (h1-h6) are automatically used as accordion
47
+ If you like to use other Elements as accordion, you have to add the attribute <code>slot="title"</code
48
+ <h2 u2-navigable id="nav3">Title 3</h2>
49
+ content panel 3
50
+ </u2-accordion>
51
+ </section>
52
+
53
+ <section>
54
+ <h2>Nested</h2>
55
+ <u2-accordion>
56
+ <h2>Title 1</h2>
57
+
58
+ <u2-accordion>
59
+ <h3>Item 1.1</h3>
60
+ Item 1 content
61
+ <h3>Item 1.2</h3>
62
+ Item 2 content
63
+ <h3>Item 1.3</h3>
64
+ Item 3 content
65
+ <h3>Item 1.4</h3>
66
+ Item 1 content
67
+ </u2-accordion>
68
+
69
+ <h2>Title 2</h2>
70
+ content panel 2
71
+ </u2-accordion>
72
+ </section>
73
+
74
+ <section>
75
+ <h2>Single</h2>
76
+ <u2-accordion single>
77
+ <h2>Title 1</h2>
78
+ content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>
79
+ content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>content panel 1, huge content <br>to test scroll to the active panel <br>
80
+ <h2>Title 2</h2>
81
+ content panel 2
82
+ <h2>Title 3</h2>
83
+ content panel 3
84
+ <h2>Title</h2>
85
+ content panel 1
86
+ </u2-accordion>
87
+ </section>
88
+
89
+
90
+ <section>
91
+ <h2>Compare with details</h2>
92
+ <details name="details1">
93
+ <summary>Details 1</summary>
94
+ <div>
95
+ <details name="details2">
96
+ <summary>Details 1.1</summary>
97
+ <p>Details 1.1 content</p>
98
+ </details>
99
+ <details name="details2">
100
+ <summary>Details 1.1</summary>
101
+ <p>Details 1.1 content</p>
102
+ </details>
103
+ </div>
104
+ </details>
105
+ <details name="details1">
106
+ <summary>Details 2</summary>
107
+ Details 2 content
108
+ </details>
109
+ </section>
110
+
111
+ <style>
112
+ #styled u2-accordion {
113
+ border-radius: .5rem;
114
+ padding:.5rem;
115
+ border:1px solid;
116
+ box-shadow:var(--shadow);
117
+ background:#fff;
118
+ }
119
+ #styled u2-accordion::part(title) {
120
+ background:var(--color);
121
+ border-radius: .3rem;
122
+ color: white;
123
+ }
124
+ #styled u2-accordion::part(panels) {
125
+ background:#eee8;
126
+ }
127
+ #styled u2-accordion [role="tab"] {
128
+ padding:.5rem 1rem;
129
+ }
130
+ #styled u2-accordion [role="tab"][aria-selected="true"] {
131
+ border-bottom-color: transparent;
132
+ background:#0003;
133
+ }
134
+ #styled u2-accordion [role="tab"]:focus {
135
+ border-bottom-color: transparent;
136
+ background:#0005;
137
+ }
138
+ #styled [role=tabpanel] {
139
+ transition:.6s;
140
+ }
141
+ </style>
142
+
143
+ <section id=styled>
144
+ <h2>Nested, styled</h2>
145
+ <u2-accordion>
146
+ <h2>Title 1</h2>
147
+
148
+ <div>
149
+ <u2-accordion>
150
+ <h3>Item 1.1</h3>
151
+ <section>Item 1 content</section>
152
+ <h3>Item 1.2</h3>
153
+ <section>Item 2 content</section>
154
+ <h3>Item 1.3</h3>
155
+ <section>Item 3 content</section>
156
+ <h3>Item 1.4</h3>
157
+ <section>Item 1 content</section>
158
+ </u2-accordion>
159
+ </div>
160
+
161
+ <h2>Title 2</h2>
162
+ <section>content panel 2</section>
163
+ <h2>Title 3</h2>
164
+ <section>content panel 3</section>
165
+ <h2>Title</h2>
166
+ <section>content panel 1</section>
167
+ </u2-accordion>
168
+ </section>
@@ -0,0 +1,67 @@
1
+ # &lt;u2-alert&gt; - element
2
+ Prominent hints, alerts, and facts
3
+
4
+ ## Features
5
+
6
+ - Various variants for Success, Warn, Error, and Info alerts.
7
+ - Dismissable alerts allow user to close them.
8
+ - Support for icons within alerts.
9
+ - Customizable actions through buttons in the alert.
10
+
11
+ ## Usage
12
+
13
+ ```html
14
+ <u2-alert open variant="" dismissable icon="bug_report">
15
+ This is a dismissable alert with an custom icon.
16
+ <button slot=action>OK</button>
17
+ </u2-alert>
18
+ ```
19
+
20
+ ```css
21
+ u2-alert {
22
+ border-width: 0 0 0 3px;
23
+ }
24
+ u2-alert::part(close) {
25
+ opacity:0.3;
26
+ }
27
+ u2-alert::part(icon) {
28
+ font-size:2em;
29
+ }
30
+ ```
31
+
32
+ ## API
33
+
34
+ ### Attributes
35
+
36
+ - `variant`: Determines the type of the alert (success, warn, error, info).
37
+ - `dismissable`: Allows the alert to be closed by the user.
38
+ - `icon`: Adds an icon to the alert, if not set, the icon will be determined by the variant.
39
+ - `open`: Determines if the alert is visible or not.
40
+
41
+ ### Slots
42
+
43
+ - `action`: Buttons that will be placed at the bottom of the alert.
44
+
45
+ ### CSS
46
+
47
+ --color: The color of the alert, if not set, it will be determined by the variant.
48
+ ::part(close): The close button.
49
+ ::part(icon): The icon.
50
+
51
+ ## Install
52
+
53
+ ```html
54
+ <link href="https://cdn.jsdelivr.net/gh/u2ui/u2@x.x.x/el/alert/alert.min.css" rel=stylesheet>
55
+ <script src="https://cdn.jsdelivr.net/gh/u2ui/u2@x.x.x/el/alert/alert.min.js" type=module async></script>
56
+ ```
57
+
58
+ ## Demos
59
+
60
+ [minimal.html](http://gcdn.li/u2ui/u2@main/el/alert/tests/minimal.html)
61
+ [test.html](http://gcdn.li/u2ui/u2@main/el/alert/tests/test.html)
62
+
63
+ ## About
64
+
65
+ - MIT License, Copyright (c) 2022 <u2> (like all repositories in this organization) <br>
66
+ - Suggestions, ideas, finding bugs and making pull requests make us very happy. ♥
67
+