u2ui 1.0.1 → 1.4.6

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 +87 -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 +15 -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 +87 -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 +151 -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,485 @@
1
+ import * as dnd from '../../js/drag/drag.js';
2
+
3
+ function eventDropzone(e) {
4
+ for (const node of e.composedPath()) {
5
+ if (node.nodeType === 1 && node.matches?.('[u2-dropzone]')) return node;
6
+ }
7
+ return null;
8
+ }
9
+
10
+ let currentStrategy = null;
11
+ let currentDropzone = null;
12
+ let currentBefore = null;
13
+
14
+ const dropzoneHandler = {
15
+ dragstart: () => {
16
+ if (!dnd.dragged) return; // just handle elements for now
17
+ const zones = document.querySelectorAll('[u2-dropzone]');
18
+ zones.forEach(zone => {
19
+ const valid = canDrop(zone, dnd.dragged);
20
+ zone.classList.toggle(':drop-invalid', !valid);
21
+ zone.classList.toggle(':drop-valid', valid);
22
+ });
23
+
24
+ // NEU: Strategy vorbereiten (placeholder/clone erstellen)
25
+ const firstValidZone = document.querySelector('[u2-dropzone].\\:drop-valid');
26
+ currentStrategy = getStrategy(firstValidZone);
27
+ },
28
+
29
+ dragend: (e) => {
30
+ // NEU: Cancel aufrufen wenn nicht gedropped (ESC oder invalid drop)
31
+ if (e.dataTransfer.dropEffect === 'none') {
32
+ currentStrategy?.cancel?.();
33
+ }
34
+
35
+ document.querySelectorAll('[u2-dropzone]').forEach(zone => {
36
+ zone.classList.remove(':drop-invalid', ':drop-valid', ':dragover');
37
+ });
38
+
39
+ // NEU: Strategy zurücksetzen
40
+ //currentStrategy = null; // Nein! wird noch gebraucht für effekt
41
+ },
42
+
43
+ dragover: (e) => {
44
+ const dropzone = eventDropzone(e);
45
+ if (!dropzone || !dnd.dragged) return;
46
+ dropzone.classList.add(':dragover');
47
+ if (!canDrop(dropzone, dnd.dragged)) return;
48
+
49
+ const before = getElementBefore(dropzone, e);
50
+
51
+ if (currentDropzone !== dropzone || currentBefore !== before) {
52
+ // NEU: Strategy von dieser Zone verwenden
53
+ const strategy = getStrategy(dropzone);
54
+ // NEU: Wenn Strategy wechselt, cleanup alte & prepare neue
55
+ if (currentStrategy && currentStrategy !== strategy) {
56
+ currentStrategy.cancel?.();
57
+ strategy.prepare?.(dnd.dragged);
58
+ currentStrategy = strategy;
59
+ }
60
+ // NEU: Strategy move() aufrufen statt direkt indicateDrop()
61
+ strategy.move(dropzone, 'before', before);
62
+ }
63
+ currentBefore = before;
64
+ currentDropzone = dropzone;
65
+
66
+ // ALT: indicateDrop(dropzone, 'before', before);
67
+
68
+ e.preventDefault();
69
+ },
70
+
71
+ dragleave: (e) => {
72
+ const dropzone = eventDropzone(e);
73
+ if (!dropzone) return;
74
+ if (!dropzone.contains(e.relatedTarget)) {
75
+ dropzone.classList.remove(':dragover');
76
+
77
+ // NEU: Nur cleanup wenn wir ALLE Dropzones verlassen
78
+ const stillInAnyZone = document.querySelector('[u2-dropzone].\\:dragover');
79
+ if (!stillInAnyZone) currentStrategy?.cancel?.();
80
+
81
+ // ALT: indicateDrop(null);
82
+ }
83
+ },
84
+
85
+ drop: (e) => {
86
+ e.preventDefault();
87
+ const dropzone = eventDropzone(e);
88
+ if (!dropzone || !dnd.dragged) return;
89
+ if (!canDrop(dropzone, dnd.dragged)) return;
90
+ const before = getElementBefore(dropzone, e);
91
+
92
+ const missingDropzone = dnd.dragged.closest('[u2-dropzone]');
93
+ if (missingDropzone) {
94
+ missingDropzone.dispatchEvent(new CustomEvent('u2-dropzone-drop', {
95
+ detail: { remove: dnd.dragged },
96
+ bubbles: true
97
+ }));
98
+ }
99
+ // NEU: performDrop unterscheidet sich je nach Strategy
100
+ const performDrop = () => {
101
+ // Bei 'move' und 'ghost' ist Element schon am richtigen Ort
102
+ // Bei 'indicate' muss es erst jetzt bewegt werden
103
+ if (currentStrategy !== strategies.move && currentStrategy !== strategies.ghost) {
104
+ dropzone.insertBefore(dnd.dragged, before);
105
+ }
106
+
107
+ // NEU: Strategy finalisieren (cleanup placeholder/clone)
108
+ currentStrategy?.finalize?.();
109
+ dropzone.dispatchEvent(new CustomEvent('u2-dropzone-drop', {
110
+ detail: { add: dnd.dragged },
111
+ bubbles: true
112
+ }));
113
+ };
114
+
115
+ // ALT: const performDrop = () => dropzone.insertBefore(dnd.dragged, before);
116
+
117
+ startViewTransition(performDrop);
118
+
119
+ // ALT: indicateDrop(null);
120
+
121
+ // NEU: Strategy zurücksetzen
122
+ //currentStrategy = null;
123
+ }
124
+ };
125
+
126
+ Object.entries(dropzoneHandler).forEach(([type, handler]) => document.addEventListener(type, handler));
127
+
128
+
129
+
130
+ function getStrategy(el) {
131
+ if (!el) return strategies.indicate;
132
+ const style = getComputedStyle(el);
133
+ const strategyName = style.getPropertyValue('--u2-dropzone-strategy').trim() || 'indicate';
134
+ return strategies[strategyName] || strategies.indicate;
135
+ }
136
+ export const strategies = {
137
+ indicate: {
138
+ prepare() {},
139
+ move(zone, position, element) {
140
+ indicateDrop(zone, position, element);
141
+ },
142
+ finalize() {
143
+ indicateDrop(null);
144
+ },
145
+ cancel() {
146
+ indicateDrop(null);
147
+ }
148
+ },
149
+ move: {
150
+ originalParent: null,
151
+ originalNext: null,
152
+
153
+ prepare(dragging) {
154
+ // Ursprungsposition merken für cancel
155
+ this.originalParent = dragging.parentNode;
156
+ this.originalNext = dragging.nextElementSibling;
157
+ },
158
+ move(zone, position, element) {
159
+ if (!dnd.dragged) return;
160
+ const perform = ()=>{
161
+ const before = position === 'before' ? element : element?.nextElementSibling;
162
+ zone.insertBefore(dnd.dragged, before);
163
+ }
164
+ startViewTransition(perform);
165
+ },
166
+ finalize() {
167
+ // Cleanup references
168
+ this.originalParent = null;
169
+ this.originalNext = null;
170
+ },
171
+ cancel() {
172
+ // Zurück zur Ursprungsposition
173
+ if (this.originalParent && dnd.dragged) {
174
+ this.originalParent.insertBefore(dnd.dragged, this.originalNext);
175
+ }
176
+ this.originalParent = null;
177
+ this.originalNext = null;
178
+ }
179
+ },
180
+ ghost: {
181
+ clone: null,
182
+ prepare(dragging) {
183
+ this.clone = dragging.cloneNode(true); // Ghost/Preview während drag
184
+ this.clone.classList.add('drag-clone');
185
+ this.clone.style.opacity = '0.5';
186
+ dragging.parentNode.insertBefore(this.clone, dragging);
187
+ return this.clone;
188
+ },
189
+ move(zone, position, element) {
190
+ if (!this.clone) return;
191
+ const before = position === 'before' ? element : element?.nextElementSibling;
192
+ zone.insertBefore(this.clone, before);
193
+ },
194
+ finalize() {
195
+ if (this.clone && dnd.dragged) { // Clone wird zum echten Element
196
+ this.clone.parentNode.insertBefore(dnd.dragged, this.clone);
197
+ }
198
+ this.clone?.remove();
199
+ this.clone = null;
200
+ },
201
+ cancel() {
202
+ this.clone?.remove(); // Einfach clone entfernen
203
+ this.clone = null;
204
+ }
205
+ },
206
+ };
207
+
208
+
209
+ function startViewTransition(fn){
210
+ if (!document.startViewTransition) return fn();
211
+ // Wird die Transition übersprungen (z.B. weil schon eine andere startet), rejected .ready –
212
+ // der Update-Callback (fn) läuft trotzdem. Rejection abfangen, sonst unhandled in der Konsole.
213
+ document.startViewTransition(fn).ready.catch(() => {});
214
+ }
215
+
216
+
217
+
218
+ function getElementBefore(container, e) {
219
+ const children = [...container.children].filter(child => child !== dnd.dragged);
220
+
221
+ if (children.length === 0) return null;
222
+
223
+ const mouseX = e.clientX;
224
+ const mouseY = e.clientY;
225
+
226
+ // Layout-Richtung erkennen
227
+ const layout = detectLayout(container, children);
228
+
229
+ // Alle Elemente mit Position und Distanz
230
+ const elements = children.map(child => {
231
+ const box = child.getBoundingClientRect();
232
+ return {
233
+ element: child,
234
+ box,
235
+ centerX: box.left + box.width / 2,
236
+ centerY: box.top + box.height / 2
237
+ };
238
+ });
239
+
240
+ // Nach visueller Position sortieren
241
+ elements.sort((a, b) => {
242
+ if (layout === 'vertical') return a.centerY - b.centerY;
243
+ if (layout === 'horizontal') return a.centerX - b.centerX;
244
+ // Grid/Flex mit Wrapping: erst Y, dann X
245
+ const yDiff = Math.abs(a.centerY - b.centerY);
246
+ return yDiff > 10 ? a.centerY - b.centerY : a.centerX - b.centerX;
247
+ });
248
+
249
+ // Finde erstes Element NACH der Maus
250
+ for (const item of elements) {
251
+ const isAfter = layout === 'vertical'
252
+ ? item.centerY > mouseY
253
+ : layout === 'horizontal'
254
+ ? item.centerX > mouseX
255
+ : isAfterInGrid(item, mouseX, mouseY);
256
+
257
+ if (isAfter) return item.element;
258
+ }
259
+
260
+ return null; // Am Ende einfügen
261
+ }
262
+
263
+ function detectLayout(container, children) {
264
+ if (children.length < 2) return 'vertical';
265
+
266
+ const styles = getComputedStyle(container);
267
+ const display = styles.display;
268
+
269
+ // Flex
270
+ if (display === 'flex' || display === 'inline-flex') {
271
+ const direction = styles.flexDirection;
272
+ if (direction === 'row' || direction === 'row-reverse') {
273
+ return styles.flexWrap === 'nowrap' ? 'horizontal' : 'grid';
274
+ }
275
+ return 'vertical';
276
+ }
277
+
278
+ // Grid
279
+ if (display === 'grid' || display === 'inline-grid') {
280
+ const columns = styles.gridTemplateColumns.split(' ').length;
281
+ return columns > 1 ? 'grid' : 'vertical';
282
+ }
283
+
284
+ // Heuristik: Vergleiche erste zwei Elemente
285
+ const first = children[0].getBoundingClientRect();
286
+ const second = children[1].getBoundingClientRect();
287
+
288
+ const verticalGap = Math.abs(second.top - first.bottom);
289
+ const horizontalGap = Math.abs(second.left - first.right);
290
+
291
+ // Gleiche Zeile = horizontal
292
+ if (Math.abs(first.top - second.top) < 10) return 'horizontal';
293
+
294
+ // Gleiche Spalte = vertical
295
+ if (Math.abs(first.left - second.left) < 10) return 'vertical';
296
+
297
+ // Wrapping Grid/Flex
298
+ return 'grid';
299
+ }
300
+ function isAfterInGrid(item, mouseX, mouseY) {
301
+ const { box, centerX, centerY } = item;
302
+
303
+ // Element ist in einer späteren Zeile
304
+ if (centerY > mouseY + box.height / 4) return true;
305
+
306
+ // Gleiche Zeile, aber rechts von Maus
307
+ const sameLine = Math.abs(centerY - mouseY) < box.height / 2;
308
+ return sameLine && centerX > mouseX;
309
+ }
310
+
311
+
312
+
313
+ // === Helper Function ===
314
+ function canDrop(dropzone, dragged) {
315
+ let selector = dropzone.getAttribute('u2-dropzone').trim();
316
+ if (selector === '*') return true;
317
+ selector ||= ':scope > *'; // just own
318
+ dropzone.id ||= 'u2-dropzone-tmp';
319
+ selector = selector.replaceAll(':scope', '#' + dropzone.id);
320
+ let valid = false;
321
+ try {
322
+ valid = dragged.matches(selector);
323
+ } catch (e) {
324
+ console.error(e);
325
+ }
326
+ dropzone.id === 'u2-dropzone-tmp' && dropzone.removeAttribute('id');
327
+ return valid;
328
+ }
329
+
330
+
331
+ function indicateDrop(container, position, element = null) {
332
+
333
+ if (!element) {
334
+ if (position === 'after') {
335
+ element = container.firstElementChild;
336
+ position = 'before';
337
+ }
338
+ if (position === 'before') {
339
+ element = container.lastElementChild;
340
+ position = 'after';
341
+ }
342
+ }
343
+
344
+ let indicator = document.getElementById('drop-indicator');
345
+ if (!indicator) {
346
+ indicator = document.createElement('div');
347
+ indicator.id = 'drop-indicator';
348
+ indicator.popover = 'manual';
349
+ indicator.innerHTML = `
350
+ <style>
351
+ #drop-indicator {
352
+ position: fixed;
353
+ margin: 0;
354
+ padding: 0;
355
+ border: none;
356
+ background: #2563eb;
357
+ pointer-events: none;
358
+ overflow: visible;
359
+ transition: all .07s ease-out;
360
+ z-index: 9999;
361
+ &::before, &::after {
362
+ content: "";
363
+ width: 9px;
364
+ height: 9px;
365
+ border-radius: 50%;
366
+ background: inherit;
367
+ position: absolute;
368
+ }
369
+ }
370
+ #drop-indicator.horizontal {
371
+ width: 2px;
372
+ &::before, &::after { left: -4px; }
373
+ &::before { top: -5px; }
374
+ &::after { bottom: -5px; }
375
+ }
376
+ #drop-indicator.vertical {
377
+ height: 2px;
378
+ &::before, &::after { top: -4px; }
379
+ &::before { left: -5px; }
380
+ &::after { right: -5px; }
381
+ }
382
+ </style>
383
+ `;
384
+ document.body.appendChild(indicator);
385
+ }
386
+ // Verstecken
387
+ if (!container) {
388
+ indicator.hidePopover();
389
+ return;
390
+ }
391
+
392
+
393
+ // Leerer Container
394
+ if (!element) {
395
+ const rect = container.getBoundingClientRect();
396
+ const styles = getComputedStyle(container);
397
+ const paddingTop = parseFloat(styles.paddingTop);
398
+ const paddingLeft = parseFloat(styles.paddingLeft);
399
+
400
+ indicator.className = 'vertical';
401
+ indicator.style.top = `${rect.top + paddingTop}px`;
402
+ indicator.style.left = `${rect.left + paddingLeft}px`;
403
+ indicator.style.width = `${rect.width - paddingLeft - parseFloat(styles.paddingRight)}px`;
404
+ indicator.showPopover();
405
+ return;
406
+ }
407
+
408
+ // Orientierung erkennen
409
+ const sibling = position === 'before'
410
+ ? element.previousElementSibling
411
+ : element.nextElementSibling;
412
+ const isHorizontal = detectHorizontalLayout(element, sibling);
413
+
414
+ const rect = element.getBoundingClientRect();
415
+ const styles = getComputedStyle(element);
416
+
417
+ if (isHorizontal) {
418
+ // VERTIKALER Indikator (zwischen horizontal angeordneten Elementen)
419
+ indicator.className = 'horizontal';
420
+
421
+ let left;
422
+ if (sibling) {
423
+ const siblingRect = sibling.getBoundingClientRect();
424
+ const siblingStyles = getComputedStyle(sibling);
425
+
426
+ if (position === 'before') {
427
+ // Zwischen previousSibling und element
428
+ const gap = rect.left - siblingRect.right;
429
+ left = siblingRect.right + gap / 2;
430
+ } else {
431
+ // Zwischen element und nextSibling
432
+ const gap = siblingRect.left - rect.right;
433
+ left = rect.right + gap / 2;
434
+ }
435
+ } else { // Kein Nachbar: Am Rand mit Margin
436
+ const margin = position === 'before' ? parseFloat(styles.marginLeft) : parseFloat(styles.marginRight);
437
+ left = position === 'before' ? rect.left - margin / 2 : rect.right + margin / 2;
438
+ }
439
+
440
+ indicator.style.left = `${left - 1}px`;
441
+ indicator.style.top = `${rect.top}px`;
442
+ indicator.style.height = `${rect.height}px`;
443
+ indicator.style.width = '2px';
444
+
445
+ } else {
446
+ // HORIZONTALER Indikator (zwischen vertikal angeordneten Elementen)
447
+ indicator.className = 'vertical';
448
+
449
+ let top;
450
+ if (sibling) {
451
+ const siblingRect = sibling.getBoundingClientRect();
452
+
453
+ if (position === 'before') { // Zwischen previousSibling und element
454
+ const gap = rect.top - siblingRect.bottom;
455
+ top = siblingRect.bottom + gap / 2;
456
+ } else { // Zwischen element und nextSibling
457
+ const gap = siblingRect.top - rect.bottom;
458
+ top = rect.bottom + gap / 2;
459
+ }
460
+ } else {
461
+ // Kein Nachbar: Am Rand mit Margin
462
+ const margin = position === 'before' ? parseFloat(styles.marginTop) : parseFloat(styles.marginBottom);
463
+ top = position === 'before' ? rect.top - margin / 2 : rect.bottom + margin / 2;
464
+ }
465
+
466
+ indicator.style.top = `${top - 1}px`;
467
+ indicator.style.left = `${rect.left}px`;
468
+ indicator.style.width = `${rect.width}px`;
469
+ indicator.style.height = '2px';
470
+ }
471
+
472
+ indicator.showPopover();
473
+ }
474
+
475
+ function detectHorizontalLayout(element, sibling) {
476
+ if (!sibling) return false;
477
+
478
+ const rect = element.getBoundingClientRect();
479
+ const siblingRect = sibling.getBoundingClientRect();
480
+
481
+ const yDiff = Math.abs(rect.top - siblingRect.top);
482
+ const avgHeight = (rect.height + siblingRect.height) / 2;
483
+
484
+ return yDiff < avgHeight * 0.5;
485
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "schemaVersion": "1.0.0",
3
+ "readme": "README.md",
4
+ "modules": [{
5
+ "kind": "javascript-module",
6
+ "path": "dropzone.js",
7
+ "declarations": [{
8
+ "description": "Dropzone for draggable elements",
9
+ "name": "u2-dropzone",
10
+ "members": [],
11
+ "events": [{
12
+ "name": "u2-dropzone-drop",
13
+ "description": "Fired on the dropzone when an element is dropped"
14
+ }],
15
+ "attributes": [{
16
+ "name": "u2-dropzone",
17
+ "description": "Selector of accepted draggable items, empty for all",
18
+ "u2Examples": ["", ":scope > *"]
19
+ }],
20
+ "cssProperties": [{
21
+ "name": "--u2-dropzone-strategy",
22
+ "description": "The drop strategy",
23
+ "syntax": "*"
24
+ }],
25
+ "attributeName": "u2-dropzone"
26
+ }],
27
+ "exports": [{
28
+ "kind": "custom-attribute-definition",
29
+ "name": "u2-dropzone",
30
+ "declaration": {
31
+ "name": "u2-dropzone",
32
+ "module": "dropzone.js"
33
+ }
34
+ }]
35
+ }]
36
+ }
@@ -1,5 +1,5 @@
1
1
  # [u2-focusgroup] - attribute
2
- Focus movement by arrow keys
2
+ Enables arrow-key navigation between focusable elements in a container.
3
3
 
4
4
  ## Features
5
5
 
@@ -18,29 +18,29 @@ https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/Focusgroup/explainer
18
18
  ## Usage
19
19
 
20
20
  ```html
21
- <div u2-focusgroup="wrap remember">
22
- <button>focusgroup</button>
23
- <button>focus and</button>
24
- <button>then use arrow-keys</button>
21
+ <div u2-focusgroup="wrap remember">
22
+ <button>focusgroup</button>
23
+ <button>focus and</button>
24
+ <button>then use arrow-keys</button>
25
25
  </div>
26
26
  ```
27
27
 
28
28
  ```css
29
- [u2-focusgroup] [tabindex="0"] {
30
- background: lightblue;
29
+ [u2-focusgroup] [tabindex="0"] {
30
+ background: lightblue;
31
31
  }
32
32
  ```
33
33
 
34
34
  ## Install
35
35
 
36
36
  ```html
37
- <script src="https://cdn.jsdelivr.net/gh/u2ui/u2@x.x.x/attr/focusgroup/focusgroup.min.js" type=module async></script>
37
+ <script src="https://cdn.jsdelivr.net/gh/u2ui/u2@main/attr/focusgroup/focusgroup.js" type=module async></script>
38
38
  ```
39
39
 
40
40
  ## Demos
41
41
 
42
- [minimal.html](http://gcdn.li/u2ui/u2@main/attr/focusgroup/tests/minimal.html)
43
42
  [test.html](http://gcdn.li/u2ui/u2@main/attr/focusgroup/tests/test.html)
43
+ [minimal.html](http://gcdn.li/u2ui/u2@main/attr/focusgroup/tests/minimal.html)
44
44
 
45
45
  ## About
46
46