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.
Files changed (53) hide show
  1. package/.github/workflows/azure-static-web-app-kind-mushroom-03c272603.yml +2 -0
  2. package/.storybook/DocTemp.mdx +36 -0
  3. package/.storybook/main.ts +7 -2
  4. package/.storybook/preview.ts +4 -1
  5. package/.vscode/settings.json +2 -2
  6. package/README.md +97 -10
  7. package/build/css/nve.css +363 -363
  8. package/build/css/varsom.css +363 -363
  9. package/doc/components.md +8 -3
  10. package/doc/nve-button.md +1 -1
  11. package/doc/nve-input.md +121 -0
  12. package/doc/nve-label.md +19 -0
  13. package/doc/nve-radio-group.md +72 -0
  14. package/doc/nve-radio.md +43 -0
  15. package/doc/nve-tooltip.md +65 -0
  16. package/index.html +3 -14
  17. package/package.json +3 -1
  18. package/src/components/index.ts +11 -0
  19. package/src/components/nve-button/nve-button-demo.ts +89 -0
  20. package/src/components/nve-icon/nve-icon.ts +2 -2
  21. package/src/components/nve-input/nve-input-demo.ts +162 -0
  22. package/src/components/nve-input/nve-input.styles.ts +84 -0
  23. package/src/components/nve-input/nve-input.ts +42 -0
  24. package/src/components/nve-label/nve-label-demo.ts +80 -0
  25. package/src/components/nve-label/nve-label.styles.ts +45 -0
  26. package/src/components/nve-label/nve-label.ts +69 -0
  27. package/src/components/nve-radio/nve-radio.component.ts +23 -0
  28. package/src/components/nve-radio/nve-radio.styles.ts +50 -0
  29. package/src/components/nve-radio/radio-demo.ts +102 -0
  30. package/src/components/nve-radio-button/nve-radio-button.component.ts +19 -0
  31. package/src/components/nve-radio-group/nve-radio-group.component.ts +165 -0
  32. package/src/components/nve-radio-group/nve-radio-group.styles.ts +36 -0
  33. package/src/components/nve-tooltip/nve-tooltip-demo.ts +38 -0
  34. package/src/components/nve-tooltip/nve-tooltip.ts +19 -0
  35. package/src/main.ts +13 -83
  36. package/src/stories/NveButton.stories.ts +36 -16
  37. package/src/stories/NveButton.ts +14 -4
  38. package/src/stories/NveInput.stories.ts +50 -0
  39. package/src/stories/NveInput.ts +22 -0
  40. package/src/stories/NveLabel.stories.ts +56 -0
  41. package/src/stories/NveLabel.ts +21 -0
  42. package/src/stories/NveRadio.stories.ts +39 -0
  43. package/src/stories/NveRadio.ts +23 -0
  44. package/src/styles/testsite.css +54 -0
  45. package/src/utils/slot.ts +113 -0
  46. package/src/utils/watch.ts +60 -0
  47. package/tokens/$themes.json +636 -529
  48. package/tokens/Theme/nve_dark.json +24 -0
  49. package/tokens/Theme/nve_light.json +25 -0
  50. package/tokens/Theme/varsom_dark.json +24 -0
  51. package/tokens/Theme/varsom_light.json +24 -0
  52. package/tsconfig.json +1 -0
  53. package/vite.config +12 -0
@@ -4,6 +4,8 @@ on:
4
4
  push:
5
5
  branches:
6
6
  - main
7
+ paths:
8
+ - 'src/**'
7
9
  pull_request:
8
10
  types: [opened, synchronize, reopened, closed]
9
11
  branches:
@@ -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 />
@@ -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;
@@ -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: {
@@ -4,8 +4,8 @@
4
4
  "editor.formatOnSave": true,
5
5
  "editor.formatOnSaveMode": "file",
6
6
  "editor.codeActionsOnSave": {
7
- "source.fixAll": true,
8
- "source.organizeImports": false
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/` mappe. For NVE-tema, bruk:
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
- <template>
56
- <script setup lang="ts">
57
- import { NveButton } from 'nve-designsystem/src/components/nve-button/nve-button';
58
- </script></template
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 å vise test-applikasjonen.
76
- Lag en testside for komponenten din, `nve-komponentnavn-demo.ts`, og inkluder denne i `main.ts`. Sida bør vise de forskjellige variantene av komponenten.
73
+ Prosjektet importerer Shoelace sin npm-pakke. Kjør `npm run dev` for utvikling.
74
+ For å teste en komponent i main.ts 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
- ### Storybook
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\>`