@kystverket/styrbord 1.12.0 → 1.13.2

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/README.md CHANGED
@@ -35,128 +35,23 @@ Importering av enkeltkomponenter.
35
35
  import { Heading, Ingress, Tabs } from '@kystverket/styrbord';
36
36
  ```
37
37
 
38
- ## Design Tokens
39
-
40
- Styrbords design tokens hentes fra [@Kystverket/styrbord-tokens](https://github.com/Kystverket/styrbord-tokens).
41
-
42
- ## Endringslogg
43
-
44
- ### 2026-06-22 -- v1.9.9
45
-
46
- Lagt inn en ny context for å hente filer som er lastet opp til RichTextArea, MarkdownToReact og FileUploader kalt `FileRetrieverContext`. Uten en provider til denne så vil komponentene fortsatt fungere, men preview av opplastede/refererte filer vil ikke bli vist.
47
-
48
- ### 2026-06-09 -- v1.9.0
38
+ ### Språk og oversettelser
49
39
 
50
- Oppdatert RichTextArea og MarkdownToReact til å bruke FileUploader sin context for å håndtere henting av fil-informasjon gjennom `deriveFileInfosFromStorageIds`
40
+ Applikasjoner som bruker Styrbord wrappe alt med både `<SprakProvider>` (for å velge språk) og `<StyrbordTranslations>` (for å hente oversettelsene til Styrbord). Uten dette vil komponenter som for eksempel Footer vise nøkkelstrenger i stedet for oversatt tekst.
51
41
 
52
- ### 2026-05-22 -- v1.7.2
42
+ ```tsx
43
+ import { SprakProvider } from '@kystverket/sprak-react';
44
+ import { STYRBORD_TRANSLATIONS_NAMESPACE, StyrbordTranslations } from '@kystverket/styrbord';
53
45
 
54
- Lagt inn bildehåndtering i RichTextArea og MarkdownToReact. Du laster opp bildet selv og legger inn en referanse-lenke i markdownen. Lenken tolkes i MarkdownToReact, slik at markdownen holdes så liten som mulig.
55
-
56
- ### 2026-05-19 -- v1.7.0
57
-
58
- Etter mange problemer med implementasjon og styling av en DatePicker har vi gått til en native datepicker. Noen attributter på datepicker er ikke lenger nødvendige eller tilgjengelige.
59
-
60
- ### 2026-04-14 -- v1.5.0
61
-
62
- - Oppdatert Header til å støtte 'applikasjoner'. For å overstyre LinkComponent som brukes (for å slippe full reload i f.eks. NextJS) kan man wrapper Header med HeaderContext.
63
-
64
- ```ts
65
- <HeaderContext.Provider value={{ LinkComponent: Link }}>
66
- <Header
67
- logo={{ variant: 'selvbetjening', url: '/' + language }}
68
- slots={{ postLinks: <LanguageSwitcher language={language} /> }}
69
- />
70
- </HeaderContext.Provider>
46
+ function App() {
47
+ return (
48
+ <SprakProvider locale="nb-NO">
49
+ <StyrbordTranslations>{/* resten av applikasjonen */}</StyrbordTranslations>
50
+ </SprakProvider>
51
+ );
52
+ }
71
53
  ```
72
54
 
73
- Alle linker er nå plassert i links propertyen. Linker som skal plasseres under profile må ha `position="profile"`. Det er slots for å sette inn egne komponenter i menyen som ikke er en link (for eksempel varselsbjelle).
74
-
75
- Header bruker nå hamburger-ikon for mobilmeny.
76
-
77
- Fullt navn vises ikke lenger, kun initialer. Initialer blir automatisk lagd basert på navn.
78
-
79
- ### 2026-03-10 -- v1.4.0
80
-
81
- Endret fra StyrbordTranslationContext til å bruke @kystverket/sprak-react.
82
-
83
- Internt i Styrbord-komponenter kan man bruke følgende for å hente oversettelsesfunksjonen.
84
-
85
- ```ts
86
- import { useStyrbordTranslation } from '~/translations';
87
- ...
88
- const { t } = useTranslation();
89
- ```
90
-
91
- Applikasjoner som bruker Styrbord må wrappe alt med både `<SprakProvider>` (for å velge språk) og `<StyrbordTranslations>` (for å hente oversettelsene til Styrbord).
92
-
93
- ### 2026-01-13 -- v1.3.0
94
-
95
- #### Knekkende endring
96
-
97
- Fjernet parameteren language fra Header og Footer. For å endre språk i Styrbord-komponenter kan man nå bruke følgende context provider rundt hele applikasjonen.
98
-
99
- ```jsx
100
- <StyrbordTranslationContext.Provider value={{ language: 'nb-NO' }}>...</StyrbordTranslationContext.Provider>
101
- ```
102
-
103
- Internt i Styrbord-komponenter kan man bruke følgende for å hente oversettelsesfunksjonen.
104
-
105
- ```ts
106
- import { useStyrbordTranslation } from '~/i18n/translations';
107
- ...
108
- const { t } = useStyrbordTranslation();
109
- ```
110
-
111
- ### 2025-11-11 -- v1.2.1
112
-
113
- - Oppdatert Alert til å ikke være egenprodusert, men istedet være en variant av Alert fra Designsystemet. Deler av interfacet endres til å være likere Designsystemet (size).
114
-
115
- ### 2025-11-11 -- v1.1.0
116
-
117
- - Oppdatert til Designsystemet versjon 1.7.2 fra 1.6.1.
118
- - Fjernet unødvendig dependency til @navikt/aksel-icons.
119
-
120
- ### 2025-10-24 -- v1.0
121
-
122
- Offisielt versjon 1.0.
123
-
124
- - Fjernet all duplisering av CSS-variabler. Tidligere har vi for bakoverkompatibilitet duplisert alle Designsystemvariabler til en variabel uten `--ds-` foran. Disse variablene er nå ikke lenger tilstede. Versjon 1.0 var en god anledning til å rydde i dette.
125
- - `--spacing-#`-variablene er flyttet fra styrbord-tokens til styrbord. Skal ikke ha noen effekt. Oppfordrer til å bruke `--ds-size-#` over `--spacing-#`.
126
-
127
- ### 2025-10-23
128
-
129
- Oppdatert til Designsystemet 1.6.1 fra 1.4.0.
130
-
131
- Endret Avatar.
132
-
133
- - Størrelser er nå `2x` og `3x` fra `xxs` og `xxxs`.
134
- - Endret fargevalg. `data-color` er nå kun vanlige farger, men man kan legge på `data-color-variant="surface-tinted"` for å få dusere farger.
135
-
136
- ### 2025-10-16
137
-
138
- Footer har blitt endret. Den er ikke bakoverkompatibel, men siden footer stort sett settes en gang bør
139
- dette gå bra. Se [Footer.stories.tsx](https://github.com/Kystverket/styrbord/blob/main/src/components/kystverket/Footer/Footer.stories.tsx) for hvordan den skal brukes i din applikasjon.
140
-
141
- ### 2025-09-08
142
-
143
- Box har fått noen endringer på fargene og interfacet. Dette er gjort for å gjøre default-fargene
144
- mer attraktive og bruke, og samtidig endre fargenavn til å matche variabelnavn fra Designsystemet.
145
-
146
- - Fargen `action` er fjernet og endret til `primary`.
147
- - Attributten `subtle` er fjernet. Default-farge er nå mye likere `subtle`.
148
- - Fargevarianter kan velges ved å sette `color="farge/variant"`. For å matche den gamle `action`-fargen
149
- kan man ha `color="primary/active"`. Se Box-storyen for alle variantene.
150
-
151
- ### 2025-08-15
152
-
153
- Arbeid for å gjøre Styrbord mindre forskjellig fra Designsystemet. Dette gjør at det forhåpentligvis blir lettere å lære, og lettere å ta i bruk dokumentasjonen til Designsystemet.
154
-
155
- - `<InputLabel>` er fjernet. Man kan bruke `<Label>` med `<LabelContent>` (ny) for å oppnå samme visning.
156
- - `<ErrorLabel>` er fjernet. Man kan bruke `<ValidationMessage>` (fra Designsystemet) for å oppnå samme visning.
157
- - `<Label>` (fra typografi) er fjernet fra vanlig eksport. Svært lite brukt, og blokkerer `<Label>`-komponenten fra Designsystemet. Har man fortsatt behov for den er den tilgjengelig som `<Typography.Label>`.
158
- - Overskrivingen av `<Card>` er fjernet. For å oppnå samme stil kan man plassere `<CardTitle>` (ny) i et Card.
159
- - Overskrivingen av `<Details>` er fjernet. Dette gjør at man må gi innhold til `<Details>` som komponenter og ikke attributter slik vi gjorde det før.
160
- - Tillater ikke lenger å sende en boolsk verdi til error attributter i input-komponenter.
55
+ ## Design Tokens
161
56
 
162
- Komponentene `<Button>`, `<Tabs>`, `<Select>`, `<NumberInput>`, `<TextInput>` og `<TextArea>` overskriver fortsatt noen Designsystem-komponenter med mer eller mindre inkompatible interface.
57
+ Styrbords design tokens hentes fra [@Kystverket/styrbord-tokens](https://github.com/Kystverket/styrbord-tokens).
@@ -5,8 +5,9 @@ export type HeaderLinkComponentProps = {
5
5
  children: ReactNode;
6
6
  onClick?: (e?: React.UIEvent | undefined) => void;
7
7
  };
8
+ export type HeaderLinkComponent = (props: HeaderLinkComponentProps) => React.ReactElement;
8
9
  export interface HeaderContextProps {
9
- LinkComponent: React.FC<HeaderLinkComponentProps>;
10
+ LinkComponent: HeaderLinkComponent;
10
11
  }
11
12
  export declare const HeaderContext: React.Context<HeaderContextProps>;
12
13
  export interface ApplicationHeaderContextProps {
@@ -1,7 +1,7 @@
1
1
  import type { StoryFn } from '@storybook/react-vite';
2
2
  declare const meta: {
3
3
  title: string;
4
- component: ({ material, filled, className, size, title }: import("~/components/kystverket/Icon/icon").MaterialIconProps) => React.JSX.Element;
4
+ component: ({ material, indicator, className, size, title, background }: import("~/components/kystverket/Icon/icon").MaterialIconProps) => React.JSX.Element;
5
5
  decorators: ((Story: import("storybook/internal/csf").PartialStoryFn, context: import("storybook/internal/csf").StoryContext) => React.JSX.Element)[];
6
6
  tags: string[];
7
7
  argTypes: {};
@@ -9,3 +9,4 @@ declare const meta: {
9
9
  export default meta;
10
10
  export declare const IconShowcase: StoryFn;
11
11
  export declare const IconSizing: StoryFn;
12
+ export declare const IconIndicator: StoryFn;
@@ -1,11 +1,13 @@
1
+ import type { StyrbordPaletteColor, StyrbordSemanticColor } from '@kystverket/styrbord-tokens/colors';
1
2
  import { IconId } from './icon.types';
2
3
  type IconSize = '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';
3
4
  export interface MaterialIconProps {
4
5
  material: IconId;
5
- filled?: boolean;
6
+ indicator?: IconId;
6
7
  className?: string;
7
8
  size?: IconSize;
8
9
  title?: string;
10
+ background?: StyrbordPaletteColor | StyrbordSemanticColor;
9
11
  }
10
- declare const Icon: ({ material, filled, className, size, title }: MaterialIconProps) => React.JSX.Element;
12
+ declare const Icon: ({ material, indicator, className, size, title, background }: MaterialIconProps) => React.JSX.Element;
11
13
  export default Icon;
@@ -1,2 +1,2 @@
1
- export declare const iconIdList: readonly ["add", "add_box", "add_location", "add_location_alt", "adjust", "alternate_email", "anchor", "apps", "archive", "arrow_back", "arrow_forward", "arrow_right_alt", "article", "calendar_month", "change_history", "chat", "check", "check_circle", "chevron_left", "chevron_right", "circle", "close", "cloud_alert", "cloud_done", "code_blocks", "content_copy", "data_table", "delete", "description", "directions_boat", "distance", "domain", "download", "edit", "edit_document", "edit_location", "edit_location_alt", "edit_square", "error", "event", "explore", "explore_nearby", "export_notes", "favorite", "file_map", "file_save", "folder_open", "format_align_center", "format_align_left", "format_align_right", "forward", "globe_uk", "groups", "image", "inbox", "info", "info_i", "keep", "keep_off", "keyboard_arrow_down", "keyboard_arrow_up", "language", "layers", "lightbulb", "link", "location_chip", "lock", "login", "logout", "mail", "map", "map_pin_heart", "match_case", "menu", "mode_cool", "more_vert", "move", "numbers", "open_in_new", "pan_zoom", "pending_actions", "person", "person_add", "person_pin", "person_pin_circle", "photo_camera", "picture_as_pdf", "pin_drop", "radio_button_checked", "radio_button_unchecked", "sailing", "save", "send", "settings", "settings_input_antenna", "severe_cold", "source_environment", "stylus", "text_snippet", "timeline", "upload", "video_library", "videocam", "view_list", "warning", "zoom_in_map", "zoom_out_map", "format_italic", "format_bold", "format_list_bulleted", "format_list_numbered", "format_align_justify", "undo", "redo", "visibility", "left_panel_close", "left_panel_open", "right_panel_close", "right_panel_open"];
1
+ export declare const iconIdList: readonly ["add_box", "add_location_alt", "add_location", "add", "adjust", "alternate_email", "anchor", "apps", "archive", "arrow_back", "arrow_downward", "arrow_forward", "arrow_right_alt", "arrow_upward", "article", "assignment", "attach_file", "cached", "calendar_month", "change_history", "chat_add_on", "chat_bubble", "chat", "check_circle", "check", "chevron_left", "chevron_right", "circle", "close", "cloud_alert", "cloud_done", "code_blocks", "comment", "compare_arrows", "compare", "content_copy", "conversation", "data_table", "delete", "description", "difference", "directions_boat", "directory_sync", "distance", "domain", "download", "drafts", "edit_document", "edit_location_alt", "edit_location", "edit_square", "edit", "error", "event", "explore_nearby", "explore", "export_notes", "favorite", "file_map", "file_save", "folder_open", "format_align_center", "format_align_justify", "format_align_left", "format_align_right", "format_bold", "format_italic", "format_list_bulleted", "format_list_numbered", "forum", "forward_to_inbox", "forward", "globe_uk", "groups", "image", "inbox", "info_i", "info", "keep_off", "keep", "keyboard_arrow_down", "keyboard_arrow_up", "language", "layers", "left_panel_close", "left_panel_open", "lightbulb", "link", "location_chip", "lock", "login", "logout", "mail_shield", "mail", "manage_search", "map_pin_heart", "map", "mark_as_unread", "mark_chat_read", "mark_chat_unread", "mark_email_read", "mark_email_unread", "match_case", "menu", "mode_cool", "more_vert", "move_to_inbox", "move", "note_stack_add", "note_stack", "notification_add", "numbers", "open_in_new", "pan_zoom", "pending_actions", "person_add", "person_pin_circle", "person_pin", "person", "photo_camera", "picture_as_pdf", "pin_drop", "question_exchange", "radio_button_checked", "radio_button_unchecked", "redo", "reply_all", "reply", "right_panel_close", "right_panel_open", "sailing", "save", "send_and_archive", "send", "settings_input_antenna", "settings", "severe_cold", "sort", "source_environment", "stacked_email", "stylus", "sync", "text_compare", "text_snippet", "timeline", "undo", "upload", "video_library", "videocam", "view_list", "visibility", "warning", "zoom_in_map", "zoom_out_map"];
2
2
  export type IconId = (typeof iconIdList)[number];
@@ -0,0 +1,2 @@
1
+ import type { ItemCardProps } from './ItemCard.types';
2
+ export declare function ItemCard({ item, selected, onClick }: Readonly<ItemCardProps>): React.JSX.Element;
@@ -0,0 +1,6 @@
1
+ import type { SaksbehandlingItem } from '../SaksbehandlingShell.types';
2
+ export interface ItemCardProps {
3
+ item: SaksbehandlingItem;
4
+ selected?: boolean;
5
+ onClick?: () => void;
6
+ }
@@ -0,0 +1,2 @@
1
+ import type { ItemListProps } from './ItemList.types';
2
+ export declare function ItemList({ items, selectedItemId, onSelectItemId }: Readonly<ItemListProps>): React.JSX.Element;
@@ -0,0 +1,6 @@
1
+ import type { SaksbehandlingItem } from '../SaksbehandlingShell.types';
2
+ export interface ItemListProps {
3
+ items: SaksbehandlingItem[];
4
+ selectedItemId?: string;
5
+ onSelectItemId: (id: string) => void;
6
+ }
@@ -0,0 +1,2 @@
1
+ import type { SaksbehandlingShellProps } from './SaksbehandlingShell.types';
2
+ export declare function SaksbehandlingShell({ headerContent, caseActions, itemActions, items, selectedItemId, onSelectItemId, comparisonContent, defaultItemListOpen, defaultComparisonOpen, children, className, }: Readonly<SaksbehandlingShellProps>): React.JSX.Element;
@@ -0,0 +1,13 @@
1
+ import type { StoryFn } from '@storybook/react-vite';
2
+ import { SaksbehandlingShell } from './SaksbehandlingShell';
3
+ declare const meta: {
4
+ title: string;
5
+ component: typeof SaksbehandlingShell;
6
+ decorators: ((Story: import("storybook/internal/csf").PartialStoryFn, context: import("storybook/internal/csf").StoryContext) => React.JSX.Element)[];
7
+ tags: string[];
8
+ parameters: {
9
+ layout: string;
10
+ };
11
+ };
12
+ export default meta;
13
+ export declare const Default: StoryFn<typeof SaksbehandlingShell>;
@@ -0,0 +1,31 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { MaterialIconProps } from '../Icon/icon';
3
+ export interface SaksbehandlingItem {
4
+ id: string;
5
+ title: string;
6
+ description?: string;
7
+ children?: ReactNode;
8
+ icon: MaterialIconProps['material'];
9
+ iconIndicator?: MaterialIconProps['indicator'];
10
+ iconColor?: MaterialIconProps['background'];
11
+ }
12
+ export interface SaksbehandlingShellProps {
13
+ /** Content for the header row. */
14
+ headerContent: ReactNode;
15
+ /** Actions related to the case as a whole, shown on the left of the toolbar. */
16
+ caseActions?: ReactNode;
17
+ /** Actions related to the currently selected item, shown on the right of the toolbar. */
18
+ itemActions?: ReactNode;
19
+ items: SaksbehandlingItem[];
20
+ selectedItemId?: string;
21
+ onSelectItemId: (id: string) => void;
22
+ /** Optional comparison section content. When omitted, the comparison panel and its toggle are not rendered. */
23
+ comparisonContent?: ReactNode;
24
+ /** Default open state of the item list panel. Default: `true`. */
25
+ defaultItemListOpen?: boolean;
26
+ /** Default open state of the comparison panel. Default: `false`. */
27
+ defaultComparisonOpen?: boolean;
28
+ /** Main section content for the currently selected item. */
29
+ children?: ReactNode;
30
+ className?: string;
31
+ }
@@ -1,5 +1,5 @@
1
1
  import { CSSProperties, ReactNode } from 'react';
2
- export type SideSheetSize = 'sm' | 'md' | 'lg' | '33%' | '50%' | '66%';
2
+ export type SideSheetSize = 'sm' | 'md' | 'lg' | '33%' | '40%' | '50%' | '66%';
3
3
  export type SideSheetPlacement = 'left' | 'right';
4
4
  /**
5
5
  * - `overlay`: sheet slides over content (default). Can be pinned by the user via `pinnable`.
@@ -55,6 +55,8 @@ export { default as CompactDetails } from './components/kystverket/CompactDetail
55
55
  export type { CompactDetailsProps } from './components/kystverket/CompactDetails/CompactDetails.types';
56
56
  export { default as ClickableCard } from './components/kystverket/ClickableCard/ClickableCard';
57
57
  export type { ClickableCardProps, ClickableCardColor, ClickableCardVariant, } from './components/kystverket/ClickableCard/ClickableCard.types';
58
+ export { SaksbehandlingShell } from './components/kystverket/SaksbehandlingShell/SaksbehandlingShell';
59
+ export type { SaksbehandlingShellProps, SaksbehandlingItem, } from './components/kystverket/SaksbehandlingShell/SaksbehandlingShell.types';
58
60
  export { Button } from './components/designsystemet/Button/Button';
59
61
  export type { ButtonProps } from './components/designsystemet/Button/Button';
60
62
  export { IconButton } from './components/designsystemet/IconButton/IconButton';