mirror of
https://github.com/navikt/aksel.git
synced 2026-10-16 18:52:02 +00:00
Compare commits
14
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b4f37e80d0 | ||
|
|
f70bebc03e | ||
|
|
7aa85beb01 | ||
|
|
d29509dc0a | ||
|
|
90f6178c3a | ||
|
|
6678742543 | ||
|
|
715a34ac7d | ||
|
|
85feb0ed8a | ||
|
|
d2a7c868d5 | ||
|
|
edab37a5da | ||
|
|
fad913ce6b | ||
|
|
54e03db491 | ||
|
|
b52806535d | ||
|
|
bbca69af9c |
No files matched your search
@@ -1,5 +1,7 @@
|
||||
# @navikt/aksel-icons
|
||||
|
||||
## 7.10.0
|
||||
|
||||
## 7.9.2
|
||||
|
||||
## 7.9.1
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
"postcss": "^8.4.31",
|
||||
"postcss-url": "^10.1.3",
|
||||
"typescript": "5.5.4",
|
||||
"vite": "^5.4.6",
|
||||
"vite": "^5.4.12",
|
||||
"vite-plugin-singlefile": "^1.0.0",
|
||||
"vite-plugin-svgr": "^4.2.0"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@navikt/aksel-icons",
|
||||
"version": "7.9.2",
|
||||
"version": "7.10.0",
|
||||
"author": "Aksel | Nav",
|
||||
"homepage": "https://aksel.nav.no/ikoner",
|
||||
"repository": {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# @navikt/aksel-stylelint
|
||||
|
||||
## 7.10.0
|
||||
|
||||
## 7.9.2
|
||||
|
||||
## 7.9.1
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@navikt/aksel-stylelint",
|
||||
"version": "7.9.2",
|
||||
"version": "7.10.0",
|
||||
"author": "Aksel | Nav",
|
||||
"homepage": "https://aksel.nav.no/grunnleggende/kode/stylelint",
|
||||
"repository": {
|
||||
@@ -35,8 +35,8 @@
|
||||
"dev": "yarn watch:lint"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@navikt/ds-css": "^7.9.2",
|
||||
"@navikt/ds-tokens": "^7.9.2",
|
||||
"@navikt/ds-css": "^7.10.0",
|
||||
"@navikt/ds-tokens": "^7.10.0",
|
||||
"concurrently": "9.0.1",
|
||||
"postcss-selector-parser": "^6.0.13",
|
||||
"postcss-value-parser": "^4.2.0",
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
# @navikt/aksel
|
||||
|
||||
## 7.10.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`d29509d`](https://github.com/navikt/aksel/commit/d29509dc0ad0ef6bff38ad9a2a820d3bd1770aaa), [`fad913c`](https://github.com/navikt/aksel/commit/fad913ce6b27580a2f7b54984955324d1af08196), [`715a34a`](https://github.com/navikt/aksel/commit/715a34ac7d4aa46b5b7b5990e5e1cd528cfd7f6b)]:
|
||||
- @navikt/ds-css@7.10.0
|
||||
|
||||
## 7.9.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@navikt/aksel",
|
||||
"version": "7.9.2",
|
||||
"version": "7.10.0",
|
||||
"description": "Aksel command line interface. Handles css-imports, codemods and more",
|
||||
"author": "Aksel | Nav designsystem team",
|
||||
"license": "MIT",
|
||||
@@ -29,7 +29,7 @@
|
||||
},
|
||||
"homepage": "https://aksel.nav.no/grunnleggende/kode/kommandolinje",
|
||||
"dependencies": {
|
||||
"@navikt/ds-css": "^7.9.2",
|
||||
"@navikt/ds-css": "^7.10.0",
|
||||
"axios": "1.7.4",
|
||||
"chalk": "4.1.0",
|
||||
"clipboardy": "^2.3.0",
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
# @navikt/ds-css
|
||||
|
||||
## 7.10.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- Table: New prop `contentGutter` added to `ExpandableRow`-component. This allows user more control for content layout inside expandable element. ([#3507](https://github.com/navikt/aksel/pull/3507))
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Button: Using `<Loader />` within `icon`-prop now supported. ([#3515](https://github.com/navikt/aksel/pull/3515))
|
||||
|
||||
- Combobox: Always render `maxSelected` message when `isMultiSelect` is set. ([#3506](https://github.com/navikt/aksel/pull/3506))
|
||||
|
||||
## 7.9.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -497,7 +497,7 @@
|
||||
}
|
||||
|
||||
/* Loader overrides */
|
||||
.navds-button .navds-loader {
|
||||
.navds-button > .navds-loader {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
height: 22px;
|
||||
align-self: center;
|
||||
background-color: var(--ax-bg-accent-moderateA);
|
||||
color: var(--ax-text-accent-strong);
|
||||
color: var(--ax-text-accent);
|
||||
}
|
||||
|
||||
.navds-accordion__header-chevron {
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
|
||||
&:focus {
|
||||
background-color: var(--ax-bg-danger-moderate-hoverA);
|
||||
color: var(--ax-text-danger-strong);
|
||||
color: var(--ax-text-danger);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,26 +17,28 @@
|
||||
box-shadow: inset 0 0 0 var(--__axc-button-border-width) var(--__axc-button-border-color);
|
||||
|
||||
&:focus-visible {
|
||||
outline: 2px solid var(--ax-border-focus);
|
||||
outline-offset: 2px;
|
||||
outline: 3px solid var(--ax-border-focus);
|
||||
outline-offset: 3px;
|
||||
}
|
||||
}
|
||||
|
||||
.navds-button--small,
|
||||
.navds-button--xsmall {
|
||||
--__axc-button-icon-margin: -2px;
|
||||
--__axc-button-icon-size: 1.25rem;
|
||||
}
|
||||
|
||||
.navds-button--small {
|
||||
padding: var(--ax-space-4) var(--ax-space-12);
|
||||
min-height: 2rem;
|
||||
min-width: 2rem;
|
||||
gap: var(--ax-space-6);
|
||||
}
|
||||
|
||||
.navds-button--xsmall {
|
||||
padding: var(--ax-space-2) var(--ax-space-8);
|
||||
gap: var(--ax-space-4);
|
||||
|
||||
--__axc-button-icon-size: 1.25rem;
|
||||
}
|
||||
|
||||
.navds-button--icon-only {
|
||||
@@ -159,7 +161,7 @@
|
||||
* .navds-button--secondary-neutral *
|
||||
**************************/
|
||||
.navds-button--secondary-neutral {
|
||||
--__axc-button-border-color: var(--ax-border-default);
|
||||
--__axc-button-border-color: var(--ax-border-strong);
|
||||
|
||||
background-color: transparent;
|
||||
color: var(--ax-text-default);
|
||||
@@ -178,7 +180,7 @@
|
||||
}
|
||||
|
||||
&:is(:disabled, .navds-button--disabled) {
|
||||
--__axc-button-border-color: var(--ax-border-default);
|
||||
--__axc-button-border-color: var(--ax-border-strong);
|
||||
|
||||
color: var(--ax-text-default);
|
||||
background-color: transparent;
|
||||
@@ -262,7 +264,7 @@
|
||||
}
|
||||
|
||||
/* Loader overrides */
|
||||
.navds-button .navds-loader {
|
||||
.navds-button > .navds-loader {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
|
||||
@@ -73,14 +73,14 @@
|
||||
.navds-chat--info {
|
||||
& .navds-chat__bubble,
|
||||
& .navds-chat__avatar {
|
||||
background-color: var(--ax-bg-info-raised);
|
||||
background-color: var(--ax-bg-info-moderate);
|
||||
}
|
||||
}
|
||||
|
||||
.navds-chat--neutral {
|
||||
& .navds-chat__bubble,
|
||||
& .navds-chat__avatar {
|
||||
background-color: var(--ax-bg-raised);
|
||||
background-color: var(--ax-bg-moderateA);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
.navds-chips__toggle--action {
|
||||
box-shadow: inset 0 0 0 1px var(--ax-border-accent-subtleA);
|
||||
background-color: var(--ax-bg-accent-moderate);
|
||||
color: var(--ax-text-default);
|
||||
color: var(--ax-text-accent-strong);
|
||||
|
||||
&:hover {
|
||||
background-color: var(--ax-bg-accent-moderate-hover);
|
||||
|
||||
@@ -67,12 +67,8 @@
|
||||
--__axc-copybutton-padding: var(--ax-space-4);
|
||||
}
|
||||
|
||||
& .navds-copybutton__icon {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
& > .navds-copybutton__content {
|
||||
gap: var(--ax-space-6);
|
||||
gap: var(--ax-space-4);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,7 +92,7 @@
|
||||
}
|
||||
|
||||
& > .navds-copybutton__content {
|
||||
gap: var(--ax-space-4);
|
||||
gap: var(--ax-space-2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,18 +100,6 @@
|
||||
.navds-copybutton__icon {
|
||||
font-size: 1.5rem;
|
||||
display: flex;
|
||||
|
||||
&:first-of-type {
|
||||
margin-left: -0.25rem;
|
||||
}
|
||||
|
||||
&:last-of-type {
|
||||
margin-right: -0.25rem;
|
||||
}
|
||||
|
||||
&:only-child {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.navds-copybutton--active .navds-copybutton__icon {
|
||||
@@ -146,14 +130,6 @@
|
||||
|
||||
&.navds-copybutton--active {
|
||||
color: var(--ax-text-success);
|
||||
|
||||
&:hover {
|
||||
color: var(--ax-text-success-strong);
|
||||
}
|
||||
}
|
||||
|
||||
&:hover {
|
||||
color: var(--ax-text-accent-strong);
|
||||
}
|
||||
|
||||
&:disabled {
|
||||
@@ -165,11 +141,6 @@
|
||||
.navds-copybutton--neutral {
|
||||
color: var(--ax-text-subtle);
|
||||
|
||||
&:hover,
|
||||
&.navds-copybutton--active {
|
||||
color: var(--ax-text-default);
|
||||
}
|
||||
|
||||
&:disabled {
|
||||
color: var(--ax-text-subtle);
|
||||
}
|
||||
@@ -179,5 +150,5 @@
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: var(--ax-space-8);
|
||||
gap: var(--ax-space-6);
|
||||
}
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
.navds-form-field:not(:is(.navds-combobox--disabled, .navds-combobox--readonly)) {
|
||||
& .navds-combobox__wrapper:hover {
|
||||
border-color: var(--ax-border-focus);
|
||||
border-color: var(--ax-border-accent-strong);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,6 +31,10 @@
|
||||
opacity: var(--ax-opacity-disabled);
|
||||
|
||||
& .navds-combobox__wrapper {
|
||||
&:hover {
|
||||
border-color: var(--ax-border-default);
|
||||
}
|
||||
|
||||
& *:hover {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
@@ -80,9 +84,9 @@
|
||||
border-radius: var(--ax-border-radius-medium);
|
||||
|
||||
&:has(.navds-combobox__input:focus-visible) {
|
||||
outline: 2px solid var(--ax-border-focus);
|
||||
outline-offset: 2px;
|
||||
border-color: var(--ax-border-focus);
|
||||
outline: 3px solid var(--ax-border-focus);
|
||||
outline-offset: 3px;
|
||||
border-color: var(--ax-border-accent-strong);
|
||||
}
|
||||
|
||||
&:has(.navds-combobox__input:focus-visible).navds-combobox__wrapper-inner--virtually-unfocused {
|
||||
@@ -113,15 +117,19 @@
|
||||
&:hover {
|
||||
cursor: text;
|
||||
}
|
||||
|
||||
.navds-combobox--disabled &:hover {
|
||||
border-color: var(--ax-border-default);
|
||||
}
|
||||
}
|
||||
|
||||
.navds-combobox--error {
|
||||
& .navds-combobox__wrapper-inner {
|
||||
border-color: var(--ax-border-danger);
|
||||
box-shadow: 0 0 0 1px var(--ax-border-danger);
|
||||
border-color: var(--ax-border-danger-strong);
|
||||
box-shadow: 0 0 0 1px var(--ax-border-danger-strong);
|
||||
|
||||
&:has(.navds-combobox__input:focus-visible) {
|
||||
border-color: var(--ax-border-danger);
|
||||
border-color: var(--ax-border-danger-strong);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -230,7 +238,7 @@
|
||||
/* dropdown & non selectable dropdown items */
|
||||
|
||||
.navds-combobox__list {
|
||||
max-height: 290px;
|
||||
max-height: 316px;
|
||||
overflow: clip;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
@@ -268,7 +276,7 @@
|
||||
border-radius: var(--ax-border-radius-medium);
|
||||
border: 0;
|
||||
margin-inline: var(--ax-space-8);
|
||||
margin-block: var(--ax-space-4);
|
||||
margin-block: var(--ax-space-2);
|
||||
scroll-margin-block: 8px; /* outline + outline-offset + margin-block */
|
||||
}
|
||||
|
||||
@@ -307,7 +315,6 @@
|
||||
.navds-combobox__list-item--focus {
|
||||
cursor: pointer;
|
||||
outline: 2px solid var(--ax-border-focus);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
.navds-combobox__list-item {
|
||||
@@ -321,10 +328,11 @@
|
||||
& mark {
|
||||
background-color: transparent;
|
||||
font-weight: var(--ax-font-weight-bold);
|
||||
color: var(--ax-text-default);
|
||||
}
|
||||
|
||||
& svg {
|
||||
color: var(--ax-text-accent);
|
||||
color: var(--ax-text-default);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -344,14 +352,14 @@
|
||||
justify-content: flex-start;
|
||||
gap: 0.25rem;
|
||||
margin: 0;
|
||||
margin-block: calc(var(--ax-space-4) * -1);
|
||||
padding-block: var(--ax-space-16);
|
||||
margin-block-start: calc(var(--ax-space-4) * -1);
|
||||
|
||||
& svg {
|
||||
color: var(--ax-text-default);
|
||||
}
|
||||
|
||||
&:only-child {
|
||||
margin-block: calc(var(--ax-space-4) * -1);
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
|
||||
.navds-dropzone--error > .navds-dropzone__area {
|
||||
border-color: transparent;
|
||||
outline: 2px solid var(--ax-border-danger);
|
||||
outline: 2px solid var(--ax-border-danger-strong);
|
||||
outline-offset: -1px;
|
||||
}
|
||||
|
||||
@@ -165,7 +165,7 @@ li.navds-file-item {
|
||||
}
|
||||
|
||||
.navds-file-item--error > .navds-file-item__inner {
|
||||
outline: 2px solid var(--ax-border-danger);
|
||||
outline: 2px solid var(--ax-border-danger-strong);
|
||||
}
|
||||
|
||||
.navds-file-item__icon {
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
|
||||
.navds-checkbox__input:hover:not(:disabled) + .navds-checkbox__label,
|
||||
.navds-radio__input:hover:not(:disabled) + .navds-radio__label {
|
||||
color: var(--ax-text-accent-strong);
|
||||
color: var(--ax-text-accent);
|
||||
}
|
||||
|
||||
.navds-checkbox__input:hover:not(:disabled, :checked, :indeterminate) + .navds-checkbox__label::before,
|
||||
@@ -152,13 +152,12 @@
|
||||
|
||||
.navds-checkbox--error > .navds-checkbox__input:not(:disabled, :checked, :indeterminate) + .navds-checkbox__label::before,
|
||||
.navds-radio--error > .navds-radio__input:not(:disabled, :checked) + .navds-radio__label::before {
|
||||
border-color: var(--ax-border-danger);
|
||||
border-color: var(--ax-border-danger-strong);
|
||||
}
|
||||
|
||||
.navds-checkbox--error > .navds-checkbox__input:not(:disabled, :checked, :indeterminate):hover + .navds-checkbox__label::before,
|
||||
.navds-radio--error > .navds-radio__input:not(:disabled, :checked):hover + .navds-radio__label::before {
|
||||
background-color: var(--ax-bg-danger-moderate-hoverA);
|
||||
border-color: var(--ax-border-danger-strong);
|
||||
}
|
||||
|
||||
.navds-checkbox--error > .navds-checkbox__input:is(:checked, :indeterminate):not(:disabled) + .navds-checkbox__label::before {
|
||||
|
||||
@@ -127,13 +127,13 @@
|
||||
|
||||
/* --------------------------- Search Error-state --------------------------- */
|
||||
.navds-search--error .navds-search__input:not(:disabled) {
|
||||
border-color: var(--ax-border-danger);
|
||||
border-color: var(--ax-border-danger-strong);
|
||||
box-shadow:
|
||||
inset -2px 0 0 0 var(--ax-border-danger),
|
||||
inset 0 0 0 1px var(--ax-border-danger);
|
||||
inset -2px 0 0 0 var(--ax-border-danger-strong),
|
||||
inset 0 0 0 1px var(--ax-border-danger-strong);
|
||||
|
||||
&.navds-search__input--simple {
|
||||
box-shadow: inset 0 0 0 1px var(--ax-border-danger);
|
||||
box-shadow: inset 0 0 0 1px var(--ax-border-danger-strong);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -66,8 +66,8 @@
|
||||
/* --------------------------- Select Error-state --------------------------- */
|
||||
.navds-select--error {
|
||||
> * select {
|
||||
box-shadow: 0 0 0 1px var(--ax-border-danger);
|
||||
border-color: var(--ax-border-danger);
|
||||
box-shadow: 0 0 0 1px var(--ax-border-danger-strong);
|
||||
border-color: var(--ax-border-danger-strong);
|
||||
}
|
||||
|
||||
> * select:hover,
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
.navds-switch__input:hover ~ .navds-switch__label-wrapper,
|
||||
.navds-switch__label-wrapper:hover {
|
||||
color: var(--ax-text-accent-strong);
|
||||
color: var(--ax-text-accent);
|
||||
}
|
||||
|
||||
.navds-switch__input:disabled:hover ~ .navds-switch__label-wrapper {
|
||||
@@ -124,7 +124,7 @@
|
||||
.navds-switch__input:checked ~ .navds-switch__track > & {
|
||||
background-color: var(--ax-bg-raised);
|
||||
transform: translateX(1.25rem);
|
||||
color: var(--ax-text-accent-strong);
|
||||
color: var(--ax-text-accent);
|
||||
width: 1.25rem;
|
||||
height: 1.25rem;
|
||||
left: 0;
|
||||
|
||||
@@ -39,8 +39,8 @@
|
||||
}
|
||||
|
||||
.navds-text-field--error .navds-text-field__input:not(:disabled) {
|
||||
border-color: var(--ax-border-danger);
|
||||
box-shadow: 0 0 0 1px var(--ax-border-danger);
|
||||
border-color: var(--ax-border-danger-strong);
|
||||
box-shadow: 0 0 0 1px var(--ax-border-danger-strong);
|
||||
}
|
||||
|
||||
.navds-text-field--readonly .navds-text-field__input {
|
||||
|
||||
@@ -90,8 +90,8 @@
|
||||
}
|
||||
|
||||
.navds-textarea--error .navds-textarea__input:not(:disabled) {
|
||||
box-shadow: 0 0 0 1px var(--ax-border-danger);
|
||||
border-color: var(--ax-border-danger);
|
||||
box-shadow: 0 0 0 1px var(--ax-border-danger-strong);
|
||||
border-color: var(--ax-border-danger-strong);
|
||||
}
|
||||
|
||||
@media (forced-colors: active) {
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
text-align: start;
|
||||
|
||||
&:focus-visible {
|
||||
outline: 2px solid var(--ax-border-focus);
|
||||
outline-offset: 2px;
|
||||
outline: 3px solid var(--ax-border-focus);
|
||||
outline-offset: 3px;
|
||||
}
|
||||
|
||||
&[data-state="open"] .navds-read-more__expand-icon {
|
||||
|
||||
@@ -229,9 +229,27 @@
|
||||
}
|
||||
|
||||
.navds-table__expanded-row-content {
|
||||
padding: var(--ax-space-16) calc(var(--ax-space-8) + 3rem);
|
||||
--__ac-table-expanded-row-pi: calc(var(--ax-space-8) + 3rem);
|
||||
|
||||
padding-block: var(--ax-space-16);
|
||||
}
|
||||
|
||||
.navds-table--small .navds-table__expanded-row-content {
|
||||
padding: var(--ax-space-8) calc(var(--ax-space-8) + 3rem);
|
||||
padding-block: var(--ax-space-8);
|
||||
}
|
||||
|
||||
.navds-table__expanded-row-content--gutter-both {
|
||||
padding-inline: var(--__ac-table-expanded-row-pi);
|
||||
}
|
||||
|
||||
.navds-table__expanded-row-content--gutter-left {
|
||||
padding-inline: var(--__ac-table-expanded-row-pi) var(--ax-space-8);
|
||||
}
|
||||
|
||||
.navds-table__expanded-row-content--gutter-right {
|
||||
padding-inline: var(--ax-space-8) var(--__ac-table-expanded-row-pi);
|
||||
}
|
||||
|
||||
.navds-table__expanded-row-content--gutter-none {
|
||||
padding-inline: var(--ax-space-8);
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@navikt/ds-css",
|
||||
"version": "7.9.2",
|
||||
"version": "7.10.0",
|
||||
"description": "CSS for Nav Designsystem",
|
||||
"author": "Aksel | Nav designsystem team",
|
||||
"keywords": [
|
||||
@@ -28,7 +28,7 @@
|
||||
"test": "yarn build && vitest run"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@navikt/ds-tokens": "^7.9.2",
|
||||
"@navikt/ds-tokens": "^7.10.0",
|
||||
"@types/clean-css": "4.2.11",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"browserslist": "^4.24.2",
|
||||
|
||||
@@ -249,11 +249,29 @@
|
||||
}
|
||||
|
||||
.navds-table__expanded-row-content {
|
||||
padding: var(--a-spacing-4) calc(var(--a-spacing-2) + 3rem);
|
||||
--__ac-table-expanded-row-pi: calc(var(--a-spacing-2) + 3rem);
|
||||
|
||||
padding-block: var(--a-spacing-4);
|
||||
}
|
||||
|
||||
.navds-table--small .navds-table__expanded-row-content {
|
||||
padding: var(--a-spacing-2) calc(var(--a-spacing-2) + 3rem);
|
||||
padding-block: var(--a-spacing-2);
|
||||
}
|
||||
|
||||
.navds-table__expanded-row-content--gutter-both {
|
||||
padding-inline: var(--__ac-table-expanded-row-pi);
|
||||
}
|
||||
|
||||
.navds-table__expanded-row-content--gutter-left {
|
||||
padding-inline: var(--__ac-table-expanded-row-pi) var(--a-spacing-2);
|
||||
}
|
||||
|
||||
.navds-table__expanded-row-content--gutter-right {
|
||||
padding-inline: var(--a-spacing-2) var(--__ac-table-expanded-row-pi);
|
||||
}
|
||||
|
||||
.navds-table__expanded-row-content--gutter-none {
|
||||
padding-inline: var(--a-spacing-2);
|
||||
}
|
||||
|
||||
@media (forced-colors: active) {
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
# @navikt/ds-react
|
||||
|
||||
## 7.10.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- Table: New prop `contentGutter` added to `ExpandableRow`-component. This allows user more control for content layout inside expandable element. ([#3507](https://github.com/navikt/aksel/pull/3507))
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Combobox: Always render `maxSelected` message when `isMultiSelect` is set. ([#3506](https://github.com/navikt/aksel/pull/3506))
|
||||
|
||||
- Updated dependencies []:
|
||||
- @navikt/ds-tokens@7.10.0
|
||||
- @navikt/aksel-icons@7.10.0
|
||||
|
||||
## 7.9.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@navikt/ds-react",
|
||||
"version": "7.9.2",
|
||||
"version": "7.10.0",
|
||||
"description": "React components from the Norwegian Labour and Welfare Administration.",
|
||||
"author": "Aksel, a team part of the Norwegian Labour and Welfare Administration.",
|
||||
"license": "MIT",
|
||||
@@ -615,8 +615,8 @@
|
||||
"dependencies": {
|
||||
"@floating-ui/react": "0.25.4",
|
||||
"@floating-ui/react-dom": "^2.0.9",
|
||||
"@navikt/aksel-icons": "^7.9.2",
|
||||
"@navikt/ds-tokens": "^7.9.2",
|
||||
"@navikt/aksel-icons": "^7.10.0",
|
||||
"@navikt/ds-tokens": "^7.10.0",
|
||||
"clsx": "^2.1.0",
|
||||
"date-fns": "^3.0.0",
|
||||
"react-day-picker": "8.10.1"
|
||||
|
||||
@@ -74,7 +74,12 @@ export const ToggleChips: OverridableComponent<
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M10 3.125C6.20304 3.125 3.125 6.20304 3.125 10C3.125 13.797 6.20304 16.875 10 16.875C13.797 16.875 16.875 13.797 16.875 10C16.875 6.20304 13.797 3.125 10 3.125ZM1.875 10C1.875 5.51269 5.51269 1.875 10 1.875C14.4873 1.875 18.125 5.51269 18.125 10C18.125 14.4873 14.4873 18.125 10 18.125C5.51269 18.125 1.875 14.4873 1.875 10Z"
|
||||
fill="var(--ax-text-neutral-icon, var(--ac-chip-toggle-circle-border, var(--a-border-default)))"
|
||||
/* After removing old fallbacks, change to currentColor */
|
||||
fill={`var(${
|
||||
variant === "action"
|
||||
? "--ax-text-accent-strong"
|
||||
: "--ax-text-default"
|
||||
}, var(--ac-chip-toggle-circle-border, var(--a-border-default)))`}
|
||||
/>
|
||||
)}
|
||||
</svg>
|
||||
|
||||
@@ -21,7 +21,7 @@ export const DatePickerCaption = ({ displayMonth, id }: CaptionProps) => {
|
||||
<>
|
||||
<div className="navds-date__caption">
|
||||
<Button
|
||||
variant="tertiary"
|
||||
variant="tertiary-neutral"
|
||||
disabled={!previousMonth}
|
||||
onClick={() => previousMonth && goToMonth(previousMonth)}
|
||||
icon={<ArrowLeftIcon title={translate("goToPreviousMonth")} />}
|
||||
@@ -41,7 +41,7 @@ export const DatePickerCaption = ({ displayMonth, id }: CaptionProps) => {
|
||||
icon={<ArrowRightIcon title={translate("goToNextMonth")} />}
|
||||
onClick={() => nextMonth && goToMonth(nextMonth)}
|
||||
disabled={!nextMonth}
|
||||
variant="tertiary"
|
||||
variant="tertiary-neutral"
|
||||
className="navds-date__caption-button"
|
||||
type="button"
|
||||
/>
|
||||
|
||||
@@ -56,7 +56,7 @@ export const DropdownCaption = ({ displayMonth, id }: CaptionProps) => {
|
||||
{formatCaption(displayMonth, { locale })}
|
||||
</span>
|
||||
<Button
|
||||
variant="tertiary"
|
||||
variant="tertiary-neutral"
|
||||
disabled={!previousMonth}
|
||||
onClick={() => previousMonth && goToMonth(previousMonth)}
|
||||
icon={<ArrowLeftIcon title={translate("goToPreviousMonth")} />}
|
||||
@@ -94,10 +94,10 @@ export const DropdownCaption = ({ displayMonth, id }: CaptionProps) => {
|
||||
</div>
|
||||
|
||||
<Button
|
||||
variant="tertiary-neutral"
|
||||
icon={<ArrowRightIcon title={translate("goToNextMonth")} />}
|
||||
onClick={() => nextMonth && goToMonth(nextMonth)}
|
||||
disabled={!nextMonth}
|
||||
variant="tertiary"
|
||||
className="navds-date__caption-button"
|
||||
type="button"
|
||||
/>
|
||||
|
||||
@@ -23,10 +23,10 @@ const FilteredOptions = () => {
|
||||
isMouseLastUsedInputDevice,
|
||||
isValueNew,
|
||||
} = useFilteredOptionsContext();
|
||||
const { maxSelected } = useSelectedOptionsContext();
|
||||
const { maxSelected, isMultiSelect } = useSelectedOptionsContext();
|
||||
|
||||
const shouldRenderNonSelectables =
|
||||
maxSelected.isLimitReached || // Render maxSelected message
|
||||
(isMultiSelect && maxSelected.limit) || // Render maxSelected message
|
||||
isLoading || // Render loading message
|
||||
(!isLoading && filteredOptions.length === 0 && !allowNewValues); // Render no hits message
|
||||
|
||||
@@ -45,7 +45,7 @@ const FilteredOptions = () => {
|
||||
>
|
||||
{shouldRenderNonSelectables && (
|
||||
<div className="navds-combobox__list_non-selectables" role="status">
|
||||
{maxSelected.isLimitReached && <MaxSelectedMessage />}
|
||||
{isMultiSelect && maxSelected.limit && <MaxSelectedMessage />}
|
||||
{isLoading && <LoadingMessage />}
|
||||
{!isLoading && filteredOptions.length === 0 && !allowNewValues && (
|
||||
<NoSearchHitsMessage />
|
||||
|
||||
@@ -48,6 +48,11 @@ export interface ExpandableRowProps extends Omit<RowProps, "content"> {
|
||||
* @default 999
|
||||
*/
|
||||
colSpan?: number;
|
||||
/**
|
||||
* Optional left, right-gutter for content
|
||||
* @default Same as `togglePlacement`
|
||||
*/
|
||||
contentGutter?: "left" | "right" | "none";
|
||||
}
|
||||
|
||||
export type ExpandableRowType = React.ForwardRefExoticComponent<
|
||||
@@ -67,6 +72,7 @@ export const ExpandableRow: ExpandableRowType = forwardRef(
|
||||
expansionDisabled = false,
|
||||
expandOnRowClick = false,
|
||||
colSpan = 999,
|
||||
contentGutter,
|
||||
onClick,
|
||||
...rest
|
||||
},
|
||||
@@ -139,7 +145,9 @@ export const ExpandableRow: ExpandableRowType = forwardRef(
|
||||
<td colSpan={colSpan} className="navds-table__expanded-row-cell">
|
||||
<AnimateHeight
|
||||
className="navds-table__expanded-row-collapse"
|
||||
innerClassName="navds-table__expanded-row-content"
|
||||
innerClassName={`navds-table__expanded-row-content navds-table__expanded-row-content--gutter-${
|
||||
contentGutter ?? togglePlacement
|
||||
}`}
|
||||
height={_open ? "auto" : 0}
|
||||
duration={150}
|
||||
easing="cubic-bezier(0.39,0.57,0.56,1)"
|
||||
|
||||
@@ -120,6 +120,68 @@ export const ExpandableSmall = () => {
|
||||
);
|
||||
};
|
||||
|
||||
export const ExpandableContentGutter = () => {
|
||||
return (
|
||||
<Table zebraStripes>
|
||||
<Table.Header>
|
||||
<Table.Row>
|
||||
<Table.HeaderCell></Table.HeaderCell>
|
||||
<Table.HeaderCell>Cell</Table.HeaderCell>
|
||||
<Table.HeaderCell>Cell</Table.HeaderCell>
|
||||
<Table.HeaderCell></Table.HeaderCell>
|
||||
</Table.Row>
|
||||
</Table.Header>
|
||||
<Table.Body>
|
||||
<Table.ExpandableRow
|
||||
defaultOpen
|
||||
content="ContentContent ContentContent ContentContent"
|
||||
togglePlacement="left"
|
||||
>
|
||||
<Table.DataCell>Cell</Table.DataCell>
|
||||
<Table.DataCell>Cell</Table.DataCell>
|
||||
<Table.DataCell>Cell</Table.DataCell>
|
||||
</Table.ExpandableRow>
|
||||
<Table.ExpandableRow
|
||||
content="ContentContent ContentContent ContentContent"
|
||||
togglePlacement="right"
|
||||
defaultOpen
|
||||
>
|
||||
<Table.DataCell>Cell</Table.DataCell>
|
||||
<Table.DataCell>Cell</Table.DataCell>
|
||||
<Table.DataCell>Cell</Table.DataCell>
|
||||
</Table.ExpandableRow>
|
||||
<Table.ExpandableRow
|
||||
content="ContentContent ContentContent ContentContent"
|
||||
defaultOpen
|
||||
contentGutter="left"
|
||||
>
|
||||
<Table.DataCell>Cell</Table.DataCell>
|
||||
<Table.DataCell>Cell</Table.DataCell>
|
||||
<Table.DataCell>Cell</Table.DataCell>
|
||||
</Table.ExpandableRow>
|
||||
<Table.ExpandableRow
|
||||
content="ContentContent ContentContent ContentContent"
|
||||
defaultOpen
|
||||
contentGutter="right"
|
||||
>
|
||||
<Table.DataCell>Cell</Table.DataCell>
|
||||
<Table.DataCell>Cell</Table.DataCell>
|
||||
<Table.DataCell>Cell</Table.DataCell>
|
||||
</Table.ExpandableRow>
|
||||
<Table.ExpandableRow
|
||||
content="ContentContent ContentContent ContentContent Con.."
|
||||
defaultOpen
|
||||
contentGutter="none"
|
||||
>
|
||||
<Table.DataCell>Cell</Table.DataCell>
|
||||
<Table.DataCell>Cell</Table.DataCell>
|
||||
<Table.DataCell>Cell</Table.DataCell>
|
||||
</Table.ExpandableRow>
|
||||
</Table.Body>
|
||||
</Table>
|
||||
);
|
||||
};
|
||||
|
||||
const columns = [
|
||||
{
|
||||
name: "Navn",
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# @navikt/ds-tailwind
|
||||
|
||||
## 7.10.0
|
||||
|
||||
## 7.9.2
|
||||
|
||||
## 7.9.1
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@navikt/ds-tailwind",
|
||||
"version": "7.9.2",
|
||||
"version": "7.10.0",
|
||||
"description": "Tailwind config based on @navikt/ds-tokens",
|
||||
"author": "Aksel | Nav designsystem team",
|
||||
"keywords": [
|
||||
@@ -24,7 +24,7 @@
|
||||
"directory": "@navikt/core/tailwind"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@navikt/ds-tokens": "^7.9.2",
|
||||
"@navikt/ds-tokens": "^7.10.0",
|
||||
"color": "4.2.3",
|
||||
"lodash": "^4.17.21",
|
||||
"tailwindcss": "^3.3.3",
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# @navikt/ds-tokens
|
||||
|
||||
## 7.10.0
|
||||
|
||||
## 7.9.2
|
||||
|
||||
## 7.9.1
|
||||
|
||||
@@ -27,19 +27,13 @@ describe("Validate token configurations", () => {
|
||||
|
||||
test(`Semantic tokens for all roles: Lightmode`, () => {
|
||||
expect(
|
||||
validateConfig(
|
||||
semanticTokensForAllRolesConfig("light"),
|
||||
configKeysWithGroup,
|
||||
),
|
||||
validateConfig(semanticTokensForAllRolesConfig(), configKeysWithGroup),
|
||||
).toBeTruthy();
|
||||
});
|
||||
|
||||
test(`Semantic tokens for all roles: Darkmode`, () => {
|
||||
expect(
|
||||
validateConfig(
|
||||
semanticTokensForAllRolesConfig("dark"),
|
||||
configKeysWithGroup,
|
||||
),
|
||||
validateConfig(semanticTokensForAllRolesConfig(), configKeysWithGroup),
|
||||
).toBeTruthy();
|
||||
});
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ export const lightModeTokens = () => {
|
||||
mergeConfigs([
|
||||
shadowTokenConfig("light"),
|
||||
opacityTokenConfig("light"),
|
||||
semanticTokensForAllRolesConfig("light"),
|
||||
semanticTokensForAllRolesConfig(),
|
||||
textContrastTokenConfig,
|
||||
semanticTokenConfig("light"),
|
||||
globalColorLightModeConfig,
|
||||
@@ -52,7 +52,7 @@ export const darkModeTokens = () => {
|
||||
mergeConfigs([
|
||||
shadowTokenConfig("dark"),
|
||||
opacityTokenConfig("dark"),
|
||||
semanticTokensForAllRolesConfig("dark"),
|
||||
semanticTokensForAllRolesConfig(),
|
||||
textContrastTokenConfig,
|
||||
semanticTokenConfig("dark"),
|
||||
globalColorDarkModeConfig,
|
||||
|
||||
@@ -1,12 +1,8 @@
|
||||
import _ from "lodash";
|
||||
import {
|
||||
ColorRolesList,
|
||||
type ColorTheme,
|
||||
type SemanticColorRoles,
|
||||
} from "../../types";
|
||||
import { ColorRolesList, type SemanticColorRoles } from "../../types";
|
||||
import { type StyleDictionaryTokenConfig } from "../tokens.util";
|
||||
|
||||
const configForRole = (role: SemanticColorRoles, theme: ColorTheme) => {
|
||||
const configForRole = (role: SemanticColorRoles) => {
|
||||
return {
|
||||
bg: {
|
||||
[`${role}-soft`]: {
|
||||
@@ -69,17 +65,6 @@ const configForRole = (role: SemanticColorRoles, theme: ColorTheme) => {
|
||||
type: "color",
|
||||
group: `background.${role}`,
|
||||
},
|
||||
[`${role}-raised`]: {
|
||||
/* We bump raised for darkmode */
|
||||
value: `{ax.${role}.${theme === "light" ? "100" : "200"}.value}`,
|
||||
type: "color",
|
||||
group: `background.${role}`,
|
||||
},
|
||||
[`${role}-raised-hover`]: {
|
||||
value: `{ax.${role}.${theme === "light" ? "200" : "300"}.value}`,
|
||||
type: "color",
|
||||
group: `background.${role}`,
|
||||
},
|
||||
},
|
||||
text: {
|
||||
[role]: {
|
||||
@@ -126,9 +111,9 @@ const configForRole = (role: SemanticColorRoles, theme: ColorTheme) => {
|
||||
/**
|
||||
* We need to deep merge the token config for each role to get the complete token config for all roles.
|
||||
*/
|
||||
export const semanticTokensForAllRolesConfig = (theme: ColorTheme) => {
|
||||
export const semanticTokensForAllRolesConfig = () => {
|
||||
return ColorRolesList.filter((name) => name !== "neutral").reduce(
|
||||
(acc, role) => _.merge(acc, configForRole(role, theme)),
|
||||
(acc, role) => _.merge(acc, configForRole(role)),
|
||||
{} as ReturnType<typeof configForRole>,
|
||||
);
|
||||
};
|
||||
@@ -119,20 +119,20 @@ export function semanticTokenConfig(theme: ColorTheme) {
|
||||
group: `background`,
|
||||
},
|
||||
strong: {
|
||||
value: `{ax.neutral.600.value}`,
|
||||
type: "color",
|
||||
group: `background`,
|
||||
},
|
||||
"strong-hover": {
|
||||
value: `{ax.neutral.700.value}`,
|
||||
type: "color",
|
||||
group: `background`,
|
||||
},
|
||||
"strong-pressed": {
|
||||
"strong-hover": {
|
||||
value: `{ax.neutral.800.value}`,
|
||||
type: "color",
|
||||
group: `background`,
|
||||
},
|
||||
"strong-pressed": {
|
||||
value: `{ax.neutral.900.value}`,
|
||||
type: "color",
|
||||
group: `background`,
|
||||
},
|
||||
},
|
||||
border: {
|
||||
default: {
|
||||
@@ -160,7 +160,7 @@ export function semanticTokenConfig(theme: ColorTheme) {
|
||||
* - Discuss with brand
|
||||
*/
|
||||
focus: {
|
||||
value: "{ax.accent.700.value}",
|
||||
value: "{ax.neutral.1000.value}",
|
||||
type: "color",
|
||||
group: "border",
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@navikt/ds-tokens",
|
||||
"version": "7.9.2",
|
||||
"version": "7.10.0",
|
||||
"description": "Design-tokens for Nav designsystem",
|
||||
"author": "Aksel | Nav designsystem team",
|
||||
"keywords": [
|
||||
|
||||
@@ -68,8 +68,7 @@ export type StaticBgKeys =
|
||||
| `${SemanticColorRoles}-soft`
|
||||
| `${SemanticColorRoles}-moderate`
|
||||
| `${SemanticColorRoles}-moderateA`
|
||||
| `${SemanticColorRoles}-strong`
|
||||
| `${SemanticColorRoles}-raised`;
|
||||
| `${SemanticColorRoles}-strong`;
|
||||
|
||||
export type StatefulBgKeys =
|
||||
| `${SemanticColorRoles}-hover`
|
||||
@@ -79,8 +78,7 @@ export type StatefulBgKeys =
|
||||
| `${SemanticColorRoles}-moderate-pressed`
|
||||
| `${SemanticColorRoles}-moderate-pressedA`
|
||||
| `${SemanticColorRoles}-strong-hover`
|
||||
| `${SemanticColorRoles}-strong-pressed`
|
||||
| `${SemanticColorRoles}-raised-hover`;
|
||||
| `${SemanticColorRoles}-strong-pressed`;
|
||||
|
||||
export type DefaultTextColorKeys =
|
||||
| "default"
|
||||
|
||||
@@ -1,5 +1,21 @@
|
||||
# Changelog
|
||||
|
||||
## 7.10
|
||||
|
||||
### @navikt/ds-css
|
||||
|
||||
- Table: New prop `contentGutter` added to `ExpandableRow`-component. This allows user more control for content layout inside expandable element. ([#3507](https://github.com/navikt/aksel/pull/3507))
|
||||
|
||||
* Button: Using `<Loader />` within `icon`-prop now supported. ([#3515](https://github.com/navikt/aksel/pull/3515))
|
||||
|
||||
* Combobox: Always render `maxSelected` message when `isMultiSelect` is set. ([#3506](https://github.com/navikt/aksel/pull/3506))
|
||||
|
||||
### @navikt/ds-react
|
||||
|
||||
- Table: New prop `contentGutter` added to `ExpandableRow`-component. This allows user more control for content layout inside expandable element. ([#3507](https://github.com/navikt/aksel/pull/3507))
|
||||
|
||||
* Combobox: Always render `maxSelected` message when `isMultiSelect` is set. ([#3506](https://github.com/navikt/aksel/pull/3506))
|
||||
|
||||
## 7.9
|
||||
|
||||
### @navikt/ds-css
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
"playroom"
|
||||
],
|
||||
"dependencies": {
|
||||
"@navikt/aksel-icons": "^7.9.2",
|
||||
"@navikt/ds-css": "^7.9.2",
|
||||
"@navikt/ds-react": "^7.9.2",
|
||||
"@navikt/ds-tailwind": "^7.9.2",
|
||||
"@navikt/ds-tokens": "^7.9.2"
|
||||
"@navikt/aksel-icons": "^7.10.0",
|
||||
"@navikt/ds-css": "^7.10.0",
|
||||
"@navikt/ds-react": "^7.10.0",
|
||||
"@navikt/ds-tailwind": "^7.10.0",
|
||||
"@navikt/ds-tokens": "^7.10.0"
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
import NextLink from "next/link";
|
||||
import { BodyLong, BodyShort, Heading, Link } from "@navikt/ds-react";
|
||||
import ErrorBoundary from "@/error-boundary";
|
||||
import { useFormatedDate } from "@/hooks/useFormatedDate";
|
||||
import { amplitudeLogNavigation } from "@/logging";
|
||||
import { AkselBloggDocT, ResolveContributorsT, ResolveSlugT } from "@/types";
|
||||
import { getAuthors } from "@/utils";
|
||||
|
||||
type BloggCardProps = {
|
||||
blog: ResolveContributorsT<ResolveSlugT<AkselBloggDocT>>;
|
||||
};
|
||||
|
||||
const BloggCard = ({ blog }: BloggCardProps) => {
|
||||
const date = useFormatedDate(blog?.publishedAt ?? blog._createdAt);
|
||||
return (
|
||||
<li
|
||||
key={blog._id}
|
||||
className="flex h-full flex-col place-content-start border-b border-b-border-subtle pb-10"
|
||||
>
|
||||
<Heading size="medium" as="div">
|
||||
<NextLink href={`/${blog.slug}`} passHref legacyBehavior>
|
||||
<Link
|
||||
className="text-deepblue-500 underline hover:no-underline"
|
||||
onClick={(e) =>
|
||||
amplitudeLogNavigation(
|
||||
"blogg-card",
|
||||
e.currentTarget.getAttribute("href"),
|
||||
)
|
||||
}
|
||||
>
|
||||
{blog.heading}
|
||||
</Link>
|
||||
</NextLink>
|
||||
</Heading>
|
||||
<BodyLong className="my-2 line-clamp-2">{blog?.ingress}</BodyLong>
|
||||
{getAuthors(blog).length > 0 && (
|
||||
<BodyShort
|
||||
size="small"
|
||||
className="mt-auto flex gap-2 justify-self-end text-text-subtle"
|
||||
>
|
||||
<span className="font-semibold">{getAuthors(blog)[0]}</span>
|
||||
<span>{date}</span>
|
||||
</BodyShort>
|
||||
)}
|
||||
</li>
|
||||
);
|
||||
};
|
||||
|
||||
export default function Component(props: BloggCardProps) {
|
||||
return (
|
||||
<ErrorBoundary boundaryName="ArtikkelCard">
|
||||
<BloggCard {...props} />
|
||||
</ErrorBoundary>
|
||||
);
|
||||
}
|
||||
@@ -1,88 +0,0 @@
|
||||
import NextLink from "next/link";
|
||||
import { BodyLong, Heading, Link } from "@navikt/ds-react";
|
||||
|
||||
const CubeLarge = () => (
|
||||
<svg
|
||||
width="1016"
|
||||
height="320"
|
||||
viewBox="0 0 1016 320"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
className="pointer-events-none absolute right-0 z-0 hidden lg:block"
|
||||
aria-hidden
|
||||
>
|
||||
<path
|
||||
d="M849.229 637.344L1096.48 390.09L849.228 142.836L601.975 390.09L849.229 637.344Z"
|
||||
stroke="#F9A8D4"
|
||||
strokeOpacity="0.4"
|
||||
strokeWidth="3.54219"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M872.671 119.393L1119.93 -127.861H873.041L625.787 119.393H872.671Z"
|
||||
stroke="#F9A8D4"
|
||||
strokeOpacity="0.4"
|
||||
strokeWidth="3.54219"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
|
||||
const CubeSmall = () => (
|
||||
<svg
|
||||
className="pointer-events-none absolute left-0 z-0 max-w-full overflow-hidden lg:hidden"
|
||||
width="390"
|
||||
height="290"
|
||||
viewBox="0 0 390 290"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
aria-hidden
|
||||
>
|
||||
<path
|
||||
d="M-0.327544 508.393L246.927 261.139H0.0431418L-247.212 508.393H-0.327544Z"
|
||||
stroke="#F9A8D4"
|
||||
strokeOpacity="0.4"
|
||||
strokeWidth="3.54219"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M517.621 -9.55799L764.876 237.697L517.992 237.697L270.737 -9.55799H517.621Z"
|
||||
stroke="#F9A8D4"
|
||||
strokeOpacity="0.4"
|
||||
strokeWidth="3.54219"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
|
||||
export const BloggAd = () => {
|
||||
return (
|
||||
<div className="relative left-1/2 right-1/2 -mx-[50vw] my-20 flex h-72 w-screen items-center bg-[#FBCFE8] px-4 md:left-auto md:right-auto md:mx-auto md:w-full md:max-w-[85%] md:rounded-2xl md:px-6 lg:h-80 lg:pl-12">
|
||||
<div className="z-10 max-w-sm text-[#831843]">
|
||||
<Heading level="2" size="xlarge" spacing>
|
||||
Skriv for bloggen
|
||||
</Heading>
|
||||
|
||||
<BodyLong spacing>
|
||||
Brenner du for digital produktutvikling, og har en #FFC0E6-blogger i
|
||||
magen?
|
||||
</BodyLong>
|
||||
<BodyLong>
|
||||
Ta kontakt med{" "}
|
||||
<NextLink
|
||||
href="https://nav-it.slack.com/archives/C7NE7A8UF"
|
||||
passHref
|
||||
legacyBehavior
|
||||
>
|
||||
<Link className="font-semibold text-[#831843]">
|
||||
#Aksel-designsystemet
|
||||
</Link>
|
||||
</NextLink>{" "}
|
||||
på Slack
|
||||
</BodyLong>
|
||||
</div>
|
||||
<CubeLarge />
|
||||
<CubeSmall />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -1,7 +1,6 @@
|
||||
import { Heading } from "@navikt/ds-react";
|
||||
import { Heading, Show } from "@navikt/ds-react";
|
||||
import { SanityBlockContent } from "@/sanity-block";
|
||||
import { AkselBloggDocT, ResolveContributorsT, ResolveSlugT } from "@/types";
|
||||
import { BloggList } from "./parts/BloggList";
|
||||
import { HighlightedBlogg } from "./parts/HighlightedBlogg";
|
||||
|
||||
export const LatestBloggposts = ({
|
||||
@@ -23,7 +22,7 @@ export const LatestBloggposts = ({
|
||||
level="1"
|
||||
size="xlarge"
|
||||
spacing
|
||||
className="mx-auto w-full text-5xl text-deepblue-700 md:mx-0 md:max-w-none"
|
||||
className="mx-auto w-full text-5xl text-aksel-heading md:mx-0 md:max-w-none"
|
||||
>
|
||||
{title}
|
||||
</Heading>
|
||||
@@ -31,11 +30,9 @@ export const LatestBloggposts = ({
|
||||
{/* Desktop-view */}
|
||||
<div className="mx-auto my-10 grid gap-12 md:my-12 md:grid-cols-2">
|
||||
<HighlightedBlogg blogg={bloggs[0]} />
|
||||
<div className="col-span-1 grid place-content-start gap-12">
|
||||
{bloggs.slice(1, 3).map((blogg) => (
|
||||
<BloggList blogg={blogg} key={blogg._id} />
|
||||
))}
|
||||
</div>
|
||||
<Show above="md">
|
||||
<HighlightedBlogg blogg={bloggs[1]} />
|
||||
</Show>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -13,7 +13,7 @@ export const BloggList = ({
|
||||
}) => {
|
||||
const date = useFormatedDate(blogg?.publishedAt ?? blogg._createdAt);
|
||||
return (
|
||||
<div>
|
||||
<li>
|
||||
<div className="hidden gap-6 md:flex">
|
||||
<div className="relative hidden aspect-square h-[11.75rem] rounded-lg ring-1 ring-border-subtle lg:block">
|
||||
{blogg?.seo?.image ? (
|
||||
@@ -37,15 +37,15 @@ export const BloggList = ({
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div className="w-full">
|
||||
<NextLink href={`/${blogg.slug}`} passHref legacyBehavior>
|
||||
<Link className="text-deepblue-500 underline hover:no-underline">
|
||||
<Heading size="small" level="2">
|
||||
<Link className="text-aksel-heading underline hover:no-underline">
|
||||
<Heading size="medium" level="2">
|
||||
{blogg.heading}
|
||||
</Heading>
|
||||
</Link>
|
||||
</NextLink>
|
||||
<BodyLong className="mt-4" size="small">
|
||||
<BodyLong className="mt-4" size="medium">
|
||||
{blogg?.ingress}
|
||||
</BodyLong>
|
||||
{getAuthors(blogg).length > 0 ? (
|
||||
@@ -63,54 +63,29 @@ export const BloggList = ({
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
<div className="md:hidden">
|
||||
<div className="relative mb-6 block aspect-video">
|
||||
{blogg?.seo?.image ? (
|
||||
<Image
|
||||
src={urlFor(blogg.seo.image).auto("format").url()}
|
||||
layout="fill"
|
||||
objectFit="cover"
|
||||
aria-hidden
|
||||
priority
|
||||
className="rounded-lg"
|
||||
/>
|
||||
) : (
|
||||
<Image
|
||||
src={getImage(blogg?.heading ?? "", "thumbnail")}
|
||||
layout="fill"
|
||||
objectFit="cover"
|
||||
aria-hidden
|
||||
priority
|
||||
className="rounded-lg"
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
<div className="md:hidden">
|
||||
<NextLink href={`/${blogg.slug}`} passHref legacyBehavior>
|
||||
<Link className="text-deepblue-500 underline hover:no-underline">
|
||||
<Heading size="small" level="2">
|
||||
{blogg.heading}
|
||||
</Heading>
|
||||
</Link>
|
||||
</NextLink>
|
||||
<BodyLong className="mt-4" size="small">
|
||||
{blogg?.ingress}
|
||||
</BodyLong>
|
||||
{getAuthors(blogg).length > 0 ? (
|
||||
<BodyShort
|
||||
size="small"
|
||||
className="mt-4 flex gap-2 text-text-subtle"
|
||||
>
|
||||
<span className="font-semibold">{getAuthors(blogg)[0]}</span>
|
||||
<span>{date}</span>
|
||||
</BodyShort>
|
||||
) : (
|
||||
<BodyShort size="small" className="mt-4 text-text-subtle">
|
||||
<span>{date}</span>
|
||||
</BodyShort>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div className="w-full md:hidden">
|
||||
<NextLink href={`/${blogg.slug}`} passHref legacyBehavior>
|
||||
<Link className="text-aksel-heading underline hover:no-underline">
|
||||
<Heading size="medium" level="2">
|
||||
{blogg.heading}
|
||||
</Heading>
|
||||
</Link>
|
||||
</NextLink>
|
||||
<BodyLong className="mt-4" size="medium">
|
||||
{blogg?.ingress}
|
||||
</BodyLong>
|
||||
{getAuthors(blogg).length > 0 ? (
|
||||
<BodyShort size="small" className="mt-4 flex gap-2 text-text-subtle">
|
||||
<span className="font-semibold">{getAuthors(blogg)[0]}</span>
|
||||
<span>{date}</span>
|
||||
</BodyShort>
|
||||
) : (
|
||||
<BodyShort size="small" className="mt-4 text-text-subtle">
|
||||
<span>{date}</span>
|
||||
</BodyShort>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
);
|
||||
};
|
||||
+4
-4
@@ -13,7 +13,7 @@ export const HighlightedBlogg = ({
|
||||
}) => {
|
||||
const date = useFormatedDate(blogg?.publishedAt ?? blogg._createdAt);
|
||||
return (
|
||||
<div>
|
||||
<article>
|
||||
<div className="col-span-1 hidden md:block">
|
||||
<div className="relative mb-10 block aspect-video rounded-lg ring-1 ring-border-subtle">
|
||||
{blogg?.seo?.image ? (
|
||||
@@ -46,7 +46,7 @@ export const HighlightedBlogg = ({
|
||||
)}
|
||||
</div>
|
||||
<NextLink href={`/${blogg.slug}`} passHref legacyBehavior>
|
||||
<Link className="text-deepblue-500 underline hover:no-underline">
|
||||
<Link className="text-aksel-heading underline hover:no-underline">
|
||||
<Heading size="large" level="2">
|
||||
{blogg.heading}
|
||||
</Heading>
|
||||
@@ -93,7 +93,7 @@ export const HighlightedBlogg = ({
|
||||
)}
|
||||
</div>
|
||||
<NextLink href={`/${blogg.slug}`} passHref legacyBehavior>
|
||||
<Link className="text-deepblue-500 underline hover:no-underline">
|
||||
<Link className="text-aksel-heading underline hover:no-underline">
|
||||
<Heading size="large" level="2">
|
||||
{blogg.heading}
|
||||
</Heading>
|
||||
@@ -109,6 +109,6 @@ export const HighlightedBlogg = ({
|
||||
</BodyShort>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
);
|
||||
};
|
||||
@@ -25,11 +25,7 @@ export const SearchForm = () => {
|
||||
}
|
||||
|
||||
return (
|
||||
<form
|
||||
role="search"
|
||||
onSubmit={(e) => e.preventDefault()}
|
||||
className="px-6 pb-4"
|
||||
>
|
||||
<form role="search" onSubmit={(e) => e.preventDefault()} className="w-full">
|
||||
<Search
|
||||
label={
|
||||
<span className="flex items-center gap-2">
|
||||
|
||||
@@ -2,12 +2,13 @@ import cl from "clsx";
|
||||
import Image from "next/legacy/image";
|
||||
import NextLink from "next/link";
|
||||
import { forwardRef, useContext } from "react";
|
||||
import { Show } from "@navikt/ds-react";
|
||||
import { Tag } from "@/cms/frontpage-blocks/latest-articles/Tag";
|
||||
import { urlFor } from "@/sanity/interface";
|
||||
import { SearchHitT, searchOptions } from "@/types";
|
||||
import { StatusTag } from "@/web/StatusTag";
|
||||
import { SearchContext, SearchLoggingContext } from "../providers";
|
||||
import { highlightMatches, highlightStr } from "../utils";
|
||||
import { highlightStr } from "../utils";
|
||||
|
||||
export const Hit = forwardRef<
|
||||
HTMLLIElement,
|
||||
@@ -33,10 +34,11 @@ export const Hit = forwardRef<
|
||||
"relative flex scroll-my-10 items-center justify-between gap-3 border-b border-border-subtle px-2 last-of-type:border-b-0 has-[+_*_:focus-visible]:border-b-transparent has-[:focus-visible]:border-b-transparent",
|
||||
)}
|
||||
>
|
||||
<div className="w-full truncate px-2 py-3">
|
||||
<div className="w-full px-2 py-3">
|
||||
<span
|
||||
className={cl({
|
||||
"flex flex-col": simple,
|
||||
"flex flex-col gap-1 md:flex-row md:justify-between md:gap-4":
|
||||
simple,
|
||||
"flex items-center gap-2": !simple,
|
||||
})}
|
||||
>
|
||||
@@ -44,12 +46,13 @@ export const Hit = forwardRef<
|
||||
href={href}
|
||||
onClick={() => logSuccess(index, `/${hit.item.slug}`)}
|
||||
className={cl(
|
||||
"group scroll-my-32 truncate text-xl font-semibold underline hover:decoration-[3px] focus:outline-none",
|
||||
"group scroll-my-32 break-words text-xl font-semibold underline hover:decoration-[3px] focus:outline-none",
|
||||
"after:absolute after:inset-0 after:rounded-lg after:ring-inset focus-visible:after:ring-[3px] focus-visible:after:ring-border-focus",
|
||||
)}
|
||||
>
|
||||
{highlightStr(hit.item.heading, query, tag)}
|
||||
</NextLink>
|
||||
|
||||
{simple ? (
|
||||
<Tag
|
||||
type={hit.item._type}
|
||||
@@ -65,7 +68,9 @@ export const Hit = forwardRef<
|
||||
)}
|
||||
</span>
|
||||
|
||||
{!simple && <HeadingLinks hit={hit} />}
|
||||
<Show above="md" asChild>
|
||||
<p className="line-clamp-2">{hit.description}</p>
|
||||
</Show>
|
||||
</div>
|
||||
|
||||
{!simple && (
|
||||
@@ -87,19 +92,3 @@ export const Hit = forwardRef<
|
||||
</li>
|
||||
);
|
||||
});
|
||||
|
||||
function HeadingLinks({
|
||||
hit,
|
||||
}: {
|
||||
hit: SearchHitT | Omit<SearchHitT, "score" | "anchor">;
|
||||
}) {
|
||||
if (hit.matches && hit.matches?.[0].key !== "heading") {
|
||||
return highlightMatches(hit.matches[0]);
|
||||
}
|
||||
|
||||
return (
|
||||
<span className="max-w-full text-lg font-regular text-text-subtle">
|
||||
{hit.description}
|
||||
</span>
|
||||
);
|
||||
}
|
||||
@@ -75,7 +75,7 @@ export function Collection({
|
||||
<div>
|
||||
{heading && tag && (
|
||||
<h2
|
||||
className={cl("sticky top-0 z-10 p-2 px-6 md:px-10", {
|
||||
className={cl("top-0 z-10 p-2 px-6 md:sticky md:px-10", {
|
||||
"bg-deepblue-50": ["komponent_artikkel", "ds_artikkel"].includes(
|
||||
tag,
|
||||
),
|
||||
@@ -91,7 +91,7 @@ export function Collection({
|
||||
)}
|
||||
{heading && !tag && (
|
||||
<Heading
|
||||
className="sticky top-0 z-10 bg-surface-subtle p-2 px-6 md:px-10"
|
||||
className="top-0 z-10 bg-surface-subtle p-2 px-6 md:sticky md:px-10"
|
||||
size="small"
|
||||
level="2"
|
||||
>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { useContext } from "react";
|
||||
import { Modal } from "@navikt/ds-react";
|
||||
import { XMarkIcon } from "@navikt/aksel-icons";
|
||||
import { Button, Heading, Modal } from "@navikt/ds-react";
|
||||
import { AkselSearchButton } from "@/web/search/parts/SearchButton";
|
||||
import { SearchContext, SearchNavigationContext } from "../providers";
|
||||
import { SearchForm } from "./Form";
|
||||
@@ -22,16 +23,28 @@ export const Search = () => {
|
||||
e.stopPropagation();
|
||||
}
|
||||
}}
|
||||
className="h-[90%] max-h-[52rem]"
|
||||
className="md:h-[90%] md:max-h-[52rem]"
|
||||
width="medium"
|
||||
aria-labelledby="aksel-search-heading"
|
||||
closeOnBackdropClick
|
||||
header={{
|
||||
heading: "Søk",
|
||||
closeButton: true,
|
||||
}}
|
||||
>
|
||||
<Heading
|
||||
level="1"
|
||||
size="medium"
|
||||
id="aksel-search-heading"
|
||||
visuallyHidden
|
||||
>
|
||||
Søk
|
||||
</Heading>
|
||||
<Skeleton />
|
||||
<SearchForm />
|
||||
<div className="flex items-center gap-2 px-2 py-1 md:px-4 md:py-4">
|
||||
<SearchForm />
|
||||
<Button
|
||||
variant="tertiary-neutral"
|
||||
onClick={close}
|
||||
icon={<XMarkIcon title="Lukk" />}
|
||||
/>
|
||||
</div>
|
||||
<Results />
|
||||
</Modal>
|
||||
</>
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
import cl from "clsx";
|
||||
import type { FuseResultMatch } from "fuse.js";
|
||||
import React from "react";
|
||||
import { searchOptions } from "@/types";
|
||||
|
||||
function splitStr(str: string, query: string) {
|
||||
@@ -48,50 +46,3 @@ export function highlightStr(
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export function highlightMatches(hitMatch: FuseResultMatch) {
|
||||
const text = hitMatch.value;
|
||||
|
||||
if (!text) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const result: { text: string; highlight: boolean }[] = [];
|
||||
const matches = [...hitMatch.indices];
|
||||
|
||||
let index = 0;
|
||||
matches.forEach((match, i) => {
|
||||
const str = text.substring(match[0], match[1] - 1);
|
||||
let preText = text.substring(index, match[0]);
|
||||
|
||||
if (i === 0) {
|
||||
const preLength = preText.length;
|
||||
preText = preText.substring(preText.length - 23);
|
||||
if (preText.length < preLength) {
|
||||
preText = `...${preText}`;
|
||||
}
|
||||
}
|
||||
|
||||
result.push({ text: preText, highlight: false });
|
||||
result.push({ text: str, highlight: true });
|
||||
index = match[1] - 1;
|
||||
if (i === matches.length - 1) {
|
||||
result.push({ text: text.substring(index), highlight: false });
|
||||
}
|
||||
});
|
||||
|
||||
return (
|
||||
<span>
|
||||
{result.map((part, i) => (
|
||||
<span
|
||||
key={i}
|
||||
className={cl({
|
||||
"font-semibold text-text-default": part.highlight,
|
||||
})}
|
||||
>
|
||||
{part.text}
|
||||
</span>
|
||||
))}
|
||||
</span>
|
||||
);
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
import Image from "next/legacy/image";
|
||||
import { GetServerSideProps } from "next/types";
|
||||
import { BodyLong, BodyShort, Detail, Heading } from "@navikt/ds-react";
|
||||
import BloggCard from "@/cms/cards/BloggCard";
|
||||
import Footer from "@/layout/footer/Footer";
|
||||
import Header from "@/layout/header/Header";
|
||||
import { SanityBlockContent } from "@/sanity-block";
|
||||
@@ -15,7 +14,7 @@ import {
|
||||
ResolveSlugT,
|
||||
} from "@/types";
|
||||
import { abbrName, dateStr, getImage } from "@/utils";
|
||||
import { BloggAd } from "@/web/BloggAd";
|
||||
import { BloggList } from "@/web/blogg-page/parts/BloggList";
|
||||
import { PagePreview } from "@/web/preview/PagePreview";
|
||||
import { SEO } from "@/web/seo/SEO";
|
||||
import NotFotfund from "../404";
|
||||
@@ -43,6 +42,7 @@ export const query = `{
|
||||
_createdAt,
|
||||
_id,
|
||||
ingress,
|
||||
seo,
|
||||
${contributorsAll},
|
||||
}
|
||||
}`;
|
||||
@@ -207,17 +207,13 @@ const Page = ({ blogg, morePosts, publishDate }: PageProps["props"]) => {
|
||||
<Heading level="2" size="large">
|
||||
Flere blogginnlegg
|
||||
</Heading>
|
||||
<ul className="mt-12 grid gap-x-6 gap-y-6 md:grid-cols-2 md:gap-x-6 md:gap-y-10 lg:grid-cols-3">
|
||||
<ul className="mt-12 grid gap-12">
|
||||
{morePosts.map((post) => (
|
||||
<BloggCard key={post._id} blog={post} />
|
||||
<BloggList key={post._id} blogg={post} />
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="mx-auto grid w-full max-w-4xl">
|
||||
<BloggAd />
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<Footer />
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
import { GetStaticProps } from "next/types";
|
||||
import { Heading } from "@navikt/ds-react";
|
||||
import BloggCard from "@/cms/cards/BloggCard";
|
||||
import Footer from "@/layout/footer/Footer";
|
||||
import Header from "@/layout/header/Header";
|
||||
import { getClient } from "@/sanity/client.server";
|
||||
@@ -12,8 +10,8 @@ import {
|
||||
ResolveContributorsT,
|
||||
ResolveSlugT,
|
||||
} from "@/types";
|
||||
import { BloggAd } from "@/web/BloggAd";
|
||||
import { LatestBloggposts } from "@/web/blogg-page/BloggPage";
|
||||
import { BloggList } from "@/web/blogg-page/parts/BloggList";
|
||||
import { PagePreview } from "@/web/preview/PagePreview";
|
||||
import { SEO } from "@/web/seo/SEO";
|
||||
import NotFotfund from "../404";
|
||||
@@ -62,7 +60,7 @@ const Page = (props: PageProps["props"]) => {
|
||||
return <NotFotfund />;
|
||||
}
|
||||
|
||||
const remainingPosts = props?.bloggposts?.slice(3, props?.bloggposts.length);
|
||||
const remainingPosts = props?.bloggposts?.slice(2, props?.bloggposts.length);
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -82,24 +80,17 @@ const Page = (props: PageProps["props"]) => {
|
||||
<div className="mx-auto mb-40 grid w-full max-w-screen-2xl px-4 sm:px-6">
|
||||
<LatestBloggposts
|
||||
bloggs={props?.bloggposts}
|
||||
title="Blogg"
|
||||
title="Produktbloggen"
|
||||
intro={props?.page?.intro}
|
||||
/>
|
||||
{/* Skriv for bloggen */}
|
||||
|
||||
<BloggAd />
|
||||
{/* Flere blogger */}
|
||||
{remainingPosts && (
|
||||
<div>
|
||||
<Heading level="2" size="xlarge" className="text-deepblue-800">
|
||||
Flere blogginnlegg
|
||||
</Heading>
|
||||
<ul className="mt-12 grid gap-x-3 gap-y-6 md:grid-cols-2 md:gap-x-6 md:gap-y-10 lg:grid-cols-3">
|
||||
{remainingPosts.map((blog) => (
|
||||
<BloggCard key={blog._id} blog={blog} />
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
<ul className="mt-8 grid gap-12 md:grid-cols-2">
|
||||
{remainingPosts.map((blogg) => (
|
||||
<BloggList blogg={blogg} key={blogg._id} />
|
||||
))}
|
||||
</ul>
|
||||
)}
|
||||
</div>
|
||||
</main>
|
||||
|
||||
@@ -46,6 +46,7 @@ export const komponentKategorier = [
|
||||
{ title: "Primitives", value: "primitives" },
|
||||
{ title: "Core", value: "core" },
|
||||
{ title: "Alpha", value: "alpha" },
|
||||
{ title: "Legacy", value: "legacy" },
|
||||
];
|
||||
|
||||
export const grunnleggendeKategorier = [
|
||||
|
||||
@@ -37,6 +37,6 @@
|
||||
"tailwindcss": "^3.4.11",
|
||||
"typescript": "5.5.4",
|
||||
"typescript-eslint": "^8.0.1",
|
||||
"vite": "^5.4.8"
|
||||
"vite": "^5.4.12"
|
||||
}
|
||||
}
|
||||
@@ -733,23 +733,23 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@navikt/aksel-icons@file:../../@navikt/aksel-icons::locator=referansesider%40workspace%3A.":
|
||||
version: 7.8.0
|
||||
resolution: "@navikt/aksel-icons@file:../../@navikt/aksel-icons#../../@navikt/aksel-icons::hash=bac186&locator=referansesider%40workspace%3A."
|
||||
checksum: 10/e31e6a82d5945df984a8139615867428a0aee90f22091501c51f31c2b6a157aeec4cd3c3427f520d2139eb73bfce57c41cdb4543718d58441c2635a7c7f2cdc5
|
||||
version: 7.9.2
|
||||
resolution: "@navikt/aksel-icons@file:../../@navikt/aksel-icons#../../@navikt/aksel-icons::hash=aff5eb&locator=referansesider%40workspace%3A."
|
||||
checksum: 10/99c2ca45b4ef0debbf78b183733ef1f9bb35246efaf19e914c4f269124b4fd90699b7e5e12a231618e796365c9b22d764b3525689367b184ad907dc45afdfc6f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@navikt/ds-css@file:../../@navikt/core/css::locator=referansesider%40workspace%3A.":
|
||||
version: 7.8.0
|
||||
resolution: "@navikt/ds-css@file:../../@navikt/core/css#../../@navikt/core/css::hash=7413d6&locator=referansesider%40workspace%3A."
|
||||
checksum: 10/7079efa87adac336780587e201d3591268e69b47f4dd0fdcccd44c5d4ad28766abfff04845643e2439880eb5a2fe22b2f55fa07fe76a9daa98b6f8ed0e883d99
|
||||
version: 7.9.2
|
||||
resolution: "@navikt/ds-css@file:../../@navikt/core/css#../../@navikt/core/css::hash=d4b3e1&locator=referansesider%40workspace%3A."
|
||||
checksum: 10/2faff79f5081fd4dcbe512478e8aa17dd6df32c2f2db874e24469bb24d4a6b7de09ffb242683eb3512481fc95fad4266c6ab1747bbfc2a86f9781e46b9282af5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@navikt/ds-tokens@file:../../@navikt/core/tokens::locator=referansesider%40workspace%3A.":
|
||||
version: 7.8.0
|
||||
resolution: "@navikt/ds-tokens@file:../../@navikt/core/tokens#../../@navikt/core/tokens::hash=2b97bf&locator=referansesider%40workspace%3A."
|
||||
checksum: 10/015b8b0a4908c58ee294a11cf679dfd78072c43dc0eccfa4c75c5bd7edbf77c34e99f035efbe271d30dd24fd87ea65a205c755c7705412f4d6740c6a42e34cd2
|
||||
version: 7.9.2
|
||||
resolution: "@navikt/ds-tokens@file:../../@navikt/core/tokens#../../@navikt/core/tokens::hash=9c3497&locator=referansesider%40workspace%3A."
|
||||
checksum: 10/99c62f4207165fa675989c0f0ba1e65497dad8f1233583f506f5631d5dbaca3c0ac8d0b683f8a3f03ace0c2296bc49f8f12a439d73e41be4a0a47fb957fd9869
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1233,7 +1233,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/react@npm:*, @types/react@npm:^18.3.3":
|
||||
"@types/react@npm:*":
|
||||
version: 18.3.6
|
||||
resolution: "@types/react@npm:18.3.6"
|
||||
dependencies:
|
||||
@@ -1243,6 +1243,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/react@npm:^18.3.11":
|
||||
version: 18.3.18
|
||||
resolution: "@types/react@npm:18.3.18"
|
||||
dependencies:
|
||||
"@types/prop-types": "npm:*"
|
||||
csstype: "npm:^3.0.2"
|
||||
checksum: 10/7fdd8b853e0d291d4138133f93f8d5c333da918e5804afcea61a923aab4bdfc9bb15eb21a5640959b452972b8715ddf10ffb12b3bd071898b9e37738636463f2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/stylis@npm:4.2.5":
|
||||
version: 4.2.5
|
||||
resolution: "@types/stylis@npm:4.2.5"
|
||||
@@ -3372,7 +3382,7 @@ __metadata:
|
||||
"@tanstack/react-router": "npm:^1.57.17"
|
||||
"@tanstack/router-devtools": "npm:^1.57.17"
|
||||
"@tanstack/router-plugin": "npm:^1.57.15"
|
||||
"@types/react": "npm:^18.3.3"
|
||||
"@types/react": "npm:^18.3.11"
|
||||
"@types/react-dom": "npm:^18.3.0"
|
||||
"@vitejs/plugin-react-swc": "npm:^3.5.0"
|
||||
"@vitest/eslint-plugin": "npm:^1.1.4"
|
||||
@@ -3390,7 +3400,7 @@ __metadata:
|
||||
tailwindcss: "npm:^3.4.11"
|
||||
typescript: "npm:5.5.4"
|
||||
typescript-eslint: "npm:^8.0.1"
|
||||
vite: "npm:^5.4.8"
|
||||
vite: "npm:^5.4.12"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
@@ -4015,9 +4025,9 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"vite@npm:^5.4.8":
|
||||
version: 5.4.8
|
||||
resolution: "vite@npm:5.4.8"
|
||||
"vite@npm:^5.4.12":
|
||||
version: 5.4.14
|
||||
resolution: "vite@npm:5.4.14"
|
||||
dependencies:
|
||||
esbuild: "npm:^0.21.3"
|
||||
fsevents: "npm:~2.3.3"
|
||||
@@ -4054,7 +4064,7 @@ __metadata:
|
||||
optional: true
|
||||
bin:
|
||||
vite: bin/vite.js
|
||||
checksum: 10/17fdffa558abaf854f04ead7d3ddd76e4556a59871f9ac63cca3fc20a79979984837d8dddaae4b171e3d73061f781e4eec0f6d3babdbce2b4d111d29cf474c1c
|
||||
checksum: 10/ce382f4059eb6c939823b8f62163794752243755d84c71a4b73ad0f7d4d9f4c7a557a6ef4c78e0640f4bcf5ae5ec6b20c7ee4816419af3c81ba275f478b73468
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
@@ -20,6 +20,6 @@
|
||||
"@types/react-dom": "^18.2.18",
|
||||
"@vitejs/plugin-react": "^4.2.1",
|
||||
"typescript": "5.5.4",
|
||||
"vite": "^5.4.6"
|
||||
"vite": "^5.4.12"
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -193,7 +193,7 @@
|
||||
"stylelint-value-no-unknown-custom-properties": "^6.0.0",
|
||||
"tsx": "^4.19.1",
|
||||
"typescript": "5.5.4",
|
||||
"vite": "^5.4.6",
|
||||
"vite": "^5.4.12",
|
||||
"vite-plugin-turbosnap": "^1.0.3",
|
||||
"vite-tsconfig-paths": "^4.3.2"
|
||||
},
|
||||
|
||||
@@ -3668,7 +3668,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@navikt/aksel-icons@npm:^7.9.2, @navikt/aksel-icons@workspace:@navikt/aksel-icons":
|
||||
"@navikt/aksel-icons@npm:^7.10.0, @navikt/aksel-icons@workspace:@navikt/aksel-icons":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@navikt/aksel-icons@workspace:@navikt/aksel-icons"
|
||||
dependencies:
|
||||
@@ -3699,8 +3699,8 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@navikt/aksel-stylelint@workspace:@navikt/aksel-stylelint"
|
||||
dependencies:
|
||||
"@navikt/ds-css": "npm:^7.9.2"
|
||||
"@navikt/ds-tokens": "npm:^7.9.2"
|
||||
"@navikt/ds-css": "npm:^7.10.0"
|
||||
"@navikt/ds-tokens": "npm:^7.10.0"
|
||||
concurrently: "npm:9.0.1"
|
||||
postcss-selector-parser: "npm:^6.0.13"
|
||||
postcss-value-parser: "npm:^4.2.0"
|
||||
@@ -3715,7 +3715,7 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@navikt/aksel@workspace:@navikt/aksel"
|
||||
dependencies:
|
||||
"@navikt/ds-css": "npm:^7.9.2"
|
||||
"@navikt/ds-css": "npm:^7.10.0"
|
||||
axios: "npm:1.7.4"
|
||||
chalk: "npm:4.1.0"
|
||||
clipboardy: "npm:^2.3.0"
|
||||
@@ -3736,11 +3736,11 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@navikt/ds-css@npm:*, @navikt/ds-css@npm:^7.9.2, @navikt/ds-css@workspace:@navikt/core/css":
|
||||
"@navikt/ds-css@npm:*, @navikt/ds-css@npm:^7.10.0, @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:^7.9.2"
|
||||
"@navikt/ds-tokens": "npm:^7.10.0"
|
||||
"@types/clean-css": "npm:4.2.11"
|
||||
autoprefixer: "npm:^10.4.20"
|
||||
browserslist: "npm:^4.24.2"
|
||||
@@ -3760,14 +3760,14 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@navikt/ds-react@npm:*, @navikt/ds-react@npm:^7.9.2, @navikt/ds-react@workspace:@navikt/core/react":
|
||||
"@navikt/ds-react@npm:*, @navikt/ds-react@npm:^7.10.0, @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.25.4"
|
||||
"@floating-ui/react-dom": "npm:^2.0.9"
|
||||
"@navikt/aksel-icons": "npm:^7.9.2"
|
||||
"@navikt/ds-tokens": "npm:^7.9.2"
|
||||
"@navikt/aksel-icons": "npm:^7.10.0"
|
||||
"@navikt/ds-tokens": "npm:^7.10.0"
|
||||
"@testing-library/dom": "npm:10.4.0"
|
||||
"@testing-library/jest-dom": "npm:^6.6.3"
|
||||
"@testing-library/react": "npm:^16.1.0"
|
||||
@@ -3798,11 +3798,11 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@navikt/ds-tailwind@npm:^7.9.2, @navikt/ds-tailwind@workspace:@navikt/core/tailwind":
|
||||
"@navikt/ds-tailwind@npm:^7.10.0, @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:^7.9.2"
|
||||
"@navikt/ds-tokens": "npm:^7.10.0"
|
||||
color: "npm:4.2.3"
|
||||
lodash: "npm:^4.17.21"
|
||||
tailwindcss: "npm:^3.3.3"
|
||||
@@ -3812,7 +3812,7 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@navikt/ds-tokens@npm:^7.9.2, @navikt/ds-tokens@workspace:@navikt/core/tokens":
|
||||
"@navikt/ds-tokens@npm:^7.10.0, @navikt/ds-tokens@workspace:@navikt/core/tokens":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@navikt/ds-tokens@workspace:@navikt/core/tokens"
|
||||
dependencies:
|
||||
@@ -7597,7 +7597,7 @@ __metadata:
|
||||
react: "npm:^18.0.0"
|
||||
react-dom: "npm:^18.0.0"
|
||||
typescript: "npm:5.5.4"
|
||||
vite: "npm:^5.4.6"
|
||||
vite: "npm:^5.4.12"
|
||||
vite-plugin-singlefile: "npm:^1.0.0"
|
||||
vite-plugin-svgr: "npm:^4.2.0"
|
||||
languageName: unknown
|
||||
@@ -7607,11 +7607,11 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "aksel.nav.no@workspace:aksel.nav.no"
|
||||
dependencies:
|
||||
"@navikt/aksel-icons": "npm:^7.9.2"
|
||||
"@navikt/ds-css": "npm:^7.9.2"
|
||||
"@navikt/ds-react": "npm:^7.9.2"
|
||||
"@navikt/ds-tailwind": "npm:^7.9.2"
|
||||
"@navikt/ds-tokens": "npm:^7.9.2"
|
||||
"@navikt/aksel-icons": "npm:^7.10.0"
|
||||
"@navikt/ds-css": "npm:^7.10.0"
|
||||
"@navikt/ds-react": "npm:^7.10.0"
|
||||
"@navikt/ds-tailwind": "npm:^7.10.0"
|
||||
"@navikt/ds-tokens": "npm:^7.10.0"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
@@ -7666,7 +7666,7 @@ __metadata:
|
||||
stylelint-value-no-unknown-custom-properties: "npm:^6.0.0"
|
||||
tsx: "npm:^4.19.1"
|
||||
typescript: "npm:5.5.4"
|
||||
vite: "npm:^5.4.6"
|
||||
vite: "npm:^5.4.12"
|
||||
vite-plugin-turbosnap: "npm:^1.0.3"
|
||||
vite-tsconfig-paths: "npm:^4.3.2"
|
||||
languageName: unknown
|
||||
@@ -24356,7 +24356,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"vite@npm:^5.0.0, vite@npm:^5.0.11, vite@npm:^5.4.6":
|
||||
"vite@npm:^5.0.0, vite@npm:^5.0.11":
|
||||
version: 5.4.9
|
||||
resolution: "vite@npm:5.4.9"
|
||||
dependencies:
|
||||
@@ -24399,6 +24399,49 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"vite@npm:^5.4.12":
|
||||
version: 5.4.14
|
||||
resolution: "vite@npm:5.4.14"
|
||||
dependencies:
|
||||
esbuild: "npm:^0.21.3"
|
||||
fsevents: "npm:~2.3.3"
|
||||
postcss: "npm:^8.4.43"
|
||||
rollup: "npm:^4.20.0"
|
||||
peerDependencies:
|
||||
"@types/node": ^18.0.0 || >=20.0.0
|
||||
less: "*"
|
||||
lightningcss: ^1.21.0
|
||||
sass: "*"
|
||||
sass-embedded: "*"
|
||||
stylus: "*"
|
||||
sugarss: "*"
|
||||
terser: ^5.4.0
|
||||
dependenciesMeta:
|
||||
fsevents:
|
||||
optional: true
|
||||
peerDependenciesMeta:
|
||||
"@types/node":
|
||||
optional: true
|
||||
less:
|
||||
optional: true
|
||||
lightningcss:
|
||||
optional: true
|
||||
sass:
|
||||
optional: true
|
||||
sass-embedded:
|
||||
optional: true
|
||||
stylus:
|
||||
optional: true
|
||||
sugarss:
|
||||
optional: true
|
||||
terser:
|
||||
optional: true
|
||||
bin:
|
||||
vite: bin/vite.js
|
||||
checksum: 10/ce382f4059eb6c939823b8f62163794752243755d84c71a4b73ad0f7d4d9f4c7a557a6ef4c78e0640f4bcf5ae5ec6b20c7ee4816419af3c81ba275f478b73468
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"vitest@npm:^2.1.8":
|
||||
version: 2.1.8
|
||||
resolution: "vitest@npm:2.1.8"
|
||||
|
||||
Reference in new issue
Block a user