@rio-cloud/uikit-mcp 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +75 -40
- package/dist/doc-metadata.json +1872 -0
- package/dist/docs/components/accentBar.md +582 -0
- package/dist/docs/components/activity.md +330 -0
- package/dist/docs/components/animatedNumber.md +88 -0
- package/dist/docs/components/animatedTextReveal.md +381 -0
- package/dist/docs/components/animations.md +459 -0
- package/dist/docs/components/appHeader.md +737 -0
- package/dist/docs/components/appLayout.md +2016 -0
- package/dist/docs/components/appNavigationBar.md +274 -0
- package/dist/docs/components/areaCharts.md +828 -0
- package/dist/docs/components/aspectRatioPlaceholder.md +106 -0
- package/dist/docs/components/assetTree.md +3223 -0
- package/dist/docs/components/autosuggests.md +1177 -0
- package/dist/docs/components/avatar.md +206 -0
- package/dist/docs/components/banner.md +668 -0
- package/dist/docs/components/barCharts.md +2785 -0
- package/dist/docs/components/barList.md +517 -0
- package/dist/docs/components/basicMap.md +167 -0
- package/dist/docs/components/bottomSheet.md +721 -0
- package/dist/docs/components/button.md +775 -0
- package/dist/docs/components/buttonToolbar.md +134 -0
- package/dist/docs/components/calendarStripe.md +525 -0
- package/dist/docs/components/card.md +86 -0
- package/dist/docs/components/carousel.md +128 -0
- package/dist/docs/components/chartColors.md +716 -0
- package/dist/docs/components/chartsGettingStarted.md +28 -0
- package/dist/docs/components/chat.md +932 -0
- package/dist/docs/components/checkbox.md +996 -0
- package/dist/docs/components/clearableInput.md +806 -0
- package/dist/docs/components/collapse.md +189 -0
- package/dist/docs/components/composedCharts.md +424 -0
- package/dist/docs/components/contentLoader.md +674 -0
- package/dist/docs/components/dataTabs.md +1251 -0
- package/dist/docs/components/datepickers.md +2543 -0
- package/dist/docs/components/dialogs.md +2244 -0
- package/dist/docs/components/divider.md +219 -0
- package/dist/docs/components/dropdowns.md +17550 -0
- package/dist/docs/components/editableContent.md +1127 -0
- package/dist/docs/components/expander.md +970 -0
- package/dist/docs/components/fade.md +836 -0
- package/dist/docs/components/fadeExpander.md +180 -0
- package/dist/docs/components/fadeUp.md +396 -0
- package/dist/docs/components/feedback.md +758 -0
- package/dist/docs/components/filePickers.md +370 -0
- package/dist/docs/components/formLabel.md +251 -0
- package/dist/docs/components/fullscreenMap.md +10 -0
- package/dist/docs/components/groupedItemList.md +1001 -0
- package/dist/docs/components/iconList.md +306 -0
- package/dist/docs/components/imagePreloader.md +167 -0
- package/dist/docs/components/labeledElement.md +115 -0
- package/dist/docs/components/licensePlate.md +412 -0
- package/dist/docs/components/lineCharts.md +2014 -0
- package/dist/docs/components/listMenu.md +392 -0
- package/dist/docs/components/loadMore.md +219 -0
- package/dist/docs/components/mainNavigation.md +129 -0
- package/dist/docs/components/mapCircle.md +93 -0
- package/dist/docs/components/mapCluster.md +337 -0
- package/dist/docs/components/mapContext.md +284 -0
- package/dist/docs/components/mapDraggableMarker.md +150 -0
- package/dist/docs/components/mapGettingStarted.md +39 -0
- package/dist/docs/components/mapInfoBubble.md +135 -0
- package/dist/docs/components/mapLayerGroup.md +94 -0
- package/dist/docs/components/mapMarker.md +1814 -0
- package/dist/docs/components/mapPolygon.md +959 -0
- package/dist/docs/components/mapRoute.md +3816 -0
- package/dist/docs/components/mapRouteGenerator.md +6 -0
- package/dist/docs/components/mapSettings.md +1040 -0
- package/dist/docs/components/mapUtils.md +132 -0
- package/dist/docs/components/multiselects.md +1921 -0
- package/dist/docs/components/noData.md +210 -0
- package/dist/docs/components/notifications.md +314 -0
- package/dist/docs/components/numbercontrol.md +706 -0
- package/dist/docs/components/onboarding.md +297 -0
- package/dist/docs/components/page.md +241 -0
- package/dist/docs/components/pager.md +133 -0
- package/dist/docs/components/pieCharts.md +1284 -0
- package/dist/docs/components/popover.md +222 -0
- package/dist/docs/components/position.md +50 -0
- package/dist/docs/components/radialBarCharts.md +3663 -0
- package/dist/docs/components/radiobutton.md +1271 -0
- package/dist/docs/components/releaseNotes.md +135 -0
- package/dist/docs/components/resizer.md +162 -0
- package/dist/docs/components/responsiveColumnStripe.md +435 -0
- package/dist/docs/components/responsiveVideo.md +71 -0
- package/dist/docs/components/rioglyph.md +331 -0
- package/dist/docs/components/rules.md +965 -0
- package/dist/docs/components/saveableInput.md +1721 -0
- package/dist/docs/components/selects.md +1993 -0
- package/dist/docs/components/sidebar.md +332 -0
- package/dist/docs/components/sliders.md +376 -0
- package/dist/docs/components/smoothScrollbars.md +1180 -0
- package/dist/docs/components/spinners.md +506 -0
- package/dist/docs/components/states.md +1176 -0
- package/dist/docs/components/statsWidgets.md +636 -0
- package/dist/docs/components/statusBar.md +644 -0
- package/dist/docs/components/stepButton.md +61 -0
- package/dist/docs/components/steppedProgressBars.md +1064 -0
- package/dist/docs/components/subNavigation.md +470 -0
- package/dist/docs/components/supportMarker.md +115 -0
- package/dist/docs/components/svgImage.md +248 -0
- package/dist/docs/components/switch.md +554 -0
- package/dist/docs/components/tables.md +8 -0
- package/dist/docs/components/tagManager.md +476 -0
- package/dist/docs/components/tags.md +785 -0
- package/dist/docs/components/teaser.md +925 -0
- package/dist/docs/components/timeline.md +514 -0
- package/dist/docs/components/timepicker.md +262 -0
- package/dist/docs/components/toggleButton.md +178 -0
- package/dist/docs/components/tooltip.md +454 -0
- package/dist/docs/components/virtualList.md +483 -0
- package/dist/docs/foundations.md +20901 -0
- package/dist/docs/start/changelog.md +439 -0
- package/dist/docs/start/goodtoknow.md +14 -0
- package/dist/docs/start/guidelines/color-combinations.md +678 -0
- package/dist/docs/start/guidelines/custom-css.md +42 -0
- package/dist/docs/start/guidelines/custom-rioglyph.md +35 -0
- package/dist/docs/start/guidelines/formatting.md +587 -0
- package/dist/docs/start/guidelines/iframe.md +323 -0
- package/dist/docs/start/guidelines/obfuscate-data.md +30 -0
- package/dist/docs/start/guidelines/print-css.md +36 -0
- package/dist/docs/start/guidelines/spinner.md +710 -0
- package/dist/docs/start/guidelines/supported-browsers.md +10 -0
- package/dist/docs/start/guidelines/writing.md +635 -0
- package/dist/docs/start/howto.md +187 -0
- package/dist/docs/start/intro.md +43 -0
- package/dist/docs/start/responsiveness.md +98 -0
- package/dist/docs/templates/common-table.md +1111 -0
- package/dist/docs/templates/detail-views.md +942 -0
- package/dist/docs/templates/expandable-details.md +228 -0
- package/dist/docs/templates/feature-cards.md +549 -0
- package/dist/docs/templates/form-summary.md +199 -0
- package/dist/docs/templates/form-toggle.md +367 -0
- package/dist/docs/templates/list-blocks.md +1021 -0
- package/dist/docs/templates/loading-progress.md +109 -0
- package/dist/docs/templates/options-panel.md +152 -0
- package/dist/docs/templates/panel-variants.md +164 -0
- package/dist/docs/templates/progress-cards.md +607 -0
- package/dist/docs/templates/progress-success.md +142 -0
- package/dist/docs/templates/settings-form.md +434 -0
- package/dist/docs/templates/stats-blocks.md +1381 -0
- package/dist/docs/templates/table-panel.md +184 -0
- package/dist/docs/templates/table-row-animation.md +317 -0
- package/dist/docs/templates/usage-cards.md +227 -0
- package/dist/docs/utilities/deviceUtils.md +123 -0
- package/dist/docs/utilities/featureToggles.md +90 -0
- package/dist/docs/utilities/fuelTypeUtils.md +186 -0
- package/dist/docs/utilities/routeUtils.md +138 -0
- package/dist/docs/utilities/useAfterMount.md +66 -0
- package/dist/docs/utilities/useAutoAnimate.md +193 -0
- package/dist/docs/utilities/useAverage.md +95 -0
- package/dist/docs/utilities/useClickOutside.md +61 -0
- package/dist/docs/utilities/useClipboard.md +93 -0
- package/dist/docs/utilities/useCount.md +178 -0
- package/dist/docs/utilities/useDarkMode.md +49 -0
- package/dist/docs/utilities/useDebugInfo.md +126 -0
- package/dist/docs/utilities/useEffectOnce.md +58 -0
- package/dist/docs/utilities/useElapsedTime.md +58 -0
- package/dist/docs/utilities/useElementSize.md +71 -0
- package/dist/docs/utilities/useEsc.md +58 -0
- package/dist/docs/utilities/useEvent.md +64 -0
- package/dist/docs/utilities/useFocusTrap.md +85 -0
- package/dist/docs/utilities/useFullscreen.md +198 -0
- package/dist/docs/utilities/useHover.md +55 -0
- package/dist/docs/utilities/useIncomingPostMessages.md +237 -0
- package/dist/docs/utilities/useInterval.md +85 -0
- package/dist/docs/utilities/useIsFocusWithin.md +114 -0
- package/dist/docs/utilities/useKey.md +151 -0
- package/dist/docs/utilities/useLocalStorage.md +91 -0
- package/dist/docs/utilities/useLocationSuggestions.md +114 -0
- package/dist/docs/utilities/useMax.md +62 -0
- package/dist/docs/utilities/useMin.md +78 -0
- package/dist/docs/utilities/useMutationObserver.md +113 -0
- package/dist/docs/utilities/useOnScreen.md +138 -0
- package/dist/docs/utilities/useOnlineStatus.md +49 -0
- package/dist/docs/utilities/usePostMessage.md +117 -0
- package/dist/docs/utilities/usePostMessageSender.md +257 -0
- package/dist/docs/utilities/usePrevious.md +101 -0
- package/dist/docs/utilities/useResizeObserver.md +151 -0
- package/dist/docs/utilities/useScrollPosition.md +252 -0
- package/dist/docs/utilities/useSearch.md +228 -0
- package/dist/docs/utilities/useSorting.md +389 -0
- package/dist/docs/utilities/useStateWithValidation.md +83 -0
- package/dist/docs/utilities/useSum.md +155 -0
- package/dist/docs/utilities/useTableExport.md +404 -0
- package/dist/docs/utilities/useTableSelection.md +1120 -0
- package/dist/docs/utilities/useTimeout.md +55 -0
- package/dist/docs/utilities/useToggle.md +115 -0
- package/dist/docs/utilities/useWindowResize.md +70 -0
- package/dist/index.mjs +271 -0
- package/dist/search-synonyms.json +134 -0
- package/dist/version.json +4 -0
- package/package.json +23 -19
- package/bin/uikit-mcp.mjs +0 -23
- package/data/pages/Components/components/accentbar.json +0 -207
- package/data/pages/Components/components/activity.json +0 -87
- package/data/pages/Components/components/animatednumber.json +0 -99
- package/data/pages/Components/components/animations.json +0 -87
- package/data/pages/Components/components/appheader.json +0 -291
- package/data/pages/Components/components/applayout.json +0 -1198
- package/data/pages/Components/components/appnavigationbar.json +0 -327
- package/data/pages/Components/components/areacharts.json +0 -563
- package/data/pages/Components/components/aspectratioplaceholder.json +0 -75
- package/data/pages/Components/components/assettree.json +0 -3080
- package/data/pages/Components/components/autosuggests.json +0 -710
- package/data/pages/Components/components/avatar.json +0 -157
- package/data/pages/Components/components/banner.json +0 -599
- package/data/pages/Components/components/barcharts.json +0 -1507
- package/data/pages/Components/components/barlist.json +0 -223
- package/data/pages/Components/components/basicmap.json +0 -68
- package/data/pages/Components/components/bottomsheet.json +0 -601
- package/data/pages/Components/components/button.json +0 -583
- package/data/pages/Components/components/buttontoolbar.json +0 -63
- package/data/pages/Components/components/calendarstripe.json +0 -235
- package/data/pages/Components/components/card.json +0 -69
- package/data/pages/Components/components/carousel.json +0 -39
- package/data/pages/Components/components/chartcolors.json +0 -34
- package/data/pages/Components/components/chartsgettingstarted.json +0 -32
- package/data/pages/Components/components/chat.json +0 -39
- package/data/pages/Components/components/checkbox.json +0 -847
- package/data/pages/Components/components/clearableinput.json +0 -789
- package/data/pages/Components/components/collapse.json +0 -175
- package/data/pages/Components/components/composedcharts.json +0 -159
- package/data/pages/Components/components/contentloader.json +0 -233
- package/data/pages/Components/components/datatabs.json +0 -680
- package/data/pages/Components/components/datepickers.json +0 -287
- package/data/pages/Components/components/dialogs.json +0 -1492
- package/data/pages/Components/components/divider.json +0 -93
- package/data/pages/Components/components/dropdowns.json +0 -936
- package/data/pages/Components/components/editablecontent.json +0 -1117
- package/data/pages/Components/components/expander.json +0 -377
- package/data/pages/Components/components/fade.json +0 -403
- package/data/pages/Components/components/fadeexpander.json +0 -75
- package/data/pages/Components/components/fadeup.json +0 -127
- package/data/pages/Components/components/feedback.json +0 -269
- package/data/pages/Components/components/filepickers.json +0 -269
- package/data/pages/Components/components/formlabel.json +0 -115
- package/data/pages/Components/components/fullscreenmap.json +0 -22
- package/data/pages/Components/components/groupeditemlist.json +0 -323
- package/data/pages/Components/components/iconlist.json +0 -45
- package/data/pages/Components/components/imagepreloader.json +0 -81
- package/data/pages/Components/components/labeledelement.json +0 -75
- package/data/pages/Components/components/licenseplate.json +0 -69
- package/data/pages/Components/components/linecharts.json +0 -987
- package/data/pages/Components/components/listmenu.json +0 -313
- package/data/pages/Components/components/loadmore.json +0 -175
- package/data/pages/Components/components/mainnavigation.json +0 -39
- package/data/pages/Components/components/mapcircle.json +0 -34
- package/data/pages/Components/components/mapcluster.json +0 -51
- package/data/pages/Components/components/mapcontext.json +0 -105
- package/data/pages/Components/components/mapdraggablemarker.json +0 -34
- package/data/pages/Components/components/mapgettingstarted.json +0 -27
- package/data/pages/Components/components/mapgroup.json +0 -1198
- package/data/pages/Components/components/mapinfobubble.json +0 -34
- package/data/pages/Components/components/maplayergroup.json +0 -34
- package/data/pages/Components/components/mapmarker.json +0 -700
- package/data/pages/Components/components/mappolygon.json +0 -45
- package/data/pages/Components/components/maproute.json +0 -623
- package/data/pages/Components/components/maproutegenerator.json +0 -16
- package/data/pages/Components/components/mapsettings.json +0 -51
- package/data/pages/Components/components/maputils.json +0 -34
- package/data/pages/Components/components/multiselects.json +0 -1451
- package/data/pages/Components/components/nodata.json +0 -139
- package/data/pages/Components/components/notifications.json +0 -65
- package/data/pages/Components/components/numbercontrol.json +0 -301
- package/data/pages/Components/components/onboarding.json +0 -302
- package/data/pages/Components/components/page.json +0 -197
- package/data/pages/Components/components/pager.json +0 -93
- package/data/pages/Components/components/piecharts.json +0 -731
- package/data/pages/Components/components/popover.json +0 -251
- package/data/pages/Components/components/position.json +0 -69
- package/data/pages/Components/components/radialbarcharts.json +0 -1304
- package/data/pages/Components/components/radiobutton.json +0 -1105
- package/data/pages/Components/components/releasenotes.json +0 -44
- package/data/pages/Components/components/resizer.json +0 -93
- package/data/pages/Components/components/responsivecolumnstripe.json +0 -123
- package/data/pages/Components/components/responsivevideo.json +0 -75
- package/data/pages/Components/components/rioglyph.json +0 -93
- package/data/pages/Components/components/rules.json +0 -410
- package/data/pages/Components/components/saveableinput.json +0 -703
- package/data/pages/Components/components/selects.json +0 -701
- package/data/pages/Components/components/sidebar.json +0 -243
- package/data/pages/Components/components/sliders.json +0 -235
- package/data/pages/Components/components/smoothscrollbars.json +0 -335
- package/data/pages/Components/components/spinners.json +0 -343
- package/data/pages/Components/components/states.json +0 -1705
- package/data/pages/Components/components/statswidgets.json +0 -314
- package/data/pages/Components/components/statusbar.json +0 -177
- package/data/pages/Components/components/stepbutton.json +0 -57
- package/data/pages/Components/components/steppedprogressbars.json +0 -417
- package/data/pages/Components/components/subnavigation.json +0 -107
- package/data/pages/Components/components/supportmarker.json +0 -45
- package/data/pages/Components/components/svgimage.json +0 -81
- package/data/pages/Components/components/switch.json +0 -111
- package/data/pages/Components/components/tables.json +0 -144
- package/data/pages/Components/components/tagmanager.json +0 -86
- package/data/pages/Components/components/tags.json +0 -146
- package/data/pages/Components/components/teaser.json +0 -188
- package/data/pages/Components/components/timeline.json +0 -45
- package/data/pages/Components/components/timepicker.json +0 -163
- package/data/pages/Components/components/togglebutton.json +0 -247
- package/data/pages/Components/components/tooltip.json +0 -270
- package/data/pages/Components/components/virtuallist.json +0 -175
- package/data/pages/Foundations/foundations.json +0 -2475
- package/data/pages/Getting-started/start/changelog.json +0 -22
- package/data/pages/Getting-started/start/goodtoknow.json +0 -32
- package/data/pages/Getting-started/start/guidelines/color-combinations.json +0 -58
- package/data/pages/Getting-started/start/guidelines/custom-css.json +0 -27
- package/data/pages/Getting-started/start/guidelines/custom-rioglyph.json +0 -22
- package/data/pages/Getting-started/start/guidelines/formatting.json +0 -97
- package/data/pages/Getting-started/start/guidelines/iframe.json +0 -93
- package/data/pages/Getting-started/start/guidelines/obfuscate-data.json +0 -22
- package/data/pages/Getting-started/start/guidelines/print-css.json +0 -37
- package/data/pages/Getting-started/start/guidelines/spinner.json +0 -144
- package/data/pages/Getting-started/start/guidelines/supported-browsers.json +0 -22
- package/data/pages/Getting-started/start/guidelines/writing.json +0 -242
- package/data/pages/Getting-started/start/howto.json +0 -72
- package/data/pages/Getting-started/start/intro.json +0 -37
- package/data/pages/Getting-started/start/responsiveness.json +0 -52
- package/data/pages/Templates/templates/common-table.json +0 -39
- package/data/pages/Templates/templates/detail-views.json +0 -71
- package/data/pages/Templates/templates/expandable-details.json +0 -39
- package/data/pages/Templates/templates/feature-cards.json +0 -103
- package/data/pages/Templates/templates/form-summary.json +0 -39
- package/data/pages/Templates/templates/form-toggle.json +0 -39
- package/data/pages/Templates/templates/list-blocks.json +0 -119
- package/data/pages/Templates/templates/loading-progress.json +0 -39
- package/data/pages/Templates/templates/options-panel.json +0 -39
- package/data/pages/Templates/templates/panel-variants.json +0 -39
- package/data/pages/Templates/templates/progress-cards.json +0 -71
- package/data/pages/Templates/templates/progress-success.json +0 -39
- package/data/pages/Templates/templates/settings-form.json +0 -39
- package/data/pages/Templates/templates/stats-blocks.json +0 -135
- package/data/pages/Templates/templates/table-panel.json +0 -39
- package/data/pages/Templates/templates/table-row-animation.json +0 -39
- package/data/pages/Templates/templates/usage-cards.json +0 -39
- package/data/pages/Utilities/utilities/deviceutils.json +0 -39
- package/data/pages/Utilities/utilities/featuretoggles.json +0 -42
- package/data/pages/Utilities/utilities/fueltypeutils.json +0 -118
- package/data/pages/Utilities/utilities/routeutils.json +0 -34
- package/data/pages/Utilities/utilities/useaftermount.json +0 -63
- package/data/pages/Utilities/utilities/useaverage.json +0 -86
- package/data/pages/Utilities/utilities/useclickoutside.json +0 -69
- package/data/pages/Utilities/utilities/useclipboard.json +0 -57
- package/data/pages/Utilities/utilities/usecount.json +0 -92
- package/data/pages/Utilities/utilities/usedarkmode.json +0 -50
- package/data/pages/Utilities/utilities/usedebuginfo.json +0 -63
- package/data/pages/Utilities/utilities/useeffectonce.json +0 -57
- package/data/pages/Utilities/utilities/useelapsedtime.json +0 -57
- package/data/pages/Utilities/utilities/useelementsize.json +0 -63
- package/data/pages/Utilities/utilities/useesc.json +0 -57
- package/data/pages/Utilities/utilities/useevent.json +0 -75
- package/data/pages/Utilities/utilities/usefocustrap.json +0 -57
- package/data/pages/Utilities/utilities/usefullscreen.json +0 -197
- package/data/pages/Utilities/utilities/usehover.json +0 -57
- package/data/pages/Utilities/utilities/useinterval.json +0 -63
- package/data/pages/Utilities/utilities/useisfocuswithin.json +0 -75
- package/data/pages/Utilities/utilities/usekey.json +0 -75
- package/data/pages/Utilities/utilities/uselocalstorage.json +0 -69
- package/data/pages/Utilities/utilities/uselocationsuggestions.json +0 -110
- package/data/pages/Utilities/utilities/usemax.json +0 -86
- package/data/pages/Utilities/utilities/usemin.json +0 -86
- package/data/pages/Utilities/utilities/usemutationobserver.json +0 -69
- package/data/pages/Utilities/utilities/useonlinestatus.json +0 -39
- package/data/pages/Utilities/utilities/useonscreen.json +0 -63
- package/data/pages/Utilities/utilities/usepostmessage.json +0 -80
- package/data/pages/Utilities/utilities/useprevious.json +0 -63
- package/data/pages/Utilities/utilities/useresizeobserver.json +0 -65
- package/data/pages/Utilities/utilities/usescrollposition.json +0 -103
- package/data/pages/Utilities/utilities/usesearch.json +0 -197
- package/data/pages/Utilities/utilities/usesorting.json +0 -139
- package/data/pages/Utilities/utilities/usestatewithvalidation.json +0 -69
- package/data/pages/Utilities/utilities/usesum.json +0 -86
- package/data/pages/Utilities/utilities/usetableexport.json +0 -87
- package/data/pages/Utilities/utilities/usetableselection.json +0 -311
- package/data/pages/Utilities/utilities/usetimeout.json +0 -63
- package/data/pages/Utilities/utilities/usetoggle.json +0 -75
- package/data/pages/Utilities/utilities/usewindowresize.json +0 -63
- package/data/version.json +0 -4
- package/docs/content-schema.md +0 -147
- package/docs/navigation-inventory.json +0 -1310
- package/docs/search-synonyms.json +0 -43
- package/server/index.mjs +0 -268
- package/server/lib/load-docs.mjs +0 -48
- package/server/lib/normalise-doc.mjs +0 -220
- package/server/lib/render-markdown.mjs +0 -82
- package/server/lib/search-index.mjs +0 -49
- package/server/lib/types.js +0 -99
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# usePostMessageSender
|
|
2
|
+
|
|
3
|
+
*Category:* Utilities
|
|
4
|
+
*Section:* Browser & device hooks
|
|
5
|
+
*Source:* https://uikit.developers.rio.cloud/#utilities/usePostMessageSender
|
|
6
|
+
*Captured:* 2025-12-12T12:39:46.089Z
|
|
7
|
+
|
|
8
|
+
Helper hook to fire postMessage events to other windows: a specific target (including yourself), the parent or top window, or every iframe on the page. It uses the wildcard target origin (*) and no-ops when a target window is missing, so it is safe to call even when an iframe or parent is not present.
|
|
9
|
+
|
|
10
|
+
## usePostMessageSender
|
|
11
|
+
|
|
12
|
+
### Example: Example 1
|
|
13
|
+
|
|
14
|
+
Use the buttons below to dispatch messages using usePostMessageSender. The gray box below is a real <iframe> that listens for your messages and sends an IFRAME_ECHO back.
|
|
15
|
+
Send to Self (Window)Send to Iframe (Ref)Broadcast to All IframesSend to Parent
|
|
16
|
+
Target Iframe
|
|
17
|
+
This iframe acts as a separate window context. It runs a script to display what it receives.
|
|
18
|
+
|
|
19
|
+
Activity Log
|
|
20
|
+
Shows outgoing confirmations and incoming "Echos" from the iframe.
|
|
21
|
+
|
|
22
|
+
#### Summary
|
|
23
|
+
|
|
24
|
+
Use the buttons below to dispatch messages using usePostMessageSender. The gray box below is a real <iframe> that listens for your messages and sends an IFRAME_ECHO back.
|
|
25
|
+
Send to Self (Window)Send to Iframe (Ref)Broadcast to All IframesSend to Parent
|
|
26
|
+
Target Iframe
|
|
27
|
+
This iframe acts as a separate window context. It runs a script to display what it receives.
|
|
28
|
+
|
|
29
|
+
Activity Log
|
|
30
|
+
Shows outgoing confirmations and incoming "Echos" from the iframe.
|
|
31
|
+
|
|
32
|
+
#### React (tsx)
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { useEffect, useRef, useState } from 'react';
|
|
36
|
+
|
|
37
|
+
import ButtonToolbar from '@rio-cloud/rio-uikit/ButtonToolbar';
|
|
38
|
+
import Button from '@rio-cloud/rio-uikit/components/button/Button';
|
|
39
|
+
import usePostMessageSender from '@rio-cloud/rio-uikit/usePostMessageSender';
|
|
40
|
+
import useIncomingPostMessages from '@rio-cloud/rio-uikit/useIncomingPostMessages';
|
|
41
|
+
|
|
42
|
+
export default () => {
|
|
43
|
+
const { sendMessage, sendMessageToAllIframes, sendMessageToParent } = usePostMessageSender();
|
|
44
|
+
|
|
45
|
+
const [logs, setLogs] = useState<string[]>([]);
|
|
46
|
+
|
|
47
|
+
// We use a ref to target a specific iframe for the "Single Target" test
|
|
48
|
+
const iframeRef = useRef<HTMLIFrameElement>(null);
|
|
49
|
+
|
|
50
|
+
// 1. LISTEN FOR REPLIES (ECHOS)
|
|
51
|
+
// We reuse the receiving hook to verify that our sent messages were actually processed
|
|
52
|
+
// by the target (the iframe or window) and replied to.
|
|
53
|
+
useIncomingPostMessages({
|
|
54
|
+
handlers: {
|
|
55
|
+
// The iframe in this demo is programmed to send this event back
|
|
56
|
+
IFRAME_ECHO: (payload: { type: string; payload: unknown }) => {
|
|
57
|
+
addLog(`Received ECHO from iframe: ${JSON.stringify(payload)}`);
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// Also listen for raw messages to catch self-sent messages
|
|
63
|
+
useIncomingPostMessages(event => {
|
|
64
|
+
if (event.data === 'Hello Self!') {
|
|
65
|
+
addLog('Received self-sent message: "Hello Self!"');
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
const addLog = (msg: string) => setLogs(prev => [...prev, `[${new Date().toLocaleTimeString()}] ${msg}`]);
|
|
70
|
+
|
|
71
|
+
// 2. SENDING ACTIONS
|
|
72
|
+
const handleSendToSelf = () => {
|
|
73
|
+
// Sending to 'window' is useful for decoupling components on the same page
|
|
74
|
+
sendMessage('Hello Self!', window);
|
|
75
|
+
addLog('Sent "Hello Self!" to current window');
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const handleSendToIframe = () => {
|
|
79
|
+
if (iframeRef.current?.contentWindow) {
|
|
80
|
+
// Target a specific window (the iframe)
|
|
81
|
+
const payload = { id: 123, text: 'Direct message' };
|
|
82
|
+
sendMessage({ type: 'UPDATE_DATA', payload }, iframeRef.current.contentWindow);
|
|
83
|
+
addLog('Sent UPDATE_DATA to specific iframe');
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const handleBroadcast = () => {
|
|
88
|
+
// Useful if you have multiple widgets/iframes and want to notify all of them
|
|
89
|
+
sendMessageToAllIframes({ type: 'GLOBAL_RESET' });
|
|
90
|
+
addLog('Broadcasted GLOBAL_RESET to all iframes');
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const handleSendToParent = () => {
|
|
94
|
+
// This might not do much if you are top-level, but won't crash
|
|
95
|
+
sendMessageToParent('Hello Parent!');
|
|
96
|
+
addLog('Sent message to parent window (check console if inside iframe)');
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
return (
|
|
100
|
+
<>
|
|
101
|
+
<p className='margin-bottom-20'>
|
|
102
|
+
Use the buttons below to dispatch messages using <code>usePostMessageSender</code>. The gray box below
|
|
103
|
+
is a real <code><iframe></code> that listens for your messages and sends an <b>IFRAME_ECHO</b>{' '}
|
|
104
|
+
back.
|
|
105
|
+
</p>
|
|
106
|
+
|
|
107
|
+
<ButtonToolbar>
|
|
108
|
+
<Button onClick={handleSendToSelf}>Send to Self (Window)</Button>
|
|
109
|
+
<Button onClick={handleSendToIframe}>Send to Iframe (Ref)</Button>
|
|
110
|
+
<Button onClick={handleBroadcast}>Broadcast to All Iframes</Button>
|
|
111
|
+
<Button onClick={handleSendToParent}>Send to Parent</Button>
|
|
112
|
+
</ButtonToolbar>
|
|
113
|
+
|
|
114
|
+
<div className='display-grid grid-cols-1 grid-cols-2-md margin-y-20 gap-25'>
|
|
115
|
+
<div>
|
|
116
|
+
<h5>Target Iframe</h5>
|
|
117
|
+
<p className='text-color-darker margin-y-10'>
|
|
118
|
+
This iframe acts as a separate window context. It runs a script to display what it receives.
|
|
119
|
+
</p>
|
|
120
|
+
<iframe
|
|
121
|
+
ref={iframeRef}
|
|
122
|
+
title='Receiver demo'
|
|
123
|
+
className='width-100pct height-200 border rounded'
|
|
124
|
+
srcDoc={iframeScript} // See variable at bottom of file
|
|
125
|
+
/>
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
<div>
|
|
129
|
+
<h5>Activity Log</h5>
|
|
130
|
+
<p className='text-color-darker margin-y-10'>
|
|
131
|
+
Shows outgoing confirmations and incoming "Echos" from the iframe.
|
|
132
|
+
</p>
|
|
133
|
+
<EventTextarea events={logs} />
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
</>
|
|
137
|
+
);
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
const EventTextarea = ({ events }: { events: string[] }) => {
|
|
141
|
+
const textareaRef = useRef<HTMLTextAreaElement>(null);
|
|
142
|
+
|
|
143
|
+
useEffect(() => {
|
|
144
|
+
if (textareaRef.current) {
|
|
145
|
+
textareaRef.current.scrollTop = textareaRef.current.scrollHeight;
|
|
146
|
+
}
|
|
147
|
+
}, [events]);
|
|
148
|
+
|
|
149
|
+
return (
|
|
150
|
+
<textarea
|
|
151
|
+
ref={textareaRef}
|
|
152
|
+
readOnly
|
|
153
|
+
spellCheck={false}
|
|
154
|
+
value={events.join('\n')}
|
|
155
|
+
className='form-control width-100pct height-200 padding-15 font-size-12'
|
|
156
|
+
/>
|
|
157
|
+
);
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
// This HTML/JS blob is injected into the iframe to simulate a receiving widget
|
|
161
|
+
const iframeScript = `
|
|
162
|
+
<!DOCTYPE html>
|
|
163
|
+
<html>
|
|
164
|
+
<body style="background-color: #f9f9f9; font-family: sans-serif; padding: 10px; margin: 0;">
|
|
165
|
+
<h4 style="margin-top: 0; color: #555;">Iframe Content</h4>
|
|
166
|
+
<div id="display" style="font-size: 13px; color: #333;">Waiting for messages...</div>
|
|
167
|
+
<script>
|
|
168
|
+
window.addEventListener('message', (event) => {
|
|
169
|
+
// Ignore react-devtools
|
|
170
|
+
if(typeof event.data === 'object' && event.data?.source?.startsWith('react-devtools')) return;
|
|
171
|
+
|
|
172
|
+
const display = document.getElementById('display');
|
|
173
|
+
const dataStr = typeof event.data === 'string' ? event.data : JSON.stringify(event.data);
|
|
174
|
+
|
|
175
|
+
display.innerHTML = '<strong>Received:</strong><br/>' + dataStr;
|
|
176
|
+
display.style.backgroundColor = '#e6fffa';
|
|
177
|
+
setTimeout(() => display.style.backgroundColor = 'transparent', 500);
|
|
178
|
+
|
|
179
|
+
// Send an ECHO back to the parent to prove communication loop
|
|
180
|
+
if (event.data && typeof event.data === 'object') {
|
|
181
|
+
window.parent.postMessage({
|
|
182
|
+
type: 'IFRAME_ECHO',
|
|
183
|
+
payload: event.data
|
|
184
|
+
}, '*');
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
</script>
|
|
188
|
+
</body>
|
|
189
|
+
</html>
|
|
190
|
+
`;
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
#### HTML (html)
|
|
194
|
+
|
|
195
|
+
```html
|
|
196
|
+
<p class="margin-bottom-20">Use the buttons below to dispatch messages using <code>usePostMessageSender</code>. The gray box below is a real <code><iframe></code> that listens for your messages and sends an <b>IFRAME_ECHO</b> back.</p>
|
|
197
|
+
<div class="btn-toolbar">
|
|
198
|
+
<button type="button" class="btn btn-default btn-component" tabindex="0">Send to Self (Window)</button>
|
|
199
|
+
<button type="button" class="btn btn-default btn-component" tabindex="0">Send to Iframe (Ref)</button>
|
|
200
|
+
<button type="button" class="btn btn-default btn-component" tabindex="0">Broadcast to All Iframes</button>
|
|
201
|
+
<button type="button" class="btn btn-default btn-component" tabindex="0">Send to Parent</button>
|
|
202
|
+
</div>
|
|
203
|
+
<div class="display-grid grid-cols-1 grid-cols-2-md margin-y-20 gap-25">
|
|
204
|
+
<div>
|
|
205
|
+
<h5>Target Iframe</h5>
|
|
206
|
+
<p class="text-color-darker margin-y-10">This iframe acts as a separate window context. It runs a script to display what it receives.</p>
|
|
207
|
+
<iframe title="Receiver demo" class="width-100pct height-200 border rounded" srcdoc="
|
|
208
|
+
<!DOCTYPE html>
|
|
209
|
+
<html>
|
|
210
|
+
<body style="background-color: #f9f9f9; font-family: sans-serif; padding: 10px; margin: 0;">
|
|
211
|
+
<h4 style="margin-top: 0; color: #555;">Iframe Content</h4>
|
|
212
|
+
<div id="display" style="font-size: 13px; color: #333;">Waiting for messages...</div>
|
|
213
|
+
<script>
|
|
214
|
+
window.addEventListener('message', (event) => {
|
|
215
|
+
// Ignore react-devtools
|
|
216
|
+
if(typeof event.data === 'object' && event.data?.source?.startsWith('react-devtools')) return;
|
|
217
|
+
|
|
218
|
+
const display = document.getElementById('display');
|
|
219
|
+
const dataStr = typeof event.data === 'string' ? event.data : JSON.stringify(event.data);
|
|
220
|
+
|
|
221
|
+
display.innerHTML = '<strong>Received:</strong><br/>' + dataStr;
|
|
222
|
+
display.style.backgroundColor = '#e6fffa';
|
|
223
|
+
setTimeout(() => display.style.backgroundColor = 'transparent', 500);
|
|
224
|
+
|
|
225
|
+
// Send an ECHO back to the parent to prove communication loop
|
|
226
|
+
if (event.data && typeof event.data === 'object') {
|
|
227
|
+
window.parent.postMessage({
|
|
228
|
+
type: 'IFRAME_ECHO',
|
|
229
|
+
payload: event.data
|
|
230
|
+
}, '*');
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
</script>
|
|
234
|
+
</body>
|
|
235
|
+
</html>
|
|
236
|
+
">
|
|
237
|
+
</iframe>
|
|
238
|
+
</div>
|
|
239
|
+
<div>
|
|
240
|
+
<h5>Activity Log</h5>
|
|
241
|
+
<p class="text-color-darker margin-y-10">Shows outgoing confirmations and incoming "Echos" from the iframe.</p>
|
|
242
|
+
<textarea readonly="" spellcheck="false" class="form-control width-100pct height-200 padding-15 font-size-12">
|
|
243
|
+
</textarea>
|
|
244
|
+
</div>
|
|
245
|
+
</div>
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
#### Props: Returns
|
|
249
|
+
|
|
250
|
+
### Returns
|
|
251
|
+
|
|
252
|
+
| Name | Type | Default | Description |
|
|
253
|
+
| --- | --- | --- | --- |
|
|
254
|
+
| sendMessage | (message: unknown, targetWindow: WindowProxy \| null \| undefined) => void | — | Send a message to the provided window (or to yourself if you pass window). Does nothing if target is null/undefined. |
|
|
255
|
+
| sendMessageToParent | (message: unknown) => void | — | Send a message to the parent window (no-op when already top-level). |
|
|
256
|
+
| sendMessageToTop | (message: unknown) => void | — | Send a message to the top window (no-op when already top-level). |
|
|
257
|
+
| sendMessageToAllIframes | (message: unknown) => void | — | Broadcast a message to every iframe found on the page. |
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# usePrevious
|
|
2
|
+
|
|
3
|
+
*Category:* Utilities
|
|
4
|
+
*Section:* Lifecycle & execution hooks
|
|
5
|
+
*Source:* https://uikit.developers.rio.cloud/#utilities/usePrevious
|
|
6
|
+
*Captured:* 2025-12-12T12:39:37.704Z
|
|
7
|
+
|
|
8
|
+
The usePrevious hook allows to easily access state from previous component render. Instead of using a React.ref and a useEffect, this hook uses a useState internally to keep track of the previous state value.
|
|
9
|
+
|
|
10
|
+
## usePrevious
|
|
11
|
+
|
|
12
|
+
- If the value you need can be computed entirely from the current props or other state, remove that redundant state altogether. If you’re worried about recomputing too often, the useMemo Hook can help.
|
|
13
|
+
- If you want to reset the entire component tree’s state, pass a different key to your component.
|
|
14
|
+
- If you can, update all the relevant state in the event handlers.
|
|
15
|
+
|
|
16
|
+
```jsx
|
|
17
|
+
function List({ items }) {
|
|
18
|
+
const [isReverse, setIsReverse] = useState(false);
|
|
19
|
+
const [selection, setSelection] = useState(null);
|
|
20
|
+
|
|
21
|
+
// Better: Adjust the state while rendering
|
|
22
|
+
const [prevItems, setPrevItems] = useState(items);
|
|
23
|
+
if (items !== prevItems) {
|
|
24
|
+
setPrevItems(items);
|
|
25
|
+
setSelection(null);
|
|
26
|
+
}
|
|
27
|
+
// ...
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
> Note: If you want to use this to update the internal state due to a prop change, you might run into a loop. Therefore, use the following snippet suggested by the React team here: https://react.dev/learn/you-might-not-need-an-effect#adjusting-some-state-when-a-prop-changes
|
|
32
|
+
|
|
33
|
+
### Example: Example 1
|
|
34
|
+
|
|
35
|
+
{ count: 1, previousCount: 1 }
|
|
36
|
+
|
|
37
|
+
#### Summary
|
|
38
|
+
|
|
39
|
+
{ count: 1, previousCount: 1 }
|
|
40
|
+
|
|
41
|
+
#### React (tsx)
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
import { useState } from 'react';
|
|
45
|
+
|
|
46
|
+
import usePrevious from '@rio-cloud/rio-uikit/usePrevious';
|
|
47
|
+
import NumberControl from '@rio-cloud/rio-uikit/NumberControl';
|
|
48
|
+
|
|
49
|
+
export default () => {
|
|
50
|
+
const [count, setCount] = useState<number | undefined>(1);
|
|
51
|
+
|
|
52
|
+
const previousCount = usePrevious(count);
|
|
53
|
+
|
|
54
|
+
return (
|
|
55
|
+
<div className='display-flex flex-wrap gap-20 align-items-center'>
|
|
56
|
+
<NumberControl
|
|
57
|
+
value={count}
|
|
58
|
+
onChange={(value?: number) => setCount(value)}
|
|
59
|
+
className='margin-0 width-100'
|
|
60
|
+
/>
|
|
61
|
+
<div className='text-italic text-color-darker'>
|
|
62
|
+
{`{ count: ${count}, previousCount: ${previousCount} }`}
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
);
|
|
66
|
+
};
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
#### HTML (html)
|
|
70
|
+
|
|
71
|
+
```html
|
|
72
|
+
<div class="display-flex flex-wrap gap-20 align-items-center">
|
|
73
|
+
<div class="NumberControl margin-0 width-100">
|
|
74
|
+
<div class="input-group">
|
|
75
|
+
<div class="form-control-feedback-wrapper">
|
|
76
|
+
<input type="number" step="1" min="0" max="1.7976931348623157e+308" class="form-control no-controls" aria-label="number-input" value="1">
|
|
77
|
+
</div>
|
|
78
|
+
<div class="input-group-addon ">
|
|
79
|
+
<div class="display-flex padding-left-10">
|
|
80
|
+
<div role="button" aria-label="decrement-button" class="decrementButton display-flex align-items-center text-color-gray hover-text-color-dark cursor-pointer">
|
|
81
|
+
<div class="rioglyph rioglyph-minus scale-90">
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
<div role="button" aria-label="increment-button" class="incrementButton display-flex align-items-center text-color-gray hover-text-color-dark cursor-pointer margin-left-5">
|
|
85
|
+
<div class="rioglyph rioglyph-plus scale-90">
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
<div class="text-italic text-color-darker">{ count: 1, previousCount: 1 }</div>
|
|
93
|
+
</div>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
#### Props
|
|
97
|
+
|
|
98
|
+
| Name | Type | Default | Description |
|
|
99
|
+
| --- | --- | --- | --- |
|
|
100
|
+
| state | any | — | The value of the current state to keep track of. |
|
|
101
|
+
| | any | — | Returns the previous value of the state to keep track of. |
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# useResizeObserver
|
|
2
|
+
|
|
3
|
+
*Category:* Utilities
|
|
4
|
+
*Section:* DOM behavior hooks
|
|
5
|
+
*Source:* https://uikit.developers.rio.cloud/#utilities/useResizeObserver
|
|
6
|
+
*Captured:* 2025-12-12T12:39:43.338Z
|
|
7
|
+
|
|
8
|
+
The useResizeObserver hook allows to react on resize changes of a given element.
|
|
9
|
+
|
|
10
|
+
## useResizeObserver
|
|
11
|
+
|
|
12
|
+
> Note: that is important to consider the padding of the element to observe and to take it into consideration when working with its width and height. When using the contentRect from the observerEntry, keep in mind that this will not include the paddings.
|
|
13
|
+
|
|
14
|
+
To include the target elements padding, please use the borderBoxSize instead.
|
|
15
|
+
|
|
16
|
+
### Example: Example 1
|
|
17
|
+
|
|
18
|
+
Box with padding200x50
|
|
19
|
+
|
|
20
|
+
#### Summary
|
|
21
|
+
|
|
22
|
+
Box with padding200x50
|
|
23
|
+
|
|
24
|
+
#### React (tsx)
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
import { useState } from 'react';
|
|
28
|
+
|
|
29
|
+
import Resizer from '@rio-cloud/rio-uikit/Resizer';
|
|
30
|
+
import useResizeObserver from '@rio-cloud/rio-uikit/useResizeObserver';
|
|
31
|
+
|
|
32
|
+
export default () => {
|
|
33
|
+
const [boxWidth, setBoxWidth] = useState(200);
|
|
34
|
+
|
|
35
|
+
// To include target elements padding, use "borderBoxSize" or for convenience
|
|
36
|
+
// purpose, use the dedicated return object already containing "inlineSize" and "blockSize".
|
|
37
|
+
// const [ref, { borderBox }] = useResizeObserver();
|
|
38
|
+
const [ref, _, { inlineSize, blockSize }] = useResizeObserver();
|
|
39
|
+
|
|
40
|
+
const handleResizeHorizontal = (diff: number) => setBoxWidth(previousValue => previousValue - diff);
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<>
|
|
44
|
+
<label>Box with padding</label>
|
|
45
|
+
<div
|
|
46
|
+
className={
|
|
47
|
+
'height-50 bg-info position-relative display-flex align-items-center ' +
|
|
48
|
+
'justify-content-center padding-5'
|
|
49
|
+
}
|
|
50
|
+
style={{ width: boxWidth }}
|
|
51
|
+
ref={ref}
|
|
52
|
+
>
|
|
53
|
+
<div className='text-color-white text-medium'>
|
|
54
|
+
{inlineSize}x{blockSize}
|
|
55
|
+
</div>
|
|
56
|
+
<Resizer onResize={handleResizeHorizontal}>
|
|
57
|
+
<div className='width-5 height-100pct bg-light' />
|
|
58
|
+
</Resizer>
|
|
59
|
+
</div>
|
|
60
|
+
</>
|
|
61
|
+
);
|
|
62
|
+
};
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
#### HTML (html)
|
|
66
|
+
|
|
67
|
+
```html
|
|
68
|
+
<label>Box with padding</label>
|
|
69
|
+
<div class="height-50 bg-info position-relative display-flex align-items-center justify-content-center padding-5" style="width: 200px;">
|
|
70
|
+
<div class="text-color-white text-medium">200x50</div>
|
|
71
|
+
<div class="Resizer resize-horizontal resize-right">
|
|
72
|
+
<div class="width-5 height-100pct bg-light">
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
#### Props (json)
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
ref
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Example: Example 2
|
|
85
|
+
|
|
86
|
+
Box without padding200x50
|
|
87
|
+
|
|
88
|
+
#### Summary
|
|
89
|
+
|
|
90
|
+
Box without padding200x50
|
|
91
|
+
|
|
92
|
+
#### React (tsx)
|
|
93
|
+
|
|
94
|
+
```tsx
|
|
95
|
+
import { useState, useCallback } from 'react';
|
|
96
|
+
|
|
97
|
+
import Resizer from '@rio-cloud/rio-uikit/Resizer';
|
|
98
|
+
import useResizeObserver from '@rio-cloud/rio-uikit/useResizeObserver';
|
|
99
|
+
|
|
100
|
+
export default () => {
|
|
101
|
+
const [boxWidth, setBoxWidth] = useState(200);
|
|
102
|
+
|
|
103
|
+
const [ref, observerEntry] = useResizeObserver();
|
|
104
|
+
|
|
105
|
+
const contentRect = observerEntry?.contentRect;
|
|
106
|
+
|
|
107
|
+
const getContentRect = useCallback(
|
|
108
|
+
(key: keyof DOMRectReadOnly) => Math.round(contentRect?.[key] as number),
|
|
109
|
+
[contentRect]
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
const handleResizeHorizontal = (diff: number) => setBoxWidth(previousValue => previousValue - diff);
|
|
113
|
+
|
|
114
|
+
return (
|
|
115
|
+
<>
|
|
116
|
+
<label>Box without padding</label>
|
|
117
|
+
<div
|
|
118
|
+
className='height-50 bg-info position-relative display-flex align-items-center justify-content-center'
|
|
119
|
+
style={{ width: boxWidth }}
|
|
120
|
+
ref={ref}
|
|
121
|
+
>
|
|
122
|
+
<div className='text-color-white text-medium'>
|
|
123
|
+
{getContentRect('width')}x{getContentRect('height')}
|
|
124
|
+
</div>
|
|
125
|
+
<Resizer onResize={handleResizeHorizontal}>
|
|
126
|
+
<div className='width-5 height-100pct bg-light' />
|
|
127
|
+
</Resizer>
|
|
128
|
+
</div>
|
|
129
|
+
</>
|
|
130
|
+
);
|
|
131
|
+
};
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
#### HTML (html)
|
|
135
|
+
|
|
136
|
+
```html
|
|
137
|
+
<label>Box without padding</label>
|
|
138
|
+
<div class="height-50 bg-info position-relative display-flex align-items-center justify-content-center" style="width: 200px;">
|
|
139
|
+
<div class="text-color-white text-medium">200x50</div>
|
|
140
|
+
<div class="Resizer resize-horizontal resize-right">
|
|
141
|
+
<div class="width-5 height-100pct bg-light">
|
|
142
|
+
</div>
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
#### Props (json)
|
|
148
|
+
|
|
149
|
+
```json
|
|
150
|
+
ref
|
|
151
|
+
```
|