@patternfly/documentation-framework 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 (115) hide show
  1. package/CHANGELOG.md +3964 -0
  2. package/README.md +92 -0
  3. package/app.js +118 -0
  4. package/assets/android-chrome-36x36.png +0 -0
  5. package/assets/android-chrome-48x48.png +0 -0
  6. package/assets/android-chrome-96x96.png +0 -0
  7. package/assets/favicon-16x16.png +0 -0
  8. package/assets/favicon-32x32.png +0 -0
  9. package/assets/favicon-48x48.png +0 -0
  10. package/assets/favicon.ico +0 -0
  11. package/assets/manifest.json +29 -0
  12. package/components/autoLinkHeader/autoLinkHeader.css +22 -0
  13. package/components/autoLinkHeader/autoLinkHeader.js +41 -0
  14. package/components/cssVariables/cssSearch.js +32 -0
  15. package/components/cssVariables/cssVariables.css +15 -0
  16. package/components/cssVariables/cssVariables.js +233 -0
  17. package/components/example/example.css +106 -0
  18. package/components/example/example.js +196 -0
  19. package/components/example/exampleToolbar.js +208 -0
  20. package/components/example/missing-thumbnail.jpg +0 -0
  21. package/components/footer/RHLogo.png +0 -0
  22. package/components/footer/footer.css +114 -0
  23. package/components/footer/footer.js +262 -0
  24. package/components/gdprBanner/gdprBanner.css +14 -0
  25. package/components/gdprBanner/gdprBanner.js +31 -0
  26. package/components/index.js +12 -0
  27. package/components/inlineAlert/inlineAlert.js +19 -0
  28. package/components/link/link.js +68 -0
  29. package/components/propsTable/propTypeWithLinks.js +33 -0
  30. package/components/propsTable/propsTable.js +82 -0
  31. package/components/sideNav/sideNav.css +17 -0
  32. package/components/sideNav/sideNav.js +95 -0
  33. package/components/tableOfContents/tableOfContents.css +77 -0
  34. package/components/tableOfContents/tableOfContents.js +89 -0
  35. package/components/topNav/topNav.css +30 -0
  36. package/components/topNav/topNav.js +24 -0
  37. package/global.css +7 -0
  38. package/helpers/asyncComponentFactory.js +41 -0
  39. package/helpers/capitalize.js +7 -0
  40. package/helpers/codeTitleTransformer.js +40 -0
  41. package/helpers/codesandbox.js +204 -0
  42. package/helpers/copy.js +19 -0
  43. package/helpers/createHandlebars.js +26 -0
  44. package/helpers/d3-timer.js +7 -0
  45. package/helpers/extractExampleHelpers.js +24 -0
  46. package/helpers/fonts.js +164 -0
  47. package/helpers/getId.js +6 -0
  48. package/helpers/getTitle.js +5 -0
  49. package/helpers/index.js +9 -0
  50. package/helpers/liveCodeTypes.js +4 -0
  51. package/helpers/slugger.js +35 -0
  52. package/helpers/trackEvent.js +17 -0
  53. package/helpers/xterm-addon-fit.js +3 -0
  54. package/helpers/xterm.js +8 -0
  55. package/images/patternfly-logo.svg +14 -0
  56. package/images/patternfly-orb.svg +28 -0
  57. package/layouts/index.js +1 -0
  58. package/layouts/logo.svg +33 -0
  59. package/layouts/sideNavLayout/sideNavLayout.css +104 -0
  60. package/layouts/sideNavLayout/sideNavLayout.js +237 -0
  61. package/package.json +87 -0
  62. package/pages/404/404.css +16 -0
  63. package/pages/404/404.svg +26 -0
  64. package/pages/404/chart.svg +24 -0
  65. package/pages/404/components.svg +1 -0
  66. package/pages/404/guidelines.svg +1 -0
  67. package/pages/404/index.js +136 -0
  68. package/pages/404/patternfly-flat.svg +1 -0
  69. package/pages/global-css-variables.md +108 -0
  70. package/pages/img/component-variable-mapping.png +0 -0
  71. package/pages/red-hat-font.md +40 -0
  72. package/routes-client.js +1 -0
  73. package/routes-generated.js +1 -0
  74. package/routes.js +155 -0
  75. package/scripts/cli/build.js +95 -0
  76. package/scripts/cli/buildClient.js +23 -0
  77. package/scripts/cli/buildServer.js +24 -0
  78. package/scripts/cli/cli.js +63 -0
  79. package/scripts/cli/generate.js +23 -0
  80. package/scripts/cli/helpers.js +9 -0
  81. package/scripts/cli/init.js +68 -0
  82. package/scripts/cli/serve.js +13 -0
  83. package/scripts/cli/start.js +32 -0
  84. package/scripts/md/anchor-header.js +69 -0
  85. package/scripts/md/auto-link-url.js +33 -0
  86. package/scripts/md/example-captions.js +67 -0
  87. package/scripts/md/jsxAttributes.js +20 -0
  88. package/scripts/md/mdx-ast-to-mdx-hast.js +210 -0
  89. package/scripts/md/mdx-hast-to-jsx.js +233 -0
  90. package/scripts/md/parseMD.js +308 -0
  91. package/scripts/md/remove-comments.js +21 -0
  92. package/scripts/md/styled-tags.js +87 -0
  93. package/scripts/md/typecheck.js +133 -0
  94. package/scripts/tsDocgen.js +155 -0
  95. package/scripts/webpack/getHtmlWebpackPlugins.js +78 -0
  96. package/scripts/webpack/prerender.js +59 -0
  97. package/scripts/webpack/webpack.base.config.js +159 -0
  98. package/scripts/webpack/webpack.client.config.js +146 -0
  99. package/scripts/webpack/webpack.server.config.js +55 -0
  100. package/scripts/writeScreenshots.js +66 -0
  101. package/templates/design-guidelines.js +13 -0
  102. package/templates/html.ejs +52 -0
  103. package/templates/mdx.css +308 -0
  104. package/templates/mdx.js +185 -0
  105. package/templates/patternfly-docs/content/extensions/extension/design-guidelines/design-guidelines.md +25 -0
  106. package/templates/patternfly-docs/content/extensions/extension/design-guidelines/img/card-elements.png +0 -0
  107. package/templates/patternfly-docs/content/extensions/extension/examples/Basic.jsx +4 -0
  108. package/templates/patternfly-docs/content/extensions/extension/examples/basic.md +25 -0
  109. package/templates/patternfly-docs/pages/index.js +27 -0
  110. package/templates/patternfly-docs/patternfly-docs.config.js +6 -0
  111. package/templates/patternfly-docs/patternfly-docs.css.js +8 -0
  112. package/templates/patternfly-docs/patternfly-docs.routes.js +12 -0
  113. package/templates/patternfly-docs/patternfly-docs.source.js +24 -0
  114. package/templates/sitemap.ejs +10 -0
  115. package/versions.json +870 -0
@@ -0,0 +1,237 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import {
3
+ Button,
4
+ Page,
5
+ PageHeader,
6
+ PageSidebar,
7
+ PageHeaderTools,
8
+ PageHeaderToolsItem,
9
+ TextInput,
10
+ Brand,
11
+ Dropdown,
12
+ DropdownToggle,
13
+ DropdownItem,
14
+ DropdownGroup,
15
+ Divider,
16
+ Text,
17
+ TextVariants,
18
+ SkipToContent
19
+ } from '@patternfly/react-core';
20
+ import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
21
+ import ExternalLinkAltIcon from '@patternfly/react-icons/dist/esm/icons/external-link-alt-icon';
22
+ import TimesIcon from '@patternfly/react-icons/dist/esm/icons/times-icon';
23
+ import GithubIcon from '@patternfly/react-icons/dist/esm/icons/github-icon';
24
+ import { SideNav, TopNav, GdprBanner } from '../../components';
25
+ import staticVersions from '../../versions.json';
26
+ import logo from '../logo.svg';
27
+
28
+ const HeaderTools = ({
29
+ versions,
30
+ hasVersionSwitcher,
31
+ hasSearch,
32
+ pathPrefix
33
+ }) => {
34
+ const initialVersion = staticVersions.Releases.find(release => release.latest);
35
+ const [isDropdownOpen, setDropdownOpen] = useState(false);
36
+ const [isSearchExpanded, setSearchExpanded] = useState(false);
37
+ const latestVersion = versions.Releases.find(version => version.latest);
38
+ const getDropdownItem = version => (
39
+ <DropdownItem
40
+ key={version.name}
41
+ component={
42
+ <a href={version.latest ? '/v4' : `/${version.name}`}>
43
+ {`Release ${version.name}`}
44
+ </a>
45
+ }
46
+ />
47
+ );
48
+ const searchRef = React.useRef();
49
+
50
+ useEffect(() => {
51
+ const handleSearchHotkeys = (event) => {
52
+ const tagName = event.target.tagName.toLowerCase();
53
+ const isContentEditable = event.target.contentEditable === 'true';
54
+ if (
55
+ (event.code === 'Slash' || event.code === 'KeyS') &&
56
+ tagName !== 'input' &&
57
+ tagName !== 'textarea' &&
58
+ !isContentEditable
59
+ ) {
60
+ setSearchExpanded(true);
61
+ setTimeout(() => searchRef.current && searchRef.current.focus(), 0);
62
+ } else if (event.code === 'Escape' && event.target === searchRef.current) {
63
+ setSearchExpanded(false);
64
+ }
65
+ };
66
+ window.addEventListener('keyup', handleSearchHotkeys);
67
+ return () => window.removeEventListener('keyup', handleSearchHotkeys);
68
+ }, []);
69
+
70
+ return (
71
+ <PageHeaderTools>
72
+ {hasSearch && (
73
+ <PageHeaderToolsItem id="ws-global-search-wrapper" className={isSearchExpanded ? '' : 'ws-hide-search-input'}>
74
+ <TextInput id="ws-global-search" ref={searchRef} placeholder="Search" />
75
+ {isSearchExpanded && <SearchIcon className="global-search-icon" />}
76
+ </PageHeaderToolsItem>
77
+ )}
78
+ {hasSearch && (
79
+ <Button
80
+ aria-label={`${isSearchExpanded ? 'Collapse' : 'Expand'} search input`}
81
+ variant="plain"
82
+ className="ws-toggle-search"
83
+ onClick={() => {
84
+ setSearchExpanded(!isSearchExpanded);
85
+ if (!isSearchExpanded) {
86
+ setTimeout(() => searchRef.current && searchRef.current.focus(), 0);
87
+ }
88
+ }}
89
+ >
90
+ {isSearchExpanded
91
+ ? <TimesIcon />
92
+ : <SearchIcon className="global-search-icon" />
93
+ }
94
+ </Button>
95
+ )}
96
+ <PageHeaderToolsItem>
97
+ <Button
98
+ component="a"
99
+ variant="link"
100
+ href="//github.com/patternfly"
101
+ target="top"
102
+ aria-label="Link to PatternFly GitHub page"
103
+ className="ws-github-pageheader pf-u-mr-sm"
104
+ >
105
+ <GithubIcon />
106
+ </Button>
107
+ </PageHeaderToolsItem>
108
+ {hasVersionSwitcher && (
109
+ <PageHeaderToolsItem>
110
+ <Dropdown
111
+ className="ws-org-version-switcher"
112
+ onSelect={() => setDropdownOpen(!isDropdownOpen)}
113
+ toggle={(
114
+ <DropdownToggle
115
+ className={`ws-org-version-toggle${isDropdownOpen ? '-expanded': ''}`}
116
+ onToggle={() => setDropdownOpen(!isDropdownOpen)}
117
+ >
118
+ Release {initialVersion.name}
119
+ </DropdownToggle>
120
+ )}
121
+ isOpen={isDropdownOpen}
122
+ dropdownItems={[
123
+ <DropdownGroup key="latest" label="Latest">
124
+ {getDropdownItem(latestVersion)}
125
+ </DropdownGroup>,
126
+ <DropdownGroup key="Previous" label="Previous releases">
127
+ {Object.values(versions.Releases)
128
+ .filter(version => !version.hidden && !version.latest)
129
+ .slice(0,3)
130
+ .map(getDropdownItem)}
131
+ </DropdownGroup>,
132
+ <Divider key="divider" className="ws-switcher-divider"/>,
133
+ <DropdownItem
134
+ key="PatternFly 3"
135
+ className="ws-patternfly-3"
136
+ target="_blank"
137
+ href="https://www.patternfly.org/v3"
138
+ >
139
+ PatternFly 3
140
+ <ExternalLinkAltIcon />
141
+ </DropdownItem>
142
+ ]}
143
+ />
144
+ </PageHeaderToolsItem>
145
+ )}
146
+ </PageHeaderTools>
147
+ );
148
+ }
149
+
150
+ // https://github.com/algolia/autocomplete.js#global-options
151
+ export function attachDocSearch(algolia, inputSelector, timeout) {
152
+ if (window.docsearch) {
153
+ return window.docsearch({
154
+ inputSelector,
155
+ autocompleteOptions: {
156
+ hint: false,
157
+ appendTo: `${inputSelector}-wrapper`,
158
+ },
159
+ debug: process.env.NODE_ENV !== 'production',
160
+ ...algolia
161
+ });
162
+ }
163
+ else {
164
+ setTimeout(() => attachDocSearch(algolia, inputSelector, timeout), timeout);
165
+ }
166
+ }
167
+
168
+ export const SideNavLayout = ({ children, groupedRoutes, navOpen: navOpenProp }) => {
169
+ const pathPrefix = process.env.pathPrefix;
170
+ const algolia = process.env.algolia;
171
+ const hasGdprBanner = process.env.hasGdprBanner;
172
+ const hasVersionSwitcher = process.env.hasVersionSwitcher;
173
+ const sideNavItems = process.env.sideNavItems;
174
+ const topNavItems = process.env.topNavItems;
175
+ const prnum = process.env.prnum;
176
+ const prurl = process.env.prurl;
177
+
178
+ const [versions, setVersions] = useState({ ...staticVersions });
179
+
180
+ useEffect(() => {
181
+ if (typeof window === 'undefined') {
182
+ return;
183
+ }
184
+ if (algolia) {
185
+ attachDocSearch(algolia, '#ws-global-search', 1000);
186
+ }
187
+ if (hasVersionSwitcher && window.fetch) {
188
+ fetch('/versions.json').then(res => {
189
+ if (res.ok) {
190
+ res.json().then(json => setVersions(json));
191
+ }
192
+ });
193
+ }
194
+ }, []);
195
+
196
+ const SideBar = (
197
+ <PageSidebar
198
+ className="ws-page-sidebar"
199
+ theme="light"
200
+ nav={<SideNav navItems={sideNavItems} groupedRoutes={groupedRoutes} />}
201
+ />
202
+ );
203
+
204
+ const Header = (
205
+ <PageHeader
206
+ className="ws-page-header"
207
+ headerTools={(algolia || hasVersionSwitcher) && <HeaderTools
208
+ versions={versions}
209
+ hasSearch={algolia}
210
+ hasVersionSwitcher={hasVersionSwitcher}
211
+ pathPrefix={pathPrefix} />}
212
+ logo={prnum ? `PR #${prnum}` : <Brand src={logo} alt="Patternfly Logo" />}
213
+ logoProps={{ href: prurl || pathPrefix || '/' }}
214
+ showNavToggle
215
+ topNav={topNavItems.length > 0 && <TopNav navItems={topNavItems} />}
216
+ />
217
+ );
218
+
219
+ return (
220
+ <React.Fragment>
221
+ <div id="ws-page-banners">
222
+ {hasGdprBanner && <GdprBanner />}
223
+ </div>
224
+ <Page
225
+ id="ws-page"
226
+ mainContainerId="ws-page-main"
227
+ header={Header}
228
+ sidebar={SideBar}
229
+ skipToContent={<SkipToContent href="#ws-page-main">Skip to content</SkipToContent>}
230
+ isManagedSidebar
231
+ defaultManagedSidebarIsOpen={navOpenProp}
232
+ >
233
+ {children}
234
+ </Page>
235
+ </React.Fragment>
236
+ );
237
+ }
package/package.json ADDED
@@ -0,0 +1,87 @@
1
+ {
2
+ "name": "@patternfly/documentation-framework",
3
+ "description": "A framework to build documentation for PatternFly.",
4
+ "version": "1.0.0",
5
+ "author": "Red Hat",
6
+ "license": "MIT",
7
+ "private": false,
8
+ "bin": {
9
+ "pf-docs-framework": "scripts/cli/cli.js"
10
+ },
11
+ "dependencies": {
12
+ "@babel/core": "7.18.2",
13
+ "@babel/plugin-proposal-class-properties": "7.17.12",
14
+ "@babel/plugin-proposal-private-methods": "7.17.12",
15
+ "@babel/plugin-proposal-private-property-in-object": "7.17.12",
16
+ "@babel/plugin-transform-react-jsx": "7.17.12",
17
+ "@babel/preset-env": "7.18.2",
18
+ "@mdx-js/util": "1.6.16",
19
+ "@patternfly/ast-helpers": "^0.4.57",
20
+ "@reach/router": "1.3.4",
21
+ "autoprefixer": "9.8.6",
22
+ "babel-loader": "8.2.5",
23
+ "camelcase-css": "2.0.1",
24
+ "chokidar": "3.5.3",
25
+ "clean-webpack-plugin": "3.0.0",
26
+ "codesandbox": "2.2.0",
27
+ "commander": "4.1.1",
28
+ "copy-webpack-plugin": "6.1.0",
29
+ "css-loader": "4.3.0",
30
+ "detab": "2.0.3",
31
+ "file-loader": "6.1.0",
32
+ "file-saver": "1.3.8",
33
+ "fs-extra": "9.0.1",
34
+ "hast-to-hyperscript": "9.0.0",
35
+ "hast-util-to-text": "2.0.0",
36
+ "html-formatter": "0.1.9",
37
+ "html-webpack-plugin": "4.4.1",
38
+ "js-yaml": "3.14.0",
39
+ "lodash-es": "4.17.15",
40
+ "mdast-util-to-hast": "9.1.1",
41
+ "mdurl": "1.0.1",
42
+ "mini-css-extract-plugin": "1.3.9",
43
+ "monaco-editor": "0.21.3",
44
+ "monaco-editor-webpack-plugin": "2.1.0",
45
+ "null-loader": "4.0.0",
46
+ "postcss": "7.0.32",
47
+ "postcss-loader": "4.2.0",
48
+ "puppeteer": "14.3.0",
49
+ "puppeteer-cluster": "0.23.0",
50
+ "react-docgen": "5.3.1",
51
+ "react-monaco-editor": "0.48.0",
52
+ "react-ssr-prepass": "1.2.1",
53
+ "remark-footnotes": "1.0.0",
54
+ "remark-frontmatter": "2.0.0",
55
+ "remark-mdx": "2.0.0-next.8",
56
+ "remark-mdxjs": "2.0.0-next.8",
57
+ "remark-parse": "8.0.3",
58
+ "remark-squeeze-paragraphs": "4.0.0",
59
+ "responsive-loader": "2.1.1",
60
+ "sharp": "0.30.6",
61
+ "style-to-object": "0.3.0",
62
+ "to-vfile": "6.1.0",
63
+ "typescript": "4.3.5",
64
+ "unified": "9.1.0",
65
+ "unist-util-remove": "2.0.0",
66
+ "unist-util-visit": "2.0.3",
67
+ "url-loader": "4.1.0",
68
+ "vfile-reporter": "6.0.1",
69
+ "webpack": "4.44.1",
70
+ "webpack-bundle-analyzer": "3.8.0",
71
+ "webpack-cli": "3.3.12",
72
+ "webpack-dev-server": "3.11.0",
73
+ "webpack-merge": "5.8.0",
74
+ "parse-entities": "2.0.0",
75
+ "glob": "8.0.3",
76
+ "express": "4.18.1",
77
+ "handlebars": "4.7.7"
78
+ },
79
+ "peerDependencies": {
80
+ "react": "^16.8.0 || ^17.0.0",
81
+ "react-dom": "^16.8.0 || ^17.0.0",
82
+ "@patternfly/patternfly": ">=4.185.1",
83
+ "@patternfly/react-core": ">=4.202.16",
84
+ "@patternfly/react-code-editor": ">=4.43.16",
85
+ "@patternfly/react-table": ">=4.71.16"
86
+ }
87
+ }
@@ -0,0 +1,16 @@
1
+ #ws-404-search-wrapper {
2
+ position: relative;
3
+ max-width: 400px;
4
+ margin: 0 auto;
5
+ }
6
+
7
+ .ws-404-card-header {
8
+ padding: var(--pf-global--spacer--lg);
9
+ }
10
+
11
+ div.ws-404-button-wrapper {
12
+ width: 100%;
13
+ display: flex;
14
+ justify-content: center;
15
+ padding: var(--pf-global--spacer--xl);
16
+ }
@@ -0,0 +1,26 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 23.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
+ viewBox="0 0 100 109" style="enable-background:new 0 0 100 109;" xml:space="preserve">
5
+ <style type="text/css">
6
+ .st0{fill:none;stroke:#6A6E73;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:3,5;}
7
+ .st1{fill:#FFFFFF;stroke:#6A6E73;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
8
+ .st2{fill:#6A6E73;}
9
+ </style>
10
+ <path class="st0" d="M12.5,96.5c3-33,17.4-35.8,38-24c19.1,11,36-8.1,21-27c-15.4-19.4-8-23-8-23"/>
11
+ <path class="st1" d="M13,25v50 M27.8,71.8V104 M27.8,15v47.6 M42.6,74v34 M42.6,10v54.2 M57.4,79.2V108 M57.4,32v38 M72.2,77v27
12
+ M72.2,54.8v9.5 M72.2,29v10.2 M87,25v68 M56,22.5l-40-0.2 M59.6,37.1L5,37.1 M59.6,37.1 M95,37.1l-24.1,0 M70.4,51.9L1,51.9
13
+ M70.4,51.9 M80.8,51.9 M99,51.9l-18.2,0 M18.6,66.6L1,66.6 M70.4,66.6l-21.9,0 M99,66.6l-17.9,0 M10.5,81.4H6 M95,81.4l-75,0
14
+ M84,96.2l-67,0"/>
15
+ <g>
16
+ <path class="st2" d="M81.3,15.7c-0.9,1.5-2.1,2.7-3.6,3.6c-1.5,0.9-3.2,1.3-5,1.3s-3.4-0.4-5-1.3c-1.5-0.9-2.7-2.1-3.6-3.6
17
+ c-0.9-1.5-1.3-3.2-1.3-5s0.4-3.4,1.3-5c0.9-1.5,2.1-2.7,3.6-3.6c1.5-0.9,3.2-1.3,5-1.3s3.4,0.4,5,1.3c1.5,0.9,2.7,2.1,3.6,3.6
18
+ c0.9,1.5,1.3,3.2,1.3,5S82.2,14.2,81.3,15.7z M70.3,4.8c-0.7,0.4-1.4,1-1.9,1.9c-0.1,0.1-0.1,0.2-0.1,0.3c0,0.1,0.1,0.2,0.2,0.3
19
+ l1.4,1c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2-0.1,0.3-0.2c0.4-0.5,0.8-0.9,1-1c0.4-0.3,0.8-0.4,1.3-0.4c0.5,0,0.9,0.1,1.3,0.4
20
+ c0.4,0.3,0.6,0.6,0.6,0.9c0,0.3-0.1,0.5-0.4,0.8c-0.2,0.1-0.5,0.3-0.9,0.6l-0.1,0c-0.7,0.4-1.1,0.7-1.4,1c-0.5,0.5-0.7,1.1-0.7,1.8
21
+ v0.2c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.2,0.1,0.3,0.1h2.2c0.1,0,0.2,0,0.3-0.1c0.1-0.1,0.1-0.2,0.1-0.3v0c0-0.2,0.1-0.4,0.3-0.6
22
+ c0.1-0.1,0.4-0.3,0.8-0.5c0.7-0.4,1.2-0.8,1.5-1.1c0.5-0.6,0.8-1.3,0.8-2.1c0-0.7-0.2-1.4-0.7-2.1s-1-1.1-1.8-1.5s-1.5-0.5-2.2-0.5
23
+ C72,4.2,71.1,4.4,70.3,4.8z M71.5,14.6c-0.4,0.4-0.5,0.8-0.5,1.3s0.2,0.9,0.5,1.3s0.8,0.5,1.3,0.5s0.9-0.2,1.3-0.5s0.5-0.8,0.5-1.3
24
+ s-0.2-0.9-0.5-1.3s-0.8-0.5-1.3-0.5S71.8,14.2,71.5,14.6z"/>
25
+ </g>
26
+ </svg>
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" id="a18a0346-44ce-4e9d-859c-f0e642ea2ad3"
4
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 36 36"
5
+ style="enable-background:new 0 0 36 36;" xml:space="preserve">
6
+ <style type="text/css">
7
+ .st0{fill:#0066CC;}
8
+ </style>
9
+ <g>
10
+ <path class="st0" d="M31.7,19.2c0-0.2-0.2-0.4-0.3-0.5c-0.2-0.1-0.4-0.1-0.6-0.1l-13,2.7l-13,2.7c-0.4,0.1-0.7,0.5-0.6,0.9
11
+ c0.1,0.3,0.4,0.6,0.7,0.6c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0l13-2.7l13-2.7C31.5,20,31.8,19.6,31.7,19.2
12
+ C31.7,19.2,31.7,19.2,31.7,19.2L31.7,19.2z"/>
13
+ <path class="st0" d="M7,22.5c0.4,0,0.7-0.3,0.8-0.8v-14h20.5V17c0,0.4,0.3,0.8,0.8,0.8s0.8-0.3,0.8-0.8V7c0-0.4-0.3-0.7-0.8-0.8H7
14
+ C6.5,6.3,6.2,6.6,6.2,7v14.7C6.2,22.1,6.5,22.5,7,22.5z"/>
15
+ <path class="st0" d="M17.4,9.5c-0.1,0.1-0.2,0.3-0.2,0.5v7.7c0,0.4,0.3,0.8,0.8,0.8s0.8-0.3,0.8-0.8V10c0-0.4-0.3-0.7-0.8-0.7
16
+ C17.8,9.3,17.6,9.3,17.4,9.5z"/>
17
+ <path class="st0" d="M23.4,9.5c-0.1,0.1-0.2,0.3-0.2,0.5v6.5c0,0.4,0.3,0.8,0.8,0.8s0.8-0.3,0.8-0.8V10c0-0.4-0.3-0.8-0.7-0.8
18
+ C23.8,9.2,23.6,9.3,23.4,9.5z"/>
19
+ <path class="st0" d="M11.4,9.5c-0.1,0.1-0.2,0.3-0.2,0.5v9c0,0.4,0.3,0.8,0.8,0.8s0.8-0.3,0.8-0.8v-9c0-0.4-0.3-0.7-0.8-0.7
20
+ C11.8,9.3,11.6,9.3,11.4,9.5z"/>
21
+ <path class="st0" d="M29,22.2c-0.4,0-0.7,0.3-0.8,0.8v5.2H7.7V27c0-0.4-0.3-0.8-0.8-0.8S6.2,26.6,6.2,27v2c0,0.4,0.3,0.7,0.8,0.8
22
+ h22c0.4,0,0.7-0.3,0.8-0.8v-6C29.7,22.6,29.4,22.3,29,22.2z"/>
23
+ </g>
24
+ </svg>
@@ -0,0 +1 @@
1
+ <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 378.25 378.25"><defs><style>.cls-1{fill:none;stroke:#06c;stroke-linecap:round;stroke-linejoin:round;stroke-width:16px;}</style></defs><path class="cls-1" d="M105.73,350.34l53.56-112.87a48,48,0,1,1,59.66,0l53.57,112.87"/><path class="cls-1" d="M272.52,350.34a172,172,0,1,0-166.79,0"/></svg>
@@ -0,0 +1 @@
1
+ <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 378.25 378.25"><defs><style>.cls-1,.cls-3{fill:none;stroke:#06c;stroke-linecap:round;stroke-linejoin:round;stroke-width:14.4px;}.cls-2{fill:#06c;}.cls-3{stroke-dasharray:0 29.58;}</style></defs><path class="cls-1" d="M189.12,343.92A154.86,154.86,0,0,1,44.31,244"/><polygon class="cls-2" points="185.61 370.17 185.61 317.68 211.84 343.92 185.61 370.17"/><path class="cls-1" d="M343.92,189.12a154.85,154.85,0,0,1-94.54,142.64"/><polygon class="cls-2" points="370.17 192.64 317.68 192.64 343.92 166.41 370.17 192.64"/><path class="cls-1" d="M189.12,34.32a154.86,154.86,0,0,1,142.64,94.55"/><polygon class="cls-2" points="192.64 8.08 192.64 60.56 166.41 34.32 192.64 8.08"/><path class="cls-1" d="M34.32,189.12a154.83,154.83,0,0,1,93.18-142"/><polygon class="cls-2" points="8.08 185.61 60.56 185.61 34.32 211.84 8.08 185.61"/><circle class="cls-3" cx="189.12" cy="189.12" r="61.2"/></svg>
@@ -0,0 +1,136 @@
1
+ import React, { useEffect } from 'react';
2
+ import { Link } from '@patternfly/documentation-framework/components';
3
+ import {
4
+ Button,
5
+ Card,
6
+ CardTitle,
7
+ CardBody,
8
+ CardFooter,
9
+ CardHeaderMain,
10
+ EmptyState,
11
+ EmptyStateBody,
12
+ EmptyStateIcon,
13
+ Grid,
14
+ GridItem,
15
+ PageSection,
16
+ TextInput,
17
+ Title
18
+ } from '@patternfly/react-core';
19
+ import { attachDocSearch } from '../../layouts/sideNavLayout/sideNavLayout';
20
+ import PathMissingIcon from './404.svg';
21
+ import PatternFlyIcon from './patternfly-flat.svg';
22
+ import GuidelinesIcon from './guidelines.svg';
23
+ import ComponentsIcon from './components.svg';
24
+ import ChartIcon from './chart.svg';
25
+ import './404.css';
26
+
27
+ const Card404 = ({
28
+ img,
29
+ alt,
30
+ title,
31
+ body,
32
+ link: {
33
+ text,
34
+ to
35
+ }
36
+ }) => (
37
+ <GridItem xl={3} md={6} xs={12}>
38
+ <Card style={{ height: '340px' }}>
39
+ <CardHeaderMain className="ws-404-card-header">
40
+ <img src={img} alt={alt} width="64px" />
41
+ </CardHeaderMain>
42
+ <CardTitle>
43
+ {title}
44
+ </CardTitle>
45
+ <CardBody>
46
+ {body}
47
+ </CardBody>
48
+ <CardFooter>
49
+ <Link to={to}>
50
+ {text}
51
+ </Link>
52
+ </CardFooter>
53
+ </Card>
54
+ </GridItem>
55
+ );
56
+
57
+ const Page404 = () => {
58
+ const algolia = process.env.algolia;
59
+
60
+ useEffect(() => {
61
+ if (typeof window === 'undefined') {
62
+ return;
63
+ }
64
+ if (algolia) {
65
+ attachDocSearch(algolia, '#ws-404-search', 1000);
66
+ }
67
+ });
68
+
69
+ return (
70
+ <PageSection>
71
+ <EmptyState variant="xl">
72
+ <EmptyStateIcon icon={() => <img src={PathMissingIcon} alt="Missing path" width="128px" />} />
73
+ <Title headingLevel="h1" size="2xl">
74
+ 404: That page no longer exists
75
+ </Title>
76
+ <p style={{ marginTop: 'var(--pf-global--spacer--sm)' }}>
77
+ Another page might have the information you need, so try searching PatternFly.
78
+ </p>
79
+ <EmptyStateBody>
80
+ <div id="ws-404-search-wrapper">
81
+ <TextInput id="ws-404-search" type="text" placeholder="Search PatternFly" />
82
+ </div>
83
+ </EmptyStateBody>
84
+ </EmptyState>
85
+ <Grid hasGutter>
86
+ <Card404
87
+ img={PatternFlyIcon}
88
+ alt="PatternFly icon"
89
+ title="Getting started"
90
+ body="Learn about designing and developing with PatternFly."
91
+ link={{
92
+ text: 'View getting started resources',
93
+ to: '/get-started/about'
94
+ }}
95
+ />
96
+ <Card404
97
+ img={GuidelinesIcon}
98
+ alt="Guidelines icon"
99
+ title="Guidelines"
100
+ body="Check out PatternFly's design approach to icons, colors, and more."
101
+ link={{
102
+ text: 'View guidelines',
103
+ to: '/guidelines/colors'
104
+ }}
105
+ />
106
+ <Card404
107
+ img={ComponentsIcon}
108
+ alt="Components icon"
109
+ title="Components"
110
+ body="Start creating your applications with components -- the building blocks of user interfaces."
111
+ link={{
112
+ text: 'View components',
113
+ to: '/components/about-modal'
114
+ }}
115
+ />
116
+ <Card404
117
+ img={ChartIcon}
118
+ alt="Chart icon"
119
+ title="Charts"
120
+ body="Visualize your facts and figures by designing the right charts for your data."
121
+ link={{
122
+ text: 'View charts',
123
+ to: '/charts/about'
124
+ }}
125
+ />
126
+ </Grid>
127
+ <div className="ws-404-button-wrapper">
128
+ <Button variant="primary" component={Link} to="/">
129
+ Return to home page
130
+ </Button>
131
+ </div>
132
+ </PageSection>
133
+ );
134
+ }
135
+
136
+ export default Page404;
@@ -0,0 +1 @@
1
+ <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 378.25 378.25"><defs><style>.cls-1{fill:#06c;}</style></defs><path class="cls-1" d="M135.62,282.76l-54,12.49L10.76,194.6,189.12,20.32,367.48,194.6,296.65,295l-54-12.23-53.51,75.17Zm53.5,65.49,47.4-66.76-18.35-4.33-28,41.27-30.32-41.27-18.34,4.33Zm1-39.75,23.44-34.4L189.12,37.39,164.92,274.1Zm-106-19.62,47.9-11L96.89,228.49l10.44-23.7L75,160.46,158.55,58.28,18.15,195.37Zm210,0L335.63,230l24.46-34.65L219.7,58.28l83.83,102.18-32.62,44.33,10.45,23.7L246.2,277.67Zm-53.76-12.49L275,227.73l-7.64-17.59-45.87,61.92Zm-102.18,0,18.6-4.33-45.6-61.92-7.65,17.59Zm81.29-10.95L264.29,204,196.51,49.88Zm-60.65,0L181.73,49.88,114,204Zm-48.66-66.76L179.19,42,82.11,160.71Zm158.23,0,28-38.22L199.32,42Z"/></svg>
@@ -0,0 +1,108 @@
1
+ ---
2
+ id: Global CSS variables
3
+ section: developer-resources
4
+ ---
5
+
6
+ import { CSSVariables } from '../components/cssVariables/cssVariables';
7
+
8
+
9
+ ## About CSS variables
10
+
11
+ The CSS variable system is a two-layer theming system where global variables inform component variables.
12
+
13
+ ### Global variables
14
+
15
+ Global variables define and enforce global style elements (like values for color, spacing, and font size) across the entire system.
16
+
17
+ Global variables follow this formula:
18
+
19
+ `--pf-global--concept--PropertyCamelCase--modifier--state`
20
+
21
+ Where...
22
+
23
+ - A `concept` is something like a `spacer` or `main-title`.
24
+ - A `PropertyCamelCase` is something like `BackgroundColor` or `FontSize`.
25
+ - A `modifier` is something like `sm` or `lg`.
26
+ - A `state` is something like `hover` or `expanded`.
27
+
28
+ Example:
29
+ - Note: global variables are scoped to `:root`
30
+ ```css
31
+ :root {
32
+ /* Default & hovered link colors */
33
+ --pf-global--link--Color: #06c;
34
+ --pf-global--link--Color--hover: #004080;
35
+ }
36
+ ```
37
+
38
+ <br/>
39
+ The [full list of global CSS variables](#global-css-variables) can be found below.
40
+
41
+ ### Component variables
42
+
43
+ Component variables are used to define custom properties at the component-level. Component variables are always defined by global variables.
44
+
45
+ Component variables follow this formula:
46
+
47
+ `--pf-c-block__element--modifier--state--breakpoint--pseudo-element--PropertyCamelCase`
48
+
49
+ Where...
50
+
51
+ - `pf-c-block` refers to the block, usually the component or layout name, like `pf-c-alert`.
52
+ - `__element` refers to the element inside of the block, like `__title`.
53
+ - `modifier` is prefixed with`-m` and refers to a modifier class such as `.pf-m-danger`.
54
+ - `state` is something like `hover` or `active`.
55
+ - `breakpoint` is a media query breakpoint such as `sm` for `$pf-global--breakpoint--xs`.
56
+ - `pseudo-element` is either `before` or `after`.
57
+
58
+ Example:
59
+ - Note: component variables are scoped to the top-level component selector
60
+ ```css
61
+ .pf-c-button {
62
+ /* Default, primary, and primary hovered button background colors */
63
+ --pf-c-button--BackgroundColor: transparent;
64
+ --pf-c-button--m-primary--BackgroundColor: var(--pf-global--primary-color--100);
65
+ --pf-c-button--m-primary--hover--BackgroundColor: var(--pf-global--primary-color--200);
66
+ }
67
+ ```
68
+
69
+ <br/>
70
+ Component variables are listed at the bottom of each component page (for example, [button css variables](/components/button#css-variables)).
71
+
72
+ Note that all component variables are declared at the top component level (for example, `.pf-c-button`). The component variable table linked above also shows all usages of each variable and the values they evaluate to in each case - expand any component variable row to view the global variable it is mapped to.
73
+
74
+ ![Component variable mapping](./img/component-variable-mapping.png)
75
+
76
+ ### Breakpoint variables and class suffixes
77
+
78
+ PatternFly defines a number of standard breakpoints. These are always used as a `min-width` breakpoint; i.e. using the `-md` breakpoint would apply to everything at the `-md` width and wider. (There is one exception to this, which is in the responsive behavior of the [table component](/components/table).)
79
+
80
+ Breakpoint suffixes are used in utility classes and layouts as well as in many components as a way to apply class styles at a specified breakpoint. When available, `{-on-[breakpoint]}` will be shown as an available suffix for the class in the usage section of the documentation. The breakpoint suffix is optional and if not specified, the base class will be used. There are breakpoints for `sm`, `md`, `lg`, `xl`, and `2xl`, and the values for the corresponding breakpoints are defined below in the global variables `—pf-global—breakpoint—[breakpoint]`.
81
+
82
+ ### Using the variable system
83
+
84
+ PatternFly 4 styles provide a default starting point. You can use the variable system to make adjustments to that default styling. When you change one or more elements, you should package those values into a new SCSS stylesheet to replace the default styling.
85
+
86
+ Overrides to PatternFly variables should be made at the `:root` level for global variables or at the top-level component selector for component variables (for example, `.pf-c-button`), as these overrides will cascade down to children elements accordingly.
87
+
88
+ Example:
89
+ - Change the global primary color to red, but keep the original primary blue color as the background for primary buttons.
90
+ ```css
91
+ /* Override global primary color 100 to red */
92
+ :root {
93
+ --pf-global--primary-color--100: var(--pf-global--palette--red-400);
94
+ }
95
+
96
+ /* Override the above override for only the primary button background color */
97
+ .pf-c-button {
98
+ --pf-c-button--m-primary--BackgroundColor: var(--pf-global--palette--blue-400);
99
+ }
100
+ ```
101
+
102
+ ## Global CSS variables
103
+
104
+ <CSSVariables prefix="patternfly_variables" selector=":root" hideSelectorColumn />
105
+
106
+ ## Chart CSS variables
107
+
108
+ <CSSVariables prefix="patternfly_charts" hideSelectorColumn />