@astrojs/starlight 0.21.4 → 0.22.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 (67) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/__e2e__/fixtures/basics/astro.config.mjs +10 -0
  3. package/__e2e__/fixtures/basics/node_modules/.bin/astro +17 -0
  4. package/__e2e__/fixtures/basics/package.json +9 -0
  5. package/__e2e__/fixtures/basics/src/content/config.ts +6 -0
  6. package/__e2e__/fixtures/basics/src/content/docs/tabs-variable-height.mdx +151 -0
  7. package/__e2e__/fixtures/basics/src/content/docs/tabs.mdx +37 -0
  8. package/__e2e__/fixtures/basics/src/env.d.ts +2 -0
  9. package/__e2e__/tabs.test.ts +122 -0
  10. package/__e2e__/test-utils.ts +53 -0
  11. package/components/ContentNotice.astro +31 -0
  12. package/components/DraftContentNotice.astro +8 -0
  13. package/components/FallbackContentNotice.astro +2 -21
  14. package/components/Head.astro +3 -3
  15. package/components/Icons.ts +10 -0
  16. package/components/Page.astro +2 -0
  17. package/components/SiteTitle.astro +2 -1
  18. package/components/ThemeSelect.astro +36 -48
  19. package/global.d.ts +1 -1
  20. package/index.astro +1 -1
  21. package/integrations/expressive-code/hast.d.ts +5 -0
  22. package/integrations/expressive-code/hast.mjs +9 -0
  23. package/integrations/shared/pathToLocale.ts +2 -1
  24. package/package.json +13 -3
  25. package/playwright.config.ts +15 -0
  26. package/schema.ts +16 -3
  27. package/schemas/components.ts +9 -0
  28. package/schemas/i18n.ts +18 -5
  29. package/schemas/site-title.ts +22 -0
  30. package/schemas/social.ts +2 -0
  31. package/style/props.css +1 -1
  32. package/translations/ar.json +1 -0
  33. package/translations/cs.json +1 -0
  34. package/translations/da.json +1 -0
  35. package/translations/de.json +1 -0
  36. package/translations/en.json +1 -0
  37. package/translations/es.json +1 -0
  38. package/translations/fa.json +8 -7
  39. package/translations/fr.json +1 -0
  40. package/translations/gl.json +1 -0
  41. package/translations/he.json +1 -0
  42. package/translations/hi.json +1 -0
  43. package/translations/id.json +1 -0
  44. package/translations/it.json +1 -0
  45. package/translations/ja.json +1 -0
  46. package/translations/ko.json +1 -0
  47. package/translations/nb.json +1 -0
  48. package/translations/nl.json +1 -0
  49. package/translations/pl.json +1 -0
  50. package/translations/pt.json +1 -0
  51. package/translations/ro.json +1 -0
  52. package/translations/ru.json +5 -1
  53. package/translations/sv.json +1 -0
  54. package/translations/tr.json +1 -0
  55. package/translations/uk.json +1 -0
  56. package/translations/vi.json +1 -0
  57. package/translations/zh-CN.json +1 -0
  58. package/translations/zh-TW.json +1 -0
  59. package/user-components/Tabs.astro +48 -7
  60. package/user-components/file-tree-icons.ts +1 -0
  61. package/user-components/rehype-file-tree.ts +1 -1
  62. package/utils/createTranslationSystem.ts +10 -8
  63. package/utils/route-data.ts +14 -1
  64. package/utils/routing.ts +9 -6
  65. package/utils/translations.ts +6 -2
  66. package/utils/user-config.ts +33 -19
  67. package/virtual.d.ts +4 -0
@@ -4,6 +4,7 @@ import config from 'virtual:starlight/user-config';
4
4
  import type { Props } from '../props';
5
5
  import { formatPath } from '../utils/format-path';
6
6
 
7
+ const { siteTitle } = Astro.props;
7
8
  const href = formatPath(Astro.props.locale || '/');
8
9
  ---
9
10
 
@@ -32,7 +33,7 @@ const href = formatPath(Astro.props.locale || '/');
32
33
  )
33
34
  }
34
35
  <span class:list={{ 'sr-only': config.logo?.replacesTitle }}>
35
- {config.title}
36
+ {siteTitle}
36
37
  </span>
37
38
  </a>
38
39
 
@@ -28,62 +28,50 @@ const { labels } = Astro.props;
28
28
  <script>
29
29
  type Theme = 'auto' | 'dark' | 'light';
30
30
 
31
- class StarlightThemeSelect extends HTMLElement {
32
- /** Key in `localStorage` to store color theme preference at. */
33
- #key = 'starlight-theme';
31
+ /** Key in `localStorage` to store color theme preference at. */
32
+ const storageKey = 'starlight-theme';
34
33
 
35
- constructor() {
36
- super();
37
- this.#onThemeChange(this.#loadTheme());
38
- const select = this.querySelector('select');
39
- if (select) {
40
- select.addEventListener('change', (e) => {
41
- if (e.currentTarget instanceof HTMLSelectElement) {
42
- this.#onThemeChange(this.#parseTheme(e.currentTarget.value));
43
- }
44
- });
45
- }
46
- }
34
+ /** Get a typesafe theme string from any JS value (unknown values are coerced to `'auto'`). */
35
+ const parseTheme = (theme: unknown): Theme =>
36
+ theme === 'auto' || theme === 'dark' || theme === 'light' ? theme : 'auto';
47
37
 
48
- /** Get a typesafe theme string from any JS value (unknown values are coerced to `'auto'`). */
49
- #parseTheme(theme: unknown): Theme {
50
- if (theme === 'auto' || theme === 'dark' || theme === 'light') {
51
- return theme;
52
- } else {
53
- return 'auto';
54
- }
55
- }
38
+ /** Load the user’s preference from `localStorage`. */
39
+ const loadTheme = (): Theme =>
40
+ parseTheme(typeof localStorage !== 'undefined' && localStorage.getItem(storageKey));
56
41
 
57
- /** Get the preferred system color scheme. */
58
- #getPreferredColorScheme(): Theme {
59
- return matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark';
42
+ /** Store the user’s preference in `localStorage`. */
43
+ function storeTheme(theme: Theme): void {
44
+ if (typeof localStorage !== 'undefined') {
45
+ localStorage.setItem(storageKey, theme === 'light' || theme === 'dark' ? theme : '');
60
46
  }
47
+ }
61
48
 
62
- /** Update select menu UI, document theme, and local storage state. */
63
- #onThemeChange(theme: Theme): void {
64
- StarlightThemeProvider.updatePickers(theme);
65
- document.documentElement.dataset.theme =
66
- theme === 'auto' ? this.#getPreferredColorScheme() : theme;
67
- this.#storeTheme(theme);
68
- }
49
+ /** Get the preferred system color scheme. */
50
+ const getPreferredColorScheme = (): Theme =>
51
+ matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark';
69
52
 
70
- /** Store the user’s preference in `localStorage`. */
71
- #storeTheme(theme: Theme): void {
72
- if (typeof localStorage !== 'undefined') {
73
- if (theme === 'light' || theme === 'dark') {
74
- localStorage.setItem(this.#key, theme);
75
- } else {
76
- localStorage.removeItem(this.#key);
77
- }
78
- }
79
- }
53
+ /** Update select menu UI, document theme, and local storage state. */
54
+ function onThemeChange(theme: Theme): void {
55
+ StarlightThemeProvider.updatePickers(theme);
56
+ document.documentElement.dataset.theme = theme === 'auto' ? getPreferredColorScheme() : theme;
57
+ storeTheme(theme);
58
+ }
80
59
 
81
- /** Load the user’s preference from `localStorage`. */
82
- #loadTheme(): Theme {
83
- const theme = typeof localStorage !== 'undefined' && localStorage.getItem(this.#key);
84
- return this.#parseTheme(theme);
60
+ // React to changes in system color scheme.
61
+ matchMedia(`(prefers-color-scheme: light)`).addEventListener('change', () => {
62
+ if (loadTheme() === 'auto') onThemeChange('auto');
63
+ });
64
+
65
+ class StarlightThemeSelect extends HTMLElement {
66
+ constructor() {
67
+ super();
68
+ onThemeChange(loadTheme());
69
+ this.querySelector('select')?.addEventListener('change', (e) => {
70
+ if (e.currentTarget instanceof HTMLSelectElement) {
71
+ onThemeChange(parseTheme(e.currentTarget.value));
72
+ }
73
+ });
85
74
  }
86
75
  }
87
-
88
76
  customElements.define('starlight-theme-select', StarlightThemeSelect);
89
77
  </script>
package/global.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- declare global {
1
+ export declare global {
2
2
  var StarlightThemeProvider: {
3
3
  updatePickers(theme?: string): void;
4
4
  };
package/index.astro CHANGED
@@ -16,4 +16,4 @@ const { Content, headings } = await Astro.props.entry.render();
16
16
  const route = generateRouteData({ props: { ...Astro.props, headings }, url: Astro.url });
17
17
  ---
18
18
 
19
- <Page {...route}><Content /></Page>
19
+ <Page {...route}><Content frontmatter={Astro.props.entry.data} /></Page>
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @file This file provides the types for Starlight's `@astrojs/starlight/expressive-code/hast` export.
3
+ */
4
+
5
+ export * from 'astro-expressive-code/hast';
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @file This file is exported by Starlight as `@astrojs/starlight/expressive-code/hast`.
3
+ *
4
+ * Note: This file is intentionally not a TypeScript module to allow access to all exported
5
+ * functionality even if TypeScript is not available, e.g. from the `ec.config.mjs` file
6
+ * that does not get processed by Vite.
7
+ */
8
+
9
+ export * from 'astro-expressive-code/hast';
@@ -1,3 +1,4 @@
1
+ import type { AstroConfig } from 'astro';
1
2
  import type { StarlightConfig } from '../../types';
2
3
 
3
4
  function slugToLocale(
@@ -17,7 +18,7 @@ export function pathToLocale(
17
18
  astroConfig,
18
19
  }: {
19
20
  starlightConfig: { locales: StarlightConfig['locales'] };
20
- astroConfig: { root: URL; srcDir: URL };
21
+ astroConfig: { root: AstroConfig['root']; srcDir: AstroConfig['srcDir'] };
21
22
  }
22
23
  ): string | undefined {
23
24
  const srcDir = new URL(astroConfig.srcDir, astroConfig.root);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astrojs/starlight",
3
- "version": "0.21.4",
3
+ "version": "0.22.0",
4
4
  "description": "Build beautiful, high-performance documentation websites with Astro",
5
5
  "keywords": [
6
6
  "docs",
@@ -94,6 +94,10 @@
94
94
  "types": "./components/FallbackContentNotice.astro.tsx",
95
95
  "import": "./components/FallbackContentNotice.astro"
96
96
  },
97
+ "./components/DraftContentNotice.astro": {
98
+ "types": "./components/DraftContentNotice.astro.tsx",
99
+ "import": "./components/DraftContentNotice.astro"
100
+ },
97
101
  "./components/Page.astro": {
98
102
  "types": "./components/Page.astro.tsx",
99
103
  "import": "./components/Page.astro"
@@ -162,6 +166,10 @@
162
166
  "types": "./expressive-code.d.ts",
163
167
  "default": "./expressive-code.mjs"
164
168
  },
169
+ "./expressive-code/hast": {
170
+ "types": "./integrations/expressive-code/hast.d.ts",
171
+ "default": "./integrations/expressive-code/hast.mjs"
172
+ },
165
173
  "./index.astro": "./index.astro",
166
174
  "./404.astro": "./404.astro",
167
175
  "./style/markdown.css": "./style/markdown.css"
@@ -171,6 +179,7 @@
171
179
  },
172
180
  "devDependencies": {
173
181
  "@astrojs/markdown-remark": "^4.2.1",
182
+ "@playwright/test": "^1.43.1",
174
183
  "@types/node": "^18.16.19",
175
184
  "@vitest/coverage-v8": "^1.3.1",
176
185
  "astro": "^4.3.5",
@@ -182,7 +191,7 @@
182
191
  "@pagefind/default-ui": "^1.0.3",
183
192
  "@types/hast": "^3.0.3",
184
193
  "@types/mdast": "^4.0.3",
185
- "astro-expressive-code": "^0.33.4",
194
+ "astro-expressive-code": "^0.35.2",
186
195
  "bcp-47": "^2.1.0",
187
196
  "hast-util-from-html": "^2.0.1",
188
197
  "hast-util-select": "^6.0.2",
@@ -199,6 +208,7 @@
199
208
  },
200
209
  "scripts": {
201
210
  "test": "vitest",
202
- "test:coverage": "vitest run --coverage"
211
+ "test:coverage": "vitest run --coverage",
212
+ "test:e2e": "playwright install --with-deps chromium && playwright test"
203
213
  }
204
214
  }
@@ -0,0 +1,15 @@
1
+ import { defineConfig, devices } from '@playwright/test';
2
+
3
+ export default defineConfig({
4
+ forbidOnly: !!process.env['CI'],
5
+ projects: [
6
+ {
7
+ name: 'Chrome Stable',
8
+ use: {
9
+ ...devices['Desktop Chrome'],
10
+ headless: true,
11
+ },
12
+ },
13
+ ],
14
+ testMatch: '__e2e__/*.test.ts',
15
+ });
package/schema.ts CHANGED
@@ -103,6 +103,12 @@ const StarlightFrontmatterSchema = (context: SchemaContext) =>
103
103
 
104
104
  /** Pagefind indexing for this page - set to false to disable. */
105
105
  pagefind: z.boolean().default(true),
106
+
107
+ /**
108
+ * Indicates that this page is a draft and will not be included in production builds.
109
+ * Note that the page will still be available when running Astro in development mode.
110
+ */
111
+ draft: z.boolean().default(false),
106
112
  });
107
113
  /** Type of Starlight’s default frontmatter schema. */
108
114
  type DefaultSchema = ReturnType<typeof StarlightFrontmatterSchema>;
@@ -117,7 +123,9 @@ type BaseSchemaWithoutEffects =
117
123
  type BaseSchema = BaseSchemaWithoutEffects | z.ZodEffects<BaseSchemaWithoutEffects>;
118
124
 
119
125
  /** Type that extends Starlight’s default schema with an optional, user-defined schema. */
120
- type ExtendedSchema<T extends BaseSchema> = T extends BaseSchema
126
+ type ExtendedSchema<T extends BaseSchema | never = never> = [T] extends [never]
127
+ ? DefaultSchema
128
+ : T extends BaseSchema
121
129
  ? z.ZodIntersection<DefaultSchema, T>
122
130
  : DefaultSchema;
123
131
 
@@ -147,8 +155,13 @@ interface DocsSchemaOpts<T extends BaseSchema> {
147
155
  }
148
156
 
149
157
  /** Content collection schema for Starlight’s `docs` collection. */
150
- export function docsSchema<T extends BaseSchema>({ extend }: DocsSchemaOpts<T> = {}) {
151
- return (context: SchemaContext): ExtendedSchema<T> => {
158
+ export function docsSchema<T extends BaseSchema | never = never>(
159
+ ...args: [DocsSchemaOpts<T>?]
160
+ ): (context: SchemaContext) => ExtendedSchema<T> {
161
+ const [options = {}] = args;
162
+ const { extend } = options;
163
+
164
+ return (context: SchemaContext) => {
152
165
  const UserSchema = typeof extend === 'function' ? extend(context) : extend;
153
166
 
154
167
  return (
@@ -202,6 +202,15 @@ export function ComponentConfigSchema() {
202
202
  .string()
203
203
  .default('@astrojs/starlight/components/FallbackContentNotice.astro'),
204
204
 
205
+ /**
206
+ * Notice displayed to users on draft pages. Only used in development mode.
207
+ *
208
+ * @see {@link https://github.com/withastro/starlight/blob/main/packages/starlight/components/DraftContentNotice.astro `DraftContentNotice` default implementation}
209
+ */
210
+ DraftContentNotice: z
211
+ .string()
212
+ .default('@astrojs/starlight/components/DraftContentNotice.astro'),
213
+
205
214
  /**
206
215
  * Component rendered at the top of the page when `hero` is set in frontmatter. The default
207
216
  * implementation shows a large title, tagline, and call-to-action links alongside an optional image.
package/schemas/i18n.ts CHANGED
@@ -18,14 +18,21 @@ interface i18nSchemaOpts<T extends z.AnyZodObject = z.ZodObject<{}>> {
18
18
  extend?: T;
19
19
  }
20
20
 
21
+ const defaultI18nSchema = () =>
22
+ starlightI18nSchema().merge(pagefindI18nSchema()).merge(expressiveCodeI18nSchema());
23
+ /** Type of Starlight’s default i18n schema, including extensions from Pagefind and Expressive Code. */
24
+ type DefaultI18nSchema = ReturnType<typeof defaultI18nSchema>;
25
+
26
+ /** Type that extends Starlight’s default i18n schema with an optional, user-defined schema. */
27
+ type ExtendedSchema<T extends z.AnyZodObject> = T extends z.AnyZodObject
28
+ ? z.ZodIntersection<DefaultI18nSchema, T>
29
+ : DefaultI18nSchema;
30
+
21
31
  /** Content collection schema for Starlight’s optional `i18n` collection. */
22
32
  export function i18nSchema<T extends z.AnyZodObject = z.ZodObject<{}>>({
23
33
  extend = z.object({}) as T,
24
- }: i18nSchemaOpts<T> = {}) {
25
- return starlightI18nSchema()
26
- .merge(pagefindI18nSchema())
27
- .merge(expressiveCodeI18nSchema())
28
- .merge(extend);
34
+ }: i18nSchemaOpts<T> = {}): ExtendedSchema<T> {
35
+ return defaultI18nSchema().merge(extend) as ExtendedSchema<T>;
29
36
  }
30
37
  export type i18nSchemaOutput = z.output<ReturnType<typeof i18nSchema>>;
31
38
 
@@ -116,6 +123,12 @@ function starlightI18nSchema() {
116
123
  .string()
117
124
  .describe('Label shown on the “next page” pagination arrow in the page footer.'),
118
125
 
126
+ 'page.draft': z
127
+ .string()
128
+ .describe(
129
+ 'Development-only notice informing users they are on a page that is a draft which will not be included in production builds.'
130
+ ),
131
+
119
132
  '404.text': z.string().describe('Text shown on Starlight’s default 404 page'),
120
133
  'aside.tip': z.string().describe('Text shown on the tip aside variant'),
121
134
  'aside.note': z.string().describe('Text shown on the note aside variant'),
@@ -0,0 +1,22 @@
1
+ import { z } from 'astro/zod';
2
+
3
+ export const TitleConfigSchema = () =>
4
+ z
5
+ .union([z.string(), z.record(z.string())])
6
+ .describe('Title for your website. Will be used in metadata and as browser tab title.');
7
+
8
+ // transform the title for runtime use
9
+ export const TitleTransformConfigSchema = (defaultLang: string) =>
10
+ TitleConfigSchema().transform((title, ctx) => {
11
+ if (typeof title === 'string') {
12
+ return { [defaultLang]: title };
13
+ }
14
+ if (!title[defaultLang] && title[defaultLang] !== '') {
15
+ ctx.addIssue({
16
+ code: z.ZodIssueCode.custom,
17
+ message: `Title must have a key for the default language "${defaultLang}"`,
18
+ });
19
+ return z.NEVER;
20
+ }
21
+ return title;
22
+ });
package/schemas/social.ts CHANGED
@@ -24,6 +24,7 @@ export const socialLinks = [
24
24
  'email',
25
25
  'reddit',
26
26
  'patreon',
27
+ 'signal',
27
28
  'slack',
28
29
  'matrix',
29
30
  'openCollective',
@@ -66,6 +67,7 @@ export const SocialLinksSchema = () =>
66
67
  email: 'Email',
67
68
  reddit: 'Reddit',
68
69
  patreon: 'Patreon',
70
+ signal: 'Signal',
69
71
  slack: 'Slack',
70
72
  matrix: 'Matrix',
71
73
  openCollective: 'Open Collective',
package/style/props.css CHANGED
@@ -79,7 +79,7 @@
79
79
  --sl-text-h4: var(--sl-text-xl);
80
80
  --sl-text-h5: var(--sl-text-lg);
81
81
 
82
- --sl-line-height: 1.8;
82
+ --sl-line-height: 1.75;
83
83
  --sl-line-height-headings: 1.2;
84
84
 
85
85
  --sl-font-system: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "اخر تحديث:",
19
19
  "page.previousLink": "السابق",
20
20
  "page.nextLink": "التالي",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "الصفحة غير موجودة. تأكد من الرابط أو ابحث بإستعمال شريط البحث.",
22
23
  "aside.note": "ملحوظة",
23
24
  "aside.tip": "نصيحة",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "Poslední aktualizace:",
19
19
  "page.previousLink": "Předchozí",
20
20
  "page.nextLink": "Další",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "Stránka nenalezena. Zkontrolujte adresu URL nebo zkuste použít vyhledávací pole.",
22
23
  "aside.note": "Note",
23
24
  "aside.tip": "Tip",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "Sidst opdateret:",
19
19
  "page.previousLink": "Forrige",
20
20
  "page.nextLink": "Næste",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "Siden er ikke fundet. Tjek din URL eller prøv søgelinjen.",
22
23
  "aside.note": "Note",
23
24
  "aside.tip": "Tip",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "Zuletzt bearbeitet:",
19
19
  "page.previousLink": "Vorherige Seite",
20
20
  "page.nextLink": "Nächste Seite",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "Seite nicht gefunden. Überprüfe die URL oder nutze die Suchleiste.",
22
23
  "aside.note": "Hinweis",
23
24
  "aside.tip": "Tipp",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "Last updated:",
19
19
  "page.previousLink": "Previous",
20
20
  "page.nextLink": "Next",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "Page not found. Check the URL or try using the search bar.",
22
23
  "aside.note": "Note",
23
24
  "aside.tip": "Tip",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "Última actualización:",
19
19
  "page.previousLink": "Página anterior",
20
20
  "page.nextLink": "Siguiente página",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "Página no encontrada. Verifica la URL o intenta usar la barra de búsqueda.",
22
23
  "aside.note": "Nota",
23
24
  "aside.tip": "Consejo",
@@ -12,16 +12,17 @@
12
12
  "menuButton.accessibleLabel": "منو",
13
13
  "sidebarNav.accessibleLabel": "اصلی",
14
14
  "tableOfContents.onThisPage": "در این صفحه",
15
- "tableOfContents.overview": "بررسی اجمالی",
15
+ "tableOfContents.overview": "نگاه کلی",
16
16
  "i18n.untranslatedContent": "این محتوا هنوز به زبان شما در دسترس نیست.",
17
17
  "page.editLink": "ویرایش صفحه",
18
- "page.lastUpdated": "آخرین به روز رسانی:",
18
+ "page.lastUpdated": "آخرین به‌روزرسانی:",
19
19
  "page.previousLink": "قبلی",
20
20
  "page.nextLink": "بعدی",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "صفحه یافت نشد. لطفاً URL را بررسی کنید یا از جستجو استفاده نمایید.",
22
- "aside.note": "Note",
23
- "aside.tip": "Tip",
24
- "aside.caution": "Caution",
25
- "aside.danger": "Danger",
26
- "fileTree.directory": "Directory"
23
+ "aside.note": "یادداشت",
24
+ "aside.tip": "نکته",
25
+ "aside.caution": "احتیاط",
26
+ "aside.danger": "خطر",
27
+ "fileTree.directory": "فهرست"
27
28
  }
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "Dernière mise à jour :",
19
19
  "page.previousLink": "Précédent",
20
20
  "page.nextLink": "Suivant",
21
+ "page.draft": "Ce contenu est une ébauche et ne sera pas inclus dans la version de production.",
21
22
  "404.text": "Page non trouvée. Vérifiez l’URL ou essayez d’utiliser la barre de recherche.",
22
23
  "aside.note": "Note",
23
24
  "aside.tip": "Astuce",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "Última actualización:",
19
19
  "page.previousLink": "Anterior",
20
20
  "page.nextLink": "Seguinte",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "Paxina non atopada. Comproba a URL ou intenta usar a barra de busca.",
22
23
  "aside.note": "Note",
23
24
  "aside.tip": "Tip",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "עדכון אחרון:",
19
19
  "page.previousLink": "הקודם",
20
20
  "page.nextLink": "הבא",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "הדף לא נמצא. אנא בדקו את כתובת האתר או נסו להשתמש בסרגל החיפוש.",
22
23
  "aside.note": "Note",
23
24
  "aside.tip": "Tip",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "आखिरी अद्यतन:",
19
19
  "page.previousLink": "पिछला",
20
20
  "page.nextLink": "अगला",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "यह पृष्ठ नहीं मिला। URL जांचें या खोज बार का उपयोग करने का प्रयास करें।",
22
23
  "aside.note": "टिप्पणी",
23
24
  "aside.tip": "संकेत",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "Terakhir diperbaharui:",
19
19
  "page.previousLink": "Sebelumnya",
20
20
  "page.nextLink": "Selanjutnya",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "Halaman tidak ditemukan. Cek kembali kolom URL atau gunakan fitur pencarian.",
22
23
  "aside.note": "Catatan",
23
24
  "aside.tip": "Tips",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "Ultimo aggiornamento:",
19
19
  "page.previousLink": "Indietro",
20
20
  "page.nextLink": "Avanti",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "Pagina non trovata. Verifica l'URL o prova a utilizzare la barra di ricerca.",
22
23
  "aside.note": "Nota",
23
24
  "aside.tip": "Consiglio",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "最終更新日:",
19
19
  "page.previousLink": "前へ",
20
20
  "page.nextLink": "次へ",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "ページが見つかりません。 URL を確認するか、検索バーを使用してみてください。",
22
23
  "aside.note": "ノート",
23
24
  "aside.tip": "ヒント",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "마지막 업데이트:",
19
19
  "page.previousLink": "이전",
20
20
  "page.nextLink": "다음",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "페이지를 찾을 수 없습니다. URL을 확인하거나 검색 막대를 사용해 보세요.",
22
23
  "aside.note": "노트",
23
24
  "aside.tip": "팁",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "Sist oppdatert:",
19
19
  "page.previousLink": "Forrige",
20
20
  "page.nextLink": "Neste",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "Siden ble ikke funnet. Sjekk URL-en eller prøv å bruke søkefeltet.",
22
23
  "aside.note": "Note",
23
24
  "aside.tip": "Tip",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "Laatst bewerkt:",
19
19
  "page.previousLink": "Vorige",
20
20
  "page.nextLink": "Volgende",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "Pagina niet gevonden. Controleer de URL of probeer de zoekbalk.",
22
23
  "aside.note": "Opmerking",
23
24
  "aside.tip": "Tip",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "Ostatnia aktualizacja:",
19
19
  "page.previousLink": "Poprzednia strona",
20
20
  "page.nextLink": "Następna strona",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "Nie znaleziono. Sprawdź URL lub użyj wyszukiwarki.",
22
23
  "aside.note": "Notatka",
23
24
  "aside.tip": "Wskazówka",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "Última atualização:",
19
19
  "page.previousLink": "Anterior",
20
20
  "page.nextLink": "Próximo",
21
+ "page.draft": "Esse conteúdo é um rascunho e não será incluído em builds de produção.",
21
22
  "404.text": "Página não encontrada. Verifique o URL ou tente usar a barra de pesquisa.",
22
23
  "aside.note": "Nota",
23
24
  "aside.tip": "Dica",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "Ultima actualizare:",
19
19
  "page.previousLink": "Pagina precendentă",
20
20
  "page.nextLink": "Pagina următoare",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "Pagina nu a fost găsită. Verifică adresa URL sau încercă să folosești bara de căutare.",
22
23
  "aside.note": "Mențiune",
23
24
  "aside.tip": "Sfat",
@@ -18,10 +18,14 @@
18
18
  "page.lastUpdated": "Последнее обновление:",
19
19
  "page.previousLink": "Предыдущая",
20
20
  "page.nextLink": "Следующая",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "Страница не найдена. Проверьте URL или используйте поиск по сайту.",
22
23
  "aside.note": "Заметка",
23
24
  "aside.tip": "Знали ли вы?",
24
25
  "aside.caution": "Осторожно",
25
26
  "aside.danger": "Опасно",
26
- "fileTree.directory": "Директория"
27
+ "fileTree.directory": "Директория",
28
+ "expressiveCode.copyButtonCopied": "Скопировано!",
29
+ "expressiveCode.copyButtonTooltip": "Копировать",
30
+ "expressiveCode.terminalWindowFallbackTitle": "Окно терминала"
27
31
  }
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "Senast uppdaterad:",
19
19
  "page.previousLink": "Föregående",
20
20
  "page.nextLink": "Nästa",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "Sidan hittades inte. Kontrollera URL:n eller testa att använda sökfältet.",
22
23
  "aside.note": "Note",
23
24
  "aside.tip": "Tip",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "Son güncelleme:",
19
19
  "page.previousLink": "Önceki",
20
20
  "page.nextLink": "Sonraki",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "Sayfa bulunamadı. URL'i kontrol edin ya da arama çubuğunu kullanmayı deneyin.",
22
23
  "aside.note": "Note",
23
24
  "aside.tip": "Tip",
@@ -18,6 +18,7 @@
18
18
  "page.lastUpdated": "Останнє оновлення:",
19
19
  "page.previousLink": "Назад",
20
20
  "page.nextLink": "Далі",
21
+ "page.draft": "This content is a draft and will not be included in production builds.",
21
22
  "404.text": "Сторінку не знайдено. Перевірте URL або спробуйте скористатися пошуком.",
22
23
  "aside.note": "Заувага",
23
24
  "aside.tip": "Порада",