@feugene/granularity 0.49.0 → 0.50.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 (368) hide show
  1. package/README.md +3 -3
  2. package/dist/chunks/chevron-up-BhW6hi8L.js +23 -0
  3. package/dist/chunks/chevron-up-BhW6hi8L.js.map +1 -0
  4. package/dist/chunks/{config-E1cTyRVV.js → config-8n1VR0ju.js} +1 -1
  5. package/dist/chunks/{config-E1cTyRVV.js.map → config-8n1VR0ju.js.map} +1 -1
  6. package/dist/chunks/{config-DIDz_E5m.js → config-B34mkd53.js} +66 -1
  7. package/dist/chunks/config-B34mkd53.js.map +1 -0
  8. package/dist/chunks/{config-B5SBUa6u.js → config-B7qZqiUB.js} +28 -1
  9. package/dist/chunks/config-B7qZqiUB.js.map +1 -0
  10. package/dist/chunks/config-BBrPUEye.js +8 -0
  11. package/dist/chunks/config-BBrPUEye.js.map +1 -0
  12. package/dist/chunks/{config-CT4lP6S4.js → config-BOCzHqWh.js} +2 -2
  13. package/dist/chunks/{config-CT4lP6S4.js.map → config-BOCzHqWh.js.map} +1 -1
  14. package/dist/chunks/{config-iemgzS4x.js → config-BP1ktzwh.js} +2 -24
  15. package/dist/chunks/config-BP1ktzwh.js.map +1 -0
  16. package/dist/chunks/config-BTxmdRzT.js +28 -0
  17. package/dist/chunks/config-BTxmdRzT.js.map +1 -0
  18. package/dist/chunks/{config-CjWOTgLL.js → config-Bk52xd5l.js} +12 -5
  19. package/dist/chunks/config-Bk52xd5l.js.map +1 -0
  20. package/dist/chunks/{config-D3HOuHDe.js → config-C3SqBqSQ.js} +3 -1
  21. package/dist/chunks/config-C3SqBqSQ.js.map +1 -0
  22. package/dist/chunks/{config-2ZHRsdOc.js → config-C3uqd-sW.js} +1 -1
  23. package/dist/chunks/config-C3uqd-sW.js.map +1 -0
  24. package/dist/chunks/{config-BXRmsn3t.js → config-CPhcZzHi.js} +72 -10
  25. package/dist/chunks/config-CPhcZzHi.js.map +1 -0
  26. package/dist/chunks/config-CWtfxkM9.js.map +1 -1
  27. package/dist/chunks/{config--t2dxj0t.js → config-CmLTCmY9.js} +2 -2
  28. package/dist/chunks/{config--t2dxj0t.js.map → config-CmLTCmY9.js.map} +1 -1
  29. package/dist/chunks/{config-BAse0laT.js → config-CvtqB4ki.js} +8 -3
  30. package/dist/chunks/config-CvtqB4ki.js.map +1 -0
  31. package/dist/chunks/{config-BcXX7S7B.js → config-D-JgqV0J.js} +5 -1
  32. package/dist/chunks/{config-BcXX7S7B.js.map → config-D-JgqV0J.js.map} +1 -1
  33. package/dist/chunks/{config-BHLMTJaR.js → config-D1oVht-E.js} +8 -3
  34. package/dist/chunks/config-D1oVht-E.js.map +1 -0
  35. package/dist/chunks/{config-B42iJ48O.js → config-DG41PD9i.js} +13 -1
  36. package/dist/chunks/config-DG41PD9i.js.map +1 -0
  37. package/dist/chunks/{config-Bs1HwUcx.js → config-DPJ3jtiB.js} +12 -2
  38. package/dist/chunks/config-DPJ3jtiB.js.map +1 -0
  39. package/dist/chunks/{config-tNqtapcT.js → config-DpqjlCfB.js} +2 -2
  40. package/dist/chunks/{config-tNqtapcT.js.map → config-DpqjlCfB.js.map} +1 -1
  41. package/dist/chunks/{config-DNDgp9bB.js → config-DpzFoSIh.js} +64 -2
  42. package/dist/chunks/config-DpzFoSIh.js.map +1 -0
  43. package/dist/chunks/config-SPugeaHT.js +37 -0
  44. package/dist/chunks/config-SPugeaHT.js.map +1 -0
  45. package/dist/chunks/{en-CsQUoBS2.js → en-mIFywnV2.js} +22 -6
  46. package/dist/chunks/en-mIFywnV2.js.map +1 -0
  47. package/dist/chunks/{es-9nbkPvdA.js → es-CvthYwtB.js} +22 -6
  48. package/dist/chunks/es-CvthYwtB.js.map +1 -0
  49. package/dist/chunks/{es-DrUz5J6I.js → es-DlGd6Mrj.js} +3 -3
  50. package/dist/chunks/{es-DrUz5J6I.js.map → es-DlGd6Mrj.js.map} +1 -1
  51. package/dist/chunks/{generated-CxvC5O0V.js → generated-Cx4C7GRN.js} +84 -0
  52. package/dist/chunks/{generated-CxvC5O0V.js.map → generated-Cx4C7GRN.js.map} +1 -1
  53. package/dist/chunks/{grPopoverStyles-CYAeO3Ov.js → grPopoverStyles-CncEkiPu.js} +1 -1
  54. package/dist/chunks/{grPopoverStyles-CYAeO3Ov.js.map → grPopoverStyles-CncEkiPu.js.map} +1 -1
  55. package/dist/chunks/{grSelectStyles-D9EQ-pgK.js → grSelectStyles-Cam-IG9s.js} +3 -2
  56. package/dist/chunks/grSelectStyles-Cam-IG9s.js.map +1 -0
  57. package/dist/chunks/{grSliderStyles-kaz6VXZ3.js → grSliderStyles-CqzV0hll.js} +1 -1
  58. package/dist/chunks/grSliderStyles-CqzV0hll.js.map +1 -0
  59. package/dist/chunks/{config-CbEbLyDE.js → grSortableListStyles-CxieDmpe.js} +1 -27
  60. package/dist/chunks/grSortableListStyles-CxieDmpe.js.map +1 -0
  61. package/dist/chunks/grTableStyles-CPSxDTOW.js +66 -0
  62. package/dist/chunks/grTableStyles-CPSxDTOW.js.map +1 -0
  63. package/dist/chunks/{config-CMNfZO7S.js → grTabsStyles-DIz2VdIm.js} +1 -36
  64. package/dist/chunks/grTabsStyles-DIz2VdIm.js.map +1 -0
  65. package/dist/chunks/grTooltipStyles-CtbGEEGV.js +24 -0
  66. package/dist/chunks/grTooltipStyles-CtbGEEGV.js.map +1 -0
  67. package/dist/chunks/{granular-provider-B6xomapW.js → granular-provider-cv5vaM1a.js} +21 -19
  68. package/dist/chunks/granular-provider-cv5vaM1a.js.map +1 -0
  69. package/dist/chunks/hotkeySequence-BTHIM_5A.js +46 -0
  70. package/dist/chunks/hotkeySequence-BTHIM_5A.js.map +1 -0
  71. package/dist/chunks/{keyboard-DE2yhz_b.js → keyboard-BiFSgWLt.js} +70 -1
  72. package/dist/chunks/keyboard-BiFSgWLt.js.map +1 -0
  73. package/dist/chunks/optionPanel-DvY7Tv_4.js +182 -0
  74. package/dist/chunks/optionPanel-DvY7Tv_4.js.map +1 -0
  75. package/dist/chunks/overlayListPanel-D91jBCHU.js +21 -0
  76. package/dist/chunks/overlayListPanel-D91jBCHU.js.map +1 -0
  77. package/dist/chunks/{overlayStack-DH4Z7am1.js → overlayStack-DCkCgXZP.js} +1 -1
  78. package/dist/chunks/{overlayStack-DH4Z7am1.js.map → overlayStack-DCkCgXZP.js.map} +1 -1
  79. package/dist/chunks/{overlayPanelSurface-BKeMhRx4.js → overlayTransition-C0FDMx7Q.js} +24 -24
  80. package/dist/chunks/overlayTransition-C0FDMx7Q.js.map +1 -0
  81. package/dist/chunks/{ru-88i1WG0b.js → ru-CQKDR-kD.js} +22 -6
  82. package/dist/chunks/ru-CQKDR-kD.js.map +1 -0
  83. package/dist/chunks/{useMenuItemsFocus-B7Bl_aFA.js → useMenuItemsFocus-C031blYS.js} +1 -1
  84. package/dist/chunks/{useMenuItemsFocus-B7Bl_aFA.js.map → useMenuItemsFocus-C031blYS.js.map} +1 -1
  85. package/dist/chunks/{useModalOverlay-ACRkflzx.js → useModalOverlay-CKCQkGdB.js} +1 -1
  86. package/dist/chunks/{useModalOverlay-ACRkflzx.js.map → useModalOverlay-CKCQkGdB.js.map} +1 -1
  87. package/dist/components/GrAutocomplete/chunks/{GrAutocomplete-Chhw65pI.js → GrAutocomplete-Cyr1-ENw.js} +181 -123
  88. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-Cyr1-ENw.js.map +1 -0
  89. package/dist/components/GrAutocomplete/index.js +2 -2
  90. package/dist/components/GrAutocomplete/styles.css +1 -1
  91. package/dist/components/GrCarousel/chunks/{GrCarousel-ByuughtI.js → GrCarousel-CBj-PEPB.js} +186 -37
  92. package/dist/components/GrCarousel/chunks/GrCarousel-CBj-PEPB.js.map +1 -0
  93. package/dist/components/GrCarousel/index.js +2 -2
  94. package/dist/components/GrCarousel/styles.css +1 -1
  95. package/dist/components/GrCheckbox/chunks/{GrCheckbox-Dp201frb.js → GrCheckbox-B4NJc7Ur.js} +2 -1
  96. package/dist/components/GrCheckbox/chunks/GrCheckbox-B4NJc7Ur.js.map +1 -0
  97. package/dist/components/GrCheckbox/index.js +1 -1
  98. package/dist/components/GrCheckboxGroup/chunks/{GrCheckboxGroup-IpqG5qwm.js → GrCheckboxGroup-qZHpNFCX.js} +1 -1
  99. package/dist/components/GrCheckboxGroup/chunks/{GrCheckboxGroup-IpqG5qwm.js.map → GrCheckboxGroup-qZHpNFCX.js.map} +1 -1
  100. package/dist/components/GrCheckboxGroup/index.js +1 -1
  101. package/dist/components/GrColorPicker/chunks/{GrColorPicker-BRM_4lyI.js → GrColorPicker-vGSgpUV9.js} +353 -38
  102. package/dist/components/GrColorPicker/chunks/GrColorPicker-vGSgpUV9.js.map +1 -0
  103. package/dist/components/GrColorPicker/index.js +2 -2
  104. package/dist/components/GrColorPicker/styles.css +1 -1
  105. package/dist/components/GrCommandPalette/chunks/{GrCommandPalette-BJHmkDQv.js → GrCommandPalette-CAHgj0Aa.js} +23 -7
  106. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-CAHgj0Aa.js.map +1 -0
  107. package/dist/components/GrCommandPalette/index.js +1 -1
  108. package/dist/components/GrCommandPalette/styles.css +1 -1
  109. package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-BzUQwbec.js → GrConfirmDialog-dg021BMd.js} +1 -1
  110. package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-BzUQwbec.js.map → GrConfirmDialog-dg021BMd.js.map} +1 -1
  111. package/dist/components/GrConfirmDialog/index.js +1 -1
  112. package/dist/components/GrContextMenu/chunks/{GrContextMenu-RpxMHQXH.js → GrContextMenu-bQ1Vvy2c.js} +3 -3
  113. package/dist/components/GrContextMenu/chunks/{GrContextMenu-RpxMHQXH.js.map → GrContextMenu-bQ1Vvy2c.js.map} +1 -1
  114. package/dist/components/GrContextMenu/index.js +1 -1
  115. package/dist/components/GrDataTable/chunks/{GrDataTable-DQxYYgQk.js → GrDataTable-Bb2jWnRG.js} +576 -136
  116. package/dist/components/GrDataTable/chunks/GrDataTable-Bb2jWnRG.js.map +1 -0
  117. package/dist/components/GrDataTable/index.js +2 -2
  118. package/dist/components/GrDelta/chunks/{GrDelta-CgTvfoIN.js → GrDelta-BSv1KdMy.js} +0 -0
  119. package/dist/components/GrDelta/chunks/{GrDelta-CgTvfoIN.js.map → GrDelta-BSv1KdMy.js.map} +1 -1
  120. package/dist/components/GrDelta/index.js +2 -2
  121. package/dist/components/GrDialog/chunks/{GrDialog-DDz_OEhk.js → GrDialog-C9Zu72jB.js} +1 -1
  122. package/dist/components/GrDialog/chunks/{GrDialog-DDz_OEhk.js.map → GrDialog-C9Zu72jB.js.map} +1 -1
  123. package/dist/components/GrDialog/index.js +1 -1
  124. package/dist/components/GrDialogService/chunks/{GrDialogService-Dtq0ZCN5.js → GrDialogService-DLBifO61.js} +2 -2
  125. package/dist/components/GrDialogService/chunks/{GrDialogService-Dtq0ZCN5.js.map → GrDialogService-DLBifO61.js.map} +1 -1
  126. package/dist/components/GrDialogService/index.js +1 -1
  127. package/dist/components/GrDrawer/chunks/{GrDrawer-CNpSMuN-.js → GrDrawer-DOcRTE8G.js} +1 -1
  128. package/dist/components/GrDrawer/chunks/{GrDrawer-CNpSMuN-.js.map → GrDrawer-DOcRTE8G.js.map} +1 -1
  129. package/dist/components/GrDrawer/index.js +1 -1
  130. package/dist/components/GrDropdown/chunks/{GrDropdown-cLZuZMEY.js → GrDropdown-kxwmgfSe.js} +2 -2
  131. package/dist/components/GrDropdown/chunks/{GrDropdown-cLZuZMEY.js.map → GrDropdown-kxwmgfSe.js.map} +1 -1
  132. package/dist/components/GrDropdown/index.js +2 -2
  133. package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-Dxkz_ry4.js → GrDropdownMenu--VoK3VY0.js} +3 -34
  134. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu--VoK3VY0.js.map +1 -0
  135. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-CkM3BFPL.js +34 -0
  136. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-CkM3BFPL.js.map +1 -0
  137. package/dist/components/GrDropdownMenu/index.js +2 -1
  138. package/dist/components/GrEmptyState/chunks/{GrEmptyState-BbvwE-E0.js → GrEmptyState-Bz6-_ED4.js} +42 -6
  139. package/dist/components/GrEmptyState/chunks/GrEmptyState-Bz6-_ED4.js.map +1 -0
  140. package/dist/components/GrEmptyState/index.js +1 -1
  141. package/dist/components/GrFileUpload/chunks/{GrFileUpload-BwMR71zN.js → GrFileUpload-Bgdfnkd8.js} +5 -2
  142. package/dist/components/GrFileUpload/chunks/GrFileUpload-Bgdfnkd8.js.map +1 -0
  143. package/dist/components/GrFileUpload/index.js +1 -1
  144. package/dist/components/GrFormFile/chunks/{GrFormFile-Dlxx-9zi.js → GrFormFile-Ctq1isz-.js} +78 -11
  145. package/dist/components/GrFormFile/chunks/GrFormFile-Ctq1isz-.js.map +1 -0
  146. package/dist/components/GrFormFile/index.js +2 -2
  147. package/dist/components/GrFormFile/styles.css +1 -1
  148. package/dist/components/GrImageViewer/chunks/{GrImageViewer-DK-iVHHC.js → GrImageViewer-Bnql_dNP.js} +1 -1
  149. package/dist/components/GrImageViewer/chunks/{GrImageViewer-DK-iVHHC.js.map → GrImageViewer-Bnql_dNP.js.map} +1 -1
  150. package/dist/components/GrImageViewer/index.js +1 -1
  151. package/dist/components/GrInput/chunks/{GrInput-DV4gMWPR.js → GrInput-CoaFLpaU.js} +43 -22
  152. package/dist/components/GrInput/chunks/GrInput-CoaFLpaU.js.map +1 -0
  153. package/dist/components/GrInput/index.js +1 -1
  154. package/dist/components/GrInputTag/chunks/{GrInputTag-qnRdAZnn.js → GrInputTag-BzzNRBe3.js} +245 -18
  155. package/dist/components/GrInputTag/chunks/GrInputTag-BzzNRBe3.js.map +1 -0
  156. package/dist/components/GrInputTag/index.js +2 -2
  157. package/dist/components/GrJsonViewer/chunks/{GrJsonViewer-D7CyWzhT.js → GrJsonViewer-B6ZJ3GFH.js} +2 -2
  158. package/dist/components/GrJsonViewer/chunks/{GrJsonViewer-D7CyWzhT.js.map → GrJsonViewer-B6ZJ3GFH.js.map} +1 -1
  159. package/dist/components/GrJsonViewer/index.js +1 -1
  160. package/dist/components/GrKbd/chunks/{GrKbd-BNMeoaLV.js → GrKbd-D2rHDkQv.js} +42 -37
  161. package/dist/components/GrKbd/chunks/GrKbd-D2rHDkQv.js.map +1 -0
  162. package/dist/components/GrKbd/index.js +1 -1
  163. package/dist/components/GrModal/chunks/{GrModal-Cm0mtSXk.js → GrModal-SHb1U2qx.js} +1 -1
  164. package/dist/components/GrModal/chunks/{GrModal-Cm0mtSXk.js.map → GrModal-SHb1U2qx.js.map} +1 -1
  165. package/dist/components/GrModal/index.js +1 -1
  166. package/dist/components/GrNavbar/chunks/{GrNavbar-BRGuksiy.js → GrNavbar-IEIHC5Vt.js} +10 -4
  167. package/dist/components/GrNavbar/chunks/GrNavbar-IEIHC5Vt.js.map +1 -0
  168. package/dist/components/GrNavbar/index.js +2 -2
  169. package/dist/components/GrNumberInput/chunks/{GrNumberInput-BI6-vkcs.js → GrNumberInput-CmnUDaKi.js} +2 -22
  170. package/dist/components/GrNumberInput/chunks/{GrNumberInput-BI6-vkcs.js.map → GrNumberInput-CmnUDaKi.js.map} +1 -1
  171. package/dist/components/GrNumberInput/index.js +1 -1
  172. package/dist/components/GrPagination/chunks/{GrPagination-CMrLPzvL.js → GrPagination-AMbn5D8I.js} +1 -1
  173. package/dist/components/GrPagination/chunks/{GrPagination-CMrLPzvL.js.map → GrPagination-AMbn5D8I.js.map} +1 -1
  174. package/dist/components/GrPagination/index.js +1 -1
  175. package/dist/components/GrPopover/chunks/{GrPopover-CcWvr1ZA.js → GrPopover-DjVxt8bf.js} +3 -3
  176. package/dist/components/GrPopover/chunks/{GrPopover-CcWvr1ZA.js.map → GrPopover-DjVxt8bf.js.map} +1 -1
  177. package/dist/components/GrPopover/index.js +2 -2
  178. package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-BEL-QgwE.js → GrPromptDialog-BhbIZP1f.js} +3 -3
  179. package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-BEL-QgwE.js.map → GrPromptDialog-BhbIZP1f.js.map} +1 -1
  180. package/dist/components/GrPromptDialog/index.js +1 -1
  181. package/dist/components/GrSelect/chunks/{GrSelect-DvSq-nV-.js → GrSelect-B-ykrHpL.js} +24 -180
  182. package/dist/components/GrSelect/chunks/GrSelect-B-ykrHpL.js.map +1 -0
  183. package/dist/components/GrSelect/index.js +2 -2
  184. package/dist/components/GrSelect/styles.css +1 -1
  185. package/dist/components/GrSidebar/chunks/GrSidebar-jVvoLGDO.js +543 -0
  186. package/dist/components/GrSidebar/chunks/GrSidebar-jVvoLGDO.js.map +1 -0
  187. package/dist/components/GrSidebar/index.js +2 -2
  188. package/dist/components/GrSlider/chunks/{GrSlider-CO8N9SF6.js → GrSlider-DF2Cq0rV.js} +29 -4
  189. package/dist/components/GrSlider/chunks/GrSlider-DF2Cq0rV.js.map +1 -0
  190. package/dist/components/GrSlider/index.js +2 -2
  191. package/dist/components/GrSortableList/chunks/{GrSortableList-NKriuGm_.js → GrSortableList-ChH9nQBv.js} +1 -1
  192. package/dist/components/GrSortableList/chunks/{GrSortableList-NKriuGm_.js.map → GrSortableList-ChH9nQBv.js.map} +1 -1
  193. package/dist/components/GrSortableList/index.js +2 -2
  194. package/dist/components/GrTabPanels/chunks/GrTabPanels-BDt5oVdd.js +30 -0
  195. package/dist/components/GrTabPanels/chunks/GrTabPanels-BDt5oVdd.js.map +1 -0
  196. package/dist/components/GrTabPanels/chunks/GrTabPanels-BJvAflnA.js +83 -0
  197. package/dist/components/GrTabPanels/chunks/GrTabPanels-BJvAflnA.js.map +1 -0
  198. package/dist/components/GrTabPanels/index.js +2 -1
  199. package/dist/components/GrTable/chunks/{GrTable-CKJ-HrsN.js → GrTable-BQitSDep.js} +52 -16
  200. package/dist/components/GrTable/chunks/GrTable-BQitSDep.js.map +1 -0
  201. package/dist/components/GrTable/index.js +2 -2
  202. package/dist/components/GrTabs/chunks/{GrTabs-s9RzC1WX.js → GrTabs-DVC6nfWB.js} +1 -1
  203. package/dist/components/GrTabs/chunks/{GrTabs-s9RzC1WX.js.map → GrTabs-DVC6nfWB.js.map} +1 -1
  204. package/dist/components/GrTabs/index.js +2 -2
  205. package/dist/components/GrTabsWithPanels/chunks/GrTabsWithPanels-BYtuzouj.js +98 -0
  206. package/dist/components/GrTabsWithPanels/chunks/GrTabsWithPanels-BYtuzouj.js.map +1 -0
  207. package/dist/components/GrTabsWithPanels/index.js +3 -0
  208. package/dist/components/GrTextarea/chunks/{GrTextarea-Bfgc0DD2.js → GrTextarea-BFwyqcHB.js} +22 -5
  209. package/dist/components/GrTextarea/chunks/GrTextarea-BFwyqcHB.js.map +1 -0
  210. package/dist/components/GrTextarea/index.js +1 -1
  211. package/dist/components/GrToaster/chunks/{GrToaster-CZixNk0l.js → GrToaster-OzT1VKcp.js} +163 -32
  212. package/dist/components/GrToaster/chunks/GrToaster-OzT1VKcp.js.map +1 -0
  213. package/dist/components/GrToaster/index.js +2 -2
  214. package/dist/components/GrToaster/styles.css +1 -1
  215. package/dist/components/GrTooltip/chunks/{GrTooltip-DkMMM0uq.js → GrTooltip-BDcFycvW.js} +26 -13
  216. package/dist/components/GrTooltip/chunks/GrTooltip-BDcFycvW.js.map +1 -0
  217. package/dist/components/GrTooltip/index.js +2 -2
  218. package/dist/components/GrTransfer/chunks/{GrTransfer-DdfBUf35.js → GrTransfer-CV7BL5UK.js} +114 -12
  219. package/dist/components/GrTransfer/chunks/GrTransfer-CV7BL5UK.js.map +1 -0
  220. package/dist/components/GrTransfer/index.js +1 -1
  221. package/dist/components/GrTransfer/styles.css +1 -1
  222. package/dist/components/GrTree/chunks/{GrTree-6yZrncJE.js → GrTree-DpgaP8hk.js} +39 -1
  223. package/dist/components/GrTree/chunks/GrTree-DpgaP8hk.js.map +1 -0
  224. package/dist/components/GrTree/index.js +1 -1
  225. package/dist/components/GrTree/styles.css +1 -1
  226. package/dist/components/GrTreeSections/chunks/{GrTreeSections-DcmDcLwj.js → GrTreeSections-BeOj__44.js} +1 -1
  227. package/dist/components/GrTreeSections/chunks/{GrTreeSections-DcmDcLwj.js.map → GrTreeSections-BeOj__44.js.map} +1 -1
  228. package/dist/components/GrTreeSections/index.js +1 -1
  229. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-B6KoDYiZ.js → GrTreeSelect-BHq-T8wH.js} +113 -14
  230. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-BHq-T8wH.js.map +1 -0
  231. package/dist/components/GrTreeSelect/index.js +2 -2
  232. package/dist/composables/useFloating.js +1 -1
  233. package/dist/composables/useHotkeys.js +89 -0
  234. package/dist/composables/useHotkeys.js.map +1 -0
  235. package/dist/composables/useOverlayLayer.js +1 -1
  236. package/dist/directives/hotkey.js +19 -46
  237. package/dist/directives/hotkey.js.map +1 -1
  238. package/dist/granular-provider-node.js +1 -1
  239. package/dist/granular-provider.js +1 -1
  240. package/dist/i18n/all.js +1 -1
  241. package/dist/i18n/index.js +1 -1
  242. package/dist/index.js +71 -63
  243. package/dist/theme.js +1 -1
  244. package/dist/tokens.js +1 -1
  245. package/dist/types/components/GrAutocomplete/GrAutocomplete.vue.d.ts +4 -4
  246. package/dist/types/components/GrAutocomplete/composables/useAutocompleteNavigation.d.ts +12 -3
  247. package/dist/types/components/GrAutocomplete/composables/useAutocompletePanel.d.ts +12 -2
  248. package/dist/types/components/GrAutocomplete/composables/useAutocompleteValues.d.ts +7 -4
  249. package/dist/types/components/GrAutocomplete/composables/useRemoteOptions.d.ts +4 -4
  250. package/dist/types/components/GrAutocomplete/grAutocompleteStyles.d.ts +15 -1
  251. package/dist/types/components/GrAutocomplete/index.d.ts +1 -1
  252. package/dist/types/components/GrCarousel/GrCarousel.vue.d.ts +29 -1
  253. package/dist/types/components/GrCarousel/composables/useCarouselSwipe.d.ts +5 -0
  254. package/dist/types/components/GrCarousel/grCarouselContext.d.ts +21 -0
  255. package/dist/types/components/GrCarousel/grCarouselStyles.d.ts +39 -9
  256. package/dist/types/components/GrCheckbox/GrCheckbox.vue.d.ts +13 -0
  257. package/dist/types/components/GrColorPicker/GrColorPicker.vue.d.ts +18 -2
  258. package/dist/types/components/GrColorPicker/color.d.ts +13 -1
  259. package/dist/types/components/GrColorPicker/colorArea.d.ts +59 -0
  260. package/dist/types/components/GrColorPicker/defaults.d.ts +3 -1
  261. package/dist/types/components/GrColorPicker/eyeDropper.d.ts +21 -0
  262. package/dist/types/components/GrColorPicker/grColorPickerStyles.d.ts +42 -0
  263. package/dist/types/components/GrCommandPalette/GrCommandPalette.vue.d.ts +10 -1
  264. package/dist/types/components/GrDataTable/GrDataTable.vue.d.ts +41 -1
  265. package/dist/types/components/GrDataTable/composables/useDataTableGridNavigation.d.ts +53 -0
  266. package/dist/types/components/GrDataTable/grDataTableStyles.d.ts +8 -0
  267. package/dist/types/components/GrDataTable/index.d.ts +1 -1
  268. package/dist/types/components/GrDelta/grDeltaStyles.d.ts +10 -3
  269. package/dist/types/components/GrEmptyState/GrEmptyState.vue.d.ts +11 -2
  270. package/dist/types/components/GrEmptyState/grEmptyStateStyles.d.ts +10 -0
  271. package/dist/types/components/GrEmptyState/index.d.ts +1 -1
  272. package/dist/types/components/GrFileUpload/GrFileUpload.vue.d.ts +2 -1
  273. package/dist/types/components/GrFormFile/GrFormFile.vue.d.ts +10 -0
  274. package/dist/types/components/GrInput/GrInput.vue.d.ts +15 -0
  275. package/dist/types/components/GrInputTag/GrInputTag.vue.d.ts +16 -0
  276. package/dist/types/components/GrInputTag/grInputTagStyles.d.ts +11 -0
  277. package/dist/types/components/GrKbd/GrKbd.vue.d.ts +14 -0
  278. package/dist/types/components/GrNavbar/GrNavbar.vue.d.ts +18 -0
  279. package/dist/types/components/GrNavbar/grNavbarStyles.d.ts +10 -1
  280. package/dist/types/components/GrNavbar/index.d.ts +1 -0
  281. package/dist/types/components/GrSelect/composables/useSelectPanelItems.d.ts +8 -34
  282. package/dist/types/components/GrSelect/composables/useSelectVirtualization.d.ts +7 -0
  283. package/dist/types/components/GrSelect/grSelectStyles.d.ts +1 -1
  284. package/dist/types/components/GrSidebar/GrSidebar.vue.d.ts +20 -0
  285. package/dist/types/components/GrSidebar/GrSidebarItem.vue.d.ts +39 -5
  286. package/dist/types/components/GrSidebar/grSidebarStyles.d.ts +32 -0
  287. package/dist/types/components/GrSidebar/index.d.ts +1 -1
  288. package/dist/types/components/GrSidebar/sidebarContext.d.ts +23 -1
  289. package/dist/types/components/GrSlider/GrSlider.vue.d.ts +39 -1
  290. package/dist/types/components/GrSlider/grSliderStyles.d.ts +1 -1
  291. package/dist/types/components/GrTabPanels/context.d.ts +6 -0
  292. package/dist/types/components/GrTable/GrTable.vue.d.ts +37 -0
  293. package/dist/types/components/GrTable/grTableStyles.d.ts +16 -7
  294. package/dist/types/components/GrTabsWithPanels/GrTabsWithPanels.vue.d.ts +77 -0
  295. package/dist/types/components/GrTabsWithPanels/config.d.ts +1 -0
  296. package/dist/types/components/GrTabsWithPanels/index.d.ts +4 -0
  297. package/dist/types/components/GrTextarea/GrTextarea.vue.d.ts +19 -1
  298. package/dist/types/components/GrToaster/GrToaster.vue.d.ts +12 -0
  299. package/dist/types/components/GrToaster/grToasterStyles.d.ts +26 -0
  300. package/dist/types/components/GrTooltip/GrTooltip.vue.d.ts +22 -0
  301. package/dist/types/components/GrTransfer/GrTransfer.vue.d.ts +23 -0
  302. package/dist/types/components/GrTreeSelect/grTreeSelectStyles.d.ts +1 -1
  303. package/dist/types/components/GrTreeSelect/grTreeSelectTypes.d.ts +20 -0
  304. package/dist/types/components/shared/hotkey.d.ts +8 -9
  305. package/dist/types/components/shared/optionPanel.d.ts +100 -0
  306. package/dist/types/components/shared/overlayListPanel.d.ts +18 -0
  307. package/dist/types/composables/useHotkeys.d.ts +43 -0
  308. package/dist/types/granular-provider/shared.d.ts +1 -0
  309. package/dist/types/i18n/messages/en.d.ts +28 -0
  310. package/dist/types/i18n/messages/es.d.ts +28 -0
  311. package/dist/types/i18n/messages/ru.d.ts +28 -0
  312. package/dist/types/index.d.ts +3 -0
  313. package/dist/types/internal/hotkeySequence.d.ts +22 -0
  314. package/dist/types/internal/keyboard.d.ts +45 -0
  315. package/dist/web-types.json +463 -26
  316. package/package.json +9 -1
  317. package/dist/chunks/config-2ZHRsdOc.js.map +0 -1
  318. package/dist/chunks/config-B42iJ48O.js.map +0 -1
  319. package/dist/chunks/config-B5SBUa6u.js.map +0 -1
  320. package/dist/chunks/config-BAse0laT.js.map +0 -1
  321. package/dist/chunks/config-BHLMTJaR.js.map +0 -1
  322. package/dist/chunks/config-BXRmsn3t.js.map +0 -1
  323. package/dist/chunks/config-Bs1HwUcx.js.map +0 -1
  324. package/dist/chunks/config-CMNfZO7S.js.map +0 -1
  325. package/dist/chunks/config-CbEbLyDE.js.map +0 -1
  326. package/dist/chunks/config-CjWOTgLL.js.map +0 -1
  327. package/dist/chunks/config-D3HOuHDe.js.map +0 -1
  328. package/dist/chunks/config-DIDz_E5m.js.map +0 -1
  329. package/dist/chunks/config-DNDgp9bB.js.map +0 -1
  330. package/dist/chunks/config-iemgzS4x.js.map +0 -1
  331. package/dist/chunks/en-CsQUoBS2.js.map +0 -1
  332. package/dist/chunks/es-9nbkPvdA.js.map +0 -1
  333. package/dist/chunks/grSelectStyles-D9EQ-pgK.js.map +0 -1
  334. package/dist/chunks/grSliderStyles-kaz6VXZ3.js.map +0 -1
  335. package/dist/chunks/grTableStyles-DkQPMfx9.js +0 -39
  336. package/dist/chunks/grTableStyles-DkQPMfx9.js.map +0 -1
  337. package/dist/chunks/granular-provider-B6xomapW.js.map +0 -1
  338. package/dist/chunks/keyboard-DE2yhz_b.js.map +0 -1
  339. package/dist/chunks/overlayPanelSurface-BKeMhRx4.js.map +0 -1
  340. package/dist/chunks/ru-88i1WG0b.js.map +0 -1
  341. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-Chhw65pI.js.map +0 -1
  342. package/dist/components/GrCarousel/chunks/GrCarousel-ByuughtI.js.map +0 -1
  343. package/dist/components/GrCheckbox/chunks/GrCheckbox-Dp201frb.js.map +0 -1
  344. package/dist/components/GrColorPicker/chunks/GrColorPicker-BRM_4lyI.js.map +0 -1
  345. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-BJHmkDQv.js.map +0 -1
  346. package/dist/components/GrDataTable/chunks/GrDataTable-DQxYYgQk.js.map +0 -1
  347. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-Dxkz_ry4.js.map +0 -1
  348. package/dist/components/GrEmptyState/chunks/GrEmptyState-BbvwE-E0.js.map +0 -1
  349. package/dist/components/GrFileUpload/chunks/GrFileUpload-BwMR71zN.js.map +0 -1
  350. package/dist/components/GrFormFile/chunks/GrFormFile-Dlxx-9zi.js.map +0 -1
  351. package/dist/components/GrInput/chunks/GrInput-DV4gMWPR.js.map +0 -1
  352. package/dist/components/GrInputTag/chunks/GrInputTag-qnRdAZnn.js.map +0 -1
  353. package/dist/components/GrKbd/chunks/GrKbd-BNMeoaLV.js.map +0 -1
  354. package/dist/components/GrNavbar/chunks/GrNavbar-BRGuksiy.js.map +0 -1
  355. package/dist/components/GrSelect/chunks/GrSelect-DvSq-nV-.js.map +0 -1
  356. package/dist/components/GrSidebar/chunks/GrSidebar-DoKLlHSw.js +0 -264
  357. package/dist/components/GrSidebar/chunks/GrSidebar-DoKLlHSw.js.map +0 -1
  358. package/dist/components/GrSlider/chunks/GrSlider-CO8N9SF6.js.map +0 -1
  359. package/dist/components/GrTabPanels/chunks/GrTabPanels-5zsbqS1v.js +0 -92
  360. package/dist/components/GrTabPanels/chunks/GrTabPanels-5zsbqS1v.js.map +0 -1
  361. package/dist/components/GrTable/chunks/GrTable-CKJ-HrsN.js.map +0 -1
  362. package/dist/components/GrTextarea/chunks/GrTextarea-Bfgc0DD2.js.map +0 -1
  363. package/dist/components/GrToaster/chunks/GrToaster-CZixNk0l.js.map +0 -1
  364. package/dist/components/GrTooltip/chunks/GrTooltip-DkMMM0uq.js.map +0 -1
  365. package/dist/components/GrTransfer/chunks/GrTransfer-DdfBUf35.js.map +0 -1
  366. package/dist/components/GrTree/chunks/GrTree-6yZrncJE.js.map +0 -1
  367. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-B6KoDYiZ.js.map +0 -1
  368. package/dist/types/components/GrAutocomplete/composables/useAutocompleteVirtual.d.ts +0 -33
@@ -1 +1 @@
1
- {"version":3,"file":"GrDropdown-cLZuZMEY.js","names":[],"sources":["../../../../src/components/GrDropdown/GrDropdown.vue","../../../../src/components/GrDropdown/GrDropdown.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, nextTick, ref, watch } from 'vue'\n\nimport type { UseFloatingPlacement } from '../../composables/useFloating'\nimport { useControlledOpen } from '../../composables/internal/useControlledOpen'\nimport { useMenuItemsFocus } from '../../composables/internal/useMenuItemsFocus'\nimport GrPopover from '../GrPopover/GrPopover.vue'\nimport {\n grDropdownContentClass,\n type GrDropdownWidth,\n} from './grDropdownStyles'\n\nexport type GrDropdownTrigger = 'click' | 'hover'\n\nexport interface GrDropdownProps {\n /** Размещение панели относительно триггера; `flip` при нехватке места остаётся. */\n placement?: UseFloatingPlacement\n /** Зазор между триггером и панелью, px. */\n offset?: number\n /** Ширина панели: число — пиксели, строка — CSS-длина, `auto` — по контенту. */\n width?: GrDropdownWidth\n /** Чем открывается панель. В любом режиме работают клик и клавиатура. */\n trigger?: GrDropdownTrigger\n /** Задержка открытия по наведению, мс. */\n openDelay?: number\n /** Задержка закрытия после ухода курсора, мс. */\n closeDelay?: number\n /** Панель не открывается ничем; триггер остаётся фокусируемым. */\n disabled?: boolean\n /** Закрывать панель по клику внутри content. */\n closeOnContentClick?: boolean\n /** Дополнительные классы контейнера content. */\n contentClass?: string\n /**\n * Точечное переопределение точки монтирования. По умолчанию — общий портал\n * оверлеев (`#gr-portal` либо `portalTarget` из `GrConfigProvider`).\n */\n teleportTo?: string | HTMLElement\n /**\n * Контролируемое состояние панели (`v-model:open`). Без пропа панель ведёт\n * себя сама (uncontrolled), с ним — слушайте `update:open` и меняйте проп.\n */\n open?: boolean\n}\n\nexport interface GrDropdownEmits {\n /** Панель открылась/закрылась (`v-model:open`). */\n (e: 'update:open', value: boolean): void\n}\n\n/**\n * Меню поверх `GrPopover`.\n *\n * Панель, слой, портал, позиционирование, наведение с задержками и возврат\n * фокуса принадлежат примитиву. До этого здесь жила вторая их реализация:\n * карта `transform-origin` совпадала с поповерской дословно все двенадцать\n * записей, поверхность панели — шесть утилит — была скопирована, а сборка слоя\n * и портала повторяла его же. Расходились бы молча.\n *\n * Меню оставляет себе то, что меню и есть: кольцо фокуса по пунктам, поиск по\n * буквам, клавиатуру открытия и ширину панели. Тот же приём, что у\n * `GrContextMenu`, который так устроен с самого начала.\n */\nconst props = withDefaults(defineProps<GrDropdownProps>(), {\n placement: 'bottom-end',\n offset: 8,\n width: '12rem',\n trigger: 'click',\n openDelay: 120,\n closeDelay: 160,\n disabled: false,\n closeOnContentClick: true,\n contentClass: '',\n teleportTo: undefined,\n open: undefined,\n})\n\nconst emit = defineEmits<GrDropdownEmits>()\n\n// Имя `isOpen` сохранено: читатели работают с computed-Ref.\nconst { open: isOpen, setOpen } = useControlledOpen(\n () => props.open,\n next => emit('update:open', next),\n)\n\n/**\n * Контейнер пунктов — он же контейнер кольца фокуса.\n *\n * Панель `GrPopover` рисует `v-show`, поэтому содержимое слота существует в DOM\n * с монтирования: ссылка готова до первого открытия, и `focusAt` не приходится\n * ждать отрисовки панели.\n */\nconst menuEl = ref<HTMLElement | null>(null)\n\n// Кольцо фокуса и поиск по буквам — общие с `GrContextMenu`: паттерн `menu`\n// один, и вторая его реализация разошлась бы с первой незаметно для тестов.\nconst menu = useMenuItemsFocus({\n container: () => menuEl.value,\n close: () => close(),\n})\n\nfunction open(): void {\n if (props.disabled)\n return\n\n setOpen(true)\n}\n\nfunction close(): void {\n setOpen(false)\n}\n\nfunction toggle(): void {\n isOpen.value ? close() : open()\n}\n\nasync function openWithFocus(first: boolean): Promise<void> {\n if (props.disabled)\n return\n\n setOpen(true)\n await nextTick()\n menu.focusAt(first ? 0 : -1)\n}\n\n/**\n * Что меню добавляет к `triggerProps` примитива.\n *\n * Примитив отдаёт ARIA и клик; стрелки, открывающие меню с первого или\n * последнего пункта, принадлежат паттерну `menu` и живут здесь.\n *\n * И `aria-disabled` вместо нативного `disabled`. Расхождение намеренное:\n * нативный атрибут убирает кнопку из таб-порядка, а у меню триггер обязан\n * оставаться фокусируемым — иначе пользователь клавиатуры не найдёт его вовсе и\n * не узнает, почему меню недоступно. Форм-контролу (`GrColorPicker`) верно\n * обратное, поэтому примитив оставляет нативный, а меню его перекрывает.\n */\nfunction menuTriggerProps(popoverProps: Record<string, unknown>): Record<string, unknown> {\n return {\n ...popoverProps,\n 'disabled': undefined,\n 'aria-disabled': props.disabled || undefined,\n 'onKeydown': onTriggerKeydown,\n }\n}\n\nfunction onTriggerKeydown(event: KeyboardEvent): void {\n if (props.disabled)\n return\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n case 'ArrowDown':\n event.preventDefault()\n void openWithFocus(true)\n break\n case 'ArrowUp':\n event.preventDefault()\n void openWithFocus(false)\n break\n case 'Escape':\n if (isOpen.value) {\n event.preventDefault()\n close()\n }\n break\n }\n}\n\nwatch(\n () => props.disabled,\n (value) => {\n if (value)\n close()\n },\n)\n\nfunction toCssLength(value: GrDropdownWidth): string | undefined {\n if (value === 'auto')\n return undefined\n if (typeof value === 'number')\n return `${value}px`\n\n // Строка без единиц браузер просто отбросит, поэтому трактуем её как пиксели\n // — и предупреждаем: `width=\"48\"` легко прочесть как токен шкалы `w-48`.\n const bare = value.trim()\n if (/^\\d+$/.test(bare)) {\n if (__GR_DEV__) {\n console.warn(\n `[GrDropdown] width=\"${value}\" трактуется как ${bare}px. `\n + 'Шкалы tailwind-токенов (w-48) у пропа больше нет — укажите единицы: '\n + `width=\"${bare}px\" или :width=\"${bare}\".`,\n )\n }\n return `${bare}px`\n }\n\n return value\n}\n\nconst panelStyle = computed(() => {\n const width = toCssLength(props.width)\n\n return width ? { width } : undefined\n})\n\nconst contentClasses = computed(() => grDropdownContentClass(props.contentClass))\n\ndefineExpose({ open, close, toggle })\n\ndefineSlots<{\n /**\n * Триггер панели. `triggerProps` обязаны попасть на сам интерактивный\n * элемент, а не на обёртку вокруг него: `aria-expanded` и `aria-controls`\n * читаются с того узла, который получает фокус, а клик приезжает вместе с ними.\n */\n trigger?: (props: {\n open: boolean\n toggle: () => void\n close: () => void\n triggerProps: Record<string, unknown>\n }) => any\n /** Содержимое меню. */\n content?: (props: { close: () => void }) => any\n}>()\n</script>\n\n<template>\n <div data-gr-dropdown>\n <GrPopover\n role=\"menu\"\n padding=\"none\"\n :open=\"isOpen\"\n :placement=\"placement\"\n :offset-px=\"offset\"\n :trigger=\"trigger\"\n :open-delay=\"openDelay\"\n :close-delay=\"closeDelay\"\n :disabled=\"disabled\"\n :close-on-content-click=\"closeOnContentClick\"\n :teleport-to=\"teleportTo\"\n :auto-focus=\"false\"\n @update:open=\"setOpen\"\n >\n <template #trigger=\"{ triggerProps: popoverTriggerProps }\">\n <slot\n name=\"trigger\"\n :open=\"isOpen\"\n :toggle=\"toggle\"\n :close=\"close\"\n :trigger-props=\"menuTriggerProps(popoverTriggerProps)\"\n />\n </template>\n\n <template #content=\"{ close: closePanel }\">\n <div\n ref=\"menuEl\"\n data-gr-dropdown-panel\n :style=\"panelStyle\"\n @keydown=\"menu.onKeydown\"\n >\n <div data-gr-dropdown-content :class=\"contentClasses\">\n <slot name=\"content\" :close=\"closePanel\" />\n </div>\n </div>\n </template>\n </GrPopover>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, ref, watch } from 'vue'\n\nimport type { UseFloatingPlacement } from '../../composables/useFloating'\nimport { useControlledOpen } from '../../composables/internal/useControlledOpen'\nimport { useMenuItemsFocus } from '../../composables/internal/useMenuItemsFocus'\nimport GrPopover from '../GrPopover/GrPopover.vue'\nimport {\n grDropdownContentClass,\n type GrDropdownWidth,\n} from './grDropdownStyles'\n\nexport type GrDropdownTrigger = 'click' | 'hover'\n\nexport interface GrDropdownProps {\n /** Размещение панели относительно триггера; `flip` при нехватке места остаётся. */\n placement?: UseFloatingPlacement\n /** Зазор между триггером и панелью, px. */\n offset?: number\n /** Ширина панели: число — пиксели, строка — CSS-длина, `auto` — по контенту. */\n width?: GrDropdownWidth\n /** Чем открывается панель. В любом режиме работают клик и клавиатура. */\n trigger?: GrDropdownTrigger\n /** Задержка открытия по наведению, мс. */\n openDelay?: number\n /** Задержка закрытия после ухода курсора, мс. */\n closeDelay?: number\n /** Панель не открывается ничем; триггер остаётся фокусируемым. */\n disabled?: boolean\n /** Закрывать панель по клику внутри content. */\n closeOnContentClick?: boolean\n /** Дополнительные классы контейнера content. */\n contentClass?: string\n /**\n * Точечное переопределение точки монтирования. По умолчанию — общий портал\n * оверлеев (`#gr-portal` либо `portalTarget` из `GrConfigProvider`).\n */\n teleportTo?: string | HTMLElement\n /**\n * Контролируемое состояние панели (`v-model:open`). Без пропа панель ведёт\n * себя сама (uncontrolled), с ним — слушайте `update:open` и меняйте проп.\n */\n open?: boolean\n}\n\nexport interface GrDropdownEmits {\n /** Панель открылась/закрылась (`v-model:open`). */\n (e: 'update:open', value: boolean): void\n}\n\n/**\n * Меню поверх `GrPopover`.\n *\n * Панель, слой, портал, позиционирование, наведение с задержками и возврат\n * фокуса принадлежат примитиву. До этого здесь жила вторая их реализация:\n * карта `transform-origin` совпадала с поповерской дословно все двенадцать\n * записей, поверхность панели — шесть утилит — была скопирована, а сборка слоя\n * и портала повторяла его же. Расходились бы молча.\n *\n * Меню оставляет себе то, что меню и есть: кольцо фокуса по пунктам, поиск по\n * буквам, клавиатуру открытия и ширину панели. Тот же приём, что у\n * `GrContextMenu`, который так устроен с самого начала.\n */\nconst props = withDefaults(defineProps<GrDropdownProps>(), {\n placement: 'bottom-end',\n offset: 8,\n width: '12rem',\n trigger: 'click',\n openDelay: 120,\n closeDelay: 160,\n disabled: false,\n closeOnContentClick: true,\n contentClass: '',\n teleportTo: undefined,\n open: undefined,\n})\n\nconst emit = defineEmits<GrDropdownEmits>()\n\n// Имя `isOpen` сохранено: читатели работают с computed-Ref.\nconst { open: isOpen, setOpen } = useControlledOpen(\n () => props.open,\n next => emit('update:open', next),\n)\n\n/**\n * Контейнер пунктов — он же контейнер кольца фокуса.\n *\n * Панель `GrPopover` рисует `v-show`, поэтому содержимое слота существует в DOM\n * с монтирования: ссылка готова до первого открытия, и `focusAt` не приходится\n * ждать отрисовки панели.\n */\nconst menuEl = ref<HTMLElement | null>(null)\n\n// Кольцо фокуса и поиск по буквам — общие с `GrContextMenu`: паттерн `menu`\n// один, и вторая его реализация разошлась бы с первой незаметно для тестов.\nconst menu = useMenuItemsFocus({\n container: () => menuEl.value,\n close: () => close(),\n})\n\nfunction open(): void {\n if (props.disabled)\n return\n\n setOpen(true)\n}\n\nfunction close(): void {\n setOpen(false)\n}\n\nfunction toggle(): void {\n isOpen.value ? close() : open()\n}\n\nasync function openWithFocus(first: boolean): Promise<void> {\n if (props.disabled)\n return\n\n setOpen(true)\n await nextTick()\n menu.focusAt(first ? 0 : -1)\n}\n\n/**\n * Что меню добавляет к `triggerProps` примитива.\n *\n * Примитив отдаёт ARIA и клик; стрелки, открывающие меню с первого или\n * последнего пункта, принадлежат паттерну `menu` и живут здесь.\n *\n * И `aria-disabled` вместо нативного `disabled`. Расхождение намеренное:\n * нативный атрибут убирает кнопку из таб-порядка, а у меню триггер обязан\n * оставаться фокусируемым — иначе пользователь клавиатуры не найдёт его вовсе и\n * не узнает, почему меню недоступно. Форм-контролу (`GrColorPicker`) верно\n * обратное, поэтому примитив оставляет нативный, а меню его перекрывает.\n */\nfunction menuTriggerProps(popoverProps: Record<string, unknown>): Record<string, unknown> {\n return {\n ...popoverProps,\n 'disabled': undefined,\n 'aria-disabled': props.disabled || undefined,\n 'onKeydown': onTriggerKeydown,\n }\n}\n\nfunction onTriggerKeydown(event: KeyboardEvent): void {\n if (props.disabled)\n return\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n case 'ArrowDown':\n event.preventDefault()\n void openWithFocus(true)\n break\n case 'ArrowUp':\n event.preventDefault()\n void openWithFocus(false)\n break\n case 'Escape':\n if (isOpen.value) {\n event.preventDefault()\n close()\n }\n break\n }\n}\n\nwatch(\n () => props.disabled,\n (value) => {\n if (value)\n close()\n },\n)\n\nfunction toCssLength(value: GrDropdownWidth): string | undefined {\n if (value === 'auto')\n return undefined\n if (typeof value === 'number')\n return `${value}px`\n\n // Строка без единиц браузер просто отбросит, поэтому трактуем её как пиксели\n // — и предупреждаем: `width=\"48\"` легко прочесть как токен шкалы `w-48`.\n const bare = value.trim()\n if (/^\\d+$/.test(bare)) {\n if (__GR_DEV__) {\n console.warn(\n `[GrDropdown] width=\"${value}\" трактуется как ${bare}px. `\n + 'Шкалы tailwind-токенов (w-48) у пропа больше нет — укажите единицы: '\n + `width=\"${bare}px\" или :width=\"${bare}\".`,\n )\n }\n return `${bare}px`\n }\n\n return value\n}\n\nconst panelStyle = computed(() => {\n const width = toCssLength(props.width)\n\n return width ? { width } : undefined\n})\n\nconst contentClasses = computed(() => grDropdownContentClass(props.contentClass))\n\ndefineExpose({ open, close, toggle })\n\ndefineSlots<{\n /**\n * Триггер панели. `triggerProps` обязаны попасть на сам интерактивный\n * элемент, а не на обёртку вокруг него: `aria-expanded` и `aria-controls`\n * читаются с того узла, который получает фокус, а клик приезжает вместе с ними.\n */\n trigger?: (props: {\n open: boolean\n toggle: () => void\n close: () => void\n triggerProps: Record<string, unknown>\n }) => any\n /** Содержимое меню. */\n content?: (props: { close: () => void }) => any\n}>()\n</script>\n\n<template>\n <div data-gr-dropdown>\n <GrPopover\n role=\"menu\"\n padding=\"none\"\n :open=\"isOpen\"\n :placement=\"placement\"\n :offset-px=\"offset\"\n :trigger=\"trigger\"\n :open-delay=\"openDelay\"\n :close-delay=\"closeDelay\"\n :disabled=\"disabled\"\n :close-on-content-click=\"closeOnContentClick\"\n :teleport-to=\"teleportTo\"\n :auto-focus=\"false\"\n @update:open=\"setOpen\"\n >\n <template #trigger=\"{ triggerProps: popoverTriggerProps }\">\n <slot\n name=\"trigger\"\n :open=\"isOpen\"\n :toggle=\"toggle\"\n :close=\"close\"\n :trigger-props=\"menuTriggerProps(popoverTriggerProps)\"\n />\n </template>\n\n <template #content=\"{ close: closePanel }\">\n <div\n ref=\"menuEl\"\n data-gr-dropdown-panel\n :style=\"panelStyle\"\n @keydown=\"menu.onKeydown\"\n >\n <div data-gr-dropdown-content :class=\"contentClasses\">\n <slot name=\"content\" :close=\"closePanel\" />\n </div>\n </div>\n </template>\n </GrPopover>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"GrDropdown-kxwmgfSe.js","names":[],"sources":["../../../../src/components/GrDropdown/GrDropdown.vue","../../../../src/components/GrDropdown/GrDropdown.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, nextTick, ref, watch } from 'vue'\n\nimport type { UseFloatingPlacement } from '../../composables/useFloating'\nimport { useControlledOpen } from '../../composables/internal/useControlledOpen'\nimport { useMenuItemsFocus } from '../../composables/internal/useMenuItemsFocus'\nimport GrPopover from '../GrPopover/GrPopover.vue'\nimport {\n grDropdownContentClass,\n type GrDropdownWidth,\n} from './grDropdownStyles'\n\nexport type GrDropdownTrigger = 'click' | 'hover'\n\nexport interface GrDropdownProps {\n /** Размещение панели относительно триггера; `flip` при нехватке места остаётся. */\n placement?: UseFloatingPlacement\n /** Зазор между триггером и панелью, px. */\n offset?: number\n /** Ширина панели: число — пиксели, строка — CSS-длина, `auto` — по контенту. */\n width?: GrDropdownWidth\n /** Чем открывается панель. В любом режиме работают клик и клавиатура. */\n trigger?: GrDropdownTrigger\n /** Задержка открытия по наведению, мс. */\n openDelay?: number\n /** Задержка закрытия после ухода курсора, мс. */\n closeDelay?: number\n /** Панель не открывается ничем; триггер остаётся фокусируемым. */\n disabled?: boolean\n /** Закрывать панель по клику внутри content. */\n closeOnContentClick?: boolean\n /** Дополнительные классы контейнера content. */\n contentClass?: string\n /**\n * Точечное переопределение точки монтирования. По умолчанию — общий портал\n * оверлеев (`#gr-portal` либо `portalTarget` из `GrConfigProvider`).\n */\n teleportTo?: string | HTMLElement\n /**\n * Контролируемое состояние панели (`v-model:open`). Без пропа панель ведёт\n * себя сама (uncontrolled), с ним — слушайте `update:open` и меняйте проп.\n */\n open?: boolean\n}\n\nexport interface GrDropdownEmits {\n /** Панель открылась/закрылась (`v-model:open`). */\n (e: 'update:open', value: boolean): void\n}\n\n/**\n * Меню поверх `GrPopover`.\n *\n * Панель, слой, портал, позиционирование, наведение с задержками и возврат\n * фокуса принадлежат примитиву. До этого здесь жила вторая их реализация:\n * карта `transform-origin` совпадала с поповерской дословно все двенадцать\n * записей, поверхность панели — шесть утилит — была скопирована, а сборка слоя\n * и портала повторяла его же. Расходились бы молча.\n *\n * Меню оставляет себе то, что меню и есть: кольцо фокуса по пунктам, поиск по\n * буквам, клавиатуру открытия и ширину панели. Тот же приём, что у\n * `GrContextMenu`, который так устроен с самого начала.\n */\nconst props = withDefaults(defineProps<GrDropdownProps>(), {\n placement: 'bottom-end',\n offset: 8,\n width: '12rem',\n trigger: 'click',\n openDelay: 120,\n closeDelay: 160,\n disabled: false,\n closeOnContentClick: true,\n contentClass: '',\n teleportTo: undefined,\n open: undefined,\n})\n\nconst emit = defineEmits<GrDropdownEmits>()\n\n// Имя `isOpen` сохранено: читатели работают с computed-Ref.\nconst { open: isOpen, setOpen } = useControlledOpen(\n () => props.open,\n next => emit('update:open', next),\n)\n\n/**\n * Контейнер пунктов — он же контейнер кольца фокуса.\n *\n * Панель `GrPopover` рисует `v-show`, поэтому содержимое слота существует в DOM\n * с монтирования: ссылка готова до первого открытия, и `focusAt` не приходится\n * ждать отрисовки панели.\n */\nconst menuEl = ref<HTMLElement | null>(null)\n\n// Кольцо фокуса и поиск по буквам — общие с `GrContextMenu`: паттерн `menu`\n// один, и вторая его реализация разошлась бы с первой незаметно для тестов.\nconst menu = useMenuItemsFocus({\n container: () => menuEl.value,\n close: () => close(),\n})\n\nfunction open(): void {\n if (props.disabled)\n return\n\n setOpen(true)\n}\n\nfunction close(): void {\n setOpen(false)\n}\n\nfunction toggle(): void {\n isOpen.value ? close() : open()\n}\n\nasync function openWithFocus(first: boolean): Promise<void> {\n if (props.disabled)\n return\n\n setOpen(true)\n await nextTick()\n menu.focusAt(first ? 0 : -1)\n}\n\n/**\n * Что меню добавляет к `triggerProps` примитива.\n *\n * Примитив отдаёт ARIA и клик; стрелки, открывающие меню с первого или\n * последнего пункта, принадлежат паттерну `menu` и живут здесь.\n *\n * И `aria-disabled` вместо нативного `disabled`. Расхождение намеренное:\n * нативный атрибут убирает кнопку из таб-порядка, а у меню триггер обязан\n * оставаться фокусируемым — иначе пользователь клавиатуры не найдёт его вовсе и\n * не узнает, почему меню недоступно. Форм-контролу (`GrColorPicker`) верно\n * обратное, поэтому примитив оставляет нативный, а меню его перекрывает.\n */\nfunction menuTriggerProps(popoverProps: Record<string, unknown>): Record<string, unknown> {\n return {\n ...popoverProps,\n 'disabled': undefined,\n 'aria-disabled': props.disabled || undefined,\n 'onKeydown': onTriggerKeydown,\n }\n}\n\nfunction onTriggerKeydown(event: KeyboardEvent): void {\n if (props.disabled)\n return\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n case 'ArrowDown':\n event.preventDefault()\n void openWithFocus(true)\n break\n case 'ArrowUp':\n event.preventDefault()\n void openWithFocus(false)\n break\n case 'Escape':\n if (isOpen.value) {\n event.preventDefault()\n close()\n }\n break\n }\n}\n\nwatch(\n () => props.disabled,\n (value) => {\n if (value)\n close()\n },\n)\n\nfunction toCssLength(value: GrDropdownWidth): string | undefined {\n if (value === 'auto')\n return undefined\n if (typeof value === 'number')\n return `${value}px`\n\n // Строка без единиц браузер просто отбросит, поэтому трактуем её как пиксели\n // — и предупреждаем: `width=\"48\"` легко прочесть как токен шкалы `w-48`.\n const bare = value.trim()\n if (/^\\d+$/.test(bare)) {\n if (__GR_DEV__) {\n console.warn(\n `[GrDropdown] width=\"${value}\" трактуется как ${bare}px. `\n + 'Шкалы tailwind-токенов (w-48) у пропа больше нет — укажите единицы: '\n + `width=\"${bare}px\" или :width=\"${bare}\".`,\n )\n }\n return `${bare}px`\n }\n\n return value\n}\n\nconst panelStyle = computed(() => {\n const width = toCssLength(props.width)\n\n return width ? { width } : undefined\n})\n\nconst contentClasses = computed(() => grDropdownContentClass(props.contentClass))\n\ndefineExpose({ open, close, toggle })\n\ndefineSlots<{\n /**\n * Триггер панели. `triggerProps` обязаны попасть на сам интерактивный\n * элемент, а не на обёртку вокруг него: `aria-expanded` и `aria-controls`\n * читаются с того узла, который получает фокус, а клик приезжает вместе с ними.\n */\n trigger?: (props: {\n open: boolean\n toggle: () => void\n close: () => void\n triggerProps: Record<string, unknown>\n }) => any\n /** Содержимое меню. */\n content?: (props: { close: () => void }) => any\n}>()\n</script>\n\n<template>\n <div data-gr-dropdown>\n <GrPopover\n role=\"menu\"\n padding=\"none\"\n :open=\"isOpen\"\n :placement=\"placement\"\n :offset-px=\"offset\"\n :trigger=\"trigger\"\n :open-delay=\"openDelay\"\n :close-delay=\"closeDelay\"\n :disabled=\"disabled\"\n :close-on-content-click=\"closeOnContentClick\"\n :teleport-to=\"teleportTo\"\n :auto-focus=\"false\"\n @update:open=\"setOpen\"\n >\n <template #trigger=\"{ triggerProps: popoverTriggerProps }\">\n <slot\n name=\"trigger\"\n :open=\"isOpen\"\n :toggle=\"toggle\"\n :close=\"close\"\n :trigger-props=\"menuTriggerProps(popoverTriggerProps)\"\n />\n </template>\n\n <template #content=\"{ close: closePanel }\">\n <div\n ref=\"menuEl\"\n data-gr-dropdown-panel\n :style=\"panelStyle\"\n @keydown=\"menu.onKeydown\"\n >\n <div data-gr-dropdown-content :class=\"contentClasses\">\n <slot name=\"content\" :close=\"closePanel\" />\n </div>\n </div>\n </template>\n </GrPopover>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, ref, watch } from 'vue'\n\nimport type { UseFloatingPlacement } from '../../composables/useFloating'\nimport { useControlledOpen } from '../../composables/internal/useControlledOpen'\nimport { useMenuItemsFocus } from '../../composables/internal/useMenuItemsFocus'\nimport GrPopover from '../GrPopover/GrPopover.vue'\nimport {\n grDropdownContentClass,\n type GrDropdownWidth,\n} from './grDropdownStyles'\n\nexport type GrDropdownTrigger = 'click' | 'hover'\n\nexport interface GrDropdownProps {\n /** Размещение панели относительно триггера; `flip` при нехватке места остаётся. */\n placement?: UseFloatingPlacement\n /** Зазор между триггером и панелью, px. */\n offset?: number\n /** Ширина панели: число — пиксели, строка — CSS-длина, `auto` — по контенту. */\n width?: GrDropdownWidth\n /** Чем открывается панель. В любом режиме работают клик и клавиатура. */\n trigger?: GrDropdownTrigger\n /** Задержка открытия по наведению, мс. */\n openDelay?: number\n /** Задержка закрытия после ухода курсора, мс. */\n closeDelay?: number\n /** Панель не открывается ничем; триггер остаётся фокусируемым. */\n disabled?: boolean\n /** Закрывать панель по клику внутри content. */\n closeOnContentClick?: boolean\n /** Дополнительные классы контейнера content. */\n contentClass?: string\n /**\n * Точечное переопределение точки монтирования. По умолчанию — общий портал\n * оверлеев (`#gr-portal` либо `portalTarget` из `GrConfigProvider`).\n */\n teleportTo?: string | HTMLElement\n /**\n * Контролируемое состояние панели (`v-model:open`). Без пропа панель ведёт\n * себя сама (uncontrolled), с ним — слушайте `update:open` и меняйте проп.\n */\n open?: boolean\n}\n\nexport interface GrDropdownEmits {\n /** Панель открылась/закрылась (`v-model:open`). */\n (e: 'update:open', value: boolean): void\n}\n\n/**\n * Меню поверх `GrPopover`.\n *\n * Панель, слой, портал, позиционирование, наведение с задержками и возврат\n * фокуса принадлежат примитиву. До этого здесь жила вторая их реализация:\n * карта `transform-origin` совпадала с поповерской дословно все двенадцать\n * записей, поверхность панели — шесть утилит — была скопирована, а сборка слоя\n * и портала повторяла его же. Расходились бы молча.\n *\n * Меню оставляет себе то, что меню и есть: кольцо фокуса по пунктам, поиск по\n * буквам, клавиатуру открытия и ширину панели. Тот же приём, что у\n * `GrContextMenu`, который так устроен с самого начала.\n */\nconst props = withDefaults(defineProps<GrDropdownProps>(), {\n placement: 'bottom-end',\n offset: 8,\n width: '12rem',\n trigger: 'click',\n openDelay: 120,\n closeDelay: 160,\n disabled: false,\n closeOnContentClick: true,\n contentClass: '',\n teleportTo: undefined,\n open: undefined,\n})\n\nconst emit = defineEmits<GrDropdownEmits>()\n\n// Имя `isOpen` сохранено: читатели работают с computed-Ref.\nconst { open: isOpen, setOpen } = useControlledOpen(\n () => props.open,\n next => emit('update:open', next),\n)\n\n/**\n * Контейнер пунктов — он же контейнер кольца фокуса.\n *\n * Панель `GrPopover` рисует `v-show`, поэтому содержимое слота существует в DOM\n * с монтирования: ссылка готова до первого открытия, и `focusAt` не приходится\n * ждать отрисовки панели.\n */\nconst menuEl = ref<HTMLElement | null>(null)\n\n// Кольцо фокуса и поиск по буквам — общие с `GrContextMenu`: паттерн `menu`\n// один, и вторая его реализация разошлась бы с первой незаметно для тестов.\nconst menu = useMenuItemsFocus({\n container: () => menuEl.value,\n close: () => close(),\n})\n\nfunction open(): void {\n if (props.disabled)\n return\n\n setOpen(true)\n}\n\nfunction close(): void {\n setOpen(false)\n}\n\nfunction toggle(): void {\n isOpen.value ? close() : open()\n}\n\nasync function openWithFocus(first: boolean): Promise<void> {\n if (props.disabled)\n return\n\n setOpen(true)\n await nextTick()\n menu.focusAt(first ? 0 : -1)\n}\n\n/**\n * Что меню добавляет к `triggerProps` примитива.\n *\n * Примитив отдаёт ARIA и клик; стрелки, открывающие меню с первого или\n * последнего пункта, принадлежат паттерну `menu` и живут здесь.\n *\n * И `aria-disabled` вместо нативного `disabled`. Расхождение намеренное:\n * нативный атрибут убирает кнопку из таб-порядка, а у меню триггер обязан\n * оставаться фокусируемым — иначе пользователь клавиатуры не найдёт его вовсе и\n * не узнает, почему меню недоступно. Форм-контролу (`GrColorPicker`) верно\n * обратное, поэтому примитив оставляет нативный, а меню его перекрывает.\n */\nfunction menuTriggerProps(popoverProps: Record<string, unknown>): Record<string, unknown> {\n return {\n ...popoverProps,\n 'disabled': undefined,\n 'aria-disabled': props.disabled || undefined,\n 'onKeydown': onTriggerKeydown,\n }\n}\n\nfunction onTriggerKeydown(event: KeyboardEvent): void {\n if (props.disabled)\n return\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n case 'ArrowDown':\n event.preventDefault()\n void openWithFocus(true)\n break\n case 'ArrowUp':\n event.preventDefault()\n void openWithFocus(false)\n break\n case 'Escape':\n if (isOpen.value) {\n event.preventDefault()\n close()\n }\n break\n }\n}\n\nwatch(\n () => props.disabled,\n (value) => {\n if (value)\n close()\n },\n)\n\nfunction toCssLength(value: GrDropdownWidth): string | undefined {\n if (value === 'auto')\n return undefined\n if (typeof value === 'number')\n return `${value}px`\n\n // Строка без единиц браузер просто отбросит, поэтому трактуем её как пиксели\n // — и предупреждаем: `width=\"48\"` легко прочесть как токен шкалы `w-48`.\n const bare = value.trim()\n if (/^\\d+$/.test(bare)) {\n if (__GR_DEV__) {\n console.warn(\n `[GrDropdown] width=\"${value}\" трактуется как ${bare}px. `\n + 'Шкалы tailwind-токенов (w-48) у пропа больше нет — укажите единицы: '\n + `width=\"${bare}px\" или :width=\"${bare}\".`,\n )\n }\n return `${bare}px`\n }\n\n return value\n}\n\nconst panelStyle = computed(() => {\n const width = toCssLength(props.width)\n\n return width ? { width } : undefined\n})\n\nconst contentClasses = computed(() => grDropdownContentClass(props.contentClass))\n\ndefineExpose({ open, close, toggle })\n\ndefineSlots<{\n /**\n * Триггер панели. `triggerProps` обязаны попасть на сам интерактивный\n * элемент, а не на обёртку вокруг него: `aria-expanded` и `aria-controls`\n * читаются с того узла, который получает фокус, а клик приезжает вместе с ними.\n */\n trigger?: (props: {\n open: boolean\n toggle: () => void\n close: () => void\n triggerProps: Record<string, unknown>\n }) => any\n /** Содержимое меню. */\n content?: (props: { close: () => void }) => any\n}>()\n</script>\n\n<template>\n <div data-gr-dropdown>\n <GrPopover\n role=\"menu\"\n padding=\"none\"\n :open=\"isOpen\"\n :placement=\"placement\"\n :offset-px=\"offset\"\n :trigger=\"trigger\"\n :open-delay=\"openDelay\"\n :close-delay=\"closeDelay\"\n :disabled=\"disabled\"\n :close-on-content-click=\"closeOnContentClick\"\n :teleport-to=\"teleportTo\"\n :auto-focus=\"false\"\n @update:open=\"setOpen\"\n >\n <template #trigger=\"{ triggerProps: popoverTriggerProps }\">\n <slot\n name=\"trigger\"\n :open=\"isOpen\"\n :toggle=\"toggle\"\n :close=\"close\"\n :trigger-props=\"menuTriggerProps(popoverTriggerProps)\"\n />\n </template>\n\n <template #content=\"{ close: closePanel }\">\n <div\n ref=\"menuEl\"\n data-gr-dropdown-panel\n :style=\"panelStyle\"\n @keydown=\"menu.onKeydown\"\n >\n <div data-gr-dropdown-content :class=\"contentClasses\">\n <slot name=\"content\" :close=\"closePanel\" />\n </div>\n </div>\n </template>\n </GrPopover>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { t as GrDropdown_default } from "./chunks/GrDropdown-cLZuZMEY.js";
2
- import { n as grDropdownSafelist, t as grDropdownConfig } from "../../chunks/config-CT4lP6S4.js";
1
+ import { t as GrDropdown_default } from "./chunks/GrDropdown-kxwmgfSe.js";
2
+ import { n as grDropdownSafelist, t as grDropdownConfig } from "../../chunks/config-BOCzHqWh.js";
3
3
  export { GrDropdown_default as GrDropdown, GrDropdown_default as default, grDropdownConfig, grDropdownSafelist };
@@ -1,7 +1,6 @@
1
- import { a as colsClass, o as columnBaseClass, s as columnsBaseClass, t as alignClass } from "../../../chunks/grDropdownMenuStyles-Cf8OdR8S.js";
2
1
  import { n as GrDropdownMenuEntries_default, t as GrDropdownMenuList_default } from "./GrDropdownMenuList-B33ZzwfB.js";
3
- import { t as GrDropdown_default } from "../../GrDropdown/chunks/GrDropdown-cLZuZMEY.js";
4
- import { createBlock, createElementBlock, createVNode, defineComponent, guardReactiveProps, normalizeClass, normalizeProps, openBlock, renderSlot, unref, withCtx } from "vue";
2
+ import { t as GrDropdown_default } from "../../GrDropdown/chunks/GrDropdown-kxwmgfSe.js";
3
+ import { createBlock, createVNode, defineComponent, guardReactiveProps, normalizeClass, normalizeProps, openBlock, renderSlot, withCtx } from "vue";
5
4
  //#endregion
6
5
  //#region src/components/GrDropdownMenu/GrDropdownMenu.vue
7
6
  var GrDropdownMenu_default = /* @__PURE__ */ defineComponent({
@@ -97,34 +96,4 @@ var GrDropdownMenu_default = /* @__PURE__ */ defineComponent({
97
96
  }
98
97
  });
99
98
  //#endregion
100
- //#region src/components/GrDropdownMenu/GrDropdownMenuColumn.vue
101
- var GrDropdownMenuColumn_default = /* @__PURE__ */ defineComponent({
102
- __name: "GrDropdownMenuColumn",
103
- props: { align: { default: "center" } },
104
- setup(__props) {
105
- return (_ctx, _cache) => {
106
- return openBlock(), createElementBlock("div", {
107
- "data-gr-dropdown-menu-column": "",
108
- role: "none",
109
- class: normalizeClass([unref(columnBaseClass), unref(alignClass)[__props.align]])
110
- }, [renderSlot(_ctx.$slots, "default")], 2);
111
- };
112
- }
113
- });
114
- //#endregion
115
- //#region src/components/GrDropdownMenu/GrDropdownMenuColumns.vue
116
- var GrDropdownMenuColumns_default = /* @__PURE__ */ defineComponent({
117
- __name: "GrDropdownMenuColumns",
118
- props: { cols: { default: 2 } },
119
- setup(__props) {
120
- return (_ctx, _cache) => {
121
- return openBlock(), createElementBlock("div", {
122
- "data-gr-dropdown-menu-columns": "",
123
- role: "none",
124
- class: normalizeClass([unref(columnsBaseClass), unref(colsClass)[__props.cols]])
125
- }, [renderSlot(_ctx.$slots, "default")], 2);
126
- };
127
- }
128
- });
129
- //#endregion
130
- export { GrDropdownMenuColumn_default as n, GrDropdownMenu_default as r, GrDropdownMenuColumns_default as t };
99
+ export { GrDropdownMenu_default as t };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrDropdownMenu--VoK3VY0.js","names":[],"sources":["../../../../src/components/GrDropdownMenu/GrDropdownMenu.vue","../../../../src/components/GrDropdownMenu/GrDropdownMenu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport GrDropdown from '../GrDropdown/GrDropdown.vue'\n// Типы размещения и ширины — из владельца API, а не переобъявлением: расхождение\n// обнаружилось бы только рантаймом.\nimport type { GrDropdownTrigger } from '../GrDropdown/GrDropdown.vue'\nimport type { GrDropdownWidth } from '../GrDropdown/grDropdownStyles'\nimport type { UseFloatingPlacement } from '../../composables/useFloating'\n\nimport GrDropdownMenuEntries from './GrDropdownMenuEntries.vue'\nimport GrDropdownMenuList from './GrDropdownMenuList.vue'\nimport type { GrDropdownMenuAction, GrDropdownMenuEntry } from './menuModel'\n\nexport interface GrDropdownMenuProps {\n /** Размещение панели относительно триггера; переворот при нехватке места остаётся. */\n placement?: UseFloatingPlacement\n /** Зазор между триггером и панелью, px. */\n offset?: number\n /** Ширина панели: число — пиксели, строка — CSS-длина, `auto` — по контенту. */\n width?: GrDropdownWidth\n /** Чем открывается панель. В любом режиме работают клик и клавиатура. */\n trigger?: GrDropdownTrigger\n /** Задержка открытия по наведению, мс. */\n openDelay?: number\n /** Задержка закрытия после ухода курсора, мс. */\n closeDelay?: number\n /** Меню не открывается ничем; триггер остаётся фокусируемым. */\n disabled?: boolean\n /** Куда телепортировать панель (`body` по умолчанию). */\n /** Точечное переопределение точки монтирования; по умолчанию — общий портал. */\n teleportTo?: string | HTMLElement\n /** Закрывать по клику внутри content. */\n closeOnContentClick?: boolean\n /** Дополнительные классы content-контейнера. */\n contentClass?: string\n /**\n * Декларативное меню: пункты, группы и разделители массивом. Слот по\n * умолчанию сильнее — он для меню, которое из модели не собирается.\n */\n items?: GrDropdownMenuEntry[]\n\n // list wrapper\n /** Разделители между пунктами. */\n dividers?: boolean\n /** Верхний бордер контейнера списка. */\n borderTop?: boolean\n /** Нижний бордер контейнера списка. */\n borderBottom?: boolean\n /** Дополнительные классы для wrapper'а списка. */\n listClass?: string\n /**\n * Контролируемое состояние панели (`v-model:open`) — прокидывается в\n * `GrDropdown`. Без пропа меню ведёт себя само (uncontrolled).\n */\n open?: boolean\n}\n\nexport interface GrDropdownMenuEmits {\n /** Выбран пункт декларативного меню. */\n (e: 'select', item: GrDropdownMenuAction): void\n /** Панель открылась/закрылась (`v-model:open`). */\n (e: 'update:open', value: boolean): void\n}\n\nwithDefaults(defineProps<GrDropdownMenuProps>(), {\n placement: 'bottom-end',\n offset: 8,\n width: '12rem',\n trigger: 'click',\n openDelay: 120,\n closeDelay: 160,\n disabled: false,\n teleportTo: undefined,\n closeOnContentClick: true,\n // Поле панели принадлежит панели. Гасить его отсюда своим `p-0` нельзя: оба\n // класса попадают в один атрибут с равной специфичностью, и победителя\n // выбирает порядок правил в сгенерированном CSS, а не разметка. Пункт вписан\n // в это поле собственным радиусом — см. `itemBaseClass`.\n contentClass: '',\n items: undefined,\n dividers: false,\n borderTop: false,\n borderBottom: false,\n listClass: '',\n open: undefined,\n})\n\nconst emit = defineEmits<GrDropdownMenuEmits>()\n\ndefineSlots<{\n /** Пункты меню. Слот-пропы прокидываются от `GrDropdown` как есть. */\n default?: (props: { close: () => void }) => any\n /**\n * Триггер панели. `triggerProps` обязаны попасть на сам интерактивный\n * элемент, а не на обёртку вокруг него: `aria-expanded` и `aria-controls`\n * читаются с того узла, который получает фокус.\n */\n trigger?: (props: {\n open: boolean\n toggle: () => void\n close: () => void\n triggerProps: Record<string, unknown>\n }) => any\n}>()\n</script>\n\n<template>\n <GrDropdown\n data-gr-dropdown-menu\n :placement=\"placement\"\n :offset=\"offset\"\n :width=\"width\"\n :trigger=\"trigger\"\n :open-delay=\"openDelay\"\n :close-delay=\"closeDelay\"\n :disabled=\"disabled\"\n :teleport-to=\"teleportTo\"\n :close-on-content-click=\"closeOnContentClick\"\n :content-class=\"contentClass\"\n :open=\"open\"\n @update:open=\"emit('update:open', $event)\"\n >\n <template #trigger=\"slotProps\">\n <slot name=\"trigger\" v-bind=\"slotProps\" />\n </template>\n\n <template #content=\"slotProps\">\n <GrDropdownMenuList\n :dividers=\"dividers\"\n :border-top=\"borderTop\"\n :border-bottom=\"borderBottom\"\n :class=\"listClass\"\n >\n <slot v-bind=\"slotProps\">\n <GrDropdownMenuEntries :items=\"items\" @select=\"emit('select', $event)\" />\n </slot>\n </GrDropdownMenuList>\n </template>\n </GrDropdown>\n</template>\n","<script setup lang=\"ts\">\nimport GrDropdown from '../GrDropdown/GrDropdown.vue'\n// Типы размещения и ширины — из владельца API, а не переобъявлением: расхождение\n// обнаружилось бы только рантаймом.\nimport type { GrDropdownTrigger } from '../GrDropdown/GrDropdown.vue'\nimport type { GrDropdownWidth } from '../GrDropdown/grDropdownStyles'\nimport type { UseFloatingPlacement } from '../../composables/useFloating'\n\nimport GrDropdownMenuEntries from './GrDropdownMenuEntries.vue'\nimport GrDropdownMenuList from './GrDropdownMenuList.vue'\nimport type { GrDropdownMenuAction, GrDropdownMenuEntry } from './menuModel'\n\nexport interface GrDropdownMenuProps {\n /** Размещение панели относительно триггера; переворот при нехватке места остаётся. */\n placement?: UseFloatingPlacement\n /** Зазор между триггером и панелью, px. */\n offset?: number\n /** Ширина панели: число — пиксели, строка — CSS-длина, `auto` — по контенту. */\n width?: GrDropdownWidth\n /** Чем открывается панель. В любом режиме работают клик и клавиатура. */\n trigger?: GrDropdownTrigger\n /** Задержка открытия по наведению, мс. */\n openDelay?: number\n /** Задержка закрытия после ухода курсора, мс. */\n closeDelay?: number\n /** Меню не открывается ничем; триггер остаётся фокусируемым. */\n disabled?: boolean\n /** Куда телепортировать панель (`body` по умолчанию). */\n /** Точечное переопределение точки монтирования; по умолчанию — общий портал. */\n teleportTo?: string | HTMLElement\n /** Закрывать по клику внутри content. */\n closeOnContentClick?: boolean\n /** Дополнительные классы content-контейнера. */\n contentClass?: string\n /**\n * Декларативное меню: пункты, группы и разделители массивом. Слот по\n * умолчанию сильнее — он для меню, которое из модели не собирается.\n */\n items?: GrDropdownMenuEntry[]\n\n // list wrapper\n /** Разделители между пунктами. */\n dividers?: boolean\n /** Верхний бордер контейнера списка. */\n borderTop?: boolean\n /** Нижний бордер контейнера списка. */\n borderBottom?: boolean\n /** Дополнительные классы для wrapper'а списка. */\n listClass?: string\n /**\n * Контролируемое состояние панели (`v-model:open`) — прокидывается в\n * `GrDropdown`. Без пропа меню ведёт себя само (uncontrolled).\n */\n open?: boolean\n}\n\nexport interface GrDropdownMenuEmits {\n /** Выбран пункт декларативного меню. */\n (e: 'select', item: GrDropdownMenuAction): void\n /** Панель открылась/закрылась (`v-model:open`). */\n (e: 'update:open', value: boolean): void\n}\n\nwithDefaults(defineProps<GrDropdownMenuProps>(), {\n placement: 'bottom-end',\n offset: 8,\n width: '12rem',\n trigger: 'click',\n openDelay: 120,\n closeDelay: 160,\n disabled: false,\n teleportTo: undefined,\n closeOnContentClick: true,\n // Поле панели принадлежит панели. Гасить его отсюда своим `p-0` нельзя: оба\n // класса попадают в один атрибут с равной специфичностью, и победителя\n // выбирает порядок правил в сгенерированном CSS, а не разметка. Пункт вписан\n // в это поле собственным радиусом — см. `itemBaseClass`.\n contentClass: '',\n items: undefined,\n dividers: false,\n borderTop: false,\n borderBottom: false,\n listClass: '',\n open: undefined,\n})\n\nconst emit = defineEmits<GrDropdownMenuEmits>()\n\ndefineSlots<{\n /** Пункты меню. Слот-пропы прокидываются от `GrDropdown` как есть. */\n default?: (props: { close: () => void }) => any\n /**\n * Триггер панели. `triggerProps` обязаны попасть на сам интерактивный\n * элемент, а не на обёртку вокруг него: `aria-expanded` и `aria-controls`\n * читаются с того узла, который получает фокус.\n */\n trigger?: (props: {\n open: boolean\n toggle: () => void\n close: () => void\n triggerProps: Record<string, unknown>\n }) => any\n}>()\n</script>\n\n<template>\n <GrDropdown\n data-gr-dropdown-menu\n :placement=\"placement\"\n :offset=\"offset\"\n :width=\"width\"\n :trigger=\"trigger\"\n :open-delay=\"openDelay\"\n :close-delay=\"closeDelay\"\n :disabled=\"disabled\"\n :teleport-to=\"teleportTo\"\n :close-on-content-click=\"closeOnContentClick\"\n :content-class=\"contentClass\"\n :open=\"open\"\n @update:open=\"emit('update:open', $event)\"\n >\n <template #trigger=\"slotProps\">\n <slot name=\"trigger\" v-bind=\"slotProps\" />\n </template>\n\n <template #content=\"slotProps\">\n <GrDropdownMenuList\n :dividers=\"dividers\"\n :border-top=\"borderTop\"\n :border-bottom=\"borderBottom\"\n :class=\"listClass\"\n >\n <slot v-bind=\"slotProps\">\n <GrDropdownMenuEntries :items=\"items\" @select=\"emit('select', $event)\" />\n </slot>\n </GrDropdownMenuList>\n </template>\n </GrDropdown>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsFA,MAAM,OAAO;;GAoBX,OAAA,UAAA,GAAA,YA+Ba,oBAAA;IA9BX,yBAAA;IACC,WAAW,QAAA;IACX,QAAQ,QAAA;IACR,OAAO,QAAA;IACP,SAAS,QAAA;IACT,cAAY,QAAA;IACZ,eAAa,QAAA;IACb,UAAU,QAAA;IACV,eAAa,QAAA;IACb,0BAAwB,QAAA;IACxB,iBAAe,QAAA;IACf,MAAM,QAAA;IACN,iBAAW,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,eAAgB,MAAM;;IAE7B,SAAO,SAAE,cAAS,CAC3B,WAA0C,KAAA,QAAA,WAAA,eAAA,mBAAb,SAAS,CAAA,CAAA,CAAA,CAAA;IAG7B,SAAO,SAAE,cAAS,CAC3B,YASqB,4BAAA;KARlB,UAAU,QAAA;KACV,cAAY,QAAA;KACZ,iBAAe,QAAA;KACf,OAAK,eAAE,QAAA,SAAS;;KAEjB,SAAA,cAEO,CAFP,WAEO,KAAA,QAAA,WAAA,eAAA,mBAFO,SAAS,CAAA,SAEhB,CADL,YAAyE,+BAAA;MAAjD,OAAO,QAAA;MAAQ,UAAM,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,UAAW,MAAM"}
@@ -0,0 +1,34 @@
1
+ import { a as colsClass, o as columnBaseClass, s as columnsBaseClass, t as alignClass } from "../../../chunks/grDropdownMenuStyles-Cf8OdR8S.js";
2
+ import { createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot, unref } from "vue";
3
+ //#endregion
4
+ //#region src/components/GrDropdownMenu/GrDropdownMenuColumn.vue
5
+ var GrDropdownMenuColumn_default = /* @__PURE__ */ defineComponent({
6
+ __name: "GrDropdownMenuColumn",
7
+ props: { align: { default: "center" } },
8
+ setup(__props) {
9
+ return (_ctx, _cache) => {
10
+ return openBlock(), createElementBlock("div", {
11
+ "data-gr-dropdown-menu-column": "",
12
+ role: "none",
13
+ class: normalizeClass([unref(columnBaseClass), unref(alignClass)[__props.align]])
14
+ }, [renderSlot(_ctx.$slots, "default")], 2);
15
+ };
16
+ }
17
+ });
18
+ //#endregion
19
+ //#region src/components/GrDropdownMenu/GrDropdownMenuColumns.vue
20
+ var GrDropdownMenuColumns_default = /* @__PURE__ */ defineComponent({
21
+ __name: "GrDropdownMenuColumns",
22
+ props: { cols: { default: 2 } },
23
+ setup(__props) {
24
+ return (_ctx, _cache) => {
25
+ return openBlock(), createElementBlock("div", {
26
+ "data-gr-dropdown-menu-columns": "",
27
+ role: "none",
28
+ class: normalizeClass([unref(columnsBaseClass), unref(colsClass)[__props.cols]])
29
+ }, [renderSlot(_ctx.$slots, "default")], 2);
30
+ };
31
+ }
32
+ });
33
+ //#endregion
34
+ export { GrDropdownMenuColumn_default as n, GrDropdownMenuColumns_default as t };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrDropdownMenu-CkM3BFPL.js","names":[],"sources":["../../../../src/components/GrDropdownMenu/GrDropdownMenuColumn.vue","../../../../src/components/GrDropdownMenu/GrDropdownMenuColumn.vue","../../../../src/components/GrDropdownMenu/GrDropdownMenuColumns.vue","../../../../src/components/GrDropdownMenu/GrDropdownMenuColumns.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { alignClass, columnBaseClass, type GrDropdownMenuColumnAlign } from './grDropdownMenuStyles'\n\nexport type { GrDropdownMenuColumnAlign } from './grDropdownMenuStyles'\n\nexport interface GrDropdownMenuColumnProps {\n align?: GrDropdownMenuColumnAlign\n}\n\nwithDefaults(defineProps<GrDropdownMenuColumnProps>(), {\n align: 'center',\n})\n\ndefineSlots<{\n /** Содержимое колонки меню. */\n default?: () => any\n}>()\n</script>\n\n<template>\n <div\n data-gr-dropdown-menu-column\n role=\"none\"\n :class=\"[columnBaseClass, alignClass[align]]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { alignClass, columnBaseClass, type GrDropdownMenuColumnAlign } from './grDropdownMenuStyles'\n\nexport type { GrDropdownMenuColumnAlign } from './grDropdownMenuStyles'\n\nexport interface GrDropdownMenuColumnProps {\n align?: GrDropdownMenuColumnAlign\n}\n\nwithDefaults(defineProps<GrDropdownMenuColumnProps>(), {\n align: 'center',\n})\n\ndefineSlots<{\n /** Содержимое колонки меню. */\n default?: () => any\n}>()\n</script>\n\n<template>\n <div\n data-gr-dropdown-menu-column\n role=\"none\"\n :class=\"[columnBaseClass, alignClass[align]]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { colsClass, columnsBaseClass, type GrDropdownMenuColumnsCount } from './grDropdownMenuStyles'\n\nexport interface GrDropdownMenuColumnsProps {\n cols?: GrDropdownMenuColumnsCount\n}\n\nwithDefaults(defineProps<GrDropdownMenuColumnsProps>(), {\n cols: 2,\n})\n\ndefineSlots<{\n /** Колонки меню (`GrDropdownMenuColumn`). */\n default?: () => any\n}>()\n</script>\n\n<template>\n <div\n data-gr-dropdown-menu-columns\n role=\"none\"\n :class=\"[columnsBaseClass, colsClass[cols]]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { colsClass, columnsBaseClass, type GrDropdownMenuColumnsCount } from './grDropdownMenuStyles'\n\nexport interface GrDropdownMenuColumnsProps {\n cols?: GrDropdownMenuColumnsCount\n}\n\nwithDefaults(defineProps<GrDropdownMenuColumnsProps>(), {\n cols: 2,\n})\n\ndefineSlots<{\n /** Колонки меню (`GrDropdownMenuColumn`). */\n default?: () => any\n}>()\n</script>\n\n<template>\n <div\n data-gr-dropdown-menu-columns\n role=\"none\"\n :class=\"[columnsBaseClass, colsClass[cols]]\"\n >\n <slot />\n </div>\n</template>\n"],"mappings":";;;;;;;;;GAoBE,OAAA,UAAA,GAAA,mBAMM,OAAA;IALJ,gCAAA;IACA,MAAK;IACJ,OAAK,eAAA,CAAG,MAAA,eAAA,GAAiB,MAAA,UAAA,CAAU,CAAC,QAAA,MAAK,CAAA;GAE1C,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA;;;;;;;;;;;GEPV,OAAA,UAAA,GAAA,mBAMM,OAAA;IALJ,iCAAA;IACA,MAAK;IACJ,OAAK,eAAA,CAAG,MAAA,gBAAA,GAAkB,MAAA,SAAA,CAAS,CAAC,QAAA,KAAI,CAAA;GAEzC,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { a as GrDropdownMenuItem_default, c as GrDropdownMenuDivider_default, o as GrDropdownMenuGroup_default, s as GrDropdownMenuHeader_default, t as GrDropdownMenuList_default } from "./chunks/GrDropdownMenuList-B33ZzwfB.js";
2
- import { n as GrDropdownMenuColumn_default, r as GrDropdownMenu_default, t as GrDropdownMenuColumns_default } from "./chunks/GrDropdownMenu-Dxkz_ry4.js";
2
+ import { t as GrDropdownMenu_default } from "./chunks/GrDropdownMenu--VoK3VY0.js";
3
+ import { n as GrDropdownMenuColumn_default, t as GrDropdownMenuColumns_default } from "./chunks/GrDropdownMenu-CkM3BFPL.js";
3
4
  import { n as grDropdownMenuSafelist, t as grDropdownMenuConfig } from "../../chunks/config-_jbgsFpw.js";
4
5
  export { GrDropdownMenu_default as GrDropdownMenu, GrDropdownMenu_default as default, GrDropdownMenuColumn_default as GrDropdownMenuColumn, GrDropdownMenuColumns_default as GrDropdownMenuColumns, GrDropdownMenuDivider_default as GrDropdownMenuDivider, GrDropdownMenuGroup_default as GrDropdownMenuGroup, GrDropdownMenuHeader_default as GrDropdownMenuHeader, GrDropdownMenuItem_default as GrDropdownMenuItem, GrDropdownMenuList_default as GrDropdownMenuList, grDropdownMenuConfig, grDropdownMenuSafelist };
@@ -4,13 +4,13 @@ import { t as GrIcon_default } from "../../GrIcon/chunks/GrIcon-DTZIgmje.js";
4
4
  import { a as descriptionBaseClass, c as iconBoxBaseClass, d as titleBaseClass, f as titleBySize, i as actionsBySize, l as iconBoxBySize, o as descriptionBySize, r as actionsBaseClass, s as grEmptyStateRootClass, u as iconSizeBySize } from "../../../chunks/config-CWtfxkM9.js";
5
5
  import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, markRaw, normalizeClass, openBlock, renderSlot, resolveDynamicComponent, toDisplayString, unref, useSlots, withCtx } from "vue";
6
6
  //#region ~icons/lucide/inbox
7
- var _hoisted_1$1 = {
7
+ var _hoisted_1$2 = {
8
8
  viewBox: "0 0 24 24",
9
9
  width: "1.2em",
10
10
  height: "1.2em"
11
11
  };
12
- function render$1(_ctx, _cache) {
13
- return openBlock(), createElementBlock("svg", _hoisted_1$1, [..._cache[0] || (_cache[0] = [createElementVNode("g", {
12
+ function render$2(_ctx, _cache) {
13
+ return openBlock(), createElementBlock("svg", _hoisted_1$2, [..._cache[0] || (_cache[0] = [createElementVNode("g", {
14
14
  fill: "none",
15
15
  stroke: "currentColor",
16
16
  "stroke-linecap": "round",
@@ -20,6 +20,34 @@ function render$1(_ctx, _cache) {
20
20
  }
21
21
  var inbox_default = markRaw({
22
22
  name: "lucide-inbox",
23
+ render: render$2
24
+ });
25
+ //#endregion
26
+ //#region ~icons/lucide/search-x
27
+ var _hoisted_1$1 = {
28
+ viewBox: "0 0 24 24",
29
+ width: "1.2em",
30
+ height: "1.2em"
31
+ };
32
+ function render$1(_ctx, _cache) {
33
+ return openBlock(), createElementBlock("svg", _hoisted_1$1, [..._cache[0] || (_cache[0] = [createElementVNode("g", {
34
+ fill: "none",
35
+ stroke: "currentColor",
36
+ "stroke-linecap": "round",
37
+ "stroke-linejoin": "round",
38
+ "stroke-width": "2"
39
+ }, [
40
+ createElementVNode("path", { d: "m13.5 8.5l-5 5m0-5l5 5" }),
41
+ createElementVNode("circle", {
42
+ cx: "11",
43
+ cy: "11",
44
+ r: "8"
45
+ }),
46
+ createElementVNode("path", { d: "m21 21l-4.3-4.3" })
47
+ ], -1)])]);
48
+ }
49
+ var search_x_default = markRaw({
50
+ name: "lucide-search-x",
23
51
  render: render$1
24
52
  });
25
53
  //#endregion
@@ -34,7 +62,8 @@ var GrEmptyState_default = /* @__PURE__ */ defineComponent({
34
62
  description: { default: void 0 },
35
63
  size: { default: void 0 },
36
64
  variant: { default: void 0 },
37
- headingLevel: { default: void 0 }
65
+ headingLevel: { default: void 0 },
66
+ kind: { default: "empty" }
38
67
  },
39
68
  setup(__props) {
40
69
  const props = __props;
@@ -44,7 +73,8 @@ var GrEmptyState_default = /* @__PURE__ */ defineComponent({
44
73
  const resolvedVariant = useGrComponentProp("GrEmptyState", "variant", () => props.variant, "outlined");
45
74
  const headingLevel = useGrComponentProp("GrEmptyState", "headingLevel", () => props.headingLevel, 3);
46
75
  const headingTag = computed(() => `h${headingLevel.value}`);
47
- const resolvedTitle = computed(() => props.title ?? t("gr.emptyState.title", "Nothing here yet"));
76
+ const defaultTitle = computed(() => props.kind === "search" ? t("gr.emptyState.searchTitle", "Nothing found") : t("gr.emptyState.title", "Nothing here yet"));
77
+ const resolvedTitle = computed(() => props.title ?? defaultTitle.value);
48
78
  const hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));
49
79
  return (_ctx, _cache) => {
50
80
  return openBlock(), createElementBlock("div", {
@@ -58,7 +88,13 @@ var GrEmptyState_default = /* @__PURE__ */ defineComponent({
58
88
  "data-gr-empty-state-icon": "",
59
89
  class: normalizeClass([unref(iconBoxBaseClass), unref(iconBoxBySize)[unref(resolvedSize)]])
60
90
  }, [renderSlot(_ctx.$slots, "icon", {}, () => [createVNode(GrIcon_default, { size: unref(iconSizeBySize)[unref(resolvedSize)] }, {
61
- default: withCtx(() => [createVNode(unref(inbox_default), { "aria-hidden": "true" })]),
91
+ default: withCtx(() => [__props.kind === "search" ? (openBlock(), createBlock(unref(search_x_default), {
92
+ key: 0,
93
+ "aria-hidden": "true"
94
+ })) : (openBlock(), createBlock(unref(inbox_default), {
95
+ key: 1,
96
+ "aria-hidden": "true"
97
+ }))]),
62
98
  _: 1
63
99
  }, 8, ["size"])])], 2)]),
64
100
  (openBlock(), createBlock(resolveDynamicComponent(headingTag.value), {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrEmptyState-Bz6-_ED4.js","names":["$slots"],"sources":["../../../../src/components/GrEmptyState/GrEmptyState.vue","../../../../src/components/GrEmptyState/GrEmptyState.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport IconInbox from '~icons/lucide/inbox'\nimport IconSearchX from '~icons/lucide/search-x'\n\nimport GrIcon from '../GrIcon/GrIcon.vue'\nimport { useGrComponentProp, useGrComponentSize } from '../GrConfigProvider/context'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\n\nimport {\n actionsBaseClass,\n actionsBySize,\n descriptionBaseClass,\n descriptionBySize,\n grEmptyStateRootClass,\n iconBoxBaseClass,\n iconBoxBySize,\n iconSizeBySize,\n titleBaseClass,\n titleBySize,\n type GrEmptyStateHeadingLevel,\n type GrEmptyStateSize,\n type GrEmptyStateKind,\n type GrEmptyStateVariant,\n} from './grEmptyStateStyles'\n\nexport type {\n GrEmptyStateHeadingLevel,\n GrEmptyStateKind,\n GrEmptyStateSize,\n GrEmptyStateVariant,\n} from './grEmptyStateStyles'\n\n/**\n * GrEmptyState — карточка пустого состояния: иконка, заголовок, описание и\n * слот действий.\n *\n * Заголовок — настоящий heading: без него пустое состояние не находится\n * навигацией по заголовкам, а именно оно и объясняет, почему на экране ничего\n * нет.\n */\nexport interface GrEmptyStateProps {\n /** Заголовок. Не задан — берётся из локали; слот `#title` сильнее обоих. */\n title?: string\n description?: string\n size?: GrEmptyStateSize\n /** `ghost` снимает рамку и фон: карточка внутри карточки рисует вторую рамку. */\n variant?: GrEmptyStateVariant\n headingLevel?: GrEmptyStateHeadingLevel\n /**\n * Что за пустота: ещё ничего не создано (`empty`) или под запросом ничего не\n * нашлось (`search`). Меняет иконку и заголовок по умолчанию; заданный\n * `title` сильнее в обоих случаях.\n */\n kind?: GrEmptyStateKind\n}\n\nconst props = withDefaults(defineProps<GrEmptyStateProps>(), {\n title: undefined,\n description: undefined,\n size: undefined,\n variant: undefined,\n headingLevel: undefined,\n kind: 'empty',\n})\n\nconst slots = defineSlots<{\n /** Иконка вместо встроенной. */\n icon?: () => unknown\n /** Заголовок разметкой: ссылка, выделение, счётчик. */\n title?: () => unknown\n description?: () => unknown\n /** Действия под текстом: центрируются. */\n default?: () => unknown\n}>()\n\nconst { t } = useGranularityTranslations()\n\nconst resolvedSize = useGrComponentSize(() => props.size, { component: 'GrEmptyState' })\nconst resolvedVariant = useGrComponentProp('GrEmptyState', 'variant', () => props.variant, 'outlined')\nconst headingLevel = useGrComponentProp('GrEmptyState', 'headingLevel', () => props.headingLevel, 3)\n\nconst headingTag = computed(() => `h${headingLevel.value}`)\nconst defaultTitle = computed(() => (props.kind === 'search'\n ? t('gr.emptyState.searchTitle', 'Nothing found')\n : t('gr.emptyState.title', 'Nothing here yet')))\n\nconst resolvedTitle = computed(() => props.title ?? defaultTitle.value)\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description))\n</script>\n\n<template>\n <div\n data-gr-empty-state\n :class=\"grEmptyStateRootClass({ variant: resolvedVariant, size: resolvedSize })\"\n >\n <div class=\"flex justify-center\">\n <div data-gr-empty-state-icon :class=\"[iconBoxBaseClass, iconBoxBySize[resolvedSize]]\">\n <slot name=\"icon\">\n <GrIcon :size=\"iconSizeBySize[resolvedSize]\">\n <IconSearchX v-if=\"kind === 'search'\" aria-hidden=\"true\" />\n <IconInbox v-else aria-hidden=\"true\" />\n </GrIcon>\n </slot>\n </div>\n </div>\n\n <component\n :is=\"headingTag\"\n data-gr-empty-state-title\n :class=\"[titleBaseClass, titleBySize[resolvedSize]]\"\n >\n <slot name=\"title\">\n {{ resolvedTitle }}\n </slot>\n </component>\n\n <div\n v-if=\"hasDescription\"\n data-gr-empty-state-description\n :class=\"[descriptionBaseClass, descriptionBySize[resolvedSize]]\"\n >\n <slot name=\"description\">\n {{ description }}\n </slot>\n </div>\n\n <div\n v-if=\"$slots.default\"\n data-gr-empty-state-actions\n :class=\"[actionsBaseClass, actionsBySize[resolvedSize]]\"\n >\n <slot />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport IconInbox from '~icons/lucide/inbox'\nimport IconSearchX from '~icons/lucide/search-x'\n\nimport GrIcon from '../GrIcon/GrIcon.vue'\nimport { useGrComponentProp, useGrComponentSize } from '../GrConfigProvider/context'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\n\nimport {\n actionsBaseClass,\n actionsBySize,\n descriptionBaseClass,\n descriptionBySize,\n grEmptyStateRootClass,\n iconBoxBaseClass,\n iconBoxBySize,\n iconSizeBySize,\n titleBaseClass,\n titleBySize,\n type GrEmptyStateHeadingLevel,\n type GrEmptyStateSize,\n type GrEmptyStateKind,\n type GrEmptyStateVariant,\n} from './grEmptyStateStyles'\n\nexport type {\n GrEmptyStateHeadingLevel,\n GrEmptyStateKind,\n GrEmptyStateSize,\n GrEmptyStateVariant,\n} from './grEmptyStateStyles'\n\n/**\n * GrEmptyState — карточка пустого состояния: иконка, заголовок, описание и\n * слот действий.\n *\n * Заголовок — настоящий heading: без него пустое состояние не находится\n * навигацией по заголовкам, а именно оно и объясняет, почему на экране ничего\n * нет.\n */\nexport interface GrEmptyStateProps {\n /** Заголовок. Не задан — берётся из локали; слот `#title` сильнее обоих. */\n title?: string\n description?: string\n size?: GrEmptyStateSize\n /** `ghost` снимает рамку и фон: карточка внутри карточки рисует вторую рамку. */\n variant?: GrEmptyStateVariant\n headingLevel?: GrEmptyStateHeadingLevel\n /**\n * Что за пустота: ещё ничего не создано (`empty`) или под запросом ничего не\n * нашлось (`search`). Меняет иконку и заголовок по умолчанию; заданный\n * `title` сильнее в обоих случаях.\n */\n kind?: GrEmptyStateKind\n}\n\nconst props = withDefaults(defineProps<GrEmptyStateProps>(), {\n title: undefined,\n description: undefined,\n size: undefined,\n variant: undefined,\n headingLevel: undefined,\n kind: 'empty',\n})\n\nconst slots = defineSlots<{\n /** Иконка вместо встроенной. */\n icon?: () => unknown\n /** Заголовок разметкой: ссылка, выделение, счётчик. */\n title?: () => unknown\n description?: () => unknown\n /** Действия под текстом: центрируются. */\n default?: () => unknown\n}>()\n\nconst { t } = useGranularityTranslations()\n\nconst resolvedSize = useGrComponentSize(() => props.size, { component: 'GrEmptyState' })\nconst resolvedVariant = useGrComponentProp('GrEmptyState', 'variant', () => props.variant, 'outlined')\nconst headingLevel = useGrComponentProp('GrEmptyState', 'headingLevel', () => props.headingLevel, 3)\n\nconst headingTag = computed(() => `h${headingLevel.value}`)\nconst defaultTitle = computed(() => (props.kind === 'search'\n ? t('gr.emptyState.searchTitle', 'Nothing found')\n : t('gr.emptyState.title', 'Nothing here yet')))\n\nconst resolvedTitle = computed(() => props.title ?? defaultTitle.value)\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description))\n</script>\n\n<template>\n <div\n data-gr-empty-state\n :class=\"grEmptyStateRootClass({ variant: resolvedVariant, size: resolvedSize })\"\n >\n <div class=\"flex justify-center\">\n <div data-gr-empty-state-icon :class=\"[iconBoxBaseClass, iconBoxBySize[resolvedSize]]\">\n <slot name=\"icon\">\n <GrIcon :size=\"iconSizeBySize[resolvedSize]\">\n <IconSearchX v-if=\"kind === 'search'\" aria-hidden=\"true\" />\n <IconInbox v-else aria-hidden=\"true\" />\n </GrIcon>\n </slot>\n </div>\n </div>\n\n <component\n :is=\"headingTag\"\n data-gr-empty-state-title\n :class=\"[titleBaseClass, titleBySize[resolvedSize]]\"\n >\n <slot name=\"title\">\n {{ resolvedTitle }}\n </slot>\n </component>\n\n <div\n v-if=\"hasDescription\"\n data-gr-empty-state-description\n :class=\"[descriptionBaseClass, descriptionBySize[resolvedSize]]\"\n >\n <slot name=\"description\">\n {{ description }}\n </slot>\n </div>\n\n <div\n v-if=\"$slots.default\"\n data-gr-empty-state-actions\n :class=\"[actionsBaseClass, actionsBySize[resolvedSize]]\"\n >\n <slot />\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0DA,MAAM,QAAQ;EASd,MAAM,QAAQ,SAAA;EAUd,MAAM,EAAE,MAAM,2BAA2B;EAEzC,MAAM,eAAe,yBAAyB,MAAM,MAAM,EAAE,WAAW,eAAe,CAAC;EACvF,MAAM,kBAAkB,mBAAmB,gBAAgB,iBAAiB,MAAM,SAAS,UAAU;EACrG,MAAM,eAAe,mBAAmB,gBAAgB,sBAAsB,MAAM,cAAc,CAAC;EAEnG,MAAM,aAAa,eAAe,IAAI,aAAa,OAAO;EAC1D,MAAM,eAAe,eAAgB,MAAM,SAAS,WAChD,EAAE,6BAA6B,eAAe,IAC9C,EAAE,uBAAuB,kBAAkB,CAAE;EAEjD,MAAM,gBAAgB,eAAe,MAAM,SAAS,aAAa,KAAK;EACtE,MAAM,iBAAiB,eAAe,QAAQ,MAAM,WAAW,KAAK,QAAQ,MAAM,WAAW,CAAC;;GAI5F,OAAA,UAAA,GAAA,mBA0CM,OAAA;IAzCJ,uBAAA;IACC,OAAK,eAAE,MAAA,qBAAA,CAAqB,CAAA;KAAA,SAAY,MAAA,eAAA;KAAe,MAAQ,MAAA,YAAA;IAAY,CAAA,CAAA;;IAE5E,mBASM,OATN,YASM,CARJ,mBAOM,OAAA;KAPD,4BAAA;KAA0B,OAAK,eAAA,CAAG,MAAA,gBAAA,GAAkB,MAAA,aAAA,CAAa,CAAC,MAAA,YAAA,EAAY,CAAA;IACjF,GAAA,CAAA,WAKO,KAAA,QAAA,QAAA,CAAA,SAAA,CAJL,YAGS,gBAAA,EAHA,MAAM,MAAA,cAAA,CAAc,CAAC,MAAA,YAAA,GAAA,GAAA;KAC5B,SAAA,cAA2D,CAAxC,QAAA,SAAI,YAAvB,UAAA,GAAA,YAA2D,MAAA,gBAAA,GAAA;;MAArB,eAAY;KAClD,CAAA,MAAA,UAAA,GAAA,YAAuC,MAAA,aAAA,GAAA;;MAArB,eAAY;;;;KAMtC,UAAA,GAAA,YAQY,wBAPL,WAAA,KAAU,GAAA;KACf,6BAAA;KACC,OAAK,eAAA,CAAG,MAAA,cAAA,GAAgB,MAAA,WAAA,CAAW,CAAC,MAAA,YAAA,EAAY,CAAA;;KAEjD,SAAA,cAEO,CAFP,WAEO,KAAA,QAAA,SAAA,CAAA,SAAA,CADF,gBAAA,gBAAA,cAAA,KAAa,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;;IAKZ,eAAA,SADR,UAAA,GAAA,mBAQM,OAAA;;KANJ,mCAAA;KACC,OAAK,eAAA,CAAG,MAAA,oBAAA,GAAsB,MAAA,iBAAA,CAAiB,CAAC,MAAA,YAAA,EAAY,CAAA;IAE7D,GAAA,CAAA,WAEO,KAAA,QAAA,eAAA,CAAA,SAAA,CADF,gBAAA,gBAAA,QAAA,WAAW,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA;IAKVA,KAAAA,OAAO,WADf,UAAA,GAAA,mBAMM,OAAA;;KAJJ,+BAAA;KACC,OAAK,eAAA,CAAG,MAAA,gBAAA,GAAkB,MAAA,aAAA,CAAa,CAAC,MAAA,YAAA,EAAY,CAAA;IAErD,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA"}
@@ -1,3 +1,3 @@
1
- import { t as GrEmptyState_default } from "./chunks/GrEmptyState-BbvwE-E0.js";
1
+ import { t as GrEmptyState_default } from "./chunks/GrEmptyState-Bz6-_ED4.js";
2
2
  import { n as grEmptyStateSafelist, t as grEmptyStateConfig } from "../../chunks/config-CWtfxkM9.js";
3
3
  export { GrEmptyState_default as GrEmptyState, GrEmptyState_default as default, grEmptyStateConfig, grEmptyStateSafelist };
@@ -900,8 +900,11 @@ var GrFileUpload_default = /* @__PURE__ */ defineComponent({
900
900
  }
901
901
  onMounted(() => {
902
902
  if (!(process.env.NODE_ENV !== "production")) return;
903
- if (props.action || props.request) return;
904
- console.warn("[GrFileUpload] не задан ни `action`, ни `request`: отправлять файлы некуда.");
903
+ if (!props.action && !props.request) {
904
+ console.warn("[GrFileUpload] не задан ни `action`, ни `request`: отправлять файлы некуда.");
905
+ return;
906
+ }
907
+ if (props.action && props.request) console.warn("[GrFileUpload] заданы и `action`, и `request`: файлы отправит `request`, `action` не будет использован.");
905
908
  });
906
909
  onBeforeUnmount(() => {
907
910
  clearScheduledIdle();