Compare commits

..
Author SHA1 Message Date
github-actions[bot] 3c073f0c0b Version Packages 2026-11-02 14:20:27 +00:00
Ken 3e039503fb perf(date): Import date utilities from sub-modules (#5476) 2026-11-02 15:19:25 +01:00
dependabot[bot] a47cbaff83 ⬆️ Bump the next group with 3 updates (#5479)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-11-02 15:01:22 +01:00
70 changed files with 311 additions and 466 deletions

No files matched your search

-6
View File
@@ -1,6 +0,0 @@
---
"@navikt/ds-react": patch
"@navikt/aksel-icons": patch
---
ESM: Mark ESM output as side-effect free, so bundlers like webpack, Turbopack and esbuild can tree-shake unused components and icons.
-5
View File
@@ -1,5 +0,0 @@
---
"@navikt/aksel-icons": minor
---
Icons: All icons are now available as CSS custom properties. Import `@navikt/aksel-icons/css/<IconName>.css` for a single icon (e.g. `--aksel-icon-magnifying-glass`), or `@navikt/aksel-icons/css/index.css` for every icon.
+6
View File
@@ -1,5 +1,11 @@
# @navikt/aksel-icons
## 8.21.1
### Patch Changes
- ESM: Mark ESM output as side-effect free, so bundlers like webpack, Turbopack and esbuild can tree-shake unused components and icons. ([#5472](https://github.com/navikt/aksel/pull/5472))
## 8.21.0
### Minor Changes
-31
View File
@@ -59,37 +59,6 @@ declare module "*.svg" {
}
```
### CSS custom properties
All icons are available as CSS custom properties behind `/css`, one file per icon. Each file declares a `--aksel-icon-<kebab-case-name>` variable on `:root`, containing the icon as an SVG data URI.
```css
@import "@navikt/aksel-icons/css/MagnifyingGlass.css";
.search-button::before {
content: "";
display: inline-block;
width: 1.5rem;
height: 1.5rem;
background-color: currentColor;
mask: var(--aksel-icon-magnifying-glass) center / contain no-repeat;
}
@media (forced-colors: active) {
.search-button::before {
background-color: CanvasText;
}
}
```
To get every icon, import `@navikt/aksel-icons/css/index.css`. This file contains all ~1000 icons (≈700 kB, ≈135 kB gzipped), so prefer importing only the icons you use.
Import icon files once in a global stylesheet (e.g. your root layout or `globals.css`), not in CSS modules or per-component stylesheets. The variables are global, and the SVG is inlined in each file, so importing the same icon in several places duplicates it in every CSS chunk.
- Icons added with CSS are decorative only. Give the parent element an accessible name, e.g. with visible text or `aria-label`.
- In forced colors mode (e.g. Windows High Contrast), `background-color` is forced to the page background, which hides the icon. Use `background-color: CanvasText` inside `@media (forced-colors: active)` as shown above, so the icon follows the user's text color.
- If you use a Content Security Policy, `img-src` must allow `data:`.
## [Learn more](https://aksel.nav.no/ikoner)
## License
@@ -1,44 +0,0 @@
import fastglob from "fast-glob";
import path from "node:path";
import { describe, expect, test } from "vitest";
import {
optimizeSvg,
svgToDataUri,
toCssVariableName,
// @ts-expect-error -- css-icons is JavaScript without a declaration file.
} from "../config/css-icons";
describe("toCssVariableName", () => {
test.each([
["MagnifyingGlass", "--aksel-icon-magnifying-glass"],
["Buildings2Fill", "--aksel-icon-buildings-2-fill"],
["ClipboardXMark", "--aksel-icon-clipboard-x-mark"],
["XMark", "--aksel-icon-x-mark"],
])("%s -> %s", (iconName, expected) => {
expect(toCssVariableName(iconName)).toBe(expected);
});
test("is unique for every icon", () => {
const names = fastglob
.sync("*.svg", { cwd: path.resolve(__dirname, "../icons") })
.map((file) => toCssVariableName(path.basename(file, ".svg")));
expect(new Set(names).size).toBe(names.length);
});
});
describe("svgToDataUri", () => {
const svg = `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.5 3.25 4.75 10.5Z" fill="#202733"/>
</svg>`;
test("keeps viewBox, uses currentColor and escapes unsafe characters", () => {
const uri = svgToDataUri(optimizeSvg(svg));
const data = uri.slice('url("'.length, -'")'.length);
expect(uri.startsWith('url("data:image/svg+xml,')).toBe(true);
expect(data).toContain("viewBox='0 0 24 24'");
expect(data).toContain("fill='currentColor'");
expect(data).not.toMatch(/["#<>]|width=|height=/);
});
});
-95
View File
@@ -1,95 +0,0 @@
const fastglob = require("fast-glob");
const kebabCase = require("lodash/kebabCase");
const path = require("node:path");
const {
existsSync,
mkdirSync,
readFileSync,
rmSync,
writeFileSync,
} = require("node:fs");
const { optimize } = require("svgo");
/**
* @param {string} iconName e.g. "MagnifyingGlass"
* @returns {string} e.g. "--aksel-icon-magnifying-glass"
*/
function toCssVariableName(iconName) {
return `--aksel-icon-${kebabCase(iconName)}`;
}
/**
* @param {string} svgString
* @returns {string} Minified SVG with currentColor fill and preserved viewBox
*/
function optimizeSvg(svgString) {
return optimize(svgString.replaceAll("#202733", "currentColor"), {
multipass: true,
plugins: [
{
name: "preset-default",
params: { overrides: { removeViewBox: false } },
},
{ name: "removeAttrs", params: { attrs: "svg:(width|height)" } },
],
}).data;
}
/**
* Encodes SVG for use in a CSS `url()`. Keeps readable characters unescaped for smaller output.
* @param {string} svgString
* @returns {string}
*/
function svgToDataUri(svgString) {
const encoded = svgString
.replaceAll('"', "'")
.replace(/\s+/g, " ")
.trim()
.replace(/[^\x20-\x7e]|[%#<>{}"\\]/g, encodeURIComponent);
return `url("data:image/svg+xml,${encoded}")`;
}
/**
* @param {string[]} declarations
* @returns {string}
*/
function createCssFile(declarations) {
return `:root {\n${declarations.map((d) => ` ${d}`).join("\n")}\n}\n`;
}
function main() {
const basePath = path.resolve(__dirname, "../icons");
const cssFolder = path.resolve(__dirname, "../dist/css");
const svgList = fastglob.sync("*.svg", { cwd: basePath }).sort();
if (existsSync(cssFolder)) {
rmSync(cssFolder, { recursive: true, force: true });
}
mkdirSync(cssFolder, { recursive: true });
const declarations = [];
for (const svg of svgList) {
const iconName = path.basename(svg, ".svg");
const svgString = readFileSync(path.join(basePath, svg)).toString();
const declaration = `${toCssVariableName(iconName)}: ${svgToDataUri(optimizeSvg(svgString))};`;
declarations.push(declaration);
writeFileSync(
path.join(cssFolder, `${iconName}.css`),
createCssFile([declaration]),
);
}
writeFileSync(path.join(cssFolder, "index.css"), createCssFile(declarations));
}
module.exports = {
createCssFile,
main,
optimizeSvg,
svgToDataUri,
toCssVariableName,
};
-47
View File
@@ -2,11 +2,6 @@ import type { Meta, StoryObj } from "@storybook/react-vite";
import React from "react";
import * as AkselIcons from "@navikt/aksel-icons";
import type { StarFillIcon } from "@navikt/aksel-icons";
import "@navikt/aksel-icons/css/Airplane.css";
import "@navikt/aksel-icons/css/Buildings2Fill.css";
import "@navikt/aksel-icons/css/MagnifyingGlass.css";
import "@navikt/aksel-icons/css/StarFill.css";
import "@navikt/aksel-icons/css/XMarkOctagonFill.css";
const meta: Meta<typeof StarFillIcon> = {
title: "aksel-icons/Icons",
@@ -30,45 +25,3 @@ export const IconsInverted: Story = {
render: Icons.render,
globals: { theme: "dark" },
};
const cssIconVariables = [
"--aksel-icon-airplane",
"--aksel-icon-buildings-2-fill",
"--aksel-icon-magnifying-glass",
"--aksel-icon-star-fill",
"--aksel-icon-x-mark-octagon-fill",
];
export const CssIcons: Story = {
render: () => (
<div
style={{ display: "flex", gap: "1rem", color: "var(--ax-text-accent)" }}
>
<style>
{`.css-icon {
display: inline-block;
width: 3rem;
height: 3rem;
background-color: currentColor;
print-color-adjust: exact;
}
@media (forced-colors: active) {
.css-icon { background-color: CanvasText; }
}`}
</style>
{cssIconVariables.map((variable) => (
<span
key={variable}
title={variable}
className="css-icon"
style={{ mask: `var(${variable}) center / contain no-repeat` }}
/>
))}
</div>
),
};
export const CssIconsInverted: Story = {
render: CssIcons.render,
globals: { theme: "dark" },
};
+3 -8
View File
@@ -1,6 +1,6 @@
{
"name": "@navikt/aksel-icons",
"version": "8.21.0",
"version": "8.21.1",
"author": "Aksel | Nav",
"homepage": "https://aksel.nav.no/ikoner",
"repository": {
@@ -23,9 +23,7 @@
"access": "public",
"provenance": true
},
"sideEffects": [
"*.css"
],
"sideEffects": false,
"license": "MIT",
"main": "./dist/react/cjs/index.js",
"module": "./dist/react/esm/index.js",
@@ -46,7 +44,6 @@
"default": "./dist/metadata.js"
},
"./svg/*.svg": "./dist/svg/*.svg",
"./css/*.css": "./dist/css/*.css",
"./package.json": "./package.json"
},
"typesVersions": {
@@ -65,11 +62,10 @@
"create-icons": "svgr --no-prettier --silent --index-template config/index-template.js --out-dir src icons && yarn prettify-icons",
"prettify-icons": "yarn prettier ./src --write --ignore-path nonexisting-path --log-level silent --no-config",
"parse-svg": "node -e 'require(\"./config/parse-svg.js\").main()'",
"css-icons": "node -e 'require(\"./config/css-icons.js\").main()'",
"copy": "copyfiles util/* src",
"update-metadata": "node config/metadata.js",
"write-packagejson": "echo '{\"type\": \"module\", \"sideEffects\": false}' > dist/react/esm/package.json",
"build": "yarn copy && yarn create-icons && concurrently \"tsc\" \"tsc -p tsconfig.esm.json && tsc-alias -p tsconfig.esm.json && yarn write-packagejson\" && node config/cleanTypes.js && yarn update-metadata && yarn parse-svg && yarn css-icons",
"build": "yarn copy && yarn create-icons && concurrently \"tsc\" \"tsc -p tsconfig.esm.json && tsc-alias -p tsconfig.esm.json && yarn write-packagejson\" && node config/cleanTypes.js && yarn update-metadata && yarn parse-svg",
"fetch-new:icons": "tsx --env-file=.env config/figma/index.ts",
"zip:icons": "node config/zip.js",
"test": "vitest run",
@@ -91,7 +87,6 @@
"prettier": "3.9.6",
"react": "19.3.1",
"rehype-parse": "9.0.1",
"svgo": "3.3.5",
"tsc-alias": "1.9.7",
"tsx": "^4.23.15",
"typescript": "6.0.3",
+2
View File
@@ -1,5 +1,7 @@
# @navikt/aksel-stylelint
## 8.21.1
## 8.21.0
## 8.20.1
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@navikt/aksel-stylelint",
"version": "8.21.0",
"version": "8.21.1",
"type": "module",
"engines": {
"node": ">=18.12.0"
@@ -43,8 +43,8 @@
"dev": "yarn watch:lint"
},
"devDependencies": {
"@navikt/ds-css": "^8.21.0",
"@navikt/ds-tokens": "^8.21.0",
"@navikt/ds-css": "^8.21.1",
"@navikt/ds-tokens": "^8.21.1",
"concurrently": "10.0.6",
"postcss-selector-parser": "^7.1.7",
"postcss-value-parser": "^4.2.0",
+2
View File
@@ -1,5 +1,7 @@
# @navikt/aksel
## 8.21.1
## 8.21.0
## 8.20.1
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@navikt/aksel",
"version": "8.21.0",
"version": "8.21.1",
"description": "Aksel command line interface. Codemods and other utilities for Aksel users.",
"author": "Aksel | Nav designsystem team",
"license": "MIT",
+2
View File
@@ -1,5 +1,7 @@
# @navikt/ds-css
## 8.21.1
## 8.21.0
### Minor Changes
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@navikt/ds-css",
"version": "8.21.0",
"version": "8.21.1",
"description": "CSS for Nav Designsystem",
"author": "Aksel | Nav designsystem team",
"keywords": [
@@ -32,7 +32,7 @@
"css:get-version": "node config/get-version.js"
},
"devDependencies": {
"@navikt/ds-tokens": "^8.21.0",
"@navikt/ds-tokens": "^8.21.1",
"browserslist": "^4.28.7",
"esbuild": "^0.28.2",
"fast-glob": "3.3.3",
+12
View File
@@ -1,5 +1,17 @@
# @navikt/ds-react
## 8.21.1
### Patch Changes
- ESM: Mark ESM output as side-effect free, so bundlers like webpack, Turbopack and esbuild can tree-shake unused components and icons. ([#5472](https://github.com/navikt/aksel/pull/5472))
- Date utilities: Import date-fns functions and locales from their own paths, so unbundled Node imports (SSR, Vitest/Jest) no longer load every date-fns locale. ([#5476](https://github.com/navikt/aksel/pull/5476))
- Updated dependencies [[`b69c5fc`](https://github.com/navikt/aksel/commit/b69c5fca305f28ad99b48dd74e4f736fe4257d48)]:
- @navikt/aksel-icons@8.21.1
- @navikt/ds-tokens@8.21.1
## 8.21.0
### Minor Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@navikt/ds-react",
"version": "8.21.0",
"version": "8.21.1",
"description": "React components from the Norwegian Labour and Welfare Administration.",
"author": "Aksel, a team part of the Norwegian Labour and Welfare Administration.",
"license": "MIT",
@@ -788,8 +788,8 @@
"dependencies": {
"@floating-ui/react": "0.27.20",
"@floating-ui/react-dom": "^2.1.9",
"@navikt/aksel-icons": "^8.21.0",
"@navikt/ds-tokens": "^8.21.0",
"@navikt/aksel-icons": "^8.21.1",
"@navikt/ds-tokens": "^8.21.1",
"date-fns": "^4.0.0",
"react-day-picker": "10.0.2"
},
@@ -1,4 +1,5 @@
import { type Locale, format } from "date-fns";
import type { Locale } from "date-fns";
import { format } from "date-fns/format";
import React, { useEffect, useRef } from "react";
import type { CalendarDay, Modifiers } from "react-day-picker";
import { cl } from "../../utils/helpers";
@@ -1,12 +1,10 @@
import {
type Locale,
format,
getMonth,
getYear,
setMonth,
setYear,
startOfMonth,
} from "date-fns";
import type { Locale } from "date-fns";
import { format } from "date-fns/format";
import { getMonth } from "date-fns/getMonth";
import { getYear } from "date-fns/getYear";
import { setMonth } from "date-fns/setMonth";
import { setYear } from "date-fns/setYear";
import { startOfMonth } from "date-fns/startOfMonth";
import React, { type ChangeEvent, useCallback } from "react";
import { type CalendarMonth, useDayPicker } from "react-day-picker";
import { ArrowLeftIcon, ArrowRightIcon } from "@navikt/aksel-icons";
@@ -1,4 +1,4 @@
import { isWeekend } from "date-fns";
import { isWeekend } from "date-fns/isWeekend";
import React, { useCallback, useState } from "react";
import {
type ClassNames,
@@ -1,4 +1,4 @@
import { isSameDay } from "date-fns";
import { isSameDay } from "date-fns/isSameDay";
import React, { forwardRef, useRef, useState } from "react";
import type { DateRange } from "react-day-picker";
import { useId } from "../../utils-external";
@@ -1,4 +1,5 @@
import { differenceInCalendarDays, isWeekend } from "date-fns";
import { differenceInCalendarDays } from "date-fns/differenceInCalendarDays";
import { isWeekend } from "date-fns/isWeekend";
import React, { useCallback, useState } from "react";
import { type DayEventHandler, dateMatchModifiers } from "react-day-picker";
import { getLocaleFromString } from "../../utils/components/date/Date.locale";
@@ -1,4 +1,6 @@
import { differenceInCalendarDays, isSameDay, isWeekend } from "date-fns";
import { differenceInCalendarDays } from "date-fns/differenceInCalendarDays";
import { isSameDay } from "date-fns/isSameDay";
import { isWeekend } from "date-fns/isWeekend";
import React, { useState } from "react";
import { dateMatchModifiers } from "react-day-picker";
import { getLocaleFromString } from "../../utils/components/date/Date.locale";
@@ -1,10 +1,8 @@
import {
compareAsc,
compareDesc,
format,
isSameMonth,
setYear,
} from "date-fns";
import { compareAsc } from "date-fns/compareAsc";
import { compareDesc } from "date-fns/compareDesc";
import { format } from "date-fns/format";
import { isSameMonth } from "date-fns/isSameMonth";
import { setYear } from "date-fns/setYear";
import React, { useEffect, useRef } from "react";
import { dateIsInCurrentMonth, isMatch } from "../../utils/date";
import { cl } from "../../utils/helpers";
@@ -1,11 +1,9 @@
import {
format,
isAfter,
isBefore,
setYear,
startOfMonth,
startOfYear,
} from "date-fns";
import { format } from "date-fns/format";
import { isAfter } from "date-fns/isAfter";
import { isBefore } from "date-fns/isBefore";
import { setYear } from "date-fns/setYear";
import { startOfMonth } from "date-fns/startOfMonth";
import { startOfYear } from "date-fns/startOfYear";
import React from "react";
import { ArrowLeftIcon, ArrowRightIcon } from "@navikt/aksel-icons";
import { Button } from "../../button";
@@ -1,4 +1,5 @@
import { type Locale, isSameYear } from "date-fns";
import type { Locale } from "date-fns";
import { isSameYear } from "date-fns/isSameYear";
import React from "react";
import { clampDisplayYear } from "../../utils/date";
import { createStrictContext } from "../../utils/helpers";
@@ -1,4 +1,4 @@
import { setYear } from "date-fns";
import { setYear } from "date-fns/setYear";
import type { Matcher } from "../../utils/components/date/Date.typeutils";
import { isMatch } from "../../utils/date";
@@ -1,4 +1,7 @@
import { isSameMonth, setMonth, setYear, startOfMonth } from "date-fns";
import { isSameMonth } from "date-fns/isSameMonth";
import { setMonth } from "date-fns/setMonth";
import { setYear } from "date-fns/setYear";
import { startOfMonth } from "date-fns/startOfMonth";
import React, { useState } from "react";
import { BodyShort } from "../../typography";
import { isMatch } from "../../utils/date";
@@ -1,19 +1,17 @@
import {
type Locale,
addDays,
addMonths,
addYears,
differenceInDays,
differenceInMonths,
differenceInYears,
endOfMonth,
endOfYear,
format,
startOfDay,
startOfMonth,
startOfYear,
subDays,
} from "date-fns";
import type { Locale } from "date-fns";
import { addDays } from "date-fns/addDays";
import { addMonths } from "date-fns/addMonths";
import { addYears } from "date-fns/addYears";
import { differenceInDays } from "date-fns/differenceInDays";
import { differenceInMonths } from "date-fns/differenceInMonths";
import { differenceInYears } from "date-fns/differenceInYears";
import { endOfMonth } from "date-fns/endOfMonth";
import { endOfYear } from "date-fns/endOfYear";
import { format } from "date-fns/format";
import { startOfDay } from "date-fns/startOfDay";
import { startOfMonth } from "date-fns/startOfMonth";
import { startOfYear } from "date-fns/startOfYear";
import { subDays } from "date-fns/subDays";
import React, { useCallback, useMemo } from "react";
import { Detail } from "../../typography/Detail";
import { useDateLocale, useI18n } from "../../utils/i18n/i18n.hooks";
@@ -1,4 +1,4 @@
import { isBefore } from "date-fns";
import { isBefore } from "date-fns/isBefore";
import React, { forwardRef } from "react";
import { useTimelineContext } from "../root/TimelineRoot.context";
import {
@@ -12,7 +12,7 @@ import {
useHover,
useInteractions,
} from "@floating-ui/react";
import { format } from "date-fns";
import { format } from "date-fns/format";
import React, { forwardRef, useMemo, useState } from "react";
import { useMergeRefs } from "../../utils/hooks";
import { useI18n } from "../../utils/i18n/i18n.hooks";
@@ -1,4 +1,6 @@
import { endOfDay, isSameDay, startOfDay } from "date-fns";
import { endOfDay } from "date-fns/endOfDay";
import { isSameDay } from "date-fns/isSameDay";
import { startOfDay } from "date-fns/startOfDay";
import React, { forwardRef, useMemo, useState } from "react";
import { consoleWarning } from "../../utils/helpers/consoleWarning";
import { TimelineAxisLabelsInternal } from "../axis-labels/TimelineAxisLabelsInternal";
@@ -1,5 +1,6 @@
import { renderHook } from "@testing-library/react";
import { addDays, isSameDay } from "date-fns";
import { addDays } from "date-fns/addDays";
import { isSameDay } from "date-fns/isSameDay";
import { describe, expect, test } from "vitest";
import {
useEarliestDate,
@@ -1,4 +1,8 @@
import { addDays, endOfDay, isAfter, startOfDay, subDays } from "date-fns";
import { addDays } from "date-fns/addDays";
import { endOfDay } from "date-fns/endOfDay";
import { isAfter } from "date-fns/isAfter";
import { startOfDay } from "date-fns/startOfDay";
import { subDays } from "date-fns/subDays";
import { useMemo } from "react";
import { horizontalPositionAndWidth } from "../utils/calc";
import { invisiblePeriods, withinADay } from "../utils/filter";
@@ -1,4 +1,4 @@
import { format } from "date-fns";
import { format } from "date-fns/format";
import React, { forwardRef } from "react";
import { BodyShort } from "../../typography/BodyShort";
import { cl } from "../../utils/helpers";
@@ -1,4 +1,4 @@
import { differenceInMilliseconds } from "date-fns";
import { differenceInMilliseconds } from "date-fns/differenceInMilliseconds";
const position = (date: Date, start: Date, endInclusive: Date) => {
const diff = differenceInMilliseconds(endInclusive, start);
@@ -1,4 +1,4 @@
import { differenceInDays } from "date-fns";
import { differenceInDays } from "date-fns/differenceInDays";
import type { PeriodProps } from "../Timeline.types";
import type { Spatial } from "./types.internal";
@@ -1,4 +1,4 @@
import { format } from "date-fns";
import { format } from "date-fns/format";
import { cl } from "../../utils/helpers";
import type { TFunction } from "../../utils/i18n/i18n.types";
import type { PeriodProps } from "../Timeline.types";
@@ -1,4 +1,4 @@
import { differenceInMilliseconds } from "date-fns";
import { differenceInMilliseconds } from "date-fns/differenceInMilliseconds";
import type { Period, PositionedPeriod } from "./types.internal";
const lastDate = (a: Date, b: Date): number => differenceInMilliseconds(a, b);
@@ -1,11 +1,9 @@
import {
addMonths,
addYears,
format,
isSameDay,
subMonths,
subYears,
} from "date-fns";
import { addMonths } from "date-fns/addMonths";
import { addYears } from "date-fns/addYears";
import { format } from "date-fns/format";
import { isSameDay } from "date-fns/isSameDay";
import { subMonths } from "date-fns/subMonths";
import { subYears } from "date-fns/subYears";
import React, { forwardRef } from "react";
import { Detail } from "../../typography/Detail";
import { useI18n } from "../../utils/i18n/i18n.hooks";
@@ -1,4 +1,6 @@
import { enGB, nb, nn } from "date-fns/locale";
import { enGB } from "date-fns/locale/en-GB";
import { nb } from "date-fns/locale/nb";
import { nn } from "date-fns/locale/nn";
import { createStrictContext } from "../../helpers";
import type { TFunction } from "../../i18n/i18n.types";
import en_translations from "../../i18n/locales/en";
@@ -1,11 +1,9 @@
import {
addYears,
endOfMonth,
endOfYear,
startOfDay,
startOfMonth,
startOfYear,
} from "date-fns";
import { addYears } from "date-fns/addYears";
import { endOfMonth } from "date-fns/endOfMonth";
import { endOfYear } from "date-fns/endOfYear";
import { startOfDay } from "date-fns/startOfDay";
import { startOfMonth } from "date-fns/startOfMonth";
import { startOfYear } from "date-fns/startOfYear";
import { describe, expect, test } from "vitest";
import { calendarRange } from "./calendar-range";
@@ -1,11 +1,9 @@
import {
addYears,
endOfMonth,
endOfYear,
startOfDay,
startOfMonth,
startOfYear,
} from "date-fns";
import { addYears } from "date-fns/addYears";
import { endOfMonth } from "date-fns/endOfMonth";
import { endOfYear } from "date-fns/endOfYear";
import { startOfDay } from "date-fns/startOfDay";
import { startOfMonth } from "date-fns/startOfMonth";
import { startOfYear } from "date-fns/startOfYear";
/**
* Generates the min and max-dates possible to show and navigate to in the calendar.
@@ -1,4 +1,4 @@
import { setYear } from "date-fns";
import { setYear } from "date-fns/setYear";
import { describe, expect, test } from "vitest";
import { dateIsInCurrentMonth, isValidDate } from "./check-dates";
@@ -1,9 +1,7 @@
import {
differenceInCalendarDays,
isThisMonth,
setYear,
startOfDay,
} from "date-fns";
import { differenceInCalendarDays } from "date-fns/differenceInCalendarDays";
import { isThisMonth } from "date-fns/isThisMonth";
import { setYear } from "date-fns/setYear";
import { startOfDay } from "date-fns/startOfDay";
export const dateIsInCurrentMonth = (
date: Date,
@@ -1,4 +1,5 @@
import { startOfMonth, startOfYear } from "date-fns";
import { startOfMonth } from "date-fns/startOfMonth";
import { startOfYear } from "date-fns/startOfYear";
import { describe, expect, test } from "vitest";
import { isDateOutsideRange } from "./check-dates";
import { clampDisplayMonth, clampDisplayYear } from "./clamp-dates";
@@ -1,4 +1,7 @@
import { isAfter, isBefore, startOfMonth, startOfYear } from "date-fns";
import { isAfter } from "date-fns/isAfter";
import { isBefore } from "date-fns/isBefore";
import { startOfMonth } from "date-fns/startOfMonth";
import { startOfYear } from "date-fns/startOfYear";
/**
* Makes sure the month is within the min and max daterange to avoid showing disabled months
@@ -1,4 +1,4 @@
import { isSameDay } from "date-fns";
import { isSameDay } from "date-fns/isSameDay";
import { isDateRange } from "../components/date/Date.typeutils";
export const disableDate = (
@@ -1,4 +1,4 @@
import { nb } from "date-fns/locale";
import { nb } from "date-fns/locale/nb";
import { describe, expect, test } from "vitest";
import { getMonthOptions, getYearOptions } from "./dropdown-options";
@@ -1,16 +1,14 @@
import {
type Locale,
addYears,
eachMonthOfInterval,
endOfYear,
format,
getMonth,
getYear,
isBefore,
isSameYear,
startOfMonth,
startOfYear,
} from "date-fns";
import type { Locale } from "date-fns";
import { addYears } from "date-fns/addYears";
import { eachMonthOfInterval } from "date-fns/eachMonthOfInterval";
import { endOfYear } from "date-fns/endOfYear";
import { format } from "date-fns/format";
import { getMonth } from "date-fns/getMonth";
import { getYear } from "date-fns/getYear";
import { isBefore } from "date-fns/isBefore";
import { isSameYear } from "date-fns/isSameYear";
import { startOfMonth } from "date-fns/startOfMonth";
import { startOfYear } from "date-fns/startOfYear";
/** Return the months to show in the dropdown. */
export function getMonthOptions({
@@ -1,4 +1,5 @@
import { type Locale, format } from "date-fns";
import type { Locale } from "date-fns";
import { format } from "date-fns/format";
import {
INPUT_DATE_STRING_FORMAT_DATE,
INPUT_DATE_STRING_FORMAT_MONTH,
@@ -1,4 +1,4 @@
import { nb } from "date-fns/locale";
import { nb } from "date-fns/locale/nb";
import { describe, expect, test } from "vitest";
import { formatDateForInput } from "./format-date";
import { parseDate } from "./parse-date";
@@ -1,9 +1,7 @@
import {
differenceInCalendarDays,
isDate,
isSameDay,
isSameMonth,
} from "date-fns";
import { differenceInCalendarDays } from "date-fns/differenceInCalendarDays";
import { isDate } from "date-fns/isDate";
import { isSameDay } from "date-fns/isSameDay";
import { isSameMonth } from "date-fns/isSameMonth";
import {
type DateRange,
type Matcher,
@@ -1,4 +1,7 @@
import { type Locale, isBefore, parse, sub } from "date-fns";
import type { Locale } from "date-fns";
import { isBefore } from "date-fns/isBefore";
import { parse } from "date-fns/parse";
import { sub } from "date-fns/sub";
import { isValidDate } from "./check-dates";
export const INPUT_DATE_STRING_FORMAT_DATE = "dd.MM.yyyy";
@@ -1,5 +1,5 @@
import { getMonth } from "date-fns";
import { nb } from "date-fns/locale";
import { getMonth } from "date-fns/getMonth";
import { nb } from "date-fns/locale/nb";
import { describe, expect, test } from "vitest";
import { isValidDate } from "./check-dates";
import { parseDate } from "./parse-date";
@@ -1,4 +1,5 @@
import { isBefore, isSameDay } from "date-fns";
import { isBefore } from "date-fns/isBefore";
import { isSameDay } from "date-fns/isSameDay";
import type { DateRange } from "../components/date/Date.typeutils";
/**
@@ -1,4 +1,4 @@
import { enGB } from "date-fns/locale";
import { enGB } from "date-fns/locale/en-GB";
import type { Translations } from "../i18n.types";
export default {
@@ -1,4 +1,5 @@
import { type Locale, nb } from "date-fns/locale";
import type { Locale } from "date-fns";
import { nb } from "date-fns/locale/nb";
interface TranslationMap {
[component: string]: Record<string, string | Record<string, string> | Locale>;
@@ -1,4 +1,4 @@
import { nn } from "date-fns/locale";
import { nn } from "date-fns/locale/nn";
import type { Translations } from "../i18n.types";
export default {
+2
View File
@@ -1,5 +1,7 @@
# @navikt/ds-tailwind
## 8.21.1
## 8.21.0
## 8.20.1
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@navikt/ds-tailwind",
"version": "8.21.0",
"version": "8.21.1",
"description": "Tailwind config based on @navikt/ds-tokens",
"author": "Aksel | Nav designsystem team",
"keywords": [
@@ -28,7 +28,7 @@
},
"homepage": "https://aksel.nav.no/grunnleggende/kode/tailwind/",
"devDependencies": {
"@navikt/ds-tokens": "^8.21.0",
"@navikt/ds-tokens": "^8.21.1",
"@types/node": "^24.10.9",
"tailwindcss": "^3.3.3",
"tsx": "^4.23.15",
+2
View File
@@ -1,5 +1,7 @@
# @navikt/ds-tokens
## 8.21.1
## 8.21.0
## 8.20.1
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@navikt/ds-tokens",
"version": "8.21.0",
"version": "8.21.1",
"description": "Design-tokens for Nav designsystem",
"author": "Aksel | Nav designsystem team",
"keywords": [
+12
View File
@@ -1,5 +1,17 @@
# Changelog
## 8.21.1
### @navikt/aksel-icons
- ESM: Mark ESM output as side-effect free, so bundlers like webpack, Turbopack and esbuild can tree-shake unused components and icons. ([#5472](https://github.com/navikt/aksel/pull/5472))
### @navikt/ds-react
- ESM: Mark ESM output as side-effect free, so bundlers like webpack, Turbopack and esbuild can tree-shake unused components and icons. ([#5472](https://github.com/navikt/aksel/pull/5472))
- Date utilities: Import date-fns functions and locales from their own paths, so unbundled Node imports (SSR, Vitest/Jest) no longer load every date-fns locale. ([#5476](https://github.com/navikt/aksel/pull/5476))
## 8.21.0
### @navikt/aksel-icons
+6 -6
View File
@@ -11,11 +11,11 @@
"sanity:update": "yarn workspace website update:sanity"
},
"dependencies": {
"@navikt/aksel": "^8.21.0",
"@navikt/aksel-icons": "^8.21.0",
"@navikt/ds-css": "^8.21.0",
"@navikt/ds-react": "^8.21.0",
"@navikt/ds-tailwind": "^8.21.0",
"@navikt/ds-tokens": "^8.21.0"
"@navikt/aksel": "^8.21.1",
"@navikt/aksel-icons": "^8.21.1",
"@navikt/ds-css": "^8.21.1",
"@navikt/ds-react": "^8.21.1",
"@navikt/ds-tailwind": "^8.21.1",
"@navikt/ds-tokens": "^8.21.1"
}
}
+3 -3
View File
@@ -44,7 +44,7 @@
"jscodeshift": "17.4.0",
"lodash": "4.18.1",
"lz-string": "^1.5.0",
"next": "16.4.2",
"next": "16.4.3",
"next-logger": "^5.0.2",
"next-sanity": "13.2.3",
"next-themes": "^0.4.6",
@@ -72,8 +72,8 @@
"@babel/parser": "^7.27.5",
"@babel/traverse": "^7.27.4",
"@google-cloud/bigquery": "^9.0.2",
"@next/bundle-analyzer": "16.4.2",
"@next/eslint-plugin-next": "16.4.2",
"@next/bundle-analyzer": "16.4.3",
"@next/eslint-plugin-next": "16.4.3",
"@playwright/test": "1.61.1",
"@portabletext/block-tools": "^6.0.0",
"@portabletext/markdown": "^2.5.1",
+3 -3
View File
@@ -11,9 +11,9 @@
"preview": "vite preview"
},
"dependencies": {
"@navikt/aksel-icons": "^8.21.0",
"@navikt/ds-css": "^8.21.0",
"@navikt/ds-react": "^8.21.0",
"@navikt/aksel-icons": "^8.21.1",
"@navikt/ds-css": "^8.21.1",
"@navikt/ds-react": "^8.21.1",
"fuse.js": "7.4.2",
"react": "19.3.1",
"react-dom": "19.3.1"
+3 -3
View File
@@ -19,9 +19,9 @@
"devDependencies": {
"@modelcontextprotocol/inspector": "^2.11.0",
"@modelcontextprotocol/sdk": "^1.32.0",
"@navikt/aksel": "^8.21.0",
"@navikt/aksel-icons": "^8.21.0",
"@navikt/ds-tokens": "^8.21.0",
"@navikt/aksel": "^8.21.1",
"@navikt/aksel-icons": "^8.21.1",
"@navikt/ds-tokens": "^8.21.1",
"@sanity/client": "7.27.0",
"@types/express": "^5.0.3",
"@types/node": "^24.10.9",
+3 -3
View File
@@ -20,9 +20,9 @@
"typescript": "6.0.3"
},
"dependencies": {
"@navikt/aksel-icons": "^8.21.0",
"@navikt/ds-css": "^8.21.0",
"@navikt/ds-react": "^8.21.0",
"@navikt/aksel-icons": "^8.21.1",
"@navikt/ds-css": "^8.21.1",
"@navikt/ds-react": "^8.21.1",
"react": "19.3.1"
}
}
+25
View File
@@ -167,6 +167,31 @@ module.exports = defineConfig([
"import/no-named-export": "error",
},
},
{
files: ["@navikt/core/react/src/**/*.{ts,tsx}"],
ignores: ["**/*.stories.tsx"],
rules: {
"@typescript-eslint/no-restricted-imports": [
"error",
{
paths: [
{
name: "date-fns",
allowTypeImports: true,
message:
'Import functions from their own path, e.g. `import { format } from "date-fns/format"`. The root barrel makes unbundled Node imports load all of date-fns.',
},
{
name: "date-fns/locale",
allowTypeImports: true,
message:
'Import locales from their own path, e.g. `import { nb } from "date-fns/locale/nb"`. The barrel makes unbundled Node imports load all locales.',
},
],
},
],
},
},
{
files: ["@navikt/**"],
ignores: ["**/*.stories.tsx"],
+84 -78
View File
@@ -4880,7 +4880,7 @@ __metadata:
languageName: node
linkType: hard
"@navikt/aksel-icons@npm:^8.21.0, @navikt/aksel-icons@workspace:@navikt/aksel-icons":
"@navikt/aksel-icons@npm:^8.21.1, @navikt/aksel-icons@workspace:@navikt/aksel-icons":
version: 0.0.0-use.local
resolution: "@navikt/aksel-icons@workspace:@navikt/aksel-icons"
dependencies:
@@ -4899,7 +4899,6 @@ __metadata:
prettier: "npm:3.9.6"
react: "npm:19.3.1"
rehype-parse: "npm:9.0.1"
svgo: "npm:3.3.5"
tsc-alias: "npm:1.9.7"
tsx: "npm:^4.23.15"
typescript: "npm:6.0.3"
@@ -4912,8 +4911,8 @@ __metadata:
version: 0.0.0-use.local
resolution: "@navikt/aksel-stylelint@workspace:@navikt/aksel-stylelint"
dependencies:
"@navikt/ds-css": "npm:^8.21.0"
"@navikt/ds-tokens": "npm:^8.21.0"
"@navikt/ds-css": "npm:^8.21.1"
"@navikt/ds-tokens": "npm:^8.21.1"
concurrently: "npm:10.0.6"
postcss-selector-parser: "npm:^7.1.7"
postcss-value-parser: "npm:^4.2.0"
@@ -4924,7 +4923,7 @@ __metadata:
languageName: unknown
linkType: soft
"@navikt/aksel@npm:^8.21.0, @navikt/aksel@workspace:@navikt/aksel":
"@navikt/aksel@npm:^8.21.1, @navikt/aksel@workspace:@navikt/aksel":
version: 0.0.0-use.local
resolution: "@navikt/aksel@workspace:@navikt/aksel"
dependencies:
@@ -4957,11 +4956,11 @@ __metadata:
languageName: node
linkType: hard
"@navikt/ds-css@npm:^8.21.0, @navikt/ds-css@workspace:@navikt/core/css":
"@navikt/ds-css@npm:^8.21.1, @navikt/ds-css@workspace:@navikt/core/css":
version: 0.0.0-use.local
resolution: "@navikt/ds-css@workspace:@navikt/core/css"
dependencies:
"@navikt/ds-tokens": "npm:^8.21.0"
"@navikt/ds-tokens": "npm:^8.21.1"
browserslist: "npm:^4.28.7"
esbuild: "npm:^0.28.2"
fast-glob: "npm:3.3.3"
@@ -4970,14 +4969,14 @@ __metadata:
languageName: unknown
linkType: soft
"@navikt/ds-react@npm:^8.21.0, @navikt/ds-react@workspace:@navikt/core/react":
"@navikt/ds-react@npm:^8.21.1, @navikt/ds-react@workspace:@navikt/core/react":
version: 0.0.0-use.local
resolution: "@navikt/ds-react@workspace:@navikt/core/react"
dependencies:
"@floating-ui/react": "npm:0.27.20"
"@floating-ui/react-dom": "npm:^2.1.9"
"@navikt/aksel-icons": "npm:^8.21.0"
"@navikt/ds-tokens": "npm:^8.21.0"
"@navikt/aksel-icons": "npm:^8.21.1"
"@navikt/ds-tokens": "npm:^8.21.1"
"@testing-library/dom": "npm:10.4.2"
"@testing-library/jest-dom": "npm:^7.0.1"
"@testing-library/react": "npm:^16.3.3"
@@ -5011,11 +5010,11 @@ __metadata:
languageName: unknown
linkType: soft
"@navikt/ds-tailwind@npm:^8.21.0, @navikt/ds-tailwind@workspace:@navikt/core/tailwind":
"@navikt/ds-tailwind@npm:^8.21.1, @navikt/ds-tailwind@workspace:@navikt/core/tailwind":
version: 0.0.0-use.local
resolution: "@navikt/ds-tailwind@workspace:@navikt/core/tailwind"
dependencies:
"@navikt/ds-tokens": "npm:^8.21.0"
"@navikt/ds-tokens": "npm:^8.21.1"
"@types/node": "npm:^24.10.9"
tailwindcss: "npm:^3.3.3"
tsx: "npm:^4.23.15"
@@ -5024,7 +5023,7 @@ __metadata:
languageName: unknown
linkType: soft
"@navikt/ds-tokens@npm:^8.21.0, @navikt/ds-tokens@workspace:@navikt/core/tokens":
"@navikt/ds-tokens@npm:^8.21.1, @navikt/ds-tokens@workspace:@navikt/core/tokens":
version: 0.0.0-use.local
resolution: "@navikt/ds-tokens@workspace:@navikt/core/tokens"
dependencies:
@@ -5087,84 +5086,91 @@ __metadata:
languageName: node
linkType: hard
"@next/bundle-analyzer@npm:16.4.2":
version: 16.4.2
resolution: "@next/bundle-analyzer@npm:16.4.2"
"@next/bundle-analyzer@npm:16.4.3":
version: 16.4.3
resolution: "@next/bundle-analyzer@npm:16.4.3"
dependencies:
webpack-bundle-analyzer: "npm:4.10.1"
checksum: 10/88aff93dac5666bda4dae47c3c28463470abcc2361d3397e37ed20074b58c0a017305f986097cceac5520052caf7fd35b079f1b45b8e3cb19b1438a3564dfe12
checksum: 10/cc29a60472950a8c178af34f7e164f8b903455811aeb01b12ae3f2721124485cc20dcf4e941b509c2dbb82e8023174ea01a69d4a90735fd6c7657f35fb245a60
languageName: node
linkType: hard
"@next/env@npm:16.4.2, @next/env@npm:^15.0.0 || ^16.0.0":
"@next/env@npm:16.4.3":
version: 16.4.3
resolution: "@next/env@npm:16.4.3"
checksum: 10/61fc8844d0432a0030694486d3a2dc1af58770f81d0f47b7b8b2ce8b8c236f56b83da0d16ba16fef9f2b7d4ce5de6af06e5ca73b722a3d733821b4858b71ddb3
languageName: node
linkType: hard
"@next/env@npm:^15.0.0 || ^16.0.0":
version: 16.4.2
resolution: "@next/env@npm:16.4.2"
checksum: 10/6ac734ca99aa1fb31d1130fd6cffdec711ef460cb2b87fa880fa00201c06f61de62bc5d5b7835aa2861087e9587aa1a535ba85dbf37a40979075bc50dac3588f
languageName: node
linkType: hard
"@next/eslint-plugin-next@npm:16.4.2":
version: 16.4.2
resolution: "@next/eslint-plugin-next@npm:16.4.2"
"@next/eslint-plugin-next@npm:16.4.3":
version: 16.4.3
resolution: "@next/eslint-plugin-next@npm:16.4.3"
dependencies:
"@eslint-community/eslint-utils": "npm:4.9.1"
fast-glob: "npm:3.3.1"
checksum: 10/961ba902b831ddae05a3519862fc43e969be2cd47e0bdc75a070ddfe7136d22c0b7428bfe1fc7863e44c0af913a43317060e318329bb47907d9fd1a1fbc02420
checksum: 10/b00bad73eedf18224e9c7700a6f8e990ace898190e2fc004b4dfc5f592d968da2b47b9cffea163b524bddba2aebf9817245bcd6f5259074fb435cb2a1ecb9994
languageName: node
linkType: hard
"@next/swc-darwin-arm64@npm:16.4.2":
version: 16.4.2
resolution: "@next/swc-darwin-arm64@npm:16.4.2"
"@next/swc-darwin-arm64@npm:16.4.3":
version: 16.4.3
resolution: "@next/swc-darwin-arm64@npm:16.4.3"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@next/swc-darwin-x64@npm:16.4.2":
version: 16.4.2
resolution: "@next/swc-darwin-x64@npm:16.4.2"
"@next/swc-darwin-x64@npm:16.4.3":
version: 16.4.3
resolution: "@next/swc-darwin-x64@npm:16.4.3"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@next/swc-linux-arm64-gnu@npm:16.4.2":
version: 16.4.2
resolution: "@next/swc-linux-arm64-gnu@npm:16.4.2"
"@next/swc-linux-arm64-gnu@npm:16.4.3":
version: 16.4.3
resolution: "@next/swc-linux-arm64-gnu@npm:16.4.3"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@next/swc-linux-arm64-musl@npm:16.4.2":
version: 16.4.2
resolution: "@next/swc-linux-arm64-musl@npm:16.4.2"
"@next/swc-linux-arm64-musl@npm:16.4.3":
version: 16.4.3
resolution: "@next/swc-linux-arm64-musl@npm:16.4.3"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@next/swc-linux-x64-gnu@npm:16.4.2":
version: 16.4.2
resolution: "@next/swc-linux-x64-gnu@npm:16.4.2"
"@next/swc-linux-x64-gnu@npm:16.4.3":
version: 16.4.3
resolution: "@next/swc-linux-x64-gnu@npm:16.4.3"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@next/swc-linux-x64-musl@npm:16.4.2":
version: 16.4.2
resolution: "@next/swc-linux-x64-musl@npm:16.4.2"
"@next/swc-linux-x64-musl@npm:16.4.3":
version: 16.4.3
resolution: "@next/swc-linux-x64-musl@npm:16.4.3"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@next/swc-win32-arm64-msvc@npm:16.4.2":
version: 16.4.2
resolution: "@next/swc-win32-arm64-msvc@npm:16.4.2"
"@next/swc-win32-arm64-msvc@npm:16.4.3":
version: 16.4.3
resolution: "@next/swc-win32-arm64-msvc@npm:16.4.3"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@next/swc-win32-x64-msvc@npm:16.4.2":
version: 16.4.2
resolution: "@next/swc-win32-x64-msvc@npm:16.4.2"
"@next/swc-win32-x64-msvc@npm:16.4.3":
version: 16.4.3
resolution: "@next/swc-win32-x64-msvc@npm:16.4.3"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
@@ -9762,9 +9768,9 @@ __metadata:
resolution: "aksel-icons-figma-plugin@workspace:apps/figma-icon-plugin"
dependencies:
"@figma/plugin-typings": "npm:^1.131.0"
"@navikt/aksel-icons": "npm:^8.21.0"
"@navikt/ds-css": "npm:^8.21.0"
"@navikt/ds-react": "npm:^8.21.0"
"@navikt/aksel-icons": "npm:^8.21.1"
"@navikt/ds-css": "npm:^8.21.1"
"@navikt/ds-react": "npm:^8.21.1"
"@rollup/pluginutils": "npm:^5.4.0"
"@svgr/core": "npm:^8.1.0"
"@types/node": "npm:^24.10.9"
@@ -9786,9 +9792,9 @@ __metadata:
dependencies:
"@modelcontextprotocol/inspector": "npm:^2.11.0"
"@modelcontextprotocol/sdk": "npm:^1.32.0"
"@navikt/aksel": "npm:^8.21.0"
"@navikt/aksel-icons": "npm:^8.21.0"
"@navikt/ds-tokens": "npm:^8.21.0"
"@navikt/aksel": "npm:^8.21.1"
"@navikt/aksel-icons": "npm:^8.21.1"
"@navikt/ds-tokens": "npm:^8.21.1"
"@sanity/client": "npm:7.27.0"
"@types/express": "npm:^5.0.3"
"@types/node": "npm:^24.10.9"
@@ -9810,9 +9816,9 @@ __metadata:
"@babel/preset-env": "npm:^7.29.0"
"@babel/preset-react": "npm:^7.28.5"
"@babel/preset-typescript": "npm:^7.28.5"
"@navikt/aksel-icons": "npm:^8.21.0"
"@navikt/ds-css": "npm:^8.21.0"
"@navikt/ds-react": "npm:^8.21.0"
"@navikt/aksel-icons": "npm:^8.21.1"
"@navikt/ds-css": "npm:^8.21.1"
"@navikt/ds-react": "npm:^8.21.1"
"@types/node": "npm:^24.10.9"
babel-loader: "npm:^10.1.1"
playroom: "npm:^1.4.0"
@@ -9874,12 +9880,12 @@ __metadata:
version: 0.0.0-use.local
resolution: "aksel.nav.no@workspace:aksel.nav.no"
dependencies:
"@navikt/aksel": "npm:^8.21.0"
"@navikt/aksel-icons": "npm:^8.21.0"
"@navikt/ds-css": "npm:^8.21.0"
"@navikt/ds-react": "npm:^8.21.0"
"@navikt/ds-tailwind": "npm:^8.21.0"
"@navikt/ds-tokens": "npm:^8.21.0"
"@navikt/aksel": "npm:^8.21.1"
"@navikt/aksel-icons": "npm:^8.21.1"
"@navikt/ds-css": "npm:^8.21.1"
"@navikt/ds-react": "npm:^8.21.1"
"@navikt/ds-tailwind": "npm:^8.21.1"
"@navikt/ds-tokens": "npm:^8.21.1"
languageName: unknown
linkType: soft
@@ -18539,19 +18545,19 @@ __metadata:
languageName: node
linkType: hard
"next@npm:16.4.2":
version: 16.4.2
resolution: "next@npm:16.4.2"
"next@npm:16.4.3":
version: 16.4.3
resolution: "next@npm:16.4.3"
dependencies:
"@next/env": "npm:16.4.2"
"@next/swc-darwin-arm64": "npm:16.4.2"
"@next/swc-darwin-x64": "npm:16.4.2"
"@next/swc-linux-arm64-gnu": "npm:16.4.2"
"@next/swc-linux-arm64-musl": "npm:16.4.2"
"@next/swc-linux-x64-gnu": "npm:16.4.2"
"@next/swc-linux-x64-musl": "npm:16.4.2"
"@next/swc-win32-arm64-msvc": "npm:16.4.2"
"@next/swc-win32-x64-msvc": "npm:16.4.2"
"@next/env": "npm:16.4.3"
"@next/swc-darwin-arm64": "npm:16.4.3"
"@next/swc-darwin-x64": "npm:16.4.3"
"@next/swc-linux-arm64-gnu": "npm:16.4.3"
"@next/swc-linux-arm64-musl": "npm:16.4.3"
"@next/swc-linux-x64-gnu": "npm:16.4.3"
"@next/swc-linux-x64-musl": "npm:16.4.3"
"@next/swc-win32-arm64-msvc": "npm:16.4.3"
"@next/swc-win32-x64-msvc": "npm:16.4.3"
"@swc/helpers": "npm:0.5.23"
baseline-browser-mapping: "npm:^2.9.19"
caniuse-lite: "npm:^1.0.30001579"
@@ -18595,7 +18601,7 @@ __metadata:
optional: true
bin:
next: dist/bin/next
checksum: 10/f72af6bfb2d469d3ee29551c221a8fc48f5b4f4a7b685b6e1897458657607186fac34867f42ec66a67e9d5dc72e7e97abf08db875ba0ce921876b19c63617dc4
checksum: 10/4473274bcb1da4921d33b81f8e6c25ac2a9ee959fee49b538bd186550c641111a74b42e85ad406842c1ae471ead49ed98ce1eae699d64f8fa55dc67c14557ee7
languageName: node
linkType: hard
@@ -23285,7 +23291,7 @@ __metadata:
languageName: node
linkType: hard
"svgo@npm:3.3.5, svgo@npm:^3.0.2":
"svgo@npm:^3.0.2":
version: 3.3.5
resolution: "svgo@npm:3.3.5"
dependencies:
@@ -25140,8 +25146,8 @@ __metadata:
"@navikt/analytics-types": "npm:0.0.9"
"@navikt/next-logger": "npm:5.0.1"
"@navikt/oasis": "npm:4.1.4"
"@next/bundle-analyzer": "npm:16.4.2"
"@next/eslint-plugin-next": "npm:16.4.2"
"@next/bundle-analyzer": "npm:16.4.3"
"@next/eslint-plugin-next": "npm:16.4.3"
"@playwright/test": "npm:1.61.1"
"@portabletext/block-tools": "npm:^6.0.0"
"@portabletext/markdown": "npm:^2.5.1"
@@ -25172,7 +25178,7 @@ __metadata:
json5: "npm:2.2.3"
lodash: "npm:4.18.1"
lz-string: "npm:^1.5.0"
next: "npm:16.4.2"
next: "npm:16.4.3"
next-logger: "npm:^5.0.2"
next-sanity: "npm:13.2.3"
next-themes: "npm:^0.4.6"