u2ui 1.0.0 → 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 +9 -8
  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,176 @@
1
+ // deno run -A --no-lock ./u2/tools/update.skill.js
2
+
3
+ import * as fs from 'https://deno.land/std@0.100.0/fs/mod.ts';
4
+
5
+ let base = import.meta.resolve('../../');
6
+ base = base.replace(/file:\/\/\//, '/');
7
+
8
+ const categories = ['attr', 'class', 'el', 'css', 'js'];
9
+
10
+ async function generateSkillMd() {
11
+ const repos = {};
12
+
13
+ for (const category of categories) {
14
+ repos[category] = {};
15
+ try {
16
+ for await (const entry of Deno.readDir(base + category)) {
17
+ if (!entry.isDirectory) continue;
18
+ const name = entry.name;
19
+
20
+ const readmePath = `${base}${category}/${name}/README.md`;
21
+ let description = '';
22
+ try {
23
+ const readme = await Deno.readTextFile(readmePath);
24
+ description = readme.split('\n')[1] || '';
25
+ } catch (e) {}
26
+
27
+ repos[category][name] = {
28
+ name,
29
+ description,
30
+ beta: description.includes('beta'),
31
+ deprecated: description.includes('deprecated'),
32
+ };
33
+ }
34
+ } catch (e) {
35
+ console.log(`Category ${category} not found or empty`);
36
+ }
37
+ }
38
+
39
+ const content = generateSkillContent(repos);
40
+ await Deno.writeTextFile(base + "SKILL.md", content);
41
+ console.log("SKILL.md written!");
42
+ }
43
+
44
+ function generateSkillContent(repos) {
45
+ return dedent(`
46
+ # u2 Framework
47
+
48
+ Modular web component framework.
49
+ https://github.com/u2ui/u2
50
+
51
+ > The one-liners below are an **index, not a spec** — they show the common case, not the full behavior (edge cases, bare/valueless attributes, defaults). For any concrete question, read the module before answering — don't assume from the one-liner. README: \`https://raw.githubusercontent.com/u2ui/u2/main/{category}/{name}/README.md\` (usage, API, demos); for undocumented edge-cases read the source \`…/{category}/{name}/{name}.js\`.
52
+
53
+ ## Categories
54
+
55
+ **\`attr/\`** - Add behavior via HTML attributes
56
+ ${generateCategoryModules(repos, 'attr')}
57
+
58
+ **\`class/\`** - CSS-only utilities via class names
59
+ ${generateCategoryModules(repos, 'class')}
60
+
61
+ **\`el/\`** - Custom HTML elements (Web Components)
62
+ ${generateCategoryModules(repos, 'el')}
63
+
64
+ **\`css/\`** - Global CSS utilities
65
+ ${generateCategoryModules(repos, 'css')}
66
+
67
+ **\`js/\`** - JavaScript ES modules
68
+ ${generateCategoryModules(repos, 'js')}
69
+
70
+ **Naming:** \`<u2-{name}>\`, \`.u2-{name}\`, \`[u2-{name}]\`
71
+
72
+ ## Installation
73
+
74
+ **Prototyping (auto-loads all):**
75
+ \`\`\`html
76
+ <script type=module async src="https://cdn.jsdelivr.net/gh/u2ui/u2@main/u2/auto.js"></script>
77
+ \`\`\`
78
+
79
+ ## CSS
80
+
81
+ auto.js also loads: css/base/base.css, css/classless/variables.css, css/classless/classless.css
82
+
83
+ Sets sensible defaults — do not re-implement these when base is loaded:
84
+
85
+ - \`box-sizing: border-box\` everywhere
86
+ - Fluid \`font-size: calc(12.5px + .25vw)\` on \`html\`
87
+ - \`body { margin: auto; display: flow-root }\` — child margins don't bleed out
88
+ - \`interpolate-size: allow-keywords\` — enables \`height: auto\` transitions
89
+ - \`@view-transition { navigation: auto }\` — free page transitions
90
+ - \`hyphens: auto\` with sensible limits
91
+ - \`img/svg/video/canvas\` → \`max-inline-size: 100%; object-fit: cover; block-size: auto\`
92
+ - \`video/audio/iframe\` → \`inline-size: 100%\`
93
+ - Tables: \`border-collapse: collapse; font-variant-numeric: tabular-nums\`
94
+ - \`nav a { text-decoration: none }\`, \`nav li { list-style: none }\`
95
+ - Form elements get \`font: inherit\`, unified padding, border
96
+ - \`dialog/[popover]\` fade in/out via \`transition + @starting-style\` — no JS needed
97
+ - \`[inert], :disabled { opacity: .4 }\`
98
+ - \`.btn\` — link styled as button, \`display: inline-block\`, no underline
99
+
100
+
101
+ The only thing you normally set: \`--color\`
102
+
103
+ \`\`\`css
104
+ html {
105
+ --color: #207acc; /* primary color — everything else derives from this */
106
+ }
107
+ \`\`\`
108
+
109
+ All other color tokens are **automatically computed** via \`color-mix()\` and \`oklch()\` from \`--color\`:
110
+
111
+ \`\`\`css
112
+ /* tints / shades — auto-derived, override only if needed */
113
+ --color-lightest /* color-mix(--color, #fff 97%) */
114
+ --color-lighter /* color-mix(--color, #fff 85%) */
115
+ --color-light /* color-mix(--color, #fff 50%) */
116
+ --color-dark /* color-mix(--color, #000 30%) */
117
+ --color-darker /* color-mix(--color, #000 60%) */
118
+ --color-darkest /* color-mix(--color, #000 87%) */
119
+
120
+ /* semantic — auto light/dark mode */
121
+ --color-bg /* light: --color-lightest / dark: --color-darkest */
122
+ --color-text /* light: --color-darkest / dark: --color-lightest */
123
+ --color-area /* light: --color-lighter / dark: --color-darker */
124
+ --color-line /* = --color-text */
125
+
126
+ /* gray — derived from --color hue, desaturated */
127
+ --gray, --gray-lighter, --gray-light, --gray-dark, --gray-darker
128
+
129
+ /* full palette — hue-rotated from --color's lightness/chroma */
130
+ --red, --orange, --yellow, --lime, --green, --cyan, --blue, --purple, --pink
131
+ \`\`\`
132
+
133
+ \`--accent\` defaults to \`--color\` but can be set independently for e.g. focus rings.
134
+
135
+
136
+ `).trim() + '\n';
137
+ }
138
+
139
+ function generateCategoryModules(repos, category) {
140
+ const modules = repos[category];
141
+ if (!modules || Object.keys(modules).length === 0) return '';
142
+
143
+ return '\n' + Object.values(modules)
144
+ .sort((a, b) => a.name.localeCompare(b.name)) // Alphabetisch sortieren
145
+ .map(mod => {
146
+ let line = `- **${mod.name}**`;
147
+ if (mod.description) line += ` - ${mod.description}`;
148
+ if (mod.beta) line += ' *(beta)*';
149
+ if (mod.deprecated) line += ' *(deprecated)*';
150
+ return line;
151
+ })
152
+ .join('\n');
153
+ }
154
+
155
+ function dedent(text) {
156
+ text = trimLines(text);
157
+ const lines = text.split('\n');
158
+ const secondLine = lines[0];
159
+ if (!secondLine) return text;
160
+ const indent = secondLine.match(/^\s*/)[0];
161
+ if (indent.length === 0) return text;
162
+ return lines.map(line => line.replace(new RegExp(`^${indent}`), '')).join('\n').trim();
163
+ }
164
+
165
+ function trimLines(text) {
166
+ const lines = text.split('\n');
167
+ while (1) {
168
+ const line = lines[0];
169
+ if (line == null) break;
170
+ if (line.match(/^\s*$/)) lines.shift();
171
+ else break;
172
+ }
173
+ return lines.join('\n');
174
+ }
175
+
176
+ generateSkillMd();
@@ -0,0 +1,317 @@
1
+ alert('used??') // zzz
2
+
3
+ class ElementVariableStyler extends HTMLElement {
4
+ constructor() {
5
+ super();
6
+ this.targetElement = this.getStyleTarget();
7
+
8
+ // Definition der zu steuernden Variablen - NUR Font Size in 'px', der Rest in 'rem'
9
+ // Gruppen werden nun mit 'isGroup: true' markiert und enthalten 'children'
10
+ this.variables = [
11
+ { name: '--color', label: 'Akzentfarbe', type: 'color', value: '#007bff' },
12
+ { name: '--width', label: 'Layout Breite (rem)', min: 40, max: 120, step: 1, unit: 'rem', value: 75 },
13
+ {
14
+ label: 'Schatten Einstellungen (rem)',
15
+ isGroup: true,
16
+ children: [
17
+ { name: '--shadow-x', label: 'Versatz X', min: -0.5, max: 2, step: 0.05, unit: 'rem', value: 0 },
18
+ { name: '--shadow-y', label: 'Versatz Y', min: -0.5, max: 2, step: 0.05, unit: 'rem', value: 0.3 },
19
+ { name: '--shadow-blur', label: 'Unschärfe', min: 0, max: 2, step: 0.1, unit: 'rem', value: 0.6 }
20
+ ]
21
+ },
22
+ { name: 'font-size', label: 'Schriftgröße (px)', min: 10, max: 24, step: .2, unit: 'px', value: 16 },
23
+ {
24
+ label: 'Schrift einstellungen',
25
+ isGroup: true,
26
+ children: [
27
+ { name: '--line-height-relative', label: 'Linienhöhe in abhängikeit zur aktuellen Schritgrösse', min: 0, max: 2, step: 0.001, unit: 'em', value: 1 },
28
+ { name: '--line-height-absolute', label: 'Linienhöhe globaler Anteil (auf addiert)', min: 0, max: 1, step: 0.001, unit: 'rem', value: .5 }
29
+ ]
30
+ },
31
+ { name: '--radius', label: 'Border Radius (rem)', min: 0, max: 2, step: 0.1, unit: 'rem', value: 0.5 },
32
+ { name: '--line-width', label: 'Linienstärke (rem)', min: 0.05, max: 0.3, step: 0.01, unit: 'rem', value: 0.0625 }
33
+ ];
34
+
35
+ this.attachShadow({ mode: 'open' });
36
+ this.render();
37
+ }
38
+
39
+ getStyleTarget() {
40
+ const selector = this.getAttribute('target');
41
+ if (selector) {
42
+ return document.querySelector(selector) || document.documentElement;
43
+ }
44
+ return document.documentElement;
45
+ }
46
+
47
+ // Hilfsfunktion zur Erzeugung eines einzelnen Steuerelements
48
+ createControlHtml(v) {
49
+ const isRange = v.type !== 'color';
50
+ const valueDisplayId = v.name.replace('--', '') + '-value';
51
+
52
+ return `
53
+ <div class="control-group">
54
+ <label for="${v.name}">
55
+ ${v.label}
56
+ <span class="value-display" id="${valueDisplayId}">
57
+ ${v.value}${v.unit || ''}
58
+ </span>
59
+ </label>
60
+ <input
61
+ type="${v.type || 'range'}"
62
+ id="${v.name}"
63
+ name="${v.name}"
64
+ ${isRange ? `min="${v.min}" max="${v.max}" step="${v.step}"` : ''}
65
+ value="${v.value}"
66
+ data-unit="${v.unit || ''}"
67
+ >
68
+ </div>
69
+ `;
70
+ }
71
+
72
+ render() {
73
+ const style = `
74
+ :host {
75
+ font:unset !important;
76
+ font-size:14px !important;
77
+ color:black;
78
+ display: block;
79
+ max-width:17em;
80
+ position: fixed;
81
+ top: 0.625em;
82
+ right: 0.625em;
83
+ background: white;
84
+ border: 1px solid #ccc;
85
+ padding: 0.625em !important;
86
+ border-radius: 0.5em;
87
+ z-index: 9999;
88
+ box-shadow: 0 0.25em 0.75em rgba(0,0,0,0.1);
89
+ line-height:1.2 !important;
90
+ }
91
+ .styler-grid {
92
+ display: grid;
93
+ grid-template-columns: 1fr;
94
+ gap: 0.6em;
95
+ }
96
+ .control-group {
97
+ display: flex;
98
+ flex-direction: column;
99
+ margin-bottom: 0.3em; /* Abstand zwischen einzelnen Controlls */
100
+ }
101
+ label {
102
+ font-family: sans-serif;
103
+ font-size: 0.8em;
104
+ font-weight: bold;
105
+ display:flex;
106
+ }
107
+ input[type="range"] {
108
+ margin:0;
109
+ width: 100%;
110
+ }
111
+ .value-display {
112
+ font-family: monospace;
113
+ font-size: 0.75em;
114
+ color: #555;
115
+ margin-left:auto;
116
+ white-space:nowrap;
117
+ }
118
+
119
+ /* Styling für die Details-Gruppe */
120
+ details {
121
+ border: 1px solid #eee;
122
+ border-radius: 0.3em;
123
+ padding: 0.2em 0.5em;
124
+ }
125
+ summary {
126
+ font-weight: bold;
127
+ padding: 0.2em 0;
128
+ cursor: pointer;
129
+ outline: none;
130
+ list-style: none; /* Entfernt den Standardpfeil */
131
+ font-size: 0.8em;
132
+ }
133
+ summary::marker {
134
+ content: none; /* Entfernt Marker in Browsern, wo list-style:none nicht reicht */
135
+ }
136
+ /* Fügt manuellen Chevron-Pfeil hinzu */
137
+ summary::before {
138
+ content: '▶';
139
+ display: inline-block;
140
+ margin-right: 0.5em;
141
+ transition: transform 0.2s;
142
+ font-size: 0.7em;
143
+ }
144
+ details[open] > summary::before {
145
+ transform: rotate(90deg);
146
+ }
147
+ .details-content {
148
+ display: grid;
149
+ gap: 0.6em;
150
+ margin-top: 0.5em; /* Abstand nach Summary */
151
+ }
152
+ `;
153
+
154
+ let controls = '';
155
+
156
+ this.variables.forEach(v => {
157
+ if (v.isGroup && v.children && Array.isArray(v.children)) {
158
+ // Dies ist eine verschachtelte, klappbare Gruppe (Details/Summary)
159
+ const childrenHtml = v.children.map(child => this.createControlHtml(child)).join('');
160
+
161
+ controls += `
162
+ <details class="control-group-nested">
163
+ <summary>${v.label}</summary>
164
+ <div class="details-content">
165
+ ${childrenHtml}
166
+ </div>
167
+ </details>
168
+ `;
169
+ } else {
170
+ // Dies ist ein einzelnes Steuerelement
171
+ controls += this.createControlHtml(v);
172
+ }
173
+ });
174
+
175
+
176
+ this.shadowRoot.innerHTML = `
177
+ <style>${style}</style>
178
+ <div class="styler-grid">${controls}</div>
179
+ `;
180
+
181
+ this.shadowRoot.querySelectorAll('input').forEach(input => {
182
+ input.addEventListener('input', this.handleInput.bind(this));
183
+ // Die setInitialValue-Methode muss für alle Inputs, auch in Subgruppen, aufgerufen werden
184
+ this.setInitialValue(input);
185
+
186
+ // Finde die Gruppe (details) für das Input-Element und öffne sie, falls der Wert != Standard ist
187
+ if (input.name.startsWith('--shadow-')) {
188
+ const groupDetails = input.closest('details');
189
+ const initialValue = parseFloat(input.value);
190
+ // Annahme: Wenn x, y oder blur nicht 0 ist, ist die Gruppe relevant und sollte offen sein
191
+ if (groupDetails && initialValue !== 0 && initialValue !== 0.3) {
192
+ //groupDetails.open = true;
193
+ }
194
+ }
195
+ });
196
+ }
197
+
198
+ // setInitialValue, handleInput, applyVariable bleiben funktional unverändert
199
+
200
+ setInitialValue(input) {
201
+ // const targetValue = this.targetElement.style.getPropertyValue(input.name) ||
202
+ // getComputedStyle(this.targetElement).getPropertyValue(input.name).trim();
203
+
204
+ const elValue = getComputedStyle(this.targetElement).getPropertyValue(input.name).trim();
205
+
206
+ console.log(input.name, elValue)
207
+
208
+
209
+
210
+ if (elValue) {
211
+ const inpUnit = input.dataset.unit || '';
212
+
213
+ if (input.type === 'range') {
214
+ const {unit:elUnit, value:elNumber} = parseCssLength(elValue)
215
+ const elPx = unitToPx(elNumber, elUnit, this.targetElement);
216
+ const inpNumber = pxToUnit(elPx, inpUnit, this.targetElement);
217
+ input.value = inpNumber;
218
+ } else if (input.type === 'color') {
219
+ input.value = elValue;
220
+ }
221
+
222
+ const valueDisplayId = input.name.replace('--', '') + '-value';
223
+ const displayElement = this.shadowRoot.getElementById(valueDisplayId);
224
+ if (displayElement) {
225
+ displayElement.textContent = elValue;
226
+ }
227
+ }
228
+
229
+ this.applyVariable(input.name, input.value, input.dataset.unit);
230
+ }
231
+
232
+
233
+ handleInput(event) {
234
+ const input = event.target;
235
+ const value = input.value;
236
+ const unit = input.dataset.unit || '';
237
+ const variableName = input.name;
238
+
239
+ this.applyVariable(variableName, value, unit);
240
+ }
241
+
242
+ applyVariable(variableName, value, unit) {
243
+ const fullValue = value + unit;
244
+ this.targetElement.style.setProperty(variableName, fullValue);
245
+
246
+ const valueDisplayId = variableName.replace('--', '') + '-value';
247
+ const displayElement = this.shadowRoot.getElementById(valueDisplayId);
248
+ if (displayElement) {
249
+ displayElement.textContent = fullValue;
250
+ }
251
+ }
252
+ }
253
+
254
+ customElements.define('element-variable-styler', ElementVariableStyler);
255
+
256
+
257
+ function parseCssLength(str) {
258
+ const match = /^(\d*\.?\d+)([a-z%]*)$/.exec(str);
259
+ return match ? { value: parseFloat(match[1]), unit: match[2] || '' } : { value: NaN, unit: '' };
260
+ }
261
+
262
+ function unitToPx(value, unit, el){
263
+ if (unit === 'px') return value;
264
+ if (unit === 'cm') return value * 96 / 2.54;
265
+ if (unit === 'mm') return value * 96 / 25.4;
266
+ if (unit === 'in') return value * 96;
267
+ if (unit === 'pt') return value * 96 / 72;
268
+ if (unit === 'pc') return value * 96 / 6;
269
+ if (unit === 'rem') return value * parseFloat(getComputedStyle(document.documentElement).fontSize);
270
+ if (unit === 'em') return value * parseFloat(getComputedStyle(el).fontSize);
271
+ if (unit === 'vw') return value * (innerWidth / 100);
272
+ if (unit === 'vh') return value * (innerHeight / 100);
273
+ if (unit === '%') {
274
+ console.warn('todo: "%" is dependant of the css-property used');
275
+ return null;
276
+ // return value * el.parentElement.offsetWidth / 100;
277
+ }
278
+ if (unit === 'lh') {
279
+ const raw = getComputedStyle(el).lineHeight;
280
+ if (raw === 'normal') {
281
+ console.warn('lh is "normal" which is not easy to pixelize');
282
+ return null;
283
+ }
284
+ const lh = parseFloat(raw);
285
+ return value * lh;
286
+ }
287
+
288
+ console.warn(`Unknown unit: ${unit}`);
289
+ return null;
290
+ }
291
+
292
+ function pxToUnit(px, unit, el){
293
+ if (unit === 'px') return px;
294
+ if (unit === 'cm') return px * 2.54 / 96;
295
+ if (unit === 'mm') return px * 25.4 / 96;
296
+ if (unit === 'in') return px / 96;
297
+ if (unit === 'pt') return px * 72 / 96;
298
+ if (unit === 'pc') return px * 6 / 96;
299
+ if (unit === 'rem') return px / parseFloat(getComputedStyle(document.documentElement).fontSize);
300
+ if (unit === 'em') return px / parseFloat(getComputedStyle(el).fontSize); // not el.parentNode
301
+ if (unit === 'vw') return px / (innerWidth / 100);
302
+ if (unit === 'vh') return px / (innerHeight / 100);
303
+ if (unit === '%') {
304
+ console.warn('todo: "%" is dependant of the css-property used');
305
+ return null;
306
+ //return px * 100 / el.parentElement.offsetWidth;
307
+ }
308
+ if (unit === 'lh') {
309
+ const raw = getComputedStyle(el).lineHeight;
310
+ if (raw === 'normal') {
311
+ console.warn('lh is "normal" which is not easy to pixelize');
312
+ return null;
313
+ }
314
+ const lh = parseFloat(raw);
315
+ return px / lh;
316
+ }
317
+ }
package/u2/u2.js CHANGED
@@ -1,14 +1,30 @@
1
-
2
- let cachedRepos = null;
3
- export async function repos(){
4
- if (!cachedRepos) {
5
- cachedRepos = {};
6
- const data = await fetch(import.meta.url + '/../projects.json').then(res=>res.json());
7
- for (const category in data) {
8
- for (const repo in data[category]) {
9
- cachedRepos[category+'/'+repo] = data[category][repo];
10
- }
11
- }
12
- }
13
- return cachedRepos;
14
- }
1
+ import { importCss } from "./utils.js";
2
+
3
+ window.u2 ??= Object.create(null);
4
+ u2.js = function(jsRepo){
5
+ const file = import.meta.resolve('../js/'+jsRepo+'/'+jsRepo+'.js');
6
+ return import(file);
7
+ }
8
+ u2.el = function(elRepo, options){
9
+ const file = import.meta.resolve('../el/'+elRepo+'/'+elRepo+'.js');
10
+ const css = import.meta.resolve('../el/'+elRepo+'/'+elRepo+'.css');
11
+ importCss(css, options);
12
+ return import(file);
13
+ }
14
+
15
+
16
+ let cachedRepos = null;
17
+ export async function repos(){
18
+ if (!cachedRepos) {
19
+ cachedRepos = {};
20
+ const data = await fetch(import.meta.url + '/../projects.json').then(res=>res.json());
21
+ for (const category in data) {
22
+ for (const repo in data[category]) {
23
+ cachedRepos[category+'/'+repo] = data[category][repo];
24
+ }
25
+ }
26
+ }
27
+ return cachedRepos;
28
+ }
29
+
30
+
package/u2/utils.js CHANGED
@@ -1,59 +1,61 @@
1
- ///////////////////////////
2
- // cssImport
3
-
4
- var cssImported = [];
5
- export function importCss(url, options={}) {
6
- return new Promise((resolve, reject) => {
7
- var link = _importCss(url, options);
8
- if (link==null) resolve({available:true}); // already loaded
9
- else {
10
- link.onload = e=>resolve({available:false}); // todo, remove eventlisteners?
11
- link.onerror = e=>reject();
12
- }
13
- });
14
- }
15
-
16
- function _importCss(url, options={}){
17
- // handle relative urls
18
- if (url.indexOf('./') === 0) {
19
- // better?
20
- // const e = new Error();
21
- // const lines = e.stack.split('\n');
22
- // lines[0] === 'Error' && lines.shift();
23
- // const calledFile = lines[1].match(/[a-z]+:[^?:]+/);
24
- // url = new URL(calledFile[0]+'/.'+url).toString();
25
- const e = new Error();
26
- const calledFile = e.stack.split('\n')[2].match(/[a-z]+:[^:]+/);
27
- const calledUrl = new URL(calledFile);
28
- calledUrl.search = '';
29
- const url = new URL(url, calledUrl).toString(); // todo, this should not be working as const url is only in this scope
30
- }
31
-
32
- const rootNode = options.for ?? document.documentElement;
33
-
34
- if (cssImported[url]) return; // check if imported already
35
- cssImported[url] = true;
36
-
37
- for (let el of rootNode.querySelectorAll('link[rel=stylesheet]')) { // check if manually added
38
- if (el.href === url) return;
39
- }
40
- const link = rootNode.ownerDocument.createElement('link');
41
- link.rel = 'stylesheet';
42
- if (options.media) link.media = options.media;
43
-
44
- link.href = url;
45
- rootGetStyleWrapper(rootNode).append(link);
46
- //styleWrapper.append(link);
47
- return link;
48
- }
49
-
50
-
51
- const styleWrappers = new WeakMap();
52
- function rootGetStyleWrapper(root) {
53
- if (!styleWrappers.has(root)) {
54
- let styleWrapper = document.createElement('div');
55
- root.prepend(styleWrapper);
56
- styleWrappers.set(root, styleWrapper);
57
- }
58
- return styleWrappers.get(root);
59
- }
1
+ ///////////////////////////
2
+ // cssImport
3
+
4
+ const cssImported = [];
5
+ export function importCss(url, options={}) {
6
+ return new Promise((resolve, reject) => {
7
+ const link = _importCss(url, options);
8
+ if (link==null) resolve({available:true}); // already loaded
9
+ else {
10
+ link.onload = e=>resolve({available:false}); // todo, remove eventlisteners?
11
+ link.onerror = e=>reject();
12
+ }
13
+ });
14
+ }
15
+
16
+ function _importCss(url, options={}){
17
+ // handle relative urls
18
+ if (url.indexOf('./') === 0) {
19
+ // better?
20
+ // const e = new Error();
21
+ // const lines = e.stack.split('\n');
22
+ // lines[0] === 'Error' && lines.shift();
23
+ // const calledFile = lines[1].match(/[a-z]+:[^?:]+/);
24
+ // url = new URL(calledFile[0]+'/.'+url).toString();
25
+ const e = new Error();
26
+ const calledFile = e.stack.split('\n')[2].match(/[a-z]+:[^:]+/);
27
+ const calledUrl = new URL(calledFile);
28
+ calledUrl.search = '';
29
+ url = new URL(url, calledUrl).toString();
30
+ }
31
+
32
+ const rootNode = options.for ?? document.head ?? document.documentElement;
33
+
34
+ if (cssImported[url]) return; // check if imported already
35
+ cssImported[url] = true;
36
+
37
+ for (let el of rootNode.querySelectorAll('link[rel=stylesheet]')) { // check if manually added
38
+ cssImported[el.href] = true; // cache
39
+ if (el.href === url) return;
40
+ }
41
+ const link = rootNode.ownerDocument.createElement('link');
42
+ link.rel = 'stylesheet';
43
+ if (options.media) link.media = options.media;
44
+
45
+ link.href = url;
46
+ rootGetStyleWrapper(rootNode).append(link);
47
+ //styleWrapper.append(link);
48
+ return link;
49
+ }
50
+
51
+
52
+ const styleWrappers = new WeakMap();
53
+ function rootGetStyleWrapper(root) {
54
+ let styleWrapper = styleWrappers.get(root);
55
+ if (!styleWrapper) {
56
+ styleWrapper = document.createElement('div');
57
+ root.prepend(styleWrapper);
58
+ styleWrappers.set(root, styleWrapper);
59
+ }
60
+ return styleWrapper;
61
+ }
package/.htaccess DELETED
@@ -1,7 +0,0 @@
1
- RewriteEngine On
2
-
3
- RewriteRule ^(.*).min.js$ $1.js [L]
4
-
5
- RewriteRule ^(.*).min.css$ $1.css [L]
6
-
7
- RewriteRule ^(.*)@[^/]+/(.*)$ $1/$2 [L]