@patternfly/quickstarts 0.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 (304) hide show
  1. package/README.md +546 -0
  2. package/dist/ConsoleInternal/components/markdown-view.d.ts +19 -0
  3. package/dist/ConsoleInternal/components/utils/camel-case-wrap.d.ts +6 -0
  4. package/dist/ConsoleInternal/components/utils/index.d.ts +3 -0
  5. package/dist/ConsoleInternal/components/utils/router.d.ts +9 -0
  6. package/dist/ConsoleInternal/components/utils/status-box.d.ts +20 -0
  7. package/dist/ConsoleInternal/module/k8s/types.d.ts +42 -0
  8. package/dist/ConsoleShared/index.d.ts +1 -0
  9. package/dist/ConsoleShared/src/components/index.d.ts +7 -0
  10. package/dist/ConsoleShared/src/components/markdown-extensions/MarkdownCopyClipboard.d.ts +13 -0
  11. package/dist/ConsoleShared/src/components/markdown-extensions/accordion-extension.d.ts +7 -0
  12. package/dist/ConsoleShared/src/components/markdown-extensions/accordion-render-extension.d.ts +6 -0
  13. package/dist/ConsoleShared/src/components/markdown-extensions/admonition-extension.d.ts +7 -0
  14. package/dist/ConsoleShared/src/components/markdown-extensions/code-extension.d.ts +7 -0
  15. package/dist/ConsoleShared/src/components/markdown-extensions/const.d.ts +5 -0
  16. package/dist/ConsoleShared/src/components/markdown-extensions/index.d.ts +7 -0
  17. package/dist/ConsoleShared/src/components/markdown-extensions/inline-clipboard-extension.d.ts +7 -0
  18. package/dist/ConsoleShared/src/components/markdown-extensions/multiline-clipboard-extension.d.ts +7 -0
  19. package/dist/ConsoleShared/src/components/markdown-extensions/utils.d.ts +1 -0
  20. package/dist/ConsoleShared/src/components/markdown-highlight-extension/MarkdownHighlightExtension.d.ts +7 -0
  21. package/dist/ConsoleShared/src/components/markdown-highlight-extension/highlight-consts.d.ts +4 -0
  22. package/dist/ConsoleShared/src/components/markdown-highlight-extension/index.d.ts +1 -0
  23. package/dist/ConsoleShared/src/components/modal/Modal.d.ts +9 -0
  24. package/dist/ConsoleShared/src/components/modal/index.d.ts +1 -0
  25. package/dist/ConsoleShared/src/components/popper/Portal.d.ts +8 -0
  26. package/dist/ConsoleShared/src/components/popper/SimplePopper.d.ts +6 -0
  27. package/dist/ConsoleShared/src/components/popper/index.d.ts +2 -0
  28. package/dist/ConsoleShared/src/components/spotlight/InteractiveSpotlight.d.ts +7 -0
  29. package/dist/ConsoleShared/src/components/spotlight/Spotlight.d.ts +7 -0
  30. package/dist/ConsoleShared/src/components/spotlight/StaticSpotlight.d.ts +7 -0
  31. package/dist/ConsoleShared/src/components/spotlight/index.d.ts +1 -0
  32. package/dist/ConsoleShared/src/components/status/GenericStatus.d.ts +12 -0
  33. package/dist/ConsoleShared/src/components/status/NotStartedIcon.d.ts +3 -0
  34. package/dist/ConsoleShared/src/components/status/PopoverStatus.d.ts +13 -0
  35. package/dist/ConsoleShared/src/components/status/Status.d.ts +11 -0
  36. package/dist/ConsoleShared/src/components/status/StatusIconAndText.d.ts +8 -0
  37. package/dist/ConsoleShared/src/components/status/icons.d.ts +9 -0
  38. package/dist/ConsoleShared/src/components/status/index.d.ts +1 -0
  39. package/dist/ConsoleShared/src/components/status/statuses.d.ts +5 -0
  40. package/dist/ConsoleShared/src/components/status/types.d.ts +9 -0
  41. package/dist/ConsoleShared/src/components/utils/FallbackImg.d.ts +9 -0
  42. package/dist/ConsoleShared/src/components/utils/index.d.ts +1 -0
  43. package/dist/ConsoleShared/src/constants/index.d.ts +1 -0
  44. package/dist/ConsoleShared/src/constants/ui.d.ts +1 -0
  45. package/dist/ConsoleShared/src/hooks/index.d.ts +6 -0
  46. package/dist/ConsoleShared/src/hooks/scroll.d.ts +8 -0
  47. package/dist/ConsoleShared/src/hooks/useBoundingClientRect.d.ts +3 -0
  48. package/dist/ConsoleShared/src/hooks/useEventListener.d.ts +1 -0
  49. package/dist/ConsoleShared/src/hooks/useForceRender.d.ts +4 -0
  50. package/dist/ConsoleShared/src/hooks/useResizeObserver.d.ts +1 -0
  51. package/dist/ConsoleShared/src/hooks/useScrollShadows.d.ts +7 -0
  52. package/dist/ConsoleShared/src/index.d.ts +4 -0
  53. package/dist/ConsoleShared/src/utils/index.d.ts +1 -0
  54. package/dist/ConsoleShared/src/utils/useCombineRefs.d.ts +2 -0
  55. package/dist/HelpTopicDrawer.d.ts +33 -0
  56. package/dist/HelpTopicPanelContent.d.ts +11 -0
  57. package/dist/QuickStartCatalogPage.d.ts +14 -0
  58. package/dist/QuickStartCloseModal.d.ts +8 -0
  59. package/dist/QuickStartController.d.ts +10 -0
  60. package/dist/QuickStartDrawer.d.ts +62 -0
  61. package/dist/QuickStartMarkdownView.d.ts +9 -0
  62. package/dist/QuickStartPanelContent.d.ts +15 -0
  63. package/dist/catalog/Catalog/QuickStartCatalogHeader.d.ts +6 -0
  64. package/dist/catalog/Catalog/QuickStartCatalogSection.d.ts +5 -0
  65. package/dist/catalog/Catalog/QuickStartCatalogToolbar.d.ts +5 -0
  66. package/dist/catalog/Catalog/index.d.ts +3 -0
  67. package/dist/catalog/QuickStartCatalog.d.ts +8 -0
  68. package/dist/catalog/QuickStartTile.d.ts +14 -0
  69. package/dist/catalog/QuickStartTileDescription.d.ts +8 -0
  70. package/dist/catalog/QuickStartTileFooter.d.ts +8 -0
  71. package/dist/catalog/QuickStartTileFooterExternal.d.ts +8 -0
  72. package/dist/catalog/QuickStartTileHeader.d.ts +24 -0
  73. package/dist/catalog/Toolbar/QuickStartCatalogFilter.d.ts +10 -0
  74. package/dist/catalog/Toolbar/QuickStartCatalogFilterItems.d.ts +31 -0
  75. package/dist/catalog/index.d.ts +9 -0
  76. package/dist/controller/QuickStartConclusion.d.ts +12 -0
  77. package/dist/controller/QuickStartContent.d.ts +14 -0
  78. package/dist/controller/QuickStartFooter.d.ts +14 -0
  79. package/dist/controller/QuickStartIntroduction.d.ts +12 -0
  80. package/dist/controller/QuickStartTaskHeader.d.ts +15 -0
  81. package/dist/controller/QuickStartTaskHeaderList.d.ts +10 -0
  82. package/dist/controller/QuickStartTaskReview.d.ts +10 -0
  83. package/dist/controller/QuickStartTasks.d.ts +12 -0
  84. package/dist/data/mocks/json/explore-pipeline-quickstart.d.ts +2 -0
  85. package/dist/data/mocks/json/explore-serverless-quickstart.d.ts +2 -0
  86. package/dist/data/mocks/json/monitor-sampleapp-quickstart.d.ts +2 -0
  87. package/dist/data/mocks/json/tour-icons.d.ts +2 -0
  88. package/dist/data/quick-start-test-data.d.ts +2 -0
  89. package/dist/data/test-utils.d.ts +8 -0
  90. package/dist/index.d.ts +16 -0
  91. package/dist/index.es.js +2593 -0
  92. package/dist/index.es.js.map +1 -0
  93. package/dist/index.js +2695 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/patternfly-docs/quick-starts/design-guidelines/design-guidelines.md +105 -0
  96. package/dist/patternfly-docs/quick-starts/design-guidelines/img/card-elements copy.png +0 -0
  97. package/dist/patternfly-docs/quick-starts/design-guidelines/img/card-elements.png +0 -0
  98. package/dist/patternfly-docs/quick-starts/design-guidelines/img/catalog-elements.png +0 -0
  99. package/dist/patternfly-docs/quick-starts/design-guidelines/img/check-your-work.png +0 -0
  100. package/dist/patternfly-docs/quick-starts/design-guidelines/img/introduction-screen.png +0 -0
  101. package/dist/patternfly-docs/quick-starts/design-guidelines/img/mixed-catalog.png +0 -0
  102. package/dist/patternfly-docs/quick-starts/design-guidelines/img/prerequisites.png +0 -0
  103. package/dist/patternfly-docs/quick-starts/design-guidelines/img/qs-context.png +0 -0
  104. package/dist/patternfly-docs/quick-starts/design-guidelines/img/side-panel-elements.png +0 -0
  105. package/dist/patternfly-docs/quick-starts/design-guidelines/img/side-panel-resized.png +0 -0
  106. package/dist/patternfly-docs/quick-starts/design-guidelines/img/side-panel.png +0 -0
  107. package/dist/patternfly-docs/quick-starts/design-guidelines/img/task-no.png +0 -0
  108. package/dist/patternfly-docs/quick-starts/design-guidelines/img/task-yes.png +0 -0
  109. package/dist/patternfly-docs/quick-starts/design-guidelines/img/task.png +0 -0
  110. package/dist/patternfly-docs/quick-starts/examples/Basic.jsx +73 -0
  111. package/dist/patternfly-docs/quick-starts/examples/HelpTopic.jsx +51 -0
  112. package/dist/patternfly-docs/quick-starts/examples/about.md +84 -0
  113. package/dist/patternfly-docs/quick-starts/examples/basic.md +29 -0
  114. package/dist/patternfly-docs/quick-starts/examples/example-data/example-help-topics.js +173 -0
  115. package/dist/patternfly-docs/quick-starts/examples/example-data/example-quickstarts.js +215 -0
  116. package/dist/patternfly-docs/quick-starts/examples/example-data/index.js +15 -0
  117. package/dist/patternfly-docs/quick-starts/examples/help-topics.md +28 -0
  118. package/dist/patternfly-docs/quick-starts/examples/img/catalog.png +0 -0
  119. package/dist/patternfly-docs/quick-starts/examples/img/help-topic.png +0 -0
  120. package/dist/patternfly-docs/quick-starts/examples/img/side-panel.png +0 -0
  121. package/dist/patternfly-global.css +1302 -0
  122. package/dist/patternfly-nested.css +11812 -0
  123. package/dist/quickstarts-base.css +1219 -0
  124. package/dist/quickstarts-full.es.js +31861 -0
  125. package/dist/quickstarts-full.es.js.map +1 -0
  126. package/dist/quickstarts-standalone.css +868 -0
  127. package/dist/quickstarts-standalone.min.css +4 -0
  128. package/dist/quickstarts-vendor.css +165 -0
  129. package/dist/quickstarts.css +1383 -0
  130. package/dist/quickstarts.min.css +1 -0
  131. package/dist/styles/patternfly-global-entry.d.ts +1 -0
  132. package/dist/styles/patternfly-nested-entry.d.ts +1 -0
  133. package/dist/styles/quickstarts-standalone-entry.d.ts +1 -0
  134. package/dist/styles/vendor-entry.d.ts +1 -0
  135. package/dist/utils/PluralResolver.d.ts +16 -0
  136. package/dist/utils/asciidoc-procedure-parser.d.ts +12 -0
  137. package/dist/utils/const.d.ts +6 -0
  138. package/dist/utils/help-topic-context.d.ts +23 -0
  139. package/dist/utils/help-topic-types.d.ts +13 -0
  140. package/dist/utils/quick-start-context.d.ts +81 -0
  141. package/dist/utils/quick-start-types.d.ts +60 -0
  142. package/dist/utils/quick-start-utils.d.ts +10 -0
  143. package/dist/utils/useLocalStorage.d.ts +1 -0
  144. package/dist/vendor.js +2 -0
  145. package/dist/vendor.js.map +1 -0
  146. package/package.json +105 -0
  147. package/src/ConsoleInternal/components/_icon-and-text.scss +14 -0
  148. package/src/ConsoleInternal/components/_markdown-view.scss +19 -0
  149. package/src/ConsoleInternal/components/catalog/_catalog.scss +392 -0
  150. package/src/ConsoleInternal/components/markdown-view.tsx +276 -0
  151. package/src/ConsoleInternal/components/utils/_status-box.scss +58 -0
  152. package/src/ConsoleInternal/components/utils/camel-case-wrap.tsx +33 -0
  153. package/src/ConsoleInternal/components/utils/index.tsx +3 -0
  154. package/src/ConsoleInternal/components/utils/router.ts +45 -0
  155. package/src/ConsoleInternal/components/utils/status-box.tsx +56 -0
  156. package/src/ConsoleInternal/module/k8s/types.ts +53 -0
  157. package/src/ConsoleShared/index.ts +1 -0
  158. package/src/ConsoleShared/src/components/index.ts +7 -0
  159. package/src/ConsoleShared/src/components/layout/PageLayout.scss +29 -0
  160. package/src/ConsoleShared/src/components/markdown-extensions/MarkdownCopyClipboard.tsx +95 -0
  161. package/src/ConsoleShared/src/components/markdown-extensions/__tests__/MarkdownCopyClipboard.spec.tsx +25 -0
  162. package/src/ConsoleShared/src/components/markdown-extensions/__tests__/test-data.ts +5 -0
  163. package/src/ConsoleShared/src/components/markdown-extensions/accordion-extension.tsx +51 -0
  164. package/src/ConsoleShared/src/components/markdown-extensions/accordion-render-extension.tsx +60 -0
  165. package/src/ConsoleShared/src/components/markdown-extensions/admonition-extension.tsx +67 -0
  166. package/src/ConsoleShared/src/components/markdown-extensions/code-extension.tsx +23 -0
  167. package/src/ConsoleShared/src/components/markdown-extensions/const.ts +5 -0
  168. package/src/ConsoleShared/src/components/markdown-extensions/index.ts +7 -0
  169. package/src/ConsoleShared/src/components/markdown-extensions/inline-clipboard-extension.tsx +39 -0
  170. package/src/ConsoleShared/src/components/markdown-extensions/multiline-clipboard-extension.tsx +44 -0
  171. package/src/ConsoleShared/src/components/markdown-extensions/showdown-extension.scss +52 -0
  172. package/src/ConsoleShared/src/components/markdown-extensions/utils.ts +1 -0
  173. package/src/ConsoleShared/src/components/markdown-highlight-extension/MarkdownHighlightExtension.tsx +65 -0
  174. package/src/ConsoleShared/src/components/markdown-highlight-extension/highlight-consts.ts +9 -0
  175. package/src/ConsoleShared/src/components/markdown-highlight-extension/index.ts +1 -0
  176. package/src/ConsoleShared/src/components/modal/Modal.scss +3 -0
  177. package/src/ConsoleShared/src/components/modal/Modal.tsx +19 -0
  178. package/src/ConsoleShared/src/components/modal/index.ts +1 -0
  179. package/src/ConsoleShared/src/components/popper/Portal.tsx +25 -0
  180. package/src/ConsoleShared/src/components/popper/SimplePopper.tsx +92 -0
  181. package/src/ConsoleShared/src/components/popper/index.ts +2 -0
  182. package/src/ConsoleShared/src/components/spotlight/InteractiveSpotlight.tsx +58 -0
  183. package/src/ConsoleShared/src/components/spotlight/Spotlight.tsx +35 -0
  184. package/src/ConsoleShared/src/components/spotlight/StaticSpotlight.tsx +32 -0
  185. package/src/ConsoleShared/src/components/spotlight/index.ts +1 -0
  186. package/src/ConsoleShared/src/components/spotlight/spotlight.scss +63 -0
  187. package/src/ConsoleShared/src/components/status/GenericStatus.tsx +34 -0
  188. package/src/ConsoleShared/src/components/status/NotStartedIcon.tsx +27 -0
  189. package/src/ConsoleShared/src/components/status/PopoverStatus.tsx +39 -0
  190. package/src/ConsoleShared/src/components/status/Status.tsx +38 -0
  191. package/src/ConsoleShared/src/components/status/StatusIconAndText.tsx +42 -0
  192. package/src/ConsoleShared/src/components/status/icons.tsx +39 -0
  193. package/src/ConsoleShared/src/components/status/index.tsx +1 -0
  194. package/src/ConsoleShared/src/components/status/statuses.tsx +20 -0
  195. package/src/ConsoleShared/src/components/status/types.ts +8 -0
  196. package/src/ConsoleShared/src/components/utils/FallbackImg.tsx +20 -0
  197. package/src/ConsoleShared/src/components/utils/index.ts +1 -0
  198. package/src/ConsoleShared/src/constants/index.ts +1 -0
  199. package/src/ConsoleShared/src/constants/ui.ts +1 -0
  200. package/src/ConsoleShared/src/hooks/index.ts +6 -0
  201. package/src/ConsoleShared/src/hooks/scroll.ts +52 -0
  202. package/src/ConsoleShared/src/hooks/useBoundingClientRect.ts +18 -0
  203. package/src/ConsoleShared/src/hooks/useEventListener.ts +14 -0
  204. package/src/ConsoleShared/src/hooks/useForceRender.ts +6 -0
  205. package/src/ConsoleShared/src/hooks/useResizeObserver.ts +19 -0
  206. package/src/ConsoleShared/src/hooks/useScrollShadows.ts +45 -0
  207. package/src/ConsoleShared/src/index.ts +4 -0
  208. package/src/ConsoleShared/src/utils/index.ts +1 -0
  209. package/src/ConsoleShared/src/utils/useCombineRefs.ts +16 -0
  210. package/src/HelpTopicDrawer.tsx +116 -0
  211. package/src/HelpTopicPanelContent.tsx +160 -0
  212. package/src/QuickStartCatalogPage.tsx +195 -0
  213. package/src/QuickStartCloseModal.tsx +47 -0
  214. package/src/QuickStartController.tsx +111 -0
  215. package/src/QuickStartDrawer.scss +11 -0
  216. package/src/QuickStartDrawer.tsx +265 -0
  217. package/src/QuickStartMarkdownView.tsx +80 -0
  218. package/src/QuickStartPanelContent.scss +46 -0
  219. package/src/QuickStartPanelContent.tsx +165 -0
  220. package/src/__tests__/quick-start-utils.spec.tsx +16 -0
  221. package/src/catalog/Catalog/QuickStartCatalogHeader.tsx +18 -0
  222. package/src/catalog/Catalog/QuickStartCatalogSection.tsx +9 -0
  223. package/src/catalog/Catalog/QuickStartCatalogToolbar.tsx +12 -0
  224. package/src/catalog/Catalog/index.ts +3 -0
  225. package/src/catalog/QuickStartCatalog.scss +8 -0
  226. package/src/catalog/QuickStartCatalog.tsx +42 -0
  227. package/src/catalog/QuickStartTile.scss +11 -0
  228. package/src/catalog/QuickStartTile.tsx +129 -0
  229. package/src/catalog/QuickStartTileDescription.scss +29 -0
  230. package/src/catalog/QuickStartTileDescription.tsx +79 -0
  231. package/src/catalog/QuickStartTileFooter.tsx +101 -0
  232. package/src/catalog/QuickStartTileFooterExternal.tsx +40 -0
  233. package/src/catalog/QuickStartTileHeader.scss +16 -0
  234. package/src/catalog/QuickStartTileHeader.tsx +105 -0
  235. package/src/catalog/Toolbar/QuickStartCatalogFilter.scss +25 -0
  236. package/src/catalog/Toolbar/QuickStartCatalogFilter.tsx +32 -0
  237. package/src/catalog/Toolbar/QuickStartCatalogFilterItems.tsx +218 -0
  238. package/src/catalog/__tests__/QuickStartCatalog.spec.tsx +35 -0
  239. package/src/catalog/__tests__/QuickStartTile.spec.tsx +38 -0
  240. package/src/catalog/__tests__/QuickStartTileDescription.spec.tsx +44 -0
  241. package/src/catalog/index.ts +9 -0
  242. package/src/controller/QuickStartConclusion.tsx +63 -0
  243. package/src/controller/QuickStartContent.scss +12 -0
  244. package/src/controller/QuickStartContent.tsx +72 -0
  245. package/src/controller/QuickStartFooter.scss +13 -0
  246. package/src/controller/QuickStartFooter.tsx +124 -0
  247. package/src/controller/QuickStartIntroduction.scss +35 -0
  248. package/src/controller/QuickStartIntroduction.tsx +64 -0
  249. package/src/controller/QuickStartTaskHeader.scss +58 -0
  250. package/src/controller/QuickStartTaskHeader.tsx +125 -0
  251. package/src/controller/QuickStartTaskHeaderList.scss +17 -0
  252. package/src/controller/QuickStartTaskHeaderList.tsx +33 -0
  253. package/src/controller/QuickStartTaskReview.scss +30 -0
  254. package/src/controller/QuickStartTaskReview.tsx +81 -0
  255. package/src/controller/QuickStartTasks.scss +89 -0
  256. package/src/controller/QuickStartTasks.tsx +75 -0
  257. package/src/controller/__tests__/QuickStartConclusion.spec.tsx +95 -0
  258. package/src/controller/__tests__/QuickStartContent.spec.tsx +52 -0
  259. package/src/controller/__tests__/QuickStartFooter.spec.tsx +148 -0
  260. package/src/controller/__tests__/QuickStartTaskHeader.spec.tsx +43 -0
  261. package/src/controller/__tests__/QuickStartTaskReview.spec.tsx +45 -0
  262. package/src/controller/__tests__/QuickStartTasks.spec.tsx +81 -0
  263. package/src/data/mocks/json/explore-pipeline-quickstart.ts +66 -0
  264. package/src/data/mocks/json/explore-serverless-quickstart.ts +90 -0
  265. package/src/data/mocks/json/monitor-sampleapp-quickstart.ts +77 -0
  266. package/src/data/mocks/json/tour-icons.ts +3 -0
  267. package/src/data/mocks/yamls/add-healthchecks-quickstart.yaml +67 -0
  268. package/src/data/mocks/yamls/explore-pipeline-quickstart.yaml +57 -0
  269. package/src/data/mocks/yamls/explore-serverless-quickstart.yaml +83 -0
  270. package/src/data/mocks/yamls/install-associate-pipeline-quickstart.yaml +74 -0
  271. package/src/data/mocks/yamls/monitor-sampleapp-quickstart.yaml +66 -0
  272. package/src/data/mocks/yamls/sample-application-quickstart.yaml +97 -0
  273. package/src/data/mocks/yamls/serverless-application-quickstart.yaml +141 -0
  274. package/src/data/quick-start-test-data.ts +10 -0
  275. package/src/data/test-utils.ts +11 -0
  276. package/src/declaration.d.ts +2 -0
  277. package/src/index.ts +17 -0
  278. package/src/locales/en/quickstart.json +46 -0
  279. package/src/styles/_base.scss +54 -0
  280. package/src/styles/_dark-custom-override.scss +62 -0
  281. package/src/styles/legacy-bootstrap/README.md +21 -0
  282. package/src/styles/legacy-bootstrap/_code.scss +46 -0
  283. package/src/styles/legacy-bootstrap/_tables.scss +38 -0
  284. package/src/styles/legacy-bootstrap/_type.scss +92 -0
  285. package/src/styles/legacy-bootstrap/_variables.scss +48 -0
  286. package/src/styles/legacy-bootstrap.scss +5 -0
  287. package/src/styles/patternfly-global-entry.ts +1 -0
  288. package/src/styles/patternfly-global.scss +28 -0
  289. package/src/styles/patternfly-nested-entry.ts +1 -0
  290. package/src/styles/patternfly-nested.scss +18 -0
  291. package/src/styles/quickstarts-standalone-entry.ts +1 -0
  292. package/src/styles/quickstarts-standalone.scss +7 -0
  293. package/src/styles/style.scss +12 -0
  294. package/src/styles/vendor-entry.ts +1 -0
  295. package/src/styles/vendor.scss +7 -0
  296. package/src/utils/PluralResolver.ts +362 -0
  297. package/src/utils/asciidoc-procedure-parser.ts +130 -0
  298. package/src/utils/const.ts +10 -0
  299. package/src/utils/help-topic-context.tsx +72 -0
  300. package/src/utils/help-topic-types.ts +16 -0
  301. package/src/utils/quick-start-context.tsx +473 -0
  302. package/src/utils/quick-start-types.ts +73 -0
  303. package/src/utils/quick-start-utils.ts +88 -0
  304. package/src/utils/useLocalStorage.ts +38 -0
@@ -0,0 +1,52 @@
1
+ .pfext-markdown-view {
2
+ .pfext-code-block__pre {
3
+ /* override the styles applied by showdown while parsing <pre /> */
4
+ display: flex;
5
+ border: none;
6
+ border-radius: none;
7
+ background-color: transparent;
8
+ margin: 0;
9
+ padding: 0;
10
+ }
11
+
12
+ .pfext-markdown-execute-snippet {
13
+
14
+ &__button {
15
+ & > i.fa-check {
16
+ display: none;
17
+ }
18
+
19
+ & > i.fa-play {
20
+ display: inline;
21
+ }
22
+
23
+ &[data-executed] {
24
+ & > i.fa-check {
25
+ display: inline;
26
+ }
27
+
28
+ & > i.fa-play {
29
+ display: none;
30
+ }
31
+ }
32
+ }
33
+ }
34
+
35
+ .pfext-markdown-admonition {
36
+ &.pf-v5-c-alert {
37
+ // add margins to match design
38
+ margin: var(--pf-v5-global--spacer--md) 0;
39
+ .pf-v5-c-alert__title {
40
+ // remove margins from markdown css
41
+ margin-top: 0;
42
+ margin-bottom: 0;
43
+ // lift PF style specificity to override markdown css
44
+ font-weight: var(--pf-v5-c-alert__title--FontWeight);
45
+ font-family: inherit;
46
+ line-height: inherit;
47
+ color: var(--pf-v5-c-alert__title--Color);
48
+ word-break: break-word;
49
+ }
50
+ }
51
+ }
52
+ }
@@ -0,0 +1 @@
1
+ export const removeTemplateWhitespace = (template: string): string => template.replace(/>(?:\s|\n)+</g, '><');
@@ -0,0 +1,65 @@
1
+ import * as React from 'react';
2
+ import { Spotlight } from '../spotlight';
3
+
4
+ interface MarkdownHighlightExtensionProps {
5
+ docContext: Document;
6
+ rootSelector: string;
7
+ }
8
+ const MarkdownHighlightExtension: React.FC<MarkdownHighlightExtensionProps> = ({
9
+ docContext,
10
+ rootSelector,
11
+ }) => {
12
+ const [selector, setSelector] = React.useState<string>(null);
13
+ React.useEffect(() => {
14
+ const elements = docContext.querySelectorAll(`${rootSelector} [data-highlight]`);
15
+ let timeoutId: NodeJS.Timeout;
16
+ function startHighlight(e) {
17
+ const highlightId = e.target.getAttribute('data-highlight');
18
+ if (!highlightId) {
19
+ return;
20
+ }
21
+ setSelector(null);
22
+ timeoutId = setTimeout(() => {
23
+ setSelector(`[data-quickstart-id="${highlightId}"]`);
24
+ }, 0);
25
+ }
26
+ elements && elements.forEach((elm) => elm.addEventListener('click', startHighlight));
27
+ return () => {
28
+ clearTimeout(timeoutId);
29
+ elements && elements.forEach((elm) => elm.removeEventListener('click', startHighlight));
30
+ };
31
+ }, [docContext, rootSelector]);
32
+ React.useEffect(() => {
33
+ const elements = docContext.querySelectorAll(`${rootSelector} [class^=data-highlight__]`);
34
+ let timeoutId: NodeJS.Timeout;
35
+ function startHighlight(e) {
36
+ e.preventDefault();
37
+ const classes = e.target.getAttribute('class').split(' ');
38
+ let highlightId;
39
+
40
+ for (const className of classes) {
41
+ if (className.startsWith('data-highlight__')) {
42
+ highlightId = className.split('__')[1];
43
+ break;
44
+ }
45
+ }
46
+ if (!highlightId) {
47
+ return;
48
+ }
49
+ setSelector(null);
50
+ timeoutId = setTimeout(() => {
51
+ setSelector(`[data-quickstart-id="${highlightId}"]`);
52
+ }, 0);
53
+ }
54
+ elements && elements.forEach((elm) => elm.addEventListener('click', startHighlight));
55
+ return () => {
56
+ clearTimeout(timeoutId);
57
+ elements && elements.forEach((elm) => elm.removeEventListener('click', startHighlight));
58
+ };
59
+ }, [docContext, rootSelector]);
60
+ if (!selector) {
61
+ return null;
62
+ }
63
+ return <Spotlight selector={selector} interactive />;
64
+ };
65
+ export default MarkdownHighlightExtension;
@@ -0,0 +1,9 @@
1
+ export const LINK_LABEL = '[\\d\\w\\s-()$!]+';
2
+ export const HIGHLIGHT_ACTIONS = ['highlight'];
3
+ export const SELECTOR_ID = `[\\w-]+`;
4
+
5
+ // [linkLabel]{{action id}}
6
+ export const HIGHLIGHT_REGEXP = new RegExp(
7
+ `\\[(${LINK_LABEL})]{{(${HIGHLIGHT_ACTIONS.join('|')}) (${SELECTOR_ID})}}`,
8
+ 'g',
9
+ );
@@ -0,0 +1 @@
1
+ export { default as MarkdownHighlightExtension } from './MarkdownHighlightExtension';
@@ -0,0 +1,3 @@
1
+ .pfext-modal {
2
+ position: absolute !important;
3
+ }
@@ -0,0 +1,19 @@
1
+ import './Modal.scss';
2
+ import * as React from 'react';
3
+ import { Modal as PfModal, ModalProps as PfModalProps } from '@patternfly/react-core';
4
+ import { css } from '@patternfly/react-styles';
5
+
6
+ type ModalProps = {
7
+ isFullScreen?: boolean;
8
+ ref?: React.LegacyRef<PfModal>;
9
+ } & PfModalProps;
10
+
11
+ const Modal: React.FC<ModalProps> = ({ isFullScreen = false, className, ...props }) => (
12
+ <PfModal
13
+ {...props}
14
+ className={css('pfext-modal', className)}
15
+ appendTo={() => (isFullScreen ? document.body : document.querySelector('#modal-container'))}
16
+ />
17
+ );
18
+
19
+ export default Modal;
@@ -0,0 +1 @@
1
+ export { default as Modal } from './Modal';
@@ -0,0 +1,25 @@
1
+ import { useIsomorphicLayoutEffect } from '@patternfly/react-core';
2
+ import * as React from 'react';
3
+ import * as ReactDOM from 'react-dom';
4
+
5
+ type GetContainer = Element | null | undefined | (() => Element);
6
+
7
+ interface PortalProps {
8
+ children: React.ReactNode;
9
+ container?: GetContainer;
10
+ }
11
+
12
+ const getContainer = (container: GetContainer): Element | null | undefined =>
13
+ typeof container === 'function' ? container() : container;
14
+
15
+ const Portal = ({ children, container }: PortalProps) => {
16
+ const [containerNode, setContainerNode] = React.useState<Element>();
17
+
18
+ useIsomorphicLayoutEffect(() => {
19
+ setContainerNode(getContainer(container) || document.body);
20
+ }, [container]);
21
+
22
+ return containerNode ? ReactDOM.createPortal(children, containerNode) : null;
23
+ };
24
+
25
+ export default Portal;
@@ -0,0 +1,92 @@
1
+ import * as React from 'react';
2
+ import Portal from './Portal';
3
+
4
+ interface SimplePopperProps {
5
+ children: React.ReactNode;
6
+ }
7
+
8
+ const SimplePopper = ({ children }: SimplePopperProps) => {
9
+ const openProp = true;
10
+ const nodeRef = React.useRef<Element>();
11
+ const popperRef = React.useRef(null);
12
+ const [isOpen, setOpenState] = React.useState(openProp);
13
+
14
+ const setOpen = React.useCallback((newOpen: boolean) => {
15
+ setOpenState(newOpen);
16
+ }, []);
17
+
18
+ React.useEffect(() => {
19
+ setOpen(openProp);
20
+ }, [openProp, setOpen]);
21
+
22
+ const onKeyDown = React.useCallback(
23
+ (e: KeyboardEvent) => {
24
+ if (e.keyCode === 27) {
25
+ setOpen(false);
26
+ }
27
+ },
28
+ [setOpen],
29
+ );
30
+
31
+ const onClickOutside = React.useCallback(
32
+ (e: MouseEvent) => {
33
+ if (!nodeRef.current || (e.target instanceof Node && !nodeRef.current.contains(e.target))) {
34
+ setOpen(false);
35
+ }
36
+ },
37
+ [setOpen],
38
+ );
39
+
40
+ const destroy = React.useCallback(() => {
41
+ if (popperRef.current) {
42
+ popperRef.current.destroy();
43
+ document.removeEventListener('keydown', onKeyDown, true);
44
+ document.removeEventListener('mousedown', onClickOutside, true);
45
+ document.removeEventListener('touchstart', onClickOutside, true);
46
+ }
47
+ }, [onClickOutside, onKeyDown]);
48
+
49
+ const initialize = React.useCallback(() => {
50
+ if (!nodeRef.current || !isOpen) {
51
+ return;
52
+ }
53
+
54
+ destroy();
55
+ }, [isOpen, destroy]);
56
+
57
+ const nodeRefCallback = React.useCallback(
58
+ (node) => {
59
+ nodeRef.current = node;
60
+ initialize();
61
+ },
62
+ [initialize],
63
+ );
64
+
65
+ React.useEffect(() => {
66
+ initialize();
67
+ }, [initialize]);
68
+
69
+ React.useEffect(() => () => {
70
+ destroy();
71
+ }, [destroy]);
72
+
73
+ React.useEffect(() => {
74
+ if (!isOpen) {
75
+ destroy();
76
+ }
77
+ }, [destroy, isOpen]);
78
+
79
+ return isOpen ? (
80
+ <Portal>
81
+ <div
82
+ ref={nodeRefCallback}
83
+ style={{ zIndex: 9999, position: 'absolute', top: 0, left: 0 }}
84
+ className="pfext-quick-start__base"
85
+ >
86
+ {children}
87
+ </div>
88
+ </Portal>
89
+ ) : null;
90
+ };
91
+
92
+ export default SimplePopper;
@@ -0,0 +1,2 @@
1
+ export { default as SimplePopper } from './SimplePopper';
2
+ export { default as Portal } from './Portal';
@@ -0,0 +1,58 @@
1
+ import './spotlight.scss';
2
+ import * as React from 'react';
3
+ import { Portal, SimplePopper } from '../popper';
4
+
5
+ interface InteractiveSpotlightProps {
6
+ element: Element;
7
+ }
8
+
9
+ const isInViewport = (elementToCheck: Element) => {
10
+ const rect = elementToCheck.getBoundingClientRect();
11
+ return (
12
+ rect.top >= 0 &&
13
+ rect.left >= 0 &&
14
+ rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
15
+ rect.right <= (window.innerWidth || document.documentElement.clientWidth)
16
+ );
17
+ };
18
+
19
+ const InteractiveSpotlight: React.FC<InteractiveSpotlightProps> = ({ element }) => {
20
+ const { top, bottom, left, right, height, width } = element.getBoundingClientRect();
21
+ const style: React.CSSProperties = {
22
+ height,
23
+ width,
24
+ top,
25
+ left,
26
+ bottom,
27
+ right,
28
+ };
29
+ const [clicked, setClicked] = React.useState(false);
30
+
31
+ React.useEffect(() => {
32
+ if (!clicked) {
33
+ if (!isInViewport(element)) {
34
+ element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });
35
+ }
36
+ const handleClick = () => setClicked(true);
37
+ document.addEventListener('click', handleClick);
38
+ return () => {
39
+ document.removeEventListener('click', handleClick);
40
+ };
41
+ }
42
+ return () => {};
43
+ }, [element, clicked]);
44
+
45
+ if (clicked) {
46
+ return null;
47
+ }
48
+
49
+ return (
50
+ <Portal>
51
+ <SimplePopper>
52
+ <div className="pfext-spotlight pfext-spotlight__element-highlight-animate" style={style} />
53
+ </SimplePopper>
54
+ </Portal>
55
+ );
56
+ };
57
+
58
+ export default InteractiveSpotlight;
@@ -0,0 +1,35 @@
1
+ import * as React from 'react';
2
+ import InteractiveSpotlight from './InteractiveSpotlight';
3
+ import StaticSpotlight from './StaticSpotlight';
4
+
5
+ interface SpotlightProps {
6
+ selector: string;
7
+ interactive?: boolean;
8
+ }
9
+
10
+ const Spotlight: React.FC<SpotlightProps> = ({ selector, interactive }) => {
11
+ // if target element is a hidden one return null
12
+ const element = React.useMemo(() => {
13
+ const highlightElement = document.querySelector(selector);
14
+ let hiddenElement = highlightElement;
15
+ while (hiddenElement) {
16
+ const ariaHidden = hiddenElement.getAttribute('aria-hidden');
17
+ if (ariaHidden === 'true') {
18
+ return null;
19
+ }
20
+ hiddenElement = hiddenElement.parentElement;
21
+ }
22
+ return highlightElement;
23
+ }, [selector]);
24
+
25
+ if (!element) {
26
+ return null;
27
+ }
28
+ return interactive ? (
29
+ <InteractiveSpotlight element={element} />
30
+ ) : (
31
+ <StaticSpotlight element={element} />
32
+ );
33
+ };
34
+
35
+ export default Spotlight;
@@ -0,0 +1,32 @@
1
+ import './spotlight.scss';
2
+ import * as React from 'react';
3
+ import { useBoundingClientRect } from '../../hooks';
4
+ import Portal from '../popper/Portal';
5
+
6
+ interface StaticSpotlightProps {
7
+ element: Element;
8
+ }
9
+
10
+ const StaticSpotlight: React.FC<StaticSpotlightProps> = ({ element }) => {
11
+ const clientRect = useBoundingClientRect(element as HTMLElement);
12
+ const style: React.CSSProperties = clientRect
13
+ ? {
14
+ top: clientRect.top,
15
+ left: clientRect.left,
16
+ height: clientRect.height,
17
+ width: clientRect.width,
18
+ }
19
+ : {};
20
+ return clientRect ? (
21
+ <Portal>
22
+ <div className="pf-v5-c-backdrop pfext-spotlight__with-backdrop">
23
+ <div
24
+ className="pfext-spotlight pfext-spotlight__element-highlight-noanimate"
25
+ style={style}
26
+ />
27
+ </div>
28
+ </Portal>
29
+ ) : null;
30
+ };
31
+
32
+ export default StaticSpotlight;
@@ -0,0 +1 @@
1
+ export { default as Spotlight } from './Spotlight';
@@ -0,0 +1,63 @@
1
+ @keyframes pfext-spotlight-expand {
2
+ 0% {
3
+ outline-offset: -4px;
4
+ outline-width: 4px;
5
+ opacity: 1;
6
+ }
7
+ 100% {
8
+ outline-offset: 21px;
9
+ outline-width: 12px;
10
+ opacity: 0;
11
+ }
12
+ }
13
+
14
+ @keyframes pfext-spotlight-fade-in {
15
+ 0% {
16
+ opacity: 0;
17
+ }
18
+ 100% {
19
+ opacity: 1;
20
+ }
21
+ }
22
+
23
+ @keyframes pfext-spotlight-fade-out {
24
+ 0% {
25
+ opacity: 1;
26
+ }
27
+ 100% {
28
+ opacity: 0;
29
+ }
30
+ }
31
+
32
+ .pfext-spotlight {
33
+ pointer-events: none;
34
+ position: absolute;
35
+ &__with-backdrop {
36
+ mix-blend-mode: hard-light;
37
+ }
38
+ &__element-highlight-noanimate {
39
+ border: var(--pf-v5-global--BorderWidth--xl) solid var(--pf-v5-global--palette--blue-200);
40
+ background-color: var(--pf-v5-global--palette--black-500);
41
+ z-index: 9999;
42
+ }
43
+ &__element-highlight-animate {
44
+ pointer-events: none;
45
+ position: absolute;
46
+ box-shadow: inset 0px 0px 0px 4px var(--pf-v5-global--palette--blue-200);
47
+ opacity: 0;
48
+ animation: 0.4s pfext-spotlight-fade-in 0s ease-in-out, 5s pfext-spotlight-fade-out 12.8s ease-in-out;
49
+ animation-fill-mode: forwards;
50
+ &::after {
51
+ content: '';
52
+ position: absolute;
53
+ left: 0;
54
+ right: 0;
55
+ top: 0;
56
+ bottom: 0;
57
+ animation: 1.2s pfext-spotlight-expand 1.6s ease-out;
58
+ animation-fill-mode: forwards;
59
+ outline: 4px solid var(--pf-v5-global--palette--blue-200);
60
+ outline-offset: -4px;
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,34 @@
1
+ import * as React from 'react';
2
+ import PopoverStatus from './PopoverStatus';
3
+ import StatusIconAndText from './StatusIconAndText';
4
+ import { StatusComponentProps } from './types';
5
+
6
+ const GenericStatus: React.FC<GenericStatusProps> = (props) => {
7
+ const { Icon, children, popoverTitle, title, noTooltip, iconOnly, ...restProps } = props;
8
+ const renderIcon = iconOnly && !noTooltip ? <Icon title={title} /> : <Icon />;
9
+ const statusBody = (
10
+ <StatusIconAndText
11
+ {...restProps}
12
+ noTooltip={noTooltip}
13
+ title={title}
14
+ iconOnly={iconOnly}
15
+ icon={renderIcon}
16
+ />
17
+ );
18
+ return React.Children.toArray(children).length ? (
19
+ <PopoverStatus title={popoverTitle || title} {...restProps} statusBody={statusBody}>
20
+ {children}
21
+ </PopoverStatus>
22
+ ) : (
23
+ statusBody
24
+ );
25
+ };
26
+
27
+ type GenericStatusProps = StatusComponentProps & {
28
+ Icon: React.ComponentType<{ title?: string }>;
29
+ children?: React.ReactNode;
30
+ popoverTitle?: string;
31
+ noTooltip?: boolean;
32
+ };
33
+
34
+ export default GenericStatus;
@@ -0,0 +1,27 @@
1
+ // TODO: Pull from Patternfly when they add it
2
+ // https://github.com/patternfly/patternfly-design/issues/921#issuecomment-726183814
3
+ import * as React from 'react';
4
+
5
+ export default (props) => (
6
+ <svg
7
+ width="12px"
8
+ height="13px"
9
+ {...props}
10
+ viewBox="0 0 12 13"
11
+ version="1.1"
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ xmlnsXlink="http://www.w3.org/1999/xlink"
14
+ >
15
+ <g id="icon_notstarted" stroke="none" strokeWidth="1" fill="none" fillRule="evenodd">
16
+ <path
17
+ d="M5.99998569,12.3124969 C7.04685832,12.3124969 8.01560589,12.0507786 8.90622877,11.5273425 C9.79685164,11.0039064 10.5038813,10.2968767 11.0273175,9.4062538 C11.5507536,8.51563092 11.8124718,7.54688335 11.8124718,6.50001073 C11.8124718,5.45313811 11.5507536,4.48439053 11.0273175,3.59376766 C10.5038813,2.70314478 9.79685164,1.9961151 8.90622877,1.47267896 C8.01560589,0.949242832 7.04685832,0.687524587 5.99998569,0.687524587 C4.95311307,0.687524587 3.9843655,0.949242832 3.09374262,1.47267896 C2.20311975,1.9961151 1.49609006,2.70314478 0.972653931,3.59376766 C0.449217798,4.48439053 0.187499553,5.45313811 0.187499553,6.50001073 C0.187499553,7.54688335 0.449217798,8.51563092 0.972653931,9.4062538 C1.49609006,10.2968767 2.20311975,11.0039064 3.09374262,11.5273425 C3.9843655,12.0507786 4.95311307,12.3124969 5.99998569,12.3124969 Z M5.99998569,11.1874996 C5.15623771,11.1874996 4.37498969,10.9765626 3.65624128,10.5546886 C2.93749288,10.1328146 2.36718186,9.56250355 1.94530786,8.84375514 C1.52343387,8.12500674 1.31249687,7.34375872 1.31249687,6.50001073 C1.31249687,5.65626274 1.52343387,4.87501472 1.94530786,4.15626632 C2.36718186,3.43751791 2.93749288,2.86720689 3.65624128,2.4453329 C4.37498969,2.0234589 5.15623771,1.8125219 5.99998569,1.8125219 C6.84373368,1.8125219 7.6249817,2.0234589 8.34373011,2.4453329 C9.06247851,2.86720689 9.63278953,3.43751791 10.0546635,4.15626632 C10.4765375,4.87501472 10.6874745,5.65626274 10.6874745,6.50001073 C10.6874745,7.34375872 10.4765375,8.12500674 10.0546635,8.84375514 C9.63278953,9.56250355 9.06247851,10.1328146 8.34373011,10.5546886 C7.6249817,10.9765626 6.84373368,11.1874996 5.99998569,11.1874996 Z"
18
+ id="Circle"
19
+ fill="#6A6E73"
20
+ fillRule="nonzero"
21
+ />
22
+ <circle id="Oval" fill="#6A6E73" cx="3" cy="6.5" r="1" />
23
+ <circle id="Oval-Copy-2" fill="#6A6E73" cx="6" cy="6.5" r="1" />
24
+ <circle id="Oval-Copy-3" fill="#6A6E73" cx="9" cy="6.5" r="1" />
25
+ </g>
26
+ </svg>
27
+ );
@@ -0,0 +1,39 @@
1
+ import * as React from 'react';
2
+ import { Button, Popover, PopoverPosition } from '@patternfly/react-core';
3
+
4
+ const PopoverStatus: React.FC<PopoverStatusProps> = ({
5
+ hideHeader,
6
+ children,
7
+ isVisible = null,
8
+ statusBody,
9
+ title,
10
+ onHide,
11
+ onShow,
12
+ }) => (
13
+ <Popover
14
+ position={PopoverPosition.right}
15
+ headerContent={hideHeader ? null : title}
16
+ bodyContent={children}
17
+ aria-label={title}
18
+ onHide={onHide}
19
+ onShow={onShow}
20
+ isVisible={isVisible}
21
+ >
22
+ <Button variant="link" isInline>
23
+ {statusBody}
24
+ </Button>
25
+ </Popover>
26
+ );
27
+
28
+ interface PopoverStatusProps {
29
+ children: React.ReactNode;
30
+ statusBody: React.ReactNode;
31
+ onHide?: (event: MouseEvent | KeyboardEvent) => void;
32
+ onShow?: (event: MouseEvent | KeyboardEvent) => void;
33
+ title?: string;
34
+ hideHeader?: boolean;
35
+ isVisible?: boolean;
36
+ shouldClose?: (hideFunction: any) => void;
37
+ }
38
+
39
+ export default PopoverStatus;
@@ -0,0 +1,38 @@
1
+ import * as React from 'react';
2
+ import SyncAltIcon from '@patternfly/react-icons/dist/js/icons/sync-alt-icon';
3
+ import { DASH } from '../../constants';
4
+ import { SuccessStatus } from './statuses';
5
+ import StatusIconAndText from './StatusIconAndText';
6
+ import { StatusComponentProps } from './types';
7
+
8
+ export const Status: React.FC<StatusProps> = ({
9
+ status,
10
+ title,
11
+ iconOnly,
12
+ noTooltip,
13
+ className,
14
+ }) => {
15
+ const statusProps = { title: title || status, iconOnly, noTooltip, className };
16
+ switch (status) {
17
+ case 'In Progress':
18
+ return <StatusIconAndText {...statusProps} icon={<SyncAltIcon />} />;
19
+
20
+ case 'Complete':
21
+ return <SuccessStatus {...statusProps} />;
22
+
23
+ default:
24
+ return <>{status || DASH}</>;
25
+ }
26
+ };
27
+
28
+ export const StatusIcon: React.FC<StatusIconProps> = ({ status }) => (
29
+ <Status status={status} iconOnly />
30
+ );
31
+
32
+ interface StatusIconProps {
33
+ status: string;
34
+ }
35
+
36
+ type StatusProps = StatusComponentProps & {
37
+ status: string;
38
+ };
@@ -0,0 +1,42 @@
1
+ import * as React from 'react';
2
+ import { css } from '@patternfly/react-styles';
3
+ import { CamelCaseWrap } from '@console/internal/components/utils';
4
+ import { DASH } from '../../constants';
5
+ import { StatusComponentProps } from './types';
6
+
7
+ type StatusIconAndTextProps = StatusComponentProps & {
8
+ icon?: React.ReactElement;
9
+ spin?: boolean;
10
+ };
11
+
12
+ const StatusIconAndText: React.FC<StatusIconAndTextProps> = ({
13
+ icon,
14
+ title,
15
+ spin,
16
+ iconOnly,
17
+ noTooltip,
18
+ className,
19
+ }) => {
20
+ if (!title) {
21
+ return <>{DASH}</>;
22
+ }
23
+
24
+ return (
25
+ <span
26
+ className={css('pfext-icon-and-text', className)}
27
+ title={iconOnly && !noTooltip ? title : undefined}
28
+ >
29
+ {icon &&
30
+ React.cloneElement(icon, {
31
+ className: css(
32
+ spin && 'fa-spin',
33
+ icon.props.className,
34
+ !iconOnly && 'pfext-icon-and-text__icon pfext-icon-flex-child',
35
+ ),
36
+ })}
37
+ {!iconOnly && <CamelCaseWrap value={title} dataTest="status-text" />}
38
+ </span>
39
+ );
40
+ };
41
+
42
+ export default StatusIconAndText;