@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.
- package/dist/{defineProperty-3CuEayIP.js → defineProperty-CbNEU1Ei.js} +4 -4
- package/dist/library.js +4 -4
- package/dist/media.js +115 -38
- package/dist/src/media/descriptions/wikiDescriptionsButtonGroup.d.ts +7 -0
- package/dist/src/media/descriptions/wikiDescriptionsRadio.d.ts +7 -0
- package/dist/src/media/mdx/ButtonGroup/wikiMdxButtonGroup.d.ts +7 -0
- package/dist/src/media/props/wikiButtonGroup.d.ts +7 -0
- package/dist/src/media/props/wikiRadio.d.ts +7 -0
- package/dist/storybook.js +2086 -1813
- package/dist/{wikiDescriptions-7XaHU3Yk.js → wikiDescriptions-CJv5fdyX.js} +107 -1
- package/package.json +9 -9
- package/src/media/functional/figma/classes/FigmaPostAbstract/FigmaPostAbstract.en.mdx +46 -0
- package/src/media/functional/figma/classes/FigmaPostAbstract/FigmaPostAbstract.ru.mdx +46 -0
- package/src/media/functional/figma/classes/FigmaPostAbstract/FigmaPostAbstract.vi.mdx +46 -0
- package/src/media/functional/figma/classes/FigmaPostCode/FigmaPostCode.en.mdx +3 -23
- package/src/media/functional/figma/classes/FigmaPostCode/FigmaPostCode.ru.mdx +3 -23
- package/src/media/functional/figma/classes/FigmaPostCode/FigmaPostCode.vi.mdx +3 -23
- package/src/media/functional/figma/functions/fetchClientStorage/fetchClientStorage.en.mdx +46 -0
- package/src/media/functional/figma/functions/fetchClientStorage/fetchClientStorage.ru.mdx +46 -0
- package/src/media/functional/figma/functions/fetchClientStorage/fetchClientStorage.vi.mdx +46 -0
- package/src/media/functional/figma/functions/fetchFrameSelection/fetchFrameSelection.en.mdx +34 -0
- package/src/media/functional/figma/functions/fetchFrameSelection/fetchFrameSelection.ru.mdx +34 -0
- package/src/media/functional/figma/functions/fetchFrameSelection/fetchFrameSelection.vi.mdx +34 -0
- package/src/media/functional/figma/functions/fetchFrameStyles/fetchFrameStyles.en.mdx +49 -0
- package/src/media/functional/figma/functions/fetchFrameStyles/fetchFrameStyles.ru.mdx +49 -0
- package/src/media/functional/figma/functions/fetchFrameStyles/fetchFrameStyles.vi.mdx +49 -0
- package/src/media/functional/figma/functions/fetchFramesSelected/fetchFramesSelected.en.mdx +19 -8
- package/src/media/functional/figma/functions/fetchFramesSelected/fetchFramesSelected.ru.mdx +18 -7
- package/src/media/functional/figma/functions/fetchFramesSelected/fetchFramesSelected.vi.mdx +19 -8
- package/src/media/functional/figma/functions/fetchStorage/fetchStorage.en.mdx +42 -0
- package/src/media/functional/figma/functions/fetchStorage/fetchStorage.ru.mdx +42 -0
- package/src/media/functional/figma/functions/fetchStorage/fetchStorage.vi.mdx +42 -0
- package/src/media/functional/figma/functions/fetchTopLevelFrames/fetchTopLevelFrames.en.mdx +29 -7
- package/src/media/functional/figma/functions/fetchTopLevelFrames/fetchTopLevelFrames.ru.mdx +28 -6
- package/src/media/functional/figma/functions/fetchTopLevelFrames/fetchTopLevelFrames.vi.mdx +29 -7
- package/src/media/functional/figma/functions/sendClientStorage/sendClientStorage.en.mdx +29 -0
- package/src/media/functional/figma/functions/sendClientStorage/sendClientStorage.ru.mdx +29 -0
- package/src/media/functional/figma/functions/sendClientStorage/sendClientStorage.vi.mdx +29 -0
- package/src/media/functional/figma/functions/sendFrameSelection/sendFrameSelection.en.mdx +28 -0
- package/src/media/functional/figma/functions/sendFrameSelection/sendFrameSelection.ru.mdx +28 -0
- package/src/media/functional/figma/functions/sendFrameSelection/sendFrameSelection.vi.mdx +28 -0
- package/src/media/functional/figma/functions/sendFrameStyles/sendFrameStyles.en.mdx +40 -0
- package/src/media/functional/figma/functions/sendFrameStyles/sendFrameStyles.ru.mdx +40 -0
- package/src/media/functional/figma/functions/sendFrameStyles/sendFrameStyles.vi.mdx +40 -0
- package/src/media/functional/figma/functions/sendFramesSelected/sendFramesSelected.en.mdx +29 -0
- package/src/media/functional/figma/functions/sendFramesSelected/sendFramesSelected.ru.mdx +29 -0
- package/src/media/functional/figma/functions/sendFramesSelected/sendFramesSelected.vi.mdx +29 -0
- package/src/media/functional/figma/functions/sendStorage/sendStorage.en.mdx +30 -0
- package/src/media/functional/figma/functions/sendStorage/sendStorage.ru.mdx +30 -0
- package/src/media/functional/figma/functions/sendStorage/sendStorage.vi.mdx +30 -0
- package/src/media/functional/figma-code/classes/FigmaClientStorage/FigmaClientStorage.en.mdx +64 -0
- package/src/media/functional/figma-code/classes/FigmaClientStorage/FigmaClientStorage.ru.mdx +64 -0
- package/src/media/functional/figma-code/classes/FigmaClientStorage/FigmaClientStorage.vi.mdx +64 -0
- package/src/media/functional/figma-code/classes/FigmaFrame/FigmaFrame.en.mdx +168 -35
- package/src/media/functional/figma-code/classes/FigmaFrame/FigmaFrame.ru.mdx +168 -35
- package/src/media/functional/figma-code/classes/FigmaFrame/FigmaFrame.vi.mdx +168 -35
- package/src/media/functional/figma-code/classes/FigmaFramesSelected/FigmaFramesSelected.en.mdx +23 -69
- package/src/media/functional/figma-code/classes/FigmaFramesSelected/FigmaFramesSelected.ru.mdx +22 -68
- package/src/media/functional/figma-code/classes/FigmaFramesSelected/FigmaFramesSelected.vi.mdx +23 -69
- package/src/media/functional/figma-code/classes/FigmaItem/FigmaItem.en.mdx +79 -56
- package/src/media/functional/figma-code/classes/FigmaItem/FigmaItem.ru.mdx +79 -56
- package/src/media/functional/figma-code/classes/FigmaItem/FigmaItem.vi.mdx +79 -56
- package/src/media/functional/figma-code/classes/FigmaPluginMessenger/FigmaPluginMessenger.en.mdx +18 -48
- package/src/media/functional/figma-code/classes/FigmaPluginMessenger/FigmaPluginMessenger.ru.mdx +18 -48
- package/src/media/functional/figma-code/classes/FigmaPluginMessenger/FigmaPluginMessenger.vi.mdx +18 -48
- package/src/media/functional/figma-code/classes/FigmaStorage/FigmaStorage.en.mdx +22 -67
- package/src/media/functional/figma-code/classes/FigmaStorage/FigmaStorage.ru.mdx +22 -67
- package/src/media/functional/figma-code/classes/FigmaStorage/FigmaStorage.vi.mdx +22 -67
- package/src/media/functional/figma-code/classes/FigmaStorageData/FigmaStorageData.en.mdx +57 -0
- package/src/media/functional/figma-code/classes/FigmaStorageData/FigmaStorageData.ru.mdx +57 -0
- package/src/media/functional/figma-code/classes/FigmaStorageData/FigmaStorageData.vi.mdx +57 -0
- package/src/media/functional/figma-code/classes/FigmaTopLevelFrames/FigmaTopLevelFrames.en.mdx +24 -27
- package/src/media/functional/figma-code/classes/FigmaTopLevelFrames/FigmaTopLevelFrames.ru.mdx +23 -26
- package/src/media/functional/figma-code/classes/FigmaTopLevelFrames/FigmaTopLevelFrames.vi.mdx +24 -27
- package/src/media/functional/figma-code/functions/getFigmaFrameById/getFigmaFrameById.en.mdx +28 -0
- package/src/media/functional/figma-code/functions/getFigmaFrameById/getFigmaFrameById.ru.mdx +28 -0
- package/src/media/functional/figma-code/functions/getFigmaFrameById/getFigmaFrameById.vi.mdx +28 -0
- package/src/media/functional/figma-code/functions/getFigmaItemById/getFigmaItemById.en.mdx +43 -0
- package/src/media/functional/figma-code/functions/getFigmaItemById/getFigmaItemById.ru.mdx +43 -0
- package/src/media/functional/figma-code/functions/getFigmaItemById/getFigmaItemById.vi.mdx +43 -0
- package/src/media/functional/figma-code/functions/getFigmaItemByIdOrRoot/getFigmaItemByIdOrRoot.en.mdx +30 -0
- package/src/media/functional/figma-code/functions/getFigmaItemByIdOrRoot/getFigmaItemByIdOrRoot.ru.mdx +30 -0
- package/src/media/functional/figma-code/functions/getFigmaItemByIdOrRoot/getFigmaItemByIdOrRoot.vi.mdx +30 -0
- package/src/media/functional/figma-code/functions/makeFigmaFrameSelection/makeFigmaFrameSelection.en.mdx +21 -0
- package/src/media/functional/figma-code/functions/makeFigmaFrameSelection/makeFigmaFrameSelection.ru.mdx +21 -0
- package/src/media/functional/figma-code/functions/makeFigmaFrameSelection/makeFigmaFrameSelection.vi.mdx +21 -0
- package/src/media/functional/figma-code/functions/makeFigmaTexts/makeFigmaTexts.en.mdx +28 -0
- package/src/media/functional/figma-code/functions/makeFigmaTexts/makeFigmaTexts.ru.mdx +28 -0
- package/src/media/functional/figma-code/functions/makeFigmaTexts/makeFigmaTexts.vi.mdx +28 -0
- package/src/media/functional/figma-code/functions/setupClientStorage/setupClientStorage.en.mdx +28 -0
- package/src/media/functional/figma-code/functions/setupClientStorage/setupClientStorage.ru.mdx +28 -0
- package/src/media/functional/figma-code/functions/setupClientStorage/setupClientStorage.vi.mdx +28 -0
- package/src/media/functional/figma-code/functions/setupFrameSelection/setupFrameSelection.en.mdx +22 -0
- package/src/media/functional/figma-code/functions/setupFrameSelection/setupFrameSelection.ru.mdx +22 -0
- package/src/media/functional/figma-code/functions/setupFrameSelection/setupFrameSelection.vi.mdx +22 -0
- package/src/media/functional/figma-code/functions/setupFrameStyles/setupFrameStyles.en.mdx +19 -0
- package/src/media/functional/figma-code/functions/setupFrameStyles/setupFrameStyles.ru.mdx +19 -0
- package/src/media/functional/figma-code/functions/setupFrameStyles/setupFrameStyles.vi.mdx +19 -0
- package/src/media/functional/figma-code/functions/setupStorage/setupStorage.en.mdx +28 -0
- package/src/media/functional/figma-code/functions/setupStorage/setupStorage.ru.mdx +28 -0
- package/src/media/functional/figma-code/functions/setupStorage/setupStorage.vi.mdx +28 -0
- package/src/media/functional/figma-code/functions/toFrameSelection/toFrameSelection.en.mdx +27 -0
- package/src/media/functional/figma-code/functions/toFrameSelection/toFrameSelection.ru.mdx +27 -0
- package/src/media/functional/figma-code/functions/toFrameSelection/toFrameSelection.vi.mdx +27 -0
- package/src/media/functional/figma-ref/composables/useFigmaClientStorage/useFigmaClientStorage.en.mdx +26 -0
- package/src/media/functional/figma-ref/composables/useFigmaClientStorage/useFigmaClientStorage.ru.mdx +26 -0
- package/src/media/functional/figma-ref/composables/useFigmaClientStorage/useFigmaClientStorage.vi.mdx +26 -0
- package/src/media/functional/figma-ref/composables/useFigmaFrameSelection/useFigmaFrameSelection.en.mdx +35 -0
- package/src/media/functional/figma-ref/composables/useFigmaFrameSelection/useFigmaFrameSelection.ru.mdx +35 -0
- package/src/media/functional/figma-ref/composables/useFigmaFrameSelection/useFigmaFrameSelection.vi.mdx +35 -0
- package/src/media/functional/figma-ref/composables/useFigmaFrameStyles/useFigmaFrameStyles.en.mdx +33 -0
- package/src/media/functional/figma-ref/composables/useFigmaFrameStyles/useFigmaFrameStyles.ru.mdx +33 -0
- package/src/media/functional/figma-ref/composables/useFigmaFrameStyles/useFigmaFrameStyles.vi.mdx +33 -0
- package/src/media/functional/figma-ref/composables/useFigmaStorage/useFigmaStorage.en.mdx +28 -0
- package/src/media/functional/figma-ref/composables/useFigmaStorage/useFigmaStorage.ru.mdx +28 -0
- package/src/media/functional/figma-ref/composables/useFigmaStorage/useFigmaStorage.vi.mdx +28 -0
- package/src/media/functional/figma-ref/composables/useFigmaUiFrames/useFigmaUiFrames.en.mdx +7 -12
- package/src/media/functional/figma-ref/composables/useFigmaUiFrames/useFigmaUiFrames.ru.mdx +7 -12
- package/src/media/functional/figma-ref/composables/useFigmaUiFrames/useFigmaUiFrames.vi.mdx +8 -13
- package/src/media/functional/figma-ref/composables/useFigmaUiSelected/useFigmaUiSelected.en.mdx +12 -17
- package/src/media/functional/figma-ref/composables/useFigmaUiSelected/useFigmaUiSelected.ru.mdx +13 -18
- package/src/media/functional/figma-ref/composables/useFigmaUiSelected/useFigmaUiSelected.vi.mdx +14 -19
- package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.en.mdx +2 -3
- package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.ru.mdx +2 -3
- package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.vi.mdx +2 -3
- package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementAsyncRef.en.mdx +41 -0
- package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementAsyncRef.ru.mdx +41 -0
- package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementAsyncRef.vi.mdx +41 -0
- package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementRef.en.mdx +12 -0
- package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementRef.ru.mdx +12 -0
- package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementRef.vi.mdx +6 -0
- package/src/media/functional/functional/composables/useApiRef/useApiRef.en.mdx +12 -9
- package/src/media/functional/functional/composables/useApiRef/useApiRef.ru.mdx +12 -9
- package/src/media/functional/functional/composables/useApiRef/useApiRef.vi.mdx +11 -9
- package/src/media/functional/functional-basic/api/api.en.mdx +39 -2
- package/src/media/functional/functional-basic/api/api.ru.mdx +39 -2
- package/src/media/functional/functional-basic/api/api.vi.mdx +39 -2
- package/src/media/functional/nitro-basic/functions/getInject.en.mdx +27 -0
- package/src/media/functional/nitro-basic/functions/getInject.ru.mdx +27 -0
- package/src/media/functional/nitro-basic/functions/getInject.vi.mdx +20 -0
- package/src/media/functional/ui-figma/about/about.en.mdx +52 -0
- package/src/media/functional/ui-figma/about/about.ru.mdx +52 -0
- package/src/media/functional/ui-figma/about/about.vi.mdx +52 -0
- package/src/media/functional/ui-figma/frames/frames.en.mdx +58 -0
- package/src/media/functional/ui-figma/frames/frames.ru.mdx +58 -0
- package/src/media/functional/ui-figma/frames/frames.vi.mdx +58 -0
- package/src/media/functional/ui-figma/messenger/messenger.en.mdx +67 -0
- package/src/media/functional/ui-figma/messenger/messenger.ru.mdx +67 -0
- package/src/media/functional/ui-figma/messenger/messenger.vi.mdx +67 -0
- package/src/media/functional/ui-figma/selection/selection.en.mdx +65 -0
- package/src/media/functional/ui-figma/selection/selection.ru.mdx +65 -0
- package/src/media/functional/ui-figma/selection/selection.vi.mdx +65 -0
- package/src/media/functional/ui-figma/storage/storage.en.mdx +53 -0
- package/src/media/functional/ui-figma/storage/storage.ru.mdx +53 -0
- package/src/media/functional/ui-figma/storage/storage.vi.mdx +53 -0
- package/src/media/functional/ui-figma/styles/styles.en.mdx +57 -0
- package/src/media/functional/ui-figma/styles/styles.ru.mdx +57 -0
- package/src/media/functional/ui-figma/styles/styles.vi.mdx +57 -0
- package/src/library.ts +0 -8
- /package/dist/{classes → src/classes}/WikiStorybook.d.ts +0 -0
- /package/dist/{classes → src/classes}/WikiStorybookDescriptions.d.ts +0 -0
- /package/dist/{classes → src/classes}/WikiStorybookItem.d.ts +0 -0
- /package/dist/{classes → src/classes}/WikiStorybookProp.d.ts +0 -0
- /package/dist/{documentation → src/documentation}/storybook/StorybookDescriptions.d.ts +0 -0
- /package/dist/{documentation → src/documentation}/storybook/StorybookMain.d.ts +0 -0
- /package/dist/{library.d.ts → src/library.d.ts} +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptions.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsAccordion.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsActionSheet.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsActions.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsAnchor.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsArea.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsArrow.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsBadge.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsBars.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsBlock.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsButton.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsCell.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsCheckbox.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsChip.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsChipGroup.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsClientOnly.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsContainer.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsDialog.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsDummy.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsField.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsFieldCounter.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsFieldLabel.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsFieldMessage.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsGrid.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsGridItem.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsGroup.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsHeader.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsHorizontalScroll.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsIcon.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsImage.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsInput.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsList.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsListGroup.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsListItem.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsListMenu.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsMask.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsMenu.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsModal.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsMotionAxis.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsMotionTransform.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsPage.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsPageArea.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsProgress.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsRipple.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsScrollbar.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsSection.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsSelect.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsSelectValue.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsSkeleton.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsSnackbar.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsSnackbarItem.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsTabItem.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsTabs.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsTabsNavigation.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsTextarea.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsTextareaAutosize.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsTooltip.d.ts +0 -0
- /package/dist/{media → src/media}/descriptions/wikiDescriptionsWindow.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Accordion/wikiMdxAccordion.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/ActionSheet/wikiMdxActionSheet.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Actions/wikiMdxActions.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Anchor/wikiMdxAnchor.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Area/wikiMdxArea.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Arrow/wikiMdxArrow.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Badge/wikiMdxBadge.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Bars/wikiMdxBars.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Block/wikiMdxBlock.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Button/wikiMdxButton.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Cell/wikiMdxCell.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Checkbox/wikiMdxCheckbox.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Chip/wikiMdxChip.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/ChipGroup/wikiMdxChipGroup.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/ClientOnly/wikiMdxClientOnly.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Container/wikiMdxContainer.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Dialog/wikiMdxDialog.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Dummy/wikiMdxDummy.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Field/wikiMdxField.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/FieldCounter/wikiMdxFieldCounter.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/FieldLabel/wikiMdxFieldLabel.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/FieldMessage/wikiMdxFieldMessage.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Grid/wikiMdxGrid.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/GridItem/wikiMdxGridItem.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Group/wikiMdxGroup.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Header/wikiMdxHeader.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/HorizontalScroll/wikiMdxHorizontalScroll.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Icon/wikiMdxIcon.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Image/wikiMdxImage.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Input/wikiMdxInput.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/List/wikiMdxList.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/ListGroup/wikiMdxListGroup.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/ListItem/wikiMdxListItem.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/ListMenu/wikiMdxListMenu.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Mask/wikiMdxMask.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Menu/wikiMdxMenu.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Modal/wikiMdxModal.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/MotionAxis/wikiMdxMotionAxis.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/MotionTransform/wikiMdxMotionTransform.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Page/wikiMdxPage.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/PageArea/wikiMdxPageArea.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Progress/wikiMdxProgress.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Ripple/wikiMdxRipple.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Scrollbar/wikiMdxScrollbar.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Section/wikiMdxSection.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Select/wikiMdxSelect.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/SelectValue/wikiMdxSelectValue.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Skeleton/wikiMdxSkeleton.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Snackbar/wikiMdxSnackbar.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/SnackbarItem/wikiMdxSnackbarItem.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/TabItem/wikiMdxTabItem.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Tabs/wikiMdxTabs.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/TabsNavigation/wikiMdxTabsNavigation.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Textarea/wikiMdxTextarea.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/TextareaAutosize/wikiMdxTextareaAutosize.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Tooltip/wikiMdxTooltip.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/Window/wikiMdxWindow.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/event/wikiMdxEvent.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/expose/wikiMdxExpose.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/slot/wikiMdxSlot.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/style/wikiMdxStyle.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/value/wikiMdxValue.d.ts +0 -0
- /package/dist/{media → src/media}/mdx/wikiMdx.d.ts +0 -0
- /package/dist/{media → src/media}/props/wiki.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiActions.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiActionsInclude.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiAnchor.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiAria.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiArrow.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiArrowInclude.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiAttributes.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiBadge.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiBars.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiBarsInclude.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiButton.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiCheckbox.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiChip.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiChipGroup.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiDialog.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiField.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiFieldCounterInclude.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiForm.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiGridItem.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiHook.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiIcon.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiIconInclude.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiImage.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiInformation.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiInput.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiList.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiListItem.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiMask.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiMaskInclude.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiMenu.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiMotionAxis.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiMotionTransform.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiOption.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiProgress.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiPropsTextarea.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiScrollbar.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiSelect.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiSelectValue.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiSnackbar.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiSnackbarItem.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiStatus.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiStyle.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiTabs.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiTabsNavigation.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiTechnical.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiText.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiTooltip.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiValue.d.ts +0 -0
- /package/dist/{media → src/media}/props/wikiWindow.d.ts +0 -0
- /package/dist/{media.d.ts → src/media.d.ts} +0 -0
- /package/dist/{shims-mdx.d.ts → src/shims-mdx.d.ts} +0 -0
- /package/dist/{storybook.d.ts → src/storybook.d.ts} +0 -0
- /package/dist/{types → src/types}/storybookTypes.d.ts +0 -0
- /package/dist/{types → src/types}/wikiTypes.d.ts +0 -0
- /package/src/media/functional/ui/{wiki-data.en.mdx → wiki/wiki-data.en.mdx} +0 -0
- /package/src/media/functional/ui/{wiki-data.ru.mdx → wiki/wiki-data.ru.mdx} +0 -0
- /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
|
+
```
|
package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementRef.en.mdx
CHANGED
|
@@ -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.
|
package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementRef.ru.mdx
CHANGED
|
@@ -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` и мутации) в единую реактивную систему. Вместо управления десятками разрозненных состояний (загрузка, ошибки, данные, фильтры), разработчик описывает конфигурацию, а хук берет на себя синхронизацию их жизненных циклов.
|
package/src/media/functional/functional/composables/useApiManagementRef/useApiManagementRef.vi.mdx
CHANGED
|
@@ -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
|
|
51
|
+
## SSR (Server-Side Rendering)
|
|
51
52
|
|
|
52
|
-
|
|
53
|
+
To ensure correct operation on the server side (SSR), the **`initSsr()`** method must be used.
|
|
53
54
|
|
|
54
|
-
###
|
|
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
|
-
|
|
57
|
-
|
|
58
|
+
```typescript
|
|
59
|
+
const { data, initSsr } = useApiRef('path/to/api')
|
|
58
60
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
// Call this for SSR support
|
|
62
|
+
initSsr()
|
|
63
|
+
```
|
|
61
64
|
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
55
|
+
Для корректной работы на стороне сервера (SSR) необходимо использовать метод **`initSsr()`**.
|
|
55
56
|
|
|
56
|
-
###
|
|
57
|
+
### Метод `initSsr()`
|
|
58
|
+
При вызове в `setup()` компонента гарантирует, что данные будут загружены на сервере перед рендерингом страницы, а на клиенте подставятся мгновенно.
|
|
57
59
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
```typescript
|
|
61
|
+
const { data, initSsr } = useApiRef('path/to/api')
|
|
60
62
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
+
// Вызываем для поддержки SSR
|
|
64
|
+
initSsr()
|
|
65
|
+
```
|
|
63
66
|
|
|
64
|
-
|
|
65
|
-
|
|
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
|
|
52
|
+
## SSR (Server-Side Rendering)
|
|
53
53
|
|
|
54
|
-
|
|
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
|
-
###
|
|
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
|
-
|
|
59
|
-
|
|
59
|
+
```typescript
|
|
60
|
+
const { data, initSsr } = useApiRef('path/to/api')
|
|
60
61
|
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
// Gọi phương thức này để hỗ trợ SSR
|
|
63
|
+
initSsr()
|
|
64
|
+
```
|
|
63
65
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
+
### Tự động hóa qua `AsyncRef`
|
|
67
|
+
Để tránh việc gọi `initSsr()` thủ công, bạn có thể sử dụng phiên bản bất đồng bộ — [**`useApiAsyncRef`**](./useApiAsyncRef.vi.mdx). Nó 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('
|
|
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('
|
|
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('
|
|
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)
|