-
- {preheader && (
- {preheader}
- )}
+
+ {preheader && {preheader} }
{header}
-
+
{description && (
{description}
diff --git a/packages/lab/src/skip-link/SkipLink.css b/packages/lab/src/skip-link/SkipLink.css
index 1193fd89a4b..2f7b3b7b334 100644
--- a/packages/lab/src/skip-link/SkipLink.css
+++ b/packages/lab/src/skip-link/SkipLink.css
@@ -9,7 +9,9 @@
padding: 0;
overflow: hidden;
position: absolute;
-
+ display: flex;
+ align-items: center;
+ box-sizing: border-box;
color: var(--salt-content-primary-foreground);
letter-spacing: var(--salt-text-letterSpacing);
text-decoration: var(--salt-navigable-textDecoration);
@@ -23,7 +25,7 @@
.saltSkipLink:focus {
opacity: 1;
width: auto;
- height: max(var(--salt-size-base), auto);
+ height: calc(var(--salt-size-base) + var(--salt-spacing-200));
padding: var(--salt-spacing-100) var(--salt-spacing-300);
outline: var(--salt-focused-outline);
outline-offset: calc(-1 * var(--salt-focused-outlineWidth));
diff --git a/packages/lab/stories/date-picker/date-picker.stories.tsx b/packages/lab/stories/date-picker/date-picker.stories.tsx
index 4c2250a969f..c9b10e2043a 100644
--- a/packages/lab/stories/date-picker/date-picker.stories.tsx
+++ b/packages/lab/stories/date-picker/date-picker.stories.tsx
@@ -12,7 +12,7 @@ import {
ToggleButton,
} from "@salt-ds/core";
import {
- DateDetailErrorEnum,
+ DateDetailError,
type DateFrameworkType,
type ParserResult,
type TimeFields,
@@ -1577,7 +1577,7 @@ export const SingleWithCustomParser: StoryFn<
date: parsedDate.date,
value: inputDate,
errors: [
- { type: DateDetailErrorEnum.UNSET, message: "no date provided" },
+ { type: DateDetailError.UNSET, message: "no date provided" },
],
};
}
@@ -1716,7 +1716,7 @@ export const RangeWithCustomParser: StoryFn<
date: parsedDate.date,
value: inputDate,
errors: [
- { type: DateDetailErrorEnum.UNSET, message: "no date provided" },
+ { type: DateDetailError.UNSET, message: "no date provided" },
],
};
}
@@ -1797,7 +1797,7 @@ export const SingleWithCustomValidation: StoryFn<
if (date && isWeekend(date)) {
updatedDetails.errors = updatedDetails?.errors ?? [];
updatedDetails.errors?.push({
- type: DateDetailErrorEnum.INVALID_DAY,
+ type: DateDetailError.INVALID_DAY,
message: "date must be a weekday",
});
}
@@ -1844,7 +1844,7 @@ export const SingleWithCustomValidation: StoryFn<
return details;
}
details.errors = details.errors.map((error) => {
- if (error.type === DateDetailErrorEnum.NOT_A_DATE) {
+ if (error.type === DateDetailError.NOT_A_DATE) {
error.message = "valid dates are any weekday";
}
return error;
diff --git a/packages/lab/stories/dialog/dialog.qa.stories.tsx b/packages/lab/stories/dialog/dialog.qa.stories.tsx
index a3a355afe7e..e9b7cc3ecdc 100644
--- a/packages/lab/stories/dialog/dialog.qa.stories.tsx
+++ b/packages/lab/stories/dialog/dialog.qa.stories.tsx
@@ -1,4 +1,5 @@
-import { Dialog, H2 } from "@salt-ds/core";
+import { Button, Dialog } from "@salt-ds/core";
+import { CloseIcon } from "@salt-ds/icons";
import { DialogHeader } from "@salt-ds/lab";
import type { Meta, StoryFn } from "@storybook/react";
import { QAContainer, type QAContainerProps } from "docs/components";
@@ -11,7 +12,7 @@ export default {
export const DialogHeaders: StoryFn = () => (
Terms and conditions}
+ header="Terms and conditions"
style={{
width: 600,
}}
@@ -20,40 +21,47 @@ export const DialogHeaders: StoryFn = () => (
style={{
width: 600,
}}
- header={Terms and conditions }
+ header="Terms and conditions"
preheader="Ensure you read and agree to these Terms"
/>
Terms and conditions}
+ header="Terms and conditions"
preheader="Ensure you read and agree to these Terms"
description="Effective date: August 29, 2024"
/>
Terms and conditions}
+ header="Terms and conditions"
style={{
width: 600,
}}
/>
+
+
+ }
status="info"
style={{
width: 600,
}}
- header={Terms and conditions }
- preheader="Ensure you read and agree to these Terms"
+ header="Terms and conditions"
/>
+
+
+ }
status="info"
style={{
width: 600,
}}
- header={Terms and conditions }
- preheader="Ensure you read and agree to these Terms"
- description="Effective date: August 29, 2024"
+ header="Complete terms and conditions for using the services provided by our company"
/>
);
diff --git a/packages/lab/stories/dialog/dialog.stories.tsx b/packages/lab/stories/dialog/dialog.stories.tsx
index f1aaa1e77be..0ecb88f20aa 100644
--- a/packages/lab/stories/dialog/dialog.stories.tsx
+++ b/packages/lab/stories/dialog/dialog.stories.tsx
@@ -5,7 +5,6 @@ import {
DialogContent,
type DialogContentProps,
type DialogProps,
- H2,
SplitLayout,
StackLayout,
} from "@salt-ds/core";
@@ -24,7 +23,7 @@ export default {
component: Dialog,
args: {
preheader: "Settlements",
- header: Terms and conditions ,
+ header: "Terms and conditions",
description: "Effective date: August 29, 2024",
content:
"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.",
@@ -145,6 +144,12 @@ export const Default = DialogTemplate.bind({});
Default.args = {
id: "Default",
};
+export const LongTitle = DialogTemplate.bind({});
+LongTitle.args = {
+ id: "LongTitle",
+ header:
+ "Complete terms and conditions for using the services provided by our company",
+};
const AlertDialogTemplate: StoryFn<
DialogProps & { header: ReactNode; content: ReactNode }
@@ -201,23 +206,23 @@ const AlertDialogTemplate: StoryFn<
export const InfoStatus = AlertDialogTemplate.bind({});
InfoStatus.args = {
status: "info",
- header: Info ,
+ header: "Info",
};
export const SuccessStatus = AlertDialogTemplate.bind({});
SuccessStatus.args = {
status: "success",
- header: Success ,
+ header: "Success",
};
export const WarningStatus = AlertDialogTemplate.bind({});
WarningStatus.args = {
status: "warning",
- header: Warning ,
+ header: "Warning",
};
export const ErrorStatus = AlertDialogTemplate.bind({});
ErrorStatus.args = {
status: "error",
- header: Error ,
+ header: "Error",
};
diff --git a/packages/lab/stories/overlay/overlay.qa.stories.tsx b/packages/lab/stories/overlay/overlay.qa.stories.tsx
index 1c7b5a5a0c4..a0035e0a75b 100644
--- a/packages/lab/stories/overlay/overlay.qa.stories.tsx
+++ b/packages/lab/stories/overlay/overlay.qa.stories.tsx
@@ -1,6 +1,5 @@
import {
Button,
- H4,
Overlay,
OverlayPanel,
OverlayPanelContent,
@@ -29,8 +28,8 @@ export const Default: StoryFn = (props) => {
return (
= (props) => {
Show Overlay
-
+
Header block}
+ header="Guidelines for optimal use of our application"
actions={ }
/>
diff --git a/packages/lab/stories/overlay/overlay.stories.tsx b/packages/lab/stories/overlay/overlay.stories.tsx
index cf640781114..228a1f2712c 100644
--- a/packages/lab/stories/overlay/overlay.stories.tsx
+++ b/packages/lab/stories/overlay/overlay.stories.tsx
@@ -1,6 +1,5 @@
import {
Button,
- H4,
Overlay,
OverlayPanel,
OverlayPanelContent,
@@ -9,20 +8,18 @@ import {
StackLayout,
Text,
Tooltip,
- useId,
} from "@salt-ds/core";
import { CloseIcon } from "@salt-ds/icons";
import { OverlayHeader } from "@salt-ds/lab";
-import type { Meta } from "@storybook/react";
+import type { Meta, StoryFn } from "@storybook/react";
import { useState } from "react";
export default {
title: "Lab/Overlay Header",
} as Meta;
-export const Header = ({ onOpenChange }: OverlayProps) => {
+const HeaderTemplate: StoryFn = ({ onOpenChange, ...props }: OverlayProps) => {
const [open, setOpen] = useState(false);
- const id = useId();
const onChange = (newOpen: boolean) => {
setOpen(newOpen);
@@ -35,12 +32,11 @@ export const Header = ({ onOpenChange }: OverlayProps) => {
Show Overlay
- Header block} />
+
@@ -62,9 +58,26 @@ export const Header = ({ onOpenChange }: OverlayProps) => {
);
};
+export const Header = HeaderTemplate.bind({});
+Header.args = {};
+
+export const LongHeader = HeaderTemplate.bind({});
+LongHeader.args = {
+ header:
+ "Comprehensive guidelines and detailed instructions for the optimal use and application of our services to ensure maximum efficiency and user satisfaction",
+ actions: (
+
+
+
+ ),
+};
+
export const HeaderWithCloseButton = ({ onOpenChange }: OverlayProps) => {
const [open, setOpen] = useState(false);
- const id = useId();
const onChange = (newOpen: boolean) => {
setOpen(newOpen);
@@ -90,7 +103,6 @@ export const HeaderWithCloseButton = ({ onOpenChange }: OverlayProps) => {
Show Overlay
{
Header block}
+ header="Header block"
actions={ }
/>
diff --git a/packages/lab/stories/skip-link/skip-link.stories.css b/packages/lab/stories/skip-link/skip-link.stories.css
index 5dc4a6cf325..11b17307d3e 100644
--- a/packages/lab/stories/skip-link/skip-link.stories.css
+++ b/packages/lab/stories/skip-link/skip-link.stories.css
@@ -1,7 +1,7 @@
.app-header {
z-index: var(--salt-zIndex-appHeader);
}
-.header {
+.navbar {
padding-left: var(--salt-spacing-300);
padding-right: var(--salt-spacing-300);
background-color: var(--salt-container-primary-background);
@@ -17,12 +17,12 @@
margin: calc(var(--salt-spacing-300) * 2) auto;
max-width: 700px;
}
-.content-header {
+.header {
padding-top: calc(var(--salt-spacing-300) * 2);
}
.help-text {
position: absolute;
top: 0;
left: 0;
- padding: calc(var(--salt-spacing-300) * 2) var(--salt-spacing-100);
+ padding: calc(var(--salt-spacing-400) * 2) var(--salt-spacing-300);
}
diff --git a/packages/lab/stories/skip-link/skip-link.stories.tsx b/packages/lab/stories/skip-link/skip-link.stories.tsx
index 5fd9c884057..06bcbf44981 100644
--- a/packages/lab/stories/skip-link/skip-link.stories.tsx
+++ b/packages/lab/stories/skip-link/skip-link.stories.tsx
@@ -8,9 +8,11 @@ import {
GridLayout,
H1,
H2,
+ H4,
NavigationItem,
SplitLayout,
StackLayout,
+ Text,
} from "@salt-ds/core";
import { GithubIcon, StackoverflowIcon, SymphonyIcon } from "@salt-ds/icons";
import { SkipLink } from "@salt-ds/lab";
@@ -58,8 +60,10 @@ const DefaultStory: StoryFn = (args) => {
Skip to main content
-
-
+
+
+ LOGO
+
{headerItems?.map((item) => (
@@ -92,42 +96,42 @@ const DefaultStory: StoryFn = (args) => {
-
-
+
+
Explore our offering
-
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam,
consequuntur culpa dolor excepturi fugit in ipsa iusto laudantium
magnam minima necessitatibus odio qui quia repellendus sit tempore
veniam. At, veritatis.
-
+
{cardHeaders.map((title) => {
return (
{title}
-
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Aliquam, consequuntur culpa dolor excepturi.
-
-
+
+
Fugit in ipsa iusto laudantium magnam minima
necessitatibus odio qui quia repellendus sit tempore
veniam. At, veritatis.
-
+
);
})}
-
+
See all themes}
/>
-
+
Click here and press the Tab key to see the Skip Link
-
+
);
diff --git a/scripts/makeTypings.mjs b/scripts/makeTypings.mjs
index 240329f1c0a..93a129b5d3a 100644
--- a/scripts/makeTypings.mjs
+++ b/scripts/makeTypings.mjs
@@ -24,8 +24,8 @@ export function reportTSDiagnostics(diagnostics) {
}
}
-export async function makeTypings(outDir) {
- const typescriptConfig = await getTypescriptConfig(cwd);
+export async function makeTypings(outDir, srcDir = path.join(cwd, "src")) {
+ const typescriptConfig = await getTypescriptConfig(cwd, srcDir);
console.log("generating .d.ts files");
diff --git a/scripts/utils.mjs b/scripts/utils.mjs
index 68d03c3fb8b..731f6f3b7ef 100644
--- a/scripts/utils.mjs
+++ b/scripts/utils.mjs
@@ -1,17 +1,16 @@
-import path from "node:path";
import { getTsconfig } from "get-tsconfig";
export function distinct(arr) {
return [...new Set(arr)];
}
-export async function getTypescriptConfig(cwd) {
+export async function getTypescriptConfig(cwd, srcDir) {
const typescriptConfig = {};
const result = getTsconfig(cwd);
Object.assign(typescriptConfig, result.config, {
- include: [path.join(cwd, "src")],
+ include: [srcDir],
exclude: distinct(
[
// all TS test files, regardless whether co-located or in test/ etc
diff --git a/site/docs/components/link/examples.mdx b/site/docs/components/link/examples.mdx
index a02f7c3c6e6..a8cffc74fb6 100644
--- a/site/docs/components/link/examples.mdx
+++ b/site/docs/components/link/examples.mdx
@@ -66,4 +66,22 @@ The default variant is `primary`.
+
+
+## Render prop - element
+
+Using the `render` prop, you can customize the element rendered by the Link. Props defined on the JSX element will be merged with props from the Link.
+
+
+
+
+
+## Render prop - callback
+
+The `render` prop can also accept a function. This approach allows more control over how props are merged, allowing for more precise customization of the component's behavior.
+
+When a function is passed to the `render` prop, it's your responsibility to merge props within the function itself.
+
+
+
diff --git a/site/docs/components/localization-provider/usage.mdx b/site/docs/components/localization-provider/usage.mdx
index 5fc51dcafce..83b40e0e80f 100644
--- a/site/docs/components/localization-provider/usage.mdx
+++ b/site/docs/components/localization-provider/usage.mdx
@@ -37,25 +37,25 @@ To import your chosen adapter adapter use one of the following :
### date-fns
```
-import { AdapterDateFns } from "@salt-ds/date-adapters";
+import { AdapterDateFns } from "@salt-ds/date-adapters/date-fns";
```
### dayjs
```
-import { AdapterDayJs } from "@salt-ds/date-adapters";
+import { AdapterDayJs } from "@salt-ds/date-adapters/dayjs";
```
### luxon
```
-import { AdapterLuxon } from "@salt-ds/date-adapters";
+import { AdapterLuxon } from "@salt-ds/date-adapters/luxon";
```
### moment (legacy)
```
-import { AdapterMoment } from "@salt-ds/date-adapters";
+import { AdapterMoment } from "@salt-ds/date-adapters/moment";
```
## Usage
@@ -69,6 +69,7 @@ Each adapter imports the date library defined by your peer dependency but for da
Passing `dayjs` to `AdapterDayJs` enables you to preconfigure defaults.
```
+import { AdapterDayJs } from "@salt-ds/date-adapters/dayjs";
import dayjs from "dayjs";
dayjs.tz.setDefault('America/New_York');
@@ -78,6 +79,7 @@ const dayjsAdapter = new AdapterDayJs(locale, dayjs);
Passing `moment-timezone` to `AdapterMoment` adapter enables timezone support.
```
+import { AdapterMoment } from "@salt-ds/date-adapters/moment";
import moment from "moment-timezone";
const momentAdapter = new AdapterMoment(locale, moment);
@@ -376,7 +378,7 @@ Not normally necessary, but in order to add a new adapter that is a valid `TDate
/**
* To add a new adapter, then, add the adapter's date object to `DateFrameworkTypeMap` interface
*/
- declare module "./types" {
+ declare module "@salt-ds/date-adapters" {
interface DateFrameworkTypeMap {
luxon: DateTime;
}
diff --git a/site/docs/components/navigation-item/examples.mdx b/site/docs/components/navigation-item/examples.mdx
index 2ecf93de650..99986415683 100644
--- a/site/docs/components/navigation-item/examples.mdx
+++ b/site/docs/components/navigation-item/examples.mdx
@@ -128,9 +128,9 @@ will be created in the DOM as an `` with merged props
Using the `render` prop, you can customize the element rendered by the `NavigationItem`.
-The render prop can also accept a function. This approach allows more control over how props are merged, allowing for more precise customization of the component's behavior.
+The `render` prop can also accept a function. This approach allows more control over how props are merged, allowing for more precise customization of the component's behavior.
-When a function is passed to the render prop, it's your responsibility to merge props within the function itself.
+When a function is passed to the `render` prop, it's your responsibility to merge props within the function itself.
diff --git a/site/docs/components/skip-link/accessibility.mdx b/site/docs/components/skip-link/accessibility.mdx
new file mode 100644
index 00000000000..5e9d23449e7
--- /dev/null
+++ b/site/docs/components/skip-link/accessibility.mdx
@@ -0,0 +1,38 @@
+---
+title:
+ $ref: ./#/title
+layout: DetailComponent
+sidebar:
+ exclude: true
+data:
+ $ref: ./#/data
+---
+
+## Keyboard interactions
+
+
+
+
+- When focus moves into the webpage, places focus on the skip link.
+- If focus is on the skip link, moves focus to the next focusable element on the page, usually in the header.
+
+
+
+
+- If focus is on the skip link, closes it and sets focus to the previous focusable element, usually the last browser control.
+- If focus is on the main content of the page, sets focus to the previous focusable element, usually the last item in the header.
+
+
+
+
+- If focus is on the skip link, activates it, moving focus to the targeted element at the beginning of the main content of the page.
+
+
+
+
+## References
+
+- https://www.w3.org/WAI/test-evaluate/easy-checks/skip-link/
+- https://www.w3.org/TR/2016/NOTE-WCAG20-TECHS-20161007/G1
+- https://www.w3.org/WAI/WCAG22/Understanding/bypass-blocks
+- https://webaim.org/techniques/skipnav/
diff --git a/site/docs/components/skip-link/examples.mdx b/site/docs/components/skip-link/examples.mdx
new file mode 100644
index 00000000000..092fa1acb63
--- /dev/null
+++ b/site/docs/components/skip-link/examples.mdx
@@ -0,0 +1,20 @@
+---
+title:
+ $ref: ./#/title
+layout: DetailComponent
+sidebar:
+ exclude: true
+data:
+ $ref: ./#/data
+---
+
+
+
+
+
+## Default
+
+Skip links stay hidden ensuring they aren’t intrusive until accessed through keyboard navigation. Once activated, skip links shift focus to the main content of the web application and hide again.
+
+
+
diff --git a/site/docs/components/skip-link/index.mdx b/site/docs/components/skip-link/index.mdx
new file mode 100644
index 00000000000..3498a713f10
--- /dev/null
+++ b/site/docs/components/skip-link/index.mdx
@@ -0,0 +1,10 @@
+---
+title: Skip link
+data:
+ description: "`SkipLink` enable screen readers and keyboard users to bypass navigation and access main content directly, which is crucial for those with motor disabilities. These links help users avoid repetitive actions, making navigation more efficient and reducing accessibility barriers."
+ sourceCodeUrl: "https://github.com/jpmorganchase/salt-ds/tree/main/packages/lab/src/skip-link"
+ package:
+ name: "@salt-ds/lab"
+ relatedComponents: [{ name: "Link", relationship: "similarTo" }]
+layout: DetailComponent
+---
diff --git a/site/docs/components/skip-link/usage.mdx b/site/docs/components/skip-link/usage.mdx
new file mode 100644
index 00000000000..7d946885ab3
--- /dev/null
+++ b/site/docs/components/skip-link/usage.mdx
@@ -0,0 +1,33 @@
+---
+title:
+ $ref: ./#/title
+layout: DetailComponent
+sidebar:
+ exclude: true
+data:
+ $ref: ./#/data
+---
+
+## Using the component
+
+Skip links should be the first focusable element, placed in the screen’s top-left corner. This allows keyboard and screen reader users to easily bypass headers and reach the main content. For more details, see the [App header anatomy](/salt/patterns/app-header#anatomy).
+
+### When to use
+
+Consider using skip links to:
+
+- Bypass repetitive navigation or elements at the top of a page, providing direct access to the main content.
+- Ensure screen reader and keyboard users can efficiently reach key sections of your web application.
+- Prevent users from repeatedly hearing header and navigation content on every page before accessing the main content.
+
+## Import
+
+To import `SkipLink` from the lab Salt package, use:
+
+```js
+import { SkipLink } from "@salt-ds/lab";
+```
+
+## Props
+
+
diff --git a/site/docs/foundations/shadow.mdx b/site/docs/foundations/elevation/index.mdx
similarity index 97%
rename from site/docs/foundations/shadow.mdx
rename to site/docs/foundations/elevation/index.mdx
index 61f0e111c8f..8f10a5e52fb 100644
--- a/site/docs/foundations/shadow.mdx
+++ b/site/docs/foundations/elevation/index.mdx
@@ -2,6 +2,7 @@
title: Shadow
layout: DetailTechnical
sidebar:
+ groupLabel: Elevation
priority: 4
---
@@ -70,4 +71,4 @@ A scrim is a complimentary darkened or lightened surface that obscures the backg
alt="Diagram showing a scrim on an interface."
/>
-:fragment{src="./fragments/feedback.mdx"}
+:fragment{src="../fragments/feedback.mdx"}
diff --git a/site/docs/foundations/elevation/z-index.mdx b/site/docs/foundations/elevation/z-index.mdx
new file mode 100644
index 00000000000..021992da1f8
--- /dev/null
+++ b/site/docs/foundations/elevation/z-index.mdx
@@ -0,0 +1,32 @@
+---
+title: Z-Index
+layout: DetailTechnical
+sidebar:
+ priority: 4
+---
+
+Z-index is a CSS property that controls how elements stack on top of each other. The stack order is defined by an element with a higher z-index appearing on top of an element with a lower z-index.
+
+Z-index and shadow are used together to help distinguish each layer in the stack. Shadow provides the visual element and z-index provides the structural element. Please refer to the [shadow](/salt/foundations/shadow) foundation page if you're using z-index.
+
+## Z-Index ramp
+
+Salt provides z-index tokens that determine an item’s position in the layering order. By providing consistent z-indexes, the design system ensures a predictable hierarchy of visual elements when stacked on top of one another.
+
+
+
+| Token | Value |
+| ---------------------- | ----- |
+| `-zIndex-default` | 1 |
+| `-zIndex-appHeader` | 1000 |
+| `-zIndex-drawer` | 1200 |
+| `-zIndex-modal` | 1300 |
+| `-zIndex-notification` | 1400 |
+| `-zIndex-dragObject` | 1420 |
+| `-zIndex-contextMenu` | 1450 |
+| `-zIndex-flyover` | 1500 |
+
+:fragment{src="../fragments/feedback.mdx"}
diff --git a/site/docs/getting-started/designing/index.mdx b/site/docs/getting-started/designing/index.mdx
index 63611616844..8d93341cf8f 100644
--- a/site/docs/getting-started/designing/index.mdx
+++ b/site/docs/getting-started/designing/index.mdx
@@ -7,168 +7,154 @@ sidebar:
Salt provides a comprehensive set of components and styles, which include themes, typography, color palettes, iconography and more. Use the components as they are, out of the box, or adapt them to suit the needs of your business or application.
-## Accessibility first
+
-One of our main objectives is to offer a complete solution for building great, accessible experiences.
+New Salt DS Figma libraries are live! Plan your migration now to ensure a seamless transition before the existing libraries are unpublished. We’re here to help!
-To ensure the Salt Design System is as accessible and inclusive as possible, we thoroughly test all our components against WCAG 2.1 AA criteria. This includes checking that they:
+**When can you expect this change?**
-- Meet color contrast ratios across small and large text, for best legibility.
-- Reduce users’ cognitive load—with imagery, text size and behavior collectively indicating a clear hierarchy of information.
-- Are optimized for keyboard input and screen readers, using ARIA roles, states and properties that comply with accessibility standards.
+- New libraries published: January 6th, 2025
+- Existing libraries retired: Immediately after release
+- Existing libraries unpublished: End of day, February 28th.
+
+For more details, read our [Migration Guide](https://go/salt-ds-internal/migration-strategies/salt-ds-figma-libraries/index). Have questions? Visit our [support page](https://go/salt-ds-internal/support) or [contact us](/salt/support-and-contributions/index).
+
+
## What you’ll need
To start designing with Salt, you should:
- Have an active Figma account.
-- Install the Salt font libraries, Open Sans and PT Mono. If you don’t already have them, you can [download them from Google Fonts](https://fonts.google.com/share?selection.family=Open+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,300;1,400;1,500;1,600;1,700;1,800|PT+Mono).
-
-## The step-by-step process
-
-### 1. Set up the Figma libraries
-
-We maintain a comprehensive set of up-to-date libraries in Figma, to help you make beautiful, consistently designed UIs and applications.
-
-There are two ways of accessing the libraries—as a J.P. Morgan employee or as a Figma Community user.
-
-#### J.P. Morgan employees
-
-Use the Salt Design System team space to view working files and our comprehensive component guides. You can also instantly add components and styling to your designs.
-
-
- }
- description={
-
- To start using the Salt libraries, enable them directly from the “Assets”
- panel within your Figma file.
-
- }
- url="https://www.figma.com/files/project/72279506"
- footerText="Explore the Salt team space"
- keylineColor="var(--site-tertiary-accent-orange)"
- keyLineAnimation={false}
-/>
-
-#### Community users
-
-If you’re not a J.P. Morgan employee, you can still use Salt components. Our asset and style libraries are publicly available via the Figma Community.
-
-To use the libraries, duplicate them to your own Figma account. Once the libraries are in your drafts, publish the Salt components within your own team or organization space to use them in your design work. Read more about [Community files](https://help.figma.com/hc/en-us/articles/360038510873).
-
- }
- description={
-
- To start using the Salt libraries, search for the{" "}
- @jpmorgan_salt handle in the
- Figma Community.
-
- }
+- To use the Salt typography style, install the Open Sans, PT Mono, and Amplitude fonts. If you don't already have them, you can [download Open Sans and PT Mono from Google Fonts](https://fonts.google.com/share?selection.family=Open+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,300;1,400;1,500;1,600;1,700;1,800|PT+Mono). If you are a JPMC employee, you can download the Amplitude font from Self Service.
+
+## Set up the Figma libraries
+
+We maintain a comprehensive set of up-to-date libraries in Figma, to help you make beautiful, consistently designed UIs and applications. If you want to start using Salt Design System for your project, first you need to set up the Salt libraries on your Figma.
+
+
+
+
+To start using the Salt libraries, enable them directly from the “Assets” panel within your Figma file.
+
+
+
-
-
-
-If you’re a community user, you’ll need to follow a migration process once you’ve duplicated the Salt libraries to your Figma project. This involves relinking the components, from your drafts.
-
-To simplify this process, [install this relinker plugin](https://www.figma.com/community/plugin/981892464363185469/Component-Relinker). It automatically relinks components from one organization to another.
+ footerText="Explore the Community"
+ keylineColor="blue"
+ >
+To start using the Salt libraries, search for the **@jpmorgan_salt** handle in the Figma Community.
+
-For more guidance on migrating files, [watch this video from Figma](https://www.loom.com/share/c85f866041e146e3855c7db38a1ae4bc).
-
-
-
-### 2. Add components to your designs
-
-To start using our components, follow the instructions below.
+
-Access the components in the left-hand panel using the “Assets” tab. Click on
-the book icon and search for “Salt” in Libraries.
+1\. Start by opening a new design file in Figma. You’ll notice some pre-installed libraries in the assets panel. Click on the library icon located in the assets panel to manage your libraries.
-Switch on the library you need, for example, Components (Light or Dark), Mode,
-Theme Palette, Typography, Icons, Layout Grid, etc.
+2\. Identify any libraries you don’t need and click the “Remove” button on the right side to declutter your workspace.
-Use the search function to find the component you need and then drag it to
-your canvas to use it.
+3\. Once your workspace is clean, click the “Browse team libraries” button to search for and install new libraries.
-To change density and further manipulate the setup, use the contextual panel
-on the right-hand side.
+4\. In the search field, type “Salt DS” to see the Salt DS libraries.
-
+
+
+5\. Click the “Add to file” button to include a Salt DS library in your design file. For details on each library, see the section below.
+
+
-#### Swapping from light to dark mode and vice versa
+
-If you’ve created your design in one mode and need to change it, use Figma’s Swap Library function to update it instantly—without having to start again.
+6\. Now, you will be able to see the available Salt DS libraries in the assets panel. You can start using it in your design projects.
-Learn more about [how to swap libraries in Figma](https://help.figma.com/hc/en-us/articles/4404856784663-Swap-style-and-component-libraries#:~:text=Swap%20library%20lets%20you%20replace,style%20or%20component%20name%20only).
+
-### 3. Apply semantic colors
+
-Semantic colors are the light and dark theme libraries that define colors for specific uses, for example, for containers, separators, actionable components, etc. Colors are preassigned to components, but you can also apply them in your designs.
+## Salt DS libraries
-To access the full range of semantic colors in Figma, you need to enable the Theme Palette library as follows:
+Salt offers six libraries in Figma. Install the library that best suits your needs.
-- Open the “Assets” panel on the left-hand menu.
-- Select the book icon to open the libraries, and then search for “Theme Palette.”
-- Enable the library to access the full range of Salt colors.
-- Apply the colors using the Fill area (as fill or stroke) that’s within the design panel on the right-hand side of the Figma UI.
+
-### 4. Select icons, if needed
+| Library | Description |
+| ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Salt DS Components and Patterns | This library includes all Salt DS components and patterns that are represented in code and are documented on the site. To use Salt components and patterns directly, please install this library. |
+| Salt DS Themes | This library includes all typography and effect styles as well as all color, size, and spacing variables needed for the themes available within the components and patterns library. All variables are reflective of the design tokens in code. |
+| Salt DS Assets | This library offers Salt icons and country symbols. |
+| Salt DS JPM Brand Colors | This library provides variables for each foundational color needed for the Salt DS JPM Brand theme. |
+| Salt DS Legacy (UITK) Colors | This library provides variables for each foundational color needed for the Salt DS Legacy (UITK) theme. |
+| Salt DS Logos | This library contains logo variations, including J.P. Morgan, Chase, and dual brand logos. This library is for internal JPMC use only. |
-Icons are available in SVG format, in three sizes (large, medium and small) and in all four densities.
+
-Although icons are embedded within all of our components, you can change an icon to one that’s more suitable to your specific use case. To do this directly from the icon library, swap the instance using the variants panel on the right-hand side.
+## Migrating from other libraries
-
+If you are migrating from other libraries, including Salt (Next), Salt Light, Dark libraries, and UITK, please refer to our [migration guide](https://go/salt-ds-internal/migration-strategies/salt-ds-figma-libraries/index)(JPMC employees only).
-Swapping an icon in Figma
+## Need further assistance?
-
+If you encounter any issues or need additional help despite following the guide, please don’t hesitate to reach out. Our support team is here to assist you.
-
+
+
+
+Visit our support page for expert assistance (JPMC employees only).
+
-For help when manually installing Figma, visit the [Figma support page](https://help.figma.com/hc/en-us/articles/360041057214-Get-help-from-the-Figma-Support-team).
-If you have any questions about Salt’s libraries, please [contact us](../support-and-contributions/).
+
+ Reach out via email for personalized support.
+
-
+
diff --git a/site/docs/getting-started/index.mdx b/site/docs/getting-started/index.mdx
index 1ebc860e7c0..c6ac23443a6 100644
--- a/site/docs/getting-started/index.mdx
+++ b/site/docs/getting-started/index.mdx
@@ -1,5 +1,5 @@
---
-title: Getting started
+title: Get started
layout: DetailTechnical
sidebar:
label: Overview
diff --git a/site/docs/index.mdx b/site/docs/index.mdx
index bc3e65c6894..1a74a6e4b04 100644
--- a/site/docs/index.mdx
+++ b/site/docs/index.mdx
@@ -9,7 +9,7 @@ frameOverrides:
menu:
- title: About
link: /salt/about/index
- - title: Getting started
+ - title: Get started
link: /salt/getting-started/index
- title: Foundations
link: /salt/foundations/index
@@ -19,6 +19,8 @@ frameOverrides:
link: /salt/components/index
- title: Patterns
link: /salt/patterns/index
+ - title: Support
+ link: /salt/support-and-contributions/index
footer:
links:
- label: Terms of use
diff --git a/site/public/img/design-getting-started/assets1.png b/site/public/img/design-getting-started/assets1.png
index 886637d4cd8..0d9595b8674 100644
Binary files a/site/public/img/design-getting-started/assets1.png and b/site/public/img/design-getting-started/assets1.png differ
diff --git a/site/public/img/design-getting-started/assets2.png b/site/public/img/design-getting-started/assets2.png
index dabbff2d2bf..6fee7b1ea88 100644
Binary files a/site/public/img/design-getting-started/assets2.png and b/site/public/img/design-getting-started/assets2.png differ
diff --git a/site/public/img/design-getting-started/assets3.png b/site/public/img/design-getting-started/assets3.png
index ff4dad4375c..e79e2509fb5 100644
Binary files a/site/public/img/design-getting-started/assets3.png and b/site/public/img/design-getting-started/assets3.png differ
diff --git a/site/public/img/design-getting-started/assets4.png b/site/public/img/design-getting-started/assets4.png
index fb9f773ae19..9a0ca17856d 100644
Binary files a/site/public/img/design-getting-started/assets4.png and b/site/public/img/design-getting-started/assets4.png differ
diff --git a/site/public/img/design-getting-started/assets5.png b/site/public/img/design-getting-started/assets5.png
new file mode 100644
index 00000000000..aad0b84d70b
Binary files /dev/null and b/site/public/img/design-getting-started/assets5.png differ
diff --git a/site/public/img/design-getting-started/assets6.png b/site/public/img/design-getting-started/assets6.png
new file mode 100644
index 00000000000..a0861784889
Binary files /dev/null and b/site/public/img/design-getting-started/assets6.png differ
diff --git a/site/public/img/foundations/z-index.png b/site/public/img/foundations/z-index.png
new file mode 100644
index 00000000000..ef2e8156b4a
Binary files /dev/null and b/site/public/img/foundations/z-index.png differ
diff --git a/site/src/components/app-header/AppHeader.tsx b/site/src/components/app-header/AppHeader.tsx
index d2f163aa5be..43891778480 100644
--- a/site/src/components/app-header/AppHeader.tsx
+++ b/site/src/components/app-header/AppHeader.tsx
@@ -9,7 +9,7 @@ import {
Tooltip,
useBreakpoint,
} from "@salt-ds/core";
-import { GithubIcon, HelpIcon } from "@salt-ds/icons";
+import { GithubIcon } from "@salt-ds/icons";
import { Logo, LogoImage } from "@salt-ds/lab";
import { useRouter } from "next/navigation";
import type { FC } from "react";
@@ -36,11 +36,6 @@ const createDrawerMenu = (menu: TabsMenu): SidebarItem[] =>
}, [] as SidebarItem[]);
const actions: TabsMenu = [
- {
- title: "Support",
- link: "/salt/support-and-contributions/index",
- type: TabMenuItemType.LINK,
- },
{
title: "Github repository",
link: "https://github.com/jpmorganchase/salt-ds",
@@ -126,28 +121,16 @@ export const AppHeader: FC = ({
{!isMobileOrTablet && (
- <>
-
-
-
-
-
-
-
-
-
-
- >
+
+
+
+
+
)}
diff --git a/site/src/components/callout/Callout.module.css b/site/src/components/callout/Callout.module.css
index 35978cda36f..19208de8255 100644
--- a/site/src/components/callout/Callout.module.css
+++ b/site/src/components/callout/Callout.module.css
@@ -1,23 +1,7 @@
-.callout {
- --callout-color: var(--site-tertiary-accent-teal);
+.content p:first-child {
+ margin-top: 0;
}
-.callout hr {
- border: 0;
- margin-bottom: var(--salt-size-unit);
- margin-top: calc(3 * var(--salt-size-unit));
- background-color: var(--callout-color);
- height: 3px;
-}
-
-.title {
- color: var(--callout-color);
- font-size: var(--salt-text-h4-fontSize);
- font-weight: var(--salt-text-h4-fontWeight-strong);
- line-height: var(--salt-text-h4-lineHeight);
- margin-bottom: var(--salt-size-unit);
-}
-
-.content {
- margin-bottom: 1em;
+.content p:last-child {
+ margin-bottom: 0;
}
diff --git a/site/src/components/callout/Callout.tsx b/site/src/components/callout/Callout.tsx
index 78fb1c01f77..7feb5df61c3 100644
--- a/site/src/components/callout/Callout.tsx
+++ b/site/src/components/callout/Callout.tsx
@@ -1,3 +1,4 @@
+import { Banner, BannerContent, H4, StackLayout, Text } from "@salt-ds/core";
import type { ReactNode } from "react";
import styles from "./Callout.module.css";
@@ -5,10 +6,13 @@ type CalloutProps = { title: string; children: ReactNode };
export const Callout = ({ title, children }: CalloutProps) => {
return (
-
-
-
{title}
-
{children}
-
+
+
+
+ {title}
+ {children}
+
+
+
);
};
diff --git a/site/src/components/card/Card.module.css b/site/src/components/card/Card.module.css
index a748c8c2403..290161193e6 100644
--- a/site/src/components/card/Card.module.css
+++ b/site/src/components/card/Card.module.css
@@ -73,7 +73,7 @@
}
.cardDescription {
- color: var(--salt-content-secondary-foreground);
+ color: var(--salt-content-primary-foreground);
}
.inlineCardContent {
diff --git a/site/src/components/components/LivePreview.tsx b/site/src/components/components/LivePreview.tsx
index 1e4520ccef1..d1c08db6e79 100644
--- a/site/src/components/components/LivePreview.tsx
+++ b/site/src/components/components/LivePreview.tsx
@@ -14,7 +14,7 @@ import useIsMobileView from "../../utils/useIsMobileView";
import { Pre } from "../mdx/pre";
import { useLivePreviewControls } from "./useLivePreviewControls";
-import { AdapterDateFns } from "@salt-ds/date-adapters";
+import { AdapterDateFns } from "@salt-ds/date-adapters/date-fns";
import { LocalizationProvider } from "@salt-ds/lab";
import styles from "./LivePreview.module.css";
diff --git a/site/src/examples/calendar/WithLocale.tsx b/site/src/examples/calendar/WithLocale.tsx
index c10bd40a986..81030819829 100644
--- a/site/src/examples/calendar/WithLocale.tsx
+++ b/site/src/examples/calendar/WithLocale.tsx
@@ -1,4 +1,4 @@
-import { AdapterDateFns } from "@salt-ds/date-adapters";
+import { AdapterDateFns } from "@salt-ds/date-adapters/date-fns";
import {
Calendar,
CalendarGrid,
diff --git a/site/src/examples/date-picker/SingleWithCustomParser.tsx b/site/src/examples/date-picker/SingleWithCustomParser.tsx
index f91accf8f29..c2f6501bbfe 100644
--- a/site/src/examples/date-picker/SingleWithCustomParser.tsx
+++ b/site/src/examples/date-picker/SingleWithCustomParser.tsx
@@ -4,7 +4,7 @@ import {
FormFieldLabel as FormLabel,
} from "@salt-ds/core";
import {
- DateDetailErrorEnum,
+ DateDetailError,
type DateFrameworkType,
type ParserResult,
} from "@salt-ds/date-adapters";
@@ -40,7 +40,7 @@ export const SingleWithCustomParser = (): ReactElement => {
>(null);
const handleSelectionChange = useCallback(
(
- event: SyntheticEvent,
+ _event: SyntheticEvent,
date: SingleDateSelection
| null,
details: DateInputSingleDetails | undefined,
) => {
@@ -83,7 +83,7 @@ export const SingleWithCustomParser = (): ReactElement => {
date: parsedDate.date,
value: inputDate,
errors: [
- { type: DateDetailErrorEnum.UNSET, message: "no date provided" },
+ { type: DateDetailError.UNSET, message: "no date provided" },
],
};
}
diff --git a/site/src/examples/dialog/WithHeader.tsx b/site/src/examples/dialog/WithHeader.tsx
index 14e2902a464..413511f99d9 100644
--- a/site/src/examples/dialog/WithHeader.tsx
+++ b/site/src/examples/dialog/WithHeader.tsx
@@ -3,7 +3,6 @@ import {
Dialog,
DialogActions,
DialogContent,
- H2,
H3,
StackLayout,
useId,
@@ -44,7 +43,7 @@ export const WithHeader = (): ReactElement => {
Terms and conditions}
+ header="Terms and conditions"
description="Effective date: August 29, 2024"
actions={closeButton}
/>
diff --git a/site/src/examples/link/RenderElement.tsx b/site/src/examples/link/RenderElement.tsx
new file mode 100644
index 00000000000..a7d02ee1014
--- /dev/null
+++ b/site/src/examples/link/RenderElement.tsx
@@ -0,0 +1,19 @@
+import { Link, Text } from "@salt-ds/core";
+import type { ReactElement } from "react";
+import styles from "./index.module.css";
+
+const CustomLinkImplementation = (props: any) => (
+
+ Your own Link implementation
+
+);
+
+export const RenderElement = (): ReactElement => {
+ return (
+ }
+ />
+ );
+};
diff --git a/site/src/examples/link/RenderProp.tsx b/site/src/examples/link/RenderProp.tsx
new file mode 100644
index 00000000000..d36a6b20837
--- /dev/null
+++ b/site/src/examples/link/RenderProp.tsx
@@ -0,0 +1,19 @@
+import { Link, Text } from "@salt-ds/core";
+import type { ReactElement } from "react";
+import styles from "./index.module.css";
+
+const CustomLinkImplementation = (props: any) => (
+
+ Your own Link implementation
+
+);
+
+export const RenderProp = (): ReactElement => {
+ return (
+ }
+ />
+ );
+};
diff --git a/site/src/examples/link/index.ts b/site/src/examples/link/index.ts
index 8a3cedda73b..cdf3700890c 100644
--- a/site/src/examples/link/index.ts
+++ b/site/src/examples/link/index.ts
@@ -3,3 +3,5 @@ export * from "./OpenInANewTab";
export * from "./Variant";
export * from "./Color";
export * from "./Visited";
+export * from "./RenderElement";
+export * from "./RenderProp";
diff --git a/site/src/examples/localization-provider/Locale.tsx b/site/src/examples/localization-provider/Locale.tsx
index f173748c36e..dba9220f0c2 100644
--- a/site/src/examples/localization-provider/Locale.tsx
+++ b/site/src/examples/localization-provider/Locale.tsx
@@ -4,6 +4,10 @@ import {
RadioButton,
RadioButtonGroup,
} from "@salt-ds/core";
+import { AdapterDateFns } from "@salt-ds/date-adapters/date-fns";
+import { AdapterDayjs } from "@salt-ds/date-adapters/dayjs";
+import { AdapterLuxon } from "@salt-ds/date-adapters/luxon";
+import { AdapterMoment } from "@salt-ds/date-adapters/moment";
import {
Calendar,
CalendarGrid,
@@ -13,10 +17,6 @@ import {
} from "@salt-ds/lab";
import { type ChangeEventHandler, type ReactElement, useState } from "react";
import "dayjs/locale/en";
-import { AdapterDateFns } from "@salt-ds/date-adapters";
-import { AdapterDayjs } from "@salt-ds/date-adapters";
-import { AdapterLuxon } from "@salt-ds/date-adapters";
-import { AdapterMoment } from "@salt-ds/date-adapters";
import moment from "moment";
import "moment/locale/zh-cn"; // Import the Chinese locale
import { enUS as dateFnsEnUs } from "date-fns/locale";
diff --git a/site/src/examples/localization-provider/MinMax.tsx b/site/src/examples/localization-provider/MinMax.tsx
index 1751da85710..408e7b67886 100644
--- a/site/src/examples/localization-provider/MinMax.tsx
+++ b/site/src/examples/localization-provider/MinMax.tsx
@@ -1,5 +1,6 @@
import { FormField, FormFieldHelperText, FormFieldLabel } from "@salt-ds/core";
-import { AdapterDateFns, type DateFrameworkType } from "@salt-ds/date-adapters";
+import type { DateFrameworkType } from "@salt-ds/date-adapters";
+import { AdapterDateFns } from "@salt-ds/date-adapters/date-fns";
import {
Calendar,
CalendarGrid,
diff --git a/site/src/examples/overlay/WithHeader.tsx b/site/src/examples/overlay/WithHeader.tsx
index 4a3b4099956..7d0afa0bcb4 100644
--- a/site/src/examples/overlay/WithHeader.tsx
+++ b/site/src/examples/overlay/WithHeader.tsx
@@ -4,7 +4,6 @@ import {
OverlayPanel,
OverlayPanelContent,
OverlayTrigger,
- useId,
} from "@salt-ds/core";
import { CloseIcon } from "@salt-ds/icons";
import { OverlayHeader } from "@salt-ds/lab";
@@ -12,7 +11,6 @@ import { type ReactElement, useState } from "react";
export const WithHeader = (): ReactElement => {
const [open, setOpen] = useState(false);
- const id = useId();
const onOpenChange = (newOpen: boolean) => setOpen(newOpen);
@@ -32,11 +30,8 @@ export const WithHeader = (): ReactElement => {
Show Overlay
-
- Title}
- actions={headerActions}
- />
+
+
Content of Overlay
diff --git a/site/src/examples/skip-link/Default.module.css b/site/src/examples/skip-link/Default.module.css
new file mode 100644
index 00000000000..25c511be15e
--- /dev/null
+++ b/site/src/examples/skip-link/Default.module.css
@@ -0,0 +1,32 @@
+.container {
+ position: relative;
+}
+.help {
+ margin-bottom: var(--salt-spacing-400);
+}
+.navbar {
+ padding-left: var(--salt-spacing-300);
+ padding-right: var(--salt-spacing-300);
+ background-color: var(--salt-container-primary-background);
+ border-bottom: var(--salt-size-border) var(--salt-container-borderStyle) var(--salt-separable-primary-borderColor);
+}
+.navigation {
+ display: flex;
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+.center {
+ margin: auto;
+ padding: var(--salt-spacing-200);
+ max-width: 700px;
+}
+.section {
+ padding-top: var(--salt-spacing-200);
+}
+.header {
+ margin-bottom: var(--salt-spacing-300);
+}
+.section h2 {
+ margin-top: calc(var(--salt-spacing-300) + var(--salt-spacing-200));
+}
diff --git a/site/src/examples/skip-link/Default.tsx b/site/src/examples/skip-link/Default.tsx
new file mode 100644
index 00000000000..4b20a72469f
--- /dev/null
+++ b/site/src/examples/skip-link/Default.tsx
@@ -0,0 +1,95 @@
+import {
+ BorderItem,
+ BorderLayout,
+ Button,
+ FlexItem,
+ FlexLayout,
+ H2,
+ H4,
+ NavigationItem,
+ SplitLayout,
+ StackLayout,
+} from "@salt-ds/core";
+import { ChevronRightIcon, GithubIcon } from "@salt-ds/icons";
+import { SkipLink } from "@salt-ds/lab";
+import type { ReactElement } from "react";
+import { useState } from "react";
+import styles from "./Default.module.css";
+
+export const Default = (): ReactElement => {
+ const headerItems = ["Glossary", "Components", "Patterns"];
+
+ const [activeHeaderNav, setActiveHeaderNav] = useState(headerItems[0]);
+ return (
+ <>
+
+ Click here and press the Tab key to see the Skip Link.
+
+
+
+ Skip to main content
+
+
+ LOGO
+
+
+
+ {headerItems?.map((item) => (
+
+ {
+ // prevent default to avoid navigation in example
+ event.preventDefault();
+ setActiveHeaderNav(item);
+ }}
+ >
+ {item}
+
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Glossary
+
+ Characteristics
+
+ A Salt characteristic refers to a design token that aligns with
+ a holistic semantic used throughout the design language.
+
+ Components
+
+ Salt components serve as foundational building blocks as well as
+ representing design primitives. Users of Salt can design and
+ implement their own patterns within their own scope. For a full
+ list of foundational components, refer to the component
+ documentation.
+
+
+
+ see all glossary terms
+
+ }
+ />
+
+
+
+ >
+ );
+};
diff --git a/site/src/examples/skip-link/index.ts b/site/src/examples/skip-link/index.ts
new file mode 100644
index 00000000000..cb755ece901
--- /dev/null
+++ b/site/src/examples/skip-link/index.ts
@@ -0,0 +1 @@
+export * from "./Default";
diff --git a/site/src/pages/_app.tsx b/site/src/pages/_app.tsx
index 9b9dbd66d75..0ae007c77eb 100755
--- a/site/src/pages/_app.tsx
+++ b/site/src/pages/_app.tsx
@@ -25,7 +25,7 @@ import {
SaltProviderNext,
useCurrentBreakpoint,
} from "@salt-ds/core";
-import { AdapterDateFns } from "@salt-ds/date-adapters";
+import { AdapterDateFns } from "@salt-ds/date-adapters/date-fns";
import { LocalizationProvider } from "@salt-ds/lab";
import clsx from "clsx";
import { SessionProvider } from "next-auth/react";
diff --git a/site/tsconfig.json b/site/tsconfig.json
index 0d49d55a27a..2cb4802ccb3 100644
--- a/site/tsconfig.json
+++ b/site/tsconfig.json
@@ -3,7 +3,12 @@
"compilerOptions": {
"baseUrl": ".",
"jsx": "preserve",
- "incremental": true
+ "incremental": true,
+ "paths": {
+ "@salt-ds/date-adapters/*": [
+ "../packages/date-adapters/src/*-adapter/index.ts"
+ ]
+ }
},
"include": ["src/**/*", "globals.d.ts"],
"exclude": ["node_modules"]
diff --git a/tsconfig.json b/tsconfig.json
index 3b48ae806c5..036ddfea8b7 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -27,6 +27,9 @@
"packages/icons/stories/*",
"packages/lab/stories/*",
"packages/theme/stories/*"
+ ],
+ "@salt-ds/date-adapters/*": [
+ "./packages/date-adapters/src/*-adapter/index.ts"
]
},
"types": ["cypress", "@testing-library/cypress", "node"]
diff --git a/vite.config.ts b/vite.config.ts
index f25730da82c..b64743b8084 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,6 +1,8 @@
+import tsconfigPaths from "vite-tsconfig-paths";
import { defineConfig } from "vitest/config";
export default defineConfig({
+ plugins: [tsconfigPaths() as any],
test: {
include: ["**/*.spec.[jt]s?(x)"],
},
diff --git a/yarn.lock b/yarn.lock
index 275e1a39e13..d949e0b89b5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3385,7 +3385,7 @@ __metadata:
vite: "npm:^6.0.0"
vite-plugin-istanbul: "npm:^6.0.0"
vite-tsconfig-paths: "npm:^4.2.0"
- vitest: "npm:^2.0.0"
+ vitest: "npm:^3.0.0"
yup: "npm:^1.0.2"
languageName: unknown
linkType: soft
@@ -5592,35 +5592,34 @@ __metadata:
languageName: node
linkType: hard
-"@vitest/expect@npm:2.1.1":
- version: 2.1.1
- resolution: "@vitest/expect@npm:2.1.1"
+"@vitest/expect@npm:3.0.1":
+ version: 3.0.1
+ resolution: "@vitest/expect@npm:3.0.1"
dependencies:
- "@vitest/spy": "npm:2.1.1"
- "@vitest/utils": "npm:2.1.1"
- chai: "npm:^5.1.1"
- tinyrainbow: "npm:^1.2.0"
- checksum: 10/ece8d7f9e0c083c5cf30c0df9e052bba4402649736293a18e56a8db4be46a847b18dc7b33cdd1c08bea51bf6f2cb021e40e7227d9cfc24fdba4a955bffe371a2
+ "@vitest/spy": "npm:3.0.1"
+ "@vitest/utils": "npm:3.0.1"
+ chai: "npm:^5.1.2"
+ tinyrainbow: "npm:^2.0.0"
+ checksum: 10/5f87921b5893c084aaed5d7f4e7fdfba16aa6eddb8594808368ffa8732ab7c5d103f7e431a7927168cdcf78c0acda35290ca81766fa8852c6269ee58191e385d
languageName: node
linkType: hard
-"@vitest/mocker@npm:2.1.1":
- version: 2.1.1
- resolution: "@vitest/mocker@npm:2.1.1"
+"@vitest/mocker@npm:3.0.1":
+ version: 3.0.1
+ resolution: "@vitest/mocker@npm:3.0.1"
dependencies:
- "@vitest/spy": "npm:^2.1.0-beta.1"
+ "@vitest/spy": "npm:3.0.1"
estree-walker: "npm:^3.0.3"
- magic-string: "npm:^0.30.11"
+ magic-string: "npm:^0.30.17"
peerDependencies:
- "@vitest/spy": 2.1.1
- msw: ^2.3.5
- vite: ^5.0.0
+ msw: ^2.4.9
+ vite: ^5.0.0 || ^6.0.0
peerDependenciesMeta:
msw:
optional: true
vite:
optional: true
- checksum: 10/4fbdaac36e3f603235b131e25d9e561381bd989a34e49522e16652077021532ae6653907b47bbca93c14ae4629e3e6a8f61438e3812620dc5654b61595b45208
+ checksum: 10/8f93053573a1c1da5518a621c7ea27eff8c5e4ab70e57ef087ef47c005f928e85198ec71625f2f0369d7777b1ad0a353659cd4bb5a4feb1437e2ff78c45ee216
languageName: node
linkType: hard
@@ -5633,42 +5632,42 @@ __metadata:
languageName: node
linkType: hard
-"@vitest/pretty-format@npm:2.1.1":
- version: 2.1.1
- resolution: "@vitest/pretty-format@npm:2.1.1"
+"@vitest/pretty-format@npm:2.1.5":
+ version: 2.1.5
+ resolution: "@vitest/pretty-format@npm:2.1.5"
dependencies:
tinyrainbow: "npm:^1.2.0"
- checksum: 10/744278a3a91d080e51a94b03eaf7cf43779978d6391060cbfdda6d03194eef744ce8f12a2fe2fa90a9bf9b9f038d4c4c4d88f6192f042c88c5ee4125f38bf892
+ checksum: 10/98bf4e20c0efb893ffb2fe7713f84ccafd362d5022222ce097aab2368c2b0eccf3578d7ef4c26ea2f3d52e3c95f5fc7185ba36d7475d95537aab31ec4ac55d3a
languageName: node
linkType: hard
-"@vitest/pretty-format@npm:2.1.5, @vitest/pretty-format@npm:^2.1.1":
- version: 2.1.5
- resolution: "@vitest/pretty-format@npm:2.1.5"
+"@vitest/pretty-format@npm:3.0.1, @vitest/pretty-format@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "@vitest/pretty-format@npm:3.0.1"
dependencies:
- tinyrainbow: "npm:^1.2.0"
- checksum: 10/98bf4e20c0efb893ffb2fe7713f84ccafd362d5022222ce097aab2368c2b0eccf3578d7ef4c26ea2f3d52e3c95f5fc7185ba36d7475d95537aab31ec4ac55d3a
+ tinyrainbow: "npm:^2.0.0"
+ checksum: 10/d7ebb42a25ba49a8546be6ac1526953b96e660e3d93ad87539fdd994c560c1f6d1ed12691e13e15a9ff0e8f03a391ec70fde1e594245c616ea22f75e7fbe9abd
languageName: node
linkType: hard
-"@vitest/runner@npm:2.1.1":
- version: 2.1.1
- resolution: "@vitest/runner@npm:2.1.1"
+"@vitest/runner@npm:3.0.1":
+ version: 3.0.1
+ resolution: "@vitest/runner@npm:3.0.1"
dependencies:
- "@vitest/utils": "npm:2.1.1"
- pathe: "npm:^1.1.2"
- checksum: 10/cf13a2f0bebb494484e60614ff0e7cab06f4310b36c96fe311035ab2eec9cbc057fa5702e904d43e8976fb2214fe550286ceb0b3dc1c72081e23eb1b1f8fa193
+ "@vitest/utils": "npm:3.0.1"
+ pathe: "npm:^2.0.1"
+ checksum: 10/936e448153e7d81cf794044bdf91cad93773eef959ff97691895d9ff6629fa12d68aed7427e4d603086b2727be4c1cbce5a8c5a9a0dd23f068e4876729c16d8b
languageName: node
linkType: hard
-"@vitest/snapshot@npm:2.1.1":
- version: 2.1.1
- resolution: "@vitest/snapshot@npm:2.1.1"
+"@vitest/snapshot@npm:3.0.1":
+ version: 3.0.1
+ resolution: "@vitest/snapshot@npm:3.0.1"
dependencies:
- "@vitest/pretty-format": "npm:2.1.1"
- magic-string: "npm:^0.30.11"
- pathe: "npm:^1.1.2"
- checksum: 10/820f429d950cf63316464e7f2bc1f0ba4b7d2691c51f6ad03ba1c6edc7dbdc6a86b017c082f2a519b743ae53880b41366bbb596c8b43cf8cd68032f9433ec844
+ "@vitest/pretty-format": "npm:3.0.1"
+ magic-string: "npm:^0.30.17"
+ pathe: "npm:^2.0.1"
+ checksum: 10/6032cb4a192dbb484e3017222679669ca753d2f52f20186e23ce11a673c5ba818539305af2d92752241b3901251bc07dbd7a1739b3c46ad7eda1feea2535abbe
languageName: node
linkType: hard
@@ -5681,12 +5680,12 @@ __metadata:
languageName: node
linkType: hard
-"@vitest/spy@npm:2.1.1, @vitest/spy@npm:^2.1.0-beta.1":
- version: 2.1.1
- resolution: "@vitest/spy@npm:2.1.1"
+"@vitest/spy@npm:3.0.1":
+ version: 3.0.1
+ resolution: "@vitest/spy@npm:3.0.1"
dependencies:
- tinyspy: "npm:^3.0.0"
- checksum: 10/47e83b4a3d091c4fdc2fbf861ccf2df697d3446a6c69d384b168f9c3e0fa1cabec03e52cc8bec1909735969176ac6272cc4dee8dda945ff059183a5c4568a488
+ tinyspy: "npm:^3.0.2"
+ checksum: 10/c977743587be0c1317c1348042302db01e1c7e6e5ef5d703e2f3535c2e57b86bf369198bf5a09c7da246352453e0ea94fc751f580bc599dca58f2f23e34c12da
languageName: node
linkType: hard
@@ -5702,14 +5701,14 @@ __metadata:
languageName: node
linkType: hard
-"@vitest/utils@npm:2.1.1":
- version: 2.1.1
- resolution: "@vitest/utils@npm:2.1.1"
+"@vitest/utils@npm:3.0.1":
+ version: 3.0.1
+ resolution: "@vitest/utils@npm:3.0.1"
dependencies:
- "@vitest/pretty-format": "npm:2.1.1"
- loupe: "npm:^3.1.1"
- tinyrainbow: "npm:^1.2.0"
- checksum: 10/605f1807c343ac01cde053b062bda8f0cc51b321a3cd9c751424a1e24549a35120896bd58612a14f068460242013f69e08fc0a69355387e981a5a50bce9ae04e
+ "@vitest/pretty-format": "npm:3.0.1"
+ loupe: "npm:^3.1.2"
+ tinyrainbow: "npm:^2.0.0"
+ checksum: 10/daf07927a645797ea6796fa71f0d95b07880674289197b78848ec369117d7480c4ddf723516d122f0d18496a7fbe6ea3f866e3d136dd7121c0a1b26a780782a5
languageName: node
linkType: hard
@@ -6579,16 +6578,16 @@ __metadata:
languageName: node
linkType: hard
-"chai@npm:^5.1.1":
- version: 5.1.1
- resolution: "chai@npm:5.1.1"
+"chai@npm:^5.1.1, chai@npm:^5.1.2":
+ version: 5.1.2
+ resolution: "chai@npm:5.1.2"
dependencies:
assertion-error: "npm:^2.0.1"
check-error: "npm:^2.1.1"
deep-eql: "npm:^5.0.1"
loupe: "npm:^3.1.0"
pathval: "npm:^2.0.0"
- checksum: 10/ee67279a5613bd36dc1dc13660042429ae2f1dc5a9030a6abcf381345866dfb5bce7bc10b9d74c8de86b6f656489f654bbbef3f3361e06925591e6a00c72afff
+ checksum: 10/e8c2bbc83cb5a2f87130d93056d4cfbbe04106e12aa798b504816dbe3fa538a9f68541b472e56cbf0f54558b501d7e31867d74b8218abcd5a8cc8ba536fba46c
languageName: node
linkType: hard
@@ -7855,7 +7854,19 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:4, debug@npm:4.3.7, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4, debug@npm:^4.3.6":
+"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4, debug@npm:^4.4.0":
+ version: 4.4.0
+ resolution: "debug@npm:4.4.0"
+ dependencies:
+ ms: "npm:^2.1.3"
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ checksum: 10/1847944c2e3c2c732514b93d11886575625686056cd765336212dc15de2d2b29612b6cd80e1afba767bb8e1803b778caf9973e98169ef1a24a7a7009e1820367
+ languageName: node
+ linkType: hard
+
+"debug@npm:4.3.7":
version: 4.3.7
resolution: "debug@npm:4.3.7"
dependencies:
@@ -8396,10 +8407,10 @@ __metadata:
languageName: node
linkType: hard
-"es-module-lexer@npm:^1.3.1":
- version: 1.5.4
- resolution: "es-module-lexer@npm:1.5.4"
- checksum: 10/f29c7c97a58eb17640dcbd71bd6ef754ad4f58f95c3073894573d29dae2cad43ecd2060d97ed5b866dfb7804d5590fb7de1d2c5339a5fceae8bd60b580387fc5
+"es-module-lexer@npm:^1.3.1, es-module-lexer@npm:^1.6.0":
+ version: 1.6.0
+ resolution: "es-module-lexer@npm:1.6.0"
+ checksum: 10/807ee7020cc46a9c970c78cad1f2f3fc139877e5ebad7f66dbfbb124d451189ba1c48c1c632bd5f8ce1b8af2caef3fca340ba044a410fa890d17b080a59024bb
languageName: node
linkType: hard
@@ -8741,6 +8752,13 @@ __metadata:
languageName: node
linkType: hard
+"expect-type@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "expect-type@npm:1.1.0"
+ checksum: 10/05fca80ddc7d493a89361f783c6b000750fa04a8226bc24701f3b90adb0efc2fb467f2a0baaed4015a02d8b9034ef5bb87521df9dba980f50b1105bd596ef833
+ languageName: node
+ linkType: hard
+
"expiry-map@npm:^2.0.0":
version: 2.0.0
resolution: "expiry-map@npm:2.0.0"
@@ -11293,12 +11311,12 @@ __metadata:
languageName: node
linkType: hard
-"magic-string@npm:^0.30.0, magic-string@npm:^0.30.11, magic-string@npm:^0.30.3":
- version: 0.30.11
- resolution: "magic-string@npm:0.30.11"
+"magic-string@npm:^0.30.0, magic-string@npm:^0.30.17, magic-string@npm:^0.30.3":
+ version: 0.30.17
+ resolution: "magic-string@npm:0.30.17"
dependencies:
"@jridgewell/sourcemap-codec": "npm:^1.5.0"
- checksum: 10/b784d2240252f5b1e755d487354ada4c672cbca16f045144f7185a75b059210e5fcca7be7be03ef1bac2ca754c4428b21d36ae64a9057ba429916f06b8c54eb2
+ checksum: 10/2f71af2b0afd78c2e9012a29b066d2c8ba45a9cd0c8070f7fd72de982fb1c403b4e3afdb1dae00691d56885ede66b772ef6bedf765e02e3a7066208fe2fec4aa
languageName: node
linkType: hard
@@ -13622,10 +13640,10 @@ __metadata:
languageName: node
linkType: hard
-"pathe@npm:^1.1.2":
- version: 1.1.2
- resolution: "pathe@npm:1.1.2"
- checksum: 10/f201d796351bf7433d147b92c20eb154a4e0ea83512017bf4ec4e492a5d6e738fb45798be4259a61aa81270179fce11026f6ff0d3fa04173041de044defe9d80
+"pathe@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "pathe@npm:2.0.1"
+ checksum: 10/f6b628b28b228a1960b30c969d8cdc989c0f7041af3904ce794f050b60846c6b599e72e6a491012b4f414c3c441a9adfc1be66ad5d51633ae42793d29e2f03d5
languageName: node
linkType: hard
@@ -14199,7 +14217,7 @@ __metadata:
languageName: node
linkType: hard
-"postcss@npm:^8.4.32, postcss@npm:^8.4.43, postcss@npm:^8.4.49":
+"postcss@npm:^8.4.32, postcss@npm:^8.4.49":
version: 8.4.49
resolution: "postcss@npm:8.4.49"
dependencies:
@@ -15527,7 +15545,7 @@ __metadata:
languageName: node
linkType: hard
-"rollup@npm:^4.20.0, rollup@npm:^4.23.0, rollup@npm:^4.24.2":
+"rollup@npm:^4.23.0, rollup@npm:^4.24.2":
version: 4.28.1
resolution: "rollup@npm:4.28.1"
dependencies:
@@ -16117,10 +16135,10 @@ __metadata:
languageName: node
linkType: hard
-"std-env@npm:^3.7.0":
- version: 3.7.0
- resolution: "std-env@npm:3.7.0"
- checksum: 10/6ee0cca1add3fd84656b0002cfbc5bfa20340389d9ba4720569840f1caa34bce74322aef4c93f046391583e50649d0cf81a5f8fe1d411e50b659571690a45f12
+"std-env@npm:^3.8.0":
+ version: 3.8.0
+ resolution: "std-env@npm:3.8.0"
+ checksum: 10/034176196cfcaaab16dbdd96fc9e925a9544799fb6dc5a3e36fe43270f3a287c7f779d785b89edaf22cef2b5f1dcada2aae67430b8602e785ee74bdb3f671768
languageName: node
linkType: hard
@@ -16760,17 +16778,17 @@ __metadata:
languageName: node
linkType: hard
-"tinyexec@npm:^0.3.0":
- version: 0.3.0
- resolution: "tinyexec@npm:0.3.0"
- checksum: 10/317cc536d091ce7e50271287798d91ef53c4dc80088844d890752a2c7387d213004cba83e5e1d9129390ced617625e34f4a8f0ba5779e31c9b6939f9be0d3543
+"tinyexec@npm:^0.3.2":
+ version: 0.3.2
+ resolution: "tinyexec@npm:0.3.2"
+ checksum: 10/b9d5fed3166fb1acd1e7f9a89afcd97ccbe18b9c1af0278e429455f6976d69271ba2d21797e7c36d57d6b05025e525d2882d88c2ab435b60d1ddf2fea361de57
languageName: node
linkType: hard
-"tinypool@npm:^1.0.0":
- version: 1.0.1
- resolution: "tinypool@npm:1.0.1"
- checksum: 10/eaceb93784b8e27e60c0e3e2c7d11c29e1e79b2a025b2c232215db73b90fe22bd4753ad53fc8e801c2b5a63b94a823af549555d8361272bc98271de7dd4a9925
+"tinypool@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "tinypool@npm:1.0.2"
+ checksum: 10/6109322f14b3763f65c8fa49fddab72cd3edd96b82dd50e05e63de74867329ff5353bff4377281ec963213d9314f37f4a353e9ee34bbac85fd4c1e4a568d6076
languageName: node
linkType: hard
@@ -16781,7 +16799,14 @@ __metadata:
languageName: node
linkType: hard
-"tinyspy@npm:^3.0.0":
+"tinyrainbow@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "tinyrainbow@npm:2.0.0"
+ checksum: 10/94d4e16246972614a5601eeb169ba94f1d49752426312d3cf8cc4f2cc663a2e354ffc653aa4de4eebccbf9eeebdd0caef52d1150271fdfde65d7ae7f3dcb9eb5
+ languageName: node
+ linkType: hard
+
+"tinyspy@npm:^3.0.0, tinyspy@npm:^3.0.2":
version: 3.0.2
resolution: "tinyspy@npm:3.0.2"
checksum: 10/5db671b2ff5cd309de650c8c4761ca945459d7204afb1776db9a04fb4efa28a75f08517a8620c01ee32a577748802231ad92f7d5b194dc003ee7f987a2a06337
@@ -17639,17 +17664,18 @@ __metadata:
languageName: node
linkType: hard
-"vite-node@npm:2.1.1":
- version: 2.1.1
- resolution: "vite-node@npm:2.1.1"
+"vite-node@npm:3.0.1":
+ version: 3.0.1
+ resolution: "vite-node@npm:3.0.1"
dependencies:
cac: "npm:^6.7.14"
- debug: "npm:^4.3.6"
- pathe: "npm:^1.1.2"
- vite: "npm:^5.0.0"
+ debug: "npm:^4.4.0"
+ es-module-lexer: "npm:^1.6.0"
+ pathe: "npm:^2.0.1"
+ vite: "npm:^5.0.0 || ^6.0.0"
bin:
vite-node: vite-node.mjs
- checksum: 10/c21892b560cad87414ef774d7e53b207e8d66b511b7ef085940fd2f2160d8f6c42dfa9af2ef5465e775b767fc3312ec5b3418b898041f592b8e0b093b4b7110a
+ checksum: 10/9b54f6748781b3f1530b18351ba531d481c477d8868d455a100ad32a65b9650fdae0f13efdec0e9f2411394d24456868a9e960f2963ae7a9c91e15ec34141755
languageName: node
linkType: hard
@@ -17695,54 +17721,11 @@ __metadata:
languageName: node
linkType: hard
-"vite@npm:^5.0.0":
- version: 5.4.7
- resolution: "vite@npm:5.4.7"
- dependencies:
- esbuild: "npm:^0.21.3"
- fsevents: "npm:~2.3.3"
- postcss: "npm:^8.4.43"
- rollup: "npm:^4.20.0"
- peerDependencies:
- "@types/node": ^18.0.0 || >=20.0.0
- less: "*"
- lightningcss: ^1.21.0
- sass: "*"
- sass-embedded: "*"
- stylus: "*"
- sugarss: "*"
- terser: ^5.4.0
- dependenciesMeta:
- fsevents:
- optional: true
- peerDependenciesMeta:
- "@types/node":
- optional: true
- less:
- optional: true
- lightningcss:
- optional: true
- sass:
- optional: true
- sass-embedded:
- optional: true
- stylus:
- optional: true
- sugarss:
- optional: true
- terser:
- optional: true
- bin:
- vite: bin/vite.js
- checksum: 10/3f27e870930ad83b51e009604c6b69ab090e69bb5bfe85007c7e4ec3326efae4e33ac799645926363f258595b3be3055cc1ebc5ee158cff4bacdf41adf4ef8ed
- languageName: node
- linkType: hard
-
-"vite@npm:^6.0.0":
- version: 6.0.3
- resolution: "vite@npm:6.0.3"
+"vite@npm:^5.0.0 || ^6.0.0, vite@npm:^6.0.0":
+ version: 6.0.7
+ resolution: "vite@npm:6.0.7"
dependencies:
- esbuild: "npm:^0.24.0"
+ esbuild: "npm:^0.24.2"
fsevents: "npm:~2.3.3"
postcss: "npm:^8.4.49"
rollup: "npm:^4.23.0"
@@ -17786,38 +17769,39 @@ __metadata:
optional: true
bin:
vite: bin/vite.js
- checksum: 10/eca0949b8cbc887e78977515d8fc22eaa2d03425d60a0a422f2db1da9d26bd1b431b2815a273c798e8e3fe176a99e105c3d87b0ba615ca19b8bf19e0334d807a
+ checksum: 10/bf76b3647983cb3d76c0db90d1f72cd4f6e80864a112145405ac0046cedfb14814cc4d9c1acbd9c53da8749c3a2fa80570971f7c44c0524b71974981065e9388
languageName: node
linkType: hard
-"vitest@npm:^2.0.0":
- version: 2.1.1
- resolution: "vitest@npm:2.1.1"
- dependencies:
- "@vitest/expect": "npm:2.1.1"
- "@vitest/mocker": "npm:2.1.1"
- "@vitest/pretty-format": "npm:^2.1.1"
- "@vitest/runner": "npm:2.1.1"
- "@vitest/snapshot": "npm:2.1.1"
- "@vitest/spy": "npm:2.1.1"
- "@vitest/utils": "npm:2.1.1"
- chai: "npm:^5.1.1"
- debug: "npm:^4.3.6"
- magic-string: "npm:^0.30.11"
- pathe: "npm:^1.1.2"
- std-env: "npm:^3.7.0"
+"vitest@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "vitest@npm:3.0.1"
+ dependencies:
+ "@vitest/expect": "npm:3.0.1"
+ "@vitest/mocker": "npm:3.0.1"
+ "@vitest/pretty-format": "npm:^3.0.1"
+ "@vitest/runner": "npm:3.0.1"
+ "@vitest/snapshot": "npm:3.0.1"
+ "@vitest/spy": "npm:3.0.1"
+ "@vitest/utils": "npm:3.0.1"
+ chai: "npm:^5.1.2"
+ debug: "npm:^4.4.0"
+ expect-type: "npm:^1.1.0"
+ magic-string: "npm:^0.30.17"
+ pathe: "npm:^2.0.1"
+ std-env: "npm:^3.8.0"
tinybench: "npm:^2.9.0"
- tinyexec: "npm:^0.3.0"
- tinypool: "npm:^1.0.0"
- tinyrainbow: "npm:^1.2.0"
- vite: "npm:^5.0.0"
- vite-node: "npm:2.1.1"
+ tinyexec: "npm:^0.3.2"
+ tinypool: "npm:^1.0.2"
+ tinyrainbow: "npm:^2.0.0"
+ vite: "npm:^5.0.0 || ^6.0.0"
+ vite-node: "npm:3.0.1"
why-is-node-running: "npm:^2.3.0"
peerDependencies:
"@edge-runtime/vm": "*"
- "@types/node": ^18.0.0 || >=20.0.0
- "@vitest/browser": 2.1.1
- "@vitest/ui": 2.1.1
+ "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0
+ "@vitest/browser": 3.0.1
+ "@vitest/ui": 3.0.1
happy-dom: "*"
jsdom: "*"
peerDependenciesMeta:
@@ -17835,7 +17819,7 @@ __metadata:
optional: true
bin:
vitest: vitest.mjs
- checksum: 10/5bbbc7298a043c7ca0914817a2c30e18af5a1619f4a750d36056f64f4d907a1fad50b8bab93aaf39f8174eb475108c9287f6e226e24d3a3ccd6f0b71d3f56438
+ checksum: 10/7a58579ccbaea4303f9fb02f2bcf6601b2c752ecdff8de86c1d8db7b1ce6d546a6ba628c434ceb97caf0653be391044cfe97a258835f630e062fc47a72f74f22
languageName: node
linkType: hard