@dxtmisha/wiki 0.57.3 → 0.57.6

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 (345) hide show
  1. package/dist/{defineProperty-3CuEayIP.js → defineProperty-CbNEU1Ei.js} +4 -4
  2. package/dist/library.js +4 -4
  3. package/dist/media.js +115 -38
  4. package/dist/src/media/descriptions/wikiDescriptionsButtonGroup.d.ts +7 -0
  5. package/dist/src/media/descriptions/wikiDescriptionsRadio.d.ts +7 -0
  6. package/dist/src/media/mdx/ButtonGroup/wikiMdxButtonGroup.d.ts +7 -0
  7. package/dist/src/media/props/wikiButtonGroup.d.ts +7 -0
  8. package/dist/src/media/props/wikiRadio.d.ts +7 -0
  9. package/dist/storybook.js +2086 -1813
  10. package/dist/{wikiDescriptions-7XaHU3Yk.js → wikiDescriptions-CJv5fdyX.js} +107 -1
  11. package/package.json +9 -9
  12. package/src/media/functional/figma/classes/FigmaPostAbstract/FigmaPostAbstract.en.mdx +46 -0
  13. package/src/media/functional/figma/classes/FigmaPostAbstract/FigmaPostAbstract.ru.mdx +46 -0
  14. package/src/media/functional/figma/classes/FigmaPostAbstract/FigmaPostAbstract.vi.mdx +46 -0
  15. package/src/media/functional/figma/classes/FigmaPostCode/FigmaPostCode.en.mdx +3 -23
  16. package/src/media/functional/figma/classes/FigmaPostCode/FigmaPostCode.ru.mdx +3 -23
  17. package/src/media/functional/figma/classes/FigmaPostCode/FigmaPostCode.vi.mdx +3 -23
  18. package/src/media/functional/figma/functions/fetchClientStorage/fetchClientStorage.en.mdx +46 -0
  19. package/src/media/functional/figma/functions/fetchClientStorage/fetchClientStorage.ru.mdx +46 -0
  20. package/src/media/functional/figma/functions/fetchClientStorage/fetchClientStorage.vi.mdx +46 -0
  21. package/src/media/functional/figma/functions/fetchFrameSelection/fetchFrameSelection.en.mdx +34 -0
  22. package/src/media/functional/figma/functions/fetchFrameSelection/fetchFrameSelection.ru.mdx +34 -0
  23. package/src/media/functional/figma/functions/fetchFrameSelection/fetchFrameSelection.vi.mdx +34 -0
  24. package/src/media/functional/figma/functions/fetchFrameStyles/fetchFrameStyles.en.mdx +49 -0
  25. package/src/media/functional/figma/functions/fetchFrameStyles/fetchFrameStyles.ru.mdx +49 -0
  26. package/src/media/functional/figma/functions/fetchFrameStyles/fetchFrameStyles.vi.mdx +49 -0
  27. package/src/media/functional/figma/functions/fetchFramesSelected/fetchFramesSelected.en.mdx +19 -8
  28. package/src/media/functional/figma/functions/fetchFramesSelected/fetchFramesSelected.ru.mdx +18 -7
  29. package/src/media/functional/figma/functions/fetchFramesSelected/fetchFramesSelected.vi.mdx +19 -8
  30. package/src/media/functional/figma/functions/fetchStorage/fetchStorage.en.mdx +42 -0
  31. package/src/media/functional/figma/functions/fetchStorage/fetchStorage.ru.mdx +42 -0
  32. package/src/media/functional/figma/functions/fetchStorage/fetchStorage.vi.mdx +42 -0
  33. package/src/media/functional/figma/functions/fetchTopLevelFrames/fetchTopLevelFrames.en.mdx +29 -7
  34. package/src/media/functional/figma/functions/fetchTopLevelFrames/fetchTopLevelFrames.ru.mdx +28 -6
  35. package/src/media/functional/figma/functions/fetchTopLevelFrames/fetchTopLevelFrames.vi.mdx +29 -7
  36. package/src/media/functional/figma/functions/sendClientStorage/sendClientStorage.en.mdx +29 -0
  37. package/src/media/functional/figma/functions/sendClientStorage/sendClientStorage.ru.mdx +29 -0
  38. package/src/media/functional/figma/functions/sendClientStorage/sendClientStorage.vi.mdx +29 -0
  39. package/src/media/functional/figma/functions/sendFrameSelection/sendFrameSelection.en.mdx +28 -0
  40. package/src/media/functional/figma/functions/sendFrameSelection/sendFrameSelection.ru.mdx +28 -0
  41. package/src/media/functional/figma/functions/sendFrameSelection/sendFrameSelection.vi.mdx +28 -0
  42. package/src/media/functional/figma/functions/sendFrameStyles/sendFrameStyles.en.mdx +40 -0
  43. package/src/media/functional/figma/functions/sendFrameStyles/sendFrameStyles.ru.mdx +40 -0
  44. package/src/media/functional/figma/functions/sendFrameStyles/sendFrameStyles.vi.mdx +40 -0
  45. package/src/media/functional/figma/functions/sendFramesSelected/sendFramesSelected.en.mdx +29 -0
  46. package/src/media/functional/figma/functions/sendFramesSelected/sendFramesSelected.ru.mdx +29 -0
  47. package/src/media/functional/figma/functions/sendFramesSelected/sendFramesSelected.vi.mdx +29 -0
  48. package/src/media/functional/figma/functions/sendStorage/sendStorage.en.mdx +30 -0
  49. package/src/media/functional/figma/functions/sendStorage/sendStorage.ru.mdx +30 -0
  50. package/src/media/functional/figma/functions/sendStorage/sendStorage.vi.mdx +30 -0
  51. package/src/media/functional/figma-code/classes/FigmaClientStorage/FigmaClientStorage.en.mdx +64 -0
  52. package/src/media/functional/figma-code/classes/FigmaClientStorage/FigmaClientStorage.ru.mdx +64 -0
  53. package/src/media/functional/figma-code/classes/FigmaClientStorage/FigmaClientStorage.vi.mdx +64 -0
  54. package/src/media/functional/figma-code/classes/FigmaFrame/FigmaFrame.en.mdx +168 -35
  55. package/src/media/functional/figma-code/classes/FigmaFrame/FigmaFrame.ru.mdx +168 -35
  56. package/src/media/functional/figma-code/classes/FigmaFrame/FigmaFrame.vi.mdx +168 -35
  57. package/src/media/functional/figma-code/classes/FigmaFramesSelected/FigmaFramesSelected.en.mdx +23 -69
  58. package/src/media/functional/figma-code/classes/FigmaFramesSelected/FigmaFramesSelected.ru.mdx +22 -68
  59. package/src/media/functional/figma-code/classes/FigmaFramesSelected/FigmaFramesSelected.vi.mdx +23 -69
  60. package/src/media/functional/figma-code/classes/FigmaItem/FigmaItem.en.mdx +79 -56
  61. package/src/media/functional/figma-code/classes/FigmaItem/FigmaItem.ru.mdx +79 -56
  62. package/src/media/functional/figma-code/classes/FigmaItem/FigmaItem.vi.mdx +79 -56
  63. package/src/media/functional/figma-code/classes/FigmaPluginMessenger/FigmaPluginMessenger.en.mdx +18 -48
  64. package/src/media/functional/figma-code/classes/FigmaPluginMessenger/FigmaPluginMessenger.ru.mdx +18 -48
  65. package/src/media/functional/figma-code/classes/FigmaPluginMessenger/FigmaPluginMessenger.vi.mdx +18 -48
  66. package/src/media/functional/figma-code/classes/FigmaStorage/FigmaStorage.en.mdx +22 -67
  67. package/src/media/functional/figma-code/classes/FigmaStorage/FigmaStorage.ru.mdx +22 -67
  68. package/src/media/functional/figma-code/classes/FigmaStorage/FigmaStorage.vi.mdx +22 -67
  69. package/src/media/functional/figma-code/classes/FigmaStorageData/FigmaStorageData.en.mdx +57 -0
  70. package/src/media/functional/figma-code/classes/FigmaStorageData/FigmaStorageData.ru.mdx +57 -0
  71. package/src/media/functional/figma-code/classes/FigmaStorageData/FigmaStorageData.vi.mdx +57 -0
  72. package/src/media/functional/figma-code/classes/FigmaTopLevelFrames/FigmaTopLevelFrames.en.mdx +24 -27
  73. package/src/media/functional/figma-code/classes/FigmaTopLevelFrames/FigmaTopLevelFrames.ru.mdx +23 -26
  74. package/src/media/functional/figma-code/classes/FigmaTopLevelFrames/FigmaTopLevelFrames.vi.mdx +24 -27
  75. package/src/media/functional/figma-code/functions/getFigmaFrameById/getFigmaFrameById.en.mdx +28 -0
  76. package/src/media/functional/figma-code/functions/getFigmaFrameById/getFigmaFrameById.ru.mdx +28 -0
  77. package/src/media/functional/figma-code/functions/getFigmaFrameById/getFigmaFrameById.vi.mdx +28 -0
  78. package/src/media/functional/figma-code/functions/getFigmaItemById/getFigmaItemById.en.mdx +43 -0
  79. package/src/media/functional/figma-code/functions/getFigmaItemById/getFigmaItemById.ru.mdx +43 -0
  80. package/src/media/functional/figma-code/functions/getFigmaItemById/getFigmaItemById.vi.mdx +43 -0
  81. package/src/media/functional/figma-code/functions/getFigmaItemByIdOrRoot/getFigmaItemByIdOrRoot.en.mdx +30 -0
  82. package/src/media/functional/figma-code/functions/getFigmaItemByIdOrRoot/getFigmaItemByIdOrRoot.ru.mdx +30 -0
  83. package/src/media/functional/figma-code/functions/getFigmaItemByIdOrRoot/getFigmaItemByIdOrRoot.vi.mdx +30 -0
  84. package/src/media/functional/figma-code/functions/makeFigmaFrameSelection/makeFigmaFrameSelection.en.mdx +21 -0
  85. package/src/media/functional/figma-code/functions/makeFigmaFrameSelection/makeFigmaFrameSelection.ru.mdx +21 -0
  86. package/src/media/functional/figma-code/functions/makeFigmaFrameSelection/makeFigmaFrameSelection.vi.mdx +21 -0
  87. package/src/media/functional/figma-code/functions/makeFigmaTexts/makeFigmaTexts.en.mdx +28 -0
  88. package/src/media/functional/figma-code/functions/makeFigmaTexts/makeFigmaTexts.ru.mdx +28 -0
  89. package/src/media/functional/figma-code/functions/makeFigmaTexts/makeFigmaTexts.vi.mdx +28 -0
  90. package/src/media/functional/figma-code/functions/setupClientStorage/setupClientStorage.en.mdx +28 -0
  91. package/src/media/functional/figma-code/functions/setupClientStorage/setupClientStorage.ru.mdx +28 -0
  92. package/src/media/functional/figma-code/functions/setupClientStorage/setupClientStorage.vi.mdx +28 -0
  93. package/src/media/functional/figma-code/functions/setupFrameSelection/setupFrameSelection.en.mdx +22 -0
  94. package/src/media/functional/figma-code/functions/setupFrameSelection/setupFrameSelection.ru.mdx +22 -0
  95. package/src/media/functional/figma-code/functions/setupFrameSelection/setupFrameSelection.vi.mdx +22 -0
  96. package/src/media/functional/figma-code/functions/setupFrameStyles/setupFrameStyles.en.mdx +19 -0
  97. package/src/media/functional/figma-code/functions/setupFrameStyles/setupFrameStyles.ru.mdx +19 -0
  98. package/src/media/functional/figma-code/functions/setupFrameStyles/setupFrameStyles.vi.mdx +19 -0
  99. package/src/media/functional/figma-code/functions/setupStorage/setupStorage.en.mdx +28 -0
  100. package/src/media/functional/figma-code/functions/setupStorage/setupStorage.ru.mdx +28 -0
  101. package/src/media/functional/figma-code/functions/setupStorage/setupStorage.vi.mdx +28 -0
  102. package/src/media/functional/figma-code/functions/toFrameSelection/toFrameSelection.en.mdx +27 -0
  103. package/src/media/functional/figma-code/functions/toFrameSelection/toFrameSelection.ru.mdx +27 -0
  104. package/src/media/functional/figma-code/functions/toFrameSelection/toFrameSelection.vi.mdx +27 -0
  105. package/src/media/functional/figma-ref/composables/useFigmaClientStorage/useFigmaClientStorage.en.mdx +26 -0
  106. package/src/media/functional/figma-ref/composables/useFigmaClientStorage/useFigmaClientStorage.ru.mdx +26 -0
  107. package/src/media/functional/figma-ref/composables/useFigmaClientStorage/useFigmaClientStorage.vi.mdx +26 -0
  108. package/src/media/functional/figma-ref/composables/useFigmaFrameSelection/useFigmaFrameSelection.en.mdx +35 -0
  109. package/src/media/functional/figma-ref/composables/useFigmaFrameSelection/useFigmaFrameSelection.ru.mdx +35 -0
  110. package/src/media/functional/figma-ref/composables/useFigmaFrameSelection/useFigmaFrameSelection.vi.mdx +35 -0
  111. package/src/media/functional/figma-ref/composables/useFigmaFrameStyles/useFigmaFrameStyles.en.mdx +33 -0
  112. package/src/media/functional/figma-ref/composables/useFigmaFrameStyles/useFigmaFrameStyles.ru.mdx +33 -0
  113. package/src/media/functional/figma-ref/composables/useFigmaFrameStyles/useFigmaFrameStyles.vi.mdx +33 -0
  114. package/src/media/functional/figma-ref/composables/useFigmaStorage/useFigmaStorage.en.mdx +28 -0
  115. package/src/media/functional/figma-ref/composables/useFigmaStorage/useFigmaStorage.ru.mdx +28 -0
  116. package/src/media/functional/figma-ref/composables/useFigmaStorage/useFigmaStorage.vi.mdx +28 -0
  117. package/src/media/functional/figma-ref/composables/useFigmaUiFrames/useFigmaUiFrames.en.mdx +7 -12
  118. package/src/media/functional/figma-ref/composables/useFigmaUiFrames/useFigmaUiFrames.ru.mdx +7 -12
  119. package/src/media/functional/figma-ref/composables/useFigmaUiFrames/useFigmaUiFrames.vi.mdx +8 -13
  120. package/src/media/functional/figma-ref/composables/useFigmaUiSelected/useFigmaUiSelected.en.mdx +12 -17
  121. package/src/media/functional/figma-ref/composables/useFigmaUiSelected/useFigmaUiSelected.ru.mdx +13 -18
  122. package/src/media/functional/figma-ref/composables/useFigmaUiSelected/useFigmaUiSelected.vi.mdx +14 -19
  123. package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.en.mdx +2 -3
  124. package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.ru.mdx +2 -3
  125. package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.vi.mdx +2 -3
  126. package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementAsyncRef.en.mdx +41 -0
  127. package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementAsyncRef.ru.mdx +41 -0
  128. package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementAsyncRef.vi.mdx +41 -0
  129. package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementRef.en.mdx +12 -0
  130. package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementRef.ru.mdx +12 -0
  131. package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementRef.vi.mdx +6 -0
  132. package/src/media/functional/functional/composables/useApiRef/useApiRef.en.mdx +12 -9
  133. package/src/media/functional/functional/composables/useApiRef/useApiRef.ru.mdx +12 -9
  134. package/src/media/functional/functional/composables/useApiRef/useApiRef.vi.mdx +11 -9
  135. package/src/media/functional/functional-basic/api/api.en.mdx +39 -2
  136. package/src/media/functional/functional-basic/api/api.ru.mdx +39 -2
  137. package/src/media/functional/functional-basic/api/api.vi.mdx +39 -2
  138. package/src/media/functional/nitro-basic/functions/getInject.en.mdx +27 -0
  139. package/src/media/functional/nitro-basic/functions/getInject.ru.mdx +27 -0
  140. package/src/media/functional/nitro-basic/functions/getInject.vi.mdx +20 -0
  141. package/src/media/functional/ui-figma/about/about.en.mdx +52 -0
  142. package/src/media/functional/ui-figma/about/about.ru.mdx +52 -0
  143. package/src/media/functional/ui-figma/about/about.vi.mdx +52 -0
  144. package/src/media/functional/ui-figma/frames/frames.en.mdx +58 -0
  145. package/src/media/functional/ui-figma/frames/frames.ru.mdx +58 -0
  146. package/src/media/functional/ui-figma/frames/frames.vi.mdx +58 -0
  147. package/src/media/functional/ui-figma/messenger/messenger.en.mdx +67 -0
  148. package/src/media/functional/ui-figma/messenger/messenger.ru.mdx +67 -0
  149. package/src/media/functional/ui-figma/messenger/messenger.vi.mdx +67 -0
  150. package/src/media/functional/ui-figma/selection/selection.en.mdx +65 -0
  151. package/src/media/functional/ui-figma/selection/selection.ru.mdx +65 -0
  152. package/src/media/functional/ui-figma/selection/selection.vi.mdx +65 -0
  153. package/src/media/functional/ui-figma/storage/storage.en.mdx +53 -0
  154. package/src/media/functional/ui-figma/storage/storage.ru.mdx +53 -0
  155. package/src/media/functional/ui-figma/storage/storage.vi.mdx +53 -0
  156. package/src/media/functional/ui-figma/styles/styles.en.mdx +57 -0
  157. package/src/media/functional/ui-figma/styles/styles.ru.mdx +57 -0
  158. package/src/media/functional/ui-figma/styles/styles.vi.mdx +57 -0
  159. package/src/library.ts +0 -8
  160. /package/dist/{classes → src/classes}/WikiStorybook.d.ts +0 -0
  161. /package/dist/{classes → src/classes}/WikiStorybookDescriptions.d.ts +0 -0
  162. /package/dist/{classes → src/classes}/WikiStorybookItem.d.ts +0 -0
  163. /package/dist/{classes → src/classes}/WikiStorybookProp.d.ts +0 -0
  164. /package/dist/{documentation → src/documentation}/storybook/StorybookDescriptions.d.ts +0 -0
  165. /package/dist/{documentation → src/documentation}/storybook/StorybookMain.d.ts +0 -0
  166. /package/dist/{library.d.ts → src/library.d.ts} +0 -0
  167. /package/dist/{media → src/media}/descriptions/wikiDescriptions.d.ts +0 -0
  168. /package/dist/{media → src/media}/descriptions/wikiDescriptionsAccordion.d.ts +0 -0
  169. /package/dist/{media → src/media}/descriptions/wikiDescriptionsActionSheet.d.ts +0 -0
  170. /package/dist/{media → src/media}/descriptions/wikiDescriptionsActions.d.ts +0 -0
  171. /package/dist/{media → src/media}/descriptions/wikiDescriptionsAnchor.d.ts +0 -0
  172. /package/dist/{media → src/media}/descriptions/wikiDescriptionsArea.d.ts +0 -0
  173. /package/dist/{media → src/media}/descriptions/wikiDescriptionsArrow.d.ts +0 -0
  174. /package/dist/{media → src/media}/descriptions/wikiDescriptionsBadge.d.ts +0 -0
  175. /package/dist/{media → src/media}/descriptions/wikiDescriptionsBars.d.ts +0 -0
  176. /package/dist/{media → src/media}/descriptions/wikiDescriptionsBlock.d.ts +0 -0
  177. /package/dist/{media → src/media}/descriptions/wikiDescriptionsButton.d.ts +0 -0
  178. /package/dist/{media → src/media}/descriptions/wikiDescriptionsCell.d.ts +0 -0
  179. /package/dist/{media → src/media}/descriptions/wikiDescriptionsCheckbox.d.ts +0 -0
  180. /package/dist/{media → src/media}/descriptions/wikiDescriptionsChip.d.ts +0 -0
  181. /package/dist/{media → src/media}/descriptions/wikiDescriptionsChipGroup.d.ts +0 -0
  182. /package/dist/{media → src/media}/descriptions/wikiDescriptionsClientOnly.d.ts +0 -0
  183. /package/dist/{media → src/media}/descriptions/wikiDescriptionsContainer.d.ts +0 -0
  184. /package/dist/{media → src/media}/descriptions/wikiDescriptionsDialog.d.ts +0 -0
  185. /package/dist/{media → src/media}/descriptions/wikiDescriptionsDummy.d.ts +0 -0
  186. /package/dist/{media → src/media}/descriptions/wikiDescriptionsField.d.ts +0 -0
  187. /package/dist/{media → src/media}/descriptions/wikiDescriptionsFieldCounter.d.ts +0 -0
  188. /package/dist/{media → src/media}/descriptions/wikiDescriptionsFieldLabel.d.ts +0 -0
  189. /package/dist/{media → src/media}/descriptions/wikiDescriptionsFieldMessage.d.ts +0 -0
  190. /package/dist/{media → src/media}/descriptions/wikiDescriptionsGrid.d.ts +0 -0
  191. /package/dist/{media → src/media}/descriptions/wikiDescriptionsGridItem.d.ts +0 -0
  192. /package/dist/{media → src/media}/descriptions/wikiDescriptionsGroup.d.ts +0 -0
  193. /package/dist/{media → src/media}/descriptions/wikiDescriptionsHeader.d.ts +0 -0
  194. /package/dist/{media → src/media}/descriptions/wikiDescriptionsHorizontalScroll.d.ts +0 -0
  195. /package/dist/{media → src/media}/descriptions/wikiDescriptionsIcon.d.ts +0 -0
  196. /package/dist/{media → src/media}/descriptions/wikiDescriptionsImage.d.ts +0 -0
  197. /package/dist/{media → src/media}/descriptions/wikiDescriptionsInput.d.ts +0 -0
  198. /package/dist/{media → src/media}/descriptions/wikiDescriptionsList.d.ts +0 -0
  199. /package/dist/{media → src/media}/descriptions/wikiDescriptionsListGroup.d.ts +0 -0
  200. /package/dist/{media → src/media}/descriptions/wikiDescriptionsListItem.d.ts +0 -0
  201. /package/dist/{media → src/media}/descriptions/wikiDescriptionsListMenu.d.ts +0 -0
  202. /package/dist/{media → src/media}/descriptions/wikiDescriptionsMask.d.ts +0 -0
  203. /package/dist/{media → src/media}/descriptions/wikiDescriptionsMenu.d.ts +0 -0
  204. /package/dist/{media → src/media}/descriptions/wikiDescriptionsModal.d.ts +0 -0
  205. /package/dist/{media → src/media}/descriptions/wikiDescriptionsMotionAxis.d.ts +0 -0
  206. /package/dist/{media → src/media}/descriptions/wikiDescriptionsMotionTransform.d.ts +0 -0
  207. /package/dist/{media → src/media}/descriptions/wikiDescriptionsPage.d.ts +0 -0
  208. /package/dist/{media → src/media}/descriptions/wikiDescriptionsPageArea.d.ts +0 -0
  209. /package/dist/{media → src/media}/descriptions/wikiDescriptionsProgress.d.ts +0 -0
  210. /package/dist/{media → src/media}/descriptions/wikiDescriptionsRipple.d.ts +0 -0
  211. /package/dist/{media → src/media}/descriptions/wikiDescriptionsScrollbar.d.ts +0 -0
  212. /package/dist/{media → src/media}/descriptions/wikiDescriptionsSection.d.ts +0 -0
  213. /package/dist/{media → src/media}/descriptions/wikiDescriptionsSelect.d.ts +0 -0
  214. /package/dist/{media → src/media}/descriptions/wikiDescriptionsSelectValue.d.ts +0 -0
  215. /package/dist/{media → src/media}/descriptions/wikiDescriptionsSkeleton.d.ts +0 -0
  216. /package/dist/{media → src/media}/descriptions/wikiDescriptionsSnackbar.d.ts +0 -0
  217. /package/dist/{media → src/media}/descriptions/wikiDescriptionsSnackbarItem.d.ts +0 -0
  218. /package/dist/{media → src/media}/descriptions/wikiDescriptionsTabItem.d.ts +0 -0
  219. /package/dist/{media → src/media}/descriptions/wikiDescriptionsTabs.d.ts +0 -0
  220. /package/dist/{media → src/media}/descriptions/wikiDescriptionsTabsNavigation.d.ts +0 -0
  221. /package/dist/{media → src/media}/descriptions/wikiDescriptionsTextarea.d.ts +0 -0
  222. /package/dist/{media → src/media}/descriptions/wikiDescriptionsTextareaAutosize.d.ts +0 -0
  223. /package/dist/{media → src/media}/descriptions/wikiDescriptionsTooltip.d.ts +0 -0
  224. /package/dist/{media → src/media}/descriptions/wikiDescriptionsWindow.d.ts +0 -0
  225. /package/dist/{media → src/media}/mdx/Accordion/wikiMdxAccordion.d.ts +0 -0
  226. /package/dist/{media → src/media}/mdx/ActionSheet/wikiMdxActionSheet.d.ts +0 -0
  227. /package/dist/{media → src/media}/mdx/Actions/wikiMdxActions.d.ts +0 -0
  228. /package/dist/{media → src/media}/mdx/Anchor/wikiMdxAnchor.d.ts +0 -0
  229. /package/dist/{media → src/media}/mdx/Area/wikiMdxArea.d.ts +0 -0
  230. /package/dist/{media → src/media}/mdx/Arrow/wikiMdxArrow.d.ts +0 -0
  231. /package/dist/{media → src/media}/mdx/Badge/wikiMdxBadge.d.ts +0 -0
  232. /package/dist/{media → src/media}/mdx/Bars/wikiMdxBars.d.ts +0 -0
  233. /package/dist/{media → src/media}/mdx/Block/wikiMdxBlock.d.ts +0 -0
  234. /package/dist/{media → src/media}/mdx/Button/wikiMdxButton.d.ts +0 -0
  235. /package/dist/{media → src/media}/mdx/Cell/wikiMdxCell.d.ts +0 -0
  236. /package/dist/{media → src/media}/mdx/Checkbox/wikiMdxCheckbox.d.ts +0 -0
  237. /package/dist/{media → src/media}/mdx/Chip/wikiMdxChip.d.ts +0 -0
  238. /package/dist/{media → src/media}/mdx/ChipGroup/wikiMdxChipGroup.d.ts +0 -0
  239. /package/dist/{media → src/media}/mdx/ClientOnly/wikiMdxClientOnly.d.ts +0 -0
  240. /package/dist/{media → src/media}/mdx/Container/wikiMdxContainer.d.ts +0 -0
  241. /package/dist/{media → src/media}/mdx/Dialog/wikiMdxDialog.d.ts +0 -0
  242. /package/dist/{media → src/media}/mdx/Dummy/wikiMdxDummy.d.ts +0 -0
  243. /package/dist/{media → src/media}/mdx/Field/wikiMdxField.d.ts +0 -0
  244. /package/dist/{media → src/media}/mdx/FieldCounter/wikiMdxFieldCounter.d.ts +0 -0
  245. /package/dist/{media → src/media}/mdx/FieldLabel/wikiMdxFieldLabel.d.ts +0 -0
  246. /package/dist/{media → src/media}/mdx/FieldMessage/wikiMdxFieldMessage.d.ts +0 -0
  247. /package/dist/{media → src/media}/mdx/Grid/wikiMdxGrid.d.ts +0 -0
  248. /package/dist/{media → src/media}/mdx/GridItem/wikiMdxGridItem.d.ts +0 -0
  249. /package/dist/{media → src/media}/mdx/Group/wikiMdxGroup.d.ts +0 -0
  250. /package/dist/{media → src/media}/mdx/Header/wikiMdxHeader.d.ts +0 -0
  251. /package/dist/{media → src/media}/mdx/HorizontalScroll/wikiMdxHorizontalScroll.d.ts +0 -0
  252. /package/dist/{media → src/media}/mdx/Icon/wikiMdxIcon.d.ts +0 -0
  253. /package/dist/{media → src/media}/mdx/Image/wikiMdxImage.d.ts +0 -0
  254. /package/dist/{media → src/media}/mdx/Input/wikiMdxInput.d.ts +0 -0
  255. /package/dist/{media → src/media}/mdx/List/wikiMdxList.d.ts +0 -0
  256. /package/dist/{media → src/media}/mdx/ListGroup/wikiMdxListGroup.d.ts +0 -0
  257. /package/dist/{media → src/media}/mdx/ListItem/wikiMdxListItem.d.ts +0 -0
  258. /package/dist/{media → src/media}/mdx/ListMenu/wikiMdxListMenu.d.ts +0 -0
  259. /package/dist/{media → src/media}/mdx/Mask/wikiMdxMask.d.ts +0 -0
  260. /package/dist/{media → src/media}/mdx/Menu/wikiMdxMenu.d.ts +0 -0
  261. /package/dist/{media → src/media}/mdx/Modal/wikiMdxModal.d.ts +0 -0
  262. /package/dist/{media → src/media}/mdx/MotionAxis/wikiMdxMotionAxis.d.ts +0 -0
  263. /package/dist/{media → src/media}/mdx/MotionTransform/wikiMdxMotionTransform.d.ts +0 -0
  264. /package/dist/{media → src/media}/mdx/Page/wikiMdxPage.d.ts +0 -0
  265. /package/dist/{media → src/media}/mdx/PageArea/wikiMdxPageArea.d.ts +0 -0
  266. /package/dist/{media → src/media}/mdx/Progress/wikiMdxProgress.d.ts +0 -0
  267. /package/dist/{media → src/media}/mdx/Ripple/wikiMdxRipple.d.ts +0 -0
  268. /package/dist/{media → src/media}/mdx/Scrollbar/wikiMdxScrollbar.d.ts +0 -0
  269. /package/dist/{media → src/media}/mdx/Section/wikiMdxSection.d.ts +0 -0
  270. /package/dist/{media → src/media}/mdx/Select/wikiMdxSelect.d.ts +0 -0
  271. /package/dist/{media → src/media}/mdx/SelectValue/wikiMdxSelectValue.d.ts +0 -0
  272. /package/dist/{media → src/media}/mdx/Skeleton/wikiMdxSkeleton.d.ts +0 -0
  273. /package/dist/{media → src/media}/mdx/Snackbar/wikiMdxSnackbar.d.ts +0 -0
  274. /package/dist/{media → src/media}/mdx/SnackbarItem/wikiMdxSnackbarItem.d.ts +0 -0
  275. /package/dist/{media → src/media}/mdx/TabItem/wikiMdxTabItem.d.ts +0 -0
  276. /package/dist/{media → src/media}/mdx/Tabs/wikiMdxTabs.d.ts +0 -0
  277. /package/dist/{media → src/media}/mdx/TabsNavigation/wikiMdxTabsNavigation.d.ts +0 -0
  278. /package/dist/{media → src/media}/mdx/Textarea/wikiMdxTextarea.d.ts +0 -0
  279. /package/dist/{media → src/media}/mdx/TextareaAutosize/wikiMdxTextareaAutosize.d.ts +0 -0
  280. /package/dist/{media → src/media}/mdx/Tooltip/wikiMdxTooltip.d.ts +0 -0
  281. /package/dist/{media → src/media}/mdx/Window/wikiMdxWindow.d.ts +0 -0
  282. /package/dist/{media → src/media}/mdx/event/wikiMdxEvent.d.ts +0 -0
  283. /package/dist/{media → src/media}/mdx/expose/wikiMdxExpose.d.ts +0 -0
  284. /package/dist/{media → src/media}/mdx/slot/wikiMdxSlot.d.ts +0 -0
  285. /package/dist/{media → src/media}/mdx/style/wikiMdxStyle.d.ts +0 -0
  286. /package/dist/{media → src/media}/mdx/value/wikiMdxValue.d.ts +0 -0
  287. /package/dist/{media → src/media}/mdx/wikiMdx.d.ts +0 -0
  288. /package/dist/{media → src/media}/props/wiki.d.ts +0 -0
  289. /package/dist/{media → src/media}/props/wikiActions.d.ts +0 -0
  290. /package/dist/{media → src/media}/props/wikiActionsInclude.d.ts +0 -0
  291. /package/dist/{media → src/media}/props/wikiAnchor.d.ts +0 -0
  292. /package/dist/{media → src/media}/props/wikiAria.d.ts +0 -0
  293. /package/dist/{media → src/media}/props/wikiArrow.d.ts +0 -0
  294. /package/dist/{media → src/media}/props/wikiArrowInclude.d.ts +0 -0
  295. /package/dist/{media → src/media}/props/wikiAttributes.d.ts +0 -0
  296. /package/dist/{media → src/media}/props/wikiBadge.d.ts +0 -0
  297. /package/dist/{media → src/media}/props/wikiBars.d.ts +0 -0
  298. /package/dist/{media → src/media}/props/wikiBarsInclude.d.ts +0 -0
  299. /package/dist/{media → src/media}/props/wikiButton.d.ts +0 -0
  300. /package/dist/{media → src/media}/props/wikiCheckbox.d.ts +0 -0
  301. /package/dist/{media → src/media}/props/wikiChip.d.ts +0 -0
  302. /package/dist/{media → src/media}/props/wikiChipGroup.d.ts +0 -0
  303. /package/dist/{media → src/media}/props/wikiDialog.d.ts +0 -0
  304. /package/dist/{media → src/media}/props/wikiField.d.ts +0 -0
  305. /package/dist/{media → src/media}/props/wikiFieldCounterInclude.d.ts +0 -0
  306. /package/dist/{media → src/media}/props/wikiForm.d.ts +0 -0
  307. /package/dist/{media → src/media}/props/wikiGridItem.d.ts +0 -0
  308. /package/dist/{media → src/media}/props/wikiHook.d.ts +0 -0
  309. /package/dist/{media → src/media}/props/wikiIcon.d.ts +0 -0
  310. /package/dist/{media → src/media}/props/wikiIconInclude.d.ts +0 -0
  311. /package/dist/{media → src/media}/props/wikiImage.d.ts +0 -0
  312. /package/dist/{media → src/media}/props/wikiInformation.d.ts +0 -0
  313. /package/dist/{media → src/media}/props/wikiInput.d.ts +0 -0
  314. /package/dist/{media → src/media}/props/wikiList.d.ts +0 -0
  315. /package/dist/{media → src/media}/props/wikiListItem.d.ts +0 -0
  316. /package/dist/{media → src/media}/props/wikiMask.d.ts +0 -0
  317. /package/dist/{media → src/media}/props/wikiMaskInclude.d.ts +0 -0
  318. /package/dist/{media → src/media}/props/wikiMenu.d.ts +0 -0
  319. /package/dist/{media → src/media}/props/wikiMotionAxis.d.ts +0 -0
  320. /package/dist/{media → src/media}/props/wikiMotionTransform.d.ts +0 -0
  321. /package/dist/{media → src/media}/props/wikiOption.d.ts +0 -0
  322. /package/dist/{media → src/media}/props/wikiProgress.d.ts +0 -0
  323. /package/dist/{media → src/media}/props/wikiPropsTextarea.d.ts +0 -0
  324. /package/dist/{media → src/media}/props/wikiScrollbar.d.ts +0 -0
  325. /package/dist/{media → src/media}/props/wikiSelect.d.ts +0 -0
  326. /package/dist/{media → src/media}/props/wikiSelectValue.d.ts +0 -0
  327. /package/dist/{media → src/media}/props/wikiSnackbar.d.ts +0 -0
  328. /package/dist/{media → src/media}/props/wikiSnackbarItem.d.ts +0 -0
  329. /package/dist/{media → src/media}/props/wikiStatus.d.ts +0 -0
  330. /package/dist/{media → src/media}/props/wikiStyle.d.ts +0 -0
  331. /package/dist/{media → src/media}/props/wikiTabs.d.ts +0 -0
  332. /package/dist/{media → src/media}/props/wikiTabsNavigation.d.ts +0 -0
  333. /package/dist/{media → src/media}/props/wikiTechnical.d.ts +0 -0
  334. /package/dist/{media → src/media}/props/wikiText.d.ts +0 -0
  335. /package/dist/{media → src/media}/props/wikiTooltip.d.ts +0 -0
  336. /package/dist/{media → src/media}/props/wikiValue.d.ts +0 -0
  337. /package/dist/{media → src/media}/props/wikiWindow.d.ts +0 -0
  338. /package/dist/{media.d.ts → src/media.d.ts} +0 -0
  339. /package/dist/{shims-mdx.d.ts → src/shims-mdx.d.ts} +0 -0
  340. /package/dist/{storybook.d.ts → src/storybook.d.ts} +0 -0
  341. /package/dist/{types → src/types}/storybookTypes.d.ts +0 -0
  342. /package/dist/{types → src/types}/wikiTypes.d.ts +0 -0
  343. /package/src/media/functional/ui/{wiki-data.en.mdx → wiki/wiki-data.en.mdx} +0 -0
  344. /package/src/media/functional/ui/{wiki-data.ru.mdx → wiki/wiki-data.ru.mdx} +0 -0
  345. /package/src/media/functional/ui/{wiki-data.vi.mdx → wiki/wiki-data.vi.mdx} +0 -0
@@ -0,0 +1,41 @@
1
+ import {Meta} from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/vi/functional/Composables/useApiManagementAsyncRef - Khởi tạo quản lý API bất đồng bộ'/>
4
+
5
+ # `useApiManagementAsyncRef`
6
+
7
+ `useApiManagementAsyncRef` là một wrapper bất đồng bộ cho [`useApiManagementRef`](./useApiManagementRef.vi.mdx), thực hiện khởi tạo yêu cầu ngay lập tức.
8
+
9
+ Khác với `useApiManagementRef` tiêu chuẩn, vốn khởi tạo "lười" (khi truy cập danh sách hoặc dữ liệu lần đầu), phương thức này gọi `initSsr()` ngay lập tức khi được tạo. Điều này làm cho nó trở thành lựa chọn lý tưởng để sử dụng trong môi trường SSR.
10
+
11
+ ## Các tính năng chính
12
+ - **Khởi tạo ngay lập tức** — bắt đầu quá trình khởi tạo GET request ngay khi hook được gọi.
13
+ - **Hỗ trợ SSR** — đảm bảo dữ liệu được tải trên máy chủ trước khi trang được gửi đến máy khách.
14
+ - **Đầy đủ chức năng quản lý** — giữ lại tất cả các tính năng của `useApiManagementRef`, bao gồm formatter, tìm kiếm và mutation.
15
+
16
+ ## Tham số
17
+ Các tham số giống hệt với [`useApiManagementRef`](./useApiManagementRef.vi.mdx):
18
+
19
+ - `propsGet: ApiManagementGet<Return, Type>` — cài đặt GET request chính.
20
+ - `formattersOptions?: FormattersOptions` — quy tắc định dạng.
21
+ - `searchOptions?: ApiManagementSearch<Item, Columns>` — cài đặt tìm kiếm.
22
+ - `postRequest / putRequest / deleteRequest` — cài đặt mutation.
23
+ - `action?: function` — callback sau mutation.
24
+ - `apiInstance?: ApiInstance` — instance của API.
25
+
26
+ ## Giá trị trả về
27
+ Trả về một đối tượng quản lý API. Cấu trúc đối tượng trả về giống hệt với [`useApiManagementRef`](./useApiManagementRef.vi.mdx).
28
+
29
+ ## Ví dụ
30
+
31
+ ```typescript
32
+ import { useApiManagementAsyncRef } from '@dxtmisha/functional'
33
+
34
+ // Khởi tạo (và chuẩn bị dữ liệu SSR) bắt đầu ngay lập tức
35
+ const { list, loading } = useApiManagementAsyncRef(
36
+ {
37
+ path: 'api/products',
38
+ skeleton: () => Array(3).fill({ id: 0, title: 'Đang tải...' })
39
+ }
40
+ )
41
+ ```
@@ -30,9 +30,15 @@ A powerful composable for comprehensive API request orchestration. It manages da
30
30
  - `isSearch: ComputedRef<boolean>` — whether a search query is currently active.
31
31
  - `search: Ref<string>` — reactive search string (Proxy to the provided `searchOptions.value`).
32
32
  - `sendPost / sendPut / sendDelete: (request?: ApiFetch['request']) => Promise<any>` — methods to execute mutations.
33
+ - `init: () => void` — method for explicit manual initialization of request and observation.
34
+ - `initSsr: () => void` — method for server-side initialization (SSR).
33
35
  - `reset: () => Promise<void>` — forces a manual restart/refresh of the main GET request.
34
36
  - `abort: () => void` — aborts the ongoing network request.
35
37
 
38
+ ## Async Version
39
+
40
+ For cases where immediate (non-lazy) initialization is required (e.g., for SSR), use [**`useApiManagementAsyncRef`**](./useApiManagementAsyncRef.en.mdx). It automatically calls `initSsr()` upon creation.
41
+
36
42
  ## Generic Constraints
37
43
 
38
44
  - `Return extends ApiManagementValue` — logic model for data returned by the API.
@@ -61,6 +67,12 @@ A powerful composable for comprehensive API request orchestration. It manages da
61
67
  - This triggers a data reload and updates the entire list. Thus, after deleting a row or adding a new one, your list always remains up to date without writing extra code.
62
68
  6. **Parameter Reactivity**: If the `path` or `options` (in `propsGet`) are reactive (Vue Ref) and you set `reactivity: true`, the hook will watch for changes and automatically reload data when the URL or filtering parameters change.
63
69
 
70
+ ## SSR and Initialization
71
+
72
+ To ensure correct operation of **Server Side Rendering (SSR)**, it is recommended to use the asynchronous version [**`useApiManagementAsyncRef`**](./useApiManagementAsyncRef.en.mdx). It automatically initializes the GET request for pre-fetching on the server.
73
+
74
+ If you are using the standard `useApiManagementRef`, you can manually include it in the SSR cycle by calling `initSsr()` in the component's `setup()`. This ensures that the data will be loaded on the server side.
75
+
64
76
  ## Core Architecture
65
77
 
66
78
  `useApiManagementRef` is an orchestrator hook designed to manage standard CRUD views (like data tables). By passing configurations, you get an all-in-one return object that manages loading spinners, searches, formats data for display, handles CRUD actions, and automatically refetches lists.
@@ -30,9 +30,15 @@ import {Meta} from '@storybook/addon-docs/blocks'
30
30
  - `isSearch: ComputedRef<boolean>` — активен ли поиск (есть ли поисковый запрос).
31
31
  - `search: Ref<string>` — реактивная строка поиска (Proxy к переданному `searchOptions.value`).
32
32
  - `sendPost / sendPut / sendDelete: (request?: ApiFetch['request']) => Promise<any>` — методы для вызова мутаций.
33
+ - `init: () => void` — метод для явной ручной инициализации запроса и наблюдения.
34
+ - `initSsr: () => void` — метод для инициализации на стороне сервера (SSR).
33
35
  - `reset: () => Promise<void>` — принудительный перезапуск GET-запроса и очистка текущего состояния.
34
36
  - `abort: () => void` — прерывание текущего сетевого запроса.
35
37
 
38
+ ## Асинхронная версия
39
+
40
+ Для случаев, когда требуется немедленная (не ленивая) инициализация запроса (например, для SSR), используйте [**`useApiManagementAsyncRef`**](./useApiManagementAsyncRef.ru.mdx). Он автоматически вызывает `initSsr()` при создании.
41
+
36
42
  ## Ограничения дженериков (Generic Constraints)
37
43
 
38
44
  - `Return extends ApiManagementValue` — тип данных, возвращаемых API.
@@ -61,6 +67,12 @@ import {Meta} from '@storybook/addon-docs/blocks'
61
67
  - Это приводит к повторной загрузке данных и обновлению всего списка. Таким образом, после удаления строки или добавления новой, ваш список всегда остается актуальным без написания лишнего кода.
62
68
  6. **Реактивность параметров**: Если `path` или `options` (в `propsGet`) являются реактивными (Vue Ref), и вы установили `reactivity: true`, хук будет следить за их изменением и автоматически перезагружать данные при смене URL или параметров фильтрации.
63
69
 
70
+ ## SSR и инициализация
71
+
72
+ Для обеспечения корректной работы **Server Side Rendering (SSR)** рекомендуется использовать асинхронную версию [**`useApiManagementAsyncRef`**](./useApiManagementAsyncRef.ru.mdx). Она автоматически инициализирует запрос для предзагрузки на сервере.
73
+
74
+ Если вы используете стандартный `useApiManagementRef`, вы можете вручную включить его в цикл SSR, вызвав `initSsr()` в `setup()` компонента. Это гарантирует, что данные будут загружены на стороне сервера.
75
+
64
76
  ## Архитектура
65
77
 
66
78
  `useApiManagementRef` — это центральный оркестратор для CRUD-задач. Он объединяет четыре независимых хука (`useApiRef`, `useFormattersRef`, `useSearchRef` и мутации) в единую реактивную систему. Вместо управления десятками разрозненных состояний (загрузка, ошибки, данные, фильтры), разработчик описывает конфигурацию, а хук берет на себя синхронизацию их жизненных циклов.
@@ -61,6 +61,12 @@ Một composable mạnh mẽ để điều phối toàn diện các request API.
61
61
  - Việc này kích hoạt tải lại dữ liệu và cập nhật toàn bộ danh sách. Do đó, sau khi xóa một dòng hoặc thêm mới, danh sách của bạn luôn được cập nhật mà không cần viết thêm mã xử lý thủ công.
62
62
  6. **Tính phản xạ của tham số**: Nếu `path` hoặc `options` (trong `propsGet`) là các biến reactive (Vue Ref) và bạn thiết lập `reactivity: true`, hook sẽ theo dõi sự thay đổi của chúng và tự động tải lại dữ liệu khi URL hoặc tham số lọc thay đổi.
63
63
 
64
+ ## SSR và Khởi tạo
65
+
66
+ Để đảm bảo hoạt động chính xác của **Server Side Rendering (SSR)**, bạn nên sử dụng phiên bản bất đồng bộ [**`useApiManagementAsyncRef`**](./useApiManagementAsyncRef.vi.mdx). Nó tự động khởi tạo GET request để tải trước trên máy chủ.
67
+
68
+ Nếu bạn đang sử dụng `useApiManagementRef` tiêu chuẩn, bạn có thể đưa nó vào chu trình SSR một cách thủ công bằng cách gọi `initSsr()` trong `setup()` của component. Điều này đảm bảo rằng dữ liệu sẽ được tải ở phía máy chủ.
69
+
64
70
  ## Kiến trúc phần lõi
65
71
 
66
72
  `useApiManagementRef` là một hook điều hướng được thiết kế chuyên biệt để quản lý các mẫu màn hình CRUD tiêu chuẩn (ví dụ như data tables). Thông qua cấu hình tham số, bạn sẽ nhận được một đối tượng "tất cả trong một" để quản lý loading spinners, bộ tìm kiếm, chuẩn hóa dữ liệu cho UI, điều khiển thao tác CRUD và tự động tải lại danh sách.
@@ -35,6 +35,7 @@ Methods:
35
35
  - `isReading(): boolean` — A synchronous method that returns the current value of the `reading` flag.
36
36
  - `getItem(): ApiData<R> | undefined` — Method to get the current value of `data` without creating a reactive dependency.
37
37
  - `init(awaitFetch?: boolean): Promise<void>` — Method for explicit request and watcher initialization. Triggered automatically on first access to `data`. If `awaitFetch` is `true`, it waits for the first request to complete.
38
+ - `initSsr(): void` — Method for server-side initialization. Uses `onServerPrefetch` to fetch data during SSR.
38
39
  - `reset(): Promise<void>` — An asynchronous method to force re-run the request. Cancels the current active request (if any) and initiates a new one.
39
40
  - `stop(): void` — Stops watching reactive dependencies and resets `data` to `undefined`.
40
41
  - `abort(): void` — Cancels the current HTTP request via the internal `AbortController`, while keeping already loaded data in `data`.
@@ -47,20 +48,22 @@ Requests and watching mechanisms **are not started** immediately when `useApiRef
47
48
 
48
49
  `setApiRefGlobalConditions(conditions)` — sets a global condition for all `useApiRef` instances. Only works on the first call.
49
50
 
50
- ## SSR and Initialization
51
+ ## SSR (Server-Side Rendering)
51
52
 
52
- The `init` method is designed to manage the primary data loading process, which is critical for the correct operation of **Server Side Rendering (SSR)** and ensuring fast interface rendering on the client.
53
+ To ensure correct operation on the server side (SSR), the **`initSsr()`** method must be used.
53
54
 
54
- ### Mechanism of Operation (Hydration)
55
+ ### The `initSsr()` Method
56
+ When called in a component's `setup()`, it ensures that data is loaded on the server before page rendering and applied instantly on the client.
55
57
 
56
- 1. **Server Side (SSR):**
57
- When the page is first opened, `await init()` should be called in `async setup()`. This forces the server to wait for the API response and render the component with ready-made data. The received data is automatically placed in the state cache, which is then passed to the client.
58
+ ```typescript
59
+ const { data, initSsr } = useApiRef('path/to/api')
58
60
 
59
- 2. **Client Side (Hydration):**
60
- When the browser "hydrates" the page, `useApiRef` first checks for data in the cache. If data is there (received from the server), it is immediately applied to `data`, avoiding a duplicate API request.
61
+ // Call this for SSR support
62
+ initSsr()
63
+ ```
61
64
 
62
- 3. **Dynamic Navigation (Client-side Nav):**
63
- If the user navigates to the page dynamically (without a page reload), the component renders immediately without waiting for `init()` to complete. This allows for instantly showing a **skeleton** or loading indicator (`loading`) while data is being fetched in the background.
65
+ ### Automation via `AsyncRef`
66
+ To avoid calling `initSsr()` manually, you can use the asynchronous version [**`useApiAsyncRef`**](./useApiAsyncRef.en.mdx). It automatically calls `initSsr()` upon creation.
64
67
  ## ApiOptions Object
65
68
 
66
69
  `ApiOptions` — can accept a string with the `method` name (e.g., `'GET'`) or an object of type `ApiFetch`. Fields of the `ApiFetch` object:
@@ -37,6 +37,7 @@ Composable для удобной работы с API-запросами во Vue
37
37
  - `isReading(): boolean` — Синхронный метод, возвращающий текущее значение флага `reading`.
38
38
  - `getItem(): ApiData<R> | undefined` — Метод для получения текущего значения `data` без создания реактивной зависимости.
39
39
  - `init(awaitFetch?: boolean): Promise<void>` — Метод для явной инициализации запроса и watchers. Вызывается автоматически при первом обращении к `data`. Если `awaitFetch` передано как `true`, дожидается выполнения первого запроса.
40
+ - `initSsr(): void` — Метод для инициализации на стороне сервера. Использует `onServerPrefetch` для выполнения запроса во время SSR.
40
41
  - `reset(): Promise<void>` — Асинхронный метод для принудительного перезапуска запроса. Отменяет текущий активный запрос (если есть) и инициирует новый.
41
42
  - `stop(): void` — Останавливает наблюдение за реактивными зависимостями и сбрасывает `data` в `undefined`.
42
43
  - `abort(): void` — Вызывает отмену текущего HTTP-запроса через внутренний `AbortController`, сохраняя при этом уже загруженные данные в `data`.
@@ -49,20 +50,22 @@ Composable для удобной работы с API-запросами во Vue
49
50
 
50
51
  `setApiRefGlobalConditions(conditions)` — устанавливает глобальное условие для всех экземпляров `useApiRef`. Работает только один раз.
51
52
 
52
- ## SSR и инициализация
53
+ ## SSR (Server-Side Rendering)
53
54
 
54
- Метод `init` предназначен для управления процессом первичной загрузки данных, что критически важно для корректной работы **Server Side Rendering (SSR)** и обеспечения быстрой отрисовки интерфейса на клиенте.
55
+ Для корректной работы на стороне сервера (SSR) необходимо использовать метод **`initSsr()`**.
55
56
 
56
- ### Механика работы (Hydration)
57
+ ### Метод `initSsr()`
58
+ При вызове в `setup()` компонента гарантирует, что данные будут загружены на сервере перед рендерингом страницы, а на клиенте подставятся мгновенно.
57
59
 
58
- 1. **На стороне сервера (SSR):**
59
- При первом открытии страницы необходимо вызвать `await init()` в `async setup()`. Это заставит сервер дождаться ответа от API и отрендерить компонент уже с готовыми данными. Полученные данные автоматически попадают в кэш состояния, который передается клиенту.
60
+ ```typescript
61
+ const { data, initSsr } = useApiRef('path/to/api')
60
62
 
61
- 2. **На стороне клиента (Hydration):**
62
- Когда браузер "оживляет" (гидрирует) страницу, `useApiRef` первым делом проверяет наличие данных в кэше. Если данные там есть (пришли с сервера), они мгновенно подставляются в `data`, исключая повторный запрос к API.
63
+ // Вызываем для поддержки SSR
64
+ initSsr()
65
+ ```
63
66
 
64
- 3. **Динамическая навигация (Client-side Nav):**
65
- Если пользователь переходит на страницу динамически (без перезагрузки), компонент рендерится сразу, не дожидаясь завершения `init()`. Это позволяет мгновенно показать **скелетон (skeleton)** или индикатор загрузки (`loading`), пока данные подгружаются в фоновом режиме.
67
+ ### Автоматизация через `AsyncRef`
68
+ Чтобы не вызывать `initSsr()` вручную, можно использовать асинхронную версию композабла — [**`useApiAsyncRef`**](./useApiAsyncRef.ru.mdx). Он автоматически вызывает `initSsr()` при создании.
66
69
  ## Объект ApiOptions
67
70
 
68
71
  `ApiOptions` — может принимать строку с названием `method` (например, `'GET'`) или объект типа `ApiFetch`. Поля объекта `ApiFetch`:
@@ -49,20 +49,22 @@ Yêu cầu và cơ chế theo dõi thay đổi **không được bắt đầu**
49
49
 
50
50
  `setApiRefGlobalConditions(conditions)` — thiết lập điều kiện toàn cục cho tất cả các instance `useApiRef`. Chỉ có hiệu lực một lần.
51
51
 
52
- ## SSR Khởi tạo
52
+ ## SSR (Server-Side Rendering)
53
53
 
54
- Phương thức `init` được thiết kế để quản lý quá trình tải dữ liệu ban đầu, điều này cực kỳ quan trọng đối với hoạt động chính xác của **Server Side Rendering (SSR)** đảm bảo giao diện được hiển thị nhanh chóng trên client.
54
+ Để đảm bảo hoạt động chính xác phía máy chủ (SSR), phương thức **`initSsr()`** phải được sử dụng.
55
55
 
56
- ### chế hoạt động (Hydration)
56
+ ### Phương thức `initSsr()`
57
+ Khi được gọi trong `setup()` của một component, nó đảm bảo dữ liệu được tải trên máy chủ trước khi render trang và được áp dụng ngay lập tức ở phía máy khách.
57
58
 
58
- 1. **Phía Máy chủ (SSR):**
59
- Khi trang được mở lần đầu tiên, hãy gọi `await init()` trong `async setup()`. Điều này buộc máy chủ phải đợi phản hồi từ API và render component với dữ liệu đã sẵn sàng. Dữ liệu nhận được sẽ tự động được đưa vào bộ nhớ đệm trạng thái (cache), sau đó được chuyển đến client.
59
+ ```typescript
60
+ const { data, initSsr } = useApiRef('path/to/api')
60
61
 
61
- 2. **Phía Máy khách (Hydration):**
62
- Khi trình duyệt "kích hoạt" (hydrate) trang, `useApiRef` trước tiên sẽ kiểm tra dữ liệu trong bộ nhớ đệm. Nếu dữ liệu có ở đó (được nhận từ máy chủ), chúng sẽ được áp dụng ngay lập tức vào `data`, tránh việc lặp lại yêu cầu API.
62
+ // Gọi phương thức này để hỗ trợ SSR
63
+ initSsr()
64
+ ```
63
65
 
64
- 3. **Điều hướng Động (Client-side Nav):**
65
- Nếu người dùng điều hướng đến trang một cách linh hoạt (không tải lại trang), component sẽ render ngay lập tức không cần đợi `init()` hoàn thành. Điều này cho phép hiển thị ngay lập tức **skeleton** hoặc chỉ báo đang tải (`loading`) trong khi dữ liệu đang được tải ở chế độ nền.
66
+ ### Tự động hóa qua `AsyncRef`
67
+ Để tránh việc gọi `initSsr()` thủ công, bạn thể sử dụng phiên bản bất đồng bộ — [**`useApiAsyncRef`**](./useApiAsyncRef.vi.mdx). tự động gọi `initSsr()` khi được tạo.
66
68
  ## Đối tượng ApiOptions
67
69
 
68
70
  `ApiOptions` — có thể nhận một chuỗi tên `method` (ví dụ: `'GET'`) hoặc một đối tượng kiểu `ApiFetch`. Các trường của đối tượng `ApiFetch`:
@@ -10,11 +10,12 @@ The `Api` class is a central utility for making HTTP requests. It provides a sim
10
10
 
11
11
  The class provides a comprehensive set of tools for managing network communication:
12
12
  - **CRUD Methods** — execution of `GET`, `POST`, `PUT`, `PATCH`, `DELETE` requests.
13
- - **Global Configuration** — setting up base URLs, headers, and parameters.
13
+ - **Global Configuration** — setting up base URLs, origins, headers, and parameters.
14
14
  - **Lifecycle Hooks** — handling events before and after the request (e.g., for Refresh Token).
15
15
  - **Hydration (SSR)** — transferring data from server to client to prevent duplicate requests.
16
16
  - **Caching** — saving responses in memory or external storage (LocalStorage).
17
17
  - **Response Emulation** — creating mock data for development and testing.
18
+ - **Automatic Localization** — replacement of `{locale}`, `{country}`, and `{language}` markers in request paths.
18
19
  - **Loading and Error Management** — integration with global indicator components and error centers.
19
20
 
20
21
  ## Basic Usage
@@ -40,7 +41,11 @@ You can configure the API behavior globally, for example, during application ini
40
41
 
41
42
  ```javascript
42
43
  // Set the base URL for all relative paths
43
- Api.setUrl('https://api.example.com/v1/')
44
+ Api.setUrl('/api/')
45
+
46
+ // Set the origin (protocol and domain) for the base URL
47
+ // If urlRoot starts with '/', the origin will be prepended to it
48
+ Api.setOrigin('https://api.example.com')
44
49
 
45
50
  // Add common headers (e.g., an authorization token)
46
51
  Api.setHeaders({
@@ -51,6 +56,38 @@ Api.setHeaders({
51
56
  Api.setRequestDefault({
52
57
  app_version: '1.0.0'
53
58
  })
59
+
60
+ // Check if the server is running on localhost
61
+ if (Api.isLocalhost()) {
62
+ console.log('Running locally')
63
+ }
64
+ ```
65
+
66
+ ### setConfig Method
67
+
68
+ Allows you to set all main settings with a single object.
69
+
70
+ ```javascript
71
+ Api.setConfig({
72
+ urlRoot: '/api/',
73
+ origin: 'https://api.example.com',
74
+ headers: { 'Authorization': 'Bearer ...' },
75
+ timeout: 5000,
76
+ devMode: true
77
+ })
78
+ ```
79
+
80
+ ## URL Handling
81
+
82
+ When forming the final URL, the class automatically replaces special markers with current values from the localization settings (`Geo`):
83
+ - `{locale}` — current locale (e.g., `en-US`).
84
+ - `{country}` — current country (e.g., `us`).
85
+ - `{language}` — current language (e.g., `en`).
86
+
87
+ ```javascript
88
+ // If the current locale is 'en-US', the final path will be '/api/en-US/users'
89
+ const data = await Api.get({ path: '{locale}/users' })
90
+ ```
54
91
  ```
55
92
 
56
93
  ## Lifecycle Hooks
@@ -10,11 +10,12 @@ import {Meta} from '@storybook/addon-docs/blocks'
10
10
 
11
11
  Класс предоставляет полный набор инструментов для управления сетевым взаимодействием:
12
12
  - **CRUD методы** — выполнение `GET`, `POST`, `PUT`, `PATCH`, `DELETE` запросов.
13
- - **Глобальная конфигурация** — настройка базовых URL, заголовков и параметров.
13
+ - **Глобальная конфигурация** — настройка базовых URL, источников (origin), заголовков и параметров.
14
14
  - **Хуки жизненного цикла** — обработка событий до и после запроса (например, для Refresh Token).
15
15
  - **Гидратация (SSR)** — передача данных от сервера к клиенту для предотвращения дублирования запросов.
16
16
  - **Кэширование** — сохранение ответов в памяти или внешнем хранилище (LocalStorage).
17
17
  - **Эмуляция ответов** — создание мок-данных для разработки и тестирования.
18
+ - **Автоматическая локализация** — замена меток `{locale}`, `{country}` и `{language}` в путях запросов.
18
19
  - **Управление загрузкой и ошибками** — интеграция с глобальными компонентами индикации и центрами ошибок.
19
20
 
20
21
  ## Базовое использование
@@ -40,7 +41,11 @@ const newUser = await Api.post<User>({
40
41
 
41
42
  ```javascript
42
43
  // Установка базового URL для всех относительных путей
43
- Api.setUrl('https://api.example.com/v1/')
44
+ Api.setUrl('/api/')
45
+
46
+ // Установка источника (протокола и домена) для базового URL
47
+ // Если urlRoot начинается с '/', к нему будет добавлен origin
48
+ Api.setOrigin('https://api.example.com')
44
49
 
45
50
  // Добавление общих заголовков (например, токен авторизации)
46
51
  Api.setHeaders({
@@ -51,6 +56,38 @@ Api.setHeaders({
51
56
  Api.setRequestDefault({
52
57
  app_version: '1.0.0'
53
58
  })
59
+
60
+ // Проверка, работает ли сервер на localhost
61
+ if (Api.isLocalhost()) {
62
+ console.log('Работаем локально')
63
+ }
64
+ ```
65
+
66
+ ### Метод setConfig
67
+
68
+ Позволяет установить все основные настройки одним объектом.
69
+
70
+ ```javascript
71
+ Api.setConfig({
72
+ urlRoot: '/api/',
73
+ origin: 'https://api.example.com',
74
+ headers: { 'Authorization': 'Bearer ...' },
75
+ timeout: 5000,
76
+ devMode: true
77
+ })
78
+ ```
79
+
80
+ ## Работа с URL
81
+
82
+ При формировании итогового URL класс автоматически заменяет специальные метки на текущие значения из настроек локализации (`Geo`):
83
+ - `{locale}` — текущая локаль (например, `ru-RU`).
84
+ - `{country}` — текущая страна (например, `ru`).
85
+ - `{language}` — текущий язык (например, `ru`).
86
+
87
+ ```javascript
88
+ // Если текущая локаль 'ru-RU', итоговый путь будет '/api/ru-RU/users'
89
+ const data = await Api.get({ path: '{locale}/users' })
90
+ ```
54
91
  ```
55
92
 
56
93
  ## Хуки жизненного цикла
@@ -10,11 +10,12 @@ Lớp `Api` là công cụ trung tâm để thực hiện các yêu cầu HTTP.
10
10
 
11
11
  Lớp cung cấp một bộ công cụ toàn diện để quản lý tương tác mạng:
12
12
  - **Các phương thức CRUD** — thực hiện các yêu cầu `GET`, `POST`, `PUT`, `PATCH`, `DELETE`.
13
- - **Cấu hình toàn cục** — thiết lập URL cơ sở, tiêu đề và tham số.
13
+ - **Cấu hình toàn cục** — thiết lập URL cơ sở, nguồn (origin), tiêu đề và tham số.
14
14
  - **Hook vòng đời** — xử lý các sự kiện trước và sau yêu cầu (ví dụ: cho Refresh Token).
15
15
  - **Hydration (SSR)** — chuyển dữ liệu từ máy chủ sang máy khách để ngăn chặn các yêu cầu trùng lặp.
16
16
  - **Bộ nhớ đệm (Caching)** — lưu các phản hồi trong bộ nhớ hoặc bộ nhớ ngoài (LocalStorage).
17
17
  - **Giả lập phản hồi** — tạo dữ liệu giả để phát triển và kiểm thử.
18
+ - **Tự động bản địa hóa** — thay thế các nhãn `{locale}`, `{country}` và `{language}` trong đường dẫn yêu cầu.
18
19
  - **Quản lý tải và lỗi** — tích hợp với các thành phần chỉ báo toàn cục và trung tâm lỗi.
19
20
 
20
21
  ## Cách dùng cơ bản
@@ -40,7 +41,11 @@ Bạn có thể cấu hình hành vi của API trên toàn hệ thống, ví d
40
41
 
41
42
  ```javascript
42
43
  // Đặt URL cơ sở cho tất cả các đường dẫn tương đối
43
- Api.setUrl('https://api.example.com/v1/')
44
+ Api.setUrl('/api/')
45
+
46
+ // Thiết lập nguồn (giao thức và tên miền) cho URL cơ sở
47
+ // Nếu urlRoot bắt đầu bằng '/', origin sẽ được thêm vào trước nó
48
+ Api.setOrigin('https://api.example.com')
44
49
 
45
50
  // Thêm các tiêu đề chung (ví dụ: token xác thực)
46
51
  Api.setHeaders({
@@ -51,6 +56,38 @@ Api.setHeaders({
51
56
  Api.setRequestDefault({
52
57
  app_version: '1.0.0'
53
58
  })
59
+
60
+ // Kiểm tra xem máy chủ có đang chạy trên localhost không
61
+ if (Api.isLocalhost()) {
62
+ console.log('Đang chạy trên máy cục bộ')
63
+ }
64
+ ```
65
+
66
+ ### Phương thức setConfig
67
+
68
+ Cho phép thiết lập tất cả các cài đặt chính bằng một đối tượng duy nhất.
69
+
70
+ ```javascript
71
+ Api.setConfig({
72
+ urlRoot: '/api/',
73
+ origin: 'https://api.example.com',
74
+ headers: { 'Authorization': 'Bearer ...' },
75
+ timeout: 5000,
76
+ devMode: true
77
+ })
78
+ ```
79
+
80
+ ## Xử lý URL
81
+
82
+ Khi tạo URL cuối cùng, lớp sẽ tự động thay thế các nhãn đặc biệt bằng các giá trị hiện tại từ cài đặt bản địa hóa (`Geo`):
83
+ - `{locale}` — locale hiện tại (ví dụ: `vi-VN`).
84
+ - `{country}` — quốc gia hiện tại (ví dụ: `vn`).
85
+ - `{language}` — ngôn ngữ hiện tại (ví dụ: `vi`).
86
+
87
+ ```javascript
88
+ // Nếu locale hiện tại là 'vi-VN', đường dẫn cuối cùng sẽ là '/api/vi-VN/users'
89
+ const data = await Api.get({ path: '{locale}/users' })
90
+ ```
54
91
  ```
55
92
 
56
93
  ## Hook vòng đời
@@ -0,0 +1,27 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/en/nitro-basic/Functions/getInject - Get Injected Value'/>
4
+
5
+ # `getInject`
6
+
7
+ A utility function that safely reads an injected value by name from the current Vue component instance. If there is no active component instance or the value is not provided, it returns `undefined`.
8
+
9
+ **Parameters:**
10
+ - `name: string` — The injection key name.
11
+
12
+ **Returns:**
13
+ `T | undefined` — The injected value if it exists, otherwise `undefined`.
14
+
15
+ ```typescript
16
+ import { provide } from 'vue'
17
+ import { getInject } from '@dxtmisha/nitro-basic'
18
+
19
+ provide('theme', 'dark')
20
+
21
+ // Returns 'dark'
22
+ const theme = getInject<string>('theme')
23
+
24
+ // Returns undefined when the key is missing
25
+ const language = getInject<string>('language')
26
+ ```
27
+
@@ -0,0 +1,27 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/ru/nitro-basic/Functions/getInject - Получение внедренного значения'/>
4
+
5
+ # `getInject`
6
+
7
+ Утилитарная функция, которая безопасно получает внедренное значение по имени из текущего экземпляра Vue-компонента. Если активного экземпляра компонента нет или значение не было предоставлено, функция возвращает `undefined`.
8
+
9
+ **Параметры:**
10
+ - `name: string` — Имя ключа внедрения.
11
+
12
+ **Возвращает:**
13
+ `T | undefined` — Внедренное значение, если оно существует, иначе `undefined`.
14
+
15
+ ```typescript
16
+ import { provide } from 'vue'
17
+ import { getInject } from '@dxtmisha/nitro-basic'
18
+
19
+ provide('theme', 'dark')
20
+
21
+ // Возвращает 'dark'
22
+ const theme = getInject<string>('theme')
23
+
24
+ // Возвращает undefined, если ключ отсутствует
25
+ const language = getInject<string>('language')
26
+ ```
27
+
@@ -0,0 +1,20 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/vi/nitro-basic/Functions/getInject - Lấy giá trị được inject'/>
4
+
5
+ # `getInject`
6
+
7
+ Một hàm tiện ích dùng để lấy an toàn giá trị được inject theo tên từ instance Vue hiện tại. Nếu không có instance component đang hoạt động hoặc giá trị chưa được cung cấp, hàm sẽ trả về `undefined`.
8
+
9
+ **Tham số:**
10
+ - `name: string` — Tên của khóa inject.
11
+
12
+ **Trả về:**
13
+ `T | undefined` — Giá trị được inject nếu tồn tại, ngược lại trả về `undefined`.
14
+
15
+ **Ví dụ sử dụng:**
16
+ - Gọi `getInject<string>('theme')` trong `setup()` để lấy giá trị đã được `provide`.
17
+ - Nếu key không tồn tại hoặc không có component instance hiện tại, kết quả sẽ là `undefined`.
18
+
19
+
20
+
@@ -0,0 +1,52 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/en/# UI Figma/! About the library'/>
4
+
5
+ # UI Figma Ecosystem
6
+
7
+ The `UI Figma` system is a comprehensive infrastructure for developing Figma plugins. It is designed to bridge the gap between the "Code Side" (plugin backend) and the "UI Side" (frontend), providing seamless interaction, reactive data management, and full type safety.
8
+
9
+ The ecosystem is built on a three-tier architecture, where each layer handles a specific part of the plugin lifecycle.
10
+
11
+ ## Three Layers of Interaction
12
+
13
+ ### 1. Communication Core (@dxtmisha/figma)
14
+ The fundamental package that defines interaction protocols. It contains:
15
+ - Message type constants.
16
+ - Shared data types and interfaces.
17
+ - Abstract messenger classes to standardize data exchange.
18
+ - Utilities for routing messages between the UI and the Figma sandbox.
19
+
20
+ ### 2. Plugin Logic (@dxtmisha/figma-code)
21
+ A package running in the Figma execution environment (Sandbox). This is the "brain" of the plugin, with direct access to the Figma API:
22
+ - **Element Analysis**: `FigmaItem` and `FigmaFrame` classes for deep document structure exploration.
23
+ - **Data Persistence**: `FigmaStorage` for working with PluginData (storing data directly in the `.fig` file).
24
+ - **Exporting**: Tools for automated screenshot creation and asset export.
25
+ - **Synchronization**: `FigmaTopLevelFrames` and `FigmaFramesSelected` classes for passing the current document state to the UI.
26
+
27
+ ### 3. Reactive Interface (@dxtmisha/figma-ref)
28
+ A package for developing the user interface using Vue 3. It transforms asynchronous plugin responses into convenient reactive references (composables):
29
+ - **Reactive Stores**: `useFigmaStorage` and `useFigmaClientStorage` for instant data binding between UI and Figma storage.
30
+ - **Observers**: `useFigmaUiFrames` for automatic updates of the available frame list.
31
+ - **Selection Management**: `useFigmaUiSelected` for linking UI-selected elements with Figma's active selection.
32
+
33
+ ## System Features
34
+
35
+ **Seamless Interaction**
36
+ Developers no longer need to manually manage `postMessage` calls and event listeners. The system handles routing and type validation automatically.
37
+
38
+ **Out-of-the-box Reactivity**
39
+ Using the Vue Composition API allows you to build plugin interfaces as easily as standard web applications, with data automatically persisting in the Figma document.
40
+
41
+ **Type Safety**
42
+ All messages and data structures are strictly typed, eliminating errors when passing data between isolated environments (UI and Sandbox).
43
+
44
+ ## Why Use This Ecosystem?
45
+
46
+ - **Development Speed**: Ready-made foundation for typical tasks (selection, settings, screenshots).
47
+ - **Clean Architecture**: Clear separation of concerns between business logic and the user interface.
48
+ - **Scalability**: Easy to add new features thanks to the modular structure and the Messenger pattern.
49
+
50
+ ## Git
51
+
52
+ [https://github.com/dxtmisha/dxt-ui/tree/main/packages/figma](https://github.com/dxtmisha/dxt-ui/tree/main/packages/figma)
@@ -0,0 +1,52 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/ru/# UI Figma/! О библиотеке'/>
4
+
5
+ # Экосистема UI Figma
6
+
7
+ Система `UI Figma` представляет собой комплексную инфраструктуру для разработки плагинов Figma. Она разработана для устранения барьера между «стороной кода» (backend плагина) и «стороной UI» (frontend), обеспечивая бесшовное взаимодействие, реактивное управление данными и полную типизацию.
8
+
9
+ В основе системы лежит трехуровневая архитектура, где каждый уровень отвечает за свою часть жизненного цикла плагина.
10
+
11
+ ## Три уровня взаимодействия
12
+
13
+ ### 1. Основа связи (@dxtmisha/figma)
14
+ Фундаментальный пакет, определяющий протоколы взаимодействия. Содержит:
15
+ - Константы типов сообщений.
16
+ - Общие типы данных и интерфейсы.
17
+ - Абстрактные классы мессенджеров для стандартизации обмена данными.
18
+ - Утилиты для маршрутизации сообщений между UI и песочницей Figma.
19
+
20
+ ### 2. Логика плагина (@dxtmisha/figma-code)
21
+ Пакет, работающий в среде выполнения Figma (Sandbox). Это «мозг» плагина, имеющий прямой доступ к Figma API:
22
+ - **Анализ элементов**: Классы `FigmaItem` и `FigmaFrame` для глубокого исследования структуры документа.
23
+ - **Хранение данных**: `FigmaStorage` для работы с PluginData (хранение данных в самом файле документа).
24
+ - **Экспорт**: Инструменты для автоматизированного создания скриншотов и экспорта ресурсов.
25
+ - **Синхронизация**: Классы `FigmaTopLevelFrames` и `FigmaFramesSelected` для передачи актуального состояния документа в UI.
26
+
27
+ ### 3. Реактивный интерфейс (@dxtmisha/figma-ref)
28
+ Пакет для разработки пользовательского интерфейса на Vue 3. Он превращает асинхронные ответы от плагина в удобные реактивные ссылки (composables):
29
+ - **Реактивные хранилища**: `useFigmaStorage` и `useFigmaClientStorage` для мгновенной связи данных UI с хранилищем Figma.
30
+ - **Наблюдатели**: `useFigmaUiFrames` для автоматического обновления списка доступных фреймов.
31
+ - **Управление выбором**: `useFigmaUiSelected` для связи выделенных элементов в UI со списком выбора в плагине.
32
+
33
+ ## Возможности системы
34
+
35
+ **Бесшовное взаимодействие**
36
+ Разработчику больше не нужно вручную прописывать `postMessage` и слушатели событий. Система берет на себя маршрутизацию и проверку типов.
37
+
38
+ **Реактивность «из коробки»**
39
+ Использование Vue Composition API позволяет строить интерфейс плагина так же просто, как обычное веб-приложение, при этом данные будут автоматически сохраняться в документе Figma.
40
+
41
+ **Типобезопасность**
42
+ Все сообщения и структуры данных строго типизированы, что исключает ошибки при передаче данных между изолированными средами (UI и Sandbox).
43
+
44
+ ## Преимущества использования
45
+
46
+ - **Ускорение разработки**: Готовая база для типичных задач (выделение, чтение настроек, скриншоты).
47
+ - **Чистая архитектура**: Четкое разделение ответственности между бизнес-логикой плагина и его интерфейсом.
48
+ - **Масштабируемость**: Легкое добавление новых функций за счет модульной структуры и использования паттерна Messenger.
49
+
50
+ ## Git
51
+
52
+ [https://github.com/dxtmisha/dxt-ui/tree/main/packages/figma](https://github.com/dxtmisha/dxt-ui/tree/main/packages/figma)