update docs with cdn / npm paths

pull/1369/head
konnorrogers 2023-06-12 13:45:27 -04:00
rodzic 68b982a744
commit 41913c8c58
14 zmienionych plików z 95 dodań i 63 usunięć

Wyświetl plik

@ -105,6 +105,7 @@
"noopener", "noopener",
"noreferrer", "noreferrer",
"novalidate", "novalidate",
"npmdir",
"outdir", "outdir",
"ParamagicDev", "ParamagicDev",
"peta", "peta",
@ -147,6 +148,7 @@
"textareas", "textareas",
"textfield", "textfield",
"tinycolor", "tinycolor",
"TLDR",
"transitionend", "transitionend",
"treeitem", "treeitem",
"Triaging", "Triaging",

Wyświetl plik

@ -62,7 +62,7 @@
To import this component from <a href="https://www.jsdelivr.com/package/npm/@shoelace-style/shoelace">the CDN</a> To import this component from <a href="https://www.jsdelivr.com/package/npm/@shoelace-style/shoelace">the CDN</a>
using a script tag: using a script tag:
</p> </p>
<pre><code class="language-html">&lt;script type=&quot;module&quot; src=&quot;https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@{{ meta.version }}/cdn/{{ component.path }}&quot;&gt;&lt;/script&gt;</code></pre> <pre><code class="language-html">&lt;script type=&quot;module&quot; src=&quot;https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@{{ meta.version }}/{{ meta.cdndir }}/{{ component.path }}&quot;&gt;&lt;/script&gt;</code></pre>
</sl-tab-panel> </sl-tab-panel>
<sl-tab-panel name="import"> <sl-tab-panel name="import">
@ -70,21 +70,21 @@
To import this component from <a href="https://www.jsdelivr.com/package/npm/@shoelace-style/shoelace">the CDN</a> To import this component from <a href="https://www.jsdelivr.com/package/npm/@shoelace-style/shoelace">the CDN</a>
using a JavaScript import: using a JavaScript import:
</p> </p>
<pre><code class="language-js">import 'https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@{{ meta.version }}/cdn/{{ component.path }}';</code></pre> <pre><code class="language-js">import 'https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@{{ meta.version }}/{{ meta.cdndir }}/{{ component.path }}';</code></pre>
</sl-tab-panel> </sl-tab-panel>
<sl-tab-panel name="bundler"> <sl-tab-panel name="bundler">
<p> <p>
To import this component using <a href="{{ rootUrl('/getting-started/installation#bundling') }}">a bundler</a>: To import this component using <a href="{{ rootUrl('/getting-started/installation#bundling') }}">a bundler</a>:
</p> </p>
<pre><code class="language-js">import '@shoelace-style/shoelace/dist/{{ component.path }}';</code></pre> <pre><code class="language-js">import '@shoelace-style/shoelace/{{ meta.npmdir }}/{{ component.path }}';</code></pre>
</sl-tab-panel> </sl-tab-panel>
<sl-tab-panel name="react"> <sl-tab-panel name="react">
<p> <p>
To import this component as a <a href="/frameworks/react">React component</a>: To import this component as a <a href="/frameworks/react">React component</a>:
</p> </p>
<pre><code class="language-js">import { {{ component.name }} } from '@shoelace-style/shoelace/dist/react';</code></pre> <pre><code class="language-js">import { {{ component.name }} } from '@shoelace-style/shoelace/{{ meta.npmdir }}/react';</code></pre>
</sl-tab-panel> </sl-tab-panel>
</sl-tab-group> </sl-tab-group>

Wyświetl plik

@ -0,0 +1,20 @@
/**
* @typedef {object} Replacement
* @property {string | RegExp} pattern
* @property {string} replacement
*/
/**
* @typedef {Array<Replacement>} Replacements
*/
/**
* @param {Document} content
* @param {Replacements} replacements
*/
module.exports = function (content, replacements) {
replacements.forEach((replacement) => {
content.body.innerHTML = content.body.innerHTML.replaceAll(replacement.pattern, replacement.replacement)
})
}

Wyświetl plik

@ -180,7 +180,7 @@
// HTML templates // HTML templates
if (!isReact) { if (!isReact) {
htmlTemplate = htmlTemplate =
`<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@${shoelaceVersion}/cdn/shoelace.js"></script>\n` + `<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@${shoelaceVersion}/%CDNDIR%/shoelace.js"></script>\n` +
`\n${htmlExample}`; `\n${htmlExample}`;
jsTemplate = ''; jsTemplate = '';
} }
@ -191,10 +191,10 @@
jsTemplate = jsTemplate =
`import React from 'https://cdn.skypack.dev/react@${reactVersion}';\n` + `import React from 'https://cdn.skypack.dev/react@${reactVersion}';\n` +
`import ReactDOM from 'https://cdn.skypack.dev/react-dom@${reactVersion}';\n` + `import ReactDOM from 'https://cdn.skypack.dev/react-dom@${reactVersion}';\n` +
`import { setBasePath } from 'https://cdn.skypack.dev/@shoelace-style/shoelace@${shoelaceVersion}/cdn/utilities/base-path';\n` + `import { setBasePath } from 'https://cdn.skypack.dev/@shoelace-style/shoelace@${shoelaceVersion}/%CDNDIR%/utilities/base-path';\n` +
`\n` + `\n` +
`// Set the base path for Shoelace assets\n` + `// Set the base path for Shoelace assets\n` +
`setBasePath('https://cdn.skypack.dev/@shoelace-style/shoelace@${shoelaceVersion}/dist/')\n` + `setBasePath('https://cdn.skypack.dev/@shoelace-style/shoelace@${shoelaceVersion}/%NPMDIR%/')\n` +
`\n${convertModuleLinks(reactExample)}\n` + `\n${convertModuleLinks(reactExample)}\n` +
`\n` + `\n` +
`ReactDOM.render(<App />, document.getElementById('root'));`; `ReactDOM.render(<App />, document.getElementById('root'));`;
@ -202,7 +202,7 @@
// CSS templates // CSS templates
cssTemplate = cssTemplate =
`@import 'https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@${shoelaceVersion}/cdn/themes/${ `@import 'https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@${shoelaceVersion}/%CDNDIR%/themes/${
isDark ? 'dark' : 'light' isDark ? 'dark' : 'light'
}.css';\n` + }.css';\n` +
'\n' + '\n' +

Wyświetl plik

@ -16,8 +16,11 @@ const tableOfContents = require('./_utilities/table-of-contents.cjs');
const prettier = require('./_utilities/prettier.cjs'); const prettier = require('./_utilities/prettier.cjs');
const scrollingTables = require('./_utilities/scrolling-tables.cjs'); const scrollingTables = require('./_utilities/scrolling-tables.cjs');
const typography = require('./_utilities/typography.cjs'); const typography = require('./_utilities/typography.cjs');
const replacer = require('./_utilities/replacer.cjs');
const assetsDir = 'assets'; const assetsDir = 'assets';
const cdndir = 'cdn'
const npmdir = 'dist'
const allComponents = getAllComponents(); const allComponents = getAllComponents();
let hasBuiltSearchIndex = false; let hasBuiltSearchIndex = false;
@ -33,7 +36,9 @@ module.exports = function (eleventyConfig) {
description: 'A forward-thinking library of web components.', description: 'A forward-thinking library of web components.',
image: 'images/og-image.png', image: 'images/og-image.png',
version: customElementsManifest.package.version, version: customElementsManifest.package.version,
components: allComponents components: allComponents,
cdndir,
npmdir
}); });
// //
@ -129,6 +134,11 @@ module.exports = function (eleventyConfig) {
scrollingTables(doc); scrollingTables(doc);
copyCodeButtons(doc); // must be after codePreviews + highlightCodeBlocks copyCodeButtons(doc); // must be after codePreviews + highlightCodeBlocks
typography(doc, '#content'); typography(doc, '#content');
replacer(doc, [
{pattern: "%VERSION%", replacement: customElementsManifest.package.version},
{pattern: "%CDNDIR%", replacement: cdndir},
{pattern: "%NPMDIR%", replacement: npmdir}
])
// Serialize the Document object to an HTML string and prepend the doctype // Serialize the Document object to an HTML string and prepend the doctype
content = `<!DOCTYPE html>\n${doc.documentElement.outerHTML}`; content = `<!DOCTYPE html>\n${doc.documentElement.outerHTML}`;

Wyświetl plik

@ -19,14 +19,14 @@ npm install @shoelace-style/shoelace
Next, [include a theme](/getting-started/themes) and set the [base path](/getting-started/installation#setting-the-base-path) for icons and other assets. In this example, we'll import the light theme and use the CDN as a base path. Next, [include a theme](/getting-started/themes) and set the [base path](/getting-started/installation#setting-the-base-path) for icons and other assets. In this example, we'll import the light theme and use the CDN as a base path.
```jsx ```jsx
import '@shoelace-style/shoelace/dist/themes/light.css'; import '@shoelace-style/shoelace/%NPMDIR%/themes/light.css';
import { setBasePath } from '@shoelace-style/shoelace/dist/utilities/base-path'; import { setBasePath } from '@shoelace-style/shoelace/%NPMDIR%/utilities/base-path';
setBasePath('https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/cdn/'); setBasePath('https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/%CDNDIR%/');
``` ```
:::tip :::tip
If you'd rather not use the CDN for assets, you can create a build task that copies `node_modules/@shoelace-style/shoelace/dist/assets` into a public folder in your app. Then you can point the base path to that folder instead. If you'd rather not use the CDN for assets, you can create a build task that copies `node_modules/@shoelace-style/shoelace/%NPMDIR%/assets` into a public folder in your app. Then you can point the base path to that folder instead.
::: :::
## Configuration ## Configuration

Wyświetl plik

@ -20,14 +20,14 @@ Next, [include a theme](/getting-started/themes) and set the [base path](/gettin
```jsx ```jsx
// App.jsx // App.jsx
import '@shoelace-style/shoelace/dist/themes/light.css'; import '@shoelace-style/shoelace/%NPMDIR%/themes/light.css';
import { setBasePath } from '@shoelace-style/shoelace/dist/utilities/base-path'; import { setBasePath } from '@shoelace-style/shoelace/%NPMDIR%/utilities/base-path';
setBasePath('https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/cdn/'); setBasePath('https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/%CDNDIR%/');
``` ```
:::tip :::tip
If you'd rather not use the CDN for assets, you can create a [build task](https://webpack.js.org/plugins/copy-webpack-plugin/) that copies `node_modules/@shoelace-style/shoelace/dist/assets` into your app's `public` directory. Then you can point the base path to that folder instead. If you'd rather not use the CDN for assets, you can create a [build task](https://webpack.js.org/plugins/copy-webpack-plugin/) that copies `node_modules/@shoelace-style/shoelace/%NPMDIR%/assets` into your app's `public` directory. Then you can point the base path to that folder instead.
::: :::
Now you can start using components! Now you can start using components!
@ -39,7 +39,7 @@ Now you can start using components!
Every Shoelace component is available to import as a React component. Note that we're importing the `<SlButton>` _React component_ instead of the `<sl-button>` _custom element_ in the example below. Every Shoelace component is available to import as a React component. Note that we're importing the `<SlButton>` _React component_ instead of the `<sl-button>` _custom element_ in the example below.
```jsx ```jsx
import { SlButton } from '@shoelace-style/shoelace/dist/react'; import { SlButton } from '@shoelace-style/shoelace/%NPMDIR%/react';
const MyComponent = () => <SlButton variant="primary">Click me</SlButton>; const MyComponent = () => <SlButton variant="primary">Click me</SlButton>;
@ -56,7 +56,7 @@ Here's how you can bind the input's value to a state variable.
```jsx ```jsx
import { useState } from 'react'; import { useState } from 'react';
import { SlInput } from '@shoelace-style/shoelace/dist/react'; import { SlInput } from '@shoelace-style/shoelace/%NPMDIR%/react';
function MyComponent() { function MyComponent() {
const [value, setValue] = useState(''); const [value, setValue] = useState('');
@ -71,8 +71,8 @@ If you're using TypeScript, it's important to note that `event.target` will be a
```tsx ```tsx
import { useState } from 'react'; import { useState } from 'react';
import { SlInput } from '@shoelace-style/shoelace/dist/react'; import { SlInput } from '@shoelace-style/shoelace/%NPMDIR%/react';
import type SlInputElement from '@shoelace-style/shoelace/dist/components/input/input'; import type SlInputElement from '@shoelace-style/shoelace/%NPMDIR%/components/input/input';
function MyComponent() { function MyComponent() {
const [value, setValue] = useState(''); const [value, setValue] = useState('');

Wyświetl plik

@ -23,10 +23,10 @@ npm install @shoelace-style/shoelace
Next, [include a theme](/getting-started/themes) and set the [base path](/getting-started/installation#setting-the-base-path) for icons and other assets. In this example, we'll import the light theme and use the CDN as a base path. Next, [include a theme](/getting-started/themes) and set the [base path](/getting-started/installation#setting-the-base-path) for icons and other assets. In this example, we'll import the light theme and use the CDN as a base path.
```jsx ```jsx
import '@shoelace-style/shoelace/dist/themes/light.css'; import '@shoelace-style/shoelace/%NPMDIR%/themes/light.css';
import { setBasePath } from '@shoelace-style/shoelace/dist/utilities/base-path'; import { setBasePath } from '@shoelace-style/shoelace/%NPMDIR%/utilities/base-path';
setBasePath('https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/cdn/'); setBasePath('https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/%CDNDIR%/');
``` ```
:::tip :::tip

Wyświetl plik

@ -26,7 +26,7 @@ Next, [include a theme](/getting-started/themes) and set the [base path](/gettin
import '@shoelace-style/shoelace/dist/themes/light.css'; import '@shoelace-style/shoelace/dist/themes/light.css';
import { setBasePath } from '@shoelace-style/shoelace/dist/utilities/base-path'; import { setBasePath } from '@shoelace-style/shoelace/dist/utilities/base-path';
setBasePath('https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/cdn/'); setBasePath('https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/%CDNDIR%/');
``` ```
:::tip :::tip

Wyświetl plik

@ -22,8 +22,8 @@ While convenient, autoloading may lead to a [Flash of Undefined Custom Elements]
<!-- prettier-ignore --> <!-- prettier-ignore -->
```html ```html
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/cdn/themes/light.css" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/%CDNDIR%/themes/light.css" />
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/cdn/shoelace-autoloader.js"></script> <script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/%CDNDIR%/shoelace-autoloader.js"></script>
``` ```
</sl-tab-panel> </sl-tab-panel>
@ -33,8 +33,8 @@ While convenient, autoloading may lead to a [Flash of Undefined Custom Elements]
The traditional CDN loader registers all Shoelace elements up front. Note that, if you're only using a handful of components, it will be much more efficient to stick with the autoloader. However, you can also [cherry pick](#cherry-picking) components if you want to load specific ones up front. The traditional CDN loader registers all Shoelace elements up front. Note that, if you're only using a handful of components, it will be much more efficient to stick with the autoloader. However, you can also [cherry pick](#cherry-picking) components if you want to load specific ones up front.
```html ```html
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/cdn/themes/light.css" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/%CDNDIR%/themes/light.css" />
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/cdn/shoelace.js"></script> <script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/%CDNDIR%/shoelace.js"></script>
``` ```
</sl-tab-panel> </sl-tab-panel>
@ -45,7 +45,7 @@ The traditional CDN loader registers all Shoelace elements up front. Note that,
The code above will load the light theme. If you want to use the [dark theme](/getting-started/themes#dark-theme) instead, update the stylesheet as shown below and add `<html class="sl-theme-dark">` to your page. The code above will load the light theme. If you want to use the [dark theme](/getting-started/themes#dark-theme) instead, update the stylesheet as shown below and add `<html class="sl-theme-dark">` to your page.
```html ```html
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/cdn/themes/dark.css" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/%CDNDIR%/themes/dark.css" />
``` ```
### Light & Dark Theme ### Light & Dark Theme
@ -56,12 +56,12 @@ If you want to load the light or dark theme based on the user's `prefers-color-s
<link <link
rel="stylesheet" rel="stylesheet"
media="(prefers-color-scheme:light)" media="(prefers-color-scheme:light)"
href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/cdn/themes/light.css" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/%CDNDIR%/themes/light.css"
/> />
<link <link
rel="stylesheet" rel="stylesheet"
media="(prefers-color-scheme:dark)" media="(prefers-color-scheme:dark)"
href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/cdn/themes/dark.css" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/%CDNDIR%/themes/dark.css"
onload="document.documentElement.classList.add('sl-theme-dark');" onload="document.documentElement.classList.add('sl-theme-dark');"
/> />
``` ```
@ -81,8 +81,8 @@ It's up to you to make the source files available to your app. One way to do thi
Once you've done that, add the following tags to your page. Make sure to update `href` and `src` so they point to the route you created. Once you've done that, add the following tags to your page. Make sure to update `href` and `src` so they point to the route you created.
```html ```html
<link rel="stylesheet" href="/shoelace/dist/themes/light.css" /> <link rel="stylesheet" href="/shoelace/%NPMDIR%/themes/light.css" />
<script type="module" src="/shoelace/dist/shoelace.js"></script> <script type="module" src="/shoelace/%NPMDIR%/shoelace.js"></script>
``` ```
Alternatively, [you can use a bundler](#bundling). Alternatively, [you can use a bundler](#bundling).
@ -99,13 +99,13 @@ However, if you're [cherry picking](#cherry-picking) or [bundling](#bundling) Sh
```html ```html
<!-- Option 1: the data-shoelace attribute --> <!-- Option 1: the data-shoelace attribute -->
<script src="bundle.js" data-shoelace="/path/to/shoelace/dist"></script> <script src="bundle.js" data-shoelace="/path/to/shoelace/%NPMDIR%"></script>
<!-- Option 2: the setBasePath() method --> <!-- Option 2: the setBasePath() method -->
<script src="bundle.js"></script> <script src="bundle.js"></script>
<script type="module"> <script type="module">
import { setBasePath } from '@shoelace-style/shoelace/dist/utilities/base-path.js'; import { setBasePath } from '@shoelace-style/shoelace/%NPMDIR%/utilities/base-path.js';
setBasePath('/path/to/shoelace/dist'); setBasePath('/path/to/shoelace/%NPMDIR%');
</script> </script>
``` ```
@ -126,10 +126,10 @@ Cherry picking can be done from [the CDN](#cdn-installation-easiest) or from [NP
Here's an example that loads only the button component. Again, if you're not using a module resolver, you'll need to adjust the path to point to the folder Shoelace is in. Here's an example that loads only the button component. Again, if you're not using a module resolver, you'll need to adjust the path to point to the folder Shoelace is in.
```html ```html
<link rel="stylesheet" href="/path/to/shoelace/cdn/themes/light.css" /> <link rel="stylesheet" href="/path/to/shoelace/%NPMDIR%/themes/light.css" />
<script type="module" data-shoelace="/path/to/shoelace/dist"> <script type="module" data-shoelace="/path/to/shoelace/%NPMDIR%">
import '@shoelace-style/shoelace/cdn/components/button/button.js'; import '@shoelace-style/shoelace/%NPMDIR%/components/button/button.js';
// <sl-button> is ready to use! // <sl-button> is ready to use!
</script> </script>
@ -163,15 +163,15 @@ Now it's time to configure your bundler. Configurations vary for each tool, but
Once your bundler is configured, you'll be able to import Shoelace components and utilities. Once your bundler is configured, you'll be able to import Shoelace components and utilities.
```js ```js
import '@shoelace-style/shoelace/dist/themes/light.css'; import '@shoelace-style/shoelace/%NPMDIR%/themes/light.css';
import '@shoelace-style/shoelace/dist/components/button/button.js'; import '@shoelace-style/shoelace/%NPMDIR%/components/button/button.js';
import '@shoelace-style/shoelace/dist/components/icon/icon.js'; import '@shoelace-style/shoelace/%NPMDIR%/components/icon/icon.js';
import '@shoelace-style/shoelace/dist/components/input/input.js'; import '@shoelace-style/shoelace/%NPMDIR%/components/input/input.js';
import '@shoelace-style/shoelace/dist/components/rating/rating.js'; import '@shoelace-style/shoelace/%NPMDIR%/components/rating/rating.js';
import { setBasePath } from '@shoelace-style/shoelace/dist/utilities/base-path.js'; import { setBasePath } from '@shoelace-style/shoelace/%NPMDIR%/utilities/base-path.js';
// Set the base path to the folder you copied Shoelace's assets to // Set the base path to the folder you copied Shoelace's assets to
setBasePath('/path/to/shoelace/dist'); setBasePath('/path/to/shoelace/%NPMDIR%
// <sl-button>, <sl-icon>, <sl-input>, and <sl-rating> are ready to use! // <sl-button>, <sl-icon>, <sl-input>, and <sl-rating> are ready to use!
``` ```
@ -182,16 +182,16 @@ Component modules include side effects for registration purposes. Because of thi
## The difference between CDN and NPM ## The difference between CDN and NPM
You'll notice above that the CDN links all start with `/cdn/<path>` and imports using NPM use `/dist/<path>`. You'll notice above that the CDN links all start with `/%CDNDIR%/<path>` and imports using NPM use `/%NPMDIR%/<path>`.
The `/cdn` files use a different bundle from `/dist`. `/cdn` files come "prebundled" which means all dependencies are The `/%CDNDIR%` files use a different bundle from `/%NPMDIR%`. `/%CDNDIR%` files come "pre-bundled" which means all dependencies are
inlined so you do not need to worry about loading any additional libraries. `/dist` does **NOT** prebundle dependencies inlined so you do not need to worry about loading any additional libraries. `/%NPMDIR%` does **NOT** pre-bundle dependencies
allowing for your bundler of choice to more efficiently deduplicate dependencies resulting in smaller overall bundles allowing for your bundler of choice to more efficiently deduplicate dependencies resulting in smaller overall bundles
and greater code sharing. and greater code sharing.
TLDR: TLDR:
- `@shoelace-style/shoelace/cdn` is for CDN - `@shoelace-style/shoelace/%CDNDIR%` is for CDN
- `@shoelace-style/shoelace/dist` is for NPM - `@shoelace-style/shoelace/%NPMDIR%` is for NPM
This change was introduced in `v2.5.0` to address issues around installations from NPM This change was introduced in `v2.5.0` to address issues around installations from NPM
loading multiple versions of libraries such as the Lit web component library which Shoelace uses internally. loading multiple versions of libraries such as the Lit web component library which Shoelace uses internally.

Wyświetl plik

@ -28,8 +28,8 @@ Shoelace ships with a number of translations. The default is English (US), which
The location of translations depends on how you're consuming Shoelace. The location of translations depends on how you're consuming Shoelace.
- If you're using the CDN, [import them from the CDN](https://www.jsdelivr.com/package/npm/@shoelace-style/shoelace?path=dist%2Ftranslations) - If you're using the CDN, [import them from the CDN](https://www.jsdelivr.com/package/npm/@shoelace-style/shoelace?path=%CDNDIR%%2Ftranslations)
- If you're using a bundler, import them from `@shoelace-style/shoelace/dist/translations/[lang].js` - If you're using a bundler, import them from `@shoelace-style/shoelace/%NPMDIR%/translations/[lang].js`
You do not need to load translations up front. You can import them dynamically even after updating the `lang` attribute. Once a translation is registered, localized components will update automatically. You do not need to load translations up front. You can import them dynamically even after updating the `lang` attribute. Once a translation is registered, localized components will update automatically.
@ -135,4 +135,4 @@ Once your translation has been compiled to JavaScript, import it and activate it
:::tip :::tip
If your translation isn't working, make sure you're using the same localize module when importing `registerTranslation`. If you're using a different module, your translation won't be recognized. If your translation isn't working, make sure you're using the same localize module when importing `registerTranslation`. If you're using a different module, your translation won't be recognized.
::: :::

Wyświetl plik

@ -11,7 +11,7 @@ Shoelace is designed to be highly customizable through pure CSS. Out of the box,
A theme is nothing more than a stylesheet that uses the Shoelace API to define design tokens and apply custom styles to components. To create a theme, you will need a decent understanding of CSS, including [CSS Custom Properties](https://developer.mozilla.org/en-US/docs/Web/CSS/--*) and the [`::part` selector](https://developer.mozilla.org/en-US/docs/Web/CSS/::part). A theme is nothing more than a stylesheet that uses the Shoelace API to define design tokens and apply custom styles to components. To create a theme, you will need a decent understanding of CSS, including [CSS Custom Properties](https://developer.mozilla.org/en-US/docs/Web/CSS/--*) and the [`::part` selector](https://developer.mozilla.org/en-US/docs/Web/CSS/::part).
:::tip :::tip
For component developers, built-in themes are also available as JavaScript modules that export [Lit CSSResult](https://lit.dev/docs/api/styles/#CSSResult) objects. You can find them in `dist/themes/*.styles.js`. For component developers, built-in themes are also available as JavaScript modules that export [Lit CSSResult](https://lit.dev/docs/api/styles/#CSSResult) objects. You can find them in `%NPMDIR%/themes/*.styles.js`.
::: :::
## Theme Basics ## Theme Basics
@ -34,7 +34,7 @@ To activate a theme, import it and apply the theme's class to the `<html>` eleme
```html ```html
<html class="sl-theme-dark"> <html class="sl-theme-dark">
<head> <head>
<link rel="stylesheet" href="path/to/shoelace/dist/themes/dark.css" /> <link rel="stylesheet" href="path/to/shoelace/%NPMDIR%/themes/dark.css" />
</head> </head>
<body> <body>
@ -54,8 +54,8 @@ You can activate themes on various containers throughout the page. This example
```html ```html
<html> <html>
<head> <head>
<link rel="stylesheet" href="path/to/shoelace/dist/themes/light.css" /> <link rel="stylesheet" href="path/to/shoelace/%NPMDIR%/themes/light.css" />
<link rel="stylesheet" href="path/to/shoelace/dist/themes/dark.css" /> <link rel="stylesheet" href="path/to/shoelace/%NPMDIR%/themes/dark.css" />
</head> </head>
<body> <body>
@ -127,7 +127,7 @@ The dark theme works by taking the light theme's [color tokens](/tokens/color) a
To install the dark theme, add the following to the `<head>` section of your page. To install the dark theme, add the following to the `<head>` section of your page.
```html ```html
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/cdn/themes/dark.css" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/%CDNDIR%/themes/dark.css" />
``` ```
To activate the theme, apply the `sl-theme-dark` class to the `<html>` element. To activate the theme, apply the `sl-theme-dark` class to the `<html>` element.

Wyświetl plik

@ -41,8 +41,8 @@ Add the following code to your page.
<!-- prettier-ignore --> <!-- prettier-ignore -->
```html ```html
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/cdn/themes/light.css" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/%CDNDIR%/themes/light.css" />
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/cdn/shoelace-autoloader.js"></script> <script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@%VERSION%/%CDNDIR%/shoelace-autoloader.js"></script>
``` ```
Now you have access to all of Shoelace's components! Try adding a button: Now you have access to all of Shoelace's components! Try adding a button:

Wyświetl plik

@ -197,7 +197,7 @@ await nextTask('Running the TypeScript compiler', () => {
return execPromise(`tsc --project ./tsconfig.prod.json --outdir "${outdir}"`, { stdio: 'inherit' }); return execPromise(`tsc --project ./tsconfig.prod.json --outdir "${outdir}"`, { stdio: 'inherit' });
}); });
// Copy the above steps to the CDN directory directly so we dont need to twice the work for nothing. // Copy the above steps to the CDN directory directly so we don't need to twice the work for nothing.
await nextTask(`Copying Web Types, Themes, Icons, and TS Types to "${cdndir}"`, async () => { await nextTask(`Copying Web Types, Themes, Icons, and TS Types to "${cdndir}"`, async () => {
await deleteAsync(cdndir); await deleteAsync(cdndir);
await copy(outdir, cdndir); await copy(outdir, cdndir);