@rio-cloud/uikit-mcp 1.0.1 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +75 -39
- 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 +2033 -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 +3132 -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 +2765 -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 +533 -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 +935 -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 +17538 -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 +486 -0
- package/dist/docs/foundations.md +20901 -0
- package/dist/docs/start/changelog.md +714 -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,35 @@
|
|
|
1
|
+
# Custom RIOglyph icon
|
|
2
|
+
|
|
3
|
+
*Category:* Getting started
|
|
4
|
+
*Section:* Guidelines
|
|
5
|
+
*Source:* https://uikit.developers.rio.cloud/#start/guidelines/custom-rioglyph
|
|
6
|
+
*Captured:* 2025-12-12T14:20:04.635Z
|
|
7
|
+
|
|
8
|
+
To use a custom Rioglyph icon, there are two different approaches:
|
|
9
|
+
|
|
10
|
+
## Custom RIOglyph icon
|
|
11
|
+
|
|
12
|
+
1. Use an inline style with a CSS variable
|
|
13
|
+
2. Define a CSS class that applies an SVG as a mask-image
|
|
14
|
+
|
|
15
|
+
Below is an example of both approaches:
|
|
16
|
+
|
|
17
|
+
**Approach 1: Inline style**
|
|
18
|
+
|
|
19
|
+
```html
|
|
20
|
+
<span class="rioglyph" style="--i: url(https://cdn.rio.cloud/images/uikit/react_logo.svg);"></span>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Approach 2: Custom CSS class**
|
|
24
|
+
|
|
25
|
+
```html
|
|
26
|
+
<style>
|
|
27
|
+
.rioglyph-custom-xxx {
|
|
28
|
+
--i: url('https://cdn.rio.cloud/images/uikit/react_logo.svg');
|
|
29
|
+
}
|
|
30
|
+
</style>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```html
|
|
34
|
+
<span class="rioglyph rioglyph-custom"></span>
|
|
35
|
+
```
|
|
@@ -0,0 +1,587 @@
|
|
|
1
|
+
# Formatting guide
|
|
2
|
+
|
|
3
|
+
*Category:* Getting started
|
|
4
|
+
*Section:* Guidelines
|
|
5
|
+
*Source:* https://uikit.developers.rio.cloud/#start/guidelines/formatting
|
|
6
|
+
*Captured:* 2025-12-12T14:20:06.278Z
|
|
7
|
+
|
|
8
|
+
Having a common date formatting guide is crucial to ensure consistency, clarity, and accuracy in documentation, making it easier to understand and interpret dates correctly across different contexts.
|
|
9
|
+
|
|
10
|
+
## Formatting guide
|
|
11
|
+
|
|
12
|
+
## Here's what you will find in the formatting guide
|
|
13
|
+
|
|
14
|
+
- Date formats
|
|
15
|
+
- Date formats overview If nothing else is specified use the default date format: YYYY-MM-DD Avoid the American date format: MM/DD/YYYY Use the Intl.DateTimeFormat to format dates for all locales Date and time format Format durations Formatting dates for headlines and sections Relative date and time Time format including timezones
|
|
16
|
+
- Number formats
|
|
17
|
+
- Number formats overview Omit unused or meaningless decimals Formatting numbers with units
|
|
18
|
+
|
|
19
|
+
- Date formats overview
|
|
20
|
+
- If nothing else is specified use the default date format: YYYY-MM-DD
|
|
21
|
+
- Avoid the American date format: MM/DD/YYYY
|
|
22
|
+
- Use the Intl.DateTimeFormat to format dates for all locales
|
|
23
|
+
- Date and time format
|
|
24
|
+
- Format durations
|
|
25
|
+
- Formatting dates for headlines and sections
|
|
26
|
+
- Relative date and time
|
|
27
|
+
- Time format including timezones
|
|
28
|
+
|
|
29
|
+
- Number formats overview
|
|
30
|
+
- Omit unused or meaningless decimals
|
|
31
|
+
- Formatting numbers with units
|
|
32
|
+
|
|
33
|
+
## Date formats
|
|
34
|
+
|
|
35
|
+
## Date formats overview
|
|
36
|
+
|
|
37
|
+
This is a list of all supported langues and their respective date format showcasing also similar locales sharing the same format.
|
|
38
|
+
|
|
39
|
+
## If nothing else is specified use the default date format: YYYY-MM-DD
|
|
40
|
+
|
|
41
|
+
This format is defined in the ISO 8601 standard, which is maintained by the International Organization for Standardization (ISO). It's widely used for data exchange and communication because it:
|
|
42
|
+
|
|
43
|
+
- Sorts chronologically: Dates appear in order when sorted alphabetically (e.g., 2023-12-31 comes before 2024-01-01).
|
|
44
|
+
- Avoids ambiguity: The clear separation between year, month, and day eliminates confusion, especially when dealing with different cultural date order preferences.
|
|
45
|
+
|
|
46
|
+
While some countries have their own preferred date formats for everyday use, YYYY-MM-DD is often the chosen format for:
|
|
47
|
+
|
|
48
|
+
- International communication
|
|
49
|
+
- Data storage and exchange
|
|
50
|
+
- Software applications
|
|
51
|
+
|
|
52
|
+
In the table above, Swedish (sv-SE) is the only locale listed that uses YYYY-MM-DD as the standard format. However, the international nature of the internet and technology has made YYYY-MM-DD increasingly familiar in many regions.
|
|
53
|
+
|
|
54
|
+
If nothing else is specified use the default date format otherwise use the date format according the selected locale.
|
|
55
|
+
|
|
56
|
+
## Avoid the American date format: MM/DD/YYYY
|
|
57
|
+
|
|
58
|
+
While there's nothing inherently wrong with the American date format (MM/DD/YYYY), it's recommended to avoid it as the default for the following reasons:
|
|
59
|
+
|
|
60
|
+
- Non-standard: It's not the international standard format defined by ISO 8601 (YYYY-MM-DD). This can lead to confusion and potential errors when exchanging data or collaborating with international teams.
|
|
61
|
+
- Ambiguity: MM/DD/YYYY can be misinterpreted, especially when dealing with unfamiliar dates. For example, 05/07/2024 could be May 7th or July 5th.
|
|
62
|
+
- Sorting Issues: Dates in MM/DD/YYYY format don't sort chronologically by default. This can be problematic when handling lists or data sets involving dates.
|
|
63
|
+
- Limited Reach: The American date format is primarily used in the United States, Canada, and a few other countries. Using a more widely recognized format like YYYY-MM-DD promotes better international understanding.
|
|
64
|
+
|
|
65
|
+
**Hint for Date Pickers**
|
|
66
|
+
|
|
67
|
+
Be aware that some date picker components might default to the American format (MM/DD/YYYY) if no locale is explicitly defined. Double-check your date picker's settings to ensure it aligns with these guidelines.
|
|
68
|
+
|
|
69
|
+
## Use the Intl.DateTimeFormat to format dates for all locales
|
|
70
|
+
|
|
71
|
+
When formatting dates in React applications, you have two choices:
|
|
72
|
+
|
|
73
|
+
- Vanilla Intl.DateTimeFormat: Use the standard function.
|
|
74
|
+
- ReactIntl (recommended): Utilize ReactIntl's formatDate function or the FormattedDate component for a more convenient and potentially reusable approach.
|
|
75
|
+
|
|
76
|
+
Regardless of the chosen method (direct function or ReactIntl), you'll have access to the same set of formatting options for customizing the date output with Intl.DateTimeFormat.
|
|
77
|
+
|
|
78
|
+
The default date and time format for the default locale "en-GB" looks like this: 27/05/2024
|
|
79
|
+
|
|
80
|
+
```jsx
|
|
81
|
+
<FormattedDate value={new Date()} year='numeric' month='2-digit' day='2-digit' />
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
```javascript
|
|
85
|
+
const formatDate = (date, locale) => {
|
|
86
|
+
const options = {
|
|
87
|
+
year: 'numeric',
|
|
88
|
+
month: '2-digit',
|
|
89
|
+
day: '2-digit'
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const formatter = new Intl.DateTimeFormat(locale, options);
|
|
93
|
+
return formatter.format(date);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const locales = [
|
|
97
|
+
'bg-BG', 'cs-CZ', 'da-DK', 'el-GR', 'es-ES', 'et-EE', 'fi-FI', 'fr-FR',
|
|
98
|
+
'hr-HR', 'hu-HU', 'it-IT', 'lt-LT', 'lv-LV', 'nb-NO', 'nl-NL', 'pl-PL',
|
|
99
|
+
'pt-PT', 'ro-RO', 'sk-SK', 'sl-SI', 'sv-SE', 'de-DE', 'pt-BR', 'en-GB'
|
|
100
|
+
];
|
|
101
|
+
|
|
102
|
+
const today = new Date();
|
|
103
|
+
|
|
104
|
+
locales.forEach(locale => {
|
|
105
|
+
const formattedDate = formatDate(today, locale);
|
|
106
|
+
console.log(`Locale: ${locale}, Formatted date: ${formattedDate}`);
|
|
107
|
+
});
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Formatting a date range**
|
|
111
|
+
|
|
112
|
+
For formatting a time range use the ReactIntl FormattedDateTimeRange component. Note that for dates in headlines or in sections, there is a dedicated format rule listed below.
|
|
113
|
+
|
|
114
|
+
```jsx
|
|
115
|
+
() => {
|
|
116
|
+
const yesterday = new Date();
|
|
117
|
+
yesterday.setDate(new Date().getDate() - 1);
|
|
118
|
+
|
|
119
|
+
return <FormattedDateTimeRange from={yesterday} to={new Date()} />;
|
|
120
|
+
})
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Date and time format
|
|
124
|
+
|
|
125
|
+
None of the mentioned locales use a 12-hour format by default according to common usage. Here's a breakdown:
|
|
126
|
+
|
|
127
|
+
- All the listed locales (including en-GB) typically use the 24-hour format for displaying time.
|
|
128
|
+
- While some countries might use a 12-hour format in informal contexts, the 24-hour format is generally preferred for official communication and technical applications.
|
|
129
|
+
|
|
130
|
+
The default date and time format looks like this: 27/05/2024, 11:17
|
|
131
|
+
|
|
132
|
+
```jsx
|
|
133
|
+
<FormattedDate value={new Date()} year='numeric' month='2-digit' day='2-digit' hour='2-digit' minute='2-digit' />
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
```javascript
|
|
137
|
+
const formatDateTime = (date, locale) => {
|
|
138
|
+
const options = {
|
|
139
|
+
year: 'numeric',
|
|
140
|
+
month: '2-digit',
|
|
141
|
+
day: '2-digit',
|
|
142
|
+
hour: '2-digit',
|
|
143
|
+
minute: '2-digit'
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
const dateTimeFormatter = new Intl.DateTimeFormat(locale, options);
|
|
147
|
+
return dateTimeFormatter.format(date);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const locales = [
|
|
151
|
+
'bg-BG', 'cs-CZ', 'da-DK', 'el-GR', 'es-ES', 'et-EE', 'fi-FI', 'fr-FR',
|
|
152
|
+
'hr-HR', 'hu-HU', 'it-IT', 'lt-LT', 'lv-LV', 'nb-NO', 'nl-NL', 'pl-PL',
|
|
153
|
+
'pt-PT', 'ro-RO', 'sk-SK', 'sl-SI', 'sv-SE', 'de-DE', 'pt-BR', 'en-GB'
|
|
154
|
+
];
|
|
155
|
+
|
|
156
|
+
const today = new Date();
|
|
157
|
+
|
|
158
|
+
locales.forEach(locale => {
|
|
159
|
+
const formattedDateTime = formatDateTime(today, locale);
|
|
160
|
+
console.log(`Locale: ${locale}, Formatted date time: ${formattedDateTime}`);
|
|
161
|
+
});
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Formatting dates for headlines and sections
|
|
165
|
+
|
|
166
|
+
When formatting a date or a date range for a headline or a section, use the following format including the weekday if it's not today. If the date is today, add the word "today" instead of the weekday.
|
|
167
|
+
|
|
168
|
+
- Today, 24 May 2024
|
|
169
|
+
- Thursday, 23 May 2024
|
|
170
|
+
- 12 Feb - 16 Feb 2024
|
|
171
|
+
|
|
172
|
+
```jsx
|
|
173
|
+
() => {
|
|
174
|
+
const yesterday = new Date();
|
|
175
|
+
yesterday.setDate(new Date().getDate() - 1);
|
|
176
|
+
|
|
177
|
+
return (
|
|
178
|
+
<>
|
|
179
|
+
{'Today, '}
|
|
180
|
+
<FormattedDate value={new Date()} year='numeric' month='short' day='numeric' />
|
|
181
|
+
<br />
|
|
182
|
+
<FormattedDate value={yesterday} year='numeric' month='short' day='numeric' weekday='long' />
|
|
183
|
+
</>
|
|
184
|
+
);
|
|
185
|
+
})
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
```javascript
|
|
189
|
+
function formatDateWithWeekday(date) {
|
|
190
|
+
const today = new Date();
|
|
191
|
+
const isToday =
|
|
192
|
+
today.getDate() === date.getDate() &&
|
|
193
|
+
today.getMonth() === date.getMonth() &&
|
|
194
|
+
today.getFullYear() === date.getFullYear();
|
|
195
|
+
|
|
196
|
+
const options = {
|
|
197
|
+
day: 'numeric',
|
|
198
|
+
month: 'short',
|
|
199
|
+
year: 'numeric',
|
|
200
|
+
weekday: isToday ? undefined : 'long',
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
const dateTimeFormatter = new Intl.DateTimeFormat('en-GB', options);
|
|
204
|
+
return isToday ? `Today, ${dateTimeFormatter.format(date)}` : dateTimeFormatter.format(date);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Example for today
|
|
208
|
+
const today = new Date();
|
|
209
|
+
const formattedDate = formatDateWithWeekday(today);
|
|
210
|
+
console.log(formattedDate);
|
|
211
|
+
|
|
212
|
+
// Example for yesterday
|
|
213
|
+
const yesterday = new Date();
|
|
214
|
+
yesterday.setDate(today.getDate() - 1); // Subtract 1 day from today
|
|
215
|
+
const formattedDateYesterday = formatDateWithWeekday(yesterday);
|
|
216
|
+
console.log(formattedDateYesterday);
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Formatting a date range for headlines**
|
|
220
|
+
|
|
221
|
+
When the date rage has the same year for both dates, omit the year for the first date so it looks like this: 27 May - 28 May 2024
|
|
222
|
+
|
|
223
|
+
```jsx
|
|
224
|
+
() => {
|
|
225
|
+
const yesterday = new Date();
|
|
226
|
+
yesterday.setDate(new Date().getDate() - 1);
|
|
227
|
+
|
|
228
|
+
return (
|
|
229
|
+
<>
|
|
230
|
+
<FormattedDate value={yesterday} month='short' day='numeric' />
|
|
231
|
+
{' - '}
|
|
232
|
+
<FormattedDate value={new Date()} year='numeric' month='short' day='numeric' />
|
|
233
|
+
</>
|
|
234
|
+
);
|
|
235
|
+
})
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
```javascript
|
|
239
|
+
function formatDateRange(startDate, endDate) {
|
|
240
|
+
if (!(startDate instanceof Date) || !(endDate instanceof Date)) {
|
|
241
|
+
throw new Error("Invalid input. Please provide valid Date objects.");
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
const startDateFormatter = new Intl.DateTimeFormat('en-GB', {
|
|
245
|
+
day: 'numeric',
|
|
246
|
+
month: 'short'
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
const endDateFormatter = new Intl.DateTimeFormat('en-GB', {
|
|
250
|
+
day: 'numeric',
|
|
251
|
+
month: 'short',
|
|
252
|
+
year: 'numeric'
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
const formattedStartDate = startDateFormatter.format(startDate);
|
|
256
|
+
const formattedEndDate = endDateFormatter.format(endDate);
|
|
257
|
+
|
|
258
|
+
return `${formattedStartDate} - ${formattedEndDate}`;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// Example usage
|
|
262
|
+
const startDate = new Date(2024, 1, 12); // Feb 12, 2024
|
|
263
|
+
const endDate = new Date(2024, 1, 16); // Feb 16, 2024
|
|
264
|
+
|
|
265
|
+
const formattedRange = formatDateRange(startDate, endDate);
|
|
266
|
+
console.log("Formatted Date Range:", formattedRange);
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
## Format durations
|
|
270
|
+
|
|
271
|
+
Use relative date and time formatting to help the understand quickly when an event happened or when a message has been sent:
|
|
272
|
+
|
|
273
|
+
- 3 days
|
|
274
|
+
- 2h 32min
|
|
275
|
+
- 45min
|
|
276
|
+
|
|
277
|
+
Best for: Short durations where hours and minutes are the most relevant unit.
|
|
278
|
+
|
|
279
|
+
- 3d
|
|
280
|
+
- 3m 20s
|
|
281
|
+
- 10s
|
|
282
|
+
|
|
283
|
+
Best for: When space is limited, and clarity is still maintained. Example: In a compact playlist view displaying track lengths.
|
|
284
|
+
|
|
285
|
+
```jsx
|
|
286
|
+
<FormattedNumber value={2} />h <FormattedNumber value={45} />min
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
## Relative date and time
|
|
290
|
+
|
|
291
|
+
- "5 minutes ago"
|
|
292
|
+
- "1 month ago"
|
|
293
|
+
- "7 days ago"
|
|
294
|
+
- "In 2 hours"
|
|
295
|
+
- "Now" or "Just now" (for events within the last minute)
|
|
296
|
+
|
|
297
|
+
- Displaying when a notification arrived or a message was sent
|
|
298
|
+
- Counting down to an upcoming event
|
|
299
|
+
- Indicating how recently an item was updated
|
|
300
|
+
- Benefits
|
|
301
|
+
- Clear and concise for recent events Easy for users to understand the time difference
|
|
302
|
+
|
|
303
|
+
- Clear and concise for recent events
|
|
304
|
+
- Easy for users to understand the time difference
|
|
305
|
+
|
|
306
|
+
Using a relative time is simple by using the ReactIntl FormattedRelativeTime component.
|
|
307
|
+
|
|
308
|
+
Example: now
|
|
309
|
+
|
|
310
|
+
```jsx
|
|
311
|
+
<FormattedRelativeTime value={0} numeric='auto' updateIntervalInSeconds={1} />
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
- "Yesterday"
|
|
315
|
+
- "Yesterday, 10:39"
|
|
316
|
+
- "Today, 12:17"
|
|
317
|
+
- "Tomorrow"
|
|
318
|
+
- "Last week"
|
|
319
|
+
- "Next Friday"
|
|
320
|
+
- "In 3 days"
|
|
321
|
+
|
|
322
|
+
- Displaying upcoming or past calendar events
|
|
323
|
+
- Highlighting recent activity within a timeframe (e.g., "Top posts from the past week")
|
|
324
|
+
- Providing deadlines or due dates in a user-friendly way
|
|
325
|
+
- Benefits
|
|
326
|
+
- Intuitive understanding for users familiar with common timeframes Reduces mental calculations for interpreting absolute dates
|
|
327
|
+
|
|
328
|
+
- Intuitive understanding for users familiar with common timeframes
|
|
329
|
+
- Reduces mental calculations for interpreting absolute dates
|
|
330
|
+
|
|
331
|
+
The choice between relative and absolute formats depends on the context and desired level of precision:
|
|
332
|
+
|
|
333
|
+
- Use relative formats: When the time difference or date proximity is more important than the exact timestamp. Example: "Your flight departs in 2 hours" is more relevant than "Your flight departs at 14:30".
|
|
334
|
+
- Use absolute formats: When precise timestamps are crucial, or for long time spans where relative terms become ambiguous.
|
|
335
|
+
|
|
336
|
+
Example for an upcoming event using ReactIntl: In 3 Days
|
|
337
|
+
|
|
338
|
+
```jsx
|
|
339
|
+
<FormattedRelativeTime value={0} numeric='auto' updateIntervalInSeconds={1} />
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
- Locale and cultural context: Relative terms like "yesterday" or "next week" might vary across languages and cultures. Consider user locale when implementing these formats.
|
|
343
|
+
- Level of detail: You might need to adjust the granularity of relative formats. For example, "3 weeks ago" might be more appropriate than "21 days ago" depending on the context.
|
|
344
|
+
|
|
345
|
+
## Time format including timezones
|
|
346
|
+
|
|
347
|
+
**Understanding time zones can be challenging**
|
|
348
|
+
|
|
349
|
+
While time zones are essential for global coordination, navigating them can be complex. Most users naturally think and schedule their activities in their local time zone. Concepts like Coordinated Universal Time (UTC) and daylight saving time (DST) can add layers of complexity.
|
|
350
|
+
|
|
351
|
+
This table lists the main timezones used across Europe, including their standard times and any daylight saving times. Note that some regions do not observe daylight saving time.
|
|
352
|
+
|
|
353
|
+
Studies show that users think in their local time - users often don’t think about UTC at all. Nor do they understand time zones, or the difference between UTC and GMT, or when and where daylight saving times are. But GMT is a more familiar time standard than UTC (even though UTC is the correct time standard). Since the UTC and GMT have the same offset and is widely more common in user interfaces, it is recommended to show GTM to the user instead of UTC.
|
|
354
|
+
|
|
355
|
+
For optimal clarity and consistency, it's best to display time zone offsets like GMT+1:00 without a blank space before the "+" symbol.
|
|
356
|
+
|
|
357
|
+
**Prioritize the user's local time**
|
|
358
|
+
|
|
359
|
+
To simplify the user's experience, we prioritize displaying times in your local time zone. This eliminates the need for manual conversions or deciphering time zone differences.
|
|
360
|
+
|
|
361
|
+
**Time zone transparency**
|
|
362
|
+
|
|
363
|
+
While we present times in the user's local time zone by default, we understand the importance of transparency. If needed, you can display information regarding the corresponding GMT time.
|
|
364
|
+
|
|
365
|
+
- Primary display: Show times in the user's local timezone for ease of use
|
|
366
|
+
- Secondary display: Include the GMT offset in smaller text or tooltips to provide additional context
|
|
367
|
+
|
|
368
|
+
**Total duration matters**
|
|
369
|
+
|
|
370
|
+
For situations with multiple locations and time zones, providing a clear "total travel time" or "duration" alongside the individual departure and arrival times is incredibly helpful. This provides a comprehensive picture of the overall journey, just like the best travel itineraries do.
|
|
371
|
+
|
|
372
|
+
**Event-Based timezones**
|
|
373
|
+
|
|
374
|
+
For events, show both the local time and the event's original timezone. For example, "Meeting scheduled for 15:00 (CEST) / 16:00 (EEST)
|
|
375
|
+
|
|
376
|
+
**Localizing time displays for various European countries**
|
|
377
|
+
|
|
378
|
+
When localizing time displays for German-speaking users, remember to append the term "Uhr" (with a blank separator) after the hour when displaying times in a 24-hour format to ensure accurate and culturally appropriate representation.
|
|
379
|
+
|
|
380
|
+
This table provides a comprehensive overview of how to handle time display formats across various European countries, ensuring localized and accurate time representations.
|
|
381
|
+
|
|
382
|
+
- Constitution Day 23/05/2024, 3 days ago
|
|
383
|
+
- Assumption Day 15/08/2024, in 64 days
|
|
384
|
+
|
|
385
|
+
## Number formats
|
|
386
|
+
|
|
387
|
+
## Number formats overview
|
|
388
|
+
|
|
389
|
+
This is a list of all supported langues and their respective country, decimal separator, thousand separator, and an example of a formatted number.
|
|
390
|
+
|
|
391
|
+
**Best practices for number formatting**
|
|
392
|
+
|
|
393
|
+
- Locale awareness Always format numbers based on the user’s locale settings to ensure familiarity and reduce errors
|
|
394
|
+
- Consistent use of delimiters Ensure the consistent use of decimal and thousand separators as per the locale’s conventions
|
|
395
|
+
- Handling edge cases Be aware of edge cases like negative numbers, very large numbers, and numbers with many decimal places
|
|
396
|
+
- Use libraries Utilize libraries like ReactIntl to handle number formatting, which provides built-in support for multiple locales and ensures correctness
|
|
397
|
+
|
|
398
|
+
```jsx
|
|
399
|
+
const NumberFormattingExample = () => {
|
|
400
|
+
const number = 1234567.89;
|
|
401
|
+
|
|
402
|
+
return (
|
|
403
|
+
<IntlProvider locale="de-DE">
|
|
404
|
+
<FormattedNumber value={number} />
|
|
405
|
+
</IntlProvider>
|
|
406
|
+
);
|
|
407
|
+
};
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
In this example, the number 1234567.89 will be formatted as 1.234.567,89 in the German locale.
|
|
411
|
+
|
|
412
|
+
## Omit unused or meaningless decimals
|
|
413
|
+
|
|
414
|
+
When displaying numbers with units, it's often more readable and professional to omit unnecessary trailing zeros in decimal places. For instance, displaying "123 km" instead of "123.0 km" when the value is a whole number.
|
|
415
|
+
|
|
416
|
+
Additionally, decimals should be omitted in cases where they do not add meaningful information, such as in a fuel level "74,87 %".
|
|
417
|
+
|
|
418
|
+
```jsx
|
|
419
|
+
<FormattedNumber
|
|
420
|
+
value={123.0}
|
|
421
|
+
minimumFractionDigits={0}
|
|
422
|
+
maximumFractionDigits={2}
|
|
423
|
+
style='unit'
|
|
424
|
+
unit='kilometer'
|
|
425
|
+
/>
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
> 123 km 1,234 km Fuel level: 75%
|
|
429
|
+
|
|
430
|
+
> 123.0 km 1234.0 km Fuel level: 74,87 %
|
|
431
|
+
|
|
432
|
+
## Formatting numbers with units
|
|
433
|
+
|
|
434
|
+
ReactIntl also supports formatting units like currency, percentages, and other measurements. Here are some examples on how to format numbers with units.
|
|
435
|
+
|
|
436
|
+
* Note: kilowatt-hour and megawatt-hour are not yet supported byIntl.NumberFormat(). Please append the unit manually. For more details, see here
|
|
437
|
+
|
|
438
|
+
```jsx
|
|
439
|
+
const NumberExample = () => {
|
|
440
|
+
const value = 1234.56;
|
|
441
|
+
return (
|
|
442
|
+
<table className='table table-condensed'>
|
|
443
|
+
<tbody>
|
|
444
|
+
<tr>
|
|
445
|
+
<td>Kilograms</td>
|
|
446
|
+
<td>
|
|
447
|
+
<FormattedNumber value={value} style='unit' unit='kilogram' />
|
|
448
|
+
</td>
|
|
449
|
+
</tr>
|
|
450
|
+
<tr>
|
|
451
|
+
<td>Kilometer</td>
|
|
452
|
+
<td>
|
|
453
|
+
<FormattedNumber value={value} style='unit' unit='kilometer' />
|
|
454
|
+
</td>
|
|
455
|
+
</tr>
|
|
456
|
+
<tr>
|
|
457
|
+
<td>Kilometer (long)</td>
|
|
458
|
+
<td>
|
|
459
|
+
<FormattedNumber value={value} style='unit' unit='kilometer' unitDisplay='long' />
|
|
460
|
+
</td>
|
|
461
|
+
</tr>
|
|
462
|
+
<tr>
|
|
463
|
+
<td>Meters</td>
|
|
464
|
+
<td>
|
|
465
|
+
<FormattedNumber value={value} style='unit' unit='meter' />
|
|
466
|
+
</td>
|
|
467
|
+
</tr>
|
|
468
|
+
<tr>
|
|
469
|
+
<td>Seconds (long)</td>
|
|
470
|
+
<td>
|
|
471
|
+
<FormattedNumber value={45} style='unit' unit='second' unitDisplay='long' />
|
|
472
|
+
</td>
|
|
473
|
+
</tr>
|
|
474
|
+
<tr>
|
|
475
|
+
<td>Minutes (long)</td>
|
|
476
|
+
<td>
|
|
477
|
+
<FormattedNumber value={12} style='unit' unit='minute' unitDisplay='long' />
|
|
478
|
+
</td>
|
|
479
|
+
</tr>
|
|
480
|
+
<tr>
|
|
481
|
+
<td>Centimeters</td>
|
|
482
|
+
<td>
|
|
483
|
+
<FormattedNumber value={34} style='unit' unit='centimeter' />
|
|
484
|
+
</td>
|
|
485
|
+
</tr>
|
|
486
|
+
<tr>
|
|
487
|
+
<td>Percent</td>
|
|
488
|
+
<td>
|
|
489
|
+
<FormattedNumber value={0.1234} style='percent' />
|
|
490
|
+
</td>
|
|
491
|
+
</tr>
|
|
492
|
+
<tr>
|
|
493
|
+
<td>Euro</td>
|
|
494
|
+
<td>
|
|
495
|
+
<FormattedNumber value={value} style='currency' currency='EUR' />
|
|
496
|
+
</td>
|
|
497
|
+
</tr>
|
|
498
|
+
<tr>
|
|
499
|
+
<td>Kilobyte</td>
|
|
500
|
+
<td>
|
|
501
|
+
<FormattedNumber value={1000} style='unit' unit='kilobyte' unitDisplay='narrow' />
|
|
502
|
+
</td>
|
|
503
|
+
</tr>
|
|
504
|
+
<tr>
|
|
505
|
+
<td>Celsius</td>
|
|
506
|
+
<td>
|
|
507
|
+
<FormattedNumber value={27} style='unit' unit='celsius' unitDisplay='narrow' />
|
|
508
|
+
</td>
|
|
509
|
+
</tr>
|
|
510
|
+
<tr>
|
|
511
|
+
<td>Duration</td>
|
|
512
|
+
<td>
|
|
513
|
+
<FormattedNumber value={2} />h <FormattedNumber value={45} />
|
|
514
|
+
min
|
|
515
|
+
</td>
|
|
516
|
+
</tr>
|
|
517
|
+
</tbody>
|
|
518
|
+
</table>
|
|
519
|
+
)
|
|
520
|
+
};
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
In Germany, the correct unit format for kilogram is "kg" with a lowercase "k" and "g". It follows the international standard for unit symbols defined by the International System of Units (SI).
|
|
524
|
+
|
|
525
|
+
Here's an example of the correct usage:
|
|
526
|
+
|
|
527
|
+
- Correct: 1.234,56 kg
|
|
528
|
+
- Incorrect: 1.234,56 Kg
|
|
529
|
+
|
|
530
|
+
The unit symbol should always be in lowercase and a space should be used between the number and the unit symbol
|
|
531
|
+
|
|
532
|
+
> Note: When formatting durations in a short format, ReactIntl does not follow the more common style defined in the section "Format durations" especially for locales like de-DE. In this case we need to combine the FormattedNumber with a custom unit.
|
|
533
|
+
|
|
534
|
+
```jsx
|
|
535
|
+
<FormattedNumber value={2} />h <FormattedNumber value={45} />min
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
```tsx
|
|
539
|
+
type FormattedDuration = {
|
|
540
|
+
hours?: number,
|
|
541
|
+
minutes?: number,
|
|
542
|
+
seconds?: number,
|
|
543
|
+
};
|
|
544
|
+
|
|
545
|
+
const FormattedDuration = ({ hours, minutes, seconds }) => {
|
|
546
|
+
const hasHours = hours > 0;
|
|
547
|
+
const hasMinutes = minutes > 0;
|
|
548
|
+
const hasSeconds = seconds > 0;
|
|
549
|
+
|
|
550
|
+
return (
|
|
551
|
+
<div>
|
|
552
|
+
{hasHours && (
|
|
553
|
+
<>
|
|
554
|
+
<FormattedNumber value={hours} />h
|
|
555
|
+
{hasMinutes && ' '}
|
|
556
|
+
</>
|
|
557
|
+
)}
|
|
558
|
+
{hasMinutes && (
|
|
559
|
+
<>
|
|
560
|
+
<FormattedNumber value={minutes} />min
|
|
561
|
+
{hasSeconds && ' '}
|
|
562
|
+
</>
|
|
563
|
+
)}
|
|
564
|
+
{hasSeconds && (
|
|
565
|
+
<>
|
|
566
|
+
<FormattedNumber value={seconds} />s
|
|
567
|
+
</>
|
|
568
|
+
)}
|
|
569
|
+
</div>
|
|
570
|
+
);
|
|
571
|
+
};
|
|
572
|
+
|
|
573
|
+
// Example Usage
|
|
574
|
+
const App = () => {
|
|
575
|
+
const duration1 = { hours: 8, minutes: 45 };
|
|
576
|
+
const duration2 = { hours: 0, minutes: 56 };
|
|
577
|
+
const duration3 = { hours: 1, minutes: 23 };
|
|
578
|
+
|
|
579
|
+
return (
|
|
580
|
+
<div>
|
|
581
|
+
<FormattedDuration {...duration1} />
|
|
582
|
+
<FormattedDuration {...duration2} />
|
|
583
|
+
<FormattedDuration {...duration3} />
|
|
584
|
+
</div>
|
|
585
|
+
);
|
|
586
|
+
};
|
|
587
|
+
```
|