@feugene/granularity 0.9.4 → 0.11.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 (457) hide show
  1. package/README.md +44 -45
  2. package/dist/GrButtonGroup.css +1 -1
  3. package/dist/GrFormFile.css +1 -1
  4. package/dist/GrIcon.css +1 -1
  5. package/dist/GrLoading.css +1 -1
  6. package/dist/GrSkeleton.css +1 -1
  7. package/dist/GrToaster.css +1 -0
  8. package/dist/GrTree.css +1 -1
  9. package/dist/chunks/{adapter-BqqjEZGU.js.map → adapter-CAOxmn2G.js.map} +1 -1
  10. package/dist/chunks/arrow-up-C_G4jg8M.js.map +1 -0
  11. package/dist/chunks/{classTokens-BPeBXNzu.js.map → classTokens-BzazaERD.js.map} +1 -1
  12. package/dist/chunks/{config-B_nSBc7W.js → config-1uSYl98Y.js} +5 -5
  13. package/dist/chunks/{config-B_nSBc7W.js.map → config-1uSYl98Y.js.map} +1 -1
  14. package/dist/chunks/{config-DaHI5bD_2.js.map → config-8Pcutu1j2.js.map} +1 -1
  15. package/dist/chunks/{config-DoBk_CzG.js.map → config-B0qIpo8m.js.map} +1 -1
  16. package/dist/chunks/{config-BY81UKv0.js → config-B7IIWGt_2.js} +3 -3
  17. package/dist/chunks/config-B7IIWGt_2.js.map +1 -0
  18. package/dist/chunks/{config-DbghHyY_.js.map → config-BEegFP74.js.map} +1 -1
  19. package/dist/chunks/{config-72sW9Bag2.js → config-BIRO0vDJ2.js} +6 -6
  20. package/dist/chunks/{config-72sW9Bag2.js.map → config-BIRO0vDJ2.js.map} +1 -1
  21. package/dist/chunks/{config-Dzd6BzIN2.js.map → config-BLHqZhy-2.js.map} +1 -1
  22. package/dist/chunks/{config-BV4vBzdm.js.map → config-BNu8lFQB.js.map} +1 -1
  23. package/dist/chunks/config-BOlr7qw7.js +106 -0
  24. package/dist/chunks/config-BOlr7qw7.js.map +1 -0
  25. package/dist/chunks/{config-B1kFmhpM.js.map → config-BUHuGBik.js.map} +1 -1
  26. package/dist/chunks/{config-DF_RlCIO.js.map → config-BWGGp7uV.js.map} +1 -1
  27. package/dist/chunks/config-BX1JTrkV2.js +14 -0
  28. package/dist/chunks/config-BX1JTrkV2.js.map +1 -0
  29. package/dist/chunks/{config-BduXEXjt.js.map → config-BXtAmU3s.js.map} +1 -1
  30. package/dist/chunks/{config-O1_FTqD3.js.map → config-Bah4oHwL.js.map} +1 -1
  31. package/dist/chunks/{config-Br_qI3Za.js → config-C49QUoJL.js} +3 -3
  32. package/dist/chunks/config-C49QUoJL.js.map +1 -0
  33. package/dist/chunks/{config-3I3vqDW4.js → config-C4snOIXg.js} +1 -1
  34. package/dist/chunks/{config-3I3vqDW4.js.map → config-C4snOIXg.js.map} +1 -1
  35. package/dist/chunks/{config-CdJpnjDj.js → config-C7NpDrfO.js} +5 -5
  36. package/dist/chunks/{config-CdJpnjDj.js.map → config-C7NpDrfO.js.map} +1 -1
  37. package/dist/chunks/{config-DSBlHQVa.js.map → config-C86UzUYf.js.map} +1 -1
  38. package/dist/chunks/{config-BgBWt9-A.js.map → config-C9AcVDkv.js.map} +1 -1
  39. package/dist/chunks/{config-BeQuykDk2.js.map → config-CGHLoBlH2.js.map} +1 -1
  40. package/dist/chunks/{config-ChQxl75m.js.map → config-CThzliFi.js.map} +1 -1
  41. package/dist/chunks/{config-DmjwIqx1.js.map → config-Cb2PAlSD.js.map} +1 -1
  42. package/dist/chunks/{config-BnWSHTEU.js → config-ClhKPJvg.js} +5 -5
  43. package/dist/chunks/{config-BnWSHTEU.js.map → config-ClhKPJvg.js.map} +1 -1
  44. package/dist/chunks/{config-d386uO3O.js → config-Cpi9Mh2J.js} +3 -3
  45. package/dist/chunks/{config-d386uO3O.js.map → config-Cpi9Mh2J.js.map} +1 -1
  46. package/dist/chunks/{config-Cp_XHsze.js → config-CrG1XiE7.js} +4 -4
  47. package/dist/chunks/{config-Cp_XHsze.js.map → config-CrG1XiE7.js.map} +1 -1
  48. package/dist/chunks/{config-C5OwJM3-.js → config-CziwTDDL.js} +3 -3
  49. package/dist/chunks/{config-C5OwJM3-.js.map → config-CziwTDDL.js.map} +1 -1
  50. package/dist/chunks/{config-BbKroFtR.js.map → config-D7GZO-Dx.js.map} +1 -1
  51. package/dist/chunks/{config-CUwF4E4R.js.map → config-DBmdgoVf.js.map} +1 -1
  52. package/dist/chunks/{config-C9MblwGq.js.map → config-DICOd-2X.js.map} +1 -1
  53. package/dist/chunks/{config-C6zT56Jc2.js → config-DUcu1D68.js} +3 -3
  54. package/dist/chunks/config-DUcu1D68.js.map +1 -0
  55. package/dist/chunks/{config-D4s_QWVP.js → config-D_R56_gT.js} +5 -5
  56. package/dist/chunks/{config-D4s_QWVP.js.map → config-D_R56_gT.js.map} +1 -1
  57. package/dist/chunks/{config-_3De4HFf.js → config-DezDih8_.js} +4 -4
  58. package/dist/chunks/config-DezDih8_.js.map +1 -0
  59. package/dist/chunks/{config-CFf7xaG1.js → config-DnvPqu4g.js} +3 -3
  60. package/dist/chunks/{config-CFf7xaG1.js.map → config-DnvPqu4g.js.map} +1 -1
  61. package/dist/chunks/{config-D6Oe3blW2.js.map → config-DpqOnJiz2.js.map} +1 -1
  62. package/dist/chunks/{config-V3LF-b_F.js.map → config-Dxuwwepq.js.map} +1 -1
  63. package/dist/chunks/{config-CvGdaXvH.js.map → config-HZto2PVy.js.map} +1 -1
  64. package/dist/chunks/{config-BOdu-O_B.js.map → config-JOtB4mzs.js.map} +1 -1
  65. package/dist/chunks/{config-iuMz79Mg.js.map → config-JpHA4Xx0.js.map} +1 -1
  66. package/dist/chunks/{config-CetsgpaZ2.js → config-LGrZIdaZ2.js} +1 -1
  67. package/dist/chunks/{config-CetsgpaZ2.js.map → config-LGrZIdaZ2.js.map} +1 -1
  68. package/dist/chunks/{config-Dcb7xK-C.js.map → config-PFg39mYo.js.map} +1 -1
  69. package/dist/chunks/{config-CU_CBd0k.js → config-QYGvEBu5.js} +2 -2
  70. package/dist/chunks/{config-CU_CBd0k.js.map → config-QYGvEBu5.js.map} +1 -1
  71. package/dist/chunks/{config-BU0olrvr.js.map → config-QaIc_gRa.js.map} +1 -1
  72. package/dist/chunks/{config-vcDVCYXo.js.map → config-U4m9PSql.js.map} +1 -1
  73. package/dist/chunks/{config-Ci9nXGUV.js.map → config-ZiXWIRBX.js.map} +1 -1
  74. package/dist/chunks/{config-B2YTEe_h.js → config-eYLZYOUS2.js} +63 -63
  75. package/dist/chunks/config-eYLZYOUS2.js.map +1 -0
  76. package/dist/chunks/{config-Bcf-8XlK2.js.map → config-ipvU0lzP2.js.map} +1 -1
  77. package/dist/chunks/{config-B61cX08u.js → config-jBp9wVv-.js} +4 -4
  78. package/dist/chunks/{config-B61cX08u.js.map → config-jBp9wVv-.js.map} +1 -1
  79. package/dist/chunks/{config-D5ek7VSi.js.map → config-xR4XVmcy.js.map} +1 -1
  80. package/dist/chunks/{dialogShared-BtXUk6Zc.js.map → dialogShared-CxW62PQE.js.map} +1 -1
  81. package/dist/chunks/en-BdtiS2d3.js +138 -0
  82. package/dist/chunks/en-BdtiS2d3.js.map +1 -0
  83. package/dist/chunks/es-BGRMZbe9.js +138 -0
  84. package/dist/chunks/es-BGRMZbe9.js.map +1 -0
  85. package/dist/chunks/{es-Bx3Kuy6z.js → es-DBhctWg-.js} +3 -3
  86. package/dist/chunks/{es-Bx3Kuy6z.js.map → es-DBhctWg-.js.map} +1 -1
  87. package/dist/chunks/{fileValidation-c_iBg74s.js → fileValidation-C3WFaWU2.js} +2 -1
  88. package/dist/chunks/{fileValidation-c_iBg74s.js.map → fileValidation-C3WFaWU2.js.map} +1 -1
  89. package/dist/chunks/{grBadgeStyles-Cq0hH2Ls.js → grBadgeStyles-DrycBuKT.js} +13 -13
  90. package/dist/chunks/grBadgeStyles-DrycBuKT.js.map +1 -0
  91. package/dist/chunks/grButtonStyles-C7Yga_Q1.js +191 -0
  92. package/dist/chunks/grButtonStyles-C7Yga_Q1.js.map +1 -0
  93. package/dist/chunks/grDropdownStyles-B_-DKytw.js +35 -0
  94. package/dist/chunks/grDropdownStyles-B_-DKytw.js.map +1 -0
  95. package/dist/chunks/{grLoadingStyles-DmI-SJ3i.js.map → grLoadingStyles-R5sreH__.js.map} +1 -1
  96. package/dist/chunks/{grModalStyles-DS1Vl6EW.js → grModalStyles-DWd3i05Q.js} +7 -7
  97. package/dist/chunks/grModalStyles-DWd3i05Q.js.map +1 -0
  98. package/dist/chunks/{grSelectStyles-pUt19VGy.js → grSelectStyles-CLK5hRd3.js} +3 -3
  99. package/dist/chunks/grSelectStyles-CLK5hRd3.js.map +1 -0
  100. package/dist/chunks/{grStyle-CUaTmpyW.js → grStyle-Blc9otAx.js} +6 -6
  101. package/dist/chunks/grStyle-Blc9otAx.js.map +1 -0
  102. package/dist/chunks/{granularityI18n-LcJ88Vce.js → granularityI18n-DoV7Ca2m.js} +18 -3
  103. package/dist/chunks/granularityI18n-DoV7Ca2m.js.map +1 -0
  104. package/dist/chunks/info-Be2OccTu.js.map +1 -0
  105. package/dist/chunks/loader-circle-CfVLz7lb.js.map +1 -0
  106. package/dist/chunks/ru-BFCnOiML.js +138 -0
  107. package/dist/chunks/ru-BFCnOiML.js.map +1 -0
  108. package/dist/chunks/{safelist-_UVzJrgE2.js → safelist-CkF4v7DC.js} +3 -3
  109. package/dist/chunks/safelist-CkF4v7DC.js.map +1 -0
  110. package/dist/chunks/{safelist-DccvJqCE.js → safelist-Do2RtzLB.js} +3 -3
  111. package/dist/chunks/{safelist-DccvJqCE.js.map → safelist-Do2RtzLB.js.map} +1 -1
  112. package/dist/chunks/shared-ChvcQgDl.js +168 -0
  113. package/dist/chunks/shared-ChvcQgDl.js.map +1 -0
  114. package/dist/chunks/{transition-mJ3PZCHH.js → transition-TLFw4KBn.js} +26 -12
  115. package/dist/chunks/{transition-mJ3PZCHH.js.map → transition-TLFw4KBn.js.map} +1 -1
  116. package/dist/chunks/useAddonMeasurement-DM0akF4C.js +65 -0
  117. package/dist/chunks/useAddonMeasurement-DM0akF4C.js.map +1 -0
  118. package/dist/chunks/useEscapeToClose-C2t_S1gh.js +27 -0
  119. package/dist/chunks/useEscapeToClose-C2t_S1gh.js.map +1 -0
  120. package/dist/chunks/useFloating-DtM6TyE4.js +1249 -0
  121. package/dist/chunks/useFloating-DtM6TyE4.js.map +1 -0
  122. package/dist/chunks/x-2KXnqxiD.js.map +1 -0
  123. package/dist/chunks/x-circle-BCBURwyX.js.map +1 -0
  124. package/dist/components/GrAlert/chunks/{GrAlert-HyCjYJeL.js → GrAlert-DPJSU_fG.js} +40 -37
  125. package/dist/components/GrAlert/chunks/GrAlert-DPJSU_fG.js.map +1 -0
  126. package/dist/components/GrAlert/index.js +2 -2
  127. package/dist/components/GrAvatar/chunks/{GrAvatar-BjnPKNAL.js → GrAvatar-96CpTCq5.js} +2 -2
  128. package/dist/components/GrAvatar/chunks/{GrAvatar-BjnPKNAL.js.map → GrAvatar-96CpTCq5.js.map} +1 -1
  129. package/dist/components/GrAvatar/index.js +2 -2
  130. package/dist/components/GrBadge/chunks/{GrBadge-Cs_cVfuO.js → GrBadge-B77XlaqE.js} +3 -3
  131. package/dist/components/GrBadge/chunks/{GrBadge-Cs_cVfuO.js.map → GrBadge-B77XlaqE.js.map} +1 -1
  132. package/dist/components/GrBadge/index.js +2 -2
  133. package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-BEnE9DyJ.js → GrBadgeWrap-CcktMOdg.js} +2 -2
  134. package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-BEnE9DyJ.js.map → GrBadgeWrap-CcktMOdg.js.map} +1 -1
  135. package/dist/components/GrBadgeWrap/index.js +2 -2
  136. package/dist/components/GrBottomNav/chunks/{GrBottomNav-XPHwd7UQ.js.map → GrBottomNav-usuMgG8_.js.map} +1 -1
  137. package/dist/components/GrBottomNav/index.js +2 -2
  138. package/dist/components/GrButton/chunks/GrButton-BlffdeJr.js +124 -0
  139. package/dist/components/GrButton/chunks/GrButton-BlffdeJr.js.map +1 -0
  140. package/dist/components/GrButton/index.js +4 -4
  141. package/dist/components/GrButtonGroup/chunks/{GrButtonGroup-CPOH6V-P.js → GrButtonGroup-Bs9dEKfA.js} +1 -1
  142. package/dist/components/GrButtonGroup/chunks/GrButtonGroup-Bs9dEKfA.js.map +1 -0
  143. package/dist/components/GrButtonGroup/index.js +2 -2
  144. package/dist/components/GrCard/chunks/{GrCard-6yk1RRAQ.js → GrCard-DUNMkuHW.js} +3 -3
  145. package/dist/components/GrCard/chunks/GrCard-DUNMkuHW.js.map +1 -0
  146. package/dist/components/GrCard/index.js +2 -2
  147. package/dist/components/GrCheckbox/chunks/{GrCheckbox-Bt3d7ckE.js → GrCheckbox-DJhzZZdO.js} +66 -18
  148. package/dist/components/GrCheckbox/chunks/GrCheckbox-DJhzZZdO.js.map +1 -0
  149. package/dist/components/GrCheckbox/index.js +2 -2
  150. package/dist/components/GrCollapse/chunks/{GrCollapse-CU94BTAR.js → GrCollapse-CPPLh_xU.js} +12 -12
  151. package/dist/components/GrCollapse/chunks/{GrCollapse-CU94BTAR.js.map → GrCollapse-CPPLh_xU.js.map} +1 -1
  152. package/dist/components/GrCollapse/index.js +2 -2
  153. package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-Br6WJkLE.js → GrConfirmDialog-BWYKCsHd.js} +20 -14
  154. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-BWYKCsHd.js.map +1 -0
  155. package/dist/components/GrConfirmDialog/index.js +2 -2
  156. package/dist/components/GrDataTable/chunks/{GrDataTable-ClcYiyc8.js → GrDataTable-ptbARmJ3.js} +7 -7
  157. package/dist/components/GrDataTable/chunks/{GrDataTable-ClcYiyc8.js.map → GrDataTable-ptbARmJ3.js.map} +1 -1
  158. package/dist/components/GrDataTable/index.js +2 -2
  159. package/dist/components/GrDialog/chunks/{GrDialog-C7XLxp8e.js → GrDialog-5DAS-1Lb.js} +14 -12
  160. package/dist/components/GrDialog/chunks/GrDialog-5DAS-1Lb.js.map +1 -0
  161. package/dist/components/GrDialog/index.js +3 -3
  162. package/dist/components/GrDialogService/chunks/GrDialogService-DY_fmaMu.js +425 -0
  163. package/dist/components/GrDialogService/chunks/GrDialogService-DY_fmaMu.js.map +1 -0
  164. package/dist/components/GrDialogService/index.js +3 -0
  165. package/dist/components/GrDrawer/chunks/{GrDrawer-BW3wtI7h.js → GrDrawer-D1kzsjXN.js} +19 -15
  166. package/dist/components/GrDrawer/chunks/GrDrawer-D1kzsjXN.js.map +1 -0
  167. package/dist/components/GrDrawer/index.js +2 -2
  168. package/dist/components/GrDropdown/chunks/GrDropdown-BXb5Cxxf.js +95 -0
  169. package/dist/components/GrDropdown/chunks/GrDropdown-BXb5Cxxf.js.map +1 -0
  170. package/dist/components/GrDropdown/index.js +2 -2
  171. package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-CLPwbiyG.js → GrDropdownMenu-DFEJLPcV.js} +10 -10
  172. package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-CLPwbiyG.js.map → GrDropdownMenu-DFEJLPcV.js.map} +1 -1
  173. package/dist/components/GrDropdownMenu/index.js +2 -2
  174. package/dist/components/GrEmptyState/chunks/{GrEmptyState-Dj2V5GaX.js → GrEmptyState-CA3BiTV7.js} +3 -3
  175. package/dist/components/GrEmptyState/chunks/{GrEmptyState-Dj2V5GaX.js.map → GrEmptyState-CA3BiTV7.js.map} +1 -1
  176. package/dist/components/GrEmptyState/index.js +2 -2
  177. package/dist/components/GrFileUpload/chunks/{GrFileUpload-BEKNB1RM.js → GrFileUpload-DvWPpiJS.js} +26 -23
  178. package/dist/components/GrFileUpload/chunks/GrFileUpload-DvWPpiJS.js.map +1 -0
  179. package/dist/components/GrFileUpload/index.js +3 -3
  180. package/dist/components/GrFormField/chunks/{GrFormField-U7c_aDPJ.js → GrFormField-BujNQrw8.js} +1 -1
  181. package/dist/components/GrFormField/chunks/{GrFormField-U7c_aDPJ.js.map → GrFormField-BujNQrw8.js.map} +1 -1
  182. package/dist/components/GrFormField/index.js +2 -2
  183. package/dist/components/GrFormFile/chunks/{GrFormFile-CIleXnfr.js → GrFormFile-CXcqqdvV.js} +38 -31
  184. package/dist/components/GrFormFile/chunks/GrFormFile-CXcqqdvV.js.map +1 -0
  185. package/dist/components/GrFormFile/index.js +2 -2
  186. package/dist/components/GrFormSection/chunks/{GrFormSection-DpGhY7MX.js → GrFormSection-Ce21jcgo.js} +1 -1
  187. package/dist/components/GrFormSection/chunks/{GrFormSection-DpGhY7MX.js.map → GrFormSection-Ce21jcgo.js.map} +1 -1
  188. package/dist/components/GrFormSection/index.js +2 -2
  189. package/dist/components/GrIcon/chunks/{GrIcon-BV7RBU_0.js → GrIcon-D9AWQLk2.js} +3 -3
  190. package/dist/components/GrIcon/chunks/{GrIcon-BV7RBU_0.js.map → GrIcon-D9AWQLk2.js.map} +1 -1
  191. package/dist/components/GrIcon/index.js +2 -2
  192. package/dist/components/GrImageViewer/chunks/{GrImageViewer-CsvXQHM9.js → GrImageViewer-OCUIrNh2.js} +44 -33
  193. package/dist/components/GrImageViewer/chunks/GrImageViewer-OCUIrNh2.js.map +1 -0
  194. package/dist/components/GrImageViewer/index.js +2 -2
  195. package/dist/components/GrInput/chunks/{GrInput-gwFQ1sk4.js → GrInput-C8pOJgCi.js} +43 -66
  196. package/dist/components/GrInput/chunks/GrInput-C8pOJgCi.js.map +1 -0
  197. package/dist/components/GrInput/index.js +2 -2
  198. package/dist/components/GrInputTag/chunks/{GrInputTag-Dcj3F6rQ.js → GrInputTag-zMgFqp2g.js} +27 -24
  199. package/dist/components/GrInputTag/chunks/GrInputTag-zMgFqp2g.js.map +1 -0
  200. package/dist/components/GrInputTag/index.js +2 -2
  201. package/dist/components/GrLink/chunks/{GrLink-BMwn2iJ9.js → GrLink-CYUe-Q8k.js} +14 -7
  202. package/dist/components/GrLink/chunks/GrLink-CYUe-Q8k.js.map +1 -0
  203. package/dist/components/GrLink/index.js +2 -2
  204. package/dist/components/GrList/chunks/{GrList-D8nM1FuV.js → GrList-Dx772Ns4.js} +1 -1
  205. package/dist/components/GrList/chunks/{GrList-D8nM1FuV.js.map → GrList-Dx772Ns4.js.map} +1 -1
  206. package/dist/components/GrList/index.js +2 -2
  207. package/dist/components/GrLoading/chunks/{GrLoading-mfyfghxs.js → GrLoading--X_7rdbb.js} +7 -7
  208. package/dist/components/GrLoading/chunks/{GrLoading-mfyfghxs.js.map → GrLoading--X_7rdbb.js.map} +1 -1
  209. package/dist/components/GrLoading/index.js +2 -2
  210. package/dist/components/GrModal/chunks/{GrModal-lh0lOmoi.js → GrModal-BkjW9jZS.js} +7 -7
  211. package/dist/components/GrModal/chunks/{GrModal-lh0lOmoi.js.map → GrModal-BkjW9jZS.js.map} +1 -1
  212. package/dist/components/GrModal/index.js +3 -3
  213. package/dist/components/GrNavbar/chunks/{GrNavbar-BH7XiF9q.js → GrNavbar-DW3MiIIf.js} +6 -6
  214. package/dist/components/GrNavbar/chunks/{GrNavbar-BH7XiF9q.js.map → GrNavbar-DW3MiIIf.js.map} +1 -1
  215. package/dist/components/GrNavbar/index.js +2 -2
  216. package/dist/components/GrNumberInput/chunks/{GrNumberInput-YIWhV85S.js → GrNumberInput-CldPIWQx.js} +51 -61
  217. package/dist/components/GrNumberInput/chunks/GrNumberInput-CldPIWQx.js.map +1 -0
  218. package/dist/components/GrNumberInput/index.js +2 -2
  219. package/dist/components/GrPagination/chunks/GrPagination-Bu9wv6it.js +165 -0
  220. package/dist/components/GrPagination/chunks/GrPagination-Bu9wv6it.js.map +1 -0
  221. package/dist/components/GrPagination/index.js +2 -2
  222. package/dist/components/GrProgressBar/chunks/{GrProgressBar-C2HdYjp4.js → GrProgressBar-CC3z-Zqp.js} +3 -3
  223. package/dist/components/GrProgressBar/chunks/{GrProgressBar-C2HdYjp4.js.map → GrProgressBar-CC3z-Zqp.js.map} +1 -1
  224. package/dist/components/GrProgressBar/index.js +2 -2
  225. package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-BV4EW3XO.js → GrPromptDialog-TmWXbpEP.js} +31 -23
  226. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-TmWXbpEP.js.map +1 -0
  227. package/dist/components/GrPromptDialog/index.js +2 -2
  228. package/dist/components/GrRadio/chunks/{GrRadio-IFU9Hiu2.js → GrRadio-CPTixXaY.js} +6 -6
  229. package/dist/components/GrRadio/chunks/{GrRadio-IFU9Hiu2.js.map → GrRadio-CPTixXaY.js.map} +1 -1
  230. package/dist/components/GrRadio/index.js +2 -2
  231. package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-C8IcJuuF.js → GrRadioGroup-vKZCbkCp.js} +3 -3
  232. package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-C8IcJuuF.js.map → GrRadioGroup-vKZCbkCp.js.map} +1 -1
  233. package/dist/components/GrRadioGroup/index.js +2 -2
  234. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-BMvXREcv.js → GrResponseErrorBanner-BWJNe2gr.js} +21 -18
  235. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-BWJNe2gr.js.map +1 -0
  236. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-CzdTh4gd.js → GrResponseErrorBanner-Cdu9ekK9.js} +5 -5
  237. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-CzdTh4gd.js.map → GrResponseErrorBanner-Cdu9ekK9.js.map} +1 -1
  238. package/dist/components/GrResponseErrorBanner/index.js +2 -2
  239. package/dist/components/GrSegmented/chunks/{GrSegmented-BRmwBsEG.js → GrSegmented-C1y0UXpQ.js} +5 -5
  240. package/dist/components/GrSegmented/chunks/{GrSegmented-BRmwBsEG.js.map → GrSegmented-C1y0UXpQ.js.map} +1 -1
  241. package/dist/components/GrSegmented/index.js +2 -2
  242. package/dist/components/GrSelect/chunks/{GrSelect-CnHdbPlf.js → GrSelect-RShK21lK.js} +106 -112
  243. package/dist/components/GrSelect/chunks/GrSelect-RShK21lK.js.map +1 -0
  244. package/dist/components/GrSelect/index.js +2 -2
  245. package/dist/components/GrSidebar/chunks/GrSidebar-DkWozzwA.js +238 -0
  246. package/dist/components/GrSidebar/chunks/GrSidebar-DkWozzwA.js.map +1 -0
  247. package/dist/components/GrSidebar/index.js +3 -3
  248. package/dist/components/GrSkeleton/chunks/{GrSkeleton-URyMkBqI.js → GrSkeleton-DsN-_CDZ.js} +1 -1
  249. package/dist/components/GrSkeleton/chunks/{GrSkeleton-URyMkBqI.js.map → GrSkeleton-DsN-_CDZ.js.map} +1 -1
  250. package/dist/components/GrSkeleton/index.js +2 -2
  251. package/dist/components/GrSwitch/chunks/{GrSwitch-29h0QhMO.js → GrSwitch-DAioyccZ.js} +10 -10
  252. package/dist/components/GrSwitch/chunks/{GrSwitch-29h0QhMO.js.map → GrSwitch-DAioyccZ.js.map} +1 -1
  253. package/dist/components/GrSwitch/index.js +2 -2
  254. package/dist/components/GrTable/chunks/{GrTable-dTWUxzRm.js → GrTable-Db3hRnKA.js} +3 -3
  255. package/dist/components/GrTable/chunks/{GrTable-dTWUxzRm.js.map → GrTable-Db3hRnKA.js.map} +1 -1
  256. package/dist/components/GrTable/index.js +2 -2
  257. package/dist/components/GrTabs/chunks/{GrTabs-D3ntDdtg.js → GrTabs-Z-FDJUr_.js} +3 -3
  258. package/dist/components/GrTabs/chunks/{GrTabs-D3ntDdtg.js.map → GrTabs-Z-FDJUr_.js.map} +1 -1
  259. package/dist/components/GrTabs/index.js +2 -2
  260. package/dist/components/GrTextarea/chunks/{GrTextarea-Cv6r2GuC.js → GrTextarea-D56YxhKq.js} +3 -3
  261. package/dist/components/GrTextarea/chunks/{GrTextarea-Cv6r2GuC.js.map → GrTextarea-D56YxhKq.js.map} +1 -1
  262. package/dist/components/GrTextarea/index.js +2 -2
  263. package/dist/components/GrToaster/chunks/GrToaster-eI8YvnIo.js +189 -0
  264. package/dist/components/GrToaster/chunks/GrToaster-eI8YvnIo.js.map +1 -0
  265. package/dist/components/GrToaster/index.js +2 -2
  266. package/dist/components/GrTooltip/chunks/GrTooltip-BeyZ8ssR.js +109 -0
  267. package/dist/components/GrTooltip/chunks/GrTooltip-BeyZ8ssR.js.map +1 -0
  268. package/dist/components/GrTooltip/index.js +2 -2
  269. package/dist/components/GrTree/chunks/{GrTree-B2SMU5Py.js → GrTree-D3ODe2dB.js} +40 -35
  270. package/dist/components/GrTree/chunks/GrTree-D3ODe2dB.js.map +1 -0
  271. package/dist/components/GrTree/index.js +2 -2
  272. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-C1abr5uH.js → GrTreeSelect-B2xBKs5Q.js} +21 -49
  273. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-B2xBKs5Q.js.map +1 -0
  274. package/dist/components/GrTreeSelect/index.js +2 -2
  275. package/dist/composables/useTheme.js +48 -8
  276. package/dist/composables/useTheme.js.map +1 -1
  277. package/dist/composables/useToast.js +88 -26
  278. package/dist/composables/useToast.js.map +1 -1
  279. package/dist/directives/autofocus.js.map +1 -1
  280. package/dist/directives/autosize.js.map +1 -1
  281. package/dist/directives/clickOutside.js.map +1 -1
  282. package/dist/directives/dropzone.js +6 -5
  283. package/dist/directives/dropzone.js.map +1 -1
  284. package/dist/directives/hotkey.js +24 -7
  285. package/dist/directives/hotkey.js.map +1 -1
  286. package/dist/directives/loading.js +2 -2
  287. package/dist/directives/loading.js.map +1 -1
  288. package/dist/fileValidation/index.js +1 -1
  289. package/dist/granular-provider-node.js +7 -7
  290. package/dist/granular-provider-node.js.map +1 -1
  291. package/dist/granular-provider.js +1 -1
  292. package/dist/granular-provider.js.map +1 -1
  293. package/dist/i18n/all.js +1 -1
  294. package/dist/i18n/all.js.map +1 -1
  295. package/dist/i18n/index.js +2 -2
  296. package/dist/index.js +109 -534
  297. package/dist/index.js.map +1 -1
  298. package/dist/styles/base.css +32 -0
  299. package/dist/styles/index.css +15 -0
  300. package/dist/styles/preflight.css +29 -0
  301. package/dist/styles/themes/dark.css +107 -0
  302. package/dist/styles/themes/light.css +98 -0
  303. package/dist/styles/tokens.css +135 -0
  304. package/dist/types/src/components/GrButton/GrButton.vue.d.ts +25 -2
  305. package/dist/types/src/components/GrCheckbox/GrCheckbox.vue.d.ts +7 -2
  306. package/dist/types/src/components/GrConfirmDialog/GrConfirmDialog.vue.d.ts +8 -8
  307. package/dist/types/src/components/GrDataTable/GrDataTable.vue.d.ts +1 -1
  308. package/dist/types/src/components/GrDialog/GrDialog.vue.d.ts +2 -2
  309. package/dist/types/src/components/GrDialog/GrDialogHeader.vue.d.ts +2 -2
  310. package/dist/types/src/components/GrDrawer/GrDrawer.vue.d.ts +2 -2
  311. package/dist/types/src/components/GrDropdown/grDropdownStyles.d.ts +3 -2
  312. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenu.vue.d.ts +2 -2
  313. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuGroup.vue.d.ts +1 -1
  314. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuList.vue.d.ts +2 -2
  315. package/dist/types/src/components/GrFileUpload/GrFileUpload.vue.d.ts +5 -5
  316. package/dist/types/src/components/GrFormFile/GrFormFile.vue.d.ts +11 -11
  317. package/dist/types/src/components/GrImageViewer/GrImageViewer.vue.d.ts +18 -18
  318. package/dist/types/src/components/GrInput/GrInput.vue.d.ts +14 -0
  319. package/dist/types/src/components/GrInput/grInputStyles.d.ts +3 -3
  320. package/dist/types/src/components/GrInputTag/GrInputTag.vue.d.ts +2 -2
  321. package/dist/types/src/components/GrLink/GrLink.vue.d.ts +11 -5
  322. package/dist/types/src/components/GrLink/grLinkStyles.d.ts +31 -3
  323. package/dist/types/src/components/GrLink/index.d.ts +1 -1
  324. package/dist/types/src/components/GrLoading/GrLoading.vue.d.ts +1 -1
  325. package/dist/types/src/components/GrModal/grModalStyles.d.ts +2 -2
  326. package/dist/types/src/components/GrNumberInput/GrNumberInput.vue.d.ts +17 -4
  327. package/dist/types/src/components/GrPagination/GrPagination.vue.d.ts +13 -1
  328. package/dist/types/src/components/GrPromptDialog/GrPromptDialog.vue.d.ts +12 -12
  329. package/dist/types/src/components/GrSegmented/GrSegmented.vue.d.ts +2 -2
  330. package/dist/types/src/components/GrSegmented/grSegmentedStyles.d.ts +5 -5
  331. package/dist/types/src/components/GrSelect/GrSelect.vue.d.ts +7 -7
  332. package/dist/types/src/components/GrSelect/grSelectStyles.d.ts +2 -1
  333. package/dist/types/src/components/GrSidebar/GrSidebar.vue.d.ts +33 -10
  334. package/dist/types/src/components/GrSidebar/GrSidebarItem.vue.d.ts +64 -0
  335. package/dist/types/src/components/GrSidebar/index.d.ts +1 -0
  336. package/dist/types/src/components/GrSidebar/sidebarContext.d.ts +9 -0
  337. package/dist/types/src/components/GrSwitch/GrSwitch.vue.d.ts +1 -1
  338. package/dist/types/src/components/GrSwitch/grSwitchStyles.d.ts +2 -2
  339. package/dist/types/src/components/GrToaster/GrToaster.vue.d.ts +9 -4
  340. package/dist/types/src/components/GrTree/GrTree.vue.d.ts +1 -1
  341. package/dist/types/src/components/GrTreeSelect/GrTreeSelect.vue.d.ts +2 -2
  342. package/dist/types/src/components/GrTreeSelect/grTreeSelectStyles.d.ts +1 -1
  343. package/dist/types/src/components/GrTreeSelect/grTreeSelectTypes.d.ts +1 -1
  344. package/dist/types/src/composables/internal/useAddonMeasurement.d.ts +18 -0
  345. package/dist/types/src/composables/internal/useEscapeToClose.d.ts +11 -0
  346. package/dist/types/src/composables/internal/useFloating.d.ts +53 -0
  347. package/dist/types/src/composables/useTheme.d.ts +5 -2
  348. package/dist/types/src/composables/useToast.d.ts +33 -1
  349. package/dist/types/src/directives/hotkey.d.ts +14 -0
  350. package/dist/types/src/granular-provider/shared.d.ts +1 -3
  351. package/dist/types/src/i18n/messages/en.d.ts +132 -0
  352. package/dist/types/src/i18n/messages/es.d.ts +132 -0
  353. package/dist/types/src/i18n/messages/ru.d.ts +132 -0
  354. package/dist/types/src/index.d.ts +2 -2
  355. package/dist/vue/index.js.map +1 -1
  356. package/dist/web-types.json +4673 -0
  357. package/package.json +33 -19
  358. package/dist/chunks/arrow-up-DZdIrpaF.js.map +0 -1
  359. package/dist/chunks/config-B2YTEe_h.js.map +0 -1
  360. package/dist/chunks/config-BY81UKv0.js.map +0 -1
  361. package/dist/chunks/config-Br_qI3Za.js.map +0 -1
  362. package/dist/chunks/config-C6zT56Jc2.js.map +0 -1
  363. package/dist/chunks/config-CpMYmvVT.js +0 -59
  364. package/dist/chunks/config-CpMYmvVT.js.map +0 -1
  365. package/dist/chunks/config-_3De4HFf.js.map +0 -1
  366. package/dist/chunks/en-foQA8imU.js +0 -65
  367. package/dist/chunks/en-foQA8imU.js.map +0 -1
  368. package/dist/chunks/es-DZFSojYL.js +0 -65
  369. package/dist/chunks/es-DZFSojYL.js.map +0 -1
  370. package/dist/chunks/grBadgeStyles-Cq0hH2Ls.js.map +0 -1
  371. package/dist/chunks/grButtonStyles-DKuXUemw.js +0 -191
  372. package/dist/chunks/grButtonStyles-DKuXUemw.js.map +0 -1
  373. package/dist/chunks/grDropdownStyles-B41mVR1H.js +0 -32
  374. package/dist/chunks/grDropdownStyles-B41mVR1H.js.map +0 -1
  375. package/dist/chunks/grModalStyles-DS1Vl6EW.js.map +0 -1
  376. package/dist/chunks/grSelectStyles-pUt19VGy.js.map +0 -1
  377. package/dist/chunks/grStyle-CUaTmpyW.js.map +0 -1
  378. package/dist/chunks/granularityI18n-LcJ88Vce.js.map +0 -1
  379. package/dist/chunks/info-C0bHmdZq.js.map +0 -1
  380. package/dist/chunks/loader-circle-BUntgosj.js.map +0 -1
  381. package/dist/chunks/ru-LhkPpPIl.js +0 -65
  382. package/dist/chunks/ru-LhkPpPIl.js.map +0 -1
  383. package/dist/chunks/safelist-_UVzJrgE2.js.map +0 -1
  384. package/dist/chunks/shared-BiqXd5MW.js +0 -169
  385. package/dist/chunks/shared-BiqXd5MW.js.map +0 -1
  386. package/dist/chunks/x-Pa6C2hwi.js.map +0 -1
  387. package/dist/chunks/x-circle-DQSlBLmX.js.map +0 -1
  388. package/dist/components/GrAlert/chunks/GrAlert-HyCjYJeL.js.map +0 -1
  389. package/dist/components/GrButton/chunks/GrButton-CPDKonoB.js +0 -83
  390. package/dist/components/GrButton/chunks/GrButton-CPDKonoB.js.map +0 -1
  391. package/dist/components/GrButtonGroup/chunks/GrButtonGroup-CPOH6V-P.js.map +0 -1
  392. package/dist/components/GrCard/chunks/GrCard-6yk1RRAQ.js.map +0 -1
  393. package/dist/components/GrCheckbox/chunks/GrCheckbox-Bt3d7ckE.js.map +0 -1
  394. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-Br6WJkLE.js.map +0 -1
  395. package/dist/components/GrDialog/chunks/GrDialog-C7XLxp8e.js.map +0 -1
  396. package/dist/components/GrDrawer/chunks/GrDrawer-BW3wtI7h.js.map +0 -1
  397. package/dist/components/GrDropdown/chunks/GrDropdown-DOvHKnih.js +0 -151
  398. package/dist/components/GrDropdown/chunks/GrDropdown-DOvHKnih.js.map +0 -1
  399. package/dist/components/GrFileUpload/chunks/GrFileUpload-BEKNB1RM.js.map +0 -1
  400. package/dist/components/GrFormFile/chunks/GrFormFile-CIleXnfr.js.map +0 -1
  401. package/dist/components/GrImageViewer/chunks/GrImageViewer-CsvXQHM9.js.map +0 -1
  402. package/dist/components/GrInput/chunks/GrInput-gwFQ1sk4.js.map +0 -1
  403. package/dist/components/GrInputTag/chunks/GrInputTag-Dcj3F6rQ.js.map +0 -1
  404. package/dist/components/GrLink/chunks/GrLink-BMwn2iJ9.js.map +0 -1
  405. package/dist/components/GrNumberInput/chunks/GrNumberInput-YIWhV85S.js.map +0 -1
  406. package/dist/components/GrPagination/chunks/GrPagination-BNDEqM8_.js +0 -114
  407. package/dist/components/GrPagination/chunks/GrPagination-BNDEqM8_.js.map +0 -1
  408. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-BV4EW3XO.js.map +0 -1
  409. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-BMvXREcv.js.map +0 -1
  410. package/dist/components/GrSelect/chunks/GrSelect-CnHdbPlf.js.map +0 -1
  411. package/dist/components/GrSidebar/chunks/GrSidebar-BpBtAGBs.js +0 -44
  412. package/dist/components/GrSidebar/chunks/GrSidebar-BpBtAGBs.js.map +0 -1
  413. package/dist/components/GrToaster/chunks/GrToaster-DluJmR5D.js +0 -171
  414. package/dist/components/GrToaster/chunks/GrToaster-DluJmR5D.js.map +0 -1
  415. package/dist/components/GrTooltip/chunks/GrTooltip-B7I1AVIC.js +0 -55
  416. package/dist/components/GrTooltip/chunks/GrTooltip-B7I1AVIC.js.map +0 -1
  417. package/dist/components/GrTree/chunks/GrTree-B2SMU5Py.js.map +0 -1
  418. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-C1abr5uH.js.map +0 -1
  419. /package/dist/chunks/{_plugin-vue_export-helper-DQR7Sy7Q.js → _plugin-vue_export-helper-BOaGB7Aw.js} +0 -0
  420. /package/dist/chunks/{adapter-BqqjEZGU.js → adapter-CAOxmn2G.js} +0 -0
  421. /package/dist/chunks/{arrow-up-DZdIrpaF.js → arrow-up-C_G4jg8M.js} +0 -0
  422. /package/dist/chunks/{classTokens-BPeBXNzu.js → classTokens-BzazaERD.js} +0 -0
  423. /package/dist/chunks/{config-DaHI5bD_2.js → config-8Pcutu1j2.js} +0 -0
  424. /package/dist/chunks/{config-DoBk_CzG.js → config-B0qIpo8m.js} +0 -0
  425. /package/dist/chunks/{config-DbghHyY_.js → config-BEegFP74.js} +0 -0
  426. /package/dist/chunks/{config-Dzd6BzIN2.js → config-BLHqZhy-2.js} +0 -0
  427. /package/dist/chunks/{config-BV4vBzdm.js → config-BNu8lFQB.js} +0 -0
  428. /package/dist/chunks/{config-B1kFmhpM.js → config-BUHuGBik.js} +0 -0
  429. /package/dist/chunks/{config-DF_RlCIO.js → config-BWGGp7uV.js} +0 -0
  430. /package/dist/chunks/{config-BduXEXjt.js → config-BXtAmU3s.js} +0 -0
  431. /package/dist/chunks/{config-O1_FTqD3.js → config-Bah4oHwL.js} +0 -0
  432. /package/dist/chunks/{config-DSBlHQVa.js → config-C86UzUYf.js} +0 -0
  433. /package/dist/chunks/{config-BgBWt9-A.js → config-C9AcVDkv.js} +0 -0
  434. /package/dist/chunks/{config-BeQuykDk2.js → config-CGHLoBlH2.js} +0 -0
  435. /package/dist/chunks/{config-ChQxl75m.js → config-CThzliFi.js} +0 -0
  436. /package/dist/chunks/{config-DmjwIqx1.js → config-Cb2PAlSD.js} +0 -0
  437. /package/dist/chunks/{config-BbKroFtR.js → config-D7GZO-Dx.js} +0 -0
  438. /package/dist/chunks/{config-CUwF4E4R.js → config-DBmdgoVf.js} +0 -0
  439. /package/dist/chunks/{config-C9MblwGq.js → config-DICOd-2X.js} +0 -0
  440. /package/dist/chunks/{config-D6Oe3blW2.js → config-DpqOnJiz2.js} +0 -0
  441. /package/dist/chunks/{config-V3LF-b_F.js → config-Dxuwwepq.js} +0 -0
  442. /package/dist/chunks/{config-CvGdaXvH.js → config-HZto2PVy.js} +0 -0
  443. /package/dist/chunks/{config-BOdu-O_B.js → config-JOtB4mzs.js} +0 -0
  444. /package/dist/chunks/{config-iuMz79Mg.js → config-JpHA4Xx0.js} +0 -0
  445. /package/dist/chunks/{config-Dcb7xK-C.js → config-PFg39mYo.js} +0 -0
  446. /package/dist/chunks/{config-BU0olrvr.js → config-QaIc_gRa.js} +0 -0
  447. /package/dist/chunks/{config-vcDVCYXo.js → config-U4m9PSql.js} +0 -0
  448. /package/dist/chunks/{config-Ci9nXGUV.js → config-ZiXWIRBX.js} +0 -0
  449. /package/dist/chunks/{config-Bcf-8XlK2.js → config-ipvU0lzP2.js} +0 -0
  450. /package/dist/chunks/{config-D5ek7VSi.js → config-xR4XVmcy.js} +0 -0
  451. /package/dist/chunks/{dialogShared-BtXUk6Zc.js → dialogShared-CxW62PQE.js} +0 -0
  452. /package/dist/chunks/{grLoadingStyles-DmI-SJ3i.js → grLoadingStyles-R5sreH__.js} +0 -0
  453. /package/dist/chunks/{info-C0bHmdZq.js → info-Be2OccTu.js} +0 -0
  454. /package/dist/chunks/{loader-circle-BUntgosj.js → loader-circle-CfVLz7lb.js} +0 -0
  455. /package/dist/chunks/{x-Pa6C2hwi.js → x-2KXnqxiD.js} +0 -0
  456. /package/dist/chunks/{x-circle-DQSlBLmX.js → x-circle-BCBURwyX.js} +0 -0
  457. /package/dist/components/GrBottomNav/chunks/{GrBottomNav-XPHwd7UQ.js → GrBottomNav-usuMgG8_.js} +0 -0
@@ -1,4 +1,5 @@
1
- import { t as _plugin_vue_export_helper_default } from "../../../chunks/_plugin-vue_export-helper-DQR7Sy7Q.js";
1
+ import { t as useGranularityTranslations } from "../../../chunks/granularityI18n-DoV7Ca2m.js";
2
+ import { t as _plugin_vue_export_helper_default } from "../../../chunks/_plugin-vue_export-helper-BOaGB7Aw.js";
2
3
  import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeProps, normalizeClass, normalizeStyle, openBlock, ref, renderList, renderSlot, resolveComponent, shallowRef, toDisplayString, toValue, unref, watch, withCtx, withModifiers } from "vue";
3
4
  import '../../../GrTree.css';//#region src/components/GrTree/grTreeDataAdapter.ts
4
5
  var DEFAULT_CHILDREN_KEY = "children";
@@ -343,7 +344,7 @@ function createGrTreeStore(options) {
343
344
  }
344
345
  //#endregion
345
346
  //#region src/components/GrTree/GrTree.vue?vue&type=script&setup=true&lang.ts
346
- var _hoisted_1 = ["data-ds-tree", "role"];
347
+ var _hoisted_1 = ["data-gr-tree", "role"];
347
348
  var _hoisted_2 = ["aria-level", "aria-expanded"];
348
349
  var _hoisted_3 = [
349
350
  "onClick",
@@ -358,12 +359,12 @@ var _hoisted_4 = [
358
359
  "onDragstart"
359
360
  ];
360
361
  var _hoisted_5 = ["aria-label", "onClick"];
361
- var _hoisted_6 = { class: "ds-tree__label" };
362
- var _hoisted_7 = { class: "ds-tree__label" };
363
- var DEFAULT_BRANCH_LINE_COLOR = "var(--ds-tree-branch-line-default-color, #e2e8f0)";
362
+ var _hoisted_6 = { class: "gr-tree__label" };
363
+ var _hoisted_7 = { class: "gr-tree__label" };
364
+ var DEFAULT_BRANCH_LINE_COLOR = "var(--gr-tree-branch-line-default-color, #e2e8f0)";
364
365
  //#endregion
365
366
  //#region src/components/GrTree/GrTree.vue
366
- var GrTree_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
367
+ var GrTree_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
367
368
  name: "GrTree",
368
369
  __name: "GrTree",
369
370
  props: {
@@ -463,9 +464,9 @@ var GrTree_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PUR
463
464
  ],
464
465
  default: void 0
465
466
  },
466
- dragLabel: { default: "Drag" },
467
- expandLabel: { default: "Expand" },
468
- collapseLabel: { default: "Collapse" },
467
+ dragLabel: { default: void 0 },
468
+ expandLabel: { default: void 0 },
469
+ collapseLabel: { default: void 0 },
469
470
  draggable: {
470
471
  type: Boolean,
471
472
  default: false
@@ -504,6 +505,10 @@ var GrTree_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PUR
504
505
  emitNodeDrop: (draggingNode, dropNode, dropType) => emit("nodeDrop", draggingNode, dropNode, dropType)
505
506
  });
506
507
  const treeProps = props;
508
+ const { t } = useGranularityTranslations();
509
+ const dragLabel = computed(() => treeProps.dragLabel ?? t("gr.tree.drag", "Drag"));
510
+ const expandLabel = computed(() => treeProps.expandLabel ?? t("gr.tree.expand", "Expand"));
511
+ const collapseLabel = computed(() => treeProps.collapseLabel ?? t("gr.tree.collapse", "Collapse"));
507
512
  const currentKey = treeStore.currentKey;
508
513
  const hoveredKey = interactionContext.hoveredKey;
509
514
  const dropTarget = interactionContext.dropTarget;
@@ -629,7 +634,7 @@ var GrTree_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PUR
629
634
  }
630
635
  function resolveChildrenWrapStyle(row) {
631
636
  if (!treeProps.branchLine) return {};
632
- return { "--ds-tree-branch-line-color": resolveBranchLineColor(row.node) };
637
+ return { "--gr-tree-branch-line-color": resolveBranchLineColor(row.node) };
633
638
  }
634
639
  __expose({
635
640
  appendNode: treeStore.appendNode,
@@ -646,24 +651,24 @@ var GrTree_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PUR
646
651
  return (_ctx, _cache) => {
647
652
  const _component_GrTree = resolveComponent("GrTree", true);
648
653
  return openBlock(), createElementBlock("div", {
649
- "data-ds-tree": props.internalNested ? void 0 : "",
650
- class: normalizeClass(props.internalNested ? "ds-tree__children" : "ds-tree"),
654
+ "data-gr-tree": props.internalNested ? void 0 : "",
655
+ class: normalizeClass(props.internalNested ? "gr-tree__children" : "gr-tree"),
651
656
  role: props.internalNested ? "group" : "tree"
652
657
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(visibleRows.value, (row) => {
653
658
  return openBlock(), createElementBlock("div", {
654
659
  key: row.node.key,
655
- "data-ds-tree-node": "",
660
+ "data-gr-tree-node": "",
656
661
  role: "treeitem",
657
662
  "aria-level": row.node.level,
658
663
  "aria-expanded": row.isLeaf ? void 0 : row.isExpanded
659
664
  }, [createElementVNode("div", {
660
- "data-ds-tree-row": "",
661
- class: normalizeClass(["ds-tree__row py-2 px-2", [
662
- unref(treeProps).highlightCurrent && unref(currentKey) === row.node.key ? "ds-tree__row--current" : "",
663
- row.isMatched ? "ds-tree__row--matched" : "",
664
- unref(dropTarget)?.key === row.node.key && unref(dropTarget).allowed && unref(dropTarget).type === "inner" ? "ds-tree__row--drop-inner" : "",
665
- unref(dropTarget)?.key === row.node.key && unref(dropTarget).allowed && unref(dropTarget).type === "prev" ? "ds-tree__row--drop-prev" : "",
666
- unref(dropTarget)?.key === row.node.key && unref(dropTarget).allowed && unref(dropTarget).type === "next" ? "ds-tree__row--drop-next" : "",
665
+ "data-gr-tree-row": "",
666
+ class: normalizeClass(["gr-tree__row py-2 px-2", [
667
+ unref(treeProps).highlightCurrent && unref(currentKey) === row.node.key ? "gr-tree__row--current" : "",
668
+ row.isMatched ? "gr-tree__row--matched" : "",
669
+ unref(dropTarget)?.key === row.node.key && unref(dropTarget).allowed && unref(dropTarget).type === "inner" ? "gr-tree__row--drop-inner" : "",
670
+ unref(dropTarget)?.key === row.node.key && unref(dropTarget).allowed && unref(dropTarget).type === "prev" ? "gr-tree__row--drop-prev" : "",
671
+ unref(dropTarget)?.key === row.node.key && unref(dropTarget).allowed && unref(dropTarget).type === "next" ? "gr-tree__row--drop-next" : "",
667
672
  resolveNodeClass(unref(treeProps).rowClass, row)
668
673
  ]]),
669
674
  tabindex: "0",
@@ -676,41 +681,41 @@ var GrTree_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PUR
676
681
  unref(treeProps).draggable ? (openBlock(), createElementBlock("button", {
677
682
  key: 0,
678
683
  type: "button",
679
- "data-ds-tree-drag-handle": "",
680
- class: normalizeClass(["ds-tree__drag-handle", [
681
- shouldShowDragHandle(row.node) ? "ds-tree__drag-handle--visible" : "",
682
- canDrag(row.node) ? "" : "ds-tree__drag-handle--disabled",
684
+ "data-gr-tree-drag-handle": "",
685
+ class: normalizeClass(["gr-tree__drag-handle", [
686
+ shouldShowDragHandle(row.node) ? "gr-tree__drag-handle--visible" : "",
687
+ canDrag(row.node) ? "" : "gr-tree__drag-handle--disabled",
683
688
  resolveNodeClass(unref(treeProps).dragHandleClass, row)
684
689
  ]]),
685
- "aria-label": unref(treeProps).dragLabel,
690
+ "aria-label": dragLabel.value,
686
691
  draggable: canDrag(row.node),
687
692
  onClick: _cache[0] || (_cache[0] = withModifiers(() => {}, ["stop"])),
688
693
  onMousedown: _cache[1] || (_cache[1] = withModifiers(() => {}, ["stop"])),
689
694
  onDragstart: ($event) => onDragStart($event, row.node),
690
695
  onDragend: onDragEnd
691
- }, [createElementVNode("span", { class: normalizeClass(["ds-tree__drag-icon", unref(treeProps).dragHandleIcon]) }, null, 2)], 42, _hoisted_4)) : createCommentVNode("", true),
696
+ }, [createElementVNode("span", { class: normalizeClass(["gr-tree__drag-icon", unref(treeProps).dragHandleIcon]) }, null, 2)], 42, _hoisted_4)) : createCommentVNode("", true),
692
697
  !row.isLeaf ? (openBlock(), createElementBlock("button", {
693
698
  key: 1,
694
- "data-ds-tree-toggle": "",
699
+ "data-gr-tree-toggle": "",
695
700
  type: "button",
696
- class: normalizeClass(["ds-tree__toggle", resolveNodeClass(unref(treeProps).toggleClass, row)]),
697
- "aria-label": row.isExpanded ? unref(treeProps).collapseLabel : unref(treeProps).expandLabel,
701
+ class: normalizeClass(["gr-tree__toggle", resolveNodeClass(unref(treeProps).toggleClass, row)]),
702
+ "aria-label": row.isExpanded ? collapseLabel.value : expandLabel.value,
698
703
  onClick: withModifiers(($event) => toggleExpand(row.node), ["stop"])
699
- }, [createElementVNode("span", { class: normalizeClass(["ds-tree__toggle-icon", [
704
+ }, [createElementVNode("span", { class: normalizeClass(["gr-tree__toggle-icon", [
700
705
  row.isExpanded ? unref(treeProps).collapseIcon : unref(treeProps).expandIcon,
701
- row.isExpanded && unref(treeProps).toggleIconRotate ? "ds-tree__toggle-icon--expanded" : "",
706
+ row.isExpanded && unref(treeProps).toggleIconRotate ? "gr-tree__toggle-icon--expanded" : "",
702
707
  resolveNodeClass(unref(treeProps).toggleIconClass, row)
703
708
  ]]) }, null, 2)], 10, _hoisted_5)) : (openBlock(), createElementBlock("span", {
704
709
  key: 2,
705
- class: normalizeClass(["ds-tree__toggle-spacer", resolveNodeClass(unref(treeProps).toggleSpacerClass, row)])
710
+ class: normalizeClass(["gr-tree__toggle-spacer", resolveNodeClass(unref(treeProps).toggleSpacerClass, row)])
706
711
  }, null, 2)),
707
- createElementVNode("div", { class: normalizeClass(["ds-tree__content", resolveNodeClass(unref(treeProps).contentClass, row)]) }, [renderSlot(_ctx.$slots, "default", {
712
+ createElementVNode("div", { class: normalizeClass(["gr-tree__content", resolveNodeClass(unref(treeProps).contentClass, row)]) }, [renderSlot(_ctx.$slots, "default", {
708
713
  node: row.node,
709
714
  data: row.node.data
710
715
  }, () => [createElementVNode("span", _hoisted_6, toDisplayString(row.node.label), 1)], true)], 2)
711
716
  ], 42, _hoisted_3), row.children.length ? (openBlock(), createElementBlock("div", {
712
717
  key: 0,
713
- class: normalizeClass(["ds-tree__children-wrap ml-6", unref(treeProps).branchLine ? "ds-tree__children-wrap--with-branch" : ""]),
718
+ class: normalizeClass(["gr-tree__children-wrap ml-6", unref(treeProps).branchLine ? "gr-tree__children-wrap--with-branch" : ""]),
714
719
  style: normalizeStyle(resolveChildrenWrapStyle(row))
715
720
  }, [createVNode(_component_GrTree, mergeProps({ ref_for: true }, props, {
716
721
  data: [],
@@ -729,6 +734,6 @@ var GrTree_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PUR
729
734
  }), 128))], 10, _hoisted_1);
730
735
  };
731
736
  }
732
- }), [["__scopeId", "data-v-0d01877b"]]);
737
+ }), [["__scopeId", "data-v-e05489c9"]]);
733
738
  //#endregion
734
739
  export { GrTree_default as t };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrTree-D3ODe2dB.js","names":[],"sources":["../../../../src/components/GrTree/grTreeDataAdapter.ts","../../../../src/components/GrTree/grTreeInteractionContext.ts","../../../../src/components/GrTree/grTreeStore.ts","../../../../src/components/GrTree/GrTree.vue","../../../../src/components/GrTree/GrTree.vue"],"sourcesContent":["import type { GrTreeKey } from './grTreeTypes'\nimport type {\n GrTreeDataProps,\n GrTreePropsMap,\n} from './grTreeProps'\n\nconst DEFAULT_CHILDREN_KEY = 'children'\nconst DEFAULT_LABEL_KEY = 'label'\n\nexport type GrTreeDataAdapterOptions<T extends object> = Pick<GrTreeDataProps<T>, 'props' | 'nodeKey'>\n\nexport type GrTreeDataAdapter<T extends object> = {\n hasNodeKey: () => boolean\n getChildrenKey: () => string\n getLabelKey: () => string\n getLabel: (data: T) => string\n getChildren: (data: T) => T[]\n ensureChildren: (data: T) => T[]\n getNodeKey: (data: T, index: number, parentKey: GrTreeKey | undefined) => GrTreeKey\n getExplicitNodeKey: (data: T) => GrTreeKey | undefined\n}\n\nfunction isTreeKey(value: unknown): value is GrTreeKey {\n return typeof value === 'string' || typeof value === 'number'\n}\n\nfunction resolveMapValue(map: GrTreePropsMap | undefined, key: keyof GrTreePropsMap, fallback: string) {\n return map?.[key] ?? fallback\n}\n\nexport function createGrTreeDataAdapter<T extends Record<string, any> = any>(\n options: GrTreeDataAdapterOptions<T>,\n): GrTreeDataAdapter<T> {\n function hasNodeKey() {\n return options.nodeKey != null\n }\n\n function getChildrenKey() {\n return resolveMapValue(options.props, 'children', DEFAULT_CHILDREN_KEY)\n }\n\n function getLabelKey() {\n return resolveMapValue(options.props, 'label', DEFAULT_LABEL_KEY)\n }\n\n function getLabel(data: T): string {\n const key = getLabelKey() as keyof T\n const value = data[key]\n return value == null ? '' : String(value)\n }\n\n function getChildren(data: T): T[] {\n const key = getChildrenKey() as keyof T\n const value = data[key]\n return Array.isArray(value) ? (value as T[]) : []\n }\n\n function ensureChildren(data: T): T[] {\n const key = getChildrenKey()\n const value = (data as Record<string, unknown>)[key]\n if (Array.isArray(value))\n return value as T[]\n\n const children: T[] = []\n ;(data as Record<string, unknown>)[key] = children\n return children\n }\n\n function getExplicitNodeKey(data: T): GrTreeKey | undefined {\n if (options.nodeKey == null)\n return undefined\n\n const keyName = options.nodeKey as keyof T\n const value = data[keyName] as unknown\n return isTreeKey(value) ? value : undefined\n }\n\n function getNodeKey(data: T, index: number, parentKey: GrTreeKey | undefined): GrTreeKey {\n const explicitKey = getExplicitNodeKey(data)\n if (explicitKey != null)\n return explicitKey\n\n return parentKey == null ? index : `${String(parentKey)}:${index}`\n }\n\n return {\n hasNodeKey,\n getChildrenKey,\n getLabelKey,\n getLabel,\n getChildren,\n ensureChildren,\n getNodeKey,\n getExplicitNodeKey,\n }\n}","import type { Ref, ShallowRef } from 'vue'\nimport { ref, shallowRef } from 'vue'\nimport type {\n GrTreeAllowDropType,\n GrTreeKey,\n GrTreeNode,\n GrTreeNodeDropType,\n} from './grTreeTypes'\n\nexport type GrTreeDropTarget = {\n key: GrTreeKey\n type: GrTreeNodeDropType\n allowed: boolean\n}\n\nexport type GrTreeInteractionOptions<T> = {\n draggable?: boolean\n allowDrop?: (draggingNode: GrTreeNode<T>, dropNode: GrTreeNode<T>, type: GrTreeAllowDropType) => boolean\n allowDrag?: (draggingNode: GrTreeNode<T>) => boolean\n}\n\nexport type GrTreeInteractionEmitters<T> = {\n emitNodeClick: (data: T, node: GrTreeNode<T>) => void\n emitNodeExpand: (data: T, node: GrTreeNode<T>) => void\n emitNodeCollapse: (data: T, node: GrTreeNode<T>) => void\n emitNodeDrop: (draggingNode: GrTreeNode<T>, dropNode: GrTreeNode<T>, dropType: GrTreeNodeDropType) => void\n}\n\nexport type GrTreeInteractionContext<T> = {\n hoveredKey: Ref<GrTreeKey | undefined>\n draggingNode: ShallowRef<GrTreeNode<T> | null>\n dropTarget: ShallowRef<GrTreeDropTarget | null>\n canDrag: (node: GrTreeNode<T>) => boolean\n canDrop: (drag: GrTreeNode<T>, target: GrTreeNode<T>, type: GrTreeAllowDropType) => boolean\n resetDragState: () => void\n emitNodeClick: (data: T, node: GrTreeNode<T>) => void\n emitNodeExpand: (data: T, node: GrTreeNode<T>) => void\n emitNodeCollapse: (data: T, node: GrTreeNode<T>) => void\n emitNodeDrop: (draggingNode: GrTreeNode<T>, dropNode: GrTreeNode<T>, dropType: GrTreeNodeDropType) => void\n}\n\nexport function createGrTreeInteractionContext<T>(\n options: GrTreeInteractionOptions<T>,\n emitters: GrTreeInteractionEmitters<T>,\n): GrTreeInteractionContext<T> {\n const hoveredKey = ref<GrTreeKey | undefined>(undefined)\n const draggingNode = shallowRef<GrTreeNode<T> | null>(null)\n const dropTarget = shallowRef<GrTreeDropTarget | null>(null)\n\n function canDrag(node: GrTreeNode<T>): boolean {\n if (!options.draggable)\n return false\n\n if (options.allowDrag)\n return options.allowDrag(node)\n\n return true\n }\n\n function canDrop(drag: GrTreeNode<T>, target: GrTreeNode<T>, type: GrTreeAllowDropType): boolean {\n if (!options.allowDrop)\n return true\n\n return options.allowDrop(drag, target, type)\n }\n\n function resetDragState() {\n draggingNode.value = null\n dropTarget.value = null\n }\n\n return {\n hoveredKey,\n draggingNode,\n dropTarget,\n canDrag,\n canDrop,\n resetDragState,\n ...emitters,\n }\n}","import type { ComputedRef, MaybeRefOrGetter, Ref, ShallowRef } from 'vue'\nimport { computed, ref, shallowRef, toValue, watch } from 'vue'\nimport type {\n GrTreeKey,\n GrTreeNode,\n GrTreeNodeDropType,\n GrTreeNodeTarget,\n} from './grTreeTypes'\nimport type { GrTreeDataAdapter } from './grTreeDataAdapter'\nimport type { GrTreeDataProps, GrTreeFilterNodeMethod } from './grTreeProps'\n\ntype TreeModel<T extends object> = {\n roots: GrTreeNode<T>[]\n byKey: Map<GrTreeKey, GrTreeNode<T>>\n byData: WeakMap<T, GrTreeNode<T>>\n}\n\ntype FilterInfo = {\n isActive: boolean\n subtreeHasMatch: Map<GrTreeKey, boolean>\n matchedKeys: Set<GrTreeKey>\n autoExpandKeys: Set<GrTreeKey>\n}\n\nexport type GrTreeStoreOptions<T extends object> = {\n data: MaybeRefOrGetter<GrTreeDataProps<T>['data']>\n defaultExpandedKeys?: MaybeRefOrGetter<GrTreeDataProps<T>['defaultExpandedKeys']>\n filterNodeMethod?: MaybeRefOrGetter<GrTreeFilterNodeMethod<T> | undefined>\n adapter: GrTreeDataAdapter<T>\n}\n\nexport type GrTreeStore<T extends object> = {\n filterValue: Ref<string>\n expandedKeys: ShallowRef<Set<GrTreeKey>>\n currentKey: Ref<GrTreeKey | undefined>\n treeModel: ComputedRef<TreeModel<T>>\n filterInfo: ComputedRef<FilterInfo>\n filter: (value: string) => void\n isExpandedKey: (key: GrTreeKey) => boolean\n setExpandedKey: (key: GrTreeKey, expanded: boolean) => void\n toggleExpand: (node: GrTreeNode<T>) => void\n setCurrentKey: (key?: GrTreeKey) => void\n getCurrentKey: () => GrTreeKey | undefined\n getCurrentNode: () => GrTreeNode<T> | undefined\n setCurrentNode: (node?: GrTreeNodeTarget<T>) => boolean\n getNode: (key: GrTreeKey) => GrTreeNode<T> | undefined\n canMoveNode: (node: GrTreeNodeTarget<T>, referenceNode: GrTreeNodeTarget<T>, dropType: GrTreeNodeDropType) => boolean\n moveNode: (node: GrTreeNodeTarget<T>, referenceNode: GrTreeNodeTarget<T>, dropType: GrTreeNodeDropType) => GrTreeNode<T> | undefined\n appendNode: (data: T, parent: GrTreeNodeTarget<T>) => GrTreeNode<T> | undefined\n removeNode: (node: GrTreeNodeTarget<T>) => boolean\n insertNodeBefore: (data: T, referenceNode: GrTreeNodeTarget<T>) => GrTreeNode<T> | undefined\n insertNodeAfter: (data: T, referenceNode: GrTreeNodeTarget<T>) => GrTreeNode<T> | undefined\n}\n\nexport function createGrTreeStore<T extends Record<string, any> = any>(\n options: GrTreeStoreOptions<T>,\n): GrTreeStore<T> {\n const filterValue = ref('')\n const expandedKeys = shallowRef<Set<GrTreeKey>>(new Set())\n const currentKey = ref<GrTreeKey | undefined>(undefined)\n const getData = () => toValue(options.data) ?? []\n const getFilterNodeMethod = () => toValue(options.filterNodeMethod)\n\n watch(\n () => toValue(options.defaultExpandedKeys),\n (keys) => {\n expandedKeys.value = new Set(keys ?? [])\n },\n { immediate: true },\n )\n\n const treeModel = computed<TreeModel<T>>(() => {\n const byKey = new Map<GrTreeKey, GrTreeNode<T>>()\n const byData = new WeakMap<T, GrTreeNode<T>>()\n\n const build = (items: T[], parent: GrTreeNode<T> | undefined, level: number): GrTreeNode<T>[] => {\n return items.map((item, index) => {\n const node: GrTreeNode<T> = {\n key: options.adapter.getNodeKey(item, index, parent?.key),\n label: options.adapter.getLabel(item),\n data: item,\n level,\n parent,\n childNodes: [],\n }\n\n byKey.set(node.key, node)\n byData.set(item, node)\n node.childNodes = build(options.adapter.getChildren(item), node, level + 1)\n\n return node\n })\n }\n\n return {\n roots: build(getData(), undefined, 1),\n byKey,\n byData,\n }\n })\n\n const filterInfo = computed<FilterInfo>(() => {\n const value = filterValue.value\n const isActive = value.trim().length > 0\n const valueLower = value.toLowerCase()\n const subtreeHasMatch = new Map<GrTreeKey, boolean>()\n const matchedKeys = new Set<GrTreeKey>()\n const autoExpandKeys = new Set<GrTreeKey>()\n\n if (!isActive) {\n return {\n isActive,\n subtreeHasMatch,\n matchedKeys,\n autoExpandKeys,\n }\n }\n\n const match = (node: GrTreeNode<T>): boolean => {\n const filterNodeMethod = getFilterNodeMethod()\n if (filterNodeMethod)\n return filterNodeMethod(value, node.data, node)\n\n return node.label.toLowerCase().includes(valueLower)\n }\n\n const walk = (nodes: GrTreeNode<T>[]): boolean => {\n let any = false\n\n for (const node of nodes) {\n const self = match(node)\n const childAny = walk(node.childNodes)\n const has = self || childAny\n\n subtreeHasMatch.set(node.key, has)\n\n if (self)\n matchedKeys.add(node.key)\n\n if (childAny)\n autoExpandKeys.add(node.key)\n\n any ||= has\n }\n\n return any\n }\n\n walk(treeModel.value.roots)\n\n return {\n isActive,\n subtreeHasMatch,\n matchedKeys,\n autoExpandKeys,\n }\n })\n\n function getNode(key: GrTreeKey) {\n return treeModel.value.byKey.get(key)\n }\n\n function findNodeByData(data: T): GrTreeNode<T> | undefined {\n return treeModel.value.byData.get(data)\n }\n\n function isTreeNode(target: GrTreeNodeTarget<T>): target is GrTreeNode<T> {\n return typeof target === 'object'\n && target !== null\n && 'key' in target\n && 'data' in target\n && 'childNodes' in target\n }\n\n function resolveNodeTarget(target?: GrTreeNodeTarget<T>): GrTreeNode<T> | undefined {\n if (target == null)\n return undefined\n\n if (typeof target === 'string' || typeof target === 'number')\n return getNode(target)\n\n if (isTreeNode(target))\n return getNode(target.key) ?? target\n\n const key = options.adapter.getExplicitNodeKey(target)\n if (key != null)\n return getNode(key)\n\n return findNodeByData(target)\n }\n\n function getNodeContainer(node: GrTreeNode<T>) {\n const items = node.parent ? options.adapter.ensureChildren(node.parent.data) : getData()\n\n let index = items.findIndex(item => item === node.data)\n if (index >= 0)\n return { items, index }\n\n const key = options.adapter.getExplicitNodeKey(node.data)\n if (key == null)\n return undefined\n\n index = items.findIndex(item => options.adapter.getExplicitNodeKey(item) === key)\n if (index < 0)\n return undefined\n\n return { items, index }\n }\n\n function isDescendantNode(ancestor: GrTreeNode<T>, node: GrTreeNode<T>) {\n let current = node.parent\n\n while (current) {\n if (current.key === ancestor.key)\n return true\n\n current = current.parent\n }\n\n return false\n }\n\n function canMoveNode(node: GrTreeNodeTarget<T>, referenceNode: GrTreeNodeTarget<T>, dropType: GrTreeNodeDropType) {\n const sourceNode = resolveNodeTarget(node)\n const targetNode = resolveNodeTarget(referenceNode)\n\n if (!sourceNode || !targetNode)\n return false\n\n if (sourceNode.key === targetNode.key)\n return false\n\n if (isDescendantNode(sourceNode, targetNode))\n return false\n\n const sourceContainer = getNodeContainer(sourceNode)\n if (!sourceContainer)\n return false\n\n if (dropType === 'inner')\n return true\n\n return Boolean(getNodeContainer(targetNode))\n }\n\n function sanitizeTreeState() {\n const byKey = treeModel.value.byKey\n\n if (currentKey.value != null && !byKey.has(currentKey.value))\n currentKey.value = undefined\n\n const nextExpandedKeys = new Set(Array.from(expandedKeys.value).filter(key => byKey.has(key)))\n if (nextExpandedKeys.size !== expandedKeys.value.size)\n expandedKeys.value = nextExpandedKeys\n }\n\n function isExpandedKey(key: GrTreeKey): boolean {\n return expandedKeys.value.has(key)\n }\n\n function setExpandedKey(key: GrTreeKey, expanded: boolean) {\n const next = new Set(expandedKeys.value)\n\n if (expanded)\n next.add(key)\n else\n next.delete(key)\n\n expandedKeys.value = next\n }\n\n function toggleExpand(node: GrTreeNode<T>) {\n setExpandedKey(node.key, !isExpandedKey(node.key))\n }\n\n function setCurrentKey(key?: GrTreeKey) {\n currentKey.value = key\n }\n\n function getCurrentKey() {\n return currentKey.value\n }\n\n function getCurrentNode() {\n const key = currentKey.value\n return key == null ? undefined : getNode(key)\n }\n\n function setCurrentNode(node?: GrTreeNodeTarget<T>) {\n if (node == null) {\n currentKey.value = undefined\n return true\n }\n\n const targetNode = resolveNodeTarget(node)\n if (!targetNode)\n return false\n\n currentKey.value = targetNode.key\n return true\n }\n\n function resolveInsertedNode(data: T) {\n const key = options.adapter.getExplicitNodeKey(data)\n if (key != null)\n return getNode(key)\n\n return findNodeByData(data)\n }\n\n function moveNode(node: GrTreeNodeTarget<T>, referenceNode: GrTreeNodeTarget<T>, dropType: GrTreeNodeDropType) {\n const sourceNode = resolveNodeTarget(node)\n const targetNode = resolveNodeTarget(referenceNode)\n\n if (!sourceNode || !targetNode)\n return undefined\n\n if (!canMoveNode(sourceNode, targetNode, dropType))\n return undefined\n\n const sourceContainer = getNodeContainer(sourceNode)\n if (!sourceContainer)\n return undefined\n\n let destinationItems: T[]\n let destinationIndex: number\n\n if (dropType === 'inner') {\n destinationItems = options.adapter.ensureChildren(targetNode.data)\n destinationIndex = destinationItems.length\n }\n else {\n const targetContainer = getNodeContainer(targetNode)\n if (!targetContainer)\n return undefined\n\n destinationItems = targetContainer.items\n destinationIndex = dropType === 'prev'\n ? targetContainer.index\n : targetContainer.index + 1\n }\n\n if (destinationItems === sourceContainer.items && sourceContainer.index < destinationIndex)\n destinationIndex -= 1\n\n const [movedData] = sourceContainer.items.splice(sourceContainer.index, 1)\n destinationItems.splice(destinationIndex, 0, movedData)\n\n if (dropType === 'inner')\n setExpandedKey(targetNode.key, true)\n\n sanitizeTreeState()\n return resolveInsertedNode(movedData)\n }\n\n function appendNode(data: T, parent: GrTreeNodeTarget<T>) {\n const parentNode = resolveNodeTarget(parent)\n if (!parentNode)\n return undefined\n\n options.adapter.ensureChildren(parentNode.data).push(data)\n setExpandedKey(parentNode.key, true)\n sanitizeTreeState()\n return resolveInsertedNode(data)\n }\n\n function removeNode(node: GrTreeNodeTarget<T>) {\n if (!options.adapter.hasNodeKey())\n return false\n\n const targetNode = resolveNodeTarget(node)\n if (!targetNode)\n return false\n\n const container = getNodeContainer(targetNode)\n if (!container)\n return false\n\n container.items.splice(container.index, 1)\n sanitizeTreeState()\n return true\n }\n\n function insertNodeBefore(data: T, referenceNode: GrTreeNodeTarget<T>) {\n const targetNode = resolveNodeTarget(referenceNode)\n if (!targetNode)\n return undefined\n\n const container = getNodeContainer(targetNode)\n if (!container)\n return undefined\n\n container.items.splice(container.index, 0, data)\n sanitizeTreeState()\n return resolveInsertedNode(data)\n }\n\n function insertNodeAfter(data: T, referenceNode: GrTreeNodeTarget<T>) {\n const targetNode = resolveNodeTarget(referenceNode)\n if (!targetNode)\n return undefined\n\n const container = getNodeContainer(targetNode)\n if (!container)\n return undefined\n\n container.items.splice(container.index + 1, 0, data)\n sanitizeTreeState()\n return resolveInsertedNode(data)\n }\n\n function filter(value: string) {\n filterValue.value = value\n }\n\n return {\n filterValue,\n expandedKeys,\n currentKey,\n treeModel,\n filterInfo,\n filter,\n isExpandedKey,\n setExpandedKey,\n toggleExpand,\n setCurrentKey,\n getCurrentKey,\n getCurrentNode,\n setCurrentNode,\n getNode,\n canMoveNode,\n moveNode,\n appendNode,\n removeNode,\n insertNodeBefore,\n insertNodeAfter,\n }\n}","<script setup lang=\"ts\" generic=\"T extends Record<string, any> = any\">\nimport { computed } from 'vue'\nimport type {\n GrTreeAllowDropType,\n GrTreeInstance,\n GrTreeNode,\n GrTreeNodeDropType,\n} from './grTreeTypes'\nimport { createGrTreeDataAdapter } from './grTreeDataAdapter'\nimport { createGrTreeInteractionContext } from './grTreeInteractionContext'\nimport { createGrTreeStore } from './grTreeStore'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport type {\n GrTreeBranchLineColor,\n GrTreeNodeClass,\n GrTreeProps,\n GrTreeVisibleRow,\n GrTreeVisibleTreeRow,\n} from './grTreeProps'\n\ndefineOptions({\n name: 'GrTree',\n})\n\nconst DEFAULT_BRANCH_LINE_COLOR = 'var(--gr-tree-branch-line-default-color, #e2e8f0)'\n\nconst props = withDefaults(defineProps<GrTreeProps<T>>(), {\n props: () => ({\n children: 'children',\n label: 'label',\n }),\n nodeKey: 'id' as any,\n defaultExpandedKeys: () => [],\n highlightCurrent: true,\n indent: 0,\n expandIcon: 'i-lucide-chevron-right',\n collapseIcon: 'i-lucide-chevron-right',\n toggleIconRotate: true,\n branchLine: false,\n branchLineColor: undefined,\n branchLineActiveColor: undefined,\n draggable: false,\n dragHandleIcon: 'i-lucide-grip-vertical',\n dragLabel: undefined,\n expandLabel: undefined,\n collapseLabel: undefined,\n rowClass: undefined,\n dragHandleClass: undefined,\n toggleClass: undefined,\n toggleIconClass: undefined,\n toggleSpacerClass: undefined,\n contentClass: undefined,\n internalRows: undefined,\n internalNested: false,\n internalStore: undefined,\n})\n\nconst emit = defineEmits<{\n (event: 'nodeClick', data: T, node: GrTreeNode<T>): void\n (event: 'nodeExpand', data: T, node: GrTreeNode<T>): void\n (event: 'nodeCollapse', data: T, node: GrTreeNode<T>): void\n (event: 'nodeDrop', draggingNode: GrTreeNode<T>, dropNode: GrTreeNode<T>, dropType: GrTreeNodeDropType): void\n}>()\n\ndefineSlots<{\n default?: (props: { node: GrTreeNode<T>; data: T }) => any\n}>()\n\nconst dataAdapter = createGrTreeDataAdapter(props)\nconst treeStore = props.internalStore ?? createGrTreeStore({\n adapter: dataAdapter,\n data: () => props.data,\n defaultExpandedKeys: () => props.defaultExpandedKeys,\n filterNodeMethod: () => props.filterNodeMethod,\n})\nconst interactionContext = props.internalInteractionContext ?? createGrTreeInteractionContext(props, {\n emitNodeClick: (data, node) => emit('nodeClick', data, node),\n emitNodeExpand: (data, node) => emit('nodeExpand', data, node),\n emitNodeCollapse: (data, node) => emit('nodeCollapse', data, node),\n emitNodeDrop: (draggingNode, dropNode, dropType) => emit('nodeDrop', draggingNode, dropNode, dropType),\n})\n\nconst treeProps = props as Readonly<GrTreeProps<T>>\n\nconst { t } = useGranularityTranslations()\nconst dragLabel = computed(() => treeProps.dragLabel ?? t('gr.tree.drag', 'Drag'))\nconst expandLabel = computed(() => treeProps.expandLabel ?? t('gr.tree.expand', 'Expand'))\nconst collapseLabel = computed(() => treeProps.collapseLabel ?? t('gr.tree.collapse', 'Collapse'))\nconst currentKey = treeStore.currentKey\nconst hoveredKey = interactionContext.hoveredKey\nconst dropTarget = interactionContext.dropTarget\n\nconst visibleRows = computed<GrTreeVisibleTreeRow<T>[]>(() => {\n if (props.internalRows)\n return props.internalRows\n\n const { roots } = treeStore.treeModel.value\n const { isActive, subtreeHasMatch, matchedKeys, autoExpandKeys } = treeStore.filterInfo.value\n\n const walk = (nodes: GrTreeNode<T>[]): GrTreeVisibleTreeRow<T>[] => {\n const rows: GrTreeVisibleTreeRow<T>[] = []\n\n for (const node of nodes) {\n if (isActive && !subtreeHasMatch.get(node.key))\n continue\n\n const isLeaf = node.childNodes.length === 0\n const isMatched = matchedKeys.has(node.key)\n const isExpanded = treeStore.isExpandedKey(node.key) || (isActive && autoExpandKeys.has(node.key))\n\n rows.push({\n node,\n isExpanded,\n isLeaf,\n isMatched,\n children: isExpanded ? walk(node.childNodes) : [],\n })\n }\n\n return rows\n }\n\n return walk(roots)\n})\n\nfunction onRowClick(node: GrTreeNode<T>) {\n treeStore.setCurrentKey(node.key)\n interactionContext.emitNodeClick(node.data, node)\n}\n\nfunction onRowMouseEnter(node: GrTreeNode<T>) {\n hoveredKey.value = node.key\n}\n\nfunction onRowMouseLeave(node: GrTreeNode<T>) {\n if (hoveredKey.value === node.key)\n hoveredKey.value = undefined\n}\n\nfunction toggleExpand(node: GrTreeNode<T>) {\n const expanded = !treeStore.isExpandedKey(node.key)\n treeStore.toggleExpand(node)\n\n if (expanded)\n interactionContext.emitNodeExpand(node.data, node)\n else\n interactionContext.emitNodeCollapse(node.data, node)\n}\n\n// Drag & drop\nfunction canDrag(node: GrTreeNode<T>): boolean {\n return interactionContext.canDrag(node)\n}\n\nfunction shouldShowDragHandle(node: GrTreeNode<T>): boolean {\n return canDrag(node) && hoveredKey.value === node.key\n}\n\nfunction resolveDropType(evt: DragEvent, el: HTMLElement): GrTreeNodeDropType {\n const rect = el.getBoundingClientRect()\n const y = evt.clientY - rect.top\n const third = rect.height / 3\n if (y < third)\n return 'prev'\n if (y > third * 2)\n return 'next'\n return 'inner'\n}\n\nfunction canDrop(drag: GrTreeNode<T>, target: GrTreeNode<T>, type: GrTreeAllowDropType): boolean {\n return interactionContext.canDrop(drag, target, type)\n}\n\nfunction onDragStart(evt: DragEvent, node: GrTreeNode<T>) {\n if (!canDrag(node)) {\n evt.preventDefault()\n return\n }\n\n interactionContext.draggingNode.value = node\n interactionContext.dropTarget.value = null\n try {\n evt.dataTransfer?.setData('text/plain', String(node.key))\n }\n catch {\n // ignore\n }\n if (evt.dataTransfer)\n evt.dataTransfer.effectAllowed = 'move'\n}\n\nfunction onDragEnd() {\n interactionContext.resetDragState()\n}\n\nfunction onDragOver(evt: DragEvent, node: GrTreeNode<T>, rowEl: HTMLElement) {\n const drag = interactionContext.draggingNode.value\n if (!treeProps.draggable || !drag)\n return\n\n // required for `drop` to fire\n evt.preventDefault()\n\n const type = resolveDropType(evt, rowEl)\n const allowed = treeStore.canMoveNode(drag, node, type) && canDrop(drag, node, type)\n interactionContext.dropTarget.value = { key: node.key, type, allowed }\n if (evt.dataTransfer)\n evt.dataTransfer.dropEffect = allowed ? 'move' : 'none'\n}\n\nfunction onDrop(evt: DragEvent, node: GrTreeNode<T>) {\n const drag = interactionContext.draggingNode.value\n const target = interactionContext.dropTarget.value\n if (!treeProps.draggable || !drag || !target)\n return\n\n evt.preventDefault()\n\n if (target.key === node.key && target.allowed) {\n const movedNode = treeStore.moveNode(drag, node, target.type)\n if (movedNode) {\n const dropNode = treeStore.getNode(node.key) ?? node\n interactionContext.emitNodeDrop(movedNode, dropNode, target.type)\n }\n }\n\n interactionContext.resetDragState()\n}\n\nfunction filter(value: string) {\n treeStore.filter(value)\n}\n\nfunction resolveNodeClass(classValue: GrTreeNodeClass<T> | undefined, row: GrTreeVisibleRow<T>) {\n if (!classValue)\n return undefined\n\n return typeof classValue === 'function'\n ? classValue(row)\n : classValue\n}\n\nfunction resolveBranchLineColorValue(color: GrTreeBranchLineColor<T> | undefined, node: GrTreeNode<T>) {\n if (!color)\n return undefined\n\n return typeof color === 'function'\n ? color(node) ?? undefined\n : color\n}\n\nfunction isBranchLineActive(node: GrTreeNode<T>) {\n const selectedKey = currentKey.value\n\n if (selectedKey == null)\n return false\n\n if (node.key === selectedKey)\n return true\n\n return node.childNodes.some(child => child.key === selectedKey && !treeStore.isExpandedKey(child.key))\n}\n\nfunction resolveBranchLineColor(node: GrTreeNode<T>) {\n const defaultColor = resolveBranchLineColorValue(treeProps.branchLineColor, node) ?? DEFAULT_BRANCH_LINE_COLOR\n\n if (!isBranchLineActive(node))\n return defaultColor\n\n return resolveBranchLineColorValue(treeProps.branchLineActiveColor, node) ?? defaultColor\n}\n\nfunction resolveChildrenWrapStyle(row: GrTreeVisibleTreeRow<T>) {\n if (!treeProps.branchLine)\n return {\n }\n\n return {\n '--gr-tree-branch-line-color': resolveBranchLineColor(row.node),\n }\n}\n\ndefineExpose<GrTreeInstance<T>>({\n appendNode: treeStore.appendNode,\n filter,\n getCurrentNode: treeStore.getCurrentNode,\n setCurrentKey: treeStore.setCurrentKey,\n getCurrentKey: treeStore.getCurrentKey,\n getNode: treeStore.getNode,\n insertNodeAfter: treeStore.insertNodeAfter,\n insertNodeBefore: treeStore.insertNodeBefore,\n removeNode: treeStore.removeNode,\n setCurrentNode: treeStore.setCurrentNode,\n})\n</script>\n\n<template>\n <div\n :data-gr-tree=\"props.internalNested ? undefined : ''\"\n :class=\"props.internalNested ? 'gr-tree__children' : 'gr-tree'\"\n :role=\"props.internalNested ? 'group' : 'tree'\"\n >\n <div\n v-for=\"row in visibleRows\"\n :key=\"row.node.key\"\n data-gr-tree-node\n role=\"treeitem\"\n :aria-level=\"row.node.level\"\n :aria-expanded=\"row.isLeaf ? undefined : row.isExpanded\"\n >\n <div\n data-gr-tree-row\n class=\"gr-tree__row py-2 px-2\"\n :class=\"[\n treeProps.highlightCurrent && currentKey === row.node.key ? 'gr-tree__row--current' : '',\n row.isMatched ? 'gr-tree__row--matched' : '',\n dropTarget?.key === row.node.key && dropTarget.allowed && dropTarget.type === 'inner' ? 'gr-tree__row--drop-inner' : '',\n dropTarget?.key === row.node.key && dropTarget.allowed && dropTarget.type === 'prev' ? 'gr-tree__row--drop-prev' : '',\n dropTarget?.key === row.node.key && dropTarget.allowed && dropTarget.type === 'next' ? 'gr-tree__row--drop-next' : '',\n resolveNodeClass(treeProps.rowClass, row),\n ]\"\n tabindex=\"0\"\n @click=\"onRowClick(row.node)\"\n @drop=\"onDrop($event, row.node)\"\n @dragover=\"onDragOver($event, row.node, $event.currentTarget as HTMLElement)\"\n @mouseenter=\"onRowMouseEnter(row.node)\"\n @mouseleave=\"onRowMouseLeave(row.node)\"\n >\n <button\n v-if=\"treeProps.draggable\"\n type=\"button\"\n data-gr-tree-drag-handle\n class=\"gr-tree__drag-handle\"\n :class=\"[\n shouldShowDragHandle(row.node) ? 'gr-tree__drag-handle--visible' : '',\n canDrag(row.node) ? '' : 'gr-tree__drag-handle--disabled',\n resolveNodeClass(treeProps.dragHandleClass, row),\n ]\"\n :aria-label=\"dragLabel\"\n :draggable=\"canDrag(row.node)\"\n @click.stop\n @mousedown.stop\n @dragstart=\"onDragStart($event, row.node)\"\n @dragend=\"onDragEnd\"\n >\n <span class=\"gr-tree__drag-icon\" :class=\"treeProps.dragHandleIcon\" />\n </button>\n\n <button\n v-if=\"!row.isLeaf\"\n data-gr-tree-toggle\n type=\"button\"\n class=\"gr-tree__toggle\"\n :class=\"resolveNodeClass(treeProps.toggleClass, row)\"\n :aria-label=\"row.isExpanded ? collapseLabel : expandLabel\"\n @click.stop=\"toggleExpand(row.node)\"\n >\n <span\n class=\"gr-tree__toggle-icon\"\n :class=\"[\n row.isExpanded ? treeProps.collapseIcon : treeProps.expandIcon,\n row.isExpanded && treeProps.toggleIconRotate ? 'gr-tree__toggle-icon--expanded' : '',\n resolveNodeClass(treeProps.toggleIconClass, row),\n ]\"\n />\n </button>\n <span\n v-else\n class=\"gr-tree__toggle-spacer\"\n :class=\"resolveNodeClass(treeProps.toggleSpacerClass, row)\"\n />\n\n <div class=\"gr-tree__content\" :class=\"resolveNodeClass(treeProps.contentClass, row)\">\n <slot\n :node=\"row.node\"\n :data=\"row.node.data\"\n >\n <span class=\"gr-tree__label\">{{ row.node.label }}</span>\n </slot>\n </div>\n </div>\n\n <div\n v-if=\"row.children.length\"\n class=\"gr-tree__children-wrap ml-6\"\n :class=\"treeProps.branchLine ? 'gr-tree__children-wrap--with-branch' : ''\"\n :style=\"resolveChildrenWrapStyle(row)\"\n >\n <GrTree\n v-bind=\"props\"\n :data=\"[]\"\n :internal-rows=\"row.children\"\n internal-nested\n :internal-store=\"treeStore\"\n :internal-interaction-context=\"interactionContext\"\n >\n <template #default=\"slotProps\">\n <slot v-bind=\"slotProps\">\n <span class=\"gr-tree__label\">{{ slotProps.node.label }}</span>\n </slot>\n </template>\n </GrTree>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.gr-tree {\n --gr-tree-gap: 2px;\n --gr-tree-children-pl: 10px;\n --gr-tree-row-min-height: 28px;\n --gr-tree-row-radius: 8px;\n --gr-tree-row-pr: 8px;\n --gr-tree-row-color: var(--fg);\n --gr-tree-row-hover-bg: color-mix(in srgb, var(--primary, #000) 10%, transparent);\n --gr-tree-row-current-bg: color-mix(in srgb, var(--primary, #000) 5%, transparent);\n --gr-tree-row-current-hover-bg: color-mix(in srgb, var(--primary, #000) 16%, transparent);\n --gr-tree-drag-handle-size: 24px;\n --gr-tree-drag-handle-mr: 0;\n --gr-tree-drag-handle-radius: 6px;\n --gr-tree-drag-handle-color: inherit;\n --gr-tree-drag-handle-opacity: 0.55;\n --gr-tree-drag-handle-hover-bg: color-mix(in srgb, var(--muted, #000) 22%, transparent);\n --gr-tree-drag-handle-hover-color: var(--gr-tree-drag-handle-color);\n --gr-tree-drag-handle-hover-opacity: 0.9;\n --gr-tree-drag-handle-disabled-opacity: 0.25;\n --gr-tree-toggle-size: 24px;\n --gr-tree-toggle-mr: 0;\n --gr-tree-toggle-radius: 6px;\n --gr-tree-toggle-color: inherit;\n --gr-tree-toggle-hover-bg: color-mix(in srgb, var(--muted, #000) 25%, transparent);\n --gr-tree-toggle-hover-color: var(--gr-tree-toggle-color);\n --gr-tree-icon-size: 16px;\n --gr-tree-content-gap: 8px;\n --gr-tree-branch-line-default-color: var(--gr-tree-row-current-bg);\n --gr-tree-branch-line-width: 2px;\n display: flex;\n flex-direction: column;\n gap: var(--gr-tree-gap);\n}\n\n.gr-tree__children {\n display: flex;\n flex-direction: column;\n gap: var(--gr-tree-gap);\n}\n\n.gr-tree__children-wrap {\n --gr-tree-branch-line-color: var(--gr-tree-branch-line-default-color);\n display: flex;\n flex-direction: column;\n gap: var(--gr-tree-gap);\n padding-left: var(--gr-tree-children-pl, 10px);\n border-left: var(--gr-tree-branch-line-width) solid transparent;\n}\n\n.gr-tree__children-wrap--with-branch {\n border-left-color: var(--gr-tree-branch-line-color, var(--gr-tree-branch-line-default-color));\n}\n\n.gr-tree__row {\n position: relative;\n display: flex;\n align-items: center;\n min-height: var(--gr-tree-row-min-height);\n border-radius: var(--gr-tree-row-radius);\n padding-right: var(--gr-tree-row-pr);\n cursor: default;\n user-select: none;\n outline: none;\n color: var(--gr-tree-row-color);\n}\n\n.gr-tree__row:hover {\n background: var(--gr-tree-row-hover-bg);\n}\n\n.gr-tree__row--current {\n background: var(--gr-tree-row-current-bg);\n}\n\n.gr-tree__row--current:hover {\n background: var(--gr-tree-row-current-hover-bg);\n}\n\n.gr-tree__row--matched .gr-tree__label {\n font-weight: 600;\n}\n\n.gr-tree__drag-handle {\n width: var(--gr-tree-drag-handle-size);\n height: var(--gr-tree-drag-handle-size);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-right: var(--gr-tree-drag-handle-mr);\n border-radius: var(--gr-tree-drag-handle-radius);\n color: var(--gr-tree-drag-handle-color);\n cursor: grab;\n visibility: hidden;\n pointer-events: none;\n opacity: 0;\n}\n\n.gr-tree__drag-handle--visible {\n visibility: visible;\n pointer-events: auto;\n opacity: var(--gr-tree-drag-handle-opacity);\n}\n\n.gr-tree__drag-handle:hover {\n background: var(--gr-tree-drag-handle-hover-bg);\n color: var(--gr-tree-drag-handle-hover-color);\n opacity: var(--gr-tree-drag-handle-hover-opacity);\n}\n\n.gr-tree__drag-handle:active {\n cursor: grabbing;\n}\n\n.gr-tree__drag-handle--disabled {\n cursor: default;\n opacity: var(--gr-tree-drag-handle-disabled-opacity);\n}\n\n.gr-tree__drag-icon {\n width: var(--gr-tree-icon-size);\n height: var(--gr-tree-icon-size);\n}\n\n.gr-tree__toggle {\n width: var(--gr-tree-toggle-size);\n height: var(--gr-tree-toggle-size);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-right: var(--gr-tree-toggle-mr);\n border-radius: var(--gr-tree-toggle-radius);\n color: var(--gr-tree-toggle-color);\n}\n\n.gr-tree__toggle:hover {\n background: var(--gr-tree-toggle-hover-bg);\n color: var(--gr-tree-toggle-hover-color);\n}\n\n.gr-tree__toggle-icon {\n width: var(--gr-tree-icon-size);\n height: var(--gr-tree-icon-size);\n transition: transform 120ms ease;\n}\n\n.gr-tree__toggle-icon--expanded {\n transform: rotate(90deg);\n}\n\n.gr-tree__toggle-spacer {\n width: var(--gr-tree-toggle-size);\n height: var(--gr-tree-toggle-size);\n margin-right: var(--gr-tree-toggle-mr);\n display: inline-block;\n}\n\n.gr-tree__content {\n min-width: 0;\n display: flex;\n align-items: center;\n gap: var(--gr-tree-content-gap);\n}\n\n.gr-tree__label {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.gr-tree__row--drop-inner {\n outline: 2px solid color-mix(in srgb, var(--primary, #000) 40%, transparent);\n}\n\n.gr-tree__row--drop-prev::before,\n.gr-tree__row--drop-next::after {\n content: '';\n position: absolute;\n left: 8px;\n right: 8px;\n height: 2px;\n background: color-mix(in srgb, var(--primary, #000) 55%, transparent);\n}\n\n.gr-tree__row--drop-prev::before {\n top: 2px;\n}\n\n.gr-tree__row--drop-next::after {\n bottom: 2px;\n}\n</style>\n","<script setup lang=\"ts\" generic=\"T extends Record<string, any> = any\">\nimport { computed } from 'vue'\nimport type {\n GrTreeAllowDropType,\n GrTreeInstance,\n GrTreeNode,\n GrTreeNodeDropType,\n} from './grTreeTypes'\nimport { createGrTreeDataAdapter } from './grTreeDataAdapter'\nimport { createGrTreeInteractionContext } from './grTreeInteractionContext'\nimport { createGrTreeStore } from './grTreeStore'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport type {\n GrTreeBranchLineColor,\n GrTreeNodeClass,\n GrTreeProps,\n GrTreeVisibleRow,\n GrTreeVisibleTreeRow,\n} from './grTreeProps'\n\ndefineOptions({\n name: 'GrTree',\n})\n\nconst DEFAULT_BRANCH_LINE_COLOR = 'var(--gr-tree-branch-line-default-color, #e2e8f0)'\n\nconst props = withDefaults(defineProps<GrTreeProps<T>>(), {\n props: () => ({\n children: 'children',\n label: 'label',\n }),\n nodeKey: 'id' as any,\n defaultExpandedKeys: () => [],\n highlightCurrent: true,\n indent: 0,\n expandIcon: 'i-lucide-chevron-right',\n collapseIcon: 'i-lucide-chevron-right',\n toggleIconRotate: true,\n branchLine: false,\n branchLineColor: undefined,\n branchLineActiveColor: undefined,\n draggable: false,\n dragHandleIcon: 'i-lucide-grip-vertical',\n dragLabel: undefined,\n expandLabel: undefined,\n collapseLabel: undefined,\n rowClass: undefined,\n dragHandleClass: undefined,\n toggleClass: undefined,\n toggleIconClass: undefined,\n toggleSpacerClass: undefined,\n contentClass: undefined,\n internalRows: undefined,\n internalNested: false,\n internalStore: undefined,\n})\n\nconst emit = defineEmits<{\n (event: 'nodeClick', data: T, node: GrTreeNode<T>): void\n (event: 'nodeExpand', data: T, node: GrTreeNode<T>): void\n (event: 'nodeCollapse', data: T, node: GrTreeNode<T>): void\n (event: 'nodeDrop', draggingNode: GrTreeNode<T>, dropNode: GrTreeNode<T>, dropType: GrTreeNodeDropType): void\n}>()\n\ndefineSlots<{\n default?: (props: { node: GrTreeNode<T>; data: T }) => any\n}>()\n\nconst dataAdapter = createGrTreeDataAdapter(props)\nconst treeStore = props.internalStore ?? createGrTreeStore({\n adapter: dataAdapter,\n data: () => props.data,\n defaultExpandedKeys: () => props.defaultExpandedKeys,\n filterNodeMethod: () => props.filterNodeMethod,\n})\nconst interactionContext = props.internalInteractionContext ?? createGrTreeInteractionContext(props, {\n emitNodeClick: (data, node) => emit('nodeClick', data, node),\n emitNodeExpand: (data, node) => emit('nodeExpand', data, node),\n emitNodeCollapse: (data, node) => emit('nodeCollapse', data, node),\n emitNodeDrop: (draggingNode, dropNode, dropType) => emit('nodeDrop', draggingNode, dropNode, dropType),\n})\n\nconst treeProps = props as Readonly<GrTreeProps<T>>\n\nconst { t } = useGranularityTranslations()\nconst dragLabel = computed(() => treeProps.dragLabel ?? t('gr.tree.drag', 'Drag'))\nconst expandLabel = computed(() => treeProps.expandLabel ?? t('gr.tree.expand', 'Expand'))\nconst collapseLabel = computed(() => treeProps.collapseLabel ?? t('gr.tree.collapse', 'Collapse'))\nconst currentKey = treeStore.currentKey\nconst hoveredKey = interactionContext.hoveredKey\nconst dropTarget = interactionContext.dropTarget\n\nconst visibleRows = computed<GrTreeVisibleTreeRow<T>[]>(() => {\n if (props.internalRows)\n return props.internalRows\n\n const { roots } = treeStore.treeModel.value\n const { isActive, subtreeHasMatch, matchedKeys, autoExpandKeys } = treeStore.filterInfo.value\n\n const walk = (nodes: GrTreeNode<T>[]): GrTreeVisibleTreeRow<T>[] => {\n const rows: GrTreeVisibleTreeRow<T>[] = []\n\n for (const node of nodes) {\n if (isActive && !subtreeHasMatch.get(node.key))\n continue\n\n const isLeaf = node.childNodes.length === 0\n const isMatched = matchedKeys.has(node.key)\n const isExpanded = treeStore.isExpandedKey(node.key) || (isActive && autoExpandKeys.has(node.key))\n\n rows.push({\n node,\n isExpanded,\n isLeaf,\n isMatched,\n children: isExpanded ? walk(node.childNodes) : [],\n })\n }\n\n return rows\n }\n\n return walk(roots)\n})\n\nfunction onRowClick(node: GrTreeNode<T>) {\n treeStore.setCurrentKey(node.key)\n interactionContext.emitNodeClick(node.data, node)\n}\n\nfunction onRowMouseEnter(node: GrTreeNode<T>) {\n hoveredKey.value = node.key\n}\n\nfunction onRowMouseLeave(node: GrTreeNode<T>) {\n if (hoveredKey.value === node.key)\n hoveredKey.value = undefined\n}\n\nfunction toggleExpand(node: GrTreeNode<T>) {\n const expanded = !treeStore.isExpandedKey(node.key)\n treeStore.toggleExpand(node)\n\n if (expanded)\n interactionContext.emitNodeExpand(node.data, node)\n else\n interactionContext.emitNodeCollapse(node.data, node)\n}\n\n// Drag & drop\nfunction canDrag(node: GrTreeNode<T>): boolean {\n return interactionContext.canDrag(node)\n}\n\nfunction shouldShowDragHandle(node: GrTreeNode<T>): boolean {\n return canDrag(node) && hoveredKey.value === node.key\n}\n\nfunction resolveDropType(evt: DragEvent, el: HTMLElement): GrTreeNodeDropType {\n const rect = el.getBoundingClientRect()\n const y = evt.clientY - rect.top\n const third = rect.height / 3\n if (y < third)\n return 'prev'\n if (y > third * 2)\n return 'next'\n return 'inner'\n}\n\nfunction canDrop(drag: GrTreeNode<T>, target: GrTreeNode<T>, type: GrTreeAllowDropType): boolean {\n return interactionContext.canDrop(drag, target, type)\n}\n\nfunction onDragStart(evt: DragEvent, node: GrTreeNode<T>) {\n if (!canDrag(node)) {\n evt.preventDefault()\n return\n }\n\n interactionContext.draggingNode.value = node\n interactionContext.dropTarget.value = null\n try {\n evt.dataTransfer?.setData('text/plain', String(node.key))\n }\n catch {\n // ignore\n }\n if (evt.dataTransfer)\n evt.dataTransfer.effectAllowed = 'move'\n}\n\nfunction onDragEnd() {\n interactionContext.resetDragState()\n}\n\nfunction onDragOver(evt: DragEvent, node: GrTreeNode<T>, rowEl: HTMLElement) {\n const drag = interactionContext.draggingNode.value\n if (!treeProps.draggable || !drag)\n return\n\n // required for `drop` to fire\n evt.preventDefault()\n\n const type = resolveDropType(evt, rowEl)\n const allowed = treeStore.canMoveNode(drag, node, type) && canDrop(drag, node, type)\n interactionContext.dropTarget.value = { key: node.key, type, allowed }\n if (evt.dataTransfer)\n evt.dataTransfer.dropEffect = allowed ? 'move' : 'none'\n}\n\nfunction onDrop(evt: DragEvent, node: GrTreeNode<T>) {\n const drag = interactionContext.draggingNode.value\n const target = interactionContext.dropTarget.value\n if (!treeProps.draggable || !drag || !target)\n return\n\n evt.preventDefault()\n\n if (target.key === node.key && target.allowed) {\n const movedNode = treeStore.moveNode(drag, node, target.type)\n if (movedNode) {\n const dropNode = treeStore.getNode(node.key) ?? node\n interactionContext.emitNodeDrop(movedNode, dropNode, target.type)\n }\n }\n\n interactionContext.resetDragState()\n}\n\nfunction filter(value: string) {\n treeStore.filter(value)\n}\n\nfunction resolveNodeClass(classValue: GrTreeNodeClass<T> | undefined, row: GrTreeVisibleRow<T>) {\n if (!classValue)\n return undefined\n\n return typeof classValue === 'function'\n ? classValue(row)\n : classValue\n}\n\nfunction resolveBranchLineColorValue(color: GrTreeBranchLineColor<T> | undefined, node: GrTreeNode<T>) {\n if (!color)\n return undefined\n\n return typeof color === 'function'\n ? color(node) ?? undefined\n : color\n}\n\nfunction isBranchLineActive(node: GrTreeNode<T>) {\n const selectedKey = currentKey.value\n\n if (selectedKey == null)\n return false\n\n if (node.key === selectedKey)\n return true\n\n return node.childNodes.some(child => child.key === selectedKey && !treeStore.isExpandedKey(child.key))\n}\n\nfunction resolveBranchLineColor(node: GrTreeNode<T>) {\n const defaultColor = resolveBranchLineColorValue(treeProps.branchLineColor, node) ?? DEFAULT_BRANCH_LINE_COLOR\n\n if (!isBranchLineActive(node))\n return defaultColor\n\n return resolveBranchLineColorValue(treeProps.branchLineActiveColor, node) ?? defaultColor\n}\n\nfunction resolveChildrenWrapStyle(row: GrTreeVisibleTreeRow<T>) {\n if (!treeProps.branchLine)\n return {\n }\n\n return {\n '--gr-tree-branch-line-color': resolveBranchLineColor(row.node),\n }\n}\n\ndefineExpose<GrTreeInstance<T>>({\n appendNode: treeStore.appendNode,\n filter,\n getCurrentNode: treeStore.getCurrentNode,\n setCurrentKey: treeStore.setCurrentKey,\n getCurrentKey: treeStore.getCurrentKey,\n getNode: treeStore.getNode,\n insertNodeAfter: treeStore.insertNodeAfter,\n insertNodeBefore: treeStore.insertNodeBefore,\n removeNode: treeStore.removeNode,\n setCurrentNode: treeStore.setCurrentNode,\n})\n</script>\n\n<template>\n <div\n :data-gr-tree=\"props.internalNested ? undefined : ''\"\n :class=\"props.internalNested ? 'gr-tree__children' : 'gr-tree'\"\n :role=\"props.internalNested ? 'group' : 'tree'\"\n >\n <div\n v-for=\"row in visibleRows\"\n :key=\"row.node.key\"\n data-gr-tree-node\n role=\"treeitem\"\n :aria-level=\"row.node.level\"\n :aria-expanded=\"row.isLeaf ? undefined : row.isExpanded\"\n >\n <div\n data-gr-tree-row\n class=\"gr-tree__row py-2 px-2\"\n :class=\"[\n treeProps.highlightCurrent && currentKey === row.node.key ? 'gr-tree__row--current' : '',\n row.isMatched ? 'gr-tree__row--matched' : '',\n dropTarget?.key === row.node.key && dropTarget.allowed && dropTarget.type === 'inner' ? 'gr-tree__row--drop-inner' : '',\n dropTarget?.key === row.node.key && dropTarget.allowed && dropTarget.type === 'prev' ? 'gr-tree__row--drop-prev' : '',\n dropTarget?.key === row.node.key && dropTarget.allowed && dropTarget.type === 'next' ? 'gr-tree__row--drop-next' : '',\n resolveNodeClass(treeProps.rowClass, row),\n ]\"\n tabindex=\"0\"\n @click=\"onRowClick(row.node)\"\n @drop=\"onDrop($event, row.node)\"\n @dragover=\"onDragOver($event, row.node, $event.currentTarget as HTMLElement)\"\n @mouseenter=\"onRowMouseEnter(row.node)\"\n @mouseleave=\"onRowMouseLeave(row.node)\"\n >\n <button\n v-if=\"treeProps.draggable\"\n type=\"button\"\n data-gr-tree-drag-handle\n class=\"gr-tree__drag-handle\"\n :class=\"[\n shouldShowDragHandle(row.node) ? 'gr-tree__drag-handle--visible' : '',\n canDrag(row.node) ? '' : 'gr-tree__drag-handle--disabled',\n resolveNodeClass(treeProps.dragHandleClass, row),\n ]\"\n :aria-label=\"dragLabel\"\n :draggable=\"canDrag(row.node)\"\n @click.stop\n @mousedown.stop\n @dragstart=\"onDragStart($event, row.node)\"\n @dragend=\"onDragEnd\"\n >\n <span class=\"gr-tree__drag-icon\" :class=\"treeProps.dragHandleIcon\" />\n </button>\n\n <button\n v-if=\"!row.isLeaf\"\n data-gr-tree-toggle\n type=\"button\"\n class=\"gr-tree__toggle\"\n :class=\"resolveNodeClass(treeProps.toggleClass, row)\"\n :aria-label=\"row.isExpanded ? collapseLabel : expandLabel\"\n @click.stop=\"toggleExpand(row.node)\"\n >\n <span\n class=\"gr-tree__toggle-icon\"\n :class=\"[\n row.isExpanded ? treeProps.collapseIcon : treeProps.expandIcon,\n row.isExpanded && treeProps.toggleIconRotate ? 'gr-tree__toggle-icon--expanded' : '',\n resolveNodeClass(treeProps.toggleIconClass, row),\n ]\"\n />\n </button>\n <span\n v-else\n class=\"gr-tree__toggle-spacer\"\n :class=\"resolveNodeClass(treeProps.toggleSpacerClass, row)\"\n />\n\n <div class=\"gr-tree__content\" :class=\"resolveNodeClass(treeProps.contentClass, row)\">\n <slot\n :node=\"row.node\"\n :data=\"row.node.data\"\n >\n <span class=\"gr-tree__label\">{{ row.node.label }}</span>\n </slot>\n </div>\n </div>\n\n <div\n v-if=\"row.children.length\"\n class=\"gr-tree__children-wrap ml-6\"\n :class=\"treeProps.branchLine ? 'gr-tree__children-wrap--with-branch' : ''\"\n :style=\"resolveChildrenWrapStyle(row)\"\n >\n <GrTree\n v-bind=\"props\"\n :data=\"[]\"\n :internal-rows=\"row.children\"\n internal-nested\n :internal-store=\"treeStore\"\n :internal-interaction-context=\"interactionContext\"\n >\n <template #default=\"slotProps\">\n <slot v-bind=\"slotProps\">\n <span class=\"gr-tree__label\">{{ slotProps.node.label }}</span>\n </slot>\n </template>\n </GrTree>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.gr-tree {\n --gr-tree-gap: 2px;\n --gr-tree-children-pl: 10px;\n --gr-tree-row-min-height: 28px;\n --gr-tree-row-radius: 8px;\n --gr-tree-row-pr: 8px;\n --gr-tree-row-color: var(--fg);\n --gr-tree-row-hover-bg: color-mix(in srgb, var(--primary, #000) 10%, transparent);\n --gr-tree-row-current-bg: color-mix(in srgb, var(--primary, #000) 5%, transparent);\n --gr-tree-row-current-hover-bg: color-mix(in srgb, var(--primary, #000) 16%, transparent);\n --gr-tree-drag-handle-size: 24px;\n --gr-tree-drag-handle-mr: 0;\n --gr-tree-drag-handle-radius: 6px;\n --gr-tree-drag-handle-color: inherit;\n --gr-tree-drag-handle-opacity: 0.55;\n --gr-tree-drag-handle-hover-bg: color-mix(in srgb, var(--muted, #000) 22%, transparent);\n --gr-tree-drag-handle-hover-color: var(--gr-tree-drag-handle-color);\n --gr-tree-drag-handle-hover-opacity: 0.9;\n --gr-tree-drag-handle-disabled-opacity: 0.25;\n --gr-tree-toggle-size: 24px;\n --gr-tree-toggle-mr: 0;\n --gr-tree-toggle-radius: 6px;\n --gr-tree-toggle-color: inherit;\n --gr-tree-toggle-hover-bg: color-mix(in srgb, var(--muted, #000) 25%, transparent);\n --gr-tree-toggle-hover-color: var(--gr-tree-toggle-color);\n --gr-tree-icon-size: 16px;\n --gr-tree-content-gap: 8px;\n --gr-tree-branch-line-default-color: var(--gr-tree-row-current-bg);\n --gr-tree-branch-line-width: 2px;\n display: flex;\n flex-direction: column;\n gap: var(--gr-tree-gap);\n}\n\n.gr-tree__children {\n display: flex;\n flex-direction: column;\n gap: var(--gr-tree-gap);\n}\n\n.gr-tree__children-wrap {\n --gr-tree-branch-line-color: var(--gr-tree-branch-line-default-color);\n display: flex;\n flex-direction: column;\n gap: var(--gr-tree-gap);\n padding-left: var(--gr-tree-children-pl, 10px);\n border-left: var(--gr-tree-branch-line-width) solid transparent;\n}\n\n.gr-tree__children-wrap--with-branch {\n border-left-color: var(--gr-tree-branch-line-color, var(--gr-tree-branch-line-default-color));\n}\n\n.gr-tree__row {\n position: relative;\n display: flex;\n align-items: center;\n min-height: var(--gr-tree-row-min-height);\n border-radius: var(--gr-tree-row-radius);\n padding-right: var(--gr-tree-row-pr);\n cursor: default;\n user-select: none;\n outline: none;\n color: var(--gr-tree-row-color);\n}\n\n.gr-tree__row:hover {\n background: var(--gr-tree-row-hover-bg);\n}\n\n.gr-tree__row--current {\n background: var(--gr-tree-row-current-bg);\n}\n\n.gr-tree__row--current:hover {\n background: var(--gr-tree-row-current-hover-bg);\n}\n\n.gr-tree__row--matched .gr-tree__label {\n font-weight: 600;\n}\n\n.gr-tree__drag-handle {\n width: var(--gr-tree-drag-handle-size);\n height: var(--gr-tree-drag-handle-size);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-right: var(--gr-tree-drag-handle-mr);\n border-radius: var(--gr-tree-drag-handle-radius);\n color: var(--gr-tree-drag-handle-color);\n cursor: grab;\n visibility: hidden;\n pointer-events: none;\n opacity: 0;\n}\n\n.gr-tree__drag-handle--visible {\n visibility: visible;\n pointer-events: auto;\n opacity: var(--gr-tree-drag-handle-opacity);\n}\n\n.gr-tree__drag-handle:hover {\n background: var(--gr-tree-drag-handle-hover-bg);\n color: var(--gr-tree-drag-handle-hover-color);\n opacity: var(--gr-tree-drag-handle-hover-opacity);\n}\n\n.gr-tree__drag-handle:active {\n cursor: grabbing;\n}\n\n.gr-tree__drag-handle--disabled {\n cursor: default;\n opacity: var(--gr-tree-drag-handle-disabled-opacity);\n}\n\n.gr-tree__drag-icon {\n width: var(--gr-tree-icon-size);\n height: var(--gr-tree-icon-size);\n}\n\n.gr-tree__toggle {\n width: var(--gr-tree-toggle-size);\n height: var(--gr-tree-toggle-size);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-right: var(--gr-tree-toggle-mr);\n border-radius: var(--gr-tree-toggle-radius);\n color: var(--gr-tree-toggle-color);\n}\n\n.gr-tree__toggle:hover {\n background: var(--gr-tree-toggle-hover-bg);\n color: var(--gr-tree-toggle-hover-color);\n}\n\n.gr-tree__toggle-icon {\n width: var(--gr-tree-icon-size);\n height: var(--gr-tree-icon-size);\n transition: transform 120ms ease;\n}\n\n.gr-tree__toggle-icon--expanded {\n transform: rotate(90deg);\n}\n\n.gr-tree__toggle-spacer {\n width: var(--gr-tree-toggle-size);\n height: var(--gr-tree-toggle-size);\n margin-right: var(--gr-tree-toggle-mr);\n display: inline-block;\n}\n\n.gr-tree__content {\n min-width: 0;\n display: flex;\n align-items: center;\n gap: var(--gr-tree-content-gap);\n}\n\n.gr-tree__label {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.gr-tree__row--drop-inner {\n outline: 2px solid color-mix(in srgb, var(--primary, #000) 40%, transparent);\n}\n\n.gr-tree__row--drop-prev::before,\n.gr-tree__row--drop-next::after {\n content: '';\n position: absolute;\n left: 8px;\n right: 8px;\n height: 2px;\n background: color-mix(in srgb, var(--primary, #000) 55%, transparent);\n}\n\n.gr-tree__row--drop-prev::before {\n top: 2px;\n}\n\n.gr-tree__row--drop-next::after {\n bottom: 2px;\n}\n</style>\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { t as GrTree_default } from "./chunks/GrTree-B2SMU5Py.js";
2
- import { n as grTreeSafelist, t as grTreeConfig } from "../../chunks/config-D6Oe3blW2.js";
1
+ import { t as GrTree_default } from "./chunks/GrTree-D3ODe2dB.js";
2
+ import { n as grTreeSafelist, t as grTreeConfig } from "../../chunks/config-DpqOnJiz2.js";
3
3
  export { GrTree_default as GrTree, GrTree_default as default, grTreeConfig, grTreeSafelist };
@@ -1,8 +1,9 @@
1
- import { t as useGranularityTranslations } from "../../../chunks/granularityI18n-LcJ88Vce.js";
2
- import { t as GrInput_default } from "../../GrInput/chunks/GrInput-gwFQ1sk4.js";
1
+ import { t as useGranularityTranslations } from "../../../chunks/granularityI18n-DoV7Ca2m.js";
2
+ import { t as GrInput_default } from "../../GrInput/chunks/GrInput-C8pOJgCi.js";
3
3
  import { vClickOutside } from "../../../directives/clickOutside.js";
4
- import { t as GrTree_default } from "../../GrTree/chunks/GrTree-B2SMU5Py.js";
5
- import { i as grTreeSelectPanelClass, r as grTreeSelectClass } from "../../../chunks/config-72sW9Bag2.js";
4
+ import { t as useFloating } from "../../../chunks/useFloating-DtM6TyE4.js";
5
+ import { t as GrTree_default } from "../../GrTree/chunks/GrTree-D3ODe2dB.js";
6
+ import { i as grTreeSelectPanelClass, r as grTreeSelectClass } from "../../../chunks/config-BIRO0vDJ2.js";
6
7
  import { Teleport, Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, nextTick, normalizeClass, normalizeStyle, onUnmounted, openBlock, ref, renderSlot, toDisplayString, unref, vShow, watch, withCtx, withDirectives, withModifiers } from "vue";
7
8
  //#region src/components/GrTreeSelect/GrTreeSelect.vue?vue&type=script&setup=true&lang.ts
8
9
  var _hoisted_1 = { class: "relative" };
@@ -16,8 +17,8 @@ var _hoisted_2 = [
16
17
  var _hoisted_3 = ["disabled", "aria-label"];
17
18
  var _hoisted_4 = {
18
19
  key: 1,
19
- "data-testid": "ds-tree-select-chevron",
20
- "data-ds-tree-select-chevron": "",
20
+ "data-testid": "gr-tree-select-chevron",
21
+ "data-gr-tree-select-chevron": "",
21
22
  class: "absolute top-1/2 -translate-y-1/2 right-3 text-[var(--muted-fg)] pointer-events-none"
22
23
  };
23
24
  var _hoisted_5 = {
@@ -103,34 +104,11 @@ var GrTreeSelect_default = /* @__PURE__ */ defineComponent({
103
104
  let hadPointerDownOnTrigger = false;
104
105
  const open = ref(false);
105
106
  const filterValue = ref("");
106
- const panelStyle = ref({
107
- left: "0px",
108
- top: "0px",
109
- width: "0px",
110
- zIndex: "2147483647"
107
+ const { floatingStyle } = useFloating(rootEl, panelEl, open, {
108
+ placement: "bottom-start",
109
+ matchWidth: true,
110
+ zIndexVar: "--gr-z-dropdown"
111
111
  });
112
- function syncPanelPosition() {
113
- if (typeof window === "undefined") return;
114
- const root = rootEl.value;
115
- if (!root) return;
116
- const rect = root.getBoundingClientRect();
117
- panelStyle.value = {
118
- left: `${rect.left}px`,
119
- top: `${rect.bottom + 8}px`,
120
- width: `${rect.width}px`,
121
- zIndex: "2147483647"
122
- };
123
- }
124
- function bindPanelPositionListeners() {
125
- if (typeof window === "undefined") return;
126
- window.addEventListener("resize", syncPanelPosition);
127
- window.addEventListener("scroll", syncPanelPosition, true);
128
- }
129
- function unbindPanelPositionListeners() {
130
- if (typeof window === "undefined") return;
131
- window.removeEventListener("resize", syncPanelPosition);
132
- window.removeEventListener("scroll", syncPanelPosition, true);
133
- }
134
112
  const closeOnSelectResolved = computed(() => {
135
113
  return props.closeOnSelect ?? !props.multiple;
136
114
  });
@@ -266,12 +244,8 @@ var GrTreeSelect_default = /* @__PURE__ */ defineComponent({
266
244
  watch(open, async (isOpen) => {
267
245
  if (typeof document === "undefined") return;
268
246
  document.removeEventListener("keydown", closeOnEscape);
269
- unbindPanelPositionListeners();
270
247
  if (isOpen) document.addEventListener("keydown", closeOnEscape);
271
248
  if (!isOpen) return;
272
- bindPanelPositionListeners();
273
- await nextTick();
274
- syncPanelPosition();
275
249
  if (!props.multiple) {
276
250
  const v = props.modelValue;
277
251
  if (v != null && !Array.isArray(v)) treeRef.value?.setCurrentKey(v);
@@ -284,7 +258,6 @@ var GrTreeSelect_default = /* @__PURE__ */ defineComponent({
284
258
  onUnmounted(() => {
285
259
  if (typeof document === "undefined") return;
286
260
  document.removeEventListener("keydown", closeOnEscape);
287
- unbindPanelPositionListeners();
288
261
  });
289
262
  watch(() => props.modelValue, (v) => {
290
263
  if (props.multiple) return;
@@ -340,14 +313,14 @@ var GrTreeSelect_default = /* @__PURE__ */ defineComponent({
340
313
  return withDirectives((openBlock(), createElementBlock("div", {
341
314
  ref_key: "rootEl",
342
315
  ref: rootEl,
343
- "data-ds-tree-select": "",
316
+ "data-gr-tree-select": "",
344
317
  class: "relative"
345
318
  }, [createElementVNode("div", _hoisted_1, [
346
319
  createElementVNode("input", {
347
320
  ref_key: "triggerEl",
348
321
  ref: triggerEl,
349
- "data-testid": "ds-tree-select-trigger",
350
- "data-ds-tree-select-trigger": "",
322
+ "data-testid": "gr-tree-select-trigger",
323
+ "data-gr-tree-select-trigger": "",
351
324
  type: "text",
352
325
  value: displayValue.value,
353
326
  placeholder: __props.placeholder,
@@ -365,8 +338,8 @@ var GrTreeSelect_default = /* @__PURE__ */ defineComponent({
365
338
  }, null, 42, _hoisted_2),
366
339
  __props.clearable && hasSelection.value ? (openBlock(), createElementBlock("button", {
367
340
  key: 0,
368
- "data-testid": "ds-tree-select-clear",
369
- "data-ds-tree-select-clear": "",
341
+ "data-testid": "gr-tree-select-clear",
342
+ "data-gr-tree-select-clear": "",
370
343
  type: "button",
371
344
  class: "absolute top-1/2 -translate-y-1/2 right-3 h-6 w-6 inline-flex items-center justify-center rounded-md text-[var(--muted-fg)] hover:text-[var(--fg)] hover:bg-[color-mix(in_srgb,var(--muted)_25%,transparent)] disabled:opacity-50",
372
345
  disabled: __props.disabled,
@@ -390,17 +363,16 @@ var GrTreeSelect_default = /* @__PURE__ */ defineComponent({
390
363
  default: withCtx(() => [withDirectives(createElementVNode("div", {
391
364
  ref_key: "panelEl",
392
365
  ref: panelEl,
393
- "data-testid": "ds-tree-select-panel",
394
- "data-ds-tree-select-panel": "",
395
- class: "fixed w-full",
396
- style: normalizeStyle(panelStyle.value)
366
+ "data-testid": "gr-tree-select-panel",
367
+ "data-gr-tree-select-panel": "",
368
+ style: normalizeStyle(unref(floatingStyle))
397
369
  }, [createElementVNode("div", { class: normalizeClass(panelClasses.value) }, [__props.filterable ? (openBlock(), createElementBlock("div", _hoisted_6, [createVNode(GrInput_default, {
398
370
  ref_key: "filterInputRef",
399
371
  ref: filterInputRef,
400
372
  modelValue: filterValue.value,
401
373
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => filterValue.value = $event),
402
- "data-testid": "ds-tree-select-filter",
403
- "data-ds-tree-select-filter": "",
374
+ "data-testid": "gr-tree-select-filter",
375
+ "data-gr-tree-select-filter": "",
404
376
  type: "search",
405
377
  inputmode: __props.filterInputmode,
406
378
  placeholder: resolvedFilterPlaceholder.value,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrTreeSelect-B2xBKs5Q.js","names":["$slots"],"sources":["../../../../src/components/GrTreeSelect/GrTreeSelect.vue","../../../../src/components/GrTreeSelect/GrTreeSelect.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"T extends Record<string, any> = any\">\nimport { computed, nextTick, onUnmounted, ref, watch } from 'vue'\n\nimport { vClickOutside } from '../../directives'\nimport { useFloating } from '../../composables/internal/useFloating'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport GrInput from '../GrInput/GrInput.vue'\nimport GrTree, {\n type GrTreeInstance,\n type GrTreeKey,\n type GrTreeNode,\n} from '../GrTree'\nimport type { GrTreeSelectModelValue, GrTreeSelectProps } from './grTreeSelectTypes'\nimport { grTreeSelectClass, grTreeSelectPanelClass } from './grTreeSelectStyles'\n\nconst props = withDefaults(\n defineProps<GrTreeSelectProps<T>>(),\n {\n props: () => ({\n children: 'children',\n label: 'label',\n }),\n nodeKey: 'id' as any,\n defaultExpandedKeys: () => [],\n disabled: false,\n placeholder: undefined,\n size: 'md',\n invalid: false,\n state: 'default',\n multiple: false,\n clearable: false,\n valueDisplay: 'label',\n filterable: false,\n filterPlaceholder: undefined,\n filterInputmode: undefined,\n filterNodeMethod: undefined,\n closeOnSelect: undefined,\n dropdownMaxHeight: 320,\n },\n)\n\nconst { t } = useGranularityTranslations()\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrTreeSelectModelValue): void\n (e: 'change', value: GrTreeSelectModelValue): void\n (e: 'visibleChange', visible: boolean): void\n (e: 'clear'): void\n (e: 'nodeClick', data: T, node: GrTreeNode<T>): void\n}>()\n\ndefineSlots<{\n /** Рендер значения внутри триггера (вместо дефолтного текста). */\n value?: (props: { value: GrTreeSelectModelValue; labels: string[]; displayValue: string; pathLabels?: string[] }) => any\n /** Рендер строки дерева. */\n node?: (props: { node: GrTreeNode<T>; data: T; selected: boolean }) => any\n /** Содержимое пустого состояния (когда нет данных). */\n empty?: () => any\n}>()\n\nconst rootEl = ref<HTMLElement | null>(null)\nconst triggerEl = ref<HTMLInputElement | null>(null)\nconst filterInputRef = ref<InstanceType<typeof GrInput> | null>(null)\nconst treeRef = ref<GrTreeInstance | null>(null)\nconst panelEl = ref<HTMLElement | null>(null)\n\nconst clickOutsideExclude = [() => panelEl.value]\n\nlet hadPointerDownOnTrigger = false\n\nconst open = ref(false)\nconst filterValue = ref('')\n\nconst { floatingStyle } = useFloating(rootEl, panelEl, open, {\n placement: 'bottom-start',\n matchWidth: true,\n zIndexVar: '--gr-z-dropdown',\n})\n\nconst closeOnSelectResolved = computed(() => {\n return props.closeOnSelect ?? !props.multiple\n})\n\nfunction getChildrenKey() {\n return props.props.children ?? 'children'\n}\n\nfunction getLabelKey() {\n return props.props.label ?? 'label'\n}\n\nfunction nodeLabel(data: T): string {\n const key = getLabelKey() as keyof T\n const v = data[key]\n return v == null ? '' : String(v)\n}\n\nfunction nodeChildren(data: T): T[] {\n const key = getChildrenKey() as keyof T\n const v = data[key]\n return Array.isArray(v) ? (v as any) : []\n}\n\nfunction nodeKeyOf(data: T, index: number, parentKey: GrTreeKey | undefined): GrTreeKey {\n const keyName = props.nodeKey as keyof T\n const v = data[keyName]\n if (v != null)\n return v as GrTreeKey\n\n return parentKey == null ? index : `${String(parentKey)}:${index}`\n}\n\nconst labelByKey = computed(() => {\n const map = new Map<GrTreeKey, string>()\n\n const walk = (items: T[], parentKey: GrTreeKey | undefined) => {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const key = nodeKeyOf(item, i, parentKey)\n map.set(key, nodeLabel(item))\n walk(nodeChildren(item), key)\n }\n }\n\n walk(props.data ?? [], undefined)\n return map\n})\n\nconst pathLabelsByKey = computed(() => {\n const map = new Map<GrTreeKey, string[]>()\n\n const walk = (items: T[], parentKey: GrTreeKey | undefined, parentPath: string[]) => {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const key = nodeKeyOf(item, i, parentKey)\n const label = nodeLabel(item)\n const path = [...parentPath, label]\n map.set(key, path)\n walk(nodeChildren(item), key, path)\n }\n }\n\n walk(props.data ?? [], undefined, [])\n return map\n})\n\nconst selectedKeys = computed<GrTreeKey[]>(() => {\n if (props.multiple) {\n return Array.isArray(props.modelValue) ? props.modelValue : []\n }\n\n const v = props.modelValue\n if (v == null || Array.isArray(v))\n return []\n return [v]\n})\n\nconst selectedKeySet = computed(() => new Set(selectedKeys.value))\n\nconst selectedLabels = computed(() => {\n const map = labelByKey.value\n return selectedKeys.value.map((k) => map.get(k) ?? String(k))\n})\n\nconst selectedPathLabels = computed<string[] | undefined>(() => {\n if (props.multiple)\n return undefined\n\n const key = selectedKeys.value[0]\n if (key == null)\n return undefined\n\n const path = pathLabelsByKey.value.get(key)\n if (path?.length)\n return path\n\n const labels = selectedLabels.value\n return labels.length ? [labels[0]] : undefined\n})\n\nconst displayValue = computed(() => {\n const labels = selectedLabels.value\n if (labels.length === 0)\n return ''\n\n if (!props.multiple) {\n if (props.valueDisplay === 'path') {\n const path = selectedPathLabels.value\n if (path?.length)\n return path.join(' / ')\n }\n return labels[0]\n }\n\n if (labels.length === 1)\n return labels[0]\n return `${labels[0]} +${labels.length - 1}`\n})\n\nconst hasSelection = computed(() => selectedKeys.value.length > 0)\n\nconst resolvedFilterPlaceholder = computed(() => {\n return props.filterPlaceholder ?? t('gr.treeSelect.filterPlaceholder', 'Search…')\n})\n\nconst className = computed(() => {\n return grTreeSelectClass({\n size: props.size,\n state: props.state,\n invalid: props.invalid,\n })\n})\n\nconst panelClasses = computed(() => {\n return grTreeSelectPanelClass\n})\n\nfunction setOpen(next: boolean) {\n if (props.disabled)\n return\n\n if (open.value === next)\n return\n\n open.value = next\n emit('visibleChange', next)\n}\n\nfunction onClickOutside(): void {\n setOpen(false)\n}\n\nfunction openDropdown(): void {\n setOpen(true)\n}\n\nfunction closeDropdown(): void {\n setOpen(false)\n}\n\nfunction toggleDropdown(): void {\n setOpen(!open.value)\n}\n\nfunction onTriggerPointerDown(): void {\n hadPointerDownOnTrigger = true\n if (typeof window !== 'undefined') {\n window.setTimeout(() => {\n hadPointerDownOnTrigger = false\n }, 0)\n }\n else {\n // SSR / no window: reset sync\n hadPointerDownOnTrigger = false\n }\n}\n\nfunction onTriggerFocus(): void {\n if (hadPointerDownOnTrigger)\n return\n openDropdown()\n}\n\nfunction closeOnEscape(e: KeyboardEvent): void {\n if (e.key === 'Escape') {\n closeDropdown()\n nextTick(() => triggerEl.value?.focus())\n }\n}\n\nwatch(\n open,\n async (isOpen) => {\n if (typeof document === 'undefined')\n return\n\n document.removeEventListener('keydown', closeOnEscape)\n\n if (isOpen)\n document.addEventListener('keydown', closeOnEscape)\n\n if (!isOpen)\n return\n\n // sync tree highlight\n if (!props.multiple) {\n const v = props.modelValue\n if (v != null && !Array.isArray(v))\n treeRef.value?.setCurrentKey(v)\n }\n\n // focus filter input\n if (props.filterable) {\n await nextTick()\n filterInputRef.value?.focus()\n }\n },\n { immediate: true },\n)\n\nonUnmounted(() => {\n if (typeof document === 'undefined')\n return\n document.removeEventListener('keydown', closeOnEscape)\n})\n\nwatch(\n () => props.modelValue,\n (v) => {\n if (props.multiple)\n return\n if (v == null || Array.isArray(v)) {\n treeRef.value?.setCurrentKey(undefined)\n return\n }\n treeRef.value?.setCurrentKey(v)\n },\n)\n\nwatch(\n filterValue,\n (v) => {\n treeRef.value?.filter(v)\n },\n)\n\nwatch(\n open,\n (isOpen) => {\n if (isOpen)\n return\n if (filterValue.value.trim().length > 0)\n filterValue.value = ''\n },\n)\n\nfunction emitModel(next: GrTreeSelectModelValue) {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nfunction clear(): void {\n if (props.disabled)\n return\n\n const next: GrTreeSelectModelValue = props.multiple ? [] : null\n emitModel(next)\n emit('clear')\n if (!props.multiple)\n treeRef.value?.setCurrentKey(undefined)\n}\n\nfunction onTriggerKeydown(e: KeyboardEvent): void {\n if (props.disabled)\n return\n\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n openDropdown()\n }\n if (e.key === 'Escape') {\n e.preventDefault()\n closeDropdown()\n }\n}\n\nfunction onNodeClick(data: T, node: GrTreeNode<T>): void {\n emit('nodeClick', data, node)\n\n if (props.disabled)\n return\n\n if (props.multiple) {\n const next = new Set(selectedKeySet.value)\n if (next.has(node.key))\n next.delete(node.key)\n else\n next.add(node.key)\n emitModel([...next])\n\n if (closeOnSelectResolved.value) {\n closeDropdown()\n }\n return\n }\n\n emitModel(node.key)\n if (closeOnSelectResolved.value) {\n closeDropdown()\n }\n}\n</script>\n\n<template>\n <div\n ref=\"rootEl\"\n v-click-outside=\"{ handler: onClickOutside, enabled: open, exclude: clickOutsideExclude }\"\n data-gr-tree-select\n class=\"relative\"\n >\n <div class=\"relative\">\n <input\n ref=\"triggerEl\"\n data-testid=\"gr-tree-select-trigger\"\n data-gr-tree-select-trigger\n type=\"text\"\n :value=\"displayValue\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n readonly\n role=\"combobox\"\n aria-readonly=\"true\"\n :aria-expanded=\"open ? 'true' : 'false'\"\n :aria-invalid=\"invalid ? 'true' : undefined\"\n class=\"w-full rounded-md border bg-[var(--bg)] text-[var(--fg)] placeholder:text-[var(--muted-fg)] transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] disabled:opacity-50 disabled:cursor-not-allowed\"\n :class=\"[className, $slots.value ? 'text-transparent placeholder:text-transparent' : '']\"\n @pointerdown=\"onTriggerPointerDown\"\n @click=\"toggleDropdown\"\n @focus=\"onTriggerFocus\"\n @keydown=\"onTriggerKeydown\"\n >\n\n <button\n v-if=\"clearable && hasSelection\"\n data-testid=\"gr-tree-select-clear\"\n data-gr-tree-select-clear\n type=\"button\"\n class=\"absolute top-1/2 -translate-y-1/2 right-3 h-6 w-6 inline-flex items-center justify-center rounded-md text-[var(--muted-fg)] hover:text-[var(--fg)] hover:bg-[color-mix(in_srgb,var(--muted)_25%,transparent)] disabled:opacity-50\"\n :disabled=\"disabled\"\n :aria-label=\"t('gr.common.clear', 'Clear')\"\n @click.stop=\"clear\"\n >\n <span class=\"i-lucide-x inline-block h-4 w-4\" />\n </button>\n\n <span\n v-else\n data-testid=\"gr-tree-select-chevron\"\n data-gr-tree-select-chevron\n class=\"absolute top-1/2 -translate-y-1/2 right-3 text-[var(--muted-fg)] pointer-events-none\"\n >\n <span\n class=\"i-lucide-chevron-down inline-block h-4 w-4 transition-transform duration-150\"\n :class=\"open ? 'rotate-180' : ''\"\n />\n </span>\n\n <div\n v-if=\"$slots.value\"\n class=\"absolute inset-y-0 left-3 right-9 flex items-center pointer-events-none\"\n >\n <slot\n name=\"value\"\n :value=\"modelValue\"\n :labels=\"selectedLabels\"\n :display-value=\"displayValue\"\n :path-labels=\"selectedPathLabels\"\n />\n </div>\n </div>\n\n <teleport to=\"body\">\n <transition\n enter-active-class=\"transition ease-out duration-150\"\n enter-from-class=\"transform opacity-0 scale-95\"\n enter-to-class=\"transform opacity-100 scale-100\"\n leave-active-class=\"transition ease-in duration-100\"\n leave-from-class=\"transform opacity-100 scale-100\"\n leave-to-class=\"transform opacity-0 scale-95\"\n >\n <div\n v-show=\"open\"\n ref=\"panelEl\"\n data-testid=\"gr-tree-select-panel\"\n data-gr-tree-select-panel\n :style=\"floatingStyle\"\n >\n <div :class=\"panelClasses\">\n <div v-if=\"filterable\" class=\"p-2 border-b border-[var(--brd)]\">\n <GrInput\n ref=\"filterInputRef\"\n v-model=\"filterValue\"\n data-testid=\"gr-tree-select-filter\"\n data-gr-tree-select-filter\n type=\"search\"\n :inputmode=\"filterInputmode\"\n :placeholder=\"resolvedFilterPlaceholder\"\n size=\"sm\"\n />\n </div>\n\n <div\n class=\"p-1 overflow-auto\"\n :style=\"{ maxHeight: `${dropdownMaxHeight}px` }\"\n >\n <div v-if=\"(data?.length ?? 0) === 0\" class=\"px-3 py-2 text-[13px] text-[var(--muted-fg)]\">\n <slot name=\"empty\">\n {{ t('gr.treeSelect.empty', 'No data') }}\n </slot>\n </div>\n\n <GrTree\n v-else\n ref=\"treeRef\"\n :data=\"data\"\n :props=\"props.props\"\n :node-key=\"nodeKey as any\"\n :default-expanded-keys=\"defaultExpandedKeys\"\n :filter-node-method=\"filterNodeMethod\"\n :highlight-current=\"!multiple\"\n @node-click=\"onNodeClick\"\n >\n <template #default=\"{ node, data }\">\n <slot\n name=\"node\"\n :node=\"node\"\n :data=\"data\"\n :selected=\"selectedKeySet.has(node.key)\"\n >\n <div class=\"flex items-center gap-2 min-w-0\">\n <span\n class=\"inline-block h-4 w-4 shrink-0\"\n :class=\"selectedKeySet.has(node.key) ? 'i-lucide-check text-[var(--primary)]' : ''\"\n aria-hidden=\"true\"\n />\n <span class=\"truncate\">{{ node.label }}</span>\n </div>\n </slot>\n </template>\n </GrTree>\n </div>\n </div>\n </div>\n </transition>\n </teleport>\n </div>\n</template>\n","<script setup lang=\"ts\" generic=\"T extends Record<string, any> = any\">\nimport { computed, nextTick, onUnmounted, ref, watch } from 'vue'\n\nimport { vClickOutside } from '../../directives'\nimport { useFloating } from '../../composables/internal/useFloating'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport GrInput from '../GrInput/GrInput.vue'\nimport GrTree, {\n type GrTreeInstance,\n type GrTreeKey,\n type GrTreeNode,\n} from '../GrTree'\nimport type { GrTreeSelectModelValue, GrTreeSelectProps } from './grTreeSelectTypes'\nimport { grTreeSelectClass, grTreeSelectPanelClass } from './grTreeSelectStyles'\n\nconst props = withDefaults(\n defineProps<GrTreeSelectProps<T>>(),\n {\n props: () => ({\n children: 'children',\n label: 'label',\n }),\n nodeKey: 'id' as any,\n defaultExpandedKeys: () => [],\n disabled: false,\n placeholder: undefined,\n size: 'md',\n invalid: false,\n state: 'default',\n multiple: false,\n clearable: false,\n valueDisplay: 'label',\n filterable: false,\n filterPlaceholder: undefined,\n filterInputmode: undefined,\n filterNodeMethod: undefined,\n closeOnSelect: undefined,\n dropdownMaxHeight: 320,\n },\n)\n\nconst { t } = useGranularityTranslations()\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrTreeSelectModelValue): void\n (e: 'change', value: GrTreeSelectModelValue): void\n (e: 'visibleChange', visible: boolean): void\n (e: 'clear'): void\n (e: 'nodeClick', data: T, node: GrTreeNode<T>): void\n}>()\n\ndefineSlots<{\n /** Рендер значения внутри триггера (вместо дефолтного текста). */\n value?: (props: { value: GrTreeSelectModelValue; labels: string[]; displayValue: string; pathLabels?: string[] }) => any\n /** Рендер строки дерева. */\n node?: (props: { node: GrTreeNode<T>; data: T; selected: boolean }) => any\n /** Содержимое пустого состояния (когда нет данных). */\n empty?: () => any\n}>()\n\nconst rootEl = ref<HTMLElement | null>(null)\nconst triggerEl = ref<HTMLInputElement | null>(null)\nconst filterInputRef = ref<InstanceType<typeof GrInput> | null>(null)\nconst treeRef = ref<GrTreeInstance | null>(null)\nconst panelEl = ref<HTMLElement | null>(null)\n\nconst clickOutsideExclude = [() => panelEl.value]\n\nlet hadPointerDownOnTrigger = false\n\nconst open = ref(false)\nconst filterValue = ref('')\n\nconst { floatingStyle } = useFloating(rootEl, panelEl, open, {\n placement: 'bottom-start',\n matchWidth: true,\n zIndexVar: '--gr-z-dropdown',\n})\n\nconst closeOnSelectResolved = computed(() => {\n return props.closeOnSelect ?? !props.multiple\n})\n\nfunction getChildrenKey() {\n return props.props.children ?? 'children'\n}\n\nfunction getLabelKey() {\n return props.props.label ?? 'label'\n}\n\nfunction nodeLabel(data: T): string {\n const key = getLabelKey() as keyof T\n const v = data[key]\n return v == null ? '' : String(v)\n}\n\nfunction nodeChildren(data: T): T[] {\n const key = getChildrenKey() as keyof T\n const v = data[key]\n return Array.isArray(v) ? (v as any) : []\n}\n\nfunction nodeKeyOf(data: T, index: number, parentKey: GrTreeKey | undefined): GrTreeKey {\n const keyName = props.nodeKey as keyof T\n const v = data[keyName]\n if (v != null)\n return v as GrTreeKey\n\n return parentKey == null ? index : `${String(parentKey)}:${index}`\n}\n\nconst labelByKey = computed(() => {\n const map = new Map<GrTreeKey, string>()\n\n const walk = (items: T[], parentKey: GrTreeKey | undefined) => {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const key = nodeKeyOf(item, i, parentKey)\n map.set(key, nodeLabel(item))\n walk(nodeChildren(item), key)\n }\n }\n\n walk(props.data ?? [], undefined)\n return map\n})\n\nconst pathLabelsByKey = computed(() => {\n const map = new Map<GrTreeKey, string[]>()\n\n const walk = (items: T[], parentKey: GrTreeKey | undefined, parentPath: string[]) => {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const key = nodeKeyOf(item, i, parentKey)\n const label = nodeLabel(item)\n const path = [...parentPath, label]\n map.set(key, path)\n walk(nodeChildren(item), key, path)\n }\n }\n\n walk(props.data ?? [], undefined, [])\n return map\n})\n\nconst selectedKeys = computed<GrTreeKey[]>(() => {\n if (props.multiple) {\n return Array.isArray(props.modelValue) ? props.modelValue : []\n }\n\n const v = props.modelValue\n if (v == null || Array.isArray(v))\n return []\n return [v]\n})\n\nconst selectedKeySet = computed(() => new Set(selectedKeys.value))\n\nconst selectedLabels = computed(() => {\n const map = labelByKey.value\n return selectedKeys.value.map((k) => map.get(k) ?? String(k))\n})\n\nconst selectedPathLabels = computed<string[] | undefined>(() => {\n if (props.multiple)\n return undefined\n\n const key = selectedKeys.value[0]\n if (key == null)\n return undefined\n\n const path = pathLabelsByKey.value.get(key)\n if (path?.length)\n return path\n\n const labels = selectedLabels.value\n return labels.length ? [labels[0]] : undefined\n})\n\nconst displayValue = computed(() => {\n const labels = selectedLabels.value\n if (labels.length === 0)\n return ''\n\n if (!props.multiple) {\n if (props.valueDisplay === 'path') {\n const path = selectedPathLabels.value\n if (path?.length)\n return path.join(' / ')\n }\n return labels[0]\n }\n\n if (labels.length === 1)\n return labels[0]\n return `${labels[0]} +${labels.length - 1}`\n})\n\nconst hasSelection = computed(() => selectedKeys.value.length > 0)\n\nconst resolvedFilterPlaceholder = computed(() => {\n return props.filterPlaceholder ?? t('gr.treeSelect.filterPlaceholder', 'Search…')\n})\n\nconst className = computed(() => {\n return grTreeSelectClass({\n size: props.size,\n state: props.state,\n invalid: props.invalid,\n })\n})\n\nconst panelClasses = computed(() => {\n return grTreeSelectPanelClass\n})\n\nfunction setOpen(next: boolean) {\n if (props.disabled)\n return\n\n if (open.value === next)\n return\n\n open.value = next\n emit('visibleChange', next)\n}\n\nfunction onClickOutside(): void {\n setOpen(false)\n}\n\nfunction openDropdown(): void {\n setOpen(true)\n}\n\nfunction closeDropdown(): void {\n setOpen(false)\n}\n\nfunction toggleDropdown(): void {\n setOpen(!open.value)\n}\n\nfunction onTriggerPointerDown(): void {\n hadPointerDownOnTrigger = true\n if (typeof window !== 'undefined') {\n window.setTimeout(() => {\n hadPointerDownOnTrigger = false\n }, 0)\n }\n else {\n // SSR / no window: reset sync\n hadPointerDownOnTrigger = false\n }\n}\n\nfunction onTriggerFocus(): void {\n if (hadPointerDownOnTrigger)\n return\n openDropdown()\n}\n\nfunction closeOnEscape(e: KeyboardEvent): void {\n if (e.key === 'Escape') {\n closeDropdown()\n nextTick(() => triggerEl.value?.focus())\n }\n}\n\nwatch(\n open,\n async (isOpen) => {\n if (typeof document === 'undefined')\n return\n\n document.removeEventListener('keydown', closeOnEscape)\n\n if (isOpen)\n document.addEventListener('keydown', closeOnEscape)\n\n if (!isOpen)\n return\n\n // sync tree highlight\n if (!props.multiple) {\n const v = props.modelValue\n if (v != null && !Array.isArray(v))\n treeRef.value?.setCurrentKey(v)\n }\n\n // focus filter input\n if (props.filterable) {\n await nextTick()\n filterInputRef.value?.focus()\n }\n },\n { immediate: true },\n)\n\nonUnmounted(() => {\n if (typeof document === 'undefined')\n return\n document.removeEventListener('keydown', closeOnEscape)\n})\n\nwatch(\n () => props.modelValue,\n (v) => {\n if (props.multiple)\n return\n if (v == null || Array.isArray(v)) {\n treeRef.value?.setCurrentKey(undefined)\n return\n }\n treeRef.value?.setCurrentKey(v)\n },\n)\n\nwatch(\n filterValue,\n (v) => {\n treeRef.value?.filter(v)\n },\n)\n\nwatch(\n open,\n (isOpen) => {\n if (isOpen)\n return\n if (filterValue.value.trim().length > 0)\n filterValue.value = ''\n },\n)\n\nfunction emitModel(next: GrTreeSelectModelValue) {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nfunction clear(): void {\n if (props.disabled)\n return\n\n const next: GrTreeSelectModelValue = props.multiple ? [] : null\n emitModel(next)\n emit('clear')\n if (!props.multiple)\n treeRef.value?.setCurrentKey(undefined)\n}\n\nfunction onTriggerKeydown(e: KeyboardEvent): void {\n if (props.disabled)\n return\n\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n openDropdown()\n }\n if (e.key === 'Escape') {\n e.preventDefault()\n closeDropdown()\n }\n}\n\nfunction onNodeClick(data: T, node: GrTreeNode<T>): void {\n emit('nodeClick', data, node)\n\n if (props.disabled)\n return\n\n if (props.multiple) {\n const next = new Set(selectedKeySet.value)\n if (next.has(node.key))\n next.delete(node.key)\n else\n next.add(node.key)\n emitModel([...next])\n\n if (closeOnSelectResolved.value) {\n closeDropdown()\n }\n return\n }\n\n emitModel(node.key)\n if (closeOnSelectResolved.value) {\n closeDropdown()\n }\n}\n</script>\n\n<template>\n <div\n ref=\"rootEl\"\n v-click-outside=\"{ handler: onClickOutside, enabled: open, exclude: clickOutsideExclude }\"\n data-gr-tree-select\n class=\"relative\"\n >\n <div class=\"relative\">\n <input\n ref=\"triggerEl\"\n data-testid=\"gr-tree-select-trigger\"\n data-gr-tree-select-trigger\n type=\"text\"\n :value=\"displayValue\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n readonly\n role=\"combobox\"\n aria-readonly=\"true\"\n :aria-expanded=\"open ? 'true' : 'false'\"\n :aria-invalid=\"invalid ? 'true' : undefined\"\n class=\"w-full rounded-md border bg-[var(--bg)] text-[var(--fg)] placeholder:text-[var(--muted-fg)] transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] disabled:opacity-50 disabled:cursor-not-allowed\"\n :class=\"[className, $slots.value ? 'text-transparent placeholder:text-transparent' : '']\"\n @pointerdown=\"onTriggerPointerDown\"\n @click=\"toggleDropdown\"\n @focus=\"onTriggerFocus\"\n @keydown=\"onTriggerKeydown\"\n >\n\n <button\n v-if=\"clearable && hasSelection\"\n data-testid=\"gr-tree-select-clear\"\n data-gr-tree-select-clear\n type=\"button\"\n class=\"absolute top-1/2 -translate-y-1/2 right-3 h-6 w-6 inline-flex items-center justify-center rounded-md text-[var(--muted-fg)] hover:text-[var(--fg)] hover:bg-[color-mix(in_srgb,var(--muted)_25%,transparent)] disabled:opacity-50\"\n :disabled=\"disabled\"\n :aria-label=\"t('gr.common.clear', 'Clear')\"\n @click.stop=\"clear\"\n >\n <span class=\"i-lucide-x inline-block h-4 w-4\" />\n </button>\n\n <span\n v-else\n data-testid=\"gr-tree-select-chevron\"\n data-gr-tree-select-chevron\n class=\"absolute top-1/2 -translate-y-1/2 right-3 text-[var(--muted-fg)] pointer-events-none\"\n >\n <span\n class=\"i-lucide-chevron-down inline-block h-4 w-4 transition-transform duration-150\"\n :class=\"open ? 'rotate-180' : ''\"\n />\n </span>\n\n <div\n v-if=\"$slots.value\"\n class=\"absolute inset-y-0 left-3 right-9 flex items-center pointer-events-none\"\n >\n <slot\n name=\"value\"\n :value=\"modelValue\"\n :labels=\"selectedLabels\"\n :display-value=\"displayValue\"\n :path-labels=\"selectedPathLabels\"\n />\n </div>\n </div>\n\n <teleport to=\"body\">\n <transition\n enter-active-class=\"transition ease-out duration-150\"\n enter-from-class=\"transform opacity-0 scale-95\"\n enter-to-class=\"transform opacity-100 scale-100\"\n leave-active-class=\"transition ease-in duration-100\"\n leave-from-class=\"transform opacity-100 scale-100\"\n leave-to-class=\"transform opacity-0 scale-95\"\n >\n <div\n v-show=\"open\"\n ref=\"panelEl\"\n data-testid=\"gr-tree-select-panel\"\n data-gr-tree-select-panel\n :style=\"floatingStyle\"\n >\n <div :class=\"panelClasses\">\n <div v-if=\"filterable\" class=\"p-2 border-b border-[var(--brd)]\">\n <GrInput\n ref=\"filterInputRef\"\n v-model=\"filterValue\"\n data-testid=\"gr-tree-select-filter\"\n data-gr-tree-select-filter\n type=\"search\"\n :inputmode=\"filterInputmode\"\n :placeholder=\"resolvedFilterPlaceholder\"\n size=\"sm\"\n />\n </div>\n\n <div\n class=\"p-1 overflow-auto\"\n :style=\"{ maxHeight: `${dropdownMaxHeight}px` }\"\n >\n <div v-if=\"(data?.length ?? 0) === 0\" class=\"px-3 py-2 text-[13px] text-[var(--muted-fg)]\">\n <slot name=\"empty\">\n {{ t('gr.treeSelect.empty', 'No data') }}\n </slot>\n </div>\n\n <GrTree\n v-else\n ref=\"treeRef\"\n :data=\"data\"\n :props=\"props.props\"\n :node-key=\"nodeKey as any\"\n :default-expanded-keys=\"defaultExpandedKeys\"\n :filter-node-method=\"filterNodeMethod\"\n :highlight-current=\"!multiple\"\n @node-click=\"onNodeClick\"\n >\n <template #default=\"{ node, data }\">\n <slot\n name=\"node\"\n :node=\"node\"\n :data=\"data\"\n :selected=\"selectedKeySet.has(node.key)\"\n >\n <div class=\"flex items-center gap-2 min-w-0\">\n <span\n class=\"inline-block h-4 w-4 shrink-0\"\n :class=\"selectedKeySet.has(node.key) ? 'i-lucide-check text-[var(--primary)]' : ''\"\n aria-hidden=\"true\"\n />\n <span class=\"truncate\">{{ node.label }}</span>\n </div>\n </slot>\n </template>\n </GrTree>\n </div>\n </div>\n </div>\n </transition>\n </teleport>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { n as grTreeSelectSafelist, t as grTreeSelectConfig } from "../../chunks/config-72sW9Bag2.js";
2
- import { t as GrTreeSelect_default } from "./chunks/GrTreeSelect-C1abr5uH.js";
1
+ import { n as grTreeSelectSafelist, t as grTreeSelectConfig } from "../../chunks/config-BIRO0vDJ2.js";
2
+ import { t as GrTreeSelect_default } from "./chunks/GrTreeSelect-B2xBKs5Q.js";
3
3
  export { GrTreeSelect_default as GrTreeSelect, GrTreeSelect_default as default, grTreeSelectConfig, grTreeSelectSafelist };