nve-designsystem 0.0.9 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/azure-static-web-app-kind-mushroom-03c272603.yml +2 -0
- package/.storybook/DocTemp.mdx +36 -0
- package/.storybook/main.ts +7 -2
- package/.storybook/preview.ts +4 -1
- package/.vscode/settings.json +2 -2
- package/README.md +97 -10
- package/build/css/nve.css +363 -363
- package/build/css/varsom.css +363 -363
- package/doc/components.md +8 -3
- package/doc/nve-button.md +1 -1
- package/doc/nve-input.md +121 -0
- package/doc/nve-label.md +19 -0
- package/doc/nve-radio-group.md +72 -0
- package/doc/nve-radio.md +43 -0
- package/doc/nve-tooltip.md +65 -0
- package/index.html +3 -14
- package/package.json +3 -1
- package/src/components/index.ts +11 -0
- package/src/components/nve-button/nve-button-demo.ts +89 -0
- package/src/components/nve-icon/nve-icon.ts +2 -2
- package/src/components/nve-input/nve-input-demo.ts +162 -0
- package/src/components/nve-input/nve-input.styles.ts +84 -0
- package/src/components/nve-input/nve-input.ts +42 -0
- package/src/components/nve-label/nve-label-demo.ts +80 -0
- package/src/components/nve-label/nve-label.styles.ts +45 -0
- package/src/components/nve-label/nve-label.ts +69 -0
- package/src/components/nve-radio/nve-radio.component.ts +23 -0
- package/src/components/nve-radio/nve-radio.styles.ts +50 -0
- package/src/components/nve-radio/radio-demo.ts +102 -0
- package/src/components/nve-radio-button/nve-radio-button.component.ts +19 -0
- package/src/components/nve-radio-group/nve-radio-group.component.ts +165 -0
- package/src/components/nve-radio-group/nve-radio-group.styles.ts +36 -0
- package/src/components/nve-tooltip/nve-tooltip-demo.ts +38 -0
- package/src/components/nve-tooltip/nve-tooltip.ts +19 -0
- package/src/main.ts +13 -83
- package/src/stories/NveButton.stories.ts +36 -16
- package/src/stories/NveButton.ts +14 -4
- package/src/stories/NveInput.stories.ts +50 -0
- package/src/stories/NveInput.ts +22 -0
- package/src/stories/NveLabel.stories.ts +56 -0
- package/src/stories/NveLabel.ts +21 -0
- package/src/stories/NveRadio.stories.ts +39 -0
- package/src/stories/NveRadio.ts +23 -0
- package/src/styles/testsite.css +54 -0
- package/src/utils/slot.ts +113 -0
- package/src/utils/watch.ts +60 -0
- package/tokens/$themes.json +636 -529
- package/tokens/Theme/nve_dark.json +24 -0
- package/tokens/Theme/nve_light.json +25 -0
- package/tokens/Theme/varsom_dark.json +24 -0
- package/tokens/Theme/varsom_light.json +24 -0
- package/tsconfig.json +1 -0
- package/vite.config +12 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Story, Meta, Title, Subtitle, Description, Primary, Controls, Stories } from '@storybook/blocks';
|
|
2
|
+
|
|
3
|
+
<Meta isTemplate />
|
|
4
|
+
|
|
5
|
+
<Title />
|
|
6
|
+
|
|
7
|
+
# Default implementation
|
|
8
|
+
|
|
9
|
+
<div style={{ display: 'flex' }}>
|
|
10
|
+
<span style={{ margin: '1rem' }}>
|
|
11
|
+
<Story name="Primary" height="50px">
|
|
12
|
+
{() => <Primary />}
|
|
13
|
+
</Story>
|
|
14
|
+
</span>
|
|
15
|
+
<span style={{ margin: '1rem' }}>
|
|
16
|
+
<Story name="Secondary" height="50px">
|
|
17
|
+
{() => <Primary />}
|
|
18
|
+
</Story>
|
|
19
|
+
</span>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<Primary />
|
|
23
|
+
|
|
24
|
+
## Inputs
|
|
25
|
+
|
|
26
|
+
The component accepts the following inputs (props):
|
|
27
|
+
|
|
28
|
+
<Controls />
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Additional variations
|
|
33
|
+
|
|
34
|
+
Listed below are additional variations of the component.
|
|
35
|
+
|
|
36
|
+
<Stories />
|
package/.storybook/main.ts
CHANGED
|
@@ -7,8 +7,8 @@ const varsomCSSPath = process.env.NODE_ENV === 'production' ? '/assets/varsom.cs
|
|
|
7
7
|
// we have to add another styling files after they will be in use
|
|
8
8
|
|
|
9
9
|
const config: StorybookConfig = {
|
|
10
|
-
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
|
|
11
|
-
addons: ['@storybook/addon-links', '@storybook/addon-essentials'],
|
|
10
|
+
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx|mdx)'],
|
|
11
|
+
addons: ['@storybook/addon-links', '@storybook/addon-essentials', '@storybook/addon-docs'],
|
|
12
12
|
framework: {
|
|
13
13
|
name: '@storybook/web-components-vite',
|
|
14
14
|
options: {},
|
|
@@ -17,11 +17,16 @@ const config: StorybookConfig = {
|
|
|
17
17
|
${head}
|
|
18
18
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.12.0/cdn/themes/light.css" />
|
|
19
19
|
<link rel="stylesheet" href="https://fonts.cdnfonts.com/css/source-sans-pro" />
|
|
20
|
+
<link
|
|
21
|
+
rel="stylesheet"
|
|
22
|
+
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200"
|
|
23
|
+
/>
|
|
20
24
|
<link rel="stylesheet" href="${varsomCSSPath}" />
|
|
21
25
|
<link rel="stylesheet" href="${globalCSSPath}" />
|
|
22
26
|
`,
|
|
23
27
|
docs: {
|
|
24
28
|
autodocs: 'tag',
|
|
29
|
+
|
|
25
30
|
},
|
|
26
31
|
};
|
|
27
32
|
export default config;
|
package/.storybook/preview.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { Preview } from "@storybook/web-components";
|
|
2
|
-
|
|
2
|
+
import DocTemp from './../.storybook/DocTemp.mdx';
|
|
3
3
|
const preview: Preview = {
|
|
4
4
|
parameters: {
|
|
5
|
+
docs: {
|
|
6
|
+
//page: DocTemp, kan sette custom mdx-fil her.
|
|
7
|
+
},
|
|
5
8
|
actions: { argTypesRegex: "^on[A-Z].*" },
|
|
6
9
|
controls: {
|
|
7
10
|
matchers: {
|
package/.vscode/settings.json
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
"editor.formatOnSave": true,
|
|
5
5
|
"editor.formatOnSaveMode": "file",
|
|
6
6
|
"editor.codeActionsOnSave": {
|
|
7
|
-
"source.fixAll":
|
|
8
|
-
"source.organizeImports":
|
|
7
|
+
"source.fixAll": "explicit",
|
|
8
|
+
"source.organizeImports": "never"
|
|
9
9
|
},
|
|
10
10
|
"[json]": {
|
|
11
11
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@ export default defineConfig({
|
|
|
33
33
|
import 'nve-designsystem/src/styles/global.css';
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
4. I tillegg trenger du å importere en .css-fil for farge-tema i main.ts. Filene finnes i `nve-designsystem/build/css
|
|
36
|
+
4. I tillegg trenger du å importere en .css-fil for farge-tema i main.ts. Filene finnes i mappa `nve-designsystem/build/css/`. For NVE-tema, bruk:
|
|
37
37
|
|
|
38
38
|
```ts
|
|
39
39
|
import 'nve-designsystem/build/css/nve.css';
|
|
@@ -52,12 +52,10 @@ Du har også mulighet til å velge enten lyst eller mørkt tema. Lyst er standar
|
|
|
52
52
|
```html
|
|
53
53
|
<template>
|
|
54
54
|
<nve-button variant="primary" size="small" @click="send">Button</nve-button>
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
></template
|
|
60
|
-
>
|
|
55
|
+
</template>
|
|
56
|
+
<script setup lang="ts">
|
|
57
|
+
import { NveButton } from 'nve-designsystem/src/components/nve-button/nve-button';
|
|
58
|
+
</script>
|
|
61
59
|
```
|
|
62
60
|
|
|
63
61
|
Husk å alltid bruke både opening og closing tag individuelt, (`<nve-button />` fungerer ikke).
|
|
@@ -72,10 +70,76 @@ De fleste komponentene bygger på [Shoelace](https://shoelace.style/), men er ti
|
|
|
72
70
|
|
|
73
71
|
### **Kjøremiljø**
|
|
74
72
|
|
|
75
|
-
Kjør `npm run dev` for
|
|
76
|
-
|
|
73
|
+
Prosjektet importerer Shoelace sin npm-pakke. Kjør `npm run dev` for utvikling.
|
|
74
|
+
For å teste en komponent i main.ts må man huske å legge til script tag med komponenten i index.html fila som f.eks. <script type="module" src="/src/nve-button.ts"></script>
|
|
77
75
|
|
|
78
|
-
###
|
|
76
|
+
### **Styling**
|
|
77
|
+
|
|
78
|
+
Når vi styler shoelace-komponenter kan vi enten overskrive Shoelace sine css-klasser eller bruke parts i shadow-DOM.
|
|
79
|
+
Bruk helst parts fordi koden blir lettere å lese.
|
|
80
|
+
Dette:
|
|
81
|
+
|
|
82
|
+
```css
|
|
83
|
+
::part(control) {
|
|
84
|
+
color: red;
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
ser bedre ut enn dette:
|
|
89
|
+
|
|
90
|
+
```css
|
|
91
|
+
.checkbox checkbox--medium checkbox__control {
|
|
92
|
+
color: red;
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Hvis det ikke er mulig å style med ::part, bruk css-klasser.
|
|
97
|
+
|
|
98
|
+
### **Typografi**
|
|
99
|
+
|
|
100
|
+
Det finnes tokens for typografi i Figma.
|
|
101
|
+
Sett Figma i utviklermodus og klikk på en tekst.
|
|
102
|
+
I typografi-seksjonen til høyre ser vi css'en som er generert. Vi skal ikke bruke selve css'en, men <b>kommentaren</b> over css'en gir et hint om navnet på tokenet. Eksempel i Figma:
|
|
103
|
+
|
|
104
|
+
```css
|
|
105
|
+
color: var(--neutrals-foreground-mute, #3c3f44);
|
|
106
|
+
|
|
107
|
+
/* Label/small */
|
|
108
|
+
font-family: Source Sans Pro;
|
|
109
|
+
font-size: 1rem;
|
|
110
|
+
font-style: normal;
|
|
111
|
+
font-weight: 600;
|
|
112
|
+
line-height: 110%; /* 1.1rem */
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Kommentaren `/* Label/small */` betyr at vi skal bruke css-variabelen `--label-small`, f.eks. slik:
|
|
116
|
+
|
|
117
|
+
```css
|
|
118
|
+
.button-label {
|
|
119
|
+
font: var(--label-small);
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### **Mapping av shoelace tokes til NVE-tokens**
|
|
124
|
+
|
|
125
|
+
Det hadde vært fint om vi kunne sette en NVE-verdi for alle Shoelace-tokens. Men dette går ikke fordi strukturen i Shoelace og NVE Designsystem er forskjellig.
|
|
126
|
+
Vi har satt NVE-verdier for en del Shoelace-tokens, og disse ligger i global.css.
|
|
127
|
+
Foreslå gjerne flere Shoelace-tokens som kan mappes på denne måten.
|
|
128
|
+
|
|
129
|
+
Vi trenger ikke å style:
|
|
130
|
+
|
|
131
|
+
- fokus-tilstand på alle komponenter. Dette settes globalt
|
|
132
|
+
- høyde på input-felter, knapper og select
|
|
133
|
+
- border-radius på alle komponenter (med mindre border radius mangler på en Shoelace-komponent, men designsystemet spesifiserer border-radius)
|
|
134
|
+
- bakgrunn, font-farge, font-størrelse, ikon-farge, ramme i input, select og textarea i både variantene filled og not filled
|
|
135
|
+
|
|
136
|
+
### **Test-app for designere når man lager en PR**
|
|
137
|
+
|
|
138
|
+
Pull requests på komponenter skal godkjennes av designere. Derfor har vi satt opp en azure static app med Storybook. Denne bygges og kjøres når man lager en PR.
|
|
139
|
+
|
|
140
|
+
Det er maks 10 apper som kan kjøres samtidig, så hvis det er flere enn 10 PR'er kan det være at appen ikke bygges. De skal slettes automatisk når en PR lukkes, men det er ikke alltid dette virker. I slike tilfeller må vi slette appene manuelt i Azure-portalen. Appene ligger i denne ressursgruppa: TEST-Designsystemet-RG.
|
|
141
|
+
|
|
142
|
+
### **Storybook**
|
|
79
143
|
|
|
80
144
|
For å kjøre Storybook lokalt, kjør `npm run storybook`
|
|
81
145
|
|
|
@@ -95,3 +159,26 @@ For å bygge css filer som inneholder verdier basert på tokens fra Figma, kjør
|
|
|
95
159
|
### **npm**
|
|
96
160
|
|
|
97
161
|
For å publisere på npm, må man oppdatere versjonsnr. i package.json og package-lock.json. Deretter kjør kommando `npm publish --access public`. Dette krever at man er innlogget på npm. For at CSS-variabler skal være tilgjengelig i npm-pakken, må css-filer kopieres. Dette gjøres ved å kjøre kommando `npm run copy-files`.
|
|
162
|
+
<<<<<<< HEAD
|
|
163
|
+
|
|
164
|
+
### **Kjøremiljø**
|
|
165
|
+
|
|
166
|
+
Prosjektet importerer Shoelace sin npm-pakke. Kjør `npm run dev` for utvikling.
|
|
167
|
+
For å teste en komponent i main.ts må man huske å legge til script tag med komponenten i index.html fila som f.eks. <script type="module" src="/src/nve-button.ts"></script>
|
|
168
|
+
|
|
169
|
+
### Storybook
|
|
170
|
+
|
|
171
|
+
For å kjøre Storybook lokalt, kjør `npm run storybook`
|
|
172
|
+
|
|
173
|
+
Det skal opprettes en story for hver nye komponent som lages. Story opprettes på følgende måte: <br>
|
|
174
|
+
|
|
175
|
+
<ul>
|
|
176
|
+
<li>Opprett en fil i mappen stories med filnavn "NavnPåKomponent.stories.ts." F.eks. NveButton.stories.ts.</li>
|
|
177
|
+
<li>Se på eksisterende stories-filer og bruk samme oppsett </li>
|
|
178
|
+
<li>Storbyook lager toggle-buttons for boolean verdier. For dropdown-meny må man selv definere alternativene </li>
|
|
179
|
+
<li>Komponent-filen, f.eks. NavnPåKomponent.ts må eksportere props. Se eksisterende filer for eksempel (export interface NavnPåKomponentProps)</li>
|
|
180
|
+
<li>Minimum et eksempel på komponent må opprettes og eksporteres i stories-filen, f.eks. "export const Primary..." for Primary-vaiant av NveButton</li>
|
|
181
|
+
<li>Informasjon om komponenten (fra Figma og ev. ekstra info) kan legges inn i stories-files under parameters -> docs --> description --> component</li>
|
|
182
|
+
</ul>
|
|
183
|
+
|
|
184
|
+
For å publisere Storybook på Chromatic, kjør `npm run build; npm run build-storybook`. Deretter må det kjøres en kommando med project token fra Chromatic: `npx chromatic --project-token=\<project-token\>`
|