u2ui 1.0.1 → 1.4.5

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 (591) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +36 -36
  3. package/attr/behavior/README.md +6 -4
  4. package/attr/behavior/behavior.js +265 -261
  5. package/attr/behavior/manifest.json +42 -42
  6. package/attr/confirm/README.md +8 -8
  7. package/attr/confirm/confirm.js +86 -90
  8. package/attr/confirm/manifest.json +42 -42
  9. package/attr/disableif/README.md +37 -0
  10. package/attr/disableif/disableif.js +59 -0
  11. package/attr/disableif/manifest.json +38 -0
  12. package/attr/draghandle/README.md +15 -15
  13. package/attr/draghandle/draghandle.js +24 -42
  14. package/attr/draghandle/manifest.json +30 -0
  15. package/attr/dropzone/README.md +32 -0
  16. package/attr/dropzone/dropzone.js +485 -0
  17. package/attr/dropzone/manifest.json +36 -0
  18. package/attr/focusgroup/README.md +9 -9
  19. package/attr/focusgroup/focusgroup.js +97 -100
  20. package/attr/focusgroup/manifest.json +30 -38
  21. package/attr/href/README.md +5 -5
  22. package/attr/href/href.js +50 -42
  23. package/attr/href/manifest.json +42 -42
  24. package/attr/intersect/README.md +15 -15
  25. package/attr/intersect/intersect.js +98 -98
  26. package/attr/intersect/manifest.json +44 -57
  27. package/attr/lightbox/README.md +27 -0
  28. package/attr/lightbox/lightbox.js +120 -0
  29. package/attr/lightbox/manifest.json +29 -0
  30. package/attr/movable/README.md +27 -0
  31. package/attr/movable/manifest.json +47 -0
  32. package/attr/movable/movable.js +111 -0
  33. package/attr/navigable/README.md +9 -9
  34. package/attr/navigable/TargetObserver.js +90 -91
  35. package/attr/navigable/U2TargetObserver.js +75 -75
  36. package/attr/navigable/manifest.json +34 -42
  37. package/attr/navigable/navigable.js +85 -87
  38. package/attr/parallax/README.md +10 -10
  39. package/attr/parallax/manifest.json +36 -0
  40. package/attr/parallax/parallax.js +119 -119
  41. package/attr/scrollspy/README.md +43 -0
  42. package/attr/scrollspy/manifest.json +28 -0
  43. package/attr/scrollspy/scrollspy.js +85 -0
  44. package/attr/selectable/README.md +42 -0
  45. package/attr/selectable/SelectionManager.js +171 -0
  46. package/attr/selectable/manifest.json +33 -0
  47. package/attr/selectable/selectable.js +28 -0
  48. package/attr/skin/README.md +15 -16
  49. package/attr/skin/manifest.json +40 -0
  50. package/attr/skin/skin.css +49 -50
  51. package/attr/store/README.md +41 -0
  52. package/attr/store/manifest.json +28 -0
  53. package/attr/store/store.js +62 -0
  54. package/class/badge/README.md +2 -2
  55. package/class/badge/badge.css +34 -34
  56. package/class/card/README.md +51 -0
  57. package/class/card/card.css +31 -0
  58. package/class/flex/README.md +16 -16
  59. package/class/flex/flex.css +15 -25
  60. package/class/grid/README.md +18 -18
  61. package/class/grid/grid.css +38 -40
  62. package/class/reset/README.md +6 -6
  63. package/class/reset/reset.css +8 -8
  64. package/class/table/README.md +22 -21
  65. package/class/table/table.css +125 -125
  66. package/class/unstyle/README.md +7 -5
  67. package/class/unstyle/unstyle.css +14 -12
  68. package/class/width/README.md +18 -18
  69. package/class/width/width.css +21 -22
  70. package/css/README.md +11 -0
  71. package/css/base/README.md +8 -2
  72. package/css/base/base.css +153 -127
  73. package/css/base/beta.css +34 -50
  74. package/css/base/full.css +5 -5
  75. package/css/base/nomotion.css +8 -8
  76. package/css/base/print.css +36 -36
  77. package/css/classless/README.md +10 -4
  78. package/css/classless/aria.css +51 -64
  79. package/css/classless/classless.css +118 -124
  80. package/css/classless/full.css +11 -11
  81. package/css/classless/more.css +314 -340
  82. package/css/classless/simple.css +314 -103
  83. package/css/classless/snippeds/a/icons.css +66 -12
  84. package/css/classless/snippeds/a/tests.html +118 -0
  85. package/css/classless/snippeds/blockquote/big-quotes.css +36 -0
  86. package/css/classless/snippeds/blockquote/tests.html +62 -0
  87. package/css/classless/snippeds/button/square.css +22 -0
  88. package/css/classless/snippeds/button/tests.html +53 -0
  89. package/css/classless/snippeds/experiments/aria-header-nav-dropdown.css +46 -0
  90. package/css/classless/snippeds/hr/gradient.css +2 -2
  91. package/css/classless/snippeds/hr/section_sign.css +16 -16
  92. package/css/classless/snippeds/hr/tests.html +49 -49
  93. package/css/classless/snippeds/p/indent.css +9 -0
  94. package/css/classless/snippeds/p/initial.css +9 -0
  95. package/css/classless/snippeds/p/tests.html +60 -0
  96. package/css/classless/variables.css +132 -99
  97. package/css/norm/README.md +7 -1
  98. package/css/norm/beta.css +41 -39
  99. package/css/norm/norm.css +89 -98
  100. package/css/norm/oldies.css +71 -60
  101. package/css/{classes → utils}/README.md +10 -4
  102. package/css/{classes/classes.css → utils/utils.css} +78 -78
  103. package/el/accordion/README.md +60 -59
  104. package/el/accordion/accordion.css +11 -7
  105. package/el/accordion/accordion.js +211 -258
  106. package/el/accordion/manifest.json +44 -57
  107. package/el/alert/README.md +86 -67
  108. package/el/alert/alert.css +72 -73
  109. package/el/alert/alert.js +206 -187
  110. package/el/alert/manifest.json +59 -77
  111. package/el/breadcrumb/README.md +41 -0
  112. package/el/breadcrumb/breadcrumb.css +22 -0
  113. package/el/breadcrumb/breadcrumb.js +119 -0
  114. package/el/breadcrumb/manifest.json +42 -0
  115. package/el/buttongroup/README.md +36 -36
  116. package/el/buttongroup/buttongroup.css +38 -30
  117. package/el/buttongroup/buttongroup.js +68 -56
  118. package/el/buttongroup/manifest.json +28 -0
  119. package/el/bytes/README.md +4 -4
  120. package/el/bytes/bytes.css +6 -6
  121. package/el/bytes/bytes.js +98 -97
  122. package/el/bytes/manifest.json +90 -95
  123. package/el/calendar/README.md +64 -0
  124. package/el/calendar/calendar.css +36 -0
  125. package/el/calendar/calendar.js +391 -0
  126. package/el/calendar/ext/drag.js +69 -0
  127. package/el/calendar/ext/keyNavigation.js +101 -0
  128. package/el/calendar/manifest.json +69 -0
  129. package/el/carousel/README.md +14 -14
  130. package/el/carousel/carousel.css +45 -46
  131. package/el/carousel/carousel.js +398 -371
  132. package/el/carousel/manifest.json +44 -58
  133. package/el/carousel-nav/README.md +13 -14
  134. package/el/carousel-nav/carousel-nav.js +74 -74
  135. package/el/carousel-nav/manifest.json +31 -0
  136. package/el/chart/README.md +46 -0
  137. package/el/chart/chart.css +7 -0
  138. package/el/chart/chart.js +188 -0
  139. package/el/chart/engines/apexcharts.js +103 -0
  140. package/el/chart/engines/billboard.js +79 -0
  141. package/el/chart/engines/chart.js.js +32 -0
  142. package/el/chart/engines/chartist.js +74 -0
  143. package/el/chart/engines/echarts.js +65 -0
  144. package/el/chart/engines/frappe.js +49 -0
  145. package/el/chart/engines/nvd3.js +139 -0
  146. package/el/chart/engines/plotly.js +73 -0
  147. package/el/chart/manifest.json +54 -0
  148. package/el/code/README.md +21 -21
  149. package/el/code/code.css +46 -46
  150. package/el/code/code.js +291 -289
  151. package/el/code/manifest.json +59 -66
  152. package/el/cookiebanner/README.md +70 -0
  153. package/el/cookiebanner/cookiebanner.css +42 -0
  154. package/el/cookiebanner/cookiebanner.js +161 -0
  155. package/el/cookiebanner/extensions/googleConsentMode.js +36 -0
  156. package/el/cookiebanner/knownItems.js +291 -0
  157. package/el/cookiebanner/manifest.json +85 -0
  158. package/el/cookiebanner/ui.js +426 -0
  159. package/el/copy/README.md +9 -7
  160. package/el/copy/copy.css +3 -3
  161. package/el/copy/copy.js +89 -117
  162. package/el/copy/manifest.json +37 -49
  163. package/el/counter/README.md +12 -9
  164. package/el/counter/counter.css +8 -8
  165. package/el/counter/counter.js +96 -95
  166. package/el/counter/manifest.json +50 -59
  167. package/el/drawer/README.md +35 -0
  168. package/el/drawer/drawer.css +77 -0
  169. package/el/drawer/drawer.js +166 -0
  170. package/el/drawer/manifest.json +27 -0
  171. package/el/fields/README.md +34 -0
  172. package/el/fields/fields.css +5 -0
  173. package/el/fields/fields.js +133 -0
  174. package/el/fields/manifest.json +32 -0
  175. package/el/ico/README.md +119 -118
  176. package/el/ico/debug.js +86 -0
  177. package/el/ico/font/Font Awesome.css +22 -22
  178. package/el/ico/font/LigatureSymbols.css +7 -7
  179. package/el/ico/font/Material Icons.css +6 -6
  180. package/el/ico/font/RemixFilled.css +8 -8
  181. package/el/ico/font/RemixOutlined.css +8 -8
  182. package/el/ico/font/old/anicons.css +31 -31
  183. package/el/ico/font/old/devicons.css +210 -210
  184. package/el/ico/font/old/material.all.css +36 -36
  185. package/el/ico/font/old/remix.css +15 -15
  186. package/el/ico/font/old/utf8.css +54 -54
  187. package/el/ico/ico.css +122 -110
  188. package/el/ico/ico.js +163 -189
  189. package/el/ico/manifest.json +68 -86
  190. package/el/input/README.md +41 -39
  191. package/el/input/input.css +95 -35
  192. package/el/input/input.js +682 -331
  193. package/el/input/manifest.json +54 -0
  194. package/el/maintitlebar/README.md +39 -0
  195. package/el/maintitlebar/maintitlebar.css +40 -0
  196. package/el/maintitlebar/maintitlebar.js +17 -0
  197. package/el/maintitlebar/manifest.json +32 -0
  198. package/el/masonry/README.md +19 -19
  199. package/el/masonry/manifest.json +49 -60
  200. package/el/masonry/masonry.css +27 -27
  201. package/el/masonry/masonry.js +93 -92
  202. package/el/menubutton/README.md +39 -0
  203. package/el/menubutton/manifest.json +44 -0
  204. package/el/{splitbutton/splitbutton.css → menubutton/menubutton.css} +51 -47
  205. package/el/menubutton/menubutton.js +90 -0
  206. package/el/number/README.md +9 -6
  207. package/el/number/manifest.json +162 -121
  208. package/el/number/number.css +6 -6
  209. package/el/number/number.js +67 -67
  210. package/el/out/README.md +5 -5
  211. package/el/out/manifest.json +26 -38
  212. package/el/out/out.css +2 -2
  213. package/el/out/out.js +42 -59
  214. package/el/pagination/README.md +32 -0
  215. package/el/pagination/manifest.json +47 -0
  216. package/el/pagination/pagination.css +27 -0
  217. package/el/pagination/pagination.js +147 -0
  218. package/el/parallax-bg/README.md +26 -6
  219. package/el/parallax-bg/manifest.json +32 -0
  220. package/el/parallax-bg/parallax-bg.css +13 -13
  221. package/el/parallax-bg/parallax-bg.js +197 -186
  222. package/el/qrcode/README.md +7 -7
  223. package/el/qrcode/manifest.json +32 -43
  224. package/el/qrcode/package.json +22 -22
  225. package/el/qrcode/qrcode.css +13 -13
  226. package/el/qrcode/qrcode.js +53 -45
  227. package/el/rating/README.md +9 -20
  228. package/el/rating/manifest.json +52 -65
  229. package/el/rating/rating.css +10 -10
  230. package/el/rating/rating.js +148 -139
  231. package/el/responsive/README.md +43 -0
  232. package/el/responsive/manifest.json +41 -0
  233. package/el/responsive/responsive.css +4 -0
  234. package/el/responsive/responsive.js +143 -0
  235. package/el/rte/README.md +10 -10
  236. package/el/rte/manifest.json +33 -0
  237. package/el/rte/rte.css +9 -9
  238. package/el/rte/rte.js +56 -56
  239. package/el/skeleton/README.md +3 -3
  240. package/el/skeleton/manifest.json +37 -51
  241. package/el/skeleton/skeleton.css +67 -60
  242. package/el/skeleton/skeleton.js +71 -72
  243. package/el/splitpanel/README.md +33 -13
  244. package/el/splitpanel/manifest.json +36 -49
  245. package/el/splitpanel/splitpanel.css +20 -17
  246. package/el/splitpanel/splitpanel.js +117 -116
  247. package/el/spot/README.md +36 -0
  248. package/el/spot/manifest.json +55 -0
  249. package/el/spot/spot.css +23 -0
  250. package/el/spot/spot.js +106 -0
  251. package/el/system/README.md +29 -0
  252. package/el/system/demoHtml.html +660 -0
  253. package/el/system/manifest.json +32 -0
  254. package/el/system/styler.js +661 -0
  255. package/el/system/system.js +84 -0
  256. package/el/table/README.md +80 -68
  257. package/el/table/ext/autoFormatTable.js +228 -0
  258. package/el/table/manifest.json +32 -43
  259. package/el/table/table.css +4 -59
  260. package/el/table/table.js +468 -194
  261. package/el/tabs/README.md +17 -17
  262. package/el/tabs/manifest.json +44 -59
  263. package/el/tabs/tabs.css +22 -22
  264. package/el/tabs/tabs.js +192 -210
  265. package/el/textfit/README.md +7 -7
  266. package/el/textfit/manifest.json +33 -45
  267. package/el/textfit/textfit.css +5 -5
  268. package/el/textfit/textfit.js +80 -80
  269. package/el/time/README.md +6 -5
  270. package/el/time/manifest.json +79 -118
  271. package/el/time/time.js +179 -168
  272. package/el/toc/README.md +27 -0
  273. package/el/toc/manifest.json +36 -0
  274. package/el/toc/toc.css +3 -0
  275. package/el/toc/toc.js +85 -0
  276. package/el/tooltip/README.md +13 -10
  277. package/el/tooltip/manifest.json +56 -69
  278. package/el/tooltip/tooltip.css +100 -97
  279. package/el/tooltip/tooltip.js +146 -82
  280. package/el/tree/README.md +133 -0
  281. package/el/tree/ext/dnd.js +53 -0
  282. package/el/tree/ext/item.js +35 -0
  283. package/el/tree/manifest.json +61 -0
  284. package/el/tree/tree.css +18 -0
  285. package/el/tree/tree.js +236 -0
  286. package/el/typewriter/README.md +11 -11
  287. package/el/typewriter/manifest.json +45 -66
  288. package/el/typewriter/typewriter.css +6 -6
  289. package/el/typewriter/typewriter.js +161 -166
  290. package/el/video/README.md +37 -0
  291. package/el/video/manifest.json +96 -0
  292. package/el/video/video.js +550 -0
  293. package/js/Placer/Placer.js +156 -156
  294. package/js/Placer/README.md +14 -16
  295. package/js/PointerObserver/PointerObserver-no-scroll.js +146 -0
  296. package/js/PointerObserver/PointerObserver.js +161 -130
  297. package/js/PointerObserver/README.md +6 -7
  298. package/js/SelectorObserver/README.md +9 -9
  299. package/js/SelectorObserver/SelectorObserver.js +199 -200
  300. package/js/Tour/README.md +56 -0
  301. package/js/Tour/Tour.js +156 -0
  302. package/js/contextmenu/README.md +6 -31
  303. package/js/contextmenu/contextmenu.js +338 -336
  304. package/js/dialog/README.md +8 -7
  305. package/js/dialog/dialog.js +228 -261
  306. package/js/drag/README.md +28 -0
  307. package/js/drag/drag.js +38 -0
  308. package/js/drag/indicateDrop.js +80 -0
  309. package/js/loading/README.md +24 -0
  310. package/js/loading/loading.js +139 -0
  311. package/js/navigator/README.md +26 -0
  312. package/js/navigator/navigator.js +430 -0
  313. package/js/navigator/url-change-event.js +29 -0
  314. package/js/rte/README.md +13 -14
  315. package/js/rte/old/NodeCleaner.js +315 -315
  316. package/js/rte/old/Rte/Rte.ui.mjs +154 -154
  317. package/js/rte/old/Rte/index.mjs +5 -5
  318. package/js/rte/old/Rte/main.css +189 -189
  319. package/js/rte/old/old.rte.js +131 -131
  320. package/js/rte/old/range-selection.old.js +394 -394
  321. package/js/rte/rte.js +7 -7
  322. package/js/rte/src/behavior.js +228 -228
  323. package/js/rte/src/events.js +73 -73
  324. package/js/rte/src/fixes.js +250 -250
  325. package/js/rte/src/range.js +469 -472
  326. package/js/rte/src/rte.js +71 -71
  327. package/js/rte/src/ui/items/ai.js +166 -167
  328. package/js/rte/src/ui/items/code.js +93 -93
  329. package/js/rte/src/ui/items/undo.js +183 -183
  330. package/js/rte/src/ui.items.js +6 -7
  331. package/js/rte/src/ui.js +268 -268
  332. package/js/rte/src/util/indentHtml.js +21 -15
  333. package/js/serviceWorker/README.md +17 -0
  334. package/js/serviceWorker/serviceWorker.js +84 -0
  335. package/js/serviceWorker/sw.js +221 -0
  336. package/js/shortcut/README.md +6 -6
  337. package/js/shortcut/shortcut.js +53 -89
  338. package/package.json +2 -4
  339. package/theme/brutalist/README.md +10 -0
  340. package/theme/brutalist/theme.css +98 -0
  341. package/theme/elegance/README.md +10 -0
  342. package/theme/elegance/theme.css +120 -0
  343. package/theme/luxury/README.md +10 -0
  344. package/theme/luxury/theme.css +107 -0
  345. package/theme/minimalism/README.md +10 -0
  346. package/theme/minimalism/theme.css +103 -0
  347. package/theme/natur/README.md +10 -0
  348. package/theme/natur/theme.css +101 -0
  349. package/theme/pastell/README.md +10 -0
  350. package/theme/pastell/theme.css +99 -0
  351. package/theme/pop/README.md +10 -0
  352. package/theme/pop/theme.css +101 -0
  353. package/theme/prompt.css +175 -0
  354. package/theme/retro/README.md +10 -0
  355. package/theme/retro/theme.css +99 -0
  356. package/theme/soft/README.md +10 -0
  357. package/theme/soft/theme.css +84 -0
  358. package/theme/tech/README.md +10 -0
  359. package/theme/tech/theme.css +98 -0
  360. package/theme/test/README.md +10 -0
  361. package/theme/test/theme.css +109 -0
  362. package/theme/test.html +284 -0
  363. package/theme/tmp/README.md +10 -0
  364. package/theme/tmp/theme.css +323 -0
  365. package/u2/auto.js +156 -161
  366. package/u2/auto.ui.js +82 -85
  367. package/u2/plan-scoped-refactoring.md +236 -0
  368. package/u2/projects.json +757 -467
  369. package/u2/tools/baseElement.js +217 -95
  370. package/u2/tools/baseElement.test.html +139 -119
  371. package/u2/tools/ce-inspector.js +307 -307
  372. package/u2/tools/ce-inspector.test.html +67 -65
  373. package/u2/tools/ce-manfest-from-element.js +207 -207
  374. package/u2/tools/dev-iframe.js +212 -213
  375. package/u2/tools/dev-iframe.test.html +72 -74
  376. package/u2/tools/eventsExplorer.js +102 -101
  377. package/u2/tools/logo/u1.svg +9 -9
  378. package/u2/tools/promiseElementById.js +14 -0
  379. package/u2/tools/update.repos.json.js +259 -234
  380. package/u2/tools/update.skill.js +176 -0
  381. package/u2/tools/variable-styler.js +317 -0
  382. package/u2/u2.js +30 -14
  383. package/u2/utils.js +61 -59
  384. package/.htaccess +0 -7
  385. package/attr/behavior/tests/minimal.html +0 -19
  386. package/attr/behavior/tests/test.html +0 -98
  387. package/attr/confirm/tests/minimal.html +0 -23
  388. package/attr/confirm/tests/test.html +0 -79
  389. package/attr/draghandle/tests/minimal.html +0 -44
  390. package/attr/focusgroup/tests/minimal.html +0 -27
  391. package/attr/focusgroup/tests/test.html +0 -154
  392. package/attr/href/tests/minimal.html +0 -17
  393. package/attr/href/tests/test.html +0 -70
  394. package/attr/intersect/tests/minimal.html +0 -30
  395. package/attr/intersect/tests/test.html +0 -64
  396. package/attr/navigable/tests/U1TargetObserver.html +0 -56
  397. package/attr/navigable/tests/minimal.html +0 -17
  398. package/attr/navigable/tests/targetObserver.html +0 -106
  399. package/attr/navigable/tests/test.html +0 -84
  400. package/attr/parallax/tests/minimal.html +0 -25
  401. package/attr/parallax/tests/performance.html +0 -102
  402. package/attr/parallax/tests/test.html +0 -108
  403. package/attr/skin/tests/minimal.html +0 -34
  404. package/attr/skin/tests/test.html +0 -96
  405. package/class/badge/tests/minimal.html +0 -17
  406. package/class/badge/tests/test.html +0 -112
  407. package/class/card1/README.md +0 -45
  408. package/class/card1/card1.css +0 -30
  409. package/class/card1/tests/minimal.html +0 -33
  410. package/class/card1/tests/test.html +0 -78
  411. package/class/flex/tests/minimal.html +0 -31
  412. package/class/flex/tests/test.html +0 -58
  413. package/class/grid/tests/minimal.html +0 -34
  414. package/class/grid/tests/test.html +0 -78
  415. package/class/input/README.md +0 -49
  416. package/class/input/input.css +0 -33
  417. package/class/input/tests/minimal.html +0 -39
  418. package/class/input/tests/test.html +0 -29
  419. package/class/reset/tests/minimal.html +0 -23
  420. package/class/table/tests/minimal.html +0 -40
  421. package/class/table/tests/test.html +0 -226
  422. package/class/unstyle/tests/minimal.html +0 -22
  423. package/class/unstyle/tests/test.html +0 -32
  424. package/class/width/tests/minimal.html +0 -27
  425. package/class/width/tests/test.html +0 -101
  426. package/css/base/tests/nomotion.html +0 -89
  427. package/css/base/tests/test.html +0 -539
  428. package/css/classes/tests/test.html +0 -63
  429. package/css/classless/snippeds/experiments/conventions.css +0 -41
  430. package/css/classless/tests/aria.html +0 -101
  431. package/css/classless/tests/foreign/classless-almond.css.html +0 -445
  432. package/css/classless/tests/foreign/classless-classless.css.html +0 -831
  433. package/css/classless/tests/foreign/classless-mvp.html +0 -415
  434. package/css/classless/tests/foreign/classless.sakura.html +0 -224
  435. package/css/classless/tests/foreign/stylestage.dev.html +0 -304
  436. package/css/classless/tests/foreign/test-homogenizer.html +0 -433
  437. package/css/classless/tests/foreign/test-html5-elements-tester.html +0 -956
  438. package/css/classless/tests/foreign/test-opinionated_css.html +0 -148
  439. package/css/classless/tests/list-bullet.html +0 -110
  440. package/css/classless/tests/more.html +0 -246
  441. package/css/classless/tests/oklch.experiments.html +0 -280
  442. package/css/classless/tests/test.html +0 -106
  443. package/css/classless/tests/variables.html +0 -109
  444. package/css/norm/tests/test.html +0 -434
  445. package/css/norm/tests/test.js +0 -103
  446. package/el/accordion/tests/minimal.html +0 -44
  447. package/el/accordion/tests/test.html +0 -168
  448. package/el/alert/alert copy.js +0 -224
  449. package/el/alert/tests/minimal.html +0 -36
  450. package/el/alert/tests/test.html +0 -105
  451. package/el/buttongroup/tests/minimal.html +0 -31
  452. package/el/buttongroup/tests/test.html +0 -83
  453. package/el/bytes/tests/minimal.html +0 -19
  454. package/el/bytes/tests/test.html +0 -117
  455. package/el/carousel/tests/experiments.html +0 -77
  456. package/el/carousel/tests/minimal.html +0 -31
  457. package/el/carousel/tests/nested.html +0 -54
  458. package/el/carousel/tests/test.html +0 -136
  459. package/el/carousel-nav/tests/minimal.html +0 -32
  460. package/el/carousel-nav/tests/test.html +0 -59
  461. package/el/code/tests/minimal.html +0 -35
  462. package/el/code/tests/test.html +0 -162
  463. package/el/copy/tests/minimal.html +0 -21
  464. package/el/copy/tests/test.html +0 -75
  465. package/el/counter/tests/minimal.html +0 -27
  466. package/el/counter/tests/test.html +0 -106
  467. package/el/ico/tests/combinations.html +0 -86
  468. package/el/ico/tests/emojis.html +0 -213
  469. package/el/ico/tests/fonts.html +0 -110
  470. package/el/ico/tests/ico-directory.html +0 -254
  471. package/el/ico/tests/minimal.html +0 -46
  472. package/el/ico/tests/test.html +0 -210
  473. package/el/ico/tests/util-multi.svg +0 -6
  474. package/el/ico/tests/util.css +0 -2
  475. package/el/ico/tests/util.js +0 -110
  476. package/el/input/tests/formParticipation.html +0 -113
  477. package/el/input/tests/minimal.html +0 -33
  478. package/el/input/tests/test.html +0 -258
  479. package/el/masonry/tests/minimal.html +0 -39
  480. package/el/masonry/tests/test.html +0 -42
  481. package/el/number/tests/minimal.html +0 -25
  482. package/el/number/tests/test.html +0 -138
  483. package/el/out/tests/minimal.html +0 -25
  484. package/el/out/tests/test.html +0 -37
  485. package/el/parallax-bg/tests/bg.jpg +0 -0
  486. package/el/parallax-bg/tests/bg1.jpg +0 -0
  487. package/el/parallax-bg/tests/bg2.jpg +0 -0
  488. package/el/parallax-bg/tests/demo.html +0 -88
  489. package/el/parallax-bg/tests/minimal.html +0 -30
  490. package/el/parallax-bg/tests/test.html +0 -64
  491. package/el/parallax-bg/tests/visible.html +0 -90
  492. package/el/qrcode/tests/minimal.html +0 -26
  493. package/el/qrcode/tests/test.html +0 -31
  494. package/el/rating/tests/minimal.html +0 -26
  495. package/el/rating/tests/tests.html +0 -77
  496. package/el/rte/tests/minimal.html +0 -25
  497. package/el/rte/tests/test.html +0 -37
  498. package/el/skeleton/tests/minimal.html +0 -22
  499. package/el/skeleton/tests/test.html +0 -22
  500. package/el/splitbutton/README.md +0 -39
  501. package/el/splitbutton/splitbutton.js +0 -26
  502. package/el/splitbutton/tests/minimal.html +0 -30
  503. package/el/splitbutton/tests/test.html +0 -68
  504. package/el/splitpanel/tests/minimal.html +0 -31
  505. package/el/splitpanel/tests/tests.html +0 -121
  506. package/el/table/tests/minimal.html +0 -38
  507. package/el/table/tests/test.html +0 -108
  508. package/el/tabs/tests/minimal.html +0 -35
  509. package/el/tabs/tests/test.html +0 -180
  510. package/el/textfit/tests/minimal.html +0 -25
  511. package/el/textfit/tests/test.html +0 -26
  512. package/el/time/tests/minimal.html +0 -19
  513. package/el/time/tests/test.html +0 -160
  514. package/el/time/time copy.js +0 -141
  515. package/el/time/time.old.uhtml.js +0 -129
  516. package/el/tooltip/tests/minimal.html +0 -25
  517. package/el/tooltip/tests/test.html +0 -178
  518. package/el/tree1/README.md +0 -111
  519. package/el/tree1/manifest.json +0 -78
  520. package/el/tree1/tests/animated.html +0 -134
  521. package/el/tree1/tests/custom.html +0 -51
  522. package/el/tree1/tests/minimal.html +0 -44
  523. package/el/tree1/tests/test.html +0 -260
  524. package/el/tree1/tree1.css +0 -26
  525. package/el/tree1/tree1.js +0 -265
  526. package/el/typewriter/tests/minimal.html +0 -25
  527. package/el/typewriter/tests/test.html +0 -78
  528. package/js/Placer/tests/minimal.html +0 -34
  529. package/js/Placer/tests/test.html +0 -49
  530. package/js/PointerObserver/tests/minimal.html +0 -29
  531. package/js/PointerObserver/tests/test.html +0 -35
  532. package/js/SelectorObserver/tests/minimal.html +0 -21
  533. package/js/SelectorObserver/tests/test.html +0 -57
  534. package/js/SelectorObserver/tests/tests.html +0 -161
  535. package/js/contextmenu/tests/minimal.html +0 -44
  536. package/js/contextmenu/tests/test.html +0 -131
  537. package/js/dialog/tests/minimal.html +0 -29
  538. package/js/dialog/tests/notification.mp3 +0 -0
  539. package/js/dialog/tests/test.html +0 -135
  540. package/js/rte/tests/ai.html +0 -81
  541. package/js/rte/tests/behavior.html +0 -88
  542. package/js/rte/tests/events.html +0 -69
  543. package/js/rte/tests/fixes.html +0 -95
  544. package/js/rte/tests/minimal.html +0 -34
  545. package/js/rte/tests/notes.md +0 -6
  546. package/js/rte/tests/range.html +0 -167
  547. package/js/rte/tests/selection-explorer.html +0 -222
  548. package/js/rte/tests/test.html +0 -92
  549. package/js/shortcut/tests/minimal.html +0 -23
  550. package/js/shortcut/tests/test.html +0 -68
  551. package/u2/experiments/Waiter/test.html +0 -132
  552. package/u2/experiments/getElementByIdPromise/test.html +0 -76
  553. package/u2/experiments/patchInputValue.html +0 -124
  554. package/u2/experiments/radiobutton/test.html +0 -75
  555. package/u2/experiments/tests/test.html +0 -223
  556. package/u2/experiments/u1-responsive/responsive.js +0 -62
  557. package/u2/experiments/u1-responsive/test.html +0 -65
  558. package/u2/experiments/u2Element.js +0 -139
  559. package/u2/experiments/u2Element.test.html +0 -47
  560. package/u2/old-stuff/IterableWeakMap/mod.js +0 -70
  561. package/u2/old-stuff/css/onStyleSheet/mod.js +0 -114
  562. package/u2/old-stuff/css/onStyleSheet/monkeypatches.js +0 -28
  563. package/u2/old-stuff/css/onStyleSheet/test/include.css +0 -19
  564. package/u2/old-stuff/css/onStyleSheet/test/style-has-include.css +0 -6
  565. package/u2/old-stuff/css/onStyleSheet/test/style-no-include.css +0 -3
  566. package/u2/old-stuff/css/onStyleSheet/test/test.html +0 -48
  567. package/u2/old-stuff/css/parser/mod.js +0 -182
  568. package/u2/old-stuff/css/parser/parser_old/mod.js +0 -128
  569. package/u2/old-stuff/css/parser/parser_old/test.html +0 -43
  570. package/u2/old-stuff/css/parser/parser_old/util.js +0 -22
  571. package/u2/old-stuff/css/parser/style.html +0 -52
  572. package/u2/old-stuff/css/parser/test.html +0 -38
  573. package/u2/old-stuff/el/ai-texter/README.md +0 -23
  574. package/u2/old-stuff/el/ai-texter/ai-texter.css +0 -12
  575. package/u2/old-stuff/el/ai-texter/ai-texter.js +0 -153
  576. package/u2/old-stuff/el/ai-texter/tests/minimal.html +0 -47
  577. package/u2/old-stuff/el/ai-texter/tests/test.html +0 -71
  578. package/u2/old-stuff/init.js +0 -38
  579. package/u2/old-stuff/markHashLinks.js +0 -51
  580. package/u2/old-stuff/onElement/mod.js +0 -73
  581. package/u2/old-stuff/test-helpers/mod.js +0 -36
  582. package/u2/old-stuff/test-helpers/test.html +0 -4
  583. package/u2/old-stuff/tests/init.js.html +0 -51
  584. package/u2/old-stuff/viewport.js +0 -64
  585. package/u2/tests/boilerplate.html +0 -46
  586. package/u2/tests/kacheln.html +0 -245
  587. package/u2/tests/showcase.html +0 -270
  588. package/u2/tests/showcase2.html +0 -157
  589. package/u2/tests/test-init.js +0 -35
  590. package/u2/tests/test.html +0 -355
  591. package/u2/tools/logo/u1ui.svg +0 -6
@@ -0,0 +1,84 @@
1
+ // Zentrale Registration - nur einmal aufrufen
2
+ export async function register(options = {}) {
3
+ if (!('serviceWorker' in navigator)) return null;
4
+
5
+ try {
6
+ // Warten auf load event
7
+ if (document.readyState !== 'complete') {
8
+ console.log('not "load" yet, wait for register')
9
+ await new Promise(resolve => {
10
+ addEventListener('load', resolve, { once: true });
11
+ });
12
+ }
13
+
14
+ const registration = await navigator.serviceWorker.register('../sw.js', { // '.. ???? im selben verzeichnis'
15
+ scope: options.scope || '/'
16
+ });
17
+
18
+ console.log('✅ SW registered');
19
+ console.log(' Scope:', registration.scope);
20
+ console.log(' Active:', registration.active?.state);
21
+
22
+
23
+ navigator.serviceWorker.ready.then(async (readyReg) => {
24
+ await registration.navigationPreload.enable();
25
+ });
26
+
27
+ registration.update(); // Updates checken, macht das sinn?
28
+ setInterval(() => registration.update(), 30 * 1000); // regelmässsig
29
+
30
+ return registration;
31
+ } catch (error) {
32
+ console.error('❌ SW registration failed:', error);
33
+ return null;
34
+ }
35
+ }
36
+
37
+ export function onUpdateAvailable(callback) {
38
+ if (!('serviceWorker' in navigator)) return;
39
+
40
+ navigator.serviceWorker.ready.then(registration => {
41
+ // Update gefunden
42
+ registration.addEventListener('updatefound', () => {
43
+ const newWorker = registration.installing;
44
+ if (!newWorker) return;
45
+
46
+ newWorker.addEventListener('statechange', () => {
47
+ if (newWorker.state === 'installed' && navigator.serviceWorker.controller) {
48
+ // Neuer SW wartet, alter ist noch aktiv
49
+ callback(newWorker);
50
+ }
51
+ });
52
+ });
53
+
54
+ // gleich Manuell auf Updates prüfen??
55
+ });
56
+
57
+ // Controller hat gewechselt (nach skipWaiting)
58
+ navigator.serviceWorker.addEventListener('controllerchange', () => {
59
+ console.log('🔄 Controller changed - reloading');
60
+ //callback();
61
+ });
62
+ }
63
+
64
+ // Neues Update aktivieren
65
+ export function skipWaiting() {
66
+ const controller = navigator.serviceWorker.controller;
67
+ if (!controller) {
68
+ console.warn('⚠️ No active service worker');
69
+ return;
70
+ }
71
+ controller.postMessage({ type: 'SKIP_WAITING' });
72
+ }
73
+
74
+ // Cache-Events abhören
75
+ export function onCacheServed(callback) {
76
+ if (!('serviceWorker' in navigator)) return;
77
+
78
+ navigator.serviceWorker.addEventListener('message', (event) => {
79
+ if (event.data?.type === 'CACHE_SERVED') {
80
+ callback(event.data);
81
+ }
82
+ });
83
+ }
84
+
@@ -0,0 +1,221 @@
1
+ // ============================================================
2
+ // CONFIGURATION
3
+ // ============================================================
4
+
5
+ const CONFIG = {
6
+ version: '1.0.0',
7
+ maxCacheSize: 100 * 1024,
8
+ precacheUrls: [],
9
+ cacheStrategies: {
10
+ images: { mode: 'cache-first', maxAge: 30 * 86400000 },
11
+ scripts: { mode: 'network-first', maxAge: 7 * 86400000 },
12
+ styles: { mode: 'network-first', maxAge: 7 * 86400000 },
13
+ api: { mode: 'network-first', maxAge: 300000 },
14
+ html: { mode: 'network-first', maxAge: 86400000 } // x
15
+ }
16
+ };
17
+
18
+ const CACHE_NAMES = {
19
+ static: `static-v${CONFIG.version}`,
20
+ dynamic: `dynamic-v${CONFIG.version}`
21
+ };
22
+
23
+ // ============================================================
24
+ // LIFECYCLE EVENTS
25
+ // ============================================================
26
+
27
+ self.addEventListener('install', e => {
28
+ console.log('[SW] Installing version', CONFIG.version);
29
+ e.waitUntil(
30
+ caches.open(CACHE_NAMES.static)
31
+ .then(cache => cache.addAll(CONFIG.precacheUrls))
32
+ .then(() => self.skipWaiting())
33
+ .catch(err => console.error('[SW] Precache failed:', err))
34
+ );
35
+ });
36
+
37
+ self.addEventListener('activate', e => {
38
+ console.log('[SW] Activating version', CONFIG.version);
39
+ e.waitUntil(Promise.all([cleanupOldCaches(), self.clients.claim()]));
40
+ });
41
+
42
+ async function cleanupOldCaches() {
43
+ const keys = await caches.keys();
44
+ const oldCaches = keys.filter(k =>
45
+ (k.startsWith('static-') || k.startsWith('dynamic-')) &&
46
+ k !== CACHE_NAMES.static && k !== CACHE_NAMES.dynamic
47
+ );
48
+ return Promise.all(oldCaches.map(k => {
49
+ console.log('[SW] Deleting old cache:', k);
50
+ return caches.delete(k);
51
+ }));
52
+ }
53
+
54
+ // ============================================================
55
+ // FETCH HANDLING
56
+ // ============================================================
57
+
58
+ self.addEventListener('fetch', e => {
59
+ if (!isHttpRequest(e.request)) return;
60
+ const assetType = getAssetType(e.request.url);
61
+ const strategy = CONFIG.cacheStrategies[assetType]?.mode || 'network-first';
62
+ e.respondWith(handleFetch(e.request, strategy, assetType, e.preloadResponse));
63
+ });
64
+
65
+ function isHttpRequest(req) {
66
+ return new URL(req.url).protocol.startsWith('http');
67
+ }
68
+
69
+ function getAssetType(url) {
70
+ const path = new URL(url).pathname.toLowerCase();
71
+ if (/\.(jpg|jpeg|png|gif|webp|svg|ico)$/i.test(path)) return 'images';
72
+ if (/\.(js|mjs)$/i.test(path)) return 'scripts';
73
+ if (/\.css$/i.test(path)) return 'styles';
74
+ return path.startsWith('/api/') ? 'api' : 'html';
75
+ }
76
+
77
+ async function handleFetch(req, strategy, assetType, preloadRes) {
78
+ if (strategy === 'cache-first') return cacheFirst(req, assetType, preloadRes);
79
+ return strategy === 'network-first' ? networkFirst(req, assetType, preloadRes) : fetchWithFallback(req);
80
+ }
81
+
82
+ // ============================================================
83
+ // CACHE STRATEGIES
84
+ // ============================================================
85
+
86
+ async function cacheFirst(req, assetType, preloadRes) {
87
+ // 1. Try cache (if not expired)
88
+ const cached = await caches.match(req);
89
+ if (cached && !isCacheExpired(cached, assetType)) return cached;
90
+
91
+ // 2. Try preload
92
+ const preloaded = await preloadRes;
93
+ if (preloaded) {
94
+ await saveToCache(req, preloaded.clone());
95
+ return preloaded;
96
+ }
97
+
98
+ // 3. Fetch from network
99
+ try {
100
+ const res = await fetch(req);
101
+ if (res?.ok) await saveToCache(req, res.clone());
102
+ return res;
103
+ } catch (err) {
104
+ return cached || getOfflineFallback(req);
105
+ }
106
+ }
107
+
108
+ async function networkFirst(req, assetType, preloadRes) {
109
+ // 1. Try preload
110
+ const preloaded = await preloadRes;
111
+ if (preloaded) {
112
+ if (preloaded.ok) await saveToCache(req, preloaded.clone());
113
+ return preloaded;
114
+ }
115
+
116
+ // 2. Fetch from network
117
+ try {
118
+ const res = await fetch(req);
119
+ if (res?.ok) await saveToCache(req, res.clone());
120
+ return res;
121
+ } catch (err) {
122
+ // 3. Fallback to cache
123
+ const cached = await caches.match(req);
124
+ return cached || getOfflineFallback(req);
125
+ }
126
+ }
127
+
128
+ async function fetchWithFallback(req) {
129
+ try {
130
+ return await fetch(req);
131
+ } catch (err) {
132
+ return getOfflineFallback(req);
133
+ }
134
+ }
135
+
136
+ // ============================================================
137
+ // CACHE HELPERS
138
+ // ============================================================
139
+
140
+ async function saveToCache(req, res) {
141
+ if (!isValidResponse(res)) return;
142
+ if (await isResponseTooLarge(res)) return;
143
+ const cache = await caches.open(CACHE_NAMES.dynamic);
144
+ await cache.put(req, res);
145
+ }
146
+
147
+ function isValidResponse(res) {
148
+ return res && res.status === 200 && res.type === 'basic';
149
+ }
150
+
151
+ async function isResponseTooLarge(res) {
152
+ const blob = await res.clone().blob();
153
+ const tooLarge = blob.size > CONFIG.maxCacheSize;
154
+ if (tooLarge) console.log('[SW] Skipped (too large):', blob.size, 'bytes');
155
+ return tooLarge;
156
+ }
157
+
158
+ function isCacheExpired(res, assetType) {
159
+ const cacheTime = res.headers.get('sw-cached-at');
160
+ if (!cacheTime) return false;
161
+ const maxAge = CONFIG.cacheStrategies[assetType]?.maxAge || 86400000;
162
+ return Date.now() - new Date(cacheTime).getTime() > maxAge;
163
+ }
164
+
165
+ function getOfflineFallback(req) {
166
+ const isHtml = req.destination === 'document' || req.headers.get('accept')?.includes('text/html');
167
+ if (isHtml) {
168
+ return caches.match('/offline.html') ||
169
+ new Response('Offline', { status: 503, statusText: 'Service Unavailable' });
170
+ }
171
+ return new Response('Resource unavailable', { status: 503, statusText: 'Service Unavailable' });
172
+ }
173
+
174
+ // ============================================================
175
+ // MESSAGE HANDLING
176
+ // ============================================================
177
+
178
+ self.addEventListener('message', e => {
179
+ if (e.data?.type === 'SKIP_WAITING') e.waitUntil(self.skipWaiting());
180
+ if (e.data?.type === 'CLEAR_CACHE') e.waitUntil(clearAllCaches());
181
+ });
182
+
183
+ async function clearAllCaches() {
184
+ const keys = await caches.keys();
185
+ return Promise.all(keys.map(k => caches.delete(k)));
186
+ }
187
+
188
+ // ============================================================
189
+ // PUSH NOTIFICATIONS
190
+ // ============================================================
191
+
192
+ self.addEventListener('push', e => {
193
+ const data = e.data?.json() || {};
194
+ e.waitUntil(
195
+ self.registration.showNotification(data.title || 'Notification', {
196
+ body: data.body || 'New notification',
197
+ icon: data.icon || '/icon-192.png',
198
+ badge: '/badge-72.png',
199
+ vibrate: [200, 100, 200],
200
+ data: { url: data.url }
201
+ })
202
+ );
203
+ });
204
+
205
+ self.addEventListener('notificationclick', e => {
206
+ e.notification.close();
207
+ if (e.notification.data?.url) e.waitUntil(clients.openWindow(e.notification.data.url));
208
+ });
209
+
210
+ // ============================================================
211
+ // BACKGROUND SYNC
212
+ // ============================================================
213
+
214
+ self.addEventListener('sync', e => {
215
+ if (e.tag === 'sync-data') e.waitUntil(syncData());
216
+ });
217
+
218
+ async function syncData() {
219
+ console.log('[SW] Syncing data...');
220
+ // Implementiere deine Sync-Logik
221
+ }
@@ -4,10 +4,10 @@ Easy keyboard shortcuts
4
4
  ## Usage
5
5
 
6
6
  ```js
7
- import {listen} from '../shortcut.js';
8
-
9
- listen('a+b+c', () => {
10
- alert('a+b+c pressed');
7
+ import {listen} from '../shortcut.js';
8
+
9
+ listen('a+b+c', () => {
10
+ alert('a+b+c pressed');
11
11
  }, {target: testEl});
12
12
  ```
13
13
 
@@ -18,13 +18,13 @@ listen('a+b+c', () => {
18
18
  ## Install
19
19
 
20
20
  ```js
21
- import * as module from "https://cdn.jsdelivr.net/gh/u2ui/u2@x.x.x/js/shortcut/shortcut.min.js"
21
+ import * as module from "https://cdn.jsdelivr.net/gh/u2ui/u2@main/js/shortcut/shortcut.js"
22
22
  ```
23
23
 
24
24
  ## Demos
25
25
 
26
- [minimal.html](http://gcdn.li/u2ui/u2@main/js/shortcut/tests/minimal.html)
27
26
  [test.html](http://gcdn.li/u2ui/u2@main/js/shortcut/tests/test.html)
27
+ [minimal.html](http://gcdn.li/u2ui/u2@main/js/shortcut/tests/minimal.html)
28
28
 
29
29
  ## About
30
30
 
@@ -1,89 +1,53 @@
1
-
2
- const keyAliases = Object.entries({
3
- 'arrowup': ['↑', 'up'],
4
- 'arrowdown': ['↓', 'down'],
5
- 'arrowleft': ['←', 'left'],
6
- 'arrowright': ['→', 'right'],
7
- 'control': ['ctrl'],
8
- 'shift': ['shift', '⇧'],
9
- 'alt': ['alt', '⌥'],
10
- 'meta': ['cmd', '⌘'], // Cmd für macOS
11
- 'escape': ['esc'],
12
- 'enter': ['return'],
13
- 'delete': ['del'],
14
- 'insert': ['ins'],
15
- 'backspace': ['back'],
16
- }).reduce((acc, [key, aliases]) => {
17
- aliases.forEach(alias => {
18
- acc[alias] = key;
19
- });
20
- return acc;
21
- }, {});
22
-
23
- function normalizeKey(key) {
24
- key = key.trim().toLowerCase();
25
- return keyAliases[key] || key;
26
- }
27
-
28
-
29
- export function listen(combination, callback, options = {}) {
30
- const target = options.target || document;
31
- const keys = combination.split('+').map(k => normalizeKey(k));
32
- let activeIndex = -1;
33
-
34
- target.addEventListener('keydown', function (event) {
35
- if (event.repeat) return;
36
- const key = normalizeKey(event.key);
37
- const expectedKey = keys[activeIndex + 1];
38
-
39
- if (expectedKey === key) {
40
- ++activeIndex;
41
- if (activeIndex === keys.length - 1) {
42
- // callback bind to target and pass event as argument
43
- callback.call(target, event);
44
- }
45
- } else {
46
- activeIndex = -1;
47
- }
48
- });
49
-
50
- target.addEventListener('keyup', function (event) {
51
- const key = normalizeKey(event.key);
52
- const expectedKey = keys[activeIndex];
53
- if (expectedKey === key) { // wenn der letzte losgelassen wird, position einen schritt zurück
54
- activeIndex--;
55
- } else { // wenn sonst einer losgelassen wird, reset
56
- activeIndex = -1;
57
- }
58
- });
59
- }
60
-
61
-
62
-
63
- /*
64
- maybe later: the order should probably not matter
65
- function listen(combination, callback, options = {}) {
66
- const requiredKeys = new Set(combination.toLowerCase().split('+').map(k => normalizeKey(k)));
67
- let activeKeys = new Set();
68
-
69
- document.addEventListener('keydown', function(event) {
70
- activeKeys.add(normalizeKey(event.key.toLowerCase()));
71
- if (isCombinationPressed(requiredKeys, activeKeys)) {
72
- callback();
73
- }
74
- });
75
-
76
- document.addEventListener('keyup', function(event) {
77
- activeKeys.delete(normalizeKey(event.key.toLowerCase()));
78
- });
79
- }
80
-
81
- function isCombinationPressed(requiredKeys, activeKeys) {
82
- for (let key of requiredKeys) {
83
- if (!activeKeys.has(key)) {
84
- return false;
85
- }
86
- }
87
- return true;
88
- }
89
- */
1
+ // todo: the order of modifiers should not matter
2
+
3
+ const keyAliases = Object.entries({
4
+ 'arrowup': ['↑', 'up'],
5
+ 'arrowdown': ['↓', 'down'],
6
+ 'arrowleft': ['←', 'left'],
7
+ 'arrowright': ['→', 'right'],
8
+ 'control': ['ctrl'],
9
+ 'shift': ['shift', '⇧'],
10
+ 'alt': ['alt', '⌥'],
11
+ 'meta': ['cmd', '⌘'],
12
+ 'escape': ['esc'],
13
+ 'enter': ['return'],
14
+ 'delete': ['del'],
15
+ 'insert': ['ins'],
16
+ 'backspace': ['back'],
17
+ }).reduce((acc, [key, aliases]) => {
18
+ aliases.forEach(alias => {
19
+ acc[alias] = key;
20
+ });
21
+ return acc;
22
+ }, {});
23
+
24
+ function normalizeKey(key) {
25
+ key = key.trim().toLowerCase();
26
+ return keyAliases[key] || key;
27
+ }
28
+
29
+ export function listen(combination, callback, options = {}) {
30
+ const target = options.target || document;
31
+ const keys = combination.split('+').map(k => normalizeKey(k));
32
+ let activeIndex = -1;
33
+
34
+ target.addEventListener('keydown', function (event) {
35
+ if (event.repeat) return;
36
+ const key = normalizeKey(event.key);
37
+ const expectedKey = keys[activeIndex + 1];
38
+
39
+ if (expectedKey === key) {
40
+ ++activeIndex;
41
+ if (activeIndex === keys.length - 1) callback.call(target, event);
42
+ } else {
43
+ activeIndex = -1;
44
+ }
45
+ });
46
+
47
+ target.addEventListener('keyup', function (event) {
48
+ const key = normalizeKey(event.key);
49
+ const expectedKey = keys[activeIndex];
50
+ if (expectedKey === key) activeIndex--; // when the last one is released, position one step back
51
+ else activeIndex = -1; // if any other one is released, reset
52
+ });
53
+ }
package/package.json CHANGED
@@ -1,13 +1,11 @@
1
1
  {
2
2
  "name": "u2ui",
3
- "version": "1.0.1",
3
+ "version": "1.4.5",
4
4
  "description": "HTML Advanced: More Capabilities, Same Feel, Same Simplicity",
5
- "scripts": {
6
- "test": "echo \"Error: no test specified\" && exit 1"
7
- },
8
5
  "keywords": ["web-components","pattern-library","component-library","ui-toolkit","design-system"],
9
6
  "author": "Tobias Buschor",
10
7
  "license": "MIT",
8
+ "files": ["attr","class","css","el","js","theme","u2","!**/tests","!u2/old-stuff","!u2/experiments"],
11
9
  "repository": {
12
10
  "type": "git",
13
11
  "url": "https://github.com/u2ui/u2"
@@ -0,0 +1,10 @@
1
+ ## About
2
+
3
+ - MIT License, Copyright (c) 2022 <u2> (like all repositories in this organization) <br>
4
+ - Suggestions, ideas, finding bugs and making pull requests make us very happy. ♥
5
+
6
+ ## About
7
+
8
+ - MIT License, Copyright (c) 2022 <u2> (like all repositories in this organization) <br>
9
+ - Suggestions, ideas, finding bugs and making pull requests make us very happy. ♥
10
+
@@ -0,0 +1,98 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=Oswald:wght@300..900&display=swap');
2
+
3
+ /* Brutalismus Theme */
4
+
5
+ html {
6
+ --hsl-h: 0; /* Grauer Farbton */
7
+ --hsl-s: 0%; /* Sättigung */
8
+ --hsl-l: 20%; /* Helligkeit */
9
+
10
+ /* misc */
11
+ --width: 42rem;
12
+ --line-width: 2px;
13
+ --radius: 0;
14
+
15
+ --shadow-x: 0;
16
+ --shadow-y: .25rem;
17
+ --shadow-blur: .8rem;
18
+ --shadow: var(--shadow-x) var(--shadow-y) var(--shadow-blur) #0003;
19
+
20
+ --color-text: hsl(0, 0%, 10%);
21
+ }
22
+
23
+ body {
24
+ font-size: min(1em, 17px);
25
+ }
26
+
27
+ :focus-visible {
28
+ outline: .12rem solid var(--color-text);
29
+ outline-offset: .18rem;
30
+ &:active { outline-width: .3rem; }
31
+ }
32
+
33
+ h1 {
34
+ font-size:3.5em;
35
+ }
36
+ h1, h2 {
37
+ font-family: 'Oswald', sans-serif;
38
+ }
39
+
40
+ input, textarea, select, button, .btn {
41
+ padding-inline: .8em;
42
+ padding-block: .6em;
43
+ border-color:var(--color-line);
44
+ &:focus {
45
+ border-color:var(--color-text);
46
+ }
47
+ }
48
+
49
+ button, .btn {
50
+ background-color: transparent;
51
+ color: var(--color-text);
52
+ border-color: var(--color-text);
53
+ padding-inline: 1.3em;
54
+ text-transform: uppercase;
55
+ transition: .2s;
56
+ &:hover, &:focus {
57
+ background-color: var(--color-text);
58
+ color: var(--color-bg);
59
+ }
60
+ }
61
+
62
+ dialog {
63
+ background-color:var(--color-bg);
64
+ color:var(--color-text);
65
+ border: var(--line-width) solid var(--color-line);
66
+ padding:2rem;
67
+ box-shadow: var(--shadow);
68
+ }
69
+
70
+ u2-alert {
71
+ background-color: color-mix(in srgb, var(--color), var(--color-bg) 96%);
72
+ border-width: 0 0 0 .13em;
73
+ border-width:0;
74
+ font-size: max(.85rem, 14px);
75
+ &::part(icon) {
76
+ align-self:start;
77
+ }
78
+ }
79
+
80
+ u2-accordion {
81
+ &::part(trigger) {
82
+ background-color: var(--color-text);
83
+ color: var(--color-bg);
84
+ padding: .7em;
85
+ border-radius: var(--radius);
86
+ }
87
+ &::part(trigger):hover {
88
+ background-color: color-mix(in srgb, var(--color-text), white 10%);
89
+ }
90
+ &::part(trigger):focus, &::part(trigger):active {
91
+ outline: .12rem solid var(--color-text);
92
+ outline-offset: .18rem;
93
+ }
94
+ &::part(content) {
95
+ background-color: var(--color-bg);
96
+ padding: .7em;
97
+ }
98
+ }
@@ -0,0 +1,10 @@
1
+ ## About
2
+
3
+ - MIT License, Copyright (c) 2022 <u2> (like all repositories in this organization) <br>
4
+ - Suggestions, ideas, finding bugs and making pull requests make us very happy. ♥
5
+
6
+ ## About
7
+
8
+ - MIT License, Copyright (c) 2022 <u2> (like all repositories in this organization) <br>
9
+ - Suggestions, ideas, finding bugs and making pull requests make us very happy. ♥
10
+