@feugene/granularity 0.5.1 → 0.7.0

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 (218) hide show
  1. package/dist/chunks/{adapter-K6zZTzBi.js.map → adapter-CRyH4YC8.js.map} +1 -1
  2. package/dist/chunks/{config-Cgk5ti-b.js.map → config-3SftO0uG.js.map} +1 -1
  3. package/dist/chunks/{config-BN-B2K4r.js.map → config-B44QVIge.js.map} +1 -1
  4. package/dist/chunks/{config-C-GVBa19.js.map → config-B8rC_K97.js.map} +1 -1
  5. package/dist/chunks/{config-DEv4m-ZP.js.map → config-BXffa3ta.js.map} +1 -1
  6. package/dist/chunks/{config-CUgvsjZx.js.map → config-BhvNm4Pp.js.map} +1 -1
  7. package/dist/chunks/{config-BNOf_qjD.js.map → config-C0b_3LJV.js.map} +1 -1
  8. package/dist/chunks/config-C0rHS1-l.js.map +1 -0
  9. package/dist/chunks/{config-fCcRwjIB.js.map → config-C4qAA0Sb.js.map} +1 -1
  10. package/dist/chunks/{config-XwI6t8cn.js.map → config-C5TN9J2Z.js.map} +1 -1
  11. package/dist/chunks/config-CVnluhKO.js.map +1 -0
  12. package/dist/chunks/{config-DUtUkSzc.js.map → config-CjEplP6D.js.map} +1 -1
  13. package/dist/chunks/{config-D19pyP4D.js.map → config-CtomKf-k.js.map} +1 -1
  14. package/dist/chunks/{config-BvuQUBtZ.js.map → config-CxCAfXZ1.js.map} +1 -1
  15. package/dist/chunks/{config-BDiLiqSk.js.map → config-D1DI3roo.js.map} +1 -1
  16. package/dist/chunks/{config-CgjOJ3aF.js.map → config-D27BL0H9.js.map} +1 -1
  17. package/dist/chunks/config-D32znLtV2.js.map +1 -0
  18. package/dist/chunks/{config-YSOeh6cy.js.map → config-D6Af6WZw.js.map} +1 -1
  19. package/dist/chunks/{config-BulF0Bf-.js.map → config-D98m8iyz.js.map} +1 -1
  20. package/dist/chunks/config-DDLoUczC.js.map +1 -0
  21. package/dist/chunks/{config-CFcv0hjb.js.map → config-DQOSlWvp.js.map} +1 -1
  22. package/dist/chunks/{config-ndXqsz5A.js.map → config-DbqFk-IW.js.map} +1 -1
  23. package/dist/chunks/{config-CdHY0Z7L.js.map → config-DnsISjD8.js.map} +1 -1
  24. package/dist/chunks/{config-BFZN9-vt.js.map → config-DudL02ag.js.map} +1 -1
  25. package/dist/chunks/{config-DgRJlF00.js.map → config-Dusr9jcE.js.map} +1 -1
  26. package/dist/chunks/{config-CWvHiaqr2.js.map → config-DxqMXzNV2.js.map} +1 -1
  27. package/dist/chunks/config-Mp9DJ9Mq2.js.map +1 -0
  28. package/dist/chunks/{config-R0jaXatX.js → config-XoANT5mU.js} +1 -1
  29. package/dist/chunks/{config-R0jaXatX.js.map → config-XoANT5mU.js.map} +1 -1
  30. package/dist/chunks/config-ZJVOVgqR.js +22 -0
  31. package/dist/chunks/config-ZJVOVgqR.js.map +1 -0
  32. package/dist/chunks/{config-CM7nbATU2.js.map → config-rxFL-6yF2.js.map} +1 -1
  33. package/dist/chunks/{config-bpQYM5O-.js.map → config-wo-ncgTH.js.map} +1 -1
  34. package/dist/chunks/{en-BeJa78lP.js → en-QNZhjmSJ.js} +18 -1
  35. package/dist/chunks/en-QNZhjmSJ.js.map +1 -0
  36. package/dist/chunks/{es-axYOwwWD.js → es-C1c5XsIK.js} +18 -1
  37. package/dist/chunks/es-C1c5XsIK.js.map +1 -0
  38. package/dist/chunks/{es-BPqm7rLm.js → es-CKLPuE0h.js} +3 -3
  39. package/dist/chunks/{es-BPqm7rLm.js.map → es-CKLPuE0h.js.map} +1 -1
  40. package/dist/chunks/{grSelectStyles-daEeDlBn.js.map → grSelectStyles-DTAYNzxn.js.map} +1 -1
  41. package/dist/chunks/grStyle-5EMYYctb.js +19 -0
  42. package/dist/chunks/grStyle-5EMYYctb.js.map +1 -0
  43. package/dist/chunks/granularityI18n-CXa_uN7f.js +46 -0
  44. package/dist/chunks/granularityI18n-CXa_uN7f.js.map +1 -0
  45. package/dist/chunks/{ru-Dqh-2C00.js → ru-DcF7ciz0.js} +18 -1
  46. package/dist/chunks/ru-DcF7ciz0.js.map +1 -0
  47. package/dist/chunks/{shared-CyCPkimZ.js → shared-BkIIEolF.js} +37 -30
  48. package/dist/chunks/shared-BkIIEolF.js.map +1 -0
  49. package/dist/components/GrFileUpload/chunks/{GrFileUpload-u01j9S0t.js → GrFileUpload-DYRERhI2.js} +258 -37
  50. package/dist/components/GrFileUpload/chunks/GrFileUpload-DYRERhI2.js.map +1 -0
  51. package/dist/components/GrFileUpload/index.js +3 -3
  52. package/dist/components/GrFormField/chunks/{GrFormField-C6PfAs4u.js.map → GrFormField-C1oWTT_0.js.map} +1 -1
  53. package/dist/components/GrFormField/index.js +2 -2
  54. package/dist/components/GrFormFile/chunks/{GrFormFile-DdM8Bc2B.js.map → GrFormFile-deDPicM2.js.map} +1 -1
  55. package/dist/components/GrFormFile/index.js +2 -2
  56. package/dist/components/GrFormSection/chunks/{GrFormSection-5djEaQZQ.js.map → GrFormSection-CWBk2EUm.js.map} +1 -1
  57. package/dist/components/GrFormSection/index.js +2 -2
  58. package/dist/components/GrImageViewer/chunks/{GrImageViewer-CjSnohW7.js.map → GrImageViewer-Cpj5zyZQ.js.map} +1 -1
  59. package/dist/components/GrImageViewer/index.js +2 -2
  60. package/dist/components/GrInput/chunks/{GrInput-ghxaTf6d.js.map → GrInput-CfO2RsM-.js.map} +1 -1
  61. package/dist/components/GrInput/index.js +2 -2
  62. package/dist/components/GrInputTag/chunks/{GrInputTag-B0x4U0Yk.js → GrInputTag-G_VYJPF9.js} +1 -1
  63. package/dist/components/GrInputTag/chunks/{GrInputTag-B0x4U0Yk.js.map → GrInputTag-G_VYJPF9.js.map} +1 -1
  64. package/dist/components/GrInputTag/index.js +2 -2
  65. package/dist/components/GrLink/chunks/{GrLink-DvvNkP0M.js → GrLink-BLPigqij.js} +1 -1
  66. package/dist/components/GrLink/chunks/{GrLink-DvvNkP0M.js.map → GrLink-BLPigqij.js.map} +1 -1
  67. package/dist/components/GrLink/index.js +2 -2
  68. package/dist/components/GrList/chunks/{GrList--Ib4zLNw.js.map → GrList-BPjQf-72.js.map} +1 -1
  69. package/dist/components/GrList/index.js +2 -2
  70. package/dist/components/GrLoading/index.js +1 -1
  71. package/dist/components/GrModal/index.js +1 -1
  72. package/dist/components/GrNavbar/chunks/{GrNavbar-nIyuiVj1.js → GrNavbar-BoVuSZ-V.js} +1 -1
  73. package/dist/components/GrNavbar/chunks/{GrNavbar-nIyuiVj1.js.map → GrNavbar-BoVuSZ-V.js.map} +1 -1
  74. package/dist/components/GrNavbar/index.js +2 -2
  75. package/dist/components/GrNumberInput/chunks/{GrNumberInput-B0mPLjdv.js → GrNumberInput-ECtFCIKV.js} +1 -1
  76. package/dist/components/GrNumberInput/chunks/{GrNumberInput-B0mPLjdv.js.map → GrNumberInput-ECtFCIKV.js.map} +1 -1
  77. package/dist/components/GrNumberInput/index.js +2 -2
  78. package/dist/components/GrPagination/chunks/{GrPagination-C_rxGwfY.js → GrPagination-DW44c2-a.js} +2 -2
  79. package/dist/components/GrPagination/chunks/{GrPagination-C_rxGwfY.js.map → GrPagination-DW44c2-a.js.map} +1 -1
  80. package/dist/components/GrPagination/index.js +2 -2
  81. package/dist/components/GrProgressBar/chunks/{GrProgressBar-MvMnzsJl.js → GrProgressBar-hQQK8cYh.js} +1 -1
  82. package/dist/components/GrProgressBar/chunks/{GrProgressBar-MvMnzsJl.js.map → GrProgressBar-hQQK8cYh.js.map} +1 -1
  83. package/dist/components/GrProgressBar/index.js +2 -2
  84. package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-DKhbN6ji.js → GrPromptDialog-CUMW6_58.js} +2 -2
  85. package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-DKhbN6ji.js.map → GrPromptDialog-CUMW6_58.js.map} +1 -1
  86. package/dist/components/GrPromptDialog/index.js +2 -2
  87. package/dist/components/GrRadio/chunks/{GrRadio-BxBs3WHq.js → GrRadio-B_t_ZNVl.js} +1 -1
  88. package/dist/components/GrRadio/chunks/{GrRadio-BxBs3WHq.js.map → GrRadio-B_t_ZNVl.js.map} +1 -1
  89. package/dist/components/GrRadio/index.js +2 -2
  90. package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-CEAfJQ6A.js → GrRadioGroup-CVlgpUBr.js} +1 -1
  91. package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-CEAfJQ6A.js.map → GrRadioGroup-CVlgpUBr.js.map} +1 -1
  92. package/dist/components/GrRadioGroup/index.js +2 -2
  93. package/dist/components/GrSegmented/chunks/{GrSegmented-Bwn2qOY4.js → GrSegmented-BPl1koHc.js} +1 -1
  94. package/dist/components/GrSegmented/chunks/{GrSegmented-Bwn2qOY4.js.map → GrSegmented-BPl1koHc.js.map} +1 -1
  95. package/dist/components/GrSegmented/index.js +2 -2
  96. package/dist/components/GrSelect/chunks/{GrSelect-BMMT5MrT.js → GrSelect-C3NAfTqL.js} +2 -2
  97. package/dist/components/GrSelect/chunks/{GrSelect-BMMT5MrT.js.map → GrSelect-C3NAfTqL.js.map} +1 -1
  98. package/dist/components/GrSelect/index.js +2 -2
  99. package/dist/components/GrSidebar/chunks/{GrSidebar-CSZ3RpFB.js.map → GrSidebar-DVucgcfV.js.map} +1 -1
  100. package/dist/components/GrSidebar/index.js +2 -2
  101. package/dist/components/GrSkeleton/chunks/{GrSkeleton-DKXkqWDa.js.map → GrSkeleton-CDTvCSoH.js.map} +1 -1
  102. package/dist/components/GrSkeleton/index.js +2 -2
  103. package/dist/components/GrSwitch/chunks/{GrSwitch-CdBxwV3k.js → GrSwitch-Bnamgqb2.js} +1 -1
  104. package/dist/components/GrSwitch/chunks/{GrSwitch-CdBxwV3k.js.map → GrSwitch-Bnamgqb2.js.map} +1 -1
  105. package/dist/components/GrSwitch/index.js +2 -2
  106. package/dist/components/GrTable/index.js +1 -1
  107. package/dist/components/GrTabs/chunks/{GrTabs-BpF8AAUz.js.map → GrTabs-CiGmcmvm.js.map} +1 -1
  108. package/dist/components/GrTabs/index.js +2 -2
  109. package/dist/components/GrTextarea/chunks/{GrTextarea-DFS9ZkrA.js → GrTextarea-VBSc6A7D.js} +1 -1
  110. package/dist/components/GrTextarea/chunks/{GrTextarea-DFS9ZkrA.js.map → GrTextarea-VBSc6A7D.js.map} +1 -1
  111. package/dist/components/GrTextarea/index.js +2 -2
  112. package/dist/components/GrToaster/chunks/{GrToaster-3Mf0Moxt.js → GrToaster-I1e-zCpf.js} +1 -1
  113. package/dist/components/GrToaster/chunks/{GrToaster-3Mf0Moxt.js.map → GrToaster-I1e-zCpf.js.map} +1 -1
  114. package/dist/components/GrToaster/index.js +2 -2
  115. package/dist/components/GrTooltip/chunks/{GrTooltip-BvmsukLW.js.map → GrTooltip-CrV1gI_c.js.map} +1 -1
  116. package/dist/components/GrTooltip/index.js +2 -2
  117. package/dist/components/GrTree/chunks/{GrTree-C2kN-O4Q.js.map → GrTree-Dlev9oBd.js.map} +1 -1
  118. package/dist/components/GrTree/index.js +2 -2
  119. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-N-oPAOFj.js → GrTreeSelect-DkAIksRW.js} +4 -4
  120. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-N-oPAOFj.js.map → GrTreeSelect-DkAIksRW.js.map} +1 -1
  121. package/dist/components/GrTreeSelect/index.js +2 -2
  122. package/dist/directives/loading.js +15 -0
  123. package/dist/directives/loading.js.map +1 -1
  124. package/dist/granular-provider-node.js +2 -2
  125. package/dist/granular-provider.js +1 -1
  126. package/dist/i18n/all.js +1 -1
  127. package/dist/i18n/index.js +2 -2
  128. package/dist/index.js +1032 -58
  129. package/dist/index.js.map +1 -1
  130. package/dist/types/src/components/GrFileUpload/GrFileUpload.vue.d.ts +58 -5
  131. package/dist/types/src/components/GrFileUpload/index.d.ts +4 -0
  132. package/dist/types/src/components/GrFileUpload/uploadState.d.ts +38 -0
  133. package/dist/types/src/components/GrFileUpload/uploadViaXhr.d.ts +33 -0
  134. package/dist/types/src/components/GrImageViewer/GrImageViewer.vue.d.ts +1 -1
  135. package/dist/types/src/components/GrInput/GrInput.vue.d.ts +1 -1
  136. package/dist/types/src/components/GrNumberInput/GrNumberInput.vue.d.ts +1 -1
  137. package/dist/types/src/components/GrResponseErrorBanner/GrFormErrorBanner.vue.d.ts +70 -0
  138. package/dist/types/src/components/GrResponseErrorBanner/GrResponseErrorBanner.vue.d.ts +96 -0
  139. package/dist/types/src/components/GrResponseErrorBanner/GrUploadErrorBanner.vue.d.ts +73 -0
  140. package/dist/types/src/components/GrResponseErrorBanner/config.d.ts +1 -0
  141. package/dist/types/src/components/GrResponseErrorBanner/index.d.ts +10 -0
  142. package/dist/types/src/components/GrResponseErrorBanner/parsers/abortErrorParser.d.ts +15 -0
  143. package/dist/types/src/components/GrResponseErrorBanner/parsers/createResponseErrorClassifier.d.ts +28 -0
  144. package/dist/types/src/components/GrResponseErrorBanner/parsers/fileValidationParser.d.ts +12 -0
  145. package/dist/types/src/components/GrResponseErrorBanner/parsers/httpStatusParser.d.ts +15 -0
  146. package/dist/types/src/components/GrResponseErrorBanner/parsers/index.d.ts +11 -0
  147. package/dist/types/src/components/GrResponseErrorBanner/parsers/jsonApiErrorParser.d.ts +17 -0
  148. package/dist/types/src/components/GrResponseErrorBanner/parsers/laravelValidationParser.d.ts +15 -0
  149. package/dist/types/src/components/GrResponseErrorBanner/parsers/networkErrorParser.d.ts +14 -0
  150. package/dist/types/src/components/GrResponseErrorBanner/parsers/normalizeError.d.ts +19 -0
  151. package/dist/types/src/components/GrResponseErrorBanner/parsers/plainMessageParser.d.ts +15 -0
  152. package/dist/types/src/components/GrResponseErrorBanner/parsers/problemDetailsParser.d.ts +17 -0
  153. package/dist/types/src/components/GrResponseErrorBanner/responseError.defaults.d.ts +18 -0
  154. package/dist/types/src/components/GrResponseErrorBanner/responseError.types.d.ts +115 -0
  155. package/dist/types/src/components/GrResponseErrorBanner/useResponseError.d.ts +62 -0
  156. package/dist/types/src/components/GrTextarea/GrTextarea.vue.d.ts +1 -1
  157. package/dist/types/src/components/GrToaster/GrToaster.vue.d.ts +1 -1
  158. package/dist/types/src/granular-provider/shared.d.ts +1 -0
  159. package/dist/types/src/i18n/messages/en.d.ts +32 -0
  160. package/dist/types/src/i18n/messages/es.d.ts +32 -0
  161. package/dist/types/src/i18n/messages/ru.d.ts +32 -0
  162. package/dist/types/src/index.d.ts +1 -0
  163. package/package.json +1 -1
  164. package/dist/chunks/config-BGmiXpR82.js.map +0 -1
  165. package/dist/chunks/config-CA9XwYnZ2.js.map +0 -1
  166. package/dist/chunks/config-CsMIhZfM.js.map +0 -1
  167. package/dist/chunks/config-CwLoozAz2.js.map +0 -1
  168. package/dist/chunks/config-DCQO6H6h.js.map +0 -1
  169. package/dist/chunks/config-Da90XGsi.js +0 -38
  170. package/dist/chunks/config-Da90XGsi.js.map +0 -1
  171. package/dist/chunks/en-BeJa78lP.js.map +0 -1
  172. package/dist/chunks/es-axYOwwWD.js.map +0 -1
  173. package/dist/chunks/granularityI18n-GCqUz_lo.js +0 -26
  174. package/dist/chunks/granularityI18n-GCqUz_lo.js.map +0 -1
  175. package/dist/chunks/ru-Dqh-2C00.js.map +0 -1
  176. package/dist/chunks/shared-CyCPkimZ.js.map +0 -1
  177. package/dist/components/GrFileUpload/chunks/GrFileUpload-u01j9S0t.js.map +0 -1
  178. /package/dist/chunks/{adapter-K6zZTzBi.js → adapter-CRyH4YC8.js} +0 -0
  179. /package/dist/chunks/{config-Cgk5ti-b.js → config-3SftO0uG.js} +0 -0
  180. /package/dist/chunks/{config-BN-B2K4r.js → config-B44QVIge.js} +0 -0
  181. /package/dist/chunks/{config-C-GVBa19.js → config-B8rC_K97.js} +0 -0
  182. /package/dist/chunks/{config-DEv4m-ZP.js → config-BXffa3ta.js} +0 -0
  183. /package/dist/chunks/{config-CUgvsjZx.js → config-BhvNm4Pp.js} +0 -0
  184. /package/dist/chunks/{config-BNOf_qjD.js → config-C0b_3LJV.js} +0 -0
  185. /package/dist/chunks/{config-CA9XwYnZ2.js → config-C0rHS1-l.js} +0 -0
  186. /package/dist/chunks/{config-fCcRwjIB.js → config-C4qAA0Sb.js} +0 -0
  187. /package/dist/chunks/{config-XwI6t8cn.js → config-C5TN9J2Z.js} +0 -0
  188. /package/dist/chunks/{config-BGmiXpR82.js → config-CVnluhKO.js} +0 -0
  189. /package/dist/chunks/{config-DUtUkSzc.js → config-CjEplP6D.js} +0 -0
  190. /package/dist/chunks/{config-D19pyP4D.js → config-CtomKf-k.js} +0 -0
  191. /package/dist/chunks/{config-BvuQUBtZ.js → config-CxCAfXZ1.js} +0 -0
  192. /package/dist/chunks/{config-BDiLiqSk.js → config-D1DI3roo.js} +0 -0
  193. /package/dist/chunks/{config-CgjOJ3aF.js → config-D27BL0H9.js} +0 -0
  194. /package/dist/chunks/{config-DCQO6H6h.js → config-D32znLtV2.js} +0 -0
  195. /package/dist/chunks/{config-YSOeh6cy.js → config-D6Af6WZw.js} +0 -0
  196. /package/dist/chunks/{config-BulF0Bf-.js → config-D98m8iyz.js} +0 -0
  197. /package/dist/chunks/{config-CwLoozAz2.js → config-DDLoUczC.js} +0 -0
  198. /package/dist/chunks/{config-CFcv0hjb.js → config-DQOSlWvp.js} +0 -0
  199. /package/dist/chunks/{config-ndXqsz5A.js → config-DbqFk-IW.js} +0 -0
  200. /package/dist/chunks/{config-CdHY0Z7L.js → config-DnsISjD8.js} +0 -0
  201. /package/dist/chunks/{config-BFZN9-vt.js → config-DudL02ag.js} +0 -0
  202. /package/dist/chunks/{config-DgRJlF00.js → config-Dusr9jcE.js} +0 -0
  203. /package/dist/chunks/{config-CWvHiaqr2.js → config-DxqMXzNV2.js} +0 -0
  204. /package/dist/chunks/{config-CsMIhZfM.js → config-Mp9DJ9Mq2.js} +0 -0
  205. /package/dist/chunks/{config-CM7nbATU2.js → config-rxFL-6yF2.js} +0 -0
  206. /package/dist/chunks/{config-bpQYM5O-.js → config-wo-ncgTH.js} +0 -0
  207. /package/dist/chunks/{grSelectStyles-daEeDlBn.js → grSelectStyles-DTAYNzxn.js} +0 -0
  208. /package/dist/components/GrFormField/chunks/{GrFormField-C6PfAs4u.js → GrFormField-C1oWTT_0.js} +0 -0
  209. /package/dist/components/GrFormFile/chunks/{GrFormFile-DdM8Bc2B.js → GrFormFile-deDPicM2.js} +0 -0
  210. /package/dist/components/GrFormSection/chunks/{GrFormSection-5djEaQZQ.js → GrFormSection-CWBk2EUm.js} +0 -0
  211. /package/dist/components/GrImageViewer/chunks/{GrImageViewer-CjSnohW7.js → GrImageViewer-Cpj5zyZQ.js} +0 -0
  212. /package/dist/components/GrInput/chunks/{GrInput-ghxaTf6d.js → GrInput-CfO2RsM-.js} +0 -0
  213. /package/dist/components/GrList/chunks/{GrList--Ib4zLNw.js → GrList-BPjQf-72.js} +0 -0
  214. /package/dist/components/GrSidebar/chunks/{GrSidebar-CSZ3RpFB.js → GrSidebar-DVucgcfV.js} +0 -0
  215. /package/dist/components/GrSkeleton/chunks/{GrSkeleton-DKXkqWDa.js → GrSkeleton-CDTvCSoH.js} +0 -0
  216. /package/dist/components/GrTabs/chunks/{GrTabs-BpF8AAUz.js → GrTabs-CiGmcmvm.js} +0 -0
  217. /package/dist/components/GrTooltip/chunks/{GrTooltip-BvmsukLW.js → GrTooltip-CrV1gI_c.js} +0 -0
  218. /package/dist/components/GrTree/chunks/{GrTree-C2kN-O4Q.js → GrTree-Dlev9oBd.js} +0 -0
@@ -0,0 +1,73 @@
1
+ import type { ResponseErrorInfo, ResponseErrorKind, ResponseErrorTexts, ResponseErrorTone } from './responseError.types';
2
+ type __VLS_Props = {
3
+ error: ResponseErrorInfo | null;
4
+ /** Файлы, которые пытались загрузить — пробрасываются в `retry` payload. */
5
+ files?: File[];
6
+ texts?: Partial<ResponseErrorTexts>;
7
+ tone?: ResponseErrorTone;
8
+ toneByKind?: Partial<Record<ResponseErrorKind, ResponseErrorTone>>;
9
+ canRetry?: boolean;
10
+ canDismiss?: boolean;
11
+ autoHideKinds?: ResponseErrorKind[];
12
+ testIdPrefix?: string;
13
+ };
14
+ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<__VLS_Props>, {
15
+ files: () => never[];
16
+ texts: () => {};
17
+ tone: undefined;
18
+ toneByKind: () => {};
19
+ canRetry: boolean;
20
+ canDismiss: boolean;
21
+ autoHideKinds: () => never[];
22
+ testIdPrefix: string;
23
+ }>>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
24
+ retry: (payload: {
25
+ error: ResponseErrorInfo;
26
+ files: File[];
27
+ }) => void;
28
+ dismiss: () => void;
29
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<__VLS_Props>, {
30
+ files: () => never[];
31
+ texts: () => {};
32
+ tone: undefined;
33
+ toneByKind: () => {};
34
+ canRetry: boolean;
35
+ canDismiss: boolean;
36
+ autoHideKinds: () => never[];
37
+ testIdPrefix: string;
38
+ }>>> & Readonly<{
39
+ onRetry?: ((payload: {
40
+ error: ResponseErrorInfo;
41
+ files: File[];
42
+ }) => any) | undefined;
43
+ onDismiss?: (() => any) | undefined;
44
+ }>, {
45
+ tone: ResponseErrorTone;
46
+ files: File[];
47
+ texts: Partial<ResponseErrorTexts>;
48
+ toneByKind: Partial<Record<ResponseErrorKind, ResponseErrorTone>>;
49
+ canRetry: boolean;
50
+ canDismiss: boolean;
51
+ autoHideKinds: ResponseErrorKind[];
52
+ testIdPrefix: string;
53
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
54
+ declare const _default: typeof __VLS_export;
55
+ export default _default;
56
+ type __VLS_TypePropsToOption<T> = {
57
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
58
+ type: import('vue').PropType<Required<T>[K]>;
59
+ } : {
60
+ type: import('vue').PropType<T[K]>;
61
+ required: true;
62
+ };
63
+ };
64
+ type __VLS_WithDefaults<P, D> = {
65
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_PrettifyLocal<P[K] & {
66
+ default: D[K];
67
+ }> : P[K];
68
+ };
69
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
70
+ [K in keyof T]: T[K];
71
+ } : {
72
+ [K in keyof T as K]: T[K];
73
+ }) & {};
@@ -0,0 +1 @@
1
+ export declare const grResponseErrorBannerConfig: import("@feugene/unocss-preset-granular").GranularComponentDescriptor<"GrResponseErrorBanner">;
@@ -0,0 +1,10 @@
1
+ export { default } from './GrResponseErrorBanner.vue';
2
+ export { default as GrResponseErrorBanner } from './GrResponseErrorBanner.vue';
3
+ export { default as GrUploadErrorBanner } from './GrUploadErrorBanner.vue';
4
+ export { default as GrFormErrorBanner } from './GrFormErrorBanner.vue';
5
+ export { DEFAULT_RESPONSE_ERROR_TEXTS, useResponseError, } from './useResponseError';
6
+ export type { UseResponseErrorOptions, UseResponseErrorReturn, } from './useResponseError';
7
+ export { DEFAULT_AUTO_HIDE_KINDS, DEFAULT_TONE_BY_KIND, } from './responseError.defaults';
8
+ export { abortErrorParser, createResponseErrorClassifier, defaultResponseErrorParsers, extendDefaultParsers, fileValidationParser, httpStatusParser, jsonApiErrorParser, laravelValidationParser, networkErrorParser, normalizeError, plainMessageParser, problemDetailsParser, resolveResponseErrorTitle, } from './parsers';
9
+ export type { CreateResponseErrorClassifierOptions } from './parsers';
10
+ export type { NormalizedRawError, ResponseErrorContext, ResponseErrorFieldError, ResponseErrorInfo, ResponseErrorKind, ResponseErrorParser, ResponseErrorParserResult, ResponseErrorTexts, ResponseErrorTone, } from './responseError.types';
@@ -0,0 +1,15 @@
1
+ import type { ResponseErrorParser } from '../responseError.types';
2
+ /**
3
+ * Распознаёт отмену запроса клиентом.
4
+ *
5
+ * Триггеры:
6
+ * - `ctx.isAbort === true` (выставляется `normalizeError` для `AbortError`,
7
+ * axios `isCancel`/`ERR_CANCELED`, xhr `status === 0 && readyState === 4`).
8
+ *
9
+ * Возвращает `kind: 'aborted'` и `stop: true` — другие парсеры пропускаются,
10
+ * чтобы случайный `status === 0` не интерпретировался как сетевая ошибка.
11
+ *
12
+ * По умолчанию `aborted` показывается info-плашкой; чтобы скрыть совсем —
13
+ * добавьте `'aborted'` в `autoHideKinds`.
14
+ */
15
+ export declare const abortErrorParser: ResponseErrorParser;
@@ -0,0 +1,28 @@
1
+ import type { ResponseErrorInfo, ResponseErrorKind, ResponseErrorParser, ResponseErrorTexts } from '../responseError.types';
2
+ /**
3
+ * Дефолтная цепочка парсеров. Порядок важен:
4
+ * `abort → network → fileValidation → laravel → problemDetails → jsonApi → httpStatus → plainMessage`.
5
+ *
6
+ * - Ранние специализированные парсеры могут поставить `stop` (abort/file).
7
+ * - HTTP-парсер даёт fallback-kind/message, чтобы остальное могло уточнить.
8
+ * - `plainMessage` всегда последний — добывает хоть какое-то сообщение.
9
+ */
10
+ export declare const defaultResponseErrorParsers: ResponseErrorParser[];
11
+ /** Добавляет пользовательские парсеры в начало дефолтной цепочки. */
12
+ export declare function extendDefaultParsers(extra: ResponseErrorParser[]): ResponseErrorParser[];
13
+ export type CreateResponseErrorClassifierOptions = {
14
+ parsers?: ResponseErrorParser[];
15
+ texts?: Partial<ResponseErrorTexts>;
16
+ /** Имя поля основного сообщения в body (для `plainMessageParser`). */
17
+ messageKey?: string;
18
+ };
19
+ /**
20
+ * Фабрика классификатора. Возвращает функцию `(raw, meta?) => Promise<ResponseErrorInfo>`,
21
+ * которая:
22
+ * 1. нормализует вход через `normalizeError`,
23
+ * 2. строит `ResponseErrorContext`,
24
+ * 3. прогоняет цепочку парсеров (с поддержкой `stop`),
25
+ * 4. собирает финальный `ResponseErrorInfo` с фолбэками из `texts`.
26
+ */
27
+ export declare function createResponseErrorClassifier(options?: CreateResponseErrorClassifierOptions): (raw: unknown, meta?: Record<string, unknown>) => Promise<ResponseErrorInfo>;
28
+ export declare function resolveResponseErrorTitle(kind: ResponseErrorKind, texts: ResponseErrorTexts): string;
@@ -0,0 +1,12 @@
1
+ import type { ResponseErrorParser } from '../responseError.types';
2
+ /**
3
+ * Распознаёт `FileValidationError` от `GrFileUpload` (или совместимый по форме
4
+ * объект). Не зависит от жёсткого импорта класса — определяет по `name`.
5
+ *
6
+ * Активируется, если `ctx.raw.name === 'FileValidationError'` и есть массив
7
+ * `issues`/`errors` с полями `{ file?, code?, message }`.
8
+ *
9
+ * Возвращает `kind: 'validation'` и `stop: true` — это локальная клиентская
10
+ * валидация, незачем дальше идти по HTTP-парсерам.
11
+ */
12
+ export declare const fileValidationParser: ResponseErrorParser;
@@ -0,0 +1,15 @@
1
+ import type { ResponseErrorParser } from '../responseError.types';
2
+ /**
3
+ * Базовая классификация по HTTP-статусу.
4
+ *
5
+ * Правила:
6
+ * - `400` / `422` ⇒ `kind: 'validation'`,
7
+ * - остальные `4xx` ⇒ `kind: 'client'`,
8
+ * - `>= 500` ⇒ `kind: 'server'`.
9
+ *
10
+ * Не использует `stop` — даёт более специализированным парсерам
11
+ * (Laravel/JSON:API/RFC 7807) уточнить сообщение и `fieldErrors`.
12
+ *
13
+ * `message` берёт из `ctx.texts` как осмысленный фолбэк.
14
+ */
15
+ export declare const httpStatusParser: ResponseErrorParser;
@@ -0,0 +1,11 @@
1
+ export { abortErrorParser } from './abortErrorParser';
2
+ export { fileValidationParser } from './fileValidationParser';
3
+ export { httpStatusParser } from './httpStatusParser';
4
+ export { jsonApiErrorParser } from './jsonApiErrorParser';
5
+ export { laravelValidationParser } from './laravelValidationParser';
6
+ export { networkErrorParser } from './networkErrorParser';
7
+ export { plainMessageParser } from './plainMessageParser';
8
+ export { problemDetailsParser } from './problemDetailsParser';
9
+ export { normalizeError } from './normalizeError';
10
+ export { createResponseErrorClassifier, defaultResponseErrorParsers, extendDefaultParsers, resolveResponseErrorTitle, } from './createResponseErrorClassifier';
11
+ export type { CreateResponseErrorClassifierOptions } from './createResponseErrorClassifier';
@@ -0,0 +1,17 @@
1
+ import type { ResponseErrorParser } from '../responseError.types';
2
+ /**
3
+ * Парсер JSON:API-стиля:
4
+ *
5
+ * ```json
6
+ * { "errors": [
7
+ * { "status": "422", "title": "Invalid Attribute",
8
+ * "detail": "Email is required.",
9
+ * "source": { "pointer": "/data/attributes/email" } }
10
+ * ] }
11
+ * ```
12
+ *
13
+ * Активируется, когда `ctx.body.errors` — массив объектов с `title`/`detail`.
14
+ * Поле извлекается из последнего сегмента `source.pointer`. Все `detail`
15
+ * собираются в `details`, первый `title` — в `message`.
16
+ */
17
+ export declare const jsonApiErrorParser: ResponseErrorParser;
@@ -0,0 +1,15 @@
1
+ import type { ResponseErrorParser } from '../responseError.types';
2
+ /**
3
+ * Парсит Laravel-формат ответа об ошибке валидации:
4
+ *
5
+ * ```json
6
+ * { "message": "The given data was invalid.",
7
+ * "errors": { "file": ["The file is required."], "amount": ["..."] } }
8
+ * ```
9
+ *
10
+ * Активируется при наличии `ctx.body.errors` как plain-объекта (значения —
11
+ * массив строк или строка). Если есть `fieldErrors`, повышает `kind` до
12
+ * `validation` независимо от статуса (полезно, когда сервер прислал 200/4xx
13
+ * без 422). `message` берётся из `body.message` / `body.error`.
14
+ */
15
+ export declare const laravelValidationParser: ResponseErrorParser;
@@ -0,0 +1,14 @@
1
+ import type { ResponseErrorParser } from '../responseError.types';
2
+ /**
3
+ * Распознаёт транспортные ошибки **без ответа сервера**: отсутствие интернета,
4
+ * DNS-фейл, CORS-preflight, fetch `TypeError('Failed to fetch')`,
5
+ * axios `ERR_NETWORK`/`ECONNABORTED`.
6
+ *
7
+ * Триггеры:
8
+ * - `ctx.isNetwork === true` (выставлено `normalizeError`),
9
+ * - либо нет ни `status`, ни `body`, ни признака отмены, но есть исходная
10
+ * ошибка с `code === 'ERR_NETWORK'` / `message ~ /network|fetch/i/`.
11
+ *
12
+ * Возвращает `kind: 'network'` и `stop: true`.
13
+ */
14
+ export declare const networkErrorParser: ResponseErrorParser;
@@ -0,0 +1,19 @@
1
+ import type { NormalizedRawError } from '../responseError.types';
2
+ /**
3
+ * Универсально приводит «сырой» вход к {@link NormalizedRawError}.
4
+ *
5
+ * Поддерживаемые источники:
6
+ * - **axios** — `AxiosError` с `response.status`/`response.data`/`response.headers`,
7
+ * либо `request` без `response` + `code === 'ERR_NETWORK'`, либо `code === 'ERR_CANCELED'`.
8
+ * - **fetch `Response`** — объект `Response` с `ok=false`. Тело читается через
9
+ * `clone().json()` (с фолбэком на `.text()`); поэтому функция асинхронная.
10
+ * - **fetch `TypeError`** — `TypeError('Failed to fetch')` ⇒ `isNetwork=true`.
11
+ * - **`{ response: Response, body: unknown }`** — если потребитель уже прочитал тело сам.
12
+ * - **`XMLHttpRequest`** / `{ status, responseText, response }` — пара полей.
13
+ * - **`AbortError` / `DOMException`** ⇒ `isAbort=true`.
14
+ * - **`Error`/строка/произвольный объект** — кладётся в `body`/`raw` как есть.
15
+ *
16
+ * Цель — отделить «откуда пришла ошибка» от «как её классифицировать»: парсеры
17
+ * работают только с нормализованным `ResponseErrorContext`, не зная о транспорте.
18
+ */
19
+ export declare function normalizeError(raw: unknown): Promise<NormalizedRawError>;
@@ -0,0 +1,15 @@
1
+ import type { ResponseErrorParser } from '../responseError.types';
2
+ /**
3
+ * Финальный фолбэк-парсер. Достаёт хоть какое-нибудь человекочитаемое
4
+ * сообщение, чтобы баннер не был пустым.
5
+ *
6
+ * Источники (по приоритету):
7
+ * 1. `ctx.body` — если строка ⇒ message,
8
+ * 2. `ctx.body[messageKey]` (default `'message'`),
9
+ * 3. `ctx.body.error` (строка),
10
+ * 4. `ctx.raw.message` (для голых `Error`).
11
+ *
12
+ * Не выставляет `kind` — оставляет на усмотрение классификатора.
13
+ * Использует ключ `messageKey` из `ctx.meta._messageKey`, если задан.
14
+ */
15
+ export declare const plainMessageParser: ResponseErrorParser;
@@ -0,0 +1,17 @@
1
+ import type { ResponseErrorParser } from '../responseError.types';
2
+ /**
3
+ * Парсер RFC 7807 «Problem Details for HTTP APIs»:
4
+ *
5
+ * ```json
6
+ * { "type": "https://example.com/probs/out-of-credit",
7
+ * "title": "You do not have enough credit.",
8
+ * "status": 403,
9
+ * "detail": "Your current balance is 30.",
10
+ * "errors": { "balance": ["..."] } }
11
+ * ```
12
+ *
13
+ * Активируется, если есть `body.type` + `body.title`, либо
14
+ * Content-Type заголовка `application/problem+json`. Берёт `title` как
15
+ * `message`, `detail` — в `details[0]`, status — в `status`.
16
+ */
17
+ export declare const problemDetailsParser: ResponseErrorParser;
@@ -0,0 +1,18 @@
1
+ import type { ResponseErrorKind, ResponseErrorTexts, ResponseErrorTone } from './responseError.types';
2
+ /**
3
+ * Default English texts. Any field can be overridden via the `texts` prop
4
+ * on `GrResponseErrorBanner` or the `texts` option of `useResponseError`.
5
+ */
6
+ export declare const DEFAULT_RESPONSE_ERROR_TEXTS: ResponseErrorTexts;
7
+ /**
8
+ * Маппинг `kind` → `tone` по умолчанию. Применяется внутри баннера, если
9
+ * пользователь не передал `tone` или `toneByKind`. Цель — визуально отделить
10
+ * «исправь ввод» (warning) от «упало по сети/серверу» (danger).
11
+ */
12
+ export declare const DEFAULT_TONE_BY_KIND: Record<ResponseErrorKind, ResponseErrorTone>;
13
+ /**
14
+ * `kind`'ы, которые по умолчанию не показываются (баннер скрыт).
15
+ * Семантика: отмена пользователем — не «ошибка», UI обычно тихо проглатывает.
16
+ * Пользователь может переопределить через `autoHideKinds: []`, чтобы показать info-плашку.
17
+ */
18
+ export declare const DEFAULT_AUTO_HIDE_KINDS: ResponseErrorKind[];
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Универсальные типы для отображения ошибок ответа сервера/сети.
3
+ *
4
+ * Компонент `GrResponseErrorBanner` не зависит от транспорта (axios/fetch/xhr)
5
+ * и не делает запросов — он получает уже готовый «сырой» результат и
6
+ * прогоняет его через цепочку парсеров (`ResponseErrorParser[]`), превращая
7
+ * в `ResponseErrorInfo`.
8
+ */
9
+ /**
10
+ * Категория ошибки. Жёстко разделены по семантике (см. `DEFAULT_TONE_BY_KIND`).
11
+ *
12
+ * - `network` — транспортная проблема: нет интернета, DNS, CORS-preflight,
13
+ * `fetch` `TypeError`, axios `ERR_NETWORK`. **Ответа от сервера нет.**
14
+ * - `aborted` — запрос отменён клиентом (`AbortController`, axios `CanceledError`).
15
+ * - `validation` — ошибка валидации формы/файлов; есть структурированные поля или
16
+ * статус `400`/`422`. UX: «исправь поле и повтори».
17
+ * - `client` — прочие 4xx (auth/forbidden/not-found/conflict/rate-limit) —
18
+ * проблема запроса, retry обычно не помогает.
19
+ * - `server` — 5xx, проблема на сервере; retry разумен.
20
+ * - `unknown` — ничего не сматчилось, fallback.
21
+ */
22
+ export type ResponseErrorKind = 'network' | 'aborted' | 'validation' | 'client' | 'server' | 'unknown';
23
+ /** Визуальный тон баннера. Совпадает с `tone` у `GrAlert`. */
24
+ export type ResponseErrorTone = 'info' | 'success' | 'warning' | 'danger' | 'slate' | 'azure' | 'primary' | 'neutral';
25
+ /** Ошибка по конкретному полю (Laravel-style / JSON:API pointer / RFC 7807 errors). */
26
+ export type ResponseErrorFieldError = {
27
+ /** Имя поля. Для Laravel — ключ из `errors`. Для JSON:API — последний сегмент `source.pointer`. */
28
+ field: string;
29
+ /** Сообщения, относящиеся к этому полю. */
30
+ messages: string[];
31
+ };
32
+ /**
33
+ * Готовая к показу структура. Это то, что баннер принимает в `error`-проп.
34
+ */
35
+ export type ResponseErrorInfo = {
36
+ kind: ResponseErrorKind;
37
+ /** HTTP-статус, если известен. */
38
+ status?: number;
39
+ /** Основной заголовок-сообщение для пользователя. */
40
+ message: string;
41
+ /** Плоский список дополнительных сообщений под `message`. */
42
+ details?: string[];
43
+ /** Структурированные ошибки по полям (если сервер вернул JSON-объект `errors`). */
44
+ fieldErrors?: ResponseErrorFieldError[];
45
+ /** Оригинальный объект ошибки/ответа (для логов/retry). */
46
+ raw: unknown;
47
+ /** Произвольный контекст, переданный потребителем (например, `{ files }`). */
48
+ meta?: Record<string, unknown>;
49
+ };
50
+ /**
51
+ * Нормализованный «сырой» результат запроса. Заполняется `normalizeError`
52
+ * единообразно для axios / fetch / xhr / голого Error / строки.
53
+ */
54
+ export type NormalizedRawError = {
55
+ /** Оригинал, как пришёл от потребителя. */
56
+ raw: unknown;
57
+ /** HTTP-статус (если был ответ). */
58
+ status?: number;
59
+ /** Уже распарсенное тело ответа (JSON-объект, строка). */
60
+ body?: unknown;
61
+ /** Заголовки ответа (lower-case keys). */
62
+ headers?: Record<string, string>;
63
+ /** Признак отмены (`AbortError` / axios `isCancel`). */
64
+ isAbort?: boolean;
65
+ /** Признак транспортной ошибки без ответа. */
66
+ isNetwork?: boolean;
67
+ };
68
+ /**
69
+ * Контекст, который классификатор передаёт каждому парсеру.
70
+ *
71
+ * `raw` — исходный объект (для duck-typing).
72
+ * `status/body/headers/isAbort/isNetwork` — нормализованные поля.
73
+ * `meta` — произвольный пользовательский контекст (например, `{ files, formId }`).
74
+ * `texts` — мёрджнутые тексты, парсер может использовать дефолты как fallback.
75
+ */
76
+ export type ResponseErrorContext = NormalizedRawError & {
77
+ meta: Record<string, unknown>;
78
+ texts: ResponseErrorTexts;
79
+ };
80
+ /**
81
+ * Результат работы парсера. Любое поле опционально — классификатор сливает
82
+ * результаты по очереди (последний непустой выигрывает).
83
+ *
84
+ * `stop: true` — прервать цепочку, никакие следующие парсеры не вызовутся.
85
+ */
86
+ export type ResponseErrorParserResult = {
87
+ kind?: ResponseErrorKind;
88
+ status?: number;
89
+ message?: string;
90
+ details?: string[];
91
+ fieldErrors?: ResponseErrorFieldError[];
92
+ stop?: boolean;
93
+ };
94
+ /** Сигнатура парсера. */
95
+ export type ResponseErrorParser = (ctx: ResponseErrorContext) => ResponseErrorParserResult | null | undefined;
96
+ /**
97
+ * Тексты-фолбэки для каждого `kind` + лейблы кнопок.
98
+ * Все строки переопределяются через проп `texts` (частичный мердж).
99
+ */
100
+ export type ResponseErrorTexts = {
101
+ networkTitle: string;
102
+ networkMessage: string;
103
+ abortedTitle: string;
104
+ abortedMessage: string;
105
+ validationTitle: string;
106
+ validationMessage: string;
107
+ clientTitle: string;
108
+ clientMessage: string;
109
+ serverTitle: string;
110
+ serverMessage: string;
111
+ unknownTitle: string;
112
+ unknownMessage: string;
113
+ retryLabel: string;
114
+ dismissLabel: string;
115
+ };
@@ -0,0 +1,62 @@
1
+ import type { ComputedRef, Ref } from 'vue';
2
+ import { DEFAULT_RESPONSE_ERROR_TEXTS } from './responseError.defaults';
3
+ import type { ResponseErrorInfo, ResponseErrorKind, ResponseErrorParser, ResponseErrorTexts } from './responseError.types';
4
+ /**
5
+ * Опции для `useResponseError`. Все поля опциональны и поддерживают
6
+ * **реактивные геттеры** (`() => value`) — чтобы пробрасывать пропсы
7
+ * родителя без потери реактивности.
8
+ */
9
+ export type UseResponseErrorOptions = {
10
+ /** Цепочка парсеров. По умолчанию — `defaultResponseErrorParsers`. */
11
+ parsers?: () => ResponseErrorParser[] | undefined;
12
+ /** Частичный override текстов баннера. */
13
+ texts?: () => Partial<ResponseErrorTexts> | undefined;
14
+ /**
15
+ * `kind`'ы, которые **не** выставляются в state (баннер останется скрытым).
16
+ * По умолчанию пусто — `aborted` показывается info-плашкой. Передайте
17
+ * `['aborted']`, если хотите тихо проглатывать отмены.
18
+ */
19
+ autoHideKinds?: () => ResponseErrorKind[] | undefined;
20
+ /** Имя поля основного сообщения в body (для `plainMessageParser`). */
21
+ messageKey?: () => string | undefined;
22
+ /** Контекст, который попадёт в `ctx.meta` каждого парсера (`{ files, formId, ... }`). */
23
+ meta?: () => Record<string, unknown> | undefined;
24
+ /** Побочка после успешной классификации (логирование, sentry). */
25
+ onClassify?: (info: ResponseErrorInfo) => void;
26
+ };
27
+ /** Публичный возвращаемый API. */
28
+ export type UseResponseErrorReturn = {
29
+ /** Текущее состояние ошибки. `null` — баннер скрыт. */
30
+ currentError: Ref<ResponseErrorInfo | null>;
31
+ /** `currentError.value !== null`. */
32
+ isVisible: ComputedRef<boolean>;
33
+ /** Последний «сырой» вход (для retry/логов). */
34
+ lastRaw: Ref<unknown>;
35
+ /**
36
+ * Главное API: классифицирует raw, сохраняет в state, возвращает info
37
+ * (или `null`, если `kind` в `autoHideKinds`). Возвращает Promise,
38
+ * т.к. нормализатор поддерживает `Response.json()` (async).
39
+ */
40
+ setRaw: (raw: unknown, meta?: Record<string, unknown>) => Promise<ResponseErrorInfo | null>;
41
+ /** Установить готовый info, не пропуская через парсеры. */
42
+ setError: (info: ResponseErrorInfo) => void;
43
+ /** Чистая классификация без записи в state — для предпросмотра. */
44
+ classify: (raw: unknown, meta?: Record<string, unknown>) => Promise<ResponseErrorInfo>;
45
+ /** Сбросить state (скрыть баннер). */
46
+ dismiss: () => void;
47
+ /** Алиас `dismiss`. */
48
+ reset: () => void;
49
+ /**
50
+ * Хелпер: вызывает `handler(currentError)`. Если handler завершился без
51
+ * исключения — сбрасывает state. Если кинул — оставляет state, поднимает.
52
+ * Удобно бинать к кнопке «Повторить».
53
+ */
54
+ retry: (handler: (info: ResponseErrorInfo) => void | Promise<void>) => Promise<void>;
55
+ };
56
+ /**
57
+ * Stateful-композабл вокруг `createResponseErrorClassifier`. Хранит
58
+ * `currentError`, инкапсулирует setRaw/retry/dismiss. Подходит для типичного
59
+ * сценария «поймал ошибку запроса → показал баннер → ретрай/скрыть».
60
+ */
61
+ export declare function useResponseError(options?: UseResponseErrorOptions): UseResponseErrorReturn;
62
+ export { DEFAULT_RESPONSE_ERROR_TEXTS };
@@ -55,8 +55,8 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
55
55
  rows: number;
56
56
  invalid: boolean;
57
57
  placeholder: string;
58
- autocomplete: string;
59
58
  state: GrTextareaState;
59
+ autocomplete: string;
60
60
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
61
61
  declare const _default: typeof __VLS_export;
62
62
  export default _default;
@@ -18,8 +18,8 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
18
18
  regionLabel: string;
19
19
  }>>> & Readonly<{}>, {
20
20
  regionLabel: string;
21
- placement: GrToasterPlacement;
22
21
  dismissLabel: string;
22
+ placement: GrToasterPlacement;
23
23
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
24
24
  declare const _default: typeof __VLS_export;
25
25
  export default _default;
@@ -59,6 +59,7 @@ export declare const granularityComponentConfigs: {
59
59
  GrPromptDialog: GranularComponentDescriptor<"GrPromptDialog">;
60
60
  GrRadio: GranularComponentDescriptor<"GrRadio">;
61
61
  GrRadioGroup: GranularComponentDescriptor<"GrRadioGroup">;
62
+ GrResponseErrorBanner: GranularComponentDescriptor<"GrResponseErrorBanner">;
62
63
  GrSegmented: GranularComponentDescriptor<"GrSegmented">;
63
64
  GrSelect: GranularComponentDescriptor<"GrSelect">;
64
65
  GrSidebar: GranularComponentDescriptor<"GrSidebar">;
@@ -41,6 +41,22 @@ export declare const en: {
41
41
  navbar: {
42
42
  openMenu: string;
43
43
  };
44
+ responseError: {
45
+ networkTitle: string;
46
+ networkMessage: string;
47
+ abortedTitle: string;
48
+ abortedMessage: string;
49
+ validationTitle: string;
50
+ validationMessage: string;
51
+ clientTitle: string;
52
+ clientMessage: string;
53
+ serverTitle: string;
54
+ serverMessage: string;
55
+ unknownTitle: string;
56
+ unknownMessage: string;
57
+ retryLabel: string;
58
+ dismissLabel: string;
59
+ };
44
60
  colors: {
45
61
  neutral: string;
46
62
  success: string;
@@ -84,6 +100,22 @@ export declare const en: {
84
100
  navbar: {
85
101
  openMenu: string;
86
102
  };
103
+ responseError: {
104
+ networkTitle: string;
105
+ networkMessage: string;
106
+ abortedTitle: string;
107
+ abortedMessage: string;
108
+ validationTitle: string;
109
+ validationMessage: string;
110
+ clientTitle: string;
111
+ clientMessage: string;
112
+ serverTitle: string;
113
+ serverMessage: string;
114
+ unknownTitle: string;
115
+ unknownMessage: string;
116
+ retryLabel: string;
117
+ dismissLabel: string;
118
+ };
87
119
  colors: {
88
120
  neutral: string;
89
121
  success: string;
@@ -34,6 +34,22 @@ export declare const es: {
34
34
  navbar: {
35
35
  openMenu: string;
36
36
  };
37
+ responseError: {
38
+ networkTitle: string;
39
+ networkMessage: string;
40
+ abortedTitle: string;
41
+ abortedMessage: string;
42
+ validationTitle: string;
43
+ validationMessage: string;
44
+ clientTitle: string;
45
+ clientMessage: string;
46
+ serverTitle: string;
47
+ serverMessage: string;
48
+ unknownTitle: string;
49
+ unknownMessage: string;
50
+ retryLabel: string;
51
+ dismissLabel: string;
52
+ };
37
53
  colors: {
38
54
  neutral: string;
39
55
  success: string;
@@ -77,6 +93,22 @@ export declare const es: {
77
93
  navbar: {
78
94
  openMenu: string;
79
95
  };
96
+ responseError: {
97
+ networkTitle: string;
98
+ networkMessage: string;
99
+ abortedTitle: string;
100
+ abortedMessage: string;
101
+ validationTitle: string;
102
+ validationMessage: string;
103
+ clientTitle: string;
104
+ clientMessage: string;
105
+ serverTitle: string;
106
+ serverMessage: string;
107
+ unknownTitle: string;
108
+ unknownMessage: string;
109
+ retryLabel: string;
110
+ dismissLabel: string;
111
+ };
80
112
  colors: {
81
113
  neutral: string;
82
114
  success: string;