Skip to content

Commit e0f4262

Browse files
ThunearBarsnes
andauthored
docs(popover): web-first (#4853)
Co-authored-by: Tobias Barsnes <tobias.barsnes@digdir.no>
1 parent f846c05 commit e0f4262

5 files changed

Lines changed: 118 additions & 136 deletions

File tree

Lines changed: 46 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,7 @@
1-
<Story story="PreviewEn" />
2-
<ReactComponentDocs />
1+
<Story story="PreviewEn" defaultOpen />
32

43
## Use
5-
6-
```tsx
7-
import { Popover } from '@digdir/designsystemet-react';
8-
9-
// with context
10-
<Popover.TriggerContext>
11-
<Popover.Trigger>Trigger</Popover.Trigger>
12-
<Popover>Content</Popover>
13-
</Popover.TriggerContext>
14-
15-
// without context with own trigger
16-
<Button popovertarget="my-popover">Trigger</Button>
17-
<Popover id="my-popover">Content</Popover>
18-
```
19-
20-
### React and `popovertarget`
21-
When you use `Popover` without `Popover.TriggerContext`, you connect the trigger and `Popover` yourself.
22-
In this case, `popovertarget` is used in lowercase, so that all versions of React correctly render the attribute.
23-
When you use `@digdir/designsystemet-react` we extend `@types/react-dom` to accept this.
24-
25-
### Polyfill
26-
27-
`Popover` uses [popover (mozilla.org)](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/popover).
28-
This api is classified as [Baseline: Newly available (mozilla.org)](https://developer.mozilla.org/en-US/docs/Glossary/Baseline/Compatibility) as of April 2024, when Firefox was the last browser to add it.
29-
In some cases, you may find that users are locked to older browser versions for various reasons, and then it may be appropriate to add a [Popover-Polyfill (github.com)](https://github.com/oddbird/popover-polyfill) to ensure that `Popover` works for everyone.
30-
31-
## Examples
32-
33-
### Standard
34-
35-
<Story story="PreviewEn" />
36-
37-
### Inline trigger
38-
39-
<Story story="DottedUnderlineEn" />
40-
41-
### Controlled
42-
You can control when the popover is opened or closed.
43-
44-
Note that we do not use `onClick` on the trigger, the dropdown handles this internally and sends to `onOpen` and `onClose`.
45-
46-
<Story story="ControlledEn" />
47-
48-
### Without TriggerContext
49-
You can also use Popover without TriggerContext by using `popovertarget`:
50-
51-
<Story story="WithoutContextEn" />
52-
53-
## HTML
54-
55-
You can use `popover` in plain HTML by using the `popover` attribute on an element and connecting it to a trigger with `popovertarget`.
56-
4+
You can use popover in plain HTML by using the `popover` attribute on an element and connecting it to a trigger with `popovertarget`.
575
The class name `ds-popover` is applied to the element that is the popover.
586

597
When you use `@digdir/designsystemet-web`, we add a listener that automatically positions the popover correctly using `floating-ui`.
@@ -76,9 +24,18 @@ Content
7624
</div>
7725
```
7826

79-
`data-placement` is used to position the arrow correctly.
80-
This attribute is related to a `plugin` we have created for `floating-ui`.
81-
It is portable to others who use `floating-ui`, and you can find [the code on github.com](https://github.com/digdir/designsystemet/blob/f6bf5a2c84baa2bfd92207510cb6c0a00573ea61/packages/react/src/components/popover/popover.tsx#L209).
27+
### Polyfill
28+
Popover uses [popover (mozilla.org)](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/popover).
29+
This api is classified as [Baseline: Newly available (mozilla.org)](https://developer.mozilla.org/en-US/docs/Glossary/Baseline/Compatibility) as of April 2024, when Firefox was the last browser to add it.
30+
In some cases, you may find that users are locked to older browser versions for various reasons, and you might want to add a [Popover-Polyfill (github.com)](https://github.com/oddbird/popover-polyfill) to ensure that popover works for everyone.
31+
32+
33+
## Examples
34+
35+
### Without TriggerContext
36+
You can also use Popover without TriggerContext by using `popovertarget`:
37+
38+
<Story story="WithoutContextEn" />
8239

8340
### Inline popover
8441

@@ -103,7 +60,38 @@ popover="manual"
10360
```
10461

10562
## CSS variables and data attributes
106-
63+
Sizes are controlled with [data-size](/en/fundamentals/code/sizes) and colors with [data-color](/en/fundamentals/code/colors).
64+
The component will inherit from the closest parent where these are set.
10765
<CssVariables />
10866

10967
<CssAttributes />
68+
69+
70+
## React
71+
72+
```tsx
73+
import { Popover } from '@digdir/designsystemet-react';
74+
75+
// with context
76+
<Popover.TriggerContext>
77+
<Popover.Trigger>Trigger</Popover.Trigger>
78+
<Popover>Content</Popover>
79+
</Popover.TriggerContext>
80+
81+
// without context with own trigger
82+
<Button popovertarget="my-popover">Trigger</Button>
83+
<Popover id="my-popover">Content</Popover>
84+
```
85+
### React and `popovertarget`
86+
When you use popover without `TriggerContext`, you connect the trigger and popover yourself.
87+
In this case, `popovertarget` is used in lowercase, so that all versions of React correctly render the attribute.
88+
When you use `@digdir/designsystemet-react` we extend `@types/react-dom` to accept this.
89+
90+
### Controlled example
91+
You can control when the popover is opened or closed.
92+
93+
Note that we do not use `onClick` on the trigger, the dropdown handles this internally and sends to `onOpen` and `onClose`.
94+
95+
<Story story="ControlledEn" language="react" />
96+
97+
<ReactComponentDocs />

apps/www/app/content/components/popover/en/overview.mdx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,36 @@ search_terms: overlay, tooltip, helptext, explanation, pop-up
44

55
<Story story="PreviewEn" />
66

7-
**Use `Popover` when**
8-
- you need to provide additional explanations that require more space than a short [`Tooltip`](/en/components/docs/tooltip/overview), such as definitions or detailed instructions
7+
**Use popover when**
8+
- you need to provide additional explanations that require more space than a short [tooltip](/en/components/docs/tooltip/overview), such as definitions or detailed instructions
99
- context-specific help is needed that users can open and close without leaving the page
1010
- supplementary information should be shown that is not critical for completing the task, but may be useful for some users
1111

12-
**Avoid `Popover` when**
13-
- you need to describe a symbol or keyboard shortcut; use [`Tooltip`](/en/components/docs/tooltip/overview) instead
14-
- the purpose is navigation or choosing between options; use [`Dropdown`](/en/components/docs/dropdown/overview) instead
12+
**Avoid popover when**
13+
- you need to describe a symbol or keyboard shortcut; use [tooltip](/en/components/docs/tooltip/overview) instead
14+
- the purpose is navigation or choosing between options; use [dropdown](/en/components/docs/dropdown/overview) instead
1515
- the content is intended to appear on hover
1616

1717
## Example
1818

19-
### Interactive `Popover`
19+
### Interactive popover
2020

21-
A `Popover` may contain buttons and other interactive elements.
21+
Popover may contain buttons and other interactive elements.
2222

2323
<Story story="InteractiveEn" />
2424

2525
### Inline trigger
26-
You can use a `Popover` inline within text, marked with a dotted underline, for example when explaining a term.
26+
27+
You can use popover inline within text, marked with a dotted underline, for example when explaining a term.
2728

2829
<Story story="DottedUnderlineEn" />
2930

3031
## Guidelines
31-
32-
`Popover` is used to display more detailed or interactive supplementary information without taking the user out of context. It can be used as an extended solution when a [`Tooltip`](/en/components/docs/tooltip/overview) is not sufficient. `Popover` is opened through an intentional user click and may contain text, links and simple form elements. The content should be short, relevant, and not critical for completing the task.
32+
Popover is used to display more detailed or interactive supplementary information without taking the user out of context. It can be used as an extended solution when a [tooltip](/en/components/docs/tooltip/overview) is not sufficient.
33+
Popover is opened through an intentional user click and may contain text, links and simple form elements. The content should be short, relevant, and not critical for completing the task.
3334

3435
### Placement
35-
36-
`Popover` can be placed as needed, and will automatically stay within the visible browser area. This behaviour can be disabled using `autoPlacement`.
36+
Popover can be placed as needed, and will automatically stay within the visible browser area. This behaviour can be disabled using `autoPlacement`.
3737

3838
## Text
3939

apps/www/app/content/components/popover/metadata.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{
22
"no": {
33
"title": "Popover",
4-
"subtitle": "`Popover` vises over andre elementer i grensesnittet og er koblet til et spesifikt element. Den brukes til å vise tilleggsinformasjon, interaktive elementer eller korte forklaringer uten å navigere bort fra siden."
4+
"subtitle": "Popover vises over andre elementer i grensesnittet og er koblet til et spesifikt element. Den brukes til å vise tilleggsinformasjon, interaktive elementer eller korte forklaringer uten å navigere bort fra siden."
55
},
66
"en": {
77
"title": "Popover",
8-
"subtitle": "`Popover` appears above other elements in the interface and is linked to a specific element. It is used to display additional information, interactive elements, or brief explanations without navigating away from the page."
8+
"subtitle": "Popover appears above other elements in the interface and is linked to a specific element. It is used to display additional information, interactive elements, or brief explanations without navigating away from the page."
99
},
1010
"image": "Popover.svg",
1111
"cssFile": "popover.css"
Lines changed: 46 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,7 @@
1-
<Story story="Preview" />
2-
<ReactComponentDocs />
1+
<Story story="Preview" defaultOpen />
32

43
## Bruk
5-
6-
```tsx
7-
import { Popover } from '@digdir/designsystemet-react';
8-
9-
// med context
10-
<Popover.TriggerContext>
11-
<Popover.Trigger>Trigger</Popover.Trigger>
12-
<Popover>Content</Popover>
13-
</Popover.TriggerContext>
14-
15-
// uten context med egen trigger
16-
<Button popovertarget="my-popover">Trigger</Button>
17-
<Popover id="my-popover">Content</Popover>
18-
```
19-
20-
### React og `popovertarget`
21-
Når du bruker `Popover` uten `Popover.TriggerContext`, kobler du selv sammen utløseren og `Popover`.
22-
Da brukes `popovertarget` i små bokstaver, slik at alle versjoner av React korrekt gjengir attributtet.
23-
Når du bruker `@digdir/designsystemet-react` utvider vi `@types/react-dom` til å akseptere dette.
24-
25-
### Polyfill
26-
27-
`Popover` bruker [popover (mozilla.org)](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/popover).
28-
Dette apiet er klassifisert som [Baseline: Newly available (mozilla.org)](https://developer.mozilla.org/en-US/docs/Glossary/Baseline/Compatibility) fra april 2024, da Firefox som siste nettleser la det til.
29-
I noen tilfeller kan en oppleve at brukere av ulike grunner er låst til eldre nettleserversjoner, og da kan det være aktuelt å legge til en [Popover-Polyfill (github.com)](https://github.com/oddbird/popover-polyfill) for å sikre at `Popover` fungerer for alle.
30-
31-
32-
## Eksempler
33-
34-
### Standard
35-
36-
<Story story="Preview" />
37-
38-
### Inline trigger
39-
Du kan bruke Popover inline i tekst med stiplet understrek:
40-
<Story story="DottedUnderline" />
41-
42-
### Kontrollert
43-
Du kan kontrollere når popover er åpen eller lukket.
44-
45-
Merk at vi ikke bruker `onClick` på triggeren, dropdownen håndterer dette internt on sendet til `onOpen` og `onClose`.
46-
47-
<Story story="Controlled" />
48-
49-
### Uten TriggerContext
50-
Du kan også bruke Popover uten TriggerContext ved å bruke `popovertarget`:
51-
<Story story="WithoutContext" />
52-
53-
## HTML
54-
55-
Du kan bruke `popover` i ren HTML ved å bruke `popover`-attributtet på et element og koble det til en trigger med `popovertarget`.
4+
Du kan bruke popover i ren HTML ved å bruke `popover`-attributtet på et element og koble det til en trigger med `popovertarget`.
565
Klassenvnet `ds-popover` blir brukt på elementet som er popoveren.
576

587
Når du bruker `@digdir/designsystemet-web` legger vi på en listener som automatisk plasserer popoveren riktig ved hjelp av `floating-ui`.
@@ -74,6 +23,18 @@ Vi anbefaler å lese om [popover (mozilla.org)](https://developer.mozilla.org/en
7423
</div>
7524
```
7625

26+
### Polyfill
27+
Popover bruker [popover (mozilla.org)](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/popover).
28+
Dette apiet er klassifisert som [Baseline: Newly available (mozilla.org)](https://developer.mozilla.org/en-US/docs/Glossary/Baseline/Compatibility) fra april 2024, da Firefox som siste nettleser la det til.
29+
I noen tilfeller kan en oppleve at brukere av ulike grunner er låst til eldre nettleserversjoner, og da kan det være aktuelt å legge til en [Popover-Polyfill (github.com)](https://github.com/oddbird/popover-polyfill) for å sikre at popover fungerer for alle.
30+
31+
32+
## Eksempler
33+
34+
### Uten TriggerContext
35+
Du kan også bruke Popover uten TriggerContext ved å bruke `popovertarget`:
36+
<Story story="WithoutContext" />
37+
7738
### Inline popover
7839

7940
Dersom du vil ha triggeren inline i tekst må du fortsatt bruke `<button>`, men du kan legge på `data-popover="inline"` for å få riktig styling.
@@ -97,7 +58,38 @@ Dersom du vil ha triggeren inline i tekst må du fortsatt bruke `<button>`, men
9758
```
9859

9960
## CSS variabler og data-attributter
100-
61+
Størrelser styres med [data-size](/no/fundamentals/code/sizes) og farger med[data-color](/no/fundamentals/code/colors).
62+
Komponenten vil arve fra nærmeste forelder med disse satt.
10163
<CssVariables />
10264

10365
<CssAttributes />
66+
67+
68+
## React
69+
70+
```tsx
71+
import { Popover } from '@digdir/designsystemet-react';
72+
73+
// med context
74+
<Popover.TriggerContext>
75+
<Popover.Trigger>Trigger</Popover.Trigger>
76+
<Popover>Content</Popover>
77+
</Popover.TriggerContext>
78+
79+
// uten context med egen trigger
80+
<Button popovertarget="my-popover">Trigger</Button>
81+
<Popover id="my-popover">Content</Popover>
82+
```
83+
### React og `popovertarget`
84+
Når du bruker popover uten `TriggerContext`, kobler du selv sammen utløseren og popover.
85+
Da brukes `popovertarget` i små bokstaver, slik at alle versjoner av React korrekt gjengir attributtet.
86+
Når du bruker `@digdir/designsystemet-react` utvider vi `@types/react-dom` til å akseptere dette.
87+
88+
### Eksempel på kontrollert
89+
Du kan kontrollere når popover er åpen eller lukket.
90+
91+
Merk at vi ikke bruker `onClick` på triggeren, dropdownen håndterer dette internt on sendet til `onOpen` og `onClose`.
92+
93+
<Story story="Controlled" language="react" />
94+
95+
<ReactComponentDocs />

apps/www/app/content/components/popover/no/overview.mdx

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,36 @@ search_terms: infoboks, hjelpetekst, forklaring, overlay, tooltip, helptext, exp
44

55
<Story story="Preview" />
66

7-
**Bruk `Popover` når**
8-
* du skal gi utfyllende forklaringer som krever mer plass enn en kort [`Tooltip`](/no/components/docs/tooltip/overview), f.eks. definisjoner eller utdypende instruksjoner
7+
**Bruk popover når**
8+
* du skal gi utfyllende forklaringer som krever mer plass enn en kort [tooltip](/no/components/docs/tooltip/overview), f.eks. definisjoner eller utdypende instruksjoner
99
* det trengst kontekstspesifikk hjelp som brukeren kan velge å åpne/lukke uten å forlate siden
1010
* tilleggsinformasjon som ikke er kritisk for å fullføre oppgaven skal visest, men som kan være nyttig for enkelte brukere
1111

12-
**Unngå `Popover` når**
13-
* du skal beskrive et symbol eller tastatursnartvei, bruk heller [`Tooltip`](/no/components/docs/tooltip/overview)
14-
* det skal være navigasjon eller valg av alternativer, bruk heller [`Dropdown`](/no/components/docs/dropdown/overview)
12+
**Unngå popover når**
13+
* du skal beskrive et symbol eller tastatursnartvei, bruk heller [tooltip](/no/components/docs/tooltip/overview)
14+
* det skal være navigasjon eller valg av alternativer, bruk heller [dropdown](/no/components/docs/dropdown/overview)
1515
* du skal vise innhold ved `hover`
1616

1717
## Eksempel
18-
### Interaktiv `Popover`
1918

20-
`Popover` kan inneholde knapper og andre interaktive elementer.
19+
### Interaktiv popover
20+
21+
Popover kan inneholde knapper og andre interaktive elementer.
2122

2223
<Story story="Interactive" />
2324

2425
### Ordforklaring
2526

26-
Du kan bruke `Popover` inline i tekst med stiplet understrek, for eksempel når du skal forklare et begrep.
27+
Du kan bruke popover inline i tekst med stiplet understrek, for eksempel når du skal forklare et begrep.
2728

2829
<Story story="DottedUnderline" />
2930

3031
## Retningslinjer
31-
`Popover` brukes for å vise mer detaljert eller interaktiv tilleggsinformasjon uten å ta brukeren bort fra konteksten. Den kan brukes som en utvidet løsning når [`Tooltip`](/no/components/docs/tooltip/overview) ikke strekker til. `Popover` åpnes ved et bevisst brukerklikk og kan inneholde både tekst, lenker og enkle skjemaelementer. Innholdet bør være kort og relevant, og ikke kritisk for å fullføre oppgaven.
32+
Popover brukes for å vise mer detaljert eller interaktiv tilleggsinformasjon uten å ta brukeren bort fra konteksten. Den kan brukes som en utvidet løsning når [tooltip](/no/components/docs/tooltip/overview) ikke strekker til.
33+
Popover åpnes ved et bevisst brukerklikk og kan inneholde både tekst, lenker og enkle skjemaelementer. Innholdet bør være kort og relevant, og ikke kritisk for å fullføre oppgaven.
3234

3335
### Plassering
34-
`Popover` plasseres etter ønske, men holder seg automatisk innenfor det synlige området i nettleseren. Denne oppførselen kan deaktiveres med `autoPlacement`.
36+
Popover plasseres etter ønske, men holder seg automatisk innenfor det synlige området i nettleseren. Denne oppførselen kan deaktiveres med `autoPlacement`.
3537

3638
## Tekst
3739
Unngå lange tekster og kompliserte forklaringer. I noen tilfeller er det kanskje bedre å lenke til en annen side med utdypende informasjon om temaet.

0 commit comments

Comments
 (0)