mirror of
https://github.com/navikt/aksel.git
synced 2026-10-24 22:52:02 +00:00
Compare commits
11
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a0c7f1fe54 | ||
|
|
13bd3cbfd0 | ||
|
|
d2325fb33b | ||
|
|
d8abc9bfeb | ||
|
|
769c477392 | ||
|
|
6fb7eda476 | ||
|
|
a013d5312f | ||
|
|
dabfb56def | ||
|
|
c571a7d4ba | ||
|
|
848783bb9f | ||
|
|
a7876ed078 |
No files matched your search
@@ -1,6 +0,0 @@
|
||||
---
|
||||
"@navikt/ds-react": patch
|
||||
"@navikt/ds-css": patch
|
||||
---
|
||||
|
||||
Timeline: Adapt axis label density to available width
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@navikt/ds-css": patch
|
||||
---
|
||||
|
||||
Badge: Increase inline padding by 1px for better optical balance
|
||||
@@ -40,7 +40,7 @@
|
||||
"url": "https://github.com/navikt/aksel/issues"
|
||||
},
|
||||
"dependencies": {
|
||||
"chalk": "5.6.2",
|
||||
"chalk": "6.0.1",
|
||||
"cli-progress": "3.12.0",
|
||||
"clipboardy": "5.3.2",
|
||||
"commander": "15.0.0",
|
||||
|
||||
@@ -16,7 +16,9 @@
|
||||
justify-content: center;
|
||||
min-width: var(--__axc-badge-size);
|
||||
height: var(--__axc-badge-size);
|
||||
padding: var(--ax-space-4);
|
||||
|
||||
/* 1px optical adjustment inline */
|
||||
padding: var(--ax-space-4) calc(var(--ax-space-4) + var(--ax-space-1));
|
||||
border-radius: var(--ax-radius-16);
|
||||
background: var(--ax-bg-strong);
|
||||
color: var(--ax-text-contrast);
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
box-sizing: content-box;
|
||||
grid-column: 2;
|
||||
margin-bottom: var(--ax-space-4);
|
||||
overflow-x: clip;
|
||||
}
|
||||
|
||||
.aksel-timeline__row-label {
|
||||
@@ -31,39 +30,13 @@
|
||||
align-self: flex-end;
|
||||
}
|
||||
|
||||
.aksel-timeline__axislabels-tier {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
container-name: aksel-timeline-axis-labels;
|
||||
container-type: inline-size;
|
||||
}
|
||||
|
||||
.aksel-timeline__axislabels-label {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
color: var(--ax-text-neutral-subtle);
|
||||
white-space: nowrap;
|
||||
overflow-x: clip;
|
||||
}
|
||||
|
||||
.aksel-timeline__axislabels-tier > .aksel-timeline__axislabels-tier {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/*
|
||||
* 4.5rem leaves room for the longest default abbreviated date label.
|
||||
* Below that, hide this tier and reveal the next coarser one in the same query.
|
||||
*/
|
||||
@container aksel-timeline-axis-labels (inline-size < 4.5rem) {
|
||||
.aksel-timeline__axislabels-tier:not([data-axis-labels-coarsest]) > .aksel-timeline__axislabels-label {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.aksel-timeline__axislabels-tier > .aksel-timeline__axislabels-tier {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.aksel-timeline__row {
|
||||
display: flex;
|
||||
background: var(--ax-bg-neutral-softA);
|
||||
|
||||
@@ -794,10 +794,10 @@
|
||||
"react-day-picker": "10.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@testing-library/dom": "10.4.1",
|
||||
"@testing-library/jest-dom": "^6.6.3",
|
||||
"@testing-library/dom": "10.4.2",
|
||||
"@testing-library/jest-dom": "^7.0.1",
|
||||
"@testing-library/react": "^16.3.3",
|
||||
"@testing-library/user-event": "^14.6.7",
|
||||
"@testing-library/user-event": "^14.6.8",
|
||||
"@types/jscodeshift": "17.3.0",
|
||||
"@types/node": "^24.10.9",
|
||||
"@types/react": "19.2.14",
|
||||
|
||||
@@ -19,7 +19,7 @@ export interface CheckboxProps
|
||||
*/
|
||||
children: React.ReactNode;
|
||||
/**
|
||||
* Visually hides label and description, and makes it viewable for screen-readers only.
|
||||
* Hides the label and description visually while keeping them available to screen readers.
|
||||
*/
|
||||
hideLabel?: boolean;
|
||||
/**
|
||||
|
||||
@@ -60,8 +60,7 @@ export interface ComboboxProps
|
||||
*/
|
||||
filteredOptions?: string[] | ComboboxOption[];
|
||||
/**
|
||||
* Optionally hide the label visually.
|
||||
* Not recommended, but can be considered for e.g. search fields in the top menu.
|
||||
* Hides the label and description visually while keeping them available to screen readers.
|
||||
*/
|
||||
hideLabel?: boolean;
|
||||
/**
|
||||
|
||||
@@ -39,7 +39,7 @@ export interface SearchProps
|
||||
*/
|
||||
label: React.ReactNode;
|
||||
/**
|
||||
* Shows label and description for screenreaders only.
|
||||
* Hides the label and description visually while keeping them available to screen readers.
|
||||
* @default true
|
||||
*/
|
||||
hideLabel?: boolean;
|
||||
|
||||
@@ -23,7 +23,7 @@ export interface SelectProps
|
||||
*/
|
||||
label: React.ReactNode;
|
||||
/**
|
||||
* Shows label and description for screenreaders only.
|
||||
* Hides the label and description visually while keeping them available to screen readers.
|
||||
*/
|
||||
hideLabel?: boolean;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ export interface SwitchProps
|
||||
*/
|
||||
children: React.ReactNode;
|
||||
/**
|
||||
* If enabled shows the label and description for screenreaders only.
|
||||
* Hides the label and description visually while keeping them available to screen readers.
|
||||
*/
|
||||
hideLabel?: boolean;
|
||||
/**
|
||||
|
||||
@@ -36,7 +36,7 @@ export interface TextareaProps
|
||||
*/
|
||||
label: React.ReactNode;
|
||||
/**
|
||||
* If enabled shows the label and description for screenreaders only.
|
||||
* Hides the label and description visually while keeping them available to screen readers.
|
||||
*/
|
||||
hideLabel?: boolean;
|
||||
/**
|
||||
|
||||
@@ -20,7 +20,7 @@ export interface TextFieldProps
|
||||
*/
|
||||
htmlSize?: number;
|
||||
/**
|
||||
* If enabled shows the label and description for screenreaders only
|
||||
* Hides the label and description visually while keeping them available to screen readers
|
||||
*/
|
||||
hideLabel?: boolean;
|
||||
/**
|
||||
|
||||
@@ -599,15 +599,7 @@ export const CustomLabel: StoryFn = () => {
|
||||
|
||||
export const OverflowingAxisLabels: StoryFn = () => {
|
||||
return (
|
||||
<div
|
||||
style={{
|
||||
width: "800px",
|
||||
maxWidth: "100%",
|
||||
minWidth: "200px",
|
||||
resize: "horizontal",
|
||||
overflow: "auto",
|
||||
}}
|
||||
>
|
||||
<div style={{ width: "800px" }}>
|
||||
<Timeline
|
||||
startDate={new Date("2026-05-04")}
|
||||
endDate={new Date("2026-05-31")}
|
||||
|
||||
@@ -97,40 +97,6 @@ function TwoRowTimelineWithPins() {
|
||||
);
|
||||
}
|
||||
|
||||
function ResponsiveAxisTimeline() {
|
||||
return (
|
||||
<>
|
||||
{(["left", "right"] as const).flatMap((direction) =>
|
||||
[
|
||||
["2026-05-04", "2026-05-31"],
|
||||
["2024-02-15", "2025-03-05"],
|
||||
["2022-06-15", "2047-07-05"],
|
||||
].map(([start, end]) => (
|
||||
<div
|
||||
key={`${direction}-${start}`}
|
||||
data-axis-size
|
||||
style={{ width: "320px" }}
|
||||
>
|
||||
<Timeline
|
||||
direction={direction}
|
||||
startDate={new Date(start)}
|
||||
endDate={new Date(end)}
|
||||
>
|
||||
<Timeline.Row label="Row">
|
||||
<Timeline.Period
|
||||
start={new Date(start)}
|
||||
end={new Date(end)}
|
||||
status="success"
|
||||
/>
|
||||
</Timeline.Row>
|
||||
</Timeline>
|
||||
</div>
|
||||
)),
|
||||
)}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export const HorizontalPeriodNavigation: Story = {
|
||||
render: () => <TwoRowTimeline />,
|
||||
play: async ({ canvasElement }) => {
|
||||
@@ -213,86 +179,3 @@ export const PinNavigation: Story = {
|
||||
expect(pins[0]).toHaveFocus();
|
||||
},
|
||||
};
|
||||
|
||||
export const AxisLabelsAdaptToWidth: Story = {
|
||||
render: () => <ResponsiveAxisTimeline />,
|
||||
play: async ({ canvasElement }) => {
|
||||
const containers =
|
||||
canvasElement.querySelectorAll<HTMLElement>("[data-axis-size]");
|
||||
expect(containers).toHaveLength(6);
|
||||
|
||||
for (const container of containers) {
|
||||
const axis = container.querySelector<HTMLElement>(
|
||||
".aksel-timeline__axislabels",
|
||||
);
|
||||
const finestTier = axis?.querySelector<HTMLElement>(
|
||||
".aksel-timeline__axislabels-tier",
|
||||
);
|
||||
if (!axis || !finestTier) {
|
||||
throw new Error("Timeline axis or label tier not found");
|
||||
}
|
||||
const markup = axis.innerHTML;
|
||||
const height = axis.getBoundingClientRect().height;
|
||||
const selectedDensities = new Set<string | null>();
|
||||
const labelColumnWidth =
|
||||
container.getBoundingClientRect().width -
|
||||
axis.getBoundingClientRect().width;
|
||||
const minSlotWidth =
|
||||
4.5 *
|
||||
Number.parseFloat(
|
||||
window.getComputedStyle(document.documentElement).fontSize,
|
||||
);
|
||||
|
||||
const breakpoint =
|
||||
(minSlotWidth * 100) / Number.parseFloat(finestTier.style.width) +
|
||||
labelColumnWidth;
|
||||
|
||||
for (const width of [200, breakpoint, 2400]) {
|
||||
container.style.width = `${width}px`;
|
||||
await new Promise<void>((resolve) =>
|
||||
requestAnimationFrame(() => resolve()),
|
||||
);
|
||||
|
||||
const visibleLabels = [
|
||||
...axis.querySelectorAll<HTMLElement>(
|
||||
".aksel-timeline__axislabels-label",
|
||||
),
|
||||
].filter((label) => label.getClientRects().length > 0);
|
||||
const densities = new Set(
|
||||
visibleLabels.map((label) =>
|
||||
label.getAttribute("data-axis-labels-density"),
|
||||
),
|
||||
);
|
||||
expect(densities.size, `Axis density at container width ${width}`).toBe(
|
||||
1,
|
||||
);
|
||||
for (const density of densities) {
|
||||
selectedDensities.add(density);
|
||||
}
|
||||
|
||||
const axisBounds = axis.getBoundingClientRect();
|
||||
const textBounds = visibleLabels
|
||||
.map((label) => {
|
||||
const range = document.createRange();
|
||||
range.selectNodeContents(label);
|
||||
return range.getBoundingClientRect();
|
||||
})
|
||||
.sort((a, b) => a.left - b.left);
|
||||
|
||||
const labelsFit = textBounds.every(
|
||||
(bounds, index) =>
|
||||
bounds.left >= axisBounds.left - 1 &&
|
||||
bounds.right <= axisBounds.right + 1 &&
|
||||
(index === 0 || bounds.left >= textBounds[index - 1].right),
|
||||
);
|
||||
expect(
|
||||
labelsFit,
|
||||
`Labels stay within the axis without overlap at container width ${width}`,
|
||||
).toBe(true);
|
||||
expect(axisBounds.height).toBe(height);
|
||||
expect(axis.innerHTML).toBe(markup);
|
||||
}
|
||||
expect(selectedDensities.size).toBeGreaterThan(1);
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -4,7 +4,6 @@ import {
|
||||
addMonths,
|
||||
addYears,
|
||||
differenceInDays,
|
||||
differenceInMilliseconds,
|
||||
differenceInMonths,
|
||||
differenceInYears,
|
||||
endOfMonth,
|
||||
@@ -15,45 +14,31 @@ import {
|
||||
startOfYear,
|
||||
subDays,
|
||||
} from "date-fns";
|
||||
import React, { useMemo } from "react";
|
||||
import React, { useCallback, useMemo } from "react";
|
||||
import { Detail } from "../../typography/Detail";
|
||||
import { useDateLocale, useI18n } from "../../utils/i18n/i18n.hooks";
|
||||
import type { TFunction } from "../../utils/i18n/i18n.types";
|
||||
import { useTimelineContext } from "../root/TimelineRoot.context";
|
||||
import { isVisible } from "../utils";
|
||||
import { horizontalPositionAndWidth } from "../utils/calc";
|
||||
import type { AxisLabel, AxisLabelTemplates } from "../utils/types.external";
|
||||
|
||||
// Use 23 hours as a conservative day length so DST-shortened days still qualify.
|
||||
const MIN_SAFE_DAY_IN_MILLISECONDS = 23 * 60 * 60 * 1000;
|
||||
const MAX_LABEL_COUNT = 100;
|
||||
|
||||
interface AxisLabelSet {
|
||||
id: string;
|
||||
labels: AxisLabel[];
|
||||
slotWidth: number;
|
||||
}
|
||||
|
||||
const dayLabels = (
|
||||
start: Date,
|
||||
end: Date,
|
||||
intervalDays: number,
|
||||
totalDays: number,
|
||||
direction: "left" | "right",
|
||||
template: string,
|
||||
locale: Locale,
|
||||
): AxisLabel[] => {
|
||||
const totalDays = differenceInDays(end, start);
|
||||
const count = Math.ceil(totalDays / intervalDays) + 1;
|
||||
|
||||
if (count > MAX_LABEL_COUNT) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const increment = Math.ceil(totalDays / 10);
|
||||
const lastDay = startOfDay(end);
|
||||
const count = Math.ceil(totalDays / increment);
|
||||
return Array.from({ length: count }, (_, i) => {
|
||||
const day: Date = subDays(lastDay, i * intervalDays);
|
||||
const day: Date = subDays(lastDay, i * increment);
|
||||
const { horizontalPosition, width } = horizontalPositionAndWidth(
|
||||
day,
|
||||
addDays(day, intervalDays),
|
||||
addDays(day, 1),
|
||||
start,
|
||||
end,
|
||||
);
|
||||
@@ -70,25 +55,18 @@ const dayLabels = (
|
||||
const monthLabels = (
|
||||
start: Date,
|
||||
end: Date,
|
||||
intervalMonths: number,
|
||||
direction: "left" | "right",
|
||||
template: string,
|
||||
locale: Locale,
|
||||
): AxisLabel[] => {
|
||||
const startMonth = startOfMonth(start);
|
||||
const endMonth = endOfMonth(end);
|
||||
// Count calendar boundaries at this interval, not elapsed 30-day periods.
|
||||
const numberOfMonths =
|
||||
Math.floor(differenceInMonths(endMonth, startMonth) / intervalMonths) + 1;
|
||||
if (numberOfMonths > MAX_LABEL_COUNT) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const numberOfMonths = differenceInMonths(endMonth, startMonth) + 1;
|
||||
return Array.from({ length: numberOfMonths }, (_, i) => {
|
||||
const month: Date = addMonths(startMonth, i * intervalMonths);
|
||||
const month: Date = addMonths(startMonth, i);
|
||||
const { horizontalPosition, width } = horizontalPositionAndWidth(
|
||||
month,
|
||||
addMonths(month, intervalMonths),
|
||||
addMonths(month, 1),
|
||||
start,
|
||||
end,
|
||||
);
|
||||
@@ -105,25 +83,18 @@ const monthLabels = (
|
||||
const yearLabels = (
|
||||
start: Date,
|
||||
end: Date,
|
||||
intervalYears: number,
|
||||
direction: "left" | "right",
|
||||
template: string,
|
||||
locale: Locale,
|
||||
): AxisLabel[] => {
|
||||
const firstYear = startOfYear(start);
|
||||
const lastYear = endOfYear(end);
|
||||
|
||||
const yearCount =
|
||||
Math.floor(differenceInYears(lastYear, start) / intervalYears) + 1;
|
||||
if (yearCount > MAX_LABEL_COUNT) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const yearCount = differenceInYears(lastYear, start) + 1;
|
||||
return Array.from({ length: yearCount }, (_, i) => {
|
||||
const year: Date = addYears(firstYear, i * intervalYears);
|
||||
const year: Date = addYears(firstYear, i);
|
||||
const { horizontalPosition, width } = horizontalPositionAndWidth(
|
||||
year,
|
||||
addYears(year, intervalYears),
|
||||
addYears(year, 1),
|
||||
start,
|
||||
end,
|
||||
);
|
||||
@@ -137,99 +108,32 @@ const yearLabels = (
|
||||
});
|
||||
};
|
||||
|
||||
const getLabelSets = (
|
||||
const getLabels = (
|
||||
start: Date,
|
||||
end: Date,
|
||||
direction: "left" | "right",
|
||||
locale: Locale,
|
||||
translate: TFunction<"Timeline">,
|
||||
): AxisLabelSet[] => {
|
||||
const duration = differenceInMilliseconds(end, start);
|
||||
if (!Number.isFinite(duration) || duration <= 0) {
|
||||
): AxisLabel[] => {
|
||||
const totalDays = differenceInDays(end, start);
|
||||
|
||||
/* Zero or negative total days can break further calculations */
|
||||
if (totalDays <= 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const dayTemplate = translate("dayFormat");
|
||||
const monthTemplate = translate("monthFormat");
|
||||
if (totalDays < 40) {
|
||||
const dayTemplate = translate("dayFormat");
|
||||
return dayLabels(start, end, totalDays, direction, dayTemplate, locale);
|
||||
}
|
||||
|
||||
if (totalDays < 370) {
|
||||
const monthTemplate = translate("monthFormat");
|
||||
return monthLabels(start, end, direction, monthTemplate, locale);
|
||||
}
|
||||
|
||||
const yearTemplate = translate("yearFormat");
|
||||
|
||||
const intervals: {
|
||||
id: string;
|
||||
template: string;
|
||||
getLabels: () => AxisLabel[];
|
||||
}[] = [];
|
||||
|
||||
/* CSS progressively reveals nested tiers */
|
||||
for (const intervalDays of [1, 2, 7, 8, 14]) {
|
||||
if (intervalDays * MIN_SAFE_DAY_IN_MILLISECONDS > duration) {
|
||||
continue;
|
||||
}
|
||||
intervals.push({
|
||||
id: `day-${intervalDays}`,
|
||||
template: dayTemplate,
|
||||
getLabels: () =>
|
||||
dayLabels(start, end, intervalDays, direction, dayTemplate, locale),
|
||||
});
|
||||
}
|
||||
|
||||
for (const intervalMonths of [1, 2, 3, 6]) {
|
||||
const intervalDays = intervalMonths * 28;
|
||||
if (intervalDays * MIN_SAFE_DAY_IN_MILLISECONDS > duration) {
|
||||
continue;
|
||||
}
|
||||
intervals.push({
|
||||
id: `month-${intervalMonths}`,
|
||||
template: monthTemplate,
|
||||
getLabels: () =>
|
||||
monthLabels(
|
||||
start,
|
||||
end,
|
||||
intervalMonths,
|
||||
direction,
|
||||
monthTemplate,
|
||||
locale,
|
||||
),
|
||||
});
|
||||
}
|
||||
|
||||
for (let intervalYears = 1; ; intervalYears *= 2) {
|
||||
const intervalDays = intervalYears * 365;
|
||||
if (intervalDays * MIN_SAFE_DAY_IN_MILLISECONDS > duration) {
|
||||
break;
|
||||
}
|
||||
intervals.push({
|
||||
id: `year-${intervalYears}`,
|
||||
template: yearTemplate,
|
||||
getLabels: () =>
|
||||
yearLabels(start, end, intervalYears, direction, yearTemplate, locale),
|
||||
});
|
||||
}
|
||||
|
||||
return intervals
|
||||
.map(({ id, template, getLabels }) => {
|
||||
const labels = getLabels();
|
||||
/* Use the narrowest calendar slot so this tier fits even in shorter periods */
|
||||
const slotWidth = Math.min(100, ...labels.map(({ width }) => width));
|
||||
const visibleLabels = labels
|
||||
.filter(
|
||||
({ horizontalPosition }) =>
|
||||
horizontalPosition >= 0 && horizontalPosition + slotWidth <= 100,
|
||||
)
|
||||
.sort((a, b) => a.horizontalPosition - b.horizontalPosition);
|
||||
|
||||
/* Coarse interval may have no calendar boundary inside the range */
|
||||
if (labels.length > 0 && visibleLabels.length === 0) {
|
||||
visibleLabels.push({
|
||||
...labels[0],
|
||||
date: start,
|
||||
horizontalPosition: 0,
|
||||
label: format(start, template, { locale }),
|
||||
});
|
||||
}
|
||||
|
||||
return { id, slotWidth, labels: visibleLabels };
|
||||
})
|
||||
.filter(({ labels }) => labels.length > 0);
|
||||
return yearLabels(start, end, direction, yearTemplate, locale);
|
||||
};
|
||||
|
||||
const TimelineAxisLabelsInternal = ({
|
||||
@@ -246,51 +150,41 @@ const TimelineAxisLabelsInternal = ({
|
||||
});
|
||||
const locale = useDateLocale();
|
||||
|
||||
const labelSets = useMemo(
|
||||
() => getLabelSets(startDate, endDate, direction, locale, translate),
|
||||
const labels = useMemo(
|
||||
() =>
|
||||
getLabels(startDate, endDate, direction, locale, translate)
|
||||
.filter(isVisible)
|
||||
.sort((a, b) => a.horizontalPosition - b.horizontalPosition),
|
||||
[startDate, endDate, direction, locale, translate],
|
||||
);
|
||||
|
||||
const getLabelWidth = useCallback(
|
||||
(index: number): string => {
|
||||
const next = labels[index + 1];
|
||||
const bound = next ? next.horizontalPosition : 100;
|
||||
return `${(bound - labels[index].horizontalPosition).toFixed(3)}%`;
|
||||
},
|
||||
[labels],
|
||||
);
|
||||
|
||||
const justifyContent = direction === "left" ? "flex-start" : "flex-end";
|
||||
|
||||
return (
|
||||
<div className="aksel-timeline__axislabels" aria-hidden="true">
|
||||
{labelSets.reduceRight<React.ReactNode>(
|
||||
(coarserTier, labelSet, index) => (
|
||||
<div
|
||||
className="aksel-timeline__axislabels-tier"
|
||||
key={labelSet.id}
|
||||
data-axis-labels-coarsest={
|
||||
index === labelSets.length - 1 || undefined
|
||||
}
|
||||
style={{
|
||||
[direction]: 0,
|
||||
width: `${
|
||||
(labelSet.slotWidth /
|
||||
(labelSets[index - 1]?.slotWidth ?? 100)) *
|
||||
100
|
||||
}%`,
|
||||
}}
|
||||
>
|
||||
{labelSet.labels.map((label) => (
|
||||
<Detail
|
||||
className="aksel-timeline__axislabels-label"
|
||||
as="div"
|
||||
key={label.date.getTime()}
|
||||
data-axis-labels-density={labelSet.id}
|
||||
style={{
|
||||
textAlign: direction,
|
||||
[direction]: `${
|
||||
(label.horizontalPosition / labelSet.slotWidth) * 100
|
||||
}%`,
|
||||
}}
|
||||
>
|
||||
{label.label}
|
||||
</Detail>
|
||||
))}
|
||||
{coarserTier}
|
||||
</div>
|
||||
),
|
||||
null,
|
||||
)}
|
||||
{labels.map((etikett, index) => (
|
||||
<Detail
|
||||
className="aksel-timeline__axislabels-label"
|
||||
as="div"
|
||||
key={etikett.label}
|
||||
style={{
|
||||
justifyContent,
|
||||
[direction]: `${etikett.horizontalPosition.toFixed(3)}%`,
|
||||
width: getLabelWidth(index),
|
||||
}}
|
||||
>
|
||||
{etikett.label}
|
||||
</Detail>
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -86,18 +86,6 @@ const TimelineRowBase = forwardRef<HTMLOListElement, TimelineRowProps>(
|
||||
onKeyDown={handleRowKeyDown}
|
||||
data-timeline-row
|
||||
>
|
||||
<span
|
||||
className="aksel-timeline__row-line"
|
||||
style={{ left: "12.75%" }}
|
||||
/>
|
||||
<span
|
||||
className="aksel-timeline__row-line"
|
||||
style={{ left: "24.28%" }}
|
||||
/>
|
||||
<span
|
||||
className="aksel-timeline__row-line"
|
||||
style={{ left: "49.37%" }}
|
||||
/>
|
||||
<ol
|
||||
{...rest}
|
||||
ref={ref}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { Meta, StoryObj } from "@storybook/react-vite";
|
||||
import React, { useState } from "react";
|
||||
import { expect, fireEvent, fn } from "storybook/test";
|
||||
import { expect, fireEvent, fn, within } from "storybook/test";
|
||||
import type { ListboxOptionProps } from "./option/ListboxOption";
|
||||
import { Listbox } from "./root/ListboxRoot";
|
||||
|
||||
@@ -212,10 +212,14 @@ export const EnterKey: StoryObj<{
|
||||
},
|
||||
};
|
||||
|
||||
const ListboxStoryWithSelectedOption = () => {
|
||||
const [virtuallyFocusedOptionId, setVirtuallyFocusedOptionId] = useState("");
|
||||
const ListboxStoryWithFilterInput = () => {
|
||||
const [virtuallyFocusedOptionId, setVirtuallyFocusedOptionId] =
|
||||
useState("second-item");
|
||||
return (
|
||||
<Listbox setVirtuallyFocusedOptionId={setVirtuallyFocusedOptionId}>
|
||||
<Listbox.InputSlot virtuallyFocusedOptionId={virtuallyFocusedOptionId}>
|
||||
<input type="text" aria-label="Filter" />
|
||||
</Listbox.InputSlot>
|
||||
<Listbox.Options>
|
||||
<Listbox.Option
|
||||
id="first-item"
|
||||
@@ -226,12 +230,12 @@ const ListboxStoryWithSelectedOption = () => {
|
||||
First item
|
||||
</Listbox.Option>
|
||||
<Listbox.Option
|
||||
id="selected-item"
|
||||
id="second-item"
|
||||
onClick={() => {}}
|
||||
hasVirtualFocus={virtuallyFocusedOptionId === "selected-item"}
|
||||
aria-selected
|
||||
hasVirtualFocus={virtuallyFocusedOptionId === "second-item"}
|
||||
aria-selected={false}
|
||||
>
|
||||
Selected item
|
||||
Second item
|
||||
</Listbox.Option>
|
||||
<Listbox.Option
|
||||
id="last-item"
|
||||
@@ -246,19 +250,30 @@ const ListboxStoryWithSelectedOption = () => {
|
||||
);
|
||||
};
|
||||
|
||||
// When there's a selected option, but no option has virtual focus,
|
||||
// pressing ArrowUp or ArrowDown should focus the selected option.
|
||||
export const ArrowDownFocusesSelectedOption: StoryObj = {
|
||||
render: ListboxStoryWithSelectedOption,
|
||||
// When a filter input has real focus, ArrowUp on first option and
|
||||
// ArrowDown on last option should remove virtual focus so that
|
||||
// perceived focus is returned to the input.
|
||||
export const ArrowUpOnFirstOptionFocusInput: StoryObj = {
|
||||
render: ListboxStoryWithFilterInput,
|
||||
play: async ({ canvasElement }) => {
|
||||
pressKey(canvasElement, "ArrowDown");
|
||||
expect(getVirtuallyFocusedValue(canvasElement)).toBe("selected-item");
|
||||
const canvas = within(canvasElement);
|
||||
const input = canvas.getByLabelText("Filter");
|
||||
input.focus();
|
||||
fireEvent.keyDown(input, { key: "ArrowUp" });
|
||||
expect(getVirtuallyFocusedValue(canvasElement)).toBe("first-item");
|
||||
fireEvent.keyDown(input, { key: "ArrowUp" });
|
||||
expect(getVirtuallyFocusedValue(canvasElement)).toBeUndefined();
|
||||
},
|
||||
};
|
||||
export const ArrowUpFocusesSelectedOption: StoryObj = {
|
||||
render: ListboxStoryWithSelectedOption,
|
||||
export const ArrowDownOnLastOptionFocusInput: StoryObj = {
|
||||
render: ListboxStoryWithFilterInput,
|
||||
play: async ({ canvasElement }) => {
|
||||
pressKey(canvasElement, "ArrowUp");
|
||||
expect(getVirtuallyFocusedValue(canvasElement)).toBe("selected-item");
|
||||
const canvas = within(canvasElement);
|
||||
const input = canvas.getByLabelText("Filter");
|
||||
input.focus();
|
||||
fireEvent.keyDown(input, { key: "ArrowDown" });
|
||||
expect(getVirtuallyFocusedValue(canvasElement)).toBe("last-item");
|
||||
fireEvent.keyDown(input, { key: "ArrowDown" });
|
||||
expect(getVirtuallyFocusedValue(canvasElement)).toBeUndefined();
|
||||
},
|
||||
};
|
||||
@@ -24,6 +24,7 @@ const ListboxInputSlot = ({
|
||||
// @ts-expect-error - You are meant to use an <input>, but Slot doesn't know that.
|
||||
autoComplete="off"
|
||||
role="combobox"
|
||||
data-aksel-listbox-input
|
||||
>
|
||||
{children}
|
||||
</Slot>
|
||||
|
||||
@@ -72,30 +72,34 @@ const ListboxComponent = forwardRef<HTMLDivElement, ListboxProps>(
|
||||
listbox.focus();
|
||||
}
|
||||
|
||||
const virtuallyFocusWithFallback = (
|
||||
getNextElement: (currentOption: HTMLElement) => HTMLElement | null,
|
||||
const handleArrowUpOrDown = (
|
||||
getNextOption: (currentOption: HTMLElement) => HTMLElement | null,
|
||||
getFallback: () => HTMLElement | null,
|
||||
) => {
|
||||
event.preventDefault();
|
||||
if (!focusedOptionElm) {
|
||||
const fallback =
|
||||
listbox.querySelector<HTMLElement>('[aria-selected="true"]') ||
|
||||
getFallback();
|
||||
virtuallyFocusOption(fallback);
|
||||
virtuallyFocusOption(getFallback());
|
||||
return;
|
||||
}
|
||||
const nextOption = getNextElement(focusedOptionElm);
|
||||
const nextOption = getNextOption(focusedOptionElm);
|
||||
if (nextOption) {
|
||||
virtuallyFocusOption(nextOption);
|
||||
return;
|
||||
}
|
||||
// No nextOption: Assume you pressed up on first option or down on last option
|
||||
const activeElement = document.activeElement as HTMLElement;
|
||||
if (activeElement.dataset?.akselListboxInput) {
|
||||
setVirtuallyFocusedOptionId("");
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
switch (event.key) {
|
||||
case "ArrowUp":
|
||||
virtuallyFocusWithFallback(findPrevOption, getLastOption);
|
||||
handleArrowUpOrDown(findPrevOption, getLastOption);
|
||||
break;
|
||||
case "ArrowDown":
|
||||
virtuallyFocusWithFallback(findNextOption, getFirstOption);
|
||||
handleArrowUpOrDown(findNextOption, getFirstOption);
|
||||
break;
|
||||
case "PageUp":
|
||||
event.preventDefault();
|
||||
|
||||
@@ -49,7 +49,7 @@ export interface DateInputProps
|
||||
*/
|
||||
label: React.ReactNode;
|
||||
/**
|
||||
* Shows label and description for screen readers only
|
||||
* Hides the label and description visually while keeping them available to screen readers
|
||||
* @default false
|
||||
*/
|
||||
hideLabel?: boolean;
|
||||
|
||||
@@ -27,8 +27,7 @@ export function useControllableState<StateT, ChangeT extends StateT = StateT>({
|
||||
|
||||
const setValue = useEventCallback(
|
||||
(next: ChangeT | ((prevState: StateT) => ChangeT)) => {
|
||||
const setter = next as (prevState?: StateT) => ChangeT;
|
||||
const nextValue = typeof next === "function" ? setter(value) : next;
|
||||
const nextValue = isFunction(next) ? next(value) : next;
|
||||
|
||||
if (!controlled) {
|
||||
setUncontrolledState(nextValue);
|
||||
@@ -40,3 +39,5 @@ export function useControllableState<StateT, ChangeT extends StateT = StateT>({
|
||||
|
||||
return [value, setValue] as const;
|
||||
}
|
||||
|
||||
const isFunction = (value: unknown) => typeof value === "function";
|
||||
@@ -1,4 +1,4 @@
|
||||
import DOMPurify from "isomorphic-dompurify";
|
||||
import { sanitize } from "isomorphic-dompurify";
|
||||
import "server-only";
|
||||
import styles from "./GodPraksisPictogram.module.css";
|
||||
|
||||
@@ -26,7 +26,7 @@ async function GodPraksisPictogram({
|
||||
|
||||
const formattedSvgString = formatSvgString(svgString, active);
|
||||
|
||||
const cleanedSvg = DOMPurify.sanitize(formattedSvgString, {
|
||||
const cleanedSvg = sanitize(formattedSvgString, {
|
||||
USE_PROFILES: { svg: true },
|
||||
});
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import DOMPurify from "isomorphic-dompurify";
|
||||
import { sanitize } from "isomorphic-dompurify";
|
||||
import styles from "./ImageAsSvg.module.css";
|
||||
|
||||
/**
|
||||
@@ -27,7 +27,7 @@ async function ImageAsThemedSvg({
|
||||
|
||||
const formattedSvgString = formatSvgString(svgString);
|
||||
|
||||
const cleanedSvg = DOMPurify.sanitize(formattedSvgString, {
|
||||
const cleanedSvg = sanitize(formattedSvgString, {
|
||||
USE_PROFILES: { svg: true },
|
||||
});
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
"codesandbox-import-utils": "^2.2.3",
|
||||
"date-fns": "^4.0.0",
|
||||
"fuse.js": "7.4.2",
|
||||
"isomorphic-dompurify": "2.26.0",
|
||||
"isomorphic-dompurify": "4.6.0",
|
||||
"jscodeshift": "17.4.0",
|
||||
"lodash": "4.18.1",
|
||||
"lz-string": "^1.5.0",
|
||||
|
||||
@@ -146,19 +146,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@asamuzakjp/css-color@npm:^3.2.0":
|
||||
version: 3.2.0
|
||||
resolution: "@asamuzakjp/css-color@npm:3.2.0"
|
||||
dependencies:
|
||||
"@csstools/css-calc": "npm:^2.1.3"
|
||||
"@csstools/css-color-parser": "npm:^3.0.9"
|
||||
"@csstools/css-parser-algorithms": "npm:^3.0.4"
|
||||
"@csstools/css-tokenizer": "npm:^3.0.3"
|
||||
lru-cache: "npm:^10.4.3"
|
||||
checksum: 10/870f661460173174fef8bfebea0799ba26566f3aa7b307e5adabb7aae84fed2da68e40080104ed0c83b43c5be632ee409e65396af13bfe948a3ef4c2c729ecd9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@asamuzakjp/css-color@npm:^5.0.1, @asamuzakjp/css-color@npm:^5.1.11":
|
||||
version: 5.1.11
|
||||
resolution: "@asamuzakjp/css-color@npm:5.1.11"
|
||||
@@ -172,6 +159,31 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@asamuzakjp/css-color@npm:^7.1.3":
|
||||
version: 7.1.6
|
||||
resolution: "@asamuzakjp/css-color@npm:7.1.6"
|
||||
dependencies:
|
||||
"@csstools/css-calc": "npm:^3.4.3"
|
||||
"@csstools/css-color-parser": "npm:^4.2.6"
|
||||
"@csstools/css-parser-algorithms": "npm:^4.0.2"
|
||||
"@csstools/css-tokenizer": "npm:^4.0.2"
|
||||
lru-cache: "npm:^11.5.3"
|
||||
checksum: 10/fdea199179b1fe89f69c0558fdda3dad8992b108aa9c0368c031f5b2b320a74b2b9df1b771e7d225a62fedd61fa242f77c75d56eff2ce661b1f7b4a1ca8fe22b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@asamuzakjp/dom-selector@npm:^10.0.3":
|
||||
version: 10.0.3
|
||||
resolution: "@asamuzakjp/dom-selector@npm:10.0.3"
|
||||
dependencies:
|
||||
bidi-js: "npm:^1.1.0"
|
||||
css-tree: "npm:^3.2.1"
|
||||
is-potential-custom-element-name: "npm:^1.0.1"
|
||||
lru-cache: "npm:^11.5.3"
|
||||
checksum: 10/c3ac20eae1957f2029d78784257efea96bf523f32ef83a06cd5a039ea968f9740a94c17fcb79eb13fb1e0d456b36f5b4ff1e31110c9b53a033f74a227e8c553f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@asamuzakjp/dom-selector@npm:^6.8.1":
|
||||
version: 6.8.1
|
||||
resolution: "@asamuzakjp/dom-selector@npm:6.8.1"
|
||||
@@ -2234,13 +2246,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@csstools/color-helpers@npm:^5.1.0":
|
||||
version: 5.1.0
|
||||
resolution: "@csstools/color-helpers@npm:5.1.0"
|
||||
checksum: 10/0138b3d5ccbe77aeccf6721fd008a53523c70e932f0c82dca24a1277ca780447e1d8357da47512ebf96358476f8764de57002f3e491920d67e69202f5a74c383
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@csstools/color-helpers@npm:^6.1.1":
|
||||
version: 6.1.1
|
||||
resolution: "@csstools/color-helpers@npm:6.1.1"
|
||||
@@ -2248,13 +2253,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@csstools/css-calc@npm:^2.1.3, @csstools/css-calc@npm:^2.1.4":
|
||||
version: 2.1.4
|
||||
resolution: "@csstools/css-calc@npm:2.1.4"
|
||||
peerDependencies:
|
||||
"@csstools/css-parser-algorithms": ^3.0.5
|
||||
"@csstools/css-tokenizer": ^3.0.4
|
||||
checksum: 10/06975b650c0f44c60eeb7afdb3fd236f2dd607b2c622e0bc908d3f54de39eb84e0692833320d03dac04bd6c1ab0154aa3fa0dd442bd9e5f917cf14d8e2ba8d74
|
||||
"@csstools/color-helpers@npm:^6.1.2":
|
||||
version: 6.1.2
|
||||
resolution: "@csstools/color-helpers@npm:6.1.2"
|
||||
checksum: 10/344d8638d853e8a31f059d8c647b5a45c90c05482c1e9d390b03041152747f8df7464f0c3eb3bf7bf2ac34338eca7807bf5971f5a8dd07299f56bdf2071df0fa
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2268,16 +2270,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@csstools/css-color-parser@npm:^3.0.9":
|
||||
version: 3.1.0
|
||||
resolution: "@csstools/css-color-parser@npm:3.1.0"
|
||||
dependencies:
|
||||
"@csstools/color-helpers": "npm:^5.1.0"
|
||||
"@csstools/css-calc": "npm:^2.1.4"
|
||||
"@csstools/css-calc@npm:^3.4.3":
|
||||
version: 3.4.3
|
||||
resolution: "@csstools/css-calc@npm:3.4.3"
|
||||
peerDependencies:
|
||||
"@csstools/css-parser-algorithms": ^3.0.5
|
||||
"@csstools/css-tokenizer": ^3.0.4
|
||||
checksum: 10/4741095fdc4501e8e7ada4ed14fbf9dbbe6fea9b989818790ebca15657c29c62defbebacf18592cde2aa638a1d098bbe86d742d2c84ba932fbc00fac51cb8805
|
||||
"@csstools/css-parser-algorithms": ^4.0.2
|
||||
"@csstools/css-tokenizer": ^4.0.2
|
||||
checksum: 10/2047e7e79a5863ee2205e6a41ea375648d0af7455befc16cd9f4e4a0b7e89c0584249cd8bafb070e959e100a4310973b05b7908d508756bb5fe7893d71fcea97
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2294,21 +2293,25 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@csstools/css-parser-algorithms@npm:^3.0.4":
|
||||
version: 3.0.5
|
||||
resolution: "@csstools/css-parser-algorithms@npm:3.0.5"
|
||||
"@csstools/css-color-parser@npm:^4.2.6":
|
||||
version: 4.2.6
|
||||
resolution: "@csstools/css-color-parser@npm:4.2.6"
|
||||
dependencies:
|
||||
"@csstools/color-helpers": "npm:^6.1.2"
|
||||
"@csstools/css-calc": "npm:^3.4.3"
|
||||
peerDependencies:
|
||||
"@csstools/css-tokenizer": ^3.0.4
|
||||
checksum: 10/e93083b5cb36a3c1e7a47ce10cf62961d05bd1e4c608bb3ee50186ff740157ab0ec16a3956f7b86251efd10703034d849693201eea858ae904848c68d2d46ada
|
||||
"@csstools/css-parser-algorithms": ^4.0.2
|
||||
"@csstools/css-tokenizer": ^4.0.2
|
||||
checksum: 10/cfa89151997ca60fa50f1035c327d55f1c988b7bf4f72d19e974ad5d53da63c5ba193b0a84bdc1f20840d363ac736953b67bb8706cf64680ecd4d7daee2a13b1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@csstools/css-parser-algorithms@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "@csstools/css-parser-algorithms@npm:4.0.0"
|
||||
"@csstools/css-parser-algorithms@npm:^4.0.0, @csstools/css-parser-algorithms@npm:^4.0.2":
|
||||
version: 4.0.2
|
||||
resolution: "@csstools/css-parser-algorithms@npm:4.0.2"
|
||||
peerDependencies:
|
||||
"@csstools/css-tokenizer": ^4.0.0
|
||||
checksum: 10/000f3ba55f440d9fbece50714e88f9d4479e2bde9e0568333492663f2c6034dc31d0b9ef5d66d196c76be58eea145ca6920aa8bdfdcc6361894806c21b5402d0
|
||||
"@csstools/css-tokenizer": ^4.0.2
|
||||
checksum: 10/10ece52dea89581cd3f9cc2406c2d4a6c90e7cfbd59d0dad7160aaaffb880d44dce20df2097e7d500d619b97a7db726d0dd90d33ba92b18eeb41a67c985ed60e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2324,17 +2327,22 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@csstools/css-tokenizer@npm:^3.0.3":
|
||||
version: 3.0.4
|
||||
resolution: "@csstools/css-tokenizer@npm:3.0.4"
|
||||
checksum: 10/eb6c84c086312f6bb8758dfe2c85addd7475b0927333c5e39a4d59fb210b9810f8c346972046f95e60a721329cffe98895abe451e51de753ad1ca7a8c24ec65f
|
||||
"@csstools/css-syntax-patches-for-csstree@npm:^1.1.15":
|
||||
version: 1.1.15
|
||||
resolution: "@csstools/css-syntax-patches-for-csstree@npm:1.1.15"
|
||||
peerDependencies:
|
||||
css-tree: ^3.2.1
|
||||
peerDependenciesMeta:
|
||||
css-tree:
|
||||
optional: true
|
||||
checksum: 10/c955c7072c9e6be6ca0836c582f9a233b8445ccc14b1459c87ff24e5604665e99e40994e8e32640b7ea6cccc3b75162d847b4fac864565b729070b7cd02536cf
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@csstools/css-tokenizer@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "@csstools/css-tokenizer@npm:4.0.0"
|
||||
checksum: 10/074ade1a7fc3410b813c8982cf07a56814a55af509c533c2dc80d5689f34d2ba38219f8fa78fa36ea2adc6c5db506ea3c3a667388dda1b59b1281fdd2a2d1e28
|
||||
"@csstools/css-tokenizer@npm:^4.0.0, @csstools/css-tokenizer@npm:^4.0.2":
|
||||
version: 4.0.2
|
||||
resolution: "@csstools/css-tokenizer@npm:4.0.2"
|
||||
checksum: 10/d01ac3d39fc699b61221237f11b281f3fe0e1c029581aa6733c894754eef2f6c4b077584acacdd37853ac4573e69d53ecd76db2db4898ed0da2466ae27758923
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2940,15 +2948,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@exodus/bytes@npm:^1.11.0, @exodus/bytes@npm:^1.15.0, @exodus/bytes@npm:^1.6.0":
|
||||
version: 1.15.1
|
||||
resolution: "@exodus/bytes@npm:1.15.1"
|
||||
"@exodus/bytes@npm:^1.11.0, @exodus/bytes@npm:^1.15.0, @exodus/bytes@npm:^1.15.1, @exodus/bytes@npm:^1.16.0, @exodus/bytes@npm:^1.6.0":
|
||||
version: 1.16.0
|
||||
resolution: "@exodus/bytes@npm:1.16.0"
|
||||
peerDependencies:
|
||||
"@noble/hashes": ^1.8.0 || ^2.0.0
|
||||
peerDependenciesMeta:
|
||||
"@noble/hashes":
|
||||
optional: true
|
||||
checksum: 10/7dde00ae8040ec032ba3c287d210d7d555986caaf81a1215311c180422697d739a1952eb9d91e841132b18a19a910cdd02e4914136db3cc87baaa0fdd84b1e87
|
||||
checksum: 10/6106d0ae523614c81152d791a6ea2a8a323c0c193d8e9d14dd4da22148a6c31c4fc15705655d5a3d66cbc2fb0e640c0650f776eeef7d5bbab3027cc726bc6f50
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -4923,7 +4931,7 @@ __metadata:
|
||||
"@types/is-git-clean": "npm:1.1.2"
|
||||
"@types/jscodeshift": "npm:17.3.0"
|
||||
"@types/lodash": "npm:4.17.25"
|
||||
chalk: "npm:5.6.2"
|
||||
chalk: "npm:6.0.1"
|
||||
cli-progress: "npm:3.12.0"
|
||||
clipboardy: "npm:5.3.2"
|
||||
commander: "npm:15.0.0"
|
||||
@@ -4969,10 +4977,10 @@ __metadata:
|
||||
"@floating-ui/react-dom": "npm:^2.1.9"
|
||||
"@navikt/aksel-icons": "npm:^8.20.0"
|
||||
"@navikt/ds-tokens": "npm:^8.20.0"
|
||||
"@testing-library/dom": "npm:10.4.1"
|
||||
"@testing-library/jest-dom": "npm:^6.6.3"
|
||||
"@testing-library/dom": "npm:10.4.2"
|
||||
"@testing-library/jest-dom": "npm:^7.0.1"
|
||||
"@testing-library/react": "npm:^16.3.3"
|
||||
"@testing-library/user-event": "npm:^14.6.7"
|
||||
"@testing-library/user-event": "npm:^14.6.8"
|
||||
"@types/jscodeshift": "npm:17.3.0"
|
||||
"@types/node": "npm:^24.10.9"
|
||||
"@types/react": "npm:19.2.14"
|
||||
@@ -7983,9 +7991,9 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@testing-library/dom@npm:10.4.1, @testing-library/dom@npm:^10.4.1":
|
||||
version: 10.4.1
|
||||
resolution: "@testing-library/dom@npm:10.4.1"
|
||||
"@testing-library/dom@npm:10.4.2, @testing-library/dom@npm:^10.4.1":
|
||||
version: 10.4.2
|
||||
resolution: "@testing-library/dom@npm:10.4.2"
|
||||
dependencies:
|
||||
"@babel/code-frame": "npm:^7.10.4"
|
||||
"@babel/runtime": "npm:^7.12.5"
|
||||
@@ -7995,11 +8003,11 @@ __metadata:
|
||||
lz-string: "npm:^1.5.0"
|
||||
picocolors: "npm:1.1.1"
|
||||
pretty-format: "npm:^27.0.2"
|
||||
checksum: 10/7f93e09ea015f151f8b8f42cbab0b2b858999b5445f15239a72a612ef7716e672b14c40c421218194cf191cbecbde0afa6f3dc2cc83dda93ff6a4fb0237df6e6
|
||||
checksum: 10/3ac24b320ae0e59f48a560bbe279f80e75539641e260d5e1c0455413babcb73a23f7090e9d80fca13933c5bc319fe3e48f61b9c89fbe6d4194f8f58e8bab44d4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@testing-library/jest-dom@npm:6.9.1, @testing-library/jest-dom@npm:^6.6.3":
|
||||
"@testing-library/jest-dom@npm:6.9.1":
|
||||
version: 6.9.1
|
||||
resolution: "@testing-library/jest-dom@npm:6.9.1"
|
||||
dependencies:
|
||||
@@ -8013,6 +8021,26 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@testing-library/jest-dom@npm:^7.0.1":
|
||||
version: 7.0.1
|
||||
resolution: "@testing-library/jest-dom@npm:7.0.1"
|
||||
dependencies:
|
||||
"@adobe/css-tools": "npm:^4.4.0"
|
||||
aria-query: "npm:^5.0.0"
|
||||
css.escape: "npm:^1.5.1"
|
||||
dom-accessibility-api: "npm:^0.6.3"
|
||||
picocolors: "npm:^1.1.1"
|
||||
redent: "npm:^3.0.0"
|
||||
peerDependencies:
|
||||
"@testing-library/dom": ">=10 <11"
|
||||
vitest: ">= 0.32"
|
||||
peerDependenciesMeta:
|
||||
vitest:
|
||||
optional: true
|
||||
checksum: 10/0770454b47da9370e59cda691f797c0442e53caefcd412c504b33c7a9bee099c8a9e7d1f07f7eae8d380ea52c34a5d70139e875480a57f729588068edc78f57b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@testing-library/react@npm:^16.3.3":
|
||||
version: 16.3.3
|
||||
resolution: "@testing-library/react@npm:16.3.3"
|
||||
@@ -8033,12 +8061,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@testing-library/user-event@npm:^14.6.3, @testing-library/user-event@npm:^14.6.7":
|
||||
version: 14.6.7
|
||||
resolution: "@testing-library/user-event@npm:14.6.7"
|
||||
"@testing-library/user-event@npm:^14.6.3, @testing-library/user-event@npm:^14.6.8":
|
||||
version: 14.6.8
|
||||
resolution: "@testing-library/user-event@npm:14.6.8"
|
||||
peerDependencies:
|
||||
"@testing-library/dom": ">=7.21.4"
|
||||
checksum: 10/afeb8ecb496c35c51a5cac0c94266808cfff748022c868a7682712d58cce6a93b649d1a667bb0b134ab93d9ce5bc9d113bfb28436b7f1b89203e589120b087d2
|
||||
checksum: 10/674190e5d592d5f1478af26c08c13ee197dbbc03885da3b99312c9cd810e4dc9c0ffbd4df91c51f39d467c1866a0c28f451df56d3fd535a5260d7660c24d9f42
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -10025,7 +10053,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"argparse@npm:^3.0.0, argparse@npm:^3.0.3":
|
||||
"argparse@npm:^3.0.3":
|
||||
version: 3.0.3
|
||||
resolution: "argparse@npm:3.0.3"
|
||||
checksum: 10/6834e247fe8a8d21a0061dc2b7134ae79625d9ab795eca043d8ba9434be3bc1e7d049c9a4aa01bd3d6bfc145b29addfb290d17b8b3f7b11710cc52ab13629f31
|
||||
@@ -10597,12 +10625,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"bidi-js@npm:^1.0.3":
|
||||
version: 1.0.3
|
||||
resolution: "bidi-js@npm:1.0.3"
|
||||
"bidi-js@npm:^1.0.3, bidi-js@npm:^1.1.0":
|
||||
version: 1.1.0
|
||||
resolution: "bidi-js@npm:1.1.0"
|
||||
dependencies:
|
||||
require-from-string: "npm:^2.0.2"
|
||||
checksum: 10/c4341c7a98797efe3d186cd99d6f97e9030a4f959794ca200ef2ec0a678483a916335bba6c2c0608a21d04a221288a31c9fd0faa0cd9b3903b93594b42466a6a
|
||||
checksum: 10/e370f6a0c83c509fab7006958a1ea00e681123fe63b3c7cf0bc6e65e0b9b2818ef42ee642e4828035582356d1b7e98ef1585cb6aa2b75be153213106232c0873
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -11018,6 +11046,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"chalk@npm:6.0.1":
|
||||
version: 6.0.1
|
||||
resolution: "chalk@npm:6.0.1"
|
||||
checksum: 10/1457692e6327f299da7d7cd6a7774fe1de25bda6c0e33791901d6762a6c0f2409bd3d92bf7695519825c2fbb405c104a0a73fd489e4e9f88af3ef2a1d97455c9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"chalk@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "chalk@npm:3.0.0"
|
||||
@@ -12031,16 +12066,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cssstyle@npm:^4.2.1":
|
||||
version: 4.6.0
|
||||
resolution: "cssstyle@npm:4.6.0"
|
||||
dependencies:
|
||||
"@asamuzakjp/css-color": "npm:^3.2.0"
|
||||
rrweb-cssom: "npm:^0.8.0"
|
||||
checksum: 10/1cb25c9d66b87adb165f978b75cdeb6f225d7e31ba30a8934666046a0be037e4e7200d359bfa79d4f1a4aef1083ea09633b81bcdb36a2f2ac888e8c73ea3a289
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cssstyle@npm:^6.0.1":
|
||||
version: 6.2.0
|
||||
resolution: "cssstyle@npm:6.2.0"
|
||||
@@ -12081,16 +12106,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"data-urls@npm:^5.0.0":
|
||||
version: 5.0.0
|
||||
resolution: "data-urls@npm:5.0.0"
|
||||
dependencies:
|
||||
whatwg-mimetype: "npm:^4.0.0"
|
||||
whatwg-url: "npm:^14.0.0"
|
||||
checksum: 10/5c40568c31b02641a70204ff233bc4e42d33717485d074244a98661e5f2a1e80e38fe05a5755dfaf2ee549f2ab509d6a3af2a85f4b2ad2c984e5d176695eaf46
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"data-urls@npm:^7.0.0":
|
||||
version: 7.0.0
|
||||
resolution: "data-urls@npm:7.0.0"
|
||||
@@ -12101,6 +12116,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"data-urls@npm:^8.0.0":
|
||||
version: 8.0.0
|
||||
resolution: "data-urls@npm:8.0.0"
|
||||
dependencies:
|
||||
whatwg-mimetype: "npm:^5.0.0"
|
||||
whatwg-url: "npm:^17.1.2"
|
||||
checksum: 10/c3ff7e719fa218546bac31b06540369f2205d9406dd9c77d36b77c696b8f6ab8762b92118beab91cf66929df50e587255405f92efd61c18137e931381c44ea97
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"data-view-buffer@npm:^1.0.2":
|
||||
version: 1.0.2
|
||||
resolution: "data-view-buffer@npm:1.0.2"
|
||||
@@ -12199,7 +12224,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"decimal.js@npm:^10.5.0, decimal.js@npm:^10.6.0":
|
||||
"decimal.js@npm:^10.6.0":
|
||||
version: 10.6.0
|
||||
resolution: "decimal.js@npm:10.6.0"
|
||||
checksum: 10/c0d45842d47c311d11b38ce7ccc911121953d4df3ebb1465d92b31970eb4f6738a065426a06094af59bee4b0d64e42e7c8984abd57b6767c64ea90cf90bb4a69
|
||||
@@ -12565,15 +12590,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"dompurify@npm:^3.2.6, dompurify@npm:^3.3.1, dompurify@npm:^3.4.14":
|
||||
version: 3.4.16
|
||||
resolution: "dompurify@npm:3.4.16"
|
||||
"dompurify@npm:^3.3.1, dompurify@npm:^3.4.14, dompurify@npm:^3.4.17":
|
||||
version: 3.4.17
|
||||
resolution: "dompurify@npm:3.4.17"
|
||||
dependencies:
|
||||
"@types/trusted-types": "npm:^2.0.7"
|
||||
dependenciesMeta:
|
||||
"@types/trusted-types":
|
||||
optional: true
|
||||
checksum: 10/a571d0e2bede4f739666afd640398a86854abd27c71ce0724910249e2fd2ca7ddb8098a9ab579d3a5b39058419af694421f8fe859a81fd6d8acda16019a8ab9d
|
||||
checksum: 10/ae03c068bd351d1201a24a9667cb302c65939f45a0c357edec8b84133108e19ac74f355c2d8b0f30baadadd7f0be2db300d269aa80d3ee15872712ca9ff4e1a8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -12790,10 +12815,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"entities@npm:^8.0.0":
|
||||
version: 8.0.0
|
||||
resolution: "entities@npm:8.0.0"
|
||||
checksum: 10/d6e2ba75e444fb101ee2fbb07c839e687306c8a509426b75186619c19196f97c1db9932ca083f823c03e4a20e7407b654aa34de8cbb7770468e20fb2d4573a0e
|
||||
"entities@npm:^8.0.0, entities@npm:^8.1.0":
|
||||
version: 8.1.0
|
||||
resolution: "entities@npm:8.1.0"
|
||||
checksum: 10/bd2fadbcabcf2cbd5de6b8155289acec9394d004fc095b9c7b3fdb4135468d8823a6de12275b07085e5dc077a142ede24e71098ffeb064000312d2a6960330a2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -15087,15 +15112,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"html-encoding-sniffer@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "html-encoding-sniffer@npm:4.0.0"
|
||||
dependencies:
|
||||
whatwg-encoding: "npm:^3.1.1"
|
||||
checksum: 10/e86efd493293a5671b8239bd099d42128433bb3c7b0fdc7819282ef8e118a21f5dead0ad6f358e024a4e5c84f17ebb7a9b36075220fac0a6222b207248bede6f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"html-encoding-sniffer@npm:^6.0.0":
|
||||
version: 6.0.0
|
||||
resolution: "html-encoding-sniffer@npm:6.0.0"
|
||||
@@ -15105,6 +15121,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"html-encoding-sniffer@npm:^7.0.0":
|
||||
version: 7.0.0
|
||||
resolution: "html-encoding-sniffer@npm:7.0.0"
|
||||
dependencies:
|
||||
"@exodus/bytes": "npm:^1.15.1"
|
||||
checksum: 10/03681bc40d5e22c8380bee314e899ceedd6d9900b62a592a0d33fab8303646c32f3efcf857fca3d39e40d6561f3efa178bdf1decf750ac4247b34cd6f592cc54
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"html-entities@npm:^2.5.2":
|
||||
version: 2.6.0
|
||||
resolution: "html-entities@npm:2.6.0"
|
||||
@@ -15354,15 +15379,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"iconv-lite@npm:0.6.3":
|
||||
version: 0.6.3
|
||||
resolution: "iconv-lite@npm:0.6.3"
|
||||
dependencies:
|
||||
safer-buffer: "npm:>= 2.1.2 < 3.0.0"
|
||||
checksum: 10/24e3292dd3dadaa81d065c6f8c41b274a47098150d444b96e5f53b4638a9a71482921ea6a91a1f59bb71d9796de25e04afd05919fa64c360347ba65d3766f10f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"iconv-lite@npm:^0.4.4, iconv-lite@npm:~0.4.24":
|
||||
version: 0.4.24
|
||||
resolution: "iconv-lite@npm:0.4.24"
|
||||
@@ -15583,9 +15599,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"ip-address@npm:^10.2.0":
|
||||
version: 10.7.2
|
||||
resolution: "ip-address@npm:10.7.2"
|
||||
checksum: 10/3a051cb5234cff142bb527e8b40bf0f9dd895b0334161b1ffe0256700a50a49f4d3b94ef72a809f086b2bd6489d4f7a4a52025b03db9c2e9e83a5f9e4d4bdb60
|
||||
version: 10.7.4
|
||||
resolution: "ip-address@npm:10.7.4"
|
||||
checksum: 10/89375f1fa00e5bb4e724498886e06d870c1cc0abbfa9df8cb5ce80f3f179ee49feb0ca96ec54a1512c2303302719975a2ad96e3a8fcc13b4fd836d7f461d3d95
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -16203,16 +16219,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"isomorphic-dompurify@npm:2.26.0":
|
||||
version: 2.26.0
|
||||
resolution: "isomorphic-dompurify@npm:2.26.0"
|
||||
dependencies:
|
||||
dompurify: "npm:^3.2.6"
|
||||
jsdom: "npm:^26.1.0"
|
||||
checksum: 10/7a925dbcfdc0b3151f003d93c7e62d2b54c4fa6678420a211aba6eea377fa04e4daa94e340fd2a0534921d1165bbd06a3f21c6ccf3b76e7f5b0de40a4a604dc1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"isomorphic-dompurify@npm:2.36.0":
|
||||
version: 2.36.0
|
||||
resolution: "isomorphic-dompurify@npm:2.36.0"
|
||||
@@ -16223,6 +16229,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"isomorphic-dompurify@npm:4.6.0":
|
||||
version: 4.6.0
|
||||
resolution: "isomorphic-dompurify@npm:4.6.0"
|
||||
dependencies:
|
||||
dompurify: "npm:^3.4.17"
|
||||
jsdom: "npm:^30.1.3"
|
||||
checksum: 10/017a9ef5bb48176cbea8114225cdc11d7c8993411dce21165f96ba8d21e914ce27cbfe017a95cabea0d4ee7c760257dba244f40a5f5b2f805d597f79580fee43
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"isomorphic-ws@npm:5.0.0":
|
||||
version: 5.0.0
|
||||
resolution: "isomorphic-ws@npm:5.0.0"
|
||||
@@ -16462,39 +16478,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jsdom@npm:^26.1.0":
|
||||
version: 26.1.0
|
||||
resolution: "jsdom@npm:26.1.0"
|
||||
dependencies:
|
||||
cssstyle: "npm:^4.2.1"
|
||||
data-urls: "npm:^5.0.0"
|
||||
decimal.js: "npm:^10.5.0"
|
||||
html-encoding-sniffer: "npm:^4.0.0"
|
||||
http-proxy-agent: "npm:^7.0.2"
|
||||
https-proxy-agent: "npm:^7.0.6"
|
||||
is-potential-custom-element-name: "npm:^1.0.1"
|
||||
nwsapi: "npm:^2.2.16"
|
||||
parse5: "npm:^7.2.1"
|
||||
rrweb-cssom: "npm:^0.8.0"
|
||||
saxes: "npm:^6.0.0"
|
||||
symbol-tree: "npm:^3.2.4"
|
||||
tough-cookie: "npm:^5.1.1"
|
||||
w3c-xmlserializer: "npm:^5.0.0"
|
||||
webidl-conversions: "npm:^7.0.0"
|
||||
whatwg-encoding: "npm:^3.1.1"
|
||||
whatwg-mimetype: "npm:^4.0.0"
|
||||
whatwg-url: "npm:^14.1.1"
|
||||
ws: "npm:^8.18.0"
|
||||
xml-name-validator: "npm:^5.0.0"
|
||||
peerDependencies:
|
||||
canvas: ^3.0.0
|
||||
peerDependenciesMeta:
|
||||
canvas:
|
||||
optional: true
|
||||
checksum: 10/39d78c4889cac20826393400dce1faed1666e9244fe0c8342a8f08c315375878e6be7fcfe339a33d6ff1a083bfe9e71b16d56ecf4d9a87db2da8c795925ea8c1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jsdom@npm:^28.0.0":
|
||||
version: 28.1.0
|
||||
resolution: "jsdom@npm:28.1.0"
|
||||
@@ -16529,6 +16512,39 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jsdom@npm:^30.1.3":
|
||||
version: 30.1.3
|
||||
resolution: "jsdom@npm:30.1.3"
|
||||
dependencies:
|
||||
"@asamuzakjp/css-color": "npm:^7.1.3"
|
||||
"@asamuzakjp/dom-selector": "npm:^10.0.3"
|
||||
"@bramus/specificity": "npm:^2.4.2"
|
||||
"@csstools/css-syntax-patches-for-csstree": "npm:^1.1.15"
|
||||
"@exodus/bytes": "npm:^1.16.0"
|
||||
css-tree: "npm:^3.2.1"
|
||||
data-urls: "npm:^8.0.0"
|
||||
decimal.js: "npm:^10.6.0"
|
||||
html-encoding-sniffer: "npm:^7.0.0"
|
||||
is-potential-custom-element-name: "npm:^1.0.1"
|
||||
lru-cache: "npm:^11.5.3"
|
||||
parse5: "npm:^8.0.1"
|
||||
saxes: "npm:^6.0.0"
|
||||
tough-cookie: "npm:^6.0.2"
|
||||
undici: "npm:^8.12.1"
|
||||
w3c-xmlserializer: "npm:^6.0.0"
|
||||
webidl-conversions: "npm:^8.0.1"
|
||||
whatwg-mimetype: "npm:^5.0.0"
|
||||
whatwg-url: "npm:^17.2.0"
|
||||
xml-name-validator: "npm:^5.0.0"
|
||||
peerDependencies:
|
||||
canvas: ^3.2.3
|
||||
peerDependenciesMeta:
|
||||
canvas:
|
||||
optional: true
|
||||
checksum: 10/7721063de9bffdf1b721c6bffc70ce83e77c50c145322d788d26bea84f7ef1f355f29a92d43cec935a79406d82507bddab64b5dc94d248e7f98a2cf8059232cd
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jsesc@npm:^3.0.2, jsesc@npm:~3.1.0":
|
||||
version: 3.1.0
|
||||
resolution: "jsesc@npm:3.1.0"
|
||||
@@ -16745,12 +16761,12 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"launch-editor@npm:^2.14.1":
|
||||
version: 2.14.1
|
||||
resolution: "launch-editor@npm:2.14.1"
|
||||
version: 2.14.2
|
||||
resolution: "launch-editor@npm:2.14.2"
|
||||
dependencies:
|
||||
picocolors: "npm:^1.1.1"
|
||||
shell-quote: "npm:^1.8.4"
|
||||
checksum: 10/335d12ca437280e77070657531c251b6c91c62bc653f70ab66ddd2a6e50131b1b043480411c5b93d54955a0a6eb8ec01e9a5b5cfe2d887341d878d19394a126b
|
||||
shell-quote: "npm:^1.10.0"
|
||||
checksum: 10/8a3a82314ed6705d8f6795c409ea31ed2a106d0f0bc0528a60f8b53ec972cce1db9088bb4647987b2ef4bb16b804fcc85e54529acaa26aae22f39eaba704401b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -16914,7 +16930,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"linkify-it@npm:^6.0.0, linkify-it@npm:^6.1.0":
|
||||
"linkify-it@npm:^6.1.0":
|
||||
version: 6.1.0
|
||||
resolution: "linkify-it@npm:6.1.0"
|
||||
dependencies:
|
||||
@@ -17093,17 +17109,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lru-cache@npm:^10.4.3":
|
||||
version: 10.4.3
|
||||
resolution: "lru-cache@npm:10.4.3"
|
||||
checksum: 10/e6e90267360476720fa8e83cc168aa2bf0311f3f2eea20a6ba78b90a885ae72071d9db132f40fda4129c803e7dcec3a6b6a6fbb44ca90b081630b810b5d6a41a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lru-cache@npm:^11.0.0, lru-cache@npm:^11.2.6, lru-cache@npm:^11.3.5":
|
||||
version: 11.5.2
|
||||
resolution: "lru-cache@npm:11.5.2"
|
||||
checksum: 10/122789c66605ddf29df58ff279e9e2c9499499d0b80b895ec524496f14bcde045d1582e3e38008f3457226d98067556719573b352119d6be8bdb1f8849f85681
|
||||
"lru-cache@npm:^11.0.0, lru-cache@npm:^11.2.6, lru-cache@npm:^11.3.5, lru-cache@npm:^11.5.3":
|
||||
version: 11.5.3
|
||||
resolution: "lru-cache@npm:11.5.3"
|
||||
checksum: 10/824394f43827de37e961e9e344d4f0d2afb0347106ddafae620d0035c36337bc64e64cddbc17f6c630a73c9db34cf3f81211e3d43699a32e9f3641f391415b82
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -17202,18 +17211,18 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"markdown-it@npm:^15.0.2":
|
||||
version: 15.0.2
|
||||
resolution: "markdown-it@npm:15.0.2"
|
||||
version: 15.0.3
|
||||
resolution: "markdown-it@npm:15.0.3"
|
||||
dependencies:
|
||||
argparse: "npm:^3.0.0"
|
||||
entities: "npm:^8.0.0"
|
||||
linkify-it: "npm:^6.0.0"
|
||||
argparse: "npm:^3.0.3"
|
||||
entities: "npm:^8.1.0"
|
||||
linkify-it: "npm:^6.1.0"
|
||||
mdurl: "npm:^2.1.0"
|
||||
punycode.js: "npm:^2.3.1"
|
||||
uc.micro: "npm:^3.0.0"
|
||||
bin:
|
||||
markdown-it: bin/markdown-it.mjs
|
||||
checksum: 10/55dd86dbcdab89b910e21773c363e492a41f45e5edb095d05029e43125c5250a891c73becf6504a412cf6fdcdd93ac9629949d3932968347ef36dc1d444d776a
|
||||
checksum: 10/a8a9d3305dfced367cffce7cdce25ab44cfe292a7496d7956681f91648e3affe736c36f52008c93cfa9bea9597cf2ffaddee37815390998d0b6b9262639cb0b3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -18686,13 +18695,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"nwsapi@npm:^2.2.16":
|
||||
version: 2.2.24
|
||||
resolution: "nwsapi@npm:2.2.24"
|
||||
checksum: 10/08795ffcbc213cbc41b72e5c3b357d9db59e27ff8d88808af015ba7689041954ca1b5d6bfd7aa4d7df64338b9b76f853ca7154ec3de403c2104c1a39ac0ed225
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"object-assign@npm:^4, object-assign@npm:^4.0.1, object-assign@npm:^4.1.1":
|
||||
version: 4.1.1
|
||||
resolution: "object-assign@npm:4.1.1"
|
||||
@@ -19380,7 +19382,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"parse5@npm:^7.0.0, parse5@npm:^7.2.1":
|
||||
"parse5@npm:^7.0.0":
|
||||
version: 7.3.0
|
||||
resolution: "parse5@npm:7.3.0"
|
||||
dependencies:
|
||||
@@ -21444,13 +21446,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"rrweb-cssom@npm:^0.8.0":
|
||||
version: 0.8.0
|
||||
resolution: "rrweb-cssom@npm:0.8.0"
|
||||
checksum: 10/07521ee36fb6569c17906afad1ac7ff8f099d49ade9249e190693ac36cdf27f88d9acf0cc66978935d5d0a23fca105643d7e9125b9a9d91ed9db9e02d31d7d80
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"rss@npm:^1.2.2":
|
||||
version: 1.2.2
|
||||
resolution: "rss@npm:1.2.2"
|
||||
@@ -22139,7 +22134,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"shell-quote@npm:1.12.0, shell-quote@npm:^1.8.4":
|
||||
"shell-quote@npm:1.12.0, shell-quote@npm:^1.10.0":
|
||||
version: 1.12.0
|
||||
resolution: "shell-quote@npm:1.12.0"
|
||||
checksum: 10/18b3e382272804e79fd3187c18877cfd4e736b5afb576bf1ab66a561b0a0e26eada4b7c8eb45473d1f17268ffcf12d0aaa90b9235132123eb673df5d0a5df943
|
||||
@@ -23533,13 +23528,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tldts-core@npm:^6.1.86":
|
||||
version: 6.1.86
|
||||
resolution: "tldts-core@npm:6.1.86"
|
||||
checksum: 10/cb5dff9cc15661ac773a2099e98c99a5cb3cebc35909c23cc4261ff7992032c7501995ae995de3574dbbf3431e59c47496534d52f5e96abcb231f0e72144c020
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tldts-core@npm:^7.4.11":
|
||||
version: 7.4.11
|
||||
resolution: "tldts-core@npm:7.4.11"
|
||||
@@ -23547,17 +23535,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tldts@npm:^6.1.32":
|
||||
version: 6.1.86
|
||||
resolution: "tldts@npm:6.1.86"
|
||||
dependencies:
|
||||
tldts-core: "npm:^6.1.86"
|
||||
bin:
|
||||
tldts: bin/cli.js
|
||||
checksum: 10/f7e66824e44479ccdda55ea556af14ce61c4d27708be403e3f90631defde49f82a580e1ca07187cc7e3b349e257a30c2808a22903f3a0548e136ebb609ccc109
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tldts@npm:^7.0.5":
|
||||
version: 7.4.11
|
||||
resolution: "tldts@npm:7.4.11"
|
||||
@@ -23606,16 +23583,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tough-cookie@npm:^5.1.1":
|
||||
version: 5.1.2
|
||||
resolution: "tough-cookie@npm:5.1.2"
|
||||
dependencies:
|
||||
tldts: "npm:^6.1.32"
|
||||
checksum: 10/de430e6e6d34b794137e05b8ac2aa6b74ebbe6cdceb4126f168cf1e76101162a4b2e0e7587c3b70e728bd8654fc39958b2035be7619ee6f08e7257610ba4cd04
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tough-cookie@npm:^6.0.0, tough-cookie@npm:^6.0.1":
|
||||
"tough-cookie@npm:^6.0.0, tough-cookie@npm:^6.0.1, tough-cookie@npm:^6.0.2":
|
||||
version: 6.0.2
|
||||
resolution: "tough-cookie@npm:6.0.2"
|
||||
dependencies:
|
||||
@@ -23624,15 +23592,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tr46@npm:^5.1.0":
|
||||
version: 5.1.1
|
||||
resolution: "tr46@npm:5.1.1"
|
||||
dependencies:
|
||||
punycode: "npm:^2.3.1"
|
||||
checksum: 10/833a0e1044574da5790148fd17866d4ddaea89e022de50279967bcd6b28b4ce0d30d59eb3acf9702b60918975b3bad481400337e3a2e6326cffa5c77b874753d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tr46@npm:^6.0.0":
|
||||
version: 6.0.0
|
||||
resolution: "tr46@npm:6.0.0"
|
||||
@@ -23642,6 +23601,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tr46@npm:^7.0.0":
|
||||
version: 7.0.0
|
||||
resolution: "tr46@npm:7.0.0"
|
||||
dependencies:
|
||||
punycode: "npm:^2.3.1"
|
||||
checksum: 10/fb910fcab8a3dae4f6b5c908e8e5a034815fd96cf0f82fcb71aa9f503c3b17ba0854cc802daa129ee40fb2c6d75a8653082e43ccdf53abdfded22e4ec4b10eac
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tr46@npm:~0.0.3":
|
||||
version: 0.0.3
|
||||
resolution: "tr46@npm:0.0.3"
|
||||
@@ -24146,23 +24114,23 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"undici@npm:^6.23.0":
|
||||
version: 6.29.0
|
||||
resolution: "undici@npm:6.29.0"
|
||||
checksum: 10/fd4969cfc846cb4da7f7b1b225536d629e17b17b4a1913287f1264f30c855b9eb65a6da6cde46ba1ddfe42f113a3969ab2697029c2b920401be2b7b3b40abef8
|
||||
version: 6.29.1
|
||||
resolution: "undici@npm:6.29.1"
|
||||
checksum: 10/92acb64ec190fe3499dec69830fdfc48e28f6f19627bad7563cfd57c37b4e95379c12b8ac15a2e6a8739eaac358f17503a229c160d3dc8774141b1e270d8aa57
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"undici@npm:^7.21.0, undici@npm:^7.25.0, undici@npm:^7.30.0":
|
||||
version: 7.30.0
|
||||
resolution: "undici@npm:7.30.0"
|
||||
checksum: 10/eb9e4bb5f1b4c35cb934c0d04fe676b62c3be06fb3be4a256ff73699bd77abc3d41f262597a4debd41f334c95ca3ea6e763268c3768882c3fc88a5d33234b8f6
|
||||
version: 7.30.1
|
||||
resolution: "undici@npm:7.30.1"
|
||||
checksum: 10/306a28e4c715652a0e2cd59bcc98cf8b6083b989151054fafaac27bdab6f2bc7e0f33f5847f72f5ba257971226372d04705e0e984b26b42a03271d5a35eb99b1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"undici@npm:^8.11.2, undici@npm:^8.4.1":
|
||||
version: 8.11.2
|
||||
resolution: "undici@npm:8.11.2"
|
||||
checksum: 10/a6d851b0a41a94ee11d351457a818f86094ab009af59d82c1e3c38a89cfbb3910f9dbccdef442b156b9d500490f05e9ef9acf312f1a4690a41fac4941a440b8e
|
||||
"undici@npm:^8.11.2, undici@npm:^8.12.1, undici@npm:^8.4.1":
|
||||
version: 8.12.2
|
||||
resolution: "undici@npm:8.12.2"
|
||||
checksum: 10/91d7979b94e23d3b7dc1a1ecdea5b62791bfa88209db9589659b0345c3ee8a00a481d447c4b4c337c3e9ab2abff7392a111faa616aaffafe834df7816fb6bf9e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -24830,6 +24798,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"w3c-xmlserializer@npm:^6.0.0":
|
||||
version: 6.0.0
|
||||
resolution: "w3c-xmlserializer@npm:6.0.0"
|
||||
dependencies:
|
||||
xml-name-validator: "npm:^5.0.0"
|
||||
checksum: 10/0a61cfbfc2b042a5422f4e3f853973ce9019cee88a18d13ad4d8522ce928b474aee9c682f30e2d1004aa117f36e66ae7d97861f39b1745aa0084420b72c91505
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"watchpack@npm:^2.5.2":
|
||||
version: 2.5.2
|
||||
resolution: "watchpack@npm:2.5.2"
|
||||
@@ -24876,13 +24853,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"webidl-conversions@npm:^7.0.0":
|
||||
version: 7.0.0
|
||||
resolution: "webidl-conversions@npm:7.0.0"
|
||||
checksum: 10/4c4f65472c010eddbe648c11b977d048dd96956a625f7f8b9d64e1b30c3c1f23ea1acfd654648426ce5c743c2108a5a757c0592f02902cf7367adb7d14e67721
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"webidl-conversions@npm:^8.0.1":
|
||||
version: 8.0.1
|
||||
resolution: "webidl-conversions@npm:8.0.1"
|
||||
@@ -25073,7 +25043,7 @@ __metadata:
|
||||
cross-env: "npm:^10.1.0"
|
||||
date-fns: "npm:^4.0.0"
|
||||
fuse.js: "npm:7.4.2"
|
||||
isomorphic-dompurify: "npm:2.26.0"
|
||||
isomorphic-dompurify: "npm:4.6.0"
|
||||
jscodeshift: "npm:17.4.0"
|
||||
jsdom: "npm:29.1.1"
|
||||
json5: "npm:2.2.3"
|
||||
@@ -25128,22 +25098,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"whatwg-encoding@npm:^3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "whatwg-encoding@npm:3.1.1"
|
||||
dependencies:
|
||||
iconv-lite: "npm:0.6.3"
|
||||
checksum: 10/bbef815eb67f91487c7f2ef96329743f5fd8357d7d62b1119237d25d41c7e452dff8197235b2d3c031365a17f61d3bb73ca49d0ed1582475aa4a670815e79534
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"whatwg-mimetype@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "whatwg-mimetype@npm:4.0.0"
|
||||
checksum: 10/894a618e2d90bf444b6f309f3ceb6e58cf21b2beaa00c8b333696958c4076f0c7b30b9d33413c9ffff7c5832a0a0c8569e5bb347ef44beded72aeefd0acd62e8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"whatwg-mimetype@npm:^5.0.0":
|
||||
version: 5.0.0
|
||||
resolution: "whatwg-mimetype@npm:5.0.0"
|
||||
@@ -25151,16 +25105,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"whatwg-url@npm:^14.0.0, whatwg-url@npm:^14.1.1":
|
||||
version: 14.2.0
|
||||
resolution: "whatwg-url@npm:14.2.0"
|
||||
dependencies:
|
||||
tr46: "npm:^5.1.0"
|
||||
webidl-conversions: "npm:^7.0.0"
|
||||
checksum: 10/f0a95b0601c64f417c471536a2d828b4c16fe37c13662483a32f02f183ed0f441616609b0663fb791e524e8cd56d9a86dd7366b1fc5356048ccb09b576495e7c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"whatwg-url@npm:^16.0.0, whatwg-url@npm:^16.0.1":
|
||||
version: 16.0.1
|
||||
resolution: "whatwg-url@npm:16.0.1"
|
||||
@@ -25172,6 +25116,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"whatwg-url@npm:^17.1.2, whatwg-url@npm:^17.2.0":
|
||||
version: 17.3.0
|
||||
resolution: "whatwg-url@npm:17.3.0"
|
||||
dependencies:
|
||||
"@exodus/bytes": "npm:^1.16.0"
|
||||
tr46: "npm:^7.0.0"
|
||||
webidl-conversions: "npm:^8.0.1"
|
||||
checksum: 10/dbbd7b43d02e091628d1f14b3d34017b66d78ee3ec15d08318f1e1504c6586b610430d6913f2ccdf7f9efb5b3d48df7aa8b8c318fc4dc389ad3a8c7e9011538c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"whatwg-url@npm:^5.0.0":
|
||||
version: 5.0.0
|
||||
resolution: "whatwg-url@npm:5.0.0"
|
||||
|
||||
Reference in new issue
Block a user