Compare commits

..
Author SHA1 Message Date
github-actions[bot]andgithub-actions[bot] 7b691b6cd0 Version Packages (#2916)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-05-14 15:29:55 +02:00
Ken 1b048ba5c3 refactor: removed unsplash plugin from sanity media input (#2921) 2024-05-14 11:31:45 +02:00
Ken e92c897c01 update: New sanity versions (#2918)
* update: New sanity versions

* update: Bump canary-release of devDeps for nextjs

* sync: yarn lock
2024-05-14 10:15:52 +02:00
Halvor Haugan a1041d13cd Stepper.Step: Set aria-current to "step" instead of true (#2920) 2024-05-14 10:14:35 +02:00
Ken 241dd79ecb Block to show template/standard-texts on template-pages (#2913)
* feat: Standard highlighting komponent

* feat: Immplementert StandardHighlight i CMS

* refactor: Rename StandardHighlight -> ExampletextBlock

* memo: Riktigere initialValue
2024-05-14 09:40:59 +02:00
Halvor Haugan 6aaf56bc10 Adjust examples FormProgress 2024-05-13 15:54:23 +02:00
Ken 7becf3e4cf Simplified HGrid CSS-nesting (#2917)
* test: Setup testing env for HGrid bug

* refactor: Forenklet HGrid-css

* memo: Changeset
2024-05-13 14:39:41 +02:00
Ken a358d222b5 refactor: Removed extra w-fit left after refactor 2024-05-13 13:53:13 +02:00
Ken 24d4d48c87 Link to GH-discussions from template-pages (#2914)
* feat: New gh-discussions field for template-articles

* feat: Link to gh-discussions on template-pages

* refactor: removed extra display grid in wrapper

* feat: Added story for GHPages suggeestionBlock
2024-05-13 12:27:49 +02:00
Ken 2d0c2c6567 deps: Updated Nextjs and logging depdendencies (#2915) 2024-05-13 11:36:32 +02:00
Halvor Haugan bd482c5d3e Ny komponent FormProgress (#2855) 2024-05-13 10:30:28 +02:00
github-actions[bot]andgithub-actions[bot] c8c3fc4ec5 Version Packages (#2896)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-05-10 14:37:43 +02:00
Andreas Nordahl 834ba0cbae Decouple read-more icon hover offset and rotation style (#2912) 2024-05-10 13:53:03 +02:00
KenandHalvor Haugan be653cc67a [Aksel.nav.no] Mindre justeringer på Søk (#2899)
* refactor: Fjernet tags fra søk

* design: Oppdatert padding for søk og la tilbake border på focus

* refactor: Fjernet lenketags fra komponent-artikler

* design: Oppdatert fokusmarkering og hover for search-hit

* bug: Mobiltilpasset søk-headings

* bug: e2e-tester fant ikke søkefelt

* bug: Seksjoner i søk har nå riktig heading-level h2

* Update aksel.nav.no/website/components/website-modules/search/parts/Hit.tsx

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* refactor: Quotes i søk får samme farge

* Update aksel.nav.no/website/components/website-modules/search/parts/Results.tsx

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* refactor: Unødvendig filtrering basert på dokumenttype er fjernet

* bug: Bruker section-element for gruppering av søkeresultater

* refactor: Unødvendig filtrering basert på dokumenttype er fjernet

* bug: Border forsvant ved pointerdown

* refactor: Hides image-frame from serch-hit

* Revert "refactor: Hides image-frame from serch-hit"

This reverts commit 764c82ebdb.

* refactor: Truncate title

---------

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>
2024-05-08 10:08:57 +02:00
Halvor Haugan 054835d1dd 🆙 Oppgradert deps (#2908) 2024-05-08 09:53:14 +02:00
Ken 7f99d407c0 Combobox refactor: Flyttet Input controls ut i egen komponent (#2900)
* refactor: Flyttet Input controls ut i egen komponent

* refactor: Inlinet clearbutton implementasjon, fikset typer

* 🚚 Flyttet ToggleListButton til input-mappe

* Combobox refactor: Bruker intern `createContext` for context-creation i Combobox (#2902)

* refactor: Bruker egen creactContext for selectedOptionsContext

* refactor: Bruker egen creactContext for filteredOptionsContext

* refactor: Bruker egen creactContext for InputContext

* refactor: Bruker egen creactContext for selectedOptionsContext

* refactor: Rename InputContext hook

* 🚚 Flyttet testfiler inn i egen mappe (#2905)
2024-05-08 09:05:02 +02:00
Ken 1202e0a6f7 bug: InitialValues for god-praksis struktur i admin ga ikke riktige tilganger 2024-05-07 18:22:56 +02:00
0c06fa12d0 Progressbar tweaks (etter docs-møtet) (#2892)
Co-authored-by: Julian Nymark <julian.nymark@nav.no>
Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>
2024-05-07 14:36:11 +02:00
Lars Eirik Korsgaard Hansen 4797ccae9d Combobox: Remove 'Ingen søketreff' when custom options allowed (#2895) 2024-05-07 11:41:01 +02:00
Ken ac06d882a7 refactor: Forenklet mergeRefs i floating-util 2024-05-07 09:57:20 +02:00
Ken 8f5c956bad Floating utility (#2872)
* ✨ Initial Popper wrapper

* ✨ Floating popper element

* 🏷️ Rename popper -> floating

* 🐛 Fikset imports

* ♻️ FLoating-fil splittet opp i moduler

* 🎨 Satt opp exports og story

* 🎨 Arrow er nå del av content

* 🐛 display block på arrow

* 🎉 Egen Portal-komponent

* 🎨 Portal og Overlay exportert i root

* ♻️ Tooltip bruker egen Portal

* 📝 Changeset

* 🔀 Merge Portal

* 📝 Story with portal

* 📝 Props story

* 🚚 Temp rename

* 🚚 Temp rename

* 🎨 La til Slot på Floating.Anchor

* ✨ Fungerende nesting av dismissable items

* ✨ Fungerende outsidepointerclick handler

* 🚚 Ryddet opp i struktur

* ✨ bedre event-handling

* 🎉 Popover bruker dismissableLayer

* 🔥 Fjernet console.logs

* ♻️ Extender nå ikke htmldivelement

* 📝 Commented on dimsissablelayer

* 📝 Kommentarer

* 🎨 Disable pointer-events on body

* 🎨 Setup content

* 🎨 Fungerende popover med story

* 🎨 useDescendant-API kan bruke uten context-error på nesting

* 🐛 Fikset tilfeller der oppdatering av descendant-options ikke ble reflektert i descendants-map

* 🐛 Satte enabled til optional

* bug: import av Portal brakk stories for Popover og Floating

* bug: DescenadantContext er nå riktig typet som undefined

* label: scopet navn for bruk av descendant-provider i dismissablelayer

* memo: Bedre kommentarer

* feat: Sender ikke callbacks hvis layer er disabled

* memo: Formatering og kommentarer

* memo: Kommentarer

* feat: Støtter forwardRef

* merge: Merge branch with main

* 🔥 Fjernet ny popover implementasjon

* 🔥 Fjernet mergeconflict fra main i tabs

* 🔥 Fjernet mergeconflict fra main i tabs

* refactor: Cleaniup codestructure

* refactor: Fjernet unødvendige props

* refactor: Synket dependencies og changeset
2024-05-07 09:56:06 +02:00
Ken 6b40a0ddd8 refactor: Oppdatert stories til chromatic format
refactor: Oppdatert HGrid stories til chromatic format

refactor: Oppdatert InternalHeader stories til chromatic format

refactor: Oppdatert skeleton stories til chromatic format

refactor: Oppdatert box stories til chromatic format

refactor: Oppdatert loader stories til chromatic format

refactor: Oppdatert list stories til chromatic format

refactor: Oppdatert tag stories til chromatic format
2024-05-06 16:28:12 +02:00
Halvor Haugan 60a6cba329 Justering av stories på Chat (#2903) 2024-05-06 14:24:23 +02:00
Ken 7fd62f3b79 logging: Fjernet logging av query i søk (#2897) 2024-05-06 11:50:02 +02:00
Ken 0944bbc256 DismissableLayer-API (#2814)
* ✨ Fungerende nesting av dismissable items

* ✨ Fungerende outsidepointerclick handler

* 🚚 Ryddet opp i struktur

* ✨ bedre event-handling

* 🎉 Popover bruker dismissableLayer

* 🔥 Fjernet console.logs

* ♻️ Extender nå ikke htmldivelement

* 📝 Commented on dimsissablelayer

* 📝 Kommentarer

* 🎨 Disable pointer-events on body

* 🎨 useDescendant-API kan bruke uten context-error på nesting

* 🐛 Fikset tilfeller der oppdatering av descendant-options ikke ble reflektert i descendants-map

* 🐛 Satte enabled til optional

* bug: DescenadantContext er nå riktig typet som undefined

* label: scopet navn for bruk av descendant-provider i dismissablelayer

* memo: Bedre kommentarer

* feat: Sender ikke callbacks hvis layer er disabled

* memo: Formatering og kommentarer

* memo: Kommentarer

* feat: Støtter forwardRef

* ♻️ Ryddet i DismissableLayer filer

* ♻️ Fikset edgecase der 'disabled'-noder kunne stoppe pointer-events

* refactor: Cleanup PR før release

* bug: useDismissableDescendantsContext ikke required
2024-05-04 15:15:15 +02:00
Ken 16087a458a refactor: DescendantContext er nå scopet (#2890)
* refactor: DescendantContext er nå scopet

* ♻️ Fjernet unødvendig wrapping
2024-05-04 13:34:34 +02:00
KenandHalvor Haugan c47c372d0f [Datepicker|MonthPicker] Flippet visning av år. (#2882)
* feat: DropdownCaption viser år i motsatt rekkefølge for select

* feat: Year-select for MonthPicker er viser nyeste år først

* memo: Changeset

* Update .changeset/thick-poems-design.md

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

---------

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>
2024-05-04 13:33:59 +02:00
Ken 0c479831df bug: Nettsidebygg feilet ved bruk av fjernet prop 2024-05-02 13:27:50 +02:00
github-actions[bot]andgithub-actions[bot] 41e9fbd2a5 Version Packages (#2878)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-05-02 12:35:49 +02:00
Ken 7b25f30e60 🏷️ Fjernet referanse til duration i Progressbar for pre-release 2024-05-02 12:32:31 +02:00
Ken db9c858153 refactor: Radio og Checkbox bruker :focus for bedre synlighet når de blir lenket til fra ErrorSummary (#2893) 2024-05-02 12:18:49 +02:00
Julian Nymark b21015bf54 💄 fix for broken pin style (#2889)
* 💄 fix for broken pin style

As content (Rows) grows, the pin would get pushed down (and under) the content.

* changeset

* 💄 make css for timeline pin even more compact
2024-04-29 19:13:57 +02:00
Lars Eirik Korsgaard Hansen bac48d9057 Progressbar aria hidden (#2888) 2024-04-29 14:47:29 +02:00
Lars Eirik Korsgaard Hansen e1a85dfbeb Progressbar demo-fixes (#2887) 2024-04-29 12:40:09 +02:00
Lars Eirik Korsgaard Hansen 3f65eee9e9 Progressbar demos (#2885) 2024-04-29 10:53:02 +02:00
Halvor Haugan cd77198f1c [aksel.nav.no] Fiks anker i søketreff-lenker (#2884) 2024-04-29 09:02:58 +02:00
Halvor Haugan 82827ec712 Justering av eksempler på Label, Detail og ErrorMessage (#2883) 2024-04-29 09:02:34 +02:00
Ken 710ed83661 [Aksel.nav.no] Ny Meny for sidebar og TOC (#2873)
* 🎉 WIP for ny sidebar og TOC meny

* 💫 Animert farger

* 🎨 Støtte for nested menuitems

* 🎨 Støtter nå sidebar og toc-variant for farger

* ♻️ Migrert TOC til å bruke ny meny

* ♻️ Migrert Sidebar til å bruke ny meny

* 🐛 Fikset story

* ♿ Klikkhøyde nå minst 32px

* 💄 Justert bakgrunnsanimasjon fra 200ms -> 100ms

* Types: variant bruker semantiske navn

* bug: MenuLink ble brukt utenfor MenuLi
2024-04-26 07:58:47 +02:00
Ken 3b44a97725 design: Fallback/Alle tema piktogram er nå Aksel-logo (#2877) 2024-04-25 11:55:46 +02:00
Ken edcbd6e198 bug: Error-handling for oppretting av nye brukerprofiler i sanity (#2881) 2024-04-25 11:54:08 +02:00
Halvor Haugan bd3f9355eb storybook:aksel viser og sorterer nå på index på kodeeksempler (#2880) 2024-04-25 10:49:04 +02:00
Halvor Haugan f11bce1f8c Oppdater JSDOC og eksempler på Heading, BodyLong og BodyShort (#2879) 2024-04-25 10:16:00 +02:00
Lars Eirik Korsgaard HansenandHalvor Haugan 277525f39f ✨ Ny komponent: ProgressBar (#2845)
Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>
2024-04-24 14:18:55 +02:00
Ken 210496c2cc bug: Validering av SEO-felt i sanity brakk ved undefined asset 2024-04-24 08:03:27 +02:00
github-actions[bot]andgithub-actions[bot] 8f317878fc Version Packages (#2875)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-04-22 15:48:59 +02:00
KenandHalvor Haugan c3064a01f7 🎨 Spacer er nå span (tidligere div) (#2874)
* 🎨 Spacer er nå span (tidligere div)

* 📝 Changeset

* Update .changeset/thick-humans-smile.md

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

---------

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>
2024-04-22 15:32:57 +02:00
Ken 02f0a911b0 🔥 Fjernet gammel kode for god praksis og sanity (#2866)
* 🔥 Fjernet filtrering av aksel_tema

* 🔥 Fjernet gamle migreringer

* ⚰️ Fjernet aksel_tema og gammelt feedback-dokument

* ⚰️ Fjernet gammelt god praksis card

* ♻️ Gjenbruker nytt gp-card for relaterte artikler

* ♻️ Fjernet gamle typer

* 🔥 Fjernet referanser til gammelt feedback-dokument
2024-04-22 15:12:56 +02:00
Ken ee8524229f 🎨 Temakontakter får slack-melding gjennom tilbakemeldinger (#2869) 2024-04-19 13:36:16 +02:00
Ken d9932e203a [Sanity] Temakontakter visning (#2868)
* 🎨 Lagt til Temakontakter-felt i for gp.tema

* 🔥 Fjernet requirement for temakontakter

* 🎨 Visning for temakontakter
2024-04-19 12:58:14 +02:00
KenandHalvor Haugan b14fc23ecb [react] Collapsible component utility (#2859)
* ✨ Boilerplate for collapsible-component

* 🎨 Collapsible wrapper interface

* 🎨 Collapsible trigger interface

* 🎨 Collapsible content interface

* 🧪 Stories

* ♻️ Satt opp storybook for chromatic

* 📝 Satt opp exports

* 🧪 Open/defaultOpen tester for chromatic

* 📝 Kommentert props

* ♻️ Definerer data-state verdi på root

* 📝 JSDOC

* 📝 Disabled-demo

* ♻️ aria-controls blir bare satt når open

* ♿ Content controls button

* Update @navikt/core/react/src/collapsible/Collapsible.types.ts

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* ♻️ props -> rest

* ♻️ props -> rest

* ♻️ Omit unreachable props

* 📝 _id rename

---------

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>
2024-04-19 12:27:55 +02:00
Ken c16f75d6f8 [Sanity] Temakontakter (#2867)
* 🎨 Lagt til Temakontakter-felt i for gp.tema

* 🔥 Fjernet requirement for temakontakter
2024-04-19 08:42:22 +02:00
Halvor Haugan a01be91608 Rekkefølge på eksempler på FormSummary 2024-04-18 13:05:21 +02:00
github-actions[bot]andgithub-actions[bot] 8826a79021 Version Packages (#2850)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-04-18 11:59:36 +02:00
Vegard HaugstvedtandKen c2f3da84cc Bugfix/prevent submit on enter in combobox (#2861)
* Prevent "Enter" key in Combobox to...

* Added test for Enter not submitting form

* Added changeset

* Add test for un-selecting a selected option using "enter" on a Chip not submitting the form

* Do not prevent enter from submitting form if it should not perform another action (like selecting an option)

* Do not submit when the input field has a value

* Replace lots of sleep-calls with awaiting userEvents

* Create util function for looking up an option

* Fix bug where we couldn't un-select a custom option using "enter"

* Update test to account for the dropdown list closing when focus moves to the chips in the previous step

* Add possibility to slow down tests for debugging

* Fix issue with onFocus -> onToggleSelected(false), where clicking the open/close button didn't work

* Fix test

* Closing the FilteredOptionsList when focusing a Chip caused too many side effects, but we need to remove virtual focus at least. That way we won't double-click on enter.

* When no longer closing FilteredOptions on focusing a chip, we don't need to click the toggleIsOpen button to check that the option is un-selected

* Update .changeset/rotten-windows-cover.md

Co-authored-by: Ken <26967723+KenAJoh@users.noreply.github.com>

---------

Co-authored-by: Ken <26967723+KenAJoh@users.noreply.github.com>
2024-04-18 10:00:16 +02:00
Ken 2c1476022d 🐛 Descendant-provider feilet ved bruk av cloneElement (#2832)
* 🐛 Når Descendant-provider ble brukt med react cloneElement feilet child-re-render

* ⚡ Synker options for allerede registrert node

* ⚡ Unngår flere map-lookups for samme funksjon
2024-04-18 09:55:34 +02:00
Halvor Haugan dacf648c47 FormSummary: Link til dokumentasjonen i JSDOC (#2865) 2024-04-18 09:06:29 +02:00
Ken 5ec986771b [God praksis] Nye sider erstatter gamle (#2858)
* 🚚 Byttet ut gamle god-praksis sider med nye

* ♻️ Sitemap bruker ny gp-struktur

* ♻️ Lister med tema tittler bruker nå nye tema

* ♻️ Flyttet gammel godpraksiscardsimple

* ⚰️ Markert gamle tema-felt i sanity som deprecated

* ♻️ Bedre håndtering av editor/profil visning

* ♻️ Velger nå ikke en default tab for sanity visning

* 🔒 ErrorBoundary på alle gp-cards

* 🧪 Storybook for frontpage-cards

* 🐛 Dialog var ikke riktig lablet

* 🐛 Chips-liste wrappet ikke button i li, cube-illustrasjon var ikke gjemt for skjermleser

* 🎉 Viser publiserings og oppdateringsdatoer i toppen av artikkel

* 📝 Bidragsytere -> Medvirkende

* 🐛 Playwright testet gamle god praksis sider

* 🐛 Preview brakk på forside og god-praksis

* 💄 HeroCards har større illustrasjon

* ♻️ Forenklet size på herocard

* ♻️ Innhold i herocard er alltid sentrert

* 🔍 Artikler har nå riktig fallback OG-image

* Update aksel.nav.no/website/e2e/test-urls.json

* 🏷️ bruker SanityImageSource for piktogram

* 🏷️ Tagget title i staticprops som deprecated

* 🔥 Fjernet testkode

* Update aksel.nav.no/website/sanity/plugins/structure/god-praksis.ts

* 📝 Skrivefeil i structure

* 💄 Oppdatert gap mellom tagger i cards
2024-04-18 07:28:08 +02:00
ca6af8a5f7 index & process templates -> stories (#2856)
* index & process templates -> stories

* ✨ add duplication of templates to component storybook

* 🎨 fix story

* ♻️ refactor indexers for storybook

* ♻️ layout fullscreen for templates

* 🔥 Fjernet meta.json filer

* ♻️ Trukket dekorator-kode ut av alle templates

* 🐛 Fjerner storybook stories fra npm output

* 🔥 Fjernet templates fra core/react

* 🔥 Fjernet console.log

---------

Co-authored-by: Ken <ken.aleksander@gmail.com>
Co-authored-by: Ken <26967723+KenAJoh@users.noreply.github.com>
2024-04-17 13:46:58 +02:00
Ken 9410840f74 🐛 Fikset lenke i sanity (#2863) 2024-04-17 13:22:42 +02:00
Ken d88884f785 🔥 Fjernet content-container.css og grid.css fra _mappings (#2860)
* 🔥 Fjernet content-container og grid css fra _mappings

* Update .changeset/wet-books-end.md
2024-04-17 09:46:27 +02:00
Ken 0c8239ee00 🐛 EditorPreview knapp Sanity admin 2024-04-16 12:48:06 +02:00
Halvor Haugan 987118fd47 FormSummary.Heading: Fjern overridable, level oblig. og css-justeringer på <sm (#2857) 2024-04-16 10:34:27 +02:00
8d13f11689 Summary component (docs tweaks) (#2853)
* 🚧 wip on Summary

* ✨ new HR component

* 👔 fancy utility function to inject components into children

This is to be used in 2 places where we iterate over children and add <hr /> components between them all.

It also wraps the children in a <Box>, which is used here and not really reflected in the name of the function 🤔

* 🎨 improved version of Summary component

* Remove (some) magic

* Fix children type in injectHRBetween

* css

* header gap and bg

* responsive story + example with long texts

* 🚚 Summary -> FormSummary

* 🎨 update stories

* 🎨 update story + tweak CSS for EditButton

* 📝 add JSDoc

* export FormSummary in core/react/src/index.ts

* FormSummaryValue bruker BodyLong

* 📝 update JSDoc

* 📝 add demo

* 📝 update README.md for eksempler

* forwardRef på Answers

* forwardRef på Header

* forwardRef på Label og Value

* forwardRef på Heading og Edit

* Answer export

* spread props

* 🔥 remove HR component

* 📝 update JSDoc

* 🎨 export more FormSummary

* 🔥 duplicate dependency of _mapping (same as main)

* 📝 update JSDoc for FormSummary

* changeset

* 🔖 changeset

* 🔥 duplicate changeset

* Rename EditButton -> Edit

* oops

* Link er vel valgfritt

* 🐛 add correct CSS dependency for FormSummary

* 💄 FormSummary

* 💄 FormSummary

* className navds-form-summary

* className navds-form-summary__answers

* className navds-form-summary__header

* Update @navikt/core/css/form/form-summary.css

Co-authored-by: Ken <26967723+KenAJoh@users.noreply.github.com>

* Update @navikt/core/react/src/form-summary/FormSummaryLabel.tsx

Co-authored-by: Ken <26967723+KenAJoh@users.noreply.github.com>

* Update @navikt/core/react/src/form-summary/FormSummaryValue.tsx

Co-authored-by: Ken <26967723+KenAJoh@users.noreply.github.com>

* Header wrapper på små skjermer

* Rekkefølgen på selectors samme som DOM

* 🎨 structure consistency (ref, then ...rest, then className, then other things)

- also convert a props -> {not_the_rest, ...rest}

* update mappings

* Flytt border slik at du kan ha flere dd etter hverandre

* 🎨 update stories

* 🎨 update stories (more empty values)

* 🚚 story ComplexData -> RealisticUsage

* Mindre padding på små skjermer

* 🎨 update stories

* Answer forwardRef

* 🎨 update stories

* Eksempel på linjeskift i value i story

* 🎨 update story

* 🎨 update story

* 🚚 FormSummary -> Form/FormSummary

* 🎨 update Demo and story

* 🏷️ make href required for FormSummaryEdit

* 🏷️ + 🚧 typing woes

* 💄 tweak CSS to make it look just right

* 🏷️ correct typing using Exclude > Omit

* 🎨 use div over section without label

* 💄 FormSummary, last-child padding removal

* Fjernet kommentar

* typo i readme

* 🚚 FormSummary.Edit -> FormSummary.EditLink

* 🏷️ make href for EditLink optional

* 🚚 rename FormSummaryEdit -> FormSummaryEditLink

* FormSummaryEdit -> FormSummaryEditLink

* ✨ add example to FormSummary

* 🎨 update examples

* 🎨 update examples

* 💄 FormSummary

* 🎨 types + jsdoc tweaks (FormSummary)

* 🔥 remove aria-label example

* 🎨 separate example for grouped data

* 🎨 update desc for example

* 🔥 unused example code

* 🚚 rename examples

---------

Co-authored-by: Halvor Haugan <halvor.haugan@nav.no>
Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>
Co-authored-by: Ken <26967723+KenAJoh@users.noreply.github.com>
2024-04-15 13:54:08 +02:00
Ken 158e18454e 🚚 gp-sider lenker nå til god-praksis (#2852) 2024-04-15 13:53:40 +02:00
Ken be26bf22c9 🔥 Fjernet redirect (#2851) 2024-04-15 13:35:36 +02:00
Ken c2968a0e6d 🎨 Artikler med contributors får automatisk editor (#2849)
* 🎨 Artikler med contributors får automatisk editor lagt til ved creation

* 🔒 Lager bare profil automatisk for SSO-inlogging
2024-04-15 11:16:27 +02:00
KenandHalvor Haugan 3f92773273 [Sanity] Oppdatert deskStructure (#2844)
* 🚚 Flyttet bloggvisning til egen fil

* 🚚 Flyttet grunnleggende visning

* 🎨 Sorterer 'trenger oppdatering' etter eldst først

* 🎨 Sorterer 'trenger oppdatering' etter eldst først i god-praksis

* 🚚 Flyttet komponenter visning

* 🚚 Flyttet admin visning

* 💄 Endret ikon for utdaterte artikler. Dynamisk treshold for utdatert

* 📝 Skrivefeil

* 🐛 Skrivehjelp-tittel hadde for lav kontrast på darkmode i sanity

* 🔥 Fjernet unødvendig currenUser check

* ♻️ Fikset PR-kommentarer

* Update aksel.nav.no/website/sanity/plugins/structure/structure.util.ts

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* 🐛 Sjekker mail for lowercase

* 🐛 email kan være undefined

* Update aksel.nav.no/website/sanity/plugins/structure/structure.util.ts

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* ♻️ Bruker innebygd showIcon-funksjon

* 📝 Bedre gruppenavn for seksjoner i sanity

* 💄 Ikoner på landigssider

---------

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>
2024-04-15 11:15:17 +02:00
Ken 0c3ab1d0e7 [Sanity] Oppdatert utdatertvarsel (#2846)
* 🎨 innholdstype og undertema er nå required

* ♻️ Bruker eget panel for utdatert-warning i sanity

* ⚡ Bruker sanity useCurrentUser for å vise tilganger til bruker på profilside

* Update aksel.nav.no/website/sanity/schema/custom-components/EditorPage.tsx

* 🔥 Fjernet rest-spread
2024-04-15 11:12:32 +02:00
3a73a029f6 ✨ new FormSummary component (#2802)
* 🚧 wip on Summary

* ✨ new HR component

* 👔 fancy utility function to inject components into children

This is to be used in 2 places where we iterate over children and add <hr /> components between them all.

It also wraps the children in a <Box>, which is used here and not really reflected in the name of the function 🤔

* 🎨 improved version of Summary component

* Remove (some) magic

* Fix children type in injectHRBetween

* css

* header gap and bg

* responsive story + example with long texts

* 🚚 Summary -> FormSummary

* 🎨 update stories

* 🎨 update story + tweak CSS for EditButton

* 📝 add JSDoc

* export FormSummary in core/react/src/index.ts

* FormSummaryValue bruker BodyLong

* 📝 update JSDoc

* 📝 add demo

* 📝 update README.md for eksempler

* forwardRef på Answers

* forwardRef på Header

* forwardRef på Label og Value

* forwardRef på Heading og Edit

* Answer export

* spread props

* 🔥 remove HR component

* 📝 update JSDoc

* 🎨 export more FormSummary

* 🔥 duplicate dependency of _mapping (same as main)

* 📝 update JSDoc for FormSummary

* changeset

* 🔖 changeset

* 🔥 duplicate changeset

* Rename EditButton -> Edit

* oops

* Link er vel valgfritt

* 🐛 add correct CSS dependency for FormSummary

* 💄 FormSummary

* 💄 FormSummary

* className navds-form-summary

* className navds-form-summary__answers

* className navds-form-summary__header

* Update @navikt/core/css/form/form-summary.css

Co-authored-by: Ken <26967723+KenAJoh@users.noreply.github.com>

* Update @navikt/core/react/src/form-summary/FormSummaryLabel.tsx

Co-authored-by: Ken <26967723+KenAJoh@users.noreply.github.com>

* Update @navikt/core/react/src/form-summary/FormSummaryValue.tsx

Co-authored-by: Ken <26967723+KenAJoh@users.noreply.github.com>

* Header wrapper på små skjermer

* Rekkefølgen på selectors samme som DOM

* 🎨 structure consistency (ref, then ...rest, then className, then other things)

- also convert a props -> {not_the_rest, ...rest}

* update mappings

* Flytt border slik at du kan ha flere dd etter hverandre

* 🎨 update stories

* 🎨 update stories (more empty values)

* 🚚 story ComplexData -> RealisticUsage

* Mindre padding på små skjermer

* 🎨 update stories

* Answer forwardRef

* 🎨 update stories

* Eksempel på linjeskift i value i story

* 🎨 update story

* 🎨 update story

* 🚚 FormSummary -> Form/FormSummary

* 🎨 update Demo and story

* 🏷️ make href required for FormSummaryEdit

* 🏷️ + 🚧 typing woes

* 💄 tweak CSS to make it look just right

* 🏷️ correct typing using Exclude > Omit

* 🎨 use div over section without label

* 💄 FormSummary, last-child padding removal

* Fjernet kommentar

* typo i readme

* 🚚 FormSummary.Edit -> FormSummary.EditLink

* 🏷️ make href for EditLink optional

* 🚚 rename FormSummaryEdit -> FormSummaryEditLink

* FormSummaryEdit -> FormSummaryEditLink

* ✨ add example to FormSummary

* 🎨 update examples

* 🎨 update examples

* 💄 FormSummary

* 🎨 types + jsdoc tweaks (FormSummary)

---------

Co-authored-by: Halvor Haugan <halvor.haugan@nav.no>
Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>
Co-authored-by: Ken <26967723+KenAJoh@users.noreply.github.com>
2024-04-15 09:53:42 +02:00
Halvor Haugan 6fd0f501f5 Story med forced-colors på Button (#2847) 2024-04-15 09:24:07 +02:00
Ken a11b8ddf4e 🐛 Dokumentert bruk av full og overflow-x av bleed 2024-04-12 14:51:45 +02:00
Ken 171db6a813 [Sanity] Flyttet dev-område for ny god-praksis inn i "prod" (#2843)
* 🚚 Flyttet gp-taxonomy over til prod

* 🎉 Satt opp ny sanity-struktur for god-praksis

* 🔥 Fjernet gammel editor-visning

* 🎉 Oppdatert templates for ny sanity-visning av gp

* 🔥 Fjernet god-praksis-taxonomy struktur

Struktur er nå flyttet inn i main
2024-04-12 08:25:00 +02:00
github-actions[bot]andgithub-actions[bot] 085cc532ee Version Packages (#2839)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-04-11 12:21:05 +02:00
KenandHalvor Haugan deae4ecba5 Datepicker/MonthPicker required bugs (#2838)
* 🐛 Required-prop på monthpicker stoppet ikke de-select av valg

* 🧪 Tester required for datepicker

* 🔥 Fjernet console.logs

* 📝 Changeset

* Update .changeset/fifty-hairs-fix.md

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* Update @navikt/core/react/src/date/datepicker/datepicker.stories.tsx

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* 🔥 Disabled-attrb er ikke nødvendig i required demo

* 🐛 Satt defaultSelected-dato til statisk dato

* ♻️ Fjernet unødvendig required-sjekk

---------

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>
2024-04-11 11:55:27 +02:00
KenandHalvor Haugan cd2adcb655 Erstattet Radix togglegroup med intern implementasjon (#2620)
* 🎉 Ny hook og API 'descendants'

* 📝 Bedre storiers

* 🎨 implementert togglegroup med descendants

* 🎨 Implemented togglegroup.item

* 🎨 Fjernet gammel togglegroup

* 🐛 Fikset keydown

* 🔥 Fjernet comment

* 🎉 RowingFocus resetter nå ved focus-exit

* 🔥 Fjernet radix toggleroup fra dependencies

* 📝 Changeset

* [V6] Deprecated Grid og ContentContainer (#2622)

* 🔥 Fjernet grid css

* 🔥 Fjernet grid tsx

* 🔥 Fjernet content-container fra systemet

* 🐛 la til deprecatePrefix-tag for stylelint

* 📝 Changeset

* Textarea: Fjern wrapper (#2635)

* [V6] Chat-props deprecation (#2631)

* 🎨 Satt opp codemod boilerplate for chat deprecation

* 🐛 v5 -> v6 i codemod

* 🧪 Tester for alias-import av chat

* 🧪 idempotent codemod-test

* 🔥 Fjernet deprecated props fra Chat

* 📝 Changeset

* 📝 Bedre advarsel i chat-codemod

* 📝 v6-migration update

* 🧪 Tester vanlig import av Chat

* 📝 Oppdatert tekster i codemod

* 🔥 Fjernet return fra removeProps

* Update @navikt/aksel/src/codemod/migrations.ts

* [V6] 1440px breakpoint (#2632)

* ✨ La til nytt brekkpunkt 1440px

* 🎉 Bleed støtter 2xl breakpoint

* 🎉 Bleed box 2xl breakpoint

* 🎉 hgrid 2xl breakpoint

* 🎉 resterende primitives støtter 1440px

* 📝 tailwind migreringsdocs

* 🔥 Fjernet navno-mal fra chromatic snapshot

* 📝 Changeset

* 🐛 2xl hgrid css brakk

* 📝 Oppdatert changset med tailwind-ref

* Update @navikt/core/react/src/layout/bleed/Bleed.tsx

* Update @navikt/core/react/src/layout/bleed/Bleed.tsx

* 📝 Mer konsekvent story for breakpoints i box

* 🐛 JSDOC for Bleed matcher nå syntax

* [V6] Fjernet z-index-modal token  (#2637)

* 🔥 Fjernet zindex-modal token

* 📝 Oppdatert docs

* 📝 Changeset

* [V6] ErrorSummary magic (#2642)

* ♻️ Flyttet li-tag fra ErrorSummary-parent til child

* 🏷️ Bedre typer

* 🔒 Heading er nå required i ErrorSummary

* 🎨 Egen prop for ErrorSummary fokus

* 📝 Changeset

* 🎨 Bedre fokushåndtering i ErrorSummary

* ♻️ focusTarget -> focusTargetRef

* 📝 Fikset jsdoc

* 📝 Migreringstekst

* 📝 changeset

* 📝 Migration-text

* 📝 JSDoc-staving

* 📝 Oppdatert migreringsguide for z-index + tailwind

* 🐛 Fikset bruk av z-modal i tailwind

* 🔥 Fjernet descendants-filer

* 📝 Rename context og types til namespace

* 🔥 Fjernet openOnFocus-prop fra date

* [V6] Modal: strengere prop-typer (#2718)

* 🎨 SortState i Table har nå none tilgjengelig (#2726)

* [V6] Oppdatert bruk av action-farger (#2717)

* 💄 Button secondary hover

* 💄 Radio/Checkbox action-farger

* :WIP: combobox action-farger

* 🐛 Tilpasset hover-farge på checkbox i confirmationpanel

* 💄 copybutton hover-text action

* 💄 dropdown, helptext hover-text

* 💄 link og linkpanel actionsfarger

* 💄 Search action-farger

* 💄 select action-farger

* 💄 Stepper action

* 💄 Textarea action

* 💄 Textarea og textfield colors

* 🐛 Riktig hover-bakgrunn på combobox selected option

* 📝 Changeset

* 📝 changeset tokens

* 📝 Dokumentert nye tokens

* [V6] Native ESM-støtte 🎉  (#2677)

* 🎨 Fungerende cjs/esm bundle med use-client

* 🎨 Oppdatert dir-output i for esm

* ⬆️ Bump date-fns og react-day-picker

* 🎨 oppdatert date-fns imports

* 🐛 Endret bruk av reat-day-picker i monthpicker

* 🐛 Fikset rendring av button i Datepicker-row

* ♻️ Bruker date-fns imports ssom støtter v2 og v3

* ⬆️ Synced date-fns versions

* ✨ Astro testmiljø

* 📝 Changeset

* 🎨 Skriver packagejson med type for esm

* 🔥 Fjernet .yarn/* fra astro

* 🎨 La til .yarn i gitignore for astro

* ⏪ Bruker riktig ds-react versjon

* ⬆️ Lik tsconfig som ds-react i aksel-icons

* 🐛 La tilbake provernance

* 🐛 Undo Day/Row fix fra main

* 🔥 Fjernet mulighet til å laste date-fns v2

* 🔥 Fjernet fs-extra dependency

* 🐛 Fikset feil versjon på core/react

* [V6] React-pakker støtter nå native SSR ved å bruke `use-client` 🎉  (#2707)

* 🎉 use-client blir lagt til på export av ds-react og aksel-icons

* 🎉 La til nextjs med appdir for testing

* ⚡ Tom yarn.lock med i git

* 📝 changeset

* 📝 Oppdatert migration-guide

* Update @navikt/aksel-icons/config/index-template.js

* 🎉 ToggleGroup-prop fill

* 🐛 Async-lasting av date-fns er nå v3 esm compliant

v3 av date-fns støtter ikke default export/import, noe som brakk async-lasting da vi brukte .default

* 🧪 Forbedret ToggleGroup-tester

* ⬆️ yarn sync

* 🐛 Fikset import av parts

* 🔥 Fjernet duplikate changesets

* ⬇️ Reversert duplikate endringer som kom fra v6

* 📝 rowing -> roving

* 📝 Bedre test-navn

* 📝 Bedre navngivning for tester

* ⚡ Fjernet useEffect for state update

* 📝 Oppdatert changeset og jsdoc

* ♻️ Inlinet aria-desribedby

* 📝 Demo for fill-prop på aksel.nav.no

* 🐛 Togglegroup krever onChange-prop

* 📝 ToggleGroup story for chromatic

* ⬆️ yarn lock

* 🎉 Bedre visning av eksempel på aksel.nav.no

---------

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>
2024-04-11 11:29:33 +02:00
Ken 0d4385a545 🐛 Fill-eksempel på Tabs viste ikke funksjon riktig 2024-04-11 11:25:54 +02:00
Ken 6f1b9751f3 🛂 La til feedback på nye gp-sider (#2840) 2024-04-11 07:21:44 +02:00
Ken 7fb97808f0 🚚 Flyttet data-aksel-template attr dypere i dom-treet (#2841) 2024-04-11 07:21:29 +02:00
KenandHalvor Haugan d8ac958de2 Erstattet Radix tabs med intern implementasjon (#2621)
* 🎉 Ny hook og API 'descendants'

* 📝 Bedre storiers

* 🎉 Setup for ny tabs

* 🎨 Setup context

* 🎨 useTabs-hook

* 🎨 Tablist hook

* 🚚 Flyttet tablist i egen mappe

* 🎨 TabList

* 🐛 Fikset import av tabList

* 🎨 Tabs.Tab implementert

* 🎨 Tabs.TabPanel implementert

* 🐛 Fikset import av tabpanel

* 🐛 onOnClick -> onClick

* 🐛 Fikset keydown-håndtering i tablist

* 🐛 Fikset plassering av scrollbuttons i overflow

* ♿ Scrollbutton er nå

* ✨ Fitted variant

* 🐛 Fikset imports

* 🔥 Fjernet radix-tabs import

* 🎨 Panel-children rendres bare hvis selected

* 🎨 lazy-prop for å bare rendre children i panel hvis selected

* 🎨 Tabs.Tab håndterer nå tab-key og tabindex riktig

* 📝 Changeset

* 📝 Changeset

* [V6] Deprecated Grid og ContentContainer (#2622)

* 🔥 Fjernet grid css

* 🔥 Fjernet grid tsx

* 🔥 Fjernet content-container fra systemet

* 🐛 la til deprecatePrefix-tag for stylelint

* 📝 Changeset

* Textarea: Fjern wrapper (#2635)

* [V6] Chat-props deprecation (#2631)

* 🎨 Satt opp codemod boilerplate for chat deprecation

* 🐛 v5 -> v6 i codemod

* 🧪 Tester for alias-import av chat

* 🧪 idempotent codemod-test

* 🔥 Fjernet deprecated props fra Chat

* 📝 Changeset

* 📝 Bedre advarsel i chat-codemod

* 📝 v6-migration update

* 🧪 Tester vanlig import av Chat

* 📝 Oppdatert tekster i codemod

* 🔥 Fjernet return fra removeProps

* Update @navikt/aksel/src/codemod/migrations.ts

* [V6] 1440px breakpoint (#2632)

* ✨ La til nytt brekkpunkt 1440px

* 🎉 Bleed støtter 2xl breakpoint

* 🎉 Bleed box 2xl breakpoint

* 🎉 hgrid 2xl breakpoint

* 🎉 resterende primitives støtter 1440px

* 📝 tailwind migreringsdocs

* 🔥 Fjernet navno-mal fra chromatic snapshot

* 📝 Changeset

* 🐛 2xl hgrid css brakk

* 📝 Oppdatert changset med tailwind-ref

* Update @navikt/core/react/src/layout/bleed/Bleed.tsx

* Update @navikt/core/react/src/layout/bleed/Bleed.tsx

* 📝 Mer konsekvent story for breakpoints i box

* 🐛 JSDOC for Bleed matcher nå syntax

* [V6] Fjernet z-index-modal token  (#2637)

* 🔥 Fjernet zindex-modal token

* 📝 Oppdatert docs

* 📝 Changeset

* [V6] ErrorSummary magic (#2642)

* ♻️ Flyttet li-tag fra ErrorSummary-parent til child

* 🏷️ Bedre typer

* 🔒 Heading er nå required i ErrorSummary

* 🎨 Egen prop for ErrorSummary fokus

* 📝 Changeset

* 🎨 Bedre fokushåndtering i ErrorSummary

* ♻️ focusTarget -> focusTargetRef

* 📝 Fikset jsdoc

* 📝 Migreringstekst

* 📝 changeset

* 📝 Migration-text

* 📝 JSDoc-staving

* 📝 Oppdatert migreringsguide for z-index + tailwind

* 🐛 Fikset bruk av z-modal i tailwind

* 🔥 Fjernet descendants-filer

* 📝 Rename context og types til namespace

* 🔥 Fjernet openOnFocus-prop fra date

* [V6] Modal: strengere prop-typer (#2718)

* 🎨 SortState i Table har nå none tilgjengelig (#2726)

* [V6] Oppdatert bruk av action-farger (#2717)

* 💄 Button secondary hover

* 💄 Radio/Checkbox action-farger

* :WIP: combobox action-farger

* 🐛 Tilpasset hover-farge på checkbox i confirmationpanel

* 💄 copybutton hover-text action

* 💄 dropdown, helptext hover-text

* 💄 link og linkpanel actionsfarger

* 💄 Search action-farger

* 💄 select action-farger

* 💄 Stepper action

* 💄 Textarea action

* 💄 Textarea og textfield colors

* 🐛 Riktig hover-bakgrunn på combobox selected option

* 📝 Changeset

* 📝 changeset tokens

* 📝 Dokumentert nye tokens

* [V6] Native ESM-støtte 🎉  (#2677)

* 🎨 Fungerende cjs/esm bundle med use-client

* 🎨 Oppdatert dir-output i for esm

* ⬆️ Bump date-fns og react-day-picker

* 🎨 oppdatert date-fns imports

* 🐛 Endret bruk av reat-day-picker i monthpicker

* 🐛 Fikset rendring av button i Datepicker-row

* ♻️ Bruker date-fns imports ssom støtter v2 og v3

* ⬆️ Synced date-fns versions

* ✨ Astro testmiljø

* 📝 Changeset

* 🎨 Skriver packagejson med type for esm

* 🔥 Fjernet .yarn/* fra astro

* 🎨 La til .yarn i gitignore for astro

* ⏪ Bruker riktig ds-react versjon

* ⬆️ Lik tsconfig som ds-react i aksel-icons

* 🐛 La tilbake provernance

* 🐛 Undo Day/Row fix fra main

* 🔥 Fjernet mulighet til å laste date-fns v2

* 🔥 Fjernet fs-extra dependency

* 🐛 Fikset feil versjon på core/react

* [V6] React-pakker støtter nå native SSR ved å bruke `use-client` 🎉  (#2707)

* 🎉 use-client blir lagt til på export av ds-react og aksel-icons

* 🎉 La til nextjs med appdir for testing

* ⚡ Tom yarn.lock med i git

* 📝 changeset

* 📝 Oppdatert migration-guide

* Update @navikt/aksel-icons/config/index-template.js

* 🚚 rename fitted -> fill in tabs

* 🐛 Async-lasting av date-fns er nå v3 esm compliant

v3 av date-fns støtter ikke default export/import, noe som brakk async-lasting da vi brukte .default

* 🧪 Forbedret Tabs-tester

Lagt til flere test-caser, men implementert testing av keyboard-nav og tabbing

* ⬆️ yarn sync

* ⬆️ Yarn lock

* ⬇️ Reversert duplikate endringer som kom fra v6

* 🎨 Aria-hidden blir nå satt på ikon hvis label allerede er satt på tab

* Update @navikt/core/react/src/tabs/Tabs.types.ts

* 📝 Testnavn for tabs

* ⚡ Skipper unødvendig memo for tab-context, punktum etter all jsdoc

* 🔥 Fjernet TabsContextProps

* 📝 Fjernet comma på changeset

* 📝 Fill-demo for aksel.nav.no

* 📝 Changeset for lazy-prop

* Update @navikt/core/react/src/tabs/parts/tabpanel/TabPanel.tsx

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* 🐛 Beholder  attr fra radix med i ny implementasjon

* ⚡ Flyttet fokus-state update ut av useeffect, fjernet unødvendig klasse for hidden

* ⚡ Unngår unødvendig sjekk for disabled i onFocus for useTab2

* ♻️ tab og tabpanel støtter nå egne id-er

* Update @navikt/core/react/src/tabs/useTabs.ts

* 🐛 I none tilfeller førte setFocusedValue utenfor useEffect til infinite re-renders

* Update @navikt/core/react/src/tabs/parts/tab/Tab.tsx

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* 🐛 bruker-id var satt på feil attrb

* 📝 Dokumentert custom-ids for tabs

* ⚡ Chroamtic-format for tabs-stories

* ♻️ Omskrevet tabs-stories for ny syntax

* 📝 Bruker bold markdown istedenfor note syntax

* 📝 Flyttet warning til newline

* 📝 Bruker bare ett linjeskift for jsdoc

---------

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>
2024-04-10 13:36:11 +02:00
dependabot[bot]andKen b417c74374 ⬆️ Bump vite from 5.1.6 to 5.1.7 (#2836)
* ⬆️ Bump vite from 5.1.6 to 5.1.7

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.1.6 to 5.1.7.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.1.7/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.1.7/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>

* ⬆️ bumpet vite til 5.1.7 i shadow-dom demo

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ken <ken.aleksander@gmail.com>
2024-04-10 12:24:54 +02:00
Halvor Haugan ff1d3534a6 🆙 Oppgrader Chromatic (#2837) 2024-04-10 12:13:48 +02:00
KenandHalvor Haugan 57d015209d [aksel.nav.no] Oppdatert ny GP-struktur og frontend (#2778)
* 🎉 Animert hero-select for nye gp-sider

* 🎨 Implementert keyboard-handler for tema-hero

* ♿ Gjemmer elementer ikke synlige ved hero-select

* 🎉 Ny hero for gp-side

* 🎨 Oppdatet gp-forside

* 🧪 Stories for nye komponenter

* 🐛 tabindex -> tabIndex

* ♻️ Oppdatert queriy definition

* 💄 Justert for mobilvisning

* 🎨 Bruker prictogram-data fra sanity i cards

* 🎉 Bruker faktiske innholdstyper og undertema nå

* 🔥 Fjernet TODO

* 🎨 Oppdatert go-forside til å støtte riktekst description

* 🐛 stories var ikke oppdatert

* 🎉 Bruker hero-cards i tema-hero

* 🐛 stories var ikke oppdatert

* 🐛 Manglet image i response-type

* ♻️ Omstrukturert modalvariant av dialog

* 🎉 Dynamisk hero for gp-sider

* 💫 Dynamisk skalering er nå animert

* 💫 Justert exit-animasjon

* 🔥 Fjernet gammel inline style

* ♻️ Forenklet Static hero callbacks

* 🔥 Fjernet hasRefs sjekk etter query for gp-artikler

* 🎉 Oppdatert serverside interface for gp-tema

* 🎉 Visninger for filtervalg på gp-tema

* 🐛 Valgt element ble ikke fokusert ved hero-åpning

* 🎉 Oppdatert artikkelkort for nye gp-sider

* 💄 Justert spacing for heading/desc seksjoner

* 🎉 Fikset lasting av data og chips

* 🎉 Fungerende chip-navigering

* ⚰️ Fjernet gammel kode

* 🚚 rename tema-hero filer

* 📝 Dokumentert count articles funksjoner

* 🧪 tester for count-articles

* 🚚 Flyttet cardgrid ut til egen fil

* 🔍 lagt til seo for tema

* ⬇️ reversert til prod-dataset

* 🎉 Artikler på gp-forside er sortert etter mest populære

* 🎨 satt description på undertema til required

* 🎉 Panel for forhåndsvisning av undertema/innholdstype på artikkelside

* 🎉 Lagt til forklarings-felt i ny god-praksis struktur

* 🐛 Fjernet chiplist for lister uten noe data

* 🎉 Tilpasset temaheader for kontrast

* 💄 normal -> semibold for statichero title

* ♿ Wrappet lister i ul > li

* 🎉 Oppdatert til ul > li på artikkel-lister

* 🐛 Cards strakk seg ikke til høyde etter wrapping i li

* 🐛 Manglet main-element og skip-link støtte

* 🔍 Bedre meta-description

* 🔥 Fjernet kommentar

* 🎨 Gjort klar sitemap for ny god-praksis

* ♿ Bedre semantikk for temasider

* 🎨 Justert tema header

* 🎨 Oppdatert akselchevron

* 💫 Justert page-animasjon

* 🎨 La til artikkel-chips

* ♻️ Link chip -> temalink

* 🎨 Tema-tagging på gp-artikler

* 💄 Gradient og illustrasjon på tema-hero

* 💄 La til bildestøtte i hero-tittel

* 🐛 stories brakk

* 💄 Satt god praksis heading til text- default for bedre kontrast

* 💄 z-index problem på intro hero

* 💄 Småjusteringer design

* 🐛 z-index stacking av cube-illustrasjon nå bak tekst

* 📝 Lagt til kommentar

* 🚚 Flyttet over støtte for wc definering i react

* 🐛 Brukte feil temahenter i sitemap som brakk playwright

* ♿ uu-oppdateringer etter review

* ♻️ Explanation -> description for undertema og tema

* 💄 Oppdatert Hero for teamsider

* 💄 Blur-bg på tekst i hero, no underline på hover for komponentsforside

* ♻️ Fokus beholdet på select-knapp ved åpning av tema-dialog

* 📝 Commentarer på escapeKeyDown hook

* 💄 Gjennbruker gradient for alle hero-headers

* 📝 Skrivefeil

* 📝 Kommentert useGpViews

* 📝 Kommentert endringer

* ⬆️ Bumpet sanity til v3.36

* ♻️ Fjernet Modal variant av tema hero.

Bruker samme dialog på mobil og desktop

* 🎨 aria headings -> h3 for gp-forside lenke

* 📝 Lowercase i html for artikkelcards

* Update aksel.nav.no/website/pages/gp/index.tsx

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* Update aksel.nav.no/website/components/website-modules/AnimatedChevron.tsx

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* Update aksel.nav.no/website/components/layout/god-praksis-page/cards/GpArticleCard.tsx

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* Update aksel.nav.no/website/components/layout/god-praksis-page/hero/tema-hero/parts/HeroCardList.tsx

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* 🚚 ArticleView -> ArticleSections

* 🚚 bosheight -> dialogheight

* 🐛 Import feilet av GpCardGrid etter navneendring

* 🐛 hero navigasjon var ikke sortert etter temanavn

* 🔥 Fjernet explanation-felt for innholdstyper

* ♻️ Ryddet opp i kommentarer fra github

* ♻️ Bruker SanityImageSource for Image-type

* 💄 Selected-variant av herocard. Inverted-pictogram i sanity

* 📝 view -> queryView

* ♻️ Skrevet om ArticleSections for å unngå repetert kode

* ⬆️ yarn lock

* ♻️ Fjernet unødvendig react-fragment

---------

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>
2024-04-10 10:15:56 +02:00
Ken 5969859024 🐛 Unngå at global Escape-event lukker ikon-sidebar
Dette gjelder ved escape i Søk(modal) og søkefelt på ikonside
2024-04-10 09:05:51 +02:00
github-actions[bot]andgithub-actions[bot] 9bbc3e6813 Version Packages (#2835)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-04-09 15:25:38 +02:00
Ken 5250b47ca4 💄 Border-radius på FileUpload.Item er nå rund (#2834) 2024-04-09 15:20:40 +02:00
Ken fc7709ae2a 🐛 Søk filtrerte ut beste treff fra 'nyeste artikler' 2024-04-09 09:40:20 +02:00
github-actions[bot]andgithub-actions[bot] 2364e689ed Version Packages (#2831)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-04-09 09:12:06 +02:00
Halvor Haugan d57c0b2c2c Justering av eksempler på Checkbox (#2833) 2024-04-09 09:06:58 +02:00
Ken 868bb543a5 🐛 Preview brakk for god-praksis
Siden 'userState' ikke hentes fra Sanity, blir den undefined ved lasting av previewdata
2024-04-09 07:33:16 +02:00
Torkjel SkjetneandHalvor Haugan 8f9ed7a404 FileUpload.Item: 💥 Endret API og støtte for å sette ID på knappen (#2824)
Co-authored-by: Halvor Haugan <halvor.haugan@nav.no>
2024-04-08 09:16:53 +02:00
Halvor HauganandKen 5ea6255f6d Justeringer av eksempler på Radio og Checkbox med mer (#2830)
Co-authored-by: Ken <26967723+KenAJoh@users.noreply.github.com>
2024-04-04 20:54:12 +02:00
github-actions[bot]andgithub-actions[bot] 491fccbe80 Version Packages (#2828)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-04-03 11:56:35 +02:00
Ken cca2a8263f 💄 Fjernet Illustrasjon fra bloggsider (#2827) 2024-04-03 11:50:12 +02:00
Ken 3140ec2765 🔥 Fjernet role=gridcell fra datoknapper (#2826)
Siden knappene allerede er i en table og da også td er det unødvendig med gricell
2024-04-03 11:37:05 +02:00
Halvor Haugan d8fce83ae3 Oppgrader til Storybook 8 (#2825) 2024-04-03 10:03:44 +02:00
github-actions[bot]andgithub-actions[bot] f88b00daf6 Version Packages (#2821)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-04-03 09:45:19 +02:00
Ken 6d0baea5c1 👽 Oppdatert om Aksel lenke i footer
Side er flyttet fra god-praksis til standalone-side url
Er opprettet automatisk redirect slik at eldre lenker ikke brekker
2024-04-03 09:25:54 +02:00
Ken 880e77b9c2 ♻️ Fjernet max-krav for antall tegn i Relaterte lenker-module
Siden lenketeksten ofte refererer til en sidetittel skaper det utfordringer da de ofte er litt lengre
2024-04-03 09:03:57 +02:00
Ken 6d16373f85 👽 Oppdatert skriv for aksel lenke i footer
Side er flyttet fra god-praksis til standalone-side url
Er opprettet automatisk redirect slik at eldre lenker ikke brekker
2024-04-03 08:42:08 +02:00
Halvor Haugan ae078254dc Modal: Fjern tomt element (#2819) 2024-04-02 10:20:00 +02:00
github-actions[bot]andgithub-actions[bot] 638e8260b4 Version Packages (#2811)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-04-02 08:45:10 +02:00
Halvor Haugan d991011690 FileUpload.Dropzone: id prop settes på button (#2817) 2024-03-22 11:03:05 +01:00
KenandHalvor Haugan b6086f7b1f 📝 Oppdatert radio-error dokumentasjon (#2800)
* 📝 Oppdatert radio-error dokumentasjon

* Update aksel.nav.no/website/pages/eksempler/radio/error.tsx

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* Update aksel.nav.no/website/pages/eksempler/radio/error.tsx

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* Update aksel.nav.no/website/pages/eksempler/radio/error.tsx

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

---------

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>
2024-03-22 10:42:38 +01:00
Ken 05462081aa useControllableState i Expansioncard og Switch state-bug (#2810)
* ♻️ Bruker controllableState i ExpansionCard

* 🐛 Fikset tilfelle der checked switch var visuelt unchecked

* 📝 Changeset

* 🔥 Fjernet utkommentert kode
2024-03-22 10:24:35 +01:00
Ken 63e42de3ee 🆙 Oppdatert Playroom (#2815) 2024-03-22 09:31:00 +01:00
Halvor Haugan 2e85178166 yarn.lock sync 2024-03-21 16:36:11 +01:00
Ken 456d4e2e07 🐛 Slack var ikke i outbound accessPolicy for feedback 2024-03-21 11:52:48 +01:00
Ken b5a0cb8cdf Oppdatert logging for Aksel.nav.no + bumpet feedback pagination page-size (#2812)
* 🆙 Oppgradert logging

* 🎨 Bedre loggeoutput

* 🎨 Bruker childlogger

* 🧪 Custome error-logg

* ⚡ Større paginering-page for slackusers

* 📝 error -> info
2024-03-21 11:36:43 +01:00
Ken a2af9bcc37 Lagt til mer padding-right på ReadMore (#2806)
* 💄 Oppdatert padding-right på readmore

* 📝 Changeset

* 🐛 Manglet chromatic-disable på readmore story
2024-03-21 10:16:14 +01:00
bd45754adb [aksel.nav.no] Slackbot for feedback (#2785)
* 🎉 Satt opp boilerplate for auth på Aksel

* 🎉 Auth boilerplate

* 🎨 Demo-setup for å teste auth i dev

* 🚚 Flyttet auth til getserversideprops

* 🔥 Fjernet authprovider fra _app

* 🐛 revalidate er ikke valid key for getserversideprops i nextjs

* 🚚 rename auth-dir

* 🔥 Fjernet auth types

* 🎉 Auth for api

* 🎨 Oppdatert workflows med token

* 🔥 Fjernet testing av auth på god-praksis sider

* 🎨 La til sidecar på prod-deploy

* 🐛 only return boolean in Promise<boolean>

* ✨ feedback form

* 🎨 showcase all states of new FeedBackForm

* 🔥 remove prop name (will use auth api)

* 🎨 use getAuthUser()

* 🎨 use useAuth() for login/logout

* 🎉 Slack feedback-api

* 🐛 handle case where token is null

* 🎨 scroll to anchor on login redirect

* ⚡ Utility-funksjoner for slack-api

* 🧪 Tests for slack-utilities

* 🎨 Ryddet opp i henting av slack memebers

* 🚚 Flyttet caching inn i funkson

* 📱 make FeedbackForm responsive

* 🎉 Strengere typet slack-utilities

* 🎨 Fikset typefeil i feedback-api

* ⬆️ Migrert til @navikt/oasis

* 🏷️ Satt typer til strict for å kjøre tester

* 🎨 Slackbot-API with protected auth and actual user

* 🏷️ strengere typer

* ⚡ Implementert paginering av slacbot

* 🎨 Lagt til slackbot-token i workflows

* 🏷️ strict tsconfig

* 🏷️ Typer for slackbot input

* 🔥 Fjernet demo-body

* 🎨 oppdatert medvirkende tekst

* ⬆️ Yarn lock

* 🎨 move state handling down to Feedback

* 🏷️ typing fixes

* 🚧 API usage

* 🏷️ fix type error

* 👷 update AccessPolicy

* 🦺 add validation to feedback form

* 💄 justify-items-stretch on TextArea needed 🤔

* ♻️ avoid prop drilling, use sanity data hook for document id

* 🔧 add auth to webpack config for storybook

* ♻️ Feedback form  (also add error state handling)

* 👷 add stories for Feedback form

* 🔊 log feedback results metadata

* ♻️ remove refs, use formData and event.currentTarget

* 🧪 retry flaky test

* ⚗️ test promises for dynamic import in test

* 🧪 flaky test config

* ⬆️ yarn lock sync

* ⬆️ yarn lock sync

* ♻️ Bruker nå egen userState-type for fortelle komponenter om bruker er logget inn eller ikke

* 🔥 remove unused CSS

* 📝 lagt til todods

* 🔥 remove anonymous feedback submission

* 🔥 remove CSS

* :goals_net: catch fetch clientside, feedback

* ✨ send feedback to private slack channel as well

notify everyone if there are 0 editors

* 💄 + ♿ aria-hiddens and better styling, Feedback

* ♻️ refactor + add more feedback (loading state + alert)

* ⚗️ test encoding uri for anchor (redirect)

* ⚗️ more testing URL redirect

* ⚗️ more testing

* ⚗️ testing

* ✅ stories for Feedback

* 🔒 sanitize user objects (then cache)

* 🏷️ type SanitizeUser in find-user

* 🐛 optionally render the message about zero editors

* ⚗️ more testing for URL redirect / fragment issue

* ⚗️ log the redirect URL

* ⚗️ more testing

* ♻️ Gjennbruker error-return for feedback-api

* 🧪 Tester alternativ løsning for scroll etter login

* 🐛 Query update slapte loop i useEffect

* 🧪 Tester alternativ løsning for scroll etter login

* 🚚 Flyttet autofocus inn i headingseksjon

* 🐛 Wonderwall fjerner & fra query

* 🐛 encodeUrl as defined in wonderwall docs

* 🧪 Reversert til anchor-løsning

* 🧪 Reversert til anchor-løsning med encoding

* 🐛 Fikset edgecase der asPath med allerede eksisterende hash brakk login-redirect

* 🔥 Cleanup etter anchor-testing

* ⬆️ yarn lock sync

* 🎨 Oppdatert til navikt channelid

* 📝 Endret på error-tekst i feedback

* Fjernet ts-expect-error

* ⬆️ yarn lock sync

* 🔥 Fjernet filterering på godkjent mail

* 📝 Oppdatert slackbot-block

---------

Co-authored-by: Julian Nymark <julian.nymark@nav.no>
Co-authored-by: Halvor Haugan <halvor.haugan@nav.no>
2024-03-20 15:48:49 +01:00
github-actions[bot]andgithub-actions[bot] a882a8a389 Version Packages (#2807)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-03-20 13:26:51 +01:00
Ken d1606d358a 🐛 useDatepicker håndterer isInvalid validation riktig (#2809)
* 🐛 useDatepicker håndterer isInvalid validation riktig nå

* Update @navikt/core/react/src/date/hooks/useDatepicker.tsx

* Update @navikt/core/react/src/date/hooks/useDatepicker.tsx
2024-03-20 13:21:05 +01:00
Ken bb87837632 🧪 Bump timeout and retry of dateStr testing 2024-03-20 12:33:56 +01:00
Halvor Haugan 9c8b2301ed FileUpload.Dropzone: Fiks feil med duplisert id (#2805) 2024-03-20 12:31:08 +01:00
Ken 54ba483d2d ✅ Oppdatert Chromatic-tester
✅ Oppdatert dropdown-tester

🐛 satt dropdown-story til open

✅ Oppdatert errorsummary-tester

✅ Oppdatert fieldset-tester
2024-03-20 11:51:46 +01:00
github-actions[bot]andgithub-actions[bot] 85f5458c06 Version Packages (#2804)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-03-20 09:51:54 +01:00
Halvor Haugan 19abec80f7 FileUpload: Fiks feil ved import av json (#2803) 2024-03-20 09:46:45 +01:00
Julian NymarkandHalvor Haugan b2ddce5279 📝 Search docs review (#2797)
Co-authored-by: Halvor Haugan <halvor.haugan@nav.no>
2024-03-19 15:39:12 +01:00
github-actions[bot]andgithub-actions[bot] bd7c945158 Version Packages (#2799)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-03-19 15:07:37 +01:00
Ken ca24684a25 🐛 Dropzone med disabled stoppet ikke filopplasting (#2798)
inputfelt settes nå til disabled ved bruk av prop for å unngå dette
2024-03-19 15:02:06 +01:00
Julian Nymark 1564363985 💄 break-normal on body text, but break-all on types, as they… (#2790)
* 💄 break-normal on body text, but break-all on types, as they get long and complicated without spaces

* 🔥 remove break-normal, as it's the default
2024-03-19 14:58:58 +01:00
Ken ca8d36e885 🔥 Fjernet UX-tweaks card på forside
Kode er kommentert ut fra forside, men vil være lett tilgjengelig hvis vi ønsker å legge til fremtidige undersøkelser
2024-03-19 14:43:00 +01:00
github-actions[bot]andgithub-actions[bot] 8efc6c58be Version Packages (#2794)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-03-19 14:00:30 +01:00
2ea2a91a37 Combobox complex options (#2716)
* Remove unused function

* Support for complex options, using objects with label and value instead of strings

* Better typing for isTextInSelectedOptions value (boolean instead of truthy/falsy)

* Stricter value type: Only accept string values. This will work better with the allowNewValues prop, and simplify returning a value from onToggleSelected.

* More JSDoc

* Add test for complex options with label and value

* Add example for complex options on the aksel-website

* yarn.lock

* Remove other properties than label and value from Combobox options in Storybook-examples, as we have limited the format for now

* Array.includes does not work with objects, so should use isInList utility function. Fixes missing checkmark for selected items in FilteredOptions.

* Add changeset

* Remove navds-dependencies in playroom that break playwright tests. These are outdated/unsynced, and will be inherited from parent package.json instead.

* Do not try to remove an undefined option

* "it" is from jest. Use "test" instead.

* Update @navikt/core/react/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* Update @navikt/core/react/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* Update @navikt/core/react/src/form/combobox/Input/Input.tsx

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* Update @navikt/core/react/src/form/combobox/types.ts

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* Raise change level to minor, to signal the new feature

* Spread props instead of adding them separately

* JSDoc @returns doesn't do anything without a value specified, and neither of these return a value

* Options are used for multiple features, so will just skip specifying them

* Doesn't need a guaranteed unique ID for storybook examples. Use hard-coded instead.

* selectedOptions is a list of strings anyhow, so should just use the value

* More realistic example for complex options, where the option label is larger, and the SelectedOptions label uses a short code (the value)

Also made the isInList function better, by checking both label and value when checking ComboboxOptions. Pass just the value or just the label if you only want to check either of them.

* Add tests for mapToComboboxOptionArray (renamed from mapFromStringArrayToComboboxOptionArray)

* Add test for toComboboxOption and use this function in mapToComboboxOptionArray

* Update combobox unit test for complex options to use a more realistic example

* Don't say anything about what might be added in the future. That doesn't belong in the documentation

* Oppdater beskrivelsen for complex options-eksempelet (var kopiert fra annet eksempel)

* Fix Storybook example bug where de-selecting a value selected it an extra time

* Fix example

* Remove listing options because it breaks with allowNewValues

* Revert earlier change that always showed selected values in FilteredOptions, even if it didn't match the search text. This broke autocomplete.

* Remove unneccessary optional check

* yarn.lock

* Don't need to use toLocaleLowerCase

---------

Co-authored-by: Ken <26967723+KenAJoh@users.noreply.github.com>
Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>
2024-03-19 13:47:13 +01:00
Halvor HauganandKen aebba20fd4 🆙 Minor-oppgradering av deps (#2795)
Co-authored-by: Ken <ken.aleksander@gmail.com>
2024-03-18 18:51:11 +01:00
Ken 5ce4b4ea79 📱 Tilpasset aksel-header for 320px (#2793) 2024-03-17 15:27:43 +01:00
Ken 548d9bb169 💄 Bedre eksempel for logg-ut i dropdown (#2792) 2024-03-17 15:27:33 +01:00
25e0d15d67 Ny komponent FileUpload (#2504)
---------

Co-authored-by: Ken <ken.aleksander@gmail.com>
Co-authored-by: Halvor Haugan <halvor.haugan@nav.no>
2024-03-15 12:54:35 +01:00
Halvor Haugan 98f6d7dde4 Forbedret beskrivelse for ref i prop-tabell (#2791) 2024-03-15 10:04:09 +01:00
6ac605dd48 Version Packages (#2775)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Ken <26967723+KenAJoh@users.noreply.github.com>
2024-03-14 16:15:40 +01:00
Ken d293d44b30 Fikset CDN deploy av Aksel og designsystem assets (#2789)
* 🐛 Oppdatert assetprefix

* 🐛 Fikset cdn asset upload
2024-03-14 16:05:09 +01:00
Julian Nymark 5754a08f6c 👷 update workflow for prod (new NAV CDN) 2024-03-14 14:20:08 +01:00
Julian Nymark 924c63324c 👷 swap team aksel for team designsystem (used elsewhere within NAIS) 2024-03-14 14:11:20 +01:00
Julian Nymark b78b818fea 👷 update workflow (new NAV CDN) 2024-03-14 14:00:44 +01:00
Ken dc5ea3b842 [Ikoner] Nytt ikon OpenSource (#2787)
* 🎉 Oppdatert ikonpakke

* 📝 changeset
2024-03-13 18:59:41 +01:00
Halvor Haugan bd315a239b [aksel.nav.no] Fiks link til token-guide (#2786) 2024-03-13 15:53:59 +01:00
Julian NymarkandKen <ken.aleksander@gmail.com>, Halvor 4469c641ed 💄 pretty up the props box on aksel.nav.no + typos (#2729)
* 💄 pretty up the props box on aksel.nav.no + typos

- also update some props docs here & there

* ♻️ pull out component, lazy() it

* 🔥 remove testing css

* 🎨 add fallback with <Suspense>

* 💬 correct @default strings

* 💄 spacing in Props table

* 🔥 @note is not a real JSDoc tag

* ✨ docgen extracts example, render fancy example box

* ✨ pretty @return and @params

* 💄 improve table layout / CSS

* 💄 + update CopyButton & Combobox jsdoc.

* 📝 update jsdoc

* 🎨 Oppdatert layout og visning av prop-table

* 🎨 use more semantic html, better nested <dl>

* ♿ add h4 to prop items

* 👷 use production sanity data

* ♿ revert nested <dl> so Axe tests pass

* 🏷️ correct some types for tsc to pass

* ♿ change from div -> ul

* 👷 commit lockfile

* 💄 make ul bottom rounded and align type with it\'s code block

* ♿ set language tag for props written in english

* 🏷️ type improvements for props section

* 🙈 update .gitignore

* 📝 jsdoc update

* 💄 props section

* ♻️ rename and less indentation (continues > ifs)

* 💄 style changes for Prop section

- breakpoint fail fix
- breakpoint col / row flex for prop fields
- padding tweaks

* 📝 update example jsdoc

---------

Co-authored-by: Ken <ken.aleksander@gmail.com>, Halvor <halvor.haugan@nav.no>
2024-03-12 13:59:35 +01:00
Halvor Haugan b15218e1cb Oppdatering av eksempler på Textarea (#2784) 2024-03-12 09:11:18 +01:00
Ken 73a69f7048 🎉 Fikset search-bug der for god score fjernet resultat (#2783) 2024-03-11 12:48:02 +01:00
Halvor Haugan 7dcd58ff76 Select: Justert eksempler, JSDOC og stories (#2782) 2024-03-11 11:04:49 +01:00
Halvor Haugan 2f3c99f5f6 Justering av eksempel på Table med TextField (#2780) 2024-03-08 09:35:00 +01:00
KenandJulian Nymark 8835291a78 [Aksel.nav.no] Auth på Aksel (#2757)
* 🎉 Satt opp boilerplate for auth på Aksel

* 🎉 Auth boilerplate

* 🎨 Demo-setup for å teste auth i dev

* 🚚 Flyttet auth til getserversideprops

* 🔥 Fjernet authprovider fra _app

* 🐛 revalidate er ikke valid key for getserversideprops i nextjs

* 🚚 rename auth-dir

* 🔥 Fjernet auth types

* 🎉 Auth for api

* 🎨 Oppdatert workflows med token

* 🔥 Fjernet testing av auth på god-praksis sider

* 🎨 La til sidecar på prod-deploy

* 🐛 only return boolean in Promise<boolean>

* ⬆️ Migrert til @navikt/oasis

* 🏷️ Satt typer til strict for å kjøre tester

* ⬆️ Yarn lock

---------

Co-authored-by: Julian Nymark <julian.nymark@nav.no>
2024-03-06 11:53:30 +01:00
Halvor Haugan 2971129d1f Oppgrader eslint-plugin-storybook (#2777) 2024-03-05 16:34:36 +01:00
Ken 9915cf8232 🔥 Fjernet muligheten til å sette seg som anonym i sanity
Nye forfattere blir anbefalt å bruke et alias eller bare fornavn hvis man ønsker.

Ingen er satt som anonym i dag, slik at dette ikke vil påvirke noen forfattere
2024-03-05 14:34:20 +01:00
Halvor Haugan fa00774b0d Forberedelse for Storybook 8 (#2776) 2024-03-05 14:33:58 +01:00
Ken 966de79621 [aksel.nav.no] Migrert editor-felt til variant med email (#2760)
* 🎨 Satt opp migrering for editorsider

* 🎨 Oppdatert initialvalues for mail og oppretting av nye artikler

* 📝 Description på email-field

* Update aksel.nav.no/website/sanity/schema/documents/editors.tsx

* Update aksel.nav.no/website/sanity/schema/documents/editors.tsx

* Update aksel.nav.no/website/sanity/schema/documents/editors.tsx

* 🎨 Bedre validering av nav-mail i sanity

* 🐛 Feilet etter ts oppdatering
2024-03-05 13:35:48 +01:00
KenandHalvor Haugan 0ce2300f92 [aksel.nav.no] Satt strict -> true i tsconfig (#2766)
* 🏷️ sanity-video typer

* 🏷️ Typer storybook

* 🏷️ Typer usecheckauth

* 🏷️ Typer formateddate

* 🏷️ Typer useSanityDate

* 🏷️ Typer footerlink

* 🏷️ Typer ny gp

* 🏷️ Typer layout

* 🏷️ Typer logging

* 🏷️ Typer logging av href

* 🏷️ Typer codeexamples

* 🏷️ Typer sanity-modules

* 🏷️ Typer for alle sanity-modules

* 🏷️ Typer resolvers

* 🏷️ Typer serach

* 🏷️ Typer search

* 🏷️ Typer useToc

* 🏷️ Typer _app

* 🏷️ Typer pages

* 🔥 Fjernet buildlogs fra tsc

* ⬇️ Reversert til gammel logging av lenker

* Update aksel.nav.no/website/pages/eksempler/timeline-intern/aria-controls.tsx

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>

* 🏷️ Bruker satisifies for array-type sjekk

* 🏷️ Forenklet typer

---------

Co-authored-by: Halvor Haugan <83693529+HalvorHaugan@users.noreply.github.com>
2024-03-05 11:46:10 +01:00
Halvor Haugan 08e9876176 Sandbox: Alltid bruk siste versjon av DS-pakkene (#2774) 2024-03-04 14:10:36 +01:00
Ken 331b4c4c00 🎉 Nytt ikon archive@ (#2772) 2024-03-04 14:10:04 +01:00
686 changed files with 24152 additions and 14647 deletions

No files matched your search

+1
View File
@@ -19,6 +19,7 @@ add links to project-tasks, slack discussions etc here
- Check that styling is correctly exported from `@navikt/core/css/index.css`
- Check that correct tokens for component is documented in `@navikt/core/css/tokens.json`
- Check that only needed components and types are exported from `@navikt/core/react/src/index.ts`
- Check that component is exported from `@navikt/core/react/package.json`
- Add JSDoc to component (see other components for reference)
- Create storybook-stories for relevant component variations and compositions. Stories are used for [visual regression testing](https://www.chromatic.com/docs/), so make sure they are complete.
- Is the component sufficiently complex to warrant tests? Add some unit-tests for vitest.
+11 -11
View File
@@ -14,12 +14,18 @@ jobs:
contents: "read"
id-token: "write"
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: "20"
- uses: actions/checkout@v3
cache: yarn
- name: set-env for yarn install to @navikt scope
shell: bash
run: echo "NPM_AUTH_TOKEN=${{ secrets.READER_TOKEN }}" >> $GITHUB_ENV
- name: add tokens to .env
run: |
echo "SLACK_BOT_TOKEN=${{ secrets.SLACK_BOT_TOKEN }}" >> aksel.nav.no/website/.env
echo "SANITY_WRITE_KEY=${{ secrets.SANITY_FEEDBACK_WRITE_KEY }}" >> aksel.nav.no/website/.env
echo "SANITY_PREVIEW_TOKEN=${{ secrets.SANITY_PREVIEW_TOKEN }}" >> aksel.nav.no/website/.env
echo "SANITY_PRIVATE_NO_DRAFTS=${{ secrets.SANITY_PRIVATE_NO_DRAFTS }}" >> aksel.nav.no/website/.env
@@ -29,14 +35,6 @@ jobs:
run: |
echo "User-agent: *\nDisallow: /" > aksel.nav.no/website/public/robots.txt
- name: Restore cache
uses: actions/cache@v3
with:
path: "**/node_modules"
key: ${{ runner.os }}-dev-${{ github.sha }}
restore-keys: |
${{ runner.os }}-dev-
- name: Install dependencies
run: yarn
@@ -46,11 +44,13 @@ jobs:
yarn workspace aksel.nav.no build:next
- name: Upload static files to NAV CDN
uses: navikt/frontend/actions/cdn-upload/v1@main
uses: nais/deploy/actions/cdn-upload/v2@master
with:
cdn-team-name: aksel
team: designsystem
source: ./aksel.nav.no/website/.next/static
destination: "/website/_next"
project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }}
identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }}
- name: Get complete tag
run: echo "TAG=DEV-$( date +%s )" >> $GITHUB_ENV
+19 -20
View File
@@ -14,22 +14,20 @@ jobs:
name: Update component data
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: "20"
- uses: actions/checkout@v3
cache: yarn
- name: set-env for yarn install to @navikt scope
shell: bash
run: echo "NPM_AUTH_TOKEN=${{ secrets.READER_TOKEN }}" >> $GITHUB_ENV
- name: add tokens to .env
run: |
echo "SANITY_WRITE_KEY=${{ secrets.SANITY_FEEDBACK_WRITE_KEY }}" >> aksel.nav.no/website/.env
- name: Restore cache
uses: actions/cache@v3
with:
path: "**/node_modules"
key: ${{ runner.os }}-prod-${{ github.sha }}
restore-keys: |
${{ runner.os }}-prod-
- name: Install dependencies
run: yarn
@@ -49,25 +47,24 @@ jobs:
contents: "read"
id-token: "write"
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: "20"
- uses: actions/checkout@v3
cache: yarn
- name: set-env for yarn install to @navikt scope
shell: bash
run: echo "NPM_AUTH_TOKEN=${{ secrets.READER_TOKEN }}" >> $GITHUB_ENV
- name: add tokens to .env
run: |
echo "SLACK_BOT_TOKEN=${{ secrets.SLACK_BOT_TOKEN }}" >> aksel.nav.no/website/.env
echo "SANITY_WRITE_KEY=${{ secrets.SANITY_FEEDBACK_WRITE_KEY }}" >> aksel.nav.no/website/.env
echo "SANITY_PREVIEW_TOKEN=${{ secrets.SANITY_PREVIEW_TOKEN }}" >> aksel.nav.no/website/.env
echo "SANITY_PRIVATE_NO_DRAFTS=${{ secrets.SANITY_PRIVATE_NO_DRAFTS }}" >> aksel.nav.no/website/.env
echo "USE_CDN_ASSETS=true" >> aksel.nav.no/website/.env
- name: Restore cache
uses: actions/cache@v3
with:
path: "**/node_modules"
key: ${{ runner.os }}-prod-${{ github.sha }}
restore-keys: |
${{ runner.os }}-prod-
- name: Install dependencies
run: yarn
@@ -81,11 +78,13 @@ jobs:
run: yarn workspace aksel.nav.no build:next
- name: Upload static files to NAV CDN
uses: navikt/frontend/actions/cdn-upload/v1@main
uses: nais/deploy/actions/cdn-upload/v2@master
with:
cdn-team-name: aksel
team: designsystem
source: ./aksel.nav.no/website/.next/static
destination: "/website/_next"
project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }}
identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }}
- name: Get complete tag
run: echo "TAG=PROD-$( date +%s )" >> $GITHUB_ENV
+5 -7
View File
@@ -11,17 +11,15 @@ jobs:
- uses: actions/checkout@v3
with:
fetch-depth: 0 # Required to retrieve git history
- uses: actions/setup-node@v3
with:
node-version: "20"
cache: yarn
- name: set-env for yarn install to @navikt scope
shell: bash
run: echo "NPM_AUTH_TOKEN=${{ secrets.READER_TOKEN }}" >> $GITHUB_ENV
- name: Restore cache
uses: actions/cache@v3
with:
path: "**/node_modules"
key: ${{ runner.os }}-build-${{ github.sha }}
restore-keys: |
${{ runner.os }}-build-
- name: Install dependencies
run: cd aksel.nav.no/website && yarn
+3 -8
View File
@@ -24,14 +24,9 @@ jobs:
with:
node-version: "20"
cache: yarn
- name: Restore cache
uses: actions/cache@v3
with:
path: "**/node_modules"
key: ${{ runner.os }}-test-${{ github.sha }}
restore-keys: |
${{ runner.os }}-test
- name: set-env for yarn install to @navikt scope
shell: bash
run: echo "NPM_AUTH_TOKEN=${{ secrets.READER_TOKEN }}" >> $GITHUB_ENV
- name: Install dependencies
run: yarn
+4 -8
View File
@@ -19,6 +19,10 @@ jobs:
- uses: actions/setup-node@v3
with:
node-version: "20"
cache: yarn
- name: set-env for yarn install to @navikt scope
shell: bash
run: echo "NPM_AUTH_TOKEN=${{ secrets.READER_TOKEN }}" >> $GITHUB_ENV
- name: add tokens to .env
run: |
@@ -26,14 +30,6 @@ jobs:
echo "SANITY_PREVIEW_TOKEN=${{ secrets.SANITY_PREVIEW_TOKEN }}" >> aksel.nav.no/website/.env
echo "SANITY_PRIVATE_NO_DRAFTS=${{ secrets.SANITY_PRIVATE_NO_DRAFTS }}" >> aksel.nav.no/website/.env
- name: Restore cache
uses: actions/cache@v3
with:
path: "**/node_modules"
key: ${{ runner.os }}-e2e-${{ github.sha }}
restore-keys: |
${{ runner.os }}-e2e-
- name: Install dependencies
run: yarn
+4 -2
View File
@@ -20,11 +20,13 @@ jobs:
- uses: "actions/checkout@v3"
- id: upload
uses: navikt/frontend/actions/cdn-upload/v1@main
uses: nais/deploy/actions/cdn-upload/v2@master
with:
cdn-team-name: aksel
team: aksel
source: ./fonts
destination: "" # uploads folder to team root
project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }}
identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }}
- run: echo uploaded file ${{ steps.upload.outputs.uploaded }}
shell: bash
+11 -12
View File
@@ -30,19 +30,14 @@ jobs:
with:
node-version: "20"
cache: yarn
- name: set-env for yarn install to @navikt scope
shell: bash
run: echo "NPM_AUTH_TOKEN=${{ secrets.READER_TOKEN }}" >> $GITHUB_ENV
- uses: denoland/setup-deno@v1
with:
deno-version: v1.x
- name: Restore cache
uses: actions/cache@v3
with:
path: "**/node_modules"
key: ${{ runner.os }}-prod-${{ github.sha }}
restore-keys: |
${{ runner.os }}-prod
- name: Install dependencies
run: yarn
@@ -85,11 +80,13 @@ jobs:
- name: Upload updated icon.zip to NAV CDN
if: steps.changesets.outputs.published == 'true'
uses: navikt/frontend/actions/cdn-upload/v1@main
uses: nais/deploy/actions/cdn-upload/v2@master
with:
cdn-team-name: aksel
team: aksel
source: ./@navikt/aksel-icons/aksel-icons.zip
destination: "/icons/zip"
project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }}
identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }}
- name: Get @navikt/ds-css version
run: |
@@ -99,8 +96,10 @@ jobs:
- name: Upload CSS to NAV CDN
if: steps.changesets.outputs.published == 'true'
uses: navikt/frontend/actions/cdn-upload/v1@main
uses: nais/deploy/actions/cdn-upload/v2@master
with:
cdn-team-name: aksel
team: aksel
source: ./@navikt/core/css/dist/version/${{env.version}}
destination: "@navikt/ds-css"
project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }}
identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }}
File renamed without changes.
+3 -9
View File
@@ -1,16 +1,12 @@
import { mergeConfig } from "vite";
import turbosnap from "vite-plugin-turbosnap";
export default {
staticDirs: ["./public"],
stories: () => [
"../@navikt/**/*.stories.@(js|jsx|ts|tsx|mdx)",
"./*.stories.mdx",
],
stories: () => ["../@navikt/**/*.stories.@(js|jsx|ts|tsx|mdx)", "./*.mdx"],
addons: [
"@storybook/addon-a11y",
"@xfinx/storybook-addon-html",
"@whitespace/storybook-addon-html",
"@storybook/addon-interactions",
{
name: "@storybook/addon-storysource",
@@ -35,9 +31,6 @@ export default {
name: "@storybook/react-vite",
options: {},
},
features: {
storyStoreV7: true,
},
docs: {
autodocs: "tag",
},
@@ -48,6 +41,7 @@ export default {
},
async viteFinal(config, { configType }) {
const { mergeConfig } = await import("vite");
return mergeConfig(config, {
plugins:
configType === "PRODUCTION"
+6
View File
@@ -2,6 +2,12 @@ enableImmutableInstalls: false
nodeLinker: node-modules
npmScopes:
navikt:
npmAlwaysAuth: true
npmAuthToken: "${NPM_AUTH_TOKEN:-}"
npmRegistryServer: "https://npm.pkg.github.com"
plugins:
- path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
spec: "@yarnpkg/plugin-workspace-tools"
+38
View File
@@ -1,5 +1,43 @@
# @navikt/aksel-icons
## 6.8.0
## 6.7.1
## 6.7.0
## 6.6.1
## 6.6.0
## 6.5.0
## 6.4.1
## 6.4.0
## 6.3.6
## 6.3.5
## 6.3.4
## 6.3.3
## 6.3.2
## 6.3.1
## 6.3.0
## 6.2.0
### Minor Changes
- Ikoner: Nytt ikon `archive` ([#2772](https://github.com/navikt/aksel/pull/2772))
- Ikoner: Nytt ikon `opensource` ([#2787](https://github.com/navikt/aksel/pull/2787))
## 6.1.1
## 6.1.0
@@ -6,5 +6,8 @@
"ui": "dist/index.html",
"capabilities": [],
"enableProposedApi": false,
"editorType": ["figma", "figjam"]
"editorType": ["figma", "figjam"],
"networkAccess": {
"allowedDomains": ["none"]
}
}
@@ -28,7 +28,7 @@
"postcss": "^8.4.31",
"postcss-url": "^10.1.3",
"typescript": "^5.1.6",
"vite": "^5.0.12",
"vite": "^5.1.7",
"vite-plugin-singlefile": "^1.0.0",
"vite-plugin-svgr": "^4.2.0"
}
+4 -4
View File
@@ -3,12 +3,12 @@ import React from "react";
import * as AkselIcons from "@navikt/aksel-icons";
import { StarFillIcon } from "@navikt/aksel-icons";
const meta = {
const meta: Meta<typeof StarFillIcon> = {
title: "aksel-icons/Icons",
} satisfies Meta<typeof StarFillIcon>;
};
export default meta;
type Story = StoryObj<typeof meta>;
type Story = StoryObj<typeof StarFillIcon>;
export const Icons: Story = {
render: () => {
+3
View File
@@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.25 4C3.25 3.58579 3.58579 3.25 4 3.25H20C20.4142 3.25 20.75 3.58579 20.75 4V8C20.75 8.41421 20.4142 8.75 20 8.75H19.75V19C19.75 19.9665 18.9665 20.75 18 20.75H6C5.0335 20.75 4.25 19.9665 4.25 19V8.75H4C3.58579 8.75 3.25 8.41421 3.25 8V4ZM5.75 8.75H18.25V19C18.25 19.1381 18.1381 19.25 18 19.25H6C5.86193 19.25 5.75 19.1381 5.75 19V8.75ZM4.75 4.75V7.25H19.25V4.75H4.75ZM14 13.25C14.4142 13.25 14.75 12.9142 14.75 12.5C14.75 12.0858 14.4142 11.75 14 11.75H10C9.58579 11.75 9.25 12.0858 9.25 12.5C9.25 12.9142 9.58579 13.25 10 13.25H14Z" fill="#23262A"/>
</svg>

After

Width:  |  Height:  |  Size: 707 B

+10
View File
@@ -0,0 +1,10 @@
name: Archive
category: Interface
sub_category: Communication
keywords:
- arkiv
- box
- boks
variant: Stroke
updated_at: 22.02.2024
created_at: 22.02.2024
@@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 3.25C3.58579 3.25 3.25 3.58579 3.25 4V7.5C3.25 7.91421 3.58579 8.25 4 8.25H20C20.4142 8.25 20.75 7.91421 20.75 7.5V4C20.75 3.58579 20.4142 3.25 20 3.25H4ZM19.5 9.25C19.6381 9.25 19.75 9.36193 19.75 9.5V19C19.75 19.9665 18.9665 20.75 18 20.75H6C5.0335 20.75 4.25 19.9665 4.25 19V9.5C4.25 9.36193 4.36193 9.25 4.5 9.25H19.5ZM14.75 12.5C14.75 12.9142 14.4142 13.25 14 13.25H10C9.58579 13.25 9.25 12.9142 9.25 12.5C9.25 12.0858 9.58579 11.75 10 11.75H14C14.4142 11.75 14.75 12.0858 14.75 12.5Z" fill="#23262A"/>
</svg>

After

Width:  |  Height:  |  Size: 663 B

+10
View File
@@ -0,0 +1,10 @@
name: ArchiveFill
category: Interface
sub_category: Communication
keywords:
- arkiv
- box
- boks
variant: Fill
updated_at: 22.02.2024
created_at: 22.02.2024
@@ -13,5 +13,5 @@ keywords:
- reload
- oppdater
variant: Stroke
updated_at: 04.12.2023
updated_at: 14.02.2024
created_at: 07.03.2023
+1 -1
View File
@@ -9,5 +9,5 @@ keywords:
- nivå
- innrykk
variant: Stroke
updated_at: 04.12.2023
updated_at: 16.01.2024
created_at: 04.12.2023
+1 -1
View File
@@ -13,5 +13,5 @@ keywords:
- forward
- videresend
variant: Stroke
updated_at: 04.12.2023
updated_at: 23.02.2024
created_at: 07.03.2023
@@ -13,5 +13,5 @@ keywords:
- oppfrisking
- oppdatering
variant: Stroke
updated_at: 04.12.2023
updated_at: 29.02.2024
created_at: 07.03.2023
+1 -1
View File
@@ -9,5 +9,5 @@ keywords:
- sortering
- sorting
variant: Stroke
updated_at: 04.12.2023
updated_at: 22.02.2024
created_at: 07.03.2023
+1 -1
View File
@@ -15,5 +15,5 @@ keywords:
- Sammenføye
- Kildekontroll
variant: Stroke
updated_at: 04.12.2023
updated_at: 18.01.2024
created_at: 07.03.2023
@@ -5,5 +5,5 @@ keywords:
- ned
- down
variant: Stroke
updated_at: 04.12.2023
updated_at: 25.01.2024
created_at: 07.03.2023
@@ -5,5 +5,5 @@ keywords:
- left
- venstre
variant: Stroke
updated_at: 04.12.2023
updated_at: 11.03.2024
created_at: 07.03.2023
@@ -5,5 +5,5 @@ keywords:
- opp
- up
variant: Stroke
updated_at: 04.12.2023
updated_at: 25.01.2024
created_at: 07.03.2023
+1 -1
View File
@@ -8,5 +8,5 @@ keywords:
- Utvide/skjule
- vise/skjule
variant: Stroke
updated_at: 04.12.2023
updated_at: 04.03.2024
created_at: 07.03.2023
+1 -1
View File
@@ -15,5 +15,5 @@ keywords:
- markup-språk
- kildekode
variant: Stroke
updated_at: 04.12.2023
updated_at: 01.03.2024
created_at: 07.03.2023
+1 -1
View File
@@ -7,5 +7,5 @@ keywords:
- downloading
- last ned
variant: Stroke
updated_at: 04.12.2023
updated_at: 08.03.2024
created_at: 07.03.2023
+1 -1
View File
@@ -5,5 +5,5 @@ keywords:
- trapp
- rulletrapp
variant: Stroke
updated_at: 04.12.2023
updated_at: 12.03.2024
created_at: 07.03.2023
+1 -1
View File
@@ -9,5 +9,5 @@ keywords:
- open
- åpne
variant: Stroke
updated_at: 04.12.2023
updated_at: 24.01.2024
created_at: 07.03.2023
+1 -1
View File
@@ -13,5 +13,5 @@ keywords:
- fremdrift
- nedtelling
variant: Stroke
updated_at: 04.12.2023
updated_at: 21.02.2024
created_at: 07.03.2023
@@ -13,5 +13,5 @@ keywords:
- fremdrift
- nedtelling
variant: Stroke
updated_at: 04.12.2023
updated_at: 22.01.2024
created_at: 07.03.2023
@@ -13,5 +13,5 @@ keywords:
- fremdrift
- nedtelling
variant: Stroke
updated_at: 04.12.2023
updated_at: 16.01.2024
created_at: 07.03.2023
+1 -1
View File
@@ -8,5 +8,5 @@ keywords:
- replace
- new version
variant: Stroke
updated_at: 04.12.2023
updated_at: 18.01.2024
created_at: 07.03.2023
+3
View File
@@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.06458 4.26481C7.76736 2.95822 9.85369 2.25 12 2.25C14.1463 2.25 16.2326 2.95821 17.9354 4.2648C19.6382 5.57139 20.8623 7.40334 21.4178 9.47651C21.9733 11.5497 21.8292 13.7482 21.0078 15.7312C20.1865 17.7141 18.7338 19.3706 16.875 20.4437C16.7027 20.5432 16.498 20.5702 16.3059 20.5187C16.1138 20.4672 15.9499 20.3415 15.8505 20.1692L12.7005 14.7133C12.601 14.541 12.5741 14.3363 12.6256 14.1442C12.677 13.952 12.8027 13.7882 12.975 13.6887C13.3468 13.4741 13.6373 13.1428 13.8016 12.7462C13.9658 12.3496 13.9947 11.9099 13.8836 11.4953C13.7725 11.0807 13.5276 10.7143 13.1871 10.453C12.8465 10.1916 12.4293 10.05 12 10.05C11.5707 10.05 11.1535 10.1916 10.8129 10.453C10.4724 10.7143 10.2275 11.0807 10.1164 11.4953C10.0053 11.9099 10.0342 12.3496 10.1984 12.7462C10.3627 13.1428 10.6533 13.4741 11.025 13.6887C11.1973 13.7882 11.323 13.952 11.3744 14.1442C11.4259 14.3363 11.399 14.541 11.2995 14.7133L8.14952 20.1692C8.05007 20.3415 7.88625 20.4672 7.69412 20.5187C7.50198 20.5702 7.29727 20.5432 7.125 20.4437C5.26625 19.3706 3.81354 17.7141 2.99218 15.7312C2.17082 13.7482 2.02672 11.5497 2.58223 9.47652C3.13773 7.40334 4.3618 5.5714 6.06458 4.26481ZM12 3.75C10.1839 3.75 8.41854 4.34926 6.97772 5.45484C5.53691 6.56041 4.50116 8.11052 4.03112 9.86474C3.56107 11.619 3.683 13.4793 4.378 15.1571C4.97686 16.6029 5.97237 17.8436 7.24256 18.7401L9.66674 14.5413C9.29868 14.2034 9.00613 13.7874 8.81262 13.3203C8.52199 12.6186 8.471 11.8407 8.66756 11.1071C8.86412 10.3735 9.29725 9.72526 9.89978 9.26293C10.5023 8.8006 11.2405 8.55 12 8.55C12.7595 8.55 13.4977 8.8006 14.1002 9.26293C14.7028 9.72526 15.1359 10.3735 15.3324 11.1071C15.529 11.8407 15.478 12.6186 15.1874 13.3203C14.9939 13.7874 14.7013 14.2034 14.3333 14.5413L16.7574 18.7401C18.0276 17.8436 19.0231 16.6029 19.622 15.1571C20.317 13.4793 20.4389 11.619 19.9689 9.86474C19.4988 8.11052 18.4631 6.56041 17.0223 5.45483C15.5815 4.34926 13.8161 3.75 12 3.75Z" fill="#23262A"/>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

+19
View File
@@ -0,0 +1,19 @@
name: OpenSource
category: Development
sub_category: Development
keywords:
- location
- tracking
- identification
- signaling
- broadcasting
- detection
- lokalisering
- sporing
- identifikasjon
- signalisering
- kringkasting
- deteksjon
variant: Stroke
updated_at: 08.03.2024
created_at: 07.03.2023
@@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.06458 4.26481C7.76736 2.95822 9.85369 2.25 12 2.25C14.1463 2.25 16.2326 2.95821 17.9354 4.2648C19.6382 5.57139 20.8623 7.40334 21.4178 9.47651C21.9733 11.5497 21.8292 13.7482 21.0078 15.7312C20.1865 17.7141 18.7338 19.3706 16.875 20.4437C16.7027 20.5432 16.498 20.5702 16.3059 20.5187C16.1138 20.4672 15.9499 20.3415 15.8505 20.1692L12.7005 14.7133C12.601 14.541 12.5741 14.3363 12.6256 14.1442C12.677 13.952 12.8027 13.7882 12.975 13.6887C13.3468 13.4741 13.6373 13.1428 13.8016 12.7462C13.9658 12.3496 13.9947 11.9099 13.8836 11.4953C13.7725 11.0807 13.5276 10.7143 13.1871 10.453C12.8465 10.1916 12.4293 10.05 12 10.05C11.5707 10.05 11.1535 10.1916 10.8129 10.453C10.4724 10.7143 10.2275 11.0807 10.1164 11.4953C10.0053 11.9099 10.0342 12.3496 10.1984 12.7462C10.3627 13.1428 10.6533 13.4741 11.025 13.6887C11.1973 13.7882 11.323 13.952 11.3744 14.1442C11.4259 14.3363 11.399 14.541 11.2995 14.7133L8.14952 20.1692C8.05007 20.3415 7.88625 20.4672 7.69412 20.5187C7.50198 20.5702 7.29727 20.5432 7.125 20.4437C5.26625 19.3706 3.81354 17.7141 2.99218 15.7312C2.17082 13.7482 2.02672 11.5497 2.58223 9.47652C3.13773 7.40334 4.3618 5.5714 6.06458 4.26481Z" fill="#23262A"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -0,0 +1,19 @@
name: OpenSourceFill
category: Development
sub_category: Development
keywords:
- location
- tracking
- identification
- signaling
- broadcasting
- detection
- lokalisering
- sporing
- identifikasjon
- signalisering
- kringkasting
- deteksjon
variant: Fill
updated_at: 08.03.2024
created_at: 07.03.2023
+1 -1
View File
@@ -9,5 +9,5 @@ keywords:
- hidden
- show/hide
variant: Stroke
updated_at: 04.12.2023
updated_at: 18.01.2024
created_at: 07.03.2023
+1 -1
View File
@@ -1,3 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.4445 6.61612C12.679 6.3817 12.9969 6.25 13.3284 6.25H17.5C17.6381 6.25 17.75 6.36193 17.75 6.5V10.6716C17.75 11.0031 17.6183 11.321 17.3839 11.5555L9.17678 19.7626C9.07915 19.8602 8.92086 19.8602 8.82322 19.7626L4.23744 15.1768C4.13981 15.0791 4.13981 14.9209 4.23744 14.8232L12.4445 6.61612ZM13.3284 4.75C12.5991 4.75 11.8996 5.03973 11.3839 5.55546L3.17678 13.7626C2.49336 14.446 2.49336 15.554 3.17678 16.2374L7.76256 20.8232C8.44598 21.5066 9.55402 21.5066 10.2374 20.8232L18.4445 12.6161C18.9603 12.1004 19.25 11.4009 19.25 10.6716V6.5C19.25 5.5335 18.4665 4.75 17.5 4.75H13.3284ZM14.5 11C15.3284 11 16 10.3284 16 9.5C16 8.67157 15.3284 8 14.5 8C13.6716 8 13 8.67157 13 9.5C13 10.3284 13.6716 11 14.5 11Z" fill="#23262A"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.4403 5.61612C13.6748 5.3817 13.9927 5.25 14.3242 5.25H18.4958C18.6339 5.25 18.7458 5.36193 18.7458 5.5V9.67157C18.7458 10.0031 18.6141 10.321 18.3797 10.5555L10.1726 18.7626C10.0749 18.8602 9.91664 18.8602 9.81901 18.7626L5.23323 14.1768C5.1356 14.0791 5.1356 13.9209 5.23323 13.8232L13.4403 5.61612ZM14.3242 3.75C13.5949 3.75 12.8954 4.03973 12.3797 4.55546L4.17257 12.7626C3.48915 13.446 3.48915 14.554 4.17257 15.2374L8.75835 19.8232C9.44177 20.5066 10.5498 20.5066 11.2332 19.8232L19.4403 11.6161C19.9561 11.1004 20.2458 10.4009 20.2458 9.67157V5.5C20.2458 4.5335 19.4623 3.75 18.4958 3.75H14.3242ZM15.4958 10C16.3242 10 16.9958 9.32843 16.9958 8.5C16.9958 7.67157 16.3242 7 15.4958 7C14.6674 7 13.9958 7.67157 13.9958 8.5C13.9958 9.32843 14.6674 10 15.4958 10Z" fill="#23262A"/>
</svg>

Before

Width:  |  Height:  |  Size: 884 B

After

Width:  |  Height:  |  Size: 940 B

+1 -1
View File
@@ -12,5 +12,5 @@ keywords:
- organisering
- identifisering
variant: Stroke
updated_at: 12.12.2023
updated_at: 13.03.2024
created_at: 07.03.2023
+1 -1
View File
@@ -1,3 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.3284 4.75C12.5991 4.75 11.8996 5.03973 11.3839 5.55546L3.17678 13.7626C2.49336 14.446 2.49336 15.554 3.17678 16.2374L7.76256 20.8232C8.44598 21.5066 9.55402 21.5066 10.2374 20.8232L18.4445 12.6161C18.9603 12.1004 19.25 11.4009 19.25 10.6716V6.5C19.25 5.5335 18.4665 4.75 17.5 4.75H13.3284ZM14.5 11C15.3284 11 16 10.3284 16 9.5C16 8.67157 15.3284 8 14.5 8C13.6716 8 13 8.67157 13 9.5C13 10.3284 13.6716 11 14.5 11Z" fill="#23262A"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.3242 3.75C13.5949 3.75 12.8954 4.03973 12.3797 4.55546L4.17257 12.7626C3.48915 13.446 3.48915 14.554 4.17257 15.2374L8.75835 19.8232C9.44177 20.5066 10.5498 20.5066 11.2332 19.8232L19.4403 11.6161C19.9561 11.1004 20.2458 10.4009 20.2458 9.67157V5.5C20.2458 4.5335 19.4623 3.75 18.4958 3.75H14.3242ZM15.4958 10C16.3242 10 16.9958 9.32843 16.9958 8.5C16.9958 7.67157 16.3242 7 15.4958 7C14.6674 7 13.9958 7.67157 13.9958 8.5C13.9958 9.32843 14.6674 10 15.4958 10Z" fill="#23262A"/>
</svg>

Before

Width:  |  Height:  |  Size: 588 B

After

Width:  |  Height:  |  Size: 636 B

+1 -1
View File
@@ -12,5 +12,5 @@ keywords:
- organisering
- identifisering
variant: Fill
updated_at: 12.12.2023
updated_at: 13.03.2024
created_at: 07.03.2023
+1 -1
View File
@@ -6,5 +6,5 @@ keywords:
- vektløfting
- tungt
variant: Stroke
updated_at: 04.12.2023
updated_at: 11.03.2024
created_at: 07.03.2023
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@navikt/aksel-icons",
"version": "6.1.1",
"version": "6.8.0",
"author": "Aksel | NAV",
"homepage": "https://aksel.nav.no/ikoner",
"repository": {
+32
View File
@@ -1,5 +1,37 @@
# @navikt/aksel-stylelint
## 6.8.0
## 6.7.1
## 6.7.0
## 6.6.1
## 6.6.0
## 6.5.0
## 6.4.1
## 6.4.0
## 6.3.6
## 6.3.5
## 6.3.4
## 6.3.3
## 6.3.2
## 6.3.1
## 6.3.0
## 6.2.0
## 6.1.1
## 6.1.0
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@navikt/aksel-stylelint",
"version": "6.1.1",
"version": "6.8.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": "^6.1.1",
"@navikt/ds-tokens": "^6.1.1",
"@navikt/ds-css": "^6.8.0",
"@navikt/ds-tokens": "^6.8.0",
"concurrently": "7.2.1",
"postcss-selector-parser": "^6.0.13",
"postcss-value-parser": "^4.2.0",
+114
View File
@@ -1,5 +1,119 @@
# @navikt/aksel
## 6.8.0
### Patch Changes
- Updated dependencies [[`bd482c5d3`](https://github.com/navikt/aksel/commit/bd482c5d3ea9c7f84114d1199e73594c7b593154), [`7becf3e4c`](https://github.com/navikt/aksel/commit/7becf3e4cf47b119e4b456a066b53e6077669bcd)]:
- @navikt/ds-css@6.8.0
## 6.7.1
### Patch Changes
- Updated dependencies [[`0c06fa12d`](https://github.com/navikt/aksel/commit/0c06fa12d0de4f3015be045d4e65e149ebd2c141)]:
- @navikt/ds-css@6.7.1
## 6.7.0
### Patch Changes
- Updated dependencies [[`db9c85815`](https://github.com/navikt/aksel/commit/db9c85815392528e59ef5082397ec14b1aa36e7a), [`277525f39`](https://github.com/navikt/aksel/commit/277525f39ff94c7ded1accf6031957efa3bdeb8b), [`b21015bf5`](https://github.com/navikt/aksel/commit/b21015bf54b4e19673b2849756c608ae323a9f70)]:
- @navikt/ds-css@6.7.0
## 6.6.1
### Patch Changes
- Updated dependencies []:
- @navikt/ds-css@6.6.1
## 6.6.0
### Patch Changes
- Aksel CLI: Fjernet deprecated komponenter fra css oversikt. ([#2860](https://github.com/navikt/aksel/pull/2860))
- Updated dependencies [[`3a73a029f`](https://github.com/navikt/aksel/commit/3a73a029f6272f76e10cb6baefbaa2040feaef6b)]:
- @navikt/ds-css@6.6.0
## 6.5.0
### Patch Changes
- Updated dependencies []:
- @navikt/ds-css@6.5.0
## 6.4.1
### Patch Changes
- Updated dependencies [[`5250b47ca`](https://github.com/navikt/aksel/commit/5250b47ca410f9cd57c5350bacc77b1b2ec9b2c0)]:
- @navikt/ds-css@6.4.1
## 6.4.0
### Patch Changes
- Updated dependencies []:
- @navikt/ds-css@6.4.0
## 6.3.6
### Patch Changes
- Updated dependencies []:
- @navikt/ds-css@6.3.6
## 6.3.5
### Patch Changes
- Updated dependencies []:
- @navikt/ds-css@6.3.5
## 6.3.4
### Patch Changes
- Updated dependencies [[`a2af9bcc3`](https://github.com/navikt/aksel/commit/a2af9bcc37eb12cc7cf3a1596d57dc0421898657)]:
- @navikt/ds-css@6.3.4
## 6.3.3
### Patch Changes
- Updated dependencies []:
- @navikt/ds-css@6.3.3
## 6.3.2
### Patch Changes
- Updated dependencies []:
- @navikt/ds-css@6.3.2
## 6.3.1
### Patch Changes
- Updated dependencies []:
- @navikt/ds-css@6.3.1
## 6.3.0
### Patch Changes
- Updated dependencies [[`25e0d15d6`](https://github.com/navikt/aksel/commit/25e0d15d67cebd36ee58aa3b7d9f1c7104d92de6)]:
- @navikt/ds-css@6.3.0
## 6.2.0
### Patch Changes
- Updated dependencies []:
- @navikt/ds-css@6.2.0
## 6.1.1
### Patch Changes
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@navikt/aksel",
"version": "6.1.1",
"version": "6.8.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": "6.1.1",
"@navikt/ds-css": "6.8.0",
"axios": "1.6.0",
"chalk": "4.1.0",
"clipboardy": "^2.3.0",
+70
View File
@@ -1,5 +1,75 @@
# @navikt/ds-css
## 6.8.0
### Minor Changes
- :sparkles: Ny komponent: FormProgress ([#2855](https://github.com/navikt/aksel/pull/2855))
### Patch Changes
- HGrid: forenklet CSS. ([#2917](https://github.com/navikt/aksel/pull/2917))
## 6.7.1
### Patch Changes
- Progressbar: Tweak API, examples, stories and css ([#2892](https://github.com/navikt/aksel/pull/2892))
## 6.7.0
### Minor Changes
- :sparkles: Ny komponent: ProgressBar ([#2845](https://github.com/navikt/aksel/pull/2845))
### Patch Changes
- Checkbox, Radio: Erstatter `:focus-visible` med `:focus` for bedre UX brukt sammen med ErrorSummary. ([#2893](https://github.com/navikt/aksel/pull/2893))
- :lipstick: tweak CSS for timeline pins. ([#2889](https://github.com/navikt/aksel/pull/2889))
## 6.6.1
## 6.6.0
### Minor Changes
- :sparkles: Ny komponent FormSummary ([#2802](https://github.com/navikt/aksel/pull/2802))
## 6.5.0
## 6.4.1
### Patch Changes
- FileUpload: Item-illustrasjon er nå radius-full ([#2834](https://github.com/navikt/aksel/pull/2834))
## 6.4.0
## 6.3.6
## 6.3.5
## 6.3.4
### Patch Changes
- ReadMore: Padding-right på button er bumpet noen px ([#2806](https://github.com/navikt/aksel/pull/2806))
## 6.3.3
## 6.3.2
## 6.3.1
## 6.3.0
### Minor Changes
- FileUpload: Ny komponent `FileUpload` for å håndtere opplasting av filer, Dropzone og fil-visning ([#2504](https://github.com/navikt/aksel/pull/2504))
## 6.2.0
## 6.1.1
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
/* https://web.dev/prefers-reduced-motion/ */
@media (prefers-reduced-motion: reduce) {
*:not(.navds-loader *):not(.navds-loader),
*:not(.navds-loader *):not(.navds-loader):not(.navds-progress-bar *):not(.navds-progress-bar),
::before,
::after {
animation-delay: -1ms !important;
+22 -5
View File
@@ -97,10 +97,6 @@ const StyleMappings = {
main: formCss,
dependencies: [typoCss],
},
{
component: "ContentContainer",
main: "content-container.css",
},
{
component: "CopyButton",
main: "copybutton.css",
@@ -120,7 +116,11 @@ const StyleMappings = {
dependencies: [typoCss],
},
{ component: "Fieldset", main: formCss, dependencies: [typoCss] },
{ component: "Grid", main: "grid.css", dependencies: [typoCss] },
{
component: "FileUpload",
main: formCss,
dependencies: [typoCss, "button.css", "loader.css", "link.css"],
},
{
component: "GuidePanel",
main: "guide-panel.css",
@@ -159,6 +159,7 @@ const StyleMappings = {
},
{ component: "Panel", main: "panel.css" },
{ component: "Popover", main: "popover.css" },
{ component: "ProgressBar", main: "progress-bar.css" },
{ component: "Provider", main: "" },
{ component: "Radio", main: formCss, dependencies: [typoCss] },
{ component: "RadioGroup", main: formCss, dependencies: [typoCss] },
@@ -173,6 +174,22 @@ const StyleMappings = {
{ component: "Tag", main: "tag.css", dependencies: [typoCss] },
{ component: "TextField", main: formCss, dependencies: [typoCss] },
{ component: "Textarea", main: formCss, dependencies: [typoCss] },
{
component: "FormSummary",
main: formCss,
dependencies: [typoCss, "link.css"],
},
{
component: "FormProgress",
main: formCss,
dependencies: [
typoCss,
"progress-bar.css",
"button.css",
primitivesCss,
"stepper.css",
],
},
{
component: "ToggleGroup",
main: "toggle-group.css",
+230
View File
@@ -0,0 +1,230 @@
/**
* Makes it easier for user to use FileItem in semantic lists
*/
.navds-file-upload :is(ul, li) {
list-style: none;
margin: 0;
padding: 0;
}
/**
* FileUpload.Dropzone
*/
.navds-dropzone__area {
--__ac-dropzone-background: var(--a-surface-subtle);
--__ac-dropzone-text-color: var(--a-text-default);
--__ac-dropzone-padding: var(--a-spacing-6);
--__ac-dropzone-icon-padding: var(--a-spacing-2);
--__ac-dropzone-animation-length-long: 0.6s;
--__ac-dropzone-animation-length-short: 250ms;
--__ac-dropzone-animation-ease-out: cubic-bezier(0.3, 1, 0.3, 1);
--__ac-dropzone-animation-over-under: cubic-bezier(0.3, 1.4, 0.3, 1);
position: relative;
width: 100%;
display: flex;
align-items: center;
flex-direction: column;
gap: var(--a-spacing-4);
text-align: center;
padding: var(--__ac-dropzone-padding);
outline: 1px dashed var(--a-border-subtle);
outline-offset: -1px;
border-radius: var(--a-border-radius-large);
background-color: var(--__ac-dropzone-background);
color: var(--__ac-dropzone-text-color);
transition: background-color var(--__ac-dropzone-animation-length-short) var(--__ac-dropzone-animation-ease-out);
cursor: pointer;
}
.navds-dropzone__area:hover {
box-shadow: inset 0 2px 4px 1px rgb(11 11 11/ 0.05);
outline-color: var(--a-border-default);
}
.navds-dropzone--disabled > .navds-dropzone__area:hover {
outline-color: var(--a-border-subtle);
box-shadow: initial;
cursor: default;
}
.navds-dropzone--dragging > .navds-dropzone__area {
--__ac-dropzone-background: var(--a-surface-action-subtle-hover);
}
.navds-dropzone--dragging > .navds-dropzone__area::after {
outline: 1px dashed var(--a-border-subtle);
outline-offset: -1px;
color: var(--a-text-action-selected);
background-color: var(--a-surface-hover);
content: "";
inset: 0;
position: absolute;
-webkit-backdrop-filter: blur(8px);
backdrop-filter: blur(8px);
box-shadow: inset 0 2px 7px 3px rgb(11 11 11/ 0.1);
border-radius: var(--a-border-radius-large);
animation: akselDropzoneDragoverAnimation var(--__ac-dropzone-animation-length-short) var(--__ac-dropzone-animation-ease-out);
}
@keyframes akselDropzoneDragoverAnimation {
0% {
-webkit-backdrop-filter: blur(0);
backdrop-filter: blur(0);
background-color: var(--a-surface-transparent);
}
70% {
-webkit-backdrop-filter: blur(8px);
backdrop-filter: blur(8px);
}
100% {
background-color: var(--a-surface-hover);
}
}
.navds-dropzone__area-icon {
display: grid;
padding: var(--__ac-dropzone-icon-padding);
visibility: hidden;
}
.navds-dropzone--error:where(:not(.navds-dropzone--dragging)) > .navds-dropzone__area {
outline-color: var(--a-surface-danger);
outline-width: 2px;
}
.navds-dropzone__area:hover > .navds-dropzone__area-button {
color: var(--ac-button-secondary-hover-text, var(--__ac-button-secondary-hover-text, var(--a-text-action-on-action-subtle)));
background-color: var(
--ac-button-secondary-hover-bg,
var(--__ac-button-secondary-hover-bg, var(--a-surface-action-subtle-hover))
);
}
.navds-dropzone__area:active .navds-dropzone__area-button {
color: var(--ac-button-secondary-active-text, var(--__ac-button-secondary-active-text, var(--a-text-on-action)));
background-color: var(--ac-button-secondary-active-bg, var(--__ac-button-secondary-active-bg, var(--a-surface-action-active)));
box-shadow: none;
}
.navds-dropzone__area-release {
top: var(--__ac-dropzone-padding);
display: grid;
position: absolute;
z-index: 1;
pointer-events: none;
transition:
top var(--__ac-dropzone-animation-length-long) var(--__ac-dropzone-animation-over-under),
transform var(--__ac-dropzone-animation-length-long) var(--__ac-dropzone-animation-over-under);
}
.navds-dropzone__area-release__icon {
display: grid;
padding: var(--__ac-dropzone-icon-padding);
border-radius: var(--a-border-radius-full);
background-color: var(--a-surface-neutral-subtle);
transition:
background-color 300ms var(--__ac-dropzone-animation-ease-out),
font-size 300ms var(--__ac-dropzone-animation-ease-out);
font-size: 1.5rem;
}
.navds-dropzone--dragging .navds-dropzone__area-release > .navds-dropzone__area-release__icon {
background-color: transparent;
font-size: 2rem;
}
.navds-dropzone__area-release__text {
visibility: hidden;
}
.navds-dropzone--dragging .navds-dropzone__area-release > .navds-dropzone__area-release__text {
transition: visibility var(--__ac-dropzone-animation-length-long) var(--__ac-dropzone-animation-over-under);
visibility: visible;
}
.navds-dropzone--dragging .navds-dropzone__area-release {
color: var(--a-text-action-selected);
top: 50%;
transform: translateY(-50%);
}
.navds-dropzone__area-disabled {
color: var(--a-text-subtle);
display: flex;
align-items: center;
flex-direction: column;
gap: var(--a-spacing-2);
}
/**
* FileUpload.Item
*/
.navds-file-item__inner {
outline: 1px solid var(--a-border-subtle);
outline-offset: -1px;
transition: outline-color 250ms cubic-bezier(0, 0.3, 0.15, 1);
border-radius: var(--a-border-radius-large);
padding: var(--a-spacing-3);
display: flex;
gap: var(--a-spacing-3);
align-items: flex-start;
}
.navds-file-item--error > .navds-file-item__inner {
outline: 2px solid var(--a-surface-danger);
}
.navds-file-item__icon {
background-color: var(--a-surface-neutral-subtle);
color: var(--a-icon-default);
border-radius: var(--a-border-radius-full);
min-height: 3rem;
min-width: 3rem;
display: grid;
place-content: center;
transition: background-color 250ms cubic-bezier(0, 0.3, 0.15, 1);
}
.navds-file-item__icon--loading {
background-color: transparent;
}
.navds-file-item__file-info {
word-break: break-word;
}
.navds-file-item__button {
margin-left: auto;
}
.navds-file-item__error {
color: var(--a-text-danger);
display: grid;
transition-property: grid-template-rows, padding-top;
transition-duration: 250ms;
transition-timing-function: cubic-bezier(0, 0.3, 0.15, 1);
overflow: hidden;
grid-template-rows: 0fr;
}
.navds-file-item--error .navds-file-item__error {
grid-template-rows: 1fr;
padding-top: var(--a-spacing-1);
}
.navds-file-item__error-content > svg {
flex-shrink: 0;
height: 1rem;
margin-top: 0.1rem;
}
.navds-file-item__error-content {
min-height: 0;
display: flex;
gap: var(--a-spacing-1);
}
+52
View File
@@ -0,0 +1,52 @@
.navds-form-progress__bar {
margin-bottom: var(--a-spacing-2);
}
.navds-form-progress__button[data-state="closed"] .navds-form-progress__btn-txt-hide,
.navds-form-progress__button[data-state="open"] .navds-form-progress__btn-txt-show {
display: none;
}
.navds-form-progress__button:hover svg {
transform: translateY(1px);
}
.navds-form-progress__button[data-state="open"] svg {
transform: rotate(-180deg);
}
.navds-form-progress__button[data-state="open"]:hover svg {
transform: translateY(-1px) rotate(-180deg);
}
.navds-form-progress__collapsible {
display: grid;
grid-template-rows: 0fr;
overflow: hidden;
transition: grid-template-rows 0.3s cubic-bezier(0.3, 0, 0.15, 1);
}
.navds-form-progress__collapsible[hidden] {
display: grid;
}
.navds-form-progress__collapsible[data-state="open"] {
grid-template-rows: 1fr;
}
.navds-form-progress__collapsible-content {
min-height: 0;
transition: visibility 0.3s;
visibility: hidden;
}
.navds-form-progress__collapsible[data-state="open"] .navds-form-progress__collapsible-content {
visibility: visible;
}
.navds-form-progress__stepper {
border: 2px solid var(--a-border-subtle);
border-radius: var(--a-border-radius-large);
padding: var(--a-spacing-2) var(--a-spacing-4) 0;
margin-top: var(--a-spacing-1);
}
+77
View File
@@ -0,0 +1,77 @@
.navds-form-summary {
overflow: hidden;
border: 1px solid var(--a-border-subtle);
border-radius: var(--a-border-radius-large);
}
.navds-form-summary__header {
background-color: var(--a-surface-subtle);
padding: var(--a-spacing-4) var(--a-spacing-6);
display: flex;
justify-content: space-between;
gap: 0 var(--a-spacing-2);
}
@media (max-width: 479px) {
.navds-form-summary__header {
padding: var(--a-spacing-3) var(--a-spacing-4);
flex-direction: column;
}
}
.navds-form-summary__edit {
flex-shrink: 0;
margin-top: var(--a-spacing-1);
align-self: flex-start;
}
.navds-form-summary > .navds-form-summary__answers {
border-top: 1px solid var(--a-border-subtle);
}
.navds-form-summary__answers {
padding: var(--a-spacing-5) var(--a-spacing-6) var(--a-spacing-6);
margin: 0;
}
@media (max-width: 479px) {
.navds-form-summary__answers {
padding: var(--a-spacing-4);
}
}
.navds-form-summary__answer:not(:last-child) {
margin-bottom: var(--a-spacing-4);
padding-bottom: var(--a-spacing-4);
border-bottom: 1px solid var(--a-border-divider);
}
.navds-form-summary__answer:has(.navds-form-summary__answer) {
padding-bottom: var(--a-spacing-6);
}
.navds-form-summary__answer:has(.navds-form-summary__answer):last-child {
padding-bottom: 0;
}
@media (max-width: 479px) {
.navds-form-summary__answer:not(:last-child) {
margin-bottom: var(--a-spacing-3);
padding-bottom: var(--a-spacing-3);
}
.navds-form-summary__answer:has(.navds-form-summary__answer) {
padding-bottom: var(--a-spacing-5);
}
}
.navds-form-summary__value:first-of-type {
margin-top: var(--a-spacing-1);
}
.navds-form-summary__value :where(.navds-form-summary__answers) {
margin-top: var(--a-spacing-2);
padding: var(--a-spacing-4);
background: var(--a-surface-selected);
border-radius: var(--a-border-radius-large);
}
+4 -2
View File
@@ -18,13 +18,15 @@
}
.navds-form-field .navds-error-message,
.navds-fieldset .navds-error-message {
.navds-fieldset .navds-error-message,
.navds-file-item .navds-error-message {
display: flex;
gap: var(--a-spacing-2);
}
.navds-form-field .navds-error-message::before,
.navds-fieldset .navds-error-message::before {
.navds-fieldset .navds-error-message::before,
.navds-file-item .navds-error-message::before {
content: "•";
}
+3
View File
@@ -2,6 +2,7 @@
Order matters; rearrange with care
*/
@import "fieldset.css";
@import "file-upload.css";
@import "form.css";
@import "error-summary.css";
@import "confirmation-panel.css";
@@ -12,3 +13,5 @@
@import "textarea.css";
@import "search.css";
@import "combobox.css";
@import "form-summary.css";
@import "form-progress.css";
+23 -101
View File
@@ -70,8 +70,8 @@
height: calc(1.25rem - 0.25rem);
}
.navds-checkbox__input:focus-visible + .navds-checkbox__label::before,
.navds-radio__input:focus-visible + .navds-radio__label::before {
.navds-checkbox__input:focus + .navds-checkbox__label::before,
.navds-radio__input:focus + .navds-radio__label::before {
outline: 2px solid transparent;
outline-offset: 2px;
box-shadow:
@@ -80,33 +80,13 @@
0 0 0 4px var(--a-border-focus);
}
@supports not selector(:focus-visible) {
.navds-checkbox__input:focus + .navds-checkbox__label::before,
.navds-radio__input:focus + .navds-radio__label::before {
outline: 2px solid transparent;
outline-offset: 2px;
box-shadow:
0 0 0 2px var(--ac-radio-checkbox-border, var(--a-border-default)),
0 0 0 4px var(--a-border-focus);
}
}
.navds-checkbox__input:hover:focus-visible + .navds-checkbox__label::before,
.navds-radio__input:hover:focus-visible + .navds-radio__label::before {
.navds-checkbox__input:hover:focus + .navds-checkbox__label::before,
.navds-radio__input:hover:focus + .navds-radio__label::before {
box-shadow:
0 0 0 2px var(--ac-radio-checkbox-action, var(--a-surface-action-hover)),
0 0 0 4px var(--a-border-focus);
}
@supports not selector(:focus-visible) {
.navds-checkbox__input:hover:focus + .navds-checkbox__label::before,
.navds-radio__input:hover:focus + .navds-radio__label::before {
box-shadow:
0 0 0 2px var(--ac-radio-checkbox-action, var(--a-surface-action-hover)),
0 0 0 4px var(--a-border-focus);
}
}
.navds-checkbox__input:indeterminate + .navds-checkbox__label::after {
content: "";
position: absolute;
@@ -163,24 +143,14 @@
background-position: 0.25rem center;
}
.navds-checkbox__input:indeterminate:focus-visible + .navds-checkbox__label::before,
.navds-checkbox__input:checked:focus-visible + .navds-checkbox__label::before {
.navds-checkbox__input:indeterminate:focus + .navds-checkbox__label::before,
.navds-checkbox__input:checked:focus + .navds-checkbox__label::before {
box-shadow:
0 0 0 1px var(--ac-radio-checkbox-action, var(--a-surface-action-selected)),
0 0 0 2px var(--ac-radio-checkbox-bg, var(--a-surface-default)),
0 0 0 4px var(--a-border-focus);
}
@supports not selector(:focus-visible) {
.navds-checkbox__input:indeterminate:focus + .navds-checkbox__label::before,
.navds-checkbox__input:checked:focus + .navds-checkbox__label::before {
box-shadow:
0 0 0 1px var(--ac-radio-checkbox-action, var(--a-surface-action-selected)),
0 0 0 2px var(--ac-radio-checkbox-bg, var(--a-surface-default)),
0 0 0 4px var(--a-border-focus);
}
}
.navds-radio__input:checked + .navds-radio__label::before {
box-shadow:
0 0 0 2px var(--ac-radio-checkbox-action, var(--a-surface-action-selected)),
@@ -188,40 +158,23 @@
background-color: var(--ac-radio-checkbox-action, var(--a-surface-action-selected));
}
.navds-radio__input:checked:focus-visible + .navds-radio__label::before {
.navds-radio__input:checked:focus + .navds-radio__label::before {
box-shadow:
0 0 0 2px var(--ac-radio-checkbox-action, var(--a-surface-action-selected)),
inset 0 0 0 2px var(--ac-radio-checkbox-bg, var(--a-surface-default)),
0 0 0 4px var(--a-border-focus);
}
@supports not selector(:focus-visible) {
.navds-radio__input:checked:focus + .navds-radio__label::before {
box-shadow:
0 0 0 2px var(--ac-radio-checkbox-action, var(--a-surface-action)),
inset 0 0 0 2px var(--ac-radio-checkbox-bg, var(--a-surface-default)),
0 0 0 4px var(--a-border-focus);
}
}
.navds-checkbox__input:hover:not(:disabled) + .navds-checkbox__label,
.navds-radio__input:hover:not(:disabled) + .navds-radio__label {
color: var(--ac-radio-checkbox-action, var(--a-surface-action-hover));
}
.navds-checkbox__input:hover:not(:disabled):not(:checked):not(:indeterminate):not(:focus-visible)
+ .navds-checkbox__label::before,
.navds-radio__input:hover:not(:disabled):not(:checked):not(:focus-visible) + .navds-radio__label::before {
.navds-checkbox__input:hover:not(:disabled):not(:checked):not(:indeterminate):not(:focus) + .navds-checkbox__label::before,
.navds-radio__input:hover:not(:disabled):not(:checked):not(:focus) + .navds-radio__label::before {
box-shadow: 0 0 0 2px var(--ac-radio-checkbox-action, var(--a-surface-action-hover));
}
@supports not selector(:focus-visible) {
.navds-checkbox__input:hover:not(:disabled):not(:checked):not(:indeterminate):not(:focus) + .navds-checkbox__label::before,
.navds-radio__input:hover:not(:disabled):not(:checked):not(:focus) + .navds-radio__label::before {
box-shadow: 0 0 0 2px var(--ac-radio-checkbox-action, var(--a-surface-action-hover));
}
}
.navds-checkbox__input:hover:not(:disabled):not(:checked):not(:indeterminate) + .navds-checkbox__label::before,
.navds-radio__input:hover:not(:disabled):not(:checked) + .navds-radio__label::before {
background-color: var(--ac-radio-checkbox-action-hover-bg, var(--a-surface-action-subtle));
@@ -235,63 +188,32 @@
}
.navds-checkbox--error
> .navds-checkbox__input:focus-visible:not(:hover):not(:disabled):not(:checked):not(:indeterminate)
> .navds-checkbox__input:focus:not(:hover):not(:disabled):not(:checked):not(:indeterminate)
+ .navds-checkbox__label::before,
.navds-radio--error > .navds-radio__input:focus-visible:not(:hover):not(:disabled):not(:checked) + .navds-radio__label::before {
.navds-radio--error > .navds-radio__input:focus:not(:hover):not(:disabled):not(:checked) + .navds-radio__label::before {
box-shadow:
0 0 0 2px var(--ac-radio-checkbox-error-border, var(--a-border-danger)),
0 0 0 4px var(--a-border-focus);
}
@supports not selector(:focus-visible) {
.navds-checkbox--error
> .navds-checkbox__input:focus:not(:hover):not(:disabled):not(:checked):not(:indeterminate)
+ .navds-checkbox__label::before,
.navds-radio--error > .navds-radio__input:focus:not(:hover):not(:disabled):not(:checked) + .navds-radio__label::before {
box-shadow:
0 0 0 2px var(--ac-radio-checkbox-error-border, var(--a-border-danger)),
0 0 0 4px var(--a-border-focus);
}
}
.navds-checkbox--error
> .navds-checkbox__input:hover:not(:disabled):not(:checked):not(:indeterminate):not(:focus-visible)
> .navds-checkbox__input:hover:not(:disabled):not(:checked):not(:indeterminate):not(:focus)
+ .navds-checkbox__label::before,
.navds-radio--error > .navds-radio__input:hover:not(:disabled):not(:checked):not(:focus-visible) + .navds-radio__label::before {
.navds-radio--error > .navds-radio__input:hover:not(:disabled):not(:checked):not(:focus) + .navds-radio__label::before {
background-color: var(--ac-radio-checkbox-error-hover-bg, var(--a-surface-danger-subtle));
box-shadow: 0 0 0 2px var(--ac-radio-checkbox-error-border, var(--a-border-danger));
}
.navds-checkbox--error
> .navds-checkbox__input:focus-visible:hover:not(:disabled):not(:checked):not(:indeterminate)
> .navds-checkbox__input:focus:hover:not(:disabled):not(:checked):not(:indeterminate)
+ .navds-checkbox__label::before,
.navds-radio--error > .navds-radio__input:focus-visible:hover:not(:disabled):not(:checked) + .navds-radio__label::before {
.navds-radio--error > .navds-radio__input:focus:hover:not(:disabled):not(:checked) + .navds-radio__label::before {
background-color: var(--ac-radio-checkbox-error-hover-bg, var(--a-surface-danger-subtle));
box-shadow:
0 0 0 2px var(--ac-radio-checkbox-error-border, var(--a-border-danger)),
0 0 0 4px var(--a-border-focus);
}
@supports not selector(:focus-visible) {
.navds-checkbox--error
> .navds-checkbox__input:hover:not(:disabled):not(:checked):not(:indeterminate):not(:focus)
+ .navds-checkbox__label::before,
.navds-radio--error > .navds-radio__input:hover:not(:disabled):not(:checked):not(:focus) + .navds-radio__label::before {
background-color: var(--ac-radio-checkbox-error-hover-bg, var(--a-surface-danger-subtle));
box-shadow: 0 0 0 2px var(--ac-radio-checkbox-error-border, var(--a-border-danger));
}
.navds-checkbox--error
> .navds-checkbox__input:focus:hover:not(:disabled):not(:checked):not(:indeterminate)
+ .navds-checkbox__label::before,
.navds-radio--error > .navds-radio__input:focus:hover:not(:disabled):not(:checked) + .navds-radio__label::before {
background-color: var(--ac-radio-checkbox-error-hover-bg, var(--a-surface-danger-subtle));
box-shadow:
0 0 0 2px var(--ac-radio-checkbox-error-border, var(--a-border-danger)),
0 0 0 4px var(--a-border-focus);
}
}
.navds-checkbox--disabled,
.navds-radio--disabled {
opacity: 0.3;
@@ -323,16 +245,16 @@
> .navds-checkbox__input:not(:disabled):not(:checked):not(:indeterminate)
+ .navds-checkbox__label::before,
.navds-checkbox--readonly
> .navds-checkbox__input:hover:not(:checked):not(:indeterminate):not(:focus-visible)
> .navds-checkbox__input:hover:not(:checked):not(:indeterminate):not(:focus)
+ .navds-checkbox__label::before,
.navds-radio--readonly > .navds-radio__input:not(:disabled):not(:checked) + .navds-radio__label::before,
.navds-radio--readonly > .navds-radio__input:hover:not(:checked):not(:focus-visible) + .navds-radio__label::before {
.navds-radio--readonly > .navds-radio__input:hover:not(:checked):not(:focus) + .navds-radio__label::before {
background-color: var(--__ac-radio-checkbox-readonly-bg);
box-shadow: 0 0 0 2px var(--__ac-radio-checkbox-readonly-border);
}
.navds-checkbox--readonly > .navds-checkbox__input:focus-visible + .navds-checkbox__label::before,
.navds-radio--readonly > .navds-radio__input:focus-visible + .navds-radio__label::before {
.navds-checkbox--readonly > .navds-checkbox__input:focus + .navds-checkbox__label::before,
.navds-radio--readonly > .navds-radio__input:focus + .navds-radio__label::before {
--__ac-radio-checkbox-readonly-border: var(--a-border-subtle), var(--a-shadow-focus);
}
@@ -362,8 +284,8 @@
}
@media (forced-colors: active) {
.navds-checkbox__input:focus-visible + .navds-checkbox__label::before,
.navds-radio__input:focus-visible + .navds-radio__label::before {
.navds-checkbox__input:focus + .navds-checkbox__label::before,
.navds-radio__input:focus + .navds-radio__label::before {
outline-color: highlight;
}
@@ -395,7 +317,7 @@
background-color: var(--__ac-radio-checkbox-high-contrast-text);
}
.navds-radio__input:checked:focus-visible + .navds-radio__label::before {
.navds-radio__input:checked:focus + .navds-radio__label::before {
border: 1px solid var(--__ac-radio-checkbox-high-contrast-bg);
outline: 2px solid highlight;
outline-offset: 2px;
@@ -406,7 +328,7 @@
color: highlight;
}
.navds-checkbox__input:focus-visible + .navds-checkbox__label::before {
.navds-checkbox__input:focus + .navds-checkbox__label::before {
outline: 2px solid var(--__ac-radio-checkbox-high-contrast-highlight);
}
+1
View File
@@ -26,6 +26,7 @@
@import "panel.css";
@import "link-panel.css";
@import "read-more.css";
@import "progress-bar.css";
@import "skeleton.css";
@import "stepper.css";
@import "table.css";
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@navikt/ds-css",
"version": "6.1.1",
"version": "6.8.0",
"description": "CSS for NAV Designsystem",
"author": "Aksel | NAV designsystem team",
"keywords": [
@@ -27,7 +27,7 @@
"css:get-version": "node config/get-version.js"
},
"devDependencies": {
"@navikt/ds-tokens": "^6.1.1",
"@navikt/ds-tokens": "^6.8.0",
"cssnano": "6.0.0",
"fast-glob": "3.2.11",
"lodash": "4.17.21",
+20 -41
View File
@@ -1,17 +1,17 @@
.navds-hgrid {
--__ac-hgrid-columns-xs: initial;
--__ac-hgrid-columns-sm: initial;
--__ac-hgrid-columns-md: initial;
--__ac-hgrid-columns-lg: initial;
--__ac-hgrid-columns-xl: initial;
--__ac-hgrid-columns-2xl: initial;
--__ac-hgrid-columns-sm: var(--__ac-hgrid-columns-xs);
--__ac-hgrid-columns-md: var(--__ac-hgrid-columns-sm);
--__ac-hgrid-columns-lg: var(--__ac-hgrid-columns-md);
--__ac-hgrid-columns-xl: var(--__ac-hgrid-columns-lg);
--__ac-hgrid-columns-2xl: var(--__ac-hgrid-columns-xl);
--__ac-hgrid-columns: var(--__ac-hgrid-columns-xs);
--__ac-hgrid-gap-xs: initial;
--__ac-hgrid-gap-sm: initial;
--__ac-hgrid-gap-md: initial;
--__ac-hgrid-gap-lg: initial;
--__ac-hgrid-gap-xl: initial;
--__ac-hgrid-gap-2xl: initial;
--__ac-hgrid-gap-sm: var(--__ac-hgrid-gap-xs);
--__ac-hgrid-gap-md: var(--__ac-hgrid-gap-sm);
--__ac-hgrid-gap-lg: var(--__ac-hgrid-gap-md);
--__ac-hgrid-gap-xl: var(--__ac-hgrid-gap-lg);
--__ac-hgrid-gap-2xl: var(--__ac-hgrid-gap-xl);
--__ac-hgrid-gap: var(--__ac-hgrid-gap-xs);
--__ac-hgrid-align: initial;
@@ -23,56 +23,35 @@
@media (min-width: 480px) {
.navds-hgrid {
--__ac-hgrid-columns: var(--__ac-hgrid-columns-sm, var(--__ac-hgrid-columns-xs));
--__ac-hgrid-gap: var(--__ac-hgrid-gap-sm, var(--__ac-hgrid-gap-xs));
--__ac-hgrid-columns: var(--__ac-hgrid-columns-sm);
--__ac-hgrid-gap: var(--__ac-hgrid-gap-sm);
}
}
@media (min-width: 768px) {
.navds-hgrid {
--__ac-hgrid-columns: var(--__ac-hgrid-columns-md, var(--__ac-hgrid-columns-sm, var(--__ac-hgrid-columns-xs)));
--__ac-hgrid-gap: var(--__ac-hgrid-gap-md, var(--__ac-hgrid-gap-sm, var(--__ac-hgrid-gap-xs)));
--__ac-hgrid-columns: var(--__ac-hgrid-columns-md);
--__ac-hgrid-gap: var(--__ac-hgrid-gap-md);
}
}
@media (min-width: 1024px) {
.navds-hgrid {
--__ac-hgrid-columns: var(
--__ac-hgrid-columns-lg,
var(--__ac-hgrid-columns-md, var(--__ac-hgrid-columns-sm, var(--__ac-hgrid-columns-xs)))
);
--__ac-hgrid-gap: var(--__ac-hgrid-gap-lg, var(--__ac-hgrid-gap-md, var(--__ac-hgrid-gap-sm, var(--__ac-hgrid-gap-xs))));
--__ac-hgrid-columns: var(--__ac-hgrid-columns-lg);
--__ac-hgrid-gap: var(--__ac-hgrid-gap-lg);
}
}
@media (min-width: 1280px) {
.navds-hgrid {
--__ac-hgrid-columns: var(
--__ac-hgrid-columns-xl,
var(--__ac-hgrid-columns-lg, var(--__ac-hgrid-columns-md, var(--__ac-hgrid-columns-sm, var(--__ac-hgrid-columns-xs))))
);
--__ac-hgrid-gap: var(
--__ac-hgrid-gap-xl,
var(--__ac-hgrid-gap-lg, var(--__ac-hgrid-gap-md, var(--__ac-hgrid-gap-sm, var(--__ac-hgrid-gap-xs))))
);
--__ac-hgrid-columns: var(--__ac-hgrid-columns-xl);
--__ac-hgrid-gap: var(--__ac-hgrid-gap-xl);
}
}
@media (min-width: 1440px) {
.navds-hgrid {
--__ac-hgrid-columns: var(
--__ac-hgrid-columns-2xl,
var(
--__ac-hgrid-columns-xl,
var(--__ac-hgrid-columns-lg, var(--__ac-hgrid-columns-md, var(--__ac-hgrid-columns-sm, var(--__ac-hgrid-columns-xs))))
)
);
--__ac-hgrid-gap: var(
--__ac-hgrid-gap-2xl,
var(
--__ac-hgrid-gap-xl,
var(--__ac-hgrid-gap-lg, var(--__ac-hgrid-gap-md, var(--__ac-hgrid-gap-sm, var(--__ac-hgrid-gap-xs))))
)
);
--__ac-hgrid-columns: var(--__ac-hgrid-columns-2xl);
--__ac-hgrid-gap: var(--__ac-hgrid-gap-2xl);
}
}
+108
View File
@@ -0,0 +1,108 @@
.navds-progress-bar {
background: var(--a-surface-neutral-subtle);
position: relative;
border-radius: var(--a-border-radius-full);
overflow: hidden;
box-shadow:
inset 0 1px 3px 0 rgba(0 0 0 / 0.15),
inset 0 0 1px 0 rgba(0 0 0 / 0.2);
}
.navds-progress-bar--small {
height: 12px;
min-width: 12px;
}
.navds-progress-bar--medium {
height: 16px;
min-width: 16px;
}
.navds-progress-bar--large {
height: 24px;
min-width: 24px;
}
.navds-progress-bar__foreground {
--__ac-progress-bar-translate: initial;
transform: translateX(var(--__ac-progress-bar-translate));
background: var(--ac-progress-bar-fg, var(--a-surface-alt-3));
transform-origin: left;
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 100%;
border-radius: inherit;
transition: transform 0.2s ease;
}
.navds-progress-bar__foreground--indeterminate {
--__ac-progress-bar-simulated: initial;
animation-name: navds-progress-bar-indeterminate-grow, navds-progress-bar-indeterminate;
animation-timing-function: ease-in-out, ease-in-out;
animation-duration: var(--__ac-progress-bar-simulated), 2500ms;
animation-fill-mode: forwards, none;
animation-iteration-count: 1, infinite;
animation-delay: 0s, var(--__ac-progress-bar-simulated);
}
/* navds-progress-bar-indeterminate wave animation */
@keyframes navds-progress-bar-indeterminate {
0% {
left: -50%;
width: 50%;
transform: translateX(0%);
}
50% {
animation-direction: reverse;
left: 100%;
transform: translateX(0%);
width: 50%;
}
100% {
left: -50%;
transform: translateX(0%);
width: 50%;
}
}
@keyframes navds-progress-bar-indeterminate-grow {
0% {
transform: translateX(-100%);
}
20% {
transform: translateX(-80%);
}
30% {
transform: translateX(-40%);
}
50% {
transform: translateX(-20%);
}
75% {
transform: translateX(-10%);
}
100% {
transform: translateX(-10%);
}
}
@media (forced-colors: active) {
.navds-progress-bar__foreground {
background: Highlight;
}
.navds-progress-bar {
outline: 1px solid transparent;
}
}
+5 -4
View File
@@ -8,12 +8,12 @@
gap: var(--a-spacing-05);
color: var(--ac-read-more-text, var(--a-text-action));
border-radius: var(--a-border-radius-small);
padding: var(--a-spacing-1) var(--a-spacing-1) var(--a-spacing-1) var(--a-spacing-05);
padding: var(--a-spacing-1) var(--a-spacing-2) var(--a-spacing-1) var(--a-spacing-05);
text-align: start;
}
.navds-read-more--small .navds-read-more__button {
padding: var(--a-spacing-05) var(--a-spacing-1) var(--a-spacing-05) var(--a-spacing-05);
padding: var(--a-spacing-05) var(--a-spacing-1-alt) var(--a-spacing-05) var(--a-spacing-05);
}
@media (forced-colors: active) {
@@ -79,7 +79,8 @@
}
.navds-read-more__button:hover > .navds-read-more__expand-icon {
transform: translateY(1px);
position: relative;
top: 1px;
}
.navds-read-more--open > .navds-read-more__button > .navds-read-more__expand-icon {
@@ -87,5 +88,5 @@
}
.navds-read-more--open > .navds-read-more__button:hover > .navds-read-more__expand-icon {
transform: translateY(-1px) rotate(-180deg);
top: -1px;
}
+9 -1
View File
@@ -7,7 +7,7 @@
.navds-tabs__tablist {
display: flex;
max-width: 100%;
width: auto;
width: 100%;
scroll-behavior: smooth;
-ms-overflow-style: none; /* for Internet Explorer, Edge */
scrollbar-width: none; /* for Firefox */
@@ -83,6 +83,10 @@
gap: var(--a-spacing-1);
}
.navds-tabs__tab-inner > * {
display: inline-flex;
}
.navds-tabs__tab-inner svg {
flex-shrink: 0;
}
@@ -117,6 +121,10 @@
font-size: 1.5rem;
}
.navds-tabs__tab--fill {
flex: 1 1 100%;
}
.navds-tabs__tabpanel:focus-visible {
outline: 2px solid transparent;
box-shadow: inset 0 0 0 2px var(--a-border-focus);
+1 -1
View File
@@ -245,7 +245,7 @@
.navds-timeline__pin-wrapper::before {
content: "";
top: var(--navdsc-timeline-pin-size);
height: calc(88% - var(--navdsc-timeline-pin-size));
height: calc(100% - var(--navdsc-timeline-pin-size) * 2);
width: 1px;
margin: 0 auto;
background: var(--a-surface-inverted);
+4
View File
@@ -4,6 +4,10 @@
gap: var(--a-spacing-2);
}
.navds-toggle-group__wrapper--fill {
justify-items: initial;
}
.navds-toggle-group {
border-radius: var(--a-border-radius-medium);
background-color: var(--ac-toggle-group-bg, var(--a-surface-transparent));
+3
View File
@@ -217,6 +217,9 @@
"--ac-popover-bg": "--a-surface-default",
"--ac-popover-border": "--a-border-default"
},
"progress-bar": {
"--ac-progress-bar-fg": "--a-surface-alt-3"
},
"readmore": {
"--ac-read-more-text": "--a-text-action",
"--ac-read-more-hover-bg": "--a-surface-hover",
+196
View File
@@ -1,5 +1,201 @@
# @navikt/ds-react
## 6.8.0
### Minor Changes
- :sparkles: Ny komponent: FormProgress ([#2855](https://github.com/navikt/aksel/pull/2855))
### Patch Changes
- Stepper.Step: Set aria-current to "step" instead of true ([#2920](https://github.com/navikt/aksel/pull/2920))
- Updated dependencies []:
- @navikt/ds-tokens@6.8.0
- @navikt/aksel-icons@6.8.0
## 6.7.1
### Patch Changes
- Progressbar: Tweak API, examples, stories and css ([#2892](https://github.com/navikt/aksel/pull/2892))
- Combobox: Remove 'Ingen søketreff' when custom options allowed ([#2895](https://github.com/navikt/aksel/pull/2895))
- Datepicker, MonthPicker: Rekkefølgen på årstall i Select er reversert slik at siste år er øverst. Dette er endret for å være bedre tilpasset ekspertsystemer der de mest relevante årene ble vist lengst unna musepeker ved klikk. ([#2882](https://github.com/navikt/aksel/pull/2882))
- Updated dependencies []:
- @navikt/ds-tokens@6.7.1
- @navikt/aksel-icons@6.7.1
## 6.7.0
### Minor Changes
- :sparkles: Ny komponent: ProgressBar ([#2845](https://github.com/navikt/aksel/pull/2845))
### Patch Changes
- Updated dependencies []:
- @navikt/ds-tokens@6.7.0
- @navikt/aksel-icons@6.7.0
## 6.6.1
### Patch Changes
- Spacer: Er nå `span` (tidligere `div`). ([#2874](https://github.com/navikt/aksel/pull/2874))
- Updated dependencies []:
- @navikt/ds-tokens@6.6.1
- @navikt/aksel-icons@6.6.1
## 6.6.0
### Minor Changes
- :sparkles: Ny komponent FormSummary ([#2802](https://github.com/navikt/aksel/pull/2802))
### Patch Changes
- Combobox: Prevents "Enter" while Combobox is focused from submitting form. ([#2861](https://github.com/navikt/aksel/pull/2861))
- Updated dependencies []:
- @navikt/ds-tokens@6.6.0
- @navikt/aksel-icons@6.6.0
## 6.5.0
### Minor Changes
- Tabs: Ny prop `lazy` som rendrer innhold i TabPanel selv når panel er skjult (har fortsatt display:none) ([#2621](https://github.com/navikt/aksel/pull/2621))
- ToggleGroup: Erstattet bruk av dependency `@radix-ui/react-toggle-group` med egen implementasjon. ([#2620](https://github.com/navikt/aksel/pull/2620))
- Tabs: La til ny prop `fill` som lar Tabs.Tab-elementer strekke seg over tilgjengelig bredde. ([#2621](https://github.com/navikt/aksel/pull/2621))
- Tabs: Erstattet bruk av dependency `@radix-ui/react-tabs` med egen implementasjon. ([#2621](https://github.com/navikt/aksel/pull/2621))
### Patch Changes
- DatePicker/MonthPicker: Valgte datoer får nå `aria-pressed` for å bedre indikere valg for skjermleser. ([#2838](https://github.com/navikt/aksel/pull/2838))
- DatePicker/MonthPicker: `required`-prop stoppet ikke de-select av allerede valgt dato. ([#2838](https://github.com/navikt/aksel/pull/2838))
- ToggleGroup: La til ny prop `fill` som strekker ToggleGroup til å ta opp all tilgjengelig bredde. ([#2620](https://github.com/navikt/aksel/pull/2620))
- Updated dependencies []:
- @navikt/ds-tokens@6.5.0
- @navikt/aksel-icons@6.5.0
## 6.4.1
### Patch Changes
- Updated dependencies []:
- @navikt/ds-tokens@6.4.1
- @navikt/aksel-icons@6.4.1
## 6.4.0
### Minor Changes
- FileUpload.Item: :boom: Endret API og støtte for å sette ID på knappen ([#2824](https://github.com/navikt/aksel/pull/2824))
### Patch Changes
- Updated dependencies []:
- @navikt/ds-tokens@6.4.0
- @navikt/aksel-icons@6.4.0
## 6.3.6
### Patch Changes
- DatePicker: Fjernet role gridcell fra dato-knapper. ([#2826](https://github.com/navikt/aksel/pull/2826))
- Updated dependencies []:
- @navikt/ds-tokens@6.3.6
- @navikt/aksel-icons@6.3.6
## 6.3.5
### Patch Changes
- Modal: Fjern tomt element ([#2819](https://github.com/navikt/aksel/pull/2819))
- Updated dependencies []:
- @navikt/ds-tokens@6.3.5
- @navikt/aksel-icons@6.3.5
## 6.3.4
### Patch Changes
- Switch: Fikset edgecase der checked Switch var visuelt unchecked ([#2810](https://github.com/navikt/aksel/pull/2810))
- FileUpload.Dropzone: id prop settes på button ([#2817](https://github.com/navikt/aksel/pull/2817))
- Updated dependencies []:
- @navikt/ds-tokens@6.3.4
- @navikt/aksel-icons@6.3.4
## 6.3.3
### Patch Changes
- FileUpload.Dropzone: Fiks feil med duplisert id ([#2805](https://github.com/navikt/aksel/pull/2805))
- useDatePicker: `isInvalid`-key i onValidate var hadde flipper boolean i noen tilfeller ([#2809](https://github.com/navikt/aksel/pull/2809))
- Updated dependencies []:
- @navikt/ds-tokens@6.3.3
- @navikt/aksel-icons@6.3.3
## 6.3.2
### Patch Changes
- FileUpload: Fiks feil ved import av json ([#2803](https://github.com/navikt/aksel/pull/2803))
- Updated dependencies []:
- @navikt/ds-tokens@6.3.2
- @navikt/aksel-icons@6.3.2
## 6.3.1
### Patch Changes
- FileUpload: Disabled dropzone stopper opplasting ([#2798](https://github.com/navikt/aksel/pull/2798))
- Updated dependencies []:
- @navikt/ds-tokens@6.3.1
- @navikt/aksel-icons@6.3.1
## 6.3.0
### Minor Changes
- Allow Combobox options as objects to support separate display text and value ([#2716](https://github.com/navikt/aksel/pull/2716))
- FileUpload: Ny komponent `FileUpload` for å håndtere opplasting av filer, Dropzone og fil-visning ([#2504](https://github.com/navikt/aksel/pull/2504))
### Patch Changes
- Updated dependencies []:
- @navikt/ds-tokens@6.3.0
- @navikt/aksel-icons@6.3.0
## 6.2.0
### Patch Changes
- Select: Fjern 'multiple' fra SelectProps ([#2782](https://github.com/navikt/aksel/pull/2782))
- Updated dependencies [[`331b4c4c0`](https://github.com/navikt/aksel/commit/331b4c4c00c323ad7a212bcd45889d2b80c09dee), [`dc5ea3b84`](https://github.com/navikt/aksel/commit/dc5ea3b8420a02690bc88dbbbb97eefe4ee7564d)]:
- @navikt/aksel-icons@6.2.0
- @navikt/ds-tokens@6.2.0
## 6.1.1
### Patch Changes
+48 -8
View File
@@ -1,6 +1,6 @@
{
"name": "@navikt/ds-react",
"version": "6.1.1",
"version": "6.8.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",
@@ -24,7 +24,8 @@
"/cjs",
"/esm",
"/src",
"!**/*.tsbuildinfo"
"!**/*.tsbuildinfo",
"!**/*.stories.*"
],
"main": "./cjs/index.js",
"module": "./esm/index.js",
@@ -309,6 +310,16 @@
"default": "./cjs/popover/index.js"
}
},
"./ProgressBar": {
"import": {
"types": "./esm/progress-bar/index.d.ts",
"default": "./esm/progress-bar/index.js"
},
"require": {
"types": "./cjs/progress-bar/index.d.ts",
"default": "./cjs/progress-bar/index.js"
}
},
"./Provider": {
"import": {
"types": "./esm/provider/index.d.ts",
@@ -539,6 +550,36 @@
"default": "./cjs/form/textfield/index.js"
}
},
"./FileUpload": {
"import": {
"types": "./esm/form/file-upload/index.d.ts",
"default": "./esm/form/file-upload/index.js"
},
"require": {
"types": "./cjs/form/file-upload/index.d.ts",
"default": "./cjs/form/file-upload/index.js"
}
},
"./FormSummary": {
"import": {
"types": "./esm/form/form-summary/index.d.ts",
"default": "./esm/form/form-summary/index.js"
},
"require": {
"types": "./cjs/form/form-summary/index.d.ts",
"default": "./cjs/form/form-summary/index.js"
}
},
"./FormProgress": {
"import": {
"types": "./esm/form/form-progress/index.d.ts",
"default": "./esm/form/form-progress/index.js"
},
"require": {
"types": "./cjs/form/form-progress/index.d.ts",
"default": "./cjs/form/form-progress/index.js"
}
},
"./package.json": "./package.json"
},
"scripts": {
@@ -552,18 +593,17 @@
},
"dependencies": {
"@floating-ui/react": "0.25.4",
"@navikt/aksel-icons": "^6.1.1",
"@navikt/ds-tokens": "^6.1.1",
"@radix-ui/react-tabs": "1.0.0",
"@radix-ui/react-toggle-group": "1.0.0",
"@floating-ui/react-dom": "^2.0.9",
"@navikt/aksel-icons": "^6.8.0",
"@navikt/ds-tokens": "^6.8.0",
"clsx": "^2.1.0",
"date-fns": "^3.0.0",
"react-day-picker": "8.10.0"
},
"devDependencies": {
"@testing-library/dom": "8.13.0",
"@testing-library/dom": "9.3.4",
"@testing-library/jest-dom": "^5.16.0",
"@testing-library/react": "^13.3.0",
"@testing-library/react": "^15.0.7",
"@testing-library/user-event": "^14.2.0",
"@types/faker": "5.5.8",
"concurrently": "7.2.1",
@@ -31,11 +31,11 @@ interface AccordionComponent
export interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {
/**
* @default 'default'
* @default "default"
*/
variant?: "default" | "neutral";
/**
* @default 'small'
* @default "small"
*/
headingSize?: "large" | "medium" | "small" | "xsmall";
/**
@@ -43,12 +43,12 @@ export interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {
*/
size?: "large" | "medium" | "small";
/**
* Whether to indent content or not
* Whether to indent content or not.
* @default true
*/
indent?: boolean;
/**
* Instances of Accordion.Item
* Instances of `Accordion.Item`.
*/
children: React.ReactNode;
}
@@ -162,9 +162,7 @@ export const Variants: Story = {
export const ControlledState: Story = {
render: () => {
// eslint-disable-next-line react-hooks/rules-of-hooks
const [open, setOpen] = useState(false);
// eslint-disable-next-line react-hooks/rules-of-hooks
const [open2, setOpen2] = useState(false);
return (
+12 -10
View File
@@ -12,37 +12,39 @@ import { BodyLong } from "../typography";
export interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
/**
* Alert content
* Alert content.
*/
children: React.ReactNode;
/**
* Changes colors and icon usage when changed
* Changes colors and icon usage when changed.
*/
variant: "error" | "warning" | "info" | "success";
/**
* Changes padding and font-sizes
* @default medium
* Changes padding and font-sizes.
* @default "medium"
*/
size?: "medium" | "small";
/**
* Removes border-radius
* Removes `border-radius`.
* @default false
*/
fullWidth?: boolean;
/**
* Removes background from Alert
* Removes background from Alert.
* @default false
*/
inline?: boolean;
/**
* Removes close-button(X) when false
* Requires onClose to be set
* Removes close-button(X) when false.
*
* **Requires onClose to be set**.
* @default true
*/
closeButton?: boolean;
/**
* Callback for alert wanting to close
* requires closeButton to be true
* Callback for alert wanting to close.
*
* **Requires closeButton to be true**.
*/
onClose?: () => void;
}
+9 -8
View File
@@ -11,11 +11,11 @@ import { OverridableComponent } from "../util/types";
export interface ButtonProps
extends React.ButtonHTMLAttributes<HTMLButtonElement> {
/**
* Button content
* Button content.
*/
children?: React.ReactNode;
/**
* Changes design and interaction-visuals
* Changes design and interaction-visuals.
* @default "primary"
*/
variant?:
@@ -27,26 +27,27 @@ export interface ButtonProps
| "tertiary-neutral"
| "danger";
/**
* Changes padding, height and font-size
* @default medium
* Changes padding, height, and font-size.
* @default "medium"
*/
size?: "medium" | "small" | "xsmall";
/**
* **Avoid using if possible for accessibility purposes**.
*
* Prevent the user from interacting with the button: it cannot be pressed or focused.
* @note Avoid using if possible for accessibility purposes
*/
disabled?: boolean;
/**
* Replaces button content with a Loader component, keeps width
* Replaces button content with a Loader component, keeps width.
* @default false
*/
loading?: boolean;
/**
* Button Icon
* Button Icon.
*/
icon?: React.ReactNode;
/**
* Icon position in Button
* Icon position in Button.
* @default "left"
*/
iconPosition?: "left" | "right";
@@ -183,3 +183,10 @@ export const Chromatic: Story = {
chromatic: { disable: false },
},
};
export const ChromaticForcedColors: Story = {
render: Chromatic.render,
parameters: {
chromatic: { disable: false, forcedColors: "active" },
},
};
+8 -7
View File
@@ -3,20 +3,21 @@ import React, { HTMLAttributes, forwardRef } from "react";
import { BodyLong } from "../typography";
import Bubble from "./Bubble";
export const VARIANTS = ["subtle", "info", "neutral"] as const;
export const POSITIONS = ["left", "right"] as const;
export const SIZES = ["medium", "small"] as const;
export interface ChatProps extends HTMLAttributes<HTMLDivElement> {
/**
* Children of type <Chat.Bubble />
* Children of type `<Chat.Bubble />`.
*/
children: React.ReactNode;
/**
* Chat-message name
* Chat-message name.
*/
name?: string;
/**
* Timestamp for sent message
* Timestamp for sent message.
*/
timestamp?: string;
/**
@@ -28,19 +29,19 @@ export interface ChatProps extends HTMLAttributes<HTMLDivElement> {
* Avoid using the same background as the surface behind Chat.
* @default "neutral"
*/
variant?: "subtle" | "info" | "neutral";
variant?: (typeof VARIANTS)[number];
/**
* Positions avatar and bubbles
* Positions avatar and bubbles.
* @default "left"
*/
position?: (typeof POSITIONS)[number];
/**
* Hoizontal position of toptext
* Horizontal position of toptext.
* @default Same as position
*/
toptextPosition?: (typeof POSITIONS)[number];
/**
* Affects padding and font size in bubbles
* Affects padding and font size in bubbles.
* @default "medium"
*/
size?: (typeof SIZES)[number];
+79 -113
View File
@@ -1,25 +1,11 @@
import { Meta, StoryObj } from "@storybook/react";
import React from "react";
import { VStack } from "../layout/stack";
import Chat, { POSITIONS, SIZES } from "./Chat";
import Chat, { POSITIONS, SIZES, VARIANTS } from "./Chat";
export default {
title: "ds-react/Chat",
component: Chat,
argTypes: {
position: {
control: { type: "radio" },
options: POSITIONS,
},
toptextPosition: {
control: { type: "radio" },
options: POSITIONS,
},
size: {
control: { type: "radio" },
options: SIZES,
},
},
parameters: {
chromatic: { disable: true },
},
@@ -48,43 +34,49 @@ export const Controls: Story = {
timestamp: "01.01.21 14:00",
avatar: "ON",
},
argTypes: {
position: {
control: { type: "radio" },
options: [...POSITIONS], // TypeScript does not like using readonly typed arrays here
},
toptextPosition: {
control: { type: "radio" },
options: [...POSITIONS],
},
size: {
control: { type: "radio" },
options: [...SIZES],
},
variant: {
control: { type: "radio" },
options: [...VARIANTS],
},
},
};
export const Size: Story = {
render: () => (
<VStack gap="4">
<h3>Medium</h3>
<Chat
avatar="ON"
name="Ola Normann"
timestamp="01.01.21 14:00"
size="medium"
>
<Chat.Bubble>
Aute minim nisi sunt mollit duis sunt nulla minim non proident.
</Chat.Bubble>
<Chat.Bubble>Tempor fugiat amet eu sint in in ullamco.</Chat.Bubble>
<Chat.Bubble>
Adipisicing laborum est eu laborum est sit in commodo enim sint
laboris labore nisi ut.
</Chat.Bubble>
</Chat>
<h3>Small</h3>
<Chat
avatar="ON"
name="Ola Normann"
timestamp="01.01.21 14:00"
size="small"
>
<Chat.Bubble>
Aute minim nisi sunt mollit duis sunt nulla minim non proident.
</Chat.Bubble>
<Chat.Bubble>Tempor fugiat amet eu sint in in ullamco.</Chat.Bubble>
<Chat.Bubble>
Adipisicing laborum est eu laborum est sit in commodo enim sint
laboris labore nisi ut.
</Chat.Bubble>
</Chat>
{SIZES.map((size) => (
<>
<h3>{size}</h3>
<Chat
avatar="ON"
name="Ola Normann"
timestamp="01.01.21 14:00"
size={size}
>
<Chat.Bubble>
Aute minim nisi sunt mollit duis sunt nulla minim non proident.
</Chat.Bubble>
<Chat.Bubble>Tempor fugiat amet eu sint in in ullamco.</Chat.Bubble>
<Chat.Bubble>
Adipisicing laborum est eu laborum est sit in commodo enim sint
laboris labore nisi ut.
</Chat.Bubble>
</Chat>
</>
))}
</VStack>
),
};
@@ -92,35 +84,21 @@ export const Size: Story = {
export const Variants: Story = {
render: () => (
<VStack gap="4">
<h3>Info</h3>
<Chat avatar="NAV" name="NAV" timestamp="01.01.21 14:00" variant="info">
<Chat.Bubble>
Aute minim nisi sunt mollit duis sunt nulla minim non proident.
</Chat.Bubble>
</Chat>
<h3>Neutral</h3>
<Chat
avatar="KN"
name="Kari Nordmann"
timestamp="01.01.21 14:03"
variant="neutral"
position="right"
>
<Chat.Bubble>Tempor fugiat amet eu sint in in ullamco.</Chat.Bubble>
</Chat>
<h3>Subtle</h3>
<Chat
avatar="ON"
name="Ola Nordmann"
timestamp="01.01.21 14:07"
variant="subtle"
position="right"
>
<Chat.Bubble>
Adipisicing laborum est eu laborum est sit in commodo enim sint
laboris labore nisi ut.
</Chat.Bubble>
</Chat>
{VARIANTS.map((variant) => (
<>
<h3>{variant}</h3>
<Chat
avatar="NAV"
name="NAV"
timestamp="01.01.21 14:00"
variant={variant}
>
<Chat.Bubble>
Aute minim nisi sunt mollit duis sunt nulla minim non proident.
</Chat.Bubble>
</Chat>
</>
))}
</VStack>
),
};
@@ -131,8 +109,7 @@ export const Position: Story = {
<h3>Default</h3>
<Chat avatar="ON" name="Ola Normann" timestamp="01.01.21 14:00">
<Chat.Bubble>
Adipisicing laborum est eu laborum est sit in commodo enim sint
laboris labore nisi ut.
Reprehenderit pariatur officia exercitation laboris.
</Chat.Bubble>
</Chat>
<h3>Right</h3>
@@ -159,10 +136,7 @@ export const Position: Story = {
timestamp="01.01.21 15:00"
>
<Chat.Bubble>
Exercitation irure Lorem cupidatat culpa anim cillum esse ullamco qui
dolore laborum et Lorem. Labore sunt duis id Lorem voluptate commodo
ea esse. Dolore esse aliqua proident ea ad commodo ut dolore voluptate
labore sunt aute.
Reprehenderit pariatur officia exercitation laboris.
</Chat.Bubble>
</Chat>
</VStack>
@@ -171,8 +145,8 @@ export const Position: Story = {
export const ToptextPosition: Story = {
render: () => (
<VStack gap="4">
<h3>Right</h3>
<VStack gap="4" style={{ width: 500 }}>
<h3>All right</h3>
<Chat
avatar="ON"
name="Ola Normann"
@@ -180,20 +154,31 @@ export const ToptextPosition: Story = {
toptextPosition="right"
>
<Chat.Bubble>
Adipisicing laborum est eu laborum est sit in commodo enim sint
laboris labore nisi ut.
Reprehenderit pariatur officia exercitation laboris.
</Chat.Bubble>
</Chat>
<h3>Left</h3>
<Chat avatar="ON" name="Ola Normann" timestamp="01.01.21 15:00">
<Chat.Bubble toptextPosition="left">
Exercitation irure Lorem cupidatat culpa anim cillum esse ullamco qui
dolore laborum et Lorem. Labore sunt duis id Lorem voluptate commodo
ea esse. Dolore esse aliqua proident ea ad commodo ut dolore voluptate
labore sunt aute.
<h3>Single bubble right</h3>
<Chat avatar="ON" name="Ola Normann" timestamp="01.01.21 14:00">
<Chat.Bubble>
Reprehenderit pariatur officia exercitation laboris.
</Chat.Bubble>
<Chat.Bubble timestamp="14:02" toptextPosition="right">
Enim velit deserunt do quis.
</Chat.Bubble>
</Chat>
<h3>Left</h3>
<h3>All left</h3>
<Chat
avatar="ON"
name="Ola Normann"
timestamp="01.01.21 15:00"
toptextPosition="left"
>
<Chat.Bubble>
Reprehenderit pariatur officia exercitation laboris.
</Chat.Bubble>
</Chat>
<h3>All left, position right</h3>
<Chat
name="Kari Høyli"
timestamp="01.01.21 14:32"
@@ -203,25 +188,6 @@ export const ToptextPosition: Story = {
<Chat.Bubble>
Reprehenderit pariatur officia exercitation laboris.
</Chat.Bubble>
<Chat.Bubble>
Enim velit deserunt do quis. Eu fugiat magna esse dolore ad sunt sit
est dolore incididunt. Occaecat cupidatat magna.
</Chat.Bubble>
</Chat>
<h3>Right</h3>
<Chat
name="Kari Høyli"
timestamp="01.01.21 14:32"
position="right"
toptextPosition="right"
>
<Chat.Bubble>
Reprehenderit pariatur officia exercitation laboris.
</Chat.Bubble>
<Chat.Bubble>
Enim velit deserunt do quis. Eu fugiat magna esse dolore ad sunt sit
est dolore incididunt. Occaecat cupidatat magna.
</Chat.Bubble>
</Chat>
</VStack>
),
+2 -2
View File
@@ -7,7 +7,7 @@ import ToggleChips, { ChipsToggleProps } from "./Toggle";
export interface ChipsProps extends HTMLAttributes<HTMLUListElement> {
children: React.ReactNode;
/**
* Changes padding and font-sizes
* Changes padding and font-sizes.
* @default "medium"
*/
size?: "medium" | "small";
@@ -24,7 +24,7 @@ interface ChipsComponent
*/
Toggle: OverridableComponent<ChipsToggleProps, HTMLButtonElement>;
/**
* Remove filter or the likes on click
* Remove filter or the likes on click.
* @see 🏷️ {@link RemovableChipsProps}
* @see [🤖 OverridableComponent](https://aksel.nav.no/grunnleggende/kode/overridablecomponent) support
*/
@@ -0,0 +1,32 @@
import { createContext } from "../util/create-context";
import { CollapsibleBaseProps } from "./Collapsible.types";
export type CollapsibleContextProps = Pick<CollapsibleBaseProps, "open"> & {
/**
* Allows connecting trigger to content
*/
contentId: string;
/**
* Allows connecting content to trigger
*/
triggerId: string;
/**
* Callback for toggling open state
*/
onOpenToggle: () => void;
/**
* Allows always rendering children in content when closed
*/
lazy: boolean;
/**
* Utility for getting state as string. Usefull for data-attributes.
*/
state: "open" | "closed";
};
export const [CollapsibleContextProvider, useCollapsibleContext] =
createContext<CollapsibleContextProps>({
name: "CollapsibleContext",
errorMessage:
"<Collapsible.Trigger> and <Collapsible.Content> must be used within a <Collapsible>",
});
@@ -0,0 +1,222 @@
import { Meta, StoryFn, StoryObj } from "@storybook/react";
import React, { useState } from "react";
import { ChevronDownIcon, ChevronUpIcon } from "@navikt/aksel-icons";
import { Button } from "../button";
import { Box } from "../layout/box";
import { HStack, VStack } from "../layout/stack";
import { Collapsible } from "./Collapsible";
const meta: Meta<typeof Collapsible> = {
title: "Utilities/Collapsible",
component: Collapsible,
parameters: {
chromatic: { disable: true },
},
};
export default meta;
type Story = StoryObj<typeof Collapsible>;
export const Default: Story = {
render: (...props) => (
<Collapsible {...props}>
<Collapsible.Trigger>Trigger</Collapsible.Trigger>
<Collapsible.Content>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae
corporis maxime aliquam, voluptates nobis numquam, non odit optio
architecto iure laborum possimus! Quibusdam sit ullam, consequatur sunt
tempore optio aliquid!
</Collapsible.Content>
</Collapsible>
),
args: {
open: false,
defaultOpen: false,
},
};
export const InContext: StoryFn<typeof Collapsible> = () => {
const [open, setOpen] = useState(false);
return (
<Collapsible open={open} onOpenChange={setOpen}>
<HStack justify="space-between" gap="4" align="center">
Steg 1 av 8{" "}
<Collapsible.Trigger asChild>
<Button
size="small"
variant="tertiary"
iconPosition="right"
icon={
open ? (
<ChevronUpIcon aria-hidden />
) : (
<ChevronDownIcon aria-hidden />
)
}
>
Vis steg
</Button>
</Collapsible.Trigger>
</HStack>
<Collapsible.Content>
<p>Lorem ipsum dolor sit</p>
</Collapsible.Content>
</Collapsible>
);
};
export const Animated: StoryFn<typeof Collapsible> = () => (
<Collapsible lazy>
<Collapsible.Trigger asChild>
<Button size="small" variant="secondary">
Animer open/lukk
</Button>
</Collapsible.Trigger>
<Collapsible.Content className="collapsible">
<div className="collapsibleContent">
<Box padding="8" background="surface-alt-3-subtle">
<div>lorem ipsum</div>
</Box>
</div>
</Collapsible.Content>
</Collapsible>
);
Animated.decorators = [
(Story) => (
<div style={{ height: 300 }}>
<style>{`
.collapsible {
display: grid;
grid-template-rows: 0fr;
overflow: hidden;
transition: grid-template-rows 1s ease-in-out;
}
.collapsible[data-state="closed"] {
width: 0;
}
.collapsible[data-state="open"] {
grid-template-rows: 1fr;
}
.collapsibleContent {
min-height: 0;
transition: visibility 1s;
visibility: hidden;
}
.collapsible[data-state="open"] .collapsibleContent {
visibility: visible;
}
`}</style>
{Story()}
</div>
),
];
export const Lazy: StoryFn<typeof Collapsible> = () => (
<Collapsible lazy>
<Collapsible.Trigger>Trigger</Collapsible.Trigger>
<Collapsible.Content>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae
corporis maxime aliquam, voluptates nobis numquam, non odit optio
architecto iure laborum possimus! Quibusdam sit ullam, consequatur sunt
tempore optio aliquid!
</Collapsible.Content>
</Collapsible>
);
export const AsChild: StoryFn<typeof Collapsible> = () => (
<Collapsible>
<Collapsible.Trigger asChild>
<Button>Button</Button>
</Collapsible.Trigger>
<Collapsible.Content asChild>
<Box padding="4" background="surface-alt-3-subtle">
<div>lorem ipsum</div>
</Box>
</Collapsible.Content>
</Collapsible>
);
export const DefaultOpen: StoryFn<typeof Collapsible> = () => (
<Collapsible defaultOpen>
<Collapsible.Trigger asChild>
<Button>Button</Button>
</Collapsible.Trigger>
<Collapsible.Content asChild>
<Box padding="4" background="surface-alt-3-subtle">
<div>lorem ipsum</div>
</Box>
</Collapsible.Content>
</Collapsible>
);
export const ControlledOpen: StoryFn<typeof Collapsible> = () => (
<Collapsible open>
<Collapsible.Trigger asChild>
<Button>Button</Button>
</Collapsible.Trigger>
<Collapsible.Content asChild>
<Box padding="4" background="surface-alt-3-subtle">
<div>lorem ipsum</div>
</Box>
</Collapsible.Content>
</Collapsible>
);
export const Disabled: StoryFn<typeof Collapsible> = ({ open = false }) => (
<Collapsible open={open}>
<Collapsible.Trigger asChild disabled>
<Button>Button</Button>
</Collapsible.Trigger>
<Collapsible.Content asChild>
<Box padding="4" background="surface-alt-3-subtle">
<div>lorem ipsum</div>
</Box>
</Collapsible.Content>
</Collapsible>
);
export const Chromatic: Story = {
render: () => (
<VStack gap="8">
<div>
<h2>In context</h2>
<InContext />
</div>
<div>
<h2>Animated</h2>
<Animated />
</div>
<div>
<h2>Lazy</h2>
<Lazy />
</div>
<div>
<h2>AsChild</h2>
<AsChild />
</div>
<div>
<h2>DefaultOpen</h2>
<DefaultOpen />
</div>
<div>
<h2>ControlledOpen</h2>
<ControlledOpen />
</div>
<div>
<h2>Disabled</h2>
<Disabled />
<Disabled open />
</div>
</VStack>
),
parameters: {
chromatic: { disable: false },
},
};
@@ -0,0 +1,100 @@
import React, { forwardRef, useCallback } from "react";
import { useControllableState, useId } from "../util/hooks";
import { CollapsibleContextProvider } from "./Collapsible.context";
import { CollapsibleBaseProps } from "./Collapsible.types";
import CollapsibleContent from "./parts/Collapsible.Content";
import CollapsibleTrigger from "./parts/Collapsible.Trigger";
export interface CollapsibleProps
extends CollapsibleBaseProps,
React.HTMLAttributes<HTMLDivElement> {}
interface CollapsibleComponent
extends React.ForwardRefExoticComponent<
CollapsibleProps & React.RefAttributes<HTMLDivElement>
> {
/**
* @see 🏷️ {@link CollapsibleTriggerProps}
*/
Trigger: typeof CollapsibleTrigger;
/**
* @see 🏷️ {@link CollapsibleContentProps}
*/
Content: typeof CollapsibleContent;
}
/**
* Collapsible is a component that allows you to toggle visibility of content.
*
* @example
* ```jsx
* <Collapsible>
* <Collapsible.Trigger>Trigger</Collapsible.Trigger>
* <Collapsible.Content>
* Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae
* corporis maxime aliquam, voluptates nobis numquam, non odit optio
* architecto iure laborum possimus! Quibusdam sit ullam, consequatur sunt
* tempore optio aliquid!
* </Collapsible.Content>
* </Collapsible>
* ```
*
* @example With asChild
* ```jsx
* <Collapsible>
* <Collapsible.Trigger asChild>
* <Button>Button</Button>
* </Collapsible.Trigger>
* <Collapsible.Content asChild>
* <Box padding="4" background="surface-alt-3-subtle">
* <div>lorem ipsum</div>
* </Box>
* </Collapsible.Content>
* </Collapsible>
* ```
*/
export const Collapsible = forwardRef<HTMLDivElement, CollapsibleProps>(
(
{
children,
open,
defaultOpen = false,
onOpenChange,
lazy = false,
...rest
},
ref,
) => {
const [_open, setOpen] = useControllableState({
value: open,
defaultValue: defaultOpen,
onChange: onOpenChange,
});
const internalId = useId();
const state = _open ? "open" : "closed";
return (
<CollapsibleContextProvider
open={_open}
onOpenToggle={useCallback(
() => setOpen((prevOpen) => !prevOpen),
[setOpen],
)}
contentId={`collapsible-content-${internalId}`}
triggerId={`collapsible-trigger-${internalId}`}
lazy={lazy}
state={state}
>
<div ref={ref} data-state={state} {...rest}>
{children}
</div>
</CollapsibleContextProvider>
);
},
) as CollapsibleComponent;
Collapsible.Trigger = CollapsibleTrigger;
Collapsible.Content = CollapsibleContent;
export default Collapsible;
@@ -0,0 +1,19 @@
export interface CollapsibleBaseProps {
/**
* The open state of the collapsible when it is initially rendered. Use when you do not need to control its open state.
*/
defaultOpen?: boolean;
/**
* The controlled open state of the collapsible. Must be used in conjunction with onOpenChange.
*/
open?: boolean;
/**
* Event handler called when the open state of the collapsible changes.
*/
onOpenChange?: (open: boolean) => void;
/**
* Render the collapsible content lazily. This means that the content will not be rendered until the collapsible is open.
* @default false
*/
lazy?: boolean;
}
@@ -0,0 +1,10 @@
"use client";
export { default as Collapsible, type CollapsibleProps } from "./Collapsible";
export {
default as CollapsibleTrigger,
type CollapsibleTriggerProps,
} from "./parts/Collapsible.Trigger";
export {
default as CollapsibleContent,
type CollapsibleContentProps,
} from "./parts/Collapsible.Content";
@@ -0,0 +1,39 @@
import React, { forwardRef } from "react";
import { Slot } from "../../util/Slot";
import { useCollapsibleContext } from "../Collapsible.context";
export interface CollapsibleContentProps
extends Omit<
React.HTMLAttributes<HTMLDivElement>,
"hidden" | "aria-controls" | "id"
> {
/**
* When true, will render element as its child. This merges classes, styles and event handlers.
* @default false
*/
asChild?: boolean;
}
export const CollapsibleContent = forwardRef<
HTMLDivElement,
CollapsibleContentProps
>(({ children, asChild, ...rest }, ref) => {
const ctx = useCollapsibleContext();
const Comp = asChild ? Slot : "div";
return (
<Comp
ref={ref}
{...rest}
data-state={ctx.state}
hidden={!ctx.open}
aria-controls={ctx.open ? ctx.triggerId : undefined}
id={ctx.contentId}
>
{ctx.lazy || ctx.open ? children : null}
</Comp>
);
});
export default CollapsibleContent;
@@ -0,0 +1,46 @@
import React, { forwardRef } from "react";
import { Slot } from "../../util/Slot";
import { composeEventHandlers } from "../../util/composeEventHandlers";
import { useCollapsibleContext } from "../Collapsible.context";
export interface CollapsibleTriggerProps
extends Omit<
React.ButtonHTMLAttributes<HTMLButtonElement>,
"id" | "aria-controls" | "aria-expanded"
> {
/**
* When true, will render element as its child. This merges classes, styles and event handlers.
* @default false
*/
asChild?: boolean;
/**
* You may disable aria-expanded if the accessable name of the trigger is changed when toggled, e.g. "Show"/"Hide".
*/
"aria-expanded"?: undefined;
}
export const CollapsibleTrigger = forwardRef<
HTMLButtonElement,
CollapsibleTriggerProps
>(({ children, asChild, onClick, ...rest }, ref) => {
const ctx = useCollapsibleContext();
const Comp = asChild ? Slot : "button";
return (
<Comp
ref={ref}
type="button"
data-state={ctx.state}
onClick={composeEventHandlers(onClick, ctx.onOpenToggle)}
aria-expanded={ctx.open}
{...rest}
id={ctx.triggerId}
aria-controls={ctx.open ? ctx.contentId : undefined}
>
{children}
</Comp>
);
});
export default CollapsibleTrigger;
@@ -14,7 +14,7 @@ import copy from "../util/copy";
export interface CopyButtonProps
extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children"> {
/**
* 'xsmall' should only be used in tables
* `"xsmall"` should _only_ be used in tables.
* @default "medium"
*/
size?: "medium" | "small" | "xsmall";
@@ -23,49 +23,52 @@ export interface CopyButtonProps
*/
variant?: "action" | "neutral";
/**
* Text to copy to clipboard
* Text to copy to clipboard.
*/
copyText: string;
/**
* Optional text in button
* Optional text in button.
*/
text?: string;
/**
* Text shown when button is clicked.
* Only set if used with `text`-prop.
* @default "Kopiert!"
*/
activeText?: string;
/**
* Callback when 'copied'-state is active
* Callback that is called when internal copy-state changes.
*
* @param state `true` when copy-state is activated, `false` when copy-state is deactivated.
*/
onActiveChange?: (state: boolean) => void;
/**
* Icon shown when button is not clicked
* Icon shown when button is not clicked.
* @default <FilesIcon />
*/
icon?: React.ReactNode;
/**
* Icon shown when active
* Icon shown when active.
* @default <CheckmarkIcon />
*/
activeIcon?: React.ReactNode;
/**
* Timeout duration in milliseconds
* Timeout duration in milliseconds.
* @default 2000
*/
activeDuration?: number;
/**
* Accessible label for icon (ignored if text is set)
* @default 'Kopier'
* Accessible label for icon (ignored if text is set).
* @default "Kopier"
*/
title?: string;
/**
* Accessible label for icon in active-state (ignored if text is set)
* @default 'Kopiert'
* Accessible label for icon in active-state (ignored if text is set).
* @default "Kopiert"
*/
activeTitle?: string;
/**
* Icon position in button
* Icon position in button.
* @default "left"
*/
iconPosition?: "left" | "right";
@@ -1,5 +1,5 @@
/* eslint-disable react-hooks/rules-of-hooks */
import { Meta, StoryObj } from "@storybook/react";
import { expect, userEvent, within } from "@storybook/test";
import { isSameDay } from "date-fns";
import React, { useId, useState } from "react";
import { Button } from "../../button";
@@ -161,6 +161,7 @@ export const UseDatepicker = () => {
fromDate: new Date("Aug 23 2019"),
toDate: new Date("Feb 23 2024"),
onDateChange: console.log,
onValidate: console.log,
});
return (
@@ -440,6 +441,39 @@ export const WeekDayClick = () => {
);
};
export const Required = {
render: () => {
const { datepickerProps } = useDatepicker({
defaultSelected: new Date("Apr 10 2024"),
required: true,
});
return (
<div style={{ height: "20rem" }}>
<DatePicker.Standalone {...datepickerProps} />
</div>
);
},
play: async ({ canvasElement }) => {
const canvas = within(canvasElement);
const button10 = canvas.getByRole("button", { pressed: true });
await userEvent.click(button10);
expect(button10.ariaPressed).toBe("true");
const button17 = canvas.getByText("17").closest("button");
expect(button17?.ariaPressed).toBe("false");
button17 && (await userEvent.click(button17));
expect(button17?.ariaPressed).toBe("true");
expect(button10.ariaPressed).toBe("false");
},
};
export const ModalDemo = () => {
const { datepickerProps, inputProps } = useDatepicker({
fromDate: new Date("Aug 23 2019"),
@@ -20,8 +20,11 @@ const DayButton = (props: DayProps) => {
name="day"
ref={buttonRef}
{...dayRender.buttonProps}
role={undefined}
aria-label={dateTime}
aria-hidden={dayRender.activeModifiers.outside}
aria-selected={undefined}
aria-pressed={!!dayRender.activeModifiers.selected}
/>
);
};
@@ -37,7 +37,11 @@ export const DropdownCaption = ({ displayMonth, id }: CaptionProps) => {
const handleMonthChange: React.ChangeEventHandler<HTMLSelectElement> = (e) =>
goToMonth(setMonth(startOfMonth(displayMonth), Number(e.target.value)));
const years = getYears(fromDate, toDate, displayMonth.getFullYear());
const years = getYears(
fromDate,
toDate,
displayMonth.getFullYear(),
).reverse();
const months = getMonths(fromDate, toDate, displayMonth);
const previousLabel = labelPrevious(previousMonth, { locale });
@@ -16,7 +16,7 @@ export type MultipleMode = {
min?: number;
max?: number;
/**
* Allows selecting a week at a time. Only used with mode="multiple".
* Allows selecting a week at a time. Only used with `mode` is set to "multiple".
*/
onWeekNumberClick?: DayPickerBase["onWeekNumberClick"];
};
@@ -83,21 +83,22 @@ export interface DatePickerDefaultProps
*/
showWeekNumber?: boolean;
/**
* Open state for user-controlled state. Component controlled by default
* Open state for user-controlled state. Component controlled by default.
*/
open?: boolean;
/**
* onClose callback for user-controlled state
* onClose callback for user-controlled state.
*/
onClose?: () => void;
/**
* onOpenToggle callback for user-controlled state. Only called if `<DatePicker.Input />` is used
* onOpenToggle callback for user-controlled state. Only called if `<DatePicker.Input />` is used.
*/
onOpenToggle?: () => void;
/**
* Avoid using if possible!
* **Avoid using if possible!**
*
* Changes what CSS position property to use.
* You want to use "fixed" if parent wrapper has position relative, but you want popover to escape
* You want to use "fixed" if parent wrapper has position relative, but you want popover to escape.
* @default See Popover
*/
strategy?: "absolute" | "fixed";
@@ -49,10 +49,11 @@ export interface UseDatepickerOptions
*/
onValidate?: (val: DateValidationT) => void;
/**
* Allows input of with 'yy' year format.
* Allows input of with `yy` year format.
*
* Decision between 20th and 21st century is based on before(todays year - 80) ? 21st : 20th.
* e.g. In 2024 this equals to 1944 - 2043.
* @default true
* @Note Decision between 20th and 21st century is based on before(todays year - 80) ? 21st : 20th.
* In 2024 this equals to 1944 - 2043
*/
allowTwoDigitYear?: boolean;
}
@@ -228,12 +229,16 @@ export const useDatepicker = (
/* Only allow de-selecting if not required */
const handleDayClick: DayClickEventHandler = (day, { selected }) => {
if (selected && required) {
return;
}
if (day && !selected) {
handleOpen(false);
anchorRef?.focus();
}
if (!required && selected) {
if (selected) {
updateDate(undefined);
setInputValue("");
updateValidation({ isValidDate: false, isEmpty: true });
@@ -271,7 +276,7 @@ export const useDatepicker = (
) {
updateDate(undefined);
updateValidation({
isInvalid: isValidDate(day),
isInvalid: !isValidDate(day),
isWeekend: disableWeekends && isWeekend(day),
isDisabled: disabled && isMatch(day, disabled),
isValidDate: false,
@@ -36,10 +36,11 @@ export interface UseMonthPickerOptions
*/
defaultYear?: Date;
/**
* Allows input of with 'yy' year format.
* @default true
* @Note Decision between 20th and 21st century is based on before(todays year - 80) ? 21st : 20th.
* Allows input of with `yy` year format.
*
* Decision between 20th and 21st century is based on before(todays year - 80) ? 21st : 20th.
* In 2024 this equals to 1944 - 2043
* @default true
*/
allowTwoDigitYear?: boolean;
}
@@ -224,13 +225,17 @@ export const useMonthpicker = (
/* Only allow de-selecting if not required */
const handleMonthClick = (month?: Date) => {
if (!month && required) {
return;
}
if (month) {
handleOpen(false);
setYear(month);
anchorRef?.focus();
}
if (!required && !month) {
if (!month) {
updateMonth(undefined);
updateValidation({ isValidMonth: false, isEmpty: true });
setInputValue("");
@@ -66,6 +66,7 @@ export const MonthButton = ({
type="button"
onClick={() => onSelect(isSelected ? undefined : month)}
disabled={isDisabled}
aria-pressed={!!isSelected}
className={cl("navds-date__month-button", {
"rdp-day_today": dateIsInCurrentMonth(month, year),
"rdp-day_selected": isSelected,
@@ -35,7 +35,7 @@ export const MonthCaption = () => {
if (!years.map((x) => x.getFullYear()).includes(year.getFullYear())) {
years.push(setYear(startOfYear(new Date()), year.getFullYear()));
}
years.sort((a, b) => a.getFullYear() - b.getFullYear());
years.sort((a, b) => b.getFullYear() - a.getFullYear());
}
const handleYearChange = (e) =>
@@ -1,4 +1,5 @@
import { Meta, StoryFn, StoryObj } from "@storybook/react";
import { expect, userEvent, within } from "@storybook/test";
import { setYear } from "date-fns";
import React, { useId, useState } from "react";
import { Button } from "../../button";
@@ -121,25 +122,37 @@ export const UseMonthpickerFormat = () => {
);
};
export const Required = () => {
const { inputProps, monthpickerProps } = useMonthpicker({
locale: "nb",
defaultSelected: new Date(),
disabled: [new Date("Apr 1 2022")],
required: true,
});
export const Required = {
render: () => {
const { monthpickerProps } = useMonthpicker({
defaultSelected: new Date("Apr 10 2024"),
required: true,
});
return (
<div style={{ height: "20rem" }}>
<MonthPicker {...monthpickerProps}>
<MonthPicker.Input
{...inputProps}
label="Velg måned"
variant="monthpicker"
/>
</MonthPicker>
</div>
);
return (
<div style={{ height: "20rem" }}>
<MonthPicker.Standalone {...monthpickerProps} />
</div>
);
},
play: async ({ canvasElement }) => {
const canvas = within(canvasElement);
const buttonApr = canvas.getByRole("button", { pressed: true });
await userEvent.click(buttonApr);
expect(buttonApr.ariaPressed).toBe("true");
const buttonSep = canvas.getByText("september").closest("button");
expect(buttonSep?.ariaPressed).toBe("false");
buttonSep && (await userEvent.click(buttonSep));
expect(buttonSep?.ariaPressed).toBe("true");
expect(buttonApr.ariaPressed).toBe("false");
},
};
export const UserControlled = () => {
@@ -193,7 +206,6 @@ export const Chromatic: Story = {
<DisabledMonths />
<UseMonthpicker />
<UseMonthpickerFormat />
<Required />
<UserControlled />
<FollowYear />
</div>
@@ -69,7 +69,8 @@ export interface MonthPickerProps extends React.HTMLAttributes<HTMLDivElement> {
*/
onYearChange?: (y?: Date) => void;
/**
* Avoid using if possible!
* **Avoid using if possible!**
*
* Changes what CSS position property to use
* You want to use "fixed" if parent wrapper has position relative, but you want popover to escape
* @default "absolute"
@@ -21,7 +21,7 @@ export interface DateInputProps
hideLabel?: boolean;
/**
* Changes padding and font-sizes
* @default medium
* @default "medium"
*/
size?: "medium" | "small";
/**
@@ -1,4 +1,4 @@
import { Meta } from "@storybook/react";
import { Meta, StoryObj } from "@storybook/react";
import React, { useState } from "react";
import { Button } from "../button";
import Dropdown from "./Dropdown";
@@ -6,10 +6,15 @@ import Dropdown from "./Dropdown";
export default {
title: "ds-react/Dropdown",
component: Dropdown,
} as Meta;
parameters: {
chromatic: { disable: true },
},
} satisfies Meta<typeof Dropdown>;
export const Default = () => {
return (
type Story = StoryObj<typeof Dropdown>;
export const Default: Story = {
render: () => (
<Dropdown onSelect={(event) => console.log(event)}>
<Dropdown.Toggle>Toggle</Dropdown.Toggle>
<Dropdown.Menu strategy="fixed">
@@ -33,10 +38,10 @@ export const Default = () => {
</Dropdown.Menu.List>
</Dropdown.Menu>
</Dropdown>
);
),
};
export const DefaultOpen = {
export const DefaultOpen: Story = {
render: () => (
<Dropdown onSelect={(event) => console.log(event)} defaultOpen>
<Button as={Dropdown.Toggle}>Toggle</Button>
@@ -57,20 +62,41 @@ export const DefaultOpen = {
</Dropdown.Menu>
</Dropdown>
),
args: { chromatic: { delay: 300 } },
};
export const ControlledOpen = () => {
const [openState, setOpenState] = useState(true);
return (
<Dropdown onSelect={(event) => console.log(event)} open={openState}>
<Button as={Dropdown.Toggle} onClick={() => setOpenState(!openState)}>
Toggle
</Button>
<Dropdown.Menu
strategy="fixed"
onClose={() => console.log("ONCLOSE CONTROLLED")}
>
export const ControlledOpen: Story = {
render: () => {
const [openState, setOpenState] = useState(true);
return (
<Dropdown onSelect={(event) => console.log(event)} open={openState}>
<Button as={Dropdown.Toggle} onClick={() => setOpenState(!openState)}>
Toggle
</Button>
<Dropdown.Menu
strategy="fixed"
onClose={() => console.log("ONCLOSE CONTROLLED")}
>
<Dropdown.Menu.GroupedList>
<Dropdown.Menu.GroupedList.Heading>
Systemer og oppslagsverk
</Dropdown.Menu.GroupedList.Heading>
<Dropdown.Menu.GroupedList.Item
onClick={() => console.log("GroupedList.Item-click")}
>
Gosys
</Dropdown.Menu.GroupedList.Item>
</Dropdown.Menu.GroupedList>
</Dropdown.Menu>
</Dropdown>
);
},
};
export const Chromatic: Story = {
render: () => (
<Dropdown onSelect={(event) => console.log(event)} open>
<Dropdown.Toggle>Toggle</Dropdown.Toggle>
<Dropdown.Menu strategy="fixed">
<Dropdown.Menu.GroupedList>
<Dropdown.Menu.GroupedList.Heading>
Systemer og oppslagsverk
@@ -81,8 +107,18 @@ export const ControlledOpen = () => {
Gosys
</Dropdown.Menu.GroupedList.Item>
</Dropdown.Menu.GroupedList>
<Dropdown.Menu.Divider />
<Dropdown.Menu.List>
<Dropdown.Menu.List.Item onClick={() => console.log("Item-click")}>
Gosys
</Dropdown.Menu.List.Item>
<Dropdown.Menu.List.Item>Psys</Dropdown.Menu.List.Item>
<Dropdown.Menu.List.Item disabled>Infotrygd</Dropdown.Menu.List.Item>
</Dropdown.Menu.List>
</Dropdown.Menu>
</Dropdown>
);
),
parameters: {
chromatic: { disable: false, delay: 300 },
},
};
ControlledOpen.args = { chromatic: { delay: 300 } };
Loaded 100 of 686 files, more files were not shown because too many files have changed in this diff. Show more