@feugene/granularity 0.4.1 → 0.4.2

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 (257) hide show
  1. package/dist/chunks/{adapter-C7fKeUa4.js → adapter-K6zZTzBi.js} +0 -2
  2. package/dist/chunks/{adapter-C7fKeUa4.js.map → adapter-K6zZTzBi.js.map} +1 -1
  3. package/dist/chunks/arrow-up-DNXrMoAI.js +0 -2
  4. package/dist/chunks/classTokens-BPeBXNzu.js +0 -2
  5. package/dist/chunks/{config-BUGfFjmC.js → config-1I95Zy4V.js} +0 -2
  6. package/dist/chunks/{config-BUGfFjmC.js.map → config-1I95Zy4V.js.map} +1 -1
  7. package/dist/chunks/config-2wgwWaAB.js +0 -2
  8. package/dist/chunks/{config-DBYCntwl.js → config-BA0BWYzs.js} +0 -2
  9. package/dist/chunks/{config-DBYCntwl.js.map → config-BA0BWYzs.js.map} +1 -1
  10. package/dist/chunks/{config-dD6Po-Cq.js → config-BCPyma1I.js} +0 -2
  11. package/dist/chunks/{config-dD6Po-Cq.js.map → config-BCPyma1I.js.map} +1 -1
  12. package/dist/chunks/{config-CYPU3ztl.js → config-BDlh6iNz.js} +1 -3
  13. package/dist/chunks/{config-CYPU3ztl.js.map → config-BDlh6iNz.js.map} +1 -1
  14. package/dist/chunks/config-BKRmlivc.js +0 -2
  15. package/dist/chunks/{config-CcmeMlic.js → config-BN-B2K4r.js} +1 -3
  16. package/dist/chunks/{config-CcmeMlic.js.map → config-BN-B2K4r.js.map} +1 -1
  17. package/dist/chunks/{config-C0b_3LJV.js → config-BNOf_qjD.js} +0 -2
  18. package/dist/chunks/{config-C0b_3LJV.js.map → config-BNOf_qjD.js.map} +1 -1
  19. package/dist/chunks/config-BaMO9dQh.js +0 -2
  20. package/dist/chunks/config-Bv2G0OU6.js +0 -2
  21. package/dist/chunks/{config-CxCAfXZ1.js → config-BvuQUBtZ.js} +0 -2
  22. package/dist/chunks/{config-CxCAfXZ1.js.map → config-BvuQUBtZ.js.map} +1 -1
  23. package/dist/chunks/config-BzZGpWsj.js +0 -2
  24. package/dist/chunks/{config-KGTIAFD92.js → config-C0j836dC.js} +0 -2
  25. package/dist/chunks/config-C0j836dC.js.map +1 -0
  26. package/dist/chunks/{config-D7iuXJbl.js → config-C2iI7_QX.js} +0 -2
  27. package/dist/chunks/{config-D7iuXJbl.js.map → config-C2iI7_QX.js.map} +1 -1
  28. package/dist/chunks/{config-BcFOkUhh.js → config-C4AlNm912.js} +1 -3
  29. package/dist/chunks/config-C4AlNm912.js.map +1 -0
  30. package/dist/chunks/{config-rFwazRKi.js → config-C5SJXHQ4.js} +0 -2
  31. package/dist/chunks/{config-rFwazRKi.js.map → config-C5SJXHQ4.js.map} +1 -1
  32. package/dist/chunks/config-C6SBJxcH.js +0 -2
  33. package/dist/chunks/{config-BzQ4S4Hb.js → config-CByfsV-z2.js} +0 -2
  34. package/dist/chunks/config-CByfsV-z2.js.map +1 -0
  35. package/dist/chunks/{config-rxFL-6yF2.js → config-CM7nbATU2.js} +0 -2
  36. package/dist/chunks/{config-rxFL-6yF2.js.map → config-CM7nbATU2.js.map} +1 -1
  37. package/dist/chunks/config-CMZE2fu0.js +0 -2
  38. package/dist/chunks/config-CU_CBd0k.js +0 -2
  39. package/dist/chunks/{config-BhvNm4Pp.js → config-CUgvsjZx.js} +0 -2
  40. package/dist/chunks/{config-BhvNm4Pp.js.map → config-CUgvsjZx.js.map} +1 -1
  41. package/dist/chunks/{config-DxqMXzNV2.js → config-CWvHiaqr2.js} +0 -2
  42. package/dist/chunks/{config-DxqMXzNV2.js.map → config-CWvHiaqr2.js.map} +1 -1
  43. package/dist/chunks/{config-C2JKq8-2.js → config-Cf0J6wCX.js} +0 -2
  44. package/dist/chunks/{config-C2JKq8-2.js.map → config-Cf0J6wCX.js.map} +1 -1
  45. package/dist/chunks/{config-CdAx6ify2.js → config-CgAY2WP9.js} +0 -2
  46. package/dist/chunks/config-CgAY2WP9.js.map +1 -0
  47. package/dist/chunks/{config-D1gSaT52.js → config-Cgc-D1K4.js} +0 -2
  48. package/dist/chunks/{config-D1gSaT52.js.map → config-Cgc-D1K4.js.map} +1 -1
  49. package/dist/chunks/{config-cn6knwud.js → config-D19pyP4D.js} +0 -2
  50. package/dist/chunks/{config-cn6knwud.js.map → config-D19pyP4D.js.map} +1 -1
  51. package/dist/chunks/{config-ug8O8epd.js → config-DCQO6H6h.js} +0 -2
  52. package/dist/chunks/{config-ug8O8epd.js.map → config-DCQO6H6h.js.map} +1 -1
  53. package/dist/chunks/{config-BXffa3ta.js → config-DEv4m-ZP.js} +0 -2
  54. package/dist/chunks/{config-BXffa3ta.js.map → config-DEv4m-ZP.js.map} +1 -1
  55. package/dist/chunks/config-DFRYOcrP.js +0 -2
  56. package/dist/chunks/{config-DlLE49_I.js → config-DTpwUHgF.js} +0 -2
  57. package/dist/chunks/{config-DlLE49_I.js.map → config-DTpwUHgF.js.map} +1 -1
  58. package/dist/chunks/config-DW_RqmUp.js +0 -2
  59. package/dist/chunks/{config-CJeyaUTp.js → config-Da90XGsi.js} +0 -2
  60. package/dist/chunks/{config-CJeyaUTp.js.map → config-Da90XGsi.js.map} +1 -1
  61. package/dist/chunks/{config-CJbjLC5X.js → config-DgRJlF00.js} +0 -2
  62. package/dist/chunks/{config-CJbjLC5X.js.map → config-DgRJlF00.js.map} +1 -1
  63. package/dist/chunks/config-Dkq0HeLe.js +0 -2
  64. package/dist/chunks/{config-DwB5-qdP2.js → config-DmI1IQvI2.js} +0 -2
  65. package/dist/chunks/{config-DwB5-qdP2.js.map → config-DmI1IQvI2.js.map} +1 -1
  66. package/dist/chunks/{config-BRU5PR8_.js → config-Dnu4VuO0.js} +0 -2
  67. package/dist/chunks/{config-BRU5PR8_.js.map → config-Dnu4VuO0.js.map} +1 -1
  68. package/dist/chunks/config-DxqpV-KM.js +0 -2
  69. package/dist/chunks/config-TyzU6gLf.js +0 -2
  70. package/dist/chunks/{config-Bv5Dok4j.js → config-XwI6t8cn.js} +0 -2
  71. package/dist/chunks/{config-Bv5Dok4j.js.map → config-XwI6t8cn.js.map} +1 -1
  72. package/dist/chunks/{config-DvTUDLT1.js → config-bpQYM5O-.js} +0 -2
  73. package/dist/chunks/{config-DvTUDLT1.js.map → config-bpQYM5O-.js.map} +1 -1
  74. package/dist/chunks/{config-BbtK511H.js → config-etXh7Bsr2.js} +0 -2
  75. package/dist/chunks/config-etXh7Bsr2.js.map +1 -0
  76. package/dist/chunks/{config-BhubOeci.js → config-fCcRwjIB.js} +0 -2
  77. package/dist/chunks/{config-BhubOeci.js.map → config-fCcRwjIB.js.map} +1 -1
  78. package/dist/chunks/{config-D7tRu8u3.js → config-nfOMJXVs.js} +0 -2
  79. package/dist/chunks/{config-D7tRu8u3.js.map → config-nfOMJXVs.js.map} +1 -1
  80. package/dist/chunks/{config-BcpRsZTe.js → config-qJXIIY1E.js} +0 -2
  81. package/dist/chunks/{config-BcpRsZTe.js.map → config-qJXIIY1E.js.map} +1 -1
  82. package/dist/chunks/{config-Dzz9P-GV2.js → config-r6hzn2Bn2.js} +0 -2
  83. package/dist/chunks/{config-Dzz9P-GV2.js.map → config-r6hzn2Bn2.js.map} +1 -1
  84. package/dist/chunks/config-rQlbnEKn.js +0 -2
  85. package/dist/chunks/dialogShared-BtXUk6Zc.js +0 -2
  86. package/dist/chunks/{en-BMjJZttK.js → en-BeJa78lP.js} +0 -2
  87. package/dist/chunks/{en-BMjJZttK.js.map → en-BeJa78lP.js.map} +1 -1
  88. package/dist/chunks/{es-Cu_RlgIr.js → es-BPqm7rLm.js} +3 -5
  89. package/dist/chunks/{es-Cu_RlgIr.js.map → es-BPqm7rLm.js.map} +1 -1
  90. package/dist/chunks/{es-EYCf8G_1.js → es-axYOwwWD.js} +0 -2
  91. package/dist/chunks/{es-EYCf8G_1.js.map → es-axYOwwWD.js.map} +1 -1
  92. package/dist/chunks/{fileValidation-CgjTGoUx.js → fileValidation-CwJA8Vmn.js} +0 -2
  93. package/dist/chunks/{fileValidation-CgjTGoUx.js.map → fileValidation-CwJA8Vmn.js.map} +1 -1
  94. package/dist/chunks/grBadgeStyles-pqqbVgLk.js +0 -2
  95. package/dist/chunks/grButtonStyles-BxZW2x0-.js +0 -2
  96. package/dist/chunks/{grDropdownStyles-DQfLh-bp.js → grDropdownStyles-DMp7RrI9.js} +0 -2
  97. package/dist/chunks/{grDropdownStyles-DQfLh-bp.js.map → grDropdownStyles-DMp7RrI9.js.map} +1 -1
  98. package/dist/chunks/{grLoadingStyles-CERsxyk9.js → grLoadingStyles-CrxZHFL0.js} +0 -2
  99. package/dist/chunks/{grLoadingStyles-CERsxyk9.js.map → grLoadingStyles-CrxZHFL0.js.map} +1 -1
  100. package/dist/chunks/grModalStyles-Dv2NXBKi.js +0 -2
  101. package/dist/chunks/{grSelectStyles-C1zNEkV7.js → grSelectStyles-B7doeAQp.js} +0 -2
  102. package/dist/chunks/{grSelectStyles-C1zNEkV7.js.map → grSelectStyles-B7doeAQp.js.map} +1 -1
  103. package/dist/chunks/{granularityI18n-BEWP9aJs.js → granularityI18n-GCqUz_lo.js} +1 -3
  104. package/dist/chunks/{granularityI18n-BEWP9aJs.js.map → granularityI18n-GCqUz_lo.js.map} +1 -1
  105. package/dist/chunks/info-C0bHmdZq.js +0 -2
  106. package/dist/chunks/loader-circle-B2rWDk5u.js +0 -2
  107. package/dist/chunks/{ru-DKswMSdd.js → ru-Dqh-2C00.js} +0 -2
  108. package/dist/chunks/{ru-DKswMSdd.js.map → ru-Dqh-2C00.js.map} +1 -1
  109. package/dist/chunks/safelist-BF822K15.js +0 -2
  110. package/dist/chunks/safelist-BY7z8fOl.js +0 -2
  111. package/dist/chunks/{shared-Bvjkhhm2.js → shared-Cu5QkNmt.js} +33 -35
  112. package/dist/chunks/{shared-Bvjkhhm2.js.map → shared-Cu5QkNmt.js.map} +1 -1
  113. package/dist/chunks/transition-mJ3PZCHH.js +0 -2
  114. package/dist/chunks/x-Pa6C2hwi.js +0 -2
  115. package/dist/chunks/x-circle-DQSlBLmX.js +0 -2
  116. package/dist/components/GrAlert/chunks/GrAlert-BjerGcU8.js +0 -2
  117. package/dist/components/GrAvatar/chunks/GrAvatar-BjnPKNAL.js +0 -2
  118. package/dist/components/GrBadge/chunks/GrBadge-wuIb4_2K.js +0 -2
  119. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-CxtamOZ-.js +0 -2
  120. package/dist/components/GrBottomNav/chunks/GrBottomNav-CsmQ7mTJ.js +0 -2
  121. package/dist/components/GrButton/chunks/GrButton-BmGdp8-4.js +0 -2
  122. package/dist/components/GrButtonGroup/chunks/GrButtonGroup-CBj4tpms.js +0 -2
  123. package/dist/components/GrCard/chunks/GrCard-xtDcXBr7.js +0 -2
  124. package/dist/components/GrCheckbox/chunks/GrCheckbox-Bt3d7ckE.js +0 -2
  125. package/dist/components/GrCollapse/chunks/GrCollapse-HU20VTVn.js +0 -2
  126. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-DjGOX9Hd.js +0 -2
  127. package/dist/components/GrDataTable/chunks/GrDataTable-QDOJWmdY.js +0 -2
  128. package/dist/components/GrDialog/chunks/GrDialog-gObmaVEl.js +0 -2
  129. package/dist/components/GrDrawer/chunks/GrDrawer-BJL_gTxI.js +0 -2
  130. package/dist/components/GrDropdown/chunks/{GrDropdown-DVTU32T_.js → GrDropdown-BkACCXdp.js} +2 -4
  131. package/dist/components/GrDropdown/chunks/{GrDropdown-DVTU32T_.js.map → GrDropdown-BkACCXdp.js.map} +1 -1
  132. package/dist/components/GrDropdown/index.js +2 -2
  133. package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-fePQRcgh.js → GrDropdownMenu-BEenXrJw.js} +1 -3
  134. package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-fePQRcgh.js.map → GrDropdownMenu-BEenXrJw.js.map} +1 -1
  135. package/dist/components/GrDropdownMenu/index.js +2 -2
  136. package/dist/components/GrEmptyState/chunks/{GrEmptyState-Bs8d3tgb.js → GrEmptyState-BLbMJFW-.js} +0 -2
  137. package/dist/components/GrEmptyState/chunks/{GrEmptyState-Bs8d3tgb.js.map → GrEmptyState-BLbMJFW-.js.map} +1 -1
  138. package/dist/components/GrEmptyState/index.js +2 -2
  139. package/dist/components/GrFileUpload/chunks/{GrFileUpload-DVv8yXpl.js → GrFileUpload-u01j9S0t.js} +1 -3
  140. package/dist/components/GrFileUpload/chunks/{GrFileUpload-DVv8yXpl.js.map → GrFileUpload-u01j9S0t.js.map} +1 -1
  141. package/dist/components/GrFileUpload/index.js +3 -3
  142. package/dist/components/GrFormField/chunks/{GrFormField-BzezYcS8.js → GrFormField-C6PfAs4u.js} +0 -2
  143. package/dist/components/GrFormField/chunks/{GrFormField-BzezYcS8.js.map → GrFormField-C6PfAs4u.js.map} +1 -1
  144. package/dist/components/GrFormField/index.js +2 -2
  145. package/dist/components/GrFormFile/chunks/{GrFormFile-DtZOypJW.js → GrFormFile-DdM8Bc2B.js} +2 -4
  146. package/dist/components/GrFormFile/chunks/{GrFormFile-DtZOypJW.js.map → GrFormFile-DdM8Bc2B.js.map} +1 -1
  147. package/dist/components/GrFormFile/index.js +2 -2
  148. package/dist/components/GrFormSection/chunks/{GrFormSection-BIPB1RIk.js → GrFormSection-5djEaQZQ.js} +0 -2
  149. package/dist/components/GrFormSection/chunks/{GrFormSection-BIPB1RIk.js.map → GrFormSection-5djEaQZQ.js.map} +1 -1
  150. package/dist/components/GrFormSection/index.js +2 -2
  151. package/dist/components/GrIcon/chunks/GrIcon-BV7RBU_0.js +0 -2
  152. package/dist/components/GrImageViewer/chunks/{GrImageViewer-fn8ilJTA.js → GrImageViewer-CjSnohW7.js} +0 -2
  153. package/dist/components/GrImageViewer/chunks/{GrImageViewer-fn8ilJTA.js.map → GrImageViewer-CjSnohW7.js.map} +1 -1
  154. package/dist/components/GrImageViewer/index.js +2 -2
  155. package/dist/components/GrInput/chunks/{GrInput-DLLRrH1A.js → GrInput-ghxaTf6d.js} +0 -2
  156. package/dist/components/GrInput/chunks/{GrInput-DLLRrH1A.js.map → GrInput-ghxaTf6d.js.map} +1 -1
  157. package/dist/components/GrInput/index.js +2 -2
  158. package/dist/components/GrInputTag/chunks/{GrInputTag-CzrrBxgU.js → GrInputTag-B0x4U0Yk.js} +1 -3
  159. package/dist/components/GrInputTag/chunks/{GrInputTag-CzrrBxgU.js.map → GrInputTag-B0x4U0Yk.js.map} +1 -1
  160. package/dist/components/GrInputTag/index.js +2 -2
  161. package/dist/components/GrLink/chunks/{GrLink-Dhkid3Mp.js → GrLink-C7-Y1u88.js} +1 -3
  162. package/dist/components/GrLink/chunks/{GrLink-Dhkid3Mp.js.map → GrLink-C7-Y1u88.js.map} +1 -1
  163. package/dist/components/GrLink/index.js +2 -2
  164. package/dist/components/GrList/chunks/{GrList-CjgeVjhY.js → GrList--Ib4zLNw.js} +0 -2
  165. package/dist/components/GrList/chunks/{GrList-CjgeVjhY.js.map → GrList--Ib4zLNw.js.map} +1 -1
  166. package/dist/components/GrList/index.js +2 -2
  167. package/dist/components/GrLoading/chunks/{GrLoading-DihGX3ol.js → GrLoading-C3QZKwE-.js} +1 -3
  168. package/dist/components/GrLoading/chunks/{GrLoading-DihGX3ol.js.map → GrLoading-C3QZKwE-.js.map} +1 -1
  169. package/dist/components/GrLoading/index.js +2 -2
  170. package/dist/components/GrModal/chunks/GrModal-gvfvlp7k.js +0 -2
  171. package/dist/components/GrModal/index.js +1 -1
  172. package/dist/components/GrNavbar/chunks/{GrNavbar-CQOAfO6y.js → GrNavbar-nIyuiVj1.js} +1 -3
  173. package/dist/components/GrNavbar/chunks/{GrNavbar-CQOAfO6y.js.map → GrNavbar-nIyuiVj1.js.map} +1 -1
  174. package/dist/components/GrNavbar/index.js +2 -2
  175. package/dist/components/GrNumberInput/chunks/{GrNumberInput-CyHgUotG.js → GrNumberInput-B0mPLjdv.js} +1 -3
  176. package/dist/components/GrNumberInput/chunks/{GrNumberInput-CyHgUotG.js.map → GrNumberInput-B0mPLjdv.js.map} +1 -1
  177. package/dist/components/GrNumberInput/index.js +2 -2
  178. package/dist/components/GrPagination/chunks/{GrPagination-C5cxRJsF.js → GrPagination-BSTO6flk.js} +2 -4
  179. package/dist/components/GrPagination/chunks/{GrPagination-C5cxRJsF.js.map → GrPagination-BSTO6flk.js.map} +1 -1
  180. package/dist/components/GrPagination/index.js +2 -2
  181. package/dist/components/GrProgressBar/chunks/{GrProgressBar-C9wAAFxR.js → GrProgressBar-MvMnzsJl.js} +1 -3
  182. package/dist/components/GrProgressBar/chunks/{GrProgressBar-C9wAAFxR.js.map → GrProgressBar-MvMnzsJl.js.map} +1 -1
  183. package/dist/components/GrProgressBar/index.js +2 -2
  184. package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-Cfq9bvL3.js → GrPromptDialog-DKhbN6ji.js} +2 -4
  185. package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-Cfq9bvL3.js.map → GrPromptDialog-DKhbN6ji.js.map} +1 -1
  186. package/dist/components/GrPromptDialog/index.js +2 -2
  187. package/dist/components/GrRadio/chunks/{GrRadio-B_t_ZNVl.js → GrRadio-BxBs3WHq.js} +1 -3
  188. package/dist/components/GrRadio/chunks/{GrRadio-B_t_ZNVl.js.map → GrRadio-BxBs3WHq.js.map} +1 -1
  189. package/dist/components/GrRadio/index.js +2 -2
  190. package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-CVlgpUBr.js → GrRadioGroup-CEAfJQ6A.js} +1 -3
  191. package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-CVlgpUBr.js.map → GrRadioGroup-CEAfJQ6A.js.map} +1 -1
  192. package/dist/components/GrRadioGroup/index.js +2 -2
  193. package/dist/components/GrSegmented/chunks/{GrSegmented-BPl1koHc.js → GrSegmented-Bwn2qOY4.js} +1 -3
  194. package/dist/components/GrSegmented/chunks/{GrSegmented-BPl1koHc.js.map → GrSegmented-Bwn2qOY4.js.map} +1 -1
  195. package/dist/components/GrSegmented/index.js +2 -2
  196. package/dist/components/GrSelect/chunks/{GrSelect-aVqUL-1F.js → GrSelect-9wRWAu2R.js} +3 -5
  197. package/dist/components/GrSelect/chunks/{GrSelect-aVqUL-1F.js.map → GrSelect-9wRWAu2R.js.map} +1 -1
  198. package/dist/components/GrSelect/index.js +2 -2
  199. package/dist/components/GrSidebar/chunks/{GrSidebar-DVucgcfV.js → GrSidebar-CSZ3RpFB.js} +0 -2
  200. package/dist/components/GrSidebar/chunks/{GrSidebar-DVucgcfV.js.map → GrSidebar-CSZ3RpFB.js.map} +1 -1
  201. package/dist/components/GrSidebar/index.js +2 -2
  202. package/dist/components/GrSkeleton/chunks/{GrSkeleton-CDTvCSoH.js → GrSkeleton-DKXkqWDa.js} +0 -2
  203. package/dist/components/GrSkeleton/chunks/{GrSkeleton-CDTvCSoH.js.map → GrSkeleton-DKXkqWDa.js.map} +1 -1
  204. package/dist/components/GrSkeleton/index.js +2 -2
  205. package/dist/components/GrSwitch/chunks/{GrSwitch-Bnamgqb2.js → GrSwitch-CdBxwV3k.js} +1 -3
  206. package/dist/components/GrSwitch/chunks/{GrSwitch-Bnamgqb2.js.map → GrSwitch-CdBxwV3k.js.map} +1 -1
  207. package/dist/components/GrSwitch/index.js +2 -2
  208. package/dist/components/GrTable/chunks/GrTable-CyQ9uw8A.js +0 -2
  209. package/dist/components/GrTable/index.js +1 -1
  210. package/dist/components/GrTabs/chunks/{GrTabs-CiGmcmvm.js → GrTabs-BpF8AAUz.js} +0 -2
  211. package/dist/components/GrTabs/chunks/{GrTabs-CiGmcmvm.js.map → GrTabs-BpF8AAUz.js.map} +1 -1
  212. package/dist/components/GrTabs/index.js +2 -2
  213. package/dist/components/GrTextarea/chunks/{GrTextarea-VBSc6A7D.js → GrTextarea-DFS9ZkrA.js} +1 -3
  214. package/dist/components/GrTextarea/chunks/{GrTextarea-VBSc6A7D.js.map → GrTextarea-DFS9ZkrA.js.map} +1 -1
  215. package/dist/components/GrTextarea/index.js +2 -2
  216. package/dist/components/GrToaster/chunks/{GrToaster-I1e-zCpf.js → GrToaster-3Mf0Moxt.js} +1 -3
  217. package/dist/components/GrToaster/chunks/{GrToaster-I1e-zCpf.js.map → GrToaster-3Mf0Moxt.js.map} +1 -1
  218. package/dist/components/GrToaster/index.js +2 -2
  219. package/dist/components/GrTooltip/chunks/{GrTooltip-CrV1gI_c.js → GrTooltip-BvmsukLW.js} +0 -2
  220. package/dist/components/GrTooltip/chunks/{GrTooltip-CrV1gI_c.js.map → GrTooltip-BvmsukLW.js.map} +1 -1
  221. package/dist/components/GrTooltip/index.js +2 -2
  222. package/dist/components/GrTree/chunks/{GrTree-Dlev9oBd.js → GrTree-C2kN-O4Q.js} +0 -2
  223. package/dist/components/GrTree/chunks/{GrTree-Dlev9oBd.js.map → GrTree-C2kN-O4Q.js.map} +1 -1
  224. package/dist/components/GrTree/index.js +2 -2
  225. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-DN6XFjOD.js → GrTreeSelect-Da-CpRqm.js} +5 -7
  226. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-DN6XFjOD.js.map → GrTreeSelect-Da-CpRqm.js.map} +1 -1
  227. package/dist/components/GrTreeSelect/index.js +2 -2
  228. package/dist/composables/useTheme.js +0 -2
  229. package/dist/composables/useToast.js +0 -2
  230. package/dist/directives/autofocus.js +55 -0
  231. package/dist/directives/autofocus.js.map +1 -0
  232. package/dist/directives/autosize.js +117 -0
  233. package/dist/directives/autosize.js.map +1 -0
  234. package/dist/directives/clickOutside.js +96 -0
  235. package/dist/directives/clickOutside.js.map +1 -0
  236. package/dist/directives/dropzone.js +164 -0
  237. package/dist/directives/dropzone.js.map +1 -0
  238. package/dist/directives/hotkey.js +138 -0
  239. package/dist/directives/hotkey.js.map +1 -0
  240. package/dist/directives/index.js +6 -1
  241. package/dist/directives/loading.js +163 -0
  242. package/dist/directives/loading.js.map +1 -0
  243. package/dist/fileValidation/index.js +1 -1
  244. package/dist/granular-provider-node.js +2 -4
  245. package/dist/granular-provider.js +1 -3
  246. package/dist/i18n/all.js +1 -3
  247. package/dist/i18n/index.js +2 -2
  248. package/dist/index.js +71 -66
  249. package/dist/vue/index.js +0 -2
  250. package/package.json +25 -1
  251. package/dist/chunks/config-BbtK511H.js.map +0 -1
  252. package/dist/chunks/config-BcFOkUhh.js.map +0 -1
  253. package/dist/chunks/config-BzQ4S4Hb.js.map +0 -1
  254. package/dist/chunks/config-CdAx6ify2.js.map +0 -1
  255. package/dist/chunks/config-KGTIAFD92.js.map +0 -1
  256. package/dist/chunks/directives-Cuib0yOO.js +0 -728
  257. package/dist/chunks/directives-Cuib0yOO.js.map +0 -1
@@ -0,0 +1,55 @@
1
+ import { nextTick } from "vue";
2
+ //#region src/directives/autofocus.ts
3
+ function resolveOptions(value) {
4
+ if (value === false) return {
5
+ enabled: false,
6
+ selector: "",
7
+ preventScroll: true
8
+ };
9
+ if (typeof value === "string") return {
10
+ enabled: true,
11
+ selector: value,
12
+ preventScroll: true
13
+ };
14
+ if (value && typeof value === "object") return {
15
+ enabled: value.disabled !== true,
16
+ selector: value.selector,
17
+ preventScroll: value.preventScroll ?? true
18
+ };
19
+ return {
20
+ enabled: true,
21
+ selector: void 0,
22
+ preventScroll: true
23
+ };
24
+ }
25
+ function tryFocus(target, preventScroll) {
26
+ if (!target) return;
27
+ const focusable = target;
28
+ if (typeof focusable.focus !== "function") return;
29
+ try {
30
+ focusable.focus({ preventScroll });
31
+ } catch {
32
+ focusable.focus();
33
+ }
34
+ }
35
+ /**
36
+ * `v-autofocus` — универсальный автофокус.
37
+ * Работает как на нативных элементах, так и на компонентах-обёртках (фокусирует вложенный `input/textarea/...`).
38
+ */
39
+ var vAutofocus = { mounted(el, binding) {
40
+ const { enabled, selector, preventScroll } = resolveOptions(binding.value);
41
+ if (!enabled) return;
42
+ nextTick().then(() => {
43
+ requestAnimationFrame(() => {
44
+ const finalSelector = selector || "input, textarea, select, button, [tabindex]:not([tabindex=\"-1\"])";
45
+ if (el.matches?.(finalSelector)) {
46
+ tryFocus(el, preventScroll);
47
+ return;
48
+ }
49
+ const inner = el.querySelector?.(finalSelector);
50
+ tryFocus(inner, preventScroll);
51
+ });
52
+ });
53
+ } };
54
+ //#endregion
55
+ export { vAutofocus };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autofocus.js","names":[],"sources":["../../src/directives/autofocus.ts"],"sourcesContent":["import type { Directive } from 'vue'\nimport { nextTick } from 'vue'\n\nexport type AutofocusBindingValue =\n | boolean\n | string\n | {\n selector?: string\n preventScroll?: boolean\n disabled?: boolean\n }\n\nfunction resolveOptions(value: AutofocusBindingValue | undefined) {\n if (value === false) {\n return { enabled: false, selector: '', preventScroll: true }\n }\n\n if (typeof value === 'string') {\n return { enabled: true, selector: value, preventScroll: true }\n }\n\n if (value && typeof value === 'object') {\n return {\n enabled: value.disabled !== true,\n selector: value.selector,\n preventScroll: value.preventScroll ?? true,\n }\n }\n\n return { enabled: true, selector: undefined as string | undefined, preventScroll: true }\n}\n\nfunction tryFocus(target: Element | null | undefined, preventScroll: boolean) {\n if (!target) return\n\n const focusable = target as unknown as { focus?: (options?: any) => void }\n if (typeof focusable.focus !== 'function') return\n\n try {\n focusable.focus({ preventScroll })\n } catch {\n // Fallback for browsers that don't support FocusOptions.\n focusable.focus()\n }\n}\n\n/**\n * `v-autofocus` — универсальный автофокус.\n * Работает как на нативных элементах, так и на компонентах-обёртках (фокусирует вложенный `input/textarea/...`).\n */\nexport const vAutofocus: Directive<HTMLElement, AutofocusBindingValue> = {\n mounted(el, binding) {\n const { enabled, selector, preventScroll } = resolveOptions(binding.value)\n if (!enabled) return\n\n void nextTick().then(() => {\n // Небольшая задержка помогает, когда внутренний input появляется после обновления/анимаций.\n requestAnimationFrame(() => {\n const defaultSelector = 'input, textarea, select, button, [tabindex]:not([tabindex=\"-1\"])'\n const finalSelector = selector || defaultSelector\n\n if ((el as any).matches?.(finalSelector)) {\n tryFocus(el, preventScroll)\n return\n }\n\n const inner = el.querySelector?.(finalSelector)\n tryFocus(inner, preventScroll)\n })\n })\n },\n}\n"],"mappings":";;AAYA,SAAS,eAAe,OAA0C;AAChE,KAAI,UAAU,MACZ,QAAO;EAAE,SAAS;EAAO,UAAU;EAAI,eAAe;EAAM;AAG9D,KAAI,OAAO,UAAU,SACnB,QAAO;EAAE,SAAS;EAAM,UAAU;EAAO,eAAe;EAAM;AAGhE,KAAI,SAAS,OAAO,UAAU,SAC5B,QAAO;EACL,SAAS,MAAM,aAAa;EAC5B,UAAU,MAAM;EAChB,eAAe,MAAM,iBAAiB;EACvC;AAGH,QAAO;EAAE,SAAS;EAAM,UAAU,KAAA;EAAiC,eAAe;EAAM;;AAG1F,SAAS,SAAS,QAAoC,eAAwB;AAC5E,KAAI,CAAC,OAAQ;CAEb,MAAM,YAAY;AAClB,KAAI,OAAO,UAAU,UAAU,WAAY;AAE3C,KAAI;AACF,YAAU,MAAM,EAAE,eAAe,CAAC;SAC5B;AAEN,YAAU,OAAO;;;;;;;AAQrB,IAAa,aAA4D,EACvE,QAAQ,IAAI,SAAS;CACnB,MAAM,EAAE,SAAS,UAAU,kBAAkB,eAAe,QAAQ,MAAM;AAC1E,KAAI,CAAC,QAAS;AAET,WAAU,CAAC,WAAW;AAEzB,8BAA4B;GAE1B,MAAM,gBAAgB,YADE;AAGxB,OAAK,GAAW,UAAU,cAAc,EAAE;AACxC,aAAS,IAAI,cAAc;AAC3B;;GAGF,MAAM,QAAQ,GAAG,gBAAgB,cAAc;AAC/C,YAAS,OAAO,cAAc;IAC9B;GACF;GAEL"}
@@ -0,0 +1,117 @@
1
+ import { nextTick } from "vue";
2
+ //#region src/directives/autosize.ts
3
+ var states = /* @__PURE__ */ new WeakMap();
4
+ function normalize(value) {
5
+ if (value === false) return { enabled: false };
6
+ if (value && typeof value === "object") return { enabled: value.enabled ?? true };
7
+ return { enabled: true };
8
+ }
9
+ function resolveTextarea(el) {
10
+ if (el instanceof HTMLTextAreaElement) return el;
11
+ return el.querySelector("textarea");
12
+ }
13
+ function toNumber(input) {
14
+ const n = Number.parseFloat(input);
15
+ return Number.isFinite(n) ? n : 0;
16
+ }
17
+ function autosize(textarea) {
18
+ textarea.style.height = "auto";
19
+ const style = getComputedStyle(textarea);
20
+ const border = toNumber(style.borderTopWidth) + toNumber(style.borderBottomWidth);
21
+ const height = style.boxSizing === "border-box" ? textarea.scrollHeight + border : textarea.scrollHeight;
22
+ textarea.style.height = `${height}px`;
23
+ }
24
+ function scheduleAutosize(textarea) {
25
+ nextTick().then(() => {
26
+ requestAnimationFrame(() => autosize(textarea));
27
+ });
28
+ }
29
+ /**
30
+ * `v-autosize` — автоподстройка высоты `textarea`.
31
+ *
32
+ * Пример:
33
+ * ```vue
34
+ * <textarea v-autosize />
35
+ * ```
36
+ */
37
+ var vAutosize = {
38
+ mounted(el, binding) {
39
+ const { enabled } = normalize(binding.value);
40
+ const textarea = resolveTextarea(el);
41
+ const state = {
42
+ textarea,
43
+ onInput: null,
44
+ prevOverflowY: textarea ? textarea.style.overflowY : null
45
+ };
46
+ states.set(el, state);
47
+ if (!enabled || !textarea) return;
48
+ textarea.style.overflowY = "hidden";
49
+ autosize(textarea);
50
+ scheduleAutosize(textarea);
51
+ const onInput = () => {
52
+ const current = states.get(el);
53
+ if (!current?.textarea) return;
54
+ autosize(current.textarea);
55
+ };
56
+ state.onInput = onInput;
57
+ textarea.addEventListener("input", onInput);
58
+ },
59
+ updated(el, binding) {
60
+ const { enabled } = normalize(binding.value);
61
+ const state = states.get(el);
62
+ if (!state) return;
63
+ const nextTextarea = resolveTextarea(el);
64
+ if (state.textarea !== nextTextarea) {
65
+ if (state.textarea && state.onInput) state.textarea.removeEventListener("input", state.onInput);
66
+ state.textarea = nextTextarea;
67
+ state.prevOverflowY = nextTextarea ? nextTextarea.style.overflowY : null;
68
+ state.onInput = null;
69
+ if (enabled && nextTextarea) {
70
+ nextTextarea.style.overflowY = "hidden";
71
+ autosize(nextTextarea);
72
+ scheduleAutosize(nextTextarea);
73
+ const onInput = () => {
74
+ const current = states.get(el);
75
+ if (!current?.textarea) return;
76
+ autosize(current.textarea);
77
+ };
78
+ state.onInput = onInput;
79
+ nextTextarea.addEventListener("input", onInput);
80
+ }
81
+ return;
82
+ }
83
+ if (!state.textarea) return;
84
+ if (!enabled) {
85
+ if (state.onInput) {
86
+ state.textarea.removeEventListener("input", state.onInput);
87
+ state.onInput = null;
88
+ }
89
+ if (state.prevOverflowY !== null) state.textarea.style.overflowY = state.prevOverflowY;
90
+ return;
91
+ }
92
+ if (!state.onInput) {
93
+ state.prevOverflowY = state.textarea.style.overflowY;
94
+ state.textarea.style.overflowY = "hidden";
95
+ const onInput = () => {
96
+ const current = states.get(el);
97
+ if (!current?.textarea) return;
98
+ autosize(current.textarea);
99
+ };
100
+ state.onInput = onInput;
101
+ state.textarea.addEventListener("input", onInput);
102
+ }
103
+ autosize(state.textarea);
104
+ scheduleAutosize(state.textarea);
105
+ },
106
+ unmounted(el) {
107
+ const state = states.get(el);
108
+ if (!state) return;
109
+ if (state.textarea && state.onInput) {
110
+ state.textarea.removeEventListener("input", state.onInput);
111
+ if (state.prevOverflowY !== null) state.textarea.style.overflowY = state.prevOverflowY;
112
+ }
113
+ states.delete(el);
114
+ }
115
+ };
116
+ //#endregion
117
+ export { vAutosize };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autosize.js","names":[],"sources":["../../src/directives/autosize.ts"],"sourcesContent":["import type { Directive } from 'vue'\nimport { nextTick } from 'vue'\n\nexport type AutosizeBindingValue =\n | boolean\n | {\n enabled?: boolean\n }\n\ntype InternalState = {\n textarea: HTMLTextAreaElement | null\n onInput: (() => void) | null\n prevOverflowY: string | null\n}\n\nconst states = new WeakMap<HTMLElement, InternalState>()\n\nfunction normalize(value: AutosizeBindingValue | undefined) {\n if (value === false) return { enabled: false }\n if (value && typeof value === 'object') return { enabled: value.enabled ?? true }\n return { enabled: true }\n}\n\nfunction resolveTextarea(el: HTMLElement): HTMLTextAreaElement | null {\n if (el instanceof HTMLTextAreaElement) return el\n return el.querySelector('textarea')\n}\n\nfunction toNumber(input: string): number {\n const n = Number.parseFloat(input)\n return Number.isFinite(n) ? n : 0\n}\n\nfunction autosize(textarea: HTMLTextAreaElement) {\n // Важно сбросить, чтобы textarea могла уменьшаться при удалении текста.\n textarea.style.height = 'auto'\n\n const style = getComputedStyle(textarea)\n const border = toNumber(style.borderTopWidth) + toNumber(style.borderBottomWidth)\n const height = style.boxSizing === 'border-box' ? textarea.scrollHeight + border : textarea.scrollHeight\n\n textarea.style.height = `${height}px`\n}\n\nfunction scheduleAutosize(textarea: HTMLTextAreaElement) {\n void nextTick().then(() => {\n requestAnimationFrame(() => autosize(textarea))\n })\n}\n\n/**\n * `v-autosize` — автоподстройка высоты `textarea`.\n *\n * Пример:\n * ```vue\n * <textarea v-autosize />\n * ```\n */\nexport const vAutosize: Directive<HTMLElement, AutosizeBindingValue> = {\n mounted(el, binding) {\n const { enabled } = normalize(binding.value)\n const textarea = resolveTextarea(el)\n\n const state: InternalState = {\n textarea,\n onInput: null,\n prevOverflowY: textarea ? textarea.style.overflowY : null,\n }\n states.set(el, state)\n\n if (!enabled || !textarea) return\n\n textarea.style.overflowY = 'hidden'\n autosize(textarea)\n scheduleAutosize(textarea)\n\n const onInput = () => {\n const current = states.get(el)\n if (!current?.textarea) return\n autosize(current.textarea)\n }\n\n state.onInput = onInput\n textarea.addEventListener('input', onInput)\n },\n updated(el, binding) {\n const { enabled } = normalize(binding.value)\n const state = states.get(el)\n if (!state) return\n\n const nextTextarea = resolveTextarea(el)\n if (state.textarea !== nextTextarea) {\n if (state.textarea && state.onInput) {\n state.textarea.removeEventListener('input', state.onInput)\n }\n\n state.textarea = nextTextarea\n state.prevOverflowY = nextTextarea ? nextTextarea.style.overflowY : null\n state.onInput = null\n\n if (enabled && nextTextarea) {\n nextTextarea.style.overflowY = 'hidden'\n autosize(nextTextarea)\n scheduleAutosize(nextTextarea)\n\n const onInput = () => {\n const current = states.get(el)\n if (!current?.textarea) return\n autosize(current.textarea)\n }\n state.onInput = onInput\n nextTextarea.addEventListener('input', onInput)\n }\n\n return\n }\n\n if (!state.textarea) return\n\n if (!enabled) {\n // Disabled in-flight: detach listener and restore previous overflow.\n if (state.onInput) {\n state.textarea.removeEventListener('input', state.onInput)\n state.onInput = null\n }\n if (state.prevOverflowY !== null) {\n state.textarea.style.overflowY = state.prevOverflowY\n }\n return\n }\n\n // Re-enable after being disabled: reattach listener and re-apply overflow.\n if (!state.onInput) {\n state.prevOverflowY = state.textarea.style.overflowY\n state.textarea.style.overflowY = 'hidden'\n\n const onInput = () => {\n const current = states.get(el)\n if (!current?.textarea) return\n autosize(current.textarea)\n }\n state.onInput = onInput\n state.textarea.addEventListener('input', onInput)\n }\n\n autosize(state.textarea)\n scheduleAutosize(state.textarea)\n },\n unmounted(el) {\n const state = states.get(el)\n if (!state) return\n\n if (state.textarea && state.onInput) {\n state.textarea.removeEventListener('input', state.onInput)\n if (state.prevOverflowY !== null) state.textarea.style.overflowY = state.prevOverflowY\n }\n\n states.delete(el)\n },\n}\n"],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ //#region src/directives/clickOutside.ts
2
+ function normalize(value) {
3
+ if (typeof value === "function") return {
4
+ enabled: true,
5
+ capture: true,
6
+ events: ["click"],
7
+ handler: value,
8
+ exclude: []
9
+ };
10
+ if (value && typeof value === "object") return {
11
+ enabled: value.enabled ?? true,
12
+ capture: value.capture ?? true,
13
+ events: value.events?.length ? value.events : ["click"],
14
+ handler: value.handler,
15
+ exclude: value.exclude ?? []
16
+ };
17
+ return {
18
+ enabled: false,
19
+ capture: true,
20
+ events: ["click"],
21
+ handler: void 0,
22
+ exclude: []
23
+ };
24
+ }
25
+ function isEventInside(el, event) {
26
+ const target = event.target;
27
+ if (!target) return false;
28
+ const composedPath = event.composedPath?.();
29
+ if (Array.isArray(composedPath)) return composedPath.includes(el);
30
+ return el.contains(target);
31
+ }
32
+ function resolveExclude(doc, exclude) {
33
+ const resolved = [];
34
+ for (const item of exclude) {
35
+ if (typeof item === "string") {
36
+ const found = doc.querySelector(item);
37
+ if (found instanceof HTMLElement) resolved.push(found);
38
+ continue;
39
+ }
40
+ if (typeof item === "function") {
41
+ const found = item();
42
+ if (found instanceof HTMLElement) resolved.push(found);
43
+ continue;
44
+ }
45
+ if (item instanceof HTMLElement) resolved.push(item);
46
+ }
47
+ return resolved;
48
+ }
49
+ var states = /* @__PURE__ */ new WeakMap();
50
+ function unbind(el) {
51
+ const state = states.get(el);
52
+ if (!state) return;
53
+ for (const event of state.options.events) state.doc.removeEventListener(event, state.listener, state.options.capture);
54
+ states.delete(el);
55
+ }
56
+ function bind(el, value) {
57
+ const options = normalize(value);
58
+ const doc = el.ownerDocument;
59
+ const listener = (event) => {
60
+ const current = states.get(el);
61
+ if (!current) return;
62
+ const { enabled, handler, exclude } = current.options;
63
+ if (!enabled || !handler) return;
64
+ if ("button" in event && typeof event.button === "number" && event.button !== 0) return;
65
+ if (!el.isConnected) return;
66
+ if (isEventInside(el, event)) return;
67
+ const excluded = resolveExclude(current.doc, exclude);
68
+ for (const ex of excluded) if (isEventInside(ex, event)) return;
69
+ handler(event);
70
+ };
71
+ const nextState = {
72
+ options,
73
+ doc,
74
+ listener
75
+ };
76
+ states.set(el, nextState);
77
+ if (!options.enabled || !options.handler) return;
78
+ for (const event of options.events) doc.addEventListener(event, listener, options.capture);
79
+ }
80
+ /**
81
+ * `v-click-outside` — обработчик клика вне элемента (например, закрытие дропдауна/модалки).
82
+ */
83
+ var vClickOutside = {
84
+ mounted(el, binding) {
85
+ bind(el, binding.value);
86
+ },
87
+ updated(el, binding) {
88
+ unbind(el);
89
+ bind(el, binding.value);
90
+ },
91
+ unmounted(el) {
92
+ unbind(el);
93
+ }
94
+ };
95
+ //#endregion
96
+ export { vClickOutside };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clickOutside.js","names":[],"sources":["../../src/directives/clickOutside.ts"],"sourcesContent":["import type { Directive } from 'vue'\n\nexport type ClickOutsideHandler = (event: MouseEvent | TouchEvent | PointerEvent) => void\n\nexport type ClickOutsideExclude = HTMLElement | string | (() => HTMLElement | null | undefined)\n\nexport type ClickOutsideBindingValue =\n | ClickOutsideHandler\n | {\n handler: ClickOutsideHandler\n /** По умолчанию `true`. */\n enabled?: boolean\n /** По умолчанию `true` (слушаем в capture, чтобы stopPropagation внутри не ломал закрытие). */\n capture?: boolean\n /** Список событий. По умолчанию `['click']`. */\n events?: Array<'click' | 'mousedown' | 'touchstart' | 'pointerdown'>\n /** Элементы/селекторы, клики по которым считаются \"внутри\". */\n exclude?: ClickOutsideExclude[]\n }\n\ntype NormalizedOptions = {\n enabled: boolean\n capture: boolean\n events: Array<'click' | 'mousedown' | 'touchstart' | 'pointerdown'>\n handler: ClickOutsideHandler | undefined\n exclude: ClickOutsideExclude[]\n}\n\nfunction normalize(value: ClickOutsideBindingValue | undefined): NormalizedOptions {\n if (typeof value === 'function') {\n return { enabled: true, capture: true, events: ['click'], handler: value, exclude: [] }\n }\n\n if (value && typeof value === 'object') {\n return {\n enabled: value.enabled ?? true,\n capture: value.capture ?? true,\n events: value.events?.length ? value.events : ['click'],\n handler: value.handler,\n exclude: value.exclude ?? [],\n }\n }\n\n return { enabled: false, capture: true, events: ['click'], handler: undefined, exclude: [] }\n}\n\nfunction isEventInside(el: HTMLElement, event: Event): boolean {\n const target = event.target as Node | null\n if (!target) return false\n\n const composedPath = (event as any).composedPath?.() as EventTarget[] | undefined\n if (Array.isArray(composedPath)) {\n return composedPath.includes(el)\n }\n\n return el.contains(target)\n}\n\nfunction resolveExclude(doc: Document, exclude: ClickOutsideExclude[]): HTMLElement[] {\n const resolved: HTMLElement[] = []\n\n for (const item of exclude) {\n if (typeof item === 'string') {\n const found = doc.querySelector(item)\n if (found instanceof HTMLElement) resolved.push(found)\n continue\n }\n\n if (typeof item === 'function') {\n const found = item()\n if (found instanceof HTMLElement) resolved.push(found)\n continue\n }\n\n if (item instanceof HTMLElement) {\n resolved.push(item)\n }\n }\n\n return resolved\n}\n\ntype InternalState = {\n options: NormalizedOptions\n doc: Document\n listener: (event: Event) => void\n}\n\nconst states = new WeakMap<HTMLElement, InternalState>()\n\nfunction unbind(el: HTMLElement) {\n const state = states.get(el)\n if (!state) return\n\n for (const event of state.options.events) {\n state.doc.removeEventListener(event, state.listener, state.options.capture)\n }\n\n states.delete(el)\n}\n\nfunction bind(el: HTMLElement, value: ClickOutsideBindingValue | undefined) {\n const options = normalize(value)\n const doc = el.ownerDocument\n\n const listener = (event: Event) => {\n const current = states.get(el)\n if (!current) return\n\n const { enabled, handler, exclude } = current.options\n if (!enabled || !handler) return\n\n if ('button' in (event as any) && typeof (event as any).button === 'number' && (event as any).button !== 0) {\n return\n }\n\n if (!el.isConnected) return\n\n if (isEventInside(el, event)) return\n\n const excluded = resolveExclude(current.doc, exclude)\n for (const ex of excluded) {\n if (isEventInside(ex, event)) return\n }\n\n handler(event as any)\n }\n\n const nextState: InternalState = { options, doc, listener }\n states.set(el, nextState)\n\n if (!options.enabled || !options.handler) return\n\n for (const event of options.events) {\n doc.addEventListener(event, listener, options.capture)\n }\n}\n\n/**\n * `v-click-outside` — обработчик клика вне элемента (например, закрытие дропдауна/модалки).\n */\nexport const vClickOutside: Directive<HTMLElement, ClickOutsideBindingValue> = {\n mounted(el, binding) {\n bind(el, binding.value)\n },\n updated(el, binding) {\n unbind(el)\n bind(el, binding.value)\n },\n unmounted(el) {\n unbind(el)\n },\n}\n"],"mappings":";AA4BA,SAAS,UAAU,OAAgE;AACjF,KAAI,OAAO,UAAU,WACnB,QAAO;EAAE,SAAS;EAAM,SAAS;EAAM,QAAQ,CAAC,QAAQ;EAAE,SAAS;EAAO,SAAS,EAAE;EAAE;AAGzF,KAAI,SAAS,OAAO,UAAU,SAC5B,QAAO;EACL,SAAS,MAAM,WAAW;EAC1B,SAAS,MAAM,WAAW;EAC1B,QAAQ,MAAM,QAAQ,SAAS,MAAM,SAAS,CAAC,QAAQ;EACvD,SAAS,MAAM;EACf,SAAS,MAAM,WAAW,EAAE;EAC7B;AAGH,QAAO;EAAE,SAAS;EAAO,SAAS;EAAM,QAAQ,CAAC,QAAQ;EAAE,SAAS,KAAA;EAAW,SAAS,EAAE;EAAE;;AAG9F,SAAS,cAAc,IAAiB,OAAuB;CAC7D,MAAM,SAAS,MAAM;AACrB,KAAI,CAAC,OAAQ,QAAO;CAEpB,MAAM,eAAgB,MAAc,gBAAgB;AACpD,KAAI,MAAM,QAAQ,aAAa,CAC7B,QAAO,aAAa,SAAS,GAAG;AAGlC,QAAO,GAAG,SAAS,OAAO;;AAG5B,SAAS,eAAe,KAAe,SAA+C;CACpF,MAAM,WAA0B,EAAE;AAElC,MAAK,MAAM,QAAQ,SAAS;AAC1B,MAAI,OAAO,SAAS,UAAU;GAC5B,MAAM,QAAQ,IAAI,cAAc,KAAK;AACrC,OAAI,iBAAiB,YAAa,UAAS,KAAK,MAAM;AACtD;;AAGF,MAAI,OAAO,SAAS,YAAY;GAC9B,MAAM,QAAQ,MAAM;AACpB,OAAI,iBAAiB,YAAa,UAAS,KAAK,MAAM;AACtD;;AAGF,MAAI,gBAAgB,YAClB,UAAS,KAAK,KAAK;;AAIvB,QAAO;;AAST,IAAM,yBAAS,IAAI,SAAqC;AAExD,SAAS,OAAO,IAAiB;CAC/B,MAAM,QAAQ,OAAO,IAAI,GAAG;AAC5B,KAAI,CAAC,MAAO;AAEZ,MAAK,MAAM,SAAS,MAAM,QAAQ,OAChC,OAAM,IAAI,oBAAoB,OAAO,MAAM,UAAU,MAAM,QAAQ,QAAQ;AAG7E,QAAO,OAAO,GAAG;;AAGnB,SAAS,KAAK,IAAiB,OAA6C;CAC1E,MAAM,UAAU,UAAU,MAAM;CAChC,MAAM,MAAM,GAAG;CAEf,MAAM,YAAY,UAAiB;EACjC,MAAM,UAAU,OAAO,IAAI,GAAG;AAC9B,MAAI,CAAC,QAAS;EAEd,MAAM,EAAE,SAAS,SAAS,YAAY,QAAQ;AAC9C,MAAI,CAAC,WAAW,CAAC,QAAS;AAE1B,MAAI,YAAa,SAAiB,OAAQ,MAAc,WAAW,YAAa,MAAc,WAAW,EACvG;AAGF,MAAI,CAAC,GAAG,YAAa;AAErB,MAAI,cAAc,IAAI,MAAM,CAAE;EAE9B,MAAM,WAAW,eAAe,QAAQ,KAAK,QAAQ;AACrD,OAAK,MAAM,MAAM,SACf,KAAI,cAAc,IAAI,MAAM,CAAE;AAGhC,UAAQ,MAAa;;CAGvB,MAAM,YAA2B;EAAE;EAAS;EAAK;EAAU;AAC3D,QAAO,IAAI,IAAI,UAAU;AAEzB,KAAI,CAAC,QAAQ,WAAW,CAAC,QAAQ,QAAS;AAE1C,MAAK,MAAM,SAAS,QAAQ,OAC1B,KAAI,iBAAiB,OAAO,UAAU,QAAQ,QAAQ;;;;;AAO1D,IAAa,gBAAkE;CAC7E,QAAQ,IAAI,SAAS;AACnB,OAAK,IAAI,QAAQ,MAAM;;CAEzB,QAAQ,IAAI,SAAS;AACnB,SAAO,GAAG;AACV,OAAK,IAAI,QAAQ,MAAM;;CAEzB,UAAU,IAAI;AACZ,SAAO,GAAG;;CAEb"}
@@ -0,0 +1,164 @@
1
+ import { l as runFileValidators, u as FileValidationError } from "../chunks/fileValidation-CwJA8Vmn.js";
2
+ //#region src/directives/dropzone.ts
3
+ function normalize(value) {
4
+ if (typeof value === "function") return {
5
+ enabled: true,
6
+ multiple: true,
7
+ validators: void 0,
8
+ preventDefault: true,
9
+ stopPropagation: false,
10
+ onFiles: value,
11
+ onError: void 0,
12
+ onStateChange: void 0,
13
+ overClass: "ds-dropzone--over"
14
+ };
15
+ if (value && typeof value === "object") return {
16
+ enabled: value.enabled ?? true,
17
+ multiple: value.multiple ?? true,
18
+ validators: value.validators,
19
+ preventDefault: value.preventDefault ?? true,
20
+ stopPropagation: value.stopPropagation ?? false,
21
+ onFiles: value.onFiles,
22
+ onError: value.onError,
23
+ onStateChange: value.onStateChange,
24
+ overClass: value.overClass ?? "ds-dropzone--over"
25
+ };
26
+ return {
27
+ enabled: false,
28
+ multiple: true,
29
+ validators: void 0,
30
+ preventDefault: true,
31
+ stopPropagation: false,
32
+ onFiles: void 0,
33
+ onError: void 0,
34
+ onStateChange: void 0,
35
+ overClass: "ds-dropzone--over"
36
+ };
37
+ }
38
+ var states = /* @__PURE__ */ new WeakMap();
39
+ function setOver(el, next) {
40
+ const state = states.get(el);
41
+ if (!state) return;
42
+ const wasDomOver = el.dataset.grDropzoneOver === "true";
43
+ const prev = state.isOver;
44
+ state.isOver = next;
45
+ if (next) {
46
+ el.classList.add(state.options.overClass);
47
+ el.dataset.grDropzoneOver = "true";
48
+ } else {
49
+ el.classList.remove(state.options.overClass);
50
+ delete el.dataset.grDropzoneOver;
51
+ }
52
+ if (prev !== next || wasDomOver !== next) state.options.onStateChange?.({ isOver: next });
53
+ }
54
+ function unbind(el) {
55
+ const state = states.get(el);
56
+ if (!state) return;
57
+ state.overCounter = 0;
58
+ setOver(el, false);
59
+ delete el.dataset.grDropzone;
60
+ el.removeEventListener("dragenter", state.onDragEnter);
61
+ el.removeEventListener("dragover", state.onDragOver);
62
+ el.removeEventListener("dragleave", state.onDragLeave);
63
+ el.removeEventListener("drop", state.onDrop);
64
+ states.delete(el);
65
+ }
66
+ function bind(el, value) {
67
+ const state = {
68
+ options: normalize(value),
69
+ overCounter: 0,
70
+ isOver: false,
71
+ onDragEnter(event) {
72
+ const current = states.get(el);
73
+ if (!current?.options.enabled) return;
74
+ if (current.options.preventDefault) event.preventDefault();
75
+ if (current.options.stopPropagation) event.stopPropagation();
76
+ current.overCounter += 1;
77
+ setOver(el, true);
78
+ },
79
+ onDragOver(event) {
80
+ const current = states.get(el);
81
+ if (!current?.options.enabled) return;
82
+ if (current.options.preventDefault) event.preventDefault();
83
+ if (current.options.stopPropagation) event.stopPropagation();
84
+ if (event.dataTransfer) event.dataTransfer.dropEffect = "copy";
85
+ },
86
+ onDragLeave(event) {
87
+ const current = states.get(el);
88
+ if (!current?.options.enabled) return;
89
+ if (current.options.preventDefault) event.preventDefault();
90
+ if (current.options.stopPropagation) event.stopPropagation();
91
+ current.overCounter = Math.max(0, current.overCounter - 1);
92
+ if (current.overCounter === 0) setOver(el, false);
93
+ },
94
+ onDrop(event) {
95
+ const current = states.get(el);
96
+ if (!current?.options.enabled) return;
97
+ if (current.options.preventDefault) event.preventDefault();
98
+ if (current.options.stopPropagation) event.stopPropagation();
99
+ current.overCounter = 0;
100
+ setOver(el, false);
101
+ const dt = event.dataTransfer;
102
+ const files = dt?.files ? Array.prototype.slice.call(dt.files) : [];
103
+ if (!files.length) return;
104
+ (async () => {
105
+ try {
106
+ const { files: picked, issues } = await runFileValidators(files, current.options.validators ?? [], {
107
+ source: "drop",
108
+ multiple: current.options.multiple
109
+ });
110
+ if (issues.length > 0) {
111
+ current.options.onError?.(new FileValidationError(issues, picked));
112
+ return;
113
+ }
114
+ if (!picked.length) return;
115
+ await current.options.onFiles?.(picked, event);
116
+ } catch (error) {
117
+ current.options.onError?.(error);
118
+ }
119
+ })();
120
+ }
121
+ };
122
+ states.set(el, state);
123
+ el.dataset.grDropzone = "true";
124
+ el.addEventListener("dragenter", state.onDragEnter);
125
+ el.addEventListener("dragover", state.onDragOver);
126
+ el.addEventListener("dragleave", state.onDragLeave);
127
+ el.addEventListener("drop", state.onDrop);
128
+ }
129
+ function update(el, value) {
130
+ const state = states.get(el);
131
+ if (!state) {
132
+ bind(el, value);
133
+ return;
134
+ }
135
+ const prevOverClass = state.options.overClass;
136
+ const nextOptions = normalize(value);
137
+ state.options = nextOptions;
138
+ if (prevOverClass !== nextOptions.overClass) {
139
+ el.classList.remove(prevOverClass);
140
+ if (state.isOver) el.classList.add(nextOptions.overClass);
141
+ }
142
+ if (!nextOptions.enabled) {
143
+ state.overCounter = 0;
144
+ setOver(el, false);
145
+ }
146
+ }
147
+ /**
148
+ * `v-dropzone` — декларативная DnD-зона для файлов (перетаскивание + drop).
149
+ *
150
+ * Директива не делает загрузку сама — только нормализует события и отдаёт `File[]`.
151
+ */
152
+ var vDropzone = {
153
+ mounted(el, binding) {
154
+ bind(el, binding.value);
155
+ },
156
+ updated(el, binding) {
157
+ update(el, binding.value);
158
+ },
159
+ unmounted(el) {
160
+ unbind(el);
161
+ }
162
+ };
163
+ //#endregion
164
+ export { vDropzone };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropzone.js","names":[],"sources":["../../src/directives/dropzone.ts"],"sourcesContent":["import type { Directive } from 'vue'\n\nimport type { FileValidator } from '../fileValidation'\n\nimport { FileValidationError, runFileValidators } from '../fileValidation'\n\nexport type DropzoneOnFiles = (files: File[], event: DragEvent) => void | Promise<void>\n\nexport type DropzoneBindingValue =\n | DropzoneOnFiles\n | {\n onFiles: DropzoneOnFiles\n /** По умолчанию `true`. */\n enabled?: boolean\n /** По умолчанию `true`. */\n multiple?: boolean\n\n /** Валидаторы, которые будут запущены перед `onFiles`. */\n validators?: FileValidator[]\n /** По умолчанию `true` (предотвращаем дефолтное поведение браузера при drop). */\n preventDefault?: boolean\n /** По умолчанию `false`. */\n stopPropagation?: boolean\n /** Вызывается, если валидация файлов не прошла. */\n onError?: (error: unknown) => void\n /** Вызывается при изменении состояния drag-over. */\n onStateChange?: (state: { isOver: boolean }) => void\n /** CSS-класс, который навешивается на элемент, пока курсор с файлами над зоной. */\n overClass?: string\n }\n\ntype NormalizedOptions = {\n enabled: boolean\n multiple: boolean\n validators: FileValidator[] | undefined\n preventDefault: boolean\n stopPropagation: boolean\n onFiles: DropzoneOnFiles | undefined\n onError: ((error: unknown) => void) | undefined\n onStateChange: ((state: { isOver: boolean }) => void) | undefined\n overClass: string\n}\n\nfunction normalize(value: DropzoneBindingValue | undefined): NormalizedOptions {\n if (typeof value === 'function') {\n return {\n enabled: true,\n multiple: true,\n validators: undefined,\n preventDefault: true,\n stopPropagation: false,\n onFiles: value,\n onError: undefined,\n onStateChange: undefined,\n overClass: 'ds-dropzone--over',\n }\n }\n\n if (value && typeof value === 'object') {\n return {\n enabled: value.enabled ?? true,\n multiple: value.multiple ?? true,\n validators: value.validators,\n preventDefault: value.preventDefault ?? true,\n stopPropagation: value.stopPropagation ?? false,\n onFiles: value.onFiles,\n onError: value.onError,\n onStateChange: value.onStateChange,\n overClass: value.overClass ?? 'ds-dropzone--over',\n }\n }\n\n return {\n enabled: false,\n multiple: true,\n validators: undefined,\n preventDefault: true,\n stopPropagation: false,\n onFiles: undefined,\n onError: undefined,\n onStateChange: undefined,\n overClass: 'ds-dropzone--over',\n }\n}\n\ntype InternalState = {\n options: NormalizedOptions\n overCounter: number\n isOver: boolean\n onDragEnter: (event: DragEvent) => void\n onDragOver: (event: DragEvent) => void\n onDragLeave: (event: DragEvent) => void\n onDrop: (event: DragEvent) => void\n}\n\nconst states = new WeakMap<HTMLElement, InternalState>()\n\nfunction setOver(el: HTMLElement, next: boolean) {\n const state = states.get(el)\n if (!state) return\n\n // `state.isOver` может рассинхронизироваться с DOM (например, при обновлениях\n // компонента/директивы во время drag-over). Поэтому DOM-состояние всегда\n // приводим к `next`, а коллбек вызываем только при фактическом изменении.\n const wasDomOver = el.dataset.grDropzoneOver === 'true'\n const prev = state.isOver\n\n state.isOver = next\n\n if (next) {\n el.classList.add(state.options.overClass)\n el.dataset.grDropzoneOver = 'true'\n } else {\n el.classList.remove(state.options.overClass)\n delete el.dataset.grDropzoneOver\n }\n\n if (prev !== next || wasDomOver !== next) {\n state.options.onStateChange?.({ isOver: next })\n }\n}\n\nfunction unbind(el: HTMLElement) {\n const state = states.get(el)\n if (!state) return\n\n // Гарантированно очищаем визуальное состояние и счётчики.\n // Это важно, если директива обновлялась/перебиндилась во время DnD.\n state.overCounter = 0\n setOver(el, false)\n\n delete el.dataset.grDropzone\n\n el.removeEventListener('dragenter', state.onDragEnter)\n el.removeEventListener('dragover', state.onDragOver)\n el.removeEventListener('dragleave', state.onDragLeave)\n el.removeEventListener('drop', state.onDrop)\n\n states.delete(el)\n}\n\nfunction bind(el: HTMLElement, value: DropzoneBindingValue | undefined) {\n const options = normalize(value)\n\n const state: InternalState = {\n options,\n overCounter: 0,\n isOver: false,\n onDragEnter(event) {\n const current = states.get(el)\n if (!current?.options.enabled) return\n\n if (current.options.preventDefault) event.preventDefault()\n if (current.options.stopPropagation) event.stopPropagation()\n\n current.overCounter += 1\n setOver(el, true)\n },\n onDragOver(event) {\n const current = states.get(el)\n if (!current?.options.enabled) return\n\n if (current.options.preventDefault) event.preventDefault()\n if (current.options.stopPropagation) event.stopPropagation()\n\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'copy'\n },\n onDragLeave(event) {\n const current = states.get(el)\n if (!current?.options.enabled) return\n\n if (current.options.preventDefault) event.preventDefault()\n if (current.options.stopPropagation) event.stopPropagation()\n\n current.overCounter = Math.max(0, current.overCounter - 1)\n if (current.overCounter === 0) setOver(el, false)\n },\n onDrop(event) {\n const current = states.get(el)\n if (!current?.options.enabled) return\n\n if (current.options.preventDefault) event.preventDefault()\n if (current.options.stopPropagation) event.stopPropagation()\n\n current.overCounter = 0\n setOver(el, false)\n\n const dt = event.dataTransfer\n const files = dt?.files ? Array.prototype.slice.call(dt.files) as File[] : []\n if (!files.length) return\n\n void (async () => {\n try {\n const validators = current.options.validators ?? []\n\n const { files: picked, issues } = await runFileValidators(files, validators, {\n source: 'drop',\n multiple: current.options.multiple,\n })\n\n if (issues.length > 0) {\n current.options.onError?.(new FileValidationError(issues, picked))\n return\n }\n\n if (!picked.length) return\n await current.options.onFiles?.(picked, event)\n } catch (error) {\n current.options.onError?.(error)\n }\n })()\n },\n }\n\n states.set(el, state)\n\n // Base marker.\n el.dataset.grDropzone = 'true'\n\n el.addEventListener('dragenter', state.onDragEnter)\n el.addEventListener('dragover', state.onDragOver)\n el.addEventListener('dragleave', state.onDragLeave)\n el.addEventListener('drop', state.onDrop)\n}\n\nfunction update(el: HTMLElement, value: DropzoneBindingValue | undefined) {\n const state = states.get(el)\n if (!state) {\n bind(el, value)\n return\n }\n\n const prevOverClass = state.options.overClass\n const nextOptions = normalize(value)\n\n state.options = nextOptions\n\n // Если поменялся `overClass`, синхронизируем DOM.\n if (prevOverClass !== nextOptions.overClass) {\n el.classList.remove(prevOverClass)\n if (state.isOver) el.classList.add(nextOptions.overClass)\n }\n\n // Если директива выключена — сбрасываем состояние.\n if (!nextOptions.enabled) {\n state.overCounter = 0\n setOver(el, false)\n }\n}\n\n/**\n * `v-dropzone` — декларативная DnD-зона для файлов (перетаскивание + drop).\n *\n * Директива не делает загрузку сама — только нормализует события и отдаёт `File[]`.\n */\nexport const vDropzone: Directive<HTMLElement, DropzoneBindingValue> = {\n mounted(el, binding) {\n bind(el, binding.value)\n },\n updated(el, binding) {\n update(el, binding.value)\n },\n unmounted(el) {\n unbind(el)\n },\n}\n"],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ //#region src/directives/hotkey.ts
2
+ var states = /* @__PURE__ */ new WeakMap();
3
+ function isEditableTarget(target) {
4
+ if (!(target instanceof HTMLElement)) return false;
5
+ if (target.isContentEditable) return true;
6
+ const tag = target.tagName;
7
+ return tag === "INPUT" || tag === "TEXTAREA" || tag === "SELECT";
8
+ }
9
+ function normalizeBinding(value) {
10
+ if (!value) return {
11
+ enabled: false,
12
+ handlers: {}
13
+ };
14
+ if ("handlers" in value) {
15
+ const v = value;
16
+ return {
17
+ enabled: v.enabled ?? true,
18
+ handlers: v.handlers ?? {}
19
+ };
20
+ }
21
+ return {
22
+ enabled: true,
23
+ handlers: value
24
+ };
25
+ }
26
+ function normalizeKeyToken(token) {
27
+ const t = token.trim().toLowerCase();
28
+ if (t === "esc") return "Escape";
29
+ if (t === "escape") return "Escape";
30
+ if (t === "space") return " ";
31
+ if (t.length === 1) return t;
32
+ return token.trim();
33
+ }
34
+ function parseHotkeys(map) {
35
+ const parsed = [];
36
+ for (const [combo, entry] of Object.entries(map)) {
37
+ const parts = combo.split("+").map((p) => p.trim()).filter(Boolean);
38
+ if (!parts.length) continue;
39
+ let ctrl = false;
40
+ let meta = false;
41
+ let alt = false;
42
+ let shift = false;
43
+ const keyToken = parts.at(-1);
44
+ if (!keyToken) continue;
45
+ for (const p of parts.slice(0, -1)) {
46
+ const t = p.toLowerCase();
47
+ if (t === "ctrl" || t === "control") ctrl = true;
48
+ else if (t === "meta" || t === "cmd" || t === "command" || t === "⌘") meta = true;
49
+ else if (t === "alt" || t === "option") alt = true;
50
+ else if (t === "shift") shift = true;
51
+ }
52
+ const key = normalizeKeyToken(keyToken);
53
+ parsed.push({
54
+ original: combo,
55
+ key,
56
+ ctrl,
57
+ meta,
58
+ alt,
59
+ shift,
60
+ entry
61
+ });
62
+ }
63
+ return parsed;
64
+ }
65
+ function matchKey(expected, eventKey) {
66
+ if (expected === " ") return eventKey === " " || eventKey === "Spacebar";
67
+ if (expected.length === 1) return expected.toLowerCase() === eventKey.toLowerCase();
68
+ return expected === eventKey;
69
+ }
70
+ function resolveEntry(entry) {
71
+ if (typeof entry === "function") return {
72
+ handler: entry,
73
+ preventDefault: void 0,
74
+ stopPropagation: false,
75
+ allowInEditable: false
76
+ };
77
+ return {
78
+ handler: entry.handler,
79
+ preventDefault: entry.preventDefault,
80
+ stopPropagation: entry.stopPropagation ?? false,
81
+ allowInEditable: entry.allowInEditable ?? false
82
+ };
83
+ }
84
+ /**
85
+ * `v-hotkey` — горячие клавиши на компонент/страницу.
86
+ *
87
+ * Пример:
88
+ * ```vue
89
+ * <div v-hotkey="{ 'Escape': close, 'Ctrl+K': openSearch }" />
90
+ * ```
91
+ */
92
+ var vHotkey = {
93
+ mounted(el, binding) {
94
+ if (typeof window === "undefined") return;
95
+ const { enabled, handlers } = normalizeBinding(binding.value);
96
+ const state = {
97
+ enabled,
98
+ hotkeys: parseHotkeys(handlers),
99
+ listener: (event) => {
100
+ const current = states.get(el);
101
+ if (!current?.enabled) return;
102
+ if (!el.isConnected) return;
103
+ const editable = isEditableTarget(event.target);
104
+ for (const hk of current.hotkeys) {
105
+ if (hk.ctrl !== event.ctrlKey) continue;
106
+ if (hk.meta !== event.metaKey) continue;
107
+ if (hk.alt !== event.altKey) continue;
108
+ if (hk.shift !== event.shiftKey) continue;
109
+ if (!matchKey(hk.key, event.key)) continue;
110
+ const entry = resolveEntry(hk.entry);
111
+ const hasModifier = hk.ctrl || hk.meta || hk.alt || hk.shift;
112
+ if (editable && !entry.allowInEditable && !hasModifier && hk.key !== "Escape") continue;
113
+ if (entry.preventDefault ?? (hk.ctrl || hk.meta || hk.alt)) event.preventDefault();
114
+ if (entry.stopPropagation) event.stopPropagation();
115
+ entry.handler(event);
116
+ return;
117
+ }
118
+ }
119
+ };
120
+ states.set(el, state);
121
+ window.addEventListener("keydown", state.listener);
122
+ },
123
+ updated(el, binding) {
124
+ const state = states.get(el);
125
+ if (!state) return;
126
+ const next = normalizeBinding(binding.value);
127
+ state.enabled = next.enabled;
128
+ state.hotkeys = parseHotkeys(next.handlers);
129
+ },
130
+ unmounted(el) {
131
+ const state = states.get(el);
132
+ if (!state) return;
133
+ window.removeEventListener("keydown", state.listener);
134
+ states.delete(el);
135
+ }
136
+ };
137
+ //#endregion
138
+ export { vHotkey };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hotkey.js","names":[],"sources":["../../src/directives/hotkey.ts"],"sourcesContent":["import type { Directive } from 'vue'\n\nexport type HotkeyHandler = (event: KeyboardEvent) => void\n\nexport type HotkeyEntry =\n | HotkeyHandler\n | {\n handler: HotkeyHandler\n /** По умолчанию: `true` для комбинаций с Ctrl/Meta/Alt, иначе `false`. */\n preventDefault?: boolean\n /** По умолчанию `false`. */\n stopPropagation?: boolean\n /** Разрешить срабатывать, когда фокус в `input/textarea/[contenteditable]`. */\n allowInEditable?: boolean\n }\n\nexport type HotkeyMap = Record<string, HotkeyEntry>\n\nexport type HotkeyBindingValue =\n | HotkeyMap\n | {\n handlers: HotkeyMap\n enabled?: boolean\n }\n\ntype ParsedHotkey = {\n original: string\n key: string\n ctrl: boolean\n meta: boolean\n alt: boolean\n shift: boolean\n entry: HotkeyEntry\n}\n\ntype InternalState = {\n enabled: boolean\n hotkeys: ParsedHotkey[]\n listener: (event: KeyboardEvent) => void\n}\n\nconst states = new WeakMap<HTMLElement, InternalState>()\n\nfunction isEditableTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false\n if (target.isContentEditable) return true\n\n const tag = target.tagName\n return tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT'\n}\n\nfunction normalizeBinding(value: HotkeyBindingValue | undefined) {\n if (!value) return { enabled: false, handlers: {} as HotkeyMap }\n if ('handlers' in (value as any)) {\n const v = value as { handlers: HotkeyMap; enabled?: boolean }\n return { enabled: v.enabled ?? true, handlers: v.handlers ?? {} }\n }\n return { enabled: true, handlers: value as HotkeyMap }\n}\n\nfunction normalizeKeyToken(token: string): string {\n const t = token.trim().toLowerCase()\n if (t === 'esc') return 'Escape'\n if (t === 'escape') return 'Escape'\n if (t === 'space') return ' '\n if (t.length === 1) return t\n return token.trim()\n}\n\nfunction parseHotkeys(map: HotkeyMap): ParsedHotkey[] {\n const parsed: ParsedHotkey[] = []\n\n for (const [combo, entry] of Object.entries(map)) {\n const parts = combo\n .split('+')\n .map(p => p.trim())\n .filter(Boolean)\n\n if (!parts.length) continue\n\n let ctrl = false\n let meta = false\n let alt = false\n let shift = false\n\n const keyToken = parts.at(-1)\n if (!keyToken) continue\n for (const p of parts.slice(0, -1)) {\n const t = p.toLowerCase()\n if (t === 'ctrl' || t === 'control') ctrl = true\n else if (t === 'meta' || t === 'cmd' || t === 'command' || t === '⌘') meta = true\n else if (t === 'alt' || t === 'option') alt = true\n else if (t === 'shift') shift = true\n }\n\n const key = normalizeKeyToken(keyToken)\n parsed.push({ original: combo, key, ctrl, meta, alt, shift, entry })\n }\n\n return parsed\n}\n\nfunction matchKey(expected: string, eventKey: string): boolean {\n if (expected === ' ') return eventKey === ' ' || eventKey === 'Spacebar'\n if (expected.length === 1) return expected.toLowerCase() === eventKey.toLowerCase()\n return expected === eventKey\n}\n\nfunction resolveEntry(entry: HotkeyEntry) {\n if (typeof entry === 'function') {\n return {\n handler: entry,\n preventDefault: undefined as boolean | undefined,\n stopPropagation: false,\n allowInEditable: false,\n }\n }\n\n return {\n handler: entry.handler,\n preventDefault: entry.preventDefault,\n stopPropagation: entry.stopPropagation ?? false,\n allowInEditable: entry.allowInEditable ?? false,\n }\n}\n\n/**\n * `v-hotkey` — горячие клавиши на компонент/страницу.\n *\n * Пример:\n * ```vue\n * <div v-hotkey=\"{ 'Escape': close, 'Ctrl+K': openSearch }\" />\n * ```\n */\nexport const vHotkey: Directive<HTMLElement, HotkeyBindingValue> = {\n mounted(el, binding) {\n if (typeof window === 'undefined') return\n\n const { enabled, handlers } = normalizeBinding(binding.value)\n\n const state: InternalState = {\n enabled,\n hotkeys: parseHotkeys(handlers),\n listener: (event: KeyboardEvent) => {\n const current = states.get(el)\n if (!current?.enabled) return\n if (!el.isConnected) return\n\n const editable = isEditableTarget(event.target)\n\n for (const hk of current.hotkeys) {\n if (hk.ctrl !== event.ctrlKey) continue\n if (hk.meta !== event.metaKey) continue\n if (hk.alt !== event.altKey) continue\n if (hk.shift !== event.shiftKey) continue\n if (!matchKey(hk.key, event.key)) continue\n\n const entry = resolveEntry(hk.entry)\n\n // По умолчанию не перехватываем \"простые\" клавиши во время ввода.\n const hasModifier = hk.ctrl || hk.meta || hk.alt || hk.shift\n if (editable && !entry.allowInEditable && !hasModifier && hk.key !== 'Escape') {\n continue\n }\n\n const preventDefault = entry.preventDefault ?? (hk.ctrl || hk.meta || hk.alt)\n if (preventDefault) event.preventDefault()\n if (entry.stopPropagation) event.stopPropagation()\n\n entry.handler(event)\n return\n }\n },\n }\n\n states.set(el, state)\n window.addEventListener('keydown', state.listener)\n },\n updated(el, binding) {\n const state = states.get(el)\n if (!state) return\n\n const next = normalizeBinding(binding.value)\n state.enabled = next.enabled\n state.hotkeys = parseHotkeys(next.handlers)\n },\n unmounted(el) {\n const state = states.get(el)\n if (!state) return\n window.removeEventListener('keydown', state.listener)\n states.delete(el)\n },\n}\n"],"mappings":"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"}
@@ -1,2 +1,7 @@
1
- import { a as vClickOutside, i as vDropzone, n as vLoading, o as vAutosize, r as vHotkey, s as vAutofocus, t as createLoading } from "../chunks/directives-Cuib0yOO.js";
1
+ import { vAutofocus } from "./autofocus.js";
2
+ import { vAutosize } from "./autosize.js";
3
+ import { vClickOutside } from "./clickOutside.js";
4
+ import { vDropzone } from "./dropzone.js";
5
+ import { vHotkey } from "./hotkey.js";
6
+ import { createLoading, vLoading } from "./loading.js";
2
7
  export { createLoading, vAutofocus, vAutosize, vClickOutside, vDropzone, vHotkey, vLoading };