@oslokommune/punkt-react 13.21.0 → 14.0.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/CHANGELOG.md CHANGED
@@ -5,6 +5,50 @@ og skriver commits ca etter [Conventional Commits](https://conventionalcommits.o
5
5
 
6
6
  ---
7
7
 
8
+ ## [14.0.0](https://github.com/oslokommune/punkt/compare/13.22.0...14.0.0) (2026-02-02)
9
+
10
+ ### ⚠ BREAKING CHANGES
11
+ * Header (Service) (#3192) Nå også som custom element!. BREAKING CHANGE: Fjernet 'logIn' event (kun 'logOut' støttes nå)
12
+ BREAKING CHANGE: Erstattet 'fixed' prop med 'position' (verdier: 'fixed' | 'relative', default: 'fixed')
13
+ BREAKING CHANGE: Erstattet 'scrollToHide' prop med 'scrollBehavior' (verdier: 'hide' | 'none', default: 'hide')
14
+ BREAKING CHANGE: Erstattet 'showLogOutButton' med 'logOutButtonPlacement' (verdier: 'userMenu' | 'header' | 'both' | 'none', default: 'none')
15
+ BREAKING CHANGE: Fjernet 'showMenuButton' prop
16
+ BREAKING CHANGE: Fjernet 'user.shortname' fra user-objektet
17
+ BREAKING CHANGE: Fjernet 'representing.shortname' fra representing-objektet
18
+ BREAKING CHANGE: Endret 'userMenu.items.target' type fra 'string' til 'string | function'
19
+ BREAKING CHANGE: Utdatert 'userMenuFooter' og 'userOptions' props (bruk 'userMenu' i stedet)
20
+ BREAKING CHANGE: Fjernet default verdi for 'logoLink' (var `https://www.oslo.kommune.no/`)
21
+
22
+ NYE FEATURES:
23
+ - Lagt til søkefunksjonalitet med props: 'showSearch', 'searchPlaceholder', 'searchValue'
24
+ - Nye events: 'onSearch' og 'onSearchChange' for søkeinteraksjon
25
+ - Nye events: 'logoClick' og 'serviceClick' for klikkhåndtering
26
+ - Nye React-props: 'logoClick' og 'serviceClick' callbacks
27
+ - Lagt til 'serviceLink' prop for tjenestenavnlenke
28
+ - Lagt til 'hideLogo' prop for å skjule Oslo-logoen
29
+ - Lagt til 'compact' prop for kompakt header-høyde
30
+ - Lagt til 'mobileBreakpoint' prop (default: 768px) for mobil-layout
31
+ - Lagt til 'tabletBreakpoint' prop (default: 1280px) for tablet-layout
32
+ - Lagt til 'openedMenu' prop for å kontrollere hvilken meny som er åpen ved oppstart
33
+
34
+ FUNKSJONELLE ENDRINGER:
35
+ - Alle events har nå 'attribute' felt for custom element-støtte
36
+ - Forbedret type-dokumentasjon for 'user.lastLoggedIn' (string | Date)
37
+ - Forbedret type-dokumentasjon for 'representing.orgNumber' (string | number)
38
+
39
+
40
+ ### Features
41
+ Ingen
42
+
43
+ ### Bug Fixes
44
+ Ingen
45
+
46
+ ### Chores
47
+ Ingen
48
+
49
+ ---
50
+
51
+
8
52
  ## [13.21.0](https://github.com/oslokommune/punkt/compare/13.20.0...13.21.0) (2026-01-30)
9
53
 
10
54
  ### ⚠ BREAKING CHANGES
package/dist/index.d.ts CHANGED
@@ -286,24 +286,65 @@ export declare interface IPktFooterSimple extends HTMLAttributes<HTMLDivElement>
286
286
  onToggleConsent?: (e: CustomEvent) => void;
287
287
  }
288
288
 
289
- export declare interface IPktHeader extends HTMLAttributes<HTMLDivElement> {
290
- logoLink?: string | (() => void);
289
+ export declare interface IPktHeader {
290
+ children?: React.ReactNode;
291
+ /** Set dark mode on the header */
292
+ 'data-mode'?: 'dark';
293
+ /** Hide the Oslo logo. Default: false (logo is shown) */
294
+ hideLogo?: boolean;
295
+ /** Link URL for the logo */
296
+ logoLink?: string;
297
+ /** Callback when logo is clicked */
298
+ logoClick?: (event: React.MouseEvent) => void;
299
+ /** Name of the service displayed in the header */
291
300
  serviceName?: string;
292
- fixed?: boolean;
293
- scrollToHide?: boolean;
301
+ /** Link URL for the service name */
302
+ serviceLink?: string;
303
+ /** Callback when service name is clicked */
304
+ serviceClick?: (event: React.MouseEvent) => void;
305
+ /** Use compact header height */
306
+ compact?: boolean;
307
+ /** User object with name, shortname, and lastLoggedIn */
294
308
  user?: User;
309
+ /** User menu items displayed in the dropdown */
295
310
  userMenu?: UserMenuItem[];
311
+ /** Representing object with name, shortname, and orgNumber */
296
312
  representing?: Representing;
297
- userOptions?: UserMenuItem[];
298
- userMenuFooter?: UserMenuFooterItem[];
313
+ /** Whether the user can change representation. Shows "Endre organisasjon" button */
299
314
  canChangeRepresentation?: boolean;
300
- showMenuButton?: boolean;
301
- showLogOutButton?: boolean;
302
- openMenu?: () => void;
303
- logOut?: () => void;
315
+ /** Callback when user clicks "Endre organisasjon" */
304
316
  changeRepresentation?: () => void;
305
- children?: default_2.ReactNode | default_2.ReactNode[];
306
- }
317
+ /** @deprecated Use userMenu instead. Will show console.warn if used. */
318
+ userMenuFooter?: UserMenuFooterItem[];
319
+ /** @deprecated userOptions is no longer available. Use userMenu instead. */
320
+ userOptions?: UserMenuItem[];
321
+ /** Where to show the logout button: 'userMenu', 'header', 'both', or 'none' */
322
+ logOutButtonPlacement?: 'userMenu' | 'header' | 'both' | 'none';
323
+ /** Callback when user clicks logout */
324
+ logOut?: () => void;
325
+ /** Show search input in the header */
326
+ showSearch?: boolean;
327
+ /** Callback when user submits search (presses Enter) */
328
+ onSearch?: (query: string) => void;
329
+ /** Callback when search input value changes */
330
+ onSearchChange?: (query: string) => void;
331
+ /** Controlled value for the search input */
332
+ searchValue?: string;
333
+ /** Placeholder text for the search input. Default: "Søk" */
334
+ searchPlaceholder?: string;
335
+ /** Custom breakpoint for responsive behavior (grid layout) in pixels. Default: 1024 */
336
+ mobileBreakpoint?: number;
337
+ /** Custom breakpoint for tablet responsive behavior (interaction pattern) in pixels. Default: 1280 */
338
+ tabletBreakpoint?: number;
339
+ /** Which menu is initially open */
340
+ openedMenu?: TPktHeaderServiceMenu;
341
+ /** Header position. 'fixed' fixes to top of viewport, 'relative' follows document flow. Default: 'fixed' */
342
+ position?: 'fixed' | 'relative';
343
+ /** Scroll behavior. 'hide' hides header on scroll down, 'none' keeps it visible. Default: 'hide' */
344
+ scrollBehavior?: 'hide' | 'none';
345
+ }
346
+
347
+ export declare type IPktHeaderService = IPktHeader;
307
348
 
308
349
  declare interface IPktHeading_2 extends IPktHeading {
309
350
  children?: default_2.ReactNode | default_2.ReactNode[];
@@ -705,7 +746,21 @@ export declare const PktFooter: FC<IPktFooter>;
705
746
 
706
747
  export declare const PktFooterSimple: FC<IPktFooterSimple>;
707
748
 
708
- export declare const PktHeader: default_2.ForwardRefExoticComponent<IPktHeader & default_2.RefAttributes<HTMLDivElement>>;
749
+ /**
750
+ * PktHeader - Main header component for Oslo kommune services
751
+ *
752
+ * This component provides a complete header solution with:
753
+ * - Logo and service name
754
+ * - User menu with login/logout functionality
755
+ * - Search functionality
756
+ * - Responsive mobile menu
757
+ * - Fixed positioning with scroll-to-hide
758
+ *
759
+ * TODO: Add `type` prop to switch between `service` and `global` header types
760
+ */
761
+ export declare const PktHeader: ForwardRefExoticComponent<IPktHeader & RefAttributes<HTMLDivElement>>;
762
+
763
+ export declare const PktHeaderService: ForwardRefExoticComponent<IPktHeader & RefAttributes<HTMLDivElement>>;
709
764
 
710
765
  export declare const PktHeading: FC<IPktHeading_2>;
711
766
 
@@ -776,8 +831,10 @@ export declare const PktTextarea: default_2.ForwardRefExoticComponent<IPktTextar
776
831
 
777
832
  export declare const PktTextinput: default_2.ForwardRefExoticComponent<IPktTextinput & default_2.RefAttributes<HTMLInputElement>>;
778
833
 
834
+ /** Representing object for header components */
779
835
  declare interface Representing {
780
- name?: string;
836
+ name: string;
837
+ /** @deprecated shortname is deprecated and will be removed in a future version */
781
838
  shortname?: string;
782
839
  orgNumber?: string | number;
783
840
  }
@@ -818,23 +875,29 @@ declare type TPktAccordionSkin = 'borderless' | 'outlined' | 'beige' | 'blue';
818
875
 
819
876
  declare type TPktAccordionSkin_2 = 'borderless' | 'outlined' | 'beige' | 'blue';
820
877
 
878
+ declare type TPktHeaderServiceMenu = 'none' | 'slot' | 'search' | 'user';
879
+
821
880
  declare type TSkin = 'blue' | 'green' | 'red' | 'beige' | 'yellow' | 'grey' | 'gray' | 'blue-light';
822
881
 
823
882
  declare type TSkin_2 = IPktTag['skin'];
824
883
 
825
884
  declare type TStepStatus = 'completed' | 'incomplete' | 'current';
826
885
 
886
+ /** User object for header components */
827
887
  declare interface User {
828
- name?: string;
888
+ name: string;
889
+ /** @deprecated shortname is deprecated and will be removed in a future version */
829
890
  shortname?: string;
830
891
  lastLoggedIn?: string | Date;
831
892
  }
832
893
 
894
+ /** @deprecated Use UserMenuItem instead */
833
895
  declare interface UserMenuFooterItem {
834
896
  title: string;
835
897
  target: string | (() => void);
836
898
  }
837
899
 
900
+ /** User menu item for header components */
838
901
  declare interface UserMenuItem {
839
902
  iconName?: string;
840
903
  title: string;