@feugene/granularity 0.13.0 → 0.18.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 (1266) hide show
  1. package/README.md +14 -1
  2. package/dist/chunks/adapter-CAOxmn2G.js.map +1 -1
  3. package/dist/chunks/check-BZI24Qs4.js +23 -0
  4. package/dist/chunks/check-BZI24Qs4.js.map +1 -0
  5. package/dist/chunks/chevron-down-CQS2OG_s.js +23 -0
  6. package/dist/chunks/chevron-down-CQS2OG_s.js.map +1 -0
  7. package/dist/chunks/chevron-right-BfqMVpbB.js +44 -0
  8. package/dist/chunks/chevron-right-BfqMVpbB.js.map +1 -0
  9. package/dist/chunks/config-06SQjBx0.js +96 -0
  10. package/dist/chunks/config-06SQjBx0.js.map +1 -0
  11. package/dist/chunks/config-A-bBiotF.js +12 -0
  12. package/dist/chunks/config-A-bBiotF.js.map +1 -0
  13. package/dist/chunks/config-B-iNaGdw.js +199 -0
  14. package/dist/chunks/config-B-iNaGdw.js.map +1 -0
  15. package/dist/chunks/config-B84z1aos.js +19 -0
  16. package/dist/chunks/config-B84z1aos.js.map +1 -0
  17. package/dist/chunks/config-BDfTXHo12.js +23 -0
  18. package/dist/chunks/config-BDfTXHo12.js.map +1 -0
  19. package/dist/chunks/config-BE6n20np2.js +27 -0
  20. package/dist/chunks/config-BE6n20np2.js.map +1 -0
  21. package/dist/chunks/config-BKvX0q10.js +89 -0
  22. package/dist/chunks/config-BKvX0q10.js.map +1 -0
  23. package/dist/chunks/config-BN4sXYXn.js +77 -0
  24. package/dist/chunks/config-BN4sXYXn.js.map +1 -0
  25. package/dist/chunks/config-BNu8lFQB.js.map +1 -1
  26. package/dist/chunks/config-BSyiFlbi.js +17 -0
  27. package/dist/chunks/config-BSyiFlbi.js.map +1 -0
  28. package/dist/chunks/config-BViooYNv.js +13 -0
  29. package/dist/chunks/config-BViooYNv.js.map +1 -0
  30. package/dist/chunks/config-Baj7Wvx-.js +72 -0
  31. package/dist/chunks/config-Baj7Wvx-.js.map +1 -0
  32. package/dist/chunks/config-BbY2SKGE.js +90 -0
  33. package/dist/chunks/config-BbY2SKGE.js.map +1 -0
  34. package/dist/chunks/config-BeZRuonp.js +54 -0
  35. package/dist/chunks/config-BeZRuonp.js.map +1 -0
  36. package/dist/chunks/config-BoNR7_PD2.js +140 -0
  37. package/dist/chunks/config-BoNR7_PD2.js.map +1 -0
  38. package/dist/chunks/config-Bpt9Xbxm.js +49 -0
  39. package/dist/chunks/config-Bpt9Xbxm.js.map +1 -0
  40. package/dist/chunks/config-BqFjr3tN.js +131 -0
  41. package/dist/chunks/config-BqFjr3tN.js.map +1 -0
  42. package/dist/chunks/config-BsPDQ0dS.js +97 -0
  43. package/dist/chunks/config-BsPDQ0dS.js.map +1 -0
  44. package/dist/chunks/config-BsuDM3Hb.js +55 -0
  45. package/dist/chunks/config-BsuDM3Hb.js.map +1 -0
  46. package/dist/chunks/config-BtXRpAtq.js +48 -0
  47. package/dist/chunks/config-BtXRpAtq.js.map +1 -0
  48. package/dist/chunks/config-BuGlNPE9.js +8 -0
  49. package/dist/chunks/config-BuGlNPE9.js.map +1 -0
  50. package/dist/chunks/config-C0Ea9ePP.js +15 -0
  51. package/dist/chunks/config-C0Ea9ePP.js.map +1 -0
  52. package/dist/chunks/config-CN2ULSQL.js +36 -0
  53. package/dist/chunks/config-CN2ULSQL.js.map +1 -0
  54. package/dist/chunks/config-CN970ZcJ.js +113 -0
  55. package/dist/chunks/config-CN970ZcJ.js.map +1 -0
  56. package/dist/chunks/config-COpuWGr_.js +72 -0
  57. package/dist/chunks/config-COpuWGr_.js.map +1 -0
  58. package/dist/chunks/config-COvrUfhR.js +83 -0
  59. package/dist/chunks/config-COvrUfhR.js.map +1 -0
  60. package/dist/chunks/config-CQzGyi1C.js +54 -0
  61. package/dist/chunks/config-CQzGyi1C.js.map +1 -0
  62. package/dist/chunks/config-CY0_6cMi.js +51 -0
  63. package/dist/chunks/config-CY0_6cMi.js.map +1 -0
  64. package/dist/chunks/config-CjXjhphs.js +12 -0
  65. package/dist/chunks/config-CjXjhphs.js.map +1 -0
  66. package/dist/chunks/config-CjnbevbD.js +13 -0
  67. package/dist/chunks/config-CjnbevbD.js.map +1 -0
  68. package/dist/chunks/config-Cl4ST6Qd.js +21 -0
  69. package/dist/chunks/config-Cl4ST6Qd.js.map +1 -0
  70. package/dist/chunks/config-Cp0DE0GH.js +12 -0
  71. package/dist/chunks/config-Cp0DE0GH.js.map +1 -0
  72. package/dist/chunks/config-Cwd3yjRw.js +41 -0
  73. package/dist/chunks/config-Cwd3yjRw.js.map +1 -0
  74. package/dist/chunks/config-D2aNP7Es.js +70 -0
  75. package/dist/chunks/config-D2aNP7Es.js.map +1 -0
  76. package/dist/chunks/config-D3_g2KIn.js +120 -0
  77. package/dist/chunks/config-D3_g2KIn.js.map +1 -0
  78. package/dist/chunks/config-D6W1rnlp.js +26 -0
  79. package/dist/chunks/config-D6W1rnlp.js.map +1 -0
  80. package/dist/chunks/config-D94Z9po5.js +126 -0
  81. package/dist/chunks/config-D94Z9po5.js.map +1 -0
  82. package/dist/chunks/config-DA6SnEoy.js +22 -0
  83. package/dist/chunks/config-DA6SnEoy.js.map +1 -0
  84. package/dist/chunks/config-DBmdgoVf.js.map +1 -1
  85. package/dist/chunks/config-DCFvmHEv2.js +76 -0
  86. package/dist/chunks/config-DCFvmHEv2.js.map +1 -0
  87. package/dist/chunks/config-DEvsMTQE.js +150 -0
  88. package/dist/chunks/config-DEvsMTQE.js.map +1 -0
  89. package/dist/chunks/config-DKdlqXiY.js +109 -0
  90. package/dist/chunks/config-DKdlqXiY.js.map +1 -0
  91. package/dist/chunks/config-DP7eseR1.js +92 -0
  92. package/dist/chunks/config-DP7eseR1.js.map +1 -0
  93. package/dist/chunks/config-DSJY6aEl.js +80 -0
  94. package/dist/chunks/config-DSJY6aEl.js.map +1 -0
  95. package/dist/chunks/config-DU2DNSRx2.js +116 -0
  96. package/dist/chunks/config-DU2DNSRx2.js.map +1 -0
  97. package/dist/chunks/config-DhHbU3zO.js +37 -0
  98. package/dist/chunks/config-DhHbU3zO.js.map +1 -0
  99. package/dist/chunks/config-DpeQchsV.js +21 -0
  100. package/dist/chunks/config-DpeQchsV.js.map +1 -0
  101. package/dist/chunks/config-DpqOnJiz2.js.map +1 -0
  102. package/dist/chunks/config-DvQIb4kb.js +98 -0
  103. package/dist/chunks/config-DvQIb4kb.js.map +1 -0
  104. package/dist/chunks/config-K0C2tcLB.js +84 -0
  105. package/dist/chunks/config-K0C2tcLB.js.map +1 -0
  106. package/dist/chunks/config-MRvhUl-O.js +81 -0
  107. package/dist/chunks/config-MRvhUl-O.js.map +1 -0
  108. package/dist/chunks/config-QaIc_gRa.js.map +1 -0
  109. package/dist/chunks/config-Rw9OyW70.js +87 -0
  110. package/dist/chunks/config-Rw9OyW70.js.map +1 -0
  111. package/dist/chunks/config-ScuvHw6k2.js +42 -0
  112. package/dist/chunks/config-ScuvHw6k2.js.map +1 -0
  113. package/dist/chunks/config-T3qdQBgU2.js +40 -0
  114. package/dist/chunks/config-T3qdQBgU2.js.map +1 -0
  115. package/dist/chunks/config-WTNhdh6T2.js +20 -0
  116. package/dist/chunks/config-WTNhdh6T2.js.map +1 -0
  117. package/dist/chunks/config-_qPUfb6-2.js +165 -0
  118. package/dist/chunks/config-_qPUfb6-2.js.map +1 -0
  119. package/dist/chunks/config-esdviAPL.js +41 -0
  120. package/dist/chunks/config-esdviAPL.js.map +1 -0
  121. package/dist/chunks/config-gvq_hWNM.js +103 -0
  122. package/dist/chunks/config-gvq_hWNM.js.map +1 -0
  123. package/dist/chunks/config-gwro_7yn.js +55 -0
  124. package/dist/chunks/config-gwro_7yn.js.map +1 -0
  125. package/dist/chunks/config-qVg3Zz_A.js +30 -0
  126. package/dist/chunks/config-qVg3Zz_A.js.map +1 -0
  127. package/dist/chunks/config-zjeAJ4ho.js +64 -0
  128. package/dist/chunks/config-zjeAJ4ho.js.map +1 -0
  129. package/dist/chunks/context-BSYR7RZs.js +152 -0
  130. package/dist/chunks/context-BSYR7RZs.js.map +1 -0
  131. package/dist/chunks/context-BfIQv7m1.js +18 -0
  132. package/dist/chunks/context-BfIQv7m1.js.map +1 -0
  133. package/dist/chunks/context-Bfrgsluh.js.map +1 -1
  134. package/dist/chunks/context-DdNIxa1w.js.map +1 -1
  135. package/dist/chunks/dialogShared-CxW62PQE.js.map +1 -1
  136. package/dist/chunks/en-COdzxgAX.js +352 -0
  137. package/dist/chunks/en-COdzxgAX.js.map +1 -0
  138. package/dist/chunks/es-ClqJ-4hr.js +354 -0
  139. package/dist/chunks/es-ClqJ-4hr.js.map +1 -0
  140. package/dist/chunks/es-DGMHwknJ.js +20 -0
  141. package/dist/chunks/es-DGMHwknJ.js.map +1 -0
  142. package/dist/chunks/fileValidation-D5TFBhbv.js +296 -0
  143. package/dist/chunks/fileValidation-D5TFBhbv.js.map +1 -0
  144. package/dist/chunks/focusables-BkzK42SQ.js +87 -0
  145. package/dist/chunks/focusables-BkzK42SQ.js.map +1 -0
  146. package/dist/chunks/grBadgeStyles-C2wLlkjF.js +61 -0
  147. package/dist/chunks/grBadgeStyles-C2wLlkjF.js.map +1 -0
  148. package/dist/chunks/grButtonStyles-B_-YRE__.js +221 -0
  149. package/dist/chunks/grButtonStyles-B_-YRE__.js.map +1 -0
  150. package/dist/chunks/grCheckboxStyles-hOAgURZG.js +82 -0
  151. package/dist/chunks/grCheckboxStyles-hOAgURZG.js.map +1 -0
  152. package/dist/chunks/grDropdownStyles-V7TRiCXn.js +24 -0
  153. package/dist/chunks/grDropdownStyles-V7TRiCXn.js.map +1 -0
  154. package/dist/chunks/grFormFieldStyles-BkeZHIw0.js +32 -0
  155. package/dist/chunks/grFormFieldStyles-BkeZHIw0.js.map +1 -0
  156. package/dist/chunks/grIconStyles-BwJrml2L.js +44 -0
  157. package/dist/chunks/grIconStyles-BwJrml2L.js.map +1 -0
  158. package/dist/chunks/grInputStyles-CJeMhUe5.js +66 -0
  159. package/dist/chunks/grInputStyles-CJeMhUe5.js.map +1 -0
  160. package/dist/chunks/grKbdStyles-CeZhGQHr.js +43 -0
  161. package/dist/chunks/grKbdStyles-CeZhGQHr.js.map +1 -0
  162. package/dist/chunks/grLinkStyles-BoL8QYcV.js +84 -0
  163. package/dist/chunks/grLinkStyles-BoL8QYcV.js.map +1 -0
  164. package/dist/chunks/grLoadingStyles-DEmji2wv.js +30 -0
  165. package/dist/chunks/grLoadingStyles-DEmji2wv.js.map +1 -0
  166. package/dist/chunks/grModalStyles-EZfuEiw_.js +77 -0
  167. package/dist/chunks/grModalStyles-EZfuEiw_.js.map +1 -0
  168. package/dist/chunks/grPopoverStyles-Rz_Z5nLW.js +46 -0
  169. package/dist/chunks/grPopoverStyles-Rz_Z5nLW.js.map +1 -0
  170. package/dist/chunks/grSelectStyles-eTz4uPMP.js +147 -0
  171. package/dist/chunks/grSelectStyles-eTz4uPMP.js.map +1 -0
  172. package/dist/chunks/grSliderStyles-B5uNxNJq.js +133 -0
  173. package/dist/chunks/grSliderStyles-B5uNxNJq.js.map +1 -0
  174. package/dist/chunks/grStyle-CrgLQKKf.js +46 -0
  175. package/dist/chunks/grStyle-CrgLQKKf.js.map +1 -0
  176. package/dist/chunks/grTableStyles-C-iaqQUN.js +26 -0
  177. package/dist/chunks/grTableStyles-C-iaqQUN.js.map +1 -0
  178. package/dist/chunks/grTextareaStyles-iOcHuVMM.js +50 -0
  179. package/dist/chunks/grTextareaStyles-iOcHuVMM.js.map +1 -0
  180. package/dist/chunks/granular-provider-B9nXQCMu.js +195 -0
  181. package/dist/chunks/granular-provider-B9nXQCMu.js.map +1 -0
  182. package/dist/chunks/granularityI18n-BC5zsj_d.js +68 -0
  183. package/dist/chunks/granularityI18n-BC5zsj_d.js.map +1 -0
  184. package/dist/chunks/inert-DIHCCn_1.js +78 -0
  185. package/dist/chunks/inert-DIHCCn_1.js.map +1 -0
  186. package/dist/chunks/keyboard-DE2yhz_b.js +70 -0
  187. package/dist/chunks/keyboard-DE2yhz_b.js.map +1 -0
  188. package/dist/chunks/loader-2-B1fdsdWW.js +23 -0
  189. package/dist/chunks/loader-2-B1fdsdWW.js.map +1 -0
  190. package/dist/chunks/minus-oxdbHF33.js +23 -0
  191. package/dist/chunks/minus-oxdbHF33.js.map +1 -0
  192. package/dist/chunks/optionFilter-DYw9XPPx.js +79 -0
  193. package/dist/chunks/optionFilter-DYw9XPPx.js.map +1 -0
  194. package/dist/chunks/overlayStack-C8cfsqXa.js +99 -0
  195. package/dist/chunks/overlayStack-C8cfsqXa.js.map +1 -0
  196. package/dist/chunks/portalRoot-CWD4zHBm.js +35 -0
  197. package/dist/chunks/portalRoot-CWD4zHBm.js.map +1 -0
  198. package/dist/chunks/ru-9z8ix45c.js +356 -0
  199. package/dist/chunks/ru-9z8ix45c.js.map +1 -0
  200. package/dist/chunks/safelist-CudBLyAD.js +26 -0
  201. package/dist/chunks/safelist-CudBLyAD.js.map +1 -0
  202. package/dist/chunks/slotNodes-DxNXpC7v.js +39 -0
  203. package/dist/chunks/slotNodes-DxNXpC7v.js.map +1 -0
  204. package/dist/chunks/useControlAddons-asUr10Pf.js +128 -0
  205. package/dist/chunks/useControlAddons-asUr10Pf.js.map +1 -0
  206. package/dist/chunks/useControlledOpen-DV3SqLTP.js +27 -0
  207. package/dist/chunks/useControlledOpen-DV3SqLTP.js.map +1 -0
  208. package/dist/chunks/useDragSort-0l47h4yb.js +265 -0
  209. package/dist/chunks/useDragSort-0l47h4yb.js.map +1 -0
  210. package/dist/chunks/useFilePreviews-DnwgdyBs.js +53 -0
  211. package/dist/chunks/useFilePreviews-DnwgdyBs.js.map +1 -0
  212. package/dist/chunks/useFocusWithin-BwHE0rzm.js +33 -0
  213. package/dist/chunks/useFocusWithin-BwHE0rzm.js.map +1 -0
  214. package/dist/chunks/useModalOverlay-BTq-0ImG.js +212 -0
  215. package/dist/chunks/useModalOverlay-BTq-0ImG.js.map +1 -0
  216. package/dist/chunks/usePortalTarget-RyzEgNTb.js +77 -0
  217. package/dist/chunks/usePortalTarget-RyzEgNTb.js.map +1 -0
  218. package/dist/chunks/validation-5HhpanPP.js +178 -0
  219. package/dist/chunks/validation-5HhpanPP.js.map +1 -0
  220. package/dist/components/GrAlert/chunks/GrAlert-BC1lplbY.js +272 -0
  221. package/dist/components/GrAlert/chunks/GrAlert-BC1lplbY.js.map +1 -0
  222. package/dist/components/GrAlert/index.js +2 -2
  223. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-CPEQxmLZ.js +852 -0
  224. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-CPEQxmLZ.js.map +1 -0
  225. package/dist/components/GrAutocomplete/index.js +2 -2
  226. package/dist/components/GrAutocomplete/styles.css +1 -0
  227. package/dist/components/GrAvatar/chunks/GrAvatar-CVUujLmn.js +222 -0
  228. package/dist/components/GrAvatar/chunks/GrAvatar-CVUujLmn.js.map +1 -0
  229. package/dist/components/GrAvatar/index.js +3 -3
  230. package/dist/components/GrBadge/chunks/GrBadge-B1tgqfGQ.js +40 -0
  231. package/dist/components/GrBadge/chunks/GrBadge-B1tgqfGQ.js.map +1 -0
  232. package/dist/components/GrBadge/index.js +2 -2
  233. package/dist/components/GrBadge/styles.css +1 -0
  234. package/dist/components/GrBadge/themes/dark.css +19 -0
  235. package/dist/components/GrBadge/themes/light.css +18 -0
  236. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-C-E9betg.js +97 -0
  237. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-C-E9betg.js.map +1 -0
  238. package/dist/components/GrBadgeWrap/index.js +3 -3
  239. package/dist/components/GrBadgeWrap/styles.css +1 -0
  240. package/dist/components/GrBottomNav/chunks/GrBottomNav-9GH7Dd9E.js +117 -0
  241. package/dist/components/GrBottomNav/chunks/GrBottomNav-9GH7Dd9E.js.map +1 -0
  242. package/dist/components/GrBottomNav/index.js +3 -3
  243. package/dist/components/GrBreadcrumbs/chunks/GrBreadcrumbs-BCNGDS6k.js +266 -0
  244. package/dist/components/GrBreadcrumbs/chunks/GrBreadcrumbs-BCNGDS6k.js.map +1 -0
  245. package/dist/components/GrBreadcrumbs/index.js +3 -0
  246. package/dist/components/GrButton/chunks/GrButton-D0m_z0XW.js +153 -0
  247. package/dist/components/GrButton/chunks/GrButton-D0m_z0XW.js.map +1 -0
  248. package/dist/components/GrButton/index.js +5 -5
  249. package/dist/components/GrButton/themes/dark.css +46 -0
  250. package/dist/components/GrButton/themes/light.css +82 -0
  251. package/dist/components/GrButtonGroup/chunks/GrButtonGroup-CKyiAV8K.js +44 -0
  252. package/dist/components/GrButtonGroup/chunks/GrButtonGroup-CKyiAV8K.js.map +1 -0
  253. package/dist/components/GrButtonGroup/index.js +3 -2
  254. package/dist/components/GrButtonGroup/styles.css +1 -0
  255. package/dist/components/GrCard/chunks/GrCard-DOrGHf2x.js +89 -0
  256. package/dist/components/GrCard/chunks/GrCard-DOrGHf2x.js.map +1 -0
  257. package/dist/components/GrCard/index.js +3 -3
  258. package/dist/components/GrCheckbox/chunks/GrCheckbox-BLOp8452.js +262 -0
  259. package/dist/components/GrCheckbox/chunks/GrCheckbox-BLOp8452.js.map +1 -0
  260. package/dist/components/GrCheckbox/index.js +3 -3
  261. package/dist/components/GrCheckboxGroup/chunks/GrCheckboxGroup-CXTx2Z5H.js +140 -0
  262. package/dist/components/GrCheckboxGroup/chunks/GrCheckboxGroup-CXTx2Z5H.js.map +1 -0
  263. package/dist/components/GrCheckboxGroup/index.js +3 -0
  264. package/dist/components/GrCollapse/chunks/GrCollapse-B2Fc6A9r.js +308 -0
  265. package/dist/components/GrCollapse/chunks/GrCollapse-B2Fc6A9r.js.map +1 -0
  266. package/dist/components/GrCollapse/index.js +3 -3
  267. package/dist/components/GrColorPicker/chunks/GrColorPicker-DAdQ-Gc3.js +584 -0
  268. package/dist/components/GrColorPicker/chunks/GrColorPicker-DAdQ-Gc3.js.map +1 -0
  269. package/dist/components/GrColorPicker/index.js +3 -0
  270. package/dist/components/GrColorPicker/styles.css +1 -0
  271. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-DMeSqkEv.js +565 -0
  272. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-DMeSqkEv.js.map +1 -0
  273. package/dist/components/GrCommandPalette/index.js +2 -2
  274. package/dist/components/GrCommandPalette/styles.css +1 -0
  275. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BA6JO7V6.js +144 -0
  276. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BA6JO7V6.js.map +1 -0
  277. package/dist/components/GrConfigProvider/index.js +3 -3
  278. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-hUTi-GdJ.js +200 -0
  279. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-hUTi-GdJ.js.map +1 -0
  280. package/dist/components/GrConfirmDialog/index.js +2 -2
  281. package/dist/components/GrDataTable/chunks/GrDataTable-DzaGLG3A.js +1053 -0
  282. package/dist/components/GrDataTable/chunks/GrDataTable-DzaGLG3A.js.map +1 -0
  283. package/dist/components/GrDataTable/index.js +3 -3
  284. package/dist/components/GrDialog/chunks/GrDialog-MD9Fzy9C.js +255 -0
  285. package/dist/components/GrDialog/chunks/GrDialog-MD9Fzy9C.js.map +1 -0
  286. package/dist/components/GrDialog/index.js +1 -1
  287. package/dist/components/GrDialogService/chunks/GrDialogService-DtgUijMj.js +656 -0
  288. package/dist/components/GrDialogService/chunks/GrDialogService-DtgUijMj.js.map +1 -0
  289. package/dist/components/GrDialogService/index.js +3 -3
  290. package/dist/components/GrDivider/chunks/GrDivider-B2Xwc_QO.js +109 -0
  291. package/dist/components/GrDivider/chunks/GrDivider-B2Xwc_QO.js.map +1 -0
  292. package/dist/components/GrDivider/index.js +3 -3
  293. package/dist/components/GrDrawer/chunks/GrDrawer-DWHdZZzW.js +251 -0
  294. package/dist/components/GrDrawer/chunks/GrDrawer-DWHdZZzW.js.map +1 -0
  295. package/dist/components/GrDrawer/index.js +2 -2
  296. package/dist/components/GrDropdown/chunks/GrDropdown-0tJK01Kq.js +300 -0
  297. package/dist/components/GrDropdown/chunks/GrDropdown-0tJK01Kq.js.map +1 -0
  298. package/dist/components/GrDropdown/index.js +2 -2
  299. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-VPPrpCoA.js +421 -0
  300. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-VPPrpCoA.js.map +1 -0
  301. package/dist/components/GrDropdownMenu/index.js +3 -3
  302. package/dist/components/GrEmptyState/chunks/GrEmptyState-W7Irx3vc.js +86 -0
  303. package/dist/components/GrEmptyState/chunks/GrEmptyState-W7Irx3vc.js.map +1 -0
  304. package/dist/components/GrEmptyState/index.js +3 -3
  305. package/dist/components/GrFileUpload/chunks/GrFileUpload-DuDzC43S.js +1080 -0
  306. package/dist/components/GrFileUpload/chunks/GrFileUpload-DuDzC43S.js.map +1 -0
  307. package/dist/components/GrFileUpload/index.js +4 -4
  308. package/dist/components/GrForm/chunks/GrForm-BCHCfIMv.js +326 -0
  309. package/dist/components/GrForm/chunks/GrForm-BCHCfIMv.js.map +1 -0
  310. package/dist/components/GrForm/index.js +3 -2
  311. package/dist/components/GrFormField/chunks/GrFormField-CL5rcgj6.js +190 -0
  312. package/dist/components/GrFormField/chunks/GrFormField-CL5rcgj6.js.map +1 -0
  313. package/dist/components/GrFormField/index.js +3 -3
  314. package/dist/components/GrFormFile/chunks/GrFormFile-BikSD7bg.js +452 -0
  315. package/dist/components/GrFormFile/chunks/GrFormFile-BikSD7bg.js.map +1 -0
  316. package/dist/components/GrFormFile/index.js +3 -3
  317. package/dist/components/GrFormFile/styles.css +1 -0
  318. package/dist/components/GrFormSection/chunks/GrFormSection-BEh5n4jF.js +63 -0
  319. package/dist/components/GrFormSection/chunks/GrFormSection-BEh5n4jF.js.map +1 -0
  320. package/dist/components/GrFormSection/index.js +3 -3
  321. package/dist/components/GrIcon/chunks/GrIcon-BvA2ZGXP.js +57 -0
  322. package/dist/components/GrIcon/chunks/GrIcon-BvA2ZGXP.js.map +1 -0
  323. package/dist/components/GrIcon/index.js +3 -3
  324. package/dist/components/GrIcon/styles.css +1 -0
  325. package/dist/components/GrImageViewer/chunks/GrImageViewer-DE7MBbF8.js +1127 -0
  326. package/dist/components/GrImageViewer/chunks/GrImageViewer-DE7MBbF8.js.map +1 -0
  327. package/dist/components/GrImageViewer/index.js +3 -3
  328. package/dist/components/GrImageViewer/themes/dark.css +17 -0
  329. package/dist/components/GrImageViewer/themes/light.css +16 -0
  330. package/dist/components/GrInput/chunks/GrInput-2wd7Crs0.js +348 -0
  331. package/dist/components/GrInput/chunks/GrInput-2wd7Crs0.js.map +1 -0
  332. package/dist/components/GrInput/index.js +2 -2
  333. package/dist/components/GrInputTag/chunks/GrInputTag-CyV2eY7Z.js +512 -0
  334. package/dist/components/GrInputTag/chunks/GrInputTag-CyV2eY7Z.js.map +1 -0
  335. package/dist/components/GrInputTag/index.js +2 -2
  336. package/dist/components/GrKbd/chunks/GrKbd-DU2lBkRV.js +358 -0
  337. package/dist/components/GrKbd/chunks/GrKbd-DU2lBkRV.js.map +1 -0
  338. package/dist/components/GrKbd/index.js +3 -3
  339. package/dist/components/GrLink/chunks/GrLink-D-cgUMXW.js +163 -0
  340. package/dist/components/GrLink/chunks/GrLink-D-cgUMXW.js.map +1 -0
  341. package/dist/components/GrLink/index.js +2 -2
  342. package/dist/components/GrList/chunks/GrList-4YU1NZtM.js +277 -0
  343. package/dist/components/GrList/chunks/GrList-4YU1NZtM.js.map +1 -0
  344. package/dist/components/GrList/index.js +3 -3
  345. package/dist/components/GrList/styles.css +1 -0
  346. package/dist/components/GrLoading/chunks/GrLoading-CH95CFzS.js +101 -0
  347. package/dist/components/GrLoading/chunks/GrLoading-CH95CFzS.js.map +1 -0
  348. package/dist/components/GrLoading/index.js +2 -2
  349. package/dist/components/GrModal/chunks/GrModal-BbhcsDQ8.js +313 -0
  350. package/dist/components/GrModal/chunks/GrModal-BbhcsDQ8.js.map +1 -0
  351. package/dist/components/GrModal/index.js +3 -4
  352. package/dist/components/GrNavbar/chunks/GrNavbar-CF0KbM_6.js +104 -0
  353. package/dist/components/GrNavbar/chunks/GrNavbar-CF0KbM_6.js.map +1 -0
  354. package/dist/components/GrNavbar/index.js +3 -3
  355. package/dist/components/GrNumberInput/chunks/GrNumberInput-CZOyPz4J.js +658 -0
  356. package/dist/components/GrNumberInput/chunks/GrNumberInput-CZOyPz4J.js.map +1 -0
  357. package/dist/components/GrNumberInput/index.js +2 -2
  358. package/dist/components/GrPagination/chunks/GrPagination-waKhxBP7.js +283 -0
  359. package/dist/components/GrPagination/chunks/GrPagination-waKhxBP7.js.map +1 -0
  360. package/dist/components/GrPagination/index.js +3 -3
  361. package/dist/components/GrPopover/chunks/GrPopover-DuqeoFaI.js +216 -0
  362. package/dist/components/GrPopover/chunks/GrPopover-DuqeoFaI.js.map +1 -0
  363. package/dist/components/GrPopover/index.js +3 -0
  364. package/dist/components/GrProgressBar/chunks/GrProgressBar-xwbNM9QB.js +90 -0
  365. package/dist/components/GrProgressBar/chunks/GrProgressBar-xwbNM9QB.js.map +1 -0
  366. package/dist/components/GrProgressBar/index.js +2 -2
  367. package/dist/components/GrProgressBar/styles.css +1 -0
  368. package/dist/components/GrProgressBar/themes/dark.css +13 -0
  369. package/dist/components/GrProgressBar/themes/light.css +12 -0
  370. package/dist/components/GrProgressCircle/chunks/GrProgressCircle-B8olXRo5.js +210 -0
  371. package/dist/components/GrProgressCircle/chunks/GrProgressCircle-B8olXRo5.js.map +1 -0
  372. package/dist/components/GrProgressCircle/index.js +3 -0
  373. package/dist/components/GrProgressCircle/styles.css +1 -0
  374. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-JVVqBsPY.js +348 -0
  375. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-JVVqBsPY.js.map +1 -0
  376. package/dist/components/GrPromptDialog/index.js +2 -2
  377. package/dist/components/GrRadio/chunks/GrRadio-DWiRaMzt.js +253 -0
  378. package/dist/components/GrRadio/chunks/GrRadio-DWiRaMzt.js.map +1 -0
  379. package/dist/components/GrRadio/index.js +2 -2
  380. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-DIuBw0wk.js +196 -0
  381. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-DIuBw0wk.js.map +1 -0
  382. package/dist/components/GrRadioGroup/index.js +2 -2
  383. package/dist/components/GrRating/chunks/GrRating-LarIiwJL.js +315 -0
  384. package/dist/components/GrRating/chunks/GrRating-LarIiwJL.js.map +1 -0
  385. package/dist/components/GrRating/index.js +2 -2
  386. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-C7W9mgYN.js +777 -0
  387. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-C7W9mgYN.js.map +1 -0
  388. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-DhX4jjay.js +224 -0
  389. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-DhX4jjay.js.map +1 -0
  390. package/dist/components/GrResponseErrorBanner/index.js +2 -2
  391. package/dist/components/GrSegmented/chunks/GrSegmented-CQw3ijqa.js +388 -0
  392. package/dist/components/GrSegmented/chunks/GrSegmented-CQw3ijqa.js.map +1 -0
  393. package/dist/components/GrSegmented/index.js +3 -3
  394. package/dist/components/GrSelect/chunks/GrSelect-DAdu044K.js +1373 -0
  395. package/dist/components/GrSelect/chunks/GrSelect-DAdu044K.js.map +1 -0
  396. package/dist/components/GrSelect/index.js +2 -2
  397. package/dist/components/GrSelect/styles.css +1 -0
  398. package/dist/components/GrSidebar/chunks/GrSidebar-DRGnnViw.js +257 -0
  399. package/dist/components/GrSidebar/chunks/GrSidebar-DRGnnViw.js.map +1 -0
  400. package/dist/components/GrSidebar/index.js +3 -3
  401. package/dist/components/GrSkeleton/chunks/GrSkeleton-DEvNE3bC.js +84 -0
  402. package/dist/components/GrSkeleton/chunks/GrSkeleton-DEvNE3bC.js.map +1 -0
  403. package/dist/components/GrSkeleton/index.js +2 -2
  404. package/dist/components/GrSlider/chunks/GrSlider-CyhVsNKn.js +379 -0
  405. package/dist/components/GrSlider/chunks/GrSlider-CyhVsNKn.js.map +1 -0
  406. package/dist/components/GrSlider/index.js +2 -2
  407. package/dist/components/GrSortableList/chunks/GrSortableList-BefVfWKh.js +276 -0
  408. package/dist/components/GrSortableList/chunks/GrSortableList-BefVfWKh.js.map +1 -0
  409. package/dist/components/GrSortableList/index.js +3 -0
  410. package/dist/components/GrSplitter/chunks/GrSplitter-BzxVQwbY.js +268 -0
  411. package/dist/components/GrSplitter/chunks/GrSplitter-BzxVQwbY.js.map +1 -0
  412. package/dist/components/GrSplitter/index.js +3 -0
  413. package/dist/components/GrSplitter/styles.css +1 -0
  414. package/dist/components/GrStatistic/chunks/GrStatistic-J4qLs3TH.js +319 -0
  415. package/dist/components/GrStatistic/chunks/GrStatistic-J4qLs3TH.js.map +1 -0
  416. package/dist/components/GrStatistic/index.js +2 -2
  417. package/dist/components/GrSwitch/chunks/GrSwitch-DpyvVrZG.js +183 -0
  418. package/dist/components/GrSwitch/chunks/GrSwitch-DpyvVrZG.js.map +1 -0
  419. package/dist/components/GrSwitch/index.js +2 -2
  420. package/dist/components/GrTabPanels/chunks/GrTabPanels-BVe1CZdJ.js +81 -0
  421. package/dist/components/GrTabPanels/chunks/GrTabPanels-BVe1CZdJ.js.map +1 -0
  422. package/dist/components/GrTabPanels/index.js +1 -1
  423. package/dist/components/GrTable/chunks/GrTable-BfqgwETQ.js +169 -0
  424. package/dist/components/GrTable/chunks/GrTable-BfqgwETQ.js.map +1 -0
  425. package/dist/components/GrTable/index.js +3 -3
  426. package/dist/components/GrTabs/chunks/GrTabs-TeXaU5Uh.js +261 -0
  427. package/dist/components/GrTabs/chunks/GrTabs-TeXaU5Uh.js.map +1 -0
  428. package/dist/components/GrTabs/index.js +3 -3
  429. package/dist/components/GrTextarea/chunks/GrTextarea-DSvd1nSy.js +241 -0
  430. package/dist/components/GrTextarea/chunks/GrTextarea-DSvd1nSy.js.map +1 -0
  431. package/dist/components/GrTextarea/index.js +2 -2
  432. package/dist/components/GrTimeline/chunks/GrTimeline-B-h2Yanw.js +285 -0
  433. package/dist/components/GrTimeline/chunks/GrTimeline-B-h2Yanw.js.map +1 -0
  434. package/dist/components/GrTimeline/index.js +3 -0
  435. package/dist/components/GrTimeline/styles.css +1 -0
  436. package/dist/components/GrToaster/chunks/GrToaster-Ct-39hga.js +373 -0
  437. package/dist/components/GrToaster/chunks/GrToaster-Ct-39hga.js.map +1 -0
  438. package/dist/components/GrToaster/index.js +2 -2
  439. package/dist/components/GrToaster/styles.css +1 -0
  440. package/dist/components/GrTooltip/chunks/GrTooltip-xAcqs0bP.js +185 -0
  441. package/dist/components/GrTooltip/chunks/GrTooltip-xAcqs0bP.js.map +1 -0
  442. package/dist/components/GrTooltip/index.js +3 -3
  443. package/dist/components/GrTree/chunks/GrTree-CaYK8dGZ.js +1371 -0
  444. package/dist/components/GrTree/chunks/GrTree-CaYK8dGZ.js.map +1 -0
  445. package/dist/components/GrTree/index.js +2 -2
  446. package/dist/components/GrTree/styles.css +1 -0
  447. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-DZp7CqqW.js +623 -0
  448. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-DZp7CqqW.js.map +1 -0
  449. package/dist/components/GrTreeSelect/index.js +2 -2
  450. package/dist/composables/useAnnouncer.js +114 -0
  451. package/dist/composables/useAnnouncer.js.map +1 -0
  452. package/dist/composables/useComboboxNavigation.js +71 -0
  453. package/dist/composables/useComboboxNavigation.js.map +1 -0
  454. package/dist/composables/useDismissible.js +31 -0
  455. package/dist/composables/useDismissible.js.map +1 -0
  456. package/dist/composables/useDragGesture.js +55 -0
  457. package/dist/composables/useDragGesture.js.map +1 -0
  458. package/dist/composables/useDragSort.js +2 -0
  459. package/dist/composables/useFloating.js +133 -0
  460. package/dist/composables/useFloating.js.map +1 -0
  461. package/dist/composables/useFocusTrap.js +124 -0
  462. package/dist/composables/useFocusTrap.js.map +1 -0
  463. package/dist/composables/useGrComponentConfig.js +2 -0
  464. package/dist/composables/useGrFormControl.js +24 -0
  465. package/dist/composables/useGrFormControl.js.map +1 -0
  466. package/dist/composables/useGranularityTranslations.js +2 -0
  467. package/dist/composables/useOverlayLayer.js +65 -0
  468. package/dist/composables/useOverlayLayer.js.map +1 -0
  469. package/dist/composables/usePortalTarget.js +2 -0
  470. package/dist/composables/useRovingFocus.js +150 -0
  471. package/dist/composables/useRovingFocus.js.map +1 -0
  472. package/dist/composables/useTheme.js +106 -36
  473. package/dist/composables/useTheme.js.map +1 -1
  474. package/dist/composables/useToast.js +123 -7
  475. package/dist/composables/useToast.js.map +1 -1
  476. package/dist/composables/useVirtualList.js +244 -0
  477. package/dist/composables/useVirtualList.js.map +1 -0
  478. package/dist/directives/dropzone.js +1 -1
  479. package/dist/directives/hotkey.js +18 -18
  480. package/dist/directives/hotkey.js.map +1 -1
  481. package/dist/directives/loading.js +43 -7
  482. package/dist/directives/loading.js.map +1 -1
  483. package/dist/fileValidation/index.js +2 -2
  484. package/dist/granular-provider-node.js +1 -31
  485. package/dist/granular-provider.js +1 -4
  486. package/dist/i18n/all.js +1 -1
  487. package/dist/i18n/index.js +1 -1
  488. package/dist/index.js +157 -140
  489. package/dist/styles/base.css +32 -0
  490. package/dist/styles/preflight.css +33 -0
  491. package/dist/styles/themes/dark.css +81 -26
  492. package/dist/styles/themes/light.css +86 -15
  493. package/dist/styles/tokens.css +63 -4
  494. package/dist/tokens.js +3216 -0
  495. package/dist/tokens.js.map +1 -0
  496. package/dist/types/src/components/GrAlert/GrAlert.vue.d.ts +42 -10
  497. package/dist/types/src/components/GrAlert/config.d.ts +1 -1
  498. package/dist/types/src/components/GrAlert/defaults.d.ts +10 -4
  499. package/dist/types/src/components/GrAlert/grAlertStyles.d.ts +0 -7
  500. package/dist/types/src/components/GrAlert/index.d.ts +3 -2
  501. package/dist/types/src/components/GrAutocomplete/GrAutocomplete.vue.d.ts +112 -99
  502. package/dist/types/src/components/GrAutocomplete/config.d.ts +1 -1
  503. package/dist/types/src/components/GrAutocomplete/defaults.d.ts +1 -1
  504. package/dist/types/src/components/GrAutocomplete/grAutocompleteStyles.d.ts +43 -7
  505. package/dist/types/src/components/GrAutocomplete/index.d.ts +4 -0
  506. package/dist/types/src/components/GrAvatar/GrAvatar.vue.d.ts +40 -17
  507. package/dist/types/src/components/GrAvatar/GrAvatarGroup.vue.d.ts +70 -0
  508. package/dist/types/src/components/GrAvatar/avatarContext.d.ts +12 -0
  509. package/dist/types/src/components/GrAvatar/config.d.ts +1 -1
  510. package/dist/types/src/components/GrAvatar/defaults.d.ts +16 -0
  511. package/dist/types/src/components/GrAvatar/grAvatarStyles.d.ts +38 -0
  512. package/dist/types/src/components/GrAvatar/index.d.ts +5 -0
  513. package/dist/types/src/components/GrAvatar/safelist.d.ts +4 -0
  514. package/dist/types/src/components/GrBadge/GrBadge.vue.d.ts +4 -4
  515. package/dist/types/src/components/GrBadge/config.d.ts +1 -1
  516. package/dist/types/src/components/GrBadge/defaults.d.ts +1 -1
  517. package/dist/types/src/components/GrBadge/grBadgeStyles.d.ts +13 -1
  518. package/dist/types/src/components/GrBadge/index.d.ts +1 -0
  519. package/dist/types/src/components/GrBadgeWrap/GrBadgeWrap.vue.d.ts +42 -5
  520. package/dist/types/src/components/GrBadgeWrap/config.d.ts +1 -1
  521. package/dist/types/src/components/GrBadgeWrap/grBadgeWrapStyles.d.ts +46 -0
  522. package/dist/types/src/components/GrBadgeWrap/index.d.ts +4 -0
  523. package/dist/types/src/components/GrBadgeWrap/safelist.d.ts +1 -0
  524. package/dist/types/src/components/GrBottomNav/GrBottomNav.vue.d.ts +91 -4
  525. package/dist/types/src/components/GrBottomNav/config.d.ts +1 -1
  526. package/dist/types/src/components/GrBottomNav/defaults.d.ts +16 -0
  527. package/dist/types/src/components/GrBottomNav/grBottomNavStyles.d.ts +56 -0
  528. package/dist/types/src/components/GrBottomNav/index.d.ts +6 -1
  529. package/dist/types/src/components/GrBottomNav/safelist.d.ts +1 -0
  530. package/dist/types/src/components/GrBreadcrumbs/GrBreadcrumbs.vue.d.ts +117 -0
  531. package/dist/types/src/components/GrBreadcrumbs/config.d.ts +1 -0
  532. package/dist/types/src/components/GrBreadcrumbs/defaults.d.ts +15 -0
  533. package/dist/types/src/components/GrBreadcrumbs/grBreadcrumbsStyles.d.ts +86 -0
  534. package/dist/types/src/components/GrBreadcrumbs/index.d.ts +8 -0
  535. package/dist/types/src/components/GrBreadcrumbs/safelist.d.ts +1 -0
  536. package/dist/types/src/components/GrButton/GrButton.vue.d.ts +31 -7
  537. package/dist/types/src/components/GrButton/config.d.ts +1 -1
  538. package/dist/types/src/components/GrButton/defaults.d.ts +1 -1
  539. package/dist/types/src/components/GrButton/grButtonStyles.d.ts +27 -3
  540. package/dist/types/src/components/GrButton/index.d.ts +5 -1
  541. package/dist/types/src/components/GrButton/safelist.d.ts +1 -0
  542. package/dist/types/src/components/GrButtonGroup/GrButtonGroup.vue.d.ts +32 -4
  543. package/dist/types/src/components/GrButtonGroup/config.d.ts +1 -1
  544. package/dist/types/src/components/GrButtonGroup/context.d.ts +20 -0
  545. package/dist/types/src/components/GrButtonGroup/index.d.ts +3 -0
  546. package/dist/types/src/components/GrCard/GrCard.vue.d.ts +80 -3
  547. package/dist/types/src/components/GrCard/config.d.ts +1 -1
  548. package/dist/types/src/components/GrCard/defaults.d.ts +15 -0
  549. package/dist/types/src/components/GrCard/grCardStyles.d.ts +24 -0
  550. package/dist/types/src/components/GrCard/index.d.ts +5 -0
  551. package/dist/types/src/components/GrCard/safelist.d.ts +1 -0
  552. package/dist/types/src/components/GrCheckbox/GrCheckbox.vue.d.ts +56 -10
  553. package/dist/types/src/components/GrCheckbox/config.d.ts +1 -1
  554. package/dist/types/src/components/GrCheckbox/defaults.d.ts +14 -0
  555. package/dist/types/src/components/GrCheckbox/grCheckboxGroupContext.d.ts +19 -0
  556. package/dist/types/src/components/GrCheckbox/grCheckboxStyles.d.ts +44 -0
  557. package/dist/types/src/components/GrCheckbox/index.d.ts +9 -0
  558. package/dist/types/src/components/GrCheckbox/safelist.d.ts +13 -0
  559. package/dist/types/src/components/GrCheckboxGroup/GrCheckboxGroup.vue.d.ts +105 -0
  560. package/dist/types/src/components/GrCheckboxGroup/config.d.ts +1 -0
  561. package/dist/types/src/components/GrCheckboxGroup/defaults.d.ts +14 -0
  562. package/dist/types/src/components/GrCheckboxGroup/index.d.ts +9 -0
  563. package/dist/types/src/components/GrCollapse/GrCollapse.vue.d.ts +55 -7
  564. package/dist/types/src/components/GrCollapse/GrCollapseItem.vue.d.ts +13 -3
  565. package/dist/types/src/components/GrCollapse/config.d.ts +1 -1
  566. package/dist/types/src/components/GrCollapse/defaults.d.ts +19 -0
  567. package/dist/types/src/components/GrCollapse/grCollapseContext.d.ts +20 -0
  568. package/dist/types/src/components/GrCollapse/grCollapseStyles.d.ts +42 -0
  569. package/dist/types/src/components/GrCollapse/index.d.ts +3 -0
  570. package/dist/types/src/components/GrCollapse/safelist.d.ts +15 -0
  571. package/dist/types/src/components/GrColorPicker/GrColorPicker.vue.d.ts +104 -0
  572. package/dist/types/src/components/GrColorPicker/color.d.ts +38 -0
  573. package/dist/types/src/components/GrColorPicker/config.d.ts +1 -0
  574. package/dist/types/src/components/GrColorPicker/defaults.d.ts +15 -0
  575. package/dist/types/src/components/GrColorPicker/grColorPickerStyles.d.ts +39 -0
  576. package/dist/types/src/components/GrColorPicker/index.d.ts +11 -0
  577. package/dist/types/src/components/GrColorPicker/safelist.d.ts +1 -0
  578. package/dist/types/src/components/GrCommandPalette/GrCommandPalette.vue.d.ts +45 -10
  579. package/dist/types/src/components/GrCommandPalette/config.d.ts +1 -1
  580. package/dist/types/src/components/GrCommandPalette/defaults.d.ts +14 -0
  581. package/dist/types/src/components/GrCommandPalette/filtering.d.ts +24 -0
  582. package/dist/types/src/components/GrCommandPalette/grCommandPaletteStyles.d.ts +33 -8
  583. package/dist/types/src/components/GrCommandPalette/index.d.ts +4 -0
  584. package/dist/types/src/components/GrConfigProvider/GrConfigProvider.vue.d.ts +38 -4
  585. package/dist/types/src/components/GrConfigProvider/config.d.ts +1 -1
  586. package/dist/types/src/components/GrConfigProvider/context.d.ts +33 -22
  587. package/dist/types/src/components/GrConfigProvider/index.d.ts +2 -1
  588. package/dist/types/src/components/GrConfigProvider/zIndexScale.d.ts +23 -0
  589. package/dist/types/src/components/GrConfirmDialog/GrConfirmDialog.vue.d.ts +33 -4
  590. package/dist/types/src/components/GrConfirmDialog/config.d.ts +1 -1
  591. package/dist/types/src/components/GrConfirmDialog/defaults.d.ts +14 -0
  592. package/dist/types/src/components/GrConfirmDialog/index.d.ts +2 -1
  593. package/dist/types/src/components/GrDataTable/GrDataTable.vue.d.ts +145 -27
  594. package/dist/types/src/components/GrDataTable/config.d.ts +1 -1
  595. package/dist/types/src/components/GrDataTable/defaults.d.ts +10 -0
  596. package/dist/types/src/components/GrDataTable/grDataTableSort.d.ts +25 -0
  597. package/dist/types/src/components/GrDataTable/grDataTableStyles.d.ts +68 -0
  598. package/dist/types/src/components/GrDataTable/index.d.ts +10 -1
  599. package/dist/types/src/components/GrDataTable/safelist.d.ts +1 -0
  600. package/dist/types/src/components/GrDialog/GrDialog.vue.d.ts +51 -4
  601. package/dist/types/src/components/GrDialog/GrDialogCloseButton.vue.d.ts +3 -0
  602. package/dist/types/src/components/GrDialog/GrDialogHeader.vue.d.ts +3 -0
  603. package/dist/types/src/components/GrDialog/config.d.ts +1 -1
  604. package/dist/types/src/components/GrDialog/defaults.d.ts +14 -0
  605. package/dist/types/src/components/GrDialog/dialogShared.d.ts +2 -1
  606. package/dist/types/src/components/GrDialog/index.d.ts +5 -0
  607. package/dist/types/src/components/GrDialogService/GrDialogServiceHost.vue.d.ts +18 -1
  608. package/dist/types/src/components/GrDialogService/GrDialogServiceItem.vue.d.ts +15 -0
  609. package/dist/types/src/components/GrDialogService/config.d.ts +1 -1
  610. package/dist/types/src/components/GrDialogService/index.d.ts +3 -1
  611. package/dist/types/src/components/GrDialogService/store.d.ts +78 -7
  612. package/dist/types/src/components/GrDialogService/types.d.ts +22 -1
  613. package/dist/types/src/components/GrDialogService/useDialogService.d.ts +31 -1
  614. package/dist/types/src/components/GrDivider/GrDivider.vue.d.ts +44 -9
  615. package/dist/types/src/components/GrDivider/config.d.ts +1 -1
  616. package/dist/types/src/components/GrDivider/defaults.d.ts +15 -0
  617. package/dist/types/src/components/GrDivider/grDividerStyles.d.ts +19 -0
  618. package/dist/types/src/components/GrDivider/index.d.ts +4 -1
  619. package/dist/types/src/components/GrDivider/safelist.d.ts +1 -0
  620. package/dist/types/src/components/GrDrawer/GrDrawer.vue.d.ts +93 -17
  621. package/dist/types/src/components/GrDrawer/config.d.ts +1 -1
  622. package/dist/types/src/components/GrDrawer/defaults.d.ts +19 -0
  623. package/dist/types/src/components/GrDrawer/grDrawerStyles.d.ts +48 -2
  624. package/dist/types/src/components/GrDrawer/index.d.ts +6 -1
  625. package/dist/types/src/components/GrDropdown/GrDropdown.vue.d.ts +66 -13
  626. package/dist/types/src/components/GrDropdown/config.d.ts +1 -1
  627. package/dist/types/src/components/GrDropdown/grDropdownStyles.d.ts +4 -5
  628. package/dist/types/src/components/GrDropdown/index.d.ts +5 -2
  629. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenu.vue.d.ts +79 -16
  630. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuColumn.vue.d.ts +2 -1
  631. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuColumns.vue.d.ts +3 -2
  632. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuGroup.vue.d.ts +2 -2
  633. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuHeader.vue.d.ts +3 -2
  634. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuItem.vue.d.ts +51 -5
  635. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuList.vue.d.ts +5 -0
  636. package/dist/types/src/components/GrDropdownMenu/config.d.ts +1 -1
  637. package/dist/types/src/components/GrDropdownMenu/grDropdownMenuStyles.d.ts +33 -0
  638. package/dist/types/src/components/GrDropdownMenu/index.d.ts +6 -2
  639. package/dist/types/src/components/GrDropdownMenu/menuModel.d.ts +42 -0
  640. package/dist/types/src/components/GrDropdownMenu/safelist.d.ts +7 -0
  641. package/dist/types/src/components/GrEmptyState/GrEmptyState.vue.d.ts +33 -10
  642. package/dist/types/src/components/GrEmptyState/config.d.ts +1 -1
  643. package/dist/types/src/components/GrEmptyState/defaults.d.ts +16 -0
  644. package/dist/types/src/components/GrEmptyState/grEmptyStateStyles.d.ts +32 -0
  645. package/dist/types/src/components/GrEmptyState/index.d.ts +4 -0
  646. package/dist/types/src/components/GrEmptyState/safelist.d.ts +1 -0
  647. package/dist/types/src/components/GrFileUpload/GrFileUpload.vue.d.ts +158 -148
  648. package/dist/types/src/components/GrFileUpload/config.d.ts +1 -1
  649. package/dist/types/src/components/GrFileUpload/defaults.d.ts +10 -0
  650. package/dist/types/src/components/GrFileUpload/fileEntry.d.ts +26 -0
  651. package/dist/types/src/components/GrFileUpload/grFileUploadStyles.d.ts +45 -0
  652. package/dist/types/src/components/GrFileUpload/index.d.ts +10 -1
  653. package/dist/types/src/components/GrFileUpload/maxFileSize.d.ts +2 -0
  654. package/dist/types/src/components/GrFileUpload/safelist.d.ts +1 -0
  655. package/dist/types/src/components/GrFileUpload/useDropZone.d.ts +24 -0
  656. package/dist/types/src/components/GrFileUpload/usePerFileUpload.d.ts +38 -0
  657. package/dist/types/src/components/GrFileUpload/useUploadState.d.ts +30 -0
  658. package/dist/types/src/components/GrForm/GrForm.vue.d.ts +38 -2
  659. package/dist/types/src/components/GrForm/config.d.ts +1 -1
  660. package/dist/types/src/components/GrForm/context.d.ts +22 -3
  661. package/dist/types/src/components/GrForm/fileRule.d.ts +43 -0
  662. package/dist/types/src/components/GrForm/index.d.ts +6 -2
  663. package/dist/types/src/components/GrForm/modelSnapshot.d.ts +17 -0
  664. package/dist/types/src/components/GrForm/validation.d.ts +16 -1
  665. package/dist/types/src/components/GrFormField/GrFormField.vue.d.ts +56 -10
  666. package/dist/types/src/components/GrFormField/config.d.ts +1 -1
  667. package/dist/types/src/components/GrFormField/context.d.ts +19 -0
  668. package/dist/types/src/components/GrFormField/defaults.d.ts +15 -0
  669. package/dist/types/src/components/GrFormField/grFormFieldStyles.d.ts +19 -0
  670. package/dist/types/src/components/GrFormField/index.d.ts +5 -1
  671. package/dist/types/src/components/GrFormField/safelist.d.ts +1 -0
  672. package/dist/types/src/components/GrFormFile/GrFormFile.vue.d.ts +70 -16
  673. package/dist/types/src/components/GrFormFile/config.d.ts +1 -1
  674. package/dist/types/src/components/GrFormFile/defaults.d.ts +10 -0
  675. package/dist/types/src/components/GrFormFile/grFormFileStyles.d.ts +22 -0
  676. package/dist/types/src/components/GrFormFile/index.d.ts +7 -0
  677. package/dist/types/src/components/GrFormFile/safelist.d.ts +1 -0
  678. package/dist/types/src/components/GrFormSection/GrFormSection.vue.d.ts +34 -7
  679. package/dist/types/src/components/GrFormSection/config.d.ts +1 -1
  680. package/dist/types/src/components/GrFormSection/defaults.d.ts +14 -0
  681. package/dist/types/src/components/GrFormSection/grFormSectionStyles.d.ts +12 -0
  682. package/dist/types/src/components/GrFormSection/index.d.ts +4 -0
  683. package/dist/types/src/components/GrFormSection/safelist.d.ts +1 -0
  684. package/dist/types/src/components/GrIcon/GrIcon.vue.d.ts +40 -4
  685. package/dist/types/src/components/GrIcon/config.d.ts +1 -1
  686. package/dist/types/src/components/GrIcon/defaults.d.ts +14 -0
  687. package/dist/types/src/components/GrIcon/grIconStyles.d.ts +25 -0
  688. package/dist/types/src/components/GrIcon/index.d.ts +4 -0
  689. package/dist/types/src/components/GrIcon/safelist.d.ts +1 -0
  690. package/dist/types/src/components/GrImageViewer/GrImageViewer.vue.d.ts +87 -16
  691. package/dist/types/src/components/GrImageViewer/composables/usePointerGestures.d.ts +37 -0
  692. package/dist/types/src/components/GrImageViewer/composables/useViewerKeyboard.d.ts +7 -4
  693. package/dist/types/src/components/GrImageViewer/composables/useWheelGesture.d.ts +3 -2
  694. package/dist/types/src/components/GrImageViewer/composables/useZoomPan.d.ts +18 -5
  695. package/dist/types/src/components/GrImageViewer/config.d.ts +1 -1
  696. package/dist/types/src/components/GrImageViewer/grImageViewerStyles.d.ts +21 -0
  697. package/dist/types/src/components/GrImageViewer/index.d.ts +7 -0
  698. package/dist/types/src/components/GrImageViewer/safelist.d.ts +1 -0
  699. package/dist/types/src/components/GrInput/GrInput.vue.d.ts +66 -21
  700. package/dist/types/src/components/GrInput/config.d.ts +1 -1
  701. package/dist/types/src/components/GrInput/defaults.d.ts +1 -1
  702. package/dist/types/src/components/GrInput/grInputStyles.d.ts +53 -7
  703. package/dist/types/src/components/GrInput/index.d.ts +5 -0
  704. package/dist/types/src/components/GrInputTag/GrInputTag.vue.d.ts +97 -14
  705. package/dist/types/src/components/GrInputTag/config.d.ts +1 -1
  706. package/dist/types/src/components/GrInputTag/defaults.d.ts +17 -0
  707. package/dist/types/src/components/GrInputTag/grInputTagStyles.d.ts +24 -1
  708. package/dist/types/src/components/GrInputTag/index.d.ts +5 -0
  709. package/dist/types/src/components/GrKbd/GrKbd.vue.d.ts +46 -10
  710. package/dist/types/src/components/GrKbd/config.d.ts +1 -1
  711. package/dist/types/src/components/GrKbd/defaults.d.ts +14 -0
  712. package/dist/types/src/components/GrKbd/grKbdStyles.d.ts +32 -0
  713. package/dist/types/src/components/GrKbd/index.d.ts +10 -1
  714. package/dist/types/src/components/GrKbd/safelist.d.ts +1 -0
  715. package/dist/types/src/components/GrLink/GrLink.vue.d.ts +23 -10
  716. package/dist/types/src/components/GrLink/config.d.ts +1 -1
  717. package/dist/types/src/components/GrLink/defaults.d.ts +14 -0
  718. package/dist/types/src/components/GrLink/grLinkStyles.d.ts +11 -13
  719. package/dist/types/src/components/GrLink/index.d.ts +2 -0
  720. package/dist/types/src/components/GrList/GrList.vue.d.ts +57 -32
  721. package/dist/types/src/components/GrList/GrListItem.vue.d.ts +42 -9
  722. package/dist/types/src/components/GrList/config.d.ts +1 -1
  723. package/dist/types/src/components/GrList/grListStyles.d.ts +25 -0
  724. package/dist/types/src/components/GrList/index.d.ts +5 -0
  725. package/dist/types/src/components/GrList/safelist.d.ts +1 -0
  726. package/dist/types/src/components/GrLoading/GrLoading.vue.d.ts +59 -19
  727. package/dist/types/src/components/GrLoading/config.d.ts +1 -1
  728. package/dist/types/src/components/GrLoading/grLoadingStyles.d.ts +10 -2
  729. package/dist/types/src/components/GrLoading/index.d.ts +1 -0
  730. package/dist/types/src/components/GrModal/GrModal.vue.d.ts +58 -12
  731. package/dist/types/src/components/GrModal/config.d.ts +1 -1
  732. package/dist/types/src/components/GrModal/context.d.ts +37 -0
  733. package/dist/types/src/components/GrModal/defaults.d.ts +14 -0
  734. package/dist/types/src/components/GrModal/grModalStyles.d.ts +25 -10
  735. package/dist/types/src/components/GrModal/index.d.ts +6 -3
  736. package/dist/types/src/components/GrNavbar/GrNavbar.vue.d.ts +28 -9
  737. package/dist/types/src/components/GrNavbar/config.d.ts +1 -1
  738. package/dist/types/src/components/GrNavbar/grNavbarStyles.d.ts +23 -0
  739. package/dist/types/src/components/GrNavbar/index.d.ts +2 -0
  740. package/dist/types/src/components/GrNavbar/safelist.d.ts +1 -0
  741. package/dist/types/src/components/GrNumberInput/GrNumberInput.vue.d.ts +64 -17
  742. package/dist/types/src/components/GrNumberInput/config.d.ts +1 -1
  743. package/dist/types/src/components/GrNumberInput/defaults.d.ts +2 -1
  744. package/dist/types/src/components/GrNumberInput/grNumberInputStyles.d.ts +20 -4
  745. package/dist/types/src/components/GrNumberInput/index.d.ts +4 -0
  746. package/dist/types/src/components/GrNumberInput/numberInputMath.d.ts +17 -0
  747. package/dist/types/src/components/GrPagination/GrPagination.vue.d.ts +47 -1
  748. package/dist/types/src/components/GrPagination/config.d.ts +1 -1
  749. package/dist/types/src/components/GrPagination/defaults.d.ts +10 -0
  750. package/dist/types/src/components/GrPagination/grPaginationStyles.d.ts +19 -0
  751. package/dist/types/src/components/GrPagination/index.d.ts +4 -0
  752. package/dist/types/src/components/GrPagination/safelist.d.ts +1 -0
  753. package/dist/types/src/components/GrPopover/GrPopover.vue.d.ts +161 -0
  754. package/dist/types/src/components/GrPopover/config.d.ts +1 -0
  755. package/dist/types/src/components/GrPopover/defaults.d.ts +15 -0
  756. package/dist/types/src/components/GrPopover/grPopoverStyles.d.ts +28 -0
  757. package/dist/types/src/components/GrPopover/index.d.ts +11 -0
  758. package/dist/types/src/components/GrPopover/safelist.d.ts +1 -0
  759. package/dist/types/src/components/GrProgressBar/GrProgressBar.vue.d.ts +37 -5
  760. package/dist/types/src/components/GrProgressBar/config.d.ts +1 -1
  761. package/dist/types/src/components/GrProgressBar/defaults.d.ts +11 -0
  762. package/dist/types/src/components/GrProgressBar/grStyle.d.ts +14 -0
  763. package/dist/types/src/components/GrProgressBar/index.d.ts +2 -1
  764. package/dist/types/src/components/GrProgressBar/safelist.d.ts +4 -0
  765. package/dist/types/src/components/GrProgressCircle/GrProgressCircle.vue.d.ts +103 -0
  766. package/dist/types/src/components/GrProgressCircle/config.d.ts +1 -0
  767. package/dist/types/src/components/GrProgressCircle/defaults.d.ts +18 -0
  768. package/dist/types/src/components/GrProgressCircle/geometry.d.ts +29 -0
  769. package/dist/types/src/components/GrProgressCircle/grProgressCircleStyles.d.ts +34 -0
  770. package/dist/types/src/components/GrProgressCircle/index.d.ts +11 -0
  771. package/dist/types/src/components/GrProgressCircle/safelist.d.ts +1 -0
  772. package/dist/types/src/components/GrPromptDialog/GrPromptDialog.vue.d.ts +78 -10
  773. package/dist/types/src/components/GrPromptDialog/config.d.ts +1 -1
  774. package/dist/types/src/components/GrPromptDialog/defaults.d.ts +14 -0
  775. package/dist/types/src/components/GrPromptDialog/index.d.ts +1 -0
  776. package/dist/types/src/components/GrRadio/GrRadio.vue.d.ts +28 -9
  777. package/dist/types/src/components/GrRadio/config.d.ts +1 -1
  778. package/dist/types/src/components/GrRadio/defaults.d.ts +1 -1
  779. package/dist/types/src/components/GrRadio/grRadioGroupContext.d.ts +45 -2
  780. package/dist/types/src/components/GrRadio/grRadioStyles.d.ts +49 -6
  781. package/dist/types/src/components/GrRadio/index.d.ts +1 -0
  782. package/dist/types/src/components/GrRadioGroup/GrRadioGroup.vue.d.ts +54 -10
  783. package/dist/types/src/components/GrRadioGroup/config.d.ts +1 -1
  784. package/dist/types/src/components/GrRadioGroup/defaults.d.ts +1 -1
  785. package/dist/types/src/components/GrRadioGroup/index.d.ts +4 -0
  786. package/dist/types/src/components/GrRating/GrRating.vue.d.ts +66 -17
  787. package/dist/types/src/components/GrRating/config.d.ts +1 -1
  788. package/dist/types/src/components/GrRating/defaults.d.ts +1 -1
  789. package/dist/types/src/components/GrRating/grRatingStyles.d.ts +4 -1
  790. package/dist/types/src/components/GrRating/index.d.ts +4 -0
  791. package/dist/types/src/components/GrResponseErrorBanner/GrFormErrorBanner.vue.d.ts +8 -4
  792. package/dist/types/src/components/GrResponseErrorBanner/GrResponseErrorBanner.vue.d.ts +8 -4
  793. package/dist/types/src/components/GrResponseErrorBanner/GrUploadErrorBanner.vue.d.ts +11 -4
  794. package/dist/types/src/components/GrResponseErrorBanner/config.d.ts +1 -1
  795. package/dist/types/src/components/GrResponseErrorBanner/index.d.ts +6 -0
  796. package/dist/types/src/components/GrResponseErrorBanner/parsers/httpStatusParser.d.ts +3 -1
  797. package/dist/types/src/components/GrResponseErrorBanner/parsers/plainMessageParser.d.ts +4 -1
  798. package/dist/types/src/components/GrResponseErrorBanner/responseError.types.d.ts +12 -2
  799. package/dist/types/src/components/GrSegmented/GrSegmented.vue.d.ts +48 -9
  800. package/dist/types/src/components/GrSegmented/config.d.ts +1 -1
  801. package/dist/types/src/components/GrSegmented/defaults.d.ts +1 -1
  802. package/dist/types/src/components/GrSegmented/grSegmentedStyles.d.ts +31 -5
  803. package/dist/types/src/components/GrSegmented/index.d.ts +5 -1
  804. package/dist/types/src/components/GrSegmented/safelist.d.ts +3 -1
  805. package/dist/types/src/components/GrSelect/GrSelect.vue.d.ts +138 -114
  806. package/dist/types/src/components/GrSelect/composables/useSelectNavigation.d.ts +52 -0
  807. package/dist/types/src/components/GrSelect/composables/useSelectPanelItems.d.ts +67 -0
  808. package/dist/types/src/components/GrSelect/composables/useSelectValues.d.ts +37 -0
  809. package/dist/types/src/components/GrSelect/composables/useSelectVirtualization.d.ts +27 -0
  810. package/dist/types/src/components/GrSelect/config.d.ts +1 -1
  811. package/dist/types/src/components/GrSelect/defaults.d.ts +1 -1
  812. package/dist/types/src/components/GrSelect/grSelectStyles.d.ts +64 -9
  813. package/dist/types/src/components/GrSelect/index.d.ts +5 -1
  814. package/dist/types/src/components/GrSelect/selectValue.d.ts +20 -0
  815. package/dist/types/src/components/GrSidebar/GrSidebar.vue.d.ts +30 -5
  816. package/dist/types/src/components/GrSidebar/GrSidebarGroup.vue.d.ts +43 -0
  817. package/dist/types/src/components/GrSidebar/GrSidebarItem.vue.d.ts +4 -4
  818. package/dist/types/src/components/GrSidebar/config.d.ts +1 -1
  819. package/dist/types/src/components/GrSidebar/grSidebarStyles.d.ts +48 -0
  820. package/dist/types/src/components/GrSidebar/index.d.ts +6 -0
  821. package/dist/types/src/components/GrSidebar/safelist.d.ts +1 -0
  822. package/dist/types/src/components/GrSkeleton/GrSkeleton.vue.d.ts +22 -6
  823. package/dist/types/src/components/GrSkeleton/config.d.ts +1 -1
  824. package/dist/types/src/components/GrSkeleton/grSkeletonStyles.d.ts +9 -0
  825. package/dist/types/src/components/GrSkeleton/index.d.ts +1 -0
  826. package/dist/types/src/components/GrSlider/GrSlider.vue.d.ts +54 -4
  827. package/dist/types/src/components/GrSlider/config.d.ts +1 -1
  828. package/dist/types/src/components/GrSlider/defaults.d.ts +1 -1
  829. package/dist/types/src/components/GrSlider/grSliderStyles.d.ts +47 -8
  830. package/dist/types/src/components/GrSlider/index.d.ts +4 -0
  831. package/dist/types/src/components/GrSortableList/GrSortableList.vue.d.ts +68 -0
  832. package/dist/types/src/components/GrSortableList/config.d.ts +1 -0
  833. package/dist/types/src/components/GrSortableList/grSortableListStyles.d.ts +38 -0
  834. package/dist/types/src/components/GrSortableList/index.d.ts +9 -0
  835. package/dist/types/src/components/GrSortableList/safelist.d.ts +1 -0
  836. package/dist/types/src/components/GrSplitter/GrSplitter.vue.d.ts +121 -0
  837. package/dist/types/src/components/GrSplitter/config.d.ts +1 -0
  838. package/dist/types/src/components/GrSplitter/defaults.d.ts +16 -0
  839. package/dist/types/src/components/GrSplitter/grSplitterStyles.d.ts +9 -0
  840. package/dist/types/src/components/GrSplitter/index.d.ts +11 -0
  841. package/dist/types/src/components/GrSplitter/safelist.d.ts +1 -0
  842. package/dist/types/src/components/GrSplitter/splitterGeometry.d.ts +39 -0
  843. package/dist/types/src/components/GrStatistic/GrStatistic.vue.d.ts +65 -16
  844. package/dist/types/src/components/GrStatistic/config.d.ts +1 -1
  845. package/dist/types/src/components/GrStatistic/countUp.d.ts +17 -0
  846. package/dist/types/src/components/GrStatistic/defaults.d.ts +14 -0
  847. package/dist/types/src/components/GrStatistic/formatStatisticValue.d.ts +6 -2
  848. package/dist/types/src/components/GrStatistic/grStatisticStyles.d.ts +14 -1
  849. package/dist/types/src/components/GrStatistic/index.d.ts +2 -1
  850. package/dist/types/src/components/GrSwitch/GrSwitch.vue.d.ts +68 -6
  851. package/dist/types/src/components/GrSwitch/config.d.ts +1 -1
  852. package/dist/types/src/components/GrSwitch/defaults.d.ts +1 -1
  853. package/dist/types/src/components/GrSwitch/grSwitchStyles.d.ts +45 -4
  854. package/dist/types/src/components/GrSwitch/index.d.ts +5 -1
  855. package/dist/types/src/components/GrSwitch/safelist.d.ts +4 -1
  856. package/dist/types/src/components/GrTabPanels/GrTabPanel.vue.d.ts +12 -9
  857. package/dist/types/src/components/GrTabPanels/GrTabPanels.vue.d.ts +4 -14
  858. package/dist/types/src/components/GrTabPanels/config.d.ts +1 -1
  859. package/dist/types/src/components/GrTabPanels/context.d.ts +1 -1
  860. package/dist/types/src/components/GrTabPanels/index.d.ts +2 -0
  861. package/dist/types/src/components/GrTable/GrTable.vue.d.ts +98 -15
  862. package/dist/types/src/components/GrTable/config.d.ts +1 -1
  863. package/dist/types/src/components/GrTable/defaults.d.ts +10 -0
  864. package/dist/types/src/components/GrTable/grTableStyles.d.ts +20 -0
  865. package/dist/types/src/components/GrTable/index.d.ts +7 -1
  866. package/dist/types/src/components/GrTable/safelist.d.ts +1 -0
  867. package/dist/types/src/components/GrTabs/GrTabs.vue.d.ts +92 -6
  868. package/dist/types/src/components/GrTabs/config.d.ts +1 -1
  869. package/dist/types/src/components/GrTabs/defaults.d.ts +12 -0
  870. package/dist/types/src/components/GrTabs/grTabsStyles.d.ts +71 -0
  871. package/dist/types/src/components/GrTabs/index.d.ts +5 -0
  872. package/dist/types/src/components/GrTabs/safelist.d.ts +1 -0
  873. package/dist/types/src/components/GrTextarea/GrTextarea.vue.d.ts +89 -24
  874. package/dist/types/src/components/GrTextarea/config.d.ts +1 -1
  875. package/dist/types/src/components/GrTextarea/defaults.d.ts +18 -0
  876. package/dist/types/src/components/GrTextarea/grTextareaStyles.d.ts +33 -1
  877. package/dist/types/src/components/GrTextarea/index.d.ts +6 -1
  878. package/dist/types/src/components/GrTimeline/GrTimeline.vue.d.ts +70 -0
  879. package/dist/types/src/components/GrTimeline/GrTimelineItem.vue.d.ts +84 -0
  880. package/dist/types/src/components/GrTimeline/config.d.ts +1 -0
  881. package/dist/types/src/components/GrTimeline/defaults.d.ts +19 -0
  882. package/dist/types/src/components/GrTimeline/grTimelineContext.d.ts +18 -0
  883. package/dist/types/src/components/GrTimeline/grTimelineStyles.d.ts +37 -0
  884. package/dist/types/src/components/GrTimeline/index.d.ts +12 -0
  885. package/dist/types/src/components/GrTimeline/safelist.d.ts +1 -0
  886. package/dist/types/src/components/GrTimeline/timelineGroups.d.ts +23 -0
  887. package/dist/types/src/components/GrToaster/GrToaster.vue.d.ts +33 -1
  888. package/dist/types/src/components/GrToaster/config.d.ts +1 -1
  889. package/dist/types/src/components/GrToaster/grToasterStyles.d.ts +27 -0
  890. package/dist/types/src/components/GrToaster/index.d.ts +3 -0
  891. package/dist/types/src/components/GrTooltip/GrTooltip.vue.d.ts +57 -6
  892. package/dist/types/src/components/GrTooltip/config.d.ts +1 -1
  893. package/dist/types/src/components/GrTooltip/defaults.d.ts +10 -0
  894. package/dist/types/src/components/GrTooltip/grTooltipStyles.d.ts +8 -0
  895. package/dist/types/src/components/GrTooltip/index.d.ts +5 -1
  896. package/dist/types/src/components/GrTooltip/safelist.d.ts +1 -0
  897. package/dist/types/src/components/GrTree/GrTree.vue.d.ts +20 -7
  898. package/dist/types/src/components/GrTree/config.d.ts +1 -1
  899. package/dist/types/src/components/GrTree/defaults.d.ts +10 -0
  900. package/dist/types/src/components/GrTree/grTreeChecking.d.ts +31 -0
  901. package/dist/types/src/components/GrTree/grTreeDataAdapter.d.ts +2 -0
  902. package/dist/types/src/components/GrTree/grTreeInteractionContext.d.ts +9 -1
  903. package/dist/types/src/components/GrTree/grTreeProps.d.ts +60 -11
  904. package/dist/types/src/components/GrTree/grTreeStore.d.ts +27 -1
  905. package/dist/types/src/components/GrTree/grTreeStyles.d.ts +22 -0
  906. package/dist/types/src/components/GrTree/grTreeTypes.d.ts +15 -0
  907. package/dist/types/src/components/GrTree/index.d.ts +5 -1
  908. package/dist/types/src/components/GrTreeSelect/GrTreeSelect.vue.d.ts +30 -9
  909. package/dist/types/src/components/GrTreeSelect/config.d.ts +1 -1
  910. package/dist/types/src/components/GrTreeSelect/defaults.d.ts +10 -0
  911. package/dist/types/src/components/GrTreeSelect/grTreeSelectStyles.d.ts +29 -1
  912. package/dist/types/src/components/GrTreeSelect/grTreeSelectTypes.d.ts +43 -0
  913. package/dist/types/src/components/GrTreeSelect/index.d.ts +5 -0
  914. package/dist/types/src/components/shared/hotkey.d.ts +38 -0
  915. package/dist/types/src/components/shared/hotkeyTokens.d.ts +37 -0
  916. package/dist/types/src/components/shared/instance.d.ts +15 -0
  917. package/dist/types/src/components/shared/optionFilter.d.ts +61 -0
  918. package/dist/types/src/components/shared/sizes.d.ts +30 -0
  919. package/dist/types/src/components/shared/slotNodes.d.ts +19 -0
  920. package/dist/types/src/composables/internal/dragSortGeometry.d.ts +59 -0
  921. package/dist/types/src/composables/internal/focusables.d.ts +30 -0
  922. package/dist/types/src/composables/internal/inert.d.ts +35 -0
  923. package/dist/types/src/composables/internal/overlayStack.d.ts +71 -0
  924. package/dist/types/src/composables/internal/portalRoot.d.ts +27 -0
  925. package/dist/types/src/composables/internal/useAddonMeasurement.d.ts +1 -1
  926. package/dist/types/src/composables/internal/useControlAddons.d.ts +61 -0
  927. package/dist/types/src/composables/internal/useControlledOpen.d.ts +14 -0
  928. package/dist/types/src/composables/internal/useFilePreviews.d.ts +26 -0
  929. package/dist/types/src/composables/internal/useFocusWithin.d.ts +32 -0
  930. package/dist/types/src/composables/internal/useInertOthers.d.ts +9 -0
  931. package/dist/types/src/composables/internal/useModalOverlay.d.ts +95 -0
  932. package/dist/types/src/composables/internal/useOverlayPresence.d.ts +24 -0
  933. package/dist/types/src/composables/internal/useScrollLock.d.ts +10 -5
  934. package/dist/types/src/composables/internal/useTeleportEnabled.d.ts +35 -0
  935. package/dist/types/src/composables/useAnnouncer.d.ts +44 -0
  936. package/dist/types/src/composables/useComboboxNavigation.d.ts +51 -0
  937. package/dist/types/src/composables/useDismissible.d.ts +32 -0
  938. package/dist/types/src/composables/useDragGesture.d.ts +63 -0
  939. package/dist/types/src/composables/useDragSort.d.ts +80 -0
  940. package/dist/types/src/composables/useFloating.d.ts +57 -0
  941. package/dist/types/src/composables/useFocusTrap.d.ts +50 -0
  942. package/dist/types/src/composables/useGrComponentConfig.d.ts +41 -0
  943. package/dist/types/src/composables/useGrFormControl.d.ts +52 -0
  944. package/dist/types/src/composables/useGranularityTranslations.d.ts +13 -0
  945. package/dist/types/src/composables/useOverlayLayer.d.ts +67 -0
  946. package/dist/types/src/composables/usePortalTarget.d.ts +28 -0
  947. package/dist/types/src/composables/useRovingFocus.d.ts +108 -0
  948. package/dist/types/src/composables/useTheme.d.ts +48 -2
  949. package/dist/types/src/composables/useToast.d.ts +20 -11
  950. package/dist/types/src/composables/useVirtualList.d.ts +119 -0
  951. package/dist/types/src/directives/loading.d.ts +7 -1
  952. package/dist/types/src/fileValidation/i18n.d.ts +24 -0
  953. package/dist/types/src/fileValidation/index.d.ts +4 -2
  954. package/dist/types/src/fileValidation/maxCountValidator.d.ts +9 -0
  955. package/dist/types/src/fileValidation/maxFileSize.d.ts +16 -0
  956. package/dist/types/src/fileValidation/types.d.ts +8 -2
  957. package/dist/types/src/granular-provider/index.d.ts +1 -1
  958. package/dist/types/src/granular-provider/node.d.ts +2 -3
  959. package/dist/types/src/granular-provider/shared.d.ts +14 -18
  960. package/dist/types/src/i18n/adapter.d.ts +24 -0
  961. package/dist/types/src/i18n/messages/en.d.ts +334 -2
  962. package/dist/types/src/i18n/messages/es.d.ts +338 -2
  963. package/dist/types/src/i18n/messages/ru.d.ts +342 -2
  964. package/dist/types/src/index.d.ts +38 -3
  965. package/dist/types/src/internal/granularityFormat.d.ts +19 -0
  966. package/dist/types/src/internal/granularityI18n.d.ts +6 -0
  967. package/dist/types/src/internal/keyboard.d.ts +52 -0
  968. package/dist/types/src/tokens/generated.d.ts +6 -0
  969. package/dist/types/src/tokens/index.d.ts +13 -0
  970. package/dist/types/src/tokens/types.d.ts +54 -0
  971. package/dist/vue/index.js.map +1 -1
  972. package/dist/web-types.json +6503 -2020
  973. package/package.json +118 -17
  974. package/tokens/derived.json +142 -0
  975. package/tokens/foundation.json +558 -0
  976. package/tokens/themes/dark.json +499 -0
  977. package/tokens/themes/light.json +499 -0
  978. package/dist/GrBadge.css +0 -1
  979. package/dist/GrButtonGroup.css +0 -1
  980. package/dist/GrFormFile.css +0 -1
  981. package/dist/GrIcon.css +0 -1
  982. package/dist/GrLoading.css +0 -1
  983. package/dist/GrToaster.css +0 -1
  984. package/dist/GrTree.css +0 -1
  985. package/dist/chunks/config-23WtUiAL.js +0 -53
  986. package/dist/chunks/config-23WtUiAL.js.map +0 -1
  987. package/dist/chunks/config-B0i5r8kH.js +0 -23
  988. package/dist/chunks/config-B0i5r8kH.js.map +0 -1
  989. package/dist/chunks/config-B0qIpo8m.js +0 -5
  990. package/dist/chunks/config-B0qIpo8m.js.map +0 -1
  991. package/dist/chunks/config-B5Rknzkd.js +0 -100
  992. package/dist/chunks/config-B5Rknzkd.js.map +0 -1
  993. package/dist/chunks/config-BDSHekVC.js +0 -84
  994. package/dist/chunks/config-BDSHekVC.js.map +0 -1
  995. package/dist/chunks/config-BEegFP74.js +0 -5
  996. package/dist/chunks/config-BEegFP74.js.map +0 -1
  997. package/dist/chunks/config-BLHqZhy-.js +0 -5
  998. package/dist/chunks/config-BLHqZhy-.js.map +0 -1
  999. package/dist/chunks/config-BMKNHFMD2.js +0 -171
  1000. package/dist/chunks/config-BMKNHFMD2.js.map +0 -1
  1001. package/dist/chunks/config-BUHuGBik2.js +0 -13
  1002. package/dist/chunks/config-BUHuGBik2.js.map +0 -1
  1003. package/dist/chunks/config-BWGGp7uV.js +0 -8
  1004. package/dist/chunks/config-BWGGp7uV.js.map +0 -1
  1005. package/dist/chunks/config-BWiPnygb.js +0 -5
  1006. package/dist/chunks/config-BWiPnygb.js.map +0 -1
  1007. package/dist/chunks/config-BX1JTrkV.js +0 -14
  1008. package/dist/chunks/config-BX1JTrkV.js.map +0 -1
  1009. package/dist/chunks/config-BXtAmU3s.js +0 -8
  1010. package/dist/chunks/config-BXtAmU3s.js.map +0 -1
  1011. package/dist/chunks/config-BZFUM3Ky.js +0 -75
  1012. package/dist/chunks/config-BZFUM3Ky.js.map +0 -1
  1013. package/dist/chunks/config-Bah4oHwL.js +0 -8
  1014. package/dist/chunks/config-Bah4oHwL.js.map +0 -1
  1015. package/dist/chunks/config-BmNT0Fmx.js +0 -45
  1016. package/dist/chunks/config-BmNT0Fmx.js.map +0 -1
  1017. package/dist/chunks/config-BvVq2gbd.js +0 -13
  1018. package/dist/chunks/config-BvVq2gbd.js.map +0 -1
  1019. package/dist/chunks/config-C4hJxXDa.js +0 -58
  1020. package/dist/chunks/config-C4hJxXDa.js.map +0 -1
  1021. package/dist/chunks/config-C86UzUYf.js +0 -13
  1022. package/dist/chunks/config-C86UzUYf.js.map +0 -1
  1023. package/dist/chunks/config-C9AcVDkv.js +0 -5
  1024. package/dist/chunks/config-C9AcVDkv.js.map +0 -1
  1025. package/dist/chunks/config-CB4RVt9M.js +0 -66
  1026. package/dist/chunks/config-CB4RVt9M.js.map +0 -1
  1027. package/dist/chunks/config-CGHLoBlH2.js +0 -5
  1028. package/dist/chunks/config-CGHLoBlH2.js.map +0 -1
  1029. package/dist/chunks/config-COE_vZ-l.js +0 -52
  1030. package/dist/chunks/config-COE_vZ-l.js.map +0 -1
  1031. package/dist/chunks/config-CPdmr7tC.js +0 -39
  1032. package/dist/chunks/config-CPdmr7tC.js.map +0 -1
  1033. package/dist/chunks/config-CThzliFi.js +0 -5
  1034. package/dist/chunks/config-CThzliFi.js.map +0 -1
  1035. package/dist/chunks/config-Cb2PAlSD.js +0 -8
  1036. package/dist/chunks/config-Cb2PAlSD.js.map +0 -1
  1037. package/dist/chunks/config-D7GZO-Dx.js +0 -8
  1038. package/dist/chunks/config-D7GZO-Dx.js.map +0 -1
  1039. package/dist/chunks/config-DICOd-2X.js +0 -5
  1040. package/dist/chunks/config-DICOd-2X.js.map +0 -1
  1041. package/dist/chunks/config-DPDFYzIa.js +0 -40
  1042. package/dist/chunks/config-DPDFYzIa.js.map +0 -1
  1043. package/dist/chunks/config-DRKXJ9PW2.js +0 -22
  1044. package/dist/chunks/config-DRKXJ9PW2.js.map +0 -1
  1045. package/dist/chunks/config-DToHb81g.js +0 -45
  1046. package/dist/chunks/config-DToHb81g.js.map +0 -1
  1047. package/dist/chunks/config-D_myOZbA.js +0 -20
  1048. package/dist/chunks/config-D_myOZbA.js.map +0 -1
  1049. package/dist/chunks/config-Dg_6FTvJ.js +0 -35
  1050. package/dist/chunks/config-Dg_6FTvJ.js.map +0 -1
  1051. package/dist/chunks/config-Dlm49Jp5.js +0 -5
  1052. package/dist/chunks/config-Dlm49Jp5.js.map +0 -1
  1053. package/dist/chunks/config-DpqOnJiz.js.map +0 -1
  1054. package/dist/chunks/config-Dqy0rPPO2.js +0 -17
  1055. package/dist/chunks/config-Dqy0rPPO2.js.map +0 -1
  1056. package/dist/chunks/config-Dxuwwepq.js +0 -5
  1057. package/dist/chunks/config-Dxuwwepq.js.map +0 -1
  1058. package/dist/chunks/config-HZto2PVy.js +0 -5
  1059. package/dist/chunks/config-HZto2PVy.js.map +0 -1
  1060. package/dist/chunks/config-JOtB4mzs.js +0 -8
  1061. package/dist/chunks/config-JOtB4mzs.js.map +0 -1
  1062. package/dist/chunks/config-JpHA4Xx0.js +0 -8
  1063. package/dist/chunks/config-JpHA4Xx0.js.map +0 -1
  1064. package/dist/chunks/config-KXuionN3.js +0 -9
  1065. package/dist/chunks/config-KXuionN3.js.map +0 -1
  1066. package/dist/chunks/config-LGrZIdaZ.js +0 -21
  1067. package/dist/chunks/config-LGrZIdaZ.js.map +0 -1
  1068. package/dist/chunks/config-LqDC_rvp.js +0 -78
  1069. package/dist/chunks/config-LqDC_rvp.js.map +0 -1
  1070. package/dist/chunks/config-PFg39mYo.js +0 -5
  1071. package/dist/chunks/config-PFg39mYo.js.map +0 -1
  1072. package/dist/chunks/config-QYGvEBu5.js +0 -22
  1073. package/dist/chunks/config-QYGvEBu5.js.map +0 -1
  1074. package/dist/chunks/config-QaIc_gRa2.js.map +0 -1
  1075. package/dist/chunks/config-U4m9PSql2.js +0 -8
  1076. package/dist/chunks/config-U4m9PSql2.js.map +0 -1
  1077. package/dist/chunks/config-XmTv4pnI.js +0 -26
  1078. package/dist/chunks/config-XmTv4pnI.js.map +0 -1
  1079. package/dist/chunks/config-ZiXWIRBX.js +0 -8
  1080. package/dist/chunks/config-ZiXWIRBX.js.map +0 -1
  1081. package/dist/chunks/config-gZWR75Bh2.js +0 -44
  1082. package/dist/chunks/config-gZWR75Bh2.js.map +0 -1
  1083. package/dist/chunks/config-ipvU0lzP.js +0 -5
  1084. package/dist/chunks/config-ipvU0lzP.js.map +0 -1
  1085. package/dist/chunks/config-xR4XVmcy2.js +0 -8
  1086. package/dist/chunks/config-xR4XVmcy2.js.map +0 -1
  1087. package/dist/chunks/context-DfWYCBB-.js +0 -129
  1088. package/dist/chunks/context-DfWYCBB-.js.map +0 -1
  1089. package/dist/chunks/en-Cr6EkG8c.js +0 -186
  1090. package/dist/chunks/en-Cr6EkG8c.js.map +0 -1
  1091. package/dist/chunks/es-DuYb1Qju.js +0 -20
  1092. package/dist/chunks/es-DuYb1Qju.js.map +0 -1
  1093. package/dist/chunks/es-i08e9Sdo.js +0 -186
  1094. package/dist/chunks/es-i08e9Sdo.js.map +0 -1
  1095. package/dist/chunks/fileValidation-C3WFaWU2.js +0 -220
  1096. package/dist/chunks/fileValidation-C3WFaWU2.js.map +0 -1
  1097. package/dist/chunks/grBadgeStyles-D3dFjr_N.js +0 -50
  1098. package/dist/chunks/grBadgeStyles-D3dFjr_N.js.map +0 -1
  1099. package/dist/chunks/grButtonStyles-DRBgDmOp.js +0 -191
  1100. package/dist/chunks/grButtonStyles-DRBgDmOp.js.map +0 -1
  1101. package/dist/chunks/grDropdownStyles-HBPkghVr.js +0 -35
  1102. package/dist/chunks/grDropdownStyles-HBPkghVr.js.map +0 -1
  1103. package/dist/chunks/grLoadingStyles-R5sreH__.js +0 -17
  1104. package/dist/chunks/grLoadingStyles-R5sreH__.js.map +0 -1
  1105. package/dist/chunks/grModalEscStack-BXk-9mv7.js +0 -43
  1106. package/dist/chunks/grModalEscStack-BXk-9mv7.js.map +0 -1
  1107. package/dist/chunks/grModalStyles-D8-shx9A.js +0 -47
  1108. package/dist/chunks/grModalStyles-D8-shx9A.js.map +0 -1
  1109. package/dist/chunks/grSelectStyles-CwMUQrBZ.js +0 -97
  1110. package/dist/chunks/grSelectStyles-CwMUQrBZ.js.map +0 -1
  1111. package/dist/chunks/grStyle-CdvxTXPH.js +0 -19
  1112. package/dist/chunks/grStyle-CdvxTXPH.js.map +0 -1
  1113. package/dist/chunks/granularityI18n-SH0I--GW.js +0 -61
  1114. package/dist/chunks/granularityI18n-SH0I--GW.js.map +0 -1
  1115. package/dist/chunks/ru-B5XOOYZt.js +0 -186
  1116. package/dist/chunks/ru-B5XOOYZt.js.map +0 -1
  1117. package/dist/chunks/safelist-BvO8HPnE.js +0 -24
  1118. package/dist/chunks/safelist-BvO8HPnE.js.map +0 -1
  1119. package/dist/chunks/shared-D-v9lit0.js +0 -188
  1120. package/dist/chunks/shared-D-v9lit0.js.map +0 -1
  1121. package/dist/chunks/useAddonMeasurement-DM0akF4C.js +0 -65
  1122. package/dist/chunks/useAddonMeasurement-DM0akF4C.js.map +0 -1
  1123. package/dist/chunks/useEscapeToClose-C2t_S1gh.js +0 -27
  1124. package/dist/chunks/useEscapeToClose-C2t_S1gh.js.map +0 -1
  1125. package/dist/chunks/useFloating-DtM6TyE4.js +0 -1249
  1126. package/dist/chunks/useFloating-DtM6TyE4.js.map +0 -1
  1127. package/dist/chunks/useScrollLock-K7kaP2Ud.js +0 -1757
  1128. package/dist/chunks/useScrollLock-K7kaP2Ud.js.map +0 -1
  1129. package/dist/components/GrAlert/chunks/GrAlert-B9gmpoPC.js +0 -251
  1130. package/dist/components/GrAlert/chunks/GrAlert-B9gmpoPC.js.map +0 -1
  1131. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-BVLoQ5tZ.js +0 -499
  1132. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-BVLoQ5tZ.js.map +0 -1
  1133. package/dist/components/GrAvatar/chunks/GrAvatar-CTOUVBF7.js +0 -41
  1134. package/dist/components/GrAvatar/chunks/GrAvatar-CTOUVBF7.js.map +0 -1
  1135. package/dist/components/GrBadge/chunks/GrBadge-D1jefy4S.js +0 -40
  1136. package/dist/components/GrBadge/chunks/GrBadge-D1jefy4S.js.map +0 -1
  1137. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-DWDxHdiQ.js +0 -33
  1138. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-DWDxHdiQ.js.map +0 -1
  1139. package/dist/components/GrBottomNav/chunks/GrBottomNav-vSE4LXmk.js +0 -31
  1140. package/dist/components/GrBottomNav/chunks/GrBottomNav-vSE4LXmk.js.map +0 -1
  1141. package/dist/components/GrButton/chunks/GrButton-DCi4CUpo.js +0 -128
  1142. package/dist/components/GrButton/chunks/GrButton-DCi4CUpo.js.map +0 -1
  1143. package/dist/components/GrButtonGroup/chunks/GrButtonGroup-Bs9dEKfA.js +0 -21
  1144. package/dist/components/GrButtonGroup/chunks/GrButtonGroup-Bs9dEKfA.js.map +0 -1
  1145. package/dist/components/GrCard/chunks/GrCard-CxCjyHMb.js +0 -11
  1146. package/dist/components/GrCard/chunks/GrCard-CxCjyHMb.js.map +0 -1
  1147. package/dist/components/GrCheckbox/chunks/GrCheckbox-BbIDRXtl.js +0 -182
  1148. package/dist/components/GrCheckbox/chunks/GrCheckbox-BbIDRXtl.js.map +0 -1
  1149. package/dist/components/GrCollapse/chunks/GrCollapse-DApXztn8.js +0 -205
  1150. package/dist/components/GrCollapse/chunks/GrCollapse-DApXztn8.js.map +0 -1
  1151. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-6OyvNbek.js +0 -410
  1152. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-6OyvNbek.js.map +0 -1
  1153. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BtyeBGm8.js +0 -57
  1154. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BtyeBGm8.js.map +0 -1
  1155. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-e4120mWw.js +0 -160
  1156. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-e4120mWw.js.map +0 -1
  1157. package/dist/components/GrDataTable/chunks/GrDataTable-C1CzxV0p.js +0 -307
  1158. package/dist/components/GrDataTable/chunks/GrDataTable-C1CzxV0p.js.map +0 -1
  1159. package/dist/components/GrDialog/chunks/GrDialog-BPMvDHOz.js +0 -223
  1160. package/dist/components/GrDialog/chunks/GrDialog-BPMvDHOz.js.map +0 -1
  1161. package/dist/components/GrDialogService/chunks/GrDialogService-CYXCTGm3.js +0 -450
  1162. package/dist/components/GrDialogService/chunks/GrDialogService-CYXCTGm3.js.map +0 -1
  1163. package/dist/components/GrDivider/chunks/GrDivider-BdENZ1w0.js +0 -54
  1164. package/dist/components/GrDivider/chunks/GrDivider-BdENZ1w0.js.map +0 -1
  1165. package/dist/components/GrDrawer/chunks/GrDrawer-KevdZ5BB.js +0 -184
  1166. package/dist/components/GrDrawer/chunks/GrDrawer-KevdZ5BB.js.map +0 -1
  1167. package/dist/components/GrDropdown/chunks/GrDropdown-BKoy8hm-.js +0 -181
  1168. package/dist/components/GrDropdown/chunks/GrDropdown-BKoy8hm-.js.map +0 -1
  1169. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-zCatXzmt.js +0 -309
  1170. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-zCatXzmt.js.map +0 -1
  1171. package/dist/components/GrEmptyState/chunks/GrEmptyState-CNb0BzjG.js +0 -62
  1172. package/dist/components/GrEmptyState/chunks/GrEmptyState-CNb0BzjG.js.map +0 -1
  1173. package/dist/components/GrFileUpload/chunks/GrFileUpload-CnLgUGDF.js +0 -592
  1174. package/dist/components/GrFileUpload/chunks/GrFileUpload-CnLgUGDF.js.map +0 -1
  1175. package/dist/components/GrForm/chunks/GrForm-CdaFjcyl.js +0 -234
  1176. package/dist/components/GrForm/chunks/GrForm-CdaFjcyl.js.map +0 -1
  1177. package/dist/components/GrFormField/chunks/GrFormField-CXCDBd99.js +0 -100
  1178. package/dist/components/GrFormField/chunks/GrFormField-CXCDBd99.js.map +0 -1
  1179. package/dist/components/GrFormFile/chunks/GrFormFile-CqacSbUl.js +0 -320
  1180. package/dist/components/GrFormFile/chunks/GrFormFile-CqacSbUl.js.map +0 -1
  1181. package/dist/components/GrFormSection/chunks/GrFormSection-C3w9DQJf.js +0 -35
  1182. package/dist/components/GrFormSection/chunks/GrFormSection-C3w9DQJf.js.map +0 -1
  1183. package/dist/components/GrIcon/chunks/GrIcon-D9AWQLk2.js +0 -32
  1184. package/dist/components/GrIcon/chunks/GrIcon-D9AWQLk2.js.map +0 -1
  1185. package/dist/components/GrImageViewer/chunks/GrImageViewer-DDLJkvIU.js +0 -650
  1186. package/dist/components/GrImageViewer/chunks/GrImageViewer-DDLJkvIU.js.map +0 -1
  1187. package/dist/components/GrInput/chunks/GrInput-C1VBL0dg.js +0 -337
  1188. package/dist/components/GrInput/chunks/GrInput-C1VBL0dg.js.map +0 -1
  1189. package/dist/components/GrInputTag/chunks/GrInputTag-BMk9jm42.js +0 -260
  1190. package/dist/components/GrInputTag/chunks/GrInputTag-BMk9jm42.js.map +0 -1
  1191. package/dist/components/GrKbd/chunks/GrKbd-DTspwtoN.js +0 -22
  1192. package/dist/components/GrKbd/chunks/GrKbd-DTspwtoN.js.map +0 -1
  1193. package/dist/components/GrLink/chunks/GrLink-BP0YrnL9.js +0 -100
  1194. package/dist/components/GrLink/chunks/GrLink-BP0YrnL9.js.map +0 -1
  1195. package/dist/components/GrList/chunks/GrList-5RA-tZzE.js +0 -77
  1196. package/dist/components/GrList/chunks/GrList-5RA-tZzE.js.map +0 -1
  1197. package/dist/components/GrLoading/chunks/GrLoading-fRDtVfi7.js +0 -69
  1198. package/dist/components/GrLoading/chunks/GrLoading-fRDtVfi7.js.map +0 -1
  1199. package/dist/components/GrModal/chunks/GrModal-BTu1-5eY.js +0 -233
  1200. package/dist/components/GrModal/chunks/GrModal-BTu1-5eY.js.map +0 -1
  1201. package/dist/components/GrNavbar/chunks/GrNavbar-keKT_mIM.js +0 -75
  1202. package/dist/components/GrNavbar/chunks/GrNavbar-keKT_mIM.js.map +0 -1
  1203. package/dist/components/GrNumberInput/chunks/GrNumberInput-l9ZOHG9D.js +0 -471
  1204. package/dist/components/GrNumberInput/chunks/GrNumberInput-l9ZOHG9D.js.map +0 -1
  1205. package/dist/components/GrPagination/chunks/GrPagination-C5Y69CuK.js +0 -208
  1206. package/dist/components/GrPagination/chunks/GrPagination-C5Y69CuK.js.map +0 -1
  1207. package/dist/components/GrProgressBar/chunks/GrProgressBar-Dqg4Fj9S.js +0 -39
  1208. package/dist/components/GrProgressBar/chunks/GrProgressBar-Dqg4Fj9S.js.map +0 -1
  1209. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-DNUjRVB9.js +0 -224
  1210. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-DNUjRVB9.js.map +0 -1
  1211. package/dist/components/GrRadio/chunks/GrRadio-DlhxPGqf.js +0 -182
  1212. package/dist/components/GrRadio/chunks/GrRadio-DlhxPGqf.js.map +0 -1
  1213. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-BXt9iw4q.js +0 -82
  1214. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-BXt9iw4q.js.map +0 -1
  1215. package/dist/components/GrRating/chunks/GrRating-Co-3Rk4h.js +0 -241
  1216. package/dist/components/GrRating/chunks/GrRating-Co-3Rk4h.js.map +0 -1
  1217. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-2CvM7Z08.js +0 -224
  1218. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-2CvM7Z08.js.map +0 -1
  1219. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-C8NGx8pE.js +0 -782
  1220. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-C8NGx8pE.js.map +0 -1
  1221. package/dist/components/GrSegmented/chunks/GrSegmented-CTd3n4PA.js +0 -326
  1222. package/dist/components/GrSegmented/chunks/GrSegmented-CTd3n4PA.js.map +0 -1
  1223. package/dist/components/GrSelect/chunks/GrSelect-Dn3FgJ3Z.js +0 -730
  1224. package/dist/components/GrSelect/chunks/GrSelect-Dn3FgJ3Z.js.map +0 -1
  1225. package/dist/components/GrSidebar/chunks/GrSidebar-cvnzBfj3.js +0 -238
  1226. package/dist/components/GrSidebar/chunks/GrSidebar-cvnzBfj3.js.map +0 -1
  1227. package/dist/components/GrSkeleton/chunks/GrSkeleton-BucA5F4J.js +0 -33
  1228. package/dist/components/GrSkeleton/chunks/GrSkeleton-BucA5F4J.js.map +0 -1
  1229. package/dist/components/GrSlider/chunks/GrSlider-CzzJ3bD-.js +0 -286
  1230. package/dist/components/GrSlider/chunks/GrSlider-CzzJ3bD-.js.map +0 -1
  1231. package/dist/components/GrStatistic/chunks/GrStatistic-gHiAwrX5.js +0 -128
  1232. package/dist/components/GrStatistic/chunks/GrStatistic-gHiAwrX5.js.map +0 -1
  1233. package/dist/components/GrSwitch/chunks/GrSwitch-CJdRvS0s.js +0 -88
  1234. package/dist/components/GrSwitch/chunks/GrSwitch-CJdRvS0s.js.map +0 -1
  1235. package/dist/components/GrTabPanels/chunks/GrTabPanels-DeEMgb_y.js +0 -68
  1236. package/dist/components/GrTabPanels/chunks/GrTabPanels-DeEMgb_y.js.map +0 -1
  1237. package/dist/components/GrTable/chunks/GrTable-sNvsA8wa.js +0 -70
  1238. package/dist/components/GrTable/chunks/GrTable-sNvsA8wa.js.map +0 -1
  1239. package/dist/components/GrTabs/chunks/GrTabs-BqTak0SR.js +0 -123
  1240. package/dist/components/GrTabs/chunks/GrTabs-BqTak0SR.js.map +0 -1
  1241. package/dist/components/GrTextarea/chunks/GrTextarea-DIYBAPpP.js +0 -81
  1242. package/dist/components/GrTextarea/chunks/GrTextarea-DIYBAPpP.js.map +0 -1
  1243. package/dist/components/GrToaster/chunks/GrToaster-BVHjIHcM.js +0 -230
  1244. package/dist/components/GrToaster/chunks/GrToaster-BVHjIHcM.js.map +0 -1
  1245. package/dist/components/GrTooltip/chunks/GrTooltip-BMKH2lIx.js +0 -109
  1246. package/dist/components/GrTooltip/chunks/GrTooltip-BMKH2lIx.js.map +0 -1
  1247. package/dist/components/GrTree/chunks/GrTree-_12ChXRQ.js +0 -838
  1248. package/dist/components/GrTree/chunks/GrTree-_12ChXRQ.js.map +0 -1
  1249. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-CdaLG7Xq.js +0 -426
  1250. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-CdaLG7Xq.js.map +0 -1
  1251. package/dist/granular-provider-node.js.map +0 -1
  1252. package/dist/granular-provider.js.map +0 -1
  1253. package/dist/index.js.map +0 -1
  1254. package/dist/types/src/components/GrButton/config.node.d.ts +0 -1
  1255. package/dist/types/src/components/GrCommandPalette/hotkey.d.ts +0 -23
  1256. package/dist/types/src/components/GrFileUpload/maxSizeMbValidator.d.ts +0 -1
  1257. package/dist/types/src/components/GrModal/grModalEscStack.d.ts +0 -30
  1258. package/dist/types/src/components/GrModal/grModalTopStack.d.ts +0 -31
  1259. package/dist/types/src/components/GrProgressBar/config.node.d.ts +0 -1
  1260. package/dist/types/src/composables/internal/useEscapeToClose.d.ts +0 -11
  1261. package/dist/types/src/composables/internal/useFloating.d.ts +0 -53
  1262. package/dist/types/src/fileValidation/maxFileSizeBytesValidator.d.ts +0 -2
  1263. package/dist/types/src/fileValidation/maxSizeMbValidator.d.ts +0 -2
  1264. /package/dist/chunks/{config-DpqOnJiz.js → config-DpqOnJiz2.js} +0 -0
  1265. /package/dist/chunks/{config-QaIc_gRa2.js → config-QaIc_gRa.js} +0 -0
  1266. /package/dist/{GrSkeleton.css → components/GrSkeleton/styles.css} +0 -0
@@ -1,6 +1,7 @@
1
- import { computed, ref } from "vue";
1
+ import { computed, hasInjectionContext, inject, ref } from "vue";
2
2
  //#region src/composables/useTheme.ts
3
3
  var DEFAULT_STORAGE_KEY = "gr-theme";
4
+ var IS_SERVER = typeof window === "undefined";
4
5
  function readStoredTheme(storageKey, persist) {
5
6
  if (typeof window === "undefined" || !persist) return null;
6
7
  try {
@@ -18,68 +19,137 @@ function getSystemTheme() {
18
19
  function getPreferredTheme(storageKey = DEFAULT_STORAGE_KEY, persist = true) {
19
20
  return readStoredTheme(storageKey, persist) ?? getSystemTheme();
20
21
  }
21
- function applyTheme(theme) {
22
+ function applyTheme(theme, target) {
22
23
  if (typeof document === "undefined") return;
23
- const root = document.documentElement;
24
+ const root = target?.() ?? document.documentElement;
24
25
  root.dataset.theme = theme;
25
- root.classList.toggle("theme-dark", theme === "dark");
26
26
  }
27
- var sharedTheme = ref(getPreferredTheme());
28
- var activeStorageKey = DEFAULT_STORAGE_KEY;
29
- var activePersist = true;
30
- var listenersBound = false;
31
- function bindListeners() {
32
- if (listenersBound || typeof window === "undefined") return;
33
- listenersBound = true;
34
- window.addEventListener?.("storage", (event) => {
35
- if (!activePersist || event.key !== activeStorageKey) return;
27
+ function createThemeState(options = {}, writable = true) {
28
+ const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY;
29
+ const persist = options.persist ?? true;
30
+ return {
31
+ theme: ref(getPreferredTheme(storageKey, persist)),
32
+ storageKey,
33
+ persist,
34
+ target: options.target,
35
+ listenersBound: false,
36
+ writable
37
+ };
38
+ }
39
+ /** Ключ provide/inject для app-scoped состояния темы (устанавливает плагин ниже). */
40
+ var GRANULARITY_THEME_STATE = Symbol.for("@feugene/granularity/theme-state");
41
+ /**
42
+ * Vue-плагин: даёт каждому приложению собственное состояние темы через
43
+ * `app.provide`. Обязателен для (а) SSR, если приложение переключает тему на
44
+ * сервере — иначе тема одного запроса уедет в ответ следующему, — и (б)
45
+ * нескольких Vue-приложений на одной странице, которым нужны независимые темы.
46
+ *
47
+ * Для (б) обязателен и `target` — корень, получающий `data-theme`: без него
48
+ * изолировано только состояние, а атрибут все приложения пишут в один `<html>`,
49
+ * и побеждает последний.
50
+ *
51
+ * ```ts
52
+ * app.use(granularityThemePlugin)
53
+ * app.use(granularityThemePlugin, {
54
+ * storageKey: 'admin-theme',
55
+ * persist: false,
56
+ * target: () => document.getElementById('admin-app'),
57
+ * })
58
+ * ```
59
+ */
60
+ var appScopedThemeProvided = false;
61
+ var contextFallbackWarned = false;
62
+ var granularityThemePlugin = { install(app, options = {}) {
63
+ appScopedThemeProvided = true;
64
+ const state = createThemeState(options);
65
+ app.provide(GRANULARITY_THEME_STATE, state);
66
+ app.onUnmount(() => state.teardownListeners?.());
67
+ } };
68
+ var moduleThemeState = null;
69
+ /** Сброс dev-предупреждения о фолбэке. Внутреннее API — нужно тестам. */
70
+ function resetThemeContextWarning() {
71
+ contextFallbackWarned = false;
72
+ }
73
+ function resolveThemeState(options) {
74
+ if (hasInjectionContext()) {
75
+ const provided = inject(GRANULARITY_THEME_STATE, null);
76
+ if (provided) return provided;
77
+ }
78
+ if (IS_SERVER) return createThemeState(options, false);
79
+ if (appScopedThemeProvided && !contextFallbackWarned && typeof process !== "undefined" && process.env.NODE_ENV !== "production") {
80
+ contextFallbackWarned = true;
81
+ console.warn("[granularity] useTheme() вызван вне setup/inject-контекста: app-scoped состояние granularityThemePlugin недоступно, использован модульный синглтон. Оберните вызов: app.runWithContext(() => useTheme()).");
82
+ }
83
+ if (!moduleThemeState) moduleThemeState = createThemeState(options);
84
+ return moduleThemeState;
85
+ }
86
+ function bindListeners(state) {
87
+ if (state.listenersBound || typeof window === "undefined") return;
88
+ state.listenersBound = true;
89
+ const onStorage = (event) => {
90
+ if (!state.persist || event.key !== state.storageKey) return;
36
91
  if (event.newValue === "light" || event.newValue === "dark") {
37
- sharedTheme.value = event.newValue;
38
- applyTheme(event.newValue);
92
+ state.theme.value = event.newValue;
93
+ applyTheme(event.newValue, state.target);
39
94
  }
40
- });
41
- (window.matchMedia?.("(prefers-color-scheme: dark)"))?.addEventListener?.("change", (event) => {
42
- if (readStoredTheme(activeStorageKey, activePersist) !== null) return;
95
+ };
96
+ window.addEventListener?.("storage", onStorage);
97
+ const mql = window.matchMedia?.("(prefers-color-scheme: dark)");
98
+ const onSchemeChange = (event) => {
99
+ if (readStoredTheme(state.storageKey, state.persist) !== null) return;
43
100
  const next = event.matches ? "dark" : "light";
44
- sharedTheme.value = next;
45
- applyTheme(next);
46
- });
101
+ state.theme.value = next;
102
+ applyTheme(next, state.target);
103
+ };
104
+ mql?.addEventListener?.("change", onSchemeChange);
105
+ state.teardownListeners = () => {
106
+ window.removeEventListener?.("storage", onStorage);
107
+ mql?.removeEventListener?.("change", onSchemeChange);
108
+ state.listenersBound = false;
109
+ state.teardownListeners = void 0;
110
+ };
47
111
  }
48
112
  /**
49
113
  * Для применения темы максимально рано (до монтирования Vue), чтобы избежать "мигания".
50
- * Также сидирует shared-синглтон, чтобы значение в `useTheme()` совпадало с уже
114
+ * Также сидирует модульное состояние, чтобы значение в `useTheme()` совпадало с уже
51
115
  * применённым к документу.
116
+ *
117
+ * Функция клиентская: её зовут из браузерной точки входа до создания приложения,
118
+ * то есть app-scoped состояние инжектить там ещё неоткуда. Расхождения с плагином
119
+ * это не даёт — оба сидируются из одного `localStorage`.
52
120
  */
53
121
  function initThemeEarly(options = {}) {
54
122
  const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY;
55
123
  const persist = options.persist ?? true;
56
124
  const preferred = getPreferredTheme(storageKey, persist);
57
- activeStorageKey = storageKey;
58
- activePersist = persist;
59
- sharedTheme.value = preferred;
125
+ moduleThemeState ??= createThemeState(options);
126
+ moduleThemeState.storageKey = storageKey;
127
+ moduleThemeState.persist = persist;
128
+ moduleThemeState.theme.value = preferred;
60
129
  applyTheme(preferred);
61
130
  }
62
131
  function useTheme(options = {}) {
63
- const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY;
64
- const persist = options.persist ?? true;
65
- activeStorageKey = storageKey;
66
- activePersist = persist;
67
- bindListeners();
68
- const theme = sharedTheme;
132
+ const state = resolveThemeState(options);
133
+ if (options.storageKey !== void 0) state.storageKey = options.storageKey;
134
+ if (options.persist !== void 0) state.persist = options.persist;
135
+ if (options.target !== void 0) state.target = options.target;
136
+ bindListeners(state);
137
+ const theme = state.theme;
69
138
  const isDark = computed(() => theme.value === "dark");
70
139
  function setTheme(next) {
140
+ if (!state.writable) throw new Error("[granularity] useTheme: setTheme/toggleTheme require `app.use(granularityThemePlugin)` during SSR — the module-singleton fallback is disabled server-side, so a theme set by one request would leak into the next response. Reading `theme`/`isDark` on the server works without the plugin.");
71
141
  theme.value = next;
72
- if (persist && typeof window !== "undefined") try {
142
+ applyTheme(next, state.target);
143
+ if (state.persist && typeof window !== "undefined") try {
73
144
  const storage = window.localStorage;
74
- if (typeof storage?.setItem === "function") storage.setItem(storageKey, next);
145
+ if (typeof storage?.setItem === "function") storage.setItem(state.storageKey, next);
75
146
  } catch {}
76
- applyTheme(next);
77
147
  }
78
148
  function toggleTheme() {
79
149
  setTheme(theme.value === "dark" ? "light" : "dark");
80
150
  }
81
151
  function initTheme() {
82
- applyTheme(theme.value);
152
+ applyTheme(theme.value, state.target);
83
153
  }
84
154
  return {
85
155
  theme,
@@ -90,4 +160,4 @@ function useTheme(options = {}) {
90
160
  };
91
161
  }
92
162
  //#endregion
93
- export { initThemeEarly, useTheme };
163
+ export { GRANULARITY_THEME_STATE, granularityThemePlugin, initThemeEarly, resetThemeContextWarning, useTheme };
@@ -1 +1 @@
1
- {"version":3,"file":"useTheme.js","names":[],"sources":["../../src/composables/useTheme.ts"],"sourcesContent":["import { computed, ref } from 'vue'\nimport type { Ref } from 'vue'\n\nexport type ThemeName = 'light' | 'dark'\n\nexport type UseThemeOptions = {\n /**\n * Ключ для хранения выбранной темы в localStorage.\n * По умолчанию: `gr-theme`.\n */\n storageKey?: string\n\n /**\n * Если `false` — не читать/не писать localStorage (полезно для SSR/embedded сценариев).\n * По умолчанию: `true`.\n */\n persist?: boolean\n}\n\nconst DEFAULT_STORAGE_KEY = 'gr-theme'\n\nfunction readStoredTheme(storageKey: string, persist: boolean): ThemeName | null {\n if (typeof window === 'undefined' || !persist) return null\n\n // Доступ к `localStorage` может бросать `SecurityError` в Safari private mode\n // и при отключённых cookies/storage — поэтому оборачиваем в try/catch.\n try {\n const storage = window.localStorage\n if (typeof storage?.getItem !== 'function') return null\n\n const stored = storage.getItem(storageKey)\n if (stored === 'light' || stored === 'dark') return stored\n }\n catch {\n // ignore\n }\n\n return null\n}\n\nfunction getSystemTheme(): ThemeName {\n if (typeof window === 'undefined') return 'light'\n return window.matchMedia?.('(prefers-color-scheme: dark)')?.matches ? 'dark' : 'light'\n}\n\nfunction getPreferredTheme(storageKey = DEFAULT_STORAGE_KEY, persist = true): ThemeName {\n return readStoredTheme(storageKey, persist) ?? getSystemTheme()\n}\n\nfunction applyTheme(theme: ThemeName) {\n if (typeof document === 'undefined') return\n\n const root = document.documentElement\n // Канон GR — атрибут `[data-theme]` на `<html>` (см. docs/styling.md → «Темизация»).\n // `useTheme`/`initThemeEarly` — единственный рантайм-API переключения темы.\n root.dataset.theme = theme\n // Класс `.theme-dark` — deprecated-алиас для обратной совместимости; в новом коде\n // ориентируйтесь на `[data-theme]`.\n root.classList.toggle('theme-dark', theme === 'dark')\n}\n\n// Модульный shared-синглтон состояния темы: единый источник истины для ВСЕХ\n// вызовов `useTheme()` (по образцу `useToast`). Раньше каждый вызов создавал\n// собственный `ref`, из-за чего переключение темы в компоненте A не обновляло\n// `theme`/`isDark` в компоненте B (менялся только DOM-класс) — та самая\n// рассинхронизация. Теперь ref один, реактивность консистентна.\nconst sharedTheme: Ref<ThemeName> = ref<ThemeName>(getPreferredTheme())\n\n// Активные ключ/persist, которыми синглтон инициализирован (нужны слушателям\n// `storage`/`matchMedia`, чтобы знать, какой ключ отслеживать).\nlet activeStorageKey = DEFAULT_STORAGE_KEY\nlet activePersist = true\nlet listenersBound = false\n\n// Подписки на системную тему и синхронизацию между вкладками. Живут на уровне\n// модуля (как таймеры в `useToast`): состояние общее, поэтому подписка нужна\n// одна на приложение, а не per-consumer — здесь `onScopeDispose` был бы вреден\n// (порвал бы shared-подписку при размонтировании одного из потребителей).\nfunction bindListeners() {\n if (listenersBound || typeof window === 'undefined') return\n listenersBound = true\n\n // Cross-tab: другая вкладка записала тему в localStorage.\n window.addEventListener?.('storage', (event: StorageEvent) => {\n if (!activePersist || event.key !== activeStorageKey) return\n if (event.newValue === 'light' || event.newValue === 'dark') {\n sharedTheme.value = event.newValue\n applyTheme(event.newValue)\n }\n })\n\n // Системная смена `prefers-color-scheme` — следуем ей только если пользователь\n // НЕ выбрал тему явно (в storage ничего не сохранено).\n const mql = window.matchMedia?.('(prefers-color-scheme: dark)')\n mql?.addEventListener?.('change', (event: MediaQueryListEvent) => {\n if (readStoredTheme(activeStorageKey, activePersist) !== null) return\n const next: ThemeName = event.matches ? 'dark' : 'light'\n sharedTheme.value = next\n applyTheme(next)\n })\n}\n\n/**\n * Для применения темы максимально рано (до монтирования Vue), чтобы избежать \"мигания\".\n * Также сидирует shared-синглтон, чтобы значение в `useTheme()` совпадало с уже\n * применённым к документу.\n */\nexport function initThemeEarly(options: UseThemeOptions = {}) {\n const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY\n const persist = options.persist ?? true\n const preferred = getPreferredTheme(storageKey, persist)\n\n activeStorageKey = storageKey\n activePersist = persist\n sharedTheme.value = preferred\n applyTheme(preferred)\n}\n\nexport function useTheme(options: UseThemeOptions = {}) {\n const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY\n const persist = options.persist ?? true\n\n activeStorageKey = storageKey\n activePersist = persist\n bindListeners()\n\n const theme = sharedTheme\n const isDark = computed(() => theme.value === 'dark')\n\n function setTheme(next: ThemeName) {\n theme.value = next\n\n if (persist && typeof window !== 'undefined') {\n // См. комментарий в `readStoredTheme`: запись тоже может бросать.\n try {\n const storage = window.localStorage\n if (typeof storage?.setItem === 'function')\n storage.setItem(storageKey, next)\n }\n catch {\n // ignore\n }\n }\n\n applyTheme(next)\n }\n\n function toggleTheme() {\n setTheme(theme.value === 'dark' ? 'light' : 'dark')\n }\n\n function initTheme() {\n applyTheme(theme.value)\n }\n\n return {\n theme,\n isDark,\n setTheme,\n toggleTheme,\n initTheme,\n }\n}\n"],"mappings":";;AAmBA,IAAM,sBAAsB;AAE5B,SAAS,gBAAgB,YAAoB,SAAoC;CAC/E,IAAI,OAAO,WAAW,eAAe,CAAC,SAAS,OAAO;CAItD,IAAI;EACF,MAAM,UAAU,OAAO;EACvB,IAAI,OAAO,SAAS,YAAY,YAAY,OAAO;EAEnD,MAAM,SAAS,QAAQ,QAAQ,UAAU;EACzC,IAAI,WAAW,WAAW,WAAW,QAAQ,OAAO;CACtD,QACM,CAEN;CAEA,OAAO;AACT;AAEA,SAAS,iBAA4B;CACnC,IAAI,OAAO,WAAW,aAAa,OAAO;CAC1C,OAAO,OAAO,aAAa,8BAA8B,CAAC,EAAE,UAAU,SAAS;AACjF;AAEA,SAAS,kBAAkB,aAAa,qBAAqB,UAAU,MAAiB;CACtF,OAAO,gBAAgB,YAAY,OAAO,KAAK,eAAe;AAChE;AAEA,SAAS,WAAW,OAAkB;CACpC,IAAI,OAAO,aAAa,aAAa;CAErC,MAAM,OAAO,SAAS;CAGtB,KAAK,QAAQ,QAAQ;CAGrB,KAAK,UAAU,OAAO,cAAc,UAAU,MAAM;AACtD;AAOA,IAAM,cAA8B,IAAe,kBAAkB,CAAC;AAItE,IAAI,mBAAmB;AACvB,IAAI,gBAAgB;AACpB,IAAI,iBAAiB;AAMrB,SAAS,gBAAgB;CACvB,IAAI,kBAAkB,OAAO,WAAW,aAAa;CACrD,iBAAiB;CAGjB,OAAO,mBAAmB,YAAY,UAAwB;EAC5D,IAAI,CAAC,iBAAiB,MAAM,QAAQ,kBAAkB;EACtD,IAAI,MAAM,aAAa,WAAW,MAAM,aAAa,QAAQ;GAC3D,YAAY,QAAQ,MAAM;GAC1B,WAAW,MAAM,QAAQ;EAC3B;CACF,CAAC;CAKD,CADY,OAAO,aAAa,8BAA8B,EAAA,EACzD,mBAAmB,WAAW,UAA+B;EAChE,IAAI,gBAAgB,kBAAkB,aAAa,MAAM,MAAM;EAC/D,MAAM,OAAkB,MAAM,UAAU,SAAS;EACjD,YAAY,QAAQ;EACpB,WAAW,IAAI;CACjB,CAAC;AACH;;;;;;AAOA,SAAgB,eAAe,UAA2B,CAAC,GAAG;CAC5D,MAAM,aAAa,QAAQ,cAAc;CACzC,MAAM,UAAU,QAAQ,WAAW;CACnC,MAAM,YAAY,kBAAkB,YAAY,OAAO;CAEvD,mBAAmB;CACnB,gBAAgB;CAChB,YAAY,QAAQ;CACpB,WAAW,SAAS;AACtB;AAEA,SAAgB,SAAS,UAA2B,CAAC,GAAG;CACtD,MAAM,aAAa,QAAQ,cAAc;CACzC,MAAM,UAAU,QAAQ,WAAW;CAEnC,mBAAmB;CACnB,gBAAgB;CAChB,cAAc;CAEd,MAAM,QAAQ;CACd,MAAM,SAAS,eAAe,MAAM,UAAU,MAAM;CAEpD,SAAS,SAAS,MAAiB;EACjC,MAAM,QAAQ;EAEd,IAAI,WAAW,OAAO,WAAW,aAE/B,IAAI;GACF,MAAM,UAAU,OAAO;GACvB,IAAI,OAAO,SAAS,YAAY,YAC9B,QAAQ,QAAQ,YAAY,IAAI;EACpC,QACM,CAEN;EAGF,WAAW,IAAI;CACjB;CAEA,SAAS,cAAc;EACrB,SAAS,MAAM,UAAU,SAAS,UAAU,MAAM;CACpD;CAEA,SAAS,YAAY;EACnB,WAAW,MAAM,KAAK;CACxB;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;CACF;AACF"}
1
+ {"version":3,"file":"useTheme.js","names":[],"sources":["../../src/composables/useTheme.ts"],"sourcesContent":["import { computed, hasInjectionContext, inject, ref } from 'vue'\nimport type { App, InjectionKey, Ref } from 'vue'\n\nexport type ThemeName = 'light' | 'dark'\n\nexport type UseThemeOptions = {\n /**\n * Ключ для хранения выбранной темы в localStorage.\n * По умолчанию: `gr-theme`.\n */\n storageKey?: string\n\n /**\n * Если `false` — не читать/не писать localStorage (полезно для SSR/embedded сценариев).\n * По умолчанию: `true`.\n */\n persist?: boolean\n\n /**\n * Куда писать `data-theme`. По умолчанию — `<html>` (канон одного приложения).\n *\n * Геттер, а не элемент: на момент `app.use(...)` корень приложения ещё не\n * смонтирован. Обязателен нескольким приложениям с независимыми темами:\n * селектор тем атрибутный (`[data-theme='dark']`), поэтому тема работает от\n * любого контейнера, а без `target` все приложения писали бы в один `<html>`\n * и побеждал бы последний.\n */\n target?: () => HTMLElement | null\n}\n\nconst DEFAULT_STORAGE_KEY = 'gr-theme'\nconst IS_SERVER = typeof window === 'undefined'\n\nfunction readStoredTheme(storageKey: string, persist: boolean): ThemeName | null {\n if (typeof window === 'undefined' || !persist) return null\n\n // Доступ к `localStorage` может бросать `SecurityError` в Safari private mode\n // и при отключённых cookies/storage — поэтому оборачиваем в try/catch.\n try {\n const storage = window.localStorage\n if (typeof storage?.getItem !== 'function') return null\n\n const stored = storage.getItem(storageKey)\n if (stored === 'light' || stored === 'dark') return stored\n }\n catch {\n // ignore\n }\n\n return null\n}\n\nfunction getSystemTheme(): ThemeName {\n if (typeof window === 'undefined') return 'light'\n return window.matchMedia?.('(prefers-color-scheme: dark)')?.matches ? 'dark' : 'light'\n}\n\nfunction getPreferredTheme(storageKey = DEFAULT_STORAGE_KEY, persist = true): ThemeName {\n return readStoredTheme(storageKey, persist) ?? getSystemTheme()\n}\n\nfunction applyTheme(theme: ThemeName, target?: () => HTMLElement | null) {\n if (typeof document === 'undefined') return\n\n // Канон GR — атрибут `[data-theme]`: на `<html>` (см. docs/styling.md →\n // «Темизация») либо на корне приложения, когда состояние задало `target`.\n // `useTheme`/`initThemeEarly` — единственный рантайм-API переключения темы.\n const root = target?.() ?? document.documentElement\n root.dataset.theme = theme\n}\n\n/**\n * Состояние темы одного приложения.\n *\n * `theme` общий для всех вызовов `useTheme()` внутри приложения: свой `ref` на\n * вызов означал бы, что переключение темы в одном компоненте не трогает\n * `theme`/`isDark` в другом — менялся бы только DOM-атрибут, а реактивные\n * потребители разъехались бы.\n */\ntype ThemeState = {\n theme: Ref<ThemeName>\n storageKey: string\n persist: boolean\n /** Корень, получающий `data-theme`; не задан — `<html>`. */\n target?: () => HTMLElement | null\n listenersBound: boolean\n /**\n * Снимает window-слушатели состояния. Появляется после `bindListeners`;\n * зовёт `app.onUnmount` у app-scoped состояний — модульный синглтон живёт со\n * страницей, и снимать его незачем.\n */\n teardownListeners?: () => void\n /** Разрешена ли мутация — см. `resolveThemeState`. */\n writable: boolean\n}\n\nfunction createThemeState(options: UseThemeOptions = {}, writable = true): ThemeState {\n const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY\n const persist = options.persist ?? true\n\n return {\n theme: ref<ThemeName>(getPreferredTheme(storageKey, persist)),\n storageKey,\n persist,\n target: options.target,\n listenersBound: false,\n writable,\n }\n}\n\n/** Ключ provide/inject для app-scoped состояния темы (устанавливает плагин ниже). */\nexport const GRANULARITY_THEME_STATE: InjectionKey<ThemeState> = Symbol.for('@feugene/granularity/theme-state')\n\n/**\n * Vue-плагин: даёт каждому приложению собственное состояние темы через\n * `app.provide`. Обязателен для (а) SSR, если приложение переключает тему на\n * сервере — иначе тема одного запроса уедет в ответ следующему, — и (б)\n * нескольких Vue-приложений на одной странице, которым нужны независимые темы.\n *\n * Для (б) обязателен и `target` — корень, получающий `data-theme`: без него\n * изолировано только состояние, а атрибут все приложения пишут в один `<html>`,\n * и побеждает последний.\n *\n * ```ts\n * app.use(granularityThemePlugin)\n * app.use(granularityThemePlugin, {\n * storageKey: 'admin-theme',\n * persist: false,\n * target: () => document.getElementById('admin-app'),\n * })\n * ```\n */\n// Где-то на странице установлен плагин: фолбэк в синглтон для такого приложения —\n// почти наверняка ошибка вызова, а не осознанный выбор.\nlet appScopedThemeProvided = false\nlet contextFallbackWarned = false\n\nexport const granularityThemePlugin = {\n install(app: App, options: UseThemeOptions = {}) {\n appScopedThemeProvided = true\n const state = createThemeState(options)\n app.provide(GRANULARITY_THEME_STATE, state)\n // Слушатели `storage`/`prefers-color-scheme` держат состояние; без снятия\n // каждый цикл mount/unmount микрофронтенда копил бы их на window навсегда.\n app.onUnmount(() => state.teardownListeners?.())\n },\n}\n\n// Ленивый модульный синглтон — канонический фолбэк для простых SPA без плагина.\nlet moduleThemeState: ThemeState | null = null\n\n/** Сброс dev-предупреждения о фолбэке. Внутреннее API — нужно тестам. */\nexport function resetThemeContextWarning(): void {\n contextFallbackWarned = false\n}\n\nfunction resolveThemeState(options: UseThemeOptions): ThemeState {\n // App-scoped состояние (provide через плагин): setup-контекст ИЛИ\n // `app.runWithContext(() => useTheme())` — `hasInjectionContext` покрывает оба.\n if (hasInjectionContext()) {\n const provided = inject(GRANULARITY_THEME_STATE, null)\n if (provided) return provided\n }\n\n // На сервере без плагина модульное состояние текло бы между запросами. Но\n // читать тему на сервере — нормальный сценарий (шаблон смотрит `isDark`), и\n // ронять на нём весь рендер нельзя: отдаём состояние на один вызов и запрещаем\n // мутацию — течёт именно она.\n if (IS_SERVER) return createThemeState(options, false)\n\n // Дедуп и текст — инлайном под dev-гардом: бандлер потребителя сворачивает\n // условие в `false` и выкидывает сообщение из продакшн-сборки.\n if (\n appScopedThemeProvided && !contextFallbackWarned\n && typeof process !== 'undefined' && process.env.NODE_ENV !== 'production'\n ) {\n contextFallbackWarned = true\n console.warn(\n '[granularity] useTheme() вызван вне setup/inject-контекста: app-scoped состояние '\n + 'granularityThemePlugin недоступно, использован модульный синглтон. '\n + 'Оберните вызов: app.runWithContext(() => useTheme()).',\n )\n }\n\n if (!moduleThemeState)\n moduleThemeState = createThemeState(options)\n\n return moduleThemeState\n}\n\n// Подписки на системную тему и синхронизацию между вкладками. Привязаны к\n// состоянию, а не к модулю: у каждого приложения своё. Одна подписка на\n// состояние, а не на потребителя, — `onScopeDispose` здесь был бы вреден, он\n// порвал бы общую подписку при размонтировании одного из них.\nfunction bindListeners(state: ThemeState) {\n if (state.listenersBound || typeof window === 'undefined') return\n state.listenersBound = true\n\n // Cross-tab: другая вкладка записала тему в localStorage.\n const onStorage = (event: StorageEvent): void => {\n if (!state.persist || event.key !== state.storageKey) return\n if (event.newValue === 'light' || event.newValue === 'dark') {\n state.theme.value = event.newValue\n applyTheme(event.newValue, state.target)\n }\n }\n window.addEventListener?.('storage', onStorage)\n\n // Системная смена `prefers-color-scheme` — следуем ей только если пользователь\n // НЕ выбрал тему явно (в storage ничего не сохранено).\n const mql = window.matchMedia?.('(prefers-color-scheme: dark)')\n const onSchemeChange = (event: MediaQueryListEvent): void => {\n if (readStoredTheme(state.storageKey, state.persist) !== null) return\n const next: ThemeName = event.matches ? 'dark' : 'light'\n state.theme.value = next\n applyTheme(next, state.target)\n }\n mql?.addEventListener?.('change', onSchemeChange)\n\n state.teardownListeners = () => {\n window.removeEventListener?.('storage', onStorage)\n mql?.removeEventListener?.('change', onSchemeChange)\n state.listenersBound = false\n state.teardownListeners = undefined\n }\n}\n\n/**\n * Для применения темы максимально рано (до монтирования Vue), чтобы избежать \"мигания\".\n * Также сидирует модульное состояние, чтобы значение в `useTheme()` совпадало с уже\n * применённым к документу.\n *\n * Функция клиентская: её зовут из браузерной точки входа до создания приложения,\n * то есть app-scoped состояние инжектить там ещё неоткуда. Расхождения с плагином\n * это не даёт — оба сидируются из одного `localStorage`.\n */\nexport function initThemeEarly(options: UseThemeOptions = {}) {\n const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY\n const persist = options.persist ?? true\n const preferred = getPreferredTheme(storageKey, persist)\n\n moduleThemeState ??= createThemeState(options)\n moduleThemeState.storageKey = storageKey\n moduleThemeState.persist = persist\n moduleThemeState.theme.value = preferred\n\n applyTheme(preferred)\n}\n\nexport function useTheme(options: UseThemeOptions = {}) {\n const state = resolveThemeState(options)\n\n // Опции вызова уточняют состояние — тот же приём, что был у модульного\n // синглтона: слушателям нужно знать, какой ключ отслеживать.\n if (options.storageKey !== undefined) state.storageKey = options.storageKey\n if (options.persist !== undefined) state.persist = options.persist\n if (options.target !== undefined) state.target = options.target\n\n bindListeners(state)\n\n const theme = state.theme\n const isDark = computed(() => theme.value === 'dark')\n\n function setTheme(next: ThemeName) {\n if (!state.writable) {\n throw new Error(\n '[granularity] useTheme: setTheme/toggleTheme require `app.use(granularityThemePlugin)` during SSR — '\n + 'the module-singleton fallback is disabled server-side, so a theme set by one request would leak into '\n + 'the next response. Reading `theme`/`isDark` on the server works without the plugin.',\n )\n }\n\n theme.value = next\n applyTheme(next, state.target)\n\n if (state.persist && typeof window !== 'undefined') {\n // См. комментарий в `readStoredTheme`: запись тоже может бросать.\n try {\n const storage = window.localStorage\n if (typeof storage?.setItem === 'function')\n storage.setItem(state.storageKey, next)\n }\n catch {\n // ignore\n }\n }\n }\n\n function toggleTheme() {\n setTheme(theme.value === 'dark' ? 'light' : 'dark')\n }\n\n function initTheme() {\n applyTheme(theme.value, state.target)\n }\n\n return {\n theme,\n isDark,\n setTheme,\n toggleTheme,\n initTheme,\n }\n}\n"],"mappings":";;AA8BA,IAAM,sBAAsB;AAC5B,IAAM,YAAY,OAAO,WAAW;AAEpC,SAAS,gBAAgB,YAAoB,SAAoC;CAC/E,IAAI,OAAO,WAAW,eAAe,CAAC,SAAS,OAAO;CAItD,IAAI;EACF,MAAM,UAAU,OAAO;EACvB,IAAI,OAAO,SAAS,YAAY,YAAY,OAAO;EAEnD,MAAM,SAAS,QAAQ,QAAQ,UAAU;EACzC,IAAI,WAAW,WAAW,WAAW,QAAQ,OAAO;CACtD,QACM,CAEN;CAEA,OAAO;AACT;AAEA,SAAS,iBAA4B;CACnC,IAAI,OAAO,WAAW,aAAa,OAAO;CAC1C,OAAO,OAAO,aAAa,8BAA8B,CAAC,EAAE,UAAU,SAAS;AACjF;AAEA,SAAS,kBAAkB,aAAa,qBAAqB,UAAU,MAAiB;CACtF,OAAO,gBAAgB,YAAY,OAAO,KAAK,eAAe;AAChE;AAEA,SAAS,WAAW,OAAkB,QAAmC;CACvE,IAAI,OAAO,aAAa,aAAa;CAKrC,MAAM,OAAO,SAAS,KAAK,SAAS;CACpC,KAAK,QAAQ,QAAQ;AACvB;AA2BA,SAAS,iBAAiB,UAA2B,CAAC,GAAG,WAAW,MAAkB;CACpF,MAAM,aAAa,QAAQ,cAAc;CACzC,MAAM,UAAU,QAAQ,WAAW;CAEnC,OAAO;EACL,OAAO,IAAe,kBAAkB,YAAY,OAAO,CAAC;EAC5D;EACA;EACA,QAAQ,QAAQ;EAChB,gBAAgB;EAChB;CACF;AACF;;AAGA,IAAa,0BAAoD,OAAO,IAAI,kCAAkC;;;;;;;;;;;;;;;;;;;;AAuB9G,IAAI,yBAAyB;AAC7B,IAAI,wBAAwB;AAE5B,IAAa,yBAAyB,EACpC,QAAQ,KAAU,UAA2B,CAAC,GAAG;CAC/C,yBAAyB;CACzB,MAAM,QAAQ,iBAAiB,OAAO;CACtC,IAAI,QAAQ,yBAAyB,KAAK;CAG1C,IAAI,gBAAgB,MAAM,oBAAoB,CAAC;AACjD,EACF;AAGA,IAAI,mBAAsC;;AAG1C,SAAgB,2BAAiC;CAC/C,wBAAwB;AAC1B;AAEA,SAAS,kBAAkB,SAAsC;CAG/D,IAAI,oBAAoB,GAAG;EACzB,MAAM,WAAW,OAAO,yBAAyB,IAAI;EACrD,IAAI,UAAU,OAAO;CACvB;CAMA,IAAI,WAAW,OAAO,iBAAiB,SAAS,KAAK;CAIrD,IACE,0BAA0B,CAAC,yBACxB,OAAO,YAAY,eAAA,QAAA,IAAA,aAAwC,cAC9D;EACA,wBAAwB;EACxB,QAAQ,KACN,2MAGF;CACF;CAEA,IAAI,CAAC,kBACH,mBAAmB,iBAAiB,OAAO;CAE7C,OAAO;AACT;AAMA,SAAS,cAAc,OAAmB;CACxC,IAAI,MAAM,kBAAkB,OAAO,WAAW,aAAa;CAC3D,MAAM,iBAAiB;CAGvB,MAAM,aAAa,UAA8B;EAC/C,IAAI,CAAC,MAAM,WAAW,MAAM,QAAQ,MAAM,YAAY;EACtD,IAAI,MAAM,aAAa,WAAW,MAAM,aAAa,QAAQ;GAC3D,MAAM,MAAM,QAAQ,MAAM;GAC1B,WAAW,MAAM,UAAU,MAAM,MAAM;EACzC;CACF;CACA,OAAO,mBAAmB,WAAW,SAAS;CAI9C,MAAM,MAAM,OAAO,aAAa,8BAA8B;CAC9D,MAAM,kBAAkB,UAAqC;EAC3D,IAAI,gBAAgB,MAAM,YAAY,MAAM,OAAO,MAAM,MAAM;EAC/D,MAAM,OAAkB,MAAM,UAAU,SAAS;EACjD,MAAM,MAAM,QAAQ;EACpB,WAAW,MAAM,MAAM,MAAM;CAC/B;CACA,KAAK,mBAAmB,UAAU,cAAc;CAEhD,MAAM,0BAA0B;EAC9B,OAAO,sBAAsB,WAAW,SAAS;EACjD,KAAK,sBAAsB,UAAU,cAAc;EACnD,MAAM,iBAAiB;EACvB,MAAM,oBAAoB,KAAA;CAC5B;AACF;;;;;;;;;;AAWA,SAAgB,eAAe,UAA2B,CAAC,GAAG;CAC5D,MAAM,aAAa,QAAQ,cAAc;CACzC,MAAM,UAAU,QAAQ,WAAW;CACnC,MAAM,YAAY,kBAAkB,YAAY,OAAO;CAEvD,qBAAqB,iBAAiB,OAAO;CAC7C,iBAAiB,aAAa;CAC9B,iBAAiB,UAAU;CAC3B,iBAAiB,MAAM,QAAQ;CAE/B,WAAW,SAAS;AACtB;AAEA,SAAgB,SAAS,UAA2B,CAAC,GAAG;CACtD,MAAM,QAAQ,kBAAkB,OAAO;CAIvC,IAAI,QAAQ,eAAe,KAAA,GAAW,MAAM,aAAa,QAAQ;CACjE,IAAI,QAAQ,YAAY,KAAA,GAAW,MAAM,UAAU,QAAQ;CAC3D,IAAI,QAAQ,WAAW,KAAA,GAAW,MAAM,SAAS,QAAQ;CAEzD,cAAc,KAAK;CAEnB,MAAM,QAAQ,MAAM;CACpB,MAAM,SAAS,eAAe,MAAM,UAAU,MAAM;CAEpD,SAAS,SAAS,MAAiB;EACjC,IAAI,CAAC,MAAM,UACT,MAAM,IAAI,MACR,8RAGF;EAGF,MAAM,QAAQ;EACd,WAAW,MAAM,MAAM,MAAM;EAE7B,IAAI,MAAM,WAAW,OAAO,WAAW,aAErC,IAAI;GACF,MAAM,UAAU,OAAO;GACvB,IAAI,OAAO,SAAS,YAAY,YAC9B,QAAQ,QAAQ,MAAM,YAAY,IAAI;EAC1C,QACM,CAEN;CAEJ;CAEA,SAAS,cAAc;EACrB,SAAS,MAAM,UAAU,SAAS,UAAU,MAAM;CACpD;CAEA,SAAS,YAAY;EACnB,WAAW,MAAM,OAAO,MAAM,MAAM;CACtC;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;CACF;AACF"}
@@ -1,11 +1,18 @@
1
- import { computed, getCurrentInstance, inject, reactive } from "vue";
1
+ import { computed, hasInjectionContext, inject, reactive } from "vue";
2
2
  //#region src/composables/useToast.ts
3
3
  var DEFAULT_TIMEOUT_MS = 3500;
4
4
  var IS_SERVER = typeof window === "undefined";
5
- function createToastState() {
5
+ /**
6
+ * Потолок очереди по умолчанию. `maxVisible` у `GrToaster` режет только видимые,
7
+ * поэтому без него поток событий (переподключение сокета, цикл ошибок) копил бы
8
+ * очередь и вываливал её на пользователя, когда стек освободится.
9
+ */
10
+ var DEFAULT_MAX_TOASTS = 20;
11
+ function createToastState(maxToasts = DEFAULT_MAX_TOASTS) {
6
12
  return {
7
13
  toasts: reactive([]),
8
- timers: /* @__PURE__ */ new Map()
14
+ timers: /* @__PURE__ */ new Map(),
15
+ maxToasts: Math.max(1, Math.trunc(maxToasts))
9
16
  };
10
17
  }
11
18
  /** Ключ provide/inject для app-scoped состояния тостов (устанавливает плагин ниже). */
@@ -18,18 +25,30 @@ var GRANULARITY_TOAST_STATE = Symbol.for("@feugene/granularity/toast-state");
18
25
  *
19
26
  * ```ts
20
27
  * app.use(granularityToastPlugin)
28
+ * app.use(granularityToastPlugin, { maxToasts: 50 })
21
29
  * ```
22
30
  */
23
- var granularityToastPlugin = { install(app) {
24
- app.provide(GRANULARITY_TOAST_STATE, createToastState());
31
+ var appScopedToastProvided = false;
32
+ var contextFallbackWarned = false;
33
+ var granularityToastPlugin = { install(app, options = {}) {
34
+ appScopedToastProvided = true;
35
+ app.provide(GRANULARITY_TOAST_STATE, createToastState(options.maxToasts));
25
36
  } };
26
37
  var moduleToastState = null;
38
+ /** Сброс dev-предупреждения о фолбэке. Внутреннее API — нужно тестам. */
39
+ function resetToastContextWarning() {
40
+ contextFallbackWarned = false;
41
+ }
27
42
  function resolveToastState() {
28
- if (getCurrentInstance()) {
43
+ if (hasInjectionContext()) {
29
44
  const provided = inject(GRANULARITY_TOAST_STATE, null);
30
45
  if (provided) return provided;
31
46
  }
32
47
  if (IS_SERVER) throw new Error("[granularity] useToast requires `app.use(granularityToastPlugin)` during SSR — the module-singleton fallback is disabled server-side to avoid state leaking between requests.");
48
+ if (appScopedToastProvided && !contextFallbackWarned && typeof process !== "undefined" && process.env.NODE_ENV !== "production") {
49
+ contextFallbackWarned = true;
50
+ console.warn("[granularity] useToast() вызван вне setup/inject-контекста: app-scoped состояние granularityToastPlugin недоступно, использован модульный синглтон — эти тосты не попадут в GrToaster приложения. Оберните вызов: app.runWithContext(() => useToast()).");
51
+ }
33
52
  if (!moduleToastState) moduleToastState = createToastState();
34
53
  return moduleToastState;
35
54
  }
@@ -71,6 +90,7 @@ function useToast() {
71
90
  actions: input.actions
72
91
  };
73
92
  state.toasts.unshift(toast);
93
+ trimQueue();
74
94
  if (toast.timeoutMs > 0) {
75
95
  const timer = {
76
96
  handle: null,
@@ -82,6 +102,94 @@ function useToast() {
82
102
  }
83
103
  return id;
84
104
  }
105
+ function trimQueue() {
106
+ while (state.toasts.length > state.maxToasts) {
107
+ const dropped = state.toasts.pop();
108
+ if (dropped) clearTimer(dropped.id);
109
+ }
110
+ }
111
+ /**
112
+ * Меняет показанный тост на месте. `timeoutMs` в патче перезапускает таймер
113
+ * (`0` — снова «навсегда»), поэтому «вечный» loading может стать
114
+ * самозакрывающимся success.
115
+ *
116
+ * Возвращает `false`, если тоста уже нет: пользователь мог закрыть его руками,
117
+ * и воскрешать его нельзя.
118
+ */
119
+ function update(id, patch) {
120
+ const toast = state.toasts.find((item) => item.id === id);
121
+ if (!toast) return false;
122
+ if (patch.title !== void 0) toast.title = patch.title;
123
+ if (patch.message !== void 0) toast.message = patch.message;
124
+ if (patch.tone !== void 0) toast.tone = patch.tone;
125
+ if (patch.action !== void 0) toast.action = patch.action;
126
+ if (patch.actions !== void 0) toast.actions = patch.actions;
127
+ if (patch.timeoutMs !== void 0) toast.timeoutMs = rearmTimer(id, patch.timeoutMs);
128
+ return true;
129
+ }
130
+ /** Перезапускает автозакрытие с нового таймаута; `0` и меньше — «навсегда». */
131
+ function rearmTimer(id, timeoutMs) {
132
+ clearTimer(id);
133
+ const next = timeoutMs > 0 ? timeoutMs : 0;
134
+ if (next > 0) {
135
+ const timer = {
136
+ handle: null,
137
+ remaining: next,
138
+ startedAt: now()
139
+ };
140
+ state.timers.set(id, timer);
141
+ armTimer(id, timer);
142
+ }
143
+ return next;
144
+ }
145
+ /**
146
+ * Полная замена стадии для `promise()`. В отличие от `update`, поле без
147
+ * значения очищается: успех не должен донашивать `message` и action-кнопки
148
+ * загрузки — патч-семантика оставляла бы их в тосте навсегда.
149
+ */
150
+ function applyStage(id, stage) {
151
+ const toast = state.toasts.find((item) => item.id === id);
152
+ if (!toast) return;
153
+ toast.title = stage.title;
154
+ toast.message = stage.message;
155
+ toast.tone = stage.tone;
156
+ toast.action = stage.action;
157
+ toast.actions = stage.actions;
158
+ toast.timeoutMs = rearmTimer(id, stage.timeoutMs);
159
+ }
160
+ /**
161
+ * Один тост на весь жизненный цикл промиса: «загружаем» переписывается в
162
+ * успех или ошибку, а не закрывается ради нового — стек не дёргается.
163
+ *
164
+ * Каждая стадия **заменяет** предыдущую целиком: поле, не заданное в
165
+ * success/error, очищается, а не наследуется от loading.
166
+ *
167
+ * Возвращает исходный промис и **не глотает отказ**: тост не заменяет
168
+ * обработку ошибки, вызывающий по-прежнему обязан её обработать.
169
+ */
170
+ function promise(input, messages) {
171
+ const id = push({
172
+ tone: "info",
173
+ ...toToastInput(messages.loading),
174
+ timeoutMs: 0
175
+ });
176
+ input.then((value) => {
177
+ const stage = resolveMessage(messages.success, value);
178
+ applyStage(id, {
179
+ ...stage,
180
+ tone: stage.tone ?? "success",
181
+ timeoutMs: stage.timeoutMs ?? DEFAULT_TIMEOUT_MS
182
+ });
183
+ }, (reason) => {
184
+ const stage = resolveMessage(messages.error, reason);
185
+ applyStage(id, {
186
+ ...stage,
187
+ tone: stage.tone ?? "danger",
188
+ timeoutMs: stage.timeoutMs ?? DEFAULT_TIMEOUT_MS
189
+ });
190
+ });
191
+ return input;
192
+ }
85
193
  /** Останавливает отсчёт автозакрытия, сохраняя остаток (идемпотентно). */
86
194
  function pause(id) {
87
195
  const timer = state.timers.get(id);
@@ -108,11 +216,19 @@ function useToast() {
108
216
  return {
109
217
  list,
110
218
  push,
219
+ update,
220
+ promise,
111
221
  dismiss,
112
222
  clear,
113
223
  pause,
114
224
  resume
115
225
  };
116
226
  }
227
+ function toToastInput(message) {
228
+ return typeof message === "string" ? { title: message } : message;
229
+ }
230
+ function resolveMessage(message, value) {
231
+ return toToastInput(typeof message === "function" ? message(value) : message);
232
+ }
117
233
  //#endregion
118
- export { GRANULARITY_TOAST_STATE, granularityToastPlugin, useToast };
234
+ export { GRANULARITY_TOAST_STATE, granularityToastPlugin, resetToastContextWarning, useToast };
@@ -1 +1 @@
1
- {"version":3,"file":"useToast.js","names":[],"sources":["../../src/composables/useToast.ts"],"sourcesContent":["import { computed, getCurrentInstance, inject, reactive } from 'vue'\nimport type { App, InjectionKey } from 'vue'\n\nimport type { GrButtonSize, GrButtonVariant } from '../components/GrButton/grButtonStyles'\nimport type { GrTone } from '../components/shared/tones'\n\nexport type GrToastTone = GrTone\n\n/**\n * Опциональная action-кнопка тоста: `label` — текст, `onClick` — обработчик.\n * По клику вызывается `onClick`, затем тост закрывается (если `dismissOnClick`\n * не установлен в `false`). `size`/`variant` настраивают вид кнопки.\n */\nexport type ToastAction = {\n label: string\n onClick: () => void\n /** Закрывать ли тост после клика по действию. По умолчанию `true`. */\n dismissOnClick?: boolean\n /** Размер кнопки действия. По умолчанию `sm`. */\n size?: GrButtonSize\n /** Вариант кнопки действия. По умолчанию `outline`. */\n variant?: GrButtonVariant\n}\n\nexport type ToastInput = {\n title: string\n message?: string\n tone?: GrToastTone\n /**\n * Автозакрытие через N мс. `0` или отрицательное значение — «навсегда»\n * (до явного вызова `dismiss(id)` / `clear()`). По умолчанию: `3500`.\n */\n timeoutMs?: number\n /** Одна action-кнопка в теле тоста (шорткат для `actions: [action]`). */\n action?: ToastAction\n /** Несколько action-кнопок в теле тоста. Рендерятся после `action`. */\n actions?: ToastAction[]\n}\n\nexport type Toast = {\n id: string\n title: string\n message?: string\n tone: GrToastTone\n /** Исходный таймаут автозакрытия, мс (`0` — без автозакрытия). Нужен для progress-бара. */\n timeoutMs: number\n /** Одна action-кнопка в теле тоста. */\n action?: ToastAction\n /** Несколько action-кнопок в теле тоста. */\n actions?: ToastAction[]\n}\n\nconst DEFAULT_TIMEOUT_MS = 3500\nconst IS_SERVER = typeof window === 'undefined'\n\n// Метаданные таймера автозакрытия с поддержкой pause/resume (WCAG 2.2.1: под\n// курсором/фокусом отсчёт должен останавливаться).\ntype ToastTimer = {\n handle: number | null\n /** Сколько мс осталось до автозакрытия на момент последней паузы/старта. */\n remaining: number\n /** `performance.now()` момента запуска текущего отрезка (для вычисления остатка). */\n startedAt: number\n}\n\nexport type ToastState = {\n toasts: Toast[]\n timers: Map<string, ToastTimer>\n}\n\nfunction createToastState(): ToastState {\n return {\n toasts: reactive<Toast[]>([]),\n timers: new Map<string, ToastTimer>(),\n }\n}\n\n/** Ключ provide/inject для app-scoped состояния тостов (устанавливает плагин ниже). */\nexport const GRANULARITY_TOAST_STATE: InjectionKey<ToastState> = Symbol.for('@feugene/granularity/toast-state')\n\n/**\n * Vue-плагин: даёт каждому приложению собственное изолированное состояние тостов\n * через `app.provide`. Обязателен для (а) нескольких Vue-приложений на одной\n * странице (микрофронтенды — иначе делят один стек тостов) и (б) SSR (иначе\n * модульное состояние течёт между запросами).\n *\n * ```ts\n * app.use(granularityToastPlugin)\n * ```\n */\nexport const granularityToastPlugin = {\n install(app: App) {\n app.provide(GRANULARITY_TOAST_STATE, createToastState())\n },\n}\n\n// Ленивый модульный синглтон — канонический фолбэк для простых SPA без плагина.\nlet moduleToastState: ToastState | null = null\n\nfunction resolveToastState(): ToastState {\n // App-scoped состояние (provide через плагин) доступно только в setup-контексте.\n if (getCurrentInstance()) {\n const provided = inject(GRANULARITY_TOAST_STATE, null)\n if (provided) return provided\n }\n\n // В SSR модульный фолбэк запрещён: одно mutable-состояние на модуль утекало бы\n // между запросами. Требуем установленный плагин (app.provide).\n if (IS_SERVER) {\n throw new Error(\n '[granularity] useToast requires `app.use(granularityToastPlugin)` during SSR — '\n + 'the module-singleton fallback is disabled server-side to avoid state leaking between requests.',\n )\n }\n\n if (!moduleToastState)\n moduleToastState = createToastState()\n\n return moduleToastState\n}\n\nfunction now(): number {\n return typeof performance !== 'undefined' ? performance.now() : Date.now()\n}\n\nfunction makeId(): string {\n return `${Date.now()}-${Math.random().toString(16).slice(2)}`\n}\n\nexport function useToast() {\n const state = resolveToastState()\n const list = computed(() => state.toasts)\n\n function armTimer(id: string, timer: ToastTimer): void {\n if (timer.remaining <= 0 || typeof window === 'undefined') return\n timer.startedAt = now()\n timer.handle = window.setTimeout(() => {\n state.timers.delete(id)\n dismiss(id)\n }, timer.remaining)\n }\n\n function clearTimer(id: string): void {\n const timer = state.timers.get(id)\n if (timer?.handle != null) {\n clearTimeout(timer.handle)\n timer.handle = null\n }\n state.timers.delete(id)\n }\n\n function push(input: ToastInput): string {\n const id = makeId()\n const timeout = input.timeoutMs ?? DEFAULT_TIMEOUT_MS\n const toast: Toast = {\n id,\n title: input.title,\n message: input.message,\n tone: input.tone ?? 'info',\n timeoutMs: timeout > 0 ? timeout : 0,\n action: input.action,\n actions: input.actions,\n }\n\n state.toasts.unshift(toast)\n\n if (toast.timeoutMs > 0) {\n const timer: ToastTimer = { handle: null, remaining: toast.timeoutMs, startedAt: now() }\n state.timers.set(id, timer)\n armTimer(id, timer)\n }\n\n return id\n }\n\n /** Останавливает отсчёт автозакрытия, сохраняя остаток (идемпотентно). */\n function pause(id: string): void {\n const timer = state.timers.get(id)\n if (!timer || timer.handle == null) return\n\n clearTimeout(timer.handle)\n timer.handle = null\n timer.remaining = Math.max(0, timer.remaining - (now() - timer.startedAt))\n }\n\n /** Возобновляет отсчёт с сохранённого остатка (идемпотентно). */\n function resume(id: string): void {\n const timer = state.timers.get(id)\n if (!timer || timer.handle != null) return\n\n armTimer(id, timer)\n }\n\n function dismiss(id: string): void {\n clearTimer(id)\n const index = state.toasts.findIndex(toast => toast.id === id)\n if (index >= 0)\n state.toasts.splice(index, 1)\n }\n\n function clear(): void {\n for (const id of [...state.timers.keys()]) clearTimer(id)\n state.toasts.splice(0, state.toasts.length)\n }\n\n return {\n list,\n push,\n dismiss,\n clear,\n pause,\n resume,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useToast.js","names":[],"sources":["../../src/composables/useToast.ts"],"sourcesContent":["import { computed, hasInjectionContext, inject, reactive } from 'vue'\nimport type { App, InjectionKey } from 'vue'\n\nimport type { GrButtonSize, GrButtonVariant } from '../components/GrButton/grButtonStyles'\nimport type { GrTone } from '../components/shared/tones'\n\nexport type GrToastTone = GrTone\n\n/**\n * Опциональная action-кнопка тоста: `label` — текст, `onClick` — обработчик.\n * По клику вызывается `onClick`, затем тост закрывается (если `dismissOnClick`\n * не установлен в `false`). `size`/`variant` настраивают вид кнопки.\n */\nexport type ToastAction = {\n label: string\n onClick: () => void\n /** Закрывать ли тост после клика по действию. По умолчанию `true`. */\n dismissOnClick?: boolean\n /** Размер кнопки действия. По умолчанию `sm`. */\n size?: GrButtonSize\n /** Вариант кнопки действия. По умолчанию `outline`. */\n variant?: GrButtonVariant\n}\n\nexport type ToastInput = {\n title: string\n message?: string\n tone?: GrToastTone\n /**\n * Автозакрытие через N мс. `0` или отрицательное значение — «навсегда»\n * (до явного вызова `dismiss(id)` / `clear()`). По умолчанию: `3500`.\n */\n timeoutMs?: number\n /** Одна action-кнопка в теле тоста (шорткат для `actions: [action]`). */\n action?: ToastAction\n /** Несколько action-кнопок в теле тоста. Рендерятся после `action`. */\n actions?: ToastAction[]\n}\n\n/**\n * Сообщения для `promise`. Строка — шорткат для `{ title }`; функция получает\n * результат промиса (или причину отказа), чтобы подставить его в текст.\n */\nexport type ToastPromiseMessages<T> = {\n loading: string | ToastInput\n success: string | ToastInput | ((value: T) => string | ToastInput)\n error: string | ToastInput | ((reason: unknown) => string | ToastInput)\n}\n\nexport type Toast = {\n id: string\n title: string\n message?: string\n tone: GrToastTone\n /** Исходный таймаут автозакрытия, мс (`0` — без автозакрытия). Нужен для progress-бара. */\n timeoutMs: number\n /** Одна action-кнопка в теле тоста. */\n action?: ToastAction\n /** Несколько action-кнопок в теле тоста. */\n actions?: ToastAction[]\n}\n\nconst DEFAULT_TIMEOUT_MS = 3500\nconst IS_SERVER = typeof window === 'undefined'\n\n// Метаданные таймера автозакрытия с поддержкой pause/resume (WCAG 2.2.1: под\n// курсором/фокусом отсчёт должен останавливаться).\ntype ToastTimer = {\n handle: number | null\n /** Сколько мс осталось до автозакрытия на момент последней паузы/старта. */\n remaining: number\n /** `performance.now()` момента запуска текущего отрезка (для вычисления остатка). */\n startedAt: number\n}\n\nexport type ToastState = {\n toasts: Toast[]\n timers: Map<string, ToastTimer>\n /** Потолок очереди: сверх него самые старые тосты вытесняются. */\n maxToasts: number\n}\n\n/**\n * Потолок очереди по умолчанию. `maxVisible` у `GrToaster` режет только видимые,\n * поэтому без него поток событий (переподключение сокета, цикл ошибок) копил бы\n * очередь и вываливал её на пользователя, когда стек освободится.\n */\nconst DEFAULT_MAX_TOASTS = 20\n\nexport type GranularityToastPluginOptions = {\n /** Потолок очереди. По умолчанию `20`. */\n maxToasts?: number\n}\n\nfunction createToastState(maxToasts = DEFAULT_MAX_TOASTS): ToastState {\n return {\n toasts: reactive<Toast[]>([]),\n timers: new Map<string, ToastTimer>(),\n maxToasts: Math.max(1, Math.trunc(maxToasts)),\n }\n}\n\n/** Ключ provide/inject для app-scoped состояния тостов (устанавливает плагин ниже). */\nexport const GRANULARITY_TOAST_STATE: InjectionKey<ToastState> = Symbol.for('@feugene/granularity/toast-state')\n\n/**\n * Vue-плагин: даёт каждому приложению собственное изолированное состояние тостов\n * через `app.provide`. Обязателен для (а) нескольких Vue-приложений на одной\n * странице (микрофронтенды — иначе делят один стек тостов) и (б) SSR (иначе\n * модульное состояние течёт между запросами).\n *\n * ```ts\n * app.use(granularityToastPlugin)\n * app.use(granularityToastPlugin, { maxToasts: 50 })\n * ```\n */\n// Где-то на странице установлен плагин: фолбэк в синглтон для такого приложения —\n// почти наверняка ошибка вызова, а не осознанный выбор.\nlet appScopedToastProvided = false\nlet contextFallbackWarned = false\n\nexport const granularityToastPlugin = {\n install(app: App, options: GranularityToastPluginOptions = {}) {\n appScopedToastProvided = true\n app.provide(GRANULARITY_TOAST_STATE, createToastState(options.maxToasts))\n },\n}\n\n// Ленивый модульный синглтон — канонический фолбэк для простых SPA без плагина.\nlet moduleToastState: ToastState | null = null\n\n/** Сброс dev-предупреждения о фолбэке. Внутреннее API — нужно тестам. */\nexport function resetToastContextWarning(): void {\n contextFallbackWarned = false\n}\n\nfunction resolveToastState(): ToastState {\n // App-scoped состояние (provide через плагин): setup-контекст ИЛИ\n // `app.runWithContext(() => useToast())` — `hasInjectionContext` покрывает оба,\n // поэтому вызов из router guard / интерцептора достаёт состояние приложения.\n if (hasInjectionContext()) {\n const provided = inject(GRANULARITY_TOAST_STATE, null)\n if (provided) return provided\n }\n\n // В SSR модульный фолбэк запрещён: одно mutable-состояние на модуль утекало бы\n // между запросами. Требуем установленный плагин (app.provide).\n if (IS_SERVER) {\n throw new Error(\n '[granularity] useToast requires `app.use(granularityToastPlugin)` during SSR — '\n + 'the module-singleton fallback is disabled server-side to avoid state leaking between requests.',\n )\n }\n\n // Дедуп и текст — инлайном под dev-гардом: бандлер потребителя сворачивает\n // условие в `false` и выкидывает сообщение из продакшн-сборки.\n if (\n appScopedToastProvided && !contextFallbackWarned\n && typeof process !== 'undefined' && process.env.NODE_ENV !== 'production'\n ) {\n contextFallbackWarned = true\n console.warn(\n '[granularity] useToast() вызван вне setup/inject-контекста: app-scoped состояние '\n + 'granularityToastPlugin недоступно, использован модульный синглтон — эти тосты не попадут '\n + 'в GrToaster приложения. Оберните вызов: app.runWithContext(() => useToast()).',\n )\n }\n\n if (!moduleToastState)\n moduleToastState = createToastState()\n\n return moduleToastState\n}\n\nfunction now(): number {\n return typeof performance !== 'undefined' ? performance.now() : Date.now()\n}\n\nfunction makeId(): string {\n return `${Date.now()}-${Math.random().toString(16).slice(2)}`\n}\n\nexport function useToast() {\n const state = resolveToastState()\n const list = computed(() => state.toasts)\n\n function armTimer(id: string, timer: ToastTimer): void {\n if (timer.remaining <= 0 || typeof window === 'undefined') return\n timer.startedAt = now()\n timer.handle = window.setTimeout(() => {\n state.timers.delete(id)\n dismiss(id)\n }, timer.remaining)\n }\n\n function clearTimer(id: string): void {\n const timer = state.timers.get(id)\n if (timer?.handle != null) {\n clearTimeout(timer.handle)\n timer.handle = null\n }\n state.timers.delete(id)\n }\n\n function push(input: ToastInput): string {\n const id = makeId()\n const timeout = input.timeoutMs ?? DEFAULT_TIMEOUT_MS\n const toast: Toast = {\n id,\n title: input.title,\n message: input.message,\n tone: input.tone ?? 'info',\n timeoutMs: timeout > 0 ? timeout : 0,\n action: input.action,\n actions: input.actions,\n }\n\n state.toasts.unshift(toast)\n trimQueue()\n\n if (toast.timeoutMs > 0) {\n const timer: ToastTimer = { handle: null, remaining: toast.timeoutMs, startedAt: now() }\n state.timers.set(id, timer)\n armTimer(id, timer)\n }\n\n return id\n }\n\n // Вытесняем с хвоста — там самые старые: при потоке событий устаревшее\n // уведомление менее ценно, чем свежее. Таймеры снимаем, иначе остались бы\n // висящие `setTimeout` на тосты, которых больше нет.\n //\n // Это флуд-защита уровня состояния, а не очередь показа (`GrToaster` держит\n // видимыми старейших): при переполнении потолка вытеснен может быть и тост,\n // который сейчас на экране, — осознанный компромисс.\n function trimQueue(): void {\n while (state.toasts.length > state.maxToasts) {\n const dropped = state.toasts.pop()\n if (dropped)\n clearTimer(dropped.id)\n }\n }\n\n /**\n * Меняет показанный тост на месте. `timeoutMs` в патче перезапускает таймер\n * (`0` — снова «навсегда»), поэтому «вечный» loading может стать\n * самозакрывающимся success.\n *\n * Возвращает `false`, если тоста уже нет: пользователь мог закрыть его руками,\n * и воскрешать его нельзя.\n */\n function update(id: string, patch: Partial<ToastInput>): boolean {\n const toast = state.toasts.find(item => item.id === id)\n if (!toast) return false\n\n if (patch.title !== undefined) toast.title = patch.title\n if (patch.message !== undefined) toast.message = patch.message\n if (patch.tone !== undefined) toast.tone = patch.tone\n if (patch.action !== undefined) toast.action = patch.action\n if (patch.actions !== undefined) toast.actions = patch.actions\n\n if (patch.timeoutMs !== undefined)\n toast.timeoutMs = rearmTimer(id, patch.timeoutMs)\n\n return true\n }\n\n /** Перезапускает автозакрытие с нового таймаута; `0` и меньше — «навсегда». */\n function rearmTimer(id: string, timeoutMs: number): number {\n clearTimer(id)\n const next = timeoutMs > 0 ? timeoutMs : 0\n\n if (next > 0) {\n const timer: ToastTimer = { handle: null, remaining: next, startedAt: now() }\n state.timers.set(id, timer)\n armTimer(id, timer)\n }\n\n return next\n }\n\n /**\n * Полная замена стадии для `promise()`. В отличие от `update`, поле без\n * значения очищается: успех не должен донашивать `message` и action-кнопки\n * загрузки — патч-семантика оставляла бы их в тосте навсегда.\n */\n function applyStage(id: string, stage: ToastInput & { tone: GrToastTone, timeoutMs: number }): void {\n const toast = state.toasts.find(item => item.id === id)\n if (!toast) return\n\n toast.title = stage.title\n toast.message = stage.message\n toast.tone = stage.tone\n toast.action = stage.action\n toast.actions = stage.actions\n toast.timeoutMs = rearmTimer(id, stage.timeoutMs)\n }\n\n /**\n * Один тост на весь жизненный цикл промиса: «загружаем» переписывается в\n * успех или ошибку, а не закрывается ради нового — стек не дёргается.\n *\n * Каждая стадия **заменяет** предыдущую целиком: поле, не заданное в\n * success/error, очищается, а не наследуется от loading.\n *\n * Возвращает исходный промис и **не глотает отказ**: тост не заменяет\n * обработку ошибки, вызывающий по-прежнему обязан её обработать.\n */\n function promise<T>(input: Promise<T>, messages: ToastPromiseMessages<T>): Promise<T> {\n const id = push({ tone: 'info', ...toToastInput(messages.loading), timeoutMs: 0 })\n\n input.then(\n (value) => {\n const stage = resolveMessage(messages.success, value)\n applyStage(id, { ...stage, tone: stage.tone ?? 'success', timeoutMs: stage.timeoutMs ?? DEFAULT_TIMEOUT_MS })\n },\n (reason: unknown) => {\n const stage = resolveMessage(messages.error, reason)\n applyStage(id, { ...stage, tone: stage.tone ?? 'danger', timeoutMs: stage.timeoutMs ?? DEFAULT_TIMEOUT_MS })\n },\n )\n\n return input\n }\n\n /** Останавливает отсчёт автозакрытия, сохраняя остаток (идемпотентно). */\n function pause(id: string): void {\n const timer = state.timers.get(id)\n if (!timer || timer.handle == null) return\n\n clearTimeout(timer.handle)\n timer.handle = null\n timer.remaining = Math.max(0, timer.remaining - (now() - timer.startedAt))\n }\n\n /** Возобновляет отсчёт с сохранённого остатка (идемпотентно). */\n function resume(id: string): void {\n const timer = state.timers.get(id)\n if (!timer || timer.handle != null) return\n\n armTimer(id, timer)\n }\n\n function dismiss(id: string): void {\n clearTimer(id)\n const index = state.toasts.findIndex(toast => toast.id === id)\n if (index >= 0)\n state.toasts.splice(index, 1)\n }\n\n function clear(): void {\n for (const id of [...state.timers.keys()]) clearTimer(id)\n state.toasts.splice(0, state.toasts.length)\n }\n\n return {\n list,\n push,\n update,\n promise,\n dismiss,\n clear,\n pause,\n resume,\n }\n}\n\nfunction toToastInput(message: string | ToastInput): ToastInput {\n return typeof message === 'string' ? { title: message } : message\n}\n\nfunction resolveMessage<T>(\n message: string | ToastInput | ((value: T) => string | ToastInput),\n value: T,\n): ToastInput {\n return toToastInput(typeof message === 'function' ? message(value) : message)\n}\n"],"mappings":"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"}