@dxtmisha/wiki 0.57.3 → 0.57.4

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 (151) hide show
  1. package/dist/{defineProperty-3CuEayIP.js → defineProperty-Dcl1xgfx.js} +4 -4
  2. package/dist/library.js +1 -1
  3. package/dist/storybook.js +1 -1
  4. package/package.json +1 -1
  5. package/src/media/functional/figma/classes/FigmaPostAbstract/FigmaPostAbstract.en.mdx +46 -0
  6. package/src/media/functional/figma/classes/FigmaPostAbstract/FigmaPostAbstract.ru.mdx +46 -0
  7. package/src/media/functional/figma/classes/FigmaPostAbstract/FigmaPostAbstract.vi.mdx +46 -0
  8. package/src/media/functional/figma/classes/FigmaPostCode/FigmaPostCode.en.mdx +3 -23
  9. package/src/media/functional/figma/classes/FigmaPostCode/FigmaPostCode.ru.mdx +3 -23
  10. package/src/media/functional/figma/classes/FigmaPostCode/FigmaPostCode.vi.mdx +3 -23
  11. package/src/media/functional/figma/functions/fetchClientStorage/fetchClientStorage.en.mdx +46 -0
  12. package/src/media/functional/figma/functions/fetchClientStorage/fetchClientStorage.ru.mdx +46 -0
  13. package/src/media/functional/figma/functions/fetchClientStorage/fetchClientStorage.vi.mdx +46 -0
  14. package/src/media/functional/figma/functions/fetchFrameSelection/fetchFrameSelection.en.mdx +34 -0
  15. package/src/media/functional/figma/functions/fetchFrameSelection/fetchFrameSelection.ru.mdx +34 -0
  16. package/src/media/functional/figma/functions/fetchFrameSelection/fetchFrameSelection.vi.mdx +34 -0
  17. package/src/media/functional/figma/functions/fetchFrameStyles/fetchFrameStyles.en.mdx +49 -0
  18. package/src/media/functional/figma/functions/fetchFrameStyles/fetchFrameStyles.ru.mdx +49 -0
  19. package/src/media/functional/figma/functions/fetchFrameStyles/fetchFrameStyles.vi.mdx +49 -0
  20. package/src/media/functional/figma/functions/fetchFramesSelected/fetchFramesSelected.en.mdx +19 -8
  21. package/src/media/functional/figma/functions/fetchFramesSelected/fetchFramesSelected.ru.mdx +18 -7
  22. package/src/media/functional/figma/functions/fetchFramesSelected/fetchFramesSelected.vi.mdx +19 -8
  23. package/src/media/functional/figma/functions/fetchStorage/fetchStorage.en.mdx +42 -0
  24. package/src/media/functional/figma/functions/fetchStorage/fetchStorage.ru.mdx +42 -0
  25. package/src/media/functional/figma/functions/fetchStorage/fetchStorage.vi.mdx +42 -0
  26. package/src/media/functional/figma/functions/fetchTopLevelFrames/fetchTopLevelFrames.en.mdx +29 -7
  27. package/src/media/functional/figma/functions/fetchTopLevelFrames/fetchTopLevelFrames.ru.mdx +28 -6
  28. package/src/media/functional/figma/functions/fetchTopLevelFrames/fetchTopLevelFrames.vi.mdx +29 -7
  29. package/src/media/functional/figma/functions/sendClientStorage/sendClientStorage.en.mdx +29 -0
  30. package/src/media/functional/figma/functions/sendClientStorage/sendClientStorage.ru.mdx +29 -0
  31. package/src/media/functional/figma/functions/sendClientStorage/sendClientStorage.vi.mdx +29 -0
  32. package/src/media/functional/figma/functions/sendFrameSelection/sendFrameSelection.en.mdx +28 -0
  33. package/src/media/functional/figma/functions/sendFrameSelection/sendFrameSelection.ru.mdx +28 -0
  34. package/src/media/functional/figma/functions/sendFrameSelection/sendFrameSelection.vi.mdx +28 -0
  35. package/src/media/functional/figma/functions/sendFrameStyles/sendFrameStyles.en.mdx +40 -0
  36. package/src/media/functional/figma/functions/sendFrameStyles/sendFrameStyles.ru.mdx +40 -0
  37. package/src/media/functional/figma/functions/sendFrameStyles/sendFrameStyles.vi.mdx +40 -0
  38. package/src/media/functional/figma/functions/sendFramesSelected/sendFramesSelected.en.mdx +29 -0
  39. package/src/media/functional/figma/functions/sendFramesSelected/sendFramesSelected.ru.mdx +29 -0
  40. package/src/media/functional/figma/functions/sendFramesSelected/sendFramesSelected.vi.mdx +29 -0
  41. package/src/media/functional/figma/functions/sendStorage/sendStorage.en.mdx +30 -0
  42. package/src/media/functional/figma/functions/sendStorage/sendStorage.ru.mdx +30 -0
  43. package/src/media/functional/figma/functions/sendStorage/sendStorage.vi.mdx +30 -0
  44. package/src/media/functional/figma-code/classes/FigmaClientStorage/FigmaClientStorage.en.mdx +64 -0
  45. package/src/media/functional/figma-code/classes/FigmaClientStorage/FigmaClientStorage.ru.mdx +64 -0
  46. package/src/media/functional/figma-code/classes/FigmaClientStorage/FigmaClientStorage.vi.mdx +64 -0
  47. package/src/media/functional/figma-code/classes/FigmaFrame/FigmaFrame.en.mdx +168 -35
  48. package/src/media/functional/figma-code/classes/FigmaFrame/FigmaFrame.ru.mdx +168 -35
  49. package/src/media/functional/figma-code/classes/FigmaFrame/FigmaFrame.vi.mdx +168 -35
  50. package/src/media/functional/figma-code/classes/FigmaFramesSelected/FigmaFramesSelected.en.mdx +23 -69
  51. package/src/media/functional/figma-code/classes/FigmaFramesSelected/FigmaFramesSelected.ru.mdx +22 -68
  52. package/src/media/functional/figma-code/classes/FigmaFramesSelected/FigmaFramesSelected.vi.mdx +23 -69
  53. package/src/media/functional/figma-code/classes/FigmaItem/FigmaItem.en.mdx +79 -56
  54. package/src/media/functional/figma-code/classes/FigmaItem/FigmaItem.ru.mdx +79 -56
  55. package/src/media/functional/figma-code/classes/FigmaItem/FigmaItem.vi.mdx +79 -56
  56. package/src/media/functional/figma-code/classes/FigmaPluginMessenger/FigmaPluginMessenger.en.mdx +18 -48
  57. package/src/media/functional/figma-code/classes/FigmaPluginMessenger/FigmaPluginMessenger.ru.mdx +18 -48
  58. package/src/media/functional/figma-code/classes/FigmaPluginMessenger/FigmaPluginMessenger.vi.mdx +18 -48
  59. package/src/media/functional/figma-code/classes/FigmaStorage/FigmaStorage.en.mdx +22 -67
  60. package/src/media/functional/figma-code/classes/FigmaStorage/FigmaStorage.ru.mdx +22 -67
  61. package/src/media/functional/figma-code/classes/FigmaStorage/FigmaStorage.vi.mdx +22 -67
  62. package/src/media/functional/figma-code/classes/FigmaStorageData/FigmaStorageData.en.mdx +57 -0
  63. package/src/media/functional/figma-code/classes/FigmaStorageData/FigmaStorageData.ru.mdx +57 -0
  64. package/src/media/functional/figma-code/classes/FigmaStorageData/FigmaStorageData.vi.mdx +57 -0
  65. package/src/media/functional/figma-code/classes/FigmaTopLevelFrames/FigmaTopLevelFrames.en.mdx +24 -27
  66. package/src/media/functional/figma-code/classes/FigmaTopLevelFrames/FigmaTopLevelFrames.ru.mdx +23 -26
  67. package/src/media/functional/figma-code/classes/FigmaTopLevelFrames/FigmaTopLevelFrames.vi.mdx +24 -27
  68. package/src/media/functional/figma-code/functions/getFigmaFrameById/getFigmaFrameById.en.mdx +28 -0
  69. package/src/media/functional/figma-code/functions/getFigmaFrameById/getFigmaFrameById.ru.mdx +28 -0
  70. package/src/media/functional/figma-code/functions/getFigmaFrameById/getFigmaFrameById.vi.mdx +28 -0
  71. package/src/media/functional/figma-code/functions/getFigmaItemById/getFigmaItemById.en.mdx +43 -0
  72. package/src/media/functional/figma-code/functions/getFigmaItemById/getFigmaItemById.ru.mdx +43 -0
  73. package/src/media/functional/figma-code/functions/getFigmaItemById/getFigmaItemById.vi.mdx +43 -0
  74. package/src/media/functional/figma-code/functions/getFigmaItemByIdOrRoot/getFigmaItemByIdOrRoot.en.mdx +30 -0
  75. package/src/media/functional/figma-code/functions/getFigmaItemByIdOrRoot/getFigmaItemByIdOrRoot.ru.mdx +30 -0
  76. package/src/media/functional/figma-code/functions/getFigmaItemByIdOrRoot/getFigmaItemByIdOrRoot.vi.mdx +30 -0
  77. package/src/media/functional/figma-code/functions/makeFigmaFrameSelection/makeFigmaFrameSelection.en.mdx +21 -0
  78. package/src/media/functional/figma-code/functions/makeFigmaFrameSelection/makeFigmaFrameSelection.ru.mdx +21 -0
  79. package/src/media/functional/figma-code/functions/makeFigmaFrameSelection/makeFigmaFrameSelection.vi.mdx +21 -0
  80. package/src/media/functional/figma-code/functions/makeFigmaTexts/makeFigmaTexts.en.mdx +28 -0
  81. package/src/media/functional/figma-code/functions/makeFigmaTexts/makeFigmaTexts.ru.mdx +28 -0
  82. package/src/media/functional/figma-code/functions/makeFigmaTexts/makeFigmaTexts.vi.mdx +28 -0
  83. package/src/media/functional/figma-code/functions/setupClientStorage/setupClientStorage.en.mdx +28 -0
  84. package/src/media/functional/figma-code/functions/setupClientStorage/setupClientStorage.ru.mdx +28 -0
  85. package/src/media/functional/figma-code/functions/setupClientStorage/setupClientStorage.vi.mdx +28 -0
  86. package/src/media/functional/figma-code/functions/setupFrameSelection/setupFrameSelection.en.mdx +22 -0
  87. package/src/media/functional/figma-code/functions/setupFrameSelection/setupFrameSelection.ru.mdx +22 -0
  88. package/src/media/functional/figma-code/functions/setupFrameSelection/setupFrameSelection.vi.mdx +22 -0
  89. package/src/media/functional/figma-code/functions/setupFrameStyles/setupFrameStyles.en.mdx +19 -0
  90. package/src/media/functional/figma-code/functions/setupFrameStyles/setupFrameStyles.ru.mdx +19 -0
  91. package/src/media/functional/figma-code/functions/setupFrameStyles/setupFrameStyles.vi.mdx +19 -0
  92. package/src/media/functional/figma-code/functions/setupStorage/setupStorage.en.mdx +28 -0
  93. package/src/media/functional/figma-code/functions/setupStorage/setupStorage.ru.mdx +28 -0
  94. package/src/media/functional/figma-code/functions/setupStorage/setupStorage.vi.mdx +28 -0
  95. package/src/media/functional/figma-code/functions/toFrameSelection/toFrameSelection.en.mdx +27 -0
  96. package/src/media/functional/figma-code/functions/toFrameSelection/toFrameSelection.ru.mdx +27 -0
  97. package/src/media/functional/figma-code/functions/toFrameSelection/toFrameSelection.vi.mdx +27 -0
  98. package/src/media/functional/figma-ref/composables/useFigmaClientStorage/useFigmaClientStorage.en.mdx +26 -0
  99. package/src/media/functional/figma-ref/composables/useFigmaClientStorage/useFigmaClientStorage.ru.mdx +26 -0
  100. package/src/media/functional/figma-ref/composables/useFigmaClientStorage/useFigmaClientStorage.vi.mdx +26 -0
  101. package/src/media/functional/figma-ref/composables/useFigmaFrameSelection/useFigmaFrameSelection.en.mdx +35 -0
  102. package/src/media/functional/figma-ref/composables/useFigmaFrameSelection/useFigmaFrameSelection.ru.mdx +35 -0
  103. package/src/media/functional/figma-ref/composables/useFigmaFrameSelection/useFigmaFrameSelection.vi.mdx +35 -0
  104. package/src/media/functional/figma-ref/composables/useFigmaFrameStyles/useFigmaFrameStyles.en.mdx +33 -0
  105. package/src/media/functional/figma-ref/composables/useFigmaFrameStyles/useFigmaFrameStyles.ru.mdx +33 -0
  106. package/src/media/functional/figma-ref/composables/useFigmaFrameStyles/useFigmaFrameStyles.vi.mdx +33 -0
  107. package/src/media/functional/figma-ref/composables/useFigmaStorage/useFigmaStorage.en.mdx +28 -0
  108. package/src/media/functional/figma-ref/composables/useFigmaStorage/useFigmaStorage.ru.mdx +28 -0
  109. package/src/media/functional/figma-ref/composables/useFigmaStorage/useFigmaStorage.vi.mdx +28 -0
  110. package/src/media/functional/figma-ref/composables/useFigmaUiFrames/useFigmaUiFrames.en.mdx +7 -12
  111. package/src/media/functional/figma-ref/composables/useFigmaUiFrames/useFigmaUiFrames.ru.mdx +7 -12
  112. package/src/media/functional/figma-ref/composables/useFigmaUiFrames/useFigmaUiFrames.vi.mdx +8 -13
  113. package/src/media/functional/figma-ref/composables/useFigmaUiSelected/useFigmaUiSelected.en.mdx +12 -17
  114. package/src/media/functional/figma-ref/composables/useFigmaUiSelected/useFigmaUiSelected.ru.mdx +13 -18
  115. package/src/media/functional/figma-ref/composables/useFigmaUiSelected/useFigmaUiSelected.vi.mdx +14 -19
  116. package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.en.mdx +2 -3
  117. package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.ru.mdx +2 -3
  118. package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.vi.mdx +2 -3
  119. package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementAsyncRef.en.mdx +41 -0
  120. package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementAsyncRef.ru.mdx +41 -0
  121. package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementAsyncRef.vi.mdx +41 -0
  122. package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementRef.en.mdx +12 -0
  123. package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementRef.ru.mdx +12 -0
  124. package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementRef.vi.mdx +6 -0
  125. package/src/media/functional/functional/composables/useApiRef/useApiRef.en.mdx +12 -9
  126. package/src/media/functional/functional/composables/useApiRef/useApiRef.ru.mdx +12 -9
  127. package/src/media/functional/functional/composables/useApiRef/useApiRef.vi.mdx +11 -9
  128. package/src/media/functional/nitro-basic/functions/getInject.en.mdx +27 -0
  129. package/src/media/functional/nitro-basic/functions/getInject.ru.mdx +27 -0
  130. package/src/media/functional/nitro-basic/functions/getInject.vi.mdx +20 -0
  131. package/src/media/functional/ui-figma/about/about.en.mdx +52 -0
  132. package/src/media/functional/ui-figma/about/about.ru.mdx +52 -0
  133. package/src/media/functional/ui-figma/about/about.vi.mdx +52 -0
  134. package/src/media/functional/ui-figma/frames/frames.en.mdx +58 -0
  135. package/src/media/functional/ui-figma/frames/frames.ru.mdx +58 -0
  136. package/src/media/functional/ui-figma/frames/frames.vi.mdx +58 -0
  137. package/src/media/functional/ui-figma/messenger/messenger.en.mdx +67 -0
  138. package/src/media/functional/ui-figma/messenger/messenger.ru.mdx +67 -0
  139. package/src/media/functional/ui-figma/messenger/messenger.vi.mdx +67 -0
  140. package/src/media/functional/ui-figma/selection/selection.en.mdx +65 -0
  141. package/src/media/functional/ui-figma/selection/selection.ru.mdx +65 -0
  142. package/src/media/functional/ui-figma/selection/selection.vi.mdx +65 -0
  143. package/src/media/functional/ui-figma/storage/storage.en.mdx +53 -0
  144. package/src/media/functional/ui-figma/storage/storage.ru.mdx +53 -0
  145. package/src/media/functional/ui-figma/storage/storage.vi.mdx +53 -0
  146. package/src/media/functional/ui-figma/styles/styles.en.mdx +57 -0
  147. package/src/media/functional/ui-figma/styles/styles.ru.mdx +57 -0
  148. package/src/media/functional/ui-figma/styles/styles.vi.mdx +57 -0
  149. /package/src/media/functional/ui/{wiki-data.en.mdx → wiki/wiki-data.en.mdx} +0 -0
  150. /package/src/media/functional/ui/{wiki-data.ru.mdx → wiki/wiki-data.ru.mdx} +0 -0
  151. /package/src/media/functional/ui/{wiki-data.vi.mdx → wiki/wiki-data.vi.mdx} +0 -0
@@ -0,0 +1,58 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/vi/# UI Figma/# Làm việc với Frame'/>
4
+
5
+ # Làm việc với Frame
6
+
7
+ Thư viện cung cấp các công cụ để quản lý danh sách các frame trên trang Figma hiện tại và theo dõi các phần tử được chọn. Điều này cho phép bạn xây dựng các giao diện điều hướng phức tạp và hệ thống chọn hàng loạt bên trong plugin của mình.
8
+
9
+ ## Backend (Backend / plugin/code.ts)
10
+
11
+ Để đồng bộ hóa dữ liệu frame tự động, các trình xử lý tương ứng phải được khởi tạo ở phía plugin.
12
+
13
+ ### Khởi tạo
14
+ ```typescript
15
+ import { FigmaTopLevelFrames, FigmaFramesSelected } from '@dxtmisha/figma-code'
16
+
17
+ // Kích hoạt trình lắng nghe cho danh sách frame và quản lý vùng chọn
18
+ FigmaTopLevelFrames.send()
19
+ FigmaFramesSelected.send()
20
+ ```
21
+
22
+ ## Giao diện (UI / Iframe)
23
+
24
+ Dữ liệu về tất cả các frame trên trang và các công cụ để quản lý danh sách vùng chọn nội bộ của plugin có sẵn trong giao diện.
25
+
26
+ ### Danh sách Frame của trang (Vue)
27
+ Cho phép bạn lấy danh sách tất cả các frame và section tại thư mục gốc của trang hiện tại kèm theo ảnh chụp màn hình.
28
+
29
+ ```typescript
30
+ import { useFigmaUiFrames } from '@dxtmisha/figma-ref'
31
+
32
+ const { frames, loading } = useFigmaUiFrames()
33
+
34
+ /* frames.value chứa danh sách các đối tượng:
35
+ {
36
+ id: string,
37
+ name: string,
38
+ image: Uint8Array | string // Ảnh chụp màn hình JPG
39
+ }
40
+ */
41
+ ```
42
+
43
+ ### Các phần tử được chọn trong Plugin (Vue)
44
+ Một cơ chế để theo dõi và sửa đổi danh sách các phần tử "được chọn" trong giao diện của plugin. Trạng thái này được duy trì trên toàn cầu ở cấp độ phiên plugin.
45
+
46
+ ```typescript
47
+ import { useFigmaUiSelected } from '@dxtmisha/figma-ref'
48
+
49
+ const {
50
+ selected, // Danh sách ID các frame được chọn
51
+ isSelected, // Hàm kiểm tra: isSelected(id)
52
+ toggleSelected, // Hàm chuyển đổi: toggleSelected(id, boolean)
53
+ } = useFigmaUiSelected()
54
+
55
+ // Ví dụ sử dụng:
56
+ const active = isSelected('1:123')
57
+ const toggle = () => toggleSelected('1:123', !active.value)
58
+ ```
@@ -0,0 +1,67 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/en/# UI Figma/# Messenger System'/>
4
+
5
+ # Working with Messages (Messenger)
6
+
7
+ The messaging mechanism is the central link in the architecture of Figma plugins. Since the "Code Side" (Sandbox) and the "Interface Side" (UI) run in isolated environments, any interaction between them requires the use of the `postMessage` system.
8
+
9
+ The library simplifies this process by providing standardized messengers and automatic routing.
10
+
11
+ ## Initialization and Security
12
+
13
+ Figma plugins operate in an environment where multiple plugins can be active simultaneously. To prevent message conflicts and ensure that your UI only processes data from your specific plugin, the library uses the `FigmaPostCode` system.
14
+
15
+ Both the **Backend** and the **Interface** must be initialized with the same unique identifier (typically the `id` from your `manifest.json`) before using the messengers.
16
+
17
+ ```typescript
18
+ import { FigmaPostCode } from '@dxtmisha/figma'
19
+ import manifest from '../manifest.json'
20
+
21
+ // Must be called on both sides (Code and UI)
22
+ FigmaPostCode.set(manifest.id)
23
+ ```
24
+
25
+ ## Backend (Backend / plugin/code.ts)
26
+
27
+ On the code side, the `FigmaPluginMessenger` class is used to subscribe to events and send data to the UI.
28
+
29
+ ```typescript
30
+ import { FigmaPostCode } from '@dxtmisha/figma'
31
+ import { FigmaPluginMessenger } from '@dxtmisha/figma-code'
32
+ import manifest from '../manifest.json'
33
+
34
+ // 1. Initialize identification
35
+ FigmaPostCode.set(manifest.id)
36
+
37
+ // 2. Work with the messenger
38
+ const messenger = FigmaPluginMessenger.getInstance()
39
+
40
+ messenger.add('my-action', (data) => {
41
+ console.log('Data received:', data)
42
+ messenger.post('my-action', { status: 'success' })
43
+ })
44
+ ```
45
+
46
+ ## Interface (UI / Iframe)
47
+
48
+ In the interface, the mirror class `FigmaUiMessenger` is used for interaction with the backend.
49
+
50
+ ```typescript
51
+ import { FigmaPostCode } from '@dxtmisha/figma'
52
+ import { FigmaUiMessenger } from '@dxtmisha/figma'
53
+ import manifest from '../manifest.json'
54
+
55
+ // 1. Initialize identification (same ID as backend)
56
+ FigmaPostCode.set(manifest.id)
57
+
58
+ // 2. Work with the messenger
59
+ const messenger = FigmaUiMessenger.getInstance()
60
+
61
+ messenger.post('my-action', { payload: 'hello' })
62
+
63
+ messenger.add('my-action', (result) => {
64
+ console.log('Result:', result)
65
+ })
66
+ ```
67
+
@@ -0,0 +1,67 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/ru/# UI Figma/# Система мессенджеров'/>
4
+
5
+ # Работа с сообщениями (Messenger)
6
+
7
+ Механизм сообщений — центральное звено архитектуры Figma-плагинов. Поскольку «сторона кода» (Sandbox) и «сторона интерфейса» (UI) работают в изолированных средах, любое взаимодействие между ними требует использования системы `postMessage`.
8
+
9
+ Библиотека упрощает этот процесс, предоставляя стандартизированные мессенджеры и автоматическую маршрутизацию.
10
+
11
+ ## Инициализация и безопасность
12
+
13
+ Плагины Figma работают в среде, где одновременно могут быть активны несколько плагинов. Чтобы предотвратить конфликты сообщений и гарантировать, что ваш UI обрабатывает данные только от вашего конкретного плагина, библиотека использует систему `FigmaPostCode`.
14
+
15
+ Обе стороны (**Бэкенд** и **Интерфейс**) должны быть инициализированы одним и тем же уникальным идентификатором (обычно это `id` из вашего `manifest.json`) перед использованием мессенджеров.
16
+
17
+ ```typescript
18
+ import { FigmaPostCode } from '@dxtmisha/figma'
19
+ import manifest from '../manifest.json'
20
+
21
+ // Необходимо вызвать на обеих сторонах (Code и UI)
22
+ FigmaPostCode.set(manifest.id)
23
+ ```
24
+
25
+ ## Бэкенд (Backend / plugin/code.ts)
26
+
27
+ На стороне кода используется класс `FigmaPluginMessenger` для подписки на события и отправки данных в UI.
28
+
29
+ ```typescript
30
+ import { FigmaPostCode } from '@dxtmisha/figma'
31
+ import { FigmaPluginMessenger } from '@dxtmisha/figma-code'
32
+ import manifest from '../manifest.json'
33
+
34
+ // 1. Инициализация идентификации
35
+ FigmaPostCode.set(manifest.id)
36
+
37
+ // 2. Работа с мессенджером
38
+ const messenger = FigmaPluginMessenger.getInstance()
39
+
40
+ messenger.add('my-action', (data) => {
41
+ console.log('Данные получены:', data)
42
+ messenger.post('my-action', { status: 'success' })
43
+ })
44
+ ```
45
+
46
+ ## Интерфейс (UI / Iframe)
47
+
48
+ В интерфейсе используется зеркальный класс `FigmaUiMessenger` для взаимодействия с бэкендом.
49
+
50
+ ```typescript
51
+ import { FigmaPostCode } from '@dxtmisha/figma'
52
+ import { FigmaUiMessenger } from '@dxtmisha/figma'
53
+ import manifest from '../manifest.json'
54
+
55
+ // 1. Инициализация идентификации (тот же ID, что и в бэкенде)
56
+ FigmaPostCode.set(manifest.id)
57
+
58
+ // 2. Работа с мессенджером
59
+ const messenger = FigmaUiMessenger.getInstance()
60
+
61
+ messenger.post('my-action', { payload: 'hello' })
62
+
63
+ messenger.add('my-action', (result) => {
64
+ console.log('Результат:', result)
65
+ })
66
+ ```
67
+
@@ -0,0 +1,67 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/vi/# UI Figma/# Hệ thống Messenger'/>
4
+
5
+ # Làm việc với tin nhắn (Messenger)
6
+
7
+ Cơ chế gửi tin nhắn là mắt xích trung tâm trong kiến trúc của các plugin Figma. Vì "Phía Mã" (Sandbox) và "Phía Giao diện" (UI) chạy trong các môi trường biệt lập, nên bất kỳ tương tác nào giữa chúng đều yêu cầu sử dụng hệ thống `postMessage`.
8
+
9
+ Thư viện đơn giản hóa quy trình này bằng cách cung cấp các messenger tiêu chuẩn hóa và định tuyến tự động.
10
+
11
+ ## Khởi tạo và Bảo mật
12
+
13
+ Các plugin Figma hoạt động trong môi trường có thể có nhiều plugin cùng hoạt động. Để ngăn chặn xung đột tin nhắn và đảm bảo UI của bạn chỉ xử lý dữ liệu từ plugin cụ thể của mình, thư viện sử dụng hệ thống `FigmaPostCode`.
14
+
15
+ Cả **Backend** và **Giao diện** phải được khởi tạo với cùng một mã định danh duy nhất (thường là `id` từ `manifest.json` của bạn) trước khi sử dụng messenger.
16
+
17
+ ```typescript
18
+ import { FigmaPostCode } from '@dxtmisha/figma'
19
+ import manifest from '../manifest.json'
20
+
21
+ // Phải được gọi ở cả hai phía (Code và UI)
22
+ FigmaPostCode.set(manifest.id)
23
+ ```
24
+
25
+ ## Backend (Backend / plugin/code.ts)
26
+
27
+ Về phía mã, lớp `FigmaPluginMessenger` được sử dụng để đăng ký các sự kiện và gửi dữ liệu đến UI.
28
+
29
+ ```typescript
30
+ import { FigmaPostCode } from '@dxtmisha/figma'
31
+ import { FigmaPluginMessenger } from '@dxtmisha/figma-code'
32
+ import manifest from '../manifest.json'
33
+
34
+ // 1. Khởi tạo định danh
35
+ FigmaPostCode.set(manifest.id)
36
+
37
+ // 2. Làm việc với messenger
38
+ const messenger = FigmaPluginMessenger.getInstance()
39
+
40
+ messenger.add('my-action', (data) => {
41
+ console.log('Dữ liệu đã nhận:', data)
42
+ messenger.post('my-action', { status: 'success' })
43
+ })
44
+ ```
45
+
46
+ ## Giao diện (UI / Iframe)
47
+
48
+ Trong giao diện, lớp gương `FigmaUiMessenger` được sử dụng để tương tác với backend.
49
+
50
+ ```typescript
51
+ import { FigmaPostCode } from '@dxtmisha/figma'
52
+ import { FigmaUiMessenger } from '@dxtmisha/figma'
53
+ import manifest from '../manifest.json'
54
+
55
+ // 1. Khởi tạo định danh (cùng ID với backend)
56
+ FigmaPostCode.set(manifest.id)
57
+
58
+ // 2. Làm việc với messenger
59
+ const messenger = FigmaUiMessenger.getInstance()
60
+
61
+ messenger.post('my-action', { payload: 'hello' })
62
+
63
+ messenger.add('my-action', (result) => {
64
+ console.log('Kết quả:', result)
65
+ })
66
+ ```
67
+
@@ -0,0 +1,65 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/en/# UI Figma/# Frame Selection'/>
4
+
5
+ # Working with Selection
6
+
7
+ The selection system provides a connection between the Figma canvas and the plugin interface. It allows the application to react to user actions in the editor and manage focus programmatically.
8
+
9
+ ## Backend (Backend / plugin/code.ts)
10
+
11
+ On the plugin's code side, it is necessary to initialize synchronization mechanisms and, if needed, use functions for programmatic focus.
12
+
13
+ #### Initialization
14
+ Call one of the functions depending on the required level of control:
15
+
16
+ - **`setupFrameSelection()`** — Recommended. Sets up bidirectional communication (tracking + programmatic selection from the UI).
17
+ - **`makeFigmaFrameSelection()`** — Sets up only tracking of changes on the Figma canvas (Backend -> UI).
18
+
19
+ ```typescript
20
+ import { setupFrameSelection } from '@dxtmisha/figma-code'
21
+
22
+ // Called once during plugin startup
23
+ setupFrameSelection()
24
+ ```
25
+
26
+ #### Programmatic Management
27
+ If you need to select an object and focus the camera on it directly from the backend code:
28
+
29
+ ```typescript
30
+ import { toFrameSelection } from '@dxtmisha/figma-code'
31
+
32
+ await toFrameSelection('12:34')
33
+ ```
34
+
35
+ ## Interface (UI / Iframe)
36
+
37
+ Tools for retrieving current selection data and commanding changes from the plugin interface.
38
+
39
+ #### Reactive Usage (Vue)
40
+ The most convenient way is through the `useFigmaFrameSelection` composable.
41
+
42
+ ```typescript
43
+ import { useFigmaFrameSelection } from '@dxtmisha/figma-ref'
44
+
45
+ const {
46
+ selection, // List of selected frames (ComputedRef)
47
+ setSelection, // Method to change selection: setSelection(id)
48
+ loading // Loading state
49
+ } = useFigmaFrameSelection()
50
+ ```
51
+
52
+ #### Direct Control (JavaScript)
53
+ If you are not using Vue, you can send a command or manually subscribe to changes:
54
+
55
+ ```typescript
56
+ import { sendFrameSelection, fetchFrameSelection } from '@dxtmisha/figma'
57
+
58
+ // Change selection
59
+ sendFrameSelection('12:34')
60
+
61
+ // Subscribe to changes manually
62
+ fetchFrameSelection((selection) => {
63
+ console.log('Current selection:', selection)
64
+ })
65
+ ```
@@ -0,0 +1,65 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/ru/# UI Figma/# Работа с выделением'/>
4
+
5
+ # Работа с выделением
6
+
7
+ Система выделения обеспечивает связь между холстом Figma и интерфейсом плагина. Она позволяет приложению реагировать на действия пользователя в редакторе и управлять фокусом программно.
8
+
9
+ ## Бэкенд (Backend / plugin/code.ts)
10
+
11
+ На стороне кода плагина необходимо инициализировать механизмы синхронизации и, при необходимости, использовать функции для программного фокуса.
12
+
13
+ #### Инициализация
14
+ Вызовите одну из функций в зависимости от требуемого уровня контроля:
15
+
16
+ - **`setupFrameSelection()`** — Рекомендуется. Настраивает двустороннюю связь (отслеживание + программное выделение из UI).
17
+ - **`makeFigmaFrameSelection()`** — Настраивает только отслеживание изменений на холсте Figma (Backend -> UI).
18
+
19
+ ```typescript
20
+ import { setupFrameSelection } from '@dxtmisha/figma-code'
21
+
22
+ // Вызывается один раз при старте плагина
23
+ setupFrameSelection()
24
+ ```
25
+
26
+ #### Программное управление
27
+ Если нужно выделить объект и сфокусировать на нем камеру прямо из кода бэкенда:
28
+
29
+ ```typescript
30
+ import { toFrameSelection } from '@dxtmisha/figma-code'
31
+
32
+ await toFrameSelection('12:34')
33
+ ```
34
+
35
+ ## Интерфейс (UI / Iframe)
36
+
37
+ Инструменты для получения данных о текущем выделении и подачи команд на его изменение из интерфейса плагина.
38
+
39
+ #### Реактивное использование (Vue)
40
+ Самый удобный способ работы через композитор `useFigmaFrameSelection`.
41
+
42
+ ```typescript
43
+ import { useFigmaFrameSelection } from '@dxtmisha/figma-ref'
44
+
45
+ const {
46
+ selection, // Список выделенных фреймов (ComputedRef)
47
+ setSelection, // Метод для смены выделения: setSelection(id)
48
+ loading // Состояние загрузки
49
+ } = useFigmaFrameSelection()
50
+ ```
51
+
52
+ #### Прямое управление (JavaScript)
53
+ Если вы не используете Vue, можно отправить команду или вручную подписаться на изменения:
54
+
55
+ ```typescript
56
+ import { sendFrameSelection, fetchFrameSelection } from '@dxtmisha/figma'
57
+
58
+ // Сменить выделение
59
+ sendFrameSelection('12:34')
60
+
61
+ // Подписаться на изменения вручную
62
+ fetchFrameSelection((selection) => {
63
+ console.log('Текущее выделение:', selection)
64
+ })
65
+ ```
@@ -0,0 +1,65 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/vi/# UI Figma/# Quản lý vùng chọn'/>
4
+
5
+ # Quản lý vùng chọn
6
+
7
+ Hệ thống vùng chọn cung cấp sự kết nối giữa canvas Figma và giao diện plugin. Nó cho phép ứng dụng phản ứng với các hành động của người dùng trong trình chỉnh sửa và quản lý tiêu điểm theo chương trình.
8
+
9
+ ## Backend (Backend / plugin/code.ts)
10
+
11
+ Về phía mã của plugin, cần phải khởi tạo các cơ chế đồng bộ hóa và, nếu cần, sử dụng các hàm để lấy nét theo chương trình.
12
+
13
+ #### Khởi tạo
14
+ Gọi một trong các hàm tùy thuộc vào mức độ kiểm soát yêu cầu:
15
+
16
+ - **`setupFrameSelection()`** — Được khuyến nghị. Thiết lập giao tiếp hai chiều (theo dõi + chọn theo chương trình từ UI).
17
+ - **`makeFigmaFrameSelection()`** — Chỉ thiết lập theo dõi các thay đổi trên canvas Figma (Backend -> UI).
18
+
19
+ ```typescript
20
+ import { setupFrameSelection } from '@dxtmisha/figma-code'
21
+
22
+ // Được gọi một lần khi khởi động plugin
23
+ setupFrameSelection()
24
+ ```
25
+
26
+ #### Quản lý theo chương trình
27
+ Nếu bạn cần chọn một đối tượng và lấy nét camera vào đối tượng đó trực tiếp từ mã backend:
28
+
29
+ ```typescript
30
+ import { toFrameSelection } from '@dxtmisha/figma-code'
31
+
32
+ await toFrameSelection('12:34')
33
+ ```
34
+
35
+ ## Giao diện (UI / Iframe)
36
+
37
+ Các công cụ để lấy dữ liệu vùng chọn hiện tại và ra lệnh thay đổi từ giao diện plugin.
38
+
39
+ #### Sử dụng phản hồi (Vue)
40
+ Cách thuận tiện nhất là thông qua `useFigmaFrameSelection` composable.
41
+
42
+ ```typescript
43
+ import { useFigmaFrameSelection } from '@dxtmisha/figma-ref'
44
+
45
+ const {
46
+ selection, // Danh sách các frame được chọn (ComputedRef)
47
+ setSelection, // Phương thức thay đổi vùng chọn: setSelection(id)
48
+ loading // Trạng thái tải
49
+ } = useFigmaFrameSelection()
50
+ ```
51
+
52
+ #### Điều khiển trực tiếp (JavaScript)
53
+ Nếu bạn không sử dụng Vue, bạn có thể gửi lệnh hoặc đăng ký thay đổi thủ công:
54
+
55
+ ```typescript
56
+ import { sendFrameSelection, fetchFrameSelection } from '@dxtmisha/figma'
57
+
58
+ // Thay đổi vùng chọn
59
+ sendFrameSelection('12:34')
60
+
61
+ // Đăng ký thay đổi thủ công
62
+ fetchFrameSelection((selection) => {
63
+ console.log('Vùng chọn hiện tại:', selection)
64
+ })
65
+ ```
@@ -0,0 +1,53 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/en/# UI Figma/# Data Storage'/>
4
+
5
+ # Working with Storage
6
+
7
+ Figma provides two main mechanisms for saving data: local user storage and shared document storage. The library offers typed wrappers for both methods, providing convenient access and synchronization.
8
+
9
+ ## Backend (Backend / plugin/code.ts)
10
+
11
+ On the plugin code side, it is necessary to initialize message listeners to synchronize data with the interface.
12
+
13
+ ### Initialization
14
+ ```typescript
15
+ import { setupStorage, setupClientStorage } from '@dxtmisha/figma-code'
16
+
17
+ // Activate listeners for both storage types
18
+ setupStorage()
19
+ setupClientStorage()
20
+ ```
21
+
22
+ ### Direct Usage
23
+ You can work with storage data directly in the backend code:
24
+
25
+ ```typescript
26
+ import { FigmaStorage, FigmaClientStorage } from '@dxtmisha/figma-code'
27
+
28
+ // Shared document storage
29
+ const storage = FigmaStorage.getInstance<string>('project-theme')
30
+ storage.set('dark')
31
+
32
+ // Personal user storage
33
+ const client = FigmaClientStorage.getInstance<boolean>('show-onboarding')
34
+ await client.set(true)
35
+ ```
36
+
37
+ ## Interface (UI / Iframe)
38
+
39
+ In the plugin interface, data is accessible through reactive hooks that automatically synchronize with the backend.
40
+
41
+ ### Reactive Usage (Vue)
42
+ ```typescript
43
+ import { useFigmaStorage, useFigmaClientStorage } from '@dxtmisha/figma-ref'
44
+
45
+ // Synchronization with the document
46
+ const { item: theme } = useFigmaStorage('project-theme', 'light')
47
+
48
+ // Synchronization with personal user settings
49
+ const { item: isSeen } = useFigmaClientStorage('show-onboarding', false)
50
+
51
+ // When .value changes, data is automatically sent to Figma
52
+ theme.value = 'dark'
53
+ ```
@@ -0,0 +1,53 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/ru/# UI Figma/# Работа с хранилищем'/>
4
+
5
+ # Работа с хранилищем
6
+
7
+ Figma предоставляет два основных механизма сохранения данных: локальное хранилище пользователя и общее хранилище документа. Библиотека предлагает типизированные обертки для обоих методов, обеспечивая удобный доступ и синхронизацию.
8
+
9
+ ## Бэкенд (Backend / plugin/code.ts)
10
+
11
+ На стороне кода плагина необходимо инициализировать слушатели сообщений для синхронизации данных с интерфейсом.
12
+
13
+ ### Инициализация
14
+ ```typescript
15
+ import { setupStorage, setupClientStorage } from '@dxtmisha/figma-code'
16
+
17
+ // Активация слушателей для обоих типов хранилищ
18
+ setupStorage()
19
+ setupClientStorage()
20
+ ```
21
+
22
+ ### Использование напрямую
23
+ Вы можете работать с данными хранилища прямо в коде бэкенда:
24
+
25
+ ```typescript
26
+ import { FigmaStorage, FigmaClientStorage } from '@dxtmisha/figma-code'
27
+
28
+ // Общее хранилище документа
29
+ const storage = FigmaStorage.getInstance<string>('project-theme')
30
+ storage.set('dark')
31
+
32
+ // Личное хранилище пользователя
33
+ const client = FigmaClientStorage.getInstance<boolean>('show-onboarding')
34
+ await client.set(true)
35
+ ```
36
+
37
+ ## Интерфейс (UI / Iframe)
38
+
39
+ В интерфейсе плагина данные доступны через реактивные хуки, которые автоматически синхронизируются с бэкендом.
40
+
41
+ ### Реактивное использование (Vue)
42
+ ```typescript
43
+ import { useFigmaStorage, useFigmaClientStorage } from '@dxtmisha/figma-ref'
44
+
45
+ // Синхронизация с документом
46
+ const { item: theme } = useFigmaStorage('project-theme', 'light')
47
+
48
+ // Синхронизация с личными настройками пользователя
49
+ const { item: isSeen } = useFigmaClientStorage('show-onboarding', false)
50
+
51
+ // При изменении .value данные автоматически улетают в Figma
52
+ theme.value = 'dark'
53
+ ```
@@ -0,0 +1,53 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/vi/# UI Figma/# Lưu trữ dữ liệu'/>
4
+
5
+ # Làm việc với bộ nhớ (Storage)
6
+
7
+ Figma cung cấp hai cơ chế chính để lưu dữ liệu: bộ nhớ người dùng cục bộ và bộ nhớ tài liệu dùng chung. Thư viện cung cấp các trình bao bọc (wrapper) được định kiểu cho cả hai phương pháp, giúp truy cập và đồng bộ hóa thuận tiện.
8
+
9
+ ## Backend (Backend / plugin/code.ts)
10
+
11
+ Về phía mã của plugin, cần phải khởi tạo các trình lắng nghe tin nhắn để đồng bộ hóa dữ liệu với giao diện.
12
+
13
+ ### Khởi tạo
14
+ ```typescript
15
+ import { setupStorage, setupClientStorage } from '@dxtmisha/figma-code'
16
+
17
+ // Kích hoạt trình lắng nghe cho cả hai loại bộ nhớ
18
+ setupStorage()
19
+ setupClientStorage()
20
+ ```
21
+
22
+ ### Sử dụng trực tiếp
23
+ Bạn có thể làm việc với dữ liệu bộ nhớ trực tiếp trong mã backend:
24
+
25
+ ```typescript
26
+ import { FigmaStorage, FigmaClientStorage } from '@dxtmisha/figma-code'
27
+
28
+ // Bộ nhớ tài liệu dùng chung
29
+ const storage = FigmaStorage.getInstance<string>('project-theme')
30
+ storage.set('dark')
31
+
32
+ // Bộ nhớ người dùng cá nhân
33
+ const client = FigmaClientStorage.getInstance<boolean>('show-onboarding')
34
+ await client.set(true)
35
+ ```
36
+
37
+ ## Giao diện (UI / Iframe)
38
+
39
+ Trong giao diện plugin, dữ liệu có thể truy cập được thông qua các hook phản hồi tự động đồng bộ hóa với backend.
40
+
41
+ ### Sử dụng phản hồi (Vue)
42
+ ```typescript
43
+ import { useFigmaStorage, useFigmaClientStorage } from '@dxtmisha/figma-ref'
44
+
45
+ // Đồng bộ hóa với tài liệu
46
+ const { item: theme } = useFigmaStorage('project-theme', 'light')
47
+
48
+ // Đồng bộ hóa với cài đặt cá nhân của người dùng
49
+ const { item: isSeen } = useFigmaClientStorage('show-onboarding', false)
50
+
51
+ // Khi .value thay đổi, dữ liệu sẽ tự động được gửi đến Figma
52
+ theme.value = 'dark'
53
+ ```
@@ -0,0 +1,57 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/en/# UI Figma/# Working with Styles'/>
4
+
5
+ # Working with Styles
6
+
7
+ The system for retrieving extended style data enables the transfer of detailed information (CSS, JSON structures, text content) from the Figma canvas to the plugin's interface upon request.
8
+
9
+ ## Backend (Backend / plugin/code.ts)
10
+
11
+ On the plugin code side, you need to initialize a handler that will respond to data requests from the UI.
12
+
13
+ #### Initialization
14
+ Call the `setupFrameStyles()` function once when the plugin starts:
15
+
16
+ ```typescript
17
+ import { setupFrameStyles } from '@dxtmisha/figma-code'
18
+
19
+ // Initialize the style request handler
20
+ setupFrameStyles()
21
+ ```
22
+
23
+ ## Interface (UI / Iframe)
24
+
25
+ Tools for sending style requests and reactively observing the results.
26
+
27
+ #### Reactive Usage (Vue)
28
+ The recommended way is through the `useFigmaFrameStyles` composable.
29
+
30
+ ```typescript
31
+ import { useFigmaFrameStyles } from '@dxtmisha/figma-ref'
32
+
33
+ const {
34
+ styles, // Computed list of retrieved styles (ComputedRef)
35
+ send // Method to send a request: send({ ids, children })
36
+ } = useFigmaFrameStyles()
37
+
38
+ // Example of requesting styles for specific nodes
39
+ const fetchDetails = () => {
40
+ send({ ids: ['1:10', '1:25'], children: true })
41
+ }
42
+ ```
43
+
44
+ #### Direct Management (JavaScript)
45
+ If you are not using Vue, you can use the base functions to send a request and subscribe to the response:
46
+
47
+ ```typescript
48
+ import { sendFrameStyles, fetchFrameStyles } from '@dxtmisha/figma'
49
+
50
+ // Request styles
51
+ sendFrameStyles({ ids: '1:10', children: true })
52
+
53
+ // Subscribe to receiving data
54
+ fetchFrameStyles((data) => {
55
+ console.log('Received style data:', data)
56
+ })
57
+ ```