@rio-cloud/uikit-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +91 -0
  3. package/bin/uikit-mcp.mjs +23 -0
  4. package/data/pages/Components/components/accentbar.json +207 -0
  5. package/data/pages/Components/components/activity.json +87 -0
  6. package/data/pages/Components/components/animatednumber.json +99 -0
  7. package/data/pages/Components/components/animations.json +87 -0
  8. package/data/pages/Components/components/appheader.json +291 -0
  9. package/data/pages/Components/components/applayout.json +1198 -0
  10. package/data/pages/Components/components/appnavigationbar.json +327 -0
  11. package/data/pages/Components/components/areacharts.json +563 -0
  12. package/data/pages/Components/components/aspectratioplaceholder.json +75 -0
  13. package/data/pages/Components/components/assettree.json +3080 -0
  14. package/data/pages/Components/components/autosuggests.json +710 -0
  15. package/data/pages/Components/components/avatar.json +157 -0
  16. package/data/pages/Components/components/banner.json +599 -0
  17. package/data/pages/Components/components/barcharts.json +1507 -0
  18. package/data/pages/Components/components/barlist.json +223 -0
  19. package/data/pages/Components/components/basicmap.json +68 -0
  20. package/data/pages/Components/components/bottomsheet.json +601 -0
  21. package/data/pages/Components/components/button.json +583 -0
  22. package/data/pages/Components/components/buttontoolbar.json +63 -0
  23. package/data/pages/Components/components/calendarstripe.json +235 -0
  24. package/data/pages/Components/components/card.json +69 -0
  25. package/data/pages/Components/components/carousel.json +39 -0
  26. package/data/pages/Components/components/chartcolors.json +34 -0
  27. package/data/pages/Components/components/chartsgettingstarted.json +32 -0
  28. package/data/pages/Components/components/chat.json +39 -0
  29. package/data/pages/Components/components/checkbox.json +847 -0
  30. package/data/pages/Components/components/clearableinput.json +789 -0
  31. package/data/pages/Components/components/collapse.json +175 -0
  32. package/data/pages/Components/components/composedcharts.json +159 -0
  33. package/data/pages/Components/components/contentloader.json +233 -0
  34. package/data/pages/Components/components/datatabs.json +680 -0
  35. package/data/pages/Components/components/datepickers.json +287 -0
  36. package/data/pages/Components/components/dialogs.json +1492 -0
  37. package/data/pages/Components/components/divider.json +93 -0
  38. package/data/pages/Components/components/dropdowns.json +936 -0
  39. package/data/pages/Components/components/editablecontent.json +1117 -0
  40. package/data/pages/Components/components/expander.json +377 -0
  41. package/data/pages/Components/components/fade.json +403 -0
  42. package/data/pages/Components/components/fadeexpander.json +75 -0
  43. package/data/pages/Components/components/fadeup.json +127 -0
  44. package/data/pages/Components/components/feedback.json +269 -0
  45. package/data/pages/Components/components/filepickers.json +269 -0
  46. package/data/pages/Components/components/formlabel.json +115 -0
  47. package/data/pages/Components/components/fullscreenmap.json +22 -0
  48. package/data/pages/Components/components/groupeditemlist.json +323 -0
  49. package/data/pages/Components/components/iconlist.json +45 -0
  50. package/data/pages/Components/components/imagepreloader.json +81 -0
  51. package/data/pages/Components/components/labeledelement.json +75 -0
  52. package/data/pages/Components/components/licenseplate.json +69 -0
  53. package/data/pages/Components/components/linecharts.json +987 -0
  54. package/data/pages/Components/components/listmenu.json +313 -0
  55. package/data/pages/Components/components/loadmore.json +175 -0
  56. package/data/pages/Components/components/mainnavigation.json +39 -0
  57. package/data/pages/Components/components/mapcircle.json +34 -0
  58. package/data/pages/Components/components/mapcluster.json +51 -0
  59. package/data/pages/Components/components/mapcontext.json +105 -0
  60. package/data/pages/Components/components/mapdraggablemarker.json +34 -0
  61. package/data/pages/Components/components/mapgettingstarted.json +27 -0
  62. package/data/pages/Components/components/mapgroup.json +1198 -0
  63. package/data/pages/Components/components/mapinfobubble.json +34 -0
  64. package/data/pages/Components/components/maplayergroup.json +34 -0
  65. package/data/pages/Components/components/mapmarker.json +700 -0
  66. package/data/pages/Components/components/mappolygon.json +45 -0
  67. package/data/pages/Components/components/maproute.json +623 -0
  68. package/data/pages/Components/components/maproutegenerator.json +16 -0
  69. package/data/pages/Components/components/mapsettings.json +51 -0
  70. package/data/pages/Components/components/maputils.json +34 -0
  71. package/data/pages/Components/components/multiselects.json +1451 -0
  72. package/data/pages/Components/components/nodata.json +139 -0
  73. package/data/pages/Components/components/notifications.json +65 -0
  74. package/data/pages/Components/components/numbercontrol.json +301 -0
  75. package/data/pages/Components/components/onboarding.json +302 -0
  76. package/data/pages/Components/components/page.json +197 -0
  77. package/data/pages/Components/components/pager.json +93 -0
  78. package/data/pages/Components/components/piecharts.json +731 -0
  79. package/data/pages/Components/components/popover.json +251 -0
  80. package/data/pages/Components/components/position.json +69 -0
  81. package/data/pages/Components/components/radialbarcharts.json +1304 -0
  82. package/data/pages/Components/components/radiobutton.json +1105 -0
  83. package/data/pages/Components/components/releasenotes.json +44 -0
  84. package/data/pages/Components/components/resizer.json +93 -0
  85. package/data/pages/Components/components/responsivecolumnstripe.json +123 -0
  86. package/data/pages/Components/components/responsivevideo.json +75 -0
  87. package/data/pages/Components/components/rioglyph.json +93 -0
  88. package/data/pages/Components/components/rules.json +410 -0
  89. package/data/pages/Components/components/saveableinput.json +703 -0
  90. package/data/pages/Components/components/selects.json +701 -0
  91. package/data/pages/Components/components/sidebar.json +243 -0
  92. package/data/pages/Components/components/sliders.json +235 -0
  93. package/data/pages/Components/components/smoothscrollbars.json +335 -0
  94. package/data/pages/Components/components/spinners.json +343 -0
  95. package/data/pages/Components/components/states.json +1705 -0
  96. package/data/pages/Components/components/statswidgets.json +314 -0
  97. package/data/pages/Components/components/statusbar.json +177 -0
  98. package/data/pages/Components/components/stepbutton.json +57 -0
  99. package/data/pages/Components/components/steppedprogressbars.json +417 -0
  100. package/data/pages/Components/components/subnavigation.json +107 -0
  101. package/data/pages/Components/components/supportmarker.json +45 -0
  102. package/data/pages/Components/components/svgimage.json +81 -0
  103. package/data/pages/Components/components/switch.json +111 -0
  104. package/data/pages/Components/components/tables.json +144 -0
  105. package/data/pages/Components/components/tagmanager.json +86 -0
  106. package/data/pages/Components/components/tags.json +146 -0
  107. package/data/pages/Components/components/teaser.json +188 -0
  108. package/data/pages/Components/components/timeline.json +45 -0
  109. package/data/pages/Components/components/timepicker.json +163 -0
  110. package/data/pages/Components/components/togglebutton.json +247 -0
  111. package/data/pages/Components/components/tooltip.json +270 -0
  112. package/data/pages/Components/components/virtuallist.json +175 -0
  113. package/data/pages/Foundations/foundations.json +2475 -0
  114. package/data/pages/Getting-started/start/changelog.json +22 -0
  115. package/data/pages/Getting-started/start/goodtoknow.json +32 -0
  116. package/data/pages/Getting-started/start/guidelines/color-combinations.json +58 -0
  117. package/data/pages/Getting-started/start/guidelines/custom-css.json +27 -0
  118. package/data/pages/Getting-started/start/guidelines/custom-rioglyph.json +22 -0
  119. package/data/pages/Getting-started/start/guidelines/formatting.json +97 -0
  120. package/data/pages/Getting-started/start/guidelines/iframe.json +93 -0
  121. package/data/pages/Getting-started/start/guidelines/obfuscate-data.json +22 -0
  122. package/data/pages/Getting-started/start/guidelines/print-css.json +37 -0
  123. package/data/pages/Getting-started/start/guidelines/spinner.json +144 -0
  124. package/data/pages/Getting-started/start/guidelines/supported-browsers.json +22 -0
  125. package/data/pages/Getting-started/start/guidelines/writing.json +242 -0
  126. package/data/pages/Getting-started/start/howto.json +72 -0
  127. package/data/pages/Getting-started/start/intro.json +37 -0
  128. package/data/pages/Getting-started/start/responsiveness.json +52 -0
  129. package/data/pages/Templates/templates/common-table.json +39 -0
  130. package/data/pages/Templates/templates/detail-views.json +71 -0
  131. package/data/pages/Templates/templates/expandable-details.json +39 -0
  132. package/data/pages/Templates/templates/feature-cards.json +103 -0
  133. package/data/pages/Templates/templates/form-summary.json +39 -0
  134. package/data/pages/Templates/templates/form-toggle.json +39 -0
  135. package/data/pages/Templates/templates/list-blocks.json +119 -0
  136. package/data/pages/Templates/templates/loading-progress.json +39 -0
  137. package/data/pages/Templates/templates/options-panel.json +39 -0
  138. package/data/pages/Templates/templates/panel-variants.json +39 -0
  139. package/data/pages/Templates/templates/progress-cards.json +71 -0
  140. package/data/pages/Templates/templates/progress-success.json +39 -0
  141. package/data/pages/Templates/templates/settings-form.json +39 -0
  142. package/data/pages/Templates/templates/stats-blocks.json +135 -0
  143. package/data/pages/Templates/templates/table-panel.json +39 -0
  144. package/data/pages/Templates/templates/table-row-animation.json +39 -0
  145. package/data/pages/Templates/templates/usage-cards.json +39 -0
  146. package/data/pages/Utilities/utilities/deviceutils.json +39 -0
  147. package/data/pages/Utilities/utilities/featuretoggles.json +42 -0
  148. package/data/pages/Utilities/utilities/fueltypeutils.json +118 -0
  149. package/data/pages/Utilities/utilities/routeutils.json +34 -0
  150. package/data/pages/Utilities/utilities/useaftermount.json +63 -0
  151. package/data/pages/Utilities/utilities/useaverage.json +86 -0
  152. package/data/pages/Utilities/utilities/useclickoutside.json +69 -0
  153. package/data/pages/Utilities/utilities/useclipboard.json +57 -0
  154. package/data/pages/Utilities/utilities/usecount.json +92 -0
  155. package/data/pages/Utilities/utilities/usedarkmode.json +50 -0
  156. package/data/pages/Utilities/utilities/usedebuginfo.json +63 -0
  157. package/data/pages/Utilities/utilities/useeffectonce.json +57 -0
  158. package/data/pages/Utilities/utilities/useelapsedtime.json +57 -0
  159. package/data/pages/Utilities/utilities/useelementsize.json +63 -0
  160. package/data/pages/Utilities/utilities/useesc.json +57 -0
  161. package/data/pages/Utilities/utilities/useevent.json +75 -0
  162. package/data/pages/Utilities/utilities/usefocustrap.json +57 -0
  163. package/data/pages/Utilities/utilities/usefullscreen.json +197 -0
  164. package/data/pages/Utilities/utilities/usehover.json +57 -0
  165. package/data/pages/Utilities/utilities/useinterval.json +63 -0
  166. package/data/pages/Utilities/utilities/useisfocuswithin.json +75 -0
  167. package/data/pages/Utilities/utilities/usekey.json +75 -0
  168. package/data/pages/Utilities/utilities/uselocalstorage.json +69 -0
  169. package/data/pages/Utilities/utilities/uselocationsuggestions.json +110 -0
  170. package/data/pages/Utilities/utilities/usemax.json +86 -0
  171. package/data/pages/Utilities/utilities/usemin.json +86 -0
  172. package/data/pages/Utilities/utilities/usemutationobserver.json +69 -0
  173. package/data/pages/Utilities/utilities/useonlinestatus.json +39 -0
  174. package/data/pages/Utilities/utilities/useonscreen.json +63 -0
  175. package/data/pages/Utilities/utilities/usepostmessage.json +80 -0
  176. package/data/pages/Utilities/utilities/useprevious.json +63 -0
  177. package/data/pages/Utilities/utilities/useresizeobserver.json +65 -0
  178. package/data/pages/Utilities/utilities/usescrollposition.json +103 -0
  179. package/data/pages/Utilities/utilities/usesearch.json +197 -0
  180. package/data/pages/Utilities/utilities/usesorting.json +139 -0
  181. package/data/pages/Utilities/utilities/usestatewithvalidation.json +69 -0
  182. package/data/pages/Utilities/utilities/usesum.json +86 -0
  183. package/data/pages/Utilities/utilities/usetableexport.json +87 -0
  184. package/data/pages/Utilities/utilities/usetableselection.json +311 -0
  185. package/data/pages/Utilities/utilities/usetimeout.json +63 -0
  186. package/data/pages/Utilities/utilities/usetoggle.json +75 -0
  187. package/data/pages/Utilities/utilities/usewindowresize.json +63 -0
  188. package/data/version.json +4 -0
  189. package/docs/content-schema.md +147 -0
  190. package/docs/navigation-inventory.json +1310 -0
  191. package/docs/search-synonyms.json +43 -0
  192. package/package.json +38 -0
  193. package/server/index.mjs +268 -0
  194. package/server/lib/load-docs.mjs +48 -0
  195. package/server/lib/normalise-doc.mjs +220 -0
  196. package/server/lib/render-markdown.mjs +82 -0
  197. package/server/lib/search-index.mjs +49 -0
  198. package/server/lib/types.js +99 -0
@@ -0,0 +1,377 @@
1
+ {
2
+ "metadata": {
3
+ "captured_at": "2025-11-21T12:07:21.144Z",
4
+ "source": "https://uikit.developers.rio.cloud/#components/expander",
5
+ "category": "Components",
6
+ "section": "Show/Hide",
7
+ "slug": "components/expander",
8
+ "version": "v1.13.2",
9
+ "hash_algorithm": "sha256",
10
+ "hash": "cde75a7611a038b3a93a3592d66f800a39f82789c0bb36c459314961a0586e77"
11
+ },
12
+ "title": "ExpanderPanel",
13
+ "lead": "A simple panel component where the \"panel-body\" can be expanded.",
14
+ "content": [
15
+ {
16
+ "heading": "ExpanderPanel",
17
+ "body": "",
18
+ "examples": [
19
+ {
20
+ "caption": "Example 1",
21
+ "rendered_html": "<div class=\"playground-content bg-white padding-20 padding-bottom-25\" style=\"width: 100%;\"><div><div class=\"btn-toolbar\"><button type=\"button\" class=\"btn btn-primary btn-component\" tabindex=\"0\">Toggle expander</button><button type=\"button\" class=\"btn btn-default btn-component\" disabled=\"\" tabindex=\"0\">Open expander</button><button type=\"button\" class=\"btn btn-default btn-component\" tabindex=\"0\">Close expander</button></div><div class=\"display-grid grid-cols-1 grid-cols-2-lg\"><div class=\"padding-top-20\"><div class=\"expander-panel panel panel-default\" aria-label=\"expander panel\"><div class=\"panel-heading open\" aria-label=\"panel heading\"><span class=\"title\">Click me to toggle my state</span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div><div class=\"collapse display-block width-100pct\" style=\"opacity: 1; height: auto;\"><div><div class=\"panel-body\"><div>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet</div></div></div></div></div></div></div></div></div>",
22
+ "tabs": [
23
+ {
24
+ "label": "React",
25
+ "language": "tsx",
26
+ "code": "import { useState } from 'react';\n\nimport ExpanderPanel from '@rio-cloud/rio-uikit/ExpanderPanel';\nimport Button from '@rio-cloud/rio-uikit/Button';\n\nconst content = (\n <div>\n Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et\n dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet\n clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet\n </div>\n);\n\nexport default () => {\n const [expanderIsOpen, setExpanderIsOpen] = useState(true);\n\n const handleToggleExpander = () => {\n setExpanderIsOpen(prev => !prev);\n };\n\n const handleForceOpen = () => {\n setExpanderIsOpen(prev => (prev ? prev : true));\n };\n\n const handleForceClose = () => {\n setExpanderIsOpen(prev => (prev ? false : prev));\n };\n\n return (\n <div>\n <div className='btn-toolbar'>\n <Button bsStyle='primary' onClick={handleToggleExpander}>\n Toggle expander\n </Button>\n <Button onClick={handleForceOpen} disabled={expanderIsOpen}>\n Open expander\n </Button>\n <Button onClick={handleForceClose} disabled={!expanderIsOpen}>\n Close expander\n </Button>\n </div>\n <div className='display-grid grid-cols-1 grid-cols-2-lg'>\n <div className='padding-top-20'>\n <ExpanderPanel\n open={expanderIsOpen}\n title='Click me to toggle my state'\n bsStyle='default'\n onEntered={() => setExpanderIsOpen(true)}\n onExited={() => setExpanderIsOpen(false)}\n >\n {content}\n </ExpanderPanel>\n </div>\n </div>\n </div>\n );\n};"
27
+ },
28
+ {
29
+ "label": "HTML",
30
+ "language": "html",
31
+ "code": "<div>\n <div class=\"btn-toolbar\">\n <button type=\"button\" class=\"btn btn-primary btn-component\" tabindex=\"0\">Toggle expander</button>\n <button type=\"button\" class=\"btn btn-default btn-component\" disabled=\"\" tabindex=\"0\">Open expander</button>\n <button type=\"button\" class=\"btn btn-default btn-component\" tabindex=\"0\">Close expander</button>\n </div>\n <div class=\"display-grid grid-cols-1 grid-cols-2-lg\">\n <div class=\"padding-top-20\">\n <div class=\"expander-panel panel panel-default\" aria-label=\"expander panel\">\n <div class=\"panel-heading open\" aria-label=\"panel heading\">\n <span class=\"title\">Click me to toggle my state</span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n <div class=\"collapse display-block width-100pct\" style=\"opacity: 1; height: auto;\">\n <div>\n <div class=\"panel-body\">\n <div>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>"
32
+ },
33
+ {
34
+ "label": "Props",
35
+ "language": "json",
36
+ "code": null,
37
+ "props": [
38
+ {
39
+ "heading": null,
40
+ "rows": [
41
+ {
42
+ "name": "title",
43
+ "type": "String / Node",
44
+ "default": "",
45
+ "description": "The title to be shown in the expander header."
46
+ },
47
+ {
48
+ "name": "bsStyle",
49
+ "type": "String",
50
+ "default": "'blank'",
51
+ "description": "Component visual or contextual style variants. Possible values are: 'default' 'separator' 'blank' 'primary' 'secondary' 'info' 'warning' 'danger' 'success'"
52
+ },
53
+ {
54
+ "name": "iconLeft",
55
+ "type": "Boolean",
56
+ "default": "false",
57
+ "description": "Defines if the icon will be align left, otherwise it is aligned right."
58
+ },
59
+ {
60
+ "name": "open",
61
+ "type": "Boolean",
62
+ "default": "false",
63
+ "description": "Defines if the panel will be opened or closed by default. The open/closed state will be handled internally"
64
+ },
65
+ {
66
+ "name": "unmountOnExit",
67
+ "type": "Boolean",
68
+ "default": "true",
69
+ "description": "It unmounts the body component (remove it from the DOM) when it is collapsed. Set it to false to avoid the unmount."
70
+ },
71
+ {
72
+ "name": "className",
73
+ "type": "String",
74
+ "default": "",
75
+ "description": "Additional classes to be set on the wrapper element."
76
+ },
77
+ {
78
+ "name": "iconClassName",
79
+ "type": "String",
80
+ "default": "",
81
+ "description": "Additional classes added to the chevron icon"
82
+ },
83
+ {
84
+ "name": "headerClassName",
85
+ "type": "String",
86
+ "default": "",
87
+ "description": "Additional classes to be set on the panel header."
88
+ },
89
+ {
90
+ "name": "titleClassName",
91
+ "type": "String",
92
+ "default": "",
93
+ "description": "Additional classes to be set on the header title."
94
+ },
95
+ {
96
+ "name": "bodyClassName",
97
+ "type": "String",
98
+ "default": "",
99
+ "description": "Additional classes to be set on the panel body."
100
+ },
101
+ {
102
+ "name": "onToggle",
103
+ "type": "(isOpen: boolean) => void",
104
+ "default": "",
105
+ "description": "Callback function for when the header is clicked and the expander toggles."
106
+ },
107
+ {
108
+ "name": "onEntered",
109
+ "type": "VoidFunction",
110
+ "default": "",
111
+ "description": "Callback fired after the component has expanded."
112
+ },
113
+ {
114
+ "name": "onExited",
115
+ "type": "VoidFunction",
116
+ "default": "",
117
+ "description": "Callback fired after the component has collapsed."
118
+ },
119
+ {
120
+ "name": "onAnimationStart",
121
+ "type": "VoidFunction",
122
+ "default": "",
123
+ "description": "Callback fired when the animation starts for either expand or collapse."
124
+ },
125
+ {
126
+ "name": "children",
127
+ "type": "Node",
128
+ "default": "",
129
+ "description": "Any element to be rendered inside the panel body."
130
+ },
131
+ {
132
+ "name": "children",
133
+ "type": "Function",
134
+ "default": "",
135
+ "description": "Providing a function enables the \"render props\" approach. The function gets the isOpen state passed and is responsible for rendering the custom content."
136
+ }
137
+ ]
138
+ }
139
+ ]
140
+ }
141
+ ]
142
+ },
143
+ {
144
+ "caption": "Default",
145
+ "rendered_html": "<div class=\"playground-content bg-white padding-20 padding-bottom-25\" style=\"width: 100%;\"><div><div class=\"display-grid grid-cols-1 grid-cols-2-sm grid-cols-4-lg gap-15 margin-bottom-50\"><div class=\"grid-colspan-1 grid-colspan-2-lg\"><label class=\"text-color-dark\">Default</label><div class=\"expander-panel panel panel-default\" aria-label=\"expander panel\"><div class=\"panel-heading open\" aria-label=\"panel heading\"><span class=\"title\">Lorem ipsum</span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div><div class=\"collapse display-block width-100pct\" style=\"opacity: 1; height: auto;\"><div><div class=\"panel-body\"><div><div class=\"lead\">Some content</div><div>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet</div></div></div></div></div></div></div><div class=\"grid-colspan-1 grid-colspan-2-lg\"><label class=\"text-color-dark\">Blank</label><div class=\"expander-panel panel panel-blank\" aria-label=\"expander panel\"><div class=\"panel-heading open\" aria-label=\"panel heading\"><span class=\"title\">Lorem ipsum</span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div><div class=\"collapse display-block width-100pct\" style=\"opacity: 1; height: auto;\"><div><div class=\"panel-body\"><div><div class=\"lead\">Some content</div><div>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet</div></div></div></div></div></div></div><div class=\"grid-colspan-1 grid-colspan-2-lg\"><label class=\"text-color-dark\">Separator</label><div class=\"expander-panel panel panel-separator\" aria-label=\"expander panel\"><div class=\"panel-heading open icon-left\" aria-label=\"panel heading\"><span class=\"title\">Separator with icon left</span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span><div class=\"separator\"><hr></div></div><div class=\"collapse display-block width-100pct\" style=\"opacity: 1; height: auto;\"><div><div class=\"panel-body padding-top-5 padding-x-0\"><div><div class=\"panel panel-default panel-body bg-lightest\"><div class=\"text-bold\">Lorem ipsum dolor sit amet</div><div>consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</div></div></div></div></div></div></div></div><div class=\"grid-colspan-1 grid-colspan-2-lg\"><label class=\"text-color-dark\">Separator</label><div class=\"expander-panel panel panel-separator\" aria-label=\"expander panel\"><div class=\"panel-heading open\" aria-label=\"panel heading\"><span class=\"title\">Separator right aligned</span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span><div class=\"separator\"><hr></div></div><div class=\"collapse display-block width-100pct\" style=\"opacity: 1; height: auto;\"><div><div class=\"panel-body padding-top-5 padding-right-20\"><div><div class=\"panel panel-default panel-body bg-lightest\"><div class=\"text-bold\">Lorem ipsum dolor sit amet</div><div>consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</div></div></div></div></div></div></div></div><div class=\"grid-colspan-1 grid-colspan-2-lg\"><label class=\"text-color-dark\">Primary</label><div class=\"expander-panel panel panel-primary\" aria-label=\"expander panel\"><div class=\"panel-heading\" aria-label=\"panel heading\"><span class=\"title text-normal\">Lorem ipsum</span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div></div></div><div class=\"grid-colspan-1 grid-colspan-2-lg\"><label class=\"text-color-dark\">Primary</label><div class=\"expander-panel panel panel-primary\" aria-label=\"expander panel\"><div class=\"panel-heading icon-left\" aria-label=\"panel heading\"><span class=\"title text-normal\">Header with icon left</span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div></div></div><div class=\"\"><label class=\"text-color-dark\">Secondary</label><div class=\"expander-panel panel panel-secondary\" aria-label=\"expander panel\"><div class=\"panel-heading\" aria-label=\"panel heading\"><span class=\"title\">Lorem ipsum</span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div></div></div><div class=\"\"><label class=\"text-color-dark\">Info</label><div class=\"expander-panel panel panel-info\" aria-label=\"expander panel\"><div class=\"panel-heading\" aria-label=\"panel heading\"><span class=\"title\">Lorem ipsum</span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div></div></div><div class=\"\"><label class=\"text-color-dark\">Warning</label><div class=\"expander-panel panel panel-warning\" aria-label=\"expander panel\"><div class=\"panel-heading\" aria-label=\"panel heading\"><span class=\"title\">Lorem ipsum</span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div></div></div><div class=\"\"><label class=\"text-color-dark\">Danger</label><div class=\"expander-panel panel panel-danger\" aria-label=\"expander panel\"><div class=\"panel-heading\" aria-label=\"panel heading\"><span class=\"title\">Lorem ipsum</span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div></div></div><div class=\"\"><label class=\"text-color-dark\">success</label><div class=\"expander-panel panel panel-success\" aria-label=\"expander panel\"><div class=\"panel-heading\" aria-label=\"panel heading\"><span class=\"title\">Lorem ipsum</span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div></div></div></div><div class=\"expander-panel panel panel-default\" aria-label=\"expander panel\"><div class=\"panel-heading open\" aria-label=\"panel heading\"><span class=\"title text-bold\">Dynamic table content</span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div><div class=\"collapse display-block width-100pct\" style=\"opacity: 1; height: auto;\"><div><div class=\"panel-body padding-0\"><div><table class=\"table margin-0 border border-bottom-only border-color-lighter\"><colgroup><col class=\"width-100pct\"></colgroup><tbody><tr><td>Item 1</td><td><button data-id=\"1\" type=\"button\" class=\"btn btn-xs btn-muted btn-icon-only\"><span class=\"rioglyph rioglyph-remove\"></span></button></td></tr><tr><td>Item 2</td><td><button data-id=\"2\" type=\"button\" class=\"btn btn-xs btn-muted btn-icon-only\"><span class=\"rioglyph rioglyph-remove\"></span></button></td></tr><tr><td>Item 3</td><td><button data-id=\"3\" type=\"button\" class=\"btn btn-xs btn-muted btn-icon-only\"><span class=\"rioglyph rioglyph-remove\"></span></button></td></tr></tbody></table><div class=\"padding-25 text-center\"><button type=\"button\" class=\"btn btn-default\"><span class=\"rioglyph rioglyph-plus\"></span><span>Add new table row</span></button></div></div></div></div></div></div></div></div>",
146
+ "tabs": [
147
+ {
148
+ "label": "React",
149
+ "language": "tsx",
150
+ "code": "import { useState } from 'react';\n\nimport ExpanderPanel from '@rio-cloud/rio-uikit/ExpanderPanel';\nimport { dummyTextExtraShort } from '../../../utils/data';\n\nconst content = (\n <div>\n <div className='lead'>Some content</div>\n <div>\n Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et\n dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet\n clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet\n </div>\n </div>\n);\n\nconst content2 = (\n <div>\n <div className='panel panel-default panel-body bg-lightest'>\n <div className='text-bold'>Lorem ipsum dolor sit amet</div>\n <div>\n consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam\n erat, sed diam voluptua.\n </div>\n </div>\n </div>\n);\n\nexport default () => (\n <div>\n <div className='display-grid grid-cols-1 grid-cols-2-sm grid-cols-4-lg gap-15 margin-bottom-50'>\n <div className='grid-colspan-1 grid-colspan-2-lg'>\n <label className='text-color-dark'>Default</label>\n <ExpanderPanel\n open\n title='Lorem ipsum'\n bsStyle='default'\n onEntered={() => console.log('opened')}\n onExited={() => console.log('closed')}\n >\n {content}\n </ExpanderPanel>\n </div>\n <div className='grid-colspan-1 grid-colspan-2-lg'>\n <label className='text-color-dark'>Blank</label>\n <ExpanderPanel open title='Lorem ipsum' bsStyle='blank'>\n {content}\n </ExpanderPanel>\n </div>\n <div className='grid-colspan-1 grid-colspan-2-lg'>\n <label className='text-color-dark'>Separator</label>\n <ExpanderPanel\n open\n title='Separator with icon left'\n iconLeft\n bsStyle='separator'\n bodyClassName='padding-top-5 padding-x-0'\n >\n {(open: boolean) => {\n console.log(`isOpen: ${open}`);\n return content2;\n }}\n </ExpanderPanel>\n </div>\n <div className='grid-colspan-1 grid-colspan-2-lg'>\n <label className='text-color-dark'>Separator</label>\n <ExpanderPanel\n open\n title='Separator right aligned'\n bsStyle='separator'\n bodyClassName='padding-top-5 padding-right-20'\n >\n {(open: boolean) => {\n console.log(`isOpen: ${open}`);\n return content2;\n }}\n </ExpanderPanel>\n </div>\n <div className='grid-colspan-1 grid-colspan-2-lg'>\n <label className='text-color-dark'>Primary</label>\n <ExpanderPanel title='Lorem ipsum' titleClassName='text-normal' bsStyle='primary'>\n {(open: boolean) => {\n console.log(`isOpen: ${open}`);\n return content2;\n }}\n </ExpanderPanel>\n </div>\n <div className='grid-colspan-1 grid-colspan-2-lg'>\n <label className='text-color-dark'>Primary</label>\n <ExpanderPanel title='Header with icon left' titleClassName='text-normal' iconLeft bsStyle='primary'>\n {(open: boolean) => {\n console.log(`isOpen: ${open}`);\n return content2;\n }}\n </ExpanderPanel>\n </div>\n <div className=''>\n <label className='text-color-dark'>Secondary</label>\n <ExpanderPanel title='Lorem ipsum' bsStyle='secondary'>\n {dummyTextExtraShort}\n </ExpanderPanel>\n </div>\n <div className=''>\n <label className='text-color-dark'>Info</label>\n <ExpanderPanel title='Lorem ipsum' bsStyle='info'>\n {dummyTextExtraShort}\n </ExpanderPanel>\n </div>\n <div className=''>\n <label className='text-color-dark'>Warning</label>\n <ExpanderPanel title='Lorem ipsum' bsStyle='warning'>\n {dummyTextExtraShort}\n </ExpanderPanel>\n </div>\n <div className=''>\n <label className='text-color-dark'>Danger</label>\n <ExpanderPanel title='Lorem ipsum' bsStyle='danger'>\n {dummyTextExtraShort}\n </ExpanderPanel>\n </div>\n <div className=''>\n <label className='text-color-dark'>success</label>\n <ExpanderPanel title='Lorem ipsum' bsStyle='success'>\n {dummyTextExtraShort}\n </ExpanderPanel>\n </div>\n </div>\n <ExpanderPanel\n title='Dynamic table content'\n bsStyle='default'\n titleClassName='text-bold'\n bodyClassName='padding-0'\n open\n >\n <DynamicContent />\n </ExpanderPanel>\n </div>\n);\n\nconst DynamicContent = () => {\n const [listItems, setListItems] = useState([\n {\n id: 1,\n content: 'Item 1',\n },\n {\n id: 2,\n content: 'Item 2',\n },\n {\n id: 3,\n content: 'Item 3',\n },\n ]);\n\n const handleAddItem = () => {\n const lastItem = listItems[listItems.length - 1];\n const newId = lastItem ? lastItem.id + 1 : 1;\n const newItem = { id: newId, content: `Item ${newId}` };\n\n setListItems([...listItems, newItem]);\n };\n\n const handleRemoveItem = (event: React.MouseEvent<HTMLButtonElement>) => {\n const idString = event.currentTarget.getAttribute('data-id');\n if (idString) {\n const id = Number.parseInt(idString, 10);\n if (!isNaN(id)) {\n setListItems(listItems.filter(item => item.id !== id));\n }\n }\n };\n\n return (\n <div>\n <table className='table margin-0 border border-bottom-only border-color-lighter'>\n <colgroup>\n <col className='width-100pct' />\n </colgroup>\n <tbody>\n {listItems.map(item => (\n <tr key={item.id}>\n <td>{item.content}</td>\n <td>\n <button\n data-id={item.id}\n type='button'\n className='btn btn-xs btn-muted btn-icon-only'\n onClick={handleRemoveItem}\n >\n <span className='rioglyph rioglyph-remove' />\n </button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n <div key='addNew' className='padding-25 text-center'>\n <button type='button' className='btn btn-default' onClick={handleAddItem}>\n <span className='rioglyph rioglyph-plus' />\n <span>Add new table row</span>\n </button>\n </div>\n </div>\n );\n};"
151
+ },
152
+ {
153
+ "label": "HTML",
154
+ "language": "html",
155
+ "code": "<div>\n <div class=\"display-grid grid-cols-1 grid-cols-2-sm grid-cols-4-lg gap-15 margin-bottom-50\">\n <div class=\"grid-colspan-1 grid-colspan-2-lg\">\n <label class=\"text-color-dark\">Default</label>\n <div class=\"expander-panel panel panel-default\" aria-label=\"expander panel\">\n <div class=\"panel-heading open\" aria-label=\"panel heading\">\n <span class=\"title\">Lorem ipsum</span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n <div class=\"collapse display-block width-100pct\" style=\"opacity: 1; height: auto;\">\n <div>\n <div class=\"panel-body\">\n <div>\n <div class=\"lead\">Some content</div>\n <div>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"grid-colspan-1 grid-colspan-2-lg\">\n <label class=\"text-color-dark\">Blank</label>\n <div class=\"expander-panel panel panel-blank\" aria-label=\"expander panel\">\n <div class=\"panel-heading open\" aria-label=\"panel heading\">\n <span class=\"title\">Lorem ipsum</span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n <div class=\"collapse display-block width-100pct\" style=\"opacity: 1; height: auto;\">\n <div>\n <div class=\"panel-body\">\n <div>\n <div class=\"lead\">Some content</div>\n <div>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"grid-colspan-1 grid-colspan-2-lg\">\n <label class=\"text-color-dark\">Separator</label>\n <div class=\"expander-panel panel panel-separator\" aria-label=\"expander panel\">\n <div class=\"panel-heading open icon-left\" aria-label=\"panel heading\">\n <span class=\"title\">Separator with icon left</span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n <div class=\"separator\">\n <hr>\n </div>\n </div>\n <div class=\"collapse display-block width-100pct\" style=\"opacity: 1; height: auto;\">\n <div>\n <div class=\"panel-body padding-top-5 padding-x-0\">\n <div>\n <div class=\"panel panel-default panel-body bg-lightest\">\n <div class=\"text-bold\">Lorem ipsum dolor sit amet</div>\n <div>consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"grid-colspan-1 grid-colspan-2-lg\">\n <label class=\"text-color-dark\">Separator</label>\n <div class=\"expander-panel panel panel-separator\" aria-label=\"expander panel\">\n <div class=\"panel-heading open\" aria-label=\"panel heading\">\n <span class=\"title\">Separator right aligned</span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n <div class=\"separator\">\n <hr>\n </div>\n </div>\n <div class=\"collapse display-block width-100pct\" style=\"opacity: 1; height: auto;\">\n <div>\n <div class=\"panel-body padding-top-5 padding-right-20\">\n <div>\n <div class=\"panel panel-default panel-body bg-lightest\">\n <div class=\"text-bold\">Lorem ipsum dolor sit amet</div>\n <div>consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"grid-colspan-1 grid-colspan-2-lg\">\n <label class=\"text-color-dark\">Primary</label>\n <div class=\"expander-panel panel panel-primary\" aria-label=\"expander panel\">\n <div class=\"panel-heading\" aria-label=\"panel heading\">\n <span class=\"title text-normal\">Lorem ipsum</span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n </div>\n </div>\n <div class=\"grid-colspan-1 grid-colspan-2-lg\">\n <label class=\"text-color-dark\">Primary</label>\n <div class=\"expander-panel panel panel-primary\" aria-label=\"expander panel\">\n <div class=\"panel-heading icon-left\" aria-label=\"panel heading\">\n <span class=\"title text-normal\">Header with icon left</span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n </div>\n </div>\n <div class=\"\">\n <label class=\"text-color-dark\">Secondary</label>\n <div class=\"expander-panel panel panel-secondary\" aria-label=\"expander panel\">\n <div class=\"panel-heading\" aria-label=\"panel heading\">\n <span class=\"title\">Lorem ipsum</span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n </div>\n </div>\n <div class=\"\">\n <label class=\"text-color-dark\">Info</label>\n <div class=\"expander-panel panel panel-info\" aria-label=\"expander panel\">\n <div class=\"panel-heading\" aria-label=\"panel heading\">\n <span class=\"title\">Lorem ipsum</span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n </div>\n </div>\n <div class=\"\">\n <label class=\"text-color-dark\">Warning</label>\n <div class=\"expander-panel panel panel-warning\" aria-label=\"expander panel\">\n <div class=\"panel-heading\" aria-label=\"panel heading\">\n <span class=\"title\">Lorem ipsum</span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n </div>\n </div>\n <div class=\"\">\n <label class=\"text-color-dark\">Danger</label>\n <div class=\"expander-panel panel panel-danger\" aria-label=\"expander panel\">\n <div class=\"panel-heading\" aria-label=\"panel heading\">\n <span class=\"title\">Lorem ipsum</span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n </div>\n </div>\n <div class=\"\">\n <label class=\"text-color-dark\">success</label>\n <div class=\"expander-panel panel panel-success\" aria-label=\"expander panel\">\n <div class=\"panel-heading\" aria-label=\"panel heading\">\n <span class=\"title\">Lorem ipsum</span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"expander-panel panel panel-default\" aria-label=\"expander panel\">\n <div class=\"panel-heading open\" aria-label=\"panel heading\">\n <span class=\"title text-bold\">Dynamic table content</span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n <div class=\"collapse display-block width-100pct\" style=\"opacity: 1; height: auto;\">\n <div>\n <div class=\"panel-body padding-0\">\n <div>\n <table class=\"table margin-0 border border-bottom-only border-color-lighter\">\n <colgroup>\n <col class=\"width-100pct\">\n </colgroup>\n <tbody>\n <tr>\n <td>Item 1</td>\n <td>\n <button data-id=\"1\" type=\"button\" class=\"btn btn-xs btn-muted btn-icon-only\">\n <span class=\"rioglyph rioglyph-remove\">\n </span>\n </button>\n </td>\n </tr>\n <tr>\n <td>Item 2</td>\n <td>\n <button data-id=\"2\" type=\"button\" class=\"btn btn-xs btn-muted btn-icon-only\">\n <span class=\"rioglyph rioglyph-remove\">\n </span>\n </button>\n </td>\n </tr>\n <tr>\n <td>Item 3</td>\n <td>\n <button data-id=\"3\" type=\"button\" class=\"btn btn-xs btn-muted btn-icon-only\">\n <span class=\"rioglyph rioglyph-remove\">\n </span>\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n <div class=\"padding-25 text-center\">\n <button type=\"button\" class=\"btn btn-default\">\n <span class=\"rioglyph rioglyph-plus\">\n </span>\n <span>Add new table row</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>"
156
+ },
157
+ {
158
+ "label": "Props",
159
+ "language": "json",
160
+ "code": null,
161
+ "props": [
162
+ {
163
+ "heading": null,
164
+ "rows": [
165
+ {
166
+ "name": "title",
167
+ "type": "String / Node",
168
+ "default": "",
169
+ "description": "The title to be shown in the expander header."
170
+ },
171
+ {
172
+ "name": "bsStyle",
173
+ "type": "String",
174
+ "default": "'blank'",
175
+ "description": "Component visual or contextual style variants. Possible values are: 'default' 'separator' 'blank' 'primary' 'secondary' 'info' 'warning' 'danger' 'success'"
176
+ },
177
+ {
178
+ "name": "iconLeft",
179
+ "type": "Boolean",
180
+ "default": "false",
181
+ "description": "Defines if the icon will be align left, otherwise it is aligned right."
182
+ },
183
+ {
184
+ "name": "open",
185
+ "type": "Boolean",
186
+ "default": "false",
187
+ "description": "Defines if the panel will be opened or closed by default. The open/closed state will be handled internally"
188
+ },
189
+ {
190
+ "name": "unmountOnExit",
191
+ "type": "Boolean",
192
+ "default": "true",
193
+ "description": "It unmounts the body component (remove it from the DOM) when it is collapsed. Set it to false to avoid the unmount."
194
+ },
195
+ {
196
+ "name": "className",
197
+ "type": "String",
198
+ "default": "",
199
+ "description": "Additional classes to be set on the wrapper element."
200
+ },
201
+ {
202
+ "name": "iconClassName",
203
+ "type": "String",
204
+ "default": "",
205
+ "description": "Additional classes added to the chevron icon"
206
+ },
207
+ {
208
+ "name": "headerClassName",
209
+ "type": "String",
210
+ "default": "",
211
+ "description": "Additional classes to be set on the panel header."
212
+ },
213
+ {
214
+ "name": "titleClassName",
215
+ "type": "String",
216
+ "default": "",
217
+ "description": "Additional classes to be set on the header title."
218
+ },
219
+ {
220
+ "name": "bodyClassName",
221
+ "type": "String",
222
+ "default": "",
223
+ "description": "Additional classes to be set on the panel body."
224
+ },
225
+ {
226
+ "name": "onToggle",
227
+ "type": "(isOpen: boolean) => void",
228
+ "default": "",
229
+ "description": "Callback function for when the header is clicked and the expander toggles."
230
+ },
231
+ {
232
+ "name": "onEntered",
233
+ "type": "VoidFunction",
234
+ "default": "",
235
+ "description": "Callback fired after the component has expanded."
236
+ },
237
+ {
238
+ "name": "onExited",
239
+ "type": "VoidFunction",
240
+ "default": "",
241
+ "description": "Callback fired after the component has collapsed."
242
+ },
243
+ {
244
+ "name": "onAnimationStart",
245
+ "type": "VoidFunction",
246
+ "default": "",
247
+ "description": "Callback fired when the animation starts for either expand or collapse."
248
+ },
249
+ {
250
+ "name": "children",
251
+ "type": "Node",
252
+ "default": "",
253
+ "description": "Any element to be rendered inside the panel body."
254
+ },
255
+ {
256
+ "name": "children",
257
+ "type": "Function",
258
+ "default": "",
259
+ "description": "Providing a function enables the \"render props\" approach. The function gets the isOpen state passed and is responsible for rendering the custom content."
260
+ }
261
+ ]
262
+ }
263
+ ]
264
+ }
265
+ ]
266
+ }
267
+ ]
268
+ },
269
+ {
270
+ "heading": "ExpanderList",
271
+ "body": "A simple list component based on the \"list-group\" where items can be expanded individually.",
272
+ "examples": [
273
+ {
274
+ "caption": "With custom classes for header and body",
275
+ "rendered_html": "<div class=\"playground-content bg-white padding-20 padding-bottom-25\" style=\"width: 100%;\"><div><ul class=\"expander-list list-group rounded border margin-bottom-20\"><li class=\"list-group-item expandable open\"><div class=\"expander-list-header\" aria-label=\"expander item header\"><span class=\"expander-list-header-content\">Click me</span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div><div class=\"collapse display-block width-100pct\" style=\"opacity: 1; height: auto;\"><div class=\"expander-list-body-wrapper\"><div class=\"expander-list-body\" aria-label=\"expander item body\"><div><div class=\"lead\">Some content</div><div>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet</div></div></div></div></div></li><li class=\"list-group-item list-group-item-warning expandable\"><div class=\"expander-list-header\" aria-label=\"expander item header\"><span class=\"expander-list-header-content\"><span>Click me</span></span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div></li><li class=\"list-group-item list-group-item-danger expandable\"><div class=\"expander-list-header\" aria-label=\"expander item header\"><span class=\"expander-list-header-content\"><span>Click me</span></span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div></li><li class=\"list-group-item foobar expandable\"><div class=\"expander-list-header text-color-dark\" aria-label=\"expander item header\"><span class=\"expander-list-header-content\"><span>With custom classes for header and body</span></span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div></li><li class=\"list-group-item expandable\"><div class=\"expander-list-header\" aria-label=\"expander item header\"><span class=\"expander-list-header-content\"><div class=\"display-grid grid-cols-3\"><div class=\"\">Grid column 1</div><div class=\"\">Grid column 2</div><div class=\"\">Grid column 3</div></div></span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div></li><li class=\"list-group-item expandable\"><div class=\"expander-list-header\" aria-label=\"expander item header\"><span class=\"expander-list-header-content\"><span><span>Click me</span><span class=\"badge margin-left-5\">42</span></span></span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div></li><li class=\"list-group-item expandable\"><div class=\"expander-list-header\" aria-label=\"expander item header\"><span class=\"expander-list-header-content\"><span><span class=\"rioglyph rioglyph-tasks margin-right-3\" aria-hidden=\"true\"></span><span>Click me</span></span></span><span class=\"expander-icon rioglyph rioglyph-chevron-down\"></span></div></li><li class=\"list-group-item\"><div class=\"expander-list-header\" aria-label=\"expander item header\"><span class=\"expander-list-header-content\">Not expandable since there is no body</span></div></li></ul><button type=\"button\" class=\"btn btn-default btn-component\" tabindex=\"0\">Toggle first</button></div></div>",
276
+ "tabs": [
277
+ {
278
+ "label": "React",
279
+ "language": "tsx",
280
+ "code": "import { useState } from 'react';\n\nimport ExpanderList from '@rio-cloud/rio-uikit/ExpanderList';\nimport ExpanderPanel from '@rio-cloud/rio-uikit/ExpanderPanel';\nimport Button from '@rio-cloud/rio-uikit/Button';\n\nconst content = (\n <div>\n <div className='lead'>Some content</div>\n <div>\n Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et\n dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet\n clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet\n </div>\n </div>\n);\n\nexport default () => {\n const [listItems, setListItems] = useState([\n {\n id: 1,\n header: 'Click me',\n body: content,\n open: true,\n onOpen: () => console.log('open'),\n onClose: () => console.log('close'),\n },\n {\n id: 2,\n header: <span>Click me</span>,\n body: content,\n className: 'list-group-item-warning',\n },\n {\n id: 3,\n header: <span>Click me</span>,\n body: content,\n className: 'list-group-item-danger',\n },\n {\n id: 4,\n header: <span>With custom classes for header and body</span>,\n body: (\n <div>\n <div>{content}</div>\n <div className='btn-toolbar margin-top-15'>\n <Button onClick={() => removeItem(4)}>Delete me</Button>\n <Button onClick={() => updateItem(4)}>Update Item Headline</Button>\n </div>\n </div>\n ),\n className: 'foobar',\n headerClassName: 'text-color-dark',\n bodyClassName: 'bg-lightest padding-25',\n },\n {\n id: 5,\n header: (\n <div className='display-grid grid-cols-3'>\n <div className=''>Grid column 1</div>\n <div className=''>Grid column 2</div>\n <div className=''>Grid column 3</div>\n </div>\n ),\n body: content,\n },\n {\n id: 6,\n header: (\n <span>\n <span>Click me</span>\n <span className='badge margin-left-5'>42</span>\n </span>\n ),\n body: content,\n },\n {\n id: 7,\n header: (\n <span>\n <span className='rioglyph rioglyph-tasks margin-right-3' aria-hidden='true' />\n <span>Click me</span>\n </span>\n ),\n body: (\n <ExpanderPanel bsStyle='default' className='margin-0' title='Please click me' iconLeft>\n {content}\n </ExpanderPanel>\n ),\n },\n {\n id: 8,\n header: 'Not expandable since there is no body',\n },\n ]);\n\n const handleToggleFirst = () => {\n const updatedItems = [...listItems];\n const itemToUpdate = updatedItems[0];\n itemToUpdate.open = !itemToUpdate.open;\n\n setListItems(updatedItems);\n };\n\n const updateItem = (itemId: number) => {\n const updatedItems = [...listItems];\n const itemToUpdate = updatedItems.find(item => item.id === itemId);\n\n if (itemToUpdate) {\n itemToUpdate.header = 'Headline updated';\n setListItems(updatedItems);\n }\n };\n\n const removeItem = (itemId: number) => {\n setListItems(listItems.filter(item => item.id !== itemId));\n };\n\n return (\n <div>\n <ExpanderList items={listItems} className='margin-bottom-20' />\n <Button onClick={handleToggleFirst}>Toggle first</Button>\n </div>\n );\n};"
281
+ },
282
+ {
283
+ "label": "HTML",
284
+ "language": "html",
285
+ "code": "<div>\n <ul class=\"expander-list list-group rounded border margin-bottom-20\">\n <li class=\"list-group-item expandable open\">\n <div class=\"expander-list-header\" aria-label=\"expander item header\">\n <span class=\"expander-list-header-content\">Click me</span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n <div class=\"collapse display-block width-100pct\" style=\"opacity: 1; height: auto;\">\n <div class=\"expander-list-body-wrapper\">\n <div class=\"expander-list-body\" aria-label=\"expander item body\">\n <div>\n <div class=\"lead\">Some content</div>\n <div>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet</div>\n </div>\n </div>\n </div>\n </div>\n </li>\n <li class=\"list-group-item list-group-item-warning expandable\">\n <div class=\"expander-list-header\" aria-label=\"expander item header\">\n <span class=\"expander-list-header-content\">\n <span>Click me</span>\n </span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n </li>\n <li class=\"list-group-item list-group-item-danger expandable\">\n <div class=\"expander-list-header\" aria-label=\"expander item header\">\n <span class=\"expander-list-header-content\">\n <span>Click me</span>\n </span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n </li>\n <li class=\"list-group-item foobar expandable\">\n <div class=\"expander-list-header text-color-dark\" aria-label=\"expander item header\">\n <span class=\"expander-list-header-content\">\n <span>With custom classes for header and body</span>\n </span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n </li>\n <li class=\"list-group-item expandable\">\n <div class=\"expander-list-header\" aria-label=\"expander item header\">\n <span class=\"expander-list-header-content\">\n <div class=\"display-grid grid-cols-3\">\n <div class=\"\">Grid column 1</div>\n <div class=\"\">Grid column 2</div>\n <div class=\"\">Grid column 3</div>\n </div>\n </span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n </li>\n <li class=\"list-group-item expandable\">\n <div class=\"expander-list-header\" aria-label=\"expander item header\">\n <span class=\"expander-list-header-content\">\n <span>\n <span>Click me</span>\n <span class=\"badge margin-left-5\">42</span>\n </span>\n </span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n </li>\n <li class=\"list-group-item expandable\">\n <div class=\"expander-list-header\" aria-label=\"expander item header\">\n <span class=\"expander-list-header-content\">\n <span>\n <span class=\"rioglyph rioglyph-tasks margin-right-3\" aria-hidden=\"true\">\n </span>\n <span>Click me</span>\n </span>\n </span>\n <span class=\"expander-icon rioglyph rioglyph-chevron-down\">\n </span>\n </div>\n </li>\n <li class=\"list-group-item\">\n <div class=\"expander-list-header\" aria-label=\"expander item header\">\n <span class=\"expander-list-header-content\">Not expandable since there is no body</span>\n </div>\n </li>\n </ul>\n <button type=\"button\" class=\"btn btn-default btn-component\" tabindex=\"0\">Toggle first</button>\n</div>"
286
+ },
287
+ {
288
+ "label": "Props",
289
+ "language": "json",
290
+ "code": null,
291
+ "props": [
292
+ {
293
+ "heading": null,
294
+ "rows": [
295
+ {
296
+ "name": "items",
297
+ "type": "Array of Objects",
298
+ "default": "[]",
299
+ "description": "List of items to be rendered"
300
+ },
301
+ {
302
+ "name": "└id",
303
+ "type": "String / Number",
304
+ "default": "",
305
+ "description": "The \"id\" property is used to know which item is expanded. It will also be used to control the component from the outside. It can be a number or a string. If there is no \"id\" provided, a unique id is internally generated which will be used internally for the uncontrolled case."
306
+ },
307
+ {
308
+ "name": "└header",
309
+ "type": "String / Node",
310
+ "default": "",
311
+ "description": "The header content."
312
+ },
313
+ {
314
+ "name": "└body",
315
+ "type": "String / Node",
316
+ "default": "",
317
+ "description": "The body content. If there is no \"body\" provided, the list item is not expandable."
318
+ },
319
+ {
320
+ "name": "└open",
321
+ "type": "Boolean",
322
+ "default": "",
323
+ "description": "Defines if the item will be expanded or closed by default."
324
+ },
325
+ {
326
+ "name": "└className",
327
+ "type": "String",
328
+ "default": "",
329
+ "description": "Additional classes to be set on list item node."
330
+ },
331
+ {
332
+ "name": "└headerClassName",
333
+ "type": "String",
334
+ "default": "",
335
+ "description": "Additional classes to be set on \"expander-list-header\" node."
336
+ },
337
+ {
338
+ "name": "└bodyClassName",
339
+ "type": "String",
340
+ "default": "",
341
+ "description": "Additional classes to be set on \"expander-list-body\" node."
342
+ },
343
+ {
344
+ "name": "rounded",
345
+ "type": "Boolean",
346
+ "default": "true",
347
+ "description": "Defines whether the \"expander-list-body\" is rounded or not."
348
+ },
349
+ {
350
+ "name": "border",
351
+ "type": "Boolean",
352
+ "default": "true",
353
+ "description": "Defines whether the \"expander-list-body\" has a border or not."
354
+ },
355
+ {
356
+ "name": "unmountOnExit",
357
+ "type": "Boolean",
358
+ "default": "true",
359
+ "description": "It unmounts the body component (remove it from the DOM) when it is collapsed. Set it to false to avoid the unmount."
360
+ },
361
+ {
362
+ "name": "className",
363
+ "type": "String",
364
+ "default": "",
365
+ "description": "Additional classes to be set on the unordered list itself."
366
+ }
367
+ ]
368
+ }
369
+ ]
370
+ }
371
+ ]
372
+ }
373
+ ]
374
+ }
375
+ ],
376
+ "see_also": []
377
+ }