@feugene/granularity 0.4.0 → 0.4.1

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 (424) hide show
  1. package/dist/chunks/_plugin-vue_export-helper-BG_EqiDU.js +8 -0
  2. package/dist/chunks/adapter-C7fKeUa4.js +6 -0
  3. package/dist/chunks/adapter-C7fKeUa4.js.map +1 -0
  4. package/dist/chunks/arrow-up-DNXrMoAI.js +25 -0
  5. package/dist/chunks/arrow-up-DNXrMoAI.js.map +1 -0
  6. package/dist/chunks/classTokens-BPeBXNzu.js +8 -0
  7. package/dist/chunks/classTokens-BPeBXNzu.js.map +1 -0
  8. package/dist/chunks/config-2wgwWaAB.js +10 -0
  9. package/dist/chunks/config-2wgwWaAB.js.map +1 -0
  10. package/dist/chunks/config-BKRmlivc.js +10 -0
  11. package/dist/chunks/config-BKRmlivc.js.map +1 -0
  12. package/dist/chunks/config-BRU5PR8_.js +10 -0
  13. package/dist/chunks/config-BRU5PR8_.js.map +1 -0
  14. package/dist/chunks/config-BUGfFjmC.js +16 -0
  15. package/dist/chunks/config-BUGfFjmC.js.map +1 -0
  16. package/dist/chunks/config-BXffa3ta.js +60 -0
  17. package/dist/chunks/config-BXffa3ta.js.map +1 -0
  18. package/dist/chunks/config-BaMO9dQh.js +22 -0
  19. package/dist/chunks/config-BaMO9dQh.js.map +1 -0
  20. package/dist/chunks/config-BbtK511H.js +11 -0
  21. package/dist/chunks/config-BbtK511H.js.map +1 -0
  22. package/dist/chunks/config-BcFOkUhh.js +15 -0
  23. package/dist/chunks/config-BcFOkUhh.js.map +1 -0
  24. package/dist/chunks/config-BcpRsZTe.js +10 -0
  25. package/dist/chunks/config-BcpRsZTe.js.map +1 -0
  26. package/dist/chunks/config-BhubOeci.js +15 -0
  27. package/dist/chunks/config-BhubOeci.js.map +1 -0
  28. package/dist/chunks/config-BhvNm4Pp.js +173 -0
  29. package/dist/chunks/config-BhvNm4Pp.js.map +1 -0
  30. package/dist/chunks/config-Bv2G0OU6.js +10 -0
  31. package/dist/chunks/config-Bv2G0OU6.js.map +1 -0
  32. package/dist/chunks/config-Bv5Dok4j.js +41 -0
  33. package/dist/chunks/config-Bv5Dok4j.js.map +1 -0
  34. package/dist/chunks/config-BzQ4S4Hb.js +11 -0
  35. package/dist/chunks/config-BzQ4S4Hb.js.map +1 -0
  36. package/dist/chunks/config-BzZGpWsj.js +11 -0
  37. package/dist/chunks/config-BzZGpWsj.js.map +1 -0
  38. package/dist/chunks/config-C0b_3LJV.js +42 -0
  39. package/dist/chunks/config-C0b_3LJV.js.map +1 -0
  40. package/dist/chunks/config-C2JKq8-2.js +60 -0
  41. package/dist/chunks/config-C2JKq8-2.js.map +1 -0
  42. package/dist/chunks/config-C6SBJxcH.js +10 -0
  43. package/dist/chunks/config-C6SBJxcH.js.map +1 -0
  44. package/dist/chunks/config-CJbjLC5X.js +55 -0
  45. package/dist/chunks/config-CJbjLC5X.js.map +1 -0
  46. package/dist/chunks/config-CJeyaUTp.js +40 -0
  47. package/dist/chunks/config-CJeyaUTp.js.map +1 -0
  48. package/dist/chunks/config-CMZE2fu0.js +11 -0
  49. package/dist/chunks/config-CMZE2fu0.js.map +1 -0
  50. package/dist/chunks/config-CU_CBd0k.js +24 -0
  51. package/dist/chunks/config-CU_CBd0k.js.map +1 -0
  52. package/dist/chunks/config-CYPU3ztl.js +26 -0
  53. package/dist/chunks/config-CYPU3ztl.js.map +1 -0
  54. package/dist/chunks/config-CcmeMlic.js +19 -0
  55. package/dist/chunks/config-CcmeMlic.js.map +1 -0
  56. package/dist/chunks/config-CdAx6ify2.js +11 -0
  57. package/dist/chunks/config-CdAx6ify2.js.map +1 -0
  58. package/dist/chunks/config-CxCAfXZ1.js +23 -0
  59. package/dist/chunks/config-CxCAfXZ1.js.map +1 -0
  60. package/dist/chunks/config-D1gSaT52.js +11 -0
  61. package/dist/chunks/config-D1gSaT52.js.map +1 -0
  62. package/dist/chunks/config-D7iuXJbl.js +11 -0
  63. package/dist/chunks/config-D7iuXJbl.js.map +1 -0
  64. package/dist/chunks/config-D7tRu8u3.js +11 -0
  65. package/dist/chunks/config-D7tRu8u3.js.map +1 -0
  66. package/dist/chunks/config-DBYCntwl.js +10 -0
  67. package/dist/chunks/config-DBYCntwl.js.map +1 -0
  68. package/dist/chunks/config-DFRYOcrP.js +11 -0
  69. package/dist/chunks/config-DFRYOcrP.js.map +1 -0
  70. package/dist/chunks/config-DW_RqmUp.js +10 -0
  71. package/dist/chunks/config-DW_RqmUp.js.map +1 -0
  72. package/dist/chunks/config-Dkq0HeLe.js +11 -0
  73. package/dist/chunks/config-Dkq0HeLe.js.map +1 -0
  74. package/dist/chunks/config-DlLE49_I.js +11 -0
  75. package/dist/chunks/config-DlLE49_I.js.map +1 -0
  76. package/dist/chunks/config-DvTUDLT1.js +46 -0
  77. package/dist/chunks/config-DvTUDLT1.js.map +1 -0
  78. package/dist/chunks/config-DwB5-qdP2.js +10 -0
  79. package/dist/chunks/config-DwB5-qdP2.js.map +1 -0
  80. package/dist/chunks/config-DxqMXzNV2.js +25 -0
  81. package/dist/chunks/config-DxqMXzNV2.js.map +1 -0
  82. package/dist/chunks/config-DxqpV-KM.js +47 -0
  83. package/dist/chunks/config-DxqpV-KM.js.map +1 -0
  84. package/dist/chunks/config-Dzz9P-GV2.js +11 -0
  85. package/dist/chunks/config-Dzz9P-GV2.js.map +1 -0
  86. package/dist/chunks/config-KGTIAFD92.js +10 -0
  87. package/dist/chunks/config-KGTIAFD92.js.map +1 -0
  88. package/dist/chunks/config-TyzU6gLf.js +10 -0
  89. package/dist/chunks/config-TyzU6gLf.js.map +1 -0
  90. package/dist/chunks/config-cn6knwud.js +37 -0
  91. package/dist/chunks/config-cn6knwud.js.map +1 -0
  92. package/dist/chunks/config-dD6Po-Cq.js +10 -0
  93. package/dist/chunks/config-dD6Po-Cq.js.map +1 -0
  94. package/dist/chunks/config-rFwazRKi.js +11 -0
  95. package/dist/chunks/config-rFwazRKi.js.map +1 -0
  96. package/dist/chunks/config-rQlbnEKn.js +10 -0
  97. package/dist/chunks/config-rQlbnEKn.js.map +1 -0
  98. package/dist/chunks/config-rxFL-6yF2.js +80 -0
  99. package/dist/chunks/config-rxFL-6yF2.js.map +1 -0
  100. package/dist/chunks/config-ug8O8epd.js +13 -0
  101. package/dist/chunks/config-ug8O8epd.js.map +1 -0
  102. package/dist/chunks/dialogShared-BtXUk6Zc.js +34 -0
  103. package/dist/chunks/dialogShared-BtXUk6Zc.js.map +1 -0
  104. package/dist/chunks/directives-Cuib0yOO.js +728 -0
  105. package/dist/chunks/directives-Cuib0yOO.js.map +1 -0
  106. package/dist/chunks/en-BMjJZttK.js +50 -0
  107. package/dist/chunks/en-BMjJZttK.js.map +1 -0
  108. package/dist/chunks/es-Cu_RlgIr.js +22 -0
  109. package/dist/chunks/es-Cu_RlgIr.js.map +1 -0
  110. package/dist/chunks/es-EYCf8G_1.js +50 -0
  111. package/dist/chunks/es-EYCf8G_1.js.map +1 -0
  112. package/dist/chunks/fileValidation-CgjTGoUx.js +221 -0
  113. package/dist/chunks/fileValidation-CgjTGoUx.js.map +1 -0
  114. package/dist/chunks/{grBadgeStyles-Bu4H8bFc.js → grBadgeStyles-pqqbVgLk.js} +20 -13
  115. package/dist/chunks/grBadgeStyles-pqqbVgLk.js.map +1 -0
  116. package/dist/chunks/{grButtonStyles-C5k0bN2e.js → grButtonStyles-BxZW2x0-.js} +62 -52
  117. package/dist/chunks/grButtonStyles-BxZW2x0-.js.map +1 -0
  118. package/dist/chunks/grDropdownStyles-DQfLh-bp.js +34 -0
  119. package/dist/chunks/grDropdownStyles-DQfLh-bp.js.map +1 -0
  120. package/dist/chunks/grLoadingStyles-CERsxyk9.js +19 -0
  121. package/dist/chunks/grLoadingStyles-CERsxyk9.js.map +1 -0
  122. package/dist/chunks/grModalStyles-Dv2NXBKi.js +49 -0
  123. package/dist/chunks/grModalStyles-Dv2NXBKi.js.map +1 -0
  124. package/dist/chunks/grSelectStyles-C1zNEkV7.js +52 -0
  125. package/dist/chunks/grSelectStyles-C1zNEkV7.js.map +1 -0
  126. package/dist/chunks/granularityI18n-BEWP9aJs.js +28 -0
  127. package/dist/chunks/granularityI18n-BEWP9aJs.js.map +1 -0
  128. package/dist/chunks/info-C0bHmdZq.js +28 -0
  129. package/dist/chunks/info-C0bHmdZq.js.map +1 -0
  130. package/dist/chunks/loader-circle-B2rWDk5u.js +25 -0
  131. package/dist/chunks/loader-circle-B2rWDk5u.js.map +1 -0
  132. package/dist/chunks/ru-DKswMSdd.js +50 -0
  133. package/dist/chunks/ru-DKswMSdd.js.map +1 -0
  134. package/dist/chunks/safelist-BF822K15.js +15 -0
  135. package/dist/chunks/safelist-BF822K15.js.map +1 -0
  136. package/dist/chunks/safelist-BY7z8fOl.js +26 -0
  137. package/dist/chunks/safelist-BY7z8fOl.js.map +1 -0
  138. package/dist/chunks/{shared-BqUqjuxn.js → shared-Bvjkhhm2.js} +151 -111
  139. package/dist/chunks/shared-Bvjkhhm2.js.map +1 -0
  140. package/dist/chunks/transition-mJ3PZCHH.js +1694 -0
  141. package/dist/chunks/transition-mJ3PZCHH.js.map +1 -0
  142. package/dist/chunks/x-Pa6C2hwi.js +25 -0
  143. package/dist/chunks/x-Pa6C2hwi.js.map +1 -0
  144. package/dist/chunks/x-circle-DQSlBLmX.js +69 -0
  145. package/dist/chunks/x-circle-DQSlBLmX.js.map +1 -0
  146. package/dist/components/GrAlert/chunks/GrAlert-BjerGcU8.js +148 -0
  147. package/dist/components/GrAlert/chunks/GrAlert-BjerGcU8.js.map +1 -0
  148. package/dist/components/GrAlert/index.js +3 -3
  149. package/dist/components/GrAvatar/chunks/GrAvatar-BjnPKNAL.js +43 -0
  150. package/dist/components/GrAvatar/chunks/GrAvatar-BjnPKNAL.js.map +1 -0
  151. package/dist/components/GrAvatar/index.js +3 -3
  152. package/dist/components/GrBadge/chunks/GrBadge-wuIb4_2K.js +34 -0
  153. package/dist/components/GrBadge/chunks/GrBadge-wuIb4_2K.js.map +1 -0
  154. package/dist/components/GrBadge/index.js +3 -3
  155. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-CxtamOZ-.js +35 -0
  156. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-CxtamOZ-.js.map +1 -0
  157. package/dist/components/GrBadgeWrap/index.js +3 -3
  158. package/dist/components/GrBottomNav/chunks/GrBottomNav-CsmQ7mTJ.js +33 -0
  159. package/dist/components/GrBottomNav/chunks/GrBottomNav-CsmQ7mTJ.js.map +1 -0
  160. package/dist/components/GrBottomNav/index.js +3 -3
  161. package/dist/components/GrButton/chunks/GrButton-BmGdp8-4.js +85 -0
  162. package/dist/components/GrButton/chunks/GrButton-BmGdp8-4.js.map +1 -0
  163. package/dist/components/GrButton/index.js +5 -5
  164. package/dist/components/GrButtonGroup/chunks/GrButtonGroup-CBj4tpms.js +23 -0
  165. package/dist/components/GrButtonGroup/chunks/GrButtonGroup-CBj4tpms.js.map +1 -0
  166. package/dist/components/GrButtonGroup/index.js +3 -3
  167. package/dist/components/GrCard/chunks/GrCard-xtDcXBr7.js +13 -0
  168. package/dist/components/GrCard/chunks/GrCard-xtDcXBr7.js.map +1 -0
  169. package/dist/components/GrCard/index.js +3 -3
  170. package/dist/components/GrCheckbox/chunks/GrCheckbox-Bt3d7ckE.js +136 -0
  171. package/dist/components/GrCheckbox/chunks/GrCheckbox-Bt3d7ckE.js.map +1 -0
  172. package/dist/components/GrCheckbox/index.js +3 -3
  173. package/dist/components/GrCollapse/chunks/GrCollapse-HU20VTVn.js +207 -0
  174. package/dist/components/GrCollapse/chunks/GrCollapse-HU20VTVn.js.map +1 -0
  175. package/dist/components/GrCollapse/index.js +3 -3
  176. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-DjGOX9Hd.js +133 -0
  177. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-DjGOX9Hd.js.map +1 -0
  178. package/dist/components/GrConfirmDialog/index.js +3 -3
  179. package/dist/components/GrDataTable/chunks/GrDataTable-QDOJWmdY.js +181 -0
  180. package/dist/components/GrDataTable/chunks/GrDataTable-QDOJWmdY.js.map +1 -0
  181. package/dist/components/GrDataTable/index.js +3 -3
  182. package/dist/components/GrDialog/chunks/GrDialog-gObmaVEl.js +223 -0
  183. package/dist/components/GrDialog/chunks/GrDialog-gObmaVEl.js.map +1 -0
  184. package/dist/components/GrDialog/index.js +4 -4
  185. package/dist/components/GrDrawer/chunks/GrDrawer-BJL_gTxI.js +158 -0
  186. package/dist/components/GrDrawer/chunks/GrDrawer-BJL_gTxI.js.map +1 -0
  187. package/dist/components/GrDrawer/index.js +3 -3
  188. package/dist/components/GrDropdown/chunks/GrDropdown-DVTU32T_.js +153 -0
  189. package/dist/components/GrDropdown/chunks/GrDropdown-DVTU32T_.js.map +1 -0
  190. package/dist/components/GrDropdown/index.js +3 -3
  191. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-fePQRcgh.js +311 -0
  192. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-fePQRcgh.js.map +1 -0
  193. package/dist/components/GrDropdownMenu/index.js +3 -3
  194. package/dist/components/GrEmptyState/chunks/GrEmptyState-Bs8d3tgb.js +64 -0
  195. package/dist/components/GrEmptyState/chunks/GrEmptyState-Bs8d3tgb.js.map +1 -0
  196. package/dist/components/GrEmptyState/index.js +3 -3
  197. package/dist/components/GrFileUpload/chunks/GrFileUpload-DVv8yXpl.js +370 -0
  198. package/dist/components/GrFileUpload/chunks/GrFileUpload-DVv8yXpl.js.map +1 -0
  199. package/dist/components/GrFileUpload/index.js +4 -4
  200. package/dist/components/GrFormField/chunks/GrFormField-BzezYcS8.js +37 -0
  201. package/dist/components/GrFormField/chunks/GrFormField-BzezYcS8.js.map +1 -0
  202. package/dist/components/GrFormField/index.js +3 -3
  203. package/dist/components/GrFormFile/chunks/GrFormFile-DtZOypJW.js +315 -0
  204. package/dist/components/GrFormFile/chunks/GrFormFile-DtZOypJW.js.map +1 -0
  205. package/dist/components/GrFormFile/index.js +3 -3
  206. package/dist/components/GrFormSection/chunks/GrFormSection-BIPB1RIk.js +37 -0
  207. package/dist/components/GrFormSection/chunks/GrFormSection-BIPB1RIk.js.map +1 -0
  208. package/dist/components/GrFormSection/index.js +3 -3
  209. package/dist/components/GrIcon/chunks/GrIcon-BV7RBU_0.js +34 -0
  210. package/dist/components/GrIcon/chunks/GrIcon-BV7RBU_0.js.map +1 -0
  211. package/dist/components/GrIcon/index.js +3 -3
  212. package/dist/components/GrImageViewer/chunks/GrImageViewer-fn8ilJTA.js +399 -0
  213. package/dist/components/GrImageViewer/chunks/GrImageViewer-fn8ilJTA.js.map +1 -0
  214. package/dist/components/GrImageViewer/index.js +3 -3
  215. package/dist/components/GrInput/chunks/GrInput-DLLRrH1A.js +213 -0
  216. package/dist/components/GrInput/chunks/GrInput-DLLRrH1A.js.map +1 -0
  217. package/dist/components/GrInput/index.js +3 -3
  218. package/dist/components/GrInputTag/chunks/GrInputTag-CzrrBxgU.js +259 -0
  219. package/dist/components/GrInputTag/chunks/GrInputTag-CzrrBxgU.js.map +1 -0
  220. package/dist/components/GrInputTag/index.js +3 -3
  221. package/dist/components/GrLink/chunks/GrLink-Dhkid3Mp.js +82 -0
  222. package/dist/components/GrLink/chunks/GrLink-Dhkid3Mp.js.map +1 -0
  223. package/dist/components/GrLink/index.js +3 -3
  224. package/dist/components/GrList/chunks/GrList-CjgeVjhY.js +79 -0
  225. package/dist/components/GrList/chunks/GrList-CjgeVjhY.js.map +1 -0
  226. package/dist/components/GrList/index.js +3 -3
  227. package/dist/components/GrLoading/chunks/GrLoading-DihGX3ol.js +71 -0
  228. package/dist/components/GrLoading/chunks/GrLoading-DihGX3ol.js.map +1 -0
  229. package/dist/components/GrLoading/index.js +3 -3
  230. package/dist/components/GrModal/chunks/GrModal-gvfvlp7k.js +170 -0
  231. package/dist/components/GrModal/chunks/GrModal-gvfvlp7k.js.map +1 -0
  232. package/dist/components/GrModal/index.js +4 -4
  233. package/dist/components/GrNavbar/chunks/GrNavbar-CQOAfO6y.js +77 -0
  234. package/dist/components/GrNavbar/chunks/GrNavbar-CQOAfO6y.js.map +1 -0
  235. package/dist/components/GrNavbar/index.js +3 -3
  236. package/dist/components/GrNumberInput/chunks/GrNumberInput-CyHgUotG.js +399 -0
  237. package/dist/components/GrNumberInput/chunks/GrNumberInput-CyHgUotG.js.map +1 -0
  238. package/dist/components/GrNumberInput/index.js +3 -3
  239. package/dist/components/GrPagination/chunks/GrPagination-C5cxRJsF.js +116 -0
  240. package/dist/components/GrPagination/chunks/GrPagination-C5cxRJsF.js.map +1 -0
  241. package/dist/components/GrPagination/index.js +3 -3
  242. package/dist/components/GrProgressBar/chunks/GrProgressBar-C9wAAFxR.js +41 -0
  243. package/dist/components/GrProgressBar/chunks/GrProgressBar-C9wAAFxR.js.map +1 -0
  244. package/dist/components/GrProgressBar/index.js +3 -3
  245. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-Cfq9bvL3.js +192 -0
  246. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-Cfq9bvL3.js.map +1 -0
  247. package/dist/components/GrPromptDialog/index.js +3 -3
  248. package/dist/components/GrRadio/chunks/GrRadio-B_t_ZNVl.js +186 -0
  249. package/dist/components/GrRadio/chunks/GrRadio-B_t_ZNVl.js.map +1 -0
  250. package/dist/components/GrRadio/index.js +3 -3
  251. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-CVlgpUBr.js +82 -0
  252. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-CVlgpUBr.js.map +1 -0
  253. package/dist/components/GrRadioGroup/index.js +3 -3
  254. package/dist/components/GrSegmented/chunks/GrSegmented-BPl1koHc.js +325 -0
  255. package/dist/components/GrSegmented/chunks/GrSegmented-BPl1koHc.js.map +1 -0
  256. package/dist/components/GrSegmented/index.js +3 -3
  257. package/dist/components/GrSelect/chunks/GrSelect-aVqUL-1F.js +445 -0
  258. package/dist/components/GrSelect/chunks/GrSelect-aVqUL-1F.js.map +1 -0
  259. package/dist/components/GrSelect/index.js +3 -3
  260. package/dist/components/GrSidebar/chunks/GrSidebar-DVucgcfV.js +46 -0
  261. package/dist/components/GrSidebar/chunks/GrSidebar-DVucgcfV.js.map +1 -0
  262. package/dist/components/GrSidebar/index.js +3 -3
  263. package/dist/components/GrSkeleton/chunks/GrSkeleton-CDTvCSoH.js +35 -0
  264. package/dist/components/GrSkeleton/chunks/GrSkeleton-CDTvCSoH.js.map +1 -0
  265. package/dist/components/GrSkeleton/index.js +3 -3
  266. package/dist/components/GrSwitch/chunks/GrSwitch-Bnamgqb2.js +81 -0
  267. package/dist/components/GrSwitch/chunks/GrSwitch-Bnamgqb2.js.map +1 -0
  268. package/dist/components/GrSwitch/index.js +3 -3
  269. package/dist/components/GrTable/chunks/GrTable-CyQ9uw8A.js +59 -0
  270. package/dist/components/GrTable/chunks/GrTable-CyQ9uw8A.js.map +1 -0
  271. package/dist/components/GrTable/index.js +3 -3
  272. package/dist/components/GrTabs/chunks/GrTabs-CiGmcmvm.js +120 -0
  273. package/dist/components/GrTabs/chunks/GrTabs-CiGmcmvm.js.map +1 -0
  274. package/dist/components/GrTabs/index.js +3 -3
  275. package/dist/components/GrTextarea/chunks/GrTextarea-VBSc6A7D.js +73 -0
  276. package/dist/components/GrTextarea/chunks/GrTextarea-VBSc6A7D.js.map +1 -0
  277. package/dist/components/GrTextarea/index.js +3 -3
  278. package/dist/components/GrToaster/chunks/GrToaster-I1e-zCpf.js +173 -0
  279. package/dist/components/GrToaster/chunks/GrToaster-I1e-zCpf.js.map +1 -0
  280. package/dist/components/GrToaster/index.js +3 -3
  281. package/dist/components/GrTooltip/chunks/GrTooltip-CrV1gI_c.js +57 -0
  282. package/dist/components/GrTooltip/chunks/GrTooltip-CrV1gI_c.js.map +1 -0
  283. package/dist/components/GrTooltip/index.js +3 -3
  284. package/dist/components/GrTree/chunks/GrTree-Dlev9oBd.js +736 -0
  285. package/dist/components/GrTree/chunks/GrTree-Dlev9oBd.js.map +1 -0
  286. package/dist/components/GrTree/index.js +3 -3
  287. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-DN6XFjOD.js +456 -0
  288. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-DN6XFjOD.js.map +1 -0
  289. package/dist/components/GrTreeSelect/index.js +3 -3
  290. package/dist/composables/useTheme.js +41 -30
  291. package/dist/composables/useTheme.js.map +1 -0
  292. package/dist/composables/useToast.js +43 -34
  293. package/dist/composables/useToast.js.map +1 -0
  294. package/dist/directives/index.js +2 -2
  295. package/dist/fileValidation/index.js +2 -2
  296. package/dist/granular-provider-node.js +25 -14
  297. package/dist/granular-provider-node.js.map +1 -0
  298. package/dist/granular-provider.js +5 -3
  299. package/dist/granular-provider.js.map +1 -0
  300. package/dist/i18n/all.js +8 -6
  301. package/dist/i18n/all.js.map +1 -0
  302. package/dist/i18n/index.js +3 -3
  303. package/dist/index.js +105 -105
  304. package/dist/vue/index.js +66 -26
  305. package/dist/vue/index.js.map +1 -0
  306. package/package.json +1 -1
  307. package/dist/chunks/_plugin-vue_export-helper-CHO2XVys.js +0 -8
  308. package/dist/chunks/adapter-D5uYoOZj.js +0 -4
  309. package/dist/chunks/arrow-up-Dv3dC3hu.js +0 -23
  310. package/dist/chunks/classTokens-CT1tqF2j.js +0 -6
  311. package/dist/chunks/config-B5JCvHys.js +0 -13
  312. package/dist/chunks/config-BDXa5Sna2.js +0 -9
  313. package/dist/chunks/config-BG5_FuZ-.js +0 -34
  314. package/dist/chunks/config-BMYKG1oB.js +0 -10
  315. package/dist/chunks/config-BQREEXFD.js +0 -8
  316. package/dist/chunks/config-BUZtbeTr.js +0 -40
  317. package/dist/chunks/config-BVXycfiO.js +0 -9
  318. package/dist/chunks/config-BZW-RL6E.js +0 -14
  319. package/dist/chunks/config-BhbfV-Is.js +0 -48
  320. package/dist/chunks/config-BmYFupZh.js +0 -8
  321. package/dist/chunks/config-BsZc_QQ-2.js +0 -20
  322. package/dist/chunks/config-C1Sn7mn-.js +0 -27
  323. package/dist/chunks/config-C4_REX-3.js +0 -9
  324. package/dist/chunks/config-CBFllZZ4.js +0 -9
  325. package/dist/chunks/config-CDyD_fCt.js +0 -8
  326. package/dist/chunks/config-CJeG727i.js +0 -149
  327. package/dist/chunks/config-CLawBqde.js +0 -21
  328. package/dist/chunks/config-CMz46RPG.js +0 -8
  329. package/dist/chunks/config-CO-7HRZd2.js +0 -8
  330. package/dist/chunks/config-CS7E7LME.js +0 -9
  331. package/dist/chunks/config-CVy124Xj.js +0 -8
  332. package/dist/chunks/config-CcixQGaN.js +0 -47
  333. package/dist/chunks/config-CiVXZxyQ.js +0 -9
  334. package/dist/chunks/config-CoMQmunP.js +0 -8
  335. package/dist/chunks/config-Cq6ufYtp.js +0 -9
  336. package/dist/chunks/config-D8CIEWcb.js +0 -8
  337. package/dist/chunks/config-D8hKc39m.js +0 -18
  338. package/dist/chunks/config-D9MxGwCJ.js +0 -8
  339. package/dist/chunks/config-DBXTZE36.js +0 -15
  340. package/dist/chunks/config-DK9C8O7L.js +0 -9
  341. package/dist/chunks/config-DTegOmx2.js +0 -8
  342. package/dist/chunks/config-DYI8XADo.js +0 -47
  343. package/dist/chunks/config-DlidGf7P.js +0 -8
  344. package/dist/chunks/config-DtNe7EIX.js +0 -35
  345. package/dist/chunks/config-EdWeK_ge.js +0 -17
  346. package/dist/chunks/config-FGAkxHFh.js +0 -8
  347. package/dist/chunks/config-M76gNxd2.js +0 -37
  348. package/dist/chunks/config-NuqoO_Of.js +0 -33
  349. package/dist/chunks/config-QsovJrku2.js +0 -66
  350. package/dist/chunks/config-R6F6zRJk.js +0 -9
  351. package/dist/chunks/config-SLwkDc4Q2.js +0 -9
  352. package/dist/chunks/config-aJ7sb62Y.js +0 -8
  353. package/dist/chunks/config-b9nc87Oc.js +0 -9
  354. package/dist/chunks/config-dSI8RttH2.js +0 -8
  355. package/dist/chunks/config-im2VHeSM.js +0 -9
  356. package/dist/chunks/config-vKeQ035f.js +0 -9
  357. package/dist/chunks/config-vMcxHlWi.js +0 -14
  358. package/dist/chunks/dialogShared-CONROtU2.js +0 -26
  359. package/dist/chunks/directives-Dr5NPOT8.js +0 -530
  360. package/dist/chunks/en-j3simI0h.js +0 -41
  361. package/dist/chunks/es-CIT9s_vo.js +0 -4
  362. package/dist/chunks/es-CLpJj7KP.js +0 -41
  363. package/dist/chunks/fileValidation-LFD-vwil.js +0 -193
  364. package/dist/chunks/grDropdownStyles-149X1NeB.js +0 -31
  365. package/dist/chunks/grLoadingStyles-Bjo7ylmq.js +0 -15
  366. package/dist/chunks/grModalStyles-Dmd4havY.js +0 -38
  367. package/dist/chunks/grSelectStyles-C3QKIn1J.js +0 -40
  368. package/dist/chunks/granularityI18n-8_v1B11L.js +0 -24
  369. package/dist/chunks/info-CNJnuTYC.js +0 -26
  370. package/dist/chunks/loader-circle-C5vCCMfB.js +0 -23
  371. package/dist/chunks/ru-CiOZPnBu.js +0 -41
  372. package/dist/chunks/safelist-Bq32hAXc.js +0 -13
  373. package/dist/chunks/safelist-CLcTRYB-.js +0 -22
  374. package/dist/chunks/transition-BJXMi52x.js +0 -1617
  375. package/dist/chunks/x--kxrj3ez.js +0 -23
  376. package/dist/chunks/x-circle-ChJ87u1v.js +0 -61
  377. package/dist/components/GrAlert/chunks/GrAlert-DLHkusb-.js +0 -129
  378. package/dist/components/GrAvatar/chunks/GrAvatar-BFYH3HJw.js +0 -32
  379. package/dist/components/GrBadge/chunks/GrBadge-D_AoqGrn.js +0 -27
  380. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-C_N0QJfA.js +0 -26
  381. package/dist/components/GrBottomNav/chunks/GrBottomNav-Chpu3SVd.js +0 -21
  382. package/dist/components/GrButton/chunks/GrButton-BXVVt6Od.js +0 -67
  383. package/dist/components/GrButtonGroup/chunks/GrButtonGroup-CmnYHVH7.js +0 -16
  384. package/dist/components/GrCard/chunks/GrCard-DEpN6Ptf.js +0 -10
  385. package/dist/components/GrCheckbox/chunks/GrCheckbox-DF3vJApB.js +0 -111
  386. package/dist/components/GrCollapse/chunks/GrCollapse-D7QYRqNa.js +0 -150
  387. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-C7Eh8-Vn.js +0 -111
  388. package/dist/components/GrDataTable/chunks/GrDataTable-Dxsg1NMP.js +0 -142
  389. package/dist/components/GrDialog/chunks/GrDialog-BSd4-uP5.js +0 -169
  390. package/dist/components/GrDrawer/chunks/GrDrawer-DBBSwe1s.js +0 -135
  391. package/dist/components/GrDropdown/chunks/GrDropdown-BELyRP4A.js +0 -110
  392. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-B8fuk7iP.js +0 -233
  393. package/dist/components/GrEmptyState/chunks/GrEmptyState-BPGoafJI.js +0 -49
  394. package/dist/components/GrFileUpload/chunks/GrFileUpload-BPzx3LEM.js +0 -294
  395. package/dist/components/GrFormField/chunks/GrFormField-Cn8g9eFP.js +0 -28
  396. package/dist/components/GrFormFile/chunks/GrFormFile-DfinD5Iv.js +0 -248
  397. package/dist/components/GrFormSection/chunks/GrFormSection-dKpQw-vh.js +0 -27
  398. package/dist/components/GrIcon/chunks/GrIcon-CXIHuG7L.js +0 -25
  399. package/dist/components/GrImageViewer/chunks/GrImageViewer-CQSNx-D7.js +0 -322
  400. package/dist/components/GrInput/chunks/GrInput-CLKX1inm.js +0 -158
  401. package/dist/components/GrInputTag/chunks/GrInputTag-BAtLody2.js +0 -214
  402. package/dist/components/GrLink/chunks/GrLink-BpXnly-Y.js +0 -59
  403. package/dist/components/GrList/chunks/GrList-BrFc7VdS.js +0 -55
  404. package/dist/components/GrLoading/chunks/GrLoading-dFuoryMY.js +0 -53
  405. package/dist/components/GrModal/chunks/GrModal-uaWXH08K.js +0 -136
  406. package/dist/components/GrNavbar/chunks/GrNavbar-KzLHgdjX.js +0 -62
  407. package/dist/components/GrNumberInput/chunks/GrNumberInput-rENn1802.js +0 -315
  408. package/dist/components/GrPagination/chunks/GrPagination-DP0x3rx6.js +0 -93
  409. package/dist/components/GrProgressBar/chunks/GrProgressBar-DpW93sOi.js +0 -29
  410. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-ASfBwyzQ.js +0 -158
  411. package/dist/components/GrRadio/chunks/GrRadio-8BOo97XV.js +0 -147
  412. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-BymbUmqI.js +0 -66
  413. package/dist/components/GrSegmented/chunks/GrSegmented-CK5C_lN7.js +0 -250
  414. package/dist/components/GrSelect/chunks/GrSelect-BMfc1-vs.js +0 -314
  415. package/dist/components/GrSidebar/chunks/GrSidebar-C4SXXhfO.js +0 -29
  416. package/dist/components/GrSkeleton/chunks/GrSkeleton-QlieOdpY.js +0 -25
  417. package/dist/components/GrSwitch/chunks/GrSwitch-Cefiutzu.js +0 -64
  418. package/dist/components/GrTable/chunks/GrTable-k_FUiJQk.js +0 -44
  419. package/dist/components/GrTabs/chunks/GrTabs-B46P-lUc.js +0 -98
  420. package/dist/components/GrTextarea/chunks/GrTextarea-BX7L1MJk.js +0 -57
  421. package/dist/components/GrToaster/chunks/GrToaster-C4l_BjOh.js +0 -139
  422. package/dist/components/GrTooltip/chunks/GrTooltip-BqRAzuLT.js +0 -37
  423. package/dist/components/GrTree/chunks/GrTree-C2CXR_vW.js +0 -614
  424. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-DAAay-QB.js +0 -353
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrTreeSelect-DN6XFjOD.js","names":["$slots"],"sources":["../../../../src/components/GrTreeSelect/GrTreeSelect.vue","../../../../src/components/GrTreeSelect/GrTreeSelect.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"T extends Record<string, any> = any\">\nimport { computed, nextTick, onUnmounted, ref, watch } from 'vue'\n\nimport { vClickOutside } from '../../directives'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport GrInput from '../GrInput/GrInput.vue'\nimport GrTree, {\n type GrTreeInstance,\n type GrTreeKey,\n type GrTreeNode,\n} from '../GrTree'\nimport type { GrTreeSelectModelValue, GrTreeSelectProps } from './grTreeSelectTypes'\nimport { grTreeSelectClass, grTreeSelectPanelClass } from './grTreeSelectStyles'\n\nconst props = withDefaults(\n defineProps<GrTreeSelectProps<T>>(),\n {\n props: () => ({\n children: 'children',\n label: 'label',\n }),\n nodeKey: 'id' as any,\n defaultExpandedKeys: () => [],\n disabled: false,\n placeholder: undefined,\n size: 'md',\n invalid: false,\n state: 'default',\n multiple: false,\n clearable: false,\n valueDisplay: 'label',\n filterable: false,\n filterPlaceholder: undefined,\n filterInputmode: undefined,\n filterNodeMethod: undefined,\n closeOnSelect: undefined,\n dropdownMaxHeight: 320,\n },\n)\n\nconst { t } = useGranularityTranslations()\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrTreeSelectModelValue): void\n (e: 'change', value: GrTreeSelectModelValue): void\n (e: 'visibleChange', visible: boolean): void\n (e: 'clear'): void\n (e: 'nodeClick', data: T, node: GrTreeNode<T>): void\n}>()\n\ndefineSlots<{\n /** Рендер значения внутри триггера (вместо дефолтного текста). */\n value?: (props: { value: GrTreeSelectModelValue; labels: string[]; displayValue: string; pathLabels?: string[] }) => any\n /** Рендер строки дерева. */\n node?: (props: { node: GrTreeNode<T>; data: T; selected: boolean }) => any\n /** Содержимое пустого состояния (когда нет данных). */\n empty?: () => any\n}>()\n\nconst rootEl = ref<HTMLElement | null>(null)\nconst triggerEl = ref<HTMLInputElement | null>(null)\nconst filterInputRef = ref<InstanceType<typeof GrInput> | null>(null)\nconst treeRef = ref<GrTreeInstance | null>(null)\nconst panelEl = ref<HTMLElement | null>(null)\n\nconst clickOutsideExclude = [() => panelEl.value]\n\nlet hadPointerDownOnTrigger = false\n\nconst open = ref(false)\nconst filterValue = ref('')\n\nconst panelStyle = ref<Record<string, string>>({\n left: '0px',\n top: '0px',\n width: '0px',\n zIndex: '2147483647',\n})\n\nfunction syncPanelPosition(): void {\n if (typeof window === 'undefined')\n return\n\n const root = rootEl.value\n if (!root)\n return\n\n const rect = root.getBoundingClientRect()\n\n panelStyle.value = {\n left: `${rect.left}px`,\n top: `${rect.bottom + 8}px`,\n width: `${rect.width}px`,\n zIndex: '2147483647',\n }\n}\n\nfunction bindPanelPositionListeners(): void {\n if (typeof window === 'undefined')\n return\n window.addEventListener('resize', syncPanelPosition)\n window.addEventListener('scroll', syncPanelPosition, true)\n}\n\nfunction unbindPanelPositionListeners(): void {\n if (typeof window === 'undefined')\n return\n window.removeEventListener('resize', syncPanelPosition)\n window.removeEventListener('scroll', syncPanelPosition, true)\n}\n\nconst closeOnSelectResolved = computed(() => {\n return props.closeOnSelect ?? !props.multiple\n})\n\nfunction getChildrenKey() {\n return props.props.children ?? 'children'\n}\n\nfunction getLabelKey() {\n return props.props.label ?? 'label'\n}\n\nfunction nodeLabel(data: T): string {\n const key = getLabelKey() as keyof T\n const v = data[key]\n return v == null ? '' : String(v)\n}\n\nfunction nodeChildren(data: T): T[] {\n const key = getChildrenKey() as keyof T\n const v = data[key]\n return Array.isArray(v) ? (v as any) : []\n}\n\nfunction nodeKeyOf(data: T, index: number, parentKey: GrTreeKey | undefined): GrTreeKey {\n const keyName = props.nodeKey as keyof T\n const v = data[keyName]\n if (v != null)\n return v as GrTreeKey\n\n return parentKey == null ? index : `${String(parentKey)}:${index}`\n}\n\nconst labelByKey = computed(() => {\n const map = new Map<GrTreeKey, string>()\n\n const walk = (items: T[], parentKey: GrTreeKey | undefined) => {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const key = nodeKeyOf(item, i, parentKey)\n map.set(key, nodeLabel(item))\n walk(nodeChildren(item), key)\n }\n }\n\n walk(props.data ?? [], undefined)\n return map\n})\n\nconst pathLabelsByKey = computed(() => {\n const map = new Map<GrTreeKey, string[]>()\n\n const walk = (items: T[], parentKey: GrTreeKey | undefined, parentPath: string[]) => {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const key = nodeKeyOf(item, i, parentKey)\n const label = nodeLabel(item)\n const path = [...parentPath, label]\n map.set(key, path)\n walk(nodeChildren(item), key, path)\n }\n }\n\n walk(props.data ?? [], undefined, [])\n return map\n})\n\nconst selectedKeys = computed<GrTreeKey[]>(() => {\n if (props.multiple) {\n return Array.isArray(props.modelValue) ? props.modelValue : []\n }\n\n const v = props.modelValue\n if (v == null || Array.isArray(v))\n return []\n return [v]\n})\n\nconst selectedKeySet = computed(() => new Set(selectedKeys.value))\n\nconst selectedLabels = computed(() => {\n const map = labelByKey.value\n return selectedKeys.value.map((k) => map.get(k) ?? String(k))\n})\n\nconst selectedPathLabels = computed<string[] | undefined>(() => {\n if (props.multiple)\n return undefined\n\n const key = selectedKeys.value[0]\n if (key == null)\n return undefined\n\n const path = pathLabelsByKey.value.get(key)\n if (path?.length)\n return path\n\n const labels = selectedLabels.value\n return labels.length ? [labels[0]] : undefined\n})\n\nconst displayValue = computed(() => {\n const labels = selectedLabels.value\n if (labels.length === 0)\n return ''\n\n if (!props.multiple) {\n if (props.valueDisplay === 'path') {\n const path = selectedPathLabels.value\n if (path?.length)\n return path.join(' / ')\n }\n return labels[0]\n }\n\n if (labels.length === 1)\n return labels[0]\n return `${labels[0]} +${labels.length - 1}`\n})\n\nconst hasSelection = computed(() => selectedKeys.value.length > 0)\n\nconst resolvedFilterPlaceholder = computed(() => {\n return props.filterPlaceholder ?? t('gr.treeSelect.filterPlaceholder', 'Search…')\n})\n\nconst className = computed(() => {\n return grTreeSelectClass({\n size: props.size,\n state: props.state,\n invalid: props.invalid,\n })\n})\n\nconst panelClasses = computed(() => {\n return grTreeSelectPanelClass\n})\n\nfunction setOpen(next: boolean) {\n if (props.disabled)\n return\n\n if (open.value === next)\n return\n\n open.value = next\n emit('visibleChange', next)\n}\n\nfunction onClickOutside(): void {\n setOpen(false)\n}\n\nfunction openDropdown(): void {\n setOpen(true)\n}\n\nfunction closeDropdown(): void {\n setOpen(false)\n}\n\nfunction toggleDropdown(): void {\n setOpen(!open.value)\n}\n\nfunction onTriggerPointerDown(): void {\n hadPointerDownOnTrigger = true\n if (typeof window !== 'undefined') {\n window.setTimeout(() => {\n hadPointerDownOnTrigger = false\n }, 0)\n }\n else {\n // SSR / no window: reset sync\n hadPointerDownOnTrigger = false\n }\n}\n\nfunction onTriggerFocus(): void {\n if (hadPointerDownOnTrigger)\n return\n openDropdown()\n}\n\nfunction closeOnEscape(e: KeyboardEvent): void {\n if (e.key === 'Escape') {\n closeDropdown()\n nextTick(() => triggerEl.value?.focus())\n }\n}\n\nwatch(\n open,\n async (isOpen) => {\n if (typeof document === 'undefined')\n return\n\n document.removeEventListener('keydown', closeOnEscape)\n unbindPanelPositionListeners()\n\n if (isOpen)\n document.addEventListener('keydown', closeOnEscape)\n\n if (!isOpen)\n return\n\n bindPanelPositionListeners()\n await nextTick()\n syncPanelPosition()\n\n // sync tree highlight\n if (!props.multiple) {\n const v = props.modelValue\n if (v != null && !Array.isArray(v))\n treeRef.value?.setCurrentKey(v)\n }\n\n // focus filter input\n if (props.filterable) {\n await nextTick()\n filterInputRef.value?.focus()\n }\n },\n { immediate: true },\n)\n\nonUnmounted(() => {\n if (typeof document === 'undefined')\n return\n document.removeEventListener('keydown', closeOnEscape)\n unbindPanelPositionListeners()\n})\n\nwatch(\n () => props.modelValue,\n (v) => {\n if (props.multiple)\n return\n if (v == null || Array.isArray(v)) {\n treeRef.value?.setCurrentKey(undefined)\n return\n }\n treeRef.value?.setCurrentKey(v)\n },\n)\n\nwatch(\n filterValue,\n (v) => {\n treeRef.value?.filter(v)\n },\n)\n\nwatch(\n open,\n (isOpen) => {\n if (isOpen)\n return\n if (filterValue.value.trim().length > 0)\n filterValue.value = ''\n },\n)\n\nfunction emitModel(next: GrTreeSelectModelValue) {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nfunction clear(): void {\n if (props.disabled)\n return\n\n const next: GrTreeSelectModelValue = props.multiple ? [] : null\n emitModel(next)\n emit('clear')\n if (!props.multiple)\n treeRef.value?.setCurrentKey(undefined)\n}\n\nfunction onTriggerKeydown(e: KeyboardEvent): void {\n if (props.disabled)\n return\n\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n openDropdown()\n }\n if (e.key === 'Escape') {\n e.preventDefault()\n closeDropdown()\n }\n}\n\nfunction onNodeClick(data: T, node: GrTreeNode<T>): void {\n emit('nodeClick', data, node)\n\n if (props.disabled)\n return\n\n if (props.multiple) {\n const next = new Set(selectedKeySet.value)\n if (next.has(node.key))\n next.delete(node.key)\n else\n next.add(node.key)\n emitModel([...next])\n\n if (closeOnSelectResolved.value) {\n closeDropdown()\n }\n return\n }\n\n emitModel(node.key)\n if (closeOnSelectResolved.value) {\n closeDropdown()\n }\n}\n</script>\n\n<template>\n <div\n ref=\"rootEl\"\n v-click-outside=\"{ handler: onClickOutside, enabled: open, exclude: clickOutsideExclude }\"\n data-ds-tree-select\n class=\"relative\"\n >\n <div class=\"relative\">\n <input\n ref=\"triggerEl\"\n data-testid=\"ds-tree-select-trigger\"\n data-ds-tree-select-trigger\n type=\"text\"\n :value=\"displayValue\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n readonly\n role=\"combobox\"\n aria-readonly=\"true\"\n :aria-expanded=\"open ? 'true' : 'false'\"\n :aria-invalid=\"invalid ? 'true' : undefined\"\n class=\"w-full rounded-md border bg-[var(--bg)] text-[var(--fg)] placeholder:text-[var(--muted-fg)] transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] disabled:opacity-50 disabled:cursor-not-allowed\"\n :class=\"[className, $slots.value ? 'text-transparent placeholder:text-transparent' : '']\"\n @pointerdown=\"onTriggerPointerDown\"\n @click=\"toggleDropdown\"\n @focus=\"onTriggerFocus\"\n @keydown=\"onTriggerKeydown\"\n >\n\n <button\n v-if=\"clearable && hasSelection\"\n data-testid=\"ds-tree-select-clear\"\n data-ds-tree-select-clear\n type=\"button\"\n class=\"absolute top-1/2 -translate-y-1/2 right-3 h-6 w-6 inline-flex items-center justify-center rounded-md text-[var(--muted-fg)] hover:text-[var(--fg)] hover:bg-[color-mix(in_srgb,var(--muted)_25%,transparent)] disabled:opacity-50\"\n :disabled=\"disabled\"\n :aria-label=\"t('gr.common.clear', 'Clear')\"\n @click.stop=\"clear\"\n >\n <span class=\"i-lucide-x h-4 w-4\" />\n </button>\n\n <span\n v-else\n data-testid=\"ds-tree-select-chevron\"\n data-ds-tree-select-chevron\n class=\"absolute top-1/2 -translate-y-1/2 right-3 text-[var(--muted-fg)] pointer-events-none\"\n >\n <span\n class=\"i-lucide-chevron-down h-4 w-4 transition-transform duration-150\"\n :class=\"open ? 'rotate-180' : ''\"\n />\n </span>\n\n <div\n v-if=\"$slots.value\"\n class=\"absolute inset-y-0 left-3 right-9 flex items-center pointer-events-none\"\n >\n <slot\n name=\"value\"\n :value=\"modelValue\"\n :labels=\"selectedLabels\"\n :display-value=\"displayValue\"\n :path-labels=\"selectedPathLabels\"\n />\n </div>\n </div>\n\n <teleport to=\"body\">\n <transition\n enter-active-class=\"transition ease-out duration-150\"\n enter-from-class=\"transform opacity-0 scale-95\"\n enter-to-class=\"transform opacity-100 scale-100\"\n leave-active-class=\"transition ease-in duration-100\"\n leave-from-class=\"transform opacity-100 scale-100\"\n leave-to-class=\"transform opacity-0 scale-95\"\n >\n <div\n v-show=\"open\"\n ref=\"panelEl\"\n data-testid=\"ds-tree-select-panel\"\n data-ds-tree-select-panel\n class=\"fixed w-full\"\n :style=\"panelStyle\"\n >\n <div :class=\"panelClasses\">\n <div v-if=\"filterable\" class=\"p-2 border-b border-[var(--brd)]\">\n <GrInput\n ref=\"filterInputRef\"\n v-model=\"filterValue\"\n data-testid=\"ds-tree-select-filter\"\n data-ds-tree-select-filter\n type=\"search\"\n :inputmode=\"filterInputmode\"\n :placeholder=\"resolvedFilterPlaceholder\"\n size=\"sm\"\n />\n </div>\n\n <div\n class=\"p-1 overflow-auto\"\n :style=\"{ maxHeight: `${dropdownMaxHeight}px` }\"\n >\n <div v-if=\"(data?.length ?? 0) === 0\" class=\"px-3 py-2 text-[13px] text-[var(--muted-fg)]\">\n <slot name=\"empty\">\n {{ t('gr.treeSelect.empty', 'No data') }}\n </slot>\n </div>\n\n <GrTree\n v-else\n ref=\"treeRef\"\n :data=\"data\"\n :props=\"props.props\"\n :node-key=\"nodeKey as any\"\n :default-expanded-keys=\"defaultExpandedKeys\"\n :filter-node-method=\"filterNodeMethod\"\n :highlight-current=\"!multiple\"\n @node-click=\"onNodeClick\"\n >\n <template #default=\"{ node, data }\">\n <slot\n name=\"node\"\n :node=\"node\"\n :data=\"data\"\n :selected=\"selectedKeySet.has(node.key)\"\n >\n <div class=\"flex items-center gap-2 min-w-0\">\n <span\n class=\"h-4 w-4 shrink-0\"\n :class=\"selectedKeySet.has(node.key) ? 'i-lucide-check text-[var(--primary)]' : ''\"\n aria-hidden=\"true\"\n />\n <span class=\"truncate\">{{ node.label }}</span>\n </div>\n </slot>\n </template>\n </GrTree>\n </div>\n </div>\n </div>\n </transition>\n </teleport>\n </div>\n</template>\n","<script setup lang=\"ts\" generic=\"T extends Record<string, any> = any\">\nimport { computed, nextTick, onUnmounted, ref, watch } from 'vue'\n\nimport { vClickOutside } from '../../directives'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport GrInput from '../GrInput/GrInput.vue'\nimport GrTree, {\n type GrTreeInstance,\n type GrTreeKey,\n type GrTreeNode,\n} from '../GrTree'\nimport type { GrTreeSelectModelValue, GrTreeSelectProps } from './grTreeSelectTypes'\nimport { grTreeSelectClass, grTreeSelectPanelClass } from './grTreeSelectStyles'\n\nconst props = withDefaults(\n defineProps<GrTreeSelectProps<T>>(),\n {\n props: () => ({\n children: 'children',\n label: 'label',\n }),\n nodeKey: 'id' as any,\n defaultExpandedKeys: () => [],\n disabled: false,\n placeholder: undefined,\n size: 'md',\n invalid: false,\n state: 'default',\n multiple: false,\n clearable: false,\n valueDisplay: 'label',\n filterable: false,\n filterPlaceholder: undefined,\n filterInputmode: undefined,\n filterNodeMethod: undefined,\n closeOnSelect: undefined,\n dropdownMaxHeight: 320,\n },\n)\n\nconst { t } = useGranularityTranslations()\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrTreeSelectModelValue): void\n (e: 'change', value: GrTreeSelectModelValue): void\n (e: 'visibleChange', visible: boolean): void\n (e: 'clear'): void\n (e: 'nodeClick', data: T, node: GrTreeNode<T>): void\n}>()\n\ndefineSlots<{\n /** Рендер значения внутри триггера (вместо дефолтного текста). */\n value?: (props: { value: GrTreeSelectModelValue; labels: string[]; displayValue: string; pathLabels?: string[] }) => any\n /** Рендер строки дерева. */\n node?: (props: { node: GrTreeNode<T>; data: T; selected: boolean }) => any\n /** Содержимое пустого состояния (когда нет данных). */\n empty?: () => any\n}>()\n\nconst rootEl = ref<HTMLElement | null>(null)\nconst triggerEl = ref<HTMLInputElement | null>(null)\nconst filterInputRef = ref<InstanceType<typeof GrInput> | null>(null)\nconst treeRef = ref<GrTreeInstance | null>(null)\nconst panelEl = ref<HTMLElement | null>(null)\n\nconst clickOutsideExclude = [() => panelEl.value]\n\nlet hadPointerDownOnTrigger = false\n\nconst open = ref(false)\nconst filterValue = ref('')\n\nconst panelStyle = ref<Record<string, string>>({\n left: '0px',\n top: '0px',\n width: '0px',\n zIndex: '2147483647',\n})\n\nfunction syncPanelPosition(): void {\n if (typeof window === 'undefined')\n return\n\n const root = rootEl.value\n if (!root)\n return\n\n const rect = root.getBoundingClientRect()\n\n panelStyle.value = {\n left: `${rect.left}px`,\n top: `${rect.bottom + 8}px`,\n width: `${rect.width}px`,\n zIndex: '2147483647',\n }\n}\n\nfunction bindPanelPositionListeners(): void {\n if (typeof window === 'undefined')\n return\n window.addEventListener('resize', syncPanelPosition)\n window.addEventListener('scroll', syncPanelPosition, true)\n}\n\nfunction unbindPanelPositionListeners(): void {\n if (typeof window === 'undefined')\n return\n window.removeEventListener('resize', syncPanelPosition)\n window.removeEventListener('scroll', syncPanelPosition, true)\n}\n\nconst closeOnSelectResolved = computed(() => {\n return props.closeOnSelect ?? !props.multiple\n})\n\nfunction getChildrenKey() {\n return props.props.children ?? 'children'\n}\n\nfunction getLabelKey() {\n return props.props.label ?? 'label'\n}\n\nfunction nodeLabel(data: T): string {\n const key = getLabelKey() as keyof T\n const v = data[key]\n return v == null ? '' : String(v)\n}\n\nfunction nodeChildren(data: T): T[] {\n const key = getChildrenKey() as keyof T\n const v = data[key]\n return Array.isArray(v) ? (v as any) : []\n}\n\nfunction nodeKeyOf(data: T, index: number, parentKey: GrTreeKey | undefined): GrTreeKey {\n const keyName = props.nodeKey as keyof T\n const v = data[keyName]\n if (v != null)\n return v as GrTreeKey\n\n return parentKey == null ? index : `${String(parentKey)}:${index}`\n}\n\nconst labelByKey = computed(() => {\n const map = new Map<GrTreeKey, string>()\n\n const walk = (items: T[], parentKey: GrTreeKey | undefined) => {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const key = nodeKeyOf(item, i, parentKey)\n map.set(key, nodeLabel(item))\n walk(nodeChildren(item), key)\n }\n }\n\n walk(props.data ?? [], undefined)\n return map\n})\n\nconst pathLabelsByKey = computed(() => {\n const map = new Map<GrTreeKey, string[]>()\n\n const walk = (items: T[], parentKey: GrTreeKey | undefined, parentPath: string[]) => {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const key = nodeKeyOf(item, i, parentKey)\n const label = nodeLabel(item)\n const path = [...parentPath, label]\n map.set(key, path)\n walk(nodeChildren(item), key, path)\n }\n }\n\n walk(props.data ?? [], undefined, [])\n return map\n})\n\nconst selectedKeys = computed<GrTreeKey[]>(() => {\n if (props.multiple) {\n return Array.isArray(props.modelValue) ? props.modelValue : []\n }\n\n const v = props.modelValue\n if (v == null || Array.isArray(v))\n return []\n return [v]\n})\n\nconst selectedKeySet = computed(() => new Set(selectedKeys.value))\n\nconst selectedLabels = computed(() => {\n const map = labelByKey.value\n return selectedKeys.value.map((k) => map.get(k) ?? String(k))\n})\n\nconst selectedPathLabels = computed<string[] | undefined>(() => {\n if (props.multiple)\n return undefined\n\n const key = selectedKeys.value[0]\n if (key == null)\n return undefined\n\n const path = pathLabelsByKey.value.get(key)\n if (path?.length)\n return path\n\n const labels = selectedLabels.value\n return labels.length ? [labels[0]] : undefined\n})\n\nconst displayValue = computed(() => {\n const labels = selectedLabels.value\n if (labels.length === 0)\n return ''\n\n if (!props.multiple) {\n if (props.valueDisplay === 'path') {\n const path = selectedPathLabels.value\n if (path?.length)\n return path.join(' / ')\n }\n return labels[0]\n }\n\n if (labels.length === 1)\n return labels[0]\n return `${labels[0]} +${labels.length - 1}`\n})\n\nconst hasSelection = computed(() => selectedKeys.value.length > 0)\n\nconst resolvedFilterPlaceholder = computed(() => {\n return props.filterPlaceholder ?? t('gr.treeSelect.filterPlaceholder', 'Search…')\n})\n\nconst className = computed(() => {\n return grTreeSelectClass({\n size: props.size,\n state: props.state,\n invalid: props.invalid,\n })\n})\n\nconst panelClasses = computed(() => {\n return grTreeSelectPanelClass\n})\n\nfunction setOpen(next: boolean) {\n if (props.disabled)\n return\n\n if (open.value === next)\n return\n\n open.value = next\n emit('visibleChange', next)\n}\n\nfunction onClickOutside(): void {\n setOpen(false)\n}\n\nfunction openDropdown(): void {\n setOpen(true)\n}\n\nfunction closeDropdown(): void {\n setOpen(false)\n}\n\nfunction toggleDropdown(): void {\n setOpen(!open.value)\n}\n\nfunction onTriggerPointerDown(): void {\n hadPointerDownOnTrigger = true\n if (typeof window !== 'undefined') {\n window.setTimeout(() => {\n hadPointerDownOnTrigger = false\n }, 0)\n }\n else {\n // SSR / no window: reset sync\n hadPointerDownOnTrigger = false\n }\n}\n\nfunction onTriggerFocus(): void {\n if (hadPointerDownOnTrigger)\n return\n openDropdown()\n}\n\nfunction closeOnEscape(e: KeyboardEvent): void {\n if (e.key === 'Escape') {\n closeDropdown()\n nextTick(() => triggerEl.value?.focus())\n }\n}\n\nwatch(\n open,\n async (isOpen) => {\n if (typeof document === 'undefined')\n return\n\n document.removeEventListener('keydown', closeOnEscape)\n unbindPanelPositionListeners()\n\n if (isOpen)\n document.addEventListener('keydown', closeOnEscape)\n\n if (!isOpen)\n return\n\n bindPanelPositionListeners()\n await nextTick()\n syncPanelPosition()\n\n // sync tree highlight\n if (!props.multiple) {\n const v = props.modelValue\n if (v != null && !Array.isArray(v))\n treeRef.value?.setCurrentKey(v)\n }\n\n // focus filter input\n if (props.filterable) {\n await nextTick()\n filterInputRef.value?.focus()\n }\n },\n { immediate: true },\n)\n\nonUnmounted(() => {\n if (typeof document === 'undefined')\n return\n document.removeEventListener('keydown', closeOnEscape)\n unbindPanelPositionListeners()\n})\n\nwatch(\n () => props.modelValue,\n (v) => {\n if (props.multiple)\n return\n if (v == null || Array.isArray(v)) {\n treeRef.value?.setCurrentKey(undefined)\n return\n }\n treeRef.value?.setCurrentKey(v)\n },\n)\n\nwatch(\n filterValue,\n (v) => {\n treeRef.value?.filter(v)\n },\n)\n\nwatch(\n open,\n (isOpen) => {\n if (isOpen)\n return\n if (filterValue.value.trim().length > 0)\n filterValue.value = ''\n },\n)\n\nfunction emitModel(next: GrTreeSelectModelValue) {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nfunction clear(): void {\n if (props.disabled)\n return\n\n const next: GrTreeSelectModelValue = props.multiple ? [] : null\n emitModel(next)\n emit('clear')\n if (!props.multiple)\n treeRef.value?.setCurrentKey(undefined)\n}\n\nfunction onTriggerKeydown(e: KeyboardEvent): void {\n if (props.disabled)\n return\n\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n openDropdown()\n }\n if (e.key === 'Escape') {\n e.preventDefault()\n closeDropdown()\n }\n}\n\nfunction onNodeClick(data: T, node: GrTreeNode<T>): void {\n emit('nodeClick', data, node)\n\n if (props.disabled)\n return\n\n if (props.multiple) {\n const next = new Set(selectedKeySet.value)\n if (next.has(node.key))\n next.delete(node.key)\n else\n next.add(node.key)\n emitModel([...next])\n\n if (closeOnSelectResolved.value) {\n closeDropdown()\n }\n return\n }\n\n emitModel(node.key)\n if (closeOnSelectResolved.value) {\n closeDropdown()\n }\n}\n</script>\n\n<template>\n <div\n ref=\"rootEl\"\n v-click-outside=\"{ handler: onClickOutside, enabled: open, exclude: clickOutsideExclude }\"\n data-ds-tree-select\n class=\"relative\"\n >\n <div class=\"relative\">\n <input\n ref=\"triggerEl\"\n data-testid=\"ds-tree-select-trigger\"\n data-ds-tree-select-trigger\n type=\"text\"\n :value=\"displayValue\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n readonly\n role=\"combobox\"\n aria-readonly=\"true\"\n :aria-expanded=\"open ? 'true' : 'false'\"\n :aria-invalid=\"invalid ? 'true' : undefined\"\n class=\"w-full rounded-md border bg-[var(--bg)] text-[var(--fg)] placeholder:text-[var(--muted-fg)] transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] disabled:opacity-50 disabled:cursor-not-allowed\"\n :class=\"[className, $slots.value ? 'text-transparent placeholder:text-transparent' : '']\"\n @pointerdown=\"onTriggerPointerDown\"\n @click=\"toggleDropdown\"\n @focus=\"onTriggerFocus\"\n @keydown=\"onTriggerKeydown\"\n >\n\n <button\n v-if=\"clearable && hasSelection\"\n data-testid=\"ds-tree-select-clear\"\n data-ds-tree-select-clear\n type=\"button\"\n class=\"absolute top-1/2 -translate-y-1/2 right-3 h-6 w-6 inline-flex items-center justify-center rounded-md text-[var(--muted-fg)] hover:text-[var(--fg)] hover:bg-[color-mix(in_srgb,var(--muted)_25%,transparent)] disabled:opacity-50\"\n :disabled=\"disabled\"\n :aria-label=\"t('gr.common.clear', 'Clear')\"\n @click.stop=\"clear\"\n >\n <span class=\"i-lucide-x h-4 w-4\" />\n </button>\n\n <span\n v-else\n data-testid=\"ds-tree-select-chevron\"\n data-ds-tree-select-chevron\n class=\"absolute top-1/2 -translate-y-1/2 right-3 text-[var(--muted-fg)] pointer-events-none\"\n >\n <span\n class=\"i-lucide-chevron-down h-4 w-4 transition-transform duration-150\"\n :class=\"open ? 'rotate-180' : ''\"\n />\n </span>\n\n <div\n v-if=\"$slots.value\"\n class=\"absolute inset-y-0 left-3 right-9 flex items-center pointer-events-none\"\n >\n <slot\n name=\"value\"\n :value=\"modelValue\"\n :labels=\"selectedLabels\"\n :display-value=\"displayValue\"\n :path-labels=\"selectedPathLabels\"\n />\n </div>\n </div>\n\n <teleport to=\"body\">\n <transition\n enter-active-class=\"transition ease-out duration-150\"\n enter-from-class=\"transform opacity-0 scale-95\"\n enter-to-class=\"transform opacity-100 scale-100\"\n leave-active-class=\"transition ease-in duration-100\"\n leave-from-class=\"transform opacity-100 scale-100\"\n leave-to-class=\"transform opacity-0 scale-95\"\n >\n <div\n v-show=\"open\"\n ref=\"panelEl\"\n data-testid=\"ds-tree-select-panel\"\n data-ds-tree-select-panel\n class=\"fixed w-full\"\n :style=\"panelStyle\"\n >\n <div :class=\"panelClasses\">\n <div v-if=\"filterable\" class=\"p-2 border-b border-[var(--brd)]\">\n <GrInput\n ref=\"filterInputRef\"\n v-model=\"filterValue\"\n data-testid=\"ds-tree-select-filter\"\n data-ds-tree-select-filter\n type=\"search\"\n :inputmode=\"filterInputmode\"\n :placeholder=\"resolvedFilterPlaceholder\"\n size=\"sm\"\n />\n </div>\n\n <div\n class=\"p-1 overflow-auto\"\n :style=\"{ maxHeight: `${dropdownMaxHeight}px` }\"\n >\n <div v-if=\"(data?.length ?? 0) === 0\" class=\"px-3 py-2 text-[13px] text-[var(--muted-fg)]\">\n <slot name=\"empty\">\n {{ t('gr.treeSelect.empty', 'No data') }}\n </slot>\n </div>\n\n <GrTree\n v-else\n ref=\"treeRef\"\n :data=\"data\"\n :props=\"props.props\"\n :node-key=\"nodeKey as any\"\n :default-expanded-keys=\"defaultExpandedKeys\"\n :filter-node-method=\"filterNodeMethod\"\n :highlight-current=\"!multiple\"\n @node-click=\"onNodeClick\"\n >\n <template #default=\"{ node, data }\">\n <slot\n name=\"node\"\n :node=\"node\"\n :data=\"data\"\n :selected=\"selectedKeySet.has(node.key)\"\n >\n <div class=\"flex items-center gap-2 min-w-0\">\n <span\n class=\"h-4 w-4 shrink-0\"\n :class=\"selectedKeySet.has(node.key) ? 'i-lucide-check text-[var(--primary)]' : ''\"\n aria-hidden=\"true\"\n />\n <span class=\"truncate\">{{ node.label }}</span>\n </div>\n </slot>\n </template>\n </GrTree>\n </div>\n </div>\n </div>\n </transition>\n </teleport>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { n as e, t } from "../../chunks/config-NuqoO_Of.js";
2
- import { t as n } from "./chunks/GrTreeSelect-DAAay-QB.js";
3
- export { n as GrTreeSelect, n as default, t as grTreeSelectConfig, e as grTreeSelectSafelist };
1
+ import { n as grTreeSelectSafelist, t as grTreeSelectConfig } from "../../chunks/config-C0b_3LJV.js";
2
+ import { t as GrTreeSelect_default } from "./chunks/GrTreeSelect-DN6XFjOD.js";
3
+ export { GrTreeSelect_default as GrTreeSelect, GrTreeSelect_default as default, grTreeSelectConfig, grTreeSelectSafelist };
@@ -1,44 +1,55 @@
1
- import { computed as e, ref as t } from "vue";
1
+ import { computed, ref } from "vue";
2
2
  //#region src/composables/useTheme.ts
3
- var n = "fint-ds-theme";
4
- function r(e = n, t = !0) {
5
- if (typeof window > "u") return "light";
6
- if (t) try {
7
- let t = window.localStorage, n = typeof t?.getItem == "function" ? t.getItem(e) : null;
8
- if (n === "light" || n === "dark") return n;
3
+ var DEFAULT_STORAGE_KEY = "fint-ds-theme";
4
+ function getPreferredTheme(storageKey = DEFAULT_STORAGE_KEY, persist = true) {
5
+ if (typeof window === "undefined") return "light";
6
+ if (persist) try {
7
+ const storage = window.localStorage;
8
+ const stored = typeof storage?.getItem === "function" ? storage.getItem(storageKey) : null;
9
+ if (stored === "light" || stored === "dark") return stored;
9
10
  } catch {}
10
11
  return window.matchMedia?.("(prefers-color-scheme: dark)")?.matches ? "dark" : "light";
11
12
  }
12
- function i(e) {
13
- if (typeof document > "u") return;
14
- let t = document.documentElement;
15
- t.classList.toggle("theme-dark", e === "dark"), t.dataset.theme = e;
13
+ function applyTheme(theme) {
14
+ if (typeof document === "undefined") return;
15
+ const root = document.documentElement;
16
+ root.classList.toggle("theme-dark", theme === "dark");
17
+ root.dataset.theme = theme;
16
18
  }
17
- function a(e = {}) {
18
- i(r(e.storageKey ?? n, e.persist ?? !0));
19
+ /**
20
+ * Для применения темы максимально рано (до монтирования Vue), чтобы избежать "мигания".
21
+ */
22
+ function initThemeEarly(options = {}) {
23
+ applyTheme(getPreferredTheme(options.storageKey ?? DEFAULT_STORAGE_KEY, options.persist ?? true));
19
24
  }
20
- function o(a = {}) {
21
- let o = a.storageKey ?? n, s = a.persist ?? !0, c = t(r(o, s)), l = e(() => c.value === "dark");
22
- function u(e) {
23
- if (c.value = e, s && typeof window < "u") try {
24
- let t = window.localStorage;
25
- typeof t?.setItem == "function" && t.setItem(o, e);
25
+ function useTheme(options = {}) {
26
+ const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY;
27
+ const persist = options.persist ?? true;
28
+ const theme = ref(getPreferredTheme(storageKey, persist));
29
+ const isDark = computed(() => theme.value === "dark");
30
+ function setTheme(next) {
31
+ theme.value = next;
32
+ if (persist && typeof window !== "undefined") try {
33
+ const storage = window.localStorage;
34
+ if (typeof storage?.setItem === "function") storage.setItem(storageKey, next);
26
35
  } catch {}
27
- i(e);
36
+ applyTheme(next);
28
37
  }
29
- function d() {
30
- u(c.value === "dark" ? "light" : "dark");
38
+ function toggleTheme() {
39
+ setTheme(theme.value === "dark" ? "light" : "dark");
31
40
  }
32
- function f() {
33
- i(c.value);
41
+ function initTheme() {
42
+ applyTheme(theme.value);
34
43
  }
35
44
  return {
36
- theme: c,
37
- isDark: l,
38
- setTheme: u,
39
- toggleTheme: d,
40
- initTheme: f
45
+ theme,
46
+ isDark,
47
+ setTheme,
48
+ toggleTheme,
49
+ initTheme
41
50
  };
42
51
  }
43
52
  //#endregion
44
- export { a as initThemeEarly, o as useTheme };
53
+ export { initThemeEarly, useTheme };
54
+
55
+ //# sourceMappingURL=useTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTheme.js","names":[],"sources":["../../src/composables/useTheme.ts"],"sourcesContent":["import { computed, ref } from 'vue'\n\nexport type ThemeName = 'light' | 'dark'\n\nexport type UseThemeOptions = {\n /**\n * Ключ для хранения выбранной темы в localStorage.\n * По умолчанию: `fint-ds-theme`.\n */\n storageKey?: string\n\n /**\n * Если `false` — не читать/не писать localStorage (полезно для SSR/embedded сценариев).\n * По умолчанию: `true`.\n */\n persist?: boolean\n}\n\nconst DEFAULT_STORAGE_KEY = 'fint-ds-theme'\n\nfunction getPreferredTheme(storageKey = DEFAULT_STORAGE_KEY, persist = true): ThemeName {\n if (typeof window === 'undefined') return 'light'\n\n if (persist) {\n // Доступ к `localStorage` может бросать `SecurityError` в Safari private mode\n // и при отключённых cookies/storage — поэтому оборачиваем в try/catch.\n try {\n const storage = window.localStorage\n const stored = typeof storage?.getItem === 'function' ? storage.getItem(storageKey) : null\n if (stored === 'light' || stored === 'dark') return stored\n }\n catch {\n // ignore\n }\n }\n\n const prefersDark = window.matchMedia?.('(prefers-color-scheme: dark)')?.matches\n return prefersDark ? 'dark' : 'light'\n}\n\nfunction applyTheme(theme: ThemeName) {\n if (typeof document === 'undefined') return\n\n const root = document.documentElement\n root.classList.toggle('theme-dark', theme === 'dark')\n root.dataset.theme = theme\n}\n\n/**\n * Для применения темы максимально рано (до монтирования Vue), чтобы избежать \"мигания\".\n */\nexport function initThemeEarly(options: UseThemeOptions = {}) {\n const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY\n const persist = options.persist ?? true\n applyTheme(getPreferredTheme(storageKey, persist))\n}\n\nexport function useTheme(options: UseThemeOptions = {}) {\n const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY\n const persist = options.persist ?? true\n\n const theme = ref<ThemeName>(getPreferredTheme(storageKey, persist))\n\n const isDark = computed(() => theme.value === 'dark')\n\n function setTheme(next: ThemeName) {\n theme.value = next\n\n if (persist && typeof window !== 'undefined') {\n // См. комментарий в `getPreferredTheme`: запись тоже может бросать.\n try {\n const storage = window.localStorage\n if (typeof storage?.setItem === 'function')\n storage.setItem(storageKey, next)\n }\n catch {\n // ignore\n }\n }\n\n applyTheme(next)\n }\n\n function toggleTheme() {\n setTheme(theme.value === 'dark' ? 'light' : 'dark')\n }\n\n function initTheme() {\n applyTheme(theme.value)\n }\n\n return {\n theme,\n isDark,\n setTheme,\n toggleTheme,\n initTheme,\n }\n}"],"mappings":";;AAkBA,IAAM,sBAAsB;AAE5B,SAAS,kBAAkB,aAAa,qBAAqB,UAAU,MAAiB;AACtF,KAAI,OAAO,WAAW,YAAa,QAAO;AAE1C,KAAI,QAGF,KAAI;EACF,MAAM,UAAU,OAAO;EACvB,MAAM,SAAS,OAAO,SAAS,YAAY,aAAa,QAAQ,QAAQ,WAAW,GAAG;AACtF,MAAI,WAAW,WAAW,WAAW,OAAQ,QAAO;SAEhD;AAMR,QADoB,OAAO,aAAa,+BAA+B,EAAE,UACpD,SAAS;;AAGhC,SAAS,WAAW,OAAkB;AACpC,KAAI,OAAO,aAAa,YAAa;CAErC,MAAM,OAAO,SAAS;AACtB,MAAK,UAAU,OAAO,cAAc,UAAU,OAAO;AACrD,MAAK,QAAQ,QAAQ;;;;;AAMvB,SAAgB,eAAe,UAA2B,EAAE,EAAE;AAG5D,YAAW,kBAFQ,QAAQ,cAAc,qBACzB,QAAQ,WAAW,KACc,CAAC;;AAGpD,SAAgB,SAAS,UAA2B,EAAE,EAAE;CACtD,MAAM,aAAa,QAAQ,cAAc;CACzC,MAAM,UAAU,QAAQ,WAAW;CAEnC,MAAM,QAAQ,IAAe,kBAAkB,YAAY,QAAQ,CAAC;CAEpE,MAAM,SAAS,eAAe,MAAM,UAAU,OAAO;CAErD,SAAS,SAAS,MAAiB;AACjC,QAAM,QAAQ;AAEd,MAAI,WAAW,OAAO,WAAW,YAE/B,KAAI;GACF,MAAM,UAAU,OAAO;AACvB,OAAI,OAAO,SAAS,YAAY,WAC9B,SAAQ,QAAQ,YAAY,KAAK;UAE/B;AAKR,aAAW,KAAK;;CAGlB,SAAS,cAAc;AACrB,WAAS,MAAM,UAAU,SAAS,UAAU,OAAO;;CAGrD,SAAS,YAAY;AACnB,aAAW,MAAM,MAAM;;AAGzB,QAAO;EACL;EACA;EACA;EACA;EACA;EACD"}
@@ -1,47 +1,56 @@
1
- import { computed as e, reactive as t } from "vue";
1
+ import { computed, reactive } from "vue";
2
2
  //#region src/composables/useToast.ts
3
- var n = t([]), r = /* @__PURE__ */ new Map(), i = 3500;
4
- function a() {
3
+ var toasts = reactive([]);
4
+ var timers = /* @__PURE__ */ new Map();
5
+ var DEFAULT_TIMEOUT_MS = 3500;
6
+ function makeId() {
5
7
  return `${Date.now()}-${Math.random().toString(16).slice(2)}`;
6
8
  }
7
- function o(e) {
8
- let t = r.get(e);
9
- t !== void 0 && (clearTimeout(t), r.delete(e));
9
+ function clearTimer(id) {
10
+ const handle = timers.get(id);
11
+ if (handle !== void 0) {
12
+ clearTimeout(handle);
13
+ timers.delete(id);
14
+ }
10
15
  }
11
- function s() {
12
- let t = e(() => n);
13
- function s(e) {
14
- let t = a(), o = {
15
- id: t,
16
- title: e.title,
17
- message: e.message,
18
- tone: e.tone ?? "info"
16
+ function useToast() {
17
+ const list = computed(() => toasts);
18
+ function push(input) {
19
+ const id = makeId();
20
+ const toast = {
21
+ id,
22
+ title: input.title,
23
+ message: input.message,
24
+ tone: input.tone ?? "info"
19
25
  };
20
- n.unshift(o);
21
- let s = e.timeoutMs ?? i;
22
- if (s > 0 && typeof window < "u") {
23
- let e = window.setTimeout(() => {
24
- r.delete(t), c(t);
25
- }, s);
26
- r.set(t, e);
26
+ toasts.unshift(toast);
27
+ const timeout = input.timeoutMs ?? DEFAULT_TIMEOUT_MS;
28
+ if (timeout > 0 && typeof window !== "undefined") {
29
+ const handle = window.setTimeout(() => {
30
+ timers.delete(id);
31
+ dismiss(id);
32
+ }, timeout);
33
+ timers.set(id, handle);
27
34
  }
28
- return t;
35
+ return id;
29
36
  }
30
- function c(e) {
31
- o(e);
32
- let t = n.findIndex((t) => t.id === e);
33
- t >= 0 && n.splice(t, 1);
37
+ function dismiss(id) {
38
+ clearTimer(id);
39
+ const index = toasts.findIndex((toast) => toast.id === id);
40
+ if (index >= 0) toasts.splice(index, 1);
34
41
  }
35
- function l() {
36
- for (let e of r.keys()) o(e);
37
- n.splice(0, n.length);
42
+ function clear() {
43
+ for (const id of timers.keys()) clearTimer(id);
44
+ toasts.splice(0, toasts.length);
38
45
  }
39
46
  return {
40
- list: t,
41
- push: s,
42
- dismiss: c,
43
- clear: l
47
+ list,
48
+ push,
49
+ dismiss,
50
+ clear
44
51
  };
45
52
  }
46
53
  //#endregion
47
- export { s as useToast };
54
+ export { useToast };
55
+
56
+ //# sourceMappingURL=useToast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToast.js","names":[],"sources":["../../src/composables/useToast.ts"],"sourcesContent":["import { computed, reactive } from 'vue'\n\nexport type GrToastTone = 'primary' | 'neutral' | 'success' | 'warning' | 'danger' | 'info' | 'slate' | 'azure'\n\nexport type ToastInput = {\n title: string\n message?: string\n tone?: GrToastTone\n /**\n * Автозакрытие через N мс. `0` или отрицательное значение — «навсегда»\n * (до явного вызова `dismiss(id)` / `clear()`). По умолчанию: `3500`.\n */\n timeoutMs?: number\n}\n\nexport type Toast = {\n id: string\n title: string\n message?: string\n tone: GrToastTone\n}\n\n// Модульный синглтон состояния: один источник истины для всех `GrToaster`\n// в приложении. Подразумевается один активный `GrToaster` на корень.\nconst toasts = reactive<Toast[]>([])\n\n// Таймеры авто-дисмисса по id — чтобы при раннем `dismiss()` / `clear()`\n// не оставлять «висящие» setTimeout'ы и не будить мёртвый tab.\nconst timers = new Map<string, number>()\n\nconst DEFAULT_TIMEOUT_MS = 3500\n\nfunction makeId(): string {\n return `${Date.now()}-${Math.random().toString(16).slice(2)}`\n}\n\nfunction clearTimer(id: string): void {\n const handle = timers.get(id)\n if (handle !== undefined) {\n clearTimeout(handle)\n timers.delete(id)\n }\n}\n\nexport function useToast() {\n const list = computed(() => toasts)\n\n function push(input: ToastInput): string {\n const id = makeId()\n const toast: Toast = {\n id,\n title: input.title,\n message: input.message,\n tone: input.tone ?? 'info',\n }\n\n toasts.unshift(toast)\n\n const timeout = input.timeoutMs ?? DEFAULT_TIMEOUT_MS\n if (timeout > 0 && typeof window !== 'undefined') {\n const handle = window.setTimeout(() => {\n timers.delete(id)\n dismiss(id)\n }, timeout)\n timers.set(id, handle)\n }\n\n return id\n }\n\n function dismiss(id: string): void {\n clearTimer(id)\n const index = toasts.findIndex(toast => toast.id === id)\n if (index >= 0)\n toasts.splice(index, 1)\n }\n\n function clear(): void {\n for (const id of timers.keys()) clearTimer(id)\n toasts.splice(0, toasts.length)\n }\n\n return {\n list,\n push,\n dismiss,\n clear,\n }\n}\n"],"mappings":";;AAwBA,IAAM,SAAS,SAAkB,EAAE,CAAC;AAIpC,IAAM,yBAAS,IAAI,KAAqB;AAExC,IAAM,qBAAqB;AAE3B,SAAS,SAAiB;AACxB,QAAO,GAAG,KAAK,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE;;AAG7D,SAAS,WAAW,IAAkB;CACpC,MAAM,SAAS,OAAO,IAAI,GAAG;AAC7B,KAAI,WAAW,KAAA,GAAW;AACxB,eAAa,OAAO;AACpB,SAAO,OAAO,GAAG;;;AAIrB,SAAgB,WAAW;CACzB,MAAM,OAAO,eAAe,OAAO;CAEnC,SAAS,KAAK,OAA2B;EACvC,MAAM,KAAK,QAAQ;EACnB,MAAM,QAAe;GACnB;GACA,OAAO,MAAM;GACb,SAAS,MAAM;GACf,MAAM,MAAM,QAAQ;GACrB;AAED,SAAO,QAAQ,MAAM;EAErB,MAAM,UAAU,MAAM,aAAa;AACnC,MAAI,UAAU,KAAK,OAAO,WAAW,aAAa;GAChD,MAAM,SAAS,OAAO,iBAAiB;AACrC,WAAO,OAAO,GAAG;AACjB,YAAQ,GAAG;MACV,QAAQ;AACX,UAAO,IAAI,IAAI,OAAO;;AAGxB,SAAO;;CAGT,SAAS,QAAQ,IAAkB;AACjC,aAAW,GAAG;EACd,MAAM,QAAQ,OAAO,WAAU,UAAS,MAAM,OAAO,GAAG;AACxD,MAAI,SAAS,EACX,QAAO,OAAO,OAAO,EAAE;;CAG3B,SAAS,QAAc;AACrB,OAAK,MAAM,MAAM,OAAO,MAAM,CAAE,YAAW,GAAG;AAC9C,SAAO,OAAO,GAAG,OAAO,OAAO;;AAGjC,QAAO;EACL;EACA;EACA;EACA;EACD"}
@@ -1,2 +1,2 @@
1
- import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "../chunks/directives-Dr5NPOT8.js";
2
- export { o as createLoading, a as vAutofocus, r as vAutosize, e as vClickOutside, t as vDropzone, i as vHotkey, n as vLoading };
1
+ import { a as vClickOutside, i as vDropzone, n as vLoading, o as vAutosize, r as vHotkey, s as vAutofocus, t as createLoading } from "../chunks/directives-Cuib0yOO.js";
2
+ export { createLoading, vAutofocus, vAutosize, vClickOutside, vDropzone, vHotkey, vLoading };
@@ -1,2 +1,2 @@
1
- import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c, u as l } from "../chunks/fileValidation-LFD-vwil.js";
2
- export { l as FileValidationError, a as acceptValidator, e as allowedExtensionsValidator, n as allowedMimeTypesValidator, s as matchAccept, o as maxFileSizeBytesValidator, i as maxSizeMbValidator, c as maxTotalSizeBytesValidator, t as normalizeFiles, r as runFileValidators };
1
+ import { a as allowedExtensionsValidator, c as normalizeFiles, i as allowedMimeTypesValidator, l as runFileValidators, n as maxSizeMbValidator, o as acceptValidator, r as maxFileSizeBytesValidator, s as matchAccept, t as maxTotalSizeBytesValidator, u as FileValidationError } from "../chunks/fileValidation-CgjTGoUx.js";
2
+ export { FileValidationError, acceptValidator, allowedExtensionsValidator, allowedMimeTypesValidator, matchAccept, maxFileSizeBytesValidator, maxSizeMbValidator, maxTotalSizeBytesValidator, normalizeFiles, runFileValidators };
@@ -1,23 +1,34 @@
1
- import { n as e } from "./chunks/safelist-CLcTRYB-.js";
2
- import { n as t } from "./chunks/config-BG5_FuZ-.js";
3
- import { a as n, i as r, n as i, r as a, t as o } from "./chunks/shared-BqUqjuxn.js";
4
- import { defineGranularComponent as s } from "@feugene/unocss-preset-granular/contract";
5
- import { tokenDefinitionsFromCssSync as c } from "@feugene/unocss-preset-granular/node";
1
+ import { n as grButtonSafelist } from "./chunks/safelist-BY7z8fOl.js";
2
+ import { n as grProgressBarSafelist } from "./chunks/config-CJeyaUTp.js";
3
+ import { a as granularityThemeNames, i as granularityDefaultThemes, n as createGranularityProvider, r as granularityComponentConfigs, t as GRANULARITY_PROVIDER_ID } from "./chunks/shared-Bvjkhhm2.js";
4
+ import { defineGranularComponent } from "@feugene/unocss-preset-granular/contract";
5
+ import { tokenDefinitionsFromCssSync } from "@feugene/unocss-preset-granular/node";
6
6
  //#region src/components/GrButton/config.node.ts
7
- var l = new URL("data:text/css;base64,OnJvb3QgewogIC0tZHMtYnV0dG9uLXByaW1hcnktYmc6IHZhcigtLXByaW1hcnkpOwogIC0tZHMtYnV0dG9uLXByaW1hcnktYmctaG92ZXI6IHZhcigtLXByaW1hcnktaG92ZXIpOwogIC0tZHMtYnV0dG9uLXByaW1hcnktYmctYWN0aXZlOiB2YXIoLS1wcmltYXJ5LWFjdGl2ZSk7CiAgLS1kcy1idXR0b24tcHJpbWFyeS1mZzogdmFyKC0tcHJpbWFyeS1mZyk7CiAgLS1kcy1idXR0b24tcHJpbWFyeS1zb2Z0LWJnOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tcHJpbWFyeSkgMTQlLCB2YXIoLS1iZykpOwogIC0tZHMtYnV0dG9uLXByaW1hcnktc29mdC1iZy1ob3ZlcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLXByaW1hcnkpIDE4JSwgdmFyKC0tYmcpKTsKICAtLWRzLWJ1dHRvbi1wcmltYXJ5LXNvZnQtYmctYWN0aXZlOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tcHJpbWFyeSkgMjQlLCB2YXIoLS1iZykpOwoKICAtLWRzLWJ1dHRvbi1zdWNjZXNzLWJnOiAjMDQ3ODU3OwogIC0tZHMtYnV0dG9uLXN1Y2Nlc3MtYmctaG92ZXI6ICMwMzZjNGQ7CiAgLS1kcy1idXR0b24tc3VjY2Vzcy1iZy1hY3RpdmU6ICMwMjVmNDQ7CiAgLS1kcy1idXR0b24tc3VjY2Vzcy1mZzogdmFyKC0tZHMtc3VjY2Vzcy1mZyk7CiAgLS1kcy1idXR0b24tc3VjY2Vzcy1zb2Z0LWJnOiB2YXIoLS1kcy1zdWNjZXNzLWxpZ2h0KTsKICAtLWRzLWJ1dHRvbi1zdWNjZXNzLXNvZnQtYmctaG92ZXI6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kcy1zdWNjZXNzKSAyMCUsIHZhcigtLWJnKSk7CiAgLS1kcy1idXR0b24tc3VjY2Vzcy1zb2Z0LWJnLWFjdGl2ZTogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRzLXN1Y2Nlc3MpIDI2JSwgdmFyKC0tYmcpKTsKCiAgLS1kcy1idXR0b24td2FybmluZy1iZzogI2MyNDEwYzsKICAtLWRzLWJ1dHRvbi13YXJuaW5nLWJnLWhvdmVyOiAjYjUzYjBhOwogIC0tZHMtYnV0dG9uLXdhcm5pbmctYmctYWN0aXZlOiAjOWYzMzA3OwogIC0tZHMtYnV0dG9uLXdhcm5pbmctZmc6IHZhcigtLWRzLXdhcm5pbmctZmcpOwogIC0tZHMtYnV0dG9uLXdhcm5pbmctc29mdC1iZzogdmFyKC0tZHMtd2FybmluZy1saWdodCk7CiAgLS1kcy1idXR0b24td2FybmluZy1zb2Z0LWJnLWhvdmVyOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZHMtd2FybmluZykgMjAlLCB2YXIoLS1iZykpOwogIC0tZHMtYnV0dG9uLXdhcm5pbmctc29mdC1iZy1hY3RpdmU6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kcy13YXJuaW5nKSAyNiUsIHZhcigtLWJnKSk7CgogIC0tZHMtYnV0dG9uLWRhbmdlci1iZzogdmFyKC0tZHMtZGFuZ2VyKTsKICAtLWRzLWJ1dHRvbi1kYW5nZXItYmctaG92ZXI6IHZhcigtLWRzLWRhbmdlci1ob3Zlcik7CiAgLS1kcy1idXR0b24tZGFuZ2VyLWJnLWFjdGl2ZTogdmFyKC0tZHMtZGFuZ2VyLWFjdGl2ZSk7CiAgLS1kcy1idXR0b24tZGFuZ2VyLWZnOiB2YXIoLS1kcy1kYW5nZXItZmcpOwogIC0tZHMtYnV0dG9uLWRhbmdlci1zb2Z0LWJnOiB2YXIoLS1kcy1kYW5nZXItbGlnaHQpOwogIC0tZHMtYnV0dG9uLWRhbmdlci1zb2Z0LWJnLWhvdmVyOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZHMtZGFuZ2VyKSAyMCUsIHZhcigtLWJnKSk7CiAgLS1kcy1idXR0b24tZGFuZ2VyLXNvZnQtYmctYWN0aXZlOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZHMtZGFuZ2VyKSAyNiUsIHZhcigtLWJnKSk7CgogIC0tZHMtYnV0dG9uLWluZm8tYmc6IHZhcigtLWRzLWluZm8pOwogIC0tZHMtYnV0dG9uLWluZm8tYmctaG92ZXI6IHZhcigtLWRzLWluZm8taG92ZXIpOwogIC0tZHMtYnV0dG9uLWluZm8tYmctYWN0aXZlOiB2YXIoLS1kcy1pbmZvLWFjdGl2ZSk7CiAgLS1kcy1idXR0b24taW5mby1mZzogdmFyKC0tZHMtaW5mby1mZyk7CiAgLS1kcy1idXR0b24taW5mby1zb2Z0LWJnOiB2YXIoLS1kcy1pbmZvLWxpZ2h0KTsKICAtLWRzLWJ1dHRvbi1pbmZvLXNvZnQtYmctaG92ZXI6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kcy1pbmZvKSAyMCUsIHZhcigtLWJnKSk7CiAgLS1kcy1idXR0b24taW5mby1zb2Z0LWJnLWFjdGl2ZTogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRzLWluZm8pIDI2JSwgdmFyKC0tYmcpKTsKCiAgLS1kcy1idXR0b24tc2xhdGUtYmc6IHZhcigtLWRzLXNsYXRlKTsKICAtLWRzLWJ1dHRvbi1zbGF0ZS1iZy1ob3ZlcjogdmFyKC0tZHMtc2xhdGUtaG92ZXIpOwogIC0tZHMtYnV0dG9uLXNsYXRlLWJnLWFjdGl2ZTogdmFyKC0tZHMtc2xhdGUtYWN0aXZlKTsKICAtLWRzLWJ1dHRvbi1zbGF0ZS1mZzogdmFyKC0tZHMtc2xhdGUtZmcpOwogIC0tZHMtYnV0dG9uLXNsYXRlLXNvZnQtYmc6IHZhcigtLWRzLXNsYXRlLWxpZ2h0KTsKICAtLWRzLWJ1dHRvbi1zbGF0ZS1zb2Z0LWJnLWhvdmVyOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZHMtc2xhdGUpIDIwJSwgdmFyKC0tYmcpKTsKICAtLWRzLWJ1dHRvbi1zbGF0ZS1zb2Z0LWJnLWFjdGl2ZTogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRzLXNsYXRlKSAyNiUsIHZhcigtLWJnKSk7CgogIC0tZHMtYnV0dG9uLWF6dXJlLWJnOiAjMDM2OWExOwogIC0tZHMtYnV0dG9uLWF6dXJlLWJnLWhvdmVyOiAjMDc1OTg1OwogIC0tZHMtYnV0dG9uLWF6dXJlLWJnLWFjdGl2ZTogIzBjNGE2ZTsKICAtLWRzLWJ1dHRvbi1henVyZS1mZzogI2ZmZmZmZjsKICAtLWRzLWJ1dHRvbi1henVyZS1zb2Z0LWJnOiB2YXIoLS1kcy1henVyZS1saWdodCk7CiAgLS1kcy1idXR0b24tYXp1cmUtc29mdC1iZy1ob3ZlcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRzLWF6dXJlKSAyMCUsIHZhcigtLWJnKSk7CiAgLS1kcy1idXR0b24tYXp1cmUtc29mdC1iZy1hY3RpdmU6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kcy1henVyZSkgMjYlLCB2YXIoLS1iZykpOwp9", "" + import.meta.url).href, u = new URL("data:text/css;base64,Ci50aGVtZS1kYXJrLAouZGFyaywKW2RhdGEtdGhlbWU9J2RhcmsnXSB7CiAgLS1kcy1idXR0b24tcHJpbWFyeS1iZzogIzU5NWNlNjsKICAtLWRzLWJ1dHRvbi1wcmltYXJ5LWJnLWhvdmVyOiAjNTA1M2RkOwogIC0tZHMtYnV0dG9uLXByaW1hcnktYmctYWN0aXZlOiAjNDc0YWNmOwogIC0tZHMtYnV0dG9uLXByaW1hcnktZmc6ICNmZmZmZmY7CgogIC0tZHMtYnV0dG9uLXN1Y2Nlc3MtYmc6ICMwNDc4NTc7CiAgLS1kcy1idXR0b24tc3VjY2Vzcy1iZy1ob3ZlcjogIzAzNmM0ZDsKICAtLWRzLWJ1dHRvbi1zdWNjZXNzLWJnLWFjdGl2ZTogIzAyNWY0NDsKICAtLWRzLWJ1dHRvbi1zdWNjZXNzLWZnOiAjZjhmYWZjOwoKICAtLWRzLWJ1dHRvbi13YXJuaW5nLWJnOiAjYzI0MTBjOwogIC0tZHMtYnV0dG9uLXdhcm5pbmctYmctaG92ZXI6ICNiNTNiMGE7CiAgLS1kcy1idXR0b24td2FybmluZy1iZy1hY3RpdmU6ICM5ZjMzMDc7CiAgLS1kcy1idXR0b24td2FybmluZy1mZzogI2Y4ZmFmYzsKCiAgLS1kcy1idXR0b24tZGFuZ2VyLWJnOiAjYjkxYzFjOwogIC0tZHMtYnV0dG9uLWRhbmdlci1iZy1ob3ZlcjogI2E5MTkxOTsKICAtLWRzLWJ1dHRvbi1kYW5nZXItYmctYWN0aXZlOiAjOTMxNTE1OwogIC0tZHMtYnV0dG9uLWRhbmdlci1mZzogI2Y4ZmFmYzsKCiAgLS1kcy1idXR0b24taW5mby1iZzogIzQzMzhjYTsKICAtLWRzLWJ1dHRvbi1pbmZvLWJnLWhvdmVyOiAjM2QzM2JiOwogIC0tZHMtYnV0dG9uLWluZm8tYmctYWN0aXZlOiAjMzYyZGE4OwogIC0tZHMtYnV0dG9uLWluZm8tZmc6ICNmOGZhZmM7CgogIC0tZHMtYnV0dG9uLXNsYXRlLWJnOiAjNDc1NTY5OwogIC0tZHMtYnV0dG9uLXNsYXRlLWJnLWhvdmVyOiAjMzM0MTU1OwogIC0tZHMtYnV0dG9uLXNsYXRlLWJnLWFjdGl2ZTogIzFlMjkzYjsKICAtLWRzLWJ1dHRvbi1zbGF0ZS1mZzogI2Y4ZmFmYzsKCiAgLS1kcy1idXR0b24tYXp1cmUtYmc6ICMwMzY5YTE7CiAgLS1kcy1idXR0b24tYXp1cmUtYmctaG92ZXI6ICMwNzU5ODU7CiAgLS1kcy1idXR0b24tYXp1cmUtYmctYWN0aXZlOiAjMGM0YTZlOwogIC0tZHMtYnV0dG9uLWF6dXJlLWZnOiAjZjhmYWZjOwp9", "" + import.meta.url).href, d = s(import.meta.url, {
7
+ var lightCssUrl$1 = new URL("data:text/css;base64,OnJvb3QgewogIC0tZHMtYnV0dG9uLXByaW1hcnktYmc6IHZhcigtLXByaW1hcnkpOwogIC0tZHMtYnV0dG9uLXByaW1hcnktYmctaG92ZXI6IHZhcigtLXByaW1hcnktaG92ZXIpOwogIC0tZHMtYnV0dG9uLXByaW1hcnktYmctYWN0aXZlOiB2YXIoLS1wcmltYXJ5LWFjdGl2ZSk7CiAgLS1kcy1idXR0b24tcHJpbWFyeS1mZzogdmFyKC0tcHJpbWFyeS1mZyk7CiAgLS1kcy1idXR0b24tcHJpbWFyeS1zb2Z0LWJnOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tcHJpbWFyeSkgMTQlLCB2YXIoLS1iZykpOwogIC0tZHMtYnV0dG9uLXByaW1hcnktc29mdC1iZy1ob3ZlcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLXByaW1hcnkpIDE4JSwgdmFyKC0tYmcpKTsKICAtLWRzLWJ1dHRvbi1wcmltYXJ5LXNvZnQtYmctYWN0aXZlOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tcHJpbWFyeSkgMjQlLCB2YXIoLS1iZykpOwoKICAtLWRzLWJ1dHRvbi1zdWNjZXNzLWJnOiAjMDQ3ODU3OwogIC0tZHMtYnV0dG9uLXN1Y2Nlc3MtYmctaG92ZXI6ICMwMzZjNGQ7CiAgLS1kcy1idXR0b24tc3VjY2Vzcy1iZy1hY3RpdmU6ICMwMjVmNDQ7CiAgLS1kcy1idXR0b24tc3VjY2Vzcy1mZzogdmFyKC0tZHMtc3VjY2Vzcy1mZyk7CiAgLS1kcy1idXR0b24tc3VjY2Vzcy1zb2Z0LWJnOiB2YXIoLS1kcy1zdWNjZXNzLWxpZ2h0KTsKICAtLWRzLWJ1dHRvbi1zdWNjZXNzLXNvZnQtYmctaG92ZXI6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kcy1zdWNjZXNzKSAyMCUsIHZhcigtLWJnKSk7CiAgLS1kcy1idXR0b24tc3VjY2Vzcy1zb2Z0LWJnLWFjdGl2ZTogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRzLXN1Y2Nlc3MpIDI2JSwgdmFyKC0tYmcpKTsKCiAgLS1kcy1idXR0b24td2FybmluZy1iZzogI2MyNDEwYzsKICAtLWRzLWJ1dHRvbi13YXJuaW5nLWJnLWhvdmVyOiAjYjUzYjBhOwogIC0tZHMtYnV0dG9uLXdhcm5pbmctYmctYWN0aXZlOiAjOWYzMzA3OwogIC0tZHMtYnV0dG9uLXdhcm5pbmctZmc6IHZhcigtLWRzLXdhcm5pbmctZmcpOwogIC0tZHMtYnV0dG9uLXdhcm5pbmctc29mdC1iZzogdmFyKC0tZHMtd2FybmluZy1saWdodCk7CiAgLS1kcy1idXR0b24td2FybmluZy1zb2Z0LWJnLWhvdmVyOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZHMtd2FybmluZykgMjAlLCB2YXIoLS1iZykpOwogIC0tZHMtYnV0dG9uLXdhcm5pbmctc29mdC1iZy1hY3RpdmU6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kcy13YXJuaW5nKSAyNiUsIHZhcigtLWJnKSk7CgogIC0tZHMtYnV0dG9uLWRhbmdlci1iZzogdmFyKC0tZHMtZGFuZ2VyKTsKICAtLWRzLWJ1dHRvbi1kYW5nZXItYmctaG92ZXI6IHZhcigtLWRzLWRhbmdlci1ob3Zlcik7CiAgLS1kcy1idXR0b24tZGFuZ2VyLWJnLWFjdGl2ZTogdmFyKC0tZHMtZGFuZ2VyLWFjdGl2ZSk7CiAgLS1kcy1idXR0b24tZGFuZ2VyLWZnOiB2YXIoLS1kcy1kYW5nZXItZmcpOwogIC0tZHMtYnV0dG9uLWRhbmdlci1zb2Z0LWJnOiB2YXIoLS1kcy1kYW5nZXItbGlnaHQpOwogIC0tZHMtYnV0dG9uLWRhbmdlci1zb2Z0LWJnLWhvdmVyOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZHMtZGFuZ2VyKSAyMCUsIHZhcigtLWJnKSk7CiAgLS1kcy1idXR0b24tZGFuZ2VyLXNvZnQtYmctYWN0aXZlOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZHMtZGFuZ2VyKSAyNiUsIHZhcigtLWJnKSk7CgogIC0tZHMtYnV0dG9uLWluZm8tYmc6IHZhcigtLWRzLWluZm8pOwogIC0tZHMtYnV0dG9uLWluZm8tYmctaG92ZXI6IHZhcigtLWRzLWluZm8taG92ZXIpOwogIC0tZHMtYnV0dG9uLWluZm8tYmctYWN0aXZlOiB2YXIoLS1kcy1pbmZvLWFjdGl2ZSk7CiAgLS1kcy1idXR0b24taW5mby1mZzogdmFyKC0tZHMtaW5mby1mZyk7CiAgLS1kcy1idXR0b24taW5mby1zb2Z0LWJnOiB2YXIoLS1kcy1pbmZvLWxpZ2h0KTsKICAtLWRzLWJ1dHRvbi1pbmZvLXNvZnQtYmctaG92ZXI6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kcy1pbmZvKSAyMCUsIHZhcigtLWJnKSk7CiAgLS1kcy1idXR0b24taW5mby1zb2Z0LWJnLWFjdGl2ZTogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRzLWluZm8pIDI2JSwgdmFyKC0tYmcpKTsKCiAgLS1kcy1idXR0b24tc2xhdGUtYmc6IHZhcigtLWRzLXNsYXRlKTsKICAtLWRzLWJ1dHRvbi1zbGF0ZS1iZy1ob3ZlcjogdmFyKC0tZHMtc2xhdGUtaG92ZXIpOwogIC0tZHMtYnV0dG9uLXNsYXRlLWJnLWFjdGl2ZTogdmFyKC0tZHMtc2xhdGUtYWN0aXZlKTsKICAtLWRzLWJ1dHRvbi1zbGF0ZS1mZzogdmFyKC0tZHMtc2xhdGUtZmcpOwogIC0tZHMtYnV0dG9uLXNsYXRlLXNvZnQtYmc6IHZhcigtLWRzLXNsYXRlLWxpZ2h0KTsKICAtLWRzLWJ1dHRvbi1zbGF0ZS1zb2Z0LWJnLWhvdmVyOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZHMtc2xhdGUpIDIwJSwgdmFyKC0tYmcpKTsKICAtLWRzLWJ1dHRvbi1zbGF0ZS1zb2Z0LWJnLWFjdGl2ZTogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRzLXNsYXRlKSAyNiUsIHZhcigtLWJnKSk7CgogIC0tZHMtYnV0dG9uLWF6dXJlLWJnOiAjMDM2OWExOwogIC0tZHMtYnV0dG9uLWF6dXJlLWJnLWhvdmVyOiAjMDc1OTg1OwogIC0tZHMtYnV0dG9uLWF6dXJlLWJnLWFjdGl2ZTogIzBjNGE2ZTsKICAtLWRzLWJ1dHRvbi1henVyZS1mZzogI2ZmZmZmZjsKICAtLWRzLWJ1dHRvbi1henVyZS1zb2Z0LWJnOiB2YXIoLS1kcy1henVyZS1saWdodCk7CiAgLS1kcy1idXR0b24tYXp1cmUtc29mdC1iZy1ob3ZlcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRzLWF6dXJlKSAyMCUsIHZhcigtLWJnKSk7CiAgLS1kcy1idXR0b24tYXp1cmUtc29mdC1iZy1hY3RpdmU6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kcy1henVyZSkgMjYlLCB2YXIoLS1iZykpOwp9", "" + import.meta.url).href;
8
+ var darkCssUrl$1 = new URL("data:text/css;base64,Ci50aGVtZS1kYXJrLAouZGFyaywKW2RhdGEtdGhlbWU9J2RhcmsnXSB7CiAgLS1kcy1idXR0b24tcHJpbWFyeS1iZzogIzU5NWNlNjsKICAtLWRzLWJ1dHRvbi1wcmltYXJ5LWJnLWhvdmVyOiAjNTA1M2RkOwogIC0tZHMtYnV0dG9uLXByaW1hcnktYmctYWN0aXZlOiAjNDc0YWNmOwogIC0tZHMtYnV0dG9uLXByaW1hcnktZmc6ICNmZmZmZmY7CgogIC0tZHMtYnV0dG9uLXN1Y2Nlc3MtYmc6ICMwNDc4NTc7CiAgLS1kcy1idXR0b24tc3VjY2Vzcy1iZy1ob3ZlcjogIzAzNmM0ZDsKICAtLWRzLWJ1dHRvbi1zdWNjZXNzLWJnLWFjdGl2ZTogIzAyNWY0NDsKICAtLWRzLWJ1dHRvbi1zdWNjZXNzLWZnOiAjZjhmYWZjOwoKICAtLWRzLWJ1dHRvbi13YXJuaW5nLWJnOiAjYzI0MTBjOwogIC0tZHMtYnV0dG9uLXdhcm5pbmctYmctaG92ZXI6ICNiNTNiMGE7CiAgLS1kcy1idXR0b24td2FybmluZy1iZy1hY3RpdmU6ICM5ZjMzMDc7CiAgLS1kcy1idXR0b24td2FybmluZy1mZzogI2Y4ZmFmYzsKCiAgLS1kcy1idXR0b24tZGFuZ2VyLWJnOiAjYjkxYzFjOwogIC0tZHMtYnV0dG9uLWRhbmdlci1iZy1ob3ZlcjogI2E5MTkxOTsKICAtLWRzLWJ1dHRvbi1kYW5nZXItYmctYWN0aXZlOiAjOTMxNTE1OwogIC0tZHMtYnV0dG9uLWRhbmdlci1mZzogI2Y4ZmFmYzsKCiAgLS1kcy1idXR0b24taW5mby1iZzogIzQzMzhjYTsKICAtLWRzLWJ1dHRvbi1pbmZvLWJnLWhvdmVyOiAjM2QzM2JiOwogIC0tZHMtYnV0dG9uLWluZm8tYmctYWN0aXZlOiAjMzYyZGE4OwogIC0tZHMtYnV0dG9uLWluZm8tZmc6ICNmOGZhZmM7CgogIC0tZHMtYnV0dG9uLXNsYXRlLWJnOiAjNDc1NTY5OwogIC0tZHMtYnV0dG9uLXNsYXRlLWJnLWhvdmVyOiAjMzM0MTU1OwogIC0tZHMtYnV0dG9uLXNsYXRlLWJnLWFjdGl2ZTogIzFlMjkzYjsKICAtLWRzLWJ1dHRvbi1zbGF0ZS1mZzogI2Y4ZmFmYzsKCiAgLS1kcy1idXR0b24tYXp1cmUtYmc6ICMwMzY5YTE7CiAgLS1kcy1idXR0b24tYXp1cmUtYmctaG92ZXI6ICMwNzU5ODU7CiAgLS1kcy1idXR0b24tYXp1cmUtYmctYWN0aXZlOiAjMGM0YTZlOwogIC0tZHMtYnV0dG9uLWF6dXJlLWZnOiAjZjhmYWZjOwp9", "" + import.meta.url).href;
9
+ var grButtonConfig = defineGranularComponent(import.meta.url, {
8
10
  name: "GrButton",
9
- safelist: e,
11
+ safelist: grButtonSafelist,
10
12
  tokenDefinitions: {
11
- light: c(l, { selector: ":root" }),
12
- dark: c(u, { as: ".dark, [data-theme=\"dark\"]" })
13
+ light: tokenDefinitionsFromCssSync(lightCssUrl$1, { selector: ":root" }),
14
+ dark: tokenDefinitionsFromCssSync(darkCssUrl$1, { as: ".dark, [data-theme=\"dark\"]" })
13
15
  }
14
- }), f = new URL("data:text/css;base64,OnJvb3QgewogIC0tcGItYmc6IHZhcigtLXByaW1hcnkpOwogIC0tcGItbmV1dHJhbC1iZzogdmFyKC0tc2Vjb25kYXJ5KTsKICAtLXBiLXN1Y2Nlc3MtYmc6IHZhcigtLWRzLXN1Y2Nlc3MpOwogIC0tcGItd2FybmluZy1iZzogdmFyKC0tZHMtd2FybmluZyk7CiAgLS1wYi1kYW5nZXItYmc6IHZhcigtLWRzLWRhbmdlcik7CiAgLS1wYi1pbmZvLWJnOiB2YXIoLS1kcy1pbmZvKTsKICAtLXBiLXNsYXRlLWJnOiB2YXIoLS1kcy1zbGF0ZSk7CiAgLS1wYi1henVyZS1iZzogdmFyKC0tZHMtYXp1cmUpOwp9Cg==", "" + import.meta.url).href, p = new URL("data:text/css;base64,LnRoZW1lLWRhcmssCi5kYXJrLApbZGF0YS10aGVtZT0nZGFyayddIHsKICAtLXBiLWJnOiB2YXIoLS1wcmltYXJ5KTsKICAtLXBiLW5ldXRyYWwtYmc6IHZhcigtLXNlY29uZGFyeSk7CiAgLS1wYi1zdWNjZXNzLWJnOiB2YXIoLS1kcy1zdWNjZXNzKTsKICAtLXBiLXdhcm5pbmctYmc6IHZhcigtLWRzLXdhcm5pbmcpOwogIC0tcGItZGFuZ2VyLWJnOiB2YXIoLS1kcy1kYW5nZXIpOwogIC0tcGItaW5mby1iZzogdmFyKC0tZHMtaW5mbyk7CiAgLS1wYi1zbGF0ZS1iZzogdmFyKC0tZHMtc2xhdGUpOwogIC0tcGItYXp1cmUtYmc6IHZhcigtLWRzLWF6dXJlKTsKfQ==", "" + import.meta.url).href, m = i([d, s(import.meta.url, {
16
+ });
17
+ //#endregion
18
+ //#region src/components/GrProgressBar/config.node.ts
19
+ var lightCssUrl = new URL("data:text/css;base64,OnJvb3QgewogIC0tcGItYmc6IHZhcigtLXByaW1hcnkpOwogIC0tcGItbmV1dHJhbC1iZzogdmFyKC0tc2Vjb25kYXJ5KTsKICAtLXBiLXN1Y2Nlc3MtYmc6IHZhcigtLWRzLXN1Y2Nlc3MpOwogIC0tcGItd2FybmluZy1iZzogdmFyKC0tZHMtd2FybmluZyk7CiAgLS1wYi1kYW5nZXItYmc6IHZhcigtLWRzLWRhbmdlcik7CiAgLS1wYi1pbmZvLWJnOiB2YXIoLS1kcy1pbmZvKTsKICAtLXBiLXNsYXRlLWJnOiB2YXIoLS1kcy1zbGF0ZSk7CiAgLS1wYi1henVyZS1iZzogdmFyKC0tZHMtYXp1cmUpOwp9Cg==", "" + import.meta.url).href;
20
+ var darkCssUrl = new URL("data:text/css;base64,LnRoZW1lLWRhcmssCi5kYXJrLApbZGF0YS10aGVtZT0nZGFyayddIHsKICAtLXBiLWJnOiB2YXIoLS1wcmltYXJ5KTsKICAtLXBiLW5ldXRyYWwtYmc6IHZhcigtLXNlY29uZGFyeSk7CiAgLS1wYi1zdWNjZXNzLWJnOiB2YXIoLS1kcy1zdWNjZXNzKTsKICAtLXBiLXdhcm5pbmctYmc6IHZhcigtLWRzLXdhcm5pbmcpOwogIC0tcGItZGFuZ2VyLWJnOiB2YXIoLS1kcy1kYW5nZXIpOwogIC0tcGItaW5mby1iZzogdmFyKC0tZHMtaW5mbyk7CiAgLS1wYi1zbGF0ZS1iZzogdmFyKC0tZHMtc2xhdGUpOwogIC0tcGItYXp1cmUtYmc6IHZhcigtLWRzLWF6dXJlKTsKfQ==", "" + import.meta.url).href;
21
+ //#endregion
22
+ //#region src/granular-provider/node.ts
23
+ var granularityProvider = createGranularityProvider([grButtonConfig, defineGranularComponent(import.meta.url, {
15
24
  name: "GrProgressBar",
16
- safelist: t,
25
+ safelist: grProgressBarSafelist,
17
26
  tokenDefinitions: {
18
- light: c(f, { selector: ":root" }),
19
- dark: c(p, { as: ".dark, [data-theme=\"dark\"]" })
27
+ light: tokenDefinitionsFromCssSync(lightCssUrl, { selector: ":root" }),
28
+ dark: tokenDefinitionsFromCssSync(darkCssUrl, { as: ".dark, [data-theme=\"dark\"]" })
20
29
  }
21
30
  })]);
22
31
  //#endregion
23
- export { o as GRANULARITY_PROVIDER_ID, i as createGranularityProvider, m as default, m as granularityProvider, a as granularityComponentConfigs, r as granularityDefaultThemes, n as granularityThemeNames };
32
+ export { GRANULARITY_PROVIDER_ID, createGranularityProvider, granularityProvider as default, granularityProvider, granularityComponentConfigs, granularityDefaultThemes, granularityThemeNames };
33
+
34
+ //# sourceMappingURL=granular-provider-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"granular-provider-node.js","names":[],"sources":["../src/components/GrButton/config.node.ts","../src/components/GrProgressBar/config.node.ts","../src/granular-provider/node.ts"],"sourcesContent":["import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\nimport { tokenDefinitionsFromCssSync } from '@feugene/unocss-preset-granular/node'\nimport { grButtonSafelist } from './safelist'\n\nconst lightCssUrl = new URL('./themes/light.css', import.meta.url).href\nconst darkCssUrl = new URL('./themes/dark.css', import.meta.url).href\n\nexport const grButtonConfig = defineGranularComponent(import.meta.url, {\n name: 'GrButton',\n safelist: grButtonSafelist,\n tokenDefinitions: {\n light: tokenDefinitionsFromCssSync(lightCssUrl, { selector: ':root' }),\n dark: tokenDefinitionsFromCssSync(darkCssUrl, { as: '.dark, [data-theme=\"dark\"]' }),\n },\n})\n","import {defineGranularComponent} from '@feugene/unocss-preset-granular/contract'\n\nimport { grProgressBarSafelist } from './safelist'\nimport {tokenDefinitionsFromCssSync} from \"@feugene/unocss-preset-granular/node\";\n\nconst lightCssUrl = new URL('./themes/light.css', import.meta.url).href\nconst darkCssUrl = new URL('./themes/dark.css', import.meta.url).href\n\nexport const grProgressBarConfig = defineGranularComponent(import.meta.url, {\n name: 'GrProgressBar',\n safelist: grProgressBarSafelist,\n tokenDefinitions: {\n light: tokenDefinitionsFromCssSync(lightCssUrl, { selector: ':root' }),\n dark: tokenDefinitionsFromCssSync(darkCssUrl, { as: '.dark, [data-theme=\"dark\"]' }),\n },\n})","// Node-entry granular-provider'а `@feugene/granularity`.\n//\n// От browser-варианта (`./index.ts`) отличается только тем, что для\n// `GrButton` используется `config.node.ts` с `tokenDefinitions`,\n// собранными через `tokenDefinitionsFromCssSync` (требует `node:fs`).\n// Всё остальное — id, `theme.*`, список компонентов, `packageBaseUrl` —\n// приходит из общей фабрики `./shared`.\nimport { grButtonConfig } from '../components/GrButton/config.node'\nimport { grProgressBarConfig } from '../components/GrProgressBar/config.node'\nimport { createGranularityProvider } from './shared'\n\nexport * from './shared'\n\nexport const granularityProvider = createGranularityProvider([grButtonConfig, grProgressBarConfig])\n\nexport default granularityProvider\n"],"mappings":";;;;;;AAIA,IAAM,gBAAc,IAAA,IAAA,q0HAAA,KAAA,OAAA,KAAA,IAA8C,CAAC;AACnE,IAAM,eAAa,IAAA,IAAA,q8CAAA,KAAA,OAAA,KAAA,IAA6C,CAAC;AAEjE,IAAa,iBAAiB,wBAAwB,OAAO,KAAK,KAAK;CACrE,MAAM;CACN,UAAU;CACV,kBAAkB;EAChB,OAAO,4BAA4B,eAAa,EAAE,UAAU,SAAS,CAAC;EACtE,MAAM,4BAA4B,cAAY,EAAE,IAAI,gCAA8B,CAAA;;CAErF,CAAC;;;ACTF,IAAM,cAAc,IAAA,IAAA,yZAAA,KAAA,OAAA,KAAA,IAA8C,CAAC;AACnE,IAAM,aAAa,IAAA,IAAA,qcAAA,KAAA,OAAA,KAAA,IAA6C,CAAC;;;ACOjE,IAAa,sBAAsB,0BAA0B,CAAC,gBDL3B,wBAAwB,OAAO,KAAK,KAAK;CAC1E,MAAM;CACN,UAAU;CACV,kBAAkB;EAChB,OAAO,4BAA4B,aAAa,EAAE,UAAU,SAAS,CAAC;EACtE,MAAM,4BAA4B,YAAY,EAAE,IAAI,gCAA8B,CAAA;;CAErF,CAAA,CCFiG,CAAC"}
@@ -1,5 +1,7 @@
1
- import { a as e, i as t, n, r, t as i } from "./chunks/shared-BqUqjuxn.js";
1
+ import { a as granularityThemeNames, i as granularityDefaultThemes, n as createGranularityProvider, r as granularityComponentConfigs, t as GRANULARITY_PROVIDER_ID } from "./chunks/shared-Bvjkhhm2.js";
2
2
  //#region src/granular-provider/index.ts
3
- var a = n();
3
+ var granularityProvider = createGranularityProvider();
4
4
  //#endregion
5
- export { i as GRANULARITY_PROVIDER_ID, n as createGranularityProvider, a as default, a as granularityProvider, r as granularityComponentConfigs, t as granularityDefaultThemes, e as granularityThemeNames };
5
+ export { GRANULARITY_PROVIDER_ID, createGranularityProvider, granularityProvider as default, granularityProvider, granularityComponentConfigs, granularityDefaultThemes, granularityThemeNames };
6
+
7
+ //# sourceMappingURL=granular-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"granular-provider.js","names":[],"sources":["../src/granular-provider/index.ts"],"sourcesContent":["// Browser-entry granular-provider'а `@feugene/granularity`.\n//\n// Использует облегчённый `GrButton/config.ts` без `tokenDefinitionsFromCssSync`,\n// поэтому при сборке клиентских приложений из этого модуля не протягиваются\n// `node:fs`/`node:url`/`node:path`.\n//\n// Для node-сборок UnoCSS, где нужны точечные token overrides из CSS-файлов\n// тем, используйте `./node.ts` — там в `GrButton` подставляется\n// `config.node.ts` с `tokenDefinitionsFromCssSync`.\nimport {createGranularityProvider} from './shared'\n\nexport * from './shared'\n\nexport const granularityProvider = createGranularityProvider()\n\nexport default granularityProvider\n"],"mappings":";;AAaA,IAAa,sBAAsB,2BAA2B"}
package/dist/i18n/all.js CHANGED
@@ -1,9 +1,11 @@
1
- import { n as e, r as t, t as n } from "../chunks/es-CIT9s_vo.js";
1
+ import { n as ru, r as en, t as es } from "../chunks/es-Cu_RlgIr.js";
2
2
  //#region src/i18n/all.ts
3
- var r = [
4
- t,
5
- e,
6
- n
3
+ var all = [
4
+ en,
5
+ ru,
6
+ es
7
7
  ];
8
8
  //#endregion
9
- export { r as all, r as default };
9
+ export { all, all as default };
10
+
11
+ //# sourceMappingURL=all.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"all.js","names":[],"sources":["../../src/i18n/all.ts"],"sourcesContent":["/**\n * Aggregated locale loaders for the Granularity package.\n *\n * Imported via the dedicated sub-path `@feugene/granularity/i18n/all`.\n * Use it ONLY in environments where bundle size is not a concern\n * (demos, Storybook, e2e, localization tooling).\n *\n * For production builds always prefer per-locale imports from\n * `@feugene/granularity/i18n` so unused languages can be tree-shaken away.\n *\n * ```ts\n * import all from '@feugene/granularity/i18n/all'\n *\n * createFintI18n({\n * locale: 'en',\n * fallbackLocale: 'en',\n * loaders: all, // == [en, ru, es]\n * })\n * ```\n */\nimport type { LocaleLoaderCollection } from '@feugene/fint-i18n/core'\n\nimport { en } from './messages/en'\nimport { ru } from './messages/ru'\nimport { es } from './messages/es'\n\nexport const all: LocaleLoaderCollection[] = [en, ru, es]\n\nexport default all\n"],"mappings":";;AA0BA,IAAa,MAAgC;CAAC;CAAI;CAAI;CAAG"}
@@ -1,3 +1,3 @@
1
- import { t as e } from "../chunks/adapter-D5uYoOZj.js";
2
- import { i as t, n, r, t as i } from "../chunks/es-CIT9s_vo.js";
3
- export { t as GRANULARITY_I18N_BLOCK, e as GRANULARITY_I18N_KEY, r as en, i as es, n as ru };
1
+ import { t as GRANULARITY_I18N_KEY } from "../chunks/adapter-C7fKeUa4.js";
2
+ import { i as GRANULARITY_I18N_BLOCK, n as ru, r as en, t as es } from "../chunks/es-Cu_RlgIr.js";
3
+ export { GRANULARITY_I18N_BLOCK, GRANULARITY_I18N_KEY, en, es, ru };