@weapp-vite/web 1.3.37 → 1.4.1

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 (334) hide show
  1. package/README.md +144 -5
  2. package/dist/_virtual/_rolldown/runtime.mjs +19 -1
  3. package/dist/compiler/wxml/attributes.mjs +1 -1
  4. package/dist/compiler/wxml/attributes.mjs.map +1 -1
  5. package/dist/compiler/wxml/compile.mjs +6 -3
  6. package/dist/compiler/wxml/compile.mjs.map +1 -1
  7. package/dist/compiler/wxml/interpolation.mjs +1 -2
  8. package/dist/compiler/wxml/interpolation.mjs.map +1 -1
  9. package/dist/compiler/wxml/navigation.mjs +5 -7
  10. package/dist/compiler/wxml/navigation.mjs.map +1 -1
  11. package/dist/compiler/wxml/parser.mjs +5 -5
  12. package/dist/compiler/wxml/parser.mjs.map +1 -1
  13. package/dist/compiler/wxml/renderer.mjs +16 -12
  14. package/dist/compiler/wxml/renderer.mjs.map +1 -1
  15. package/dist/compiler/wxml/specialNodes.mjs +8 -2
  16. package/dist/compiler/wxml/specialNodes.mjs.map +1 -1
  17. package/dist/compiler/wxml/types.d.mts +12 -0
  18. package/dist/compiler/wxs.mjs +5 -5
  19. package/dist/compiler/wxs.mjs.map +1 -1
  20. package/dist/css/wxss.d.mts +1 -0
  21. package/dist/css/wxss.mjs +110 -9
  22. package/dist/css/wxss.mjs.map +1 -1
  23. package/dist/index.d.mts +24 -6
  24. package/dist/index.mjs +21 -4
  25. package/dist/plugin/assets.d.mts +7 -0
  26. package/dist/plugin/assets.mjs +122 -0
  27. package/dist/plugin/assets.mjs.map +1 -0
  28. package/dist/plugin/constants.mjs +10 -1
  29. package/dist/plugin/constants.mjs.map +1 -1
  30. package/dist/plugin/dependencyScan.mjs +41 -0
  31. package/dist/plugin/dependencyScan.mjs.map +1 -0
  32. package/dist/plugin/entry.mjs +55 -6
  33. package/dist/plugin/entry.mjs.map +1 -1
  34. package/dist/plugin/files.mjs +1 -1
  35. package/dist/plugin/files.mjs.map +1 -1
  36. package/dist/plugin/index.d.mts +37 -3
  37. package/dist/plugin/index.mjs +244 -73
  38. package/dist/plugin/index.mjs.map +1 -1
  39. package/dist/plugin/layout.mjs +24 -0
  40. package/dist/plugin/layout.mjs.map +1 -0
  41. package/dist/plugin/path.mjs +6 -2
  42. package/dist/plugin/path.mjs.map +1 -1
  43. package/dist/plugin/register.mjs +45 -33
  44. package/dist/plugin/register.mjs.map +1 -1
  45. package/dist/plugin/scan.mjs +211 -92
  46. package/dist/plugin/scan.mjs.map +1 -1
  47. package/dist/plugin/scanSfc.mjs +65 -0
  48. package/dist/plugin/scanSfc.mjs.map +1 -0
  49. package/dist/plugin/state.mjs +3 -2
  50. package/dist/plugin/state.mjs.map +1 -1
  51. package/dist/plugin/styleModule.mjs +52 -0
  52. package/dist/plugin/styleModule.mjs.map +1 -0
  53. package/dist/plugin/types.d.mts +37 -1
  54. package/dist/plugin/vueSfc.mjs +150 -0
  55. package/dist/plugin/vueSfc.mjs.map +1 -0
  56. package/dist/runtime/appShell/container.mjs +25 -0
  57. package/dist/runtime/appShell/container.mjs.map +1 -0
  58. package/dist/runtime/appShell/tabBar/index.mjs +192 -0
  59. package/dist/runtime/appShell/tabBar/index.mjs.map +1 -0
  60. package/dist/runtime/appShell/tabBar/style.mjs +127 -0
  61. package/dist/runtime/appShell/tabBar/style.mjs.map +1 -0
  62. package/dist/runtime/button/helpers.mjs +1 -58
  63. package/dist/runtime/button/helpers.mjs.map +1 -1
  64. package/dist/runtime/button/index.d.mts +4 -5
  65. package/dist/runtime/button/index.mjs +6 -28
  66. package/dist/runtime/button/index.mjs.map +1 -1
  67. package/dist/runtime/button/style.mjs +53 -28
  68. package/dist/runtime/button/style.mjs.map +1 -1
  69. package/dist/runtime/component/behavior.mjs +26 -2
  70. package/dist/runtime/component/behavior.mjs.map +1 -1
  71. package/dist/runtime/component/element.mjs +107 -31
  72. package/dist/runtime/component/element.mjs.map +1 -1
  73. package/dist/runtime/component/observers.mjs +36 -0
  74. package/dist/runtime/component/observers.mjs.map +1 -0
  75. package/dist/runtime/component/publicInstance.mjs +48 -0
  76. package/dist/runtime/component/publicInstance.mjs.map +1 -0
  77. package/dist/runtime/component/relations.mjs +36 -0
  78. package/dist/runtime/component/relations.mjs.map +1 -0
  79. package/dist/runtime/component/slots.mjs +24 -0
  80. package/dist/runtime/component/slots.mjs.map +1 -0
  81. package/dist/runtime/component/state.mjs +13 -3
  82. package/dist/runtime/component/state.mjs.map +1 -1
  83. package/dist/runtime/component/types.d.mts +29 -4
  84. package/dist/runtime/component/virtualHost.mjs +83 -0
  85. package/dist/runtime/component/virtualHost.mjs.map +1 -0
  86. package/dist/runtime/host/index.d.mts +13 -0
  87. package/dist/runtime/host/index.mjs +47 -0
  88. package/dist/runtime/host/index.mjs.map +1 -0
  89. package/dist/runtime/host/types.d.mts +28 -0
  90. package/dist/runtime/hostGlobals.d.mts +9 -0
  91. package/dist/runtime/hostGlobals.mjs +39 -0
  92. package/dist/runtime/hostGlobals.mjs.map +1 -0
  93. package/dist/runtime/index.d.mts +21 -3
  94. package/dist/runtime/index.mjs +26 -4
  95. package/dist/runtime/index.mjs.map +1 -0
  96. package/dist/runtime/legacyTemplate/dom.mjs +3 -3
  97. package/dist/runtime/legacyTemplate/dom.mjs.map +1 -1
  98. package/dist/runtime/legacyTemplate/expression.mjs +9 -9
  99. package/dist/runtime/legacyTemplate/expression.mjs.map +1 -1
  100. package/dist/runtime/legacyTemplate/index.mjs +6 -6
  101. package/dist/runtime/legacyTemplate/index.mjs.map +1 -1
  102. package/dist/runtime/nativeComponents/canvas/index.mjs +53 -0
  103. package/dist/runtime/nativeComponents/canvas/index.mjs.map +1 -0
  104. package/dist/runtime/nativeComponents/checkbox.mjs +137 -0
  105. package/dist/runtime/nativeComponents/checkbox.mjs.map +1 -0
  106. package/dist/runtime/nativeComponents/cover/index.mjs +23 -0
  107. package/dist/runtime/nativeComponents/cover/index.mjs.map +1 -0
  108. package/dist/runtime/nativeComponents/form.d.mts +7 -0
  109. package/dist/runtime/nativeComponents/form.mjs +50 -0
  110. package/dist/runtime/nativeComponents/form.mjs.map +1 -0
  111. package/dist/runtime/nativeComponents/formControl.mjs +61 -0
  112. package/dist/runtime/nativeComponents/formControl.mjs.map +1 -0
  113. package/dist/runtime/nativeComponents/helpers.mjs +25 -0
  114. package/dist/runtime/nativeComponents/helpers.mjs.map +1 -0
  115. package/dist/runtime/nativeComponents/icon/helpers.mjs +42 -0
  116. package/dist/runtime/nativeComponents/icon/helpers.mjs.map +1 -0
  117. package/dist/runtime/nativeComponents/icon/index.mjs +45 -0
  118. package/dist/runtime/nativeComponents/icon/index.mjs.map +1 -0
  119. package/dist/runtime/nativeComponents/icon/style.mjs +176 -0
  120. package/dist/runtime/nativeComponents/icon/style.mjs.map +1 -0
  121. package/dist/runtime/nativeComponents/image.d.mts +8 -0
  122. package/dist/runtime/nativeComponents/image.mjs +121 -0
  123. package/dist/runtime/nativeComponents/image.mjs.map +1 -0
  124. package/dist/runtime/nativeComponents/index.d.mts +11 -0
  125. package/dist/runtime/nativeComponents/index.mjs +83 -0
  126. package/dist/runtime/nativeComponents/index.mjs.map +1 -0
  127. package/dist/runtime/nativeComponents/input.d.mts +8 -0
  128. package/dist/runtime/nativeComponents/input.mjs +131 -0
  129. package/dist/runtime/nativeComponents/input.mjs.map +1 -0
  130. package/dist/runtime/nativeComponents/label.mjs +36 -0
  131. package/dist/runtime/nativeComponents/label.mjs.map +1 -0
  132. package/dist/runtime/nativeComponents/mediaRegistry.mjs +47 -0
  133. package/dist/runtime/nativeComponents/mediaRegistry.mjs.map +1 -0
  134. package/dist/runtime/nativeComponents/movable/helpers.mjs +23 -0
  135. package/dist/runtime/nativeComponents/movable/helpers.mjs.map +1 -0
  136. package/dist/runtime/nativeComponents/movable/index.mjs +117 -0
  137. package/dist/runtime/nativeComponents/movable/index.mjs.map +1 -0
  138. package/dist/runtime/nativeComponents/navigator.mjs +200 -0
  139. package/dist/runtime/nativeComponents/navigator.mjs.map +1 -0
  140. package/dist/runtime/nativeComponents/picker/editors.mjs +74 -0
  141. package/dist/runtime/nativeComponents/picker/editors.mjs.map +1 -0
  142. package/dist/runtime/nativeComponents/picker/helpers.mjs +57 -0
  143. package/dist/runtime/nativeComponents/picker/helpers.mjs.map +1 -0
  144. package/dist/runtime/nativeComponents/picker/index.mjs +210 -0
  145. package/dist/runtime/nativeComponents/picker/index.mjs.map +1 -0
  146. package/dist/runtime/nativeComponents/picker/style.mjs +71 -0
  147. package/dist/runtime/nativeComponents/picker/style.mjs.map +1 -0
  148. package/dist/runtime/nativeComponents/pickerView/column.mjs +134 -0
  149. package/dist/runtime/nativeComponents/pickerView/column.mjs.map +1 -0
  150. package/dist/runtime/nativeComponents/pickerView/helpers.mjs +17 -0
  151. package/dist/runtime/nativeComponents/pickerView/helpers.mjs.map +1 -0
  152. package/dist/runtime/nativeComponents/pickerView/index.mjs +128 -0
  153. package/dist/runtime/nativeComponents/pickerView/index.mjs.map +1 -0
  154. package/dist/runtime/nativeComponents/pickerView/style.mjs +58 -0
  155. package/dist/runtime/nativeComponents/pickerView/style.mjs.map +1 -0
  156. package/dist/runtime/nativeComponents/primitives.mjs +16 -0
  157. package/dist/runtime/nativeComponents/primitives.mjs.map +1 -0
  158. package/dist/runtime/nativeComponents/progress/helpers.mjs +29 -0
  159. package/dist/runtime/nativeComponents/progress/helpers.mjs.map +1 -0
  160. package/dist/runtime/nativeComponents/progress/index.mjs +130 -0
  161. package/dist/runtime/nativeComponents/progress/index.mjs.map +1 -0
  162. package/dist/runtime/nativeComponents/progress/style.mjs +40 -0
  163. package/dist/runtime/nativeComponents/progress/style.mjs.map +1 -0
  164. package/dist/runtime/nativeComponents/radio.mjs +147 -0
  165. package/dist/runtime/nativeComponents/radio.mjs.map +1 -0
  166. package/dist/runtime/nativeComponents/richText/helpers.mjs +230 -0
  167. package/dist/runtime/nativeComponents/richText/helpers.mjs.map +1 -0
  168. package/dist/runtime/nativeComponents/richText/index.mjs +74 -0
  169. package/dist/runtime/nativeComponents/richText/index.mjs.map +1 -0
  170. package/dist/runtime/nativeComponents/scrollView.d.mts +15 -0
  171. package/dist/runtime/nativeComponents/scrollView.mjs +79 -0
  172. package/dist/runtime/nativeComponents/scrollView.mjs.map +1 -0
  173. package/dist/runtime/nativeComponents/slider/helpers.mjs +28 -0
  174. package/dist/runtime/nativeComponents/slider/helpers.mjs.map +1 -0
  175. package/dist/runtime/nativeComponents/slider/index.mjs +120 -0
  176. package/dist/runtime/nativeComponents/slider/index.mjs.map +1 -0
  177. package/dist/runtime/nativeComponents/slider/style.mjs +60 -0
  178. package/dist/runtime/nativeComponents/slider/style.mjs.map +1 -0
  179. package/dist/runtime/nativeComponents/style.mjs +41 -0
  180. package/dist/runtime/nativeComponents/style.mjs.map +1 -0
  181. package/dist/runtime/nativeComponents/swiper/helpers.mjs +52 -0
  182. package/dist/runtime/nativeComponents/swiper/helpers.mjs.map +1 -0
  183. package/dist/runtime/nativeComponents/swiper/index.mjs +235 -0
  184. package/dist/runtime/nativeComponents/swiper/index.mjs.map +1 -0
  185. package/dist/runtime/nativeComponents/swiper/item.mjs +14 -0
  186. package/dist/runtime/nativeComponents/swiper/item.mjs.map +1 -0
  187. package/dist/runtime/nativeComponents/swiper/style.mjs +20 -0
  188. package/dist/runtime/nativeComponents/swiper/style.mjs.map +1 -0
  189. package/dist/runtime/nativeComponents/switch.d.mts +7 -0
  190. package/dist/runtime/nativeComponents/switch.mjs +132 -0
  191. package/dist/runtime/nativeComponents/switch.mjs.map +1 -0
  192. package/dist/runtime/nativeComponents/textarea.d.mts +9 -0
  193. package/dist/runtime/nativeComponents/textarea.mjs +144 -0
  194. package/dist/runtime/nativeComponents/textarea.mjs.map +1 -0
  195. package/dist/runtime/nativeComponents/video/helpers.d.mts +12 -0
  196. package/dist/runtime/nativeComponents/video/helpers.mjs +21 -0
  197. package/dist/runtime/nativeComponents/video/helpers.mjs.map +1 -0
  198. package/dist/runtime/nativeComponents/video/index.mjs +124 -0
  199. package/dist/runtime/nativeComponents/video/index.mjs.map +1 -0
  200. package/dist/runtime/nativeComponents/video/style.mjs +14 -0
  201. package/dist/runtime/nativeComponents/video/style.mjs.map +1 -0
  202. package/dist/runtime/navigationBar/index.mjs +1 -3
  203. package/dist/runtime/navigationBar/index.mjs.map +1 -1
  204. package/dist/runtime/pageLayout.d.mts +9 -0
  205. package/dist/runtime/pageLayout.mjs +16 -0
  206. package/dist/runtime/pageLayout.mjs.map +1 -0
  207. package/dist/runtime/polyfill/animation.mjs +120 -0
  208. package/dist/runtime/polyfill/animation.mjs.map +1 -0
  209. package/dist/runtime/polyfill/appState.mjs +1 -1
  210. package/dist/runtime/polyfill/appState.mjs.map +1 -1
  211. package/dist/runtime/polyfill/async.d.mts +7 -0
  212. package/dist/runtime/polyfill/async.mjs.map +1 -1
  213. package/dist/runtime/polyfill/canvasContext.mjs +41 -0
  214. package/dist/runtime/polyfill/canvasContext.mjs.map +1 -1
  215. package/dist/runtime/polyfill/device.mjs +1 -1
  216. package/dist/runtime/polyfill/device.mjs.map +1 -1
  217. package/dist/runtime/polyfill/deviceApi.mjs +6 -3
  218. package/dist/runtime/polyfill/deviceApi.mjs.map +1 -1
  219. package/dist/runtime/polyfill/deviceAuthSystemApi.mjs +8 -2
  220. package/dist/runtime/polyfill/deviceAuthSystemApi.mjs.map +1 -1
  221. package/dist/runtime/polyfill/eventBus.mjs +56 -0
  222. package/dist/runtime/polyfill/eventBus.mjs.map +1 -0
  223. package/dist/runtime/polyfill/fileSystemManager.mjs +5 -2
  224. package/dist/runtime/polyfill/fileSystemManager.mjs.map +1 -1
  225. package/dist/runtime/polyfill/files.mjs +10 -10
  226. package/dist/runtime/polyfill/files.mjs.map +1 -1
  227. package/dist/runtime/polyfill/font.mjs +33 -0
  228. package/dist/runtime/polyfill/font.mjs.map +1 -0
  229. package/dist/runtime/polyfill/index.d.mts +2 -2
  230. package/dist/runtime/polyfill/index.mjs +49 -45
  231. package/dist/runtime/polyfill/index.mjs.map +1 -1
  232. package/dist/runtime/polyfill/interaction.mjs +7 -6
  233. package/dist/runtime/polyfill/interaction.mjs.map +1 -1
  234. package/dist/runtime/polyfill/interactionApi.mjs +9 -5
  235. package/dist/runtime/polyfill/interactionApi.mjs.map +1 -1
  236. package/dist/runtime/polyfill/intersectionObserver.mjs +106 -0
  237. package/dist/runtime/polyfill/intersectionObserver.mjs.map +1 -0
  238. package/dist/runtime/polyfill/locale.mjs +14 -0
  239. package/dist/runtime/polyfill/locale.mjs.map +1 -0
  240. package/dist/runtime/polyfill/locationApi.mjs +11 -6
  241. package/dist/runtime/polyfill/locationApi.mjs.map +1 -1
  242. package/dist/runtime/polyfill/mediaActions.mjs +2 -2
  243. package/dist/runtime/polyfill/mediaActions.mjs.map +1 -1
  244. package/dist/runtime/polyfill/mediaApi/file.mjs +3 -2
  245. package/dist/runtime/polyfill/mediaApi/file.mjs.map +1 -1
  246. package/dist/runtime/polyfill/mediaApi/info.mjs +6 -4
  247. package/dist/runtime/polyfill/mediaApi/info.mjs.map +1 -1
  248. package/dist/runtime/polyfill/mediaApi/picker.mjs +16 -8
  249. package/dist/runtime/polyfill/mediaApi/picker.mjs.map +1 -1
  250. package/dist/runtime/polyfill/mediaApi/preview.mjs +4 -2
  251. package/dist/runtime/polyfill/mediaApi/preview.mjs.map +1 -1
  252. package/dist/runtime/polyfill/mediaApi/process.mjs +4 -2
  253. package/dist/runtime/polyfill/mediaApi/process.mjs.map +1 -1
  254. package/dist/runtime/polyfill/menuApi.mjs +39 -4
  255. package/dist/runtime/polyfill/menuApi.mjs.map +1 -1
  256. package/dist/runtime/polyfill/navigationBarRuntime.mjs +6 -1
  257. package/dist/runtime/polyfill/navigationBarRuntime.mjs.map +1 -1
  258. package/dist/runtime/polyfill/network/request.mjs +2 -2
  259. package/dist/runtime/polyfill/network/request.mjs.map +1 -1
  260. package/dist/runtime/polyfill/platformApi.mjs +3 -2
  261. package/dist/runtime/polyfill/platformApi.mjs.map +1 -1
  262. package/dist/runtime/polyfill/routeRuntime/appLifecycle.mjs +88 -0
  263. package/dist/runtime/polyfill/routeRuntime/appLifecycle.mjs.map +1 -0
  264. package/dist/runtime/polyfill/routeRuntime/dom.mjs +44 -15
  265. package/dist/runtime/polyfill/routeRuntime/dom.mjs.map +1 -1
  266. package/dist/runtime/polyfill/routeRuntime/history.d.mts +30 -0
  267. package/dist/runtime/polyfill/routeRuntime/history.mjs +148 -0
  268. package/dist/runtime/polyfill/routeRuntime/history.mjs.map +1 -0
  269. package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs +39 -8
  270. package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs.map +1 -1
  271. package/dist/runtime/polyfill/routeRuntime/options.d.mts +11 -1
  272. package/dist/runtime/polyfill/routeRuntime/options.mjs +0 -1
  273. package/dist/runtime/polyfill/routeRuntime/options.mjs.map +1 -1
  274. package/dist/runtime/polyfill/routeRuntime/result.mjs +12 -0
  275. package/dist/runtime/polyfill/routeRuntime/result.mjs.map +1 -0
  276. package/dist/runtime/polyfill/routeRuntime/scroll.mjs +39 -0
  277. package/dist/runtime/polyfill/routeRuntime/scroll.mjs.map +1 -0
  278. package/dist/runtime/polyfill/routeRuntime/stack.mjs +122 -0
  279. package/dist/runtime/polyfill/routeRuntime/stack.mjs.map +1 -0
  280. package/dist/runtime/polyfill/routeRuntime.d.mts +26 -17
  281. package/dist/runtime/polyfill/routeRuntime.mjs +121 -96
  282. package/dist/runtime/polyfill/routeRuntime.mjs.map +1 -1
  283. package/dist/runtime/polyfill/runtimeDataApi.mjs +8 -3
  284. package/dist/runtime/polyfill/runtimeDataApi.mjs.map +1 -1
  285. package/dist/runtime/polyfill/runtimeOps.mjs +10 -6
  286. package/dist/runtime/polyfill/runtimeOps.mjs.map +1 -1
  287. package/dist/runtime/polyfill/selectorQuery.mjs +70 -14
  288. package/dist/runtime/polyfill/selectorQuery.mjs.map +1 -1
  289. package/dist/runtime/polyfill/storage.mjs +5 -2
  290. package/dist/runtime/polyfill/storage.mjs.map +1 -1
  291. package/dist/runtime/polyfill/storageAsync.mjs +4 -2
  292. package/dist/runtime/polyfill/storageAsync.mjs.map +1 -1
  293. package/dist/runtime/polyfill/system.mjs +31 -4
  294. package/dist/runtime/polyfill/system.mjs.map +1 -1
  295. package/dist/runtime/polyfill/systemApi.mjs +2 -1
  296. package/dist/runtime/polyfill/systemApi.mjs.map +1 -1
  297. package/dist/runtime/polyfill/types/locationRuntime.d.mts +1 -4
  298. package/dist/runtime/polyfill/types/platformRuntime.d.mts +9 -0
  299. package/dist/runtime/polyfill/types/systemAuth.d.mts +20 -9
  300. package/dist/runtime/polyfill/types/tabBarRuntime.d.mts +25 -0
  301. package/dist/runtime/polyfill/ui.mjs +2 -6
  302. package/dist/runtime/polyfill/ui.mjs.map +1 -1
  303. package/dist/runtime/polyfill/uiMediaApi.d.mts +11 -10
  304. package/dist/runtime/polyfill/uiMediaApi.mjs +26 -2
  305. package/dist/runtime/polyfill/uiMediaApi.mjs.map +1 -1
  306. package/dist/runtime/polyfill/videoContext.mjs +4 -0
  307. package/dist/runtime/polyfill/videoContext.mjs.map +1 -1
  308. package/dist/runtime/polyfill/vkSession.mjs +4 -14
  309. package/dist/runtime/polyfill/vkSession.mjs.map +1 -1
  310. package/dist/runtime/polyfill.d.mts +2 -2
  311. package/dist/runtime/renderContext.mjs +1 -1
  312. package/dist/runtime/renderContext.mjs.map +1 -1
  313. package/dist/runtime/rpx.mjs +17 -8
  314. package/dist/runtime/rpx.mjs.map +1 -1
  315. package/dist/runtime/seo/index.d.mts +31 -0
  316. package/dist/runtime/seo/index.mjs +94 -0
  317. package/dist/runtime/seo/index.mjs.map +1 -0
  318. package/dist/runtime/viewport/index.d.mts +12 -0
  319. package/dist/runtime/viewport/index.mjs +44 -0
  320. package/dist/runtime/viewport/index.mjs.map +1 -0
  321. package/dist/runtime/viewport/style.mjs +62 -0
  322. package/dist/runtime/viewport/style.mjs.map +1 -0
  323. package/dist/runtime/viewport/types.d.mts +14 -0
  324. package/dist/runtime/wevu.d.mts +20 -0
  325. package/dist/runtime/wevu.mjs +73 -0
  326. package/dist/runtime/wevu.mjs.map +1 -0
  327. package/dist/shared/nativeComponents.mjs +401 -0
  328. package/dist/shared/nativeComponents.mjs.map +1 -0
  329. package/dist/shared/tabBar.d.mts +19 -0
  330. package/dist/shared/tabBar.mjs +37 -0
  331. package/dist/shared/tabBar.mjs.map +1 -0
  332. package/dist/shared/wxml.mjs +3 -20
  333. package/dist/shared/wxml.mjs.map +1 -1
  334. package/package.json +14 -6
@@ -0,0 +1,230 @@
1
+ import { parseDocument } from "htmlparser2";
2
+
3
+ //#region src/runtime/nativeComponents/richText/helpers.ts
4
+ const ALLOWED_TAGS = /* @__PURE__ */ new Set([
5
+ "a",
6
+ "abbr",
7
+ "address",
8
+ "article",
9
+ "aside",
10
+ "b",
11
+ "bdi",
12
+ "bdo",
13
+ "big",
14
+ "blockquote",
15
+ "br",
16
+ "caption",
17
+ "center",
18
+ "cite",
19
+ "code",
20
+ "col",
21
+ "colgroup",
22
+ "dd",
23
+ "del",
24
+ "div",
25
+ "dl",
26
+ "dt",
27
+ "em",
28
+ "fieldset",
29
+ "font",
30
+ "h1",
31
+ "h2",
32
+ "h3",
33
+ "h4",
34
+ "h5",
35
+ "h6",
36
+ "header",
37
+ "hr",
38
+ "i",
39
+ "img",
40
+ "ins",
41
+ "label",
42
+ "legend",
43
+ "li",
44
+ "mark",
45
+ "ol",
46
+ "p",
47
+ "pre",
48
+ "q",
49
+ "rt",
50
+ "ruby",
51
+ "s",
52
+ "section",
53
+ "small",
54
+ "span",
55
+ "strong",
56
+ "sub",
57
+ "sup",
58
+ "table",
59
+ "tbody",
60
+ "td",
61
+ "tfoot",
62
+ "th",
63
+ "thead",
64
+ "tr",
65
+ "tt",
66
+ "u",
67
+ "ul"
68
+ ]);
69
+ const ALLOWED_ATTRIBUTES = /* @__PURE__ */ new Set([
70
+ "abbr",
71
+ "align",
72
+ "alt",
73
+ "axis",
74
+ "bgcolor",
75
+ "border",
76
+ "cellpadding",
77
+ "cellspacing",
78
+ "class",
79
+ "colspan",
80
+ "dir",
81
+ "height",
82
+ "href",
83
+ "id",
84
+ "lang",
85
+ "rowspan",
86
+ "scope",
87
+ "span",
88
+ "start",
89
+ "style",
90
+ "summary",
91
+ "target",
92
+ "title",
93
+ "type",
94
+ "valign",
95
+ "width"
96
+ ]);
97
+ const URL_ATTRIBUTES = /* @__PURE__ */ new Set(["href", "src"]);
98
+ const ALLOWED_STYLE_PROPERTIES = /* @__PURE__ */ new Set([
99
+ "background",
100
+ "background-color",
101
+ "border",
102
+ "border-bottom",
103
+ "border-color",
104
+ "border-left",
105
+ "border-radius",
106
+ "border-right",
107
+ "border-style",
108
+ "border-top",
109
+ "border-width",
110
+ "color",
111
+ "display",
112
+ "font-family",
113
+ "font-size",
114
+ "font-style",
115
+ "font-weight",
116
+ "height",
117
+ "letter-spacing",
118
+ "line-height",
119
+ "margin",
120
+ "margin-bottom",
121
+ "margin-left",
122
+ "margin-right",
123
+ "margin-top",
124
+ "max-height",
125
+ "max-width",
126
+ "min-height",
127
+ "min-width",
128
+ "opacity",
129
+ "overflow",
130
+ "padding",
131
+ "padding-bottom",
132
+ "padding-left",
133
+ "padding-right",
134
+ "padding-top",
135
+ "text-align",
136
+ "text-decoration",
137
+ "text-indent",
138
+ "text-overflow",
139
+ "text-transform",
140
+ "vertical-align",
141
+ "white-space",
142
+ "width",
143
+ "word-break",
144
+ "word-wrap"
145
+ ]);
146
+ function isRecord(value) {
147
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
148
+ }
149
+ function isSafeUrl(value, attribute) {
150
+ const normalized = Array.from(value).filter((character) => character.charCodeAt(0) > 32).join("").toLowerCase();
151
+ if (!normalized || normalized.startsWith("#") || normalized.startsWith("/") || normalized.startsWith("./") || normalized.startsWith("../")) return true;
152
+ if (/^(?:https?:|mailto:|tel:)/.test(normalized)) return true;
153
+ return attribute === "src" && /^data:image\/(?:gif|jpe?g|png|webp);base64,/.test(normalized);
154
+ }
155
+ function isSafeStyleValue(value) {
156
+ const normalized = value.toLowerCase().replace(/\s+/g, "");
157
+ return !normalized.includes("url(") && !normalized.includes("expression(") && !normalized.includes("javascript:") && !normalized.includes("behavior:") && !normalized.includes("-moz-binding");
158
+ }
159
+ function sanitizeRichTextStyle(value) {
160
+ const source = isRecord(value) ? Object.entries(value).map(([property, propertyValue]) => `${property}:${String(propertyValue)}`).join(";") : String(value ?? "");
161
+ const declarations = [];
162
+ for (const declaration of source.split(";")) {
163
+ const separator = declaration.indexOf(":");
164
+ if (separator <= 0) continue;
165
+ const property = declaration.slice(0, separator).trim().toLowerCase();
166
+ const propertyValue = declaration.slice(separator + 1).trim();
167
+ if (ALLOWED_STYLE_PROPERTIES.has(property) && propertyValue && isSafeStyleValue(propertyValue)) declarations.push(`${property}: ${propertyValue}`);
168
+ }
169
+ return declarations.join("; ");
170
+ }
171
+ function sanitizeRichTextAttributes(value, tagName) {
172
+ if (!isRecord(value)) return {};
173
+ const attributes = {};
174
+ for (const [rawName, rawValue] of Object.entries(value)) {
175
+ const name = rawName.trim().toLowerCase();
176
+ if (name.startsWith("on") || name === "srcdoc") continue;
177
+ if (!ALLOWED_ATTRIBUTES.has(name) && name !== "src" && !name.startsWith("aria-") && !name.startsWith("data-")) continue;
178
+ if (name === "src" && tagName !== "img") continue;
179
+ const serialized = name === "style" ? sanitizeRichTextStyle(rawValue) : String(rawValue ?? "");
180
+ if (!serialized || URL_ATTRIBUTES.has(name) && !isSafeUrl(serialized, name)) continue;
181
+ attributes[name] = serialized;
182
+ }
183
+ if (tagName === "a") attributes.rel = "noopener noreferrer";
184
+ return attributes;
185
+ }
186
+ function convertSourceNode(value) {
187
+ if (!isRecord(value)) return [];
188
+ if (value.type === "text" || !value.name && typeof value.text === "string") return [{
189
+ type: "text",
190
+ text: String(value.text ?? "")
191
+ }];
192
+ const children = Array.isArray(value.children) ? value.children.flatMap(convertSourceNode) : [];
193
+ const name = String(value.name ?? "").toLowerCase();
194
+ if (!ALLOWED_TAGS.has(name)) return children;
195
+ return [{
196
+ type: "element",
197
+ name,
198
+ attrs: sanitizeRichTextAttributes(value.attrs, name),
199
+ children
200
+ }];
201
+ }
202
+ function convertParsedNode(node) {
203
+ if (node.type === "text") return [{
204
+ type: "text",
205
+ text: node.data
206
+ }];
207
+ if (node.type !== "tag") return [];
208
+ const element = node;
209
+ const children = element.children.flatMap(convertParsedNode);
210
+ const name = element.name.toLowerCase();
211
+ if (!ALLOWED_TAGS.has(name)) return children;
212
+ return [{
213
+ type: "element",
214
+ name,
215
+ attrs: sanitizeRichTextAttributes(element.attribs, name),
216
+ children
217
+ }];
218
+ }
219
+ function normalizeRichTextNodes(value) {
220
+ if (typeof value === "string") return parseDocument(value, {
221
+ decodeEntities: true,
222
+ lowerCaseAttributeNames: true,
223
+ lowerCaseTags: true
224
+ }).children.flatMap(convertParsedNode);
225
+ return (Array.isArray(value) ? value : [value]).flatMap(convertSourceNode);
226
+ }
227
+
228
+ //#endregion
229
+ export { normalizeRichTextNodes, sanitizeRichTextAttributes, sanitizeRichTextStyle };
230
+ //# sourceMappingURL=helpers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.mjs","names":[],"sources":["../../../../src/runtime/nativeComponents/richText/helpers.ts"],"sourcesContent":["import type { DataNode, Element, Node } from 'domhandler'\nimport { parseDocument } from 'htmlparser2'\n\nexport interface RichTextSourceNode {\n type?: string\n name?: string\n attrs?: Record<string, unknown>\n children?: RichTextSourceNode[]\n text?: string\n}\n\nexport type SafeRichTextNode\n = | { type: 'text', text: string }\n | { type: 'element', name: string, attrs: Record<string, string>, children: SafeRichTextNode[] }\n\nconst ALLOWED_TAGS = new Set([\n 'a',\n 'abbr',\n 'address',\n 'article',\n 'aside',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blockquote',\n 'br',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'dd',\n 'del',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'fieldset',\n 'font',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hr',\n 'i',\n 'img',\n 'ins',\n 'label',\n 'legend',\n 'li',\n 'mark',\n 'ol',\n 'p',\n 'pre',\n 'q',\n 'rt',\n 'ruby',\n 's',\n 'section',\n 'small',\n 'span',\n 'strong',\n 'sub',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'tt',\n 'u',\n 'ul',\n])\n\nconst ALLOWED_ATTRIBUTES = new Set([\n 'abbr',\n 'align',\n 'alt',\n 'axis',\n 'bgcolor',\n 'border',\n 'cellpadding',\n 'cellspacing',\n 'class',\n 'colspan',\n 'dir',\n 'height',\n 'href',\n 'id',\n 'lang',\n 'rowspan',\n 'scope',\n 'span',\n 'start',\n 'style',\n 'summary',\n 'target',\n 'title',\n 'type',\n 'valign',\n 'width',\n])\n\nconst URL_ATTRIBUTES = new Set(['href', 'src'])\n\nconst ALLOWED_STYLE_PROPERTIES = new Set([\n 'background',\n 'background-color',\n 'border',\n 'border-bottom',\n 'border-color',\n 'border-left',\n 'border-radius',\n 'border-right',\n 'border-style',\n 'border-top',\n 'border-width',\n 'color',\n 'display',\n 'font-family',\n 'font-size',\n 'font-style',\n 'font-weight',\n 'height',\n 'letter-spacing',\n 'line-height',\n 'margin',\n 'margin-bottom',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'max-height',\n 'max-width',\n 'min-height',\n 'min-width',\n 'opacity',\n 'overflow',\n 'padding',\n 'padding-bottom',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'text-align',\n 'text-decoration',\n 'text-indent',\n 'text-overflow',\n 'text-transform',\n 'vertical-align',\n 'white-space',\n 'width',\n 'word-break',\n 'word-wrap',\n])\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction isSafeUrl(value: string, attribute: string) {\n const normalized = Array.from(value)\n .filter(character => character.charCodeAt(0) > 0x20)\n .join('')\n .toLowerCase()\n if (!normalized || normalized.startsWith('#') || normalized.startsWith('/') || normalized.startsWith('./') || normalized.startsWith('../')) {\n return true\n }\n if (/^(?:https?:|mailto:|tel:)/.test(normalized)) {\n return true\n }\n return attribute === 'src' && /^data:image\\/(?:gif|jpe?g|png|webp);base64,/.test(normalized)\n}\n\nfunction isSafeStyleValue(value: string) {\n const normalized = value.toLowerCase().replace(/\\s+/g, '')\n return !normalized.includes('url(')\n && !normalized.includes('expression(')\n && !normalized.includes('javascript:')\n && !normalized.includes('behavior:')\n && !normalized.includes('-moz-binding')\n}\n\nexport function sanitizeRichTextStyle(value: unknown) {\n const source = isRecord(value)\n ? Object.entries(value)\n .map(([property, propertyValue]) => `${property}:${String(propertyValue)}`)\n .join(';')\n : String(value ?? '')\n const declarations: string[] = []\n for (const declaration of source.split(';')) {\n const separator = declaration.indexOf(':')\n if (separator <= 0) {\n continue\n }\n const property = declaration.slice(0, separator).trim().toLowerCase()\n const propertyValue = declaration.slice(separator + 1).trim()\n if (ALLOWED_STYLE_PROPERTIES.has(property) && propertyValue && isSafeStyleValue(propertyValue)) {\n declarations.push(`${property}: ${propertyValue}`)\n }\n }\n return declarations.join('; ')\n}\n\nexport function sanitizeRichTextAttributes(value: unknown, tagName: string) {\n if (!isRecord(value)) {\n return {}\n }\n const attributes: Record<string, string> = {}\n for (const [rawName, rawValue] of Object.entries(value)) {\n const name = rawName.trim().toLowerCase()\n if (name.startsWith('on') || name === 'srcdoc') {\n continue\n }\n if (!ALLOWED_ATTRIBUTES.has(name) && name !== 'src' && !name.startsWith('aria-') && !name.startsWith('data-')) {\n continue\n }\n if (name === 'src' && tagName !== 'img') {\n continue\n }\n const serialized = name === 'style' ? sanitizeRichTextStyle(rawValue) : String(rawValue ?? '')\n if (!serialized || (URL_ATTRIBUTES.has(name) && !isSafeUrl(serialized, name))) {\n continue\n }\n attributes[name] = serialized\n }\n if (tagName === 'a') {\n attributes.rel = 'noopener noreferrer'\n }\n return attributes\n}\n\nfunction convertSourceNode(value: unknown): SafeRichTextNode[] {\n if (!isRecord(value)) {\n return []\n }\n if (value.type === 'text' || (!value.name && typeof value.text === 'string')) {\n return [{ type: 'text', text: String(value.text ?? '') }]\n }\n const children = Array.isArray(value.children)\n ? value.children.flatMap(convertSourceNode)\n : []\n const name = String(value.name ?? '').toLowerCase()\n if (!ALLOWED_TAGS.has(name)) {\n return children\n }\n return [{\n type: 'element',\n name,\n attrs: sanitizeRichTextAttributes(value.attrs, name),\n children,\n }]\n}\n\nfunction convertParsedNode(node: Node): SafeRichTextNode[] {\n if (node.type === 'text') {\n return [{ type: 'text', text: (node as DataNode).data }]\n }\n if (node.type !== 'tag') {\n return []\n }\n const element = node as Element\n const children = element.children.flatMap(convertParsedNode)\n const name = element.name.toLowerCase()\n if (!ALLOWED_TAGS.has(name)) {\n return children\n }\n return [{\n type: 'element',\n name,\n attrs: sanitizeRichTextAttributes(element.attribs, name),\n children,\n }]\n}\n\nexport function normalizeRichTextNodes(value: unknown): SafeRichTextNode[] {\n if (typeof value === 'string') {\n const document = parseDocument(value, {\n decodeEntities: true,\n lowerCaseAttributeNames: true,\n lowerCaseTags: true,\n })\n return document.children.flatMap(convertParsedNode)\n }\n const values = Array.isArray(value) ? value : [value]\n return values.flatMap(convertSourceNode)\n}\n"],"mappings":";;;AAeA,MAAM,+BAAe,IAAI,IAAI;CAC3B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAM,qCAAqB,IAAI,IAAI;CACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAM,iCAAiB,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC;AAE9C,MAAM,2CAA2B,IAAI,IAAI;CACvC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,SAAS,SAAS,OAAkD;CAClE,OAAO,QAAQ,KAAK,KAAK,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,UAAU,OAAe,WAAmB;CACnD,MAAM,aAAa,MAAM,KAAK,KAAK,CAAC,CACjC,QAAO,cAAa,UAAU,WAAW,CAAC,IAAI,EAAI,CAAC,CACnD,KAAK,EAAE,CAAC,CACR,YAAY;CACf,IAAI,CAAC,cAAc,WAAW,WAAW,GAAG,KAAK,WAAW,WAAW,GAAG,KAAK,WAAW,WAAW,IAAI,KAAK,WAAW,WAAW,KAAK,GACvI,OAAO;CAET,IAAI,4BAA4B,KAAK,UAAU,G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"}
@@ -0,0 +1,74 @@
1
+ import { getNativeComponentDescriptor } from "../../../shared/nativeComponents.mjs";
2
+ import { readBooleanAttribute, resolveContainingShadowRoot } from "../helpers.mjs";
3
+ import { ensureNativeComponentStyle } from "../style.mjs";
4
+ import { normalizeRichTextNodes, sanitizeRichTextAttributes, sanitizeRichTextStyle } from "./helpers.mjs";
5
+
6
+ //#region src/runtime/nativeComponents/richText/index.ts
7
+ const BaseElement = globalThis.HTMLElement ?? class {};
8
+ function createRichTextDomNode(node) {
9
+ if (node.type === "text") return document.createTextNode(node.text);
10
+ const element = document.createElement(node.name);
11
+ for (const [name, value] of Object.entries(node.attrs)) element.setAttribute(name, value);
12
+ element.append(...node.children.map(createRichTextDomNode));
13
+ return element;
14
+ }
15
+ var WeappRichText = class extends BaseElement {
16
+ static observedAttributes = [...getNativeComponentDescriptor("rich-text").attributes];
17
+ #content;
18
+ #nodes = "";
19
+ get nodes() {
20
+ return this.#nodes;
21
+ }
22
+ set nodes(value) {
23
+ if (Object.is(this.#nodes, value)) return;
24
+ this.#nodes = value;
25
+ this.#renderNodes();
26
+ }
27
+ connectedCallback() {
28
+ ensureNativeComponentStyle(resolveContainingShadowRoot(this));
29
+ this.#ensureStructure();
30
+ if (this.#nodes === "") this.#nodes = this.getAttribute("nodes") ?? "";
31
+ this.#syncAttributes();
32
+ this.#renderNodes();
33
+ }
34
+ attributeChangedCallback(name, _oldValue, newValue) {
35
+ if (name === "nodes") {
36
+ this.#nodes = newValue ?? "";
37
+ this.#renderNodes();
38
+ return;
39
+ }
40
+ this.#syncAttributes();
41
+ }
42
+ #ensureStructure() {
43
+ if (this.#content || typeof document === "undefined") return;
44
+ const root = this.shadowRoot ?? this.attachShadow({ mode: "open" });
45
+ const style = document.createElement("style");
46
+ style.textContent = `
47
+ :host { overflow-wrap: break-word; }
48
+ .content { display: block; min-width: 0; }
49
+ img { max-width: 100%; }
50
+ `;
51
+ const content = document.createElement("div");
52
+ content.className = "content";
53
+ content.addEventListener("click", (event) => {
54
+ const target = event.target;
55
+ if (target instanceof Element && target.closest("a")) event.preventDefault();
56
+ });
57
+ root.append(style, content);
58
+ this.#content = content;
59
+ }
60
+ #syncAttributes() {
61
+ if (!this.#content) return;
62
+ const space = this.getAttribute("space");
63
+ this.#content.style.whiteSpace = space === "nbsp" || space === "ensp" || space === "emsp" ? "pre-wrap" : "normal";
64
+ this.#content.style.userSelect = readBooleanAttribute(this, "user-select") ? "text" : "";
65
+ }
66
+ #renderNodes() {
67
+ if (!this.#content || typeof document === "undefined") return;
68
+ this.#content.replaceChildren(...normalizeRichTextNodes(this.#nodes).map(createRichTextDomNode));
69
+ }
70
+ };
71
+
72
+ //#endregion
73
+ export { WeappRichText, normalizeRichTextNodes, sanitizeRichTextAttributes, sanitizeRichTextStyle };
74
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["#nodes","#renderNodes","#ensureStructure","#syncAttributes","#content"],"sources":["../../../../src/runtime/nativeComponents/richText/index.ts"],"sourcesContent":["import type { SafeRichTextNode } from './helpers'\nimport { getNativeComponentDescriptor } from '../../../shared/nativeComponents'\nimport { readBooleanAttribute, resolveContainingShadowRoot } from '../helpers'\nimport { ensureNativeComponentStyle } from '../style'\nimport { normalizeRichTextNodes } from './helpers'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nfunction createRichTextDomNode(node: SafeRichTextNode): globalThis.Node {\n if (node.type === 'text') {\n return document.createTextNode(node.text)\n }\n const element = document.createElement(node.name)\n for (const [name, value] of Object.entries(node.attrs)) {\n element.setAttribute(name, value)\n }\n element.append(...node.children.map(createRichTextDomNode))\n return element\n}\n\nexport class WeappRichText extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('rich-text')!.attributes]\n\n #content?: HTMLDivElement\n #nodes: unknown = ''\n\n get nodes() {\n return this.#nodes\n }\n\n set nodes(value: unknown) {\n if (Object.is(this.#nodes, value)) {\n return\n }\n this.#nodes = value\n this.#renderNodes()\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n if (this.#nodes === '') {\n this.#nodes = this.getAttribute('nodes') ?? ''\n }\n this.#syncAttributes()\n this.#renderNodes()\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null) {\n if (name === 'nodes') {\n this.#nodes = newValue ?? ''\n this.#renderNodes()\n return\n }\n this.#syncAttributes()\n }\n\n #ensureStructure() {\n if (this.#content || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = `\n :host { overflow-wrap: break-word; }\n .content { display: block; min-width: 0; }\n img { max-width: 100%; }\n `\n const content = document.createElement('div')\n content.className = 'content'\n content.addEventListener('click', (event) => {\n const target = event.target\n if (target instanceof Element && target.closest('a')) {\n event.preventDefault()\n }\n })\n root.append(style, content)\n this.#content = content\n }\n\n #syncAttributes() {\n if (!this.#content) {\n return\n }\n const space = this.getAttribute('space')\n this.#content.style.whiteSpace = space === 'nbsp' || space === 'ensp' || space === 'emsp'\n ? 'pre-wrap'\n : 'normal'\n this.#content.style.userSelect = readBooleanAttribute(this, 'user-select') ? 'text' : ''\n }\n\n #renderNodes() {\n if (!this.#content || typeof document === 'undefined') {\n return\n }\n this.#content.replaceChildren(...normalizeRichTextNodes(this.#nodes).map(createRichTextDomNode))\n }\n}\n\nexport * from './helpers'\n"],"mappings":";;;;;;AAMA,MAAM,cAAe,WAAW,eAAe,MAAM,CAAC;AAEtD,SAAS,sBAAsB,MAAyC;CACtE,IAAI,KAAK,SAAS,QAChB,OAAO,SAAS,eAAe,KAAK,IAAI;CAE1C,MAAM,UAAU,SAAS,cAAc,KAAK,IAAI;CAChD,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,KAAK,KAAK,GACnD,QAAQ,aAAa,MAAM,KAAK;CAElC,QAAQ,OAAO,GAAG,KAAK,SAAS,IAAI,qBAAqB,CAAC;CAC1D,OAAO;AACT;AAEA,IAAa,gBAAb,cAAmC,YAAY;CAC7C,OAAO,qBAAqB,CAAC,GAAG,6BAA6B,WAAW,CAAC,CAAE,UAAU;CAErF;CACA,SAAkB;CAElB,IAAI,QAAQ;EACV,OAAO,KAAKA;CACd;CAEA,IAAI,MAAM,OAAgB;EACxB,IAAI,OAAO,GAAG,KAAKA,QAAQ,KAAK,GAC9B;EAEF,KAAKA,SAAS;EACd,KAAKC,aAAa;CACpB;CAEA,oBAAoB;EAClB,2BAA2B,4BAA4B,IAAI,CAAC;EAC5D,KAAKC,iBAAiB;EACtB,IAAI,KAAKF,WAAW,IAClB,KAAKA,SAAS,KAAK,aAAa,OAAO,KAAK;EAE9C,KAAKG,gBAAgB;EACrB,KAAKF,aAAa;CACpB;CAEA,yBAAyB,MAAc,WAA0B,UAAyB;EACxF,IAAI,SAAS,SAAS;GACpB,KAAKD,SAAS,YAAY;GAC1B,KAAKC,aAAa;GAClB;EACF;EACA,KAAKE,gBAAgB;CACvB;CAEA,mBAAmB;EACjB,IAAI,KAAKC,YAAY,OAAO,aAAa,aACvC;EAEF,MAAM,OAAO,KAAK,cAAc,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;EAClE,MAAM,QAAQ,SAAS,cAAc,OAAO;EAC5C,MAAM,cAAc;;;;;EAKpB,MAAM,UAAU,SAAS,cAAc,KAAK;EAC5C,QAAQ,YAAY;EACpB,QAAQ,iBAAiB,UAAU,UAAU;GAC3C,MAAM,SAAS,MAAM;GACrB,IAAI,kBAAkB,WAAW,OAAO,QAAQ,GAAG,GACjD,MAAM,eAAe;EAEzB,CAAC;EACD,KAAK,OAAO,OAAO,OAAO;EAC1B,KAAKA,WAAW;CAClB;CAEA,kBAAkB;EAChB,IAAI,CAAC,KAAKA,UACR;EAEF,MAAM,QAAQ,KAAK,aAAa,OAAO;EACvC,KAAKA,SAAS,MAAM,aAAa,UAAU,UAAU,UAAU,UAAU,UAAU,SAC/E,aACA;EACJ,KAAKA,SAAS,MAAM,aAAa,qBAAqB,MAAM,aAAa,IAAI,SAAS;CACxF;CAEA,eAAe;EACb,IAAI,CAAC,KAAKA,YAAY,OAAO,aAAa,aACxC;EAEF,KAAKA,SAAS,gBAAgB,GAAG,uBAAuB,KAAKJ,MAAM,CAAC,CAAC,IAAI,qBAAqB,CAAC;CACjG;AACF"}
@@ -0,0 +1,15 @@
1
+ //#region src/runtime/nativeComponents/scrollView.d.ts
2
+ declare function createScrollEventDetail(viewport: Pick<HTMLDivElement, 'scrollHeight' | 'scrollLeft' | 'scrollTop' | 'scrollWidth'>, previous: {
3
+ scrollLeft: number;
4
+ scrollTop: number;
5
+ }): {
6
+ scrollLeft: number;
7
+ scrollTop: number;
8
+ scrollWidth: number;
9
+ scrollHeight: number;
10
+ deltaX: number;
11
+ deltaY: number;
12
+ };
13
+ //#endregion
14
+ export { createScrollEventDetail };
15
+ //# sourceMappingURL=scrollView.d.mts.map
@@ -0,0 +1,79 @@
1
+ import { getNativeComponentDescriptor } from "../../shared/nativeComponents.mjs";
2
+ import { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from "./helpers.mjs";
3
+ import { ensureNativeComponentStyle } from "./style.mjs";
4
+
5
+ //#region src/runtime/nativeComponents/scrollView.ts
6
+ const BaseElement = globalThis.HTMLElement ?? class {};
7
+ function createScrollEventDetail(viewport, previous) {
8
+ return {
9
+ scrollLeft: viewport.scrollLeft,
10
+ scrollTop: viewport.scrollTop,
11
+ scrollWidth: viewport.scrollWidth,
12
+ scrollHeight: viewport.scrollHeight,
13
+ deltaX: viewport.scrollLeft - previous.scrollLeft,
14
+ deltaY: viewport.scrollTop - previous.scrollTop
15
+ };
16
+ }
17
+ var WeappScrollView = class extends BaseElement {
18
+ static observedAttributes = [...getNativeComponentDescriptor("scroll-view").attributes];
19
+ #viewport;
20
+ #lastScrollLeft = 0;
21
+ #lastScrollTop = 0;
22
+ get scrollTop() {
23
+ return this.#viewport?.scrollTop ?? 0;
24
+ }
25
+ set scrollTop(value) {
26
+ if (this.#viewport) this.#viewport.scrollTop = value;
27
+ }
28
+ get scrollLeft() {
29
+ return this.#viewport?.scrollLeft ?? 0;
30
+ }
31
+ set scrollLeft(value) {
32
+ if (this.#viewport) this.#viewport.scrollLeft = value;
33
+ }
34
+ connectedCallback() {
35
+ ensureNativeComponentStyle(resolveContainingShadowRoot(this));
36
+ this.#ensureStructure();
37
+ this.#syncAttributes();
38
+ }
39
+ attributeChangedCallback() {
40
+ this.#syncAttributes();
41
+ }
42
+ #ensureStructure() {
43
+ if (this.#viewport || typeof document === "undefined") return;
44
+ const root = this.shadowRoot ?? this.attachShadow({ mode: "open" });
45
+ const style = document.createElement("style");
46
+ style.textContent = `
47
+ :host { min-width: 0; min-height: 0; }
48
+ .viewport { width: 100%; height: 100%; overscroll-behavior: contain; }
49
+ `;
50
+ const viewport = document.createElement("div");
51
+ viewport.className = "viewport";
52
+ const slot = document.createElement("slot");
53
+ viewport.append(slot);
54
+ viewport.addEventListener("scroll", () => {
55
+ const detail = createScrollEventDetail(viewport, {
56
+ scrollLeft: this.#lastScrollLeft,
57
+ scrollTop: this.#lastScrollTop
58
+ });
59
+ this.#lastScrollLeft = viewport.scrollLeft;
60
+ this.#lastScrollTop = viewport.scrollTop;
61
+ dispatchMiniProgramEvent(this, "scroll", detail);
62
+ });
63
+ root.append(style, viewport);
64
+ this.#viewport = viewport;
65
+ }
66
+ #syncAttributes() {
67
+ if (!this.#viewport) return;
68
+ this.#viewport.style.overflowX = readBooleanAttribute(this, "scroll-x") ? "auto" : "hidden";
69
+ this.#viewport.style.overflowY = readBooleanAttribute(this, "scroll-y") ? "auto" : "hidden";
70
+ const scrollTop = Number(this.getAttribute("scroll-top"));
71
+ const scrollLeft = Number(this.getAttribute("scroll-left"));
72
+ if (Number.isFinite(scrollTop)) this.#viewport.scrollTop = scrollTop;
73
+ if (Number.isFinite(scrollLeft)) this.#viewport.scrollLeft = scrollLeft;
74
+ }
75
+ };
76
+
77
+ //#endregion
78
+ export { WeappScrollView, createScrollEventDetail };
79
+ //# sourceMappingURL=scrollView.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollView.mjs","names":["#viewport","#ensureStructure","#syncAttributes","#lastScrollLeft","#lastScrollTop"],"sources":["../../../src/runtime/nativeComponents/scrollView.ts"],"sourcesContent":["import { getNativeComponentDescriptor } from '../../shared/nativeComponents'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from './helpers'\nimport { ensureNativeComponentStyle } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nexport function createScrollEventDetail(\n viewport: Pick<HTMLDivElement, 'scrollHeight' | 'scrollLeft' | 'scrollTop' | 'scrollWidth'>,\n previous: { scrollLeft: number, scrollTop: number },\n) {\n return {\n scrollLeft: viewport.scrollLeft,\n scrollTop: viewport.scrollTop,\n scrollWidth: viewport.scrollWidth,\n scrollHeight: viewport.scrollHeight,\n deltaX: viewport.scrollLeft - previous.scrollLeft,\n deltaY: viewport.scrollTop - previous.scrollTop,\n }\n}\n\nexport class WeappScrollView extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('scroll-view')!.attributes]\n\n #viewport?: HTMLDivElement\n #lastScrollLeft = 0\n #lastScrollTop = 0\n\n get scrollTop() {\n return this.#viewport?.scrollTop ?? 0\n }\n\n set scrollTop(value: number) {\n if (this.#viewport) {\n this.#viewport.scrollTop = value\n }\n }\n\n get scrollLeft() {\n return this.#viewport?.scrollLeft ?? 0\n }\n\n set scrollLeft(value: number) {\n if (this.#viewport) {\n this.#viewport.scrollLeft = value\n }\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n this.#syncAttributes()\n }\n\n attributeChangedCallback() {\n this.#syncAttributes()\n }\n\n #ensureStructure() {\n if (this.#viewport || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = `\n :host { min-width: 0; min-height: 0; }\n .viewport { width: 100%; height: 100%; overscroll-behavior: contain; }\n `\n const viewport = document.createElement('div')\n viewport.className = 'viewport'\n const slot = document.createElement('slot')\n viewport.append(slot)\n viewport.addEventListener('scroll', () => {\n const detail = createScrollEventDetail(viewport, {\n scrollLeft: this.#lastScrollLeft,\n scrollTop: this.#lastScrollTop,\n })\n this.#lastScrollLeft = viewport.scrollLeft\n this.#lastScrollTop = viewport.scrollTop\n dispatchMiniProgramEvent(this, 'scroll', detail)\n })\n root.append(style, viewport)\n this.#viewport = viewport\n }\n\n #syncAttributes() {\n if (!this.#viewport) {\n return\n }\n this.#viewport.style.overflowX = readBooleanAttribute(this, 'scroll-x') ? 'auto' : 'hidden'\n this.#viewport.style.overflowY = readBooleanAttribute(this, 'scroll-y') ? 'auto' : 'hidden'\n const scrollTop = Number(this.getAttribute('scroll-top'))\n const scrollLeft = Number(this.getAttribute('scroll-left'))\n if (Number.isFinite(scrollTop)) {\n this.#viewport.scrollTop = scrollTop\n }\n if (Number.isFinite(scrollLeft)) {\n this.#viewport.scrollLeft = scrollLeft\n }\n }\n}\n"],"mappings":";;;;;AAIA,MAAM,cAAe,WAAW,eAAe,MAAM,CAAC;AAEtD,SAAgB,wBACd,UACA,UACA;CACA,OAAO;EACL,YAAY,SAAS;EACrB,WAAW,SAAS;EACpB,aAAa,SAAS;EACtB,cAAc,SAAS;EACvB,QAAQ,SAAS,aAAa,SAAS;EACvC,QAAQ,SAAS,YAAY,SAAS;CACxC;AACF;AAEA,IAAa,kBAAb,cAAqC,YAAY;CAC/C,OAAO,qBAAqB,CAAC,GAAG,6BAA6B,aAAa,CAAC,CAAE,UAAU;CAEvF;CACA,kBAAkB;CAClB,iBAAiB;CAEjB,IAAI,YAAY;EACd,OAAO,KAAKA,WAAW,aAAa;CACtC;CAEA,IAAI,UAAU,OAAe;EAC3B,IAAI,KAAKA,WACP,KAAKA,UAAU,YAAY;CAE/B;CAEA,IAAI,aAAa;EACf,OAAO,KAAKA,WAAW,cAAc;CACvC;CAEA,IAAI,WAAW,OAAe;EAC5B,IAAI,KAAKA,WACP,KAAKA,UAAU,aAAa;CAEhC;CAEA,oBAAoB;EAClB,2BAA2B,4BAA4B,IAAI,CAAC;EAC5D,KAAKC,iBAAiB;EACtB,KAAKC,gBAAgB;CACvB;CAEA,2BAA2B;EACzB,KAAKA,gBAAgB;CACvB;CAEA,mBAAmB;EACjB,IAAI,KAAKF,aAAa,OAAO,aAAa,aACxC;EAEF,MAAM,OAAO,KAAK,cAAc,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;EAClE,MAAM,QAAQ,SAAS,cAAc,OAAO;EAC5C,MAAM,cAAc;;;;EAIpB,MAAM,WAAW,SAAS,cAAc,KAAK;EAC7C,SAAS,YAAY;EACrB,MAAM,OAAO,SAAS,cAAc,MAAM;EAC1C,SAAS,OAAO,IAAI;EACpB,SAAS,iBAAiB,gBAAgB;GACxC,MAAM,SAAS,wBAAwB,UAAU;IAC/C,YAAY,KAAKG;IACjB,WAAW,KAAKC;GAClB,CAAC;GACD,KAAKD,kBAAkB,SAAS;GAChC,KAAKC,iBAAiB,SAAS;GAC/B,yBAAyB,MAAM,UAAU,MAAM;EACjD,CAAC;EACD,KAAK,OAAO,OAAO,QAAQ;EAC3B,KAAKJ,YAAY;CACnB;CAEA,kBAAkB;EAChB,IAAI,CAAC,KAAKA,WACR;EAEF,KAAKA,UAAU,MAAM,YAAY,qBAAqB,MAAM,UAAU,IAAI,SAAS;EACnF,KAAKA,UAAU,MAAM,YAAY,qBAAqB,MAAM,UAAU,IAAI,SAAS;EACnF,MAAM,YAAY,OAAO,KAAK,aAAa,YAAY,CAAC;EACxD,MAAM,aAAa,OAAO,KAAK,aAAa,aAAa,CAAC;EAC1D,IAAI,OAAO,SAAS,SAAS,GAC3B,KAAKA,UAAU,YAAY;EAE7B,IAAI,OAAO,SAAS,UAAU,GAC5B,KAAKA,UAAU,aAAa;CAEhC;AACF"}
@@ -0,0 +1,28 @@
1
+ //#region src/runtime/nativeComponents/slider/helpers.ts
2
+ function finiteNumber(value, fallback) {
3
+ const numeric = Number(value);
4
+ return Number.isFinite(numeric) ? numeric : fallback;
5
+ }
6
+ function resolveSliderConfig(input = {}) {
7
+ const min = finiteNumber(input.min, 0);
8
+ const requestedMax = finiteNumber(input.max, 100);
9
+ const max = requestedMax > min ? requestedMax : min + 100;
10
+ const requestedStep = finiteNumber(input.step, 1);
11
+ const step = requestedStep > 0 ? requestedStep : 1;
12
+ const rawValue = Math.min(Math.max(finiteNumber(input.value, min), min), max);
13
+ const steps = Math.round((rawValue - min) / step);
14
+ return {
15
+ min,
16
+ max,
17
+ step,
18
+ value: Math.min(max, Math.max(min, min + steps * step)),
19
+ blockSize: Math.min(28, Math.max(12, finiteNumber(input.blockSize, 28)))
20
+ };
21
+ }
22
+ function createSliderEventDetail(value) {
23
+ return { value };
24
+ }
25
+
26
+ //#endregion
27
+ export { createSliderEventDetail, resolveSliderConfig };
28
+ //# sourceMappingURL=helpers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.mjs","names":[],"sources":["../../../../src/runtime/nativeComponents/slider/helpers.ts"],"sourcesContent":["export interface SliderConfigInput {\n min?: unknown\n max?: unknown\n step?: unknown\n value?: unknown\n blockSize?: unknown\n}\n\nexport interface SliderConfig {\n min: number\n max: number\n step: number\n value: number\n blockSize: number\n}\n\nfunction finiteNumber(value: unknown, fallback: number) {\n const numeric = Number(value)\n return Number.isFinite(numeric) ? numeric : fallback\n}\n\nexport function resolveSliderConfig(input: SliderConfigInput = {}): SliderConfig {\n const min = finiteNumber(input.min, 0)\n const requestedMax = finiteNumber(input.max, 100)\n const max = requestedMax > min ? requestedMax : min + 100\n const requestedStep = finiteNumber(input.step, 1)\n const step = requestedStep > 0 ? requestedStep : 1\n const rawValue = Math.min(Math.max(finiteNumber(input.value, min), min), max)\n const steps = Math.round((rawValue - min) / step)\n const value = Math.min(max, Math.max(min, min + steps * step))\n const blockSize = Math.min(28, Math.max(12, finiteNumber(input.blockSize, 28)))\n return { min, max, step, value, blockSize }\n}\n\nexport function createSliderEventDetail(value: number) {\n return { value }\n}\n"],"mappings":";AAgBA,SAAS,aAAa,OAAgB,UAAkB;CACtD,MAAM,UAAU,OAAO,KAAK;CAC5B,OAAO,OAAO,SAAS,OAAO,IAAI,UAAU;AAC9C;AAEA,SAAgB,oBAAoB,QAA2B,CAAC,GAAiB;CAC/E,MAAM,MAAM,aAAa,MAAM,KAAK,CAAC;CACrC,MAAM,eAAe,aAAa,MAAM,KAAK,GAAG;CAChD,MAAM,MAAM,eAAe,MAAM,eAAe,MAAM;CACtD,MAAM,gBAAgB,aAAa,MAAM,MAAM,CAAC;CAChD,MAAM,OAAO,gBAAgB,IAAI,gBAAgB;CACjD,MAAM,WAAW,KAAK,IAAI,KAAK,IAAI,aAAa,MAAM,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG;CAC5E,MAAM,QAAQ,KAAK,OAAO,WAAW,OAAO,IAAI;CAGhD,OAAO;EAAE;EAAK;EAAK;EAAM,OAFX,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,MAAM,QAAQ,IAAI,CAE/B;EAAG,WADd,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,aAAa,MAAM,WAAW,EAAE,CAAC,CACrC;CAAE;AAC5C;AAEA,SAAgB,wBAAwB,OAAe;CACrD,OAAO,EAAE,MAAM;AACjB"}
@@ -0,0 +1,120 @@
1
+ import { getNativeComponentDescriptor } from "../../../shared/nativeComponents.mjs";
2
+ import { connectFormControl, disconnectFormControl } from "../formControl.mjs";
3
+ import { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from "../helpers.mjs";
4
+ import { ensureNativeComponentStyle } from "../style.mjs";
5
+ import { createSliderEventDetail, resolveSliderConfig } from "./helpers.mjs";
6
+ import { SLIDER_SHADOW_STYLE } from "./style.mjs";
7
+
8
+ //#region src/runtime/nativeComponents/slider/index.ts
9
+ const BaseElement = globalThis.HTMLElement ?? class {};
10
+ var WeappSlider = class extends BaseElement {
11
+ static observedAttributes = [...getNativeComponentDescriptor("slider").attributes];
12
+ #input;
13
+ #output;
14
+ #initialValue = 0;
15
+ #initialValueCaptured = false;
16
+ get value() {
17
+ return this.#input?.valueAsNumber ?? this.#config.value;
18
+ }
19
+ set value(value) {
20
+ this.setAttribute("value", String(value));
21
+ }
22
+ get disabled() {
23
+ return readBooleanAttribute(this, "disabled");
24
+ }
25
+ get formControlName() {
26
+ return this.getAttribute("name") ?? "";
27
+ }
28
+ get formControlValue() {
29
+ return this.value;
30
+ }
31
+ get formControlDisabled() {
32
+ return this.disabled;
33
+ }
34
+ get #config() {
35
+ return resolveSliderConfig({
36
+ min: this.getAttribute("min"),
37
+ max: this.getAttribute("max"),
38
+ step: this.getAttribute("step"),
39
+ value: this.getAttribute("value"),
40
+ blockSize: this.getAttribute("block-size")
41
+ });
42
+ }
43
+ connectedCallback() {
44
+ ensureNativeComponentStyle(resolveContainingShadowRoot(this));
45
+ this.#ensureStructure();
46
+ this.#syncAttributes();
47
+ if (!this.#initialValueCaptured) {
48
+ this.#initialValue = this.#config.value;
49
+ this.#initialValueCaptured = true;
50
+ }
51
+ connectFormControl(this);
52
+ }
53
+ disconnectedCallback() {
54
+ disconnectFormControl(this);
55
+ }
56
+ attributeChangedCallback() {
57
+ this.#syncAttributes();
58
+ }
59
+ formReset() {
60
+ if (!this.#input) return;
61
+ this.#input.valueAsNumber = this.#initialValue;
62
+ this.#syncVisual();
63
+ }
64
+ formActivate() {
65
+ this.#input?.focus();
66
+ }
67
+ #ensureStructure() {
68
+ if (this.#input || typeof document === "undefined") return;
69
+ const root = this.shadowRoot ?? this.attachShadow({ mode: "open" });
70
+ const style = document.createElement("style");
71
+ style.textContent = SLIDER_SHADOW_STYLE;
72
+ const wrapper = document.createElement("div");
73
+ wrapper.className = "slider";
74
+ const input = document.createElement("input");
75
+ input.type = "range";
76
+ const output = document.createElement("output");
77
+ input.addEventListener("input", (event) => {
78
+ event.stopPropagation();
79
+ this.#syncVisual();
80
+ dispatchMiniProgramEvent(this, "changing", createSliderEventDetail(input.valueAsNumber));
81
+ });
82
+ input.addEventListener("change", (event) => {
83
+ event.stopPropagation();
84
+ this.#syncVisual();
85
+ dispatchMiniProgramEvent(this, "change", createSliderEventDetail(input.valueAsNumber));
86
+ });
87
+ wrapper.append(input, output);
88
+ root.append(style, wrapper);
89
+ this.#input = input;
90
+ this.#output = output;
91
+ }
92
+ #syncAttributes() {
93
+ if (!this.#input || !this.#output) return;
94
+ const config = this.#config;
95
+ this.#input.min = String(config.min);
96
+ this.#input.max = String(config.max);
97
+ this.#input.step = String(config.step);
98
+ this.#input.valueAsNumber = config.value;
99
+ this.#input.disabled = this.disabled;
100
+ this.#output.hidden = !readBooleanAttribute(this, "show-value");
101
+ this.style.setProperty("--weapp-slider-active-color", this.getAttribute("active-color") ?? this.getAttribute("selected-color") ?? "#1aad19");
102
+ this.style.setProperty("--weapp-slider-background-color", this.getAttribute("background-color") ?? this.getAttribute("color") ?? "#e9e9e9");
103
+ this.style.setProperty("--weapp-slider-block-color", this.getAttribute("block-color") ?? "#ffffff");
104
+ this.style.setProperty("--weapp-slider-block-size", `${config.blockSize}px`);
105
+ this.#syncVisual();
106
+ }
107
+ #syncVisual() {
108
+ const min = Number(this.#input.min);
109
+ const max = Number(this.#input.max);
110
+ const value = this.#input.valueAsNumber;
111
+ const progress = (value - min) / (max - min) * 100;
112
+ this.style.setProperty("--weapp-slider-progress", `${progress}%`);
113
+ this.#output.value = String(value);
114
+ this.#output.textContent = String(value);
115
+ }
116
+ };
117
+
118
+ //#endregion
119
+ export { WeappSlider, createSliderEventDetail, resolveSliderConfig };
120
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["#input","#config","#ensureStructure","#syncAttributes","#initialValueCaptured","#initialValue","#syncVisual","#output"],"sources":["../../../../src/runtime/nativeComponents/slider/index.ts"],"sourcesContent":["import { getNativeComponentDescriptor } from '../../../shared/nativeComponents'\nimport { connectFormControl, disconnectFormControl } from '../formControl'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from '../helpers'\nimport { ensureNativeComponentStyle } from '../style'\nimport { createSliderEventDetail, resolveSliderConfig } from './helpers'\nimport { SLIDER_SHADOW_STYLE } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nexport class WeappSlider extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('slider')!.attributes]\n\n #input?: HTMLInputElement\n #output?: HTMLOutputElement\n #initialValue = 0\n #initialValueCaptured = false\n\n get value() {\n return this.#input?.valueAsNumber ?? this.#config.value\n }\n\n set value(value: number) {\n this.setAttribute('value', String(value))\n }\n\n get disabled() {\n return readBooleanAttribute(this, 'disabled')\n }\n\n get formControlName() {\n return this.getAttribute('name') ?? ''\n }\n\n get formControlValue() {\n return this.value\n }\n\n get formControlDisabled() {\n return this.disabled\n }\n\n get #config() {\n return resolveSliderConfig({\n min: this.getAttribute('min'),\n max: this.getAttribute('max'),\n step: this.getAttribute('step'),\n value: this.getAttribute('value'),\n blockSize: this.getAttribute('block-size'),\n })\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n this.#syncAttributes()\n if (!this.#initialValueCaptured) {\n this.#initialValue = this.#config.value\n this.#initialValueCaptured = true\n }\n connectFormControl(this)\n }\n\n disconnectedCallback() {\n disconnectFormControl(this)\n }\n\n attributeChangedCallback() {\n this.#syncAttributes()\n }\n\n formReset() {\n if (!this.#input) {\n return\n }\n this.#input.valueAsNumber = this.#initialValue\n this.#syncVisual()\n }\n\n formActivate() {\n this.#input?.focus()\n }\n\n #ensureStructure() {\n if (this.#input || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = SLIDER_SHADOW_STYLE\n const wrapper = document.createElement('div')\n wrapper.className = 'slider'\n const input = document.createElement('input')\n input.type = 'range'\n const output = document.createElement('output')\n input.addEventListener('input', (event) => {\n event.stopPropagation()\n this.#syncVisual()\n dispatchMiniProgramEvent(this, 'changing', createSliderEventDetail(input.valueAsNumber))\n })\n input.addEventListener('change', (event) => {\n event.stopPropagation()\n this.#syncVisual()\n dispatchMiniProgramEvent(this, 'change', createSliderEventDetail(input.valueAsNumber))\n })\n wrapper.append(input, output)\n root.append(style, wrapper)\n this.#input = input\n this.#output = output\n }\n\n #syncAttributes() {\n if (!this.#input || !this.#output) {\n return\n }\n const config = this.#config\n this.#input.min = String(config.min)\n this.#input.max = String(config.max)\n this.#input.step = String(config.step)\n this.#input.valueAsNumber = config.value\n this.#input.disabled = this.disabled\n this.#output.hidden = !readBooleanAttribute(this, 'show-value')\n this.style.setProperty('--weapp-slider-active-color', this.getAttribute('active-color') ?? this.getAttribute('selected-color') ?? '#1aad19')\n this.style.setProperty('--weapp-slider-background-color', this.getAttribute('background-color') ?? this.getAttribute('color') ?? '#e9e9e9')\n this.style.setProperty('--weapp-slider-block-color', this.getAttribute('block-color') ?? '#ffffff')\n this.style.setProperty('--weapp-slider-block-size', `${config.blockSize}px`)\n this.#syncVisual()\n }\n\n #syncVisual() {\n const min = Number(this.#input!.min)\n const max = Number(this.#input!.max)\n const value = this.#input!.valueAsNumber\n const progress = ((value - min) / (max - min)) * 100\n this.style.setProperty('--weapp-slider-progress', `${progress}%`)\n this.#output!.value = String(value)\n this.#output!.textContent = String(value)\n }\n}\n\nexport * from './helpers'\n"],"mappings":"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"}