acai-ui 1.65.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1139) hide show
  1. package/CHANGELOG.md +795 -0
  2. package/README.md +64 -0
  3. package/dist/acai-ui.css +14627 -0
  4. package/dist/components/actions/acai-ui-actions.d.ts +3 -0
  5. package/dist/components/async-select/acai-ui-async-select-interface.d.ts +48 -0
  6. package/dist/components/async-select/acai-ui-async-select-interface.d.ts.map +1 -0
  7. package/dist/components/async-select/acai-ui-async-select.d.ts +3 -0
  8. package/dist/components/badge/acai-ui-badge-interface.d.ts +20 -0
  9. package/dist/components/badge/acai-ui-badge-interface.d.ts.map +1 -0
  10. package/dist/components/badge/acai-ui-badge.d.ts +3 -0
  11. package/dist/components/banner/acai-ui-banner-interface.d.ts +16 -0
  12. package/dist/components/banner/acai-ui-banner-interface.d.ts.map +1 -0
  13. package/dist/components/banner/acai-ui-banner.d.ts +3 -0
  14. package/dist/components/button/acai-ui-button-interface.d.ts +21 -0
  15. package/dist/components/button/acai-ui-button-interface.d.ts.map +1 -0
  16. package/dist/components/button/acai-ui-button.d.ts +3 -0
  17. package/dist/components/card/acai-ui-card-interface.d.ts +14 -0
  18. package/dist/components/card/acai-ui-card-interface.d.ts.map +1 -0
  19. package/dist/components/card/acai-ui-card.d.ts +3 -0
  20. package/dist/components/chart/acai-ui-chart-interface.d.ts +190 -0
  21. package/dist/components/chart/acai-ui-chart-interface.d.ts.map +1 -0
  22. package/dist/components/chart/acai-ui-chart.d.ts +3 -0
  23. package/dist/components/chart/chart-a11y.d.ts +40 -0
  24. package/dist/components/chart/chart-a11y.d.ts.map +1 -0
  25. package/dist/components/chart/chart-caminhos.d.ts +91 -0
  26. package/dist/components/chart/chart-caminhos.d.ts.map +1 -0
  27. package/dist/components/chart/chart-cartesiano.d.ts +3 -0
  28. package/dist/components/chart/chart-dados.d.ts +74 -0
  29. package/dist/components/chart/chart-dados.d.ts.map +1 -0
  30. package/dist/components/chart/chart-escalas.d.ts +45 -0
  31. package/dist/components/chart/chart-escalas.d.ts.map +1 -0
  32. package/dist/components/chart/chart-formatar.d.ts +21 -0
  33. package/dist/components/chart/chart-formatar.d.ts.map +1 -0
  34. package/dist/components/chart/chart-gauge.d.ts +3 -0
  35. package/dist/components/chart/chart-headless.d.ts +29 -0
  36. package/dist/components/chart/chart-headless.d.ts.map +1 -0
  37. package/dist/components/chart/chart-imagem.d.ts +51 -0
  38. package/dist/components/chart/chart-imagem.d.ts.map +1 -0
  39. package/dist/components/chart/chart-layout.d.ts +59 -0
  40. package/dist/components/chart/chart-layout.d.ts.map +1 -0
  41. package/dist/components/chart/chart-legenda.d.ts +3 -0
  42. package/dist/components/chart/chart-pizza.d.ts +3 -0
  43. package/dist/components/chart/chart-plano.d.ts +201 -0
  44. package/dist/components/chart/chart-plano.d.ts.map +1 -0
  45. package/dist/components/chart/chart-rotulos.d.ts +10 -0
  46. package/dist/components/chart/chart-rotulos.d.ts.map +1 -0
  47. package/dist/components/chart/chart-tabela.d.ts +3 -0
  48. package/dist/components/chart/chart-ticks.d.ts +35 -0
  49. package/dist/components/chart/chart-ticks.d.ts.map +1 -0
  50. package/dist/components/checkbox/acai-ui-checkbox-interface.d.ts +16 -0
  51. package/dist/components/checkbox/acai-ui-checkbox-interface.d.ts.map +1 -0
  52. package/dist/components/checkbox/acai-ui-checkbox.d.ts +3 -0
  53. package/dist/components/chip/acai-ui-chip-interface.d.ts +17 -0
  54. package/dist/components/chip/acai-ui-chip-interface.d.ts.map +1 -0
  55. package/dist/components/chip/acai-ui-chip.d.ts +3 -0
  56. package/dist/components/code/acai-ui-code-interface.d.ts +44 -0
  57. package/dist/components/code/acai-ui-code-interface.d.ts.map +1 -0
  58. package/dist/components/code/acai-ui-code.d.ts +3 -0
  59. package/dist/components/code/dobras-json.d.ts +14 -0
  60. package/dist/components/code/dobras-json.d.ts.map +1 -0
  61. package/dist/components/confirm/acai-ui-confirm.d.ts +3 -0
  62. package/dist/components/container/acai-ui-container-interface.d.ts +29 -0
  63. package/dist/components/container/acai-ui-container-interface.d.ts.map +1 -0
  64. package/dist/components/container/acai-ui-container.d.ts +3 -0
  65. package/dist/components/date/acai-ui-date-interface.d.ts +19 -0
  66. package/dist/components/date/acai-ui-date-interface.d.ts.map +1 -0
  67. package/dist/components/date/acai-ui-date.d.ts +3 -0
  68. package/dist/components/date-range/acai-ui-date-range-interface.d.ts +27 -0
  69. package/dist/components/date-range/acai-ui-date-range-interface.d.ts.map +1 -0
  70. package/dist/components/date-range/acai-ui-date-range.d.ts +3 -0
  71. package/dist/components/datetime/acai-ui-datetime-interface.d.ts +10 -0
  72. package/dist/components/datetime/acai-ui-datetime-interface.d.ts.map +1 -0
  73. package/dist/components/datetime/acai-ui-datetime.d.ts +3 -0
  74. package/dist/components/dialog/acai-ui-dialog-interface.d.ts +17 -0
  75. package/dist/components/dialog/acai-ui-dialog-interface.d.ts.map +1 -0
  76. package/dist/components/dialog/acai-ui-dialog.d.ts +3 -0
  77. package/dist/components/divider/acai-ui-divider-interface.d.ts +5 -0
  78. package/dist/components/divider/acai-ui-divider-interface.d.ts.map +1 -0
  79. package/dist/components/divider/acai-ui-divider.d.ts +3 -0
  80. package/dist/components/drawer/acai-ui-drawer-interface.d.ts +97 -0
  81. package/dist/components/drawer/acai-ui-drawer-interface.d.ts.map +1 -0
  82. package/dist/components/drawer/acai-ui-drawer.d.ts +3 -0
  83. package/dist/components/drawer/drawer-sidebar-helper.d.ts +4 -0
  84. package/dist/components/drawer/drawer-sidebar-helper.d.ts.map +1 -0
  85. package/dist/components/dropdown/acai-ui-dropdown-interface.d.ts +35 -0
  86. package/dist/components/dropdown/acai-ui-dropdown-interface.d.ts.map +1 -0
  87. package/dist/components/dropdown/acai-ui-dropdown-item.d.ts +3 -0
  88. package/dist/components/dropdown/acai-ui-dropdown.d.ts +3 -0
  89. package/dist/components/error-log/acai-ui-error-log-interface.d.ts +59 -0
  90. package/dist/components/error-log/acai-ui-error-log-interface.d.ts.map +1 -0
  91. package/dist/components/error-log/acai-ui-error-log-json-tree.d.ts +3 -0
  92. package/dist/components/error-log/acai-ui-error-log-redigir.d.ts +28 -0
  93. package/dist/components/error-log/acai-ui-error-log-redigir.d.ts.map +1 -0
  94. package/dist/components/error-log/acai-ui-error-log.d.ts +3 -0
  95. package/dist/components/file/acai-ui-file-interface.d.ts +13 -0
  96. package/dist/components/file/acai-ui-file-interface.d.ts.map +1 -0
  97. package/dist/components/file/acai-ui-file.d.ts +3 -0
  98. package/dist/components/form/acai-ui-form-interface.d.ts +37 -0
  99. package/dist/components/form/acai-ui-form-interface.d.ts.map +1 -0
  100. package/dist/components/form/acai-ui-form.d.ts +3 -0
  101. package/dist/components/help/acai-ui-help-interface.d.ts +184 -0
  102. package/dist/components/help/acai-ui-help-interface.d.ts.map +1 -0
  103. package/dist/components/help/acai-ui-help.d.ts +3 -0
  104. package/dist/components/help/acai-ui-tour.d.ts +3 -0
  105. package/dist/components/help/tour-escolha.d.ts +62 -0
  106. package/dist/components/help/tour-escolha.d.ts.map +1 -0
  107. package/dist/components/help/tour-posicionar.d.ts +39 -0
  108. package/dist/components/help/tour-posicionar.d.ts.map +1 -0
  109. package/dist/components/help/tour-registry.d.ts +54 -0
  110. package/dist/components/help/tour-registry.d.ts.map +1 -0
  111. package/dist/components/help/use-tour-visto.d.ts +11 -0
  112. package/dist/components/help/use-tour-visto.d.ts.map +1 -0
  113. package/dist/components/icon/acai-ui-icon-interface.d.ts +12 -0
  114. package/dist/components/icon/acai-ui-icon-interface.d.ts.map +1 -0
  115. package/dist/components/icon/acai-ui-icon.d.ts +3 -0
  116. package/dist/components/index.d.ts +89 -0
  117. package/dist/components/index.d.ts.map +1 -0
  118. package/dist/components/input/acai-ui-input-interface.d.ts +20 -0
  119. package/dist/components/input/acai-ui-input-interface.d.ts.map +1 -0
  120. package/dist/components/input/acai-ui-input.d.ts +3 -0
  121. package/dist/components/modal/acai-ui-modal-interface.d.ts +16 -0
  122. package/dist/components/modal/acai-ui-modal-interface.d.ts.map +1 -0
  123. package/dist/components/modal/acai-ui-modal.d.ts +3 -0
  124. package/dist/components/pagination/acai-ui-pagination-interface.d.ts +9 -0
  125. package/dist/components/pagination/acai-ui-pagination-interface.d.ts.map +1 -0
  126. package/dist/components/pagination/acai-ui-pagination.d.ts +3 -0
  127. package/dist/components/preferences/acai-ui-preferences-interface.d.ts +5 -0
  128. package/dist/components/preferences/acai-ui-preferences-interface.d.ts.map +1 -0
  129. package/dist/components/preferences/acai-ui-preferences.d.ts +3 -0
  130. package/dist/components/progress/acai-ui-progress-interface.d.ts +18 -0
  131. package/dist/components/progress/acai-ui-progress-interface.d.ts.map +1 -0
  132. package/dist/components/progress/acai-ui-progress.d.ts +3 -0
  133. package/dist/components/radio/acai-ui-radio-interface.d.ts +13 -0
  134. package/dist/components/radio/acai-ui-radio-interface.d.ts.map +1 -0
  135. package/dist/components/radio/acai-ui-radio.d.ts +3 -0
  136. package/dist/components/section/acai-ui-section.d.ts +3 -0
  137. package/dist/components/select/acai-ui-select-interface.d.ts +18 -0
  138. package/dist/components/select/acai-ui-select-interface.d.ts.map +1 -0
  139. package/dist/components/select/acai-ui-select.d.ts +3 -0
  140. package/dist/components/session-clock/acai-ui-session-clock.d.ts +3 -0
  141. package/dist/components/stepper/acai-ui-step-interface.d.ts +18 -0
  142. package/dist/components/stepper/acai-ui-step-interface.d.ts.map +1 -0
  143. package/dist/components/stepper/acai-ui-step.d.ts +3 -0
  144. package/dist/components/stepper/acai-ui-stepper-interface.d.ts +53 -0
  145. package/dist/components/stepper/acai-ui-stepper-interface.d.ts.map +1 -0
  146. package/dist/components/stepper/acai-ui-stepper.d.ts +3 -0
  147. package/dist/components/swagger/acai-ui-swagger-interface.d.ts +53 -0
  148. package/dist/components/swagger/acai-ui-swagger-interface.d.ts.map +1 -0
  149. package/dist/components/swagger/acai-ui-swagger-operacao.d.ts +3 -0
  150. package/dist/components/swagger/acai-ui-swagger-requisicao.d.ts +76 -0
  151. package/dist/components/swagger/acai-ui-swagger-requisicao.d.ts.map +1 -0
  152. package/dist/components/swagger/acai-ui-swagger-schema.d.ts +3 -0
  153. package/dist/components/swagger/acai-ui-swagger.d.ts +3 -0
  154. package/dist/components/swagger/openapi-normalizar.d.ts +51 -0
  155. package/dist/components/swagger/openapi-normalizar.d.ts.map +1 -0
  156. package/dist/components/swagger/openapi-tipos.d.ts +167 -0
  157. package/dist/components/swagger/openapi-tipos.d.ts.map +1 -0
  158. package/dist/components/table/acai-ui-table-interface.d.ts +47 -0
  159. package/dist/components/table/acai-ui-table-interface.d.ts.map +1 -0
  160. package/dist/components/table/acai-ui-table-justificativa.d.ts +3 -0
  161. package/dist/components/table/acai-ui-table.d.ts +3 -0
  162. package/dist/components/tabs/acai-ui-tab.d.ts +3 -0
  163. package/dist/components/tabs/acai-ui-tabs-interface.d.ts +32 -0
  164. package/dist/components/tabs/acai-ui-tabs-interface.d.ts.map +1 -0
  165. package/dist/components/tabs/acai-ui-tabs.d.ts +3 -0
  166. package/dist/components/time/acai-ui-time-interface.d.ts +15 -0
  167. package/dist/components/time/acai-ui-time-interface.d.ts.map +1 -0
  168. package/dist/components/time/acai-ui-time.d.ts +3 -0
  169. package/dist/components/toggle/acai-ui-toggle-interface.d.ts +12 -0
  170. package/dist/components/toggle/acai-ui-toggle-interface.d.ts.map +1 -0
  171. package/dist/components/toggle/acai-ui-toggle.d.ts +3 -0
  172. package/dist/components/tooltip/acai-ui-tooltip-interface.d.ts +9 -0
  173. package/dist/components/tooltip/acai-ui-tooltip-interface.d.ts.map +1 -0
  174. package/dist/components/tooltip/acai-ui-tooltip.d.ts +3 -0
  175. package/dist/components/user-menu/acai-ui-user-menu-interface.d.ts +14 -0
  176. package/dist/components/user-menu/acai-ui-user-menu-interface.d.ts.map +1 -0
  177. package/dist/components/user-menu/acai-ui-user-menu.d.ts +3 -0
  178. package/dist/components/validation/acai-ui-validation.d.ts +3 -0
  179. package/dist/constants/chart-paleta.d.ts +47 -0
  180. package/dist/constants/chart-paleta.d.ts.map +1 -0
  181. package/dist/constants/efeitos.d.ts +22 -0
  182. package/dist/constants/efeitos.d.ts.map +1 -0
  183. package/dist/constants/index.d.ts +13 -0
  184. package/dist/constants/index.d.ts.map +1 -0
  185. package/dist/constants/lista-icons.d.ts +156 -0
  186. package/dist/constants/lista-icons.d.ts.map +1 -0
  187. package/dist/constants/medidas-espacos.d.ts +15 -0
  188. package/dist/constants/medidas-espacos.d.ts.map +1 -0
  189. package/dist/constants/radius.d.ts +15 -0
  190. package/dist/constants/radius.d.ts.map +1 -0
  191. package/dist/constants/status-badge.d.ts +17 -0
  192. package/dist/constants/status-badge.d.ts.map +1 -0
  193. package/dist/hooks/filtros-url-internos.d.ts +121 -0
  194. package/dist/hooks/filtros-url-internos.d.ts.map +1 -0
  195. package/dist/hooks/index.d.ts +18 -0
  196. package/dist/hooks/index.d.ts.map +1 -0
  197. package/dist/hooks/notify.d.ts +8 -0
  198. package/dist/hooks/notify.d.ts.map +1 -0
  199. package/dist/hooks/use-contador-sessao.d.ts +22 -0
  200. package/dist/hooks/use-contador-sessao.d.ts.map +1 -0
  201. package/dist/hooks/use-filtros-na-url.d.ts +110 -0
  202. package/dist/hooks/use-filtros-na-url.d.ts.map +1 -0
  203. package/dist/hooks/use-leitura-voz.d.ts +60 -0
  204. package/dist/hooks/use-leitura-voz.d.ts.map +1 -0
  205. package/dist/hooks/use-listagem-na-url.d.ts +185 -0
  206. package/dist/hooks/use-listagem-na-url.d.ts.map +1 -0
  207. package/dist/hooks/use-preferencias.d.ts +60 -0
  208. package/dist/hooks/use-preferencias.d.ts.map +1 -0
  209. package/dist/hooks/use-repasse-quasar.d.ts +42 -0
  210. package/dist/hooks/use-repasse-quasar.d.ts.map +1 -0
  211. package/dist/hooks/use-tamanho-elemento.d.ts +26 -0
  212. package/dist/hooks/use-tamanho-elemento.d.ts.map +1 -0
  213. package/dist/hooks/use-tela.d.ts +84 -0
  214. package/dist/hooks/use-tela.d.ts.map +1 -0
  215. package/dist/hooks/use-validacao-visual.d.ts +40 -0
  216. package/dist/hooks/use-validacao-visual.d.ts.map +1 -0
  217. package/dist/index.cjs +249 -0
  218. package/dist/index.cjs.map +1 -0
  219. package/dist/index.d.ts +8 -0
  220. package/dist/index.d.ts.map +1 -0
  221. package/dist/index.mjs +249 -0
  222. package/dist/index.mjs.map +1 -0
  223. package/dist/index10.cjs +24 -0
  224. package/dist/index10.cjs.map +1 -0
  225. package/dist/index10.mjs +25 -0
  226. package/dist/index10.mjs.map +1 -0
  227. package/dist/index100.cjs +51 -0
  228. package/dist/index100.cjs.map +1 -0
  229. package/dist/index100.mjs +51 -0
  230. package/dist/index100.mjs.map +1 -0
  231. package/dist/index101.cjs +143 -0
  232. package/dist/index101.cjs.map +1 -0
  233. package/dist/index101.mjs +143 -0
  234. package/dist/index101.mjs.map +1 -0
  235. package/dist/index102.cjs +137 -0
  236. package/dist/index102.cjs.map +1 -0
  237. package/dist/index102.mjs +138 -0
  238. package/dist/index102.mjs.map +1 -0
  239. package/dist/index104.cjs +10 -0
  240. package/dist/index104.cjs.map +1 -0
  241. package/dist/index104.mjs +11 -0
  242. package/dist/index104.mjs.map +1 -0
  243. package/dist/index105.cjs +5 -0
  244. package/dist/index105.cjs.map +1 -0
  245. package/dist/index105.mjs +6 -0
  246. package/dist/index105.mjs.map +1 -0
  247. package/dist/index106.cjs +5 -0
  248. package/dist/index106.cjs.map +1 -0
  249. package/dist/index106.mjs +6 -0
  250. package/dist/index106.mjs.map +1 -0
  251. package/dist/index107.cjs +86 -0
  252. package/dist/index107.cjs.map +1 -0
  253. package/dist/index107.mjs +87 -0
  254. package/dist/index107.mjs.map +1 -0
  255. package/dist/index109.cjs +123 -0
  256. package/dist/index109.cjs.map +1 -0
  257. package/dist/index109.mjs +124 -0
  258. package/dist/index109.mjs.map +1 -0
  259. package/dist/index111.cjs +121 -0
  260. package/dist/index111.cjs.map +1 -0
  261. package/dist/index111.mjs +122 -0
  262. package/dist/index111.mjs.map +1 -0
  263. package/dist/index113.cjs +72 -0
  264. package/dist/index113.cjs.map +1 -0
  265. package/dist/index113.mjs +73 -0
  266. package/dist/index113.mjs.map +1 -0
  267. package/dist/index115.cjs +5 -0
  268. package/dist/index115.cjs.map +1 -0
  269. package/dist/index115.mjs +6 -0
  270. package/dist/index115.mjs.map +1 -0
  271. package/dist/index116.cjs +56 -0
  272. package/dist/index116.cjs.map +1 -0
  273. package/dist/index116.mjs +57 -0
  274. package/dist/index116.mjs.map +1 -0
  275. package/dist/index118.cjs +5 -0
  276. package/dist/index118.cjs.map +1 -0
  277. package/dist/index118.mjs +6 -0
  278. package/dist/index118.mjs.map +1 -0
  279. package/dist/index119.cjs +210 -0
  280. package/dist/index119.cjs.map +1 -0
  281. package/dist/index119.mjs +211 -0
  282. package/dist/index119.mjs.map +1 -0
  283. package/dist/index12.cjs +606 -0
  284. package/dist/index12.cjs.map +1 -0
  285. package/dist/index12.mjs +607 -0
  286. package/dist/index12.mjs.map +1 -0
  287. package/dist/index121.cjs +170 -0
  288. package/dist/index121.cjs.map +1 -0
  289. package/dist/index121.mjs +171 -0
  290. package/dist/index121.mjs.map +1 -0
  291. package/dist/index123.cjs +109 -0
  292. package/dist/index123.cjs.map +1 -0
  293. package/dist/index123.mjs +110 -0
  294. package/dist/index123.mjs.map +1 -0
  295. package/dist/index125.cjs +5 -0
  296. package/dist/index125.cjs.map +1 -0
  297. package/dist/index125.mjs +6 -0
  298. package/dist/index125.mjs.map +1 -0
  299. package/dist/index126.cjs +4 -0
  300. package/dist/index126.cjs.map +1 -0
  301. package/dist/index126.mjs +5 -0
  302. package/dist/index126.mjs.map +1 -0
  303. package/dist/index127.cjs +300 -0
  304. package/dist/index127.cjs.map +1 -0
  305. package/dist/index127.mjs +301 -0
  306. package/dist/index127.mjs.map +1 -0
  307. package/dist/index130.cjs +5 -0
  308. package/dist/index130.cjs.map +1 -0
  309. package/dist/index130.mjs +6 -0
  310. package/dist/index130.mjs.map +1 -0
  311. package/dist/index131.cjs +5 -0
  312. package/dist/index131.cjs.map +1 -0
  313. package/dist/index131.mjs +6 -0
  314. package/dist/index131.mjs.map +1 -0
  315. package/dist/index132.cjs +128 -0
  316. package/dist/index132.cjs.map +1 -0
  317. package/dist/index132.mjs +129 -0
  318. package/dist/index132.mjs.map +1 -0
  319. package/dist/index134.cjs +4 -0
  320. package/dist/index134.cjs.map +1 -0
  321. package/dist/index134.mjs +5 -0
  322. package/dist/index134.mjs.map +1 -0
  323. package/dist/index135.cjs +180 -0
  324. package/dist/index135.cjs.map +1 -0
  325. package/dist/index135.mjs +181 -0
  326. package/dist/index135.mjs.map +1 -0
  327. package/dist/index137.cjs +83 -0
  328. package/dist/index137.cjs.map +1 -0
  329. package/dist/index137.mjs +84 -0
  330. package/dist/index137.mjs.map +1 -0
  331. package/dist/index139.cjs +284 -0
  332. package/dist/index139.cjs.map +1 -0
  333. package/dist/index139.mjs +285 -0
  334. package/dist/index139.mjs.map +1 -0
  335. package/dist/index14.cjs +124 -0
  336. package/dist/index14.cjs.map +1 -0
  337. package/dist/index14.mjs +125 -0
  338. package/dist/index14.mjs.map +1 -0
  339. package/dist/index141.cjs +58 -0
  340. package/dist/index141.cjs.map +1 -0
  341. package/dist/index141.mjs +59 -0
  342. package/dist/index141.mjs.map +1 -0
  343. package/dist/index143.cjs +5 -0
  344. package/dist/index143.cjs.map +1 -0
  345. package/dist/index143.mjs +6 -0
  346. package/dist/index143.mjs.map +1 -0
  347. package/dist/index144.cjs +399 -0
  348. package/dist/index144.cjs.map +1 -0
  349. package/dist/index144.mjs +400 -0
  350. package/dist/index144.mjs.map +1 -0
  351. package/dist/index146.cjs +305 -0
  352. package/dist/index146.cjs.map +1 -0
  353. package/dist/index146.mjs +306 -0
  354. package/dist/index146.mjs.map +1 -0
  355. package/dist/index149.cjs +109 -0
  356. package/dist/index149.cjs.map +1 -0
  357. package/dist/index149.mjs +110 -0
  358. package/dist/index149.mjs.map +1 -0
  359. package/dist/index152.cjs +5 -0
  360. package/dist/index152.cjs.map +1 -0
  361. package/dist/index152.mjs +6 -0
  362. package/dist/index152.mjs.map +1 -0
  363. package/dist/index153.cjs +5 -0
  364. package/dist/index153.cjs.map +1 -0
  365. package/dist/index153.mjs +6 -0
  366. package/dist/index153.mjs.map +1 -0
  367. package/dist/index154.cjs +4 -0
  368. package/dist/index154.cjs.map +1 -0
  369. package/dist/index154.mjs +5 -0
  370. package/dist/index154.mjs.map +1 -0
  371. package/dist/index155.cjs +5 -0
  372. package/dist/index155.cjs.map +1 -0
  373. package/dist/index155.mjs +6 -0
  374. package/dist/index155.mjs.map +1 -0
  375. package/dist/index156.cjs +5 -0
  376. package/dist/index156.cjs.map +1 -0
  377. package/dist/index156.mjs +6 -0
  378. package/dist/index156.mjs.map +1 -0
  379. package/dist/index157.cjs +5 -0
  380. package/dist/index157.cjs.map +1 -0
  381. package/dist/index157.mjs +6 -0
  382. package/dist/index157.mjs.map +1 -0
  383. package/dist/index158.cjs +4 -0
  384. package/dist/index158.cjs.map +1 -0
  385. package/dist/index158.mjs +5 -0
  386. package/dist/index158.mjs.map +1 -0
  387. package/dist/index159.cjs +59 -0
  388. package/dist/index159.cjs.map +1 -0
  389. package/dist/index159.mjs +60 -0
  390. package/dist/index159.mjs.map +1 -0
  391. package/dist/index16.cjs +89 -0
  392. package/dist/index16.cjs.map +1 -0
  393. package/dist/index16.mjs +90 -0
  394. package/dist/index16.mjs.map +1 -0
  395. package/dist/index161.cjs +5 -0
  396. package/dist/index161.cjs.map +1 -0
  397. package/dist/index161.mjs +6 -0
  398. package/dist/index161.mjs.map +1 -0
  399. package/dist/index162.cjs +119 -0
  400. package/dist/index162.cjs.map +1 -0
  401. package/dist/index162.mjs +120 -0
  402. package/dist/index162.mjs.map +1 -0
  403. package/dist/index164.cjs +33 -0
  404. package/dist/index164.cjs.map +1 -0
  405. package/dist/index164.mjs +34 -0
  406. package/dist/index164.mjs.map +1 -0
  407. package/dist/index166.cjs +5 -0
  408. package/dist/index166.cjs.map +1 -0
  409. package/dist/index166.mjs +6 -0
  410. package/dist/index166.mjs.map +1 -0
  411. package/dist/index167.cjs +324 -0
  412. package/dist/index167.cjs.map +1 -0
  413. package/dist/index167.mjs +325 -0
  414. package/dist/index167.mjs.map +1 -0
  415. package/dist/index17.cjs +419 -0
  416. package/dist/index17.cjs.map +1 -0
  417. package/dist/index17.mjs +420 -0
  418. package/dist/index17.mjs.map +1 -0
  419. package/dist/index170.cjs +38 -0
  420. package/dist/index170.cjs.map +1 -0
  421. package/dist/index170.mjs +39 -0
  422. package/dist/index170.mjs.map +1 -0
  423. package/dist/index172.cjs +5 -0
  424. package/dist/index172.cjs.map +1 -0
  425. package/dist/index172.mjs +6 -0
  426. package/dist/index172.mjs.map +1 -0
  427. package/dist/index173.cjs +202 -0
  428. package/dist/index173.cjs.map +1 -0
  429. package/dist/index173.mjs +203 -0
  430. package/dist/index173.mjs.map +1 -0
  431. package/dist/index175.cjs +5 -0
  432. package/dist/index175.cjs.map +1 -0
  433. package/dist/index175.mjs +6 -0
  434. package/dist/index175.mjs.map +1 -0
  435. package/dist/index176.cjs +53 -0
  436. package/dist/index176.cjs.map +1 -0
  437. package/dist/index176.mjs +54 -0
  438. package/dist/index176.mjs.map +1 -0
  439. package/dist/index178.cjs +13 -0
  440. package/dist/index178.cjs.map +1 -0
  441. package/dist/index178.mjs +13 -0
  442. package/dist/index178.mjs.map +1 -0
  443. package/dist/index179.cjs +18 -0
  444. package/dist/index179.cjs.map +1 -0
  445. package/dist/index179.mjs +18 -0
  446. package/dist/index179.mjs.map +1 -0
  447. package/dist/index180.cjs +262 -0
  448. package/dist/index180.cjs.map +1 -0
  449. package/dist/index180.mjs +262 -0
  450. package/dist/index180.mjs.map +1 -0
  451. package/dist/index181.cjs +108 -0
  452. package/dist/index181.cjs.map +1 -0
  453. package/dist/index181.mjs +109 -0
  454. package/dist/index181.mjs.map +1 -0
  455. package/dist/index182.cjs +73 -0
  456. package/dist/index182.cjs.map +1 -0
  457. package/dist/index182.mjs +73 -0
  458. package/dist/index182.mjs.map +1 -0
  459. package/dist/index183.cjs +37 -0
  460. package/dist/index183.cjs.map +1 -0
  461. package/dist/index183.mjs +37 -0
  462. package/dist/index183.mjs.map +1 -0
  463. package/dist/index184.cjs +16 -0
  464. package/dist/index184.cjs.map +1 -0
  465. package/dist/index184.mjs +16 -0
  466. package/dist/index184.mjs.map +1 -0
  467. package/dist/index185.cjs +31 -0
  468. package/dist/index185.cjs.map +1 -0
  469. package/dist/index185.mjs +31 -0
  470. package/dist/index185.mjs.map +1 -0
  471. package/dist/index186.cjs +460 -0
  472. package/dist/index186.cjs.map +1 -0
  473. package/dist/index186.mjs +461 -0
  474. package/dist/index186.mjs.map +1 -0
  475. package/dist/index187.cjs +154 -0
  476. package/dist/index187.cjs.map +1 -0
  477. package/dist/index187.mjs +154 -0
  478. package/dist/index187.mjs.map +1 -0
  479. package/dist/index188.cjs +40 -0
  480. package/dist/index188.cjs.map +1 -0
  481. package/dist/index188.mjs +40 -0
  482. package/dist/index188.mjs.map +1 -0
  483. package/dist/index189.cjs +66 -0
  484. package/dist/index189.cjs.map +1 -0
  485. package/dist/index189.mjs +66 -0
  486. package/dist/index189.mjs.map +1 -0
  487. package/dist/index19.cjs +135 -0
  488. package/dist/index19.cjs.map +1 -0
  489. package/dist/index19.mjs +136 -0
  490. package/dist/index19.mjs.map +1 -0
  491. package/dist/index190.cjs +142 -0
  492. package/dist/index190.cjs.map +1 -0
  493. package/dist/index190.mjs +143 -0
  494. package/dist/index190.mjs.map +1 -0
  495. package/dist/index191.cjs +7 -0
  496. package/dist/index191.cjs.map +1 -0
  497. package/dist/index191.mjs +8 -0
  498. package/dist/index191.mjs.map +1 -0
  499. package/dist/index192.cjs +7 -0
  500. package/dist/index192.cjs.map +1 -0
  501. package/dist/index192.mjs +8 -0
  502. package/dist/index192.mjs.map +1 -0
  503. package/dist/index193.cjs +7 -0
  504. package/dist/index193.cjs.map +1 -0
  505. package/dist/index193.mjs +8 -0
  506. package/dist/index193.mjs.map +1 -0
  507. package/dist/index194.cjs +7 -0
  508. package/dist/index194.cjs.map +1 -0
  509. package/dist/index194.mjs +8 -0
  510. package/dist/index194.mjs.map +1 -0
  511. package/dist/index195.cjs +7 -0
  512. package/dist/index195.cjs.map +1 -0
  513. package/dist/index195.mjs +8 -0
  514. package/dist/index195.mjs.map +1 -0
  515. package/dist/index196.cjs +100 -0
  516. package/dist/index196.cjs.map +1 -0
  517. package/dist/index196.mjs +100 -0
  518. package/dist/index196.mjs.map +1 -0
  519. package/dist/index197.cjs +226 -0
  520. package/dist/index197.cjs.map +1 -0
  521. package/dist/index197.mjs +226 -0
  522. package/dist/index197.mjs.map +1 -0
  523. package/dist/index198.cjs +66 -0
  524. package/dist/index198.cjs.map +1 -0
  525. package/dist/index198.mjs +66 -0
  526. package/dist/index198.mjs.map +1 -0
  527. package/dist/index199.cjs +399 -0
  528. package/dist/index199.cjs.map +1 -0
  529. package/dist/index199.mjs +399 -0
  530. package/dist/index199.mjs.map +1 -0
  531. package/dist/index200.cjs +83 -0
  532. package/dist/index200.cjs.map +1 -0
  533. package/dist/index200.mjs +83 -0
  534. package/dist/index200.mjs.map +1 -0
  535. package/dist/index201.cjs +4 -0
  536. package/dist/index201.cjs.map +1 -0
  537. package/dist/index201.mjs +5 -0
  538. package/dist/index201.mjs.map +1 -0
  539. package/dist/index202.cjs +5 -0
  540. package/dist/index202.cjs.map +1 -0
  541. package/dist/index202.mjs +6 -0
  542. package/dist/index202.mjs.map +1 -0
  543. package/dist/index203.cjs +216 -0
  544. package/dist/index203.cjs.map +1 -0
  545. package/dist/index203.mjs +217 -0
  546. package/dist/index203.mjs.map +1 -0
  547. package/dist/index205.cjs +112 -0
  548. package/dist/index205.cjs.map +1 -0
  549. package/dist/index205.mjs +113 -0
  550. package/dist/index205.mjs.map +1 -0
  551. package/dist/index207.cjs +112 -0
  552. package/dist/index207.cjs.map +1 -0
  553. package/dist/index207.mjs +113 -0
  554. package/dist/index207.mjs.map +1 -0
  555. package/dist/index209.cjs +64 -0
  556. package/dist/index209.cjs.map +1 -0
  557. package/dist/index209.mjs +65 -0
  558. package/dist/index209.mjs.map +1 -0
  559. package/dist/index21.cjs +268 -0
  560. package/dist/index21.cjs.map +1 -0
  561. package/dist/index21.mjs +269 -0
  562. package/dist/index21.mjs.map +1 -0
  563. package/dist/index211.cjs +45 -0
  564. package/dist/index211.cjs.map +1 -0
  565. package/dist/index211.mjs +46 -0
  566. package/dist/index211.mjs.map +1 -0
  567. package/dist/index213.cjs +241 -0
  568. package/dist/index213.cjs.map +1 -0
  569. package/dist/index213.mjs +241 -0
  570. package/dist/index213.mjs.map +1 -0
  571. package/dist/index214.cjs +63 -0
  572. package/dist/index214.cjs.map +1 -0
  573. package/dist/index214.mjs +63 -0
  574. package/dist/index214.mjs.map +1 -0
  575. package/dist/index215.cjs +53 -0
  576. package/dist/index215.cjs.map +1 -0
  577. package/dist/index215.mjs +53 -0
  578. package/dist/index215.mjs.map +1 -0
  579. package/dist/index216.cjs +53 -0
  580. package/dist/index216.cjs.map +1 -0
  581. package/dist/index216.mjs +53 -0
  582. package/dist/index216.mjs.map +1 -0
  583. package/dist/index217.cjs +4 -0
  584. package/dist/index217.cjs.map +1 -0
  585. package/dist/index217.mjs +5 -0
  586. package/dist/index217.mjs.map +1 -0
  587. package/dist/index218.cjs +29 -0
  588. package/dist/index218.cjs.map +1 -0
  589. package/dist/index218.mjs +30 -0
  590. package/dist/index218.mjs.map +1 -0
  591. package/dist/index219.cjs +4 -0
  592. package/dist/index219.cjs.map +1 -0
  593. package/dist/index219.mjs +5 -0
  594. package/dist/index219.mjs.map +1 -0
  595. package/dist/index23.cjs +41 -0
  596. package/dist/index23.cjs.map +1 -0
  597. package/dist/index23.mjs +42 -0
  598. package/dist/index23.mjs.map +1 -0
  599. package/dist/index24.cjs +117 -0
  600. package/dist/index24.cjs.map +1 -0
  601. package/dist/index24.mjs +118 -0
  602. package/dist/index24.mjs.map +1 -0
  603. package/dist/index26.cjs +127 -0
  604. package/dist/index26.cjs.map +1 -0
  605. package/dist/index26.mjs +128 -0
  606. package/dist/index26.mjs.map +1 -0
  607. package/dist/index28.cjs +39 -0
  608. package/dist/index28.cjs.map +1 -0
  609. package/dist/index28.mjs +40 -0
  610. package/dist/index28.mjs.map +1 -0
  611. package/dist/index29.cjs +176 -0
  612. package/dist/index29.cjs.map +1 -0
  613. package/dist/index29.mjs +177 -0
  614. package/dist/index29.mjs.map +1 -0
  615. package/dist/index3.cjs +110 -0
  616. package/dist/index3.cjs.map +1 -0
  617. package/dist/index3.mjs +110 -0
  618. package/dist/index3.mjs.map +1 -0
  619. package/dist/index31.cjs +361 -0
  620. package/dist/index31.cjs.map +1 -0
  621. package/dist/index31.mjs +362 -0
  622. package/dist/index31.mjs.map +1 -0
  623. package/dist/index33.cjs +20 -0
  624. package/dist/index33.cjs.map +1 -0
  625. package/dist/index33.mjs +21 -0
  626. package/dist/index33.mjs.map +1 -0
  627. package/dist/index34.cjs +311 -0
  628. package/dist/index34.cjs.map +1 -0
  629. package/dist/index34.mjs +312 -0
  630. package/dist/index34.mjs.map +1 -0
  631. package/dist/index36.cjs +132 -0
  632. package/dist/index36.cjs.map +1 -0
  633. package/dist/index36.mjs +133 -0
  634. package/dist/index36.mjs.map +1 -0
  635. package/dist/index38.cjs +80 -0
  636. package/dist/index38.cjs.map +1 -0
  637. package/dist/index38.mjs +81 -0
  638. package/dist/index38.mjs.map +1 -0
  639. package/dist/index4.cjs +612 -0
  640. package/dist/index4.cjs.map +1 -0
  641. package/dist/index4.mjs +613 -0
  642. package/dist/index4.mjs.map +1 -0
  643. package/dist/index40.cjs +600 -0
  644. package/dist/index40.cjs.map +1 -0
  645. package/dist/index40.mjs +601 -0
  646. package/dist/index40.mjs.map +1 -0
  647. package/dist/index42.cjs +160 -0
  648. package/dist/index42.cjs.map +1 -0
  649. package/dist/index42.mjs +160 -0
  650. package/dist/index42.mjs.map +1 -0
  651. package/dist/index43.cjs +26 -0
  652. package/dist/index43.cjs.map +1 -0
  653. package/dist/index43.mjs +27 -0
  654. package/dist/index43.mjs.map +1 -0
  655. package/dist/index44.cjs +20 -0
  656. package/dist/index44.cjs.map +1 -0
  657. package/dist/index44.mjs +21 -0
  658. package/dist/index44.mjs.map +1 -0
  659. package/dist/index45.cjs +104 -0
  660. package/dist/index45.cjs.map +1 -0
  661. package/dist/index45.mjs +104 -0
  662. package/dist/index45.mjs.map +1 -0
  663. package/dist/index46.cjs +8 -0
  664. package/dist/index46.cjs.map +1 -0
  665. package/dist/index46.mjs +9 -0
  666. package/dist/index46.mjs.map +1 -0
  667. package/dist/index47.cjs +7 -0
  668. package/dist/index47.cjs.map +1 -0
  669. package/dist/index47.mjs +8 -0
  670. package/dist/index47.mjs.map +1 -0
  671. package/dist/index48.cjs +7 -0
  672. package/dist/index48.cjs.map +1 -0
  673. package/dist/index48.mjs +8 -0
  674. package/dist/index48.mjs.map +1 -0
  675. package/dist/index49.cjs +7 -0
  676. package/dist/index49.cjs.map +1 -0
  677. package/dist/index49.mjs +8 -0
  678. package/dist/index49.mjs.map +1 -0
  679. package/dist/index50.cjs +7 -0
  680. package/dist/index50.cjs.map +1 -0
  681. package/dist/index50.mjs +8 -0
  682. package/dist/index50.mjs.map +1 -0
  683. package/dist/index51.cjs +7 -0
  684. package/dist/index51.cjs.map +1 -0
  685. package/dist/index51.mjs +8 -0
  686. package/dist/index51.mjs.map +1 -0
  687. package/dist/index52.cjs +7 -0
  688. package/dist/index52.cjs.map +1 -0
  689. package/dist/index52.mjs +8 -0
  690. package/dist/index52.mjs.map +1 -0
  691. package/dist/index53.cjs +7 -0
  692. package/dist/index53.cjs.map +1 -0
  693. package/dist/index53.mjs +8 -0
  694. package/dist/index53.mjs.map +1 -0
  695. package/dist/index54.cjs +7 -0
  696. package/dist/index54.cjs.map +1 -0
  697. package/dist/index54.mjs +8 -0
  698. package/dist/index54.mjs.map +1 -0
  699. package/dist/index55.cjs +7 -0
  700. package/dist/index55.cjs.map +1 -0
  701. package/dist/index55.mjs +8 -0
  702. package/dist/index55.mjs.map +1 -0
  703. package/dist/index56.cjs +7 -0
  704. package/dist/index56.cjs.map +1 -0
  705. package/dist/index56.mjs +8 -0
  706. package/dist/index56.mjs.map +1 -0
  707. package/dist/index57.cjs +7 -0
  708. package/dist/index57.cjs.map +1 -0
  709. package/dist/index57.mjs +8 -0
  710. package/dist/index57.mjs.map +1 -0
  711. package/dist/index58.cjs +7 -0
  712. package/dist/index58.cjs.map +1 -0
  713. package/dist/index58.mjs +8 -0
  714. package/dist/index58.mjs.map +1 -0
  715. package/dist/index59.cjs +8 -0
  716. package/dist/index59.cjs.map +1 -0
  717. package/dist/index59.mjs +9 -0
  718. package/dist/index59.mjs.map +1 -0
  719. package/dist/index6.cjs +578 -0
  720. package/dist/index6.cjs.map +1 -0
  721. package/dist/index6.mjs +579 -0
  722. package/dist/index6.mjs.map +1 -0
  723. package/dist/index60.cjs +7 -0
  724. package/dist/index60.cjs.map +1 -0
  725. package/dist/index60.mjs +8 -0
  726. package/dist/index60.mjs.map +1 -0
  727. package/dist/index61.cjs +7 -0
  728. package/dist/index61.cjs.map +1 -0
  729. package/dist/index61.mjs +8 -0
  730. package/dist/index61.mjs.map +1 -0
  731. package/dist/index62.cjs +7 -0
  732. package/dist/index62.cjs.map +1 -0
  733. package/dist/index62.mjs +8 -0
  734. package/dist/index62.mjs.map +1 -0
  735. package/dist/index63.cjs +7 -0
  736. package/dist/index63.cjs.map +1 -0
  737. package/dist/index63.mjs +8 -0
  738. package/dist/index63.mjs.map +1 -0
  739. package/dist/index64.cjs +7 -0
  740. package/dist/index64.cjs.map +1 -0
  741. package/dist/index64.mjs +8 -0
  742. package/dist/index64.mjs.map +1 -0
  743. package/dist/index65.cjs +8 -0
  744. package/dist/index65.cjs.map +1 -0
  745. package/dist/index65.mjs +9 -0
  746. package/dist/index65.mjs.map +1 -0
  747. package/dist/index66.cjs +7 -0
  748. package/dist/index66.cjs.map +1 -0
  749. package/dist/index66.mjs +8 -0
  750. package/dist/index66.mjs.map +1 -0
  751. package/dist/index67.cjs +7 -0
  752. package/dist/index67.cjs.map +1 -0
  753. package/dist/index67.mjs +8 -0
  754. package/dist/index67.mjs.map +1 -0
  755. package/dist/index68.cjs +7 -0
  756. package/dist/index68.cjs.map +1 -0
  757. package/dist/index68.mjs +8 -0
  758. package/dist/index68.mjs.map +1 -0
  759. package/dist/index69.cjs +8 -0
  760. package/dist/index69.cjs.map +1 -0
  761. package/dist/index69.mjs +9 -0
  762. package/dist/index69.mjs.map +1 -0
  763. package/dist/index70.cjs +7 -0
  764. package/dist/index70.cjs.map +1 -0
  765. package/dist/index70.mjs +8 -0
  766. package/dist/index70.mjs.map +1 -0
  767. package/dist/index71.cjs +38 -0
  768. package/dist/index71.cjs.map +1 -0
  769. package/dist/index71.mjs +38 -0
  770. package/dist/index71.mjs.map +1 -0
  771. package/dist/index72.cjs +22 -0
  772. package/dist/index72.cjs.map +1 -0
  773. package/dist/index72.mjs +22 -0
  774. package/dist/index72.mjs.map +1 -0
  775. package/dist/index73.cjs +40 -0
  776. package/dist/index73.cjs.map +1 -0
  777. package/dist/index73.mjs +40 -0
  778. package/dist/index73.mjs.map +1 -0
  779. package/dist/index74.cjs +80 -0
  780. package/dist/index74.cjs.map +1 -0
  781. package/dist/index74.mjs +80 -0
  782. package/dist/index74.mjs.map +1 -0
  783. package/dist/index75.cjs +29 -0
  784. package/dist/index75.cjs.map +1 -0
  785. package/dist/index75.mjs +29 -0
  786. package/dist/index75.mjs.map +1 -0
  787. package/dist/index76.cjs +157 -0
  788. package/dist/index76.cjs.map +1 -0
  789. package/dist/index76.mjs +157 -0
  790. package/dist/index76.mjs.map +1 -0
  791. package/dist/index77.cjs +16 -0
  792. package/dist/index77.cjs.map +1 -0
  793. package/dist/index77.mjs +16 -0
  794. package/dist/index77.mjs.map +1 -0
  795. package/dist/index78.cjs +87 -0
  796. package/dist/index78.cjs.map +1 -0
  797. package/dist/index78.mjs +87 -0
  798. package/dist/index78.mjs.map +1 -0
  799. package/dist/index79.cjs +16 -0
  800. package/dist/index79.cjs.map +1 -0
  801. package/dist/index79.mjs +16 -0
  802. package/dist/index79.mjs.map +1 -0
  803. package/dist/index8.cjs +130 -0
  804. package/dist/index8.cjs.map +1 -0
  805. package/dist/index8.mjs +131 -0
  806. package/dist/index8.mjs.map +1 -0
  807. package/dist/index80.cjs +65 -0
  808. package/dist/index80.cjs.map +1 -0
  809. package/dist/index80.mjs +65 -0
  810. package/dist/index80.mjs.map +1 -0
  811. package/dist/index81.cjs +69 -0
  812. package/dist/index81.cjs.map +1 -0
  813. package/dist/index81.mjs +69 -0
  814. package/dist/index81.mjs.map +1 -0
  815. package/dist/index82.cjs +30 -0
  816. package/dist/index82.cjs.map +1 -0
  817. package/dist/index82.mjs +30 -0
  818. package/dist/index82.mjs.map +1 -0
  819. package/dist/index83.cjs +86 -0
  820. package/dist/index83.cjs.map +1 -0
  821. package/dist/index83.mjs +86 -0
  822. package/dist/index83.mjs.map +1 -0
  823. package/dist/index84.cjs +102 -0
  824. package/dist/index84.cjs.map +1 -0
  825. package/dist/index84.mjs +102 -0
  826. package/dist/index84.mjs.map +1 -0
  827. package/dist/index85.cjs +20 -0
  828. package/dist/index85.cjs.map +1 -0
  829. package/dist/index85.mjs +20 -0
  830. package/dist/index85.mjs.map +1 -0
  831. package/dist/index86.cjs +21 -0
  832. package/dist/index86.cjs.map +1 -0
  833. package/dist/index86.mjs +21 -0
  834. package/dist/index86.mjs.map +1 -0
  835. package/dist/index87.cjs +191 -0
  836. package/dist/index87.cjs.map +1 -0
  837. package/dist/index87.mjs +191 -0
  838. package/dist/index87.mjs.map +1 -0
  839. package/dist/index88.cjs +67 -0
  840. package/dist/index88.cjs.map +1 -0
  841. package/dist/index88.mjs +67 -0
  842. package/dist/index88.mjs.map +1 -0
  843. package/dist/index89.cjs +312 -0
  844. package/dist/index89.cjs.map +1 -0
  845. package/dist/index89.mjs +312 -0
  846. package/dist/index89.mjs.map +1 -0
  847. package/dist/index90.cjs +10 -0
  848. package/dist/index90.cjs.map +1 -0
  849. package/dist/index90.mjs +10 -0
  850. package/dist/index90.mjs.map +1 -0
  851. package/dist/index91.cjs +15 -0
  852. package/dist/index91.cjs.map +1 -0
  853. package/dist/index91.mjs +15 -0
  854. package/dist/index91.mjs.map +1 -0
  855. package/dist/index92.cjs +8 -0
  856. package/dist/index92.cjs.map +1 -0
  857. package/dist/index92.mjs +8 -0
  858. package/dist/index92.mjs.map +1 -0
  859. package/dist/index93.cjs +81 -0
  860. package/dist/index93.cjs.map +1 -0
  861. package/dist/index93.mjs +81 -0
  862. package/dist/index93.mjs.map +1 -0
  863. package/dist/index94.cjs +124 -0
  864. package/dist/index94.cjs.map +1 -0
  865. package/dist/index94.mjs +124 -0
  866. package/dist/index94.mjs.map +1 -0
  867. package/dist/index95.cjs +68 -0
  868. package/dist/index95.cjs.map +1 -0
  869. package/dist/index95.mjs +68 -0
  870. package/dist/index95.mjs.map +1 -0
  871. package/dist/index96.cjs +29 -0
  872. package/dist/index96.cjs.map +1 -0
  873. package/dist/index96.mjs +29 -0
  874. package/dist/index96.mjs.map +1 -0
  875. package/dist/index97.cjs +184 -0
  876. package/dist/index97.cjs.map +1 -0
  877. package/dist/index97.mjs +184 -0
  878. package/dist/index97.mjs.map +1 -0
  879. package/dist/index98.cjs +78 -0
  880. package/dist/index98.cjs.map +1 -0
  881. package/dist/index98.mjs +78 -0
  882. package/dist/index98.mjs.map +1 -0
  883. package/dist/index99.cjs +55 -0
  884. package/dist/index99.cjs.map +1 -0
  885. package/dist/index99.mjs +55 -0
  886. package/dist/index99.mjs.map +1 -0
  887. package/dist/plugin.d.ts +37 -0
  888. package/dist/plugin.d.ts.map +1 -0
  889. package/dist/scss/_badge.scss +12 -0
  890. package/dist/scss/_breakpoints.scss +102 -0
  891. package/dist/scss/_color-utilities.scss +105 -0
  892. package/dist/scss/_controls.scss +135 -0
  893. package/dist/scss/_ds-input-base.scss +302 -0
  894. package/dist/scss/_ds-picker-m3.scss +179 -0
  895. package/dist/scss/_effects.scss +42 -0
  896. package/dist/scss/_overlays.scss +13 -0
  897. package/dist/scss/_radius.scss +24 -0
  898. package/dist/scss/_reset.scss +60 -0
  899. package/dist/scss/_scrollbar.scss +78 -0
  900. package/dist/scss/_spacing.scss +15 -0
  901. package/dist/scss/_themes.scss +493 -0
  902. package/dist/scss/_typography.scss +50 -0
  903. package/dist/scss/_utilities.scss +75 -0
  904. package/dist/scss/_variables.scss +143 -0
  905. package/dist/scss/api.scss +77 -0
  906. package/dist/scss/tokens.scss +13 -0
  907. package/dist/utils/date-utils.d.ts +48 -0
  908. package/dist/utils/date-utils.d.ts.map +1 -0
  909. package/dist/utils/dialog-utils.d.ts +17 -0
  910. package/dist/utils/dialog-utils.d.ts.map +1 -0
  911. package/dist/utils/file-utils.d.ts +20 -0
  912. package/dist/utils/file-utils.d.ts.map +1 -0
  913. package/dist/utils/filtro-input.d.ts +19 -0
  914. package/dist/utils/filtro-input.d.ts.map +1 -0
  915. package/dist/utils/form-rules.d.ts +74 -0
  916. package/dist/utils/form-rules.d.ts.map +1 -0
  917. package/dist/utils/formatadores.d.ts +15 -0
  918. package/dist/utils/formatadores.d.ts.map +1 -0
  919. package/dist/utils/gerador-id.d.ts +3 -0
  920. package/dist/utils/gerador-id.d.ts.map +1 -0
  921. package/dist/utils/hint-mensagem.d.ts +11 -0
  922. package/dist/utils/hint-mensagem.d.ts.map +1 -0
  923. package/dist/utils/index.d.ts +15 -0
  924. package/dist/utils/index.d.ts.map +1 -0
  925. package/dist/utils/limpar-campos.d.ts +6 -0
  926. package/dist/utils/limpar-campos.d.ts.map +1 -0
  927. package/dist/utils/masks.d.ts +16 -0
  928. package/dist/utils/masks.d.ts.map +1 -0
  929. package/dist/utils/medidas-util.d.ts +3 -0
  930. package/dist/utils/medidas-util.d.ts.map +1 -0
  931. package/dist/utils/normalizar-label.d.ts +2 -0
  932. package/dist/utils/normalizar-label.d.ts.map +1 -0
  933. package/dist/utils/scroll-elemento.d.ts +16 -0
  934. package/dist/utils/scroll-elemento.d.ts.map +1 -0
  935. package/dist/utils/validar-campo.d.ts +7 -0
  936. package/dist/utils/validar-campo.d.ts.map +1 -0
  937. package/dist/utils/validar-documentos.d.ts +12 -0
  938. package/dist/utils/validar-documentos.d.ts.map +1 -0
  939. package/dist/utils/vnode-slot.d.ts +43 -0
  940. package/dist/utils/vnode-slot.d.ts.map +1 -0
  941. package/package.json +100 -0
  942. package/src/components/actions/acai-ui-actions.vue +225 -0
  943. package/src/components/async-select/acai-ui-async-select-interface.ts +49 -0
  944. package/src/components/async-select/acai-ui-async-select.vue +409 -0
  945. package/src/components/badge/acai-ui-badge-interface.ts +19 -0
  946. package/src/components/badge/acai-ui-badge.vue +40 -0
  947. package/src/components/banner/acai-ui-banner-interface.ts +17 -0
  948. package/src/components/banner/acai-ui-banner-styles.scss +47 -0
  949. package/src/components/banner/acai-ui-banner.vue +85 -0
  950. package/src/components/button/acai-ui-button-interface.ts +21 -0
  951. package/src/components/button/acai-ui-button.vue +378 -0
  952. package/src/components/card/acai-ui-card-interface.ts +14 -0
  953. package/src/components/card/acai-ui-card-styles.scss +94 -0
  954. package/src/components/card/acai-ui-card.vue +148 -0
  955. package/src/components/chart/acai-ui-chart-interface.ts +226 -0
  956. package/src/components/chart/acai-ui-chart-styles.scss +141 -0
  957. package/src/components/chart/acai-ui-chart.vue +679 -0
  958. package/src/components/chart/chart-a11y.ts +184 -0
  959. package/src/components/chart/chart-caminhos.ts +466 -0
  960. package/src/components/chart/chart-cartesiano.vue +247 -0
  961. package/src/components/chart/chart-dados.ts +381 -0
  962. package/src/components/chart/chart-escalas.ts +141 -0
  963. package/src/components/chart/chart-formatar.ts +98 -0
  964. package/src/components/chart/chart-gauge.vue +152 -0
  965. package/src/components/chart/chart-headless.ts +130 -0
  966. package/src/components/chart/chart-imagem.ts +247 -0
  967. package/src/components/chart/chart-layout.ts +184 -0
  968. package/src/components/chart/chart-legenda.vue +103 -0
  969. package/src/components/chart/chart-pizza.vue +134 -0
  970. package/src/components/chart/chart-plano.ts +818 -0
  971. package/src/components/chart/chart-rotulos.ts +75 -0
  972. package/src/components/chart/chart-tabela.vue +116 -0
  973. package/src/components/chart/chart-ticks.ts +116 -0
  974. package/src/components/checkbox/acai-ui-checkbox-interface.ts +17 -0
  975. package/src/components/checkbox/acai-ui-checkbox.vue +114 -0
  976. package/src/components/chip/acai-ui-chip-interface.ts +19 -0
  977. package/src/components/chip/acai-ui-chip.vue +61 -0
  978. package/src/components/code/acai-ui-code-interface.ts +43 -0
  979. package/src/components/code/acai-ui-code-styles.scss +407 -0
  980. package/src/components/code/acai-ui-code.vue +595 -0
  981. package/src/components/code/dobras-json.ts +52 -0
  982. package/src/components/confirm/acai-ui-confirm.vue +230 -0
  983. package/src/components/container/acai-ui-container-interface.ts +34 -0
  984. package/src/components/container/acai-ui-container-styles.scss +122 -0
  985. package/src/components/container/acai-ui-container.vue +140 -0
  986. package/src/components/date/acai-ui-date-interface.ts +18 -0
  987. package/src/components/date/acai-ui-date.vue +191 -0
  988. package/src/components/date-range/acai-ui-date-range-interface.ts +27 -0
  989. package/src/components/date-range/acai-ui-date-range.vue +300 -0
  990. package/src/components/datetime/acai-ui-datetime-interface.ts +10 -0
  991. package/src/components/datetime/acai-ui-datetime.vue +203 -0
  992. package/src/components/datetime/data-hora-styles.scss +18 -0
  993. package/src/components/dialog/acai-ui-dialog-interface.ts +18 -0
  994. package/src/components/dialog/acai-ui-dialog.vue +168 -0
  995. package/src/components/divider/acai-ui-divider-interface.ts +4 -0
  996. package/src/components/divider/acai-ui-divider-styles.scss +42 -0
  997. package/src/components/divider/acai-ui-divider.vue +20 -0
  998. package/src/components/drawer/acai-ui-drawer-interface.ts +99 -0
  999. package/src/components/drawer/acai-ui-drawer-styles.scss +586 -0
  1000. package/src/components/drawer/acai-ui-drawer.vue +802 -0
  1001. package/src/components/drawer/drawer-sidebar-helper.ts +117 -0
  1002. package/src/components/dropdown/acai-ui-dropdown-interface.ts +41 -0
  1003. package/src/components/dropdown/acai-ui-dropdown-item.vue +36 -0
  1004. package/src/components/dropdown/acai-ui-dropdown-styles.scss +90 -0
  1005. package/src/components/dropdown/acai-ui-dropdown.vue +77 -0
  1006. package/src/components/error-log/acai-ui-error-log-interface.ts +59 -0
  1007. package/src/components/error-log/acai-ui-error-log-json-tree.vue +426 -0
  1008. package/src/components/error-log/acai-ui-error-log-redigir.ts +74 -0
  1009. package/src/components/error-log/acai-ui-error-log-styles.scss +137 -0
  1010. package/src/components/error-log/acai-ui-error-log.vue +318 -0
  1011. package/src/components/file/acai-ui-file-interface.ts +28 -0
  1012. package/src/components/file/acai-ui-file.vue +85 -0
  1013. package/src/components/file/arquivo-styles.scss +109 -0
  1014. package/src/components/form/acai-ui-form-grid.scss +145 -0
  1015. package/src/components/form/acai-ui-form-interface.ts +37 -0
  1016. package/src/components/form/acai-ui-form-styles.scss +159 -0
  1017. package/src/components/form/acai-ui-form-validation-modal.vue +216 -0
  1018. package/src/components/form/acai-ui-form.vue +410 -0
  1019. package/src/components/help/acai-ui-help-interface.ts +200 -0
  1020. package/src/components/help/acai-ui-help-styles.scss +209 -0
  1021. package/src/components/help/acai-ui-help.vue +259 -0
  1022. package/src/components/help/acai-ui-tour-styles.scss +292 -0
  1023. package/src/components/help/acai-ui-tour.vue +766 -0
  1024. package/src/components/help/tour-escolha.ts +139 -0
  1025. package/src/components/help/tour-posicionar.ts +148 -0
  1026. package/src/components/help/tour-registry.ts +177 -0
  1027. package/src/components/help/use-tour-visto.ts +81 -0
  1028. package/src/components/icon/acai-ui-icon-interface.ts +12 -0
  1029. package/src/components/icon/acai-ui-icon.vue +33 -0
  1030. package/src/components/index.ts +149 -0
  1031. package/src/components/input/acai-ui-input-interface.ts +20 -0
  1032. package/src/components/input/acai-ui-input.vue +146 -0
  1033. package/src/components/modal/acai-ui-modal-interface.ts +19 -0
  1034. package/src/components/modal/acai-ui-modal-styles.scss +131 -0
  1035. package/src/components/modal/acai-ui-modal.vue +83 -0
  1036. package/src/components/pagination/acai-ui-pagination-interface.ts +8 -0
  1037. package/src/components/pagination/acai-ui-pagination.vue +36 -0
  1038. package/src/components/preferences/acai-ui-preferences-interface.ts +4 -0
  1039. package/src/components/preferences/acai-ui-preferences-styles.scss +387 -0
  1040. package/src/components/preferences/acai-ui-preferences.vue +349 -0
  1041. package/src/components/progress/acai-ui-progress-interface.ts +20 -0
  1042. package/src/components/progress/acai-ui-progress.vue +124 -0
  1043. package/src/components/radio/acai-ui-radio-interface.ts +14 -0
  1044. package/src/components/radio/acai-ui-radio.vue +78 -0
  1045. package/src/components/section/acai-ui-section-styles.scss +93 -0
  1046. package/src/components/section/acai-ui-section.vue +134 -0
  1047. package/src/components/select/acai-ui-select-interface.ts +18 -0
  1048. package/src/components/select/acai-ui-select.vue +322 -0
  1049. package/src/components/session-clock/acai-ui-session-clock.vue +111 -0
  1050. package/src/components/stepper/acai-ui-step-interface.ts +18 -0
  1051. package/src/components/stepper/acai-ui-step.vue +37 -0
  1052. package/src/components/stepper/acai-ui-stepper-interface.ts +56 -0
  1053. package/src/components/stepper/acai-ui-stepper-styles.scss +222 -0
  1054. package/src/components/stepper/acai-ui-stepper.vue +231 -0
  1055. package/src/components/swagger/acai-ui-swagger-interface.ts +54 -0
  1056. package/src/components/swagger/acai-ui-swagger-operacao.vue +372 -0
  1057. package/src/components/swagger/acai-ui-swagger-requisicao.ts +272 -0
  1058. package/src/components/swagger/acai-ui-swagger-schema.vue +36 -0
  1059. package/src/components/swagger/acai-ui-swagger-styles.scss +883 -0
  1060. package/src/components/swagger/acai-ui-swagger.vue +349 -0
  1061. package/src/components/swagger/openapi-normalizar.ts +514 -0
  1062. package/src/components/swagger/openapi-tipos.ts +198 -0
  1063. package/src/components/table/acai-ui-table-interface.ts +60 -0
  1064. package/src/components/table/acai-ui-table-justificativa.vue +135 -0
  1065. package/src/components/table/acai-ui-table-styles.scss +293 -0
  1066. package/src/components/table/acai-ui-table.vue +340 -0
  1067. package/src/components/tabs/acai-ui-tab.vue +10 -0
  1068. package/src/components/tabs/acai-ui-tabs-interface.ts +48 -0
  1069. package/src/components/tabs/acai-ui-tabs-styles.scss +78 -0
  1070. package/src/components/tabs/acai-ui-tabs.vue +137 -0
  1071. package/src/components/time/acai-ui-time-interface.ts +14 -0
  1072. package/src/components/time/acai-ui-time.vue +86 -0
  1073. package/src/components/toggle/acai-ui-toggle-interface.ts +13 -0
  1074. package/src/components/toggle/acai-ui-toggle.vue +162 -0
  1075. package/src/components/tooltip/acai-ui-tooltip-interface.ts +11 -0
  1076. package/src/components/tooltip/acai-ui-tooltip-styles.scss +104 -0
  1077. package/src/components/tooltip/acai-ui-tooltip.vue +90 -0
  1078. package/src/components/user-menu/acai-ui-user-menu-interface.ts +13 -0
  1079. package/src/components/user-menu/acai-ui-user-menu-styles.scss +125 -0
  1080. package/src/components/user-menu/acai-ui-user-menu.vue +139 -0
  1081. package/src/components/validation/acai-ui-validation.vue +236 -0
  1082. package/src/constants/chart-paleta.ts +162 -0
  1083. package/src/constants/efeitos.ts +24 -0
  1084. package/src/constants/index.ts +24 -0
  1085. package/src/constants/lista-icons.ts +156 -0
  1086. package/src/constants/medidas-espacos.ts +15 -0
  1087. package/src/constants/radius.ts +15 -0
  1088. package/src/constants/status-badge.ts +44 -0
  1089. package/src/env.d.ts +7 -0
  1090. package/src/hooks/filtros-url-internos.ts +497 -0
  1091. package/src/hooks/index.ts +22 -0
  1092. package/src/hooks/notify.ts +18 -0
  1093. package/src/hooks/use-contador-sessao.ts +95 -0
  1094. package/src/hooks/use-filtros-na-url.ts +174 -0
  1095. package/src/hooks/use-leitura-voz.ts +346 -0
  1096. package/src/hooks/use-listagem-na-url.ts +614 -0
  1097. package/src/hooks/use-preferencias.ts +152 -0
  1098. package/src/hooks/use-repasse-quasar.ts +63 -0
  1099. package/src/hooks/use-tamanho-elemento.ts +107 -0
  1100. package/src/hooks/use-tela.ts +114 -0
  1101. package/src/hooks/use-validacao-visual.ts +189 -0
  1102. package/src/index.ts +30 -0
  1103. package/src/plugin.ts +134 -0
  1104. package/src/scss/_badge.scss +12 -0
  1105. package/src/scss/_breakpoints.scss +102 -0
  1106. package/src/scss/_color-utilities.scss +105 -0
  1107. package/src/scss/_controls.scss +135 -0
  1108. package/src/scss/_ds-input-base.scss +302 -0
  1109. package/src/scss/_ds-picker-m3.scss +179 -0
  1110. package/src/scss/_effects.scss +42 -0
  1111. package/src/scss/_overlays.scss +13 -0
  1112. package/src/scss/_radius.scss +24 -0
  1113. package/src/scss/_reset.scss +60 -0
  1114. package/src/scss/_scrollbar.scss +78 -0
  1115. package/src/scss/_spacing.scss +15 -0
  1116. package/src/scss/_themes.scss +493 -0
  1117. package/src/scss/_typography.scss +50 -0
  1118. package/src/scss/_utilities.scss +75 -0
  1119. package/src/scss/_variables.scss +143 -0
  1120. package/src/scss/api.scss +77 -0
  1121. package/src/scss/tokens.scss +13 -0
  1122. package/src/styles-global.scss +30 -0
  1123. package/src/utils/date-utils.ts +128 -0
  1124. package/src/utils/dialog-utils.ts +59 -0
  1125. package/src/utils/file-utils.ts +85 -0
  1126. package/src/utils/filtro-input.ts +41 -0
  1127. package/src/utils/form-rules.ts +202 -0
  1128. package/src/utils/formatadores.ts +97 -0
  1129. package/src/utils/gerador-id.ts +29 -0
  1130. package/src/utils/hint-mensagem.ts +25 -0
  1131. package/src/utils/index.ts +32 -0
  1132. package/src/utils/limpar-campos.ts +94 -0
  1133. package/src/utils/masks.ts +19 -0
  1134. package/src/utils/medidas-util.ts +5 -0
  1135. package/src/utils/normalizar-label.ts +9 -0
  1136. package/src/utils/scroll-elemento.ts +34 -0
  1137. package/src/utils/validar-campo.ts +27 -0
  1138. package/src/utils/validar-documentos.ts +86 -0
  1139. package/src/utils/vnode-slot.ts +74 -0
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const estaVazio = (v) => v === null || v === void 0 || typeof v === "string" && v.trim() === "";
4
+ const temTexto = (v) => typeof v === "string" && v.trim().length > 0;
5
+ const temIdValido = (v) => typeof v === "number" && v > 0;
6
+ const ehArquivo = (v) => {
7
+ const possuiFile = typeof globalThis !== "undefined" && "File" in globalThis;
8
+ if (possuiFile) {
9
+ const ConstrutorArquivo = globalThis.File;
10
+ return v instanceof ConstrutorArquivo;
11
+ }
12
+ return typeof v === "object" && v !== null && Object.prototype.toString.call(v) === "[object File]";
13
+ };
14
+ const ehObjeto = (v) => typeof v === "object" && v !== null;
15
+ exports.ehArquivo = ehArquivo;
16
+ exports.ehObjeto = ehObjeto;
17
+ exports.estaVazio = estaVazio;
18
+ exports.temIdValido = temIdValido;
19
+ exports.temTexto = temTexto;
20
+ //# sourceMappingURL=index85.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index85.cjs","sources":["../src/utils/validar-campo.ts"],"sourcesContent":["export const estaVazio = (v: unknown): boolean =>\n v === null || v === undefined || (typeof v === 'string' && v.trim() === '')\n\nexport const temValor = (v: unknown): boolean => {\n if (v === null || v === undefined) return false\n if (typeof v === 'string') return v.trim() !== ''\n if (typeof v === 'number' && Number.isNaN(v)) return false\n return true\n}\n\nexport const temTexto = (v?: string): boolean => typeof v === 'string' && v.trim().length > 0\n\nexport const temIdValido = (v?: number): boolean => typeof v === 'number' && v > 0\n\ntype TipoConstrutorDeArquivo = new (...args: never[]) => File\n\nexport const ehArquivo = (v: unknown): v is File => {\n const possuiFile = typeof globalThis !== 'undefined' && 'File' in globalThis\n if (possuiFile) {\n const ConstrutorArquivo = (globalThis as unknown as { File: TipoConstrutorDeArquivo }).File\n return v instanceof ConstrutorArquivo\n }\n return typeof v === 'object' && v !== null && Object.prototype.toString.call(v) === '[object File]'\n}\n\nexport const ehObjeto = (v: unknown): v is Record<string, unknown> =>\n typeof v === 'object' && v !== null\n"],"names":[],"mappings":";;AAAO,MAAM,YAAY,CAAC,MACxB,MAAM,QAAQ,MAAM,UAAc,OAAO,MAAM,YAAY,EAAE,KAAA,MAAW;AASnE,MAAM,WAAW,CAAC,MAAwB,OAAO,MAAM,YAAY,EAAE,KAAA,EAAO,SAAS;AAErF,MAAM,cAAc,CAAC,MAAwB,OAAO,MAAM,YAAY,IAAI;AAI1E,MAAM,YAAY,CAAC,MAA0B;AAClD,QAAM,aAAa,OAAO,eAAe,eAAe,UAAU;AAClE,MAAI,YAAY;AACd,UAAM,oBAAqB,WAA4D;AACvF,WAAO,aAAa;AAAA,EACtB;AACA,SAAO,OAAO,MAAM,YAAY,MAAM,QAAQ,OAAO,UAAU,SAAS,KAAK,CAAC,MAAM;AACtF;AAEO,MAAM,WAAW,CAAC,MACvB,OAAO,MAAM,YAAY,MAAM;;;;;;"}
@@ -0,0 +1,20 @@
1
+ const estaVazio = (v) => v === null || v === void 0 || typeof v === "string" && v.trim() === "";
2
+ const temTexto = (v) => typeof v === "string" && v.trim().length > 0;
3
+ const temIdValido = (v) => typeof v === "number" && v > 0;
4
+ const ehArquivo = (v) => {
5
+ const possuiFile = typeof globalThis !== "undefined" && "File" in globalThis;
6
+ if (possuiFile) {
7
+ const ConstrutorArquivo = globalThis.File;
8
+ return v instanceof ConstrutorArquivo;
9
+ }
10
+ return typeof v === "object" && v !== null && Object.prototype.toString.call(v) === "[object File]";
11
+ };
12
+ const ehObjeto = (v) => typeof v === "object" && v !== null;
13
+ export {
14
+ ehArquivo,
15
+ ehObjeto,
16
+ estaVazio,
17
+ temIdValido,
18
+ temTexto
19
+ };
20
+ //# sourceMappingURL=index85.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index85.mjs","sources":["../src/utils/validar-campo.ts"],"sourcesContent":["export const estaVazio = (v: unknown): boolean =>\n v === null || v === undefined || (typeof v === 'string' && v.trim() === '')\n\nexport const temValor = (v: unknown): boolean => {\n if (v === null || v === undefined) return false\n if (typeof v === 'string') return v.trim() !== ''\n if (typeof v === 'number' && Number.isNaN(v)) return false\n return true\n}\n\nexport const temTexto = (v?: string): boolean => typeof v === 'string' && v.trim().length > 0\n\nexport const temIdValido = (v?: number): boolean => typeof v === 'number' && v > 0\n\ntype TipoConstrutorDeArquivo = new (...args: never[]) => File\n\nexport const ehArquivo = (v: unknown): v is File => {\n const possuiFile = typeof globalThis !== 'undefined' && 'File' in globalThis\n if (possuiFile) {\n const ConstrutorArquivo = (globalThis as unknown as { File: TipoConstrutorDeArquivo }).File\n return v instanceof ConstrutorArquivo\n }\n return typeof v === 'object' && v !== null && Object.prototype.toString.call(v) === '[object File]'\n}\n\nexport const ehObjeto = (v: unknown): v is Record<string, unknown> =>\n typeof v === 'object' && v !== null\n"],"names":[],"mappings":"AAAO,MAAM,YAAY,CAAC,MACxB,MAAM,QAAQ,MAAM,UAAc,OAAO,MAAM,YAAY,EAAE,KAAA,MAAW;AASnE,MAAM,WAAW,CAAC,MAAwB,OAAO,MAAM,YAAY,EAAE,KAAA,EAAO,SAAS;AAErF,MAAM,cAAc,CAAC,MAAwB,OAAO,MAAM,YAAY,IAAI;AAI1E,MAAM,YAAY,CAAC,MAA0B;AAClD,QAAM,aAAa,OAAO,eAAe,eAAe,UAAU;AAClE,MAAI,YAAY;AACd,UAAM,oBAAqB,WAA4D;AACvF,WAAO,aAAa;AAAA,EACtB;AACA,SAAO,OAAO,MAAM,YAAY,MAAM,QAAQ,OAAO,UAAU,SAAS,KAAK,CAAC,MAAM;AACtF;AAEO,MAAM,WAAW,CAAC,MACvB,OAAO,MAAM,YAAY,MAAM;"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const generatedIds = /* @__PURE__ */ new Set();
4
+ function gerarId(label, tipo) {
5
+ if (!label) return `default-${tipo}`;
6
+ const baseId = label.toLowerCase().trim().normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/\s+/g, "-").replace(/[^a-z0-9-]/g, "");
7
+ let uniqueId = `${baseId}-${tipo}`;
8
+ let counter = 0;
9
+ while (generatedIds.has(uniqueId)) {
10
+ counter += 1;
11
+ uniqueId = `${baseId}-${counter}-${tipo}`;
12
+ }
13
+ generatedIds.add(uniqueId);
14
+ return uniqueId;
15
+ }
16
+ function resetGeneratedIds() {
17
+ generatedIds.clear();
18
+ }
19
+ exports.gerarId = gerarId;
20
+ exports.resetGeneratedIds = resetGeneratedIds;
21
+ //# sourceMappingURL=index86.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index86.cjs","sources":["../src/utils/gerador-id.ts"],"sourcesContent":["const generatedIds: Set<string> = new Set()\n\nexport function gerarId(label: string, tipo: string): string {\n if (!label) return `default-${tipo}`\n\n const baseId = label\n .toLowerCase()\n .trim()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/\\s+/g, '-')\n .replace(/[^a-z0-9-]/g, '')\n\n let uniqueId = `${baseId}-${tipo}`\n let counter = 0\n\n while (generatedIds.has(uniqueId)) {\n counter += 1\n uniqueId = `${baseId}-${counter}-${tipo}`\n }\n\n generatedIds.add(uniqueId)\n\n return uniqueId\n}\n\nexport function resetGeneratedIds(): void {\n generatedIds.clear()\n}\n"],"names":[],"mappings":";;AAAA,MAAM,mCAAgC,IAAA;AAE/B,SAAS,QAAQ,OAAe,MAAsB;AAC3D,MAAI,CAAC,MAAO,QAAO,WAAW,IAAI;AAElC,QAAM,SAAS,MACZ,YAAA,EACA,OACA,UAAU,KAAK,EACf,QAAQ,oBAAoB,EAAE,EAC9B,QAAQ,QAAQ,GAAG,EACnB,QAAQ,eAAe,EAAE;AAE5B,MAAI,WAAW,GAAG,MAAM,IAAI,IAAI;AAChC,MAAI,UAAU;AAEd,SAAO,aAAa,IAAI,QAAQ,GAAG;AACjC,eAAW;AACX,eAAW,GAAG,MAAM,IAAI,OAAO,IAAI,IAAI;AAAA,EACzC;AAEA,eAAa,IAAI,QAAQ;AAEzB,SAAO;AACT;AAEO,SAAS,oBAA0B;AACxC,eAAa,MAAA;AACf;;;"}
@@ -0,0 +1,21 @@
1
+ const generatedIds = /* @__PURE__ */ new Set();
2
+ function gerarId(label, tipo) {
3
+ if (!label) return `default-${tipo}`;
4
+ const baseId = label.toLowerCase().trim().normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/\s+/g, "-").replace(/[^a-z0-9-]/g, "");
5
+ let uniqueId = `${baseId}-${tipo}`;
6
+ let counter = 0;
7
+ while (generatedIds.has(uniqueId)) {
8
+ counter += 1;
9
+ uniqueId = `${baseId}-${counter}-${tipo}`;
10
+ }
11
+ generatedIds.add(uniqueId);
12
+ return uniqueId;
13
+ }
14
+ function resetGeneratedIds() {
15
+ generatedIds.clear();
16
+ }
17
+ export {
18
+ gerarId,
19
+ resetGeneratedIds
20
+ };
21
+ //# sourceMappingURL=index86.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index86.mjs","sources":["../src/utils/gerador-id.ts"],"sourcesContent":["const generatedIds: Set<string> = new Set()\n\nexport function gerarId(label: string, tipo: string): string {\n if (!label) return `default-${tipo}`\n\n const baseId = label\n .toLowerCase()\n .trim()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/\\s+/g, '-')\n .replace(/[^a-z0-9-]/g, '')\n\n let uniqueId = `${baseId}-${tipo}`\n let counter = 0\n\n while (generatedIds.has(uniqueId)) {\n counter += 1\n uniqueId = `${baseId}-${counter}-${tipo}`\n }\n\n generatedIds.add(uniqueId)\n\n return uniqueId\n}\n\nexport function resetGeneratedIds(): void {\n generatedIds.clear()\n}\n"],"names":[],"mappings":"AAAA,MAAM,mCAAgC,IAAA;AAE/B,SAAS,QAAQ,OAAe,MAAsB;AAC3D,MAAI,CAAC,MAAO,QAAO,WAAW,IAAI;AAElC,QAAM,SAAS,MACZ,YAAA,EACA,OACA,UAAU,KAAK,EACf,QAAQ,oBAAoB,EAAE,EAC9B,QAAQ,QAAQ,GAAG,EACnB,QAAQ,eAAe,EAAE;AAE5B,MAAI,WAAW,GAAG,MAAM,IAAI,IAAI;AAChC,MAAI,UAAU;AAEd,SAAO,aAAa,IAAI,QAAQ,GAAG;AACjC,eAAW;AACX,eAAW,GAAG,MAAM,IAAI,OAAO,IAAI,IAAI;AAAA,EACzC;AAEA,eAAa,IAAI,QAAQ;AAEzB,SAAO;AACT;AAEO,SAAS,oBAA0B;AACxC,eAAa,MAAA;AACf;"}
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const vue = require("vue");
4
+ const filtrosUrlInternos = require("./index180.cjs");
5
+ const cache = /* @__PURE__ */ new Map();
6
+ let proximaInstancia = 0;
7
+ const noServidor = () => typeof window === "undefined";
8
+ function invalidarListagens(rota) {
9
+ if (rota === void 0) {
10
+ cache.clear();
11
+ return;
12
+ }
13
+ for (const chave of [...cache.keys()]) {
14
+ if (chave === rota || chave.startsWith(`${rota}::`)) cache.delete(chave);
15
+ }
16
+ }
17
+ function useListagemNaUrl(opcoes) {
18
+ var _a;
19
+ const {
20
+ molde: fabricaMolde,
21
+ buscar,
22
+ tipos = {},
23
+ excluir = [],
24
+ prefixo = "",
25
+ chavePagina = "pagina",
26
+ paginacao = "servidor",
27
+ itensPorPagina = 10,
28
+ buscarAoMontar = true
29
+ } = opcoes;
30
+ const fatiaNoCliente = paginacao === "cliente";
31
+ const porPagina = Math.max(1, Math.trunc(itensPorPagina));
32
+ const adaptador = filtrosUrlInternos.criarAdaptador();
33
+ const mapa = filtrosUrlInternos.criarMapa(filtrosUrlInternos.clonarMolde(fabricaMolde()), { excluir, tipos, prefixo });
34
+ const mapaChave = filtrosUrlInternos.criarMapa(filtrosUrlInternos.clonarMolde(fabricaMolde()), { tipos, prefixo });
35
+ const chavePaginaUrl = `${prefixo}${chavePagina}`;
36
+ const chaveCache = `${adaptador.rota()}::${prefixo}`;
37
+ const rotaDona = adaptador.rota();
38
+ const instancia = ++proximaInstancia;
39
+ const filtros = vue.ref(fabricaMolde());
40
+ const aplicados = vue.ref(fabricaMolde());
41
+ const pagina = vue.ref(1);
42
+ const linhas = vue.shallowRef([]);
43
+ const totalItens = vue.ref(0);
44
+ const totalPaginas = vue.ref(1);
45
+ const carregando = vue.ref(false);
46
+ const erro = vue.ref(null);
47
+ let chaveAtual = "";
48
+ let requisicaoAtual = 0;
49
+ function paramsDe(valores, numeroPagina) {
50
+ const base = adaptador.ler();
51
+ base.delete(chavePaginaUrl);
52
+ mapa.removerExcluidas(base);
53
+ const params = filtrosUrlInternos.escreverNaUrl(mapa, base, valores);
54
+ if (numeroPagina > 1) params.set(chavePaginaUrl, String(numeroPagina));
55
+ return params;
56
+ }
57
+ function chaveDe(params) {
58
+ const dosFiltros = filtrosUrlInternos.assinatura(mapa, params);
59
+ const daPagina = params.get(chavePaginaUrl) ?? "1";
60
+ return `${dosFiltros}|${chavePaginaUrl}=${daPagina}`;
61
+ }
62
+ function chaveDaBusca(valores, numeroPagina) {
63
+ const params = filtrosUrlInternos.escreverNaUrl(mapaChave, new URLSearchParams(), valores);
64
+ const dosFiltros = filtrosUrlInternos.assinatura(mapaChave, params);
65
+ if (fatiaNoCliente) return dosFiltros;
66
+ return `${dosFiltros}|${chavePaginaUrl}=${numeroPagina}`;
67
+ }
68
+ function paginaDe(params) {
69
+ const bruto = Number(params.get(chavePaginaUrl));
70
+ return Number.isFinite(bruto) && bruto >= 1 ? Math.trunc(bruto) : 1;
71
+ }
72
+ function aplicarResultado(resultado, valores, numeroPagina) {
73
+ if (fatiaNoCliente) {
74
+ const todas = resultado.linhas;
75
+ totalItens.value = todas.length;
76
+ totalPaginas.value = Math.max(1, Math.ceil(todas.length / porPagina));
77
+ const inicio = (numeroPagina - 1) * porPagina;
78
+ linhas.value = todas.slice(inicio, inicio + porPagina);
79
+ } else {
80
+ linhas.value = resultado.linhas;
81
+ totalItens.value = resultado.totalItens ?? resultado.linhas.length;
82
+ totalPaginas.value = resultado.totalPaginas ?? 1;
83
+ }
84
+ aplicados.value = filtrosUrlInternos.clonarMolde(valores);
85
+ }
86
+ function avisarTotaisIgnorados(resultado) {
87
+ return;
88
+ }
89
+ async function executar(valores, numeroPagina) {
90
+ if (noServidor()) return;
91
+ const chave = chaveDaBusca(valores, numeroPagina);
92
+ const entrada = cache.get(chaveCache);
93
+ if (entrada && entrada.chave === chave) {
94
+ aplicarResultado(entrada.resultado, valores, numeroPagina);
95
+ erro.value = null;
96
+ return;
97
+ }
98
+ const meuTicket = ++requisicaoAtual;
99
+ carregando.value = true;
100
+ erro.value = null;
101
+ try {
102
+ const resultado = await buscar({ filtros: filtrosUrlInternos.clonarMolde(valores), pagina: numeroPagina });
103
+ if (meuTicket !== requisicaoAtual) return;
104
+ avisarTotaisIgnorados(resultado);
105
+ aplicarResultado(resultado, valores, numeroPagina);
106
+ cache.set(chaveCache, { chave, resultado, instancia });
107
+ } catch (falha) {
108
+ if (meuTicket !== requisicaoAtual) return;
109
+ erro.value = falha;
110
+ } finally {
111
+ if (meuTicket === requisicaoAtual) carregando.value = false;
112
+ }
113
+ }
114
+ function naRotaDona() {
115
+ return adaptador.rota() === rotaDona;
116
+ }
117
+ function aplicar(valores, numeroPagina, modo) {
118
+ if (!naRotaDona()) return;
119
+ const params = paramsDe(valores, numeroPagina);
120
+ const chave = chaveDe(params);
121
+ filtros.value = valores;
122
+ pagina.value = numeroPagina;
123
+ chaveAtual = chave;
124
+ if (modo !== "nenhum") adaptador.gravar(params, modo);
125
+ void executar(valores, numeroPagina);
126
+ }
127
+ function pesquisar() {
128
+ aplicar(filtrosUrlInternos.clonarMolde(filtros.value), 1, "push");
129
+ }
130
+ function limpar() {
131
+ aplicar(fabricaMolde(), 1, "push");
132
+ }
133
+ async function recarregar() {
134
+ cache.delete(chaveCache);
135
+ await executar(filtros.value, pagina.value);
136
+ }
137
+ function invalidar() {
138
+ cache.delete(chaveCache);
139
+ }
140
+ const paramsIniciais = adaptador.ler();
141
+ const doUrl = filtrosUrlInternos.lerDaUrl(mapa, paramsIniciais, filtros.value);
142
+ const hidratou = Object.keys(doUrl).length > 0 || paramsIniciais.has(chavePaginaUrl);
143
+ if (hidratou) {
144
+ aplicar({ ...filtros.value, ...doUrl }, paginaDe(paramsIniciais), "nenhum");
145
+ } else if (buscarAoMontar) {
146
+ aplicar(filtros.value, 1, "nenhum");
147
+ } else {
148
+ chaveAtual = chaveDe(paramsDe(filtros.value, 1));
149
+ }
150
+ const parar = (_a = adaptador.observar) == null ? void 0 : _a.call(adaptador, () => {
151
+ if (!naRotaDona()) return;
152
+ const params = adaptador.ler();
153
+ const chave = chaveDe(params);
154
+ if (chave === chaveAtual) return;
155
+ const alteracoes = filtrosUrlInternos.lerDaUrl(mapa, params, fabricaMolde());
156
+ aplicar({ ...fabricaMolde(), ...alteracoes }, paginaDe(params), "nenhum");
157
+ });
158
+ if (parar) vue.onScopeDispose(parar);
159
+ const paginaModel = vue.computed({
160
+ get: () => pagina.value,
161
+ set: (nova) => {
162
+ if (nova === pagina.value) return;
163
+ aplicar(filtrosUrlInternos.clonarMolde(filtros.value), nova, "replace");
164
+ }
165
+ });
166
+ const tabela = vue.computed(() => ({
167
+ rows: linhas.value,
168
+ totalItems: totalItens.value,
169
+ totalPages: totalPaginas.value,
170
+ skeleton: carregando.value
171
+ }));
172
+ return {
173
+ filtros,
174
+ aplicados,
175
+ pagina: paginaModel,
176
+ linhas,
177
+ totalItens,
178
+ totalPaginas,
179
+ carregando,
180
+ erro,
181
+ tabela,
182
+ pesquisar,
183
+ limpar,
184
+ recarregar,
185
+ invalidar,
186
+ hidratou
187
+ };
188
+ }
189
+ exports.invalidarListagens = invalidarListagens;
190
+ exports.useListagemNaUrl = useListagemNaUrl;
191
+ //# sourceMappingURL=index87.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index87.cjs","sources":["../src/hooks/use-listagem-na-url.ts"],"sourcesContent":["// Listagem cuja FONTE DA VERDADE é a URL.\n//\n// Feito para o combo `<acai-ui-form>` + `<acai-ui-table>`, que é o desenho de\n// toda listagem dos apps DETRAN. A diferença para o `useFiltrosNaUrl` é de quem\n// manda: lá a tela busca e a URL apenas anota o que foi buscado; aqui a URL é o\n// estado, e a tela é um reflexo dela.\n//\n// O que isso resolve, na ordem em que dói:\n//\n// 1. **Voltar funciona.** Trocar filtro é `push`, então o Voltar do navegador\n// desfaz a pesquisa em vez de sair da tela. Paginar é `replace`, senão sair\n// de uma listagem depois de folhear 8 páginas custaria 8 cliques no Voltar.\n// 2. **Voltar do detalhe não refaz a requisição.** A última pesquisa fica em\n// cache, chaveada pela própria query string. Mesma query = mesma resposta.\n// 3. **A busca não espera a navegação.** A requisição sai na hora, e a URL é\n// escrita em paralelo. Em app com `beforeEach` assíncrono (é o caso do\n// gestao-pessoas, que revalida sessão a cada navegação), amarrar a busca ao\n// router colocaria um round trip de rede na frente de toda pesquisa.\n//\n// 🔴 DADO PESSOAL: o que entra na URL entra no histórico do navegador, é colado\n// em conversa e cai no LOG DE ACESSO do servidor. CPF, RG e afins vão em\n// `excluir`. Vale o mesmo aviso do `useFiltrosNaUrl` — e aqui é mais grave,\n// porque `push` deixa rastro no histórico.\n\nimport { computed, onScopeDispose, ref, shallowRef, type ComputedRef, type Ref } from 'vue'\nimport {\n assinatura,\n clonarMolde,\n criarAdaptador,\n criarMapa,\n escreverNaUrl,\n lerDaUrl,\n type TipoFiltroUrl,\n} from './filtros-url-internos'\n\n/** O que a tela precisa devolver para a tabela se pintar. */\nexport interface ResultadoListagem<Linha> {\n linhas: Linha[]\n /** Total de registros no servidor. Sem ele, cai na contagem das linhas da página. */\n totalItens?: number\n /** Total de páginas. Sem ele, assume 1. */\n totalPaginas?: number\n}\n\n/** O que o hook entrega para a função de busca. Vem da URL, não do formulário. */\nexport interface ParametrosListagem<Filtros> {\n /** Filtros já convertidos pelos `tipos` — o que a URL de fato carrega. */\n filtros: Filtros\n /**\n * Página **1-based**, igual ao `v-model` do `<acai-ui-table>`.\n *\n * 🔴 **Com `paginacao: 'cliente'`, IGNORE.** Lá quem fatia é o hook, e a chave\n * do cache não inclui a página de propósito — é isso que faz folhear não\n * chamar `buscar`. Se a busca usar esta página nesse modo, a primeira fatia\n * pedida fica em cache e passa a ser devolvida para TODAS as páginas: dado\n * errado, sem erro nenhum. Nesse modo escreva `({ filtros }) => …`.\n */\n pagina: number\n}\n\nexport interface OpcoesListagemNaUrl<Filtros extends object, Linha> {\n /**\n * Fábrica do estado inicial dos filtros. **Função, não objeto**: ela é chamada\n * de novo no `limpar()`, e um objeto compartilhado voltaria já sujo da última\n * pesquisa.\n */\n molde: () => Filtros\n /**\n * A requisição. Recebe o que está na URL e devolve o que a tabela mostra.\n *\n * Erro aqui NÃO é engolido nem quebra a tela: as linhas atuais ficam onde\n * estão, `erro` recebe o que foi lançado e o resultado não vai pro cache.\n * Quem trata (notificação, retry) é a tela — o hook não sabe o que é um erro\n * aceitável no domínio dela.\n */\n buscar: (parametros: ParametrosListagem<Filtros>) => Promise<ResultadoListagem<Linha>>\n /** Tipo declarado por campo. Ver `useFiltrosNaUrl` — mesma regra e mesmo motivo. */\n tipos?: Readonly<Record<string, TipoFiltroUrl>>\n /** Chaves que NUNCA entram na URL (dado pessoal). Simétrico: também não são lidas. */\n excluir?: readonly string[]\n /** Prefixo das chaves. Só necessário com DUAS listagens na mesma rota. */\n prefixo?: string\n /** Nome da chave de página na URL. Default `'pagina'`. */\n chavePagina?: string\n /**\n * Quem fatia as páginas. Default `'servidor'`.\n *\n * - **`'servidor'`** — `buscar` recebe a página e devolve só ela. É o desenho\n * de API paginada (Spring e afins), e cada troca de página é uma requisição.\n * - **`'cliente'`** — `buscar` devolve o conjunto INTEIRO e o hook fatia. Uma\n * requisição por conjunto de filtros; folhear não chama `buscar` nenhuma vez.\n *\n * 🔴 `'cliente'` existe para fonte que **não pagina** — SOAP, arquivo, endpoint\n * legado que só sabe devolver tudo. Nesses casos paginar no servidor não é uma\n * escolha de desenho: refazer a chamada a cada clique de página é o custo\n * inteiro da consulta de novo (medido de 9 a 15s no SOAP do DETRAN).\n *\n * Não é atalho para fonte que pagina de verdade: com resultado grande, trazer\n * tudo para fatiar no navegador troca uma requisição pequena por uma enorme.\n */\n paginacao?: 'servidor' | 'cliente'\n /**\n * Quantas linhas por página. Default `10`.\n *\n * ⚠️ **Só vale com `paginacao: 'cliente'`** — quem fatia no modo servidor é o\n * servidor, e o hook não tem como impor tamanho de página a ele. Declarar aqui\n * junto de `'servidor'` avisa em DEV e não faz nada.\n */\n itensPorPagina?: number\n /**\n * Buscar ao montar quando a URL está vazia? Default `true` — é o que toda\n * listagem dos apps faz hoje (`onMounted(buscar)`). Passe `false` na tela que\n * só deve buscar depois que a pessoa pesquisar.\n *\n * Com filtro na URL o hook busca de qualquer jeito: foi pedido explicitamente.\n */\n buscarAoMontar?: boolean\n}\n\nexport interface ListagemNaUrl<Filtros extends object, Linha> {\n /**\n * Rascunho do formulário — é aqui que os campos dão `v-model`.\n *\n * É rascunho de propósito: digitar não pesquisa e não mexe na URL. O que está\n * na URL é a pesquisa APLICADA, e as duas só se encontram no `pesquisar()`.\n */\n filtros: Ref<Filtros>\n /**\n * Os filtros que produziram as LINHAS que estão na tela — não o rascunho.\n *\n * Serve pra tudo que precisa acompanhar o resultado exibido em vez do que a\n * pessoa está digitando. O caso real: listagem cujas COLUNAS dependem do\n * filtro (situação `Ativo`/`Desligado` mostra ou não \"Motivo de saída\"). Com\n * `filtros` o cabeçalho mudaria no meio da digitação, antes das linhas\n * correspondentes chegarem.\n *\n * Só avança quando o resultado é aplicado — inclusive vindo do cache. Se a\n * busca falha, continua descrevendo as linhas que ficaram na tela.\n */\n aplicados: Ref<Filtros>\n /** `v-model` do `<acai-ui-table>`. Mudar aqui já pagina (e escreve na URL). */\n pagina: Ref<number>\n linhas: Ref<Linha[]>\n totalItens: Ref<number>\n totalPaginas: Ref<number>\n carregando: Ref<boolean>\n /** O que a última busca lançou, ou `null`. */\n erro: Ref<unknown>\n /** Props prontas do `<acai-ui-table>`: `v-bind=\"listagem.tabela\"`. */\n tabela: ComputedRef<{\n rows: Linha[]\n totalItems: number\n totalPages: number\n skeleton: boolean\n }>\n /** `@submit` do `<acai-ui-form>`. Aplica o rascunho, volta pra página 1. */\n pesquisar: () => void\n /** `@reset` do `<acai-ui-form>`. Devolve o molde e limpa a URL. */\n limpar: () => void\n /**\n * Refaz a requisição da pesquisa atual, ignorando o cache.\n *\n * É o que chamar depois de excluir uma linha na própria tela.\n */\n recarregar: () => Promise<void>\n /** Descarta o cache desta listagem sem refazer a busca agora. */\n invalidar: () => void\n /** `true` quando a tela abriu já com filtro na URL. */\n hidratou: boolean\n}\n\n/**\n * Cache da ÚLTIMA pesquisa de cada listagem.\n *\n * Fora do componente de propósito: o caso que ele existe pra resolver é\n * justamente ir no detalhe e voltar, e nesse caminho a tela DESMONTA. Cache\n * guardado no `setup` morreria exatamente quando seria útil.\n *\n * Uma entrada por listagem (rota + prefixo), e só a última pesquisa — foi a\n * decisão tomada: cobre ir-e-voltar, que é o caso real, sem virar um cache de\n * verdade com invalidação por chave, TTL e todo o custo de manter isso correto.\n */\ninterface EntradaCache {\n chave: string\n resultado: ResultadoListagem<unknown>\n /** Qual instância do hook gravou. Serve pro aviso de dado velho em DEV. */\n instancia: number\n}\n\nconst cache = new Map<string, EntradaCache>()\nlet proximaInstancia = 0\n\n/**\n * Estamos renderizando no SERVIDOR?\n *\n * 🔴 Isto existe porque o `cache` acima é um `Map` de MÓDULO. No navegador ele é\n * por aba e está correto. No Node do SSR ele é do PROCESSO: um objeto só para\n * todas as requisições de todas as pessoas. Chaveado por rota + assinatura dos\n * filtros, dois usuários com a mesma pesquisa passariam a compartilhar entrada —\n * e em app que restringe resultado por perfil, a resposta de um alimentaria a\n * tela do outro.\n *\n * Somado a isso, o `executar` é disparado sem espera (`void executar(...)`): no\n * servidor a requisição SAI, não chega a tempo do HTML, e o resultado cai no\n * cache compartilhado depois que a resposta já foi embora. Custo puro.\n *\n * As duas condições porque nenhuma sozinha cobre tudo: `import.meta.env.SSR` é\n * do Vite (pode não existir em outro empacotador) e `window` é o teste de\n * runtime que vale em qualquer lugar.\n */\nconst noServidor = (): boolean => import.meta.env.SSR === true || typeof window === 'undefined'\n\n/**\n * Descarta o cache de listagem.\n *\n * 🔴 **Chame depois de gravar.** O cache não tem como saber que outra tela\n * cadastrou, editou ou excluiu um registro que a listagem mostra — e sem isso a\n * pessoa salva, volta pra lista e vê o dado velho.\n *\n * ```ts\n * // na tela de cadastro, depois de salvar\n * await salvar()\n * invalidarListagens('/servidores') // ou sem argumento, pra derrubar todas\n * void router.push({ name: 'servidores' })\n * ```\n *\n * Sem argumento derruba tudo. É grosso, mas é o padrão seguro: o custo de\n * invalidar demais é uma requisição, e o de invalidar de menos é dado errado\n * na tela.\n */\nexport function invalidarListagens(rota?: string): void {\n if (rota === undefined) {\n cache.clear()\n return\n }\n for (const chave of [...cache.keys()]) {\n if (chave === rota || chave.startsWith(`${rota}::`)) cache.delete(chave)\n }\n}\n\nconst avisouCacheVelho = new Set<string>()\n\n/**\n * Listagem com a URL como fonte da verdade.\n *\n * ```ts\n * const listagem = useListagemNaUrl({\n * molde: filtrosServidoresIniciais,\n * excluir: ['pessoalCpf'],\n * tipos: { cargoId: 'number', progressoMinimo: 'number' },\n * buscar: async ({ filtros, pagina }) => {\n * const dados = await listarServidores(montarParametros(filtros, pagina))\n * return {\n * linhas: dados.content ?? [],\n * totalItens: dados.page?.totalElements,\n * totalPaginas: dados.page?.totalPages,\n * }\n * },\n * })\n * ```\n *\n * ```html\n * <acai-ui-form @submit=\"listagem.pesquisar()\" @reset=\"listagem.limpar()\">\n * <acai-ui-input v-model=\"listagem.filtros.value.pessoalNome\" label=\"Nome\" />\n * </acai-ui-form>\n *\n * <acai-ui-table v-model=\"listagem.pagina.value\" :columns=\"colunas\" v-bind=\"listagem.tabela.value\" />\n * ```\n *\n * Com `<script setup>`, desestruture — todos os campos são ref/computed e\n * continuam reativos: `const { filtros, pagina, tabela, pesquisar } = listagem`.\n */\nexport function useListagemNaUrl<Filtros extends object, Linha>(\n opcoes: OpcoesListagemNaUrl<Filtros, Linha>,\n): ListagemNaUrl<Filtros, Linha> {\n const {\n molde: fabricaMolde,\n buscar,\n tipos = {},\n excluir = [],\n prefixo = '',\n chavePagina = 'pagina',\n paginacao = 'servidor',\n itensPorPagina = 10,\n buscarAoMontar = true,\n } = opcoes\n\n const fatiaNoCliente = paginacao === 'cliente'\n // Guarda de divisão: `itensPorPagina: 0` faria `ceil(n/0)` virar Infinity e a\n // tabela anunciar infinitas páginas.\n const porPagina = Math.max(1, Math.trunc(itensPorPagina))\n\n if (import.meta.env.DEV && !fatiaNoCliente && opcoes.itensPorPagina !== undefined) {\n console.warn(\n \"[acai-ui] useListagemNaUrl: `itensPorPagina` só vale com `paginacao: 'cliente'`. \" +\n \"No modo servidor quem decide o tamanho da página é o servidor — esta opção não faz nada.\",\n )\n }\n\n const adaptador = criarAdaptador()\n const mapa = criarMapa(clonarMolde(fabricaMolde()), { excluir, tipos, prefixo })\n /**\n * Mapa SEM `excluir`, usado só pra chavear o cache.\n *\n * 🔴 Sem isso o cache mente. Filtro excluído muda a BUSCA mas não a URL, então\n * chavear pela URL faz \"pesquisar por CPF\" bater na entrada da pesquisa\n * anterior e devolver a lista inteira — resultado errado, sem erro nenhum.\n * A chave sai do ESTADO; a URL continua sem o dado pessoal.\n */\n const mapaChave = criarMapa(clonarMolde(fabricaMolde()), { tipos, prefixo })\n const chavePaginaUrl = `${prefixo}${chavePagina}`\n const chaveCache = `${adaptador.rota()}::${prefixo}`\n /**\n * A rota em que este hook nasceu.\n *\n * 🔴 Sem isto o hook age na rota que estiver ATIVA, não na dele. Ao sair da\n * listagem para o detalhe, o watcher da query dispara com a query do DESTINO,\n * e uma escrita atrasada (a tabela reposicionando a página quando o total\n * chega, por exemplo) grava os filtros e o `pagina` na URL do detalhe.\n *\n * Medido: sair de `/servidores?nome=ana&pagina=3` para\n * `/servidores/7?origem=servidores&origemLabel=Servidores` terminava em\n * `/servidores/7?origem=servidores&origemLabel=Servidores&pagina=2`. Isso suja\n * justamente a query de onde a trilha de breadcrumb do app lê a cadeia de\n * origem — e um `push` desses ainda cria entrada de histórico no detalhe,\n * quebrando o Voltar.\n */\n const rotaDona = adaptador.rota()\n const instancia = ++proximaInstancia\n\n const filtros = ref(fabricaMolde()) as Ref<Filtros>\n const aplicados = ref(fabricaMolde()) as Ref<Filtros>\n const pagina = ref(1)\n const linhas = shallowRef<Linha[]>([]) as Ref<Linha[]>\n const totalItens = ref(0)\n const totalPaginas = ref(1)\n const carregando = ref(false)\n const erro = ref<unknown>(null)\n\n /**\n * Assinatura da pesquisa que está NA TELA. É a chave do cache e o critério de\n * \"a URL mudou por fora\": se o que chegou na URL bate com isto, o hook mesmo\n * escreveu, e não há o que reagir.\n */\n let chaveAtual = ''\n /** Corrida: só a resposta da última busca disparada pode pintar a tabela. */\n let requisicaoAtual = 0\n /** Uma vez por listagem — o aviso é de código, não de dado. */\n let avisouTotais = false\n\n /** Estado (filtros + página) → os params da URL. */\n function paramsDe(valores: Filtros, numeroPagina: number): URLSearchParams {\n const base = adaptador.ler()\n base.delete(chavePaginaUrl)\n // Dado pessoal colado à mão na barra não sobrevive à primeira pesquisa —\n // com `push`, ele entraria em toda entrada seguinte do histórico.\n mapa.removerExcluidas(base)\n const params = escreverNaUrl(mapa, base, valores as Record<string, unknown>)\n // Página 1 fica FORA da URL, mesma regra do filtro no default: `?pagina=1`\n // seria ruído em toda listagem recém-aberta.\n if (numeroPagina > 1) params.set(chavePaginaUrl, String(numeroPagina))\n return params\n }\n\n /** Assinatura da URL — serve pra saber se a mudança veio de fora do hook. */\n function chaveDe(params: URLSearchParams): string {\n const dosFiltros = assinatura(mapa, params)\n const daPagina = params.get(chavePaginaUrl) ?? '1'\n return `${dosFiltros}|${chavePaginaUrl}=${daPagina}`\n }\n\n /**\n * Assinatura da BUSCA — inclui os filtros excluídos da URL. Chave do cache.\n *\n * 🔴 No modo cliente a PÁGINA fica de fora, e é essa ausência que faz o recurso\n * existir: a entrada do cache passa a valer para o conjunto inteiro, então\n * folhear cai no cache em vez de chamar `buscar`. No modo servidor a página\n * continua na chave — lá cada página é uma resposta diferente.\n */\n function chaveDaBusca(valores: Filtros, numeroPagina: number): string {\n const params = escreverNaUrl(mapaChave, new URLSearchParams(), valores as Record<string, unknown>)\n const dosFiltros = assinatura(mapaChave, params)\n if (fatiaNoCliente) return dosFiltros\n return `${dosFiltros}|${chavePaginaUrl}=${numeroPagina}`\n }\n\n function paginaDe(params: URLSearchParams): number {\n const bruto = Number(params.get(chavePaginaUrl))\n return Number.isFinite(bruto) && bruto >= 1 ? Math.trunc(bruto) : 1\n }\n\n /**\n * Recebe a página em vez de ler `pagina.value`.\n *\n * O `aplicar` grava o ref antes de chamar o `executar`, então ler de lá daria\n * o mesmo número hoje — mas amarraria o fatiamento à ordem de duas atribuições\n * distantes. Explícito não tem como sair de sincronia.\n */\n function aplicarResultado(\n resultado: ResultadoListagem<Linha>,\n valores: Filtros,\n numeroPagina: number,\n ): void {\n if (fatiaNoCliente) {\n const todas = resultado.linhas\n totalItens.value = todas.length\n // `max(1, …)` mantém \"1 página\" no resultado vazio, igual ao modo servidor\n // — tabela com 0 páginas não tem o que mostrar na paginação.\n totalPaginas.value = Math.max(1, Math.ceil(todas.length / porPagina))\n const inicio = (numeroPagina - 1) * porPagina\n // Página fora do intervalo (`?pagina=99` com 3 páginas) devolve lista\n // vazia. Não reposiciono pra última: isso exigiria escrever na URL durante\n // a aplicação do resultado, que é a classe de escrita atrasada que sujou a\n // URL da tela de destino na 1.63.2.\n linhas.value = todas.slice(inicio, inicio + porPagina)\n } else {\n linhas.value = resultado.linhas\n totalItens.value = resultado.totalItens ?? resultado.linhas.length\n totalPaginas.value = resultado.totalPaginas ?? 1\n }\n // Só aqui, junto das linhas: `aplicados` descreve o que está na tela. Mover\n // isto pro início da requisição faria o cabeçalho da tabela mudar enquanto\n // as linhas antigas ainda estão sendo exibidas.\n aplicados.value = clonarMolde(valores)\n }\n\n /**\n * No modo cliente os totais saem do tamanho do resultado, então `totalItens` e\n * `totalPaginas` devolvidos pela busca são ignorados. Avisa porque o erro\n * provável é copiar uma listagem de servidor e trocar só o `paginacao` — e o\n * sintoma seria uma contagem que não confere, sem erro nenhum.\n */\n function avisarTotaisIgnorados(resultado: ResultadoListagem<Linha>): void {\n if (!import.meta.env.DEV || !fatiaNoCliente) return\n if (resultado.totalItens === undefined && resultado.totalPaginas === undefined) return\n if (avisouTotais) return\n avisouTotais = true\n console.warn(\n \"[acai-ui] useListagemNaUrl: com `paginacao: 'cliente'` o hook conta as linhas que a \" +\n \"busca devolveu — `totalItens` e `totalPaginas` do resultado são ignorados. Devolva só `linhas`.\",\n )\n }\n\n async function executar(valores: Filtros, numeroPagina: number): Promise<void> {\n // 🔴 No servidor o hook para aqui: nem busca, nem lê, nem escreve o cache.\n // Os filtros JÁ foram hidratados da URL pelo `aplicar`, então o formulário\n // renderiza preenchido e a tabela renderiza vazia — que é exatamente o que o\n // cliente vai renderizar no primeiro quadro, antes de a busca dele voltar.\n // É isso que mantém a hidratação casando; buscar aqui produziria HTML com\n // linhas que o cliente não teria, e aí sim daria divergência.\n if (noServidor()) return\n\n const chave = chaveDaBusca(valores, numeroPagina)\n const entrada = cache.get(chaveCache)\n if (entrada && entrada.chave === chave) {\n // Servido do cache: nenhuma requisição.\n if (import.meta.env.DEV && entrada.instancia !== instancia && !avisouCacheVelho.has(chave)) {\n avisouCacheVelho.add(chave)\n console.info(\n `[acai-ui] useListagemNaUrl: \"${chaveCache}\" foi servida do cache da visita anterior. ` +\n 'Se alguma tela gravou dados desde então, chame invalidarListagens() depois de salvar.',\n )\n }\n aplicarResultado(entrada.resultado as ResultadoListagem<Linha>, valores, numeroPagina)\n erro.value = null\n return\n }\n\n const meuTicket = ++requisicaoAtual\n carregando.value = true\n erro.value = null\n try {\n const resultado = await buscar({ filtros: clonarMolde(valores), pagina: numeroPagina })\n // Resposta velha de uma pesquisa que o usuário já trocou: descarta.\n if (meuTicket !== requisicaoAtual) return\n avisarTotaisIgnorados(resultado)\n aplicarResultado(resultado, valores, numeroPagina)\n cache.set(chaveCache, { chave, resultado: resultado as ResultadoListagem<unknown>, instancia })\n } catch (falha) {\n if (meuTicket !== requisicaoAtual) return\n // Linhas ficam como estão: apagar a tabela por causa de um 500 tira da\n // pessoa o resultado que ela tinha, sem ganho nenhum.\n erro.value = falha\n } finally {\n if (meuTicket === requisicaoAtual) carregando.value = false\n }\n }\n\n /**\n * Aplica um estado: escreve a URL e dispara a busca.\n *\n * As duas coisas em paralelo, e a busca NÃO espera a navegação — ver o\n * cabeçalho do arquivo.\n */\n /** A tela ainda está no ar? Fora da rota dona o hook não escreve nem busca. */\n function naRotaDona(): boolean {\n return adaptador.rota() === rotaDona\n }\n\n function aplicar(\n valores: Filtros,\n numeroPagina: number,\n modo: 'push' | 'replace' | 'nenhum',\n ): void {\n // A navegação já saiu daqui: escrever agora grava os filtros desta listagem\n // na URL de OUTRA tela, e buscar seria requisição para uma tabela que\n // ninguém está vendo. Acontece de verdade — o `v-model` da tabela ainda\n // reposiciona a página enquanto o componente é desmontado.\n if (!naRotaDona()) return\n\n const params = paramsDe(valores, numeroPagina)\n const chave = chaveDe(params)\n\n filtros.value = valores\n pagina.value = numeroPagina\n chaveAtual = chave\n\n if (modo !== 'nenhum') adaptador.gravar(params, modo)\n void executar(valores, numeroPagina)\n }\n\n function pesquisar(): void {\n // Sempre volta pra página 1: manter a pessoa na página 7 de um resultado que\n // acabou de mudar é mostrar \"nenhum registro\" numa busca que tem resultado.\n aplicar(clonarMolde(filtros.value), 1, 'push')\n }\n\n function limpar(): void {\n aplicar(fabricaMolde(), 1, 'push')\n }\n\n async function recarregar(): Promise<void> {\n cache.delete(chaveCache)\n await executar(filtros.value, pagina.value)\n }\n\n function invalidar(): void {\n cache.delete(chaveCache)\n }\n\n // ── Entrada: a URL manda ────────────────────────────────────────────────────\n const paramsIniciais = adaptador.ler()\n const doUrl = lerDaUrl(mapa, paramsIniciais, filtros.value as Record<string, unknown>)\n const hidratou = Object.keys(doUrl).length > 0 || paramsIniciais.has(chavePaginaUrl)\n\n if (hidratou) {\n // `nenhum`: a URL já está do jeito certo — reescrevê-la no mount criaria uma\n // entrada de histórico duplicada e, num app com guard assíncrono, uma\n // navegação inútil a cada visita.\n aplicar({ ...filtros.value, ...doUrl } as Filtros, paginaDe(paramsIniciais), 'nenhum')\n } else if (buscarAoMontar) {\n aplicar(filtros.value, 1, 'nenhum')\n } else {\n chaveAtual = chaveDe(paramsDe(filtros.value, 1))\n }\n\n // ── URL mudando por fora: voltar/avançar, link, barra de endereço ───────────\n const parar = adaptador.observar?.(() => {\n // 🔴 A query mudou porque a navegação saiu daqui, não porque alguém mexeu\n // NESTA listagem. Sem esta linha o hook se re-hidrata a partir da query da\n // outra tela: o estado é zerado e uma requisição sai para uma tabela que\n // ninguém está vendo. O `aplicar` também se protege, mas parar aqui evita o\n // trabalho inteiro.\n if (!naRotaDona()) return\n\n const params = adaptador.ler()\n const chave = chaveDe(params)\n // Foi o próprio hook que escreveu — nada a fazer.\n if (chave === chaveAtual) return\n\n const alteracoes = lerDaUrl(mapa, params, fabricaMolde() as Record<string, unknown>)\n // Parte do MOLDE, não do estado atual: voltar pra uma URL sem `nome` tem que\n // limpar o campo nome, e não manter o que a pesquisa anterior tinha nele.\n aplicar({ ...fabricaMolde(), ...alteracoes } as Filtros, paginaDe(params), 'nenhum')\n })\n\n if (parar) onScopeDispose(parar)\n\n // ── Paginação: o `v-model` do table escreve aqui ────────────────────────────\n // Não é `watch(pagina)`: o próprio `aplicar` mexe em `pagina.value`, e o watch\n // reentraria a cada busca. A tabela chama isto por `v-model`, e só ela.\n const paginaModel = computed<number>({\n get: () => pagina.value,\n set: (nova) => {\n if (nova === pagina.value) return\n // `replace`: folhear 8 páginas não pode custar 8 cliques no Voltar.\n aplicar(clonarMolde(filtros.value), nova, 'replace')\n },\n })\n\n const tabela = computed(() => ({\n rows: linhas.value,\n totalItems: totalItens.value,\n totalPages: totalPaginas.value,\n skeleton: carregando.value,\n }))\n\n return {\n filtros,\n aplicados,\n pagina: paginaModel,\n linhas,\n totalItens,\n totalPaginas,\n carregando,\n erro,\n tabela,\n pesquisar,\n limpar,\n recarregar,\n invalidar,\n hidratou,\n }\n}\n"],"names":["criarAdaptador","criarMapa","clonarMolde","ref","shallowRef","escreverNaUrl","assinatura","lerDaUrl","computed"],"mappings":"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"}
@@ -0,0 +1,191 @@
1
+ import { ref, shallowRef, onScopeDispose, computed } from "vue";
2
+ import { criarAdaptador, criarMapa, clonarMolde, lerDaUrl, assinatura, escreverNaUrl } from "./index180.mjs";
3
+ const cache = /* @__PURE__ */ new Map();
4
+ let proximaInstancia = 0;
5
+ const noServidor = () => typeof window === "undefined";
6
+ function invalidarListagens(rota) {
7
+ if (rota === void 0) {
8
+ cache.clear();
9
+ return;
10
+ }
11
+ for (const chave of [...cache.keys()]) {
12
+ if (chave === rota || chave.startsWith(`${rota}::`)) cache.delete(chave);
13
+ }
14
+ }
15
+ function useListagemNaUrl(opcoes) {
16
+ var _a;
17
+ const {
18
+ molde: fabricaMolde,
19
+ buscar,
20
+ tipos = {},
21
+ excluir = [],
22
+ prefixo = "",
23
+ chavePagina = "pagina",
24
+ paginacao = "servidor",
25
+ itensPorPagina = 10,
26
+ buscarAoMontar = true
27
+ } = opcoes;
28
+ const fatiaNoCliente = paginacao === "cliente";
29
+ const porPagina = Math.max(1, Math.trunc(itensPorPagina));
30
+ const adaptador = criarAdaptador();
31
+ const mapa = criarMapa(clonarMolde(fabricaMolde()), { excluir, tipos, prefixo });
32
+ const mapaChave = criarMapa(clonarMolde(fabricaMolde()), { tipos, prefixo });
33
+ const chavePaginaUrl = `${prefixo}${chavePagina}`;
34
+ const chaveCache = `${adaptador.rota()}::${prefixo}`;
35
+ const rotaDona = adaptador.rota();
36
+ const instancia = ++proximaInstancia;
37
+ const filtros = ref(fabricaMolde());
38
+ const aplicados = ref(fabricaMolde());
39
+ const pagina = ref(1);
40
+ const linhas = shallowRef([]);
41
+ const totalItens = ref(0);
42
+ const totalPaginas = ref(1);
43
+ const carregando = ref(false);
44
+ const erro = ref(null);
45
+ let chaveAtual = "";
46
+ let requisicaoAtual = 0;
47
+ function paramsDe(valores, numeroPagina) {
48
+ const base = adaptador.ler();
49
+ base.delete(chavePaginaUrl);
50
+ mapa.removerExcluidas(base);
51
+ const params = escreverNaUrl(mapa, base, valores);
52
+ if (numeroPagina > 1) params.set(chavePaginaUrl, String(numeroPagina));
53
+ return params;
54
+ }
55
+ function chaveDe(params) {
56
+ const dosFiltros = assinatura(mapa, params);
57
+ const daPagina = params.get(chavePaginaUrl) ?? "1";
58
+ return `${dosFiltros}|${chavePaginaUrl}=${daPagina}`;
59
+ }
60
+ function chaveDaBusca(valores, numeroPagina) {
61
+ const params = escreverNaUrl(mapaChave, new URLSearchParams(), valores);
62
+ const dosFiltros = assinatura(mapaChave, params);
63
+ if (fatiaNoCliente) return dosFiltros;
64
+ return `${dosFiltros}|${chavePaginaUrl}=${numeroPagina}`;
65
+ }
66
+ function paginaDe(params) {
67
+ const bruto = Number(params.get(chavePaginaUrl));
68
+ return Number.isFinite(bruto) && bruto >= 1 ? Math.trunc(bruto) : 1;
69
+ }
70
+ function aplicarResultado(resultado, valores, numeroPagina) {
71
+ if (fatiaNoCliente) {
72
+ const todas = resultado.linhas;
73
+ totalItens.value = todas.length;
74
+ totalPaginas.value = Math.max(1, Math.ceil(todas.length / porPagina));
75
+ const inicio = (numeroPagina - 1) * porPagina;
76
+ linhas.value = todas.slice(inicio, inicio + porPagina);
77
+ } else {
78
+ linhas.value = resultado.linhas;
79
+ totalItens.value = resultado.totalItens ?? resultado.linhas.length;
80
+ totalPaginas.value = resultado.totalPaginas ?? 1;
81
+ }
82
+ aplicados.value = clonarMolde(valores);
83
+ }
84
+ function avisarTotaisIgnorados(resultado) {
85
+ return;
86
+ }
87
+ async function executar(valores, numeroPagina) {
88
+ if (noServidor()) return;
89
+ const chave = chaveDaBusca(valores, numeroPagina);
90
+ const entrada = cache.get(chaveCache);
91
+ if (entrada && entrada.chave === chave) {
92
+ aplicarResultado(entrada.resultado, valores, numeroPagina);
93
+ erro.value = null;
94
+ return;
95
+ }
96
+ const meuTicket = ++requisicaoAtual;
97
+ carregando.value = true;
98
+ erro.value = null;
99
+ try {
100
+ const resultado = await buscar({ filtros: clonarMolde(valores), pagina: numeroPagina });
101
+ if (meuTicket !== requisicaoAtual) return;
102
+ avisarTotaisIgnorados(resultado);
103
+ aplicarResultado(resultado, valores, numeroPagina);
104
+ cache.set(chaveCache, { chave, resultado, instancia });
105
+ } catch (falha) {
106
+ if (meuTicket !== requisicaoAtual) return;
107
+ erro.value = falha;
108
+ } finally {
109
+ if (meuTicket === requisicaoAtual) carregando.value = false;
110
+ }
111
+ }
112
+ function naRotaDona() {
113
+ return adaptador.rota() === rotaDona;
114
+ }
115
+ function aplicar(valores, numeroPagina, modo) {
116
+ if (!naRotaDona()) return;
117
+ const params = paramsDe(valores, numeroPagina);
118
+ const chave = chaveDe(params);
119
+ filtros.value = valores;
120
+ pagina.value = numeroPagina;
121
+ chaveAtual = chave;
122
+ if (modo !== "nenhum") adaptador.gravar(params, modo);
123
+ void executar(valores, numeroPagina);
124
+ }
125
+ function pesquisar() {
126
+ aplicar(clonarMolde(filtros.value), 1, "push");
127
+ }
128
+ function limpar() {
129
+ aplicar(fabricaMolde(), 1, "push");
130
+ }
131
+ async function recarregar() {
132
+ cache.delete(chaveCache);
133
+ await executar(filtros.value, pagina.value);
134
+ }
135
+ function invalidar() {
136
+ cache.delete(chaveCache);
137
+ }
138
+ const paramsIniciais = adaptador.ler();
139
+ const doUrl = lerDaUrl(mapa, paramsIniciais, filtros.value);
140
+ const hidratou = Object.keys(doUrl).length > 0 || paramsIniciais.has(chavePaginaUrl);
141
+ if (hidratou) {
142
+ aplicar({ ...filtros.value, ...doUrl }, paginaDe(paramsIniciais), "nenhum");
143
+ } else if (buscarAoMontar) {
144
+ aplicar(filtros.value, 1, "nenhum");
145
+ } else {
146
+ chaveAtual = chaveDe(paramsDe(filtros.value, 1));
147
+ }
148
+ const parar = (_a = adaptador.observar) == null ? void 0 : _a.call(adaptador, () => {
149
+ if (!naRotaDona()) return;
150
+ const params = adaptador.ler();
151
+ const chave = chaveDe(params);
152
+ if (chave === chaveAtual) return;
153
+ const alteracoes = lerDaUrl(mapa, params, fabricaMolde());
154
+ aplicar({ ...fabricaMolde(), ...alteracoes }, paginaDe(params), "nenhum");
155
+ });
156
+ if (parar) onScopeDispose(parar);
157
+ const paginaModel = computed({
158
+ get: () => pagina.value,
159
+ set: (nova) => {
160
+ if (nova === pagina.value) return;
161
+ aplicar(clonarMolde(filtros.value), nova, "replace");
162
+ }
163
+ });
164
+ const tabela = computed(() => ({
165
+ rows: linhas.value,
166
+ totalItems: totalItens.value,
167
+ totalPages: totalPaginas.value,
168
+ skeleton: carregando.value
169
+ }));
170
+ return {
171
+ filtros,
172
+ aplicados,
173
+ pagina: paginaModel,
174
+ linhas,
175
+ totalItens,
176
+ totalPaginas,
177
+ carregando,
178
+ erro,
179
+ tabela,
180
+ pesquisar,
181
+ limpar,
182
+ recarregar,
183
+ invalidar,
184
+ hidratou
185
+ };
186
+ }
187
+ export {
188
+ invalidarListagens,
189
+ useListagemNaUrl
190
+ };
191
+ //# sourceMappingURL=index87.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index87.mjs","sources":["../src/hooks/use-listagem-na-url.ts"],"sourcesContent":["// Listagem cuja FONTE DA VERDADE é a URL.\n//\n// Feito para o combo `<acai-ui-form>` + `<acai-ui-table>`, que é o desenho de\n// toda listagem dos apps DETRAN. A diferença para o `useFiltrosNaUrl` é de quem\n// manda: lá a tela busca e a URL apenas anota o que foi buscado; aqui a URL é o\n// estado, e a tela é um reflexo dela.\n//\n// O que isso resolve, na ordem em que dói:\n//\n// 1. **Voltar funciona.** Trocar filtro é `push`, então o Voltar do navegador\n// desfaz a pesquisa em vez de sair da tela. Paginar é `replace`, senão sair\n// de uma listagem depois de folhear 8 páginas custaria 8 cliques no Voltar.\n// 2. **Voltar do detalhe não refaz a requisição.** A última pesquisa fica em\n// cache, chaveada pela própria query string. Mesma query = mesma resposta.\n// 3. **A busca não espera a navegação.** A requisição sai na hora, e a URL é\n// escrita em paralelo. Em app com `beforeEach` assíncrono (é o caso do\n// gestao-pessoas, que revalida sessão a cada navegação), amarrar a busca ao\n// router colocaria um round trip de rede na frente de toda pesquisa.\n//\n// 🔴 DADO PESSOAL: o que entra na URL entra no histórico do navegador, é colado\n// em conversa e cai no LOG DE ACESSO do servidor. CPF, RG e afins vão em\n// `excluir`. Vale o mesmo aviso do `useFiltrosNaUrl` — e aqui é mais grave,\n// porque `push` deixa rastro no histórico.\n\nimport { computed, onScopeDispose, ref, shallowRef, type ComputedRef, type Ref } from 'vue'\nimport {\n assinatura,\n clonarMolde,\n criarAdaptador,\n criarMapa,\n escreverNaUrl,\n lerDaUrl,\n type TipoFiltroUrl,\n} from './filtros-url-internos'\n\n/** O que a tela precisa devolver para a tabela se pintar. */\nexport interface ResultadoListagem<Linha> {\n linhas: Linha[]\n /** Total de registros no servidor. Sem ele, cai na contagem das linhas da página. */\n totalItens?: number\n /** Total de páginas. Sem ele, assume 1. */\n totalPaginas?: number\n}\n\n/** O que o hook entrega para a função de busca. Vem da URL, não do formulário. */\nexport interface ParametrosListagem<Filtros> {\n /** Filtros já convertidos pelos `tipos` — o que a URL de fato carrega. */\n filtros: Filtros\n /**\n * Página **1-based**, igual ao `v-model` do `<acai-ui-table>`.\n *\n * 🔴 **Com `paginacao: 'cliente'`, IGNORE.** Lá quem fatia é o hook, e a chave\n * do cache não inclui a página de propósito — é isso que faz folhear não\n * chamar `buscar`. Se a busca usar esta página nesse modo, a primeira fatia\n * pedida fica em cache e passa a ser devolvida para TODAS as páginas: dado\n * errado, sem erro nenhum. Nesse modo escreva `({ filtros }) => …`.\n */\n pagina: number\n}\n\nexport interface OpcoesListagemNaUrl<Filtros extends object, Linha> {\n /**\n * Fábrica do estado inicial dos filtros. **Função, não objeto**: ela é chamada\n * de novo no `limpar()`, e um objeto compartilhado voltaria já sujo da última\n * pesquisa.\n */\n molde: () => Filtros\n /**\n * A requisição. Recebe o que está na URL e devolve o que a tabela mostra.\n *\n * Erro aqui NÃO é engolido nem quebra a tela: as linhas atuais ficam onde\n * estão, `erro` recebe o que foi lançado e o resultado não vai pro cache.\n * Quem trata (notificação, retry) é a tela — o hook não sabe o que é um erro\n * aceitável no domínio dela.\n */\n buscar: (parametros: ParametrosListagem<Filtros>) => Promise<ResultadoListagem<Linha>>\n /** Tipo declarado por campo. Ver `useFiltrosNaUrl` — mesma regra e mesmo motivo. */\n tipos?: Readonly<Record<string, TipoFiltroUrl>>\n /** Chaves que NUNCA entram na URL (dado pessoal). Simétrico: também não são lidas. */\n excluir?: readonly string[]\n /** Prefixo das chaves. Só necessário com DUAS listagens na mesma rota. */\n prefixo?: string\n /** Nome da chave de página na URL. Default `'pagina'`. */\n chavePagina?: string\n /**\n * Quem fatia as páginas. Default `'servidor'`.\n *\n * - **`'servidor'`** — `buscar` recebe a página e devolve só ela. É o desenho\n * de API paginada (Spring e afins), e cada troca de página é uma requisição.\n * - **`'cliente'`** — `buscar` devolve o conjunto INTEIRO e o hook fatia. Uma\n * requisição por conjunto de filtros; folhear não chama `buscar` nenhuma vez.\n *\n * 🔴 `'cliente'` existe para fonte que **não pagina** — SOAP, arquivo, endpoint\n * legado que só sabe devolver tudo. Nesses casos paginar no servidor não é uma\n * escolha de desenho: refazer a chamada a cada clique de página é o custo\n * inteiro da consulta de novo (medido de 9 a 15s no SOAP do DETRAN).\n *\n * Não é atalho para fonte que pagina de verdade: com resultado grande, trazer\n * tudo para fatiar no navegador troca uma requisição pequena por uma enorme.\n */\n paginacao?: 'servidor' | 'cliente'\n /**\n * Quantas linhas por página. Default `10`.\n *\n * ⚠️ **Só vale com `paginacao: 'cliente'`** — quem fatia no modo servidor é o\n * servidor, e o hook não tem como impor tamanho de página a ele. Declarar aqui\n * junto de `'servidor'` avisa em DEV e não faz nada.\n */\n itensPorPagina?: number\n /**\n * Buscar ao montar quando a URL está vazia? Default `true` — é o que toda\n * listagem dos apps faz hoje (`onMounted(buscar)`). Passe `false` na tela que\n * só deve buscar depois que a pessoa pesquisar.\n *\n * Com filtro na URL o hook busca de qualquer jeito: foi pedido explicitamente.\n */\n buscarAoMontar?: boolean\n}\n\nexport interface ListagemNaUrl<Filtros extends object, Linha> {\n /**\n * Rascunho do formulário — é aqui que os campos dão `v-model`.\n *\n * É rascunho de propósito: digitar não pesquisa e não mexe na URL. O que está\n * na URL é a pesquisa APLICADA, e as duas só se encontram no `pesquisar()`.\n */\n filtros: Ref<Filtros>\n /**\n * Os filtros que produziram as LINHAS que estão na tela — não o rascunho.\n *\n * Serve pra tudo que precisa acompanhar o resultado exibido em vez do que a\n * pessoa está digitando. O caso real: listagem cujas COLUNAS dependem do\n * filtro (situação `Ativo`/`Desligado` mostra ou não \"Motivo de saída\"). Com\n * `filtros` o cabeçalho mudaria no meio da digitação, antes das linhas\n * correspondentes chegarem.\n *\n * Só avança quando o resultado é aplicado — inclusive vindo do cache. Se a\n * busca falha, continua descrevendo as linhas que ficaram na tela.\n */\n aplicados: Ref<Filtros>\n /** `v-model` do `<acai-ui-table>`. Mudar aqui já pagina (e escreve na URL). */\n pagina: Ref<number>\n linhas: Ref<Linha[]>\n totalItens: Ref<number>\n totalPaginas: Ref<number>\n carregando: Ref<boolean>\n /** O que a última busca lançou, ou `null`. */\n erro: Ref<unknown>\n /** Props prontas do `<acai-ui-table>`: `v-bind=\"listagem.tabela\"`. */\n tabela: ComputedRef<{\n rows: Linha[]\n totalItems: number\n totalPages: number\n skeleton: boolean\n }>\n /** `@submit` do `<acai-ui-form>`. Aplica o rascunho, volta pra página 1. */\n pesquisar: () => void\n /** `@reset` do `<acai-ui-form>`. Devolve o molde e limpa a URL. */\n limpar: () => void\n /**\n * Refaz a requisição da pesquisa atual, ignorando o cache.\n *\n * É o que chamar depois de excluir uma linha na própria tela.\n */\n recarregar: () => Promise<void>\n /** Descarta o cache desta listagem sem refazer a busca agora. */\n invalidar: () => void\n /** `true` quando a tela abriu já com filtro na URL. */\n hidratou: boolean\n}\n\n/**\n * Cache da ÚLTIMA pesquisa de cada listagem.\n *\n * Fora do componente de propósito: o caso que ele existe pra resolver é\n * justamente ir no detalhe e voltar, e nesse caminho a tela DESMONTA. Cache\n * guardado no `setup` morreria exatamente quando seria útil.\n *\n * Uma entrada por listagem (rota + prefixo), e só a última pesquisa — foi a\n * decisão tomada: cobre ir-e-voltar, que é o caso real, sem virar um cache de\n * verdade com invalidação por chave, TTL e todo o custo de manter isso correto.\n */\ninterface EntradaCache {\n chave: string\n resultado: ResultadoListagem<unknown>\n /** Qual instância do hook gravou. Serve pro aviso de dado velho em DEV. */\n instancia: number\n}\n\nconst cache = new Map<string, EntradaCache>()\nlet proximaInstancia = 0\n\n/**\n * Estamos renderizando no SERVIDOR?\n *\n * 🔴 Isto existe porque o `cache` acima é um `Map` de MÓDULO. No navegador ele é\n * por aba e está correto. No Node do SSR ele é do PROCESSO: um objeto só para\n * todas as requisições de todas as pessoas. Chaveado por rota + assinatura dos\n * filtros, dois usuários com a mesma pesquisa passariam a compartilhar entrada —\n * e em app que restringe resultado por perfil, a resposta de um alimentaria a\n * tela do outro.\n *\n * Somado a isso, o `executar` é disparado sem espera (`void executar(...)`): no\n * servidor a requisição SAI, não chega a tempo do HTML, e o resultado cai no\n * cache compartilhado depois que a resposta já foi embora. Custo puro.\n *\n * As duas condições porque nenhuma sozinha cobre tudo: `import.meta.env.SSR` é\n * do Vite (pode não existir em outro empacotador) e `window` é o teste de\n * runtime que vale em qualquer lugar.\n */\nconst noServidor = (): boolean => import.meta.env.SSR === true || typeof window === 'undefined'\n\n/**\n * Descarta o cache de listagem.\n *\n * 🔴 **Chame depois de gravar.** O cache não tem como saber que outra tela\n * cadastrou, editou ou excluiu um registro que a listagem mostra — e sem isso a\n * pessoa salva, volta pra lista e vê o dado velho.\n *\n * ```ts\n * // na tela de cadastro, depois de salvar\n * await salvar()\n * invalidarListagens('/servidores') // ou sem argumento, pra derrubar todas\n * void router.push({ name: 'servidores' })\n * ```\n *\n * Sem argumento derruba tudo. É grosso, mas é o padrão seguro: o custo de\n * invalidar demais é uma requisição, e o de invalidar de menos é dado errado\n * na tela.\n */\nexport function invalidarListagens(rota?: string): void {\n if (rota === undefined) {\n cache.clear()\n return\n }\n for (const chave of [...cache.keys()]) {\n if (chave === rota || chave.startsWith(`${rota}::`)) cache.delete(chave)\n }\n}\n\nconst avisouCacheVelho = new Set<string>()\n\n/**\n * Listagem com a URL como fonte da verdade.\n *\n * ```ts\n * const listagem = useListagemNaUrl({\n * molde: filtrosServidoresIniciais,\n * excluir: ['pessoalCpf'],\n * tipos: { cargoId: 'number', progressoMinimo: 'number' },\n * buscar: async ({ filtros, pagina }) => {\n * const dados = await listarServidores(montarParametros(filtros, pagina))\n * return {\n * linhas: dados.content ?? [],\n * totalItens: dados.page?.totalElements,\n * totalPaginas: dados.page?.totalPages,\n * }\n * },\n * })\n * ```\n *\n * ```html\n * <acai-ui-form @submit=\"listagem.pesquisar()\" @reset=\"listagem.limpar()\">\n * <acai-ui-input v-model=\"listagem.filtros.value.pessoalNome\" label=\"Nome\" />\n * </acai-ui-form>\n *\n * <acai-ui-table v-model=\"listagem.pagina.value\" :columns=\"colunas\" v-bind=\"listagem.tabela.value\" />\n * ```\n *\n * Com `<script setup>`, desestruture — todos os campos são ref/computed e\n * continuam reativos: `const { filtros, pagina, tabela, pesquisar } = listagem`.\n */\nexport function useListagemNaUrl<Filtros extends object, Linha>(\n opcoes: OpcoesListagemNaUrl<Filtros, Linha>,\n): ListagemNaUrl<Filtros, Linha> {\n const {\n molde: fabricaMolde,\n buscar,\n tipos = {},\n excluir = [],\n prefixo = '',\n chavePagina = 'pagina',\n paginacao = 'servidor',\n itensPorPagina = 10,\n buscarAoMontar = true,\n } = opcoes\n\n const fatiaNoCliente = paginacao === 'cliente'\n // Guarda de divisão: `itensPorPagina: 0` faria `ceil(n/0)` virar Infinity e a\n // tabela anunciar infinitas páginas.\n const porPagina = Math.max(1, Math.trunc(itensPorPagina))\n\n if (import.meta.env.DEV && !fatiaNoCliente && opcoes.itensPorPagina !== undefined) {\n console.warn(\n \"[acai-ui] useListagemNaUrl: `itensPorPagina` só vale com `paginacao: 'cliente'`. \" +\n \"No modo servidor quem decide o tamanho da página é o servidor — esta opção não faz nada.\",\n )\n }\n\n const adaptador = criarAdaptador()\n const mapa = criarMapa(clonarMolde(fabricaMolde()), { excluir, tipos, prefixo })\n /**\n * Mapa SEM `excluir`, usado só pra chavear o cache.\n *\n * 🔴 Sem isso o cache mente. Filtro excluído muda a BUSCA mas não a URL, então\n * chavear pela URL faz \"pesquisar por CPF\" bater na entrada da pesquisa\n * anterior e devolver a lista inteira — resultado errado, sem erro nenhum.\n * A chave sai do ESTADO; a URL continua sem o dado pessoal.\n */\n const mapaChave = criarMapa(clonarMolde(fabricaMolde()), { tipos, prefixo })\n const chavePaginaUrl = `${prefixo}${chavePagina}`\n const chaveCache = `${adaptador.rota()}::${prefixo}`\n /**\n * A rota em que este hook nasceu.\n *\n * 🔴 Sem isto o hook age na rota que estiver ATIVA, não na dele. Ao sair da\n * listagem para o detalhe, o watcher da query dispara com a query do DESTINO,\n * e uma escrita atrasada (a tabela reposicionando a página quando o total\n * chega, por exemplo) grava os filtros e o `pagina` na URL do detalhe.\n *\n * Medido: sair de `/servidores?nome=ana&pagina=3` para\n * `/servidores/7?origem=servidores&origemLabel=Servidores` terminava em\n * `/servidores/7?origem=servidores&origemLabel=Servidores&pagina=2`. Isso suja\n * justamente a query de onde a trilha de breadcrumb do app lê a cadeia de\n * origem — e um `push` desses ainda cria entrada de histórico no detalhe,\n * quebrando o Voltar.\n */\n const rotaDona = adaptador.rota()\n const instancia = ++proximaInstancia\n\n const filtros = ref(fabricaMolde()) as Ref<Filtros>\n const aplicados = ref(fabricaMolde()) as Ref<Filtros>\n const pagina = ref(1)\n const linhas = shallowRef<Linha[]>([]) as Ref<Linha[]>\n const totalItens = ref(0)\n const totalPaginas = ref(1)\n const carregando = ref(false)\n const erro = ref<unknown>(null)\n\n /**\n * Assinatura da pesquisa que está NA TELA. É a chave do cache e o critério de\n * \"a URL mudou por fora\": se o que chegou na URL bate com isto, o hook mesmo\n * escreveu, e não há o que reagir.\n */\n let chaveAtual = ''\n /** Corrida: só a resposta da última busca disparada pode pintar a tabela. */\n let requisicaoAtual = 0\n /** Uma vez por listagem — o aviso é de código, não de dado. */\n let avisouTotais = false\n\n /** Estado (filtros + página) → os params da URL. */\n function paramsDe(valores: Filtros, numeroPagina: number): URLSearchParams {\n const base = adaptador.ler()\n base.delete(chavePaginaUrl)\n // Dado pessoal colado à mão na barra não sobrevive à primeira pesquisa —\n // com `push`, ele entraria em toda entrada seguinte do histórico.\n mapa.removerExcluidas(base)\n const params = escreverNaUrl(mapa, base, valores as Record<string, unknown>)\n // Página 1 fica FORA da URL, mesma regra do filtro no default: `?pagina=1`\n // seria ruído em toda listagem recém-aberta.\n if (numeroPagina > 1) params.set(chavePaginaUrl, String(numeroPagina))\n return params\n }\n\n /** Assinatura da URL — serve pra saber se a mudança veio de fora do hook. */\n function chaveDe(params: URLSearchParams): string {\n const dosFiltros = assinatura(mapa, params)\n const daPagina = params.get(chavePaginaUrl) ?? '1'\n return `${dosFiltros}|${chavePaginaUrl}=${daPagina}`\n }\n\n /**\n * Assinatura da BUSCA — inclui os filtros excluídos da URL. Chave do cache.\n *\n * 🔴 No modo cliente a PÁGINA fica de fora, e é essa ausência que faz o recurso\n * existir: a entrada do cache passa a valer para o conjunto inteiro, então\n * folhear cai no cache em vez de chamar `buscar`. No modo servidor a página\n * continua na chave — lá cada página é uma resposta diferente.\n */\n function chaveDaBusca(valores: Filtros, numeroPagina: number): string {\n const params = escreverNaUrl(mapaChave, new URLSearchParams(), valores as Record<string, unknown>)\n const dosFiltros = assinatura(mapaChave, params)\n if (fatiaNoCliente) return dosFiltros\n return `${dosFiltros}|${chavePaginaUrl}=${numeroPagina}`\n }\n\n function paginaDe(params: URLSearchParams): number {\n const bruto = Number(params.get(chavePaginaUrl))\n return Number.isFinite(bruto) && bruto >= 1 ? Math.trunc(bruto) : 1\n }\n\n /**\n * Recebe a página em vez de ler `pagina.value`.\n *\n * O `aplicar` grava o ref antes de chamar o `executar`, então ler de lá daria\n * o mesmo número hoje — mas amarraria o fatiamento à ordem de duas atribuições\n * distantes. Explícito não tem como sair de sincronia.\n */\n function aplicarResultado(\n resultado: ResultadoListagem<Linha>,\n valores: Filtros,\n numeroPagina: number,\n ): void {\n if (fatiaNoCliente) {\n const todas = resultado.linhas\n totalItens.value = todas.length\n // `max(1, …)` mantém \"1 página\" no resultado vazio, igual ao modo servidor\n // — tabela com 0 páginas não tem o que mostrar na paginação.\n totalPaginas.value = Math.max(1, Math.ceil(todas.length / porPagina))\n const inicio = (numeroPagina - 1) * porPagina\n // Página fora do intervalo (`?pagina=99` com 3 páginas) devolve lista\n // vazia. Não reposiciono pra última: isso exigiria escrever na URL durante\n // a aplicação do resultado, que é a classe de escrita atrasada que sujou a\n // URL da tela de destino na 1.63.2.\n linhas.value = todas.slice(inicio, inicio + porPagina)\n } else {\n linhas.value = resultado.linhas\n totalItens.value = resultado.totalItens ?? resultado.linhas.length\n totalPaginas.value = resultado.totalPaginas ?? 1\n }\n // Só aqui, junto das linhas: `aplicados` descreve o que está na tela. Mover\n // isto pro início da requisição faria o cabeçalho da tabela mudar enquanto\n // as linhas antigas ainda estão sendo exibidas.\n aplicados.value = clonarMolde(valores)\n }\n\n /**\n * No modo cliente os totais saem do tamanho do resultado, então `totalItens` e\n * `totalPaginas` devolvidos pela busca são ignorados. Avisa porque o erro\n * provável é copiar uma listagem de servidor e trocar só o `paginacao` — e o\n * sintoma seria uma contagem que não confere, sem erro nenhum.\n */\n function avisarTotaisIgnorados(resultado: ResultadoListagem<Linha>): void {\n if (!import.meta.env.DEV || !fatiaNoCliente) return\n if (resultado.totalItens === undefined && resultado.totalPaginas === undefined) return\n if (avisouTotais) return\n avisouTotais = true\n console.warn(\n \"[acai-ui] useListagemNaUrl: com `paginacao: 'cliente'` o hook conta as linhas que a \" +\n \"busca devolveu — `totalItens` e `totalPaginas` do resultado são ignorados. Devolva só `linhas`.\",\n )\n }\n\n async function executar(valores: Filtros, numeroPagina: number): Promise<void> {\n // 🔴 No servidor o hook para aqui: nem busca, nem lê, nem escreve o cache.\n // Os filtros JÁ foram hidratados da URL pelo `aplicar`, então o formulário\n // renderiza preenchido e a tabela renderiza vazia — que é exatamente o que o\n // cliente vai renderizar no primeiro quadro, antes de a busca dele voltar.\n // É isso que mantém a hidratação casando; buscar aqui produziria HTML com\n // linhas que o cliente não teria, e aí sim daria divergência.\n if (noServidor()) return\n\n const chave = chaveDaBusca(valores, numeroPagina)\n const entrada = cache.get(chaveCache)\n if (entrada && entrada.chave === chave) {\n // Servido do cache: nenhuma requisição.\n if (import.meta.env.DEV && entrada.instancia !== instancia && !avisouCacheVelho.has(chave)) {\n avisouCacheVelho.add(chave)\n console.info(\n `[acai-ui] useListagemNaUrl: \"${chaveCache}\" foi servida do cache da visita anterior. ` +\n 'Se alguma tela gravou dados desde então, chame invalidarListagens() depois de salvar.',\n )\n }\n aplicarResultado(entrada.resultado as ResultadoListagem<Linha>, valores, numeroPagina)\n erro.value = null\n return\n }\n\n const meuTicket = ++requisicaoAtual\n carregando.value = true\n erro.value = null\n try {\n const resultado = await buscar({ filtros: clonarMolde(valores), pagina: numeroPagina })\n // Resposta velha de uma pesquisa que o usuário já trocou: descarta.\n if (meuTicket !== requisicaoAtual) return\n avisarTotaisIgnorados(resultado)\n aplicarResultado(resultado, valores, numeroPagina)\n cache.set(chaveCache, { chave, resultado: resultado as ResultadoListagem<unknown>, instancia })\n } catch (falha) {\n if (meuTicket !== requisicaoAtual) return\n // Linhas ficam como estão: apagar a tabela por causa de um 500 tira da\n // pessoa o resultado que ela tinha, sem ganho nenhum.\n erro.value = falha\n } finally {\n if (meuTicket === requisicaoAtual) carregando.value = false\n }\n }\n\n /**\n * Aplica um estado: escreve a URL e dispara a busca.\n *\n * As duas coisas em paralelo, e a busca NÃO espera a navegação — ver o\n * cabeçalho do arquivo.\n */\n /** A tela ainda está no ar? Fora da rota dona o hook não escreve nem busca. */\n function naRotaDona(): boolean {\n return adaptador.rota() === rotaDona\n }\n\n function aplicar(\n valores: Filtros,\n numeroPagina: number,\n modo: 'push' | 'replace' | 'nenhum',\n ): void {\n // A navegação já saiu daqui: escrever agora grava os filtros desta listagem\n // na URL de OUTRA tela, e buscar seria requisição para uma tabela que\n // ninguém está vendo. Acontece de verdade — o `v-model` da tabela ainda\n // reposiciona a página enquanto o componente é desmontado.\n if (!naRotaDona()) return\n\n const params = paramsDe(valores, numeroPagina)\n const chave = chaveDe(params)\n\n filtros.value = valores\n pagina.value = numeroPagina\n chaveAtual = chave\n\n if (modo !== 'nenhum') adaptador.gravar(params, modo)\n void executar(valores, numeroPagina)\n }\n\n function pesquisar(): void {\n // Sempre volta pra página 1: manter a pessoa na página 7 de um resultado que\n // acabou de mudar é mostrar \"nenhum registro\" numa busca que tem resultado.\n aplicar(clonarMolde(filtros.value), 1, 'push')\n }\n\n function limpar(): void {\n aplicar(fabricaMolde(), 1, 'push')\n }\n\n async function recarregar(): Promise<void> {\n cache.delete(chaveCache)\n await executar(filtros.value, pagina.value)\n }\n\n function invalidar(): void {\n cache.delete(chaveCache)\n }\n\n // ── Entrada: a URL manda ────────────────────────────────────────────────────\n const paramsIniciais = adaptador.ler()\n const doUrl = lerDaUrl(mapa, paramsIniciais, filtros.value as Record<string, unknown>)\n const hidratou = Object.keys(doUrl).length > 0 || paramsIniciais.has(chavePaginaUrl)\n\n if (hidratou) {\n // `nenhum`: a URL já está do jeito certo — reescrevê-la no mount criaria uma\n // entrada de histórico duplicada e, num app com guard assíncrono, uma\n // navegação inútil a cada visita.\n aplicar({ ...filtros.value, ...doUrl } as Filtros, paginaDe(paramsIniciais), 'nenhum')\n } else if (buscarAoMontar) {\n aplicar(filtros.value, 1, 'nenhum')\n } else {\n chaveAtual = chaveDe(paramsDe(filtros.value, 1))\n }\n\n // ── URL mudando por fora: voltar/avançar, link, barra de endereço ───────────\n const parar = adaptador.observar?.(() => {\n // 🔴 A query mudou porque a navegação saiu daqui, não porque alguém mexeu\n // NESTA listagem. Sem esta linha o hook se re-hidrata a partir da query da\n // outra tela: o estado é zerado e uma requisição sai para uma tabela que\n // ninguém está vendo. O `aplicar` também se protege, mas parar aqui evita o\n // trabalho inteiro.\n if (!naRotaDona()) return\n\n const params = adaptador.ler()\n const chave = chaveDe(params)\n // Foi o próprio hook que escreveu — nada a fazer.\n if (chave === chaveAtual) return\n\n const alteracoes = lerDaUrl(mapa, params, fabricaMolde() as Record<string, unknown>)\n // Parte do MOLDE, não do estado atual: voltar pra uma URL sem `nome` tem que\n // limpar o campo nome, e não manter o que a pesquisa anterior tinha nele.\n aplicar({ ...fabricaMolde(), ...alteracoes } as Filtros, paginaDe(params), 'nenhum')\n })\n\n if (parar) onScopeDispose(parar)\n\n // ── Paginação: o `v-model` do table escreve aqui ────────────────────────────\n // Não é `watch(pagina)`: o próprio `aplicar` mexe em `pagina.value`, e o watch\n // reentraria a cada busca. A tabela chama isto por `v-model`, e só ela.\n const paginaModel = computed<number>({\n get: () => pagina.value,\n set: (nova) => {\n if (nova === pagina.value) return\n // `replace`: folhear 8 páginas não pode custar 8 cliques no Voltar.\n aplicar(clonarMolde(filtros.value), nova, 'replace')\n },\n })\n\n const tabela = computed(() => ({\n rows: linhas.value,\n totalItems: totalItens.value,\n totalPages: totalPaginas.value,\n skeleton: carregando.value,\n }))\n\n return {\n filtros,\n aplicados,\n pagina: paginaModel,\n linhas,\n totalItens,\n totalPaginas,\n carregando,\n erro,\n tabela,\n pesquisar,\n limpar,\n recarregar,\n invalidar,\n hidratou,\n }\n}\n"],"names":[],"mappings":"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"}