@v-miniapp/ui-react 1.0.45 → 1.0.59

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 (255) hide show
  1. package/dist/components/app/app.d.ts +17 -0
  2. package/dist/components/app/bottom-tab-bar-layout/hook.d.ts +21 -0
  3. package/dist/components/app/bottom-tab-bar-layout/store.d.ts +13 -0
  4. package/dist/components/app/bottom-tab-bar-layout/type.d.ts +13 -0
  5. package/dist/components/app/data-theme.d.ts +8 -0
  6. package/dist/components/app/index.d.ts +9 -18
  7. package/dist/components/app/navigation-bar-layout/hook.d.ts +17 -0
  8. package/dist/components/app/navigation-bar-layout/store.d.ts +13 -0
  9. package/dist/components/app/navigation-bar-layout/type.d.ts +7 -0
  10. package/dist/components/app/page-layout/hook.d.ts +21 -0
  11. package/dist/components/app/page-layout/store.d.ts +13 -0
  12. package/dist/components/app/page-layout/type.d.ts +8 -0
  13. package/dist/components/app/type.d.ts +27 -0
  14. package/dist/components/calendar/default-render.d.ts +1 -1
  15. package/dist/components/calendar/utils.d.ts +1 -1
  16. package/dist/components/carousel/index.d.ts +1 -0
  17. package/dist/components/input-wrapper/input-wrapper.d.ts +2 -2
  18. package/dist/components/layout/page.d.ts +8 -1
  19. package/dist/external/index.js +11344 -7959
  20. package/dist/external/styles.css +1 -1
  21. package/dist/index.d.ts +4 -1
  22. package/dist/index.js +4194 -4376
  23. package/dist/styles.css +1 -1
  24. package/dist/utils/event-emitter.d.ts +4 -0
  25. package/dist-storybook/assets/App-Dp1UG-xp.js +93 -0
  26. package/dist-storybook/assets/{Color-AVL7NMMY-1_8XTICv.js → Color-AVL7NMMY-XA8cFKdV.js} +1 -1
  27. package/dist-storybook/assets/DEEPLINK-cjgFMuRJ.js +33 -0
  28. package/dist-storybook/assets/{DocsRenderer-PQXLIZUC-BO86igwd.js → DocsRenderer-PQXLIZUC-D10-0Yfb.js} +2 -2
  29. package/dist-storybook/assets/EVENTS-BY66PjI7.js +65 -0
  30. package/dist-storybook/assets/GETTING_STARTED-580o-9Mx.js +64 -0
  31. package/dist-storybook/assets/GETTING_STARTED-BiQMvjvo.js +62 -0
  32. package/dist-storybook/assets/GETTING_STARTED-CIVMqKZW.js +80 -0
  33. package/dist-storybook/assets/{INFINITE_SCROLL-BtM3uoX0.js → INFINITE_SCROLL-BbeR5HeP.js} +1 -1
  34. package/dist-storybook/assets/LocalesProvider-CMlmwAyY.js +53 -0
  35. package/dist-storybook/assets/MIGRATE_DARKMODE_TO_THEME-CBDyZyg2.js +107 -0
  36. package/dist-storybook/assets/{MIGRATION_GUIDE-2LONslE4.js → MIGRATION_GUIDE-FZyRWI-B.js} +3 -3
  37. package/dist-storybook/assets/OVERVIEW-C9_6gX5Q.js +51 -0
  38. package/dist-storybook/assets/Router-B5U8bubH.js +71 -0
  39. package/dist-storybook/assets/{TAILWIND_INTEGRATION-_T-VfvkM.js → TAILWIND_INTEGRATION-BJdy5DAv.js} +1 -1
  40. package/dist-storybook/assets/THEME-CRbvH7KT.js +103 -0
  41. package/dist-storybook/assets/_baseClone-DQVxEhny.js +1 -0
  42. package/dist-storybook/assets/alert-CKwsuaPI.js +1 -0
  43. package/dist-storybook/assets/{alert.stories-B-vuojPh.js → alert.stories-D0X5wUHk.js} +3 -3
  44. package/dist-storybook/assets/app-CTv8lFU3.js +1 -0
  45. package/dist-storybook/assets/avatar-rWcYGe6j.js +1 -0
  46. package/dist-storybook/assets/{avatar.stories-KYFztAc8.js → avatar.stories-8lrbhMma.js} +6 -6
  47. package/dist-storybook/assets/{axe-CmvD4WV5.js → axe-BHGdSCoA.js} +1 -1
  48. package/dist-storybook/assets/badge-VcjGVEum.js +1 -0
  49. package/dist-storybook/assets/{badge.stories-Be2ItCmQ.js → badge.stories-BEFNaUA1.js} +3 -3
  50. package/dist-storybook/assets/{blocks-BuaOUtiH.js → blocks-DKR3P4qW.js} +3 -3
  51. package/dist-storybook/assets/{bottom-tab-bar-CtcTAxuI.js → bottom-tab-bar-B6IAoRwz.js} +1 -1
  52. package/dist-storybook/assets/{bottom-tab-bar.stories-CDmEve6z.js → bottom-tab-bar.stories-DXzLlO5o.js} +3 -3
  53. package/dist-storybook/assets/button-DJH3RlJl.js +1 -0
  54. package/dist-storybook/assets/{button.stories-CaqLWQiY.js → button.stories-DgYDJ6x7.js} +3 -3
  55. package/dist-storybook/assets/calendar-C4Xe_TW2.js +1 -0
  56. package/dist-storybook/assets/{calendar.stories-DLWZldet.js → calendar.stories-IVvRAjWN.js} +3 -3
  57. package/dist-storybook/assets/carousel-DJlgMyS5.js +37 -0
  58. package/dist-storybook/assets/{carousel.stories-B8YbGOOr.js → carousel.stories-3rA3nxdL.js} +3 -3
  59. package/dist-storybook/assets/checkbox-JOxcmyCZ.js +1 -0
  60. package/dist-storybook/assets/{checkbox.stories-CLvfZPiw.js → checkbox.stories-ge3pgfBb.js} +3 -3
  61. package/dist-storybook/assets/chip-Crt60rph.js +1 -0
  62. package/dist-storybook/assets/{chip.stories-BbwJb5eD.js → chip.stories-D7E6fdiV.js} +3 -3
  63. package/dist-storybook/assets/{date-Cg-Uk_pp.js → date-B3PFMb6s.js} +1 -1
  64. package/dist-storybook/assets/date-field-range-B-sv9nbW.js +1 -0
  65. package/dist-storybook/assets/date-field.stories-B9G2heHt.js +129 -0
  66. package/dist-storybook/assets/date-picker-BPzKPdhO.js +1 -0
  67. package/dist-storybook/assets/{date-picker.stories-BuGWvzFL.js → date-picker.stories-CIFgk4q_.js} +3 -3
  68. package/dist-storybook/assets/dialog-BAfGQzk5.js +1 -0
  69. package/dist-storybook/assets/{dialog.stories-DJ0WsSkA.js → dialog.stories-vDMKz9Tw.js} +3 -3
  70. package/dist-storybook/assets/{chip-kG4p82WT.js → dropdown-Dtomaqpw.js} +2 -2
  71. package/dist-storybook/assets/{dropdown.stories-D6JUYP73.js → dropdown.stories-Cj0HM0VI.js} +3 -3
  72. package/dist-storybook/assets/{embla-carousel-react.esm-BYjpaHZ9.js → embla-carousel-react.esm-5D5fs7OQ.js} +1 -1
  73. package/dist-storybook/assets/icon-CdiFzFyf.js +1 -0
  74. package/dist-storybook/assets/{icon.stories-B-ZvRzFf.js → icon.stories-DWwbUUY-.js} +3 -3
  75. package/dist-storybook/assets/iframe-BHaCv4dM.css +1 -0
  76. package/dist-storybook/assets/{iframe-CQAwSt4E.js → iframe-DfPay7Zl.js} +42 -42
  77. package/dist-storybook/assets/image-CMKb-R3x.js +9 -0
  78. package/dist-storybook/assets/{image.stories-C4l8D3ju.js → image.stories-BhZU057W.js} +3 -3
  79. package/dist-storybook/assets/index-BWpuenI4.js +1 -0
  80. package/dist-storybook/assets/{index-CgMRTj-o.js → index-DqZh6B0b.js} +1 -1
  81. package/dist-storybook/assets/{index-BV0AJWP6.js → index-EGt7xBnA.js} +1 -1
  82. package/dist-storybook/assets/{index-DHiZ-gXR.js → index-cMNObl2z.js} +1 -1
  83. package/dist-storybook/assets/input-wrapper-CgaUwbbE.js +1 -0
  84. package/dist-storybook/assets/{label-DV2iCDmN.js → label-D44azUgi.js} +1 -1
  85. package/dist-storybook/assets/{label.stories-BwTIPFXX.js → label.stories-CXJjdYf_.js} +3 -3
  86. package/dist-storybook/assets/{navigation-bar-vI-FPasP.js → navigation-bar-DK3TxcTu.js} +2 -2
  87. package/dist-storybook/assets/{navigation-bar.stories-DYuFaJFD.js → navigation-bar.stories-CB3Kg-sH.js} +3 -3
  88. package/dist-storybook/assets/number-field-Bz7su9S1.js +1 -0
  89. package/dist-storybook/assets/{number-field.stories--fn26TJu.js → number-field.stories-DSxPSzLv.js} +3 -3
  90. package/dist-storybook/assets/omit-BWHsnDSR.js +1 -0
  91. package/dist-storybook/assets/option-item-CpeNcb5w.js +1 -0
  92. package/dist-storybook/assets/{option-item.stories-snjAvgay.js → option-item.stories-BvXoc8WX.js} +3 -3
  93. package/dist-storybook/assets/pagination-Cp-DHO4Q.js +1 -0
  94. package/dist-storybook/assets/{pagination.stories-BoEs0jzS.js → pagination.stories-_5qj2nTS.js} +4 -4
  95. package/dist-storybook/assets/proxy-B4G9nIBd.js +1 -0
  96. package/dist-storybook/assets/radio-D0aV0RIg.js +1 -0
  97. package/dist-storybook/assets/{radio.stories-DuN-Awi_.js → radio.stories-BNR-wwuw.js} +3 -3
  98. package/dist-storybook/assets/rating-D2e8RTGl.js +1 -0
  99. package/dist-storybook/assets/{rating.stories-BCcQjMEx.js → rating.stories-CI0LG0Qq.js} +3 -3
  100. package/dist-storybook/assets/{react-18-CNyWQ7je.js → react-18-C7pDmBBf.js} +1 -1
  101. package/dist-storybook/assets/{react-hufnxGVs.js → react-I9jCW2VV.js} +1 -1
  102. package/dist-storybook/assets/search-field-DINESW8Y.js +1 -0
  103. package/dist-storybook/assets/{search-field.stories-DiCZbhng.js → search-field.stories-CKXC6-Za.js} +3 -3
  104. package/dist-storybook/assets/section-content-D49PabBW.js +1 -0
  105. package/dist-storybook/assets/{section.stories-C2I_kKhu.js → section.stories-9vd48AgB.js} +3 -3
  106. package/dist-storybook/assets/sheet-footer-nEdxsYan.js +1 -0
  107. package/dist-storybook/assets/{sheet.stories-wk1JaKU5.js → sheet.stories-C3gLIQsn.js} +3 -3
  108. package/dist-storybook/assets/skeleton-B12XbNAJ.js +1 -0
  109. package/dist-storybook/assets/{skeleton.stories-BCmX-VNr.js → skeleton.stories-C0y1o1Y_.js} +3 -3
  110. package/dist-storybook/assets/{store-D2RudmNr.js → store-Ce3Ikv5g.js} +5 -5
  111. package/dist-storybook/assets/switch-D0Z9tWin.js +1 -0
  112. package/dist-storybook/assets/{switch.stories-BqPLNKB9.js → switch.stories-BdWFln-M.js} +3 -3
  113. package/dist-storybook/assets/{tab-bar-CSeCmtIZ.js → tab-bar-kExoGg5P.js} +1 -1
  114. package/dist-storybook/assets/{tab-bar.stories-Cb6v8H2w.js → tab-bar.stories-BgDXX0of.js} +3 -3
  115. package/dist-storybook/assets/text-area-GKy5HL12.js +1 -0
  116. package/dist-storybook/assets/{text-area.stories-By8bCfgc.js → text-area.stories-DCt3RB3A.js} +3 -3
  117. package/dist-storybook/assets/text-field-CGWNqitB.js +1 -0
  118. package/dist-storybook/assets/{text-field.stories-CrWBAhvI.js → text-field.stories-Bqv7f948.js} +3 -3
  119. package/dist-storybook/assets/toast-provider-DKSrfhJD.js +9 -0
  120. package/dist-storybook/assets/{toast.stories-iWAToAZA.js → toast.stories-CcFzS6QI.js} +1 -1
  121. package/dist-storybook/assets/tooltip-B9rDI6z9.js +1 -0
  122. package/dist-storybook/assets/{tooltip.stories-RC6SuPPD.js → tooltip.stories-DDdsuU3U.js} +3 -3
  123. package/dist-storybook/assets/typography-CB8hPDyK.js +1 -0
  124. package/dist-storybook/assets/{typography.stories-Bu8qFugR.js → typography.stories-BzCxaZQU.js} +3 -3
  125. package/dist-storybook/assets/{uploader.stories-B2wW9qVy.js → uploader.stories-izVumFqZ.js} +3 -3
  126. package/dist-storybook/assets/use-app-pause-ClsUnndr.js +21 -0
  127. package/dist-storybook/assets/use-app-resume-D_EcIvMd.js +21 -0
  128. package/dist-storybook/assets/use-bottom-tab-bar-BC1cz2uE.js +49 -0
  129. package/dist-storybook/assets/use-custom-icon-event-cUk4Md0Y.js +26 -0
  130. package/dist-storybook/assets/use-did-hide-BmABiaUE.js +30 -0
  131. package/dist-storybook/assets/use-did-show-CQuySkkT.js +30 -0
  132. package/dist-storybook/assets/use-histories-CBm09Lno.js +30 -0
  133. package/dist-storybook/assets/use-history-7yguNz6O.js +33 -0
  134. package/dist-storybook/assets/use-language-DPyWMce2.js +46 -0
  135. package/dist-storybook/assets/use-load-more-KlDJZhj2.js +42 -0
  136. package/dist-storybook/assets/use-location-C7kE1yla.js +39 -0
  137. package/dist-storybook/assets/use-navigate-BpIyvtwc.js +36 -0
  138. package/dist-storybook/assets/use-navigation-bar-guzwhM_u.js +42 -0
  139. package/dist-storybook/assets/use-navigation-type-DOndDqQH.js +27 -0
  140. package/dist-storybook/assets/use-page-layout-dO6ylI1b.js +37 -0
  141. package/dist-storybook/assets/use-page-scroll-CCG2d2Gb.js +42 -0
  142. package/dist-storybook/assets/use-pull-to-refresh-lhumDu1H.js +38 -0
  143. package/dist-storybook/assets/use-settings-changed-Bt58DJ-c.js +30 -0
  144. package/dist-storybook/assets/use-translate-Jhz6jTXo.js +59 -0
  145. package/dist-storybook/assets/{visibility-sensor-CwrzJO06.js → visibility-sensor-Jf-Nmil6.js} +1 -1
  146. package/dist-storybook/iframe.html +2 -2
  147. package/dist-storybook/index.json +1 -1
  148. package/dist-storybook/project.json +1 -1
  149. package/dist-storybook/sb-addons/a11y-2/manager-bundle.js +2 -2
  150. package/dist-storybook/sb-addons/docs-1/manager-bundle.js +2 -2
  151. package/dist-storybook/sb-addons/storybook-build-3/manager-bundle.js +1 -1
  152. package/dist-storybook/sb-addons/storybook-core-server-presets-0/common-manager-bundle.js +4 -4
  153. package/dist-storybook/stories-data.json +152 -122
  154. package/package.json +3 -1
  155. package/dist/components/app/components/app.d.ts +0 -13
  156. package/dist/components/app/components/link.d.ts +0 -8
  157. package/dist/components/app/components/navigation-analytic.d.ts +0 -2
  158. package/dist/components/app/components/pages-render.d.ts +0 -2
  159. package/dist/components/app/context/location-key.d.ts +0 -4
  160. package/dist/components/app/hooks/use-app-pause.d.ts +0 -1
  161. package/dist/components/app/hooks/use-app-resume.d.ts +0 -1
  162. package/dist/components/app/hooks/use-app-state.d.ts +0 -7
  163. package/dist/components/app/hooks/use-bottom-tab-bar.d.ts +0 -13
  164. package/dist/components/app/hooks/use-did-hide.d.ts +0 -1
  165. package/dist/components/app/hooks/use-did-show.d.ts +0 -1
  166. package/dist/components/app/hooks/use-history.d.ts +0 -2
  167. package/dist/components/app/hooks/use-location.d.ts +0 -1
  168. package/dist/components/app/hooks/use-navigate.d.ts +0 -1
  169. package/dist/components/app/hooks/use-navigation-bar.d.ts +0 -12
  170. package/dist/components/app/hooks/use-navigation-type.d.ts +0 -1
  171. package/dist/components/app/hooks/use-page-config.d.ts +0 -1
  172. package/dist/components/app/hooks/use-page-layout.d.ts +0 -14
  173. package/dist/components/app/hooks/use-page-scroll.d.ts +0 -5
  174. package/dist/components/app/hooks/use-page-state.d.ts +0 -6
  175. package/dist/components/app/stores/app.d.ts +0 -24
  176. package/dist/components/app/stores/app.selector.d.ts +0 -11
  177. package/dist/components/app/types/app.d.ts +0 -55
  178. package/dist/components/app/types/navigation.d.ts +0 -30
  179. package/dist/components/app/utils/animation.d.ts +0 -2
  180. package/dist/components/app/utils/data-theme.d.ts +0 -5
  181. package/dist/components/app/utils/history.d.ts +0 -7
  182. package/dist/hooks/use-analytic.d.ts +0 -1
  183. package/dist/hooks/use-is-using-app.d.ts +0 -1
  184. package/dist/hooks/use-is-using-locales.d.ts +0 -1
  185. package/dist/locales/defaultResources/en.d.ts +0 -27
  186. package/dist/locales/defaultResources/vi.d.ts +0 -27
  187. package/dist/locales/fns.d.ts +0 -6
  188. package/dist/locales/hooks.d.ts +0 -9
  189. package/dist/locales/index.d.ts +0 -4
  190. package/dist/locales/provider.d.ts +0 -6
  191. package/dist/locales/store.d.ts +0 -13
  192. package/dist/locales/types.d.ts +0 -37
  193. package/dist/locales/utils.d.ts +0 -2
  194. package/dist-storybook/assets/ANIMATION-CUdn1GTK.js +0 -99
  195. package/dist-storybook/assets/APP_FRAMEWORK-ljbIOHYd.js +0 -197
  196. package/dist-storybook/assets/BOTTOM_TAB_BAR-DxCwCfBK.js +0 -175
  197. package/dist-storybook/assets/CUSTOM_ERROR_BOUNDARY-B4wTQNZc.js +0 -250
  198. package/dist-storybook/assets/DARK_MODE-CoHseCDO.js +0 -57
  199. package/dist-storybook/assets/GETTING_STARTED-H_vVi5cv.js +0 -77
  200. package/dist-storybook/assets/KEEP_ALIVE-CL2au0al.js +0 -126
  201. package/dist-storybook/assets/LOCALE-XTCey55y.js +0 -465
  202. package/dist-storybook/assets/MOBILE_BEHAVIOURS-DZ6alKTX.js +0 -177
  203. package/dist-storybook/assets/PAGE_LAYOUT-BuOpN-1Y.js +0 -192
  204. package/dist-storybook/assets/ROUTING_NAVIGATION-BCPHXNto.js +0 -335
  205. package/dist-storybook/assets/_setToString-CbM921C9.js +0 -1
  206. package/dist-storybook/assets/alert-DLW8CoyB.js +0 -1
  207. package/dist-storybook/assets/avatar-GxcYPA1p.js +0 -1
  208. package/dist-storybook/assets/badge-D_LzMVtw.js +0 -1
  209. package/dist-storybook/assets/button-CL7GeC23.js +0 -1
  210. package/dist-storybook/assets/calendar-dOCsjhVU.js +0 -1
  211. package/dist-storybook/assets/carousel-1Kww3hIz.js +0 -37
  212. package/dist-storybook/assets/checkbox-MGytNNRt.js +0 -1
  213. package/dist-storybook/assets/classname-CUR_zgkh.js +0 -1
  214. package/dist-storybook/assets/date-field.stories-Diptwqfv.js +0 -129
  215. package/dist-storybook/assets/date-picker-Dnq_-0Md.js +0 -1
  216. package/dist-storybook/assets/icon-DdQsMyRa.js +0 -1
  217. package/dist-storybook/assets/iframe-yMKl6hJA.css +0 -1
  218. package/dist-storybook/assets/image-C3EsNRhz.js +0 -9
  219. package/dist-storybook/assets/input-wrapper-BKHgnPy6.js +0 -1
  220. package/dist-storybook/assets/number-field-CXKmnfKe.js +0 -1
  221. package/dist-storybook/assets/omit-Bsx5nTI0.js +0 -1
  222. package/dist-storybook/assets/option-item-LRh_OyV4.js +0 -1
  223. package/dist-storybook/assets/pagination-DZHoBs_4.js +0 -1
  224. package/dist-storybook/assets/pick-BhmhLmLe.js +0 -1
  225. package/dist-storybook/assets/radio-B5NJxG_l.js +0 -1
  226. package/dist-storybook/assets/rating-BdXViYBv.js +0 -1
  227. package/dist-storybook/assets/search-field-CQqgFbfg.js +0 -1
  228. package/dist-storybook/assets/section-content-DGNB4eLN.js +0 -1
  229. package/dist-storybook/assets/skeleton-C91JgehG.js +0 -1
  230. package/dist-storybook/assets/store-CPumdfcU.js +0 -1
  231. package/dist-storybook/assets/switch-p-aXI-ev.js +0 -1
  232. package/dist-storybook/assets/text-area-DwSXyqOe.js +0 -1
  233. package/dist-storybook/assets/text-field-jK6rpOo2.js +0 -1
  234. package/dist-storybook/assets/toast-provider-DurnMJhd.js +0 -9
  235. package/dist-storybook/assets/tooltip-QDdel5My.js +0 -1
  236. package/dist-storybook/assets/typography-DEpAJl_i.js +0 -1
  237. package/dist-storybook/assets/use-app-pause-B_tWHKJK.js +0 -29
  238. package/dist-storybook/assets/use-app-resume--900G-dV.js +0 -29
  239. package/dist-storybook/assets/use-custom-icon-event-3VExRzvC.js +0 -29
  240. package/dist-storybook/assets/use-did-hide-BUsL73ab.js +0 -48
  241. package/dist-storybook/assets/use-did-show-C1-VLDxi.js +0 -49
  242. package/dist-storybook/assets/use-histories-E4E2jJEY.js +0 -50
  243. package/dist-storybook/assets/use-history-o1im8IDj.js +0 -67
  244. package/dist-storybook/assets/use-location-CUEaBO4P.js +0 -56
  245. package/dist-storybook/assets/use-navigate-C4CTuFSZ.js +0 -84
  246. package/dist-storybook/assets/use-navigation-type-Dcz4hgKo.js +0 -44
  247. package/dist-storybook/assets/use-page-config-DSJBVQbq.js +0 -48
  248. package/dist-storybook/assets/use-page-scroll-dY-U1Vv4.js +0 -69
  249. package/dist-storybook/assets/use-page-state-CtNpwGPN.js +0 -79
  250. package/dist-storybook/assets/use-settings-changed-BBJwIHTE.js +0 -29
  251. /package/dist/components/app/{components/bottom-tab-bar.d.ts → bottom-tab-bar-layout/index.d.ts} +0 -0
  252. /package/dist/components/app/{components/navigation-bar.d.ts → navigation-bar-layout/index.d.ts} +0 -0
  253. /package/dist/components/app/{components/page-layout.d.ts → page-layout/index.d.ts} +0 -0
  254. /package/dist/{components/app/hooks → hooks}/use-custom-icon-event.d.ts +0 -0
  255. /package/dist/{components/app/hooks → hooks}/use-settings-changed.d.ts +0 -0
@@ -1,58 +1,4 @@
1
1
  [
2
- {
3
- "id": "app-framework-animation--docs",
4
- "title": "App Framework/Animation",
5
- "subtitle": "Cấu hình animation chuyển trang giữa các pages trong App Framework.",
6
- "content": "Animation Config cho phép cấu hình animation chuyển trang. Các loại animation bao gồm none, slide_up, slide_left và fade_in. Cấu trúc IAppAnimationState với type INavigationAnimationType."
7
- },
8
- {
9
- "id": "app-framework-bottom-tab-bar--docs",
10
- "title": "App Framework/Bottom Tab Bar",
11
- "subtitle": "Cấu hình bottom tab bar cho ứng dụng Mini App.",
12
- "content": "Bottom Tab Bar Config cho phép cấu hình bottom tab bar với các items, styling và behavior. IAppBottomTabBarState extends IBottomTabBarProps và thêm items với path và hidden property."
13
- },
14
- {
15
- "id": "app-framework-dark-mode--docs",
16
- "title": "App Framework/Dark Mode",
17
- "subtitle": "Cấu hình dark mode cho ứng dụng Mini App.",
18
- "content": "Dark Mode Config cho phép cấu hình dark mode mặc định cho ứng dụng. IDarkModeConfig có defaultEnabled để bật/tắt dark mode mặc định."
19
- },
20
- {
21
- "id": "app-framework-general--docs",
22
- "title": "App Framework/General",
23
- "subtitle": "App Framework là bộ khung để xây dựng Mini App hoàn chỉnh với routing, mobile behaviours và các tính năng native app.",
24
- "content": "App Framework cung cấp component App với nhiều tính năng global như Error Boundary, Toast Provider, Navigation Analytics và Multi-language. Có thể cấu hình với IAppConfig bao gồm animation, keepAlive, pages và các tính năng khác. Hỗ trợ pull-to-refresh, swipe navigation, page stacking với keep-alive."
25
- },
26
- {
27
- "id": "app-framework-keep-alive--docs",
28
- "title": "App Framework/Keep Alive",
29
- "subtitle": "Keep Alive cho phép giữ các pages trong DOM thay vì unmount khi navigate, giúp giữ state và scroll position.",
30
- "content": "Keep Alive cho phép giữ các pages trong DOM (ẩn) thay vì unmount khi navigate. IAppKeepAliveState có enable, maxStack, freeze và freezeDelay. Page-level có thể override bằng boolean hoặc config object với keepAlive, freeze và freezeDelay."
31
- },
32
- {
33
- "id": "app-framework-locale--docs",
34
- "title": "App Framework/Locale",
35
- "subtitle": "Locales module cung cấp giải pháp quản lý đa ngôn ngữ với TypeScript type safety và hỗ trợ custom locales keys.",
36
- "content": "Locales Module cung cấp quản lý đa ngôn ngữ với TypeScript type safety. Hỗ trợ custom locales keys và custom language codes thông qua module augmentation. Có sẵn tiếng Việt và tiếng Anh. Hỗ trợ hooks useTranslate, useLanguage và standalone functions. Tự động lấy ngôn ngữ từ URL search params."
37
- },
38
- {
39
- "id": "app-framework-mobile-behaviours--docs",
40
- "title": "App Framework/Mobile Behaviours",
41
- "subtitle": "Component App đã tích hợp sẵn nhiều behaviours giống native app để mang lại trải nghiệm mobile tự nhiên.",
42
- "content": "Mobile Behaviours bao gồm Swipe Navigation, Pull to Refresh, Keep Alive, Scroll Restoration, Page Stacking và Animation. Swipe navigation cho phép swipe từ cạnh màn hình để navigate. Pull to Refresh kéo xuống để refresh page. Keep Alive giữ state và scroll position. Scroll Restoration tự động khôi phục scroll position khi navigate back."
43
- },
44
- {
45
- "id": "app-framework-page-layout--docs",
46
- "title": "App Framework/Page Layout",
47
- "subtitle": "Cấu hình page layout cho các pages trong ứng dụng Mini App.",
48
- "content": "Page Layout Config cho phép cấu hình layout cho pages với các thuộc tính như spacing, safe area offsets, pull-to-refresh, và scroll restoration. IAppPageLayoutState extends IPageBaseProps và thêm hidden và scrollRestoration."
49
- },
50
- {
51
- "id": "app-framework-routing-navigation--docs",
52
- "title": "App Framework/Routing & Navigation",
53
- "subtitle": "Hệ thống routing và navigation cung cấp các hooks và utilities để quản lý navigation và lifecycle events.",
54
- "content": "Routing & Navigation sử dụng exact path matching. Navigation được thực hiện qua function navigate từ hook useNavigate. Có thể navigate bằng pathname hoặc delta. Các hooks bao gồm useNavigate, useLocation, useHistory, useHistories, usePageState, usePageConfig, usePageScroll, useNavigationType, useDidShow, useDidHide, useAppPause, useAppResume, useCustomIconEvent và useSettingsChanged."
55
- },
56
2
  {
57
3
  "id": "components-alert--docs",
58
4
  "title": "Components/Alert",
@@ -258,106 +204,184 @@
258
204
  "content": "Component Uploader là component upload file. Có thể được tùy chỉnh với các props value, onChange, limit, disabled, showPreview, includeBase64 và className. Thuộc tính Tên thuộc tính Kiểu dữ liệu Bắt buộc Mô tả \\ API Properties: value: IFileUpload[] - Danh sách các file đã upload. onChange: (files: IFileUpload[]) => void - Callback khi danh sách file thay đổi. limit: number - Số lượng file tối đa. disabled: boolean - Trạng thái disabled. showPreview: boolean - Hiển thị preview. includeBase64: boolean - Bao gồm base64. className: string - Class name tùy chỉnh."
259
205
  },
260
206
  {
261
- "id": "getting-started--docs",
262
- "title": "Getting Started",
263
- "subtitle": "Hướng dẫn bắt đầu sử dụng @v-miniapp/ui-react để phát triển V-MiniApp.",
264
- "content": "Getting Started với @v-miniapp/ui-react. Hướng dẫn cài đặt, import styles, ví dụ bắt đầu sử dụng. Thư viện cung cấp đầy đủ các component UI, routing, theme management và các tính năng native app như pull-to-refresh, swipe navigation, page stacking với keep-alive. thể tích hợp với Tailwind CSS hoặc sử dụng CSS chuẩn."
207
+ "id": "locale-components-localesprovider--docs",
208
+ "title": "Locale/LocalesProvider",
209
+ "subtitle": "Component provider khởi tạo Locale module, cung cấp resources context cho toàn bộ cây component.",
210
+ "content": "LocalesProvider nhận config (ILocalesConfig)children. Chỉ init một lần khi mount. Đặt top-level. Khi dùng App thì không cần dùng trực tiếp."
265
211
  },
266
212
  {
267
- "id": "hooks-useapppause--docs",
268
- "title": "Hooks/useAppPause",
269
- "subtitle": "Hook để xử khi app bị pause (background).",
270
- "content": "useAppPause hook xử khi app bị pause. Nhận callback function được gọi khi app pause. thể sử dụng để pause timers, animations hoặc các tác vụ đang chạy khi app vào background."
213
+ "id": "locale-getting-started--docs",
214
+ "title": "Locale/Getting Started",
215
+ "subtitle": "Hướng dẫn bắt đầu sử dụng Locale module cho đa ngôn ngữ với TypeScript type safety.",
216
+ "content": "Cài đặt khởi tạo Locale với LocalesProvider. Thứ tự ưu tiên ngôn ngữ, text mặc định cho component, mở rộng custom languages/keys qua module augmentation."
271
217
  },
272
218
  {
273
- "id": "hooks-useappresume--docs",
274
- "title": "Hooks/useAppResume",
275
- "subtitle": "Hook để xử khi app được resume (foreground).",
276
- "content": "useAppResume hook xử khi app được resume. Nhận callback function được gọi khi app resume. thể sử dụng để resume timers, animations hoặc các tác vụ khi app quay lại foreground."
219
+ "id": "locale-hooks-uselanguage--docs",
220
+ "title": "Locale/useLanguage",
221
+ "subtitle": "Hook trả về ngôn ngữ hiện tại, ngôn ngữ system và function setLanguage.",
222
+ "content": "useLanguage() trả về { language, systemLanguage, setLanguage }. reactivity. Dùng để hiển thị/đổi ngôn ngữ trong component."
277
223
  },
278
224
  {
279
- "id": "hooks-usecustomiconevent--docs",
280
- "title": "Hooks/useCustomIconEvent",
281
- "subtitle": "Hook để xử custom icon event từ navigation bar.",
282
- "content": "useCustomIconEvent hook xử custom icon event từ navigation bar. Nhận callback function được gọi khi custom icon được click. thể sử dụng để xử các action tùy chỉnh từ navigation bar."
225
+ "id": "locale-hooks-usetranslate--docs",
226
+ "title": "Locale/useTranslate",
227
+ "subtitle": "Hook trả về function translate với reactivity khi đổi ngôn ngữ.",
228
+ "content": "useTranslate() trả về function (key, params?, lang?) => string. reactivity: component re-render khi ngôn ngữ thay đổi. Nên dùng trong React component thay cho t() để UI cập nhật đúng."
283
229
  },
284
230
  {
285
- "id": "hooks-usedidhide--docs",
286
- "title": "Hooks/useDidHide",
287
- "subtitle": "Hook để xử khi page bị ẩn (hide).",
288
- "content": "useDidHide hook xử khi page bị ẩn. Nhận callback function được gọi khi page hide. thể sử dụng để pause animations, timers hoặc các tác vụ khi page không còn hiển thị."
231
+ "id": "migration-guide--docs",
232
+ "title": "UI React/Migration Guide",
233
+ "subtitle": "Hướng dẫn migrate từ @vsf-miniapp/ui-react sang @v-miniapp/ui-react với nhiều tính năng và cải tiến hơn.",
234
+ "content": "Migration Guide từ @vsf-miniapp/ui-react sang @v-miniapp/ui-react. Phiên bản mới App Framework hoàn chỉnh, Mobile Behaviours, Multi-language với TypeScript type safety, nhiều component mới tính năng nâng cao như Animation, Error Boundary, Toast Provider, Analytics."
289
235
  },
290
236
  {
291
- "id": "hooks-usedidshow--docs",
292
- "title": "Hooks/useDidShow",
293
- "subtitle": "Hook để xử khi page được hiển thị (show).",
294
- "content": "useDidShow hook xử khi page được hiển thị. Nhận callback function được gọi khi page show. thể sử dụng để resume animations, timers hoặc các tác vụ khi page được hiển thị."
237
+ "id": "overview--docs",
238
+ "title": "Overview",
239
+ "subtitle": "Tổng quan bộ thư viện @v-miniapp/* ba thư viện chính: ui-react, router, locale.",
240
+ "content": "Giới thiệu ecosystem @v-miniapp/* dùng để phát triển V-MiniApp với React. Ba thư viện chính: @v-miniapp/ui-react (UI + App Framework), @v-miniapp/router (routing), @v-miniapp/locale (đa ngôn ngữ)."
295
241
  },
296
242
  {
297
- "id": "hooks-usehistories--docs",
298
- "title": "Hooks/useHistories",
299
- "subtitle": "Hook để lấy toàn bộ history stack.",
300
- "content": "useHistories hook trả về mảng các history entries trong navigation stack. Mỗi history entry có action, location với key, pathname, params, state và timestamp. Có thể sử dụng để hiển thị breadcrumb hoặc navigation history."
243
+ "id": "router-deeplink--docs",
244
+ "title": "Router/Deeplink",
245
+ "subtitle": "Định dạng Deeplink và Universal link để mở V-MiniApp tới pathname và params cụ thể.",
246
+ "content": "Deeplink: vapp://mini/{appid}/{pathname}?{params}. Universal link: https://v-app.vn/mini/{appid}/{pathname}?{params}."
301
247
  },
302
248
  {
303
- "id": "hooks-usehistory--docs",
304
- "title": "Hooks/useHistory",
305
- "subtitle": "Hook để lấy history entry hiện tại của page.",
306
- "content": "useHistory hook trả về history entry hiện tại với action PUSH, REPLACE hoặc POP, location object chứa key, pathname, params và state, cùng với timestamp. thể sử dụng để truy cập thông tin navigation hiện tại."
249
+ "id": "router-events--docs",
250
+ "title": "Router/Events",
251
+ "subtitle": "routerEvents: EventEmitter để lắng nghe before/after history change, before/after navigate afterInit.",
252
+ "content": "routerEvents.on(event, handler) trả về hàm unsubscribe. Các event: beforeHistoryChange, beforeHistoryChangeP2, afterHistoryChange, afterHistoryChangeP2, beforeNavigate, afterNavigate, afterInit. Payload chứa history, histories, nextHistory/prevHistory, nextHistories/prevHistories. Hỗ trợ CustomEvent trên window."
307
253
  },
308
254
  {
309
- "id": "hooks-uselocation--docs",
310
- "title": "Hooks/useLocation",
311
- "subtitle": "Hook để lấy location object hiện tại (pathname, params, state, key).",
312
- "content": "useLocation hook trả về location object hiện tại với key, pathname, params và state. thể sử dụng để truy cập pathname, query parameters state được truyền qua navigation. Location object được cập nhật khi navigate."
255
+ "id": "router-getting-started--docs",
256
+ "title": "Router/Getting Started",
257
+ "subtitle": "Hướng dẫn bắt đầu sử dụng @v-miniapp/router cho routing navigation trong V-MiniApp.",
258
+ "content": "Cài đặt, import styles, cấu hình IRouterConfig với pages, animation, keepAlive. dụ Router componentđiều hướng bản."
313
259
  },
314
260
  {
315
- "id": "hooks-usenavigate--docs",
316
- "title": "Hooks/useNavigate",
317
- "subtitle": "Hook để lấy function navigate để điều hướng giữa các pages.",
318
- "content": "useNavigate hook trả về function navigate với type INavigate. thể navigate bằng pathname với options INavigatePathnameOptions hoặc bằng delta với options INavigateDeltaOptions. INavigatePathnameOptions replace state. INavigateDeltaOptions có replace."
261
+ "id": "router-hooks-useapppause--docs",
262
+ "title": "Router/useAppPause",
263
+ "subtitle": "Hook lắng nghe sự kiện onAppPause (app vào nền).",
264
+ "content": "useAppPause(onPause) đăng listener cho window event 'onAppPause'. Gọi onPause khi app bị pause (ví dụ chuyển tab, thu nhỏ). Dùng cho mini app / native bridge."
319
265
  },
320
266
  {
321
- "id": "hooks-usenavigationtype--docs",
322
- "title": "Hooks/useNavigationType",
323
- "subtitle": "Hook để lấy navigation action type (PUSH, REPLACE, POP).",
324
- "content": "useNavigationType hook trả về navigation action type là PUSH, REPLACE hoặc POP. thể sử dụng để xác định cách page được navigate đến, ví dụ để xử lý khác nhau giữa push và replace navigation."
267
+ "id": "router-hooks-useappresume--docs",
268
+ "title": "Router/useAppResume",
269
+ "subtitle": "Hook lắng nghe sự kiện onAppResume (app quay lại foreground).",
270
+ "content": "useAppResume(onResume) đăng listener cho window event 'onAppResume'. Gọi onResume khi app resume. Dùng cho mini app / native bridge."
325
271
  },
326
272
  {
327
- "id": "hooks-usepageconfig--docs",
328
- "title": "Hooks/usePageConfig",
329
- "subtitle": "Hook để lấy config của page hiện tại.",
330
- "content": "usePageConfig hook trả về IPageConfig của page hiện tại. IPageConfig chứa các cấu hình như pathname, Component, navigationBar, layouts và các config khác. thể sử dụng để truy cập cấu hình page hiện tại."
273
+ "id": "router-hooks-usedidhide--docs",
274
+ "title": "Router/useDidHide",
275
+ "subtitle": "Hook gọi callback khi page bị ẩn (hide) và trả về trạng thái didHide.",
276
+ "content": "useDidHide(func?) gọi func khi page hide (beforeHistoryChange khi nextHistory khác location key). Trả về boolean didHide. Dùng để dọn dẹp, pause khi rời page."
331
277
  },
332
278
  {
333
- "id": "hooks-usepagescroll--docs",
334
- "title": "Hooks/usePageScroll",
335
- "subtitle": "Hook để lắng nghe sự kiện scroll của page.",
336
- "content": "usePageScroll hook lắng nghe sự kiện scroll của page. Nhận callback function và options cho throttle. Callback nhận target HTMLDivElement và event. thể sử dụng để xử scroll events với throttle để tối ưu performance."
279
+ "id": "router-hooks-usedidshow--docs",
280
+ "title": "Router/useDidShow",
281
+ "subtitle": "Hook gọi callback khi page được hiển thị (show) và trả về trạng thái didShow.",
282
+ "content": "useDidShow(func?) gọi func khi page show (sau beforeHistoryChangeP2 khi nextHistory trùng location key). Trả về boolean didShow. Dùng để fetch data, analytics khi vào page."
337
283
  },
338
284
  {
339
- "id": "hooks-usepagestate--docs",
340
- "title": "Hooks/usePageState",
341
- "subtitle": "Hook để quản state của page hiện tại.",
342
- "content": "usePageState hook trả về pageState IPageState setPageState function. IPageState chứa các state như keepAlive, freeze, freezeDelay. Có thể sử dụng để quản và cập nhật state của page hiện tại."
285
+ "id": "router-hooks-usehistories--docs",
286
+ "title": "Router/useHistories",
287
+ "subtitle": "Hook trả về toàn bộ history stack (mảng IHistory).",
288
+ "content": "useHistories() trả về IHistory[]. Dùng để biết số lượng page trong stack, thể back hay không, hoặc render breadcrumb."
343
289
  },
344
290
  {
345
- "id": "hooks-usesettingschanged--docs",
346
- "title": "Hooks/useSettingsChanged",
347
- "subtitle": "Hook để xử khi settings của app thay đổi.",
348
- "content": "useSettingsChanged hook xử khi settings của app thay đổi. Nhận callback function được gọi khi settings thay đổi. thể sử dụng để phản ứng với các thay đổi settings như theme, language hoặc các cài đặt khác."
291
+ "id": "router-hooks-usehistory--docs",
292
+ "title": "Router/useHistory",
293
+ "subtitle": "Hook trả về history entry hiện tại (action + location).",
294
+ "content": "useHistory() trả về IHistory: action (PUSH | REPLACE | POP) location. Phụ thuộc LocationKeyContext nên trả về entry tương ứng với page/component đang render."
349
295
  },
350
296
  {
351
- "id": "migration-guide--docs",
352
- "title": "Migration Guide",
353
- "subtitle": "Hướng dẫn migrate từ @vsf-miniapp/ui-react sang @v-miniapp/ui-react với nhiều tính năng và cải tiến hơn.",
354
- "content": "Migration Guide từ @vsf-miniapp/ui-react sang @v-miniapp/ui-react. Phiên bản mới App Framework hoàn chỉnh, Mobile Behaviours, Multi-language với TypeScript type safety, nhiều component mới và tính năng nâng cao như Animation, Error Boundary, Toast Provider, Analytics."
297
+ "id": "router-hooks-uselocation--docs",
298
+ "title": "Router/useLocation",
299
+ "subtitle": "Hook trả về location hiện tại (pathname, params, state, key).",
300
+ "content": "useLocation() trả về ILocation | undefined. Dựa trên useHistory(); location tương ứng với history entry của page/context hiện tại."
301
+ },
302
+ {
303
+ "id": "router-hooks-usenavigate--docs",
304
+ "title": "Router/useNavigate",
305
+ "subtitle": "Hook trả về function navigate để điều hướng bằng pathname hoặc delta.",
306
+ "content": "useNavigate() trả về INavigate: navigate(pathname, options?) hoặc navigate(delta, options?). Options gồm replace, params, state và IRouterPageState."
355
307
  },
356
308
  {
357
- "id": "use-cases-custom-error-boundary--docs",
358
- "title": "Use Cases/Custom Error Boundary",
359
- "subtitle": "Hướng dẫn thêm ErrorBoundary riêng cho từng page để bắt lỗi trước và xử lý chi tiết hơn.",
360
- "content": "Custom Error Boundary cho phép thêm ErrorBoundary riêng cho từng page thông qua Layouts trong IPageConfig. ErrorBoundary ở page-level sẽ bắt lỗi trước ErrorBoundary global, cho phép xử lý chi tiết và isolate errors. App component đã có ErrorBoundary global sẵn để catch tất cả lỗi không được handle."
309
+ "id": "router-hooks-usenavigationtype--docs",
310
+ "title": "Router/useNavigationType",
311
+ "subtitle": "Hook trả về action type của history hiện tại (PUSH, REPLACE, POP).",
312
+ "content": "useNavigationType() trả về IHistoryAction. Bằng useHistory().action. Dùng để biết user vào page bằng push, replace hay back/forward."
313
+ },
314
+ {
315
+ "id": "router-router--docs",
316
+ "title": "Router/Router",
317
+ "subtitle": "Component Router: props, IRouterConfig, IRouterPageConfig, animation, keepAlive, ErrorPage, NotFoundPage.",
318
+ "content": "Router nhận config (IRouterConfig hoặc function trả về config). Hỗ trợ animation (type, mode), keepAlive, Layouts, ErrorPage, NotFoundPage. Config chỉ được đọc lần đầu khi mount."
319
+ },
320
+ {
321
+ "id": "ui-react-app--docs",
322
+ "title": "UI React/App",
323
+ "subtitle": "Component App: props, IAppConfig, IPageConfig. Tích hợp Router, Locale, ErrorBoundary, Toast, NavigationBar, BottomTabBar.",
324
+ "content": "App nhận config, localesConfig, className. IAppConfig gồm pages, animation, navigationBar, bottomTabBar, keepAlive, pageLayout, theme. IPageConfig mở rộng từ router với navigationBar, bottomTabBar, pageLayout. App-level áp dụng mặc định, page-level override."
325
+ },
326
+ {
327
+ "id": "ui-react-getting-started--docs",
328
+ "title": "UI React/Getting Started",
329
+ "subtitle": "Hướng dẫn bắt đầu sử dụng @v-miniapp/ui-react để phát triển V-MiniApp.",
330
+ "content": "Cài đặt, import styles (CSS hoặc Tailwind), ví dụ App với IAppConfig. Thư viện tích hợp Router, Locale, UI components, theme, pull-to-refresh, swipe navigation, keep-alive."
331
+ },
332
+ {
333
+ "id": "ui-react-theme--docs",
334
+ "title": "UI React/Theme",
335
+ "subtitle": "Hướng dẫn sử dụng theme (light/dark/system) trong @v-miniapp/ui-react.",
336
+ "content": "Theme hỗ trợ 3 chế độ: light, dark, system. Cấu hình qua IAppConfig.theme.mode. Các hàm: getDataTheme, setDataTheme, toggleDataTheme. Theme được áp dụng qua data-theme attribute trên documentElement."
337
+ },
338
+ {
339
+ "id": "ui-react-usebottomtabbar--docs",
340
+ "title": "UI React/useBottomTabBar",
341
+ "subtitle": "Hook đọc và cập nhật state bottom tab bar (app-level và page-level).",
342
+ "content": "useBottomTabBar() trả về state (merged), pageState, appState, hidden và các setter: setPageBottomTabBar, setAppBottomTabBar, remove*, reset*. hidden true khi bar ẩn hoặc page không có bottomTabBarId/items."
343
+ },
344
+ {
345
+ "id": "ui-react-usecustomiconevent--docs",
346
+ "title": "UI React/useCustomIconEvent",
347
+ "subtitle": "Hook xử lý khi user bấm custom icon trên navigation bar.",
348
+ "content": "useCustomIconEvent(onCustomIconEvent). Callback nhận index của icon được bấm. Dùng khi navigationBar có custom icons."
349
+ },
350
+ {
351
+ "id": "ui-react-useloadmore--docs",
352
+ "title": "UI React/useLoadMore",
353
+ "subtitle": "Hook đăng ký handler load more (onEndReached) cho page hiện tại.",
354
+ "content": "useLoadMore(onEndReached) gọi setPagePageLayout với onEndReached. Khi scroll tới cuối (hoặc trigger tương đương), onEndReached được gọi. Chỉ áp dụng cho page hiện tại."
355
+ },
356
+ {
357
+ "id": "ui-react-usenavigationbar--docs",
358
+ "title": "UI React/useNavigationBar",
359
+ "subtitle": "Hook đọc và cập nhật state navigation bar (app-level và page-level).",
360
+ "content": "useNavigationBar() trả về state (merged), pageState, appState và các setter: setPageNavigationBar, setAppNavigationBar, removePageNavigationBar, removeAppNavigationBar, resetPageNavigationBar, resetAppNavigationBar."
361
+ },
362
+ {
363
+ "id": "ui-react-usepagelayout--docs",
364
+ "title": "UI React/usePageLayout",
365
+ "subtitle": "Hook đọc và cập nhật state page layout (app-level và page-level).",
366
+ "content": "usePageLayout() trả về state (merged), pageState, appState và các setter: setPagePageLayout, setAppPageLayout, remove/removeApp, resetPagePageLayout, resetAppPageLayout. State gồm scrollRestoration, pullToRefresh, onEndReached, contentClassName, hidden."
367
+ },
368
+ {
369
+ "id": "ui-react-usepagescroll--docs",
370
+ "title": "UI React/usePageScroll",
371
+ "subtitle": "Hook lắng nghe sự kiện scroll của page.",
372
+ "content": "usePageScroll(callback, options?) với throttle. Callback nhận target (HTMLDivElement) và event. Chỉ hoạt động khi page đang hiển thị."
373
+ },
374
+ {
375
+ "id": "ui-react-usepulltorefresh--docs",
376
+ "title": "UI React/usePullToRefresh",
377
+ "subtitle": "Hook đăng ký handler pull-to-refresh cho page hiện tại.",
378
+ "content": "usePullToRefresh(onRefresh) gọi setPagePageLayout với pullToRefresh.onRefresh. onRefresh có thể sync hoặc async. Chỉ áp dụng cho page hiện tại."
379
+ },
380
+ {
381
+ "id": "ui-react-usesettingschanged--docs",
382
+ "title": "UI React/useSettingsChanged",
383
+ "subtitle": "Hook lắng nghe khi settings của app thay đổi.",
384
+ "content": "useSettingsChanged(onSettingsChanged). Callback nhận object settings. Dùng để phản ứng với thay đổi theme, language hoặc cài đặt khác từ native/môi trường."
361
385
  },
362
386
  {
363
387
  "id": "use-cases-infinite-scroll--docs",
@@ -365,6 +389,12 @@
365
389
  "subtitle": "Hướng dẫn implement infinite scroll để tự động load thêm data khi user scroll đến cuối danh sách.",
366
390
  "content": "Infinite Scroll cho phép tự động load thêm data khi user scroll đến cuối danh sách. Có thể sử dụng hook useLoadMore để quản lý loading state, hasMore state và loadMore function. Hook này tự động phát hiện khi scroll đến cuối và gọi loadMore function."
367
391
  },
392
+ {
393
+ "id": "use-cases-migrate-darkmode-to-theme--docs",
394
+ "title": "Use Cases/Migrate darkMode to theme",
395
+ "subtitle": "Hướng dẫn migrate từ deprecated darkMode sang theme.mode mới trong @v-miniapp/ui-react.",
396
+ "content": "darkMode đã được deprecated và sẽ bị xóa trong tương lai. Cần migrate sang theme.mode với các giá trị: 'light', 'dark', hoặc 'system'. Mapping: darkMode.defaultEnabled: true → theme.mode: 'dark', darkMode.defaultEnabled: false → theme.mode: 'light'."
397
+ },
368
398
  {
369
399
  "id": "use-cases-tailwind-integration--docs",
370
400
  "title": "Use Cases/Tailwind Integration",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@v-miniapp/ui-react",
3
- "version": "1.0.45",
3
+ "version": "1.0.59",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist",
@@ -19,6 +19,8 @@
19
19
  "dependencies": {
20
20
  "@types/lodash": "^4.17.23",
21
21
  "@use-gesture/react": "^10.3.1",
22
+ "@v-miniapp/locale": "1.0.2",
23
+ "@v-miniapp/router": "1.0.5",
22
24
  "ahooks": "^3.9.6",
23
25
  "classnames": "^2.5.1",
24
26
  "dayjs": "^1.11.19",
@@ -1,13 +0,0 @@
1
- import { ComponentPropsWithRef, ReactNode } from 'react';
2
- import { IAppConfig } from '../types/app';
3
- import { ILocalesConfig, IResourceKey, ITemplateParams } from '../../../locales/types';
4
- export type IAppConfigContext = {
5
- t: (key: IResourceKey, params?: ITemplateParams) => ReactNode;
6
- };
7
- export type IAppConfigFunction = (context: IAppConfigContext) => IAppConfig;
8
- export type IAppProps = ComponentPropsWithRef<'div'> & {
9
- config: IAppConfig | IAppConfigFunction;
10
- localesConfig?: ILocalesConfig;
11
- };
12
- export declare const AppInner: ({ config: configProp }: IAppProps) => import("react/jsx-runtime").JSX.Element;
13
- export declare const App: ({ className, config, localesConfig, ...props }: IAppProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,8 +0,0 @@
1
- import { ComponentProps, FC } from 'react';
2
- import { INavigatePathnameOptions, INavigateDeltaOptions } from '../types/navigation';
3
- export type ILinkProps = Omit<ComponentProps<'a'>, 'href' | 'onClick'> & (({
4
- to: number;
5
- } & INavigateDeltaOptions) | ({
6
- to: string;
7
- } & INavigatePathnameOptions));
8
- export declare const Link: FC<ILinkProps>;
@@ -1,2 +0,0 @@
1
- import { FC, PropsWithChildren } from 'react';
2
- export declare const NavigationAnalytic: FC<PropsWithChildren>;
@@ -1,2 +0,0 @@
1
- import { FC } from 'react';
2
- export declare const PagesRender: FC;
@@ -1,4 +0,0 @@
1
- export type ILocationKeyState = {
2
- locationKey: string | null;
3
- };
4
- export declare const LocationKeyContext: import('react').Context<ILocationKeyState>;
@@ -1 +0,0 @@
1
- export declare const useAppPause: (onPause: () => void) => void;
@@ -1 +0,0 @@
1
- export declare const useAppResume: (onResume: () => void) => void;
@@ -1,7 +0,0 @@
1
- import { Dispatch, SetStateAction } from 'react';
2
- import { IAppState } from '../types/app';
3
- export declare const useAppState: () => {
4
- config: import('..').IAppConfig;
5
- appState: IAppState;
6
- setAppState: Dispatch<SetStateAction<IAppState>>;
7
- };
@@ -1,13 +0,0 @@
1
- import { IAppBottomTabBarState } from '../types/app';
2
- export declare const useBottomTabBar: () => {
3
- state: IAppBottomTabBarState;
4
- pageState: IAppBottomTabBarState | undefined;
5
- appState: IAppBottomTabBarState | undefined;
6
- hidden: boolean;
7
- setPageBottomTabBar: (bottomTabBar: Partial<IAppBottomTabBarState>) => void;
8
- setAppBottomTabBar: (bottomTabBar: Partial<IAppBottomTabBarState>) => void;
9
- removePageBottomTabBar: () => void;
10
- removeAppBottomTabBar: () => void;
11
- resetPageBottomTabBar: () => void;
12
- resetAppBottomTabBar: () => void;
13
- };
@@ -1 +0,0 @@
1
- export declare const useDidHide: (func?: () => void) => boolean;
@@ -1 +0,0 @@
1
- export declare const useDidShow: (func?: () => void) => boolean;
@@ -1,2 +0,0 @@
1
- export declare const useHistory: () => import('..').IHistory;
2
- export declare const useHistories: () => import('..').IHistory[];
@@ -1 +0,0 @@
1
- export declare const useLocation: () => import('..').ILocation;
@@ -1 +0,0 @@
1
- export declare const useNavigate: () => import('..').INavigate;
@@ -1,12 +0,0 @@
1
- import { IAppNavigationBarState } from '../types/app';
2
- export declare const useNavigationBar: () => {
3
- state: IAppNavigationBarState;
4
- pageState: IAppNavigationBarState | undefined;
5
- appState: IAppNavigationBarState | undefined;
6
- setPageNavigationBar: (navigationBar: Partial<IAppNavigationBarState>) => void;
7
- setAppNavigationBar: (navigationBar: Partial<IAppNavigationBarState>) => void;
8
- removePageNavigationBar: () => void;
9
- removeAppNavigationBar: () => void;
10
- resetPageNavigationBar: () => void;
11
- resetAppNavigationBar: () => void;
12
- };
@@ -1 +0,0 @@
1
- export declare const useNavigationType: () => import('..').IHistoryAction;
@@ -1 +0,0 @@
1
- export declare const usePageConfig: () => import('..').IPageConfig | undefined;
@@ -1,14 +0,0 @@
1
- import { IAppPageLayoutState } from '../types/app';
2
- export declare const usePageLayout: () => {
3
- state: IAppPageLayoutState;
4
- pageState: IAppPageLayoutState | undefined;
5
- appState: IAppPageLayoutState | undefined;
6
- setPagePagelayout: (pageLayoutState: Partial<IAppPageLayoutState>) => void;
7
- setAppPageLayout: (pageLayoutState: Partial<IAppPageLayoutState>) => void;
8
- removePagePagelayout: () => void;
9
- removeAppPageLayout: () => void;
10
- resetPagePagelayout: () => void;
11
- resetAppPageLayout: () => void;
12
- };
13
- export declare const usePullToRefresh: (onRefresh: () => Promise<unknown> | unknown) => void;
14
- export declare const useLoadMore: (onEndReached: () => void) => void;
@@ -1,5 +0,0 @@
1
- import { ThrottleOptions } from 'ahooks/lib/useThrottle/throttleOptions';
2
- export type IUsePageScrollOptions = {
3
- throttle?: ThrottleOptions;
4
- };
5
- export declare const usePageScroll: (callback: (target: HTMLDivElement, event: Event) => void, options?: IUsePageScrollOptions) => void;
@@ -1,6 +0,0 @@
1
- import { Dispatch, SetStateAction } from 'react';
2
- import { IPageState } from '../types/app';
3
- export declare const usePageState: () => {
4
- pageState: IPageState | undefined;
5
- setPageState: Dispatch<SetStateAction<IPageState | undefined>>;
6
- };
@@ -1,24 +0,0 @@
1
- import { IAppConfig, IAppState, IPageState } from '../types/app';
2
- import { IHistory, INavigate } from '../types/navigation';
3
- import { EventEmitter } from '../../../utils/event-emitter';
4
- export type IAppStoreState = {
5
- config: IAppConfig;
6
- initialized: boolean;
7
- appState: IAppState;
8
- pageStates: Partial<Record<string, IPageState>>;
9
- histories: IHistory[];
10
- init: (config: IAppConfig) => void;
11
- navigate: INavigate;
12
- };
13
- type IBeforeLocationChangeData = {
14
- history: IHistory;
15
- histories: IHistory[];
16
- nextHistory: IHistory;
17
- nextHistories: IHistory[];
18
- };
19
- export declare const navigationEventEmitter: EventEmitter<{
20
- beforeLocationChangeP1: IBeforeLocationChangeData;
21
- beforeLocationChangeP2: IBeforeLocationChangeData;
22
- }>;
23
- export declare const useAppStore: import('zustand').UseBoundStore<import('zustand').StoreApi<IAppStoreState>>;
24
- export {};
@@ -1,11 +0,0 @@
1
- import { IAppStoreState } from './app';
2
- export declare const historiesSelector: (state: IAppStoreState) => import('..').IHistory[];
3
- export declare const lastHistorySelector: (state: IAppStoreState) => import('..').IHistory;
4
- export declare const historySelector: (locationKey: string | null) => (state: IAppStoreState) => import('..').IHistory | undefined;
5
- export declare const lastLocationSelector: (state: IAppStoreState) => import('..').ILocation;
6
- export declare const pageStatesSelector: (state: IAppStoreState) => Partial<Record<string, import('..').IPageState>>;
7
- export declare const pageStateSelector: (locationKey: string | null) => (state: IAppStoreState) => import('..').IPageState | undefined;
8
- export declare const lastPageStateSelector: (state: IAppStoreState) => import('..').IPageState | undefined;
9
- export declare const pageConfigsSelector: (state: IAppStoreState) => import('..').IPageConfig[];
10
- export declare const pageConfigSelector: (locationKey: string | null) => (state: IAppStoreState) => import('..').IPageConfig | undefined;
11
- export declare const lastPageConfigSelector: (state: IAppStoreState) => import('..').IPageConfig | undefined;
@@ -1,55 +0,0 @@
1
- import { ComponentType, PropsWithChildren } from 'react';
2
- import { INavigationAnimationType } from './navigation';
3
- import { INavigationBarProps } from '../../navigation-bar';
4
- import { IBottomTabBarItem, IBottomTabBarProps } from '../../bottom-tab-bar';
5
- import { IPageBaseProps } from '../../layout';
6
- export type IAppAnimationState = {
7
- type?: INavigationAnimationType;
8
- };
9
- export type IAppKeepAliveState = {
10
- enable?: boolean;
11
- maxStack?: number;
12
- freeze?: boolean;
13
- freezeDelay?: number;
14
- };
15
- export type IAppPageLayoutState = IPageBaseProps & {
16
- hidden?: boolean;
17
- scrollRestoration?: boolean;
18
- };
19
- export type IAppNavigationBarState = INavigationBarProps & {
20
- hidden?: boolean;
21
- };
22
- export type IAppBottomTabBarState = Partial<Omit<IBottomTabBarProps, 'activeId' | 'items'>> & {
23
- items: Array<IBottomTabBarItem & {
24
- path: string;
25
- params?: Record<string, string>;
26
- }>;
27
- hidden?: boolean;
28
- };
29
- export type ILayout = ComponentType<PropsWithChildren>;
30
- export type IAppState = {
31
- animation?: IAppAnimationState;
32
- navigationBar?: IAppNavigationBarState;
33
- bottomTabBar?: IAppBottomTabBarState;
34
- keepAlive?: IAppKeepAliveState;
35
- pageLayout?: IAppPageLayoutState;
36
- Layouts?: ILayout[];
37
- };
38
- export type IPageState = Omit<IAppState, 'keepAlive'> & {
39
- keepAlive?: boolean;
40
- freeze?: boolean;
41
- freezeDelay?: number;
42
- };
43
- export type IPageConfig = {
44
- pathname: string;
45
- Component: ComponentType;
46
- Layouts?: ILayout[];
47
- bottomTabBarId?: string;
48
- } & IPageState;
49
- export type IDarkModeConfig = {
50
- defaultEnabled?: boolean;
51
- };
52
- export type IAppConfig = {
53
- pages: IPageConfig[];
54
- darkMode?: IDarkModeConfig;
55
- } & IAppState;