@rio-cloud/uikit-mcp 1.1.4 → 1.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/README.md +1 -0
  2. package/dist/doc-metadata.json +188 -88
  3. package/dist/docs/components/accentBar.md +35 -3
  4. package/dist/docs/components/activity.md +14 -3
  5. package/dist/docs/components/animatedNumber.md +17 -4
  6. package/dist/docs/components/animatedTextReveal.md +54 -8
  7. package/dist/docs/components/animations.md +33 -33
  8. package/dist/docs/components/appHeader.md +65 -9
  9. package/dist/docs/components/appLayout.md +566 -61
  10. package/dist/docs/components/appNavigationBar.md +55 -3
  11. package/dist/docs/components/areaCharts.md +14 -14
  12. package/dist/docs/components/aspectRatioPlaceholder.md +11 -3
  13. package/dist/docs/components/assetTree.md +1174 -328
  14. package/dist/docs/components/autosuggests.md +2 -2
  15. package/dist/docs/components/avatar.md +25 -3
  16. package/dist/docs/components/banner.md +3 -3
  17. package/dist/docs/components/barCharts.md +38 -38
  18. package/dist/docs/components/barList.md +22 -10
  19. package/dist/docs/components/basicMap.md +2 -2
  20. package/dist/docs/components/bottomSheet.md +100 -3
  21. package/dist/docs/components/button.md +549 -36
  22. package/dist/docs/components/buttonToolbar.md +10 -3
  23. package/dist/docs/components/calendarStripe.md +127 -85
  24. package/dist/docs/components/card.md +11 -3
  25. package/dist/docs/components/carousel.md +2 -2
  26. package/dist/docs/components/chartColors.md +2 -2
  27. package/dist/docs/components/chartsGettingStarted.md +2 -2
  28. package/dist/docs/components/chat.md +3 -3
  29. package/dist/docs/components/checkbox.md +67 -45
  30. package/dist/docs/components/circularProgress.md +465 -0
  31. package/dist/docs/components/clearableInput.md +18 -18
  32. package/dist/docs/components/collapse.md +28 -4
  33. package/dist/docs/components/composedCharts.md +20 -20
  34. package/dist/docs/components/contentLoader.md +126 -105
  35. package/dist/docs/components/dataTabs.md +191 -11
  36. package/dist/docs/components/datepickers.md +735 -723
  37. package/dist/docs/components/dialogs.md +362 -2
  38. package/dist/docs/components/divider.md +15 -3
  39. package/dist/docs/components/dropdowns.md +4548 -4355
  40. package/dist/docs/components/editableContent.md +187 -3
  41. package/dist/docs/components/expander.md +52 -5
  42. package/dist/docs/components/fade.md +42 -7
  43. package/dist/docs/components/fadeExpander.md +13 -4
  44. package/dist/docs/components/fadeUp.md +22 -4
  45. package/dist/docs/components/feedback.md +44 -3
  46. package/dist/docs/components/filePickers.md +45 -3
  47. package/dist/docs/components/formLabel.md +20 -5
  48. package/dist/docs/components/groupedItemList.md +54 -3
  49. package/dist/docs/components/iconList.md +5 -5
  50. package/dist/docs/components/imagePreloader.md +7 -3
  51. package/dist/docs/components/labeledElement.md +13 -3
  52. package/dist/docs/components/licensePlate.md +11 -3
  53. package/dist/docs/components/lineCharts.md +10 -10
  54. package/dist/docs/components/listMenu.md +78 -8
  55. package/dist/docs/components/loadMore.md +29 -3
  56. package/dist/docs/components/mainNavigation.md +5 -5
  57. package/dist/docs/components/mapCircle.md +2 -2
  58. package/dist/docs/components/mapCluster.md +2 -2
  59. package/dist/docs/components/mapContext.md +2 -2
  60. package/dist/docs/components/mapDraggableMarker.md +2 -2
  61. package/dist/docs/components/mapGettingStarted.md +2 -2
  62. package/dist/docs/components/mapInfoBubble.md +2 -2
  63. package/dist/docs/components/mapLayerGroup.md +2 -2
  64. package/dist/docs/components/mapMarker.md +2 -2
  65. package/dist/docs/components/mapPolygon.md +2 -2
  66. package/dist/docs/components/mapRoute.md +2 -2
  67. package/dist/docs/components/mapRouteGenerator.md +2 -2
  68. package/dist/docs/components/mapSettings.md +9 -9
  69. package/dist/docs/components/mapUtils.md +2 -2
  70. package/dist/docs/components/multiselects.md +2 -2
  71. package/dist/docs/components/noData.md +23 -3
  72. package/dist/docs/components/notifications.md +2 -2
  73. package/dist/docs/components/numbercontrol.md +54 -5
  74. package/dist/docs/components/onboarding.md +26 -2
  75. package/dist/docs/components/page.md +33 -3
  76. package/dist/docs/components/pager.md +15 -3
  77. package/dist/docs/components/pieCharts.md +89 -78
  78. package/dist/docs/components/popover.md +40 -2
  79. package/dist/docs/components/position.md +11 -3
  80. package/dist/docs/components/radialBarCharts.md +2054 -2012
  81. package/dist/docs/components/radioCardGroup.md +487 -0
  82. package/dist/docs/components/radiobutton.md +138 -10
  83. package/dist/docs/components/releaseNotes.md +19 -2
  84. package/dist/docs/components/resizer.md +14 -3
  85. package/dist/docs/components/responsiveColumnStripe.md +20 -3
  86. package/dist/docs/components/responsiveVideo.md +12 -3
  87. package/dist/docs/components/rioglyph.md +13 -3
  88. package/dist/docs/components/rules.md +95 -5
  89. package/dist/docs/components/saveableInput.md +400 -276
  90. package/dist/docs/components/selects.md +2 -2
  91. package/dist/docs/components/sidebar.md +39 -3
  92. package/dist/docs/components/sliders.md +38 -3
  93. package/dist/docs/components/smoothScrollbars.md +93 -3
  94. package/dist/docs/components/spinners.md +51 -3
  95. package/dist/docs/components/states.md +217 -2
  96. package/dist/docs/components/statsWidgets.md +123 -3
  97. package/dist/docs/components/statusBar.md +29 -3
  98. package/dist/docs/components/stepButton.md +9 -3
  99. package/dist/docs/components/steppedProgressBars.md +67 -3
  100. package/dist/docs/components/subNavigation.md +24 -17
  101. package/dist/docs/components/supportMarker.md +2 -2
  102. package/dist/docs/components/svgImage.md +13 -3
  103. package/dist/docs/components/switch.md +218 -82
  104. package/dist/docs/components/tables.md +2 -2
  105. package/dist/docs/components/tagManager.md +56 -2
  106. package/dist/docs/components/tags.md +33 -3
  107. package/dist/docs/components/teaser.md +30 -3
  108. package/dist/docs/components/textTruncateMiddle.md +151 -0
  109. package/dist/docs/components/timeline.md +2 -2
  110. package/dist/docs/components/timepicker.md +687 -63
  111. package/dist/docs/components/toggleButton.md +96 -10
  112. package/dist/docs/components/tooltip.md +30 -21
  113. package/dist/docs/components/tracker.md +631 -0
  114. package/dist/docs/components/virtualList.md +107 -84
  115. package/dist/docs/foundations.md +647 -275
  116. package/dist/docs/start/changelog.md +2 -738
  117. package/dist/docs/start/goodtoknow.md +2 -2
  118. package/dist/docs/start/guidelines/color-combinations.md +2 -2
  119. package/dist/docs/start/guidelines/custom-css.md +2 -2
  120. package/dist/docs/start/guidelines/custom-rioglyph.md +2 -2
  121. package/dist/docs/start/guidelines/formatting.md +2 -2
  122. package/dist/docs/start/guidelines/iframe.md +2 -2
  123. package/dist/docs/start/guidelines/obfuscate-data.md +2 -2
  124. package/dist/docs/start/guidelines/print-css.md +2 -2
  125. package/dist/docs/start/guidelines/spinner.md +82 -82
  126. package/dist/docs/start/guidelines/state-in-url.md +263 -0
  127. package/dist/docs/start/guidelines/supported-browsers.md +2 -2
  128. package/dist/docs/start/guidelines/writing.md +2 -2
  129. package/dist/docs/start/howto.md +10 -10
  130. package/dist/docs/start/intro.md +2 -2
  131. package/dist/docs/start/responsiveness.md +2 -2
  132. package/dist/docs/templates/common-table.md +15 -14
  133. package/dist/docs/templates/detail-views.md +3 -3
  134. package/dist/docs/templates/expandable-details.md +2 -2
  135. package/dist/docs/templates/feature-cards.md +56 -56
  136. package/dist/docs/templates/form-summary.md +23 -23
  137. package/dist/docs/templates/form-toggle.md +2 -2
  138. package/dist/docs/templates/list-blocks.md +204 -204
  139. package/dist/docs/templates/loading-progress.md +2 -2
  140. package/dist/docs/templates/options-panel.md +2 -2
  141. package/dist/docs/templates/panel-variants.md +2 -2
  142. package/dist/docs/templates/progress-cards.md +2 -2
  143. package/dist/docs/templates/progress-success.md +2 -2
  144. package/dist/docs/templates/settings-form.md +24 -24
  145. package/dist/docs/templates/stats-blocks.md +18 -18
  146. package/dist/docs/templates/table-panel.md +2 -2
  147. package/dist/docs/templates/table-row-animation.md +2 -2
  148. package/dist/docs/templates/usage-cards.md +2 -2
  149. package/dist/docs/utilities/classNames.md +191 -0
  150. package/dist/docs/utilities/deviceUtils.md +2 -2
  151. package/dist/docs/utilities/featureToggles.md +2 -2
  152. package/dist/docs/utilities/fuelTypeUtils.md +2 -2
  153. package/dist/docs/utilities/routeUtils.md +326 -90
  154. package/dist/docs/utilities/useAfterMount.md +2 -2
  155. package/dist/docs/utilities/useAutoAnimate.md +2 -2
  156. package/dist/docs/utilities/useAverage.md +2 -2
  157. package/dist/docs/utilities/useClickOutside.md +2 -2
  158. package/dist/docs/utilities/useClipboard.md +3 -3
  159. package/dist/docs/utilities/useCookies.md +188 -0
  160. package/dist/docs/utilities/useCount.md +2 -2
  161. package/dist/docs/utilities/useDarkMode.md +2 -2
  162. package/dist/docs/utilities/useDebugInfo.md +5 -5
  163. package/dist/docs/utilities/useEffectOnce.md +2 -2
  164. package/dist/docs/utilities/useElapsedTime.md +2 -2
  165. package/dist/docs/utilities/useElementSize.md +2 -2
  166. package/dist/docs/utilities/useEsc.md +2 -2
  167. package/dist/docs/utilities/useEvent.md +2 -2
  168. package/dist/docs/utilities/useFocusTrap.md +2 -2
  169. package/dist/docs/utilities/useFullscreen.md +2 -2
  170. package/dist/docs/utilities/useHover.md +2 -2
  171. package/dist/docs/utilities/useIncomingPostMessages.md +2 -2
  172. package/dist/docs/utilities/useInterval.md +2 -2
  173. package/dist/docs/utilities/useIsFocusWithin.md +2 -2
  174. package/dist/docs/utilities/useKey.md +2 -2
  175. package/dist/docs/utilities/useLocalStorage.md +2 -2
  176. package/dist/docs/utilities/useLocationSuggestions.md +2 -2
  177. package/dist/docs/utilities/useMax.md +2 -2
  178. package/dist/docs/utilities/useMin.md +2 -2
  179. package/dist/docs/utilities/useMutationObserver.md +2 -2
  180. package/dist/docs/utilities/useOnScreen.md +2 -2
  181. package/dist/docs/utilities/useOnlineStatus.md +2 -2
  182. package/dist/docs/utilities/usePostMessage.md +3 -3
  183. package/dist/docs/utilities/usePostMessageSender.md +2 -2
  184. package/dist/docs/utilities/usePrevious.md +2 -2
  185. package/dist/docs/utilities/useResizeObserver.md +2 -2
  186. package/dist/docs/utilities/useRioCookieConsent.md +90 -0
  187. package/dist/docs/utilities/useScrollPosition.md +2 -2
  188. package/dist/docs/utilities/useSearch.md +2 -2
  189. package/dist/docs/utilities/useSearchHighlight.md +815 -0
  190. package/dist/docs/utilities/useSorting.md +2 -2
  191. package/dist/docs/utilities/useStateWithValidation.md +2 -2
  192. package/dist/docs/utilities/useSum.md +2 -2
  193. package/dist/docs/utilities/useTableExport.md +53 -53
  194. package/dist/docs/utilities/useTableSelection.md +90 -90
  195. package/dist/docs/utilities/useTimeout.md +2 -2
  196. package/dist/docs/utilities/useToggle.md +3 -3
  197. package/dist/docs/utilities/useUrlState.md +418 -0
  198. package/dist/docs/utilities/useWindowResize.md +2 -2
  199. package/dist/index.mjs +8 -8
  200. package/dist/version.json +2 -2
  201. package/package.json +9 -9
@@ -2,8 +2,8 @@
2
2
 
3
3
  *Category:* Components
4
4
  *Section:* Interaction
5
- *Source:* https://uikit.developers.rio.cloud/#components/checkbox
6
- *Captured:* 2026-01-14T09:07:01.013Z
5
+ *Source:* https://uikit.developers.rio.cloud/#/components/checkbox
6
+ *Captured:* 2026-02-23T13:41:39.429Z
7
7
 
8
8
  ## Checkbox
9
9
 
@@ -333,12 +333,17 @@ export default () => (
333
333
  </div>
334
334
  ```
335
335
 
336
- #### Props
336
+ #### Props (json)
337
337
 
338
- | Name | Type | Default | Description |
339
- | --- | --- | --- | --- |
340
- | iconLabelPosition | 'horizontal' \| 'vertical | — | — |
341
- | tabIndex | | | The tabindex attribute allows developers to make HTML elements focusable, allow or prevent them from being sequentially focusable (usually with the Tab key, hence the name) and determine their relative ordering for sequential focus navigation. See tabIndex |
338
+ ```json
339
+ <div className='checkbox-text-wrapper display-flex justify-content-between'>
340
+ <div className='margin-right-15'>
341
+ <div className='text-medium text-size-16 text-color-darker'>Option 1</div>
342
+ <div className='text-color-dark'>This option is a first option</div>
343
+ </div>
344
+ <div className='checkbox-text' />
345
+ </div>
346
+ ```
342
347
 
343
348
  ## Controlled example
344
349
 
@@ -354,7 +359,6 @@ Option 1Option 2Option 3
354
359
 
355
360
  ```tsx
356
361
  import { useState } from 'react';
357
- import { pull } from 'es-toolkit/compat';
358
362
 
359
363
  import Checkbox from '@rio-cloud/rio-uikit/Checkbox';
360
364
 
@@ -362,11 +366,11 @@ export default () => {
362
366
  const [selectedOptions, setSelectedOptions] = useState([1]);
363
367
 
364
368
  const handleSelect = (selected: number) => {
365
- const updatedSelectedOptions = selectedOptions.includes(selected)
366
- ? pull(selectedOptions, selected)
367
- : [...selectedOptions, selected];
368
-
369
- setSelectedOptions(updatedSelectedOptions);
369
+ setSelectedOptions(prevSelectedOptions =>
370
+ prevSelectedOptions.includes(selected)
371
+ ? prevSelectedOptions.filter(value => value !== selected)
372
+ : [...prevSelectedOptions, selected]
373
+ );
370
374
  };
371
375
 
372
376
  return (
@@ -410,12 +414,17 @@ export default () => {
410
414
  </div>
411
415
  ```
412
416
 
413
- #### Props
417
+ #### Props (json)
414
418
 
415
- | Name | Type | Default | Description |
416
- | --- | --- | --- | --- |
417
- | iconLabelPosition | 'horizontal' \| 'vertical | — | — |
418
- | tabIndex | | | The tabindex attribute allows developers to make HTML elements focusable, allow or prevent them from being sequentially focusable (usually with the Tab key, hence the name) and determine their relative ordering for sequential focus navigation. See tabIndex |
419
+ ```json
420
+ <div className='checkbox-text-wrapper display-flex justify-content-between'>
421
+ <div className='margin-right-15'>
422
+ <div className='text-medium text-size-16 text-color-darker'>Option 1</div>
423
+ <div className='text-color-dark'>This option is a first option</div>
424
+ </div>
425
+ <div className='checkbox-text' />
426
+ </div>
427
+ ```
419
428
 
420
429
  ## Custom card example
421
430
 
@@ -457,7 +466,6 @@ Strawberry
457
466
 
458
467
  ```tsx
459
468
  import { useState } from 'react';
460
- import { pull } from 'es-toolkit/compat';
461
469
 
462
470
  import Checkbox from '@rio-cloud/rio-uikit/Checkbox';
463
471
 
@@ -471,11 +479,11 @@ export default () => {
471
479
  const [selectedOptions, setSelectedOptions] = useState([1]);
472
480
 
473
481
  const handleSelect = (selected: number) => {
474
- const updatedSelectedOptions = selectedOptions.includes(selected)
475
- ? pull(selectedOptions, selected)
476
- : [...selectedOptions, selected];
477
-
478
- setSelectedOptions(updatedSelectedOptions);
482
+ setSelectedOptions(prevSelectedOptions =>
483
+ prevSelectedOptions.includes(selected)
484
+ ? prevSelectedOptions.filter(value => value !== selected)
485
+ : [...prevSelectedOptions, selected]
486
+ );
479
487
  };
480
488
 
481
489
  return (
@@ -628,12 +636,17 @@ export default () => {
628
636
  </form>
629
637
  ```
630
638
 
631
- #### Props
639
+ #### Props (json)
632
640
 
633
- | Name | Type | Default | Description |
634
- | --- | --- | --- | --- |
635
- | iconLabelPosition | 'horizontal' \| 'vertical | — | — |
636
- | tabIndex | | | The tabindex attribute allows developers to make HTML elements focusable, allow or prevent them from being sequentially focusable (usually with the Tab key, hence the name) and determine their relative ordering for sequential focus navigation. See tabIndex |
641
+ ```json
642
+ <div className='checkbox-text-wrapper display-flex justify-content-between'>
643
+ <div className='margin-right-15'>
644
+ <div className='text-medium text-size-16 text-color-darker'>Option 1</div>
645
+ <div className='text-color-dark'>This option is a first option</div>
646
+ </div>
647
+ <div className='checkbox-text' />
648
+ </div>
649
+ ```
637
650
 
638
651
  ## Custom list example
639
652
 
@@ -665,7 +678,6 @@ This option is a third option
665
678
 
666
679
  ```tsx
667
680
  import { useState } from 'react';
668
- import { pull } from 'es-toolkit/compat';
669
681
 
670
682
  import Checkbox from '@rio-cloud/rio-uikit/Checkbox';
671
683
 
@@ -673,11 +685,11 @@ export default () => {
673
685
  const [selectedOptions, setSelectedOptions] = useState([1]);
674
686
 
675
687
  const handleSelect = (selected: number) => {
676
- const updatedSelectedOptions = selectedOptions.includes(selected)
677
- ? pull(selectedOptions, selected)
678
- : [...selectedOptions, selected];
679
-
680
- setSelectedOptions(updatedSelectedOptions);
688
+ setSelectedOptions(prevSelectedOptions =>
689
+ prevSelectedOptions.includes(selected)
690
+ ? prevSelectedOptions.filter(value => value !== selected)
691
+ : [...prevSelectedOptions, selected]
692
+ );
681
693
  };
682
694
 
683
695
  return (
@@ -775,12 +787,17 @@ export default () => {
775
787
  </fieldset>
776
788
  ```
777
789
 
778
- #### Props
790
+ #### Props (json)
779
791
 
780
- | Name | Type | Default | Description |
781
- | --- | --- | --- | --- |
782
- | iconLabelPosition | 'horizontal' \| 'vertical | — | — |
783
- | tabIndex | | | The tabindex attribute allows developers to make HTML elements focusable, allow or prevent them from being sequentially focusable (usually with the Tab key, hence the name) and determine their relative ordering for sequential focus navigation. See tabIndex |
792
+ ```json
793
+ <div className='checkbox-text-wrapper display-flex justify-content-between'>
794
+ <div className='margin-right-15'>
795
+ <div className='text-medium text-size-16 text-color-darker'>Option 1</div>
796
+ <div className='text-color-dark'>This option is a first option</div>
797
+ </div>
798
+ <div className='checkbox-text' />
799
+ </div>
800
+ ```
784
801
 
785
802
  ## Checkbox with custom icon
786
803
 
@@ -888,9 +905,14 @@ export default () => (
888
905
  </div>
889
906
  ```
890
907
 
891
- #### Props
908
+ #### Props (json)
892
909
 
893
- | Name | Type | Default | Description |
894
- | --- | --- | --- | --- |
895
- | iconLabelPosition | 'horizontal' \| 'vertical | — | — |
896
- | tabIndex | | | The tabindex attribute allows developers to make HTML elements focusable, allow or prevent them from being sequentially focusable (usually with the Tab key, hence the name) and determine their relative ordering for sequential focus navigation. See tabIndex |
910
+ ```json
911
+ <div className='checkbox-text-wrapper display-flex justify-content-between'>
912
+ <div className='margin-right-15'>
913
+ <div className='text-medium text-size-16 text-color-darker'>Option 1</div>
914
+ <div className='text-color-dark'>This option is a first option</div>
915
+ </div>
916
+ <div className='checkbox-text' />
917
+ </div>
918
+ ```
@@ -0,0 +1,465 @@
1
+ # CircularProgress
2
+
3
+ *Category:* Components
4
+ *Section:* Progress
5
+ *Source:* https://uikit.developers.rio.cloud/#/components/circularProgress
6
+ *Captured:* 2026-02-23T13:42:02.752Z
7
+
8
+ ## CircularProgress
9
+
10
+ ### Example: Default circular progress
11
+
12
+ Default circular progress
13
+ 30
14
+
15
+ Circular progress customizations
16
+ 85 km/h
17
+
18
+ Speed
19
+
20
+ 40%
21
+
22
+ Custom label
23
+
24
+ 100
25
+
26
+ With max value
27
+
28
+ Different sizes with custom value label
29
+
30
+ xs
31
+
32
+ sm
33
+
34
+ md
35
+
36
+ lg
37
+
38
+ xl
39
+
40
+ Strong customization
41
+ 40%
42
+
43
+ 3200 Points
44
+
45
+ #### Summary
46
+
47
+ Default circular progress
48
+ 30
49
+
50
+ Circular progress customizations
51
+ 85 km/h
52
+
53
+ Speed
54
+
55
+ 40%
56
+
57
+ Custom label
58
+
59
+ 100
60
+
61
+ With max value
62
+
63
+ Different sizes with custom value label
64
+
65
+ xs
66
+
67
+ sm
68
+
69
+ md
70
+
71
+ lg
72
+
73
+ xl
74
+
75
+ Strong customization
76
+ 40%
77
+
78
+ 3200 Points
79
+
80
+ #### React (tsx)
81
+
82
+ ```tsx
83
+ import CircularProgress from '@rio-cloud/rio-uikit/CircularProgress';
84
+ import Divider from '@rio-cloud/rio-uikit/Divider';
85
+ import FormLabel from '@rio-cloud/rio-uikit/FormLabel';
86
+
87
+ export default () => (
88
+ <>
89
+ <FormLabel>Default circular progress</FormLabel>
90
+ <div className='display-flex gap-50 margin-top-15'>
91
+ <CircularProgress value={30} />
92
+ </div>
93
+
94
+ <Divider spacing={25} />
95
+
96
+ <FormLabel>Circular progress customizations</FormLabel>
97
+ <div className='display-flex gap-50 margin-top-15'>
98
+ <CircularProgress
99
+ color='warning'
100
+ formatOptions={{ style: 'unit', unit: 'kilometer-per-hour' }}
101
+ valueLabelClassName='text-italic'
102
+ label='Speed'
103
+ size='lg'
104
+ strokeWidth={4}
105
+ value={85}
106
+ />
107
+ <CircularProgress
108
+ color='info'
109
+ formatOptions={{ style: 'unit', unit: 'percent' }}
110
+ valueLabelClassName='text-size-16 text-medium text-color-dark'
111
+ label='Custom label'
112
+ strokeWidth={3}
113
+ value={40}
114
+ />
115
+ <CircularProgress valueLabelClassName='text-size-' label='With max value' value={100} maxValue={300} />
116
+ <CircularProgress showValueLabel={false} value={0} />
117
+ </div>
118
+
119
+ <Divider spacing={25} />
120
+
121
+ <FormLabel>Different sizes with custom value label</FormLabel>
122
+ <div className='display-flex gap-50 margin-top-15'>
123
+ <CircularProgress
124
+ color='success'
125
+ valueLabel={<span className='rioglyph rioglyph-ok text-color-success text-size-14' />}
126
+ size='xs'
127
+ label='xs'
128
+ animationDelay={1}
129
+ value={70}
130
+ />
131
+ <CircularProgress
132
+ color='success'
133
+ valueLabel={<span className='rioglyph rioglyph-ok text-color-success text-size-18' />}
134
+ size='sm'
135
+ label='sm'
136
+ animationDelay={1.2}
137
+ value={70}
138
+ />
139
+ <CircularProgress
140
+ color='success'
141
+ valueLabel={<span className='rioglyph rioglyph-ok text-color-success text-size-h3' />}
142
+ size='md'
143
+ label='md'
144
+ animationDelay={1.4}
145
+ value={70}
146
+ />
147
+ <CircularProgress
148
+ color='success'
149
+ valueLabel={<span className='rioglyph rioglyph-ok text-color-success text-size-h2' />}
150
+ size='lg'
151
+ label='lg'
152
+ animationDelay={1.6}
153
+ value={70}
154
+ />
155
+ <CircularProgress
156
+ color='success'
157
+ valueLabel={<span className='rioglyph rioglyph-ok text-color-success text-size-h1' />}
158
+ size='xl'
159
+ label='xl'
160
+ animationDelay={1.8}
161
+ value={70}
162
+ />
163
+ </div>
164
+
165
+ <Divider spacing={25} />
166
+
167
+ <FormLabel>Strong customization</FormLabel>
168
+ <div className='display-grid place-items-center bg-primary width-200 height-200 rounded'>
169
+ <CircularProgress
170
+ color='white'
171
+ formatOptions={{ style: 'unit', unit: 'percent' }}
172
+ valueLabelClassName='text-medium text-size-h2 text-color-white'
173
+ trackClassName='opacity-30'
174
+ label={
175
+ <div className='border border-color-white rounded-circle padding-x-10 padding-y-5'>3200 Points</div>
176
+ }
177
+ strokeWidth={12}
178
+ size='xl'
179
+ animationDelay={2}
180
+ value={40}
181
+ />
182
+ </div>
183
+ </>
184
+ );
185
+ ```
186
+
187
+ #### HTML (html)
188
+
189
+ ```html
190
+ <div class="text-color-dark max-width-100pct text-size-12 display-inline-block margin-bottom-5">Default circular progress</div>
191
+ <div class="display-flex gap-50 margin-top-15">
192
+ <div class="display-flex flex-column align-items-center text-center gap-10 ">
193
+ <div class="" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="30" aria-valuetext="30" style="width: 64px; height: 64px; position: relative; display: grid; place-items: center;">
194
+ <svg width="64" height="64" viewBox="0 0 100 100" style="transform: rotate(-90deg);">
195
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--gray-lighter)" stroke-width="8" class="">
196
+ </circle>
197
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--brand-primary)" stroke-width="8" stroke-linecap="round" stroke-dasharray="289.02652413026095" stroke-dashoffset="233.9594855253046">
198
+ </circle>
199
+ </svg>
200
+ <div class="position-absolute display-grid place-items-center">30</div>
201
+ </div>
202
+ </div>
203
+ </div>
204
+ <div class="Divider position-relative width-100pct" style="padding-top: 25px; padding-bottom: 25px;">
205
+ <div class="divider-line bg-light" style="width: 100%; height: 1px;">
206
+ </div>
207
+ </div>
208
+ <div class="text-color-dark max-width-100pct text-size-12 display-inline-block margin-bottom-5">Circular progress customizations</div>
209
+ <div class="display-flex gap-50 margin-top-15">
210
+ <div class="display-flex flex-column align-items-center text-center gap-10 " aria-labelledby="circular-progress-label-:r1:">
211
+ <div class="" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="85" aria-valuetext="85 km/h" style="width: 80px; height: 80px; position: relative; display: grid; place-items: center;">
212
+ <svg width="80" height="80" viewBox="0 0 100 100" style="transform: rotate(-90deg);">
213
+ <circle cx="50" cy="50" r="48" fill="none" stroke="var(--gray-lighter)" stroke-width="4" class="">
214
+ </circle>
215
+ <circle cx="50" cy="50" r="48" fill="none" stroke="var(--brand-warning)" stroke-width="4" stroke-linecap="round" stroke-dasharray="301.59289474462014" stroke-dashoffset="138.78599799953176">
216
+ </circle>
217
+ </svg>
218
+ <div class="position-absolute display-grid place-items-center text-italic">85 km/h</div>
219
+ </div>
220
+ <div id="circular-progress-label-:r1:" class="">Speed</div>
221
+ </div>
222
+ <div class="display-flex flex-column align-items-center text-center gap-10 " aria-labelledby="circular-progress-label-:r2:">
223
+ <div class="" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="40" aria-valuetext="40%" style="width: 64px; height: 64px; position: relative; display: grid; place-items: center;">
224
+ <svg width="64" height="64" viewBox="0 0 100 100" style="transform: rotate(-90deg);">
225
+ <circle cx="50" cy="50" r="48.5" fill="none" stroke="var(--gray-lighter)" stroke-width="3" class="">
226
+ </circle>
227
+ <circle cx="50" cy="50" r="48.5" fill="none" stroke="var(--brand-info)" stroke-width="3" stroke-linecap="round" stroke-dasharray="304.7344873982099" stroke-dashoffset="227.32140414196692">
228
+ </circle>
229
+ </svg>
230
+ <div class="position-absolute display-grid place-items-center text-size-16 text-medium text-color-dark">40%</div>
231
+ </div>
232
+ <div id="circular-progress-label-:r2:" class="">Custom label</div>
233
+ </div>
234
+ <div class="display-flex flex-column align-items-center text-center gap-10 " aria-labelledby="circular-progress-label-:r3:">
235
+ <div class="" role="progressbar" aria-valuemin="0" aria-valuemax="300" aria-valuenow="100" aria-valuetext="100" style="width: 64px; height: 64px; position: relative; display: grid; place-items: center;">
236
+ <svg width="64" height="64" viewBox="0 0 100 100" style="transform: rotate(-90deg);">
237
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--gray-lighter)" stroke-width="8" class="">
238
+ </circle>
239
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--brand-primary)" stroke-width="8" stroke-linecap="round" stroke-dasharray="289.02652413026095" stroke-dashoffset="227.84092568030945">
240
+ </circle>
241
+ </svg>
242
+ <div class="position-absolute display-grid place-items-center text-size-">100</div>
243
+ </div>
244
+ <div id="circular-progress-label-:r3:" class="">With max value</div>
245
+ </div>
246
+ <div class="display-flex flex-column align-items-center text-center gap-10 ">
247
+ <div class="" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0" style="width: 64px; height: 64px; position: relative; display: grid; place-items: center;">
248
+ <svg width="64" height="64" viewBox="0 0 100 100" style="transform: rotate(-90deg);">
249
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--gray-lighter)" stroke-width="8" class="">
250
+ </circle>
251
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--brand-primary)" stroke-width="8" stroke-linecap="round" stroke-dasharray="289.02652413026095" stroke-dashoffset="289.02652413026095">
252
+ </circle>
253
+ </svg>
254
+ </div>
255
+ </div>
256
+ </div>
257
+ <div class="Divider position-relative width-100pct" style="padding-top: 25px; padding-bottom: 25px;">
258
+ <div class="divider-line bg-light" style="width: 100%; height: 1px;">
259
+ </div>
260
+ </div>
261
+ <div class="text-color-dark max-width-100pct text-size-12 display-inline-block margin-bottom-5">Different sizes with custom value label</div>
262
+ <div class="display-flex gap-50 margin-top-15">
263
+ <div class="display-flex flex-column align-items-center text-center gap-10 " aria-labelledby="circular-progress-label-:r5:">
264
+ <div class="" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="70" style="width: 32px; height: 32px; position: relative; display: grid; place-items: center;">
265
+ <svg width="32" height="32" viewBox="0 0 100 100" style="transform: rotate(-90deg);">
266
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--gray-lighter)" stroke-width="8" class="">
267
+ </circle>
268
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--brand-success)" stroke-width="8" stroke-linecap="round" stroke-dasharray="289.02652413026095" stroke-dashoffset="289.02652413026095">
269
+ </circle>
270
+ </svg>
271
+ <div class="position-absolute display-grid place-items-center">
272
+ <span class="rioglyph rioglyph-ok text-color-success text-size-14">
273
+ </span>
274
+ </div>
275
+ </div>
276
+ <div id="circular-progress-label-:r5:" class="">xs</div>
277
+ </div>
278
+ <div class="display-flex flex-column align-items-center text-center gap-10 " aria-labelledby="circular-progress-label-:r6:">
279
+ <div class="" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="70" style="width: 48px; height: 48px; position: relative; display: grid; place-items: center;">
280
+ <svg width="48" height="48" viewBox="0 0 100 100" style="transform: rotate(-90deg);">
281
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--gray-lighter)" stroke-width="8" class="">
282
+ </circle>
283
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--brand-success)" stroke-width="8" stroke-linecap="round" stroke-dasharray="289.02652413026095" stroke-dashoffset="289.02652413026095">
284
+ </circle>
285
+ </svg>
286
+ <div class="position-absolute display-grid place-items-center">
287
+ <span class="rioglyph rioglyph-ok text-color-success text-size-18">
288
+ </span>
289
+ </div>
290
+ </div>
291
+ <div id="circular-progress-label-:r6:" class="">sm</div>
292
+ </div>
293
+ <div class="display-flex flex-column align-items-center text-center gap-10 " aria-labelledby="circular-progress-label-:r7:">
294
+ <div class="" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="70" style="width: 64px; height: 64px; position: relative; display: grid; place-items: center;">
295
+ <svg width="64" height="64" viewBox="0 0 100 100" style="transform: rotate(-90deg);">
296
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--gray-lighter)" stroke-width="8" class="">
297
+ </circle>
298
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--brand-success)" stroke-width="8" stroke-linecap="round" stroke-dasharray="289.02652413026095" stroke-dashoffset="289.02652413026095">
299
+ </circle>
300
+ </svg>
301
+ <div class="position-absolute display-grid place-items-center">
302
+ <span class="rioglyph rioglyph-ok text-color-success text-size-h3">
303
+ </span>
304
+ </div>
305
+ </div>
306
+ <div id="circular-progress-label-:r7:" class="">md</div>
307
+ </div>
308
+ <div class="display-flex flex-column align-items-center text-center gap-10 " aria-labelledby="circular-progress-label-:r8:">
309
+ <div class="" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="70" style="width: 80px; height: 80px; position: relative; display: grid; place-items: center;">
310
+ <svg width="80" height="80" viewBox="0 0 100 100" style="transform: rotate(-90deg);">
311
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--gray-lighter)" stroke-width="8" class="">
312
+ </circle>
313
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--brand-success)" stroke-width="8" stroke-linecap="round" stroke-dasharray="289.02652413026095" stroke-dashoffset="289.02652413026095">
314
+ </circle>
315
+ </svg>
316
+ <div class="position-absolute display-grid place-items-center">
317
+ <span class="rioglyph rioglyph-ok text-color-success text-size-h2">
318
+ </span>
319
+ </div>
320
+ </div>
321
+ <div id="circular-progress-label-:r8:" class="">lg</div>
322
+ </div>
323
+ <div class="display-flex flex-column align-items-center text-center gap-10 " aria-labelledby="circular-progress-label-:r9:">
324
+ <div class="" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="70" style="width: 120px; height: 120px; position: relative; display: grid; place-items: center;">
325
+ <svg width="120" height="120" viewBox="0 0 100 100" style="transform: rotate(-90deg);">
326
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--gray-lighter)" stroke-width="8" class="">
327
+ </circle>
328
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--brand-success)" stroke-width="8" stroke-linecap="round" stroke-dasharray="289.02652413026095" stroke-dashoffset="289.02652413026095">
329
+ </circle>
330
+ </svg>
331
+ <div class="position-absolute display-grid place-items-center">
332
+ <span class="rioglyph rioglyph-ok text-color-success text-size-h1">
333
+ </span>
334
+ </div>
335
+ </div>
336
+ <div id="circular-progress-label-:r9:" class="">xl</div>
337
+ </div>
338
+ </div>
339
+ <div class="Divider position-relative width-100pct" style="padding-top: 25px; padding-bottom: 25px;">
340
+ <div class="divider-line bg-light" style="width: 100%; height: 1px;">
341
+ </div>
342
+ </div>
343
+ <div class="text-color-dark max-width-100pct text-size-12 display-inline-block margin-bottom-5">Strong customization</div>
344
+ <div class="display-grid place-items-center bg-primary width-200 height-200 rounded">
345
+ <div class="display-flex flex-column align-items-center text-center gap-10 " aria-labelledby="circular-progress-label-:ra:">
346
+ <div class="" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="40" aria-valuetext="40%" style="width: 120px; height: 120px; position: relative; display: grid; place-items: center;">
347
+ <svg width="120" height="120" viewBox="0 0 100 100" style="transform: rotate(-90deg);">
348
+ <circle cx="50" cy="50" r="44" fill="none" stroke="var(--gray-lighter)" stroke-width="12" class="opacity-30">
349
+ </circle>
350
+ <circle cx="50" cy="50" r="44" fill="none" stroke="var(--color-white)" stroke-width="12" stroke-linecap="round" stroke-dasharray="276.46015351590177" stroke-dashoffset="276.46015351590177">
351
+ </circle>
352
+ </svg>
353
+ <div class="position-absolute display-grid place-items-center text-medium text-size-h2 text-color-white">40%</div>
354
+ </div>
355
+ <div id="circular-progress-label-:ra:" class="">
356
+ <div class="border border-color-white rounded-circle padding-x-10 padding-y-5">3200 Points</div>
357
+ </div>
358
+ </div>
359
+ </div>
360
+ ```
361
+
362
+ #### Props
363
+
364
+ | Name | Type | Default | Description |
365
+ | --- | --- | --- | --- |
366
+ | label | React.ReactNode | — | Optional text or node shown below the ring. |
367
+ | size | CircularProgressSize | 'md' | Preset size for the component. Possible values are: 'xs' 'sm' 'md' 'lg' 'xl' |
368
+ | color | CircularProgressColor | 'primary' | Color preset for the progress ring. Possible values are: 'default' 'primary' 'secondary' 'info' 'success' 'warning' 'danger' 'white' |
369
+ | value | number | 0 | Defaults to 0 to avoid indeterminate/spinner visuals. |
370
+ | valueLabel | React.ReactNode | — | Override the rendered value label content. |
371
+ | minValue | number | 0 | Minimum value for the range. |
372
+ | maxValue | number | 100 | Maximum value for the range. |
373
+ | formatOptions | Intl.NumberFormatOptions | — | Formatting for the visible value label. - If style === "percent": formats ratio (value-min)/(max-min) - Otherwise: formats the raw value (e.g. unit) |
374
+ | isIndeterminate | boolean | false | Indeterminate mode is opt-in. Animates the progress indefinitely. May come in handy when the value still loads to prevent layout shifting. |
375
+ | showValueLabel | boolean | true | Toggles the value label in the center of the ring. |
376
+ | strokeWidth | number | 8 | Stroke width used for the ring and track. |
377
+ | trackColor | CircularProgressTrackColor | 'lighter' | Track color preset for the background ring. Possible values are: 'decent' 'lightest' 'lighter' 'light' 'gray' 'dark' 'darker' 'darkest' 'white' |
378
+ | trackClassName | string | — | Class name for the track (background ring). |
379
+ | disableAnimation | boolean | false | Disable motion even if the user allows animations. |
380
+ | animationDelay | number | 0 | Delay before the progress animation starts (in seconds). |
381
+ | className | string | — | Class name for the outer wrapper. |
382
+ | ringWrapClassName | string | — | Class name for the ring wrapper. |
383
+ | valueLabelClassName | string | — | Class name for the center value label. |
384
+ | labelClassName | string | — | Class name for the label under the ring. |
385
+
386
+ ### Example: Example 2
387
+
388
+ 0%
389
+
390
+ Processing configuration...
391
+
392
+ #### Summary
393
+
394
+ 0%
395
+
396
+ Processing configuration...
397
+
398
+ #### React (tsx)
399
+
400
+ ```tsx
401
+ import CircularProgress from '@rio-cloud/rio-uikit/CircularProgress';
402
+ import { useEffect, useState } from 'react';
403
+
404
+ export default () => {
405
+ const [value, setValue] = useState(0);
406
+
407
+ useEffect(() => {
408
+ const interval = setInterval(() => {
409
+ setValue(v => (v >= 100 ? 0 : v + 10));
410
+ }, 500);
411
+
412
+ return () => clearInterval(interval);
413
+ }, []);
414
+
415
+ return (
416
+ <CircularProgress
417
+ label='Processing configuration...'
418
+ color='info'
419
+ value={value}
420
+ formatOptions={{ style: 'unit', unit: 'percent' }}
421
+ />
422
+ );
423
+ };
424
+ ```
425
+
426
+ #### HTML (html)
427
+
428
+ ```html
429
+ <div class="display-flex flex-column align-items-center text-center gap-10 " aria-labelledby="circular-progress-label-:rb:">
430
+ <div class="" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="10" aria-valuetext="10%" style="width: 64px; height: 64px; position: relative; display: grid; place-items: center;">
431
+ <svg width="64" height="64" viewBox="0 0 100 100" style="transform: rotate(-90deg);">
432
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--gray-lighter)" stroke-width="8" class="">
433
+ </circle>
434
+ <circle cx="50" cy="50" r="46" fill="none" stroke="var(--brand-info)" stroke-width="8" stroke-linecap="round" stroke-dasharray="289.02652413026095" stroke-dashoffset="262.6697810682584">
435
+ </circle>
436
+ </svg>
437
+ <div class="position-absolute display-grid place-items-center">10%</div>
438
+ </div>
439
+ <div id="circular-progress-label-:rb:" class="">Processing configuration...</div>
440
+ </div>
441
+ ```
442
+
443
+ #### Props
444
+
445
+ | Name | Type | Default | Description |
446
+ | --- | --- | --- | --- |
447
+ | label | React.ReactNode | — | Optional text or node shown below the ring. |
448
+ | size | CircularProgressSize | 'md' | Preset size for the component. Possible values are: 'xs' 'sm' 'md' 'lg' 'xl' |
449
+ | color | CircularProgressColor | 'primary' | Color preset for the progress ring. Possible values are: 'default' 'primary' 'secondary' 'info' 'success' 'warning' 'danger' 'white' |
450
+ | value | number | 0 | Defaults to 0 to avoid indeterminate/spinner visuals. |
451
+ | valueLabel | React.ReactNode | — | Override the rendered value label content. |
452
+ | minValue | number | 0 | Minimum value for the range. |
453
+ | maxValue | number | 100 | Maximum value for the range. |
454
+ | formatOptions | Intl.NumberFormatOptions | — | Formatting for the visible value label. - If style === "percent": formats ratio (value-min)/(max-min) - Otherwise: formats the raw value (e.g. unit) |
455
+ | isIndeterminate | boolean | false | Indeterminate mode is opt-in. Animates the progress indefinitely. May come in handy when the value still loads to prevent layout shifting. |
456
+ | showValueLabel | boolean | true | Toggles the value label in the center of the ring. |
457
+ | strokeWidth | number | 8 | Stroke width used for the ring and track. |
458
+ | trackColor | CircularProgressTrackColor | 'lighter' | Track color preset for the background ring. Possible values are: 'decent' 'lightest' 'lighter' 'light' 'gray' 'dark' 'darker' 'darkest' 'white' |
459
+ | trackClassName | string | — | Class name for the track (background ring). |
460
+ | disableAnimation | boolean | false | Disable motion even if the user allows animations. |
461
+ | animationDelay | number | 0 | Delay before the progress animation starts (in seconds). |
462
+ | className | string | — | Class name for the outer wrapper. |
463
+ | ringWrapClassName | string | — | Class name for the ring wrapper. |
464
+ | valueLabelClassName | string | — | Class name for the center value label. |
465
+ | labelClassName | string | — | Class name for the label under the ring. |