Compare commits

...
Author SHA1 Message Date
github-actions[bot]andgithub-actions[bot] 5151313833 Version Packages (#1722)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-11-22 18:46:30 +01:00
Ken 45977bf71d ✨ Linter ubrukte css-selektorer 2022-11-22 17:17:08 +01:00
Ken e8007328db 🐛 Css-tokens 2022-11-22 17:10:37 +01:00
Ken 92f0fee402 🎨 sanity-typer 2022-11-21 15:35:43 +01:00
Ken d347deb05f 🔥 Fjernet gammel sanity-script 2022-11-21 14:39:19 +01:00
Ken f138652789 v2.0.0: Tokens og fontlasting (#1718) 2022-11-21 14:21:53 +01:00
Ken ec81f52cfc ✨ html-plugin storybook 2022-11-21 12:34:47 +01:00
github-actions[bot]andgithub-actions[bot] f9aecb4242 Version Packages (#1720)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-11-21 11:30:02 +01:00
Vebjørn NordbyandKen d9352982d4 [BUG] parentSelector returneres ikke selv om den er definert (#1717)
Co-authored-by: Ken <ken.aleksander@gmail.com>
2022-11-21 11:25:26 +01:00
Ken 328f33c913 🐛 Fikset changeset config 2022-11-19 17:12:15 +01:00
Ken 67fd406396 📝 Bedre build-logging 2022-11-19 15:20:34 +01:00
Ken 41320584a3 📝 Build loging 2022-11-19 15:03:40 +01:00
Ken ac838681f1 🔥 Fjernet next-eksempel 2022-11-19 14:48:13 +01:00
Ken 3f17539e17 🧑‍💻 lint-staged for raskere linting 2022-11-18 21:44:45 +01:00
Ken 633856677f 🎨 lint-staged 2022-11-18 21:41:51 +01:00
Ken 5aa3026561 ⚡ Raskere tester og build 2022-11-18 21:32:29 +01:00
Ken 90eb056b1c ⬆️ yarn lock 2022-11-18 14:55:00 +01:00
Ken 581c26953e Revert "🌐 Fonter med latin-extended"
This reverts commit 0b0d87a5db.
2022-11-18 14:54:28 +01:00
Ken 0b0d87a5db 🌐 Fonter med latin-extended 2022-11-18 12:58:26 +01:00
Ken 7ef1be47b7 📝 Changeset 2022-11-16 15:29:46 +01:00
Ken dde30617e3 💄 Toggle-small gap 2022-11-16 15:29:03 +01:00
Ken 609678667f 🔥 Fjernet console.log 2022-11-16 09:46:42 +01:00
Ken 180ecd89bf 🎨 defaultMonth/Year prop 2022-11-15 12:15:09 +01:00
Ken 635b0859b8 defaultMonth/Year prop 2022-11-15 12:13:02 +01:00
Ken 10cbe105bc 🐛 Redirect funker nå med æøå 2022-11-12 21:20:11 +01:00
Ken f97eed8396 📝 Hide redirects from sanity search 2022-11-12 20:03:33 +01:00
Ken 119d9df7b5 📝 Sanity types 2022-11-12 19:45:02 +01:00
Ken 846d18cd23 🎨 Dynamic redirects 2022-11-12 19:40:14 +01:00
Ken 833c35cbbc 🐛 Headings i alert scrollet ikke ved linking 2022-11-11 12:43:35 +01:00
Ken 08353f50b5 💄 tema-lenker 2022-11-11 11:34:55 +01:00
Ken fba81fb4eb 🐛 Fikset tags komponentoversikt 2022-11-10 12:00:49 +01:00
Ken 9d9c6e9bfa 🐛 Fikset tags komponentoversikt 2022-11-10 11:07:34 +01:00
Ken 4dad81714f 🎨 Oppdatert tilbakemeldingsform for personvern 2022-11-09 13:19:34 +01:00
Ken 8e9135149b 🐛 Datepicker funket ikke i shadow-dom (open)
🐛 Datepicker funket ikke i shadow-dom

📝 Changeset@
2022-11-08 15:06:02 +01:00
KenandKenAJoh 852b53d6b9 Ikonsynk Figma (#1713)
Co-authored-by: KenAJoh <KenAJoh@users.noreply.github.com>
2022-11-08 09:34:22 +01:00
github-actions[bot]andgithub-actions[bot] ede1f5858a Version Packages (#1711)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-11-04 14:50:55 +01:00
Ken ad9e7165bb 💚 dispatch cdn-publish 2022-11-04 14:46:55 +01:00
Kenandolejorgenbakken 77302a30b8 Ikonsynk Figma (#1709)
Co-authored-by: olejorgenbakken <olejorgenbakken@users.noreply.github.com>
2022-11-04 14:45:15 +01:00
Andreas Nordahl 0ef12ef601 upload font files to cdn (#1710) 2022-11-04 14:29:56 +01:00
Ken 4174f9a7b4 📝 Patch-version 2022-11-02 23:37:19 +01:00
Ken 608f158d70 🐛 Datepicker validation error var flipped 2022-11-02 22:40:36 +01:00
Ken 34d41ecc78 📝 Patch-version 2022-11-02 20:42:21 +01:00
Ken 7e62365a60 🔥 Fjernet flaky e2e test 2022-11-02 19:29:52 +01:00
Ken 8565f410a1 💄 Nye tags i sidebar 2022-11-02 18:16:42 +01:00
Ken 46d70820df 📝 Version-bump 2022-11-02 18:09:27 +01:00
github-actions[bot]andgithub-actions[bot] 67e66ffe02 Version Packages (#1707)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-11-02 16:29:26 +01:00
Ken e19bf67b33 [FEATURE] Tag varianter (#1684) 2022-11-02 16:25:31 +01:00
Ken 97c5f60e91 Chips (#1668) 2022-11-02 16:20:42 +01:00
Ken ea5293c28d ⬆️ Patch-versjon 2022-11-02 10:57:45 +01:00
Ken 6a58efa9a9 changeset 2022-11-02 10:55:34 +01:00
Ken c95f33679e 💚 Fikset timezones for jest-tester
✨ Timekeeper-demo

✨ timezone for jest-tester
2022-11-02 10:53:19 +01:00
Ken b52a5e02a0 ✨ Patch-versjoner 2022-11-01 23:57:38 +01:00
Ken ab3ef0d34b ✨ Validering i Date-komponenter
🐛 Date-formats skaper problemer for ranged-input

🐛 UX tweaks for inputs

🐛 Fikset weekendValidation

🎨 Custom input-format

🎨 validation api

🎉 range-validation

🎨 Export validation-types

🎨 Datepicker-validation

🎨 monthpicker validation

🎨 Småbugs med disabled datepicker

💄 reversert capitalization i månedsnavn
2022-11-01 23:54:27 +01:00
Ken 69798f6ee2 🔥 Fjernet flaky e2e test 2022-11-01 11:00:35 +01:00
Ken ee14586beb ⬆️ yarn-lock 2022-11-01 10:40:34 +01:00
Ken 82470ba669 🐛 Synket dropdown med Figma 2022-11-01 10:18:40 +01:00
github-actions[bot]andgithub-actions[bot] 6286f0e8e6 Version Packages (#1705)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-10-31 13:34:55 +01:00
Ken 3c08651df2 ✨ Changeset 2022-10-31 13:26:02 +01:00
Ken e6d55fdcd6 changeset 2022-10-31 13:24:57 +01:00
Ken 8c445f020c 💚 Flere workers for e2e testing 2022-10-31 12:07:11 +01:00
Ken 78a76bac5d 🎉 Migrert aksel-website repo (#1704) 2022-10-31 11:44:38 +01:00
Ken 75b334af61 Merge branch 'master' of https://github.com/navikt/Designsystemet 2022-10-28 17:29:58 +02:00
Ken 5d98c50b80 🐛 Fikset eksempel 2022-10-28 17:28:30 +02:00
github-actions[bot]andgithub-actions[bot] 27803fd37c Version Packages (#1703)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-10-28 17:27:39 +02:00
Ken 1bdb7e3777 📝 changeset 2022-10-28 17:23:09 +02:00
Andreas NordahlandKen 20bcc28cb0 provider with modal config (#1702)
Co-authored-by: Ken <ken.aleksander@gmail.com>
2022-10-28 17:14:39 +02:00
706 changed files with 45264 additions and 5532 deletions

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
# Changesets
For versjonering bruker vi løsningen [Changesets](https://github.com/changesets/changesets) for å [versjonering](https://semver.org/) og publisering av pakker.
For versjonering bruker vi løsningen [Changesets](https://github.com/changesets/changesets) for [versjonering](https://semver.org/) og publisering av pakker.
## Howto
+1 -1
View File
@@ -21,7 +21,7 @@
"access": "public",
"baseBranch": "master",
"updateInternalDependencies": "patch",
"ignore": ["nextjs-demo", "shadow-dom"],
"ignore": ["shadow-dom", "aksel.nav.no"],
"___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": {
"updateInternalDependents": "always"
+71
View File
@@ -0,0 +1,71 @@
name: Deploy aksel.dev.nav.no
on:
workflow_dispatch:
push:
branches:
- next
env:
IMAGE: ghcr.io/navikt/designsystemet
jobs:
build_and_deploy:
name: Build and deploy to dev-gcp
runs-on: ubuntu-20.04
steps:
- uses: actions/setup-node@v1
with:
node-version: "14"
- uses: actions/checkout@v2
with:
ref: "next"
- name: add tokens to .env
run: |
echo "SANITY_WRITE_KEY=${{ secrets.SANITY_FEEDBACK_WRITE_KEY }}" >> aksel.nav.no/website/.env
echo "ALGOLIA_ADMIN=${{ secrets.ALGOLIA_ADMIN }}" >> aksel.nav.no/website/.env
echo "ALGOLIA_ID=${{ secrets.ALGOLIA_ID}}" >> aksel.nav.no/website/.env
echo "TRELLO_TOKEN=${{ secrets.TRELLO_TOKEN }}" >> aksel.nav.no/website/.env
echo "SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }}" >> 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
- 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
- name: Build application
run: |
yarn boot
yarn docgen
yarn workspace aksel.nav.no build:next
- name: Login to GitHub Container Registry
uses: docker/login-action@ab80d026d4753220c4243394c07c7d80f9638d06 # Use commit-sha1 instead of tag for security concerns
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Get complete tag
run: echo "TAG=DEV-$( date +%s )" >> $GITHUB_ENV
- name: Create docker image tags
run: echo "DOCKER_TAG=${{ env.IMAGE }}:${{ env.TAG }}" >> $GITHUB_ENV
- name: Build docker image
run: docker build -t ${{ env.DOCKER_TAG }} . -f aksel.nav.no/Dockerfile
- name: Push docker image
run: |
docker push ${{ env.DOCKER_TAG }}
- name: Deploy to dev-gcp
uses: nais/deploy/actions/deploy@master
env:
APIKEY: ${{ secrets.NAIS_DEPLOY_APIKEY }}
RESOURCE: aksel.nav.no/nais-dev.yaml
CLUSTER: dev-gcp
IMAGE: ${{ env.DOCKER_TAG }}
+81
View File
@@ -0,0 +1,81 @@
name: Deploy aksel.nav.no
on:
push:
branches:
- master
paths:
- "aksel.nav.no/**"
env:
IMAGE: ghcr.io/navikt/designsystemet
jobs:
build_and_deploy:
name: Build and deploy to prod-gcp
runs-on: ubuntu-20.04
steps:
- uses: actions/setup-node@v1
with:
node-version: "14"
- uses: actions/checkout@v2
- name: add tokens to .env
run: |
echo "SANITY_WRITE_KEY=${{ secrets.SANITY_FEEDBACK_WRITE_KEY }}" >> aksel.nav.no/website/.env
echo "ALGOLIA_ADMIN=${{ secrets.ALGOLIA_ADMIN }}" >> aksel.nav.no/website/.env
echo "ALGOLIA_ID=${{ secrets.ALGOLIA_ID}}" >> aksel.nav.no/website/.env
echo "TRELLO_TOKEN=${{ secrets.TRELLO_TOKEN }}" >> aksel.nav.no/website/.env
echo "SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }}" >> 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
- 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
- name: build packages
run: |
yarn boot
yarn docgen
- name: Tests
run: yarn workspace aksel.nav.no test
- name: E2E
run: NEXT_PUBLIC_TEST=true yarn workspace website e2e
- name: Update sanity sync
run: yarn workspace aksel.nav.no sanity:update
- name: Build application
run: yarn workspace aksel.nav.no build:next
- name: Login to GitHub Container Registry
uses: docker/login-action@ab80d026d4753220c4243394c07c7d80f9638d06 # Use commit-sha1 instead of tag for security concerns
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Get complete tag
run: echo "TAG=$( date +%s )" >> $GITHUB_ENV
- name: Create docker image tags
run: echo "DOCKER_TAG=${{ env.IMAGE }}:${{ env.TAG }}" >> $GITHUB_ENV
- name: Build docker image
run: docker build -t ${{ env.DOCKER_TAG }} . -f aksel.nav.no/Dockerfile
- name: Push docker image
run: |
docker push ${{ env.DOCKER_TAG }}
- name: Deploy to prod-gcp
uses: nais/deploy/actions/deploy@master
env:
APIKEY: ${{ secrets.NAIS_DEPLOY_APIKEY }}
RESOURCE: aksel.nav.no/nais-prod.yaml
CLUSTER: prod-gcp
IMAGE: ${{ env.DOCKER_TAG }}
+41
View File
@@ -0,0 +1,41 @@
name: Redeploy image to for aksel.nav.no
on:
workflow_dispatch:
inputs:
tag:
description: "Docker image tag"
required: true
default: ""
dry:
description: "Dry-run"
required: true
default: "false"
env:
IMAGE: ghcr.io/navikt/designsystemet
jobs:
redeploy:
name: Redeploy image
runs-on: ubuntu-20.04
steps:
- uses: actions/setup-node@v1
with:
node-version: "14"
- uses: actions/checkout@v2
- name: Login to GitHub Container Registry
uses: docker/login-action@ab80d026d4753220c4243394c07c7d80f9638d06 # Use commit-sha1 instead of tag for security concerns
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Create docker image tag
run: echo "DOCKER_TAG=${{ env.IMAGE }}:${{ github.event.inputs.tag }}" >> $GITHUB_ENV
- name: Deploy to prod-gcp
uses: nais/deploy/actions/deploy@master
env:
APIKEY: ${{ secrets.NAIS_DEPLOY_APIKEY }}
RESOURCE: aksel.nav.no/nais-prod.yaml
CLUSTER: prod-gcp
IMAGE: ${{ env.DOCKER_TAG }}
DRY_RUN: ${{ github.event.inputs.dry }}
+39
View File
@@ -0,0 +1,39 @@
name: Backup sanity dateset to gcp
on:
workflow_dispatch:
schedule:
# 12.00 every 3 days
- cron: "0 0 */3 * *"
jobs:
execute:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0 # Required to retrieve git history
- uses: actions/setup-node@v1
with:
node-version: 14
- 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: yarn
- name: Export dataset
run: SANITY_TOKEN=${{secrets.SANITY_DATASET_EDITOR_TOKEN}} yarn workspace aksel.nav.no sanity:backup
- name: Upload GCP bucket
uses: "google-github-actions/auth@v0"
with:
credentials_json: "${{ secrets.gcp_credentials_prod }}"
- uses: "google-github-actions/upload-cloud-storage@v0"
with:
path: ./aksel.nav.no/sanity
destination: "aksel-website-prod/backups"
glob: "**/backup-*.tar.gz"
+1 -2
View File
@@ -4,11 +4,10 @@ on:
push:
branches:
- "master"
- "next"
paths:
- "@navikt/**"
pull_request:
branches: [master]
branches: [master, next]
paths:
- "@navikt/**"
+71
View File
@@ -0,0 +1,71 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [master, next]
pull_request:
# The branches below must be a subset of the branches above
branches: [master]
schedule:
- cron: "41 8 * * 6"
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: ["javascript"]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
- name: Checkout repository
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2
# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
+56
View File
@@ -0,0 +1,56 @@
name: E2E / Playwright Tests
on:
push:
branches: [master, next]
paths:
- "aksel.nav.no/**"
pull_request:
branches: [master, next]
paths:
- "aksel.nav.no/**"
jobs:
playwright:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- name: add tokens to .env
run: |
echo "SANITY_WRITE_KEY=${{ secrets.SANITY_FEEDBACK_WRITE_KEY }}" >> aksel.nav.no/website/.env
echo "ALGOLIA_ADMIN=${{ secrets.ALGOLIA_ADMIN }}" >> aksel.nav.no/website/.env
echo "ALGOLIA_ID=${{ secrets.ALGOLIA_ID}}" >> aksel.nav.no/website/.env
echo "TRELLO_TOKEN=${{ secrets.TRELLO_TOKEN }}" >> aksel.nav.no/website/.env
echo "SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }}" >> 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
- 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
- name: build packages
run: |
yarn boot
yarn docgen
- name: Install Playwright Browsers
run: npx playwright install --with-deps
- name: Run Playwright tests
run: yarn workspace website e2e
- uses: actions/upload-artifact@v3
if: always()
with:
name: playwright-report
path: aksel.nav.no/website/playwright-report/
retention-days: 10
+31
View File
@@ -0,0 +1,31 @@
name: "push-to-cdn"
on:
workflow_dispatch:
push:
branches:
- "master"
paths:
- "fonts/**"
jobs:
upload:
runs-on: ubuntu-latest
permissions:
contents: "read"
id-token: "write"
steps:
- uses: "actions/checkout@v3"
- id: upload
uses: nais/frontend-plattform-cdn-upload-action@main
with:
cdn-environment: cdn.nav.no
cdn-team-name: aksel
source: ./fonts
destination: "" # uploads folder to team root
- run: echo uploaded file ${{ steps.upload.outputs.uploaded }}
shell: bash
+2 -2
View File
@@ -27,9 +27,9 @@ jobs:
uses: actions/cache@v3
with:
path: "**/node_modules"
key: ${{ runner.os }}-test-${{ github.sha }}
key: ${{ runner.os }}-prod-${{ github.sha }}
restore-keys: |
${{ runner.os }}-test
${{ runner.os }}-prod
- name: Install dependencies
run: yarn
+25
View File
@@ -0,0 +1,25 @@
name: Indexing search
on:
workflow_dispatch:
schedule:
# 01.00 & 12.00 every day
- cron: "00 01,12 * * *"
jobs:
searchcrawl:
name: Search-indexing aksel.nav.no
runs-on: ubuntu-latest
env:
APPLICATION_ID: ${{ secrets.ALGOLIA_ID}}
API_KEY: ${{ secrets.ALGOLIA_ADMIN }}
steps:
- uses: actions/checkout@v2
- name: Read crawler.json
id: algolia_config
run: echo "::set-output name=config::$(cat ./aksel.nav.no/crawler.json | jq -r tostring)"
- name: Push indices to Algolia
uses: signcl/docsearch-scraper-action@master
env:
APPLICATION_ID: ${{ secrets.ALGOLIA_ID}}
API_KEY: ${{ secrets.ALGOLIA_ADMIN }}
CONFIG: ${{ steps.algolia_config.outputs.config }}
+18 -1
View File
@@ -129,4 +129,21 @@ _docs.json
*/icons/src
*/icons/png
*/core/icons
/storybook-static
/storybook-static
# Aksel.nav.no
.next
!*/website/lib/
!*/website/public/
!aksel.nav.no/**/*.d.ts
!*/sanity/lib/
!*/sanity/static/
out
videos
sanity/scripts/renameField.js
tmp.json
/test-results/
/playwright-report/
/playwright/.cache/
playwright-report/
/test-results/
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh
. "$(dirname $0)/_/husky.sh"
yarn pretty-quick --staged
yarn pretty-quick --staged && yarn lint-staged
-4
View File
@@ -1,4 +0,0 @@
#!/bin/sh
. "$(dirname $0)/_/husky.sh"
yarn lint
+2
View File
@@ -0,0 +1,2 @@
**/nais-dev.yaml
**/nais-prod.yaml
+4
View File
@@ -15,3 +15,7 @@
.rowgap[data-theme="dark"] {
background-color: #262626;
}
.rowgap-wrap {
flex-wrap: wrap;
}
+1
View File
@@ -18,6 +18,7 @@ module.exports = {
stories: () => [...getStories(), "./*.stories.mdx"],
addons: [
"@storybook/addon-a11y",
"@whitespace/storybook-addon-html",
{
name: "@storybook/addon-storysource",
options: {
+40
View File
@@ -1,5 +1,45 @@
# @navikt/ds-codemod
## 2.0.1
## 2.0.0
### Major Changes
- [`6b96e4833`](https://github.com/navikt/Designsystemet/commit/6b96e48330c2e013a1acee85cefccd9ccc1aece4) Thanks [@KenAJoh](https://github.com/KenAJoh)! - v2: Tokens update and font-loading
## 1.5.10
## 1.5.9
## 1.5.8
## 1.5.7
## 1.5.6
## 1.5.5
## 1.5.4
## 1.5.3
## 1.5.2
## 1.5.1
## 1.5.0
## 1.4.4
## 1.4.3
## 1.4.2
## 1.4.1
## 1.4.0
## 1.3.39
### Patch Changes
+84 -20
View File
@@ -1,44 +1,101 @@
# NAV designsystem Codemods
# Aksel Codemods
Collection of Codemods for easier migration between breaking changes.
Highly inspired by both MUI and NEXT
- [NEXT](https://nextjs.org/docs/advanced-features/codemods)
- [MUI](https://github.com/mui/material-ui/tree/master/packages/mui-codemod)
Collection of Codemods for easier migration between breaking changes in NAVs designsystem-packages.
## Usage
Codemod transformations runs code-transformations programmatically in your project. This helps when migrating lots of breaking changes without spending hours doing it manually.
Codemod runs code-transformations programmatically in your project. This helps when migrating breaking changes without spending hours doing it manually.
NOTE: This codemod only supports fairly "default" usage of components. Components used with dynamic imports, styled-components, non-default imports (example `import * as DS from "@navikt/ds-react"` or `from "@navikt/ds-react/cjs"`) will not work as expected.
NOTE: This codemod only supports fairly "default" usage of components. Components used with dynamic imports, styled-components, non-default imports (ex `import * as DS from "@navikt/ds-react"` or `from "@navikt/ds-react/cjs"`) can lead to bugs when using codemod.
```javascript
npx @navikt/ds-codemod <transform> <path>
npx @navikt/ds-codemod <migration> <path>
```
transform - name of transform, see available transforms below.
migraton - name of migraton, see available migraton below.
path - files or directory to transform
```sh
--dry Do a dry-run, no code will be edited
--print Prints the changed output for comparison
--force Runs even if there are uncommited changes (use with caution)
```
## Beta (0.19.x) -> v1.0.0
## V1 -> V2
`npx @navikt/ds-codemod v1.0.0/preset src`
V2.0.0 updated the token-prefix of all tokens + names of all semantic-colors. The migrations below helps when migrating from the formats css, scss, less and js.
### css-tokens (--navds format)
`npx @navikt/ds-codemod v2/css src`
When having redefined a token, you will need to manually find and replace these instances after the codemod-run. A global search for `--v2-migration__` will show all found instances where you had redefined a token.
```diff
.example{
- color: var(--navds-global-color-gray-900);
+ color: var(--a-gray-900);
- --navds-semantic-color-text: red;
+ --v2-migration__navds-semantic-color-text: red;
}
```
### sass/scss-tokens ($navds format)
`npx @navikt/ds-codemod v2/sass src`
```diff
.example{
- color: $navds-global-color-gray-900;
+ color: $a-gray-900;
}
```
### less-tokens (@navds format)
`npx @navikt/ds-codemod v2/less src`
```diff
.example{
- color: @navds-global-color-gray-900;
+ color: @a-gray-900;
}
```
### js-tokens
`npx @navikt/ds-codemod v2/js src`
```diff
- import { NavdsGlobalColorGray900 } from "@navikt/ds-tokens";
+ import { AGray900 } from "@navikt/ds-tokens";
const styled = styled.p`
- color: ${NavdsGlobalColorGray900};
+ color: ${AGray900};
`
```
## Beta (0.19.x) -> v1
`npx @navikt/ds-codemod v1/preset src`
### preset
Combines all avaliable codemods for migrating from beta -> v1.0.0. This transform should only be ran once.
Combines all avaliable codemods for migrating from beta -> v1. This transform should only be ran once.
Includes these transforms
- v1.0.0/tabs
- v1.0.0/chat
- v1.0.0/pagination
- v1/tabs
- v1/chat
- v1/pagination
### tabs
`npx @navikt/ds-codemod v1.0.0/tabs src`
`npx @navikt/ds-codemod v1/tabs src`
```diff
<Tabs
@@ -62,7 +119,7 @@ Includes these transforms
### chat
`npx @navikt/ds-codemodmod v1.0.0/chat src`
`npx @navikt/ds-codemodmod v1/chat src`
```diff
-<SpeechBubble
@@ -86,7 +143,7 @@ Includes these transforms
### pagination
`npx @navikt/ds-codemod v1.0.0/pagination src`
`npx @navikt/ds-codemod v1/pagination src`
This codemod should only be ran once, since the size-scale will keep decreasing for each subsequent iteration.
@@ -104,3 +161,10 @@ This codemod should only be ran once, since the size-scale will keep decreasing
## License
[MIT](https://github.com/navikt/Designsystemet/blob/master/LICENCE)
#
Inspired by both MUI and NEXT
- [NEXT](https://nextjs.org/docs/advanced-features/codemods)
- [MUI](https://github.com/mui/material-ui/tree/master/packages/mui-codemod)
+31 -198
View File
@@ -1,203 +1,36 @@
/**
* Copyright 2015-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/
// Based on https://github.com/reactjs/react-codemod/blob/dd8671c9a470a2c342b221ec903c574cf31e9f57/bin/cli.js
// @next/codemod optional-name-of-transform optional/path/to/src [...options]
import meow, { AnyFlags } from "meow";
import globby from "globby";
import inquirer from "inquirer";
import meow from "meow";
import path from "path";
import execa from "execa";
import chalk from "chalk";
import isGitClean from "is-git-clean";
import { migrate } from "./migrate";
import { cliConfig } from "./config";
export const jscodeshiftExecutable = require.resolve(".bin/jscodeshift");
export const transformerDirectory = path.join(__dirname, "../", "transforms");
const help = `
Usage
$ npx @navikt/ds-codemod ${cliConfig.args
.map((arg) => `<${arg.name}>`)
.join(" ")}
${cliConfig.args.map((arg) => `${arg.name}\t${arg.description}`).join("\n ")}
Options
${Object.entries(cliConfig.flags)
.map(([name, val]: [string, any]) => `--${name}\t${val.description}`)
.join("\n ")}
`;
export function checkGitStatus(force) {
let clean = false;
let errorMessage = "Unable to determine if git directory is clean";
try {
clean = isGitClean.sync(process.cwd());
errorMessage = "Git directory is not clean";
} catch (err) {
if (err && err.stderr && err.stderr.indexOf("Not a git repository") >= 0) {
clean = true;
}
}
const { input, flags } = meow({
description: cliConfig.description,
flags: Object.fromEntries(
Object.entries(cliConfig.flags).map(
([name, flag]: [string, any]): [string, AnyFlags] => [
name,
{
alias: flag.alias,
type: flag.type,
},
]
)
),
help,
});
if (!clean) {
if (force) {
console.log(`WARNING: ${errorMessage}. Forcibly continuing.`);
} else {
console.log("Thank you for using @navikt/ds-codemod");
console.log(
chalk.yellow(
"\nBut before we continue, please stash or commit your git changes."
)
);
console.log(
"\nYou may use the --force flag to override this safety check."
);
process.exit(1);
}
}
}
export function runTransform({ files, flags, transformer }) {
const transformerPath = path.join(transformerDirectory, `${transformer}.js`);
let args = [];
const { dry, print, runInBand } = flags;
if (dry) {
args.push("--dry");
}
if (print) {
args.push("--print");
}
if (runInBand) {
args.push("--run-in-band");
}
args.push("--verbose=2");
args.push("--ignore-pattern=**/node_modules/**");
args.push("--extensions=tsx,ts,jsx,js");
args.push("--parser=tsx");
args = args.concat(["--transform", transformerPath]);
if (flags.jscodeshift) {
args = args.concat(flags.jscodeshift);
}
args = args.concat(files);
console.log(`Executing command: jscodeshift ${args.join(" ")}`);
const result = execa.sync(jscodeshiftExecutable, args, {
stdio: "inherit",
stripFinalNewline: false,
});
if (result.failed) {
throw new Error(`jscodeshift exited with code ${result.exitCode}`);
}
}
const TRANSFORMER_INQUIRER_CHOICES = [
{
name: "v1.0.0/preset: Runs all codemods for beta to v1 migration",
value: "v1.0.0/preset",
},
{
name: "v1.0.0/pagination: Fixes breaking API-changes from <Pagination /> component",
value: "v1.0.0/pagination",
},
{
name: "v1.0.0/tabs: Fixes breaking API-changes from <Tabs /> component",
value: "v1.0.0/tabs",
},
{
name: "v1.0.0/chat: Fixes breaking API-changes from <SpeechBubble /> (now <Chat/>) component",
value: "v1.0.0/chat",
},
];
function expandFilePathsIfNeeded(filesBeforeExpansion) {
const shouldExpandFiles = filesBeforeExpansion.some((file) =>
file.includes("*")
);
return shouldExpandFiles
? globby.sync(filesBeforeExpansion)
: filesBeforeExpansion;
}
export function run() {
const cli = meow({
description: "Codemods for updating @navikt/ds-* packages",
help: `
Usage
$ npx @navikt/codemod <transform> <path> <...options>
transform One of the choices from <link-here>
path Files or directory to transform. Can be a glob like pages/**.js
Options
--force Bypass Git safety checks and forcibly run codemods
--dry Dry run (no changes are made to files)
--print Print transformed files to your terminal
--jscodeshift (Advanced) Pass options directly to jscodeshift
`,
flags: {
boolean: ["force", "dry", "print", "help"],
string: ["_"],
alias: {
h: "help",
},
},
} as meow.Options<meow.AnyFlags>);
if (!cli.flags.dry) {
checkGitStatus(cli.flags.force);
}
if (
cli.input[0] &&
!TRANSFORMER_INQUIRER_CHOICES.find((x) => x.value === cli.input[0])
) {
console.error("Invalid transform choice, pick one of:");
console.error(
TRANSFORMER_INQUIRER_CHOICES.map((x) => "- " + x.value).join("\n")
);
process.exit(1);
}
inquirer
.prompt([
{
type: "input",
name: "files",
message: "On which files or directory should the codemods be applied?",
when: !cli.input[1],
default: ".",
// validate: () =>
filter: (files) => files.trim(),
},
{
type: "list",
name: "transformer",
message: "Which transform would you like to apply?",
when: !cli.input[0],
pageSize: TRANSFORMER_INQUIRER_CHOICES.length,
choices: TRANSFORMER_INQUIRER_CHOICES,
},
])
.then((answers) => {
const { files, transformer } = answers;
const filesBeforeExpansion = cli.input[1] || files;
const filesExpanded = expandFilePathsIfNeeded([filesBeforeExpansion]);
const selectedTransformer = cli.input[0] || transformer;
if (!filesExpanded.length) {
console.log(
`No files found matching ${filesBeforeExpansion.join(" ")}`
);
return null;
}
return runTransform({
files: filesExpanded,
flags: cli.flags,
transformer: selectedTransformer,
});
});
export async function run() {
await migrate(input[0], input[1], flags);
}
+37
View File
@@ -0,0 +1,37 @@
const createCLIConfig = (config: any) => config;
export const cliConfig = createCLIConfig({
description: "Migrations for NAV designsystem solutions",
args: [
{
name: "migration",
description:
"One of the choices from https://github.com/navikt/Designsystemet/blob/master/%40navikt/codemod/README.md",
},
{
name: "path",
description:
"Files or directory to transform. Can be a glob like src/**.css",
},
],
flags: {
dry: {
alias: "d",
description: "Dry run, no changes will be made to files",
type: "boolean",
},
print: {
alias: "p",
description: "Print transformed files",
type: "boolean",
},
force: {
alias: "f",
description: "Forcibly run migrations without checking git-changes",
type: "boolean",
},
},
});
export const DS_MIGRATION_COMMENT =
"ds-codemod: Unable to migrate the following expression. Please upgrade manually.";
+2 -10
View File
@@ -1,13 +1,5 @@
#!/usr/bin/env node
/**
* Copyright 2015-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/
// Based on https://github.com/reactjs/react-codemod/blob/dd8671c9a470a2c342b221ec903c574cf31e9f57/bin/react-codemod.js
// next-codemod optional-name-of-transform optional/path/to/src [...options]
const { run } = require("./cli");
require("./cli").run();
run();
+140
View File
@@ -0,0 +1,140 @@
import fs from "fs";
import path from "path";
import * as jscodeshift from "jscodeshift/src/Runner";
import chalk from "chalk";
import isGitClean from "is-git-clean";
import globby from "globby";
export interface MigrateOptions {
dry?: boolean;
print?: boolean;
force?: boolean;
}
const migrationsMap = [
{
name: "v1/preset: Runs all codemods for beta to v1 migration",
value: "v1/preset",
path: "v1.0.0/preset",
},
{
name: "v1/pagination: Fixes breaking API-changes from <Pagination /> component",
value: "v1/pagination",
path: "v1.0.0/pagination",
},
{
name: "v1/tabs: Fixes breaking API-changes from <Tabs /> component",
value: "v1/tabs",
path: "v1.0.0/tabs",
},
{
name: "v1/chat: Fixes breaking API-changes from <SpeechBubble /> (now <Chat/>) component",
value: "v1/chat",
path: "v1.0.0/chat",
},
{
name: "v2/css: Fixes css-variables",
value: "v2/css",
path: "v2.0.0/update-css-tokens/update-css-tokens",
},
{
name: "v2/js: Fixes js-variables",
value: "v2/js",
path: "v2.0.0/update-js-tokens/update-js-tokens",
},
{
name: "v2/sass: Fixes sass-variables",
value: "v2/sass",
path: "v2.0.0/update-sass-tokens/update-sass-tokens",
},
{
name: "v2/less: Fixes less-variables",
value: "v2/less",
path: "v2.0.0/update-less-tokens/update-less-tokens",
},
];
export async function migrate(
migration: string,
files: string,
options: MigrateOptions = {}
) {
const foundMigration = migrationsMap.find((x) => x.value === migration);
const migrationFile = path.join(
__dirname,
`../transforms/${foundMigration.path}.js`
);
try {
if (!fs.existsSync(migrationFile)) {
throw new Error(`No migration found for ${migration}`);
}
if (!files) throw new Error(`No path provided for migration`);
if (!options.dry) {
checkGitStatus(options.force);
}
const filepaths = globby.sync(files, { cwd: process.cwd() });
if (filepaths.length === 0) {
throw new Error(`No files found for ${files}`);
}
// eslint-disable-next-line no-console
console.log(chalk.green("Running migration:"), migration);
await jscodeshift.run(migrationFile, filepaths, {
babel: true,
ignorePattern: [
"**/node_modules/**",
"**/.next/**",
"**/build/**",
"**/dist/**",
],
extensions: "tsx,ts,jsx,js",
parser: "tsx",
verbose: 2,
runInBand: true,
silent: false,
stdin: false,
...options,
});
} catch (error) {
console.error(error);
process.exit(1);
}
}
export function checkGitStatus(force?: boolean) {
let clean = false;
let errorMessage = "Unable to determine if git directory is clean";
try {
clean = isGitClean.sync(process.cwd());
errorMessage = "Git directory is not clean";
} catch (err: any) {
if (err && err.stderr && err.stderr.indexOf("Not a git repository") >= 0) {
clean = true;
}
}
if (!clean) {
/* eslint-disable no-console */
if (force) {
console.log(`WARNING: ${errorMessage}. Forcibly continuing.`);
} else {
console.log("Thank you for using @navikt/ds-codemod!");
console.log(
chalk.yellow(
"\nBut before we continue, please stash or commit your git changes."
)
);
console.log(
"\nYou may use the --force flag to override this safety check."
);
process.exit(1);
}
}
}
+11 -6
View File
@@ -1,8 +1,8 @@
{
"name": "@navikt/ds-codemod",
"version": "1.3.39",
"description": "NAV designsystem codemods",
"author": "NAV Designsystem team",
"version": "2.0.1",
"description": "Aksel codemods for NAVs designsystem",
"author": "Aksel | NAV designsystem team",
"license": "MIT",
"keywords": [
"react",
@@ -11,13 +11,16 @@
],
"files": [
"transforms/**/*.js",
"utils/**/*.js",
"bin/*.js",
"lib/**/*.js",
"lib/cra-to-next/gitignore"
"lib/cra-to-next/gitignore",
"tokens-map.mjs"
],
"scripts": {
"build": "yarn clean && tsc -p tsconfig.json",
"dev": "yarn clean && tsc --watch -p tsconfig.json",
"start": "./bin/cli.js",
"test": "yarn build && jest",
"test:watch": "jest --watch",
"clean": "node clean.mjs"
@@ -36,7 +39,7 @@
"globby": "11.0.1",
"inquirer": "7.3.3",
"is-git-clean": "1.1.0",
"jest": "^27.5.0",
"jest": "^29.0.0",
"jscodeshift": "0.13.1",
"jscodeshift-add-imports": "1.0.10",
"lodash": "4.17.21",
@@ -44,10 +47,12 @@
"prettier": "2.7.1"
},
"devDependencies": {
"@babel/preset-env": "^7.0.0",
"@types/jest": "^29.0.0",
"@types/jscodeshift": "0.11.5",
"@types/react": "^18.0.0",
"del": "7.0.0",
"typescript": "^4.7.2"
"typescript": "^4.8.0"
},
"sideEffects": false,
"engines": {
+368
View File
@@ -0,0 +1,368 @@
/* prettier-ignore */
const tokens = [
["--navds-semantic-color-text-inverted", "--a-text-on-inverted"],
["--navds-semantic-color-text-muted", "--a-text-subtle"],
["--navds-semantic-color-text", "--a-text-default"],
["--navds-semantic-color-feedback-danger-text", "--a-text-danger"],
["--navds-semantic-color-link-visited", "--a-text-visited"],
["--navds-semantic-color-link", "--a-text-action"],
["--navds-spacing-32", "--a-spacing-32"],
["--navds-spacing-24", "--a-spacing-24"],
["--navds-spacing-20", "--a-spacing-20"],
["--navds-spacing-18", "--a-spacing-18"],
["--navds-spacing-16", "--a-spacing-16"],
["--navds-spacing-14", "--a-spacing-14"],
["--navds-spacing-12", "--a-spacing-12"],
["--navds-spacing-11", "--a-spacing-11"],
["--navds-spacing-10", "--a-spacing-10"],
["--navds-spacing-9", "--a-spacing-9"],
["--navds-spacing-8", "--a-spacing-8"],
["--navds-spacing-7", "--a-spacing-7"],
["--navds-spacing-6", "--a-spacing-6"],
["--navds-spacing-5", "--a-spacing-5"],
["--navds-spacing-4", "--a-spacing-4"],
["--navds-spacing-3", "--a-spacing-3"],
["--navds-spacing-2", "--a-spacing-2"],
["--navds-spacing-1", "--a-spacing-1"],
["--navds-global-color-purple-900", "--a-purple-900"],
["--navds-global-color-purple-800", "--a-purple-800"],
["--navds-global-color-purple-700", "--a-purple-700"],
["--navds-global-color-purple-600", "--a-purple-600"],
["--navds-global-color-purple-500", "--a-purple-500"],
["--navds-global-color-purple-400", "--a-purple-400"],
["--navds-global-color-purple-300", "--a-purple-300"],
["--navds-global-color-purple-200", "--a-purple-200"],
["--navds-global-color-purple-100", "--a-purple-100"],
["--navds-global-color-purple-50", "--a-purple-50"],
["--navds-global-color-orange-900", "--a-orange-900"],
["--navds-global-color-orange-800", "--a-orange-800"],
["--navds-global-color-orange-700", "--a-orange-700"],
["--navds-global-color-orange-600", "--a-orange-600"],
["--navds-global-color-orange-500", "--a-orange-500"],
["--navds-global-color-orange-400", "--a-orange-400"],
["--navds-global-color-orange-300", "--a-orange-300"],
["--navds-global-color-orange-200", "--a-orange-200"],
["--navds-global-color-orange-100", "--a-orange-100"],
["--navds-global-color-orange-50", "--a-orange-50"],
["--navds-global-color-limegreen-900", "--a-limegreen-900"],
["--navds-global-color-limegreen-800", "--a-limegreen-800"],
["--navds-global-color-limegreen-700", "--a-limegreen-700"],
["--navds-global-color-limegreen-600", "--a-limegreen-600"],
["--navds-global-color-limegreen-500", "--a-limegreen-500"],
["--navds-global-color-limegreen-400", "--a-limegreen-400"],
["--navds-global-color-limegreen-300", "--a-limegreen-300"],
["--navds-global-color-limegreen-200", "--a-limegreen-200"],
["--navds-global-color-limegreen-100", "--a-limegreen-100"],
["--navds-global-color-limegreen-50", "--a-limegreen-50"],
["--navds-global-color-lightblue-900", "--a-lightblue-900"],
["--navds-global-color-lightblue-800", "--a-lightblue-800"],
["--navds-global-color-lightblue-700", "--a-lightblue-700"],
["--navds-global-color-lightblue-600", "--a-lightblue-600"],
["--navds-global-color-lightblue-500", "--a-lightblue-500"],
["--navds-global-color-lightblue-400", "--a-lightblue-400"],
["--navds-global-color-lightblue-300", "--a-lightblue-300"],
["--navds-global-color-lightblue-200", "--a-lightblue-200"],
["--navds-global-color-lightblue-100", "--a-lightblue-100"],
["--navds-global-color-lightblue-50", "--a-lightblue-50"],
["--navds-global-color-green-900", "--a-green-900"],
["--navds-global-color-green-800", "--a-green-800"],
["--navds-global-color-green-700", "--a-green-700"],
["--navds-global-color-green-600", "--a-green-600"],
["--navds-global-color-green-500", "--a-green-500"],
["--navds-global-color-green-400", "--a-green-400"],
["--navds-global-color-green-300", "--a-green-300"],
["--navds-global-color-green-200", "--a-green-200"],
["--navds-global-color-green-100", "--a-green-100"],
["--navds-global-color-green-50", "--a-green-50"],
["--navds-global-color-deepblue-900", "--a-deepblue-900"],
["--navds-global-color-deepblue-800", "--a-deepblue-800"],
["--navds-global-color-deepblue-700", "--a-deepblue-700"],
["--navds-global-color-deepblue-600", "--a-deepblue-600"],
["--navds-global-color-deepblue-500", "--a-deepblue-500"],
["--navds-global-color-deepblue-400", "--a-deepblue-400"],
["--navds-global-color-deepblue-300", "--a-deepblue-300"],
["--navds-global-color-deepblue-200", "--a-deepblue-200"],
["--navds-global-color-deepblue-100", "--a-deepblue-100"],
["--navds-global-color-deepblue-50", "--a-deepblue-50"],
["--navds-global-color-red-900", "--a-red-900"],
["--navds-global-color-red-800", "--a-red-800"],
["--navds-global-color-red-700", "--a-red-700"],
["--navds-global-color-red-600", "--a-red-600"],
["--navds-global-color-red-500", "--a-red-500"],
["--navds-global-color-red-400", "--a-red-400"],
["--navds-global-color-red-300", "--a-red-300"],
["--navds-global-color-red-200", "--a-red-200"],
["--navds-global-color-red-100", "--a-red-100"],
["--navds-global-color-red-50", "--a-red-50"],
["--navds-global-color-blue-900", "--a-blue-900"],
["--navds-global-color-blue-800", "--a-blue-800"],
["--navds-global-color-blue-700", "--a-blue-700"],
["--navds-global-color-blue-600", "--a-blue-600"],
["--navds-global-color-blue-500", "--a-blue-500"],
["--navds-global-color-blue-400", "--a-blue-400"],
["--navds-global-color-blue-300", "--a-blue-300"],
["--navds-global-color-blue-200", "--a-blue-200"],
["--navds-global-color-blue-100", "--a-blue-100"],
["--navds-global-color-blue-50", "--a-blue-50"],
["--navds-global-color-gray-900", "--a-gray-900"],
["--navds-global-color-gray-800", "--a-gray-800"],
["--navds-global-color-gray-700", "--a-gray-700"],
["--navds-global-color-gray-600", "--a-gray-600"],
["--navds-global-color-gray-500", "--a-gray-500"],
["--navds-global-color-gray-400", "--a-gray-400"],
["--navds-global-color-gray-300", "--a-gray-300"],
["--navds-global-color-gray-200", "--a-gray-200"],
["--navds-global-color-gray-100", "--a-gray-100"],
["--navds-global-color-gray-50", "--a-gray-50"],
["--navds-global-color-nav-red", "--a-nav-red"],
["--navds-global-color-white", "--a-white"],
["--navds-global-color-transparent", "--a-transparent"],
["--navds-border-radius-full", "--a-border-radius-full"],
["--navds-border-radius-xlarge", "--a-border-radius-xlarge"],
["--navds-border-radius-large", "--a-border-radius-large"],
["--navds-border-radius-medium", "--a-border-radius-medium"],
["--navds-border-radius-small", "--a-border-radius-small"],
["--navds-z-index-tooltip", "--a-z-index-tooltip"],
["--navds-z-index-focus", "--a-z-index-focus"],
["--navds-z-index-popover", "--a-z-index-popover"],
["--navds-z-index-modal", "--a-z-index-modal"],
["--navds-font-weight-regular", "--a-font-weight-regular"],
["--navds-font-weight-bold", "--a-font-weight-bold"],
["--navds-font-size-small", "--a-font-size-small"],
["--navds-font-size-medium", "--a-font-size-medium"],
["--navds-font-size-large", "--a-font-size-large"],
["--navds-font-size-xlarge", "--a-font-size-xlarge"],
["--navds-font-size-heading-xsmall", "--a-font-size-heading-xsmall"],
["--navds-font-size-heading-small", "--a-font-size-heading-small"],
["--navds-font-size-heading-medium", "--a-font-size-heading-medium"],
["--navds-font-size-heading-large", "--a-font-size-heading-large"],
["--navds-font-size-heading-xlarge", "--a-font-size-heading-xlarge"],
["--navds-font-size-heading-2xlarge", "--a-font-size-heading-2xlarge"],
["--navds-font-line-height-medium", "--a-font-line-height-medium"],
["--navds-font-line-height-large", "--a-font-line-height-large"],
["--navds-font-line-height-xlarge", "--a-font-line-height-xlarge"],
["--navds-font-line-height-heading-xsmall","--a-font-line-height-heading-xsmall"],
["--navds-font-line-height-heading-small","--a-font-line-height-heading-small"],
["--navds-font-line-height-heading-medium","--a-font-line-height-heading-medium"],
["--navds-font-line-height-heading-large","--a-font-line-height-heading-large"],
["--navds-font-line-height-heading-xlarge","--a-font-line-height-heading-xlarge"],
["--navds-font-line-height-heading-2xlarge","--a-font-line-height-heading-2xlarge"],
["--navds-font-family", "--a-font-family"],
["--navds-semantic-color-feedback-info-icon", "--a-icon-info"],
["--navds-semantic-color-feedback-warning-icon", "--a-icon-warning"],
["--navds-semantic-color-feedback-danger-icon", "--a-icon-danger"],
["--navds-semantic-color-feedback-success-icon", "--a-icon-success"],
["--navds-semantic-color-feedback-info-background", "--a-surface-info-subtle"],
["--navds-semantic-color-feedback-warning-background", "--a-surface-warning-subtle"],
["--navds-semantic-color-interaction-danger-selected", "--a-surface-danger-active"],
["--navds-semantic-color-interaction-danger-hover", "--a-surface-danger-hover"],
["--navds-semantic-color-interaction-danger", "--a-surface-danger"],
["--navds-semantic-color-feedback-danger-background", "--a-surface-danger-subtle"],
["--navds-semantic-color-feedback-success-background", "--a-surface-success-subtle"],
["--navds-semantic-color-interaction-primary-hover-subtle","--a-surface-action-subtle-hover"],
["--navds-semantic-color-interaction-primary-selected","--a-surface-action-selected"],
["--navds-semantic-color-interaction-primary-hover","--a-surface-action-hover"],
["--navds-semantic-color-interaction-primary", "--a-surface-action"],
["--navds-semantic-color-canvas-background-inverted", "--a-surface-inverted"],
["--navds-semantic-color-component-background-inverted", "--a-surface-inverted"],
["--navds-semantic-color-component-background-alternate", "--a-surface-subtle"],
["--navds-semantic-color-component-background-light", "--a-surface-default"],
["--navds-semantic-color-canvas-background-light", "--a-bg-default"],
["--navds-semantic-color-canvas-background", "--a-bg-subtle"],
["--navds-semantic-color-border-inverted", "--a-border-on-inverted"],
["--navds-semantic-color-border-muted", "--a-border-default"],
["--navds-semantic-color-border", "--a-border-strong"],
["--navds-semantic-color-focus-inverted", "--a-border-focus-on-inverted"],
["--navds-semantic-color-focus", "--a-border-focus"],
["--navds-semantic-color-feedback-info-border", "--a-border-info"],
["--navds-semantic-color-feedback-warning-border", "--a-border-warning"],
["--navds-semantic-color-feedback-danger-border", "--a-border-danger"],
["--navds-semantic-color-feedback-success-border", "--a-border-success"],
["--navds-semantic-color-divider", "--a-border-divider"],
["--navds-shadow-focus-inverted", "--a-shadow-focus-inverted"],
["--navds-shadow-focus", "--a-shadow-focus"],
["--navds-shadow-xsmall", "--a-shadow-xsmall"],
["--navds-shadow-small", "--a-shadow-small"],
["--navds-shadow-medium", "--a-shadow-medium"],
["--navds-shadow-large", "--a-shadow-large"],
["--navds-shadow-xlarge", "--a-shadow-xlarge"],
/* Components */
["--navds-modal-color-overlay", "--a-surface-backdrop"],
["--navds-accordion-color-border", "--a-border-strong"],
["--navds-accordion-color-text-hover", "--a-surface-action"],
["--navds-accordion-color-border-hover", "--a-surface-action"],
["--navds-accordion-color-background-open", "--a-surface-action-subtle"],
["--navds-alert-color-error-border", "--a-border-danger"],
["--navds-alert-color-error-background", "--a-surface-danger-subtle"],
["--navds-alert-color-warning-border", "--a-border-warning"],
["--navds-alert-color-warning-background", "--a-surface-warning-subtle"],
["--navds-alert-color-info-border", "--a-border-info"],
["--navds-alert-color-info-background", "--a-surface-info-subtle"],
["--navds-alert-color-success-border", "--a-border-success"],
["--navds-alert-color-success-background", "--a-surface-success-subtle"],
["--navds-alert-color-border", "--a-border-default"],
["--navds-chat-color-avatar-background", "--a-bg-subtle"],
["--navds-chat-color-background", "--a-bg-subtle"],
["--navds-chat-color-avatar", "--a-text-default"],
["--navds-guide-panel-color-illustration-background", "--a-surface-action-subtle"],
["--navds-guide-panel-color-background", "--a-surface-default"],
["--navds-guide-panel-color-border", "--a-border-action"],
["--navds-error-summary-color-background", "--a-surface-default"],
["--navds-error-summary-color-border", "--a-border-danger"],
["--navds-confirmation-panel-color-background-checked", "--a-surface-success-subtle"],
["--navds-confirmation-panel-color-background-error", "--a-surface-danger-subtle"],
["--navds-confirmation-panel-color-border-checked", "--a-border-success"],
["--navds-confirmation-panel-color-border-error", "--a-border-danger"],
["--navds-confirmation-panel-color-background", "--a-surface-warning-subtle"],
["--navds-confirmation-panel-color-border", "--a-border-warning"],
["--navds-radio-checkbox-color-background-hover", "--a-surface-action-subtle"],
["--navds-radio-checkbox-color-background-checked", "--a-surface-action"],
["--navds-radio-checkbox-color-shadow-hover", "--a-surface-action"],
["--navds-radio-checkbox-color-shadow-checked", "--a-surface-action"],
["--navds-radio-checkbox-color-shadow-error", "--a-surface-danger"],
["--navds-radio-checkbox-color-label-hover", "--a-surface-action"],
["--navds-radio-checkbox-color-background", "--a-surface-default"],
["--navds-radio-checkbox-color-text", "--a-text-default"],
["--navds-radio-checkbox-color-shadow", "--a-border-strong"],
["--navds-select-color-border-hover", "--a-surface-action"],
["--navds-select-color-border-error", "--a-surface-danger"],
["--navds-select-color-shadow-error", "--a-surface-danger"],
["--navds-select-color-border-disabled","--a-gray-400"],
["--navds-select-color-background-disabled", "--a-surface-subtle"],
["--navds-switch-color-label-hover", "--a-surface-action"],
["--navds-select-color-background", "--a-surface-default"],
["--navds-select-color-border", "--a-border-strong"],
["--navds-switch-color-label", "--a-text-default"],
["--navds-switch-color-track-background-hover-checked", "--a-icon-success"],
["--navds-switch-color-track-shadow-inner-focus", "--a-surface-default"],
["--navds-switch-color-track-background-checked", "--a-border-success"],
["--navds-switch-color-track-background-hover", "--a-surface-neutral-hover"],
["--navds-switch-color-track-background", "--a-surface-neutral"],
["--navds-switch-color-thumb-icon-checked", "--a-border-success"],
["--navds-switch-color-thumb-loader-checked", "--a-border-success"],
["--navds-switch-color-thumb-icon", "--a-icon-subtle"],
["--navds-switch-color-thumb", "--a-surface-default"],
["--navds-textarea-color-counter-text-error", "--a-surface-danger"],
["--navds-textarea-color-border-hover", "--a-surface-action"],
["--navds-textarea-color-border-error", "--a-surface-danger"],
["--navds-textarea-color-shadow-error", "--a-surface-danger"],
["--navds-textarea-color-counter-text", "--a-text-subtle"],
["--navds-textarea-color-text-disabled", "--a-text-default"],
["--navds-textarea-color-border-disabled", "--a-gray-400"],
["--navds-textarea-color-background-disabled", "--a-surface-subtle"],
["--navds-textarea-color-background", "--a-surface-default"],
["--navds-textarea-color-border", "--a-border-strong"],
["--navds-help-text-color-popover-background", "--a-surface-info-subtle"],
["--navds-help-text-color-background-hover", "--a-surface-action"],
["--navds-help-text-color-background-focus", "--a-surface-action"],
["--navds-help-text-color-shadow-hover", "--a-surface-action"],
["--navds-help-text-color-hover", "--a-surface-default"],
["--navds-help-text-color-focus", "--a-surface-default"],
["--navds-help-text-color", "--a-surface-action"],
["--navds-link-color-text-focus", "--a-text-on-action"],
["--navds-link-color-text-active", "--a-text-on-action"],
["--navds-link-color-text", "--a-text-action"],
["--navds-link-color-icon", "--a-icon-action"],
["--navds-link-color-icon-focus", "--a-icon-on-action"],
["--navds-link-color-background-focus", "--a-border-focus"],
["--navds-link-color-background-active", "--a-border-focus"],
["--navds-link-color-on-info-background", "--a-text-default"],
["--navds-link-color-on-error-background", "--a-text-default"],
["--navds-loader-color-neutral-foreground", "--a-border-default"],
["--navds-loader-color-interaction-foreground", "--a-surface-action"],
["--navds-loader-color-inverted-foreground", "--a-surface-default"],
["--navds-loader-color-transparent-background", "--a-surface-transparent"],
["--navds-loader-color-foreground", "--a-border-default"],
["--navds-loader-color-background", "--a-surface-active"],
["--navds-modal-color-background", "--a-surface-default"],
["--navds-pagination-color-text-selected", "--a-text-on-action"],
["--navds-pagination-color-background-selected", "--a-surface-action-selected"],
["--navds-popover-color-background", "--a-surface-default"],
["--navds-popover-color-border", "--a-border-default"],
["--navds-tag-color-info-background", "--a-surface-info-subtle"],
["--navds-tag-color-info-border", "--a-border-info"],
["--navds-tag-color-warning-background", "--a-surface-warning-subtle"],
["--navds-tag-color-warning-border", "--a-border-warning"],
["--navds-tag-color-success-background", "--a-surface-success-subtle"],
["--navds-tag-color-success-border", "--a-border-success"],
["--navds-tag-color-error-background", "--a-surface-danger-subtle"],
["--navds-tag-color-error-border", "--a-border-danger"],
["--navds-tag-color-border", "--a-border-default"],
["--navds-tag-color-background", "--a-surface-subtle"],
["--navds-toggle-group-color-background-hover", "--a-surface-action-subtle"],
["--navds-toggle-group-color-text-hover", "--a-surface-action"],
["--navds-toggle-group-color-background-pressed", "--a-surface-action-selected"],
["--navds-toggle-group-color-text-pressed", "--a-text-on-action"],
["--navds-toggle-group-color-background", "--a-surface-default"],
["--navds-toggle-group-color-text", "--a-text-default"],
["--navds-toggle-group-color-border", "--a-border-divider"],
["--navds-panel-color-background", "--a-surface-default"],
["--navds-panel-color-border", "--a-border-default"],
["--navds-link-panel-color-border-hover", "--a-surface-action"],
["--navds-link-panel-color-title-hover", "--a-text-action"],
["--navds-link-panel-color-text", "--a-text-default"],
["--navds-table-row-color-background-selected-hover", "--a-surface-action-subtle-hover"],
["--navds-table-row-color-background-hover", "--a-bg-subtle"],
["--navds-table-row-color-background-selected", "--a-surface-action-subtle"],
["--navds-table-row-color-background-zebra", "--a-surface-subtle"],
["--navds-table-cell-color-border-hover", "--a-border-strong"],
["--navds-table-cell-color-border", "--a-border-default"],
["--navds-button-color-primary-background-hover", "--a-surface-action-hover"],
["--navds-button-color-primary-background-active", "--a-surface-action-active"],
["--navds-button-color-primary-border-focus", "--a-surface-default"],
["--navds-button-color-primary-text", "--a-text-on-action"],
["--navds-button-color-primary-background", "--a-surface-action"],
["--navds-button-color-secondary-border-focus-active-hover", "--a-surface-default"],
["--navds-button-color-secondary-text-hover", "--a-text-action"],
["--navds-button-color-secondary-text-active", "--a-text-on-action"],
["--navds-button-color-secondary-background-hover", "--a-surface-action-subtle-hover"],
["--navds-button-color-secondary-background-active", "--a-surface-action-active"],
["--navds-button-color-secondary-border", "--a-border-action"],
["--navds-button-color-secondary-text", "--a-text-action"],
["--navds-button-color-secondary-background", "--a-surface-default"],
["--navds-button-color-tertiary-background-hover", "--a-surface-action-subtle-hover"],
["--navds-button-color-tertiary-border-focus", "--a-border-action"],
["--navds-button-color-tertiary-border-active", "--a-surface-default"],
["--navds-button-color-tertiary-background-active", "--a-surface-action-active"],
["--navds-button-color-tertiary-text-active", "--a-text-on-action"],
["--navds-button-color-tertiary-text", "--a-text-action"],
["--navds-button-color-danger-background-hover", "--a-surface-danger-hover"],
["--navds-button-color-danger-background-active", "--a-surface-danger-active"],
["--navds-button-color-danger-border-focus", "--a-surface-default"],
["--navds-button-color-danger-background", "--a-surface-danger"],
["--navds-button-color-danger-text", "--a-text-on-danger"],
["--navds-error-message-color-text", "--a-text-danger"],
["--navds-search-color-border-hover", "--a-border-action"],
["--navds-search-color-clear-hover", "--a-text-action"],
["--navds-search-color-border-error", "--a-border-danger"],
["--navds-search-color-text", "--a-text-default"],
["--navds-search-color-border", "--a-border-default"],
["--navds-text-field-color-border-hover", "--a-border-action"],
["--navds-text-field-color-border-error", "--a-border-danger"],
["--navds-text-field-color-shadow-error", "--a-border-danger"],
["--navds-text-field-color-border-disabled", "--a-gray-400"],
["--navds-text-field-color-background-disabled", "--a-surface-subtle"],
["--navds-text-field-color-placeholder-text", "--a-text-subtle"],
["--navds-text-field-color-text-disabled", "--a-text-default"],
["--navds-text-field-color-text", "--a-text-default"],
["--navds-text-field-color-background", "--a-surface-default"],
["--navds-text-field-color-border", "--a-border-default"],
["--navds-dropdown-menu-color", "--a-text-default"],
["--navdsi-dropdown-item-color-text", "--a-text-action"],
["--navdsi-dropdown-item-color-background-hover", "--a-surface-action-subtle-hover"],
["--navdsi-dropdown-item-color-background-active", "--a-surface-action-active"],
["--navds-dropdown-item-color-focus", "--a-border-focus"],
["--navdsi-header-color-text", "--a-text-on-inverted"],
["--navdsi-header-color-background", "--a-surface-inverted"],
["--navdsi-header-color-border", "--a-gray-600"],
["--navdsi-header-color-hover", "--a-surface-inverted-hover"],
["--navdsi-header-color-active", "--a-surface-inverted-active"],
["--navds-button-icon-adjustment", "--ac-button-icon-margin"]
]
module.exports = { tokens };
@@ -2,6 +2,6 @@
color: var(--a-blue-100);
color: var(--a-red-100);
--a-red-100: var(--a-green-100);
--a-blue-100: red;
--v2-migration__navds-global-color-red-100: var(--a-green-100);
--v2-migration__navds-global-color-blue-100: red;
}
@@ -1,6 +1,6 @@
const StyledDiv = styled`
--a-red-100: var(--a-green-100);
--a-blue-100: red;
--v2-migration__navds-global-color-red-100: var(--a-green-100);
--v2-migration__navds-global-color-blue-100: red;
.test{
color: var(--a-blue-100);
@@ -1,30 +1,18 @@
// TODO: Hent utenfra
export const tokens = [
["--navds-global-color-red-100", "--a-red-100"],
["--navds-global-color-green-100", "--a-green-100"],
["--navds-global-color-blue-100", "--a-blue-100"],
["--navds-global-color-blue-200", "--a-blue-200"],
["--navds-global-color-blue-400", "--a-blue-400"],
["--navds-global-color-green-100", "--a-green-100"],
["--navds-global-color-green-500", "--a-green-500"],
["--navds-semantic-color-link", "--a-text-action"],
["--navds-global-color-gray-100", "--a-gray-100"],
["--navds-global-color-gray-400", "--a-gray-400"],
["--navds-global-color-gray-600", "--a-gray-600"],
[
"--navds-semantic-color-interaction-primary-hover-subtle",
"--a-surface-action-subtle",
],
["--navds-semantic-color-canvas-background-inverted", "--a-surface-inverted"],
];
import { tokens } from "../../../tokens-map.mjs";
/**
* @param {import('jscodeshift').FileInfo} file
* @param {import('jscodeshift').API} api
*/
export default function transformer(file, api, options) {
export default function transformer(file, api) {
let src = file.source;
tokens.forEach((tok) => {
// eslint-disable-next-line no-useless-concat
const rgx = new RegExp("(" + `${tok[0]}:` + ")", "gm");
src = src.replace(rgx, `--v2-migration${tok[0].replace("--", "__")}:`);
});
tokens.forEach((tok) => {
const rgx = new RegExp("(" + tok[0] + ")", "gm");
src = src.replace(rgx, tok[1]);
@@ -5,7 +5,7 @@ import {
renameImportSpecifier,
} from "../../../utils/imports";
import { translateToken } from "../../../utils/translate-token";
import { tokens } from "../update-css-tokens/update-css-tokens";
import { tokens } from "../../../tokens-map.mjs";
/**
* @param {import('jscodeshift').FileInfo} file
@@ -1,11 +1,11 @@
import { translateToken } from "../../../utils/translate-token";
import { tokens } from "../update-css-tokens/update-css-tokens";
import { tokens } from "../../../tokens-map.mjs";
/**
* @param {import('jscodeshift').FileInfo} file
* @param {import('jscodeshift').API} api
*/
export default function transformer(file) {
export default function transformer(file, api) {
let src = file.source;
tokens.forEach((tok) => {
@@ -1,11 +1,11 @@
import { translateToken } from "../../../utils/translate-token";
import { tokens } from "../update-css-tokens/update-css-tokens";
import { tokens } from "../../../tokens-map.mjs";
/**
* @param {import('jscodeshift').FileInfo} file
* @param {import('jscodeshift').API} api
*/
export default function transformer(file) {
export default function transformer(file, api) {
let src = file.source;
tokens.forEach((tok) => {
@@ -1,3 +0,0 @@
.test {
@apply bg-canvas-background-inverted text-interaction-primary-hover-subtle/20;
}
@@ -1,10 +0,0 @@
export const demo = () => (
<div
className={cl(
"bg-white text-text shadow-small ring-gray-900/10 hover:shadow-medium active:text-link",
className
)}
>
<div className="bg-canvas-background-inverted text-interaction-primary-hover-subtle"></div>
</div>
);
@@ -1,3 +0,0 @@
.test {
@apply bg-surface-inverted text-surface-action-subtle/20;
}
@@ -1,10 +0,0 @@
export const demo = () => (
<div
className={cl(
"bg-white text-text shadow-small ring-gray-900/10 hover:shadow-medium active:text-text-action",
className
)}
>
<div className="bg-surface-inverted text-surface-action-subtle"></div>
</div>
);
@@ -1,18 +0,0 @@
import { check } from "../../../../utils/check";
const migration = "update-tailwind-tokens";
const fixtures = ["complete"];
for (const fixture of fixtures) {
check(__dirname, {
fixture,
migration,
extension: "js",
});
check(__dirname, {
fixture,
migration,
extension: "css",
});
}
@@ -1,34 +0,0 @@
import { tokens } from "../update-css-tokens/update-css-tokens";
/* Cherry-picks object keys we want */
const semanticTokens = () =>
tokens
.filter((val) => val[0].startsWith("--navds-semantic-color"))
.map((val) => {
return [
val[0].replace("--navds-semantic-color-", ""),
val[1].replace("--a-", ""),
];
});
/**
* @param {import('jscodeshift').FileInfo} file
* @param {import('jscodeshift').API} api
*/
export default function transformer(file, api, options) {
let src = file.source;
const colors = semanticTokens();
const duplicateText: string[][] = [];
colors.forEach(
(x) =>
x[0].startsWith("text-") && duplicateText.push(["text-" + x[0], x[1]])
);
[...duplicateText, ...colors].forEach((tok) => {
const rgx = new RegExp("(" + tok[0] + ")", "gm");
src = src.replace(rgx, tok[1]);
});
return src;
}
+78
View File
@@ -1,5 +1,83 @@
# @navikt/ds-css
## 2.0.1
### Patch Changes
- [`e8007328d`](https://github.com/navikt/Designsystemet/commit/e8007328db3f6d5be696cf24f03304c79be0f3f7) Thanks [@KenAJoh](https://github.com/KenAJoh)! - Bugfixer ved bruk av tokens
## 2.0.0
### Major Changes
- [`6b96e4833`](https://github.com/navikt/Designsystemet/commit/6b96e48330c2e013a1acee85cefccd9ccc1aece4) Thanks [@KenAJoh](https://github.com/KenAJoh)! - v2: Tokens update and font-loading
## 1.5.10
## 1.5.9
### Patch Changes
- 4px -> 2px gap chips-toggle active
## 1.5.8
## 1.5.7
## 1.5.6
## 1.5.5
## 1.5.4
### Patch Changes
- [#1709](https://github.com/navikt/Designsystemet/pull/1709) [`77302a30b`](https://github.com/navikt/Designsystemet/commit/77302a30b8eef8dc00b2d2e9c904a3f57da81a11) Thanks [@KenAJoh](https://github.com/KenAJoh)! - Oppdatert ikoner
## 1.5.3
### Patch Changes
- Byttet om på alt-farge rekkefølge
## 1.5.2
### Patch Changes
- :memo: Rename FilterChips to ToggleChips
## 1.5.1
### Patch Changes
- Flex-wrap chips.css
## 1.5.0
### Minor Changes
- [#1684](https://github.com/navikt/Designsystemet/pull/1684) [`e19bf67b3`](https://github.com/navikt/Designsystemet/commit/e19bf67b337dea39989c68b5e9c2591cf0d5b40f) Thanks [@KenAJoh](https://github.com/KenAJoh)! - :sparkles: Oppdaterte tag-varianter
- [#1668](https://github.com/navikt/Designsystemet/pull/1668) [`97c5f60e9`](https://github.com/navikt/Designsystemet/commit/97c5f60e9111da7e08f55c8d0aa29581f0a9b1ca) Thanks [@KenAJoh](https://github.com/KenAJoh)! - Chips komponent :sparkles:
## 1.4.4
## 1.4.3
### Patch Changes
- :sparkles: Validering og inputFormat i Date-komponenter
## 1.4.2
## 1.4.1
### Patch Changes
- [`3c08651df`](https://github.com/navikt/Designsystemet/commit/3c08651df28c3e19dd8c8a7a1d0032200bec473d) Thanks [@KenAJoh](https://github.com/KenAJoh)! - Date-komponenter følger språkrådets dato-formatering for måneder.
## 1.4.0
## 1.3.39
### Patch Changes
+6 -13
View File
@@ -1,29 +1,22 @@
# NAV designsystem styling
# Aksel styling
CSS-package containing design for @navikt/ds-react and more.
CSS for NAVs designsystem.
- All our tokens (Colors, border, shadows etc)
- Css tokens (Colors, border, shadows etc)
- Component-styling for `@navikt/ds-react` packages
- Normalize.css v8
- Fonts
- Font-loading
## Installation
Install `@navikt/ds-css` with yarn
```bash
yarn add @navikt/ds-css
```
Install `@navikt/ds-css` with npm
```bash
npm install @navikt/ds-css
```
## Usage
You can import these styles once to make it accessible in your entire project. Typically you will add the following line to your root .js or .ts files.
Import styles once to make it accessible for your entire project. Typically you will add the following line to your root .tsx file.
```javascript
import "@navikt/ds-css";
@@ -33,7 +26,7 @@ function App() {
}
```
But you can also import it in a .css-file like this
But you can import it in a .css-file
```css
@import "@navikt/ds-css";
+11 -19
View File
@@ -1,11 +1,3 @@
:root,
:host {
--navds-accordion-color-text-hover: var(--navds-semantic-color-interaction-primary);
--navds-accordion-color-border: var(--navds-semantic-color-border);
--navds-accordion-color-border-hover: var(--navds-semantic-color-interaction-primary);
--navds-accordion-color-background-open: var(--navds-semantic-color-interaction-primary-hover-subtle);
}
.navds-accordion__item:focus-within {
position: relative;
}
@@ -15,24 +7,24 @@
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: var(--navds-spacing-2);
padding: 14px var(--navds-spacing-3) var(--navds-spacing-3);
gap: var(--a-spacing-2);
padding: 14px var(--a-spacing-3) var(--a-spacing-3);
margin: 0;
text-align: left;
background: transparent;
cursor: pointer;
border: none;
border-bottom: 2px solid var(--navds-accordion-color-border);
border-bottom: 2px solid var(--a-border-strong);
}
.navds-accordion__header:focus {
outline: none;
box-shadow: var(--navds-shadow-focus);
box-shadow: var(--a-shadow-focus);
}
.navds-accordion__header:hover {
color: var(--navds-accordion-color-text-hover);
border-color: var(--navds-accordion-color-border-hover);
color: var(--ac-accordion-header-text-hover, var(--a-text-action-on-action-subtle));
border-color: var(--ac-accordion-header-border-hover, var(--a-border-strong));
}
.navds-accordion__header-content {
@@ -41,17 +33,17 @@
}
.navds-accordion__item--open > .navds-accordion__header {
background-color: var(--navds-accordion-color-background-open);
border-color: var(--navds-accordion-color-background-open);
background-color: var(--ac-accordion-item-bg-open, var(--a-surface-action-subtle));
border-color: var(--ac-accordion-item-border-open, var(--a-surface-action-subtle));
}
.navds-accordion__content {
padding: var(--navds-spacing-3) var(--navds-spacing-3) 18px;
border-bottom: 2px solid var(--navds-accordion-color-border);
padding: var(--a-spacing-3) var(--a-spacing-3) 18px;
border-bottom: 2px solid var(--ac-accordion-content-border, var(--a-border-strong));
}
.navds-accordion__item--open > .navds-accordion__header:hover + * .navds-accordion__content {
border-color: var(--navds-accordion-color-border-hover);
border-color: var(--ac-accordion-content-border-open, var(--a-border-strong));
}
.navds-accordion__expand-icon {
+14 -28
View File
@@ -1,23 +1,9 @@
:root,
:host {
--navds-alert-color-border: var(--navds-semantic-color-border-muted);
--navds-alert-color-error-border: var(--navds-semantic-color-feedback-danger-border);
--navds-alert-color-error-background: var(--navds-global-color-red-50);
--navds-alert-color-warning-border: var(--navds-semantic-color-feedback-warning-border);
--navds-alert-color-warning-background: var(--navds-global-color-orange-50);
--navds-alert-color-info-border: var(--navds-semantic-color-feedback-info-border);
--navds-alert-color-info-background: var(--navds-global-color-lightblue-50);
--navds-alert-color-success-border: var(--navds-semantic-color-feedback-success-border);
--navds-alert-color-success-background: var(--navds-global-color-green-50);
}
.navds-alert {
border-radius: var(--navds-border-radius-medium);
border-radius: var(--a-border-radius-medium);
border: 1px solid;
border-color: var(--navds-alert-color-border);
padding: var(--navds-spacing-4);
padding: var(--a-spacing-4);
display: flex;
gap: var(--navds-spacing-3);
gap: var(--a-spacing-3);
align-items: center;
}
@@ -26,7 +12,7 @@
}
.navds-alert--small {
padding: var(--navds-spacing-2) var(--navds-spacing-4);
padding: var(--a-spacing-2) var(--a-spacing-4);
}
.navds-alert--full-width {
@@ -37,32 +23,32 @@
flex-shrink: 0;
font-size: 1.5rem;
align-self: flex-start;
height: var(--navds-font-line-height-xlarge);
height: var(--a-font-line-height-xlarge);
}
.navds-alert--small > .navds-alert__icon {
font-size: 1.25rem;
height: var(--navds-font-line-height-large);
height: var(--a-font-line-height-large);
}
.navds-alert--error {
border-color: var(--navds-alert-color-error-border);
background-color: var(--navds-alert-color-error-background);
border-color: var(--ac-alert-error-border, var(--a-border-danger));
background-color: var(--ac-alert-error-bg, var(--a-surface-danger-subtle));
}
.navds-alert--warning {
border-color: var(--navds-alert-color-warning-border);
background-color: var(--navds-alert-color-warning-background);
border-color: var(--ac-alert-warning-border, var(--a-border-warning));
background-color: var(--ac-alert-warning-bg, var(--a-surface-warning-subtle));
}
.navds-alert--info {
border-color: var(--navds-alert-color-info-border);
background-color: var(--navds-alert-color-info-background);
border-color: var(--ac-alert-info-border, var(--a-border-info));
background-color: var(--ac-alert-info-bg, var(--a-surface-info-subtle));
}
.navds-alert--success {
border-color: var(--navds-alert-color-success-border);
background-color: var(--navds-alert-color-success-background);
border-color: var(--ac-alert-success-border, var(--a-border-success));
background-color: var(--ac-alert-success-bg, var(--a-surface-success-subtle));
}
.navds-alert--inline {
@@ -1,7 +0,0 @@
@font-face {
font-family: "Source Sans Pro";
font-weight: 600;
font-style: normal;
src: url(data:application/font-woff;base64,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 truncated
format("woff");
}
@@ -1,7 +0,0 @@
@font-face {
font-family: "Source Sans Pro";
font-weight: 400;
font-style: italic;
src: url(data:application/font-woff;base64,d09GRgABAAAAAFIEABMAAAAAoRQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABqAAAABwAAAAchO9ff0dERUYAAAHEAAAATwAAAGQKSwsnR1BPUwAAAhQAAAoRAAAgVoN/l3RHU1VCAAAMKAAAAhoAAAPsTIFIz09TLzIAAA5EAAAAXAAAAGBbBJBaY21hcAAADqAAAAGvAAACIlYIsh5jdnQgAAAQUAAAAC4AAAAuA5sN7GZwZ20AABCAAAABAgAAAXMGWZw3Z2FzcAAAEYQAAAAIAAAACAAAABBnbHlmAAARjAAANRUAAGMg5WRf+2hlYWQAAEakAAAANgAAADYNey5WaGhlYQAARtwAAAAiAAAAJAZiAnxobXR4AABHAAAAAn0AAAQYujQiEWxvY2EAAEmAAAACEQAAAhoC2uu2bWF4cAAAS5QAAAAgAAAAIAMjAVZuYW1lAABLtAAAAx4AAAf4FfMMEnBvc3QAAE7UAAAC1AAABLs677xhcHJlcAAAUagAAABTAAAAVpJd+YF3ZWJmAABR/AAAAAYAAAAGDbtdkwAAAAEAAAAA2SyH9gAAAADSChlOAAAAANm4vjp42h2MSw5AUBAEq4dY4GiWLoyNt8JZ/MICHelUUplMNwJq09ASlIjO9E4wMNoTMxkLq31zgp3DfnLZbx77q8o/uXfiJ9yakArf9QGo4xJ2AHjazVkPcJRHFf99d8klEBIguYSSPzSFNIQEFGkSEAOtbcy01DKojAhitViqTAiOaUZLZ6y2o4id1ukwtjo0o53QESgFI3SgoKmYBiYdrBQrkomAmCklLYdpDrgapnX97du9v7lLLiGd6fdm3+63u9/bt2/fe/t2PzgAxqMGD8NVW/f55chaf1/TBhQjhfVQSnIHLrjj1dSvbdyA/Ib7GutR3FDfUI/yB9c9vBZzpYfu57Z9NTYU7kfwScUEeFGIEsy2NG3udJncXQ6Po/OfCwV3ym0pa9LWsL0Y/yOey++nYTFqsQTL8GWsxhp8GxvQxLn8CJvwBLbgV/g1nscLaMV+/BHt6MRf8Xd04xzeho80Put8yHH/6epmuVqXnUtSniflha63iGukT7eux0nXoRA+LTXm29PS/wuCawWvELxEMASnWjo/YXmR1BQL3io4z1HEWVLOCdMx9LFXao44AUoilTP+GuVxiJCPw4QCvEooxBFCEXu48BqOU3AeJwNpyGTfaqYaptuZ7mRayrScaRXTN5geYFrP1Mj0ENMjHHO9jD9G2MlGgLiQa1ZETm4nF0vJwSqO/gBHbuSoj+DHeBxP4Rk0owU7sAcvcYaHcRR/wd/QhbPQq7HW9QLxlwT/VvCjgr8ruFHw84Kf0pjy0+U9grdITY+Ufy/4WcHPCf5hRHmj4HWu3cSrpfxLwfcK7ha8SvAdgr+lsavCtZ/lbVKuJXZRj0uwiPLcTMjHVkIBOgiFbHOgHK3nHqZ8pmKmUqbZTPOYFrDHZuE4iHcNqtF4KW3Aof5PIKUsWlQ+KZWSiuNMFau6IPiU4E7B2wXvEOxh32rMRx0prBBbfcNJFXsbzzQJjthqEJfS4hz2n8AeHmIHv3CdIH5CLMKFY7Svj6X+USpa1i6RkIN76I00vlG4nsxZuVz/0T2cx5295LmAnq4HZcqH+1Wz6lI+1aECqgte1YpRPepMEp3m2b7nmfxMp5Kk3SbYZ99e1xTIsY+4awQcBpLoVKd2KuqQOsF01oysOvXchOc+QpcuxVCtiTNaiDPNqeSt7OtlWWtWCsFBNsGD6YQUfJPgwkaCG48StI5W0rpKuKKlhDyUE/IwhzCFkpzHciUhj7pXjYnU8Pn8ZgHBg08T0rGQMB6fIUwmhzXU5kWEbHrXWupIHfXUi7sIudxflrB8DyEFXyR4qbvLiVcQpuIrhHysJKRRn1dhHL5KmMT9aDUy8Bh+Sg5/RsjjfrRFWwx3pTzxBXl4lvuTB78hTKDP206aOwg52IndLL+El4m1n/fiD3iFo/yJkIE/EzK4m7WzXnuTPPH8XnrKo6TzFiGTVn+B+Aq9bi7eJ+ThvwQvBgi55CKNc8mmZG+lXDdSnq4pLVr/cw7ntlJGc7ge57iyAdU7Wo0fUtfOkvJZ1TzmdHeoXeq4OqE2UxMD6iK19SDzPhnNr0vwSE4tZb+dI+FAayy/aomo8RubCedhO1Q9HCWQFN3zapdI5ID1uYi2oOuUs1/1xm3yyL5jdh9jpTnmnXz3U2LvDUPZF1E+bu1YS9avvYC892mqartQnhaUBaV+QV0chnavOjj0yJGj65GSksU5ju2ntPdFrpXl1W/WULxuQHzZZe31mfezOZNz6R2C9E3ib+aF3stYE+3XyyRfpi5zp7mbO60ZmxqirrF0DVWqnTLyxeV7QA1Eemj1nl4h4TOgPpDcZ9sqUKGaSLdH5tJjPKv46FbOpj9qzZ6OGeV36jXiS1b+V0xupX1R/UM6TRqR7r2SZL/jI6D5nDqj+UzQ6teSCkrL1n2QJOVt9BptUTU9kZQH6XyPqUvGvs1+zOLNCbpMCq3uVPtNf4TvyBQcbw8163wsKTZS8VE904zXGtpH2JoO6pb2xUnuKfEtYox8Y1dyo1Hj+sSbdUTGSPG8u3zvtljvOmeMLwmt4WDafdLPZ7yOOil5L1ffHx2RWZ0fF3rvZjo5ijnHzrAm2n6Gjwm5gl0mD76P2Xps5a69jfv3SpH3m6qRNefVu5TIKbVdtUvMqVOzepK2+qTaGLL61pjVdI+SBS8+2mf8CCylTR2mJrTHjZivGh+nrkbPm5rUH54F941A/JWl/flI+0BSpwE3e/pGYZt3jamtblJPqxcJa/lyo7xvNR6a+nJGXZKSb3RnGvnWn/gr2QWDcSLP6OohamSP7N6X7Y68ialFr9VY+ys9S9GFGLrR0oiYx3VLY3SeVGLjN+3bHsEHrbdoui7Kp4MxiLw1CN4X47kjfKuOpiQeGxTlkoaxi4WM5nS8/Y6Om0zsZM/Meg7XYtb+tPTyJ/KRsv8Gv5gaiun0+SIq7o7qFxGZx7PBYMSSIHJxJ6PPMdFLIKGFZ45cK7T0ktlXta+O234sWV+SYIedE7o3uMr9wa6gaIE3vi8X6f8rdDLbyy+bQ1rrY37M7mMVKFOP8b2V0KwO0AO3mkhZ9qUO4wXY0haldVni1U3Mf4Md2xvioSzSG0bNqGIYQU8epr3G4iXxJRY/LtQntCF8XYzE1f7YFpFlV5yVMbJ8Oyl9KkWq3B75InVcbpHE1oaLrM0JMGquwTNhBU9RL1IrOuV871OvS8tB8UT6vTN8RxbiuScpnm8hz9IziudeqRlIyLNnCF0O1swkz83CyYBQMyfSTpFzX/h0a+vbJUIc9l5PpFFqtFRizIuJ5WqjCRNzfhh7phrUW8ckVea0q28J9Pktih9P9NkneHOS5A50C/1zAt0YWl/DMbOsU6/xvyYnB5lyOm6h3+1iPNlGfdgv4+yU0/FRyvWwjSbfCN3f9CYRpwVEzuYW5R3j/Ye/aQ1KNXRX5JezQq8+HQnPAeuRplA3euQ8eIEc9hu9jcuLwxPeVfmHEIxUikLnszSm+E+K+atnH/1Pz4NCiVTNWT8HudanFTLSKOQJdibK6YE/iU9xpaowPzSK4aFAzpnpPKno29ugD9T3uAUEByWU1Szmn8BcalAlqqO+H/xo/U0boj0rgvcwROmgfQolBUGX51iooo/OIE9hSOcs0i2EHzMHA5DZGKhkuVJKeuZVowp00gjTMYN7iMGQFcuMmF/4/Kf/ycyS/6sBynNcVOt0kf8Mfj0jwW1DRWjfmWL/NwXnaPL8UM90mzLkr4mb+1E2x9TrmctxzFMkSYPHrmSajcBu4rtJMzGBM5lIvguoT2Y/NN/PisNfscz9hkH1eTafbfNyufUPAqJWChFzCK9jOmdhIMXyHobCiHLkvV5kbRFnYSBHLEPPLZ04ZZS3JvrexPx9N3/XZsjsZ4ejSRu/emQUD1ehkKubKl9ofZ3IFXGzZRrbSijldMqznLLW1plF61rM9lrUsf1O3E1elxJuxjLcS3k1EKrwHUI1fkCYL/8pFsh/isXyn+JW+U9xG7ZiNz6HfXgZK3EIr+LrOIKjWId/oxf1eJfwIHy4hCZcIXwP72MA3/8//8yT3AAAAHjajZK9a5NRFMZ/9+azqRbRWEuRIlJK6SDYQapgESliJTgEQXEQ0kStkqalSUUQHDo4iaNIJ/8AZ3GWIjSNNTr5F+jmJLbWj/jc877UkEHk5X3OvefjOR/34IAcBV7hZy4UrjBQLTVqjJOUnk6HrITDk5AmRZrMPyzZUqnaYLJcqt9kqlxeWGK6UltcoHBruVSmWL1zu8S1xeVKjRv1laU6FWPAsF+Y6mILuoxhlGefYZ/QC3MMMMIYJ5jiPJcocp05atzjIY94YqyO+/INcs34POt8ik87bsj6cG4ilvNRThfHurbdE+6j++aPRjp/KpbnYnk5ivV34/uqmAdV7wc6ThTOu4RLupT1UGSDJpu02OIdbenGFD1AnmGOKW5cNs+k4UXDotDJ5zFPecFLTSb0clD/SNxftzVo/noM7nlE2DSb54BZhmNtocfeHbu/y+aYVmyOUXllQ82uX/eWywk3XJ+wuWfJmi4TdC4tfGs7sqmuQ8eBJW91bwcG/Wm97I6dXwvb5j2hF03odNwqIq7HB2Z54NLKn7XYUc7Ktsoz9bTGc07qjde1E2/0nVaObc4oOs1neTsOccSmFCbQzRxt8Vw8w2gC3VaM4wu7/OAnv/gtL88QYS/yPX5Ypl35YN163msfQoYZvahXtwke0GBFuoSiDyubl8z07EzUbUssW+o5GdecjSf2XfIqX4Wz9kaz/8PxB5Tlbn0AAHjaY2BmPMc4gYGVgYWpiyni/0cGbxDN4MIYx2DEqMzAwMTNyszMwszJxKLAwMDOwMDAyAAFji5O/kCewm8mpnLine truncated
format("woff");
}
@@ -1,7 +0,0 @@
@font-face {
font-family: "Source Sans Pro";
font-weight: 400;
font-style: normal;
src: url(data:application/font-woff;base64,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 truncated
format("woff");
}
+7 -9
View File
@@ -1,8 +1,6 @@
@import "@navikt/ds-tokens";
@import "normalize.css";
@import "Source-Sans-Pro-regular.css";
@import "Source-Sans-Pro-italic.css";
@import "Source-Sans-Pro-600.css";
@import "fonts.css";
@import "print.css";
@import "utility.css";
@@ -20,26 +18,26 @@ html,
:root,
:host,
[data-theme="light"] {
--navds-shadow-focus: 0 0 0 3px var(--navds-semantic-color-focus);
--a-shadow-focus: 0 0 0 3px var(--a-border-focus);
color: var(--navds-semantic-color-text);
color: var(--a-text-default);
}
[data-theme="dark"] {
--navds-shadow-focus: var(--navds-shadow-focus-inverted);
--a-shadow-focus: var(--a-shadow-focus-inverted);
color: var(--navds-semantic-color-text-inverted);
color: var(--a-text-on-inverted);
}
body,
:host {
font-family: var(--navds-font-family, "Source Sans Pro", Arial, sans-serif);
font-family: var(--a-font-family, "Source Sans Pro", Arial, sans-serif);
line-height: 1.333;
font-size: 1.125rem;
}
a {
color: var(--navds-semantic-color-link);
color: var(--a-text-action);
}
button {
+21
View File
@@ -0,0 +1,21 @@
@font-face {
font-family: "Source Sans Pro";
font-style: italic;
font-weight: 400;
font-display: swap;
src: url("https://cdn.nav.no/aksel/fonts/SourceSans3-italic.woff2") format("woff2");
}
@font-face {
font-family: "Source Sans Pro";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://cdn.nav.no/aksel/fonts/SourceSans3-normal.woff2") format("woff2");
}
@font-face {
font-family: "Source Sans Pro";
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("https://cdn.nav.no/aksel/fonts/SourceSans3-normal.woff2") format("woff2");
}
+64 -105
View File
@@ -1,60 +1,18 @@
:root,
:host,
[data-theme="light"] {
/* Primary */
--navds-button-color-primary-text: var(--navds-semantic-color-text-inverted);
--navds-button-color-primary-border-focus: var(--navds-semantic-color-text-inverted);
--navds-button-color-primary-background: var(--navds-semantic-color-interaction-primary);
--navds-button-color-primary-background-hover: var(--navds-semantic-color-interaction-primary-hover);
--navds-button-color-primary-background-active: var(--navds-semantic-color-interaction-primary-selected);
/* Secondary */
--navds-button-color-secondary-text: var(--navds-semantic-color-interaction-primary);
--navds-button-color-secondary-text-hover: var(--navds-semantic-color-interaction-primary);
--navds-button-color-secondary-text-active: var(--navds-semantic-color-text-inverted);
--navds-button-color-secondary-border: var(--navds-semantic-color-interaction-primary);
--navds-button-color-secondary-border-focus-active-hover: var(--navds-semantic-color-component-background-light);
--navds-button-color-secondary-background: var(--navds-semantic-color-component-background-light);
--navds-button-color-secondary-background-hover: var(--navds-semantic-color-interaction-primary-hover-subtle);
--navds-button-color-secondary-background-active: var(--navds-semantic-color-interaction-primary-selected);
/* Tertiary */
--navds-button-color-tertiary-text: var(--navds-semantic-color-interaction-primary);
--navds-button-color-tertiary-text-active: var(--navds-semantic-color-text-inverted);
--navds-button-color-tertiary-background-hover: var(--navds-semantic-color-interaction-primary-hover-subtle);
--navds-button-color-tertiary-border-focus: var(--navds-semantic-color-interaction-primary);
--navds-button-color-tertiary-border-active: var(--navds-semantic-color-component-background-light);
--navds-button-color-tertiary-background-active: var(--navds-semantic-color-interaction-primary-selected);
/* Danger */
--navds-button-color-danger-text: var(--navds-semantic-color-text-inverted);
--navds-button-color-danger-background: var(--navds-semantic-color-interaction-danger);
--navds-button-color-danger-background-hover: var(--navds-semantic-color-interaction-danger-hover);
--navds-button-color-danger-background-active: var(--navds-semantic-color-interaction-danger-selected);
--navds-button-color-danger-border-focus: var(--navds-semantic-color-component-background-light);
/* Loader */
--navds-loader-color-on-button-background: rgb(255 255 255 / 0.3);
--navds-loader-color-on-button-foreground: currentColor;
}
[data-theme="dark"] {
/* Primary */
--navds-button-color-primary-text: var(--navds-semantic-color-text);
--navds-button-color-primary-border-focus: var(--navds-semantic-color-text);
--navds-button-color-primary-background: var(--navds-global-color-blue-200);
--navds-button-color-primary-background-hover: var(--navds-global-color-blue-300);
--navds-button-color-primary-background-active: var(--navds-global-color-blue-400);
/* Secondary */
--navds-button-color-secondary-text: var(--navds-global-color-white);
--navds-button-color-secondary-text-hover: var(--navds-global-color-white);
--navds-button-color-secondary-text-active: var(--navds-global-color-white);
--navds-button-color-secondary-border: var(--navds-global-color-blue-200);
--navds-button-color-secondary-border-focus-active-hover: var(--navds-semantic-color-text);
--navds-button-color-secondary-background: var(--navds-semantic-color-component-background-inverted);
--navds-button-color-secondary-background-hover: var(--navds-global-color-gray-800);
--navds-button-color-secondary-background-active: var(--navds-global-color-gray-700);
--ac-button-primary-text: var(--a-gray-900);
--ac-button-primary-bg: var(--a-blue-200);
--ac-button-primary-focus-border: var(--a-gray-900);
--ac-button-primary-hover-bg: var(--a-blue-300);
--ac-button-primary-active-bg: var(--a-blue-400);
--ac-button-secondary-text: var(--a-white);
--ac-button-secondary-hover-text: var(--a-white);
--ac-button-secondary-active-text: var(--a-white);
--ac-button-secondary-active-focus-border: var(--a-gray-900);
--ac-button-secondary-bg: var(--a-gray-900);
--ac-button-secondary-border: var(--a-blue-200);
--ac-button-secondary-hover-bg: var(--a-gray-800);
--ac-button-secondary-focus-border: var(--a-blue-200);
--ac-button-secondary-active-bg: var(--a-gray-700);
}
.navds-button {
@@ -64,24 +22,24 @@
text-decoration: none;
border: none;
background: none;
border-radius: var(--navds-border-radius-small);
padding: var(--navds-spacing-3) var(--navds-spacing-5);
border-radius: var(--a-border-radius-medium);
padding: var(--a-spacing-3) var(--a-spacing-5);
align-items: center;
justify-content: center;
gap: var(--navds-spacing-2);
gap: var(--a-spacing-2);
}
.navds-button--small {
padding: 0.375rem var(--navds-spacing-3);
padding: 0.375rem var(--a-spacing-3);
}
.navds-button--xsmall {
padding: 0.125rem var(--navds-spacing-2);
gap: var(--navds-spacing-1);
padding: var(--a-spacing-05) var(--a-spacing-2);
gap: var(--a-spacing-1);
}
.navds-button--icon-only {
padding: var(--navds-spacing-3);
padding: var(--a-spacing-3);
}
.navds-button--small.navds-button--icon-only {
@@ -89,27 +47,27 @@
}
.navds-button--xsmall.navds-button--icon-only {
padding: var(--navds-spacing-1);
padding: var(--a-spacing-1);
}
.navds-button:focus {
outline: none;
box-shadow: var(--navds-shadow-focus);
box-shadow: var(--a-shadow-focus);
}
.navds-button__icon {
--navds-button-icon-adjustment: -4px;
--ac-button-icon-margin: -4px;
font-size: 1.5rem;
display: flex;
}
.navds-button__icon:first-child {
margin-left: var(--navds-button-icon-adjustment);
margin-left: var(--ac-button-icon-margin);
}
.navds-button__icon:last-child {
margin-right: var(--navds-button-icon-adjustment);
margin-right: var(--ac-button-icon-margin);
}
.navds-button__icon:only-child {
@@ -117,13 +75,13 @@
}
.navds-button--small .navds-button__icon {
--navds-button-icon-adjustment: -2px;
--ac-button-icon-margin: -2px;
font-size: 1.25rem;
}
.navds-button--xsmall .navds-button__icon {
--navds-button-icon-adjustment: -2px;
--ac-button-icon-margin: -2px;
font-size: 1rem;
}
@@ -133,25 +91,25 @@
*************************/
.navds-button--primary {
background-color: var(--navds-button-color-primary-background);
color: var(--navds-button-color-primary-text);
background-color: var(--ac-button-primary-bg, var(--a-surface-action));
color: var(--ac-button-primary-text, var(--a-text-on-action));
}
.navds-button--primary:hover {
background-color: var(--navds-button-color-primary-background-hover);
background-color: var(--ac-button-primary-hover-bg, var(--a-surface-action-hover));
}
.navds-button--primary:active {
background-color: var(--navds-button-color-primary-background-active);
background-color: var(--ac-button-primary-active-bg, var(--a-surface-action-active));
}
.navds-button--primary:focus {
box-shadow: inset 0 0 0 1px var(--navds-button-color-primary-border-focus), var(--navds-shadow-focus);
box-shadow: inset 0 0 0 1px var(--ac-button-primary-focus-border, var(--a-surface-default)), var(--a-shadow-focus);
}
.navds-button--primary:hover:where(:disabled, .navds-button--disabled),
.navds-button--primary:active:where(:disabled, .navds-button--disabled) {
background-color: var(--navds-button-color-primary-background);
background-color: var(--ac-button-primary-bg, var(--a-surface-action));
}
/**************************
@@ -159,35 +117,35 @@
**************************/
.navds-button--secondary {
color: var(--navds-button-color-secondary-text);
background-color: var(--navds-button-color-secondary-background);
box-shadow: inset 0 0 0 2px var(--navds-button-color-secondary-border);
color: var(--ac-button-secondary-text, var(--a-text-action));
background-color: var(--ac-button-secondary-bg, var(--a-surface-default));
box-shadow: inset 0 0 0 1.5px var(--ac-button-secondary-border, var(--a-border-action));
}
.navds-button--secondary:hover {
color: var(--navds-button-color-secondary-text-hover);
background-color: var(--navds-button-color-secondary-background-hover);
color: var(--ac-button-secondary-hover-text, var(--a-text-action-on-action-subtle));
background-color: var(--ac-button-secondary-hover-bg, var(--a-surface-action-subtle-hover));
}
.navds-button--secondary:focus {
box-shadow: inset 0 0 0 2px var(--navds-button-color-secondary-border), var(--navds-shadow-focus);
box-shadow: inset 0 0 0 1.5px var(--ac-button-secondary-focus-border, var(--a-border-action)), var(--a-shadow-focus);
}
.navds-button--secondary:active {
color: var(--navds-button-color-secondary-text-active);
background-color: var(--navds-button-color-secondary-background-active);
color: var(--ac-button-secondary-active-text, var(--a-text-on-action));
background-color: var(--ac-button-secondary-active-bg, var(--a-surface-action-active));
box-shadow: none;
}
.navds-button--secondary:focus:active {
box-shadow: inset 0 0 0 1px var(--navds-button-color-secondary-border-focus-active-hover), var(--navds-shadow-focus);
box-shadow: inset 0 0 0 1px var(--ac-button-secondary-active-focus-border, var(--a-surface-default)), var(--a-shadow-focus);
}
.navds-button--secondary:where(:disabled, .navds-button--disabled),
.navds-button--secondary:hover:where(:disabled, .navds-button--disabled) {
color: var(--navds-button-color-secondary-text);
background-color: var(--navds-button-color-secondary-background);
box-shadow: inset 0 0 0 2px var(--navds-button-color-secondary-border);
color: var(--ac-button-secondary-text, var(--a-text-action));
background-color: var(--ac-button-secondary-bg, var(--a-surface-default));
box-shadow: inset 0 0 0 1.5px var(--ac-button-secondary-border, var(--a-border-action));
}
/****************************
@@ -195,36 +153,37 @@
****************************/
.navds-button--tertiary {
color: var(--navds-button-color-tertiary-text);
color: var(--ac-button-tertiary-text, var(--a-text-action));
}
.navds-button--tertiary:hover {
background-color: var(--navds-button-color-tertiary-background-hover);
color: var(--ac-button-tertiary-hover-text, var(--a-text-action-on-action-subtle));
background-color: var(--ac-button-tertiary-hover-bg, var(--a-surface-action-subtle-hover));
}
.navds-button--tertiary:focus {
box-shadow: inset 0 0 0 2px var(--navds-button-color-tertiary-border-focus), var(--navds-shadow-focus);
box-shadow: inset 0 0 0 1.5px var(--ac-button-tertiary-focus-border, var(--a-border-action)), var(--a-shadow-focus);
}
.navds-button--tertiary:active {
color: var(--navds-button-color-tertiary-text-active);
background-color: var(--navds-button-color-tertiary-background-active);
box-shadow: inset 0 0 0 1px var(--navds-button-color-tertiary-border-active);
color: var(--ac-button-tertiary-active-text, var(--a-text-on-action));
background-color: var(--ac-button-tertiary-active-bg, var(--a-surface-action-active));
box-shadow: inset 0 0 0 1px var(--a-surface-default);
}
.navds-button--tertiary:active:hover {
background-color: var(--navds-button-color-tertiary-background-active);
background-color: var(--ac-button-tertiary-active-hover-bg, var(--a-surface-action-active));
}
.navds-button--tertiary:active:focus {
box-shadow: inset 0 0 0 1px var(--navds-button-color-tertiary-border-active), var(--navds-shadow-focus);
box-shadow: inset 0 0 0 1px var(--a-surface-default), var(--a-shadow-focus);
}
.navds-button--tertiary:where(:disabled, .navds-button--disabled),
.navds-button--tertiary:hover:where(:disabled, .navds-button--disabled),
.navds-button--tertiary:active:where(:disabled, .navds-button--disabled),
.navds-button--tertiary:active:hover:where(:disabled, .navds-button--disabled) {
color: var(--navds-button-color-tertiary-text);
color: var(--ac-button-tertiary-text, var(--a-text-action));
background: none;
box-shadow: none;
}
@@ -234,25 +193,25 @@
*************************/
.navds-button--danger {
background-color: var(--navds-button-color-danger-background);
color: var(--navds-button-color-danger-text);
background-color: var(--ac-button-danger-bg, var(--a-surface-danger));
color: var(--ac-button-danger-text, var(--a-text-on-danger));
}
.navds-button--danger:hover {
background-color: var(--navds-button-color-danger-background-hover);
background-color: var(--ac-button-danger-hover-bg, var(--a-surface-danger-hover));
}
.navds-button--danger:active {
background-color: var(--navds-button-color-danger-background-active);
background-color: var(--ac-button-danger-active-bg, var(--a-surface-danger-active));
}
.navds-button--danger:focus {
box-shadow: inset 0 0 0 1px var(--navds-button-color-danger-border-focus), var(--navds-shadow-focus);
box-shadow: inset 0 0 0 1px var(--a-surface-default), var(--a-shadow-focus);
}
.navds-button--danger:active:where(:disabled, .navds-button--disabled),
.navds-button--danger:hover:where(:disabled, .navds-button--disabled) {
background-color: var(--navds-button-color-danger-background);
background-color: var(--ac-button-danger-bg, var(--a-surface-danger));
}
/**************************
@@ -268,10 +227,10 @@
}
.navds-button .navds-loader .navds-loader__foreground {
stroke: var(--navds-loader-color-on-button-foreground);
stroke: var(--ac-button-loader-stroke, currentColor);
}
.navds-button--primary .navds-loader .navds-loader__background,
.navds-button--danger .navds-loader .navds-loader__background {
stroke: var(--navds-loader-color-on-button-background);
stroke: var(--ac-button-primary-loader-stroke-bg, rgb(255 255 255 / 0.3));
}
+16 -23
View File
@@ -1,21 +1,14 @@
:root,
:host {
--navds-chat-color-background: var(--navds-semantic-color-canvas-background);
--navds-chat-color-avatar: var(--navds-semantic-color-text);
--navds-chat-color-avatar-background: var(--navds-semantic-color-canvas-background);
}
.navds-chat {
display: flex;
align-items: flex-end;
gap: var(--navds-spacing-4);
padding-right: var(--navds-spacing-16);
gap: var(--a-spacing-4);
padding-right: var(--a-spacing-16);
}
.navds-chat--right {
flex-direction: row-reverse;
padding-right: 0;
padding-left: var(--navds-spacing-16);
padding-left: var(--a-spacing-16);
}
.navds-chat__bubble-wrapper {
@@ -24,7 +17,7 @@
padding: 0;
display: flex;
flex-direction: column;
gap: var(--navds-spacing-3);
gap: var(--a-spacing-3);
}
.navds-chat--right .navds-chat__bubble-wrapper {
@@ -33,9 +26,9 @@
.navds-chat__avatar {
align-items: center;
background: var(--navds-chat-color-avatar-background);
color: var(--navds-chat-color-avatar);
border-radius: var(--navds-border-radius-full);
background: var(--ac-chat-avatar-bg, var(--a-bg-subtle));
color: var(--ac-chat-avatar-color, var(--a-text-default));
border-radius: var(--a-border-radius-full);
display: flex;
flex-shrink: 0;
justify-content: center;
@@ -52,31 +45,31 @@
.navds-chat__bubble {
padding: 1rem;
box-shadow: var(--navds-shadow-small);
box-shadow: var(--a-shadow-small);
width: fit-content;
max-width: 37.5rem;
background-color: var(--navds-chat-color-background);
border-radius: var(--navds-border-radius-xlarge);
background-color: var(--ac-chat-bubble-bg, var(--a-bg-subtle));
border-radius: var(--a-border-radius-xlarge);
border-bottom-left-radius: 2px;
display: flex;
flex-direction: column;
gap: var(--navds-spacing-2);
gap: var(--a-spacing-2);
}
.navds-chat__bubble:focus {
box-shadow: var(--navds-shadow-focus);
box-shadow: var(--a-shadow-focus);
outline: none;
}
.navds-chat--right .navds-chat__bubble {
border-radius: var(--navds-border-radius-xlarge);
border-radius: var(--a-border-radius-xlarge);
border-bottom-right-radius: 2px;
}
.navds-chat__top-text {
color: var(--navds-semantic-color-text);
color: var(--ac-chat-top-text, var(--a-text-default));
display: flex;
gap: var(--navds-spacing-2);
gap: var(--a-spacing-2);
align-items: baseline;
}
@@ -85,5 +78,5 @@
}
.navds-chat__name {
font-weight: var(--navds-font-weight-bold);
font-weight: var(--a-font-weight-bold);
}
+137
View File
@@ -0,0 +1,137 @@
.navds-chips {
display: flex;
gap: var(--a-spacing-2);
margin: 0;
padding: 0;
list-style: none;
flex-wrap: wrap;
}
.navds-chips :where(li) {
margin: 0;
padding: 0;
list-style: none;
display: block;
}
.navds-chips__chip {
all: unset;
display: flex;
cursor: pointer;
align-items: center;
justify-content: center;
gap: var(--a-spacing-05);
margin: 0;
padding: 0 var(--a-spacing-3);
text-decoration: none;
border-radius: var(--a-border-radius-full);
min-height: 32px;
}
.navds-chips--small .navds-chips__chip {
min-height: 24px;
padding: 0 var(--a-spacing-2);
}
.navds-chips__toggle {
box-shadow: inset 0 0 0 1px var(--ac-chip-toggle-border, var(--a-border-default));
background-color: var(--ac-chip-toggle-bg, var(--a-surface-neutral-subtle));
}
.navds-chips__toggle:hover {
box-shadow: inset 0 0 0 1px var(--ac-chip-toggle-hover-border, var(--a-border-strong));
background-color: var(--ac-chip-toggle-hover-bg, var(--a-surface-neutral-subtle-hover));
}
.navds-chips__toggle[aria-pressed="true"] {
box-shadow: none;
background-color: var(--ac-chip-toggle-pressed-bg, var(--a-surface-action-selected));
color: var(--ac-chip-toggle-pressed-text, var(--a-text-on-action));
}
.navds-chips__toggle[aria-pressed="true"]:hover {
background-color: var(--ac-chip-toggle-pressed-hover-bg, var(--a-surface-action-selected-hover));
}
.navds-chips__toggle:focus-visible {
box-shadow: 0 0 0 2px var(--ac-chip-toggle-focus, var(--a-border-focus));
}
.navds-chips__toggle[aria-pressed="true"]:focus-visible,
.navds-chips__toggle:active:focus-visible {
box-shadow: inset 0 0 0 1px var(--a-surface-default), 0 0 0 2px var(--ac-chip-toggle-focus, var(--a-border-focus));
}
.navds-chips__removable--action {
background-color: var(--ac-chip-removable-action-bg, var(--a-surface-action-selected));
color: var(--ac-chip-removable-action-text, var(--a-text-on-action));
}
.navds-chips__removable--neutral {
background-color: var(--ac-chip-removable-neutral-bg, var(--a-surface-neutral-subtle));
color: var(--ac-chip-removable-neutral-text, var(--a-text-default));
box-shadow: inset 0 0 0 1px var(--ac-chip-removable-neutral-border, var(--a-border-default));
}
.navds-chips__removable-icon {
width: 1.5rem;
height: 1.5rem;
display: grid;
place-items: center;
border-radius: var(--a-border-radius-full);
}
.navds-chips__toggle-icon {
width: 1.25rem;
height: 1.25rem;
display: grid;
place-items: center;
border-radius: var(--a-border-radius-full);
}
.navds-chips--small .navds-chips__toggle-icon {
width: 1rem;
height: 1rem;
}
.navds-chips--small .navds-chips__removable-icon {
width: 1.25rem;
height: 1.25rem;
}
.navds-chips--small .navds-chips__removable-icon > svg {
width: 0.75rem;
}
.navds-chips__removable--action:focus-visible {
box-shadow: inset 0 0 0 1px var(--a-surface-default), 0 0 0 2px var(--a-border-focus);
}
.navds-chips__removable--neutral:focus-visible {
box-shadow: 0 0 0 2px var(--a-border-focus);
}
.navds-chips__removable--action:hover {
background-color: var(--ac-chip-removable-action-hover-bg, var(--a-surface-action-selected-hover));
}
.navds-chips__removable--neutral:hover {
background-color: var(--ac-chip-removable-neutral-hover-bg, var(--a-surface-neutral-subtle-hover));
box-shadow: inset 0 0 0 1px var(--ac-chip-removable-neutral-hover-border, var(--a-border-strong));
}
.navds-chips--icon-left {
padding-left: 0.375rem;
}
.navds-chips--icon-right {
padding-right: var(--a-spacing-1);
}
.navds-chips--small .navds-chips--icon-right {
padding-right: var(--a-spacing-05);
}
.navds-chips--small .navds-chips--icon-left {
padding-left: 0.375rem;
}
+2 -2
View File
@@ -7,11 +7,11 @@
margin-left: auto;
margin-right: auto;
max-width: var(--navds-content-container-max-width);
padding: var(--navds-spacing-4);
padding: var(--a-spacing-4);
}
@media (min-width: 448px) {
.navds-content-container {
padding: var(--navds-spacing-6);
padding: var(--a-spacing-6);
}
}
+39 -40
View File
@@ -1,16 +1,16 @@
.navds-date {
padding: var(--navds-spacing-3);
padding: var(--a-spacing-3);
}
.navds-date .rdp-day_range_middle.rdp-day_disabled {
color: var(--navds-global-color-white);
background: var(--navds-global-color-deepblue-500);
color: var(--ac-date-middle-text, var(--a-text-on-action));
background: var(--ac-date-middle-bg, var(--a-surface-action-selected));
}
.navds-date .rdp-month,
.navds-date.rdp-month {
display: grid;
gap: var(--navds-spacing-5);
gap: var(--a-spacing-5);
}
.navds-date__caption-label {
@@ -19,31 +19,31 @@
.navds-date .rdp-head_cell {
text-transform: capitalize;
font-size: var(--navds-font-size-small);
font-size: var(--a-font-size-small);
}
.navds-date .rdp-weeknumber {
color: var(--navds-global-color-white);
background: var(--navds-global-color-gray-800);
font-size: var(--navds-font-size-small);
color: var(--ac-date-week-text, var(--a-text-on-neutral));
background: var(--ac-date-week-bg, var(--a-surface-neutral));
font-size: var(--a-font-size-small);
display: flex;
justify-content: center;
align-items: center;
padding: 0.125rem var(--navds-spacing-1);
border-radius: var(--navds-border-radius-small);
padding: var(--a-spacing-05) var(--a-spacing-1);
border-radius: var(--a-border-radius-small);
}
.navds-date__caption-dropdown {
display: flex;
justify-content: space-between;
gap: var(--navds-spacing-2);
gap: var(--a-spacing-2);
align-items: center;
}
.navds-date__caption__month-wrapper {
display: flex;
justify-content: center;
gap: var(--navds-spacing-2);
gap: var(--a-spacing-2);
align-items: center;
}
@@ -56,32 +56,31 @@
width: 2.5rem;
height: 2.5rem;
text-align: center;
border-radius: var(--navds-border-radius-medium);
border-radius: var(--a-border-radius-medium);
}
.navds-date .rdp-day_range_start {
border-radius: 12px 2px 2px 12px;
border-radius: var(--navds-border-radius-xlarge) var(--navds-border-radius-small) var(--navds-border-radius-small)
var(--navds-border-radius-xlarge);
border-radius: var(--a-border-radius-xlarge) var(--a-border-radius-small) var(--a-border-radius-small)
var(--a-border-radius-xlarge);
}
.navds-date .rdp-day_range_end:not(.rdp-day_range_start) {
border-radius: var(--navds-border-radius-small) var(--navds-border-radius-xlarge) var(--navds-border-radius-xlarge)
var(--navds-border-radius-small);
border-radius: var(--a-border-radius-small) var(--a-border-radius-xlarge) var(--a-border-radius-xlarge)
var(--a-border-radius-small);
}
.navds-date .rdp-day_range_start.rdp-day_range_end {
border-radius: var(--navds-border-radius-xlarge);
border-radius: var(--a-border-radius-xlarge);
}
.navds-date .rdp-button:not(.rdp-day_selected):not([disabled]):focus,
.navds-date .navds-date__month-button:not(.rdp-day_selected):not([disabled]):focus {
box-shadow: var(--navds-shadow-focus);
box-shadow: var(--a-shadow-focus);
}
.navds-date .rdp-button.rdp-day_selected:not([disabled]):focus,
.navds-date .navds-date__month-button.rdp-day_selected:not([disabled]):focus {
box-shadow: inset 0 0 0 1px var(--navds-global-color-white), 0 0 0 3px var(--navds-global-color-blue-800);
box-shadow: inset 0 0 0 1px var(--a-surface-default), var(--a-shadow-focus);
}
/* Monthpicker */
@@ -91,13 +90,13 @@
width: 3rem;
height: 2.75rem;
text-transform: capitalize;
border-radius: var(--navds-border-radius-medium);
border-radius: var(--a-border-radius-medium);
cursor: pointer;
}
.navds-date__month-button:focus,
.navds-monthpicker__caption-button:focus {
box-shadow: var(--navds-shadow-focus);
box-shadow: var(--a-shadow-focus);
z-index: 1;
}
@@ -134,26 +133,26 @@
.navds-date .rdp-day_selected,
.navds-monthpicker__month--selected {
color: var(--navds-global-color-white);
background: var(--navds-global-color-deepblue-500);
color: var(--ac-date-selected-text, var(--a-text-on-action));
background: var(--ac-date-selected-bg, var(--a-surface-action-selected));
cursor: pointer;
}
.navds-date .rdp-day_disabled {
cursor: not-allowed;
text-decoration: line-through;
background-color: var(--navds-global-color-gray-100);
color: var(--navds-global-color-gray-600);
background-color: var(--ac-date-disabled-bg, var(--a-surface-neutral-subtle));
color: var(--ac-date-disabled-text, var(--a-text-subtle));
}
.navds-date .rdp-button:where(:not(.rdp-day_selected):not([disabled])):hover,
.navds-date__month-button:where(:not(.rdp-day_selected):not([disabled])):hover {
background: var(--navds-global-color-blue-50);
background: var(--ac-date-hover-bg, var(--a-surface-action-subtle-hover));
cursor: pointer;
}
.navds-date .rdp-day_today {
box-shadow: 0 0 0 1px var(--navds-global-color-deepblue-500);
box-shadow: 0 0 0 1px var(--ac-date-today-border, var(--a-border-action-selected));
text-decoration: underline;
}
@@ -161,47 +160,47 @@
display: flex;
justify-content: space-between;
align-items: center;
gap: var(--navds-spacing-2);
gap: var(--a-spacing-2);
}
.navds-date__caption-button {
color: var(--navds-global-color-gray-900);
color: var(--ac-date-caption-text, var(--a-text-default));
}
.navds-date__field-input {
padding-right: var(--navds-spacing-12);
padding-right: var(--a-spacing-12);
}
.navds-form-field--small .navds-date__field-input {
padding-right: var(--navds-spacing-8);
padding-right: var(--a-spacing-8);
}
/* Error-handling */
.navds-date__field--error .navds-date__field-input:not(:hover):not(:disabled) {
border-color: var(--navds-search-color-border-error);
box-shadow: inset 0 0 0 1px var(--navds-search-color-border-error);
border-color: var(--ac-date-input-error-border, var(--a-border-danger));
box-shadow: inset 0 0 0 1px var(--ac-date-input-error-border, var(--a-border-danger));
}
.navds-date__field--error .navds-date__field-input:focus:not(:hover):not(:disabled) {
box-shadow: inset 0 0 0 1px var(--navds-search-color-border-error), var(--navds-shadow-focus);
box-shadow: inset 0 0 0 1px var(--ac-date-input-error-border, var(--a-border-danger)), var(--a-shadow-focus);
}
.navds-date__field-button {
position: absolute;
right: var(--navds-spacing-2);
right: var(--a-spacing-2);
top: 50%;
transform: translateY(-50%);
color: var(--navds-global-color-gray-900);
color: var(--ac-date-input-button-text, var(--a-text-default));
}
.navds-form-field--small .navds-date__field-button {
right: var(--navds-spacing-2);
right: var(--a-spacing-2);
height: 1.5rem;
width: 1.5rem;
}
.navds-form-field--small .navds-date__field-button svg {
font-size: var(--navds-font-size-medium);
font-size: var(--a-font-size-medium);
}
.navds-form-field--disabled .navds-date__field-button {
+9 -19
View File
@@ -1,21 +1,11 @@
:root,
:host {
--navds-confirmation-panel-color-background: var(--navds-global-color-orange-50);
--navds-confirmation-panel-color-background-checked: var(--navds-global-color-green-50);
--navds-confirmation-panel-color-background-error: var(--navds-global-color-red-50);
--navds-confirmation-panel-color-border: var(--navds-semantic-color-feedback-warning-border);
--navds-confirmation-panel-color-border-checked: var(--navds-semantic-color-feedback-success-border);
--navds-confirmation-panel-color-border-error: var(--navds-semantic-color-feedback-danger-border);
}
.navds-confirmation-panel__inner {
display: flex;
flex-direction: column;
gap: var(--navds-spacing-3);
padding: var(--navds-spacing-4);
border-radius: var(--navds-border-radius-medium);
border: 1px solid var(--navds-confirmation-panel-color-border);
background-color: var(--navds-confirmation-panel-color-background);
gap: var(--a-spacing-3);
padding: var(--a-spacing-4);
border-radius: var(--a-border-radius-medium);
border: 1px solid var(--ac-confirmation-panel-border, var(--a-border-warning));
background-color: var(--ac-confirmation-panel-bg, var(--a-surface-warning-subtle));
transition: background-color linear 100ms;
justify-self: stretch;
}
@@ -25,11 +15,11 @@
}
.navds-confirmation-panel--checked .navds-confirmation-panel__inner {
background-color: var(--navds-confirmation-panel-color-background-checked);
border-color: var(--navds-confirmation-panel-color-border-checked);
border-color: var(--ac-confirmation-panel-checked-border, var(--a-border-success));
background-color: var(--ac-confirmation-panel-checked-bg, var(--a-surface-success-subtle));
}
.navds-confirmation-panel--error .navds-confirmation-panel__inner {
background-color: var(--navds-confirmation-panel-color-background-error);
border-color: var(--navds-confirmation-panel-color-border-error);
border-color: var(--ac-confirmation-panel-error-border, var(--a-border-danger));
background-color: var(--ac-confirmation-panel-error-bg, var(--a-surface-danger-subtle));
}
+12 -18
View File
@@ -1,39 +1,33 @@
:root,
:host {
--navds-error-summary-color-background: var(--navds-semantic-color-component-background-light);
--navds-error-summary-color-border: var(--navds-semantic-color-feedback-danger-border);
}
.navds-error-summary {
background-color: var(--navds-error-summary-color-background);
padding: var(--navds-spacing-5);
border: 4px solid var(--navds-error-summary-color-border);
background-color: var(--ac-error-summary-bg, var(--a-surface-default));
padding: var(--a-spacing-5);
border: 4px solid var(--ac-error-summary-border, var(--a-border-danger));
}
.navds-error-summary--small {
padding: var(--navds-spacing-3);
padding: var(--a-spacing-3);
}
.navds-error-summary:focus {
box-shadow: var(--navds-shadow-focus);
box-shadow: var(--a-shadow-focus);
outline: none;
}
.navds-error-summary__list {
margin: var(--navds-spacing-3) 0;
margin: var(--a-spacing-3) 0;
display: flex;
flex-direction: column;
gap: var(--navds-spacing-3);
padding-left: var(--navds-spacing-6);
gap: var(--a-spacing-3);
padding-left: var(--a-spacing-6);
list-style: inherit;
}
.navds-error-summary__list > * {
color: var(--navds-global-color-blue-500);
color: var(--a-blue-500);
}
.navds-error-summary--small > .navds-error-summary__list {
margin: var(--navds-spacing-2) 0;
gap: var(--navds-spacing-2);
padding-left: var(--navds-spacing-5);
margin: var(--a-spacing-2) 0;
gap: var(--a-spacing-2);
padding-left: var(--a-spacing-5);
}
+2 -2
View File
@@ -6,11 +6,11 @@
}
.navds-fieldset > :not(:first-child):not(:empty) {
margin-top: var(--navds-spacing-2);
margin-top: var(--a-spacing-2);
}
.navds-fieldset > .navds-fieldset__description:not(:empty) {
margin-top: var(--navds-spacing-1);
margin-top: var(--a-spacing-1);
}
/* Applied when hideLegend is applied to fieldset */
+2 -2
View File
@@ -1,7 +1,7 @@
.navds-form-field {
display: grid;
justify-items: start;
gap: var(--navds-spacing-2);
gap: var(--a-spacing-2);
}
.navds-form-field__description {
@@ -11,7 +11,7 @@
.navds-form-field .navds-error-message,
.navds-fieldset .navds-error-message {
display: flex;
gap: var(--navds-spacing-2);
gap: var(--a-spacing-2);
}
.navds-form-field .navds-error-message::before,
+43 -34
View File
@@ -1,16 +1,3 @@
:root,
:host {
--navds-radio-checkbox-color-background: var(--navds-semantic-color-component-background-light);
--navds-radio-checkbox-color-text: var(--navds-semantic-color-text);
--navds-radio-checkbox-color-background-hover: var(--navds-semantic-color-interaction-primary-hover-subtle);
--navds-radio-checkbox-color-background-checked: var(--navds-semantic-color-interaction-primary);
--navds-radio-checkbox-color-shadow: var(--navds-semantic-color-border);
--navds-radio-checkbox-color-shadow-hover: var(--navds-semantic-color-interaction-primary);
--navds-radio-checkbox-color-shadow-checked: var(--navds-semantic-color-interaction-primary);
--navds-radio-checkbox-color-shadow-error: var(--navds-semantic-color-interaction-danger);
--navds-radio-checkbox-color-label-hover: var(--navds-semantic-color-interaction-primary);
}
.navds-checkbox,
.navds-radio {
position: relative;
@@ -31,32 +18,32 @@
.navds-checkbox__label,
.navds-radio__label {
padding: var(--navds-spacing-3) 0;
padding: var(--a-spacing-3) 0;
cursor: pointer;
display: flex;
gap: var(--navds-spacing-2);
gap: var(--a-spacing-2);
}
.navds-checkbox__label::before,
.navds-radio__label::before {
content: "";
background-color: var(--navds-radio-checkbox-color-background);
box-shadow: inset 0 0 0 2px var(--navds-radio-checkbox-color-shadow);
background-color: var(--ac-radio-checkbox-bg, var(--a-surface-default));
box-shadow: inset 0 0 0 2px var(--ac-radio-checkbox-border, var(--a-border-strong));
width: 1.5rem;
height: 1.5rem;
border-radius: var(--navds-border-radius-medium);
border-radius: var(--a-border-radius-medium);
flex-shrink: 0;
}
.navds-radio__label::before {
border-radius: var(--navds-border-radius-full);
border-radius: var(--a-border-radius-full);
}
.navds-checkbox__content,
.navds-radio__content {
display: flex;
flex-direction: column;
gap: var(--navds-spacing-1);
gap: var(--a-spacing-1);
}
.navds-checkbox--small > .navds-checkbox__input,
@@ -80,17 +67,17 @@
.navds-checkbox__input:focus + .navds-checkbox__label::before,
.navds-radio__input:focus + .navds-radio__label::before {
box-shadow: inset 0 0 0 2px var(--navds-radio-checkbox-color-shadow), var(--navds-shadow-focus);
box-shadow: inset 0 0 0 2px var(--ac-radio-checkbox-border, var(--a-border-strong)), var(--a-shadow-focus);
}
.navds-checkbox__input:hover:focus + .navds-checkbox__label::before,
.navds-radio__input:hover:focus + .navds-radio__label::before {
box-shadow: inset 0 0 0 2px var(--navds-radio-checkbox-color-shadow-hover), var(--navds-shadow-focus);
box-shadow: inset 0 0 0 2px var(--ac-radio-checkbox-action, var(--a-surface-action)), var(--a-shadow-focus);
}
.navds-checkbox__input:indeterminate + .navds-checkbox__label::before {
box-shadow: none;
background-color: var(--navds-radio-checkbox-color-background-checked);
background-color: var(--ac-radio-checkbox-action, var(--a-surface-action));
}
.navds-checkbox__input:indeterminate + .navds-checkbox__label::after {
@@ -98,7 +85,7 @@
position: absolute;
top: 50%;
transform: translate(0.375rem, -50%);
background-color: var(--navds-radio-checkbox-color-background);
background-color: var(--ac-radio-checkbox-bg, var(--a-surface-default));
width: 0.75rem;
height: 0.25rem;
border-radius: 1px; /* Custom value OK */
@@ -115,7 +102,7 @@
background-repeat: no-repeat;
background-size: 13px;
box-shadow: none;
background-color: var(--navds-radio-checkbox-color-background-checked);
background-color: var(--ac-radio-checkbox-action, var(--a-surface-action));
}
.navds-checkbox--small > .navds-checkbox__input:checked + .navds-checkbox__label::before {
@@ -124,31 +111,33 @@
.navds-checkbox__input:indeterminate:focus + .navds-checkbox__label::before,
.navds-checkbox__input:checked:focus + .navds-checkbox__label::before {
box-shadow: inset 0 0 0 1px white, var(--navds-shadow-focus);
box-shadow: inset 0 0 0 1px var(--ac-radio-checkbox-bg, var(--a-surface-default)), var(--a-shadow-focus);
}
.navds-radio__input:checked + .navds-radio__label::before {
box-shadow: inset 0 0 0 2px var(--navds-radio-checkbox-color-shadow-checked), inset 0 0 0 4px #fff;
background-color: var(--navds-radio-checkbox-color-background-checked);
box-shadow: inset 0 0 0 2px var(--ac-radio-checkbox-action, var(--a-surface-action)),
inset 0 0 0 4px var(--ac-radio-checkbox-bg, var(--a-surface-default));
background-color: var(--ac-radio-checkbox-action, var(--a-surface-action));
}
.navds-radio__input:checked:focus + .navds-radio__label::before {
box-shadow: inset 0 0 0 2px var(--navds-radio-checkbox-color-shadow-checked), inset 0 0 0 4px #fff, var(--navds-shadow-focus);
box-shadow: inset 0 0 0 2px var(--ac-radio-checkbox-action, var(--a-surface-action)),
inset 0 0 0 4px var(--ac-radio-checkbox-bg, var(--a-surface-default)), var(--a-shadow-focus);
}
.navds-checkbox__input:hover:not(:disabled) + .navds-checkbox__label,
.navds-radio__input:hover:not(:disabled) + .navds-radio__label {
color: var(--navds-radio-checkbox-color-label-hover);
color: var(--ac-radio-checkbox-action, var(--a-surface-action));
}
.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: inset 0 0 0 2px var(--navds-radio-checkbox-color-shadow-hover);
box-shadow: inset 0 0 0 2px var(--ac-radio-checkbox-action, var(--a-surface-action));
}
.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(--navds-radio-checkbox-color-background-hover);
background-color: var(--ac-radio-checkbox-action-hover-bg, var(--a-surface-action-subtle));
}
.navds-checkbox--error
@@ -157,7 +146,7 @@
.navds-radio--error
> .navds-radio__input:not(:hover):not(:disabled):not(:checked):not(:indeterminate)
+ .navds-radio__label::before {
box-shadow: inset 0 0 0 2px var(--navds-radio-checkbox-color-shadow-error);
box-shadow: inset 0 0 0 2px var(--ac-radio-checkbox-error-border, var(--a-border-danger));
}
.navds-checkbox--error
@@ -166,7 +155,27 @@
.navds-radio--error
> .navds-radio__input:focus:not(:hover):not(:disabled):not(:checked):not(:indeterminate)
+ .navds-radio__label::before {
box-shadow: inset 0 0 0 2px var(--navds-radio-checkbox-color-shadow-error), var(--navds-shadow-focus);
box-shadow: inset 0 0 0 2px var(--ac-radio-checkbox-error-border, var(--a-border-danger)), var(--a-shadow-focus);
}
.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(:indeterminate):not(:focus)
+ .navds-radio__label::before {
background-color: var(--ac-radio-checkbox-error-hover-bg, var(--a-surface-danger-subtle));
box-shadow: inset 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):not(:indeterminate)
+ .navds-radio__label::before {
background-color: var(--ac-radio-checkbox-error-hover-bg, var(--a-surface-danger-subtle));
box-shadow: inset 0 0 0 2px var(--ac-radio-checkbox-error-border, var(--a-border-danger)), var(--a-shadow-focus);
}
.navds-checkbox--disabled,
+30 -37
View File
@@ -1,19 +1,9 @@
:root,
:host,
[data-theme="light"] {
--navds-search-color-text: var(--navds-semantic-color-text);
--navds-search-color-border: var(--navds-semantic-color-border);
--navds-search-color-border-hover: var(--navds-semantic-color-interaction-primary);
--navds-search-color-clear-hover: var(--navds-global-color-blue-500);
--navds-search-color-border-error: var(--navds-global-color-red-500);
}
[data-theme="dark"] {
--navds-search-color-text: var(--navds-semantic-color-text-inverted);
--navds-search-color-border: var(--navds-semantic-color-border-inverted);
--navds-search-color-border-hover: var(--navds-global-color-blue-200);
--navds-search-color-clear-hover: var(--navds-global-color-blue-200);
--navds-search-color-border-error: var(--navds-global-color-red-300);
--ac-search-button-border: var(--a-border-on-inverted);
--ac-search-button-border-hover: var(--a-blue-200);
--ac-search-clear-icon: var(--a-white);
--ac-search-clear-icon-hover: var(--a-blue-200);
--ac-search-error-border: var(--a-red-300);
}
.navds-search {
@@ -33,19 +23,19 @@
}
.navds-search__input {
padding-right: var(--navds-spacing-10);
padding-right: var(--a-spacing-10);
}
.navds-form-field--small .navds-search__input {
padding-right: var(--navds-spacing-8);
padding-right: var(--a-spacing-8);
}
.navds-search__input--simple {
padding-left: var(--navds-spacing-11);
padding-left: var(--a-spacing-11);
}
.navds-form-field--small .navds-search__input--simple {
padding-left: var(--navds-spacing-7);
padding-left: var(--a-spacing-7);
}
.navds-search__input:not(.navds-search__input--simple) {
@@ -55,7 +45,7 @@
.navds-search__search-icon {
position: absolute;
left: var(--navds-spacing-3);
left: var(--a-spacing-3);
top: 50%;
transform: translateY(-50%);
pointer-events: none;
@@ -63,15 +53,15 @@
}
.navds-form-field--small .navds-search__search-icon {
left: var(--navds-spacing-2);
left: var(--a-spacing-2);
font-size: 1rem;
}
.navds-search__button-clear {
position: absolute;
right: 0.75rem;
border-radius: var(--navds-border-radius-medium);
color: var(--navds-search-color-text);
border-radius: var(--a-border-radius-medium);
color: var(--ac-search-clear-icon, var(--a-text-default));
height: 32px;
width: 32px;
top: 50%;
@@ -93,11 +83,11 @@
}
.navds-search__button-clear:hover {
color: var(--navds-search-color-clear-hover);
color: var(--ac-search-clear-icon-hover, var(--a-text-action));
}
.navds-search__button-clear:focus {
box-shadow: var(--navds-shadow-focus);
box-shadow: var(--a-shadow-focus);
outline: none;
}
@@ -106,8 +96,8 @@
min-width: 64px;
min-height: 32px;
border-radius: 0;
border-top-right-radius: var(--navds-border-radius-medium);
border-bottom-right-radius: var(--navds-border-radius-medium);
border-top-right-radius: var(--a-border-radius-medium);
border-bottom-right-radius: var(--a-border-radius-medium);
}
.navds-form-field--small .navds-search__button-search svg {
@@ -119,13 +109,16 @@
}
.navds-search__button-search.navds-button--secondary {
box-shadow: -1px 0 0 0 var(--navds-search-color-border) inset, 0 1px 0 0 var(--navds-search-color-border) inset,
0 -1px 0 0 var(--navds-search-color-border) inset;
box-shadow: -1px 0 0 0 var(--ac-search-button-border, var(--a-border-default)) inset,
0 1px 0 0 var(--ac-search-button-border, var(--a-border-default)) inset,
0 -1px 0 0 var(--ac-search-button-border, var(--a-border-default)) inset;
}
.navds-search__button-search.navds-button--secondary:hover {
box-shadow: -1px 0 0 0 var(--navds-search-color-border-hover) inset, 0 1px 0 0 var(--navds-search-color-border-hover) inset,
0 -1px 0 0 var(--navds-search-color-border-hover) inset, -1px 0 0 0 var(--navds-search-color-border-hover);
box-shadow: -1px 0 0 0 var(--ac-search-button-border-hover, var(--a-border-action)) inset,
0 1px 0 0 var(--ac-search-button-border-hover, var(--a-border-action)) inset,
0 -1px 0 0 var(--ac-search-button-border-hover, var(--a-border-action)) inset,
-1px 0 0 0 var(--ac-search-button-border-hover, var(--a-border-action));
z-index: 1;
}
@@ -134,25 +127,25 @@
}
.navds-search__button-search.navds-button--secondary:focus {
box-shadow: 0 0 0 1px var(--navds-search-color-border) inset, var(--navds-shadow-focus);
box-shadow: 0 0 0 1px var(--ac-search-button-border, var(--a-border-default)) inset, var(--a-shadow-focus);
}
.navds-search__button-search.navds-button--secondary:focus:hover {
box-shadow: 0 0 0 1px var(--navds-search-color-border-hover) inset, var(--navds-shadow-focus);
box-shadow: 0 0 0 1px var(--ac-search-button-border-hover, var(--a-border-action)) inset, var(--a-shadow-focus);
}
.navds-search__button-search.navds-button--secondary:focus:active {
box-shadow: 0 0 0 1px white inset, var(--navds-shadow-focus);
box-shadow: 0 0 0 1px var(--ac-search-button-focus-active-border, var(--a-surface-default)) inset, var(--a-shadow-focus);
}
/* Error-handling */
.navds-search--error .navds-search__input:not(:hover):not(:disabled) {
border-color: var(--navds-search-color-border-error);
box-shadow: inset 0 0 0 1px var(--navds-search-color-border-error);
border-color: var(--ac-search-error-border, var(--a-border-danger));
box-shadow: inset 0 0 0 1px var(--ac-search-error-border, var(--a-border-danger));
}
.navds-search--error .navds-search__input:focus:not(:hover):not(:disabled) {
box-shadow: inset 0 0 0 1px var(--navds-search-color-border-error), var(--navds-shadow-focus);
box-shadow: inset 0 0 0 1px var(--ac-search-error-border, var(--a-border-danger)), var(--a-shadow-focus);
}
/* Focus layering */
+10 -21
View File
@@ -1,19 +1,8 @@
:root,
:host {
--navds-select-color-background: var(--navds-semantic-color-component-background-light);
--navds-select-color-border: var(--navds-semantic-color-border);
--navds-select-color-border-hover: var(--navds-semantic-color-interaction-primary);
--navds-select-color-border-error: var(--navds-semantic-color-interaction-danger);
--navds-select-color-shadow-error: var(--navds-semantic-color-interaction-danger);
--navds-select-color-border-disabled: var(--navds-global-color-gray-400);
--navds-select-color-background-disabled: var(--navds-semantic-color-component-background-alternate);
}
.navds-select__input {
appearance: none;
background-color: var(--navds-select-color-background);
border-radius: var(--navds-border-radius-medium);
border: 1px solid var(--navds-select-color-border);
background-color: var(--ac-select-bg, var(--a-surface-default));
border-radius: var(--a-border-radius-medium);
border: 1px solid var(--ac-select-border, var(--a-border-strong));
width: 100%;
box-sizing: border-box;
min-height: 48px;
@@ -24,12 +13,12 @@
}
.navds-select__input:hover {
border-color: var(--navds-select-color-border-hover);
border-color: var(--ac-select-hover-bg, var(--a-border-action));
}
.navds-select__input:focus {
outline: none;
box-shadow: var(--navds-shadow-focus);
box-shadow: var(--a-shadow-focus);
}
.navds-select__container {
@@ -37,7 +26,7 @@
display: flex;
width: 100%;
align-items: center;
color: var(--navds-semantic-color-text);
color: var(--a-text-default);
}
.navds-select__chevron {
@@ -57,13 +46,13 @@
Error handling
*/
.navds-select--error > * select:not(:hover):not(:focus):not(:disabled) {
box-shadow: 0 0 0 1px var(--navds-select-color-shadow-error);
border-color: var(--navds-select-color-border-error);
box-shadow: 0 0 0 1px var(--ac-select-error-border, var(--a-surface-danger));
border-color: var(--ac-select-error-border, var(--a-surface-danger));
}
.navds-select__input:disabled {
background-color: var(--navds-select-color-background);
border-color: var(--navds-select-color-border);
background-color: var(--ac-select-bg, var(--a-surface-default));
border: 1px solid var(--ac-select-border, var(--a-border-strong));
box-shadow: none;
cursor: not-allowed;
}
+20 -35
View File
@@ -1,18 +1,3 @@
:root,
:host {
--navds-switch-color-label: var(--navds-semantic-color-text);
--navds-switch-color-label-hover: var(--navds-semantic-color-interaction-primary);
--navds-switch-color-track-background: var(--navds-semantic-color-text-muted);
--navds-switch-color-track-background-checked: var(--navds-semantic-color-feedback-success-border);
--navds-switch-color-track-background-hover: var(--navds-global-color-gray-800);
--navds-switch-color-track-background-hover-checked: var(--navds-semantic-color-feedback-success-icon);
--navds-switch-color-track-shadow-inner-focus: var(--navds-semantic-color-component-background-light);
--navds-switch-color-thumb: var(--navds-semantic-color-component-background-light);
--navds-switch-color-thumb-icon: var(--navds-semantic-color-text-muted);
--navds-switch-color-thumb-icon-checked: var(--navds-semantic-color-feedback-success-border);
--navds-switch-color-thumb-loader-checked: var(--navds-semantic-color-feedback-success-border);
}
.navds-switch {
position: relative;
min-height: 48px;
@@ -47,13 +32,13 @@
/* Label */
.navds-switch__label-wrapper {
cursor: pointer;
color: var(--navds-switch-color-label);
color: var(--a-text-default);
}
.navds-switch__content {
display: flex;
flex-direction: column;
gap: var(--navds-spacing-1);
gap: var(--a-spacing-1);
padding: 0.75rem 0 0.75rem 3.25rem;
}
@@ -62,11 +47,11 @@
}
.navds-switch--small > .navds-switch__label-wrapper > .navds-switch__content {
padding: calc(var(--navds-spacing-2) - 2px) 0 calc(var(--navds-spacing-2) - 2px) 3.25rem;
padding: calc(var(--a-spacing-2) - 2px) 0 calc(var(--a-spacing-2) - 2px) 3.25rem;
}
.navds-switch--right.navds-switch--small > .navds-switch__label-wrapper > .navds-switch__content {
padding: calc(var(--navds-spacing-2) - 2px) 3.25rem calc(var(--navds-spacing-2) - 2px) 0;
padding: calc(var(--a-spacing-2) - 2px) 3.25rem calc(var(--a-spacing-2) - 2px) 0;
}
.navds-switch--with-description,
@@ -76,7 +61,7 @@
.navds-switch__input:hover ~ .navds-switch__label-wrapper,
.navds-switch__label-wrapper:hover {
color: var(--navds-switch-color-label-hover);
color: var(--ac-switch-action, var(--a-surface-action));
}
.navds-switch__input:disabled:hover ~ .navds-switch__label-wrapper {
@@ -87,16 +72,16 @@
.navds-switch__track {
width: 44px;
height: 24px;
background-color: var(--navds-switch-color-track-background);
background-color: var(--ac-switch-bg, var(--a-surface-neutral));
position: absolute;
top: var(--navds-spacing-3);
top: var(--a-spacing-3);
left: 0;
border-radius: var(--navds-border-radius-medium);
border-radius: var(--a-border-radius-medium);
transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1);
}
.navds-switch--small > .navds-switch__track {
top: var(--navds-spacing-1);
top: var(--a-spacing-1);
}
.navds-switch--right > .navds-switch__input,
@@ -106,34 +91,34 @@
}
.navds-switch__input:checked ~ .navds-switch__track {
background-color: var(--navds-switch-color-track-background-checked);
background-color: var(--ac-switch-checked-bg, var(--a-surface-success));
}
.navds-switch__input:hover ~ .navds-switch__track {
background-color: var(--navds-switch-color-track-background-hover);
background-color: var(--ac-switch-hover-bg, var(--a-surface-neutral-hover));
}
.navds-switch__input:hover:checked ~ .navds-switch__track {
background-color: var(--navds-switch-color-track-background-hover-checked);
background-color: var(--ac-switch-checked-hover-bg, var(--a-surface-success-hover));
}
.navds-switch__input:disabled ~ .navds-switch__track {
background-color: var(--navds-switch-color-track-background);
background-color: var(--ac-switch-bg, var(--a-surface-neutral));
}
.navds-switch__input:checked:disabled ~ .navds-switch__track {
background-color: var(--navds-switch-color-track-background-checked);
background-color: var(--ac-switch-checked-bg, var(--a-border-success));
}
.navds-switch__input:focus ~ .navds-switch__track {
box-shadow: 0 0 0 1px var(--navds-switch-color-track-shadow-inner-focus), var(--navds-shadow-focus);
box-shadow: 0 0 0 1px var(--a-surface-default), var(--a-shadow-focus);
}
/* Thumb */
.navds-switch__thumb {
background-color: var(--navds-switch-color-thumb);
color: var(--navds-switch-color-thumb-icon);
border-radius: var(--navds-border-radius-small);
background-color: var(--ac-switch-thumb-bg, var(--a-surface-default));
color: var(--ac-switch-thumb-icon, var(--a-icon-subtle));
border-radius: var(--a-border-radius-small);
width: 20px;
height: 20px;
position: absolute;
@@ -148,7 +133,7 @@
.navds-switch__input:checked ~ .navds-switch__track > .navds-switch__thumb {
transform: translateX(20px);
color: var(--navds-switch-color-thumb-icon-checked);
color: var(--ac-switch-thumb-icon-checked, var(--a-icon-success));
}
@media (hover: hover) and (pointer: fine) {
@@ -171,7 +156,7 @@
/* Loader */
.navds-switch__input:checked ~ .navds-switch__track > .navds-switch__thumb .navds-loader__foreground {
stroke: var(--navds-switch-color-thumb-loader-checked);
stroke: var(--ac-switch-thumb-icon-checked, var(--a-icon-success));
}
/* Disabled */
+21 -35
View File
@@ -1,35 +1,21 @@
:root,
:host,
[data-theme="light"] {
--navds-text-field-color-text: var(--navds-semantic-color-text);
--navds-text-field-color-background: var(--navds-semantic-color-component-background-light);
--navds-text-field-color-border: var(--navds-semantic-color-border);
--navds-text-field-color-border-hover: var(--navds-semantic-color-interaction-primary);
--navds-text-field-color-border-error: var(--navds-semantic-color-interaction-danger);
--navds-text-field-color-shadow-error: var(--navds-semantic-color-interaction-danger);
--navds-text-field-color-border-disabled: var(--navds-global-color-gray-400);
--navds-text-field-color-background-disabled: var(--navds-semantic-color-component-background-alternate);
--navds-text-field-color-text-disabled: var(--navds-semantic-color-text);
--navds-text-field-color-placeholder-text: var(--navds-semantic-color-text-muted);
}
[data-theme="dark"] {
--navds-text-field-color-text: var(--navds-semantic-color-text-inverted);
--navds-text-field-color-background: var(--navds-semantic-color-component-background-inverted);
--navds-text-field-color-border: var(--navds-semantic-color-border-inverted);
--navds-text-field-color-border-hover: var(--navds-global-color-blue-200);
--navds-text-field-color-placeholder-text: var(--navds-global-color-gray-500);
--ac-textfield-text: var(--a-text-on-inverted);
--ac-textfield-bg: var(--a-surface-inverted);
--ac-textfield-border: var(--a-border-on-inverted);
--ac-textfield-hover-border: var(--a-blue-200);
--ac-textfield-placeholder: var(--a-gray-500);
--ac-textfield-error-border: var(--a-red-300);
}
.navds-text-field__input {
appearance: none;
padding: var(--navds-spacing-2);
background-color: var(--navds-text-field-color-background);
border-radius: var(--navds-border-radius-medium);
border: 1px solid var(--navds-text-field-color-border);
padding: var(--a-spacing-2);
background-color: var(--ac-textfield-bg, var(--a-surface-default));
border-radius: var(--a-border-radius-medium);
border: 1px solid var(--ac-textfield-border, var(--a-border-default));
min-height: 48px;
width: 100%;
color: var(--navds-text-field-color-text);
color: var(--ac-textfield-text, var(--a-text-default));
}
.navds-text-field__input[size] {
@@ -37,7 +23,7 @@
}
.navds-text-field__input::placeholder {
color: var(--navds-text-field-color-placeholder-text);
color: var(--ac-textfield-placeholder, var(--a-text-subtle));
}
.navds-form-field--small .navds-text-field__input {
@@ -46,37 +32,37 @@
}
.navds-text-field__input:hover {
border-color: var(--navds-text-field-color-border-hover);
border-color: var(--ac-textfield-hover-border, var(--a-border-action));
}
.navds-text-field__input:focus {
outline: none;
box-shadow: var(--navds-shadow-focus);
box-shadow: var(--a-shadow-focus);
}
/**
Error handling
*/
.navds-text-field--error > .navds-text-field__input:not(:hover):not(:disabled) {
border-color: var(--navds-text-field-color-border-error);
box-shadow: 0 0 0 1px var(--navds-text-field-color-border-error);
border-color: var(--ac-textfield-error-border, var(--a-border-danger));
box-shadow: 0 0 0 1px var(--ac-textfield-error-border, var(--a-border-danger));
}
.navds-text-field--error > .navds-text-field__input:focus:not(:hover):not(:disabled) {
box-shadow: 0 0 0 1px var(--navds-text-field-color-border-error), var(--navds-shadow-focus);
box-shadow: 0 0 0 1px var(--a-border-danger), var(--a-shadow-focus);
}
/* Disabled handling */
.navds-text-field__input:disabled {
background-color: var(--navds-text-field-color-background);
border-color: var(--navds-text-field-color-border);
background-color: var(--ac-textfield-bg, var(--a-surface-default));
border-color: var(--ac-textfield-border, var(--a-border-default));
box-shadow: none;
cursor: not-allowed;
}
.navds-text-field__input[readonly] {
background-color: var(--navds-text-field-color-background);
border-color: var(--navds-text-field-color-border);
background-color: var(--ac-textfield-bg, var(--a-surface-default));
border-color: var(--ac-textfield-border, var(--a-border-default));
box-shadow: none;
cursor: not-allowed;
}
+31 -30
View File
@@ -1,15 +1,12 @@
:root,
:host {
--navds-textarea-color-background: var(--navds-semantic-color-component-background-light);
--navds-textarea-color-border: var(--navds-semantic-color-border);
--navds-textarea-color-border-hover: var(--navds-semantic-color-interaction-primary);
--navds-textarea-color-border-error: var(--navds-semantic-color-interaction-danger);
--navds-textarea-color-shadow-error: var(--navds-semantic-color-interaction-danger);
--navds-textarea-color-counter-text: var(--navds-semantic-color-text-muted);
--navds-textarea-color-counter-text-error: var(--navds-semantic-color-interaction-danger);
--navds-textarea-color-text-disabled: var(--navds-semantic-color-text);
--navds-textarea-color-border-disabled: var(--navds-global-color-gray-400);
--navds-textarea-color-background-disabled: var(--navds-semantic-color-component-background-alternate);
[data-theme="dark"] {
--ac-textarea-text: var(--a-text-on-inverted);
--ac-textarea-bg: var(--a-transparent);
--ac-textarea-border: var(--a-border-on-inverted);
--ac-textarea-hover-border: var(--a-blue-200);
--ac-textarea-placeholder: var(--a-gray-500);
--ac-textarea-error-border: var(--a-red-300);
--ac-textarea-counter-text: var(--a-gray-300);
--ac-textarea-counter-error-text: var(--a-red-300);
}
.navds-textarea__wrapper {
@@ -19,27 +16,31 @@
.navds-textarea__input {
appearance: none;
padding: var(--navds-spacing-2);
background-color: var(--navds-textarea-color-background);
border-radius: var(--navds-border-radius-medium);
border: 1px solid var(--navds-textarea-color-border);
padding: var(--a-spacing-2);
background-color: var(--ac-textarea-bg, var(--a-surface-default));
border-radius: var(--a-border-radius-medium);
border: 1px solid var(--ac-textarea-border, var(--a-border-default));
resize: none;
width: 100%;
display: block;
color: var(--navds-text-field-color-text);
color: var(--ac-textarea-text, var(--a-text-default));
}
.navds-textarea--counter {
padding-bottom: var(--navds-spacing-8);
padding-bottom: var(--a-spacing-8);
}
.navds-textarea__input::placeholder {
color: var(--ac-textarea-placeholder, var(--a-text-subtle));
}
.navds-textarea__input:hover {
border-color: var(--navds-textarea-color-border-hover);
border-color: var(--ac-textarea-hover-border, var(--a-border-action));
}
.navds-textarea__input:focus {
outline: none;
box-shadow: var(--navds-shadow-focus);
box-shadow: var(--a-shadow-focus);
}
.navds-form-field--small .navds-textarea__input {
@@ -47,22 +48,22 @@
}
.navds-form-field--small .navds-textarea--counter.navds-textarea__input {
padding-bottom: var(--navds-spacing-7);
padding-bottom: var(--a-spacing-7);
}
.navds-textarea__counter {
pointer-events: none;
color: var(--navds-textarea-color-counter-text);
color: var(--ac-textarea-counter-text, var(--a-text-subtle));
font-style: italic;
position: absolute;
text-align: left;
left: 1px;
bottom: 1px;
padding: var(--navds-spacing-1) var(--navds-spacing-2);
padding: var(--a-spacing-1) var(--a-spacing-2);
}
.navds-textarea__counter--error {
color: var(--navds-textarea-color-counter-text-error);
color: var(--ac-textarea-counter-error-text, var(--a-surface-danger));
}
.navds-textarea--resize .navds-textarea__input {
@@ -73,20 +74,20 @@
Error handling
*/
.navds-textarea--error .navds-textarea__input:not(:hover):not(:focus):not(:disabled) {
box-shadow: 0 0 0 1px var(--navds-textarea-color-shadow-error);
border-color: var(--navds-textarea-color-border-error);
box-shadow: 0 0 0 1px var(--ac-textarea-error-border, var(--a-border-danger));
border-color: var(--ac-textarea-error-border, var(--a-border-danger));
}
.navds-textarea__input:disabled {
background-color: var(--navds-textarea-color-background);
border-color: var(--navds-textarea-color-border);
background-color: var(--ac-textarea-bg, var(--a-surface-default));
border-color: var(--ac-textarea-border, var(--a-border-default));
box-shadow: none;
cursor: not-allowed;
}
.navds-textarea__input[readonly] {
background-color: var(--navds-textarea-color-background);
border-color: var(--navds-textarea-color-border);
background-color: var(--ac-textarea-bg, var(--a-surface-default));
border-color: var(--ac-textarea-border, var(--a-border-default));
box-shadow: none;
cursor: not-allowed;
}
+2 -2
View File
@@ -5,12 +5,12 @@
.navds-grid {
display: grid;
grid-template-columns: repeat(12, minmax(0, 1fr));
grid-gap: var(--navds-spacing-4);
grid-gap: var(--a-spacing-4);
}
@media (min-width: 448px) {
.navds-grid {
grid-gap: var(--navds-spacing-6);
grid-gap: var(--a-spacing-6);
}
}
+14 -19
View File
@@ -1,41 +1,35 @@
:root,
:host {
--navds-guide-panel-color-background: var(--navds-semantic-color-component-background-light);
--navds-guide-panel-color-border: var(--navds-global-color-blue-400);
--navds-guide-panel-color-illustration-background: var(--navds-global-color-blue-200);
}
/**
* GuidePanel component
*/
.navds-guide-panel {
position: relative;
padding-left: var(--navds-spacing-10);
padding-left: var(--a-spacing-10);
}
.navds-guide-panel__content {
background-color: var(--navds-guide-panel-color-background);
border-radius: var(--navds-border-radius-medium);
border: 2px solid var(--navds-guide-panel-color-border);
background-color: var(--ac-guide-panel-bg, var(--a-surface-default));
border-radius: var(--a-border-radius-medium);
border: 2px solid var(--ac-guide-panel-border, var(--a-border-action));
min-height: 7.25rem;
padding: var(--navds-spacing-6);
padding-left: var(--navds-spacing-14);
padding: var(--a-spacing-6);
padding-left: var(--a-spacing-14);
}
.navds-guide-panel--poster {
padding-left: 0;
padding-top: var(--navds-spacing-12);
padding-top: var(--a-spacing-12);
}
.navds-guide-panel--poster .navds-guide-panel__content {
padding: var(--navds-spacing-8);
padding-top: var(--navds-spacing-16);
padding: var(--a-spacing-8);
padding-top: var(--a-spacing-16);
}
.navds-guide-panel .navds-guide {
position: absolute;
top: var(--navds-spacing-4);
top: var(--a-spacing-4);
transform: translateX(-50%);
border: 2px solid var(--ac-guide-panel-border, var(--a-border-action));
}
.navds-guide-panel--poster .navds-guide {
@@ -50,12 +44,13 @@
display: flex;
align-items: center;
justify-content: center;
border-radius: var(--a-border-radius-full);
}
/* Guide illustration frame */
.navds-guide__illustration {
background: var(--navds-guide-panel-color-illustration-background);
border-radius: var(--navds-border-radius-full);
background: var(--ac-guide-panel-illustration-bg, var(--a-surface-action-subtle));
border-radius: var(--a-border-radius-full);
overflow: hidden;
}
+7 -18
View File
@@ -1,46 +1,35 @@
:root,
:host {
--navds-help-text-color: var(--navds-semantic-color-interaction-primary);
--navds-help-text-color-hover: var(--navds-semantic-color-component-background-light);
--navds-help-text-color-focus: var(--navds-semantic-color-component-background-light);
--navds-help-text-color-background-hover: var(--navds-semantic-color-interaction-primary);
--navds-help-text-color-background-focus: var(--navds-semantic-color-interaction-primary);
--navds-help-text-color-shadow-hover: var(--navds-semantic-color-interaction-primary);
--navds-help-text-color-popover-background: var(--navds-semantic-color-feedback-info-background);
}
.navds-help-text__button {
margin: 0;
padding: 0;
border: 0;
cursor: pointer;
background-color: transparent;
border-radius: var(--navds-border-radius-full);
border-radius: var(--a-border-radius-full);
display: flex;
justify-content: center;
align-items: center;
color: var(--navds-help-text-color);
color: var(--ac-help-text-button-color, var(--a-surface-action));
font-size: 1.5rem;
}
.navds-help-text__button:focus {
outline: none;
box-shadow: 0 0 0 1px var(--navds-global-color-white), 0 0 0 4px var(--navds-semantic-color-focus);
box-shadow: 0 0 0 1px var(--a-surface-default), 0 0 0 4px var(--a-border-focus);
}
.navds-help-text__icon {
border-radius: var(--navds-border-radius-full);
border-radius: var(--a-border-radius-full);
}
.navds-help-text__popover > .navds-popover__arrow {
background-color: var(--navds-help-text-color-popover-background);
background-color: var(--ac-help-text-popover-bg, var(--a-surface-info-subtle));
}
.navds-help-text__popover.navds-popover {
background-color: var(--navds-help-text-color-popover-background);
background-color: var(--ac-help-text-popover-bg, var(--a-surface-info-subtle));
max-width: 65ch;
--navds-popover-color-border: rgba(38 38 38 / 0.22);
--ac-popover-border: var(--a-border-info);
}
.navds-help-text__icon--filled {
+1
View File
@@ -7,6 +7,7 @@
@import "button.css";
@import "content-container.css";
@import "chat.css";
@import "chips.css";
@import "guide-panel.css";
@import "form/index.css";
@import "help-text.css";
+7 -14
View File
@@ -1,31 +1,24 @@
:root,
:host {
--navds-link-panel-color-text: var(--navds-semantic-color-text);
--navds-link-panel-color-border-hover: var(--navds-semantic-color-interaction-primary);
--navds-link-panel-color-title-hover: var(--navds-semantic-color-link);
}
.navds-link-panel {
text-decoration: none;
color: var(--navds-link-panel-color-text);
color: var(--ac-link-panel-text, var(--a-text-default));
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--navds-spacing-4);
gap: var(--a-spacing-4);
}
.navds-link-panel:hover .navds-link-panel__title {
text-decoration: underline;
color: var(--navds-link-panel-color-title-hover);
color: var(--ac-link-panel-hover-text, var(--a-text-action));
}
.navds-link-panel:hover {
box-shadow: var(--navds-shadow-medium);
border-color: var(--navds-link-panel-color-border-hover);
box-shadow: var(--a-shadow-medium);
border-color: var(--ac-link-panel-hover-border, var(--a-border-action));
}
.navds-link-panel:focus {
box-shadow: var(--navds-shadow-focus);
box-shadow: var(--a-shadow-focus);
outline: none;
}
@@ -41,5 +34,5 @@
}
.navds-link-panel__description {
margin-top: var(--navds-spacing-1);
margin-top: var(--a-spacing-1);
}
+10 -23
View File
@@ -1,31 +1,18 @@
:root,
:host {
--navds-link-color-text: var(--navds-semantic-color-link);
--navds-link-color-text-focus: var(--navds-semantic-color-text-inverted);
--navds-link-color-text-active: var(--navds-semantic-color-text-inverted);
--navds-link-color-background-focus: var(--navds-semantic-color-focus);
--navds-link-color-background-active: var(--navds-semantic-color-focus);
--navds-link-color-icon: var(--navds-semantic-color-link);
--navds-link-color-icon-focus: var(--navds-semantic-color-text-inverted);
--navds-link-color-on-info-background: var(--navds-semantic-color-text);
--navds-link-color-on-error-background: var(--navds-semantic-color-text);
}
.navds-link {
color: var(--navds-link-color-text);
color: var(--ac-link-text, var(--a-text-action));
text-decoration: underline;
display: inline-flex;
align-items: center;
gap: var(--navds-spacing-1);
gap: var(--a-spacing-1);
}
.navds-alert--info .navds-link {
color: var(--navds-link-color-on-info-background);
color: var(--a-text-default);
}
.navds-alert--error .navds-link,
.navds-confirmation-panel--error .navds-link {
color: var(--navds-link-color-on-error-background);
color: var(--a-text-default);
}
.navds-link:hover {
@@ -34,18 +21,18 @@
.navds-link:focus {
outline: none;
color: var(--navds-link-color-text-focus);
color: var(--ac-link-focus-text, var(--a-text-on-action));
text-decoration: none;
background-color: var(--navds-link-color-background-focus);
box-shadow: 0 0 0 2px var(--navds-semantic-color-focus);
background-color: var(--ac-link-focus-bg, var(--a-border-focus));
box-shadow: 0 0 0 2px var(--ac-link-focus-border, var(--a-border-focus));
}
.navds-link:active {
outline: none;
color: var(--navds-link-color-text-active);
color: var(--ac-link-active-text, var(--a-text-on-action));
text-decoration: none;
background-color: var(--navds-link-color-background-active);
box-shadow: 0 0 0 2px var(--navds-semantic-color-focus);
background-color: var(--ac-link-active-bg, var(--a-border-focus));
box-shadow: 0 0 0 2px var(--ac-link-active-border, var(--a-border-focus));
}
.navds-link svg {
+16 -27
View File
@@ -1,14 +1,3 @@
:root,
:host {
--navds-loader-color-foreground: var(--navds-global-color-gray-400);
--navds-loader-color-background: rgb(0 0 0 / 0.05);
--navds-loader-color-neutral-foreground: var(--navds-global-color-gray-400);
--navds-loader-color-interaction-foreground: var(--navds-global-color-blue-500);
--navds-loader-color-inverted-foreground: var(--navds-global-color-white);
--navds-loader-color-inverted-background: rgb(255 255 255 / 0.25);
--navds-loader-color-transparent-background: transparent;
}
.navds-loader {
width: 1.5rem;
display: inline-block;
@@ -16,88 +5,88 @@
animation: loader-rotate 1.8s linear infinite;
stroke-width: 6;
--navds-loader-background-stroke-width: 5.9;
--ac-loader-background-stroke-width: 5.9;
}
.navds-loader__foreground {
animation: loader-dasharray 1.8s ease-in-out infinite;
stroke-dasharray: 80px, 200px;
stroke-dashoffset: 0;
stroke: var(--navds-loader-color-foreground);
stroke: var(--ac-loader-stroke, var(--a-border-default));
}
.navds-loader__background {
stroke: var(--navds-loader-color-background);
stroke-width: var(--navds-loader-background-stroke-width);
stroke: var(--ac-loader-stroke-bg, var(--a-surface-active));
stroke-width: var(--ac-loader-background-stroke-width);
}
.navds-loader--neutral .navds-loader__foreground {
stroke: var(--navds-loader-color-neutral-foreground);
stroke: var(--ac-loader-neutral-stroke, var(--a-border-default));
}
.navds-loader--interaction .navds-loader__foreground {
stroke: var(--navds-loader-color-interaction-foreground);
stroke: var(--ac-loader-interaction-stroke, var(--a-border-action));
}
.navds-loader--inverted .navds-loader__foreground {
stroke: var(--navds-loader-color-inverted-foreground);
stroke: var(--ac-loader-inverted-stroke, var(--a-border-on-inverted));
}
.navds-loader--inverted .navds-loader__background {
stroke: var(--navds-loader-color-inverted-background);
stroke: var(--ac-loader-inverted-stroke-bg, var(--a-border-on-inverted-subtle));
}
.navds-loader--transparent .navds-loader__background {
stroke: var(--navds-loader-color-transparent-background);
stroke: var(--a-surface-transparent);
}
.navds-loader--3xlarge {
width: 5.5rem;
stroke-width: 5;
--navds-loader-background-stroke-width: 4.8;
--ac-loader-background-stroke-width: 4.8;
}
.navds-loader--2xlarge {
width: 4rem;
stroke-width: 6;
--navds-loader-background-stroke-width: 5.8;
--ac-loader-background-stroke-width: 5.8;
}
.navds-loader--xlarge {
width: 2.5rem;
stroke-width: 6;
--navds-loader-background-stroke-width: 5.8;
--ac-loader-background-stroke-width: 5.8;
}
.navds-loader--large {
width: 2rem;
stroke-width: 7;
--navds-loader-background-stroke-width: 6.8;
--ac-loader-background-stroke-width: 6.8;
}
.navds-loader--medium {
width: 1.5rem;
stroke-width: 7;
--navds-loader-background-stroke-width: 6.8;
--ac-loader-background-stroke-width: 6.8;
}
.navds-loader--small {
width: 1.25rem;
stroke-width: 8;
--navds-loader-background-stroke-width: 7.8;
--ac-loader-background-stroke-width: 7.8;
}
.navds-loader--xsmall {
width: 1rem;
stroke-width: 8;
--navds-loader-background-stroke-width: 7.8;
--ac-loader-background-stroke-width: 7.8;
}
@keyframes loader-rotate {
+10 -17
View File
@@ -1,16 +1,10 @@
:root,
:host {
--navds-modal-color-background: var(--navds-semantic-color-component-background-light);
--navds-modal-color-overlay: rgb(38 38 38 / 0.7);
}
.ReactModal__Body--open {
overflow: hidden;
}
.navds-modal {
background-color: var(--navds-modal-color-background);
border-radius: var(--navds-border-radius-medium);
background-color: var(--ac-modal-bg, var(--a-surface-default));
border-radius: var(--a-border-radius-medium);
display: block;
position: relative;
overflow: auto;
@@ -18,24 +12,24 @@
}
.navds-modal__content {
padding: var(--navds-spacing-4);
padding: var(--a-spacing-4);
}
.navds-modal:focus,
.navds-modal--focus {
box-shadow: var(--navds-shadow-focus);
box-shadow: var(--a-shadow-focus);
outline: none;
}
.navds-modal__overlay {
position: fixed;
z-index: var(--navds-z-index-modal);
z-index: var(--a-z-index-modal);
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: var(--navds-modal-color-overlay);
padding: var(--navds-spacing-4);
background-color: var(--ac-modal-backdrop, var(--a-surface-backdrop));
padding: var(--a-spacing-4);
display: flex;
align-items: center;
justify-content: center;
@@ -54,14 +48,13 @@
.navds-modal__button {
position: absolute;
top: var(--navds-spacing-4);
right: var(--navds-spacing-4);
top: var(--a-spacing-4);
right: var(--a-spacing-4);
display: flex;
padding: var(--navds-spacing-2);
padding: var(--a-spacing-2);
}
.navds-modal__button svg {
/* 24x24px */
height: 1.5rem;
width: 1.5rem;
}
+7 -7
View File
@@ -1,8 +1,8 @@
{
"name": "@navikt/ds-css",
"version": "1.3.39",
"description": "Css for NAV Designsystem components",
"author": "NAV Designsystem team",
"version": "2.0.1",
"description": "CSS for NAV Designsystem",
"author": "Aksel | NAV designsystem team",
"keywords": [
"css"
],
@@ -20,11 +20,11 @@
"watch": "postcss --watch --use postcss-import -o dist/index.css index.css"
},
"devDependencies": {
"@navikt/ds-tokens": "^1.3.39",
"@navikt/ds-tokens": "^2.0.1",
"normalize.css": "^8.0.1",
"postcss": "^8.3.6",
"postcss-cli": "^8.3.1",
"postcss": "^8.4.0",
"postcss-cli": "^9.0.0",
"postcss-combine-duplicated-selectors": "10.0.3",
"postcss-import": "^14.0.2"
"postcss-import": "^14.1.0"
}
}
+12 -18
View File
@@ -1,54 +1,48 @@
:root,
:host {
--navds-pagination-color-background-selected: var(--navds-semantic-color-interaction-primary-selected);
--navds-pagination-color-text-selected: var(--navds-semantic-color-text-inverted);
}
.navds-pagination__list {
margin: 0;
padding: 0;
list-style: none;
display: flex;
gap: var(--navds-spacing-3);
gap: var(--a-spacing-3);
}
.navds-pagination__ellipsis {
display: flex;
align-items: center;
justify-content: center;
width: var(--navds-spacing-12);
width: var(--a-spacing-12);
cursor: default;
}
.navds-pagination--small .navds-pagination__ellipsis {
width: var(--navds-spacing-8);
width: var(--a-spacing-8);
}
.navds-pagination--xsmall .navds-pagination__ellipsis {
width: var(--navds-spacing-6);
width: var(--a-spacing-6);
}
.navds-pagination__item {
color: var(--navds-semantic-color-text);
color: var(--ac-pagination-text, var(--a-text-default));
}
.navds-pagination--medium .navds-pagination__item {
border-radius: var(--navds-border-radius-medium);
border-radius: var(--a-border-radius-medium);
}
.navds-pagination__item[aria-current="true"] {
background-color: var(--navds-pagination-color-background-selected);
color: var(--navds-pagination-color-text-selected);
background-color: var(--ac-pagination-selected-bg, var(--a-surface-action-selected));
color: var(--ac-pagination-selected-text, var(--a-text-on-action));
}
.navds-pagination__item[aria-current="true"]:focus {
box-shadow: inset 0 0 0 1px var(--navds-button-color-tertiary-border-active), var(--navds-shadow-focus);
box-shadow: inset 0 0 0 1px var(--a-surface-default), var(--a-shadow-focus);
}
.navds-pagination__prev-next {
display: flex;
align-items: center;
gap: var(--navds-spacing-1);
gap: var(--a-spacing-1);
}
.navds-pagination--small .navds-pagination__prev-next:where(.navds-pagination--prev-next--with-text) {
@@ -57,8 +51,8 @@
}
.navds-pagination--xsmall .navds-pagination__prev-next:where(.navds-pagination--prev-next--with-text) {
padding-left: 0.125rem;
padding-right: 0.125rem;
padding-left: var(--a-spacing-05);
padding-right: var(--a-spacing-05);
}
.navds-pagination--invisible {
+4 -10
View File
@@ -1,16 +1,10 @@
:root,
:host {
--navds-panel-color-background: var(--navds-semantic-color-component-background-light);
--navds-panel-color-border: var(--navds-semantic-color-border-muted);
}
.navds-panel {
background-color: var(--navds-panel-color-background);
padding: var(--navds-spacing-4);
border-radius: var(--navds-border-radius-small);
background-color: var(--ac-panel-bg, var(--a-surface-default));
padding: var(--a-spacing-4);
border-radius: var(--a-border-radius-small);
border: 1px solid transparent;
}
.navds-panel--border {
border-color: var(--navds-panel-color-border);
border-color: var(--ac-panel-border, var(--a-border-default));
}
+9 -15
View File
@@ -1,20 +1,14 @@
:root,
:host {
--navds-popover-color-background: var(--navds-semantic-color-component-background-light);
--navds-popover-color-border: var(--navds-semantic-color-border-muted);
}
.navds-popover {
z-index: var(--navds-z-index-popover);
background-color: var(--navds-popover-color-background);
box-shadow: var(--navds-shadow-medium);
z-index: var(--a-z-index-popover);
background-color: var(--ac-popover-bg, var(--a-surface-default));
box-shadow: var(--a-shadow-medium);
border: 1px solid;
border-color: var(--navds-popover-color-border);
border-radius: var(--navds-border-radius-medium);
border-color: var(--ac-popover-border, var(--a-border-default));
border-radius: var(--a-border-radius-medium);
}
.navds-popover__content {
padding: var(--navds-spacing-4);
padding: var(--a-spacing-4);
}
.navds-popover--hidden {
@@ -23,16 +17,16 @@
.navds-popover:focus {
outline: none;
box-shadow: var(--navds-shadow-focus);
box-shadow: var(--a-shadow-focus);
}
.navds-popover__arrow {
position: absolute;
z-index: -1;
transform: rotate(45deg);
background-color: var(--navds-popover-color-background);
background-color: var(--ac-popover-bg, var(--a-surface-default));
border: 1px solid;
border-color: var(--navds-popover-color-border);
border-color: var(--ac-popover-border, var(--a-border-default));
width: 1rem;
height: 1rem;
}
+10 -10
View File
@@ -5,33 +5,33 @@
background: none;
display: flex;
align-items: flex-start;
gap: 0.125rem;
color: var(--navds-semantic-color-link);
border-radius: var(--navds-border-radius-small);
padding: var(--navds-spacing-1) var(--navds-spacing-1) var(--navds-spacing-1) 2px;
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) 2px;
text-align: start;
}
.navds-read-more--small .navds-read-more__button {
padding: 2px var(--navds-spacing-1) 2px 2px;
padding: 2px var(--a-spacing-1) 2px 2px;
}
.navds-read-more__button:hover {
background-color: rgba(38 38 38 / 0.06);
background-color: var(--ac-read-more-hover-bg, var(--a-surface-hover));
}
.navds-read-more__button:active {
background-color: rgba(38 38 38 / 0.1);
background-color: var(--ac-read-more-active-bg, var(--a-surface-active));
}
.navds-read-more__button:focus {
outline: none;
box-shadow: var(--navds-shadow-focus);
box-shadow: var(--a-shadow-focus);
}
.navds-read-more__content {
margin-top: var(--navds-spacing-1);
border-left: 2px solid rgba(38 38 38 / 0.36);
margin-top: var(--a-spacing-1);
border-left: 2px solid var(--ac-read-more-line, var(--a-border-divider));
margin-left: 11px;
padding-left: 11px;
}
+20 -20
View File
@@ -3,7 +3,7 @@
--navds-stepper-border-width: 2px;
--navds-stepper-line-length: 1rem;
color: var(--navds-semantic-color-interaction-primary);
color: var(--ac-stepper-text, var(--a-surface-action));
font-weight: 600;
line-height: 1;
list-style: none;
@@ -28,7 +28,7 @@
}
.navds-stepper__line {
background-color: var(--navds-semantic-color-border-muted);
background-color: var(--ac-stepper-line, var(--a-border-default));
width: var(--navds-stepper-border-width);
height: 100%;
min-height: var(--navds-stepper-line-length);
@@ -37,7 +37,7 @@
}
.navds-stepper__step--behind.navds-stepper__step--completed + .navds-stepper__line {
background-color: var(--navds-global-color-blue-500);
background-color: var(--ac-stepper-line-completed, var(--a-border-selected));
}
.navds-stepper__line--1 {
@@ -58,7 +58,7 @@
grid-column: 1 / -1;
display: grid;
grid-template-columns: [circle] var(--navds-stepper-circle-size) [content] auto;
gap: var(--navds-spacing-2);
gap: var(--a-spacing-2);
justify-content: flex-start;
text-decoration: none;
cursor: pointer;
@@ -76,13 +76,13 @@ button.navds-stepper__step {
}
.navds-stepper__step--non-interactive {
color: var(--navds-global-color-gray-600);
color: var(--ac-stepper-non-interactive, var(--a-text-subtle));
cursor: default;
}
:where(.navds-stepper__step):focus {
outline: none;
box-shadow: var(--navds-shadow-focus);
box-shadow: var(--a-shadow-focus);
isolation: isolate;
}
@@ -94,7 +94,7 @@ button.navds-stepper__step {
width: var(--navds-stepper-circle-size);
height: var(--navds-stepper-circle-size);
border: var(--navds-stepper-border-width) solid currentColor;
border-radius: var(--navds-border-radius-full);
border-radius: var(--a-border-radius-full);
line-height: 1;
}
@@ -168,7 +168,7 @@ button.navds-stepper__step {
/* Active step */
:where(.navds-stepper__step--active) .navds-stepper__content {
color: var(--navds-semantic-color-interaction-primary-selected);
color: var(--ac-stepper-active, var(--a-text-action-selected));
}
:where(.navds-stepper__step:hover) .navds-stepper__content {
@@ -180,28 +180,28 @@ button.navds-stepper__step {
}
:where(.navds-stepper__step--active) .navds-stepper__circle {
background-color: var(--navds-semantic-color-interaction-primary-selected);
border-color: var(--navds-semantic-color-interaction-primary-selected);
color: var(--navds-semantic-color-text-inverted);
background-color: var(--ac-stepper-active-bg, var(--a-surface-action-selected));
border-color: var(--ac-stepper-active-border, var(--a-border-action-selected));
color: var(--ac-stepper-active-text, var(--a-text-on-action));
}
:where(.navds-stepper__step:not(.navds-stepper__step--active):hover) .navds-stepper__circle {
background-color: var(--navds-semantic-color-interaction-primary-hover-subtle);
background-color: var(--ac-stepper-hover-bg, var(--a-surface-action-subtle-hover));
}
/* Non-interactive */
:where(.navds-stepper__step--non-interactive.navds-stepper__step--active) .navds-stepper__content {
color: var(--navds-global-color-gray-900);
color: var(--ac-stepper-non-interactive-active, var(--a-text-default));
}
.navds-stepper__step--non-interactive.navds-stepper__step--behind.navds-stepper__step--completed + .navds-stepper__line {
background-color: var(--navds-global-color-gray-600);
background-color: var(--ac-stepper-non-interactive-line-completed, var(--a-border-strong));
}
:where(.navds-stepper__step--non-interactive.navds-stepper__step--active) .navds-stepper__circle {
background-color: var(--navds-global-color-gray-900);
border-color: var(--navds-global-color-gray-900);
color: var(--navds-global-color-white);
background-color: var(--ac-stepper-non-interactive-active-bg, var(--a-surface-inverted));
border-color: var(--ac-stepper-non-interactive-active-border, var(--a-surface-inverted));
color: var(--ac-stepper-non-interactive-active-text, var(--a-text-on-inverted));
}
:where(.navds-stepper__step--non-interactive:hover) .navds-stepper__circle {
@@ -209,14 +209,14 @@ button.navds-stepper__step {
}
:where(.navds-stepper__step--non-interactive.navds-stepper__step--active:hover) .navds-stepper__circle {
background-color: var(--navds-global-color-gray-900);
background-color: var(--ac-stepper-non-interactive-active-bg, var(--a-surface-inverted));
}
:where(.navds-stepper__step--completed.navds-stepper__step--active) .navds-stepper__circle {
background-color: inherit;
color: var(--navds-global-color-deepblue-500);
color: var(--ac-stepper-active-completed, var(--a-text-action-selected));
}
:where(.navds-stepper__step--completed.navds-stepper__step--active.navds-stepper__step--non-interactive) .navds-stepper__circle {
color: var(--navds-global-color-gray-900);
color: var(--ac-stepper-non-interactive-active-completed, var(--a-text-default));
}
+24 -33
View File
@@ -1,13 +1,3 @@
:root,
:host {
--navds-table-cell-color-border: var(--navds-semantic-color-border-muted);
--navds-table-row-color-background-hover: var(--navds-semantic-color-canvas-background);
--navds-table-row-color-background-selected: var(--navds-semantic-color-interaction-primary-hover-subtle);
--navds-table-row-color-background-selected-hover: var(--navds-global-color-blue-100);
--navds-table-row-color-background-zebra: var(--navds-semantic-color-component-background-alternate);
--navds-table-cell-color-border-hover: var(--navds-semantic-color-border);
}
.navds-table {
width: 100%;
border-collapse: collapse;
@@ -27,19 +17,19 @@
}
.navds-table__body .navds-table__row--shade-on-hover:hover {
background-color: var(--navds-table-row-color-background-hover);
background-color: var(--ac-table-row-hover, var(--a-bg-subtle));
}
.navds-table__row--selected {
background-color: var(--navds-table-row-color-background-selected);
background-color: var(--ac-table-row-selected, var(--a-surface-action-subtle));
}
.navds-table__body .navds-table__row--shade-on-hover.navds-table__row--selected:hover {
background-color: var(--navds-table-row-color-background-selected-hover);
background-color: var(--ac-table-row-selected-hover, var(--a-surface-action-subtle-hover));
}
.navds-table--zebra-stripes .navds-table__body :where(.navds-table__row:nth-child(odd):not(.navds-table__row--selected)) {
background-color: var(--navds-table-row-color-background-zebra);
background-color: var(--ac-table-row-zebra, var(--a-surface-subtle));
}
.navds-table--zebra-stripes
@@ -49,14 +39,14 @@
}
.navds-table--zebra-stripes .navds-table__body .navds-table__expanded-row:nth-child(4n) {
background-color: var(--navds-table-row-color-background-zebra);
background-color: var(--ac-table-row-zebra, var(--a-surface-subtle));
}
.navds-table__header-cell,
.navds-table__data-cell {
display: table-cell;
padding: var(--navds-spacing-4) var(--navds-spacing-3);
border-bottom: 1px solid var(--navds-table-cell-color-border);
padding: var(--a-spacing-4) var(--a-spacing-3);
border-bottom: 1px solid var(--ac-table-row-border, var(--a-border-default));
text-align: left;
}
@@ -77,7 +67,7 @@
:where(.navds-table__body .navds-table__row--shade-on-hover:hover) .navds-table__header-cell,
:where(.navds-table__body .navds-table__row--shade-on-hover:hover) .navds-table__data-cell {
border-color: var(--navds-table-cell-color-border-hover);
border-color: var(--ac-table-cell-hover-border, var(--a-border-strong));
}
:where(.navds-table__expandable-row--open:hover) .navds-table__data-cell {
@@ -86,7 +76,7 @@
.navds-table--small .navds-table__header-cell,
.navds-table--small .navds-table__data-cell {
padding: var(--navds-spacing-2) var(--navds-spacing-3);
padding: var(--a-spacing-2) var(--a-spacing-3);
}
.navds-table .navds-checkbox .navds-checkbox__input {
@@ -108,35 +98,36 @@
.navds-table__sort-button {
appearance: none;
background: none;
color: var(--navds-semantic-color-link);
color: var(--ac-table-sort-button-text, var(--a-text-action));
border: none;
cursor: pointer;
margin: 0;
padding: var(--navds-spacing-4) var(--navds-spacing-3);
padding: var(--a-spacing-4) var(--a-spacing-3);
width: 100%;
display: flex;
gap: 0.5rem;
gap: var(--a-spacing-2);
align-items: center;
line-height: inherit;
font-weight: inherit;
}
.navds-table--small .navds-table__sort-button {
padding: var(--navds-spacing-2) var(--navds-spacing-3);
padding: var(--a-spacing-2) var(--a-spacing-3);
}
.navds-table__sort-button:hover {
background-color: var(--navds-semantic-color-canvas-background);
background-color: var(--ac-table-sort-button-hover-bg, var(--a-bg-subtle));
}
.navds-table__sort-button:focus {
outline: none;
box-shadow: inset 0 0 0 2px var(--navds-semantic-color-focus);
box-shadow: inset 0 0 0 2px var(--a-border-focus);
}
.navds-table__header-cell[aria-sort="ascending"] .navds-table__sort-button,
.navds-table__header-cell[aria-sort="descending"] .navds-table__sort-button {
background-color: var(--navds-global-color-blue-50);
background-color: var(--ac-table-sort-button-sorted-bg, var(--a-surface-selected));
color: var(--a-table-sort-button-sorted-text, var(--a-text-action-on-action-subtle));
}
.navds-table__header-cell--align-right .navds-table__sort-button {
@@ -161,7 +152,7 @@
}
.navds-table__expandable-row--open .navds-table__header-cell {
border-color: var(--navds-semantic-color-border-muted);
border-color: var(--ac-table-row-border, var(--a-border-default));
}
.navds-table__expandable-row--open .navds-table__toggle-expand-cell--open {
@@ -183,15 +174,15 @@
display: flex;
align-items: center;
cursor: pointer;
padding: var(--navds-spacing-4);
padding: var(--a-spacing-4);
}
.navds-table--small .navds-table__toggle-expand-button {
padding: var(--navds-spacing-2);
padding: var(--a-spacing-2);
}
.navds-table__toggle-expand-button:focus {
box-shadow: inset var(--navds-shadow-focus);
box-shadow: inset var(--a-shadow-focus);
}
.navds-table__expandable-icon {
@@ -224,13 +215,13 @@
}
.navds-table__expanded-row-collapse:not([style*="height: 0px;"]) {
border-bottom: 1px solid var(--navds-table-cell-color-border);
border-bottom: 1px solid var(--ac-table-row-border, var(--a-border-default));
}
.navds-table__expanded-row-content {
padding: var(--navds-spacing-4) 4.25rem;
padding: var(--a-spacing-4) 4.25rem;
}
.navds-table--small .navds-table__expanded-row-content {
padding: var(--navds-spacing-2) var(--navds-spacing-12);
padding: var(--a-spacing-2) var(--a-spacing-12);
}
+13 -13
View File
@@ -1,5 +1,5 @@
.navds-tabs__tablist-wrapper {
box-shadow: inset 0 -1px 0 0 var(--navds-global-color-gray-300);
box-shadow: inset 0 -1px 0 0 var(--ac-tabs-border, var(--a-border-divider));
width: 100%;
display: flex;
}
@@ -19,7 +19,7 @@
}
.navds-tabs__scroll-button {
padding: var(--navds-spacing-3) var(--navds-spacing-4);
padding: var(--a-spacing-3) var(--a-spacing-4);
width: 44px;
display: flex;
justify-content: center;
@@ -37,41 +37,41 @@
}
.navds-tabs--small .navds-tabs__scroll-button {
padding: 0.375rem var(--navds-spacing-4);
padding: 0.375rem var(--a-spacing-4);
width: 32px;
}
.navds-tabs__tab {
min-height: 48px;
padding: var(--navds-spacing-3) var(--navds-spacing-4);
padding: var(--a-spacing-3) var(--a-spacing-4);
display: inline-flex;
justify-content: center;
align-items: center;
background: none;
border: none;
color: var(--navds-semantic-color-text-muted);
color: var(--ac-tabs-text, var(--a-text-subtle));
cursor: pointer;
}
.navds-tabs__tab:hover {
box-shadow: inset 0 -3px 0 0 var(--navds-global-color-gray-300);
box-shadow: inset 0 -3px 0 0 var(--ac-tabs-hover-border, var(--a-border-subtle-hover));
}
.navds-tabs__tab[aria-selected="true"] {
box-shadow: inset 0 -3px 0 0 var(--navds-semantic-color-interaction-primary);
color: var(--navds-semantic-color-text);
box-shadow: inset 0 -3px 0 0 var(--ac-tabs-selected-border, var(--a-border-action));
color: var(--ac-tabs-selected-text, var(--a-text-default));
}
.navds-tabs__tab:focus {
outline: none;
box-shadow: inset var(--navds-shadow-focus);
color: var(--navds-semantic-color-text);
box-shadow: inset var(--a-shadow-focus);
color: var(--ac-tabs-focus-text, var(--a-text-default));
}
.navds-tabs__tab-inner {
display: flex;
align-items: center;
gap: var(--navds-spacing-1);
gap: var(--a-spacing-1);
}
.navds-tabs__tab-inner svg {
@@ -85,12 +85,12 @@
.navds-tabs__tab--small {
min-height: 32px;
padding: 0.375rem var(--navds-spacing-4);
padding: 0.375rem var(--a-spacing-4);
}
.navds-tabs__tab-icon--top,
.navds-tabs__tab--small.navds-tabs__tab-icon--top {
padding: var(--navds-spacing-1) var(--navds-spacing-4);
padding: var(--a-spacing-1) var(--a-spacing-4);
}
.navds-tabs__tab svg,
+93 -28
View File
@@ -1,51 +1,116 @@
:root,
:host {
--navds-tag-color-border: var(--navds-semantic-color-border-muted);
--navds-tag-color-background: var(--navds-semantic-color-component-background-alternate);
--navds-tag-color-info-background: var(--navds-semantic-color-feedback-info-background);
--navds-tag-color-info-border: var(--navds-semantic-color-feedback-info-border);
--navds-tag-color-warning-background: var(--navds-semantic-color-feedback-warning-background);
--navds-tag-color-warning-border: var(--navds-semantic-color-feedback-warning-border);
--navds-tag-color-success-background: var(--navds-semantic-color-feedback-success-background);
--navds-tag-color-success-border: var(--navds-semantic-color-feedback-success-border);
--navds-tag-color-error-background: var(--navds-semantic-color-feedback-danger-background);
--navds-tag-color-error-border: var(--navds-semantic-color-feedback-danger-border);
}
.navds-tag {
border: 1px solid;
border-color: var(--navds-tag-color-border);
border-radius: var(--navds-border-radius-medium);
background-color: var(--navds-tag-color-background);
border-radius: var(--a-border-radius-small);
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0.125rem var(--navds-spacing-3);
padding: var(--a-spacing-05) var(--a-spacing-2);
min-height: 32px;
line-height: 1;
}
.navds-tag--small {
min-height: 24px;
padding-right: var(--navds-spacing-1);
padding-left: var(--navds-spacing-1);
padding: 0 0.375rem;
}
.navds-tag--xsmall {
min-height: 20px;
padding: 0 var(--a-spacing-1);
}
.navds-tag--error {
background-color: var(--navds-tag-color-error-background);
border-color: var(--navds-tag-color-error-border);
border-color: var(--ac-tag-error-border, var(--a-border-danger));
background-color: var(--ac-tag-error-bg, var(--a-surface-danger-subtle));
color: var(--ac-tag-error-text, var(--a-text-default));
}
.navds-tag--error-filled {
border-color: transparent;
background-color: var(--ac-tag-error-filled-bg, var(--a-surface-danger));
color: var(--ac-tag-error-filled-text, var(--a-text-on-danger));
}
.navds-tag--success {
background-color: var(--navds-tag-color-success-background);
border-color: var(--navds-tag-color-success-border);
border-color: var(--ac-tag-success-border, var(--a-border-success));
background-color: var(--ac-tag-success-bg, var(--a-surface-success-subtle));
color: var(--ac-tag-success-text, var(--a-text-default));
}
.navds-tag--success-filled {
border-color: transparent;
background-color: var(--ac-tag-success-filled-bg, var(--a-surface-success));
color: var(--ac-tag-success-filled-text, var(--a-text-on-success));
}
.navds-tag--warning {
background-color: var(--navds-tag-color-warning-background);
border-color: var(--navds-tag-color-warning-border);
border-color: var(--ac-tag-warning-border, var(--a-border-warning));
background-color: var(--ac-tag-warning-bg, var(--a-surface-warning-subtle));
color: var(--ac-tag-warning-text, var(--a-text-default));
}
.navds-tag--warning-filled {
border-color: transparent;
background-color: var(--ac-tag-warning-filled-bg, var(--a-surface-warning));
color: var(--ac-tag-warning-filled-text, var(--a-text-on-warning));
}
.navds-tag--info {
background-color: var(--navds-tag-color-info-background);
border-color: var(--navds-tag-color-info-border);
border-color: var(--ac-tag-info-border, var(--a-border-info));
background-color: var(--ac-tag-info-bg, var(--a-surface-info-subtle));
color: var(--ac-tag-info-text, var(--a-text-default));
}
.navds-tag--info-filled {
border-color: transparent;
background-color: var(--ac-tag-info-filled-bg, var(--a-surface-info));
color: var(--ac-tag-info-filled-text, var(--a-text-on-info));
}
.navds-tag--neutral {
border-color: var(--ac-tag-neutral-border, var(--a-border-default));
background-color: var(--ac-tag-neutral-bg, var(--a-surface-neutral-subtle));
color: var(--ac-tag-neutral-text, var(--a-text-default));
}
.navds-tag--neutral-filled {
border-color: transparent;
background-color: var(--ac-tag-neutral-filled-bg, var(--a-surface-neutral));
color: var(--ac-tag-neutral-filled-text, var(--a-text-on-neutral));
}
.navds-tag--alt1 {
border-color: var(--ac-tag-alt-1-border, var(--a-border-alt-1));
background-color: var(--ac-tag-alt-1-bg, var(--a-surface-alt-1-subtle));
color: var(--ac-tag-alt-1-text, var(--a-text-default));
}
.navds-tag--alt1-filled {
border-color: transparent;
background-color: var(--ac-tag-alt-1-filled-bg, var(--a-surface-alt-1));
color: var(--ac-tag-alt-1-filled-text, var(--a-text-on-alt-1));
}
.navds-tag--alt2 {
border-color: var(--ac-tag-alt-2-border, var(--a-border-alt-2));
background-color: var(--ac-tag-alt-2-bg, var(--a-surface-alt-2-subtle));
color: var(--ac-tag-alt-2-text, var(--a-text-default));
}
.navds-tag--alt2-filled {
border-color: transparent;
background-color: var(--ac-tag-alt-2-filled-bg, var(--a-surface-alt-2));
color: var(--ac-tag-alt-2-filled-text, var(--a-text-on-alt-2));
}
.navds-tag--alt3 {
border-color: var(--ac-tag-alt-3-border, var(--a-border-alt-3));
background-color: var(--ac-tag-alt-3-bg, var(--a-surface-alt-3-subtle));
color: var(--ac-tag-alt-3-text, var(--a-text-default));
}
.navds-tag--alt3-filled {
border-color: transparent;
background-color: var(--ac-tag-alt-3-filled-bg, var(--a-surface-alt-3));
color: var(--ac-tag-alt-3-filled-text, var(--a-text-on-alt-3));
}
+17 -28
View File
@@ -1,26 +1,15 @@
:root,
:host {
--navds-toggle-group-color-background: var(--navds-semantic-color-component-background-light);
--navds-toggle-group-color-text: var(--navds-semantic-color-text);
--navds-toggle-group-color-border: var(--navds-semantic-color-divider);
--navds-toggle-group-color-background-hover: var(--navds-semantic-color-interaction-primary-hover-subtle);
--navds-toggle-group-color-text-hover: var(--navds-semantic-color-interaction-primary);
--navds-toggle-group-color-background-pressed: var(--navds-semantic-color-interaction-primary-selected);
--navds-toggle-group-color-text-pressed: var(--navds-semantic-color-text-inverted);
}
.navds-toggle-group__wrapper {
display: grid;
justify-items: start;
gap: var(--navds-spacing-2);
gap: var(--a-spacing-2);
}
.navds-toggle-group {
border-radius: 7px; /* Custom value OK */
background-color: var(--navds-toggle-group-color-background);
box-shadow: inset 0 0 0 1px var(--navds-toggle-group-color-border);
padding: calc(var(--navds-spacing-1) + 1px);
gap: var(--navds-spacing-1);
border-radius: 9px;
background-color: var(--ac-toggle-group-bg, var(--a-surface-default));
box-shadow: inset 0 0 0 1px var(--ac-toggle-group-border, var(--a-border-default));
padding: calc(var(--a-spacing-1) + 1px);
gap: var(--a-spacing-1);
display: inline-grid;
grid-auto-flow: column;
grid-auto-columns: 1fr;
@@ -30,34 +19,34 @@
display: inline-flex;
align-items: center;
justify-content: center;
padding: var(--navds-spacing-3);
padding: var(--a-spacing-3);
min-height: 48px;
border: none;
cursor: pointer;
background-color: var(--navds-toggle-group-color-background);
color: var(--navds-toggle-group-color-text);
border-radius: var(--navds-border-radius-small);
background-color: var(--ac-toggle-group-button-bg, var(--a-surface-default));
color: var(--ac-toggle-group-button-text, var(--a-text-default));
border-radius: var(--a-border-radius-medium);
min-width: fit-content;
}
.navds-toggle-group__button:hover {
background-color: var(--navds-toggle-group-color-background-hover);
color: var(--navds-toggle-group-color-text-hover);
background-color: var(--ac-toggle-group-button-hover-bg, var(--a-surface-action-subtle));
color: var(--ac-toggle-group-button-hover-text, var(--a-text-action-on-action-subtle));
}
.navds-toggle-group__button:focus {
outline: none;
box-shadow: 0 0 0 1px var(--navds-toggle-group-color-background), 0 0 0 4px var(--navds-semantic-color-focus);
box-shadow: 0 0 0 1px var(--a-surface-default), 0 0 0 4px var(--a-border-focus);
}
.navds-toggle-group__button:focus:hover[aria-pressed="false"] {
box-shadow: 0 0 0 1px var(--navds-toggle-group-color-background-hover), 0 0 0 4px var(--navds-semantic-color-focus);
box-shadow: 0 0 0 1px var(--ac-toggle-group-button-hover-bg, var(--a-surface-action-subtle)), 0 0 0 4px var(--a-border-focus);
}
.navds-toggle-group__button-inner {
display: flex;
align-items: center;
gap: var(--navds-spacing-2);
gap: var(--a-spacing-2);
}
.navds-toggle-group__button-inner > * {
@@ -66,8 +55,8 @@
.navds-toggle-group__button[aria-pressed="true"],
.navds-toggle-group__button[aria-checked="true"] {
background-color: var(--navds-toggle-group-color-background-pressed);
color: var(--navds-toggle-group-color-text-pressed);
background-color: var(--ac-toggle-group-selected-bg, var(--a-surface-action-selected));
color: var(--ac-toggle-group-selected-text, var(--a-text-on-action));
}
.navds-toggle-group--small > .navds-toggle-group__button {
+303
View File
@@ -0,0 +1,303 @@
{
"alert": {
"--ac-alert-error-border": "--a-border-danger",
"--ac-alert-error-bg": "--a-surface-danger-subtle",
"--ac-alert-warning-border": "--a-border-warning",
"--ac-alert-warning-bg": "--a-surface-warning-subtle",
"--ac-alert-info-border": "--a-border-info",
"--ac-alert-info-bg": "--a-surface-info-subtle",
"--ac-alert-success-border": "--a-border-success",
"--ac-alert-success-bg": "--a-surface-success-subtle"
},
"accordion": {
"--ac-accordion-header-text-hover": "--a-text-action-on-action-subtle",
"--ac-accordion-header-border-hover": "--a-border-strong",
"--ac-accordion-item-bg-open": "--a-surface-action-subtle",
"--ac-accordion-item-border-open": "--a-surface-action-subtle",
"--ac-accordion-content-border": "--a-border-strong",
"--ac-accordion-content-border-open": "--a-border-strong"
},
"button": {
"--ac-button-primary-bg": "--a-surface-action",
"--ac-button-primary-text": "--a-text-on-action",
"--ac-button-primary-hover-bg": "--a-surface-action-hover",
"--ac-button-primary-active-bg": "--a-surface-action-active",
"--ac-button-primary-focus-border": "--a-surface-default",
"--ac-button-secondary-text": "--a-text-action",
"--ac-button-secondary-bg": "--a-surface-default",
"--ac-button-secondary-border": "--a-border-action",
"--ac-button-secondary-hover-text": "--a-text-action-on-action-subtle",
"--ac-button-secondary-hover-bg": "--a-surface-action-subtle-hover",
"--ac-button-secondary-focus-border": "--a-border-action",
"--ac-button-secondary-active-text": "--a-text-on-action",
"--ac-button-secondary-active-bg": "--a-surface-action-active",
"--ac-button-secondary-active-focus-border": "--a-surface-default",
"--ac-button-tertiary-text": "--a-text-action",
"--ac-button-tertiary-hover-text": "--a-text-action-on-action-subtle",
"--ac-button-tertiary-hover-bg": "--a-surface-action-subtle-hover",
"--ac-button-tertiary-focus-border": "--a-border-action",
"--ac-button-tertiary-active-text": "--a-text-on-action",
"--ac-button-tertiary-active-bg": "--a-surface-action-active",
"--ac-button-tertiary-active-hover-bg": "--a-surface-action-active",
"--ac-button-danger-bg": "--a-surface-danger",
"--ac-button-danger-text": "--a-text-on-danger",
"--ac-button-danger-hover-bg": "--a-surface-danger-hover",
"--ac-button-danger-active-bg": "--a-surface-danger-active",
"--ac-button-loader-stroke": "currentColor",
"--ac-button-primary-loader-stroke-bg": "rgb(255 255 255 / 0.3)"
},
"chat": {
"--ac-chat-avatar-bg": "--a-bg-subtle",
"--ac-chat-avatar-color": "--a-text-default",
"--ac-chat-bubble-bg": "--a-bg-subtle",
"--ac-chat-top-text": "--a-text-default"
},
"chips": {
"--ac-chip-toggle-border": "--a-border-default",
"--ac-chip-toggle-bg": "--a-surface-neutral-subtle",
"--ac-chip-toggle-hover-border": "--a-border-strong",
"--ac-chip-toggle-hover-bg": "--a-surface-neutral-subtle-hover",
"--ac-chip-toggle-pressed-bg": "--a-surface-action-selected",
"--ac-chip-toggle-pressed-text": "--a-text-on-action",
"--ac-chip-toggle-pressed-hover-bg": "--a-surface-action-selected-hover",
"--ac-chip-toggle-focus": "--a-border-focus",
"--ac-chip-removable-action-bg": "--a-surface-action-selected",
"--ac-chip-removable-action-text": "--a-text-on-action",
"--ac-chip-removable-neutral-bg": "--a-surface-neutral-subtle",
"--ac-chip-removable-neutral-text": "--a-text-default",
"--ac-chip-removable-neutral-border": "--a-border-default",
"--ac-chip-removable-action-hover-bg": "--a-surface-action-selected-hover",
"--ac-chip-removable-neutral-hover-bg": "--a-surface-neutral-subtle-hover",
"--ac-chip-removable-neutral-hover-border": "--a-border-strong"
},
"date": {
"--ac-date-middle-text": "--a-text-on-action",
"--ac-date-middle-bg": "--a-surface-action-selected",
"--ac-date-week-text": "--a-text-on-neutral",
"--ac-date-week-bg": "--a-surface-neutral",
"--ac-date-selected-text": "--a-text-on-action",
"--ac-date-selected-bg": "--a-surface-action-selected",
"--ac-date-disabled-bg": "--a-surface-neutral-subtle",
"--ac-date-disabled-text": "--a-text-subtle",
"--ac-date-hover-bg": "--a-surface-action-subtle-hover",
"--ac-date-today-border": "--a-border-action-selected",
"--ac-date-caption-text": "--a-text-default",
"--ac-date-input-error-border": "--a-border-danger",
"--ac-date-input-button-text": "--a-text-default"
},
"guidepanel": {
"--ac-guide-panel-bg": "--a-surface-default",
"--ac-guide-panel-border": "--a-border-action",
"--ac-guide-panel-illustration-bg": "--a-surface-action-subtle"
},
"helptext": {
"--ac-help-text-button-color": "--a-surface-action",
"--ac-help-text-popover-bg": "--a-surface-info-subtle"
},
"linkpanel": {
"--ac-link-panel-text": "--a-text-default",
"--ac-link-panel-hover-text": "--a-text-action",
"--ac-link-panel-hover-border": "--a-border-action"
},
"link": {
"--ac-link-text": "--a-text-action",
"--ac-link-focus-text": "--a-text-on-action",
"--ac-link-focus-bg": "--a-border-focus",
"--ac-link-focus-border": "--a-border-focus",
"--ac-link-active-text": "--a-text-on-action",
"--ac-link-active-bg": "--a-border-focus",
"--ac-link-active-border": "--a-border-focus"
},
"loader": {
"--ac-loader-stroke": "--a-border-default",
"--ac-loader-stroke-bg": "--a-surface-active",
"--ac-loader-neutral-stroke": "--a-border-default",
"--ac-loader-interaction-stroke": "--a-border-action",
"--ac-loader-inverted-stroke": "--a-border-on-inverted",
"--ac-loader-inverted-stroke-bg": "--a-border-on-inverted-subtle"
},
"modal": {
"--ac-modal-bg": "--a-surface-default",
"--ac-modal-backdrop": "--a-surface-backdrop"
},
"pagination": {
"--ac-pagination-text": "--a-text-default",
"--ac-pagination-selected-bg": "--a-surface-action-selected",
"--ac-pagination-selected-text": "--a-text-on-action"
},
"panel": {
"--ac-panel-bg": "--a-surface-default",
"--ac-panel-border": "--a-border-default"
},
"popover": {
"--ac-popover-bg": "--a-surface-default",
"--ac-popover-border": "--a-border-default"
},
"readmore": {
"--ac-read-more-text": "--a-text-action",
"--ac-read-more-hover-bg": "--a-surface-hover",
"--ac-read-more-active-bg": "--a-surface-active",
"--ac-read-more-line": "--a-border-divider"
},
"stepper": {
"--ac-stepper-text": "--a-surface-action",
"--ac-stepper-line": "--a-border-default",
"--ac-stepper-line-completed": "--a-border-selected",
"--ac-stepper-non-interactive": "--a-text-subtle",
"--ac-stepper-active": "--a-text-action-selected",
"--ac-stepper-active-bg": "--a-surface-action-selected",
"--ac-stepper-active-border": "--a-border-action-selected",
"--ac-stepper-active-text": "--a-text-on-action",
"--ac-stepper-hover-bg": "--a-surface-action-subtle-hover",
"--ac-stepper-non-interactive-active": "--a-text-default",
"--ac-stepper-non-interactive-line-completed": "--a-border-strong",
"--ac-stepper-non-interactive-active-bg": "--a-surface-inverted",
"--ac-stepper-non-interactive-active-border": "--a-surface-inverted",
"--ac-stepper-non-interactive-active-text": "--a-text-on-inverted",
"--ac-stepper-active-completed": "--a-text-action-selected",
"--ac-stepper-non-interactive-active-completed": "--a-text-default"
},
"table": {
"--ac-table-row-hover": "--a-bg-subtle",
"--ac-table-row-selected": "--a-surface-action-subtle",
"--ac-table-row-selected-hover": "--a-surface-action-subtle-hover",
"--ac-table-row-zebra": "--a-surface-subtle",
"--ac-table-row-border": "--a-border-default",
"--ac-table-row-hover-border": "--a-border-strong",
"--ac-table-sort-button-text": "--a-text-action",
"--ac-table-sort-button-hover-bg": "--a-bg-subtle",
"--ac-table-sort-button-sorted-bg": "--a-surface-selected",
"--ac-table-sort-button-sorted-text": "--a-text-action-on-action-subtle"
},
"tabs": {
"--ac-tabs-border": "--a-border-divider",
"--ac-tabs-text": "--a-text-subtle",
"--ac-tabs-hover-border": "--a-border-subtle-hover",
"--ac-tabs-selected-border": "--a-border-action",
"--ac-tabs-selected-text": "--a-text-default",
"--ac-tabs-focus-text": "--a-text-default"
},
"tag": {
"--ac-tag-error-border": "--a-border-danger",
"--ac-tag-error-bg": "--a-surface-danger-subtle",
"--ac-tag-error-text": "--a-text-default",
"--ac-tag-error-filled-bg": "--a-surface-danger",
"--ac-tag-error-filled-text": "--a-text-on-danger",
"--ac-tag-success-border": "--a-border-success",
"--ac-tag-success-bg": "--a-surface-success-subtle",
"--ac-tag-success-text": "--a-text-default",
"--ac-tag-success-filled-bg": "--a-surface-success",
"--ac-tag-success-filled-text": "--a-text-on-success",
"--ac-tag-warning-border": "--a-border-warning",
"--ac-tag-warning-bg": "--a-surface-warning-subtle",
"--ac-tag-warning-text": "--a-text-default",
"--ac-tag-warning-filled-bg": "--a-surface-warning",
"--ac-tag-warning-filled-text": "--a-text-on-warning",
"--ac-tag-info-border": "--a-border-info",
"--ac-tag-info-bg": "--a-surface-info-subtle",
"--ac-tag-info-text": "--a-text-default",
"--ac-tag-info-filled-bg": "--a-surface-info",
"--ac-tag-info-filled-text": "--a-text-on-info",
"--ac-tag-neutral-border": "--a-border-default",
"--ac-tag-neutral-bg": "--a-surface-neutral-subtle",
"--ac-tag-neutral-text": "--a-text-default",
"--ac-tag-neutral-filled-bg": "--a-surface-neutral",
"--ac-tag-neutral-filled-text": "--a-text-on-neutral",
"--ac-tag-alt-1-border": "--a-border-alt-1",
"--ac-tag-alt-1-bg": "--a-surface-alt-1-subtle",
"--ac-tag-alt-1-text": "--a-text-default",
"--ac-tag-alt-1-filled-bg": "--a-surface-alt-1",
"--ac-tag-alt-1-filled-text": "--a-text-on-alt-1",
"--ac-tag-alt-2-border": "--a-border-alt-2",
"--ac-tag-alt-2-bg": "--a-surface-alt-2-subtle",
"--ac-tag-alt-2-text": "--a-text-default",
"--ac-tag-alt-2-filled-bg": "--a-surface-alt-2",
"--ac-tag-alt-2-filled-text": "--a-text-on-alt-2",
"--ac-tag-alt-3-border": "--a-border-alt-3",
"--ac-tag-alt-3-bg": "--a-surface-alt-3-subtle",
"--ac-tag-alt-3-text": "--a-text-default",
"--ac-tag-alt-3-filled-bg": "--a-surface-alt-3",
"--ac-tag-alt-3-filled-text": "--a-text-on-alt-3"
},
"togglegroup": {
"--ac-toggle-group-bg": "--a-surface-default",
"--ac-toggle-group-border": "--a-border-default",
"--ac-toggle-group-button-bg": "--a-surface-default",
"--ac-toggle-group-button-text": "--a-text-default",
"--ac-toggle-group-button-hover-bg": "--a-surface-action-subtle",
"--ac-toggle-group-button-hover-text": "--a-text-action-on-action-subtle",
"--ac-toggle-group-selected-bg": "--a-surface-action-selected",
"--ac-toggle-group-selected-text": "--a-text-on-action"
},
"tooltip": {
"--ac-tooltip-bg": "--a-surface-inverted",
"--ac-tooltip-text": "--a-text-on-inverted",
"--ac-tooltip-key-bg": "--a-surface-neutral",
"--ac-tooltip-key-text": "--a-text-on-inverted"
},
"typography": {
"--ac-typo-error-text": "--a-text-danger"
},
"confirmationpanel": {
"--ac-confirmation-panel-border": "--a-border-warning",
"--ac-confirmation-panel-bg": "--a-surface-warning-subtle",
"--ac-confirmation-panel-checked-border": "--a-border-success",
"--ac-confirmation-panel-checked-bg": "--a-surface-success-subtle",
"--ac-confirmation-panel-error-border": "--a-border-danger",
"--ac-confirmation-panel-error-bg": "--a-surface-danger-subtle"
},
"errorsummary": {
"--ac-error-summary-bg": "--a-surface-default",
"--ac-error-summary-border": "--a-border-danger"
},
"checkbox-radio": {
"--ac-radio-checkbox-bg": "--a-surface-default",
"--ac-radio-checkbox-border": "--a-border-strong",
"--ac-radio-checkbox-action": "--a-surface-action",
"--ac-radio-checkbox-action-hover-bg": "--a-surface-action-subtle",
"--ac-radio-checkbox-error-border": "--a-border-danger",
"--ac-radio-checkbox-error-hover-bg": "--a-surface-danger-subtle"
},
"search": {
"--ac-search-button-border": "--a-border-default",
"--ac-search-button-border-hover": "--a-border-action",
"--ac-search-clear-icon": "--a-text-default",
"--ac-search-clear-icon-hover": "--a-text-action",
"--ac-search-button-focus-active-border": "--a-surface-default",
"--ac-search-error-border": "--a-border-danger"
},
"select": {
"--ac-select-bg": "--a-surface-default",
"--ac-select-border": "--a-border-strong",
"--ac-select-hover-bg": "--a-border-action",
"--ac-select-error-border": "--a-surface-danger"
},
"switch": {
"--ac-switch-action": "--a-surface-action",
"--ac-switch-bg": "--a-surface-neutral",
"--ac-switch-checked-bg": "--a-surface-success",
"--ac-switch-hover-bg": "--a-surface-neutral-hover",
"--ac-switch-checked-hover-bg": "--a-surface-success-hover",
"--ac-switch-thumb-bg": "--a-surface-default",
"--ac-switch-thumb-icon": "--a-icon-subtle",
"--ac-switch-thumb-icon-checked": "--a-icon-success"
},
"textfield": {
"--ac-textfield-bg": "--a-surface-default",
"--ac-textfield-border": "--a-border-default",
"--ac-textfield-text": "--a-text-default",
"--ac-textfield-placeholder": "--a-text-subtle",
"--ac-textfield-hover-border": "--a-border-action",
"--ac-textfield-error-border": "--a-border-danger"
},
"textarea": {
"--ac-textarea-bg": "--a-surface-default",
"--ac-textarea-border": "--a-border-default",
"--ac-textarea-text": "--a-text-default",
"--ac-textarea-placeholder": "--a-text-subtle",
"--ac-textarea-hover-border": "--a-border-action",
"--ac-textarea-counter-text": "--a-text-subtle",
"--ac-textarea-counter-error-text": "--a-surface-danger",
"--ac-textarea-error-border": "--a-border-danger"
}
}
+13 -13
View File
@@ -9,11 +9,11 @@
}
.navds-tooltip {
z-index: var(--navds-z-index-tooltip);
background-color: var(--navds-semantic-color-component-background-inverted);
color: var(--navds-semantic-color-text-inverted);
border-radius: var(--navds-border-radius-small);
padding: 0 var(--navds-spacing-2);
z-index: var(--a-z-index-tooltip);
background-color: var(--ac-tooltip-bg, var(--a-surface-inverted));
color: var(--ac-tooltip-text, var(--a-text-on-inverted));
border-radius: var(--a-border-radius-small);
padding: 0 var(--a-spacing-2);
align-items: center;
filter: drop-shadow(0 2px 4px rgba(0 0 0 / 0.1)) drop-shadow(0 4px 6px rgba(0 0 0 / 0.1));
display: flex;
@@ -29,22 +29,22 @@
width: 7px;
transform: rotate(45deg);
z-index: -1;
background-color: var(--navds-semantic-color-component-background-inverted);
background-color: var(--ac-tooltip-bg, var(--a-surface-inverted));
position: absolute;
}
.navds-tooltip__keys {
padding-bottom: var(--navds-spacing-1);
padding-bottom: var(--a-spacing-1);
display: flex;
gap: var(--navds-spacing-1);
gap: var(--a-spacing-1);
}
.navds-tooltip__key {
font-family: var(--navds-font-family);
background-color: var(--navds-global-color-gray-700);
color: var(--navds-semantic-color-text-inverted);
border-radius: var(--navds-border-radius-small);
padding: 0 var(--navds-spacing-1);
font-family: var(--a-font-family);
background-color: var(--ac-tooltip-key-bg, var(--a-surface-neutral));
color: var(--ac-tooltip-key-text, var(--a-text-on-inverted));
border-radius: var(--a-border-radius-small);
padding: 0 var(--a-spacing-1);
min-width: 18px;
height: 18px;
display: inline-flex;
+54 -60
View File
@@ -1,183 +1,177 @@
:root,
:host,
[data-theme="light"] {
--navds-error-message-color-text: var(--navds-semantic-color-feedback-danger-text);
}
[data-theme="dark"] {
--navds-error-message-color-text: var(--navds-global-color-red-300);
--ac-typo-error-text: var(--a-red-300);
}
/* Heading */
.navds-heading {
font-weight: var(--navds-font-weight-bold);
font-weight: var(--a-font-weight-bold);
margin: 0;
}
.navds-heading--xlarge {
font-size: var(--navds-font-size-heading-2xlarge);
font-size: var(--a-font-size-heading-2xlarge);
letter-spacing: -0.01em;
line-height: var(--navds-font-line-height-heading-2xlarge);
line-height: var(--a-font-line-height-heading-2xlarge);
}
.navds-heading--xlarge.navds-typo--spacing {
margin-bottom: var(--navds-spacing-5);
margin-bottom: var(--a-spacing-5);
}
.navds-heading--large {
font-size: var(--navds-font-size-heading-xlarge);
font-size: var(--a-font-size-heading-xlarge);
letter-spacing: -0.008em;
line-height: var(--navds-font-line-height-heading-xlarge);
line-height: var(--a-font-line-height-heading-xlarge);
}
.navds-heading--large.navds-typo--spacing {
margin-bottom: var(--navds-spacing-4);
margin-bottom: var(--a-spacing-4);
}
/* Mobile scale */
@media (max-width: 480px) {
.navds-heading--xlarge {
font-size: var(--navds-font-size-heading-xlarge);
font-size: var(--a-font-size-heading-xlarge);
letter-spacing: -0.008em;
line-height: var(--navds-font-line-height-heading-xlarge);
line-height: var(--a-font-line-height-heading-xlarge);
}
.navds-heading--xlarge.navds-typo--spacing {
margin-bottom: var(--navds-spacing-4);
margin-bottom: var(--a-spacing-4);
}
.navds-heading--large {
font-size: var(--navds-font-size-heading-large);
font-size: var(--a-font-size-heading-large);
letter-spacing: -0.004em;
line-height: var(--navds-font-line-height-heading-large);
line-height: var(--a-font-line-height-heading-large);
}
.navds-heading--large.navds-typo--spacing {
margin-bottom: var(--navds-spacing-3);
margin-bottom: var(--a-spacing-3);
}
}
.navds-heading--medium {
font-size: var(--navds-font-size-heading-medium);
font-size: var(--a-font-size-heading-medium);
letter-spacing: -0.002em;
line-height: var(--navds-font-line-height-heading-medium);
line-height: var(--a-font-line-height-heading-medium);
}
.navds-heading--medium.navds-typo--spacing {
margin-bottom: var(--navds-spacing-3);
margin-bottom: var(--a-spacing-3);
}
.navds-heading--small {
font-size: var(--navds-font-size-heading-small);
font-size: var(--a-font-size-heading-small);
letter-spacing: -0.001em;
line-height: var(--navds-font-line-height-heading-small);
line-height: var(--a-font-line-height-heading-small);
}
.navds-heading--small.navds-typo--spacing {
margin-bottom: var(--navds-spacing-3);
margin-bottom: var(--a-spacing-3);
}
.navds-heading--xsmall {
font-size: var(--navds-font-size-heading-xsmall);
font-size: var(--a-font-size-heading-xsmall);
letter-spacing: -0.001em;
line-height: var(--navds-font-line-height-heading-xsmall);
line-height: var(--a-font-line-height-heading-xsmall);
}
.navds-heading--xsmall.navds-typo--spacing {
margin-bottom: var(--navds-spacing-3);
margin-bottom: var(--a-spacing-3);
}
/* Ingress */
.navds-ingress {
font-size: var(--navds-font-size-xlarge);
font-weight: var(--navds-font-weight-regular);
font-size: var(--a-font-size-xlarge);
font-weight: var(--a-font-weight-regular);
letter-spacing: -0.001em;
line-height: var(--navds-font-line-height-xlarge);
line-height: var(--a-font-line-height-xlarge);
margin: 0;
}
.navds-ingress.navds-typo--spacing {
margin-bottom: var(--navds-spacing-10);
margin-bottom: var(--a-spacing-10);
}
/* Body */
.navds-body-long {
font-size: var(--navds-font-size-large);
font-weight: var(--navds-font-weight-regular);
font-size: var(--a-font-size-large);
font-weight: var(--a-font-weight-regular);
letter-spacing: 0;
line-height: var(--navds-font-line-height-xlarge);
line-height: var(--a-font-line-height-xlarge);
margin: 0;
}
.navds-body-long.navds-typo--spacing {
margin-bottom: var(--navds-spacing-7);
margin-bottom: var(--a-spacing-7);
}
.navds-body-long--small {
font-size: var(--navds-font-size-medium);
font-size: var(--a-font-size-medium);
letter-spacing: 0.002em;
line-height: var(--navds-font-line-height-large);
line-height: var(--a-font-line-height-large);
}
.navds-body-long--small.navds-typo--spacing {
margin-bottom: var(--navds-spacing-6);
margin-bottom: var(--a-spacing-6);
}
.navds-body-short {
font-size: var(--navds-font-size-large);
font-weight: var(--navds-font-weight-regular);
font-size: var(--a-font-size-large);
font-weight: var(--a-font-weight-regular);
letter-spacing: 0;
line-height: var(--navds-font-line-height-large);
line-height: var(--a-font-line-height-large);
margin: 0;
}
.navds-body-short.navds-typo--spacing {
margin-bottom: var(--navds-spacing-3);
margin-bottom: var(--a-spacing-3);
}
.navds-body-short--small {
font-size: var(--navds-font-size-medium);
font-size: var(--a-font-size-medium);
letter-spacing: 0.002em;
line-height: var(--navds-font-line-height-medium);
line-height: var(--a-font-line-height-medium);
}
.navds-body-short--small.navds-typo--spacing {
margin-bottom: var(--navds-spacing-2);
margin-bottom: var(--a-spacing-2);
}
/* Label */
.navds-label {
font-size: var(--navds-font-size-large);
font-weight: var(--navds-font-weight-bold);
font-size: var(--a-font-size-large);
font-weight: var(--a-font-weight-bold);
letter-spacing: 0;
line-height: var(--navds-font-line-height-large);
line-height: var(--a-font-line-height-large);
margin: 0;
}
.navds-label.navds-typo--spacing {
margin-bottom: var(--navds-spacing-3);
margin-bottom: var(--a-spacing-3);
}
.navds-label--small {
font-size: var(--navds-font-size-medium);
font-size: var(--a-font-size-medium);
letter-spacing: 0.002em;
line-height: var(--navds-font-line-height-medium);
line-height: var(--a-font-line-height-medium);
}
.navds-label--small.navds-typo--spacing {
margin-bottom: var(--navds-spacing-2);
margin-bottom: var(--a-spacing-2);
}
/* Small text */
.navds-detail {
font-size: var(--navds-font-size-small);
font-size: var(--a-font-size-small);
letter-spacing: 0.004em;
line-height: var(--navds-font-line-height-medium);
line-height: var(--a-font-line-height-medium);
margin: 0;
}
.navds-detail.navds-typo--spacing {
margin-bottom: var(--navds-spacing-2);
margin-bottom: var(--a-spacing-2);
}
.navds-detail.navds-typo--uppercase {
@@ -185,13 +179,13 @@
}
.navds-detail--small {
font-weight: var(--navds-font-weight-regular);
font-weight: var(--a-font-weight-regular);
}
.navds-detail--small.navds-typo--spacing {
margin-bottom: var(--navds-spacing-2);
margin-bottom: var(--a-spacing-2);
}
.navds-error-message {
color: var(--navds-error-message-color-text);
color: var(--ac-typo-error-text, var(--a-text-danger));
}
+153
View File
@@ -1,5 +1,158 @@
# @navikt/ds-react
## 2.0.1
### Patch Changes
- Updated dependencies []:
- @navikt/ds-icons@2.0.1
## 2.0.0
### Major Changes
- [`6b96e4833`](https://github.com/navikt/Designsystemet/commit/6b96e48330c2e013a1acee85cefccd9ccc1aece4) Thanks [@KenAJoh](https://github.com/KenAJoh)! - v2: Tokens update and font-loading
## 1.5.10
### Patch Changes
- [#1717](https://github.com/navikt/Designsystemet/pull/1717) [`d9352982d`](https://github.com/navikt/Designsystemet/commit/d9352982d42d5d12a9c5fc345e546f57c753738d) Thanks [@vebnor](https://github.com/vebnor)! - Fikset parentSelector prop i Modal
- Updated dependencies []:
- @navikt/ds-icons@1.5.10
## 1.5.9
### Patch Changes
- Updated dependencies []:
- @navikt/ds-icons@1.5.9
## 1.5.8
### Patch Changes
- console.log removed
- Updated dependencies []:
- @navikt/ds-icons@1.5.8
## 1.5.7
### Patch Changes
- defaultMonth/Year prop date-komponent
- Updated dependencies []:
- @navikt/ds-icons@1.5.7
## 1.5.6
### Patch Changes
- Datepicker fungerte ikke med open shadow-dom
- Updated dependencies []:
- @navikt/ds-icons@1.5.6
## 1.5.5
### Patch Changes
- Updated dependencies []:
- @navikt/ds-icons@1.5.5
## 1.5.4
### Patch Changes
- Updated dependencies [[`77302a30b`](https://github.com/navikt/Designsystemet/commit/77302a30b8eef8dc00b2d2e9c904a3f57da81a11)]:
- @navikt/ds-icons@1.5.4
## 1.5.3
### Patch Changes
- Updated dependencies []:
- @navikt/ds-icons@1.5.3
## 1.5.2
### Patch Changes
- :memo: Rename FilterChips to ToggleChips
- Updated dependencies []:
- @navikt/ds-icons@1.5.2
## 1.5.1
### Patch Changes
- Flex-wrap chips.css
- Updated dependencies []:
- @navikt/ds-icons@1.5.1
## 1.5.0
### Minor Changes
- [#1684](https://github.com/navikt/Designsystemet/pull/1684) [`e19bf67b3`](https://github.com/navikt/Designsystemet/commit/e19bf67b337dea39989c68b5e9c2591cf0d5b40f) Thanks [@KenAJoh](https://github.com/KenAJoh)! - :sparkles: Oppdaterte tag-varianter
- [#1668](https://github.com/navikt/Designsystemet/pull/1668) [`97c5f60e9`](https://github.com/navikt/Designsystemet/commit/97c5f60e9111da7e08f55c8d0aa29581f0a9b1ca) Thanks [@KenAJoh](https://github.com/KenAJoh)! - Chips komponent :sparkles:
### Patch Changes
- Updated dependencies []:
- @navikt/ds-icons@1.5.0
## 1.4.4
### Patch Changes
- Eksponerer validation-typer
- Updated dependencies []:
- @navikt/ds-icons@1.4.4
## 1.4.3
### Patch Changes
- :sparkles: Validering og inputFormat i Date-komponenter
- Updated dependencies []:
- @navikt/ds-icons@1.4.3
## 1.4.2
### Patch Changes
- Updated dependencies []:
- @navikt/ds-icons@1.4.2
## 1.4.1
### Patch Changes
- [`3c08651df`](https://github.com/navikt/Designsystemet/commit/3c08651df28c3e19dd8c8a7a1d0032200bec473d) Thanks [@KenAJoh](https://github.com/KenAJoh)! - Date-komponenter følger språkrådets dato-formatering for måneder.
- Updated dependencies []:
- @navikt/ds-icons@1.4.1
## 1.4.0
### Minor Changes
- [`1bdb7e377`](https://github.com/navikt/Designsystemet/commit/1bdb7e3777ece28d153991b78dbdd289366fca57) Thanks [@KenAJoh](https://github.com/KenAJoh)! - [#1702](https://github.com/navikt/Designsystemet/pull/1702) [`20bcc28cb`](https://github.com/navikt/Designsystemet/commit/20bcc28cb0a886aa40d2c1b042fb2706a144c014) Thanks [@andnorda](https://github.com/andnorda)! - Global Provider komponent for håndtering av global config
### Patch Changes
- Updated dependencies []:
- @navikt/ds-icons@1.4.0
## 1.3.39
### Patch Changes
+4 -11
View File
@@ -1,28 +1,21 @@
# NAV React-components
# Aksel React-components
All of NAVs core React-components
React-components for NAVs designsystem.
- Uses styling from `@navikt/ds-css`
- Uses styling defined in `@navikt/ds-css`
- All components implemented with React.forwardRef!
- Most components extend native html-elements.
## Installation
Install `@navikt/ds-react` with yarn
```bash
yarn add @navikt/ds-react
```
Install `@navikt/ds-react` with npm
```bash
npm install @navikt/ds-react
```
## Usage
Remember to also import @navikt/ds-css to apply styling! See README-link under "learn more"-section below.
Remember to also import `@navikt/ds-css` for styling!
```javascript
import { Button } from "@navikt/ds-react";
+14 -12
View File
@@ -1,8 +1,8 @@
{
"name": "@navikt/ds-react",
"version": "1.3.39",
"description": "NAV designsystem react components",
"author": "NAV Designsystem team",
"version": "2.0.1",
"description": "Aksel react-components for NAV designsystem",
"author": "Aksel | NAV designsystem team",
"license": "MIT",
"keywords": [
"react",
@@ -24,19 +24,20 @@
"/cjs",
"/esm",
"/src",
"_docs.json"
"_docs.json",
"!**/*.tsbuildinfo"
],
"scripts": {
"docgen": "yarn ts-node ../../../scripts/docgen.ts",
"create-package-json-pointers-to-esm": "node ../../../scripts/createPackageJsonsWithESMPointers.js",
"clean": "rimraf cjs esm",
"build": "yarn run clean && concurrently \"tsc\" \"tsc -p tsconfig.esm.json\" && yarn create-package-json-pointers-to-esm",
"build": "concurrently \"tsc\" \"tsc -p tsconfig.esm.json\" && yarn create-package-json-pointers-to-esm",
"watch": "tsc --watch -p tsconfig.esm.json",
"test": "jest"
"test": "TZ=UTC jest"
},
"dependencies": {
"@floating-ui/react-dom-interactions": "0.9.2",
"@navikt/ds-icons": "^1.3.39",
"@navikt/ds-icons": "^2.0.1",
"@radix-ui/react-tabs": "1.0.0",
"@radix-ui/react-toggle-group": "1.0.0",
"clsx": "^1.2.1",
@@ -50,21 +51,22 @@
"@testing-library/react": "^13.3.0",
"@testing-library/user-event": "^14.2.0",
"@types/faker": "5.5.8",
"@types/jest": "^27.0.1",
"@types/jest": "^29.0.0",
"@types/node": "^17.0.35",
"@types/react-modal": "^3.13.1",
"concurrently": "7.2.1",
"copyfiles": "^2.4.1",
"faker": "5.5.3",
"fast-glob": "3.2.11",
"jest": "^27.5.0",
"jest": "^29.0.0",
"jest-environment-jsdom": "^29.0.0",
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0",
"rimraf": "3.0.2",
"swr": "^1.1.2",
"ts-jest": "^27.1.0",
"ts-node": "10.7.0",
"typescript": "^4.7.2"
"ts-jest": "^29.0.0",
"ts-node": "10.9.0",
"typescript": "^4.8.0"
},
"peerDependencies": {
"@types/react": "^17.0.30 || ^18.0.0",
+2 -2
View File
@@ -52,8 +52,8 @@ export const Farger = () => {
avatar="ON"
name="Ola Normann"
timestamp="01.01.21 14:00"
avatarBgColor="var(--navds-global-color-lightblue-200)"
backgroundColor="var(--navds-global-color-lightblue-100)"
avatarBgColor="var(--a-lightblue-200)"
backgroundColor="var(--a-lightblue-100)"
>
<Chat.Bubble>
Aute minim nisi sunt mollit duis sunt nulla minim non proident.
+45
View File
@@ -0,0 +1,45 @@
import cl from "clsx";
import React, { forwardRef, HTMLAttributes } from "react";
import ToggleChips, { ToggleChipsType } from "./Toggle";
import RemovableChips, { RemovableChipsType } from "./Removable";
export interface ChipsProps extends HTMLAttributes<HTMLUListElement> {
children: React.ReactNode;
/**
* Changes padding and font-sizes
* @default "medium"
*/
size?: "medium" | "small";
}
interface ChipsComponent
extends React.ForwardRefExoticComponent<
ChipsProps & React.RefAttributes<HTMLUListElement>
> {
Toggle: ToggleChipsType;
Removable: RemovableChipsType;
}
export const Chips: ChipsComponent = forwardRef<HTMLUListElement, ChipsProps>(
({ className, size = "medium", children, ...rest }, ref) => {
return (
<ul
{...rest}
ref={ref}
className={cl("navds-chips", className, `navds-chips--${size}`, {
"navds-body-short navds-body-short--small": size === "medium",
"navds-detail navds-detail--small": size === "small",
})}
>
{React.Children.map(children, (chip, index) => {
return <li key={index + (chip?.toString() ?? "")}>{chip}</li>;
})}
</ul>
);
}
) as ChipsComponent;
Chips.Toggle = ToggleChips;
Chips.Removable = RemovableChips;
export default Chips;
@@ -0,0 +1,68 @@
import { Close } from "@navikt/ds-icons";
import cl from "clsx";
import React, { forwardRef } from "react";
import { OverridableComponent } from "..";
export interface RemovableChipsProps
extends React.ButtonHTMLAttributes<HTMLButtonElement> {
children: string;
/**
* Chip-variants
* @default "action"
*/
variant?: "action" | "neutral";
/**
* Replaces label read for screen-readers
* @default "slett filter"
*/
removeLabel?: string;
/**
* Click callback
*/
onDelete?: () => void;
}
export interface RemovableChipsType
extends OverridableComponent<RemovableChipsProps, HTMLButtonElement> {}
export const RemovableChips: OverridableComponent<
RemovableChipsProps,
HTMLButtonElement
> = forwardRef(
(
{
className,
children,
variant = "action",
as: Component = "button",
removeLabel = "slett",
onDelete,
...rest
},
ref
) => {
return (
<Component
{...rest}
ref={ref}
className={cl(
"navds-chips__chip navds-chips__removable navds-chips--icon-right",
className,
`navds-chips__removable--${variant}`
)}
aria-label={`${children} ${removeLabel}`}
onClick={(e) => {
onDelete?.();
rest?.onClick?.(e);
}}
>
<span className="navds-chips__chip-text">{children}</span>
<span className="navds-chips__removable-icon">
<Close aria-hidden />
</span>
</Component>
);
}
) as RemovableChipsType;
export default RemovableChips;
+41
View File
@@ -0,0 +1,41 @@
import { SuccessStroke } from "@navikt/ds-icons";
import cl from "clsx";
import React, { forwardRef } from "react";
import { OverridableComponent } from "..";
export interface ToggleChipsProps
extends React.ButtonHTMLAttributes<HTMLButtonElement> {
children: string;
/**
* Toggles aria-pressed and visual-changes
*/
selected?: boolean;
}
export interface ToggleChipsType
extends OverridableComponent<ToggleChipsProps, HTMLButtonElement> {}
export const ToggleChips: ToggleChipsType = forwardRef(
(
{ className, children, selected, as: Component = "button", ...rest },
ref
) => {
return (
<Component
{...rest}
ref={ref}
className={cl("navds-chips__chip navds-chips__toggle", className, {
"navds-chips--icon-left": selected,
})}
aria-pressed={selected}
>
{selected && (
<SuccessStroke aria-hidden className="navds-chips__toggle-icon" />
)}
<span className="navds-chips__chip-text">{children}</span>
</Component>
);
}
);
export default ToggleChips;
@@ -0,0 +1,165 @@
import React, { useState } from "react";
import { Chips } from ".";
export default {
title: "ds-react/Chips",
component: Chips,
argTypes: {
type: {
control: {
type: "radio",
options: ["toggle", "removable"],
},
},
size: {
control: {
type: "radio",
options: ["medium", "small"],
},
},
},
};
const options = ["Norsk", "Dansk", "Svensk", "Tysk", "Spansk"];
export const Default = (props) => {
const [selected, setSelected] = useState(["Dansk", "Svensk"]);
const [filter, setFilter] = useState(options);
if (props.type === "toggle") {
return (
<Chips size={props.size ?? "medium"}>
{options.map((c) => (
<Chips.Toggle
selected={selected.includes(c)}
key={c}
onClick={() =>
setSelected(
selected.includes(c)
? selected.filter((x) => x !== c)
: [...selected, c]
)
}
>
{c}
</Chips.Toggle>
))}
</Chips>
);
}
return (
<Chips size={props.size ?? "medium"}>
{filter.map((c) => (
<Chips.Removable
key={c}
onClick={() => setFilter((x) => x.filter((y) => y !== c))}
>
{c}
</Chips.Removable>
))}
</Chips>
);
};
export const Toggle = () => {
const [selected, setSelected] = useState<number[]>([]);
return (
<Chips>
{options.map((c, y) => (
<Chips.Toggle
selected={selected.includes(y)}
onClick={() =>
setSelected(
selected.includes(y)
? selected.filter((x) => x !== y)
: [...selected, y]
)
}
key={y}
>
{c}
</Chips.Toggle>
))}
</Chips>
);
};
export const Removable = () => {
return (
<div className="colgap">
<Chips>
{options.map((c, y) => (
<Chips.Removable key={y}>{c}</Chips.Removable>
))}
</Chips>
<Chips>
{options.map((c, y) => (
<Chips.Removable variant="neutral" key={y}>
{c}
</Chips.Removable>
))}
</Chips>
</div>
);
};
export const Regular = () => {
const [selected, setSelected] = useState<number[]>([]);
return (
<div className="colgap">
<Chips>
{options.map((c, y) => (
<Chips.Removable key={y}>{c}</Chips.Removable>
))}
</Chips>
<Chips>
{options.map((c, y) => (
<Chips.Toggle
selected={selected.includes(y)}
onClick={() =>
setSelected(
selected.includes(y)
? selected.filter((x) => x !== y)
: [...selected, y]
)
}
key={y}
>
{c}
</Chips.Toggle>
))}
</Chips>
</div>
);
};
export const Small = () => {
const [selected, setSelected] = useState<number[]>([]);
return (
<div className="colgap">
<Chips size="small">
{options.map((c, y) => (
<Chips.Removable key={y}>{c}</Chips.Removable>
))}
</Chips>
<Chips size="small">
{options.map((c, y) => (
<Chips.Toggle
selected={selected.includes(y)}
onClick={() =>
setSelected(
selected.includes(y)
? selected.filter((x) => x !== y)
: [...selected, y]
)
}
key={y}
>
{c}
</Chips.Toggle>
))}
</Chips>
</div>
);
};
+1
View File
@@ -0,0 +1 @@
export { default as Chips, ChipsProps } from "./Chips";
@@ -1,4 +1,3 @@
import isSaturday from "date-fns/isSaturday";
import React, { useId, useState } from "react";
import { UNSAFE_useDatepicker, UNSAFE_useRangeDatepicker } from "..";
import { Button } from "../..";
@@ -221,8 +220,13 @@ export const UserControlled = () => {
};
export const Validering = () => {
const { datepickerProps, selectedDay, inputProps } = UNSAFE_useDatepicker({
fromDate: new Date("Aug 23 2019"),
const [error, setError] = useState(false);
const { datepickerProps, inputProps } = UNSAFE_useDatepicker({
fromDate: new Date("Aug 2 2019"),
onValidate: (val) => setError(val.isWeekend),
defaultSelected: new Date("Nov 26 2022"),
disableWeekends: true,
onDateChange: console.log,
});
return (
@@ -230,8 +234,8 @@ export const Validering = () => {
<DatePicker {...datepickerProps}>
<DatePicker.Input
error={
selectedDay && isSaturday(selectedDay)
? "NAV-kontoret er ikke åpent på lørdager. Velg en annen dag."
error
? "NAV-kontoret er ikke åpent i helger. Velg en annen dag."
: undefined
}
{...inputProps}
@@ -261,3 +265,40 @@ export const ErrorInput = () => {
</div>
);
};
export const UseRangedDatepickerValidation = () => {
const { datepickerProps, fromInputProps, toInputProps } =
UNSAFE_useRangeDatepicker({
fromDate: new Date("Aug 23 2019"),
disableWeekends: true,
disabled: [new Date("Oct 10 2022")],
onValidate: console.table,
});
return (
<div style={{ display: "flex", gap: "1rem" }}>
<DatePicker {...datepickerProps}>
<div style={{ display: "flex", gap: "1rem" }}>
<DatePicker.Input {...fromInputProps} label="Fra" />
<DatePicker.Input {...toInputProps} label="Til" />
</div>
</DatePicker>
</div>
);
};
export const defaultShownMonth = () => {
const { datepickerProps, inputProps } = UNSAFE_useDatepicker({
fromDate: new Date("Aug 23 2019"),
onDateChange: console.log,
defaultMonth: new Date("Oct 23 2022"),
});
return (
<div style={{ display: "flex", gap: "1rem" }}>
<DatePicker {...datepickerProps}>
<DatePicker.Input {...inputProps} label="Velg dato" />
</DatePicker>
</div>
);
};
@@ -1,6 +1,9 @@
export { useDatepicker as UNSAFE_useDatepicker } from "./useDatepicker";
export type { DateValidationT } from "./useDatepicker";
export { useRangeDatepicker as UNSAFE_useRangeDatepicker } from "./useRangeDatepicker";
export type { RangeValidationT } from "./useRangeDatepicker";
export { useMonthpicker as UNSAFE_useMonthpicker } from "./useMonthPicker";
export type { MonthValidationT } from "./useMonthPicker";
export { useDateInputContext, DateContext } from "./useDateInputContext";
export {
useSharedMonthContext,
@@ -28,6 +28,10 @@ export interface UseDatepickerOptions
* The initially selected Date
*/
defaultSelected?: Date;
/**
* Default shown month
*/
defaultMonth?: Date;
/**
* Make selection of Date required
*/
@@ -36,6 +40,15 @@ export interface UseDatepickerOptions
* Callback for changed state
*/
onDateChange?: (val?: Date) => void;
/**
* Input-format
* @default "dd.MM.yyyy"
*/
inputFormat?: string;
/**
* validation-callback
*/
onValidate?: (val: DateValidationT) => void;
}
interface UseDatepickerValue {
@@ -62,6 +75,27 @@ interface UseDatepickerValue {
setSelected: (date?: Date) => void;
}
export type DateValidationT = {
isDisabled: boolean;
isWeekend: boolean;
isEmpty: boolean;
isInvalid: boolean;
isValidDate: boolean;
isBefore: boolean;
isAfter: boolean;
};
const getValidationMessage = (val = {}): DateValidationT => ({
isDisabled: false,
isWeekend: false,
isEmpty: false,
isInvalid: false,
isBefore: false,
isAfter: false,
isValidDate: true,
...val,
});
export const useDatepicker = (
opt: UseDatepickerOptions = {}
): UseDatepickerValue => {
@@ -75,6 +109,9 @@ export const useDatepicker = (
disabled,
disableWeekends,
onDateChange,
inputFormat,
onValidate,
defaultMonth,
} = opt;
const locale = getLocaleFromString(_locale);
@@ -85,12 +122,12 @@ export const useDatepicker = (
const [defaultSelected, setDefaultSelected] = useState(_defaultSelected);
// Initialize states
const [month, setMonth] = useState(defaultSelected ?? today);
const [month, setMonth] = useState(defaultSelected ?? defaultMonth ?? today);
const [selectedDay, setSelectedDay] = useState(defaultSelected);
const [open, setOpen] = useState(false);
const defaultInputValue = defaultSelected
? formatDateForInput(defaultSelected, locale, "date")
? formatDateForInput(defaultSelected, locale, "date", inputFormat)
: "";
const [inputValue, setInputValue] = useState(defaultInputValue);
@@ -99,16 +136,26 @@ export const useDatepicker = (
setSelectedDay(date);
};
const updateValidation = (val: Partial<DateValidationT> = {}) => {
const msg = getValidationMessage(val);
onValidate?.(msg);
};
const handleFocusIn = useCallback(
(e) => {
if (!e?.target || !e?.target?.nodeType) {
/* Workaround for shadow-dom users (open) */
const composed = e.composedPath?.()?.[0];
if (!e?.target || !e?.target?.nodeType || !composed) {
return;
}
![
daypickerRef.current,
inputRef.current,
inputRef.current?.nextSibling,
].some((element) => element?.contains(e.target)) &&
].some(
(element) => element?.contains(e.target) || element?.contains(composed)
) &&
open &&
setOpen(false);
},
@@ -126,30 +173,32 @@ export const useDatepicker = (
const reset = () => {
updateDate(defaultSelected);
setMonth(defaultSelected ?? today);
setMonth(defaultSelected ?? defaultMonth ?? today);
setInputValue(defaultInputValue ?? "");
setDefaultSelected(_defaultSelected);
};
const setSelected = (date: Date | undefined) => {
updateDate(date);
setMonth(date ?? today);
setInputValue(date ? formatDateForInput(date, locale, "date") : "");
setMonth(date ?? defaultMonth ?? today);
setInputValue(
date ? formatDateForInput(date, locale, "date", inputFormat) : ""
);
};
const handleFocus: React.FocusEventHandler<HTMLInputElement> = (e) => {
!open && setOpen(true);
let day = parseDate(e.target.value, today, locale, "date");
if (isValidDate(day)) {
setMonth(day);
setInputValue(formatDateForInput(day, locale, "date"));
setInputValue(formatDateForInput(day, locale, "date", inputFormat));
}
};
const handleBlur: React.FocusEventHandler<HTMLInputElement> = (e) => {
let day = parseDate(e.target.value, today, locale, "date");
isValidDate(day) && setInputValue(formatDateForInput(day, locale, "date"));
isValidDate(day) &&
setInputValue(formatDateForInput(day, locale, "date", inputFormat));
};
/* Only allow de-selecting if not required */
@@ -162,11 +211,15 @@ export const useDatepicker = (
if (!required && selected) {
updateDate(undefined);
setInputValue("");
updateValidation({ isValidDate: false, isEmpty: true });
return;
}
updateDate(day);
updateValidation();
setMonth(day);
setInputValue(day ? formatDateForInput(day, locale, "date") : "");
setInputValue(
day ? formatDateForInput(day, locale, "date", inputFormat) : ""
);
};
// When changing the input field, save its value in state and check if the
@@ -176,23 +229,40 @@ export const useDatepicker = (
setInputValue(e.target.value);
const day = parseDate(e.target.value, today, locale, "date");
const isBefore =
fromDate && day && differenceInCalendarDays(fromDate, day) > 0;
const isAfter = toDate && day && differenceInCalendarDays(day, toDate) > 0;
if (
!isValidDate(day) ||
(disabled &&
((disableWeekends && isWeekend(day)) || isMatch(day, disabled)))
(disableWeekends && isWeekend(day)) ||
(disabled && isMatch(day, disabled))
) {
updateDate(undefined);
updateValidation({
isInvalid: isValidDate(day),
isWeekend: disableWeekends && isWeekend(day),
isDisabled: disabled && isMatch(day, disabled),
isValidDate: false,
isEmpty: !e.target.value,
isBefore: isBefore ?? false,
isAfter: isAfter ?? false,
});
return;
}
const isBefore = fromDate && differenceInCalendarDays(fromDate, day) > 0;
const isAfter = toDate && differenceInCalendarDays(day, toDate) > 0;
if (isBefore || isAfter) {
updateDate(undefined);
updateValidation({
isValidDate: false,
isBefore: isBefore ?? false,
isAfter: isAfter ?? false,
});
return;
}
updateDate(day);
setMonth(day);
updateValidation();
setMonth(defaultMonth ?? day);
};
const handleClose = useCallback(() => {
@@ -217,13 +287,15 @@ export const useDatepicker = (
month,
onMonthChange: (month) => setMonth(month),
onDayClick: handleDayClick,
selected: selectedDay,
selected: selectedDay ?? new Date("Invalid date"),
locale: _locale,
fromDate,
toDate,
today,
open,
onOpenToggle: () => setOpen((x) => !x),
disabled,
disableWeekends,
ref: daypickerRef,
};
@@ -22,6 +22,19 @@ export interface UseMonthPickerOptions
* Callback for month-change
*/
onMonthChange?: (date?: Date) => void;
/**
* Input-format
* @default "MMMM yyyy"
*/
inputFormat?: string;
/**
* validation-callback
*/
onValidate?: (val: MonthValidationT) => void;
/**
* Default shown year
*/
defaultYear?: Date;
}
interface UseMonthPickerValue {
@@ -48,6 +61,25 @@ interface UseMonthPickerValue {
reset: () => void;
}
export type MonthValidationT = {
isDisabled: boolean;
isEmpty: boolean;
isInvalid: boolean;
isValidMonth: boolean;
isBefore: boolean;
isAfter: boolean;
};
const getValidationMessage = (val = {}): MonthValidationT => ({
isDisabled: false,
isEmpty: false,
isInvalid: false,
isBefore: false,
isAfter: false,
isValidMonth: true,
...val,
});
export const useMonthpicker = (
opt: UseMonthPickerOptions = {}
): UseMonthPickerValue => {
@@ -59,6 +91,9 @@ export const useMonthpicker = (
disabled,
required,
onMonthChange,
inputFormat,
onValidate,
defaultYear,
} = opt;
const [defaultSelected, setDefaultSelected] = useState(_defaultSelected);
@@ -70,12 +105,12 @@ export const useMonthpicker = (
const monthpickerRef = useRef<HTMLDivElement>(null);
// Initialize states
const [year, setYear] = useState(defaultSelected ?? today);
const [year, setYear] = useState(defaultSelected ?? defaultYear ?? today);
const [selectedMonth, setSelectedMonth] = useState(defaultSelected);
const [open, setOpen] = useState(false);
const defaultInputValue = defaultSelected
? formatDateForInput(defaultSelected, locale, "month")
? formatDateForInput(defaultSelected, locale, "month", inputFormat)
: "";
const [inputValue, setInputValue] = useState(defaultInputValue);
@@ -85,16 +120,25 @@ export const useMonthpicker = (
setSelectedMonth(date);
};
const updateValidation = (val: Partial<MonthValidationT> = {}) => {
const msg = getValidationMessage(val);
onValidate?.(msg);
};
const handleFocusIn = useCallback(
(e) => {
if (!e?.target || !e?.target?.nodeType) {
/* Workaround for shadow-dom users (open) */
const composed = e.composedPath?.()?.[0];
if (!e?.target || !e?.target?.nodeType || !composed) {
return;
}
![
monthpickerRef.current,
inputRef.current,
inputRef.current?.nextSibling,
].some((element) => element?.contains(e.target)) &&
].some(
(element) => element?.contains(e.target) || element?.contains(composed)
) &&
open &&
setOpen(false);
},
@@ -112,15 +156,17 @@ export const useMonthpicker = (
const reset = () => {
updateMonth(defaultSelected);
setYear(defaultSelected ?? today);
setYear(defaultSelected ?? defaultYear ?? today);
setInputValue(defaultInputValue ?? "");
setDefaultSelected(_defaultSelected);
};
const setSelected = (date: Date | undefined) => {
updateMonth(date);
setYear(date ?? today);
setInputValue(date ? formatDateForInput(date, locale, "month") : "");
setYear(date ?? defaultYear ?? today);
setInputValue(
date ? formatDateForInput(date, locale, "month", inputFormat) : ""
);
};
const handleFocus: React.FocusEventHandler<HTMLInputElement> = (e) => {
@@ -128,13 +174,14 @@ export const useMonthpicker = (
let day = parseDate(e.target.value, today, locale, "month");
if (isValidDate(day)) {
setYear(day);
setInputValue(formatDateForInput(day, locale, "month"));
setInputValue(formatDateForInput(day, locale, "month", inputFormat));
}
};
const handleBlur: React.FocusEventHandler<HTMLInputElement> = (e) => {
let day = parseDate(e.target.value, today, locale, "month");
isValidDate(day) && setInputValue(formatDateForInput(day, locale, "month"));
isValidDate(day) &&
setInputValue(formatDateForInput(day, locale, "month", inputFormat));
};
/* Only allow de-selecting if not required */
@@ -146,11 +193,15 @@ export const useMonthpicker = (
if (!required && !month) {
updateMonth(undefined);
updateValidation({ isValidMonth: false, isEmpty: true });
setInputValue("");
return;
}
updateMonth(month);
setInputValue(month ? formatDateForInput(month, locale, "month") : "");
updateValidation();
setInputValue(
month ? formatDateForInput(month, locale, "month", inputFormat) : ""
);
};
// When changing the input field, save its value in state and check if the
@@ -160,32 +211,48 @@ export const useMonthpicker = (
setInputValue(e.target.value);
const month = parseDate(e.target.value, today, locale, "month");
if (!isValidDate(month) || (disabled && isMatch(month, disabled))) {
updateMonth(undefined);
return;
}
const isBefore =
fromDate &&
month &&
(fromDate.getFullYear() > month.getFullYear() ||
(fromDate.getFullYear() === month.getFullYear() &&
fromDate.getMonth() > month.getMonth()));
const isAfter =
toDate &&
month &&
(toDate.getFullYear() < month.getFullYear() ||
(toDate.getFullYear() === month.getFullYear() &&
toDate.getMonth() < month.getMonth()));
if (!isValidDate(month) || (disabled && isMatch(month, disabled))) {
updateMonth(undefined);
updateValidation({
isInvalid: isValidDate(month),
isDisabled: disabled && isMatch(month, disabled),
isValidMonth: false,
isEmpty: !e.target.value,
isBefore: isBefore ?? false,
isAfter: isAfter ?? false,
});
return;
}
if (
isAfter ||
isBefore ||
(fromDate && toDate && !isMatch(month, [{ from: fromDate, to: toDate }]))
) {
updateMonth(undefined);
updateValidation({
isValidMonth: false,
isBefore: isBefore ?? false,
isAfter: isAfter ?? false,
});
return;
}
updateMonth(month);
updateValidation();
setYear(month);
};
@@ -0,0 +1,59 @@
/* eslint-disable react/jsx-pascal-case */
import { act, render } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import React from "react";
import { UNSAFE_DatePicker, UNSAFE_useRangeDatepicker } from "..";
const RangeDemo = () => {
const { datepickerProps, fromInputProps, selectedRange, toInputProps } =
UNSAFE_useRangeDatepicker({
fromDate: new Date("Aug 23 2019"),
});
return (
<div style={{ display: "flex", gap: "1rem" }}>
<UNSAFE_DatePicker {...datepickerProps}>
<UNSAFE_DatePicker.Input {...fromInputProps} label="Fra" />
<UNSAFE_DatePicker.Input {...toInputProps} label="Til" />
</UNSAFE_DatePicker>
<div title="res">{JSON.stringify(selectedRange)}</div>
</div>
);
};
describe("Writing in input sets correct values", () => {
it("useRangeDatepicker same date", async () => {
const utils = render(<RangeDemo />);
const fraInput = utils.getByRole("textbox", { name: "Fra" });
const tilInput = utils.getByRole("textbox", { name: "Til" });
await act(async () => {
await userEvent.type(fraInput, "03.08.2022");
await userEvent.type(tilInput, "03.08.2022");
});
const res = utils.getByTitle("res");
expect(res.innerHTML).toEqual(
JSON.stringify({
from: "2022-08-03T00:00:00.000Z",
to: "2022-08-03T00:00:00.000Z",
})
);
});
it("useRangeDatepicker before after to ", async () => {
const utils = render(<RangeDemo />);
const fraInput = utils.getByRole("textbox", { name: "Fra" });
const tilInput = utils.getByRole("textbox", { name: "Til" });
await act(async () => {
await userEvent.type(fraInput, "03.08.2022");
await userEvent.type(tilInput, "02.08.2022");
});
const res = utils.getByTitle("res");
expect(res.innerHTML).toEqual(
JSON.stringify({
from: "2022-08-03T00:00:00.000Z",
})
);
});
});
@@ -10,10 +10,42 @@ import {
isValidDate,
parseDate,
} from "../utils";
import { UseDatepickerOptions } from "./useDatepicker";
import { DateValidationT, UseDatepickerOptions } from "./useDatepicker";
export type RangeValidationT = {
from: DateValidationT;
to: DateValidationT & { isBeforeFrom?: boolean };
};
const getValidationMessage = (from = {}, to = {}): RangeValidationT => ({
from: {
isDisabled: false,
isWeekend: false,
isEmpty: false,
isInvalid: false,
isBefore: false,
isAfter: false,
isValidDate: true,
...from,
},
to: {
isDisabled: false,
isWeekend: false,
isEmpty: false,
isInvalid: false,
isBefore: false,
isAfter: false,
isBeforeFrom: false,
isValidDate: true,
...to,
},
});
interface UseRangeDatepickerOptions
extends Omit<UseDatepickerOptions, "defaultSelected" | "onDateChange"> {
extends Omit<
UseDatepickerOptions,
"defaultSelected" | "onDateChange" | "onValidate"
> {
/**
* The initially selected DateRange
*/
@@ -22,6 +54,10 @@ interface UseRangeDatepickerOptions
* Callback for changed state
*/
onRangeChange?: (val?: DateRange) => void;
/**
* validation-callback
*/
onValidate?: (val: RangeValidationT) => void;
}
interface UseRangeDatepickerValue {
@@ -65,6 +101,92 @@ const RANGE = {
type RangeT = typeof RANGE[keyof typeof RANGE];
const fromValidation = (day: Date, opt?: UseRangeDatepickerOptions) => {
const isBefore =
opt?.fromDate && day && differenceInCalendarDays(opt?.fromDate, day) > 0;
const isAfter =
opt?.toDate && day && differenceInCalendarDays(day, opt?.toDate) > 0;
if (
isValidDate(day) &&
!(opt?.disableWeekends && isWeekend(day)) &&
!(opt?.disabled && isMatch(day, opt.disabled))
) {
return {
isValidDate: false,
isInvalid: !isValidDate(day),
isWeekend: opt?.disableWeekends && isWeekend(day),
isDisabled: opt?.disabled && isMatch(day, opt.disabled),
isBefore: isBefore,
isAfter: isAfter,
};
}
if (isBefore || isAfter) {
return {
isValidDate: false,
isBefore: isBefore,
isAfter: isAfter,
};
}
};
const toValidation = (
day: Date,
from: Date,
opt?: UseRangeDatepickerOptions
) => {
const isBefore =
opt?.fromDate && day && differenceInCalendarDays(opt?.fromDate, day) > 0;
const isAfter =
opt?.toDate && day && differenceInCalendarDays(day, opt?.toDate) > 0;
const isBeforeFrom =
(from && differenceInCalendarDays(from, day) > 0) ?? false;
if (
isValidDate(day) &&
!(opt?.disableWeekends && isWeekend(day)) &&
!(opt?.disabled && isMatch(day, opt.disabled))
) {
return {
isValidDate: false,
isInvalid: !isValidDate(day),
isWeekend: opt?.disableWeekends && isWeekend(day),
isDisabled: opt?.disabled && isMatch(day, opt.disabled),
isBefore,
isAfter,
isBeforeFrom,
};
}
if (isBefore || isAfter || isBeforeFrom) {
return {
isValidDate: false,
isBefore,
isAfter,
isBeforeFrom,
};
}
};
const initialValidation = (
range?: DateRange,
opt?: UseRangeDatepickerOptions
): RangeValidationT => {
if (!range || !range?.from) {
return getValidationMessage(
{ isEmpty: true, isValidDate: false },
{ isEmpty: true, isValidDate: false }
);
}
const fromVal = fromValidation(range.from, opt);
const toVal = range.to
? toValidation(range.to, range.from, opt)
: { isEmpty: true, isValidDate: false };
return getValidationMessage({ ...fromVal }, { ...toVal });
};
export const useRangeDatepicker = (
opt: UseRangeDatepickerOptions = {}
): UseRangeDatepickerValue => {
@@ -77,6 +199,9 @@ export const useRangeDatepicker = (
disabled,
disableWeekends,
onRangeChange,
inputFormat,
onValidate,
defaultMonth,
} = opt;
const locale = getLocaleFromString(_locale);
@@ -89,7 +214,7 @@ export const useRangeDatepicker = (
// Initialize states
const [month, setMonth] = useState(
defaultSelected ? defaultSelected?.from : today
defaultSelected ? defaultSelected?.from : defaultMonth ?? today
);
const [selectedRange, setSelectedRange] = useState<DateRange | undefined>(
defaultSelected ?? { from: undefined, to: undefined }
@@ -97,15 +222,20 @@ export const useRangeDatepicker = (
const [fromInputValue, setFromInputValue] = useState(
defaultSelected?.from
? formatDateForInput(defaultSelected.from, locale, "date")
? formatDateForInput(defaultSelected.from, locale, "date", inputFormat)
: ""
);
const [toInputValue, setToInputValue] = useState(
defaultSelected?.to
? formatDateForInput(defaultSelected.to, locale, "date")
? formatDateForInput(defaultSelected.to, locale, "date", inputFormat)
: ""
);
const [validation, setValidation] = useState<RangeValidationT>(
initialValidation(selectedRange, opt)
);
const [open, setOpen] = useState(false);
const updateRange = (range?: DateRange) => {
@@ -113,9 +243,20 @@ export const useRangeDatepicker = (
setSelectedRange(range);
};
const updateValidation = (
from: Partial<RangeValidationT["from"]> = {},
to: Partial<RangeValidationT["to"]> = {}
) => {
const msg = getValidationMessage(from, to);
setValidation(msg);
onValidate?.(msg);
};
const handleFocusIn = useCallback(
(e) => {
if (!e?.target || !e?.target?.nodeType) {
/* Workaround for shadow-dom users (open) */
const composed = e.composedPath?.()?.[0];
if (!e?.target || !e?.target?.nodeType || !composed) {
return;
}
![
@@ -124,7 +265,9 @@ export const useRangeDatepicker = (
inputRefFrom.current,
inputRefTo.current?.nextSibling,
inputRefFrom.current?.nextSibling,
].some((element) => element?.contains(e.target)) &&
].some(
(element) => element?.contains(e.target) || element?.contains(composed)
) &&
open &&
setOpen(false);
},
@@ -142,15 +285,21 @@ export const useRangeDatepicker = (
const reset = () => {
updateRange(defaultSelected ?? { from: undefined, to: undefined });
setMonth(defaultSelected ? defaultSelected?.from : today);
setMonth(defaultSelected ? defaultSelected?.from : defaultMonth ?? today);
setValidation(
initialValidation(
defaultSelected ?? { from: undefined, to: undefined },
opt
)
);
setFromInputValue(
defaultSelected?.from
? formatDateForInput(defaultSelected.from, locale, "date")
? formatDateForInput(defaultSelected.from, locale, "date", inputFormat)
: ""
);
setToInputValue(
defaultSelected?.to
? formatDateForInput(defaultSelected.to, locale, "date")
? formatDateForInput(defaultSelected.to, locale, "date", inputFormat)
: ""
);
setDefaultSelected(_defaultSelected);
@@ -159,11 +308,16 @@ export const useRangeDatepicker = (
const setSelected = (range?: DateRange) => {
updateRange(range);
setFromInputValue(
range?.from ? formatDateForInput(range.from, locale, "date") : ""
range?.from
? formatDateForInput(range.from, locale, "date", inputFormat)
: ""
);
setToInputValue(
range?.to ? formatDateForInput(range?.to, locale, "date") : ""
range?.to
? formatDateForInput(range?.to, locale, "date", inputFormat)
: ""
);
setValidation(initialValidation(range, opt));
};
const handleFocus = (e, src: RangeT) => {
@@ -172,52 +326,10 @@ export const useRangeDatepicker = (
if (isValidDate(day)) {
setMonth(day);
src === RANGE.FROM
? setFromInputValue(formatDateForInput(day, locale, "date"))
: setToInputValue(formatDateForInput(day, locale, "date"));
}
};
const handleInputs = (day: Date, src: RangeT) => {
if (src === RANGE.FROM) {
const isAfter =
toInputValue &&
differenceInCalendarDays(
day,
parseDate(toInputValue, today, locale, "date")
) > 0;
if (isAfter) {
setFromInputValue(
formatDateForInput(
parseDate(toInputValue, today, locale, "date"),
locale,
"date"
? setFromInputValue(
formatDateForInput(day, locale, "date", inputFormat)
)
);
setToInputValue(formatDateForInput(day, locale, "date"));
} else {
setFromInputValue(formatDateForInput(day, locale, "date"));
}
} else if (src === RANGE.TO) {
const isBefore =
fromInputValue &&
differenceInCalendarDays(
parseDate(fromInputValue, today, locale, "date"),
day
) > 0;
if (isBefore) {
setToInputValue(
formatDateForInput(
parseDate(fromInputValue, today, locale, "date"),
locale,
"date"
)
);
setFromInputValue(formatDateForInput(day, locale, "date"));
} else {
setToInputValue(formatDateForInput(day, locale, "date"));
}
: setToInputValue(formatDateForInput(day, locale, "date", inputFormat));
}
};
@@ -227,7 +339,19 @@ export const useRangeDatepicker = (
return;
}
handleInputs(day, src);
if (src === RANGE.FROM) {
setFromInputValue(formatDateForInput(day, locale, "date", inputFormat));
} else if (src === RANGE.TO) {
setToInputValue(formatDateForInput(day, locale, "date", inputFormat));
}
};
const validateDay = (day: any) => {
return (
isValidDate(day) &&
!(disableWeekends && isWeekend(day)) &&
!(disabled && isMatch(day, disabled))
);
};
const handleSelect = (range) => {
@@ -238,68 +362,140 @@ export const useRangeDatepicker = (
!selectedRange?.from && selectedRange?.to ? selectedRange?.to : range?.to;
range?.from
? setFromInputValue(formatDateForInput(range?.from, locale, "date"))
? setFromInputValue(
formatDateForInput(range?.from, locale, "date", inputFormat)
)
: setFromInputValue("");
prevToRange
? setToInputValue(formatDateForInput(prevToRange, locale, "date"))
? setToInputValue(
formatDateForInput(prevToRange, locale, "date", inputFormat)
)
: setToInputValue("");
updateValidation(
{ isValidDate: !!range?.from, isEmpty: !range?.from },
{ isValidDate: !!range?.to, isEmpty: !prevToRange }
);
updateRange({ from: range?.from, to: prevToRange });
};
/* live-update datepicker based on changes in inputfields */
const handleChange = (e, src: RangeT) => {
src === RANGE.FROM
? setFromInputValue(e.target.value)
: setToInputValue(e.target.value);
const day = parseDate(e.target.value, today, locale, "date");
if (
!isValidDate(day) ||
(disabled &&
((disableWeekends && isWeekend(day)) || isMatch(day, disabled)))
) {
updateRange(
src === RANGE.FROM
? { ...selectedRange, from: undefined }
: { from: selectedRange?.from, to: undefined }
const fromChange = (
val: string = "",
day: Date,
isBefore = false,
isAfter = false
) => {
setFromInputValue(val);
if (!validateDay(day)) {
updateRange({ ...selectedRange, from: undefined });
updateValidation(
{
isEmpty: !val,
isValidDate: false,
isInvalid: !isValidDate(day),
isWeekend: disableWeekends && isWeekend(day),
isDisabled: disabled && isMatch(day, disabled),
isBefore,
isAfter,
},
validation.to
);
return;
}
if (isBefore || isAfter) {
updateRange({ ...selectedRange, from: undefined });
updateValidation(
{
isValidDate: false,
isBefore,
isAfter,
},
validation.to
);
return;
}
if (
selectedRange?.to &&
differenceInCalendarDays(day, selectedRange?.to) > 0
) {
updateRange({ to: day, from: day });
setToInputValue(formatDateForInput(day, locale, "date", inputFormat));
setMonth(day);
updateValidation();
return;
}
if (toInputValue && !selectedRange?.to) {
const toDay = parseDate(toInputValue, today, locale, "date");
if (validateDay(toDay)) {
updateRange({ from: day, to: toDay });
setMonth(day);
updateValidation();
return;
}
}
updateRange({ ...selectedRange, from: day });
updateValidation({}, validation.to);
setMonth(day);
};
const toChange = (
val: string = "",
day: Date,
isBefore = false,
isAfter = false
) => {
setToInputValue(val);
if (!validateDay(day)) {
updateRange({ from: selectedRange?.from, to: undefined });
updateValidation(validation.from, {
isEmpty: !val,
isValidDate: false,
isInvalid: !isValidDate(day),
isWeekend: disableWeekends && isWeekend(day),
isDisabled: disabled && isMatch(day, disabled),
isBefore,
isAfter,
});
return;
}
if (isBefore || isAfter) {
updateRange({ from: selectedRange?.from, to: undefined });
updateValidation(validation.from, {
isValidDate: false,
isBefore,
isAfter,
});
return;
}
/* If to-value < from-value */
if (
selectedRange?.from &&
differenceInCalendarDays(selectedRange?.from, day) > 0
) {
updateRange({ from: selectedRange?.from, to: undefined });
updateValidation(validation.from, {
isValidDate: false,
isBeforeFrom: true,
});
return;
}
updateRange({ from: selectedRange?.from, to: day });
updateValidation(validation.from, {});
setMonth(day);
};
/* live-update datepicker based on changes in inputfields */
const handleChange = (e, src: RangeT) => {
const day = parseDate(e.target.value, today, locale, "date");
const isBefore = fromDate && differenceInCalendarDays(fromDate, day) > 0;
const isAfter = toDate && differenceInCalendarDays(day, toDate) > 0;
if (isBefore || isAfter) {
src === RANGE.FROM
? updateRange({ ...selectedRange, from: undefined })
: updateRange({ from: selectedRange?.from, to: undefined });
return;
}
/* If to-value < from-value, switch places in state */
if (
src === RANGE.TO &&
selectedRange?.from &&
differenceInCalendarDays(selectedRange?.from, day) >= 0
) {
updateRange({ from: day, to: selectedRange?.from });
setMonth(day);
return;
}
/* If from-value > to-value , switch places in state */
if (
src === RANGE.FROM &&
selectedRange?.to &&
differenceInCalendarDays(day, selectedRange?.to) >= 0
) {
updateRange({ to: day, from: selectedRange?.to });
setMonth(day);
return;
}
src === RANGE.FROM && updateRange({ ...selectedRange, from: day });
src === RANGE.TO && updateRange({ from: selectedRange?.from, to: day });
setMonth(day);
return src === RANGE.FROM
? fromChange(e.target.value, day, isBefore, isAfter)
: toChange(e.target.value, day, isBefore, isAfter);
};
const handleClose = useCallback(() => {
@@ -336,6 +532,8 @@ export const useRangeDatepicker = (
mode: "range" as const,
open,
onOpenToggle: () => setOpen((x) => !x),
disabled,
disableWeekends,
ref: datePickerRef,
};
+3
View File
@@ -9,6 +9,9 @@ export {
UNSAFE_useDatepicker,
UNSAFE_useMonthpicker,
UNSAFE_useRangeDatepicker,
RangeValidationT,
DateValidationT,
MonthValidationT,
} from "./hooks";
export {
default as UNSAFE_MonthPicker,
@@ -90,6 +90,26 @@ export const UseMonthpicker = () => {
);
};
export const UseMonthpickerFormat = () => {
const { inputProps, monthpickerProps } = UNSAFE_useMonthpicker({
disabled: [new Date("Apr 1 2022")],
onMonthChange: console.log,
inputFormat: "MM.yyyy",
});
return (
<div style={{ height: "20rem" }}>
<MonthPicker {...monthpickerProps}>
<MonthPicker.Input
{...inputProps}
label="Velg måned"
variant="monthpicker"
/>
</MonthPicker>
</div>
);
};
export const Required = () => {
const { inputProps, monthpickerProps } = UNSAFE_useMonthpicker({
locale: "nb",
Loaded 100 of 706 files, more files were not shown because too many files have changed in this diff. Show more