@goauthentik/docusaurus-config 1.0.1

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.
package/css/badges.css ADDED
@@ -0,0 +1,56 @@
1
+ .anchor > .badge {
2
+ font-size: 0.75rem;
3
+ vertical-align: middle;
4
+ }
5
+
6
+ .anchor > .badge {
7
+ margin-left: 0.5rem;
8
+ }
9
+
10
+ .badge {
11
+ --ifm-font-weight-bold: 900;
12
+ }
13
+
14
+ .badge--support-vendor {
15
+ --ifm-badge-background-color: var(--ifm-color-warning-contrast-background);
16
+ --ifm-badge-color: var(--ifm-color-warning-contrast-foreground);
17
+ --ifm-badge-border-color: var(--ifm-color-warning-contrast-foreground);
18
+ }
19
+
20
+ .badge--support-community {
21
+ --ifm-badge-background-color: var(
22
+ --ifm-color-secondary-contrast-foreground
23
+ );
24
+ --ifm-badge-border-color: var(--ifm-color-secondary-dark);
25
+ --ifm-badge-color: var(--ifm-color-secondary-contrast-background);
26
+ }
27
+
28
+ .badge--support-deprecated {
29
+ --ifm-badge-background-color: var(--ifm-color-danger);
30
+ --ifm-badge-border-color: var(--ifm-color-danger-contrast-background);
31
+ --ifm-badge-color: var(--ifm-color-danger-contrast-foreground);
32
+ }
33
+
34
+ .badge--support-authentik {
35
+ --ifm-badge-background-color: var(--ifm-color-primary);
36
+ --ifm-badge-border-color: var(--ifm-color-secondary);
37
+ --ifm-badge-color: var(--ifm-color-secondary);
38
+ }
39
+
40
+ .badge--version {
41
+ --ifm-badge-background-color: var(--ifm-color-primary-contrast-background);
42
+ --ifm-badge-border-color: var(--ifm-color-primary-contrast-foreground);
43
+ --ifm-badge-color: var(--ifm-color-primary-contrast-foreground);
44
+ }
45
+
46
+ .badge--preview {
47
+ --ifm-badge-background-color: rgb(115, 188, 247);
48
+ --ifm-badge-border-color: var(--ifm-badge-background-color);
49
+ --ifm-badge-color: var(--ifm-color-primary-contrast-foreground);
50
+ }
51
+
52
+ .badge-group {
53
+ display: flex;
54
+ flex-wrap: wrap;
55
+ gap: 1rem;
56
+ }
@@ -0,0 +1,21 @@
1
+ :root {
2
+ --ifm-button-color: var(--white);
3
+ }
4
+
5
+ .button-row {
6
+ gap: var(--ifm-global-spacing);
7
+ display: flex;
8
+ align-items: center;
9
+ justify-content: center;
10
+ align-items: center;
11
+ flex-wrap: wrap;
12
+ }
13
+
14
+ .button--outline {
15
+ --ifm-button-color: var(--white);
16
+ --ifm-button-border-color: var(--white);
17
+
18
+ &:hover {
19
+ --ifm-button-color: var(--ifm-color-primary);
20
+ }
21
+ }
package/css/fonts.css ADDED
@@ -0,0 +1,93 @@
1
+ :root {
2
+ --ifm-font-family-base:
3
+ RedHatVF, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell,
4
+ Noto Sans, sans-serif, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial,
5
+ sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
6
+
7
+ --ifm-font-family-monospace:
8
+ RedHatMonoVF, SFMono-Regular, Menlo, Monaco, Consolas,
9
+ "Liberation Mono", "Courier New", monospace;
10
+
11
+ --ifm-heading-font-family: RedHatDisplayVF, var(--ifm-font-family-base);
12
+
13
+ --ifm-h5-font-size: 0.88rem;
14
+ --ifm-code-font-size: 100%;
15
+ }
16
+
17
+ @font-face {
18
+ font-family: "RedHatDisplayVF";
19
+ font-style: normal;
20
+ font-weight: 300 900;
21
+ font-display: fallback;
22
+ src:
23
+ local("Red Hat Display"),
24
+ url("/fonts/RedHatFont-updated/modified/RedHatDisplayVFModified-updated.woff2")
25
+ format("woff2-variations"),
26
+ url("https://goauthentik.io/fonts/RedHatFont-updated/modified/RedHatDisplayVFModified-updated.woff2")
27
+ format("woff2-variations");
28
+ }
29
+
30
+ @font-face {
31
+ font-family: "RedHatDisplayVF";
32
+ font-style: italic;
33
+ font-weight: 300 900;
34
+ font-display: fallback;
35
+ src:
36
+ local("Red Hat Display"),
37
+ url("/fonts/RedHatFont-updated/modified/RedHatDisplayVF-updated-ItalicModified.woff2")
38
+ format("woff2-variations"),
39
+ url("https://goauthentik.io/fonts/RedHatFont-updated/modified/RedHatDisplayVF-updated-ItalicModified.woff2")
40
+ format("woff2-variations");
41
+ }
42
+
43
+ @font-face {
44
+ font-family: "RedHatTextVF";
45
+ font-style: normal;
46
+ font-weight: 400 500;
47
+ font-display: fallback;
48
+ src:
49
+ local("Red Hat Display"),
50
+ url("/fonts/RedHatFont-updated/modified/RedHatTextVFModified-updated.woff2")
51
+ format("woff2-variations"),
52
+ url("https://goauthentik.io/fonts/RedHatFont-updated/modified/RedHatTextVFModified-updated.woff2")
53
+ format("woff2-variations");
54
+ }
55
+
56
+ @font-face {
57
+ font-family: "RedHatTextVF";
58
+ font-style: italic;
59
+ font-weight: 400 500;
60
+ font-display: fallback;
61
+ src:
62
+ local("Red Hat Display"),
63
+ url("/fonts/RedHatFont-updated/modified/RedHatTextVF-updated-ItalicModified.woff2")
64
+ format("woff2-variations")
65
+ url("https://goauthentik.io/fonts/RedHatFont-updated/modified/RedHatTextVF-updated-ItalicModified.woff2")
66
+ format("woff2-variations");
67
+ }
68
+
69
+ @font-face {
70
+ font-family: "RedHatMonoVF";
71
+ font-style: normal;
72
+ font-weight: 300 700;
73
+ font-display: fallback;
74
+ src:
75
+ local("Red Hat Mono"),
76
+ url("/fonts/RedHatFont-updated/RedHatMono/RedHatMonoVF-updated.woff2")
77
+ format("woff2-variations"),
78
+ url("https://goauthentik.io/fonts/RedHatFont-updated/RedHatMono/RedHatMonoVF-updated.woff2")
79
+ format("woff2-variations");
80
+ }
81
+
82
+ @font-face {
83
+ font-family: "RedHatMonoVF";
84
+ font-style: italic;
85
+ font-weight: 300 700;
86
+ font-display: fallback;
87
+ src:
88
+ local("Red Hat Mono"),
89
+ url("/fonts/RedHatFont-updated/RedHatMono/RedHatMonoVF-updated-Italic.woff2")
90
+ format("woff2-variations"),
91
+ url("https://goauthentik.io/fonts/RedHatFont-updated/RedHatMono/RedHatMonoVF-updated-Italic.woff2")
92
+ format("woff2-variations");
93
+ }
package/css/header.css ADDED
@@ -0,0 +1,44 @@
1
+ a[data-icon] {
2
+ display: flex;
3
+ gap: 0.5em;
4
+ align-items: center;
5
+ border-radius: var(--ifm-badge-border-radius);
6
+
7
+ &:hover {
8
+ background-color: var(--ifm-hover-overlay);
9
+ }
10
+ }
11
+
12
+ a[data-icon]::before {
13
+ display: block;
14
+ content: "";
15
+ width: 1.5rem;
16
+ height: 1.5rem;
17
+ background-repeat: no-repeat;
18
+ background-position: center;
19
+ }
20
+
21
+ a[data-icon]::after {
22
+ display: block;
23
+ content: attr(aria-label);
24
+ }
25
+
26
+ @media (max-width: 1300px) {
27
+ .navbar--fixed-top .navbar__items a[data-icon]::after {
28
+ display: none;
29
+ }
30
+ }
31
+
32
+ @media (max-width: 998px) {
33
+ .navbar--fixed-top .navbar__items a[data-icon] {
34
+ display: none;
35
+ }
36
+ }
37
+
38
+ a[data-icon="github"]::before {
39
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E");
40
+ }
41
+
42
+ a[data-icon="discord"]::before {
43
+ background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20127.14%2096.36%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%23fff%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cg%20id%3D%22%E5%9B%BE%E5%B1%82_2%22%20data-name%3D%22%E5%9B%BE%E5%B1%82%202%22%3E%3Cg%20id%3D%22Discord_Logos%22%20data-name%3D%22Discord%20Logos%22%3E%3Cg%20id%3D%22Discord_Logo_-_Large_-_White%22%20data-name%3D%22Discord%20Logo%20-%20Large%20-%20White%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M107.7%2C8.07A105.15%2C105.15%2C0%2C0%2C0%2C81.47%2C0a72.06%2C72.06%2C0%2C0%2C0-3.36%2C6.83A97.68%2C97.68%2C0%2C0%2C0%2C49%2C6.83%2C72.37%2C72.37%2C0%2C0%2C0%2C45.64%2C0%2C105.89%2C105.89%2C0%2C0%2C0%2C19.39%2C8.09C2.79%2C32.65-1.71%2C56.6.54%2C80.21h0A105.73%2C105.73%2C0%2C0%2C0%2C32.71%2C96.36%2C77.7%2C77.7%2C0%2C0%2C0%2C39.6%2C85.25a68.42%2C68.42%2C0%2C0%2C1-10.85-5.18c.91-.66%2C1.8-1.34%2C2.66-2a75.57%2C75.57%2C0%2C0%2C0%2C64.32%2C0c.87.71%2C1.76%2C1.39%2C2.66%2C2a68.68%2C68.68%2C0%2C0%2C1-10.87%2C5.19%2C77%2C77%2C0%2C0%2C0%2C6.89%2C11.1A105.25%2C105.25%2C0%2C0%2C0%2C126.6%2C80.22h0C129.24%2C52.84%2C122.09%2C29.11%2C107.7%2C8.07ZM42.45%2C65.69C36.18%2C65.69%2C31%2C60%2C31%2C53s5-12.74%2C11.43-12.74S54%2C46%2C53.89%2C53%2C48.84%2C65.69%2C42.45%2C65.69Zm42.24%2C0C78.41%2C65.69%2C73.25%2C60%2C73.25%2C53s5-12.74%2C11.44-12.74S96.23%2C46%2C96.12%2C53%2C91.08%2C65.69%2C84.69%2C65.69Z%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E");
44
+ }
@@ -0,0 +1,40 @@
1
+ /* TODO: Determine just how global these styles are. */
2
+
3
+ /* The parent div centers, but the inner paragraph needs its own centering while its size changes. */
4
+ .homepage_hero__subtitle {
5
+ display: flex;
6
+ justify-content: center;
7
+ }
8
+
9
+ .homepage_hero__subtitle p {
10
+ font-size: clamp(
11
+ 1.125rem,
12
+ 0.9946rem + 0.6522vi,
13
+ 1.5rem
14
+ ); /* Adjust font as page scales */
15
+ max-width: 28ch; /* Apply a maximum to keep everything in the box */
16
+ text-wrap: balance; /* Prevent widows, orphans, and runts. Doesn't work in Safari */
17
+ }
18
+
19
+ .hero--primary {
20
+ background: radial-gradient(
21
+ at right bottom,
22
+ rgba(47, 6, 75, 1) 0%,
23
+ var(--ifm-color-primary) 50%
24
+ );
25
+ padding-bottom: 5.3rem !important;
26
+ /* fix aliasing at the edge */
27
+ -webkit-backface-visibility: hidden;
28
+ backface-visibility: hidden;
29
+ -webkit-clip-path: polygon(0 0, 100% 0, 100% 100%, 0 calc(100% - 3vw));
30
+ clip-path: polygon(0 0, 100% 0, 100% 100%, 0 calc(100% - 3vw));
31
+ }
32
+
33
+ .hero-banner {
34
+ padding: 4rem 0;
35
+ text-align: center;
36
+ position: relative;
37
+ overflow: hidden;
38
+ overflow-wrap: normal;
39
+ color: var(--white);
40
+ }
@@ -0,0 +1,36 @@
1
+ .docusaurus-mermaid-container {
2
+ /* Improve contrast. */
3
+ & .messageText {
4
+ stroke: var(--ifm-background-color) !important;
5
+ stroke-width: 4;
6
+ fill: var(--ifm-color-content) !important;
7
+ paint-order: stroke;
8
+ }
9
+ }
10
+ /* #endregion */
11
+
12
+ .markdown {
13
+ /* Remove empty table headers. */
14
+ & table > thead:has(> tr > th:empty):not(:has(> tr > th:not(:empty))) {
15
+ display: none;
16
+ }
17
+ }
18
+
19
+ .contains-task-list {
20
+ input[type="checkbox"] {
21
+ appearance: none;
22
+ }
23
+ input[type="checkbox"]::after {
24
+ content: "✓";
25
+ color: var(--ifm-color-success-dark);
26
+ display: inline-block;
27
+ }
28
+ }
29
+
30
+ /* #region Code Blocks */
31
+
32
+ .theme-code-block pre code {
33
+ font-weight: 500;
34
+ }
35
+
36
+ /* #endregion */
package/css/menu.css ADDED
@@ -0,0 +1,22 @@
1
+ :root {
2
+ --ifm-menu-link-padding-vertical: 1em;
3
+ }
4
+
5
+ .menu__list-item {
6
+ font-family: var(--ifm-heading-font-family);
7
+ font-weight: 400;
8
+ }
9
+
10
+ .navbar-sidebar__items:not(.navbar-sidebar__items--show-secondary) {
11
+ --ifm-menu-color: var(--white);
12
+ --ifm-menu-color-active: var(--white);
13
+
14
+ .menu__list-item {
15
+ font-size: var(--ifm-h3-font-size);
16
+ filter: drop-shadow(0px -1px var(--ifm-color-primary-darker));
17
+ }
18
+ }
19
+
20
+ .breadcrumbs__link {
21
+ font-weight: 400;
22
+ }
package/css/navbar.css ADDED
@@ -0,0 +1,191 @@
1
+ :root {
2
+ --ifm-navbar-item-padding-horizontal: 0.5rem;
3
+ --ifm-navbar-link-color: var(--white);
4
+ --ifm-navbar-link-hover-color: var(--white);
5
+
6
+ --ifm-navbar-link-color: var(--white);
7
+ --ifm-navbar-link-hover-color: var(--white);
8
+ }
9
+
10
+ .navbar--fixed-top {
11
+ background-color: var(--ifm-color-primary);
12
+ box-shadow: none;
13
+ }
14
+
15
+ .navbar .navbar__inner {
16
+ margin: 0 auto;
17
+ max-width: 1600px;
18
+ }
19
+
20
+ /* Nav header background color on mobile */
21
+ .navbar-sidebar__brand,
22
+ .navbar-sidebar__items {
23
+ background-color: var(--ifm-color-primary);
24
+ }
25
+
26
+ .navbar__toggle,
27
+ .navbar-sidebar__brand .clean-btn,
28
+ .navbar__items--right .clean-btn {
29
+ color: var(--white);
30
+
31
+ &:hover {
32
+ background-color: var(--ifm-hover-overlay);
33
+ }
34
+ }
35
+
36
+ .navbar-sidebar__brand .navbar-sidebar__close {
37
+ --ifm-color-emphasis-600: var(--white);
38
+ }
39
+
40
+ .navbar__item.navbar__link {
41
+ user-select: none;
42
+ }
43
+
44
+ .navbar__items:not(.navbar__items--right) {
45
+ .navbar__item.navbar__link {
46
+ margin-block-start: 0.1em;
47
+ border-radius: var(--ifm-badge-border-radius);
48
+ }
49
+
50
+ .navbar__item.navbar__link.navbar__link--active {
51
+ background: #fff;
52
+ color: var(--ifm-color-primary);
53
+ }
54
+
55
+ .navbar__item.navbar__link:not(.navbar__link--active):hover {
56
+ background: var(--ifm-hover-overlay);
57
+ color: #fff;
58
+ }
59
+
60
+ .navbar__item.navbar__link + .navbar__item.navbar__link {
61
+ margin-inline-start: calc(var(--ifm-navbar-padding-horizontal) / 2);
62
+ }
63
+ }
64
+
65
+ .navbar__item.navbar__link {
66
+ font-weight: 600;
67
+ }
68
+
69
+ .navbar--fixed-top .navbar__inner .navbar__item {
70
+ filter: drop-shadow(0px -1px var(--ifm-color-primary-darker));
71
+ }
72
+
73
+ @media (min-width: 1120px) {
74
+ .navbar--fixed-top .navbar__items:not(.navbar__items--right) {
75
+ --ifm-navbar-item-padding-horizontal: 1rem;
76
+ }
77
+
78
+ .docs-wrapper .navbar {
79
+ margin: 0;
80
+ padding-inline-start: 0;
81
+ }
82
+
83
+ .navbar__brand {
84
+ justify-content: center;
85
+ }
86
+
87
+ .docs-wrapper .navbar__brand {
88
+ width: var(--doc-sidebar-width);
89
+ margin: 0;
90
+ }
91
+
92
+ .navbar__item.navbar__link {
93
+ font-size: 1.1rem;
94
+ }
95
+ }
96
+
97
+ .navbar__logo {
98
+ margin: 0 0.75rem 0.2rem 0;
99
+ }
100
+
101
+ .navbar__items--right {
102
+ display: grid;
103
+
104
+ --ifm-hover-overlay: hsl(0deg 0% 100% / 25%);
105
+ --ifm-navbar-item-padding-horizontal: 0.75rem;
106
+
107
+ .navbar__item.navbar__link {
108
+ grid-row: 1;
109
+
110
+ &:first-child {
111
+ grid-column: 1 / span 1;
112
+ }
113
+
114
+ &:nth-child(2) {
115
+ grid-column: 2 / span 1;
116
+ }
117
+ }
118
+
119
+ div:has(.DocSearch) {
120
+ grid-column: 5 / span 1;
121
+ grid-row: 1;
122
+
123
+ @media (min-width: 999px) {
124
+ border-inline-start: 1px solid var(--ifm-hover-overlay);
125
+ margin-inline-start: calc(
126
+ var(--ifm-navbar-item-padding-horizontal) / 2
127
+ );
128
+ padding-inline-start: calc(
129
+ var(--ifm-navbar-item-padding-horizontal) / 2
130
+ );
131
+ }
132
+ }
133
+
134
+ div:has(.clean-btn) {
135
+ grid-column: 6 / span 1;
136
+ grid-row: 1;
137
+ }
138
+ }
139
+
140
+ .DocSearch-Button {
141
+ --docsearch-primary-color: var(--ifm-color-primary-darkest);
142
+ --docsearch-text-color: var(--ifm-navbar-link-color);
143
+ --docsearch-searchbox-shadow: unset;
144
+ --docsearch-searchbox-background: transparent;
145
+ --docsearch-searchbox-focus-background: var(--ifm-hover-overlay);
146
+
147
+ --docsearch-muted-color: hsl(0 0% 85% / 1);
148
+ --docsearch-key-gradient: linear-gradient(
149
+ -26.5deg,
150
+ hsl(236.47deg 43.59% 77.06%),
151
+ hsl(236.84deg 34.55% 10.78%)
152
+ );
153
+ --docsearch-key-shadow:
154
+ inset 0 -2px 0 0 hsl(233.33deg 36% 24.51%),
155
+ inset 0 0 1px 1px hsl(232.11deg 34.86% 57.25%),
156
+ 0 2px 2px 0 rgba(3, 4, 9, 0.3);
157
+ --docsearch-key-pressed-shadow:
158
+ inset 0 -2px 0 0 #282d55,
159
+ inset 0 0 1px 1px hsl(231.82deg 21.36% 40.39%),
160
+ 0 1px 1px 0 hsl(230deg 50% 2.35% / 30.2%);
161
+
162
+ padding: var(--ifm-navbar-item-padding-vertical)
163
+ var(--ifm-navbar-item-padding-horizontal) !important;
164
+ padding-inline-end: calc(
165
+ var(--ifm-navbar-item-padding-horizontal) * 1.25
166
+ ) !important;
167
+
168
+ .DocSearch-Button-Placeholder {
169
+ font-family: var(--ifm-heading-font-family);
170
+ color: var(--ifm-navbar-link-color);
171
+ font-weight: 600;
172
+ font-size: 1.1rem;
173
+ padding: 0;
174
+ }
175
+
176
+ .DocSearch-Button-Container {
177
+ gap: 0.5em;
178
+ }
179
+
180
+ .DocSearch-Search-Icon {
181
+ stroke-width: 1.75;
182
+ }
183
+
184
+ .DocSearch-Button-Keys {
185
+ display: none;
186
+ }
187
+ }
188
+
189
+ .DocSearch-Button-Key {
190
+ font-weight: 500;
191
+ }
package/css/root.css ADDED
@@ -0,0 +1,19 @@
1
+ :root {
2
+ --white: hsl(0deg 0% 95%);
3
+
4
+ --ifm-color-primary: #fd4b2d;
5
+ --ifm-color-primary-dark: #fd320f;
6
+ --ifm-color-primary-darker: #fb2602;
7
+ --ifm-color-primary-darkest: #cf1f02;
8
+ --ifm-color-primary-light: #fd644b;
9
+ --ifm-color-primary-lighter: #fd7159;
10
+ --ifm-color-primary-lightest: #fe9786;
11
+
12
+ --ifm-hover-overlay: hsl(0deg 0% 100% / 25%);
13
+
14
+ --ifm-color-content: hsl(216 35% 3%);
15
+ }
16
+
17
+ body {
18
+ overscroll-behavior-x: none;
19
+ }
@@ -0,0 +1,20 @@
1
+ .theme-doc-sidebar-menu .dropdown {
2
+ display: block;
3
+ padding: 0;
4
+ }
5
+
6
+ .theme-doc-sidebar-menu .navbar__link {
7
+ color: var(--ifm-menu-color);
8
+ }
9
+
10
+ .theme-doc-sidebar-menu .dropdown__menu {
11
+ left: 0;
12
+ }
13
+ .theme-doc-sidebar-menu hr {
14
+ margin-top: calc(var(--ifm-hr-margin-vertical) / 2);
15
+ margin-right: -0.5rem;
16
+ }
17
+
18
+ .clean-list {
19
+ font-weight: 500;
20
+ }
package/index.js ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @file Docusaurus configuration for the authentik website.
3
+ */
4
+
5
+ export * from "./lib/theme.js";
6
+ export * from "./lib/common.js";
package/lib/common.js ADDED
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @file Common Docusaurus configuration utilities.
3
+ *
4
+ * @import { Config as DocusaurusConfig } from "@docusaurus/types"
5
+ * @import { UserThemeConfig } from "./theme.js"
6
+ */
7
+
8
+ import { deepmerge } from "deepmerge-ts";
9
+ import { createThemeConfig } from "./theme.js";
10
+
11
+ //#region Types
12
+
13
+ /**
14
+ * @typedef {Omit<DocusaurusConfig, 'themeConfig'>} DocusaurusConfigBase
15
+ *
16
+ * Represents the base configuration for Docusaurus, excluding the theme configuration.
17
+ */
18
+
19
+ /**
20
+ * @typedef DocusaurusConfigBaseTheme
21
+ * @property {UserThemeConfig} themeConfig The theme configuration.
22
+ *
23
+ * Represents a configuration object, only including the theme configuration.
24
+ */
25
+
26
+ /**
27
+ * @typedef {Partial<DocusaurusConfigBase & DocusaurusConfigBaseTheme>} DocusaurusConfigInit
28
+ *
29
+ * The initial configuration for Docusaurus.
30
+ *
31
+ * @remarks
32
+ * This type is the result of Docusaurs's less than ideal type definitions.
33
+ * Much of the configuration is not strictly typed, however, this type
34
+ * is a good starting point.
35
+ */
36
+
37
+ //#endregion
38
+
39
+ //#region Functions
40
+
41
+ /**
42
+ * Create a Docusaurus configuration.
43
+ *
44
+ * @param {DocusaurusConfigInit} [overrides] The options to override.
45
+ * @returns {DocusaurusConfig}
46
+ */
47
+ export function createDocusaurusConfig({ themeConfig, ...overrides } = {}) {
48
+ /**
49
+ * @type {DocusaurusConfig}
50
+ */
51
+ const config = {
52
+ title: "authentik",
53
+ tagline: "Bring all of your authentication into a unified platform.",
54
+ url: "https://docs.goauthentik.io",
55
+ baseUrl: "/",
56
+ onBrokenLinks: "throw",
57
+ onBrokenAnchors: "throw",
58
+ favicon: "img/icon.png",
59
+ organizationName: "Authentik Security Inc.",
60
+ projectName: "authentik",
61
+ markdown: {
62
+ mermaid: true,
63
+ },
64
+ themeConfig: createThemeConfig(themeConfig),
65
+ };
66
+
67
+ return deepmerge(config, overrides);
68
+ }
69
+
70
+ //#endregion
package/lib/theme.js ADDED
@@ -0,0 +1,85 @@
1
+ /**
2
+ * @file Docusaurus theme configuration for the authentik website.
3
+ *
4
+ * @import { UserThemeConfig as UserThemeConfigCommon } from "@docusaurus/theme-common";
5
+ * @import { UserThemeConfig as UserThemeConfigAlgolia } from "@docusaurus/theme-search-algolia";
6
+ */
7
+
8
+ import { deepmerge } from "deepmerge-ts";
9
+ import { themes as prismThemes } from "prism-react-renderer";
10
+
11
+ //#region Types
12
+
13
+ /**
14
+ * Combined theme configuration for Docusaurus and Algolia.
15
+ *
16
+ * @typedef {UserThemeConfigCommon & UserThemeConfigAlgolia} UserThemeConfig
17
+ */
18
+
19
+ //#endregion
20
+
21
+ //#region Functions
22
+
23
+ /**
24
+ * @returns {string} The copyright string.
25
+ */
26
+ export function formatCopyright() {
27
+ return `Copyright © ${new Date().getFullYear()} Authentik Security Inc. Built with Docusaurus.`;
28
+ }
29
+
30
+ /**
31
+ * Creates a Prisma configuration for Docusaurus.
32
+ *
33
+ * @param {Partial<UserThemeConfigCommon['prism']>} overrides - Overrides for the default Prisma configuration.
34
+ * @returns {UserThemeConfigCommon['prism']}
35
+ */
36
+ export function createPrismConfig(overrides = {}) {
37
+ /**
38
+ * @type {UserThemeConfigCommon['prism']}
39
+ */
40
+ const prismConfig = {
41
+ theme: prismThemes.oneLight,
42
+ darkTheme: prismThemes.oneDark,
43
+ additionalLanguages: [
44
+ // ---
45
+ "apacheconf",
46
+ "diff",
47
+ "http",
48
+ "json",
49
+ "nginx",
50
+ "python",
51
+ "bash",
52
+ ],
53
+ };
54
+
55
+ return deepmerge(prismConfig, overrides);
56
+ }
57
+
58
+ /**
59
+ * Creates a theme configuration for Docusaurus.
60
+ *
61
+ * @param {Partial<UserThemeConfig>} overrides - Overrides for the default theme configuration.
62
+ * @returns {UserThemeConfig}
63
+ */
64
+ export function createThemeConfig({ prism, ...overrides } = {}) {
65
+ /**
66
+ * @type {UserThemeConfig}
67
+ */
68
+ const themeConfig = {
69
+ image: "img/social.png",
70
+ tableOfContents: {
71
+ minHeadingLevel: 2,
72
+ maxHeadingLevel: 3,
73
+ },
74
+ colorMode: {
75
+ respectPrefersColorScheme: true,
76
+ },
77
+ algolia: {
78
+ appId: "36ROD0O0FV",
79
+ apiKey: "727db511300ca9aec5425645bbbddfb5",
80
+ },
81
+ prism: createPrismConfig(prism),
82
+ };
83
+
84
+ return deepmerge(themeConfig, overrides);
85
+ }
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@goauthentik/docusaurus-config",
3
+ "version": "1.0.1",
4
+ "description": "authentik's Docusaurus config",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "exports": {
8
+ "./package.json": "./package.json",
9
+ ".": {
10
+ "import": "./index.js",
11
+ "types": "./out/index.d.ts"
12
+ },
13
+ "./css/**/*": "./css/**/*"
14
+ },
15
+ "types": "./out/index.d.ts",
16
+ "dependencies": {
17
+ "prism-react-renderer": "^2.4.1",
18
+ "deepmerge-ts": "^7.1.5"
19
+ },
20
+ "devDependencies": {
21
+ "@goauthentik/tsconfig": "^1.0.1",
22
+ "@docusaurus/core": "^3.7.0",
23
+ "@docusaurus/preset-classic": "^3.7.0",
24
+ "@docusaurus/theme-common": "^3.7.0",
25
+ "@docusaurus/theme-mermaid": "^3.7.0"
26
+ },
27
+ "peerDependencies": {
28
+ "@docusaurus/core": "^3.7.0",
29
+ "@docusaurus/preset-classic": "^3.7.0",
30
+ "@docusaurus/theme-common": "^3.7.0",
31
+ "@docusaurus/theme-mermaid": "^3.7.0"
32
+ },
33
+ "engines": {
34
+ "node": ">=20.11"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "prettier": "@goauthentik/prettier-config"
40
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "@goauthentik/tsconfig",
3
+ "compilerOptions": {
4
+ "baseUrl": ".",
5
+ "checkJs": true,
6
+ "emitDeclarationOnly": true
7
+ }
8
+ }