@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,392 @@
1
+ @use 'sass:math';
2
+
3
+ // frontend/public/style/_vars.scss
4
+ $font-size-base: 14px;
5
+ $pfext-m-catalog-tile-height: 100%;
6
+ $pfext-m-catalog-tile-width: 260px;
7
+
8
+ $catalog-capability-level-icon-left: -20px;
9
+ $catalog-capability-level-icon-top: 4px;
10
+ $catalog-capability-level-inactive-color: var(--pf-v5-global--Color--400);
11
+ $catalog-item-icon-size-lg: 40px;
12
+ $catalog-item-icon-size-sm: 24px;
13
+ $pfext-modal-ignore-warning-icon-width: 30px;
14
+ $catalog-tile-width: $pfext-m-catalog-tile-width;
15
+
16
+ // reset font size back to 13px since console h5 font size is 14px
17
+ .catalog-item-header-pf-subtitle {
18
+ font-size: 13px;
19
+ }
20
+
21
+ .catalog-tile-pf-body .catalog-tile-pf-subtitle {
22
+ font-size: ($font-size-base - 1);
23
+ }
24
+
25
+ .pfext-catalog {
26
+ display: flex;
27
+ flex-direction: column;
28
+ min-height: 100%;
29
+ min-width: 515px; // in order to accommodate filters and tiles at mobile
30
+ }
31
+
32
+ .pfext-catalog-tile-view {
33
+ display: flex;
34
+ flex-wrap: wrap;
35
+ --pf-v5-l-gallery--GridTemplateColumns: repeat(auto-fill, 260px) !important;
36
+ }
37
+
38
+ .pfext-catalog__body {
39
+ min-width: 575px; // Minimum shrinkable width of .pfext-catalog child elements => 15 + ((220 + 15) + (30 + 250 + 30)) + 15
40
+ @media (min-width: $screen-sm-min) {
41
+ min-width: 590px; // Left margin 30 instead of 15
42
+ }
43
+ }
44
+
45
+ .pfext-catalog-item-details {
46
+ display: flex;
47
+ margin: 0 0 10px;
48
+
49
+ &__description {
50
+ white-space: pre-wrap;
51
+ }
52
+
53
+ &__kind-label {
54
+ font-weight: var(--pf-v5-global--FontWeight--bold);
55
+ }
56
+
57
+ &__name {
58
+ margin-bottom: 10px;
59
+ }
60
+
61
+ &__provider,
62
+ &__tags {
63
+ margin-bottom: 5px;
64
+ }
65
+
66
+ &__tag {
67
+ color: $color-pf-black-600;
68
+ font-size: ($font-size-base - 1);
69
+ margin-right: 5px;
70
+ text-transform: uppercase;
71
+ }
72
+ }
73
+
74
+ .pfext-catalog-item-icon {
75
+ padding-right: 10px;
76
+
77
+ &__icon {
78
+ font-size: $catalog-item-icon-size-sm;
79
+
80
+ &--large {
81
+ font-size: $catalog-item-icon-size-lg;
82
+ }
83
+ }
84
+
85
+ &__img {
86
+ max-height: $catalog-item-icon-size-sm;
87
+ max-width: $catalog-item-icon-size-sm;
88
+
89
+ &[src$='.svg'] {
90
+ width: $catalog-item-icon-size-sm;
91
+ }
92
+
93
+ &--large {
94
+ max-height: $catalog-item-icon-size-lg;
95
+ max-width: $catalog-item-icon-size-lg;
96
+
97
+ &[src$='.svg'] {
98
+ width: $catalog-item-icon-size-lg;
99
+ }
100
+ }
101
+ }
102
+ }
103
+
104
+ .pfext-catalog-page {
105
+ background: $color-pf-white;
106
+ border: 1px solid var(--pf-v5-global--BorderColor--300);
107
+ display: flex;
108
+ flex: 1;
109
+ padding-top: math.div($grid-gutter-width, 2);
110
+
111
+ &--with-sidebar {
112
+ margin: 0 math.div($grid-gutter-width, 2);
113
+ padding-bottom: math.div($grid-gutter-width, 2);
114
+ }
115
+
116
+ &__btn-group__group-by {
117
+ display: inline;
118
+ margin-left: var(--pf-v5-global--spacer--md);
119
+ }
120
+
121
+ &__content {
122
+ flex: 1 1 auto;
123
+ overflow: hidden;
124
+ }
125
+
126
+ &__description {
127
+ margin-top: -10px;
128
+ padding: 0 math.div($grid-gutter-width, 2) 10px;
129
+ @media (min-width: $grid-float-breakpoint) {
130
+ padding-left: $grid-gutter-width;
131
+ padding-right: $grid-gutter-width;
132
+ }
133
+ }
134
+
135
+ &__filter {
136
+ display: flex;
137
+ justify-content: space-between;
138
+ }
139
+
140
+ &__filter-toggle {
141
+ margin-top: 5px;
142
+ }
143
+
144
+ &__grid {
145
+ background-color: $color-pf-black-150;
146
+ }
147
+
148
+ &__grouped-items {
149
+ margin-bottom: var(--pf-v5-global--spacer--md);
150
+ }
151
+
152
+ &__group-title {
153
+ margin-bottom: var(--pf-v5-global--spacer--sm);
154
+ }
155
+
156
+ &__header {
157
+ margin: 0 $grid-gutter-width 0 0;
158
+ }
159
+
160
+ &__heading {
161
+ font-size: 16px;
162
+ margin: 0 0 20px 30px;
163
+ }
164
+
165
+ &__hint {
166
+ margin: 0 0 var(--pf-v5-global--spacer--md) 0;
167
+ }
168
+
169
+ &__input {
170
+ display: inline-flex !important;
171
+ margin: 0 0 20px 30px;
172
+ width: auto !important;
173
+ }
174
+
175
+ &__sort {
176
+ display: inline;
177
+ margin-left: var(--pf-v5-global--spacer--md);
178
+ }
179
+
180
+ &__num-items {
181
+ font-weight: var(--pf-v5-global--FontWeight--bold);
182
+ padding: 0 0 20px;
183
+ }
184
+
185
+ &__info-icon {
186
+ vertical-align: middle;
187
+ color: #6a6e73;
188
+ &:hover {
189
+ color: #151515;
190
+ }
191
+ }
192
+
193
+ // Enable scrolling on the modal
194
+ &__overlay {
195
+ border: 0 !important; // Collapse default PF4 modal border-width
196
+
197
+ .modal-body .pfext-hint-block {
198
+ margin-bottom: 10px;
199
+ }
200
+
201
+ .properties-side-panel-pf {
202
+ flex: 0 0 auto;
203
+ }
204
+ }
205
+
206
+ &__overlay--right {
207
+ bottom: 0;
208
+ padding: 0 !important;
209
+ right: 0;
210
+ top: 4.75rem; // --pf-v5-c-page__header--MinHeight
211
+
212
+ .pf-v5-c-modal-box__body {
213
+ // Required to position scroll shadows correctly on Chrome
214
+ display: flex;
215
+ flex-direction: column;
216
+ margin: 0 !important;
217
+ padding: 0;
218
+ }
219
+
220
+ .modal-body-inner-shadow-covers {
221
+ padding-left: 0 !important;
222
+ padding-right: 0 !important;
223
+ }
224
+
225
+ h1 {
226
+ white-space: normal;
227
+ }
228
+ }
229
+
230
+ &__overlay-action {
231
+ align-items: baseline;
232
+ display: inline-flex !important;
233
+ margin: var(--pf-v5-global--spacer--sm) var(--pf-v5-global--spacer--sm) 0 0;
234
+ overflow-x: hidden;
235
+ }
236
+
237
+ &__overlay-action-icon {
238
+ flex-shrink: 0;
239
+ font-size: $font-size-base;
240
+ margin-left: 6px;
241
+ }
242
+
243
+ &__overlay-action-label {
244
+ overflow-x: hidden;
245
+ text-overflow: ellipsis;
246
+ }
247
+
248
+ &__overlay-actions {
249
+ display: flex;
250
+ flex-wrap: wrap;
251
+ margin-bottom: var(--pf-v5-global--spacer--md);
252
+ white-space: normal;
253
+ }
254
+
255
+ &__overlay-header {
256
+ margin-bottom: var(--pf-v5-global--spacer--md);
257
+ }
258
+
259
+ &__overlay-body {
260
+ margin: 0;
261
+ padding-left: var(--pf-v5-global--spacer--lg);
262
+ padding-right: var(--pf-v5-global--spacer--lg);
263
+ padding-top: var(--pf-v5-global--spacer--md);
264
+ @media (min-width: $screen-sm-min) {
265
+ display: flex;
266
+ }
267
+ }
268
+
269
+ &__overlay-description {
270
+ margin: 20px 0 0;
271
+ white-space: pre-wrap;
272
+ // TODO: find fix for urls that don't wrap
273
+ // fix below causes undesirable wrapping on non-urls
274
+ // word-break: break-all;
275
+ h1,
276
+ h2,
277
+ h3 {
278
+ color: #333; // same color as styles hardcoded in markdown text component
279
+ }
280
+
281
+ h2 {
282
+ font-size: 20px;
283
+ }
284
+
285
+ p,
286
+ li,
287
+ ol {
288
+ color: #333; // same color as styles hardcoded in markdown text component
289
+ font-size: $font-size-base !important;
290
+ }
291
+
292
+ @media (min-width: $screen-sm-min) {
293
+ flex: 1 1 auto;
294
+ margin-left: 20px;
295
+ margin-top: 0;
296
+ }
297
+ }
298
+
299
+ &__tabs {
300
+ flex: 0 0 220px;
301
+ margin: 0 math.div($grid-gutter-width, 2) 0 0;
302
+ }
303
+ }
304
+
305
+ @media screen and (min-width: $screen-sm) {
306
+ .pf-v5-c-modal-box.pfext-catalog-page__overlay {
307
+ width: 600px;
308
+ }
309
+ }
310
+
311
+ @media screen and (min-width: $screen-md) {
312
+ .pf-v5-c-modal-box.pfext-catalog-page__overlay {
313
+ width: 900px;
314
+ }
315
+ }
316
+
317
+ .pfext-catalog-tab__empty {
318
+ color: $color-pf-black-600;
319
+ }
320
+
321
+ .pfext-modal-ignore-warning {
322
+ height: initial;
323
+
324
+ &__checkbox.checkbox {
325
+ margin-bottom: 0;
326
+ padding-top: 15px;
327
+ }
328
+ &__content {
329
+ display: flex;
330
+ }
331
+ &__icon {
332
+ font-size: $pfext-modal-ignore-warning-icon-width;
333
+ margin-right: 15px;
334
+ // Avoid the dialog shifting when the icon loads.
335
+ min-width: $pfext-modal-ignore-warning-icon-width;
336
+ }
337
+ &__link {
338
+ display: block;
339
+ margin: 10px 0;
340
+ }
341
+ }
342
+
343
+ .properties-side-panel-pf-property-label {
344
+ font-size: ($font-size-base - 1);
345
+ }
346
+
347
+ .properties-side-panel-pf-property-value__capability-level {
348
+ color: $catalog-capability-level-inactive-color;
349
+ margin-bottom: 5px;
350
+ position: relative;
351
+
352
+ &--active {
353
+ color: inherit;
354
+
355
+ &::before {
356
+ display: none; // hide empty circle since icon is present
357
+ }
358
+ }
359
+
360
+ &::before {
361
+ // empty circle
362
+ border: 1px solid $catalog-capability-level-inactive-color;
363
+ border-radius: 10px;
364
+ content: '';
365
+ height: 14px;
366
+ left: $catalog-capability-level-icon-left;
367
+ position: absolute;
368
+ top: $catalog-capability-level-icon-top;
369
+ width: 14px;
370
+ }
371
+
372
+ &:not(:last-child)::after {
373
+ // pipe after circle
374
+ background: $catalog-capability-level-inactive-color;
375
+ content: '';
376
+ height: 6px;
377
+ left: -13px;
378
+ position: absolute;
379
+ top: 21px;
380
+ width: 1px;
381
+ }
382
+ }
383
+
384
+ .properties-side-panel-pf-property-value__capability-level-icon {
385
+ left: $catalog-capability-level-icon-left;
386
+ position: absolute;
387
+ top: $catalog-capability-level-icon-top;
388
+ }
389
+
390
+ .properties-side-panel-pf-property-value__capability-levels {
391
+ list-style: none;
392
+ }
@@ -0,0 +1,276 @@
1
+ import * as React from 'react';
2
+ import { css } from '@patternfly/react-styles';
3
+ import { Converter } from 'showdown';
4
+ import { useForceRender } from '@console/shared';
5
+ import { QuickStartContext, QuickStartContextValues } from '../../utils/quick-start-context';
6
+ import './_markdown-view.scss';
7
+
8
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
9
+ const DOMPurify = require('dompurify');
10
+
11
+ // const tableTags = ['table', 'thead', 'tbody', 'tr', 'th', 'td'];
12
+
13
+ interface ShowdownExtension {
14
+ type: string;
15
+ regex?: RegExp;
16
+ replace?: (...args: any[]) => string;
17
+ }
18
+
19
+ export const markdownConvert = (markdown, extensions?: ShowdownExtension[]) => {
20
+ const converter = new Converter({
21
+ tables: true,
22
+ openLinksInNewWindow: true,
23
+ strikethrough: true,
24
+ emoji: false,
25
+ });
26
+
27
+ if (extensions) {
28
+ converter.addExtension(extensions);
29
+ }
30
+
31
+ DOMPurify.addHook('beforeSanitizeElements', function (node) {
32
+ // nodeType 1 = element type
33
+
34
+ // transform anchor tags
35
+ if (node.nodeType === 1 && node.nodeName.toLowerCase() === 'a') {
36
+ node.setAttribute('rel', 'noopener noreferrer');
37
+ return node;
38
+ }
39
+
40
+ // add PF class to ul and ol lists
41
+ if (
42
+ node.nodeType === 1 &&
43
+ (node.nodeName.toLowerCase() === 'ul' || node.nodeName.toLowerCase() === 'ol')
44
+ ) {
45
+ node.setAttribute('class', 'pf-v5-c-list');
46
+ return node;
47
+ }
48
+ });
49
+
50
+ // Add a hook to make all links open a new window
51
+ DOMPurify.addHook('afterSanitizeAttributes', function (node) {
52
+ // set all elements owning target to target=_blank
53
+ if ('target' in node) {
54
+ node.setAttribute('target', '_blank');
55
+ }
56
+ // set non-HTML/MathML links to xlink:show=new
57
+ if (
58
+ !node.hasAttribute('target') &&
59
+ (node.hasAttribute('xlink:href') || node.hasAttribute('href'))
60
+ ) {
61
+ node.setAttribute('xlink:show', 'new');
62
+ }
63
+ });
64
+
65
+ return DOMPurify.sanitize(converter.makeHtml(markdown), {
66
+ USE_PROFILES: {
67
+ html: true,
68
+ svg: true,
69
+ },
70
+ });
71
+ };
72
+
73
+ interface SyncMarkdownProps {
74
+ content?: string;
75
+ emptyMsg?: string;
76
+ exactHeight?: boolean;
77
+ extensions?: ShowdownExtension[];
78
+ renderExtension?: (contentDocument: Document, rootSelector: string) => React.ReactNode;
79
+ inline?: boolean;
80
+ className?: string;
81
+ }
82
+
83
+ type InnerSyncMarkdownProps = Pick<SyncMarkdownProps, 'renderExtension' | 'exactHeight'> & {
84
+ markup: string;
85
+ isEmpty: boolean;
86
+ className?: string;
87
+ };
88
+
89
+ export const SyncMarkdownView: React.FC<SyncMarkdownProps> = ({
90
+ content,
91
+ emptyMsg,
92
+ extensions,
93
+ renderExtension,
94
+ exactHeight,
95
+ inline,
96
+ className,
97
+ }) => {
98
+ const { getResource } = React.useContext<QuickStartContextValues>(QuickStartContext);
99
+ const markup = React.useMemo(
100
+ () => markdownConvert(content || emptyMsg || getResource('Not available'), extensions),
101
+ [content, emptyMsg, extensions, getResource],
102
+ );
103
+ const innerProps: InnerSyncMarkdownProps = {
104
+ renderExtension: extensions?.length > 0 ? renderExtension : undefined,
105
+ exactHeight,
106
+ markup,
107
+ isEmpty: !content,
108
+ className,
109
+ };
110
+ return inline ? <InlineMarkdownView {...innerProps} /> : <IFrameMarkdownView {...innerProps} />;
111
+ };
112
+
113
+ const uniqueId = (function () {
114
+ let num = 0;
115
+ return function (prefix) {
116
+ const prefixStr = String(prefix) || '';
117
+ num += 1;
118
+ return prefixStr + num;
119
+ };
120
+ })();
121
+
122
+ interface RenderExtensionProps {
123
+ renderExtension: (contentDocument: Document, rootSelector: string) => React.ReactNode;
124
+ selector: string;
125
+ markup: string;
126
+ docContext?: Document;
127
+ }
128
+
129
+ const RenderExtension: React.FC<RenderExtensionProps> = ({
130
+ renderExtension,
131
+ selector,
132
+ markup,
133
+ docContext,
134
+ }) => {
135
+ const forceRender = useForceRender();
136
+ const markupRef = React.useRef<string>(null);
137
+ const shouldRenderExtension = React.useCallback(() => {
138
+ if (markupRef.current === markup) {
139
+ return true;
140
+ }
141
+ markupRef.current = markup;
142
+ return false;
143
+ }, [markup]);
144
+ /**
145
+ * During a render cycle in which markup changes, renderExtension receives an old copy of document
146
+ * because react is still updating the dom using `dangerouslySetInnerHTML` with latest markdown markup
147
+ * which causes the component rendered by renderExtension to receive old copy of document
148
+ * use forceRender to delay the rendering of extension by one render cycle
149
+ */
150
+ React.useEffect(() => {
151
+ if (renderExtension) {
152
+ forceRender();
153
+ }
154
+ // eslint-disable-next-line react-hooks/exhaustive-deps
155
+ }, [markup]);
156
+ return (
157
+ <>{shouldRenderExtension() ? renderExtension?.(docContext ?? document, selector) : null}</>
158
+ );
159
+ };
160
+
161
+ const InlineMarkdownView: React.FC<InnerSyncMarkdownProps> = ({
162
+ markup,
163
+ isEmpty,
164
+ renderExtension,
165
+ className,
166
+ }) => {
167
+ const id = React.useMemo(() => uniqueId('markdown'), []);
168
+ return (
169
+ <div className={css('pfext-markdown-view', { 'is-empty': isEmpty }, className)} id={id}>
170
+ <div dangerouslySetInnerHTML={{ __html: markup }} />
171
+ {renderExtension && (
172
+ <RenderExtension renderExtension={renderExtension} selector={`#${id}`} markup={markup} />
173
+ )}
174
+ </div>
175
+ );
176
+ };
177
+
178
+ const IFrameMarkdownView: React.FC<InnerSyncMarkdownProps> = ({
179
+ exactHeight,
180
+ markup,
181
+ isEmpty,
182
+ renderExtension,
183
+ className,
184
+ }) => {
185
+ const [frame, setFrame] = React.useState<HTMLIFrameElement>();
186
+ const [loaded, setLoaded] = React.useState(false);
187
+ const updateTimeoutHandle = React.useRef<NodeJS.Timeout>();
188
+
189
+ const updateDimensions = React.useCallback(() => {
190
+ if (!frame?.contentWindow?.document.body.firstChild) {
191
+ return;
192
+ }
193
+ frame.style.height = `${frame.contentWindow.document.body.firstElementChild.scrollHeight}px`;
194
+
195
+ // Let the new height take effect, then reset again once we recompute
196
+ updateTimeoutHandle.current = setTimeout(() => {
197
+ if (exactHeight) {
198
+ frame.style.height = `${frame.contentWindow.document.body.firstElementChild.scrollHeight}px`;
199
+ } else {
200
+ // Increase by 15px for the case where a horizontal scrollbar might appear
201
+ frame.style.height = `${
202
+ frame.contentWindow.document.body.firstElementChild.scrollHeight + 15
203
+ }px`;
204
+ }
205
+ });
206
+ }, [frame, exactHeight]);
207
+
208
+ React.useEffect(
209
+ () => () => {
210
+ clearTimeout(updateTimeoutHandle.current);
211
+ },
212
+ [],
213
+ );
214
+
215
+ const onLoad = React.useCallback(() => {
216
+ updateDimensions();
217
+ setLoaded(true);
218
+ }, [updateDimensions]);
219
+
220
+ // Find the app's stylesheets and inject them into the frame to ensure consistent styling.
221
+ const filteredLinks = Array.from(document.getElementsByTagName('link')).filter((l) =>
222
+ l.href.includes('app-bundle'),
223
+ );
224
+
225
+ const linkRefs = filteredLinks.reduce(
226
+ (refs, link) => `${refs}
227
+ <link rel="stylesheet" href="${link.href}">`,
228
+ '',
229
+ );
230
+
231
+ const contents = `
232
+ ${linkRefs}
233
+ <style type="text/css">
234
+ body {
235
+ background-color: transparent !important;
236
+ color: ${isEmpty ? '#999' : '#333'};
237
+ font-family: var(--pf-v5-global--FontFamily--sans-serif);
238
+ min-width: auto !important;
239
+ }
240
+ table {
241
+ display: block;
242
+ margin-bottom: 11.5px;
243
+ overflow-x: auto;
244
+ }
245
+ td,
246
+ th {
247
+ border-bottom: 1px solid #ededed;
248
+ padding: 10px;
249
+ vertical-align: top;
250
+ }
251
+ th {
252
+ padding-top: 0;
253
+ }
254
+ </style>
255
+ <body class="pf-m-redhat-font"><div style="overflow-y: auto;">${markup}</div></body>`;
256
+ return (
257
+ <>
258
+ <iframe
259
+ sandbox="allow-popups allow-popups-to-escape-sandbox allow-same-origin"
260
+ srcDoc={contents}
261
+ style={{ border: '0px', display: 'block', width: '100%', height: '0' }}
262
+ ref={(r) => setFrame(r)}
263
+ onLoad={() => onLoad()}
264
+ className={className}
265
+ />
266
+ {loaded && frame && renderExtension && (
267
+ <RenderExtension
268
+ markup={markup}
269
+ selector={''}
270
+ renderExtension={renderExtension}
271
+ docContext={frame.contentDocument}
272
+ />
273
+ )}
274
+ </>
275
+ );
276
+ };
@@ -0,0 +1,58 @@
1
+ .pfext-status-box {
2
+ padding: 40px 20px;
3
+
4
+ &__loading-message {
5
+ margin-top: var(--pf-v5-global--spacer--sm);
6
+ }
7
+ }
8
+
9
+ .pfext-status-box--loading {
10
+ align-items: center;
11
+ display: flex;
12
+ height: 100%;
13
+ justify-content: center;
14
+ min-height: 50px;
15
+ width: 100%;
16
+ flex-direction: column;
17
+ }
18
+
19
+ .pfext-m-loader {
20
+ min-width: 18px;
21
+ }
22
+
23
+ .pfext-m-loader-dot__one,
24
+ .pfext-m-loader-dot__two,
25
+ .pfext-m-loader-dot__three {
26
+ animation-delay: 0;
27
+ animation-direction: normal;
28
+ animation-duration: 1s;
29
+ animation-fill-mode: forwards;
30
+ animation-iteration-count: infinite;
31
+ animation-name: bouncedelay;
32
+ animation-play-state: running;
33
+ animation-timing-function: ease-in-out;
34
+ background: #419eda;
35
+ border-radius: 100%;
36
+ display: inline-block;
37
+ height: 6px;
38
+ width: 6px;
39
+ }
40
+
41
+ .pfext-m-loader-dot__one {
42
+ animation-delay: -0.32s;
43
+ }
44
+
45
+ .pfext-m-loader-dot__two {
46
+ animation-delay: -0.16s;
47
+ }
48
+
49
+ @keyframes bouncedelay {
50
+ 0%,
51
+ 80%,
52
+ 100% {
53
+ transform: scale(0.25, 0.25);
54
+ }
55
+ 40% {
56
+ transform: scale(1, 1);
57
+ }
58
+ }