@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,47 @@
1
+ //#region src/runtime/nativeComponents/mediaRegistry.ts
2
+ const mediaElements = /* @__PURE__ */ new Map();
3
+ const mediaRegistrations = /* @__PURE__ */ new WeakMap();
4
+ function normalizeMediaIds(ids) {
5
+ return Array.from(new Set(Array.from(ids, (id) => String(id ?? "").trim()).filter(Boolean)));
6
+ }
7
+ function unregisterNativeMediaElement(element) {
8
+ const registration = mediaRegistrations.get(element);
9
+ if (!registration) return;
10
+ const kindElements = mediaElements.get(registration.kind);
11
+ for (const id of registration.ids) {
12
+ const elements = kindElements.get(id);
13
+ const index = elements.lastIndexOf(element);
14
+ elements.splice(index, 1);
15
+ if (elements.length === 0) kindElements.delete(id);
16
+ }
17
+ if (kindElements.size === 0) mediaElements.delete(registration.kind);
18
+ mediaRegistrations.delete(element);
19
+ }
20
+ function registerNativeMediaElement(kind, ids, element) {
21
+ unregisterNativeMediaElement(element);
22
+ const normalizedIds = normalizeMediaIds(ids);
23
+ if (normalizedIds.length === 0) return;
24
+ let kindElements = mediaElements.get(kind);
25
+ if (!kindElements) {
26
+ kindElements = /* @__PURE__ */ new Map();
27
+ mediaElements.set(kind, kindElements);
28
+ }
29
+ for (const id of normalizedIds) {
30
+ const elements = kindElements.get(id) ?? [];
31
+ elements.push(element);
32
+ kindElements.set(id, elements);
33
+ }
34
+ mediaRegistrations.set(element, {
35
+ kind,
36
+ ids: normalizedIds
37
+ });
38
+ }
39
+ function resolveNativeMediaElement(kind, id) {
40
+ const normalizedId = String(id).trim();
41
+ const elements = mediaElements.get(kind)?.get(normalizedId);
42
+ return elements?.[elements.length - 1];
43
+ }
44
+
45
+ //#endregion
46
+ export { registerNativeMediaElement, resolveNativeMediaElement, unregisterNativeMediaElement };
47
+ //# sourceMappingURL=mediaRegistry.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaRegistry.mjs","names":[],"sources":["../../../src/runtime/nativeComponents/mediaRegistry.ts"],"sourcesContent":["export type NativeMediaKind = 'canvas' | 'video'\n\ntype NativeMediaElement = HTMLCanvasElement | HTMLVideoElement\n\nconst mediaElements = new Map<NativeMediaKind, Map<string, NativeMediaElement[]>>()\nconst mediaRegistrations = new WeakMap<NativeMediaElement, {\n kind: NativeMediaKind\n ids: string[]\n}>()\n\nfunction normalizeMediaIds(ids: Iterable<string | null | undefined>) {\n return Array.from(new Set(\n Array.from(ids, id => String(id ?? '').trim()).filter(Boolean),\n ))\n}\n\nexport function unregisterNativeMediaElement(element: NativeMediaElement) {\n const registration = mediaRegistrations.get(element)\n if (!registration) {\n return\n }\n const kindElements = mediaElements.get(registration.kind)!\n for (const id of registration.ids) {\n const elements = kindElements.get(id)!\n const index = elements.lastIndexOf(element)\n elements.splice(index, 1)\n if (elements.length === 0) {\n kindElements.delete(id)\n }\n }\n if (kindElements.size === 0) {\n mediaElements.delete(registration.kind)\n }\n mediaRegistrations.delete(element)\n}\n\nexport function registerNativeMediaElement(\n kind: NativeMediaKind,\n ids: Iterable<string | null | undefined>,\n element: NativeMediaElement,\n) {\n unregisterNativeMediaElement(element)\n const normalizedIds = normalizeMediaIds(ids)\n if (normalizedIds.length === 0) {\n return\n }\n let kindElements = mediaElements.get(kind)\n if (!kindElements) {\n kindElements = new Map()\n mediaElements.set(kind, kindElements)\n }\n for (const id of normalizedIds) {\n const elements = kindElements.get(id) ?? []\n elements.push(element)\n kindElements.set(id, elements)\n }\n mediaRegistrations.set(element, { kind, ids: normalizedIds })\n}\n\nexport function resolveNativeMediaElement<T extends NativeMediaElement>(kind: NativeMediaKind, id: string) {\n const normalizedId = String(id).trim()\n const elements = mediaElements.get(kind)?.get(normalizedId)\n return elements?.[elements.length - 1] as T | undefined\n}\n"],"mappings":";AAIA,MAAM,gCAAgB,IAAI,IAAwD;AAClF,MAAM,qCAAqB,IAAI,QAG5B;AAEH,SAAS,kBAAkB,KAA0C;CACnE,OAAO,MAAM,KAAK,IAAI,IACpB,MAAM,KAAK,MAAK,OAAM,OAAO,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,OAAO,CAC/D,CAAC;AACH;AAEA,SAAgB,6BAA6B,SAA6B;CACxE,MAAM,eAAe,mBAAmB,IAAI,OAAO;CACnD,IAAI,CAAC,cACH;CAEF,MAAM,eAAe,cAAc,IAAI,aAAa,IAAI;CACxD,KAAK,MAAM,MAAM,aAAa,KAAK;EACjC,MAAM,WAAW,aAAa,IAAI,EAAE;EACpC,MAAM,QAAQ,SAAS,YAAY,OAAO;EAC1C,SAAS,OAAO,OAAO,CAAC;EACxB,IAAI,SAAS,WAAW,GACtB,aAAa,OAAO,EAAE;CAE1B;CACA,IAAI,aAAa,SAAS,GACxB,cAAc,OAAO,aAAa,IAAI;CAExC,mBAAmB,OAAO,OAAO;AACnC;AAEA,SAAgB,2BACd,MACA,KACA,SACA;CACA,6BAA6B,OAAO;CACpC,MAAM,gBAAgB,kBAAkB,GAAG;CAC3C,IAAI,cAAc,WAAW,GAC3B;CAEF,IAAI,eAAe,cAAc,IAAI,IAAI;CACzC,IAAI,CAAC,cAAc;EACjB,+BAAe,IAAI,IAAI;EACvB,cAAc,IAAI,MAAM,YAAY;CACtC;CACA,KAAK,MAAM,MAAM,eAAe;EAC9B,MAAM,WAAW,aAAa,IAAI,EAAE,KAAK,CAAC;EAC1C,SAAS,KAAK,OAAO;EACrB,aAAa,IAAI,IAAI,QAAQ;CAC/B;CACA,mBAAmB,IAAI,SAAS;EAAE;EAAM,KAAK;CAAc,CAAC;AAC9D;AAEA,SAAgB,0BAAwD,MAAuB,IAAY;CACzG,MAAM,eAAe,OAAO,EAAE,CAAC,CAAC,KAAK;CACrC,MAAM,WAAW,cAAc,IAAI,IAAI,CAAC,EAAE,IAAI,YAAY;CAC1D,OAAO,WAAW,SAAS,SAAS;AACtC"}
@@ -0,0 +1,23 @@
1
+ //#region src/runtime/nativeComponents/movable/helpers.ts
2
+ function resolveMovableDirection(value) {
3
+ if (value === "horizontal" || value === "vertical" || value === "none") return value;
4
+ return "all";
5
+ }
6
+ function resolveMovableNumber(value, fallback = 0) {
7
+ const number = Number(value);
8
+ return Number.isFinite(number) ? number : fallback;
9
+ }
10
+ function clampMovablePosition(position, bounds, direction, outOfBounds) {
11
+ const next = { ...position };
12
+ if (!outOfBounds) {
13
+ next.x = Math.min(Math.max(0, next.x), Math.max(0, bounds.width - bounds.viewWidth));
14
+ next.y = Math.min(Math.max(0, next.y), Math.max(0, bounds.height - bounds.viewHeight));
15
+ }
16
+ if (direction === "horizontal" || direction === "none") next.y = position.y;
17
+ if (direction === "vertical" || direction === "none") next.x = position.x;
18
+ return next;
19
+ }
20
+
21
+ //#endregion
22
+ export { clampMovablePosition, resolveMovableDirection, resolveMovableNumber };
23
+ //# sourceMappingURL=helpers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.mjs","names":[],"sources":["../../../../src/runtime/nativeComponents/movable/helpers.ts"],"sourcesContent":["export type MovableDirection = 'all' | 'horizontal' | 'vertical' | 'none'\n\nexport interface MovablePosition {\n x: number\n y: number\n}\n\nexport interface MovableBounds {\n width: number\n height: number\n viewWidth: number\n viewHeight: number\n}\n\nexport function resolveMovableDirection(value: string | null): MovableDirection {\n if (value === 'horizontal' || value === 'vertical' || value === 'none') {\n return value\n }\n return 'all'\n}\n\nexport function resolveMovableNumber(value: string | null, fallback = 0) {\n const number = Number(value)\n return Number.isFinite(number) ? number : fallback\n}\n\nexport function clampMovablePosition(\n position: MovablePosition,\n bounds: MovableBounds,\n direction: MovableDirection,\n outOfBounds: boolean,\n) {\n const next = { ...position }\n if (!outOfBounds) {\n next.x = Math.min(Math.max(0, next.x), Math.max(0, bounds.width - bounds.viewWidth))\n next.y = Math.min(Math.max(0, next.y), Math.max(0, bounds.height - bounds.viewHeight))\n }\n if (direction === 'horizontal' || direction === 'none') {\n next.y = position.y\n }\n if (direction === 'vertical' || direction === 'none') {\n next.x = position.x\n }\n return next\n}\n"],"mappings":";AAcA,SAAgB,wBAAwB,OAAwC;CAC9E,IAAI,UAAU,gBAAgB,UAAU,cAAc,UAAU,QAC9D,OAAO;CAET,OAAO;AACT;AAEA,SAAgB,qBAAqB,OAAsB,WAAW,GAAG;CACvE,MAAM,SAAS,OAAO,KAAK;CAC3B,OAAO,OAAO,SAAS,MAAM,IAAI,SAAS;AAC5C;AAEA,SAAgB,qBACd,UACA,QACA,WACA,aACA;CACA,MAAM,OAAO,EAAE,GAAG,SAAS;CAC3B,IAAI,CAAC,aAAa;EAChB,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,IAAI,GAAG,OAAO,QAAQ,OAAO,SAAS,CAAC;EACnF,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,IAAI,GAAG,OAAO,SAAS,OAAO,UAAU,CAAC;CACvF;CACA,IAAI,cAAc,gBAAgB,cAAc,QAC9C,KAAK,IAAI,SAAS;CAEpB,IAAI,cAAc,cAAc,cAAc,QAC5C,KAAK,IAAI,SAAS;CAEpB,OAAO;AACT"}
@@ -0,0 +1,117 @@
1
+ import { getNativeComponentDescriptor } from "../../../shared/nativeComponents.mjs";
2
+ import { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from "../helpers.mjs";
3
+ import { ensureNativeComponentStyle } from "../style.mjs";
4
+ import { clampMovablePosition, resolveMovableDirection, resolveMovableNumber } from "./helpers.mjs";
5
+
6
+ //#region src/runtime/nativeComponents/movable/index.ts
7
+ const BaseElement = globalThis.HTMLElement ?? class {};
8
+ var WeappMovableArea = class extends BaseElement {
9
+ connectedCallback() {
10
+ ensureNativeComponentStyle(resolveContainingShadowRoot(this));
11
+ }
12
+ };
13
+ var WeappMovableView = class extends BaseElement {
14
+ static observedAttributes = [...getNativeComponentDescriptor("movable-view").attributes];
15
+ #position = {
16
+ x: 0,
17
+ y: 0
18
+ };
19
+ #drag;
20
+ #bound = false;
21
+ connectedCallback() {
22
+ ensureNativeComponentStyle(resolveContainingShadowRoot(this));
23
+ this.#syncAttributes();
24
+ if (!this.#bound) {
25
+ this.addEventListener("pointerdown", this.#handlePointerDown);
26
+ this.addEventListener("pointermove", this.#handlePointerMove);
27
+ this.addEventListener("pointerup", this.#handlePointerUp);
28
+ this.addEventListener("pointercancel", this.#handlePointerUp);
29
+ this.#bound = true;
30
+ }
31
+ }
32
+ disconnectedCallback() {
33
+ this.#drag = void 0;
34
+ }
35
+ attributeChangedCallback() {
36
+ this.#syncAttributes();
37
+ }
38
+ #syncAttributes() {
39
+ const direction = resolveMovableDirection(this.getAttribute("direction"));
40
+ this.#position = clampMovablePosition({
41
+ x: resolveMovableNumber(this.getAttribute("x")),
42
+ y: resolveMovableNumber(this.getAttribute("y"))
43
+ }, this.#readBounds(), direction, readBooleanAttribute(this, "out-of-bounds"));
44
+ this.style.transition = readBooleanAttribute(this, "animation") ? "transform 300ms ease" : "none";
45
+ this.#applyPosition();
46
+ }
47
+ #readBounds() {
48
+ const areaRect = this.closest("weapp-movable-area")?.getBoundingClientRect();
49
+ const viewRect = this.getBoundingClientRect();
50
+ return {
51
+ width: areaRect?.width ?? 0,
52
+ height: areaRect?.height ?? 0,
53
+ viewWidth: viewRect.width || 10,
54
+ viewHeight: viewRect.height || 10
55
+ };
56
+ }
57
+ #applyPosition() {
58
+ this.style.transform = `translate3d(${this.#position.x}px, ${this.#position.y}px, 0)`;
59
+ }
60
+ #handlePointerDown = (event) => {
61
+ if (readBooleanAttribute(this, "disabled")) return;
62
+ const pointer = event;
63
+ const pointerId = Number.isFinite(pointer.pointerId) ? pointer.pointerId : 0;
64
+ this.#drag = {
65
+ pointerId,
66
+ startX: pointer.clientX,
67
+ startY: pointer.clientY,
68
+ position: { ...this.#position }
69
+ };
70
+ this.setPointerCapture?.(pointerId);
71
+ event.preventDefault();
72
+ };
73
+ #handlePointerMove = (event) => {
74
+ const drag = this.#drag;
75
+ if (!drag) return;
76
+ const pointer = event;
77
+ if (Number.isFinite(pointer.pointerId) && pointer.pointerId !== drag.pointerId) return;
78
+ const direction = resolveMovableDirection(this.getAttribute("direction"));
79
+ const next = clampMovablePosition({
80
+ x: drag.position.x + pointer.clientX - drag.startX,
81
+ y: drag.position.y + pointer.clientY - drag.startY
82
+ }, this.#readBounds(), direction, readBooleanAttribute(this, "out-of-bounds"));
83
+ if (direction === "horizontal" || direction === "none") next.y = drag.position.y;
84
+ if (direction === "vertical" || direction === "none") next.x = drag.position.x;
85
+ const changedX = next.x !== this.#position.x;
86
+ const changedY = next.y !== this.#position.y;
87
+ if (!changedX && !changedY) return;
88
+ this.#position = next;
89
+ this.#applyPosition();
90
+ const detail = {
91
+ x: next.x,
92
+ y: next.y,
93
+ source: "touch"
94
+ };
95
+ dispatchMiniProgramEvent(this, "change", detail);
96
+ if (changedX) dispatchMiniProgramEvent(this, "htouchmove", detail);
97
+ if (changedY) dispatchMiniProgramEvent(this, "vtouchmove", detail);
98
+ event.preventDefault();
99
+ };
100
+ #handlePointerUp = (event) => {
101
+ const drag = this.#drag;
102
+ if (!drag) return;
103
+ const pointer = event;
104
+ if (Number.isFinite(pointer.pointerId) && pointer.pointerId !== drag.pointerId) return;
105
+ this.releasePointerCapture?.(drag.pointerId);
106
+ this.#drag = void 0;
107
+ dispatchMiniProgramEvent(this, "change", {
108
+ x: this.#position.x,
109
+ y: this.#position.y,
110
+ source: "touch"
111
+ });
112
+ };
113
+ };
114
+
115
+ //#endregion
116
+ export { WeappMovableArea, WeappMovableView };
117
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["#syncAttributes","#bound","#handlePointerDown","#handlePointerMove","#handlePointerUp","#drag","#position","#readBounds","#applyPosition"],"sources":["../../../../src/runtime/nativeComponents/movable/index.ts"],"sourcesContent":["import type { MovablePosition } from './helpers'\nimport { getNativeComponentDescriptor } from '../../../shared/nativeComponents'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from '../helpers'\nimport { ensureNativeComponentStyle } from '../style'\nimport {\n clampMovablePosition,\n\n resolveMovableDirection,\n resolveMovableNumber,\n} from './helpers'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nexport class WeappMovableArea extends BaseElement {\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n }\n}\n\nexport class WeappMovableView extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('movable-view')!.attributes]\n\n #position: MovablePosition = { x: 0, y: 0 }\n #drag?: { pointerId: number, startX: number, startY: number, position: MovablePosition }\n #bound = false\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#syncAttributes()\n if (!this.#bound) {\n this.addEventListener('pointerdown', this.#handlePointerDown)\n this.addEventListener('pointermove', this.#handlePointerMove)\n this.addEventListener('pointerup', this.#handlePointerUp)\n this.addEventListener('pointercancel', this.#handlePointerUp)\n this.#bound = true\n }\n }\n\n disconnectedCallback() {\n this.#drag = undefined\n }\n\n attributeChangedCallback() {\n this.#syncAttributes()\n }\n\n #syncAttributes() {\n const direction = resolveMovableDirection(this.getAttribute('direction'))\n this.#position = clampMovablePosition({\n x: resolveMovableNumber(this.getAttribute('x')),\n y: resolveMovableNumber(this.getAttribute('y')),\n }, this.#readBounds(), direction, readBooleanAttribute(this, 'out-of-bounds'))\n this.style.transition = readBooleanAttribute(this, 'animation') ? 'transform 300ms ease' : 'none'\n this.#applyPosition()\n }\n\n #readBounds() {\n const area = this.closest('weapp-movable-area')\n const areaRect = area?.getBoundingClientRect()\n const viewRect = this.getBoundingClientRect()\n return {\n width: areaRect?.width ?? 0,\n height: areaRect?.height ?? 0,\n viewWidth: viewRect.width || 10,\n viewHeight: viewRect.height || 10,\n }\n }\n\n #applyPosition() {\n this.style.transform = `translate3d(${this.#position.x}px, ${this.#position.y}px, 0)`\n }\n\n #handlePointerDown = (event: Event) => {\n if (readBooleanAttribute(this, 'disabled')) {\n return\n }\n const pointer = event as PointerEvent\n const pointerId = Number.isFinite(pointer.pointerId) ? pointer.pointerId : 0\n this.#drag = {\n pointerId,\n startX: pointer.clientX,\n startY: pointer.clientY,\n position: { ...this.#position },\n }\n this.setPointerCapture?.(pointerId)\n event.preventDefault()\n }\n\n #handlePointerMove = (event: Event) => {\n const drag = this.#drag\n if (!drag) {\n return\n }\n const pointer = event as PointerEvent\n if (Number.isFinite(pointer.pointerId) && pointer.pointerId !== drag.pointerId) {\n return\n }\n const direction = resolveMovableDirection(this.getAttribute('direction'))\n const next = clampMovablePosition({\n x: drag.position.x + pointer.clientX - drag.startX,\n y: drag.position.y + pointer.clientY - drag.startY,\n }, this.#readBounds(), direction, readBooleanAttribute(this, 'out-of-bounds'))\n if (direction === 'horizontal' || direction === 'none') {\n next.y = drag.position.y\n }\n if (direction === 'vertical' || direction === 'none') {\n next.x = drag.position.x\n }\n const changedX = next.x !== this.#position.x\n const changedY = next.y !== this.#position.y\n if (!changedX && !changedY) {\n return\n }\n this.#position = next\n this.#applyPosition()\n const detail = { x: next.x, y: next.y, source: 'touch' }\n dispatchMiniProgramEvent(this, 'change', detail)\n if (changedX) {\n dispatchMiniProgramEvent(this, 'htouchmove', detail)\n }\n if (changedY) {\n dispatchMiniProgramEvent(this, 'vtouchmove', detail)\n }\n event.preventDefault()\n }\n\n #handlePointerUp = (event: Event) => {\n const drag = this.#drag\n if (!drag) {\n return\n }\n const pointer = event as PointerEvent\n if (Number.isFinite(pointer.pointerId) && pointer.pointerId !== drag.pointerId) {\n return\n }\n this.releasePointerCapture?.(drag.pointerId)\n this.#drag = undefined\n dispatchMiniProgramEvent(this, 'change', {\n x: this.#position.x,\n y: this.#position.y,\n source: 'touch',\n })\n }\n}\n\nexport { clampMovablePosition, resolveMovableDirection } from './helpers'\n"],"mappings":"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"}
@@ -0,0 +1,200 @@
1
+ import { getNativeComponentDescriptor } from "../../shared/nativeComponents.mjs";
2
+ import { emitRuntimeWarning } from "../warning.mjs";
3
+ import { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from "./helpers.mjs";
4
+ import { ensureNativeComponentStyle } from "./style.mjs";
5
+ import { navigateBack, navigateTo, reLaunch, redirectTo, switchTab } from "../polyfill/routeRuntime.mjs";
6
+ import { exitMiniProgram, navigateToMiniProgram } from "../polyfill/runtimeDataApi.mjs";
7
+
8
+ //#region src/runtime/nativeComponents/navigator.ts
9
+ const BaseElement = globalThis.HTMLElement ?? class {};
10
+ const defaultBridge = {
11
+ navigateTo,
12
+ redirectTo,
13
+ switchTab,
14
+ reLaunch,
15
+ navigateBack,
16
+ navigateToMiniProgram,
17
+ exitMiniProgram
18
+ };
19
+ function normalizeOpenType(value) {
20
+ const normalized = value.trim().toLowerCase();
21
+ switch (normalized) {
22
+ case "redirect":
23
+ case "switchtab":
24
+ case "relaunch":
25
+ case "navigateback":
26
+ case "exit": return normalized;
27
+ default: return "navigate";
28
+ }
29
+ }
30
+ function withNavigatorCallbacks(options, request) {
31
+ if (request.success) Object.assign(options, { success: request.success });
32
+ if (request.fail) Object.assign(options, { fail: request.fail });
33
+ if (request.complete) Object.assign(options, { complete: request.complete });
34
+ return options;
35
+ }
36
+ function executeNavigatorRequest(request, bridge = defaultBridge) {
37
+ const openType = normalizeOpenType(request.openType);
38
+ if (request.target.trim().toLowerCase() === "miniprogram") {
39
+ if (openType === "exit") return bridge.exitMiniProgram({
40
+ success: request.success,
41
+ fail: request.fail,
42
+ complete: request.complete
43
+ });
44
+ const options = {
45
+ appId: request.appId,
46
+ path: request.path,
47
+ extraData: request.extraData,
48
+ envVersion: request.envVersion,
49
+ success: request.success,
50
+ fail: request.fail,
51
+ complete: request.complete
52
+ };
53
+ return bridge.navigateToMiniProgram(options);
54
+ }
55
+ switch (openType) {
56
+ case "redirect": return bridge.redirectTo(withNavigatorCallbacks({ url: request.url }, request));
57
+ case "switchtab": return bridge.switchTab(withNavigatorCallbacks({ url: request.url }, request));
58
+ case "relaunch": return bridge.reLaunch(withNavigatorCallbacks({ url: request.url }, request));
59
+ case "navigateback": return bridge.navigateBack(withNavigatorCallbacks({ delta: request.delta }, request));
60
+ case "exit":
61
+ emitRuntimeWarning("[@weapp-vite/web] navigator open-type=\"exit\" 仅在 target=\"miniProgram\" 时生效", {
62
+ key: "navigator:self:exit",
63
+ context: "native-component:navigator"
64
+ });
65
+ return Promise.resolve();
66
+ default: return bridge.navigateTo(withNavigatorCallbacks({ url: request.url }, request));
67
+ }
68
+ }
69
+ function resolveNavigatorExtraData(value, attributeValue) {
70
+ if (value && typeof value === "object") return value;
71
+ const serialized = typeof value === "string" ? value : attributeValue;
72
+ if (!serialized) return;
73
+ try {
74
+ const parsed = JSON.parse(serialized);
75
+ return parsed && typeof parsed === "object" ? parsed : void 0;
76
+ } catch {
77
+ return;
78
+ }
79
+ }
80
+ function parseNumber(value, fallback) {
81
+ const number = Number(value);
82
+ return value !== null && Number.isFinite(number) ? number : fallback;
83
+ }
84
+ function resolveHoverClass(element) {
85
+ const value = element.getAttribute("hover-class") ?? element.getAttribute("data-hover-class");
86
+ if (value === "none") return "";
87
+ return value || "navigator-hover";
88
+ }
89
+ var WeappNavigator = class extends BaseElement {
90
+ static observedAttributes = [...getNativeComponentDescriptor("navigator").attributes];
91
+ extraData;
92
+ #anchor;
93
+ #hoverTimer;
94
+ #hoverRemoveTimer;
95
+ #lastTouchTime = 0;
96
+ #bound = false;
97
+ connectedCallback() {
98
+ ensureNativeComponentStyle(resolveContainingShadowRoot(this));
99
+ this.#ensureStructure();
100
+ this.#syncAttributes();
101
+ this.#bindEvents();
102
+ }
103
+ disconnectedCallback() {
104
+ this.#clearHoverTimers();
105
+ }
106
+ attributeChangedCallback() {
107
+ this.#syncAttributes();
108
+ }
109
+ #ensureStructure() {
110
+ if (this.#anchor || typeof document === "undefined") return;
111
+ const root = this.shadowRoot ?? this.attachShadow({ mode: "open" });
112
+ const style = document.createElement("style");
113
+ style.textContent = `
114
+ :host { -webkit-tap-highlight-color: transparent; }
115
+ :host(.navigator-hover) { opacity: 0.7; }
116
+ a { display: block; width: 100%; height: 100%; color: inherit; text-decoration: none; outline: none; }
117
+ `;
118
+ const anchor = document.createElement("a");
119
+ anchor.append(document.createElement("slot"));
120
+ root.append(style, anchor);
121
+ this.#anchor = anchor;
122
+ }
123
+ #syncAttributes() {
124
+ if (!this.#anchor) return;
125
+ const url = this.getAttribute("url") ?? "";
126
+ this.#anchor.href = url || "#";
127
+ this.#anchor.setAttribute("aria-label", this.getAttribute("aria-label") ?? this.textContent.trim());
128
+ }
129
+ #bindEvents() {
130
+ if (this.#bound || !this.#anchor) return;
131
+ this.#bound = true;
132
+ this.#anchor.addEventListener("click", this.#handleClick);
133
+ this.addEventListener("touchstart", this.#handlePressStart, { passive: true });
134
+ this.addEventListener("mousedown", this.#handlePressStart);
135
+ this.addEventListener("touchend", this.#handlePressEnd);
136
+ this.addEventListener("touchcancel", this.#handlePressEnd);
137
+ this.addEventListener("mouseup", this.#handlePressEnd);
138
+ this.addEventListener("mouseleave", this.#handlePressEnd);
139
+ }
140
+ #handleClick = (event) => {
141
+ event.preventDefault();
142
+ const target = this.getAttribute("target") ?? "self";
143
+ const shortLink = this.getAttribute("short-link");
144
+ if (target.toLowerCase() === "miniprogram" && shortLink && !this.getAttribute("app-id")) emitRuntimeWarning("[@weapp-vite/web] navigator short-link 暂无浏览器等价实现,请同时提供 app-id", {
145
+ key: "navigator:miniprogram:short-link",
146
+ context: "native-component:navigator"
147
+ });
148
+ const version = this.getAttribute("version");
149
+ const envVersion = version === "develop" || version === "trial" || version === "release" ? version : void 0;
150
+ executeNavigatorRequest({
151
+ url: this.getAttribute("url") ?? "",
152
+ openType: this.getAttribute("open-type") ?? "navigate",
153
+ delta: Math.max(1, parseNumber(this.getAttribute("delta"), 1)),
154
+ target,
155
+ appId: this.getAttribute("app-id") ?? void 0,
156
+ path: this.getAttribute("path") ?? void 0,
157
+ extraData: resolveNavigatorExtraData(this.extraData, this.getAttribute("extra-data")),
158
+ envVersion,
159
+ success: (result) => dispatchMiniProgramEvent(this, "success", result),
160
+ fail: (result) => dispatchMiniProgramEvent(this, "fail", result),
161
+ complete: (result) => dispatchMiniProgramEvent(this, "complete", result)
162
+ }).catch(() => {});
163
+ };
164
+ #handlePressStart = (event) => {
165
+ const hoverClass = resolveHoverClass(this);
166
+ if (!hoverClass) return;
167
+ if (readBooleanAttribute(this, "hover-stop-propagation")) event.stopPropagation();
168
+ if (event.type === "touchstart") this.#lastTouchTime = Date.now();
169
+ if (event.type === "mousedown" && Date.now() - this.#lastTouchTime < 400) return;
170
+ this.#clearHoverTimers();
171
+ const startTime = Math.max(0, parseNumber(this.getAttribute("hover-start-time"), 50));
172
+ this.#hoverTimer = globalThis.setTimeout(() => this.classList.add(hoverClass), startTime);
173
+ };
174
+ #handlePressEnd = (event) => {
175
+ const hoverClass = resolveHoverClass(this);
176
+ if (!hoverClass || event.type === "mouseup" && Date.now() - this.#lastTouchTime < 400) return;
177
+ if (this.#hoverTimer) {
178
+ clearTimeout(this.#hoverTimer);
179
+ this.#hoverTimer = void 0;
180
+ }
181
+ if (this.classList.contains(hoverClass)) {
182
+ const stayTime = Math.max(0, parseNumber(this.getAttribute("hover-stay-time"), 600));
183
+ this.#hoverRemoveTimer = globalThis.setTimeout(() => this.classList.remove(hoverClass), stayTime);
184
+ }
185
+ };
186
+ #clearHoverTimers() {
187
+ if (this.#hoverTimer) {
188
+ clearTimeout(this.#hoverTimer);
189
+ this.#hoverTimer = void 0;
190
+ }
191
+ if (this.#hoverRemoveTimer) {
192
+ clearTimeout(this.#hoverRemoveTimer);
193
+ this.#hoverRemoveTimer = void 0;
194
+ }
195
+ }
196
+ };
197
+
198
+ //#endregion
199
+ export { WeappNavigator, executeNavigatorRequest, resolveNavigatorExtraData };
200
+ //# sourceMappingURL=navigator.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigator.mjs","names":["#ensureStructure","#syncAttributes","#bindEvents","#clearHoverTimers","#anchor","#bound","#handleClick","#handlePressStart","#handlePressEnd","#lastTouchTime","#hoverTimer","#hoverRemoveTimer"],"sources":["../../../src/runtime/nativeComponents/navigator.ts"],"sourcesContent":["import type { MiniProgramBaseResult, NavigateToMiniProgramOptions } from '../polyfill/types'\nimport { getNativeComponentDescriptor } from '../../shared/nativeComponents'\nimport { navigateBack, navigateTo, redirectTo, reLaunch, switchTab } from '../polyfill/routeRuntime'\nimport { exitMiniProgram, navigateToMiniProgram } from '../polyfill/runtimeDataApi'\nimport { emitRuntimeWarning } from '../warning'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from './helpers'\nimport { ensureNativeComponentStyle } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\ntype NavigatorOpenType = 'navigate' | 'redirect' | 'switchtab' | 'relaunch' | 'navigateback' | 'exit'\n\ninterface NavigatorRuntimeBridge {\n navigateTo: typeof navigateTo\n redirectTo: typeof redirectTo\n switchTab: typeof switchTab\n reLaunch: typeof reLaunch\n navigateBack: typeof navigateBack\n navigateToMiniProgram: typeof navigateToMiniProgram\n exitMiniProgram: typeof exitMiniProgram\n}\n\nexport interface NavigatorRequest {\n url: string\n openType: string\n delta: number\n target: string\n appId?: string\n path?: string\n extraData?: Record<string, unknown>\n envVersion?: 'develop' | 'trial' | 'release'\n success?: (result: MiniProgramBaseResult) => void\n fail?: (result: MiniProgramBaseResult) => void\n complete?: (result: MiniProgramBaseResult) => void\n}\n\nconst defaultBridge: NavigatorRuntimeBridge = {\n navigateTo,\n redirectTo,\n switchTab,\n reLaunch,\n navigateBack,\n navigateToMiniProgram,\n exitMiniProgram,\n}\n\nfunction normalizeOpenType(value: string): NavigatorOpenType {\n const normalized = value.trim().toLowerCase()\n switch (normalized) {\n case 'redirect':\n case 'switchtab':\n case 'relaunch':\n case 'navigateback':\n case 'exit':\n return normalized\n default:\n return 'navigate'\n }\n}\n\nfunction withNavigatorCallbacks<T extends Record<string, unknown>>(options: T, request: NavigatorRequest) {\n if (request.success) {\n Object.assign(options, { success: request.success })\n }\n if (request.fail) {\n Object.assign(options, { fail: request.fail })\n }\n if (request.complete) {\n Object.assign(options, { complete: request.complete })\n }\n return options\n}\n\nexport function executeNavigatorRequest(\n request: NavigatorRequest,\n bridge: NavigatorRuntimeBridge = defaultBridge,\n) {\n const openType = normalizeOpenType(request.openType)\n if (request.target.trim().toLowerCase() === 'miniprogram') {\n if (openType === 'exit') {\n return bridge.exitMiniProgram({\n success: request.success,\n fail: request.fail,\n complete: request.complete,\n })\n }\n const options: NavigateToMiniProgramOptions = {\n appId: request.appId,\n path: request.path,\n extraData: request.extraData,\n envVersion: request.envVersion,\n success: request.success,\n fail: request.fail,\n complete: request.complete,\n }\n return bridge.navigateToMiniProgram(options)\n }\n\n switch (openType) {\n case 'redirect':\n return bridge.redirectTo(withNavigatorCallbacks({ url: request.url }, request))\n case 'switchtab':\n return bridge.switchTab(withNavigatorCallbacks({ url: request.url }, request))\n case 'relaunch':\n return bridge.reLaunch(withNavigatorCallbacks({ url: request.url }, request))\n case 'navigateback':\n return bridge.navigateBack(withNavigatorCallbacks({ delta: request.delta }, request))\n case 'exit':\n emitRuntimeWarning('[@weapp-vite/web] navigator open-type=\"exit\" 仅在 target=\"miniProgram\" 时生效', {\n key: 'navigator:self:exit',\n context: 'native-component:navigator',\n })\n return Promise.resolve()\n default:\n return bridge.navigateTo(withNavigatorCallbacks({ url: request.url }, request))\n }\n}\n\nexport function resolveNavigatorExtraData(value: unknown, attributeValue?: string | null) {\n if (value && typeof value === 'object') {\n return value as Record<string, unknown>\n }\n const serialized = typeof value === 'string' ? value : attributeValue\n if (!serialized) {\n return undefined\n }\n try {\n const parsed = JSON.parse(serialized) as unknown\n return parsed && typeof parsed === 'object' ? parsed as Record<string, unknown> : undefined\n }\n catch {\n return undefined\n }\n}\n\nfunction parseNumber(value: string | null, fallback: number) {\n const number = Number(value)\n return value !== null && Number.isFinite(number) ? number : fallback\n}\n\nfunction resolveHoverClass(element: HTMLElement) {\n const value = element.getAttribute('hover-class') ?? element.getAttribute('data-hover-class')\n if (value === 'none') {\n return ''\n }\n return value || 'navigator-hover'\n}\n\nexport class WeappNavigator extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('navigator')!.attributes]\n\n extraData?: Record<string, unknown> | string\n\n #anchor?: HTMLAnchorElement\n #hoverTimer?: ReturnType<typeof globalThis.setTimeout>\n #hoverRemoveTimer?: ReturnType<typeof globalThis.setTimeout>\n #lastTouchTime = 0\n #bound = false\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n this.#syncAttributes()\n this.#bindEvents()\n }\n\n disconnectedCallback() {\n this.#clearHoverTimers()\n }\n\n attributeChangedCallback() {\n this.#syncAttributes()\n }\n\n #ensureStructure() {\n if (this.#anchor || 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 { -webkit-tap-highlight-color: transparent; }\n :host(.navigator-hover) { opacity: 0.7; }\n a { display: block; width: 100%; height: 100%; color: inherit; text-decoration: none; outline: none; }\n `\n const anchor = document.createElement('a')\n anchor.append(document.createElement('slot'))\n root.append(style, anchor)\n this.#anchor = anchor\n }\n\n #syncAttributes() {\n if (!this.#anchor) {\n return\n }\n const url = this.getAttribute('url') ?? ''\n this.#anchor.href = url || '#'\n this.#anchor.setAttribute('aria-label', this.getAttribute('aria-label') ?? this.textContent.trim())\n }\n\n #bindEvents() {\n if (this.#bound || !this.#anchor) {\n return\n }\n this.#bound = true\n this.#anchor.addEventListener('click', this.#handleClick)\n this.addEventListener('touchstart', this.#handlePressStart, { passive: true })\n this.addEventListener('mousedown', this.#handlePressStart)\n this.addEventListener('touchend', this.#handlePressEnd)\n this.addEventListener('touchcancel', this.#handlePressEnd)\n this.addEventListener('mouseup', this.#handlePressEnd)\n this.addEventListener('mouseleave', this.#handlePressEnd)\n }\n\n #handleClick = (event: MouseEvent) => {\n event.preventDefault()\n const target = this.getAttribute('target') ?? 'self'\n const shortLink = this.getAttribute('short-link')\n if (target.toLowerCase() === 'miniprogram' && shortLink && !this.getAttribute('app-id')) {\n emitRuntimeWarning('[@weapp-vite/web] navigator short-link 暂无浏览器等价实现,请同时提供 app-id', {\n key: 'navigator:miniprogram:short-link',\n context: 'native-component:navigator',\n })\n }\n const version = this.getAttribute('version')\n const envVersion = version === 'develop' || version === 'trial' || version === 'release'\n ? version\n : undefined\n void executeNavigatorRequest({\n url: this.getAttribute('url') ?? '',\n openType: this.getAttribute('open-type') ?? 'navigate',\n delta: Math.max(1, parseNumber(this.getAttribute('delta'), 1)),\n target,\n appId: this.getAttribute('app-id') ?? undefined,\n path: this.getAttribute('path') ?? undefined,\n extraData: resolveNavigatorExtraData(this.extraData, this.getAttribute('extra-data')),\n envVersion,\n success: result => dispatchMiniProgramEvent(this, 'success', result),\n fail: result => dispatchMiniProgramEvent(this, 'fail', result),\n complete: result => dispatchMiniProgramEvent(this, 'complete', result),\n }).catch(() => {})\n }\n\n #handlePressStart = (event: Event) => {\n const hoverClass = resolveHoverClass(this)\n if (!hoverClass) {\n return\n }\n if (readBooleanAttribute(this, 'hover-stop-propagation')) {\n event.stopPropagation()\n }\n if (event.type === 'touchstart') {\n this.#lastTouchTime = Date.now()\n }\n if (event.type === 'mousedown' && Date.now() - this.#lastTouchTime < 400) {\n return\n }\n this.#clearHoverTimers()\n const startTime = Math.max(0, parseNumber(this.getAttribute('hover-start-time'), 50))\n this.#hoverTimer = globalThis.setTimeout(() => this.classList.add(hoverClass), startTime)\n }\n\n #handlePressEnd = (event: Event) => {\n const hoverClass = resolveHoverClass(this)\n if (!hoverClass || (event.type === 'mouseup' && Date.now() - this.#lastTouchTime < 400)) {\n return\n }\n if (this.#hoverTimer) {\n clearTimeout(this.#hoverTimer)\n this.#hoverTimer = undefined\n }\n if (this.classList.contains(hoverClass)) {\n const stayTime = Math.max(0, parseNumber(this.getAttribute('hover-stay-time'), 600))\n this.#hoverRemoveTimer = globalThis.setTimeout(() => this.classList.remove(hoverClass), stayTime)\n }\n }\n\n #clearHoverTimers() {\n if (this.#hoverTimer) {\n clearTimeout(this.#hoverTimer)\n this.#hoverTimer = undefined\n }\n if (this.#hoverRemoveTimer) {\n clearTimeout(this.#hoverRemoveTimer)\n this.#hoverRemoveTimer = undefined\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { normalizePickerIndex, normalizePickerIndexes, resolvePickerColumns } from "./helpers.mjs";
2
+
3
+ //#region src/runtime/nativeComponents/picker/editors.ts
4
+ function currentDateValue(fields) {
5
+ const date = /* @__PURE__ */ new Date();
6
+ const year = String(date.getFullYear()).padStart(4, "0");
7
+ const month = String(date.getMonth() + 1).padStart(2, "0");
8
+ const day = String(date.getDate()).padStart(2, "0");
9
+ if (fields === "year") return year;
10
+ if (fields === "month") return `${year}-${month}`;
11
+ return `${year}-${month}-${day}`;
12
+ }
13
+ function renderRangeEditors(options) {
14
+ const columns = resolvePickerColumns(options.range, options.mode, options.rangeKey);
15
+ const current = options.mode === "multiSelector" ? normalizePickerIndexes(options.value, columns.map((column) => column.length)) : [normalizePickerIndex(options.value, columns[0].length)];
16
+ return columns.map((column, columnIndex) => {
17
+ const select = document.createElement("select");
18
+ select.size = Math.min(7, Math.max(3, column.length));
19
+ column.forEach((option, optionIndex) => {
20
+ const item = document.createElement("option");
21
+ item.value = String(optionIndex);
22
+ item.textContent = option.label;
23
+ item.selected = optionIndex === current[columnIndex];
24
+ select.append(item);
25
+ });
26
+ select.addEventListener("change", () => {
27
+ const index = normalizePickerIndex(select.value, column.length);
28
+ if (options.mode === "multiSelector") {
29
+ const next = normalizePickerIndexes(options.value, columns.map((item) => item.length));
30
+ next[columnIndex] = index;
31
+ options.value = next;
32
+ options.onValueChange(next);
33
+ options.onColumnChange(columnIndex, index);
34
+ } else {
35
+ options.value = index;
36
+ options.onValueChange(index);
37
+ }
38
+ });
39
+ return select;
40
+ });
41
+ }
42
+ function renderTemporalEditor(options) {
43
+ const input = document.createElement("input");
44
+ input.type = options.mode === "time" ? "time" : options.fields === "month" ? "month" : options.fields === "year" ? "number" : "date";
45
+ input.value = String(options.value ?? "");
46
+ if (options.fields === "year") input.value = input.value.slice(0, 4);
47
+ if (options.start) input.min = options.fields === "year" ? options.start.slice(0, 4) : options.start;
48
+ if (options.end) input.max = options.fields === "year" ? options.end.slice(0, 4) : options.end;
49
+ input.addEventListener("input", () => options.onValueChange(input.value));
50
+ return input;
51
+ }
52
+ function renderRegionEditors(options) {
53
+ const count = options.level === "province" ? 1 : options.level === "city" ? 2 : options.level === "sub-district" ? 4 : 3;
54
+ const values = Array.isArray(options.value) ? [...options.value] : [];
55
+ return Array.from({ length: count }, (_, index) => {
56
+ const input = document.createElement("input");
57
+ input.type = "text";
58
+ input.value = String(values[index] ?? options.customItem ?? "");
59
+ input.addEventListener("input", () => {
60
+ values[index] = input.value;
61
+ options.onValueChange([...values]);
62
+ });
63
+ return input;
64
+ });
65
+ }
66
+ function renderPickerEditors(options) {
67
+ if (options.mode === "selector" || options.mode === "multiSelector") return renderRangeEditors(options);
68
+ if (options.mode === "date" || options.mode === "time") return [renderTemporalEditor(options)];
69
+ return renderRegionEditors(options);
70
+ }
71
+
72
+ //#endregion
73
+ export { currentDateValue, renderPickerEditors };
74
+ //# sourceMappingURL=editors.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editors.mjs","names":[],"sources":["../../../../src/runtime/nativeComponents/picker/editors.ts"],"sourcesContent":["import type { PickerMode } from './helpers'\nimport {\n normalizePickerIndex,\n normalizePickerIndexes,\n resolvePickerColumns,\n} from './helpers'\n\ninterface PickerEditorOptions {\n mode: PickerMode\n range: unknown\n rangeKey?: string\n value: unknown\n fields?: string\n start?: string\n end?: string\n customItem?: string\n level?: string\n onValueChange: (value: unknown) => void\n onColumnChange: (column: number, value: number) => void\n}\n\nexport function currentDateValue(fields?: string) {\n const date = new Date()\n const year = String(date.getFullYear()).padStart(4, '0')\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n if (fields === 'year') {\n return year\n }\n if (fields === 'month') {\n return `${year}-${month}`\n }\n return `${year}-${month}-${day}`\n}\n\nfunction renderRangeEditors(options: PickerEditorOptions) {\n const columns = resolvePickerColumns(options.range, options.mode, options.rangeKey)\n const current = options.mode === 'multiSelector'\n ? normalizePickerIndexes(options.value, columns.map(column => column.length))\n : [normalizePickerIndex(options.value, columns[0]!.length)]\n return columns.map((column, columnIndex) => {\n const select = document.createElement('select')\n select.size = Math.min(7, Math.max(3, column.length))\n column.forEach((option, optionIndex) => {\n const item = document.createElement('option')\n item.value = String(optionIndex)\n item.textContent = option.label\n item.selected = optionIndex === current[columnIndex]\n select.append(item)\n })\n select.addEventListener('change', () => {\n const index = normalizePickerIndex(select.value, column.length)\n if (options.mode === 'multiSelector') {\n const next = normalizePickerIndexes(options.value, columns.map(item => item.length))\n next[columnIndex] = index\n options.value = next\n options.onValueChange(next)\n options.onColumnChange(columnIndex, index)\n }\n else {\n options.value = index\n options.onValueChange(index)\n }\n })\n return select\n })\n}\n\nfunction renderTemporalEditor(options: PickerEditorOptions) {\n const input = document.createElement('input')\n input.type = options.mode === 'time'\n ? 'time'\n : options.fields === 'month'\n ? 'month'\n : options.fields === 'year'\n ? 'number'\n : 'date'\n input.value = String(options.value ?? '')\n if (options.fields === 'year') {\n input.value = input.value.slice(0, 4)\n }\n if (options.start) {\n input.min = options.fields === 'year' ? options.start.slice(0, 4) : options.start\n }\n if (options.end) {\n input.max = options.fields === 'year' ? options.end.slice(0, 4) : options.end\n }\n input.addEventListener('input', () => options.onValueChange(input.value))\n return input\n}\n\nfunction renderRegionEditors(options: PickerEditorOptions) {\n const count = options.level === 'province' ? 1 : options.level === 'city' ? 2 : options.level === 'sub-district' ? 4 : 3\n const values = Array.isArray(options.value) ? [...options.value] : []\n return Array.from({ length: count }, (_, index) => {\n const input = document.createElement('input')\n input.type = 'text'\n input.value = String(values[index] ?? options.customItem ?? '')\n input.addEventListener('input', () => {\n values[index] = input.value\n options.onValueChange([...values])\n })\n return input\n })\n}\n\nexport function renderPickerEditors(options: PickerEditorOptions) {\n if (options.mode === 'selector' || options.mode === 'multiSelector') {\n return renderRangeEditors(options)\n }\n if (options.mode === 'date' || options.mode === 'time') {\n return [renderTemporalEditor(options)]\n }\n return renderRegionEditors(options)\n}\n"],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ //#region src/runtime/nativeComponents/picker/helpers.ts
2
+ const PICKER_MODES = [
3
+ "selector",
4
+ "multiSelector",
5
+ "time",
6
+ "date",
7
+ "region"
8
+ ];
9
+ function resolvePickerMode(value) {
10
+ return PICKER_MODES.includes(value) ? value : "selector";
11
+ }
12
+ function resolvePickerLabel(value, rangeKey) {
13
+ if (rangeKey && value && typeof value === "object") {
14
+ const label = value[rangeKey];
15
+ return label === void 0 || label === null ? "" : String(label);
16
+ }
17
+ return value === void 0 || value === null ? "" : String(value);
18
+ }
19
+ function normalizeRange(value) {
20
+ return Array.isArray(value) ? value : [];
21
+ }
22
+ function resolvePickerColumns(range, mode, rangeKey) {
23
+ if (mode === "multiSelector") return normalizeRange(range).map((column) => {
24
+ return normalizeRange(column).map((value) => ({
25
+ label: resolvePickerLabel(value, rangeKey),
26
+ value
27
+ }));
28
+ });
29
+ if (mode !== "selector") return [];
30
+ return [normalizeRange(range).map((value) => ({
31
+ label: resolvePickerLabel(value, rangeKey),
32
+ value
33
+ }))];
34
+ }
35
+ function normalizePickerIndex(value, itemCount) {
36
+ const numeric = Number(value);
37
+ return Math.min(Math.max(0, Number.isFinite(numeric) ? Math.trunc(numeric) : 0), Math.max(0, itemCount - 1));
38
+ }
39
+ function normalizePickerIndexes(value, columnLengths) {
40
+ const indexes = Array.isArray(value) ? value : [];
41
+ return columnLengths.map((length, column) => normalizePickerIndex(indexes[column], length));
42
+ }
43
+ function createPickerChangeDetail(mode, value) {
44
+ if (mode === "region") {
45
+ const region = Array.isArray(value) ? value.map((item) => String(item ?? "")) : [];
46
+ return {
47
+ value: region,
48
+ code: region.map(() => ""),
49
+ postcode: ""
50
+ };
51
+ }
52
+ return { value };
53
+ }
54
+
55
+ //#endregion
56
+ export { PICKER_MODES, createPickerChangeDetail, normalizePickerIndex, normalizePickerIndexes, resolvePickerColumns, resolvePickerMode };
57
+ //# sourceMappingURL=helpers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.mjs","names":[],"sources":["../../../../src/runtime/nativeComponents/picker/helpers.ts"],"sourcesContent":["export const PICKER_MODES = ['selector', 'multiSelector', 'time', 'date', 'region'] as const\n\nexport type PickerMode = typeof PICKER_MODES[number]\n\nexport interface PickerOption {\n label: string\n value: unknown\n}\n\nexport function resolvePickerMode(value: string | null | undefined): PickerMode {\n return PICKER_MODES.includes(value as PickerMode) ? value as PickerMode : 'selector'\n}\n\nfunction resolvePickerLabel(value: unknown, rangeKey?: string) {\n if (rangeKey && value && typeof value === 'object') {\n const label = (value as Record<string, unknown>)[rangeKey]\n return label === undefined || label === null ? '' : String(label)\n }\n return value === undefined || value === null ? '' : String(value)\n}\n\nfunction normalizeRange(value: unknown) {\n return Array.isArray(value) ? value : []\n}\n\nexport function resolvePickerColumns(\n range: unknown,\n mode: PickerMode,\n rangeKey?: string,\n): PickerOption[][] {\n if (mode === 'multiSelector') {\n return normalizeRange(range).map((column) => {\n return normalizeRange(column).map(value => ({\n label: resolvePickerLabel(value, rangeKey),\n value,\n }))\n })\n }\n if (mode !== 'selector') {\n return []\n }\n return [normalizeRange(range).map(value => ({\n label: resolvePickerLabel(value, rangeKey),\n value,\n }))]\n}\n\nexport function normalizePickerIndex(value: unknown, itemCount: number) {\n const numeric = Number(value)\n const index = Number.isFinite(numeric) ? Math.trunc(numeric) : 0\n return Math.min(Math.max(0, index), Math.max(0, itemCount - 1))\n}\n\nexport function normalizePickerIndexes(value: unknown, columnLengths: number[]) {\n const indexes = Array.isArray(value) ? value : []\n return columnLengths.map((length, column) => normalizePickerIndex(indexes[column], length))\n}\n\nexport function createPickerChangeDetail(mode: PickerMode, value: unknown) {\n if (mode === 'region') {\n const region = Array.isArray(value) ? value.map(item => String(item ?? '')) : []\n return {\n value: region,\n code: region.map(() => ''),\n postcode: '',\n }\n }\n return { value }\n}\n"],"mappings":";AAAA,MAAa,eAAe;CAAC;CAAY;CAAiB;CAAQ;CAAQ;AAAQ;AASlF,SAAgB,kBAAkB,OAA8C;CAC9E,OAAO,aAAa,SAAS,KAAmB,IAAI,QAAsB;AAC5E;AAEA,SAAS,mBAAmB,OAAgB,UAAmB;CAC7D,IAAI,YAAY,SAAS,OAAO,UAAU,UAAU;EAClD,MAAM,QAAS,MAAkC;EACjD,OAAO,UAAU,UAAa,UAAU,OAAO,KAAK,OAAO,KAAK;CAClE;CACA,OAAO,UAAU,UAAa,UAAU,OAAO,KAAK,OAAO,KAAK;AAClE;AAEA,SAAS,eAAe,OAAgB;CACtC,OAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC;AACzC;AAEA,SAAgB,qBACd,OACA,MACA,UACkB;CAClB,IAAI,SAAS,iBACX,OAAO,eAAe,KAAK,CAAC,CAAC,KAAK,WAAW;EAC3C,OAAO,eAAe,MAAM,CAAC,CAAC,KAAI,WAAU;GAC1C,OAAO,mBAAmB,OAAO,QAAQ;GACzC;EACF,EAAE;CACJ,CAAC;CAEH,IAAI,SAAS,YACX,OAAO,CAAC;CAEV,OAAO,CAAC,eAAe,KAAK,CAAC,CAAC,KAAI,WAAU;EAC1C,OAAO,mBAAmB,OAAO,QAAQ;EACzC;CACF,EAAE,CAAC;AACL;AAEA,SAAgB,qBAAqB,OAAgB,WAAmB;CACtE,MAAM,UAAU,OAAO,KAAK;CAE5B,OAAO,KAAK,IAAI,KAAK,IAAI,GADX,OAAO,SAAS,OAAO,IAAI,KAAK,MAAM,OAAO,IAAI,CAC9B,GAAG,KAAK,IAAI,GAAG,YAAY,CAAC,CAAC;AAChE;AAEA,SAAgB,uBAAuB,OAAgB,eAAyB;CAC9E,MAAM,UAAU,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC;CAChD,OAAO,cAAc,KAAK,QAAQ,WAAW,qBAAqB,QAAQ,SAAS,MAAM,CAAC;AAC5F;AAEA,SAAgB,yBAAyB,MAAkB,OAAgB;CACzE,IAAI,SAAS,UAAU;EACrB,MAAM,SAAS,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAI,SAAQ,OAAO,QAAQ,EAAE,CAAC,IAAI,CAAC;EAC/E,OAAO;GACL,OAAO;GACP,MAAM,OAAO,UAAU,EAAE;GACzB,UAAU;EACZ;CACF;CACA,OAAO,EAAE,MAAM;AACjB"}