@navikt/ds-react 8.1.0 → 8.2.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 (135) hide show
  1. package/cjs/data/action-bar/root/DataActionBarRoot.d.ts +27 -0
  2. package/cjs/data/action-bar/root/DataActionBarRoot.js +49 -0
  3. package/cjs/data/action-bar/root/DataActionBarRoot.js.map +1 -0
  4. package/cjs/data/filter/index.d.ts +2 -0
  5. package/cjs/data/filter/index.js +8 -0
  6. package/cjs/data/filter/index.js.map +1 -0
  7. package/cjs/data/filter/item/DataFilterItem.d.ts +5 -0
  8. package/cjs/data/filter/item/DataFilterItem.js +24 -0
  9. package/cjs/data/filter/item/DataFilterItem.js.map +1 -0
  10. package/cjs/data/filter/root/DataFilterRoot.d.ts +23 -0
  11. package/cjs/data/filter/root/DataFilterRoot.js +28 -0
  12. package/cjs/data/filter/root/DataFilterRoot.js.map +1 -0
  13. package/cjs/data/stories/dummy-data.d.ts +17 -0
  14. package/cjs/data/stories/dummy-data.js +1526 -0
  15. package/cjs/data/stories/dummy-data.js.map +1 -0
  16. package/cjs/data/table/caption/DataTableCaption.d.ts +5 -0
  17. package/cjs/data/table/caption/DataTableCaption.js +55 -0
  18. package/cjs/data/table/caption/DataTableCaption.js.map +1 -0
  19. package/cjs/data/table/index.d.ts +2 -0
  20. package/cjs/data/table/index.js +16 -0
  21. package/cjs/data/table/index.js.map +1 -0
  22. package/cjs/data/table/root/DataTableRoot.d.ts +94 -0
  23. package/cjs/data/table/root/DataTableRoot.js +74 -0
  24. package/cjs/data/table/root/DataTableRoot.js.map +1 -0
  25. package/cjs/data/table/tbody/DataTableTbody.d.ts +5 -0
  26. package/cjs/data/table/tbody/DataTableTbody.js +55 -0
  27. package/cjs/data/table/tbody/DataTableTbody.js.map +1 -0
  28. package/cjs/data/table/td/DataTableTd.d.ts +5 -0
  29. package/cjs/data/table/td/DataTableTd.js +55 -0
  30. package/cjs/data/table/td/DataTableTd.js.map +1 -0
  31. package/cjs/data/table/th/DataTableTh.d.ts +5 -0
  32. package/cjs/data/table/th/DataTableTh.js +55 -0
  33. package/cjs/data/table/th/DataTableTh.js.map +1 -0
  34. package/cjs/data/table/thead/DataTableThead.d.ts +5 -0
  35. package/cjs/data/table/thead/DataTableThead.js +55 -0
  36. package/cjs/data/table/thead/DataTableThead.js.map +1 -0
  37. package/cjs/data/table/tr/DataTableTr.d.ts +5 -0
  38. package/cjs/data/table/tr/DataTableTr.js +55 -0
  39. package/cjs/data/table/tr/DataTableTr.js.map +1 -0
  40. package/cjs/data/toolbar/index.d.ts +2 -0
  41. package/cjs/data/toolbar/index.js +9 -0
  42. package/cjs/data/toolbar/index.js.map +1 -0
  43. package/cjs/data/toolbar/root/DataToolbarRoot.d.ts +32 -0
  44. package/cjs/data/toolbar/root/DataToolbarRoot.js +32 -0
  45. package/cjs/data/toolbar/root/DataToolbarRoot.js.map +1 -0
  46. package/cjs/data/toolbar/search-field/DataToolbarSearchField.d.ts +7 -0
  47. package/cjs/data/toolbar/search-field/DataToolbarSearchField.js +26 -0
  48. package/cjs/data/toolbar/search-field/DataToolbarSearchField.js.map +1 -0
  49. package/cjs/data/toolbar/toggle-button/DataToolbarToggleButton.d.ts +36 -0
  50. package/cjs/data/toolbar/toggle-button/DataToolbarToggleButton.js +32 -0
  51. package/cjs/data/toolbar/toggle-button/DataToolbarToggleButton.js.map +1 -0
  52. package/cjs/internal-header/InternalHeader.d.ts +5 -6
  53. package/cjs/internal-header/InternalHeader.js +5 -6
  54. package/cjs/internal-header/InternalHeader.js.map +1 -1
  55. package/cjs/overlays/action-menu/ActionMenu.d.ts +11 -1
  56. package/cjs/overlays/action-menu/ActionMenu.js +8 -9
  57. package/cjs/overlays/action-menu/ActionMenu.js.map +1 -1
  58. package/esm/data/action-bar/root/DataActionBarRoot.d.ts +27 -0
  59. package/esm/data/action-bar/root/DataActionBarRoot.js +43 -0
  60. package/esm/data/action-bar/root/DataActionBarRoot.js.map +1 -0
  61. package/esm/data/filter/index.d.ts +2 -0
  62. package/esm/data/filter/index.js +3 -0
  63. package/esm/data/filter/index.js.map +1 -0
  64. package/esm/data/filter/item/DataFilterItem.d.ts +5 -0
  65. package/esm/data/filter/item/DataFilterItem.js +18 -0
  66. package/esm/data/filter/item/DataFilterItem.js.map +1 -0
  67. package/esm/data/filter/root/DataFilterRoot.d.ts +23 -0
  68. package/esm/data/filter/root/DataFilterRoot.js +21 -0
  69. package/esm/data/filter/root/DataFilterRoot.js.map +1 -0
  70. package/esm/data/stories/dummy-data.d.ts +17 -0
  71. package/esm/data/stories/dummy-data.js +1520 -0
  72. package/esm/data/stories/dummy-data.js.map +1 -0
  73. package/esm/data/table/caption/DataTableCaption.d.ts +5 -0
  74. package/esm/data/table/caption/DataTableCaption.js +19 -0
  75. package/esm/data/table/caption/DataTableCaption.js.map +1 -0
  76. package/esm/data/table/index.d.ts +2 -0
  77. package/esm/data/table/index.js +3 -0
  78. package/esm/data/table/index.js.map +1 -0
  79. package/esm/data/table/root/DataTableRoot.d.ts +94 -0
  80. package/esm/data/table/root/DataTableRoot.js +32 -0
  81. package/esm/data/table/root/DataTableRoot.js.map +1 -0
  82. package/esm/data/table/tbody/DataTableTbody.d.ts +5 -0
  83. package/esm/data/table/tbody/DataTableTbody.js +19 -0
  84. package/esm/data/table/tbody/DataTableTbody.js.map +1 -0
  85. package/esm/data/table/td/DataTableTd.d.ts +5 -0
  86. package/esm/data/table/td/DataTableTd.js +19 -0
  87. package/esm/data/table/td/DataTableTd.js.map +1 -0
  88. package/esm/data/table/th/DataTableTh.d.ts +5 -0
  89. package/esm/data/table/th/DataTableTh.js +19 -0
  90. package/esm/data/table/th/DataTableTh.js.map +1 -0
  91. package/esm/data/table/thead/DataTableThead.d.ts +5 -0
  92. package/esm/data/table/thead/DataTableThead.js +19 -0
  93. package/esm/data/table/thead/DataTableThead.js.map +1 -0
  94. package/esm/data/table/tr/DataTableTr.d.ts +5 -0
  95. package/esm/data/table/tr/DataTableTr.js +19 -0
  96. package/esm/data/table/tr/DataTableTr.js.map +1 -0
  97. package/esm/data/toolbar/index.d.ts +2 -0
  98. package/esm/data/toolbar/index.js +3 -0
  99. package/esm/data/toolbar/index.js.map +1 -0
  100. package/esm/data/toolbar/root/DataToolbarRoot.d.ts +32 -0
  101. package/esm/data/toolbar/root/DataToolbarRoot.js +24 -0
  102. package/esm/data/toolbar/root/DataToolbarRoot.js.map +1 -0
  103. package/esm/data/toolbar/search-field/DataToolbarSearchField.d.ts +7 -0
  104. package/esm/data/toolbar/search-field/DataToolbarSearchField.js +20 -0
  105. package/esm/data/toolbar/search-field/DataToolbarSearchField.js.map +1 -0
  106. package/esm/data/toolbar/toggle-button/DataToolbarToggleButton.d.ts +36 -0
  107. package/esm/data/toolbar/toggle-button/DataToolbarToggleButton.js +26 -0
  108. package/esm/data/toolbar/toggle-button/DataToolbarToggleButton.js.map +1 -0
  109. package/esm/internal-header/InternalHeader.d.ts +5 -6
  110. package/esm/internal-header/InternalHeader.js +5 -6
  111. package/esm/internal-header/InternalHeader.js.map +1 -1
  112. package/esm/overlays/action-menu/ActionMenu.d.ts +11 -1
  113. package/esm/overlays/action-menu/ActionMenu.js +8 -9
  114. package/esm/overlays/action-menu/ActionMenu.js.map +1 -1
  115. package/package.json +7 -7
  116. package/src/data/action-bar/root/DataActionBarRoot.tsx +59 -0
  117. package/src/data/filter/index.ts +6 -0
  118. package/src/data/filter/item/DataFilterItem.tsx +12 -0
  119. package/src/data/filter/root/DataFilterRoot.tsx +42 -0
  120. package/src/data/stories/dummy-data.tsx +1596 -0
  121. package/src/data/table/Readme.md +11 -0
  122. package/src/data/table/caption/DataTableCaption.tsx +20 -0
  123. package/src/data/table/index.tsx +19 -0
  124. package/src/data/table/root/DataTableRoot.tsx +143 -0
  125. package/src/data/table/tbody/DataTableTbody.tsx +19 -0
  126. package/src/data/table/td/DataTableTd.tsx +19 -0
  127. package/src/data/table/th/DataTableTh.tsx +19 -0
  128. package/src/data/table/thead/DataTableThead.tsx +19 -0
  129. package/src/data/table/tr/DataTableTr.tsx +19 -0
  130. package/src/data/toolbar/index.ts +11 -0
  131. package/src/data/toolbar/root/DataToolbarRoot.tsx +65 -0
  132. package/src/data/toolbar/search-field/DataToolbarSearchField.tsx +29 -0
  133. package/src/data/toolbar/toggle-button/DataToolbarToggleButton.tsx +60 -0
  134. package/src/internal-header/InternalHeader.tsx +5 -6
  135. package/src/overlays/action-menu/ActionMenu.tsx +58 -34
@@ -0,0 +1,11 @@
1
+ # Naming discussions
2
+
3
+ ## Under same scope
4
+
5
+ DataTable
6
+ DataToolbar
7
+ DataFilter
8
+
9
+ DataSearchField
10
+ DataCombobox
11
+ DataOperator
@@ -0,0 +1,20 @@
1
+ import React, { forwardRef } from "react";
2
+ import { cl } from "../../../utils/helpers";
3
+
4
+ type DataTableCaptionProps = React.HTMLAttributes<HTMLTableCaptionElement>;
5
+
6
+ const DataTableCaption = forwardRef<
7
+ HTMLTableCaptionElement,
8
+ DataTableCaptionProps
9
+ >(({ className, ...rest }, forwardedRef) => {
10
+ return (
11
+ <caption
12
+ {...rest}
13
+ ref={forwardedRef}
14
+ className={cl("aksel-data-table__caption", className)}
15
+ />
16
+ );
17
+ });
18
+
19
+ export { DataTableCaption };
20
+ export type { DataTableCaptionProps };
@@ -0,0 +1,19 @@
1
+ "use client";
2
+ export {
3
+ default as DataTable,
4
+ DataTableCaption,
5
+ DataTableThead,
6
+ DataTableTbody,
7
+ DataTableTr,
8
+ DataTableTh,
9
+ DataTableTd,
10
+ } from "./root/DataTableRoot";
11
+ export type {
12
+ DataTableProps,
13
+ DataTableCaptionProps,
14
+ DataTableTheadProps,
15
+ DataTableTbodyProps,
16
+ DataTableTrProps,
17
+ DataTableThProps,
18
+ DataTableTdProps,
19
+ } from "./root/DataTableRoot";
@@ -0,0 +1,143 @@
1
+ import React, { forwardRef } from "react";
2
+ import { cl } from "../../../utils/helpers";
3
+ import {
4
+ DataTableCaption,
5
+ type DataTableCaptionProps,
6
+ } from "../caption/DataTableCaption";
7
+ import {
8
+ DataTableTbody,
9
+ type DataTableTbodyProps,
10
+ } from "../tbody/DataTableTbody";
11
+ import { DataTableTd, type DataTableTdProps } from "../td/DataTableTd";
12
+ import { DataTableTh, type DataTableThProps } from "../th/DataTableTh";
13
+ import {
14
+ DataTableThead,
15
+ type DataTableTheadProps,
16
+ } from "../thead/DataTableThead";
17
+ import { DataTableTr, type DataTableTrProps } from "../tr/DataTableTr";
18
+
19
+ interface DataTableProps extends React.HTMLAttributes<HTMLTableElement> {
20
+ children: React.ReactNode;
21
+ }
22
+
23
+ interface DataTableRootComponent extends React.ForwardRefExoticComponent<
24
+ DataTableProps & React.RefAttributes<HTMLDialogElement>
25
+ > {
26
+ /**
27
+ * @see 🏷️ {@link DataTableCaptionProps}
28
+ * @example
29
+ * ```jsx
30
+ * <DataTable>
31
+ * <DataTable.Caption>
32
+ * Lorem ipsum
33
+ * </DataTable.Caption
34
+ * </DataTable>
35
+ * ```
36
+ */
37
+ Caption: typeof DataTableCaption;
38
+ /**
39
+ * @see 🏷️ {@link DataTableTheadProps}
40
+ * @example
41
+ * ```jsx
42
+ * <DataTable>
43
+ * <DataTable.Thead>
44
+ * ... TODO
45
+ * </DataTable.Thead>
46
+ * </DataTable>
47
+ * ```
48
+ */
49
+ Thead: typeof DataTableThead;
50
+ /**
51
+ * @see 🏷️ {@link DataTableTbodyProps}
52
+ * @example
53
+ * ```jsx
54
+ * <DataTable>
55
+ * <DataTable.Tbody>
56
+ * ... TODO
57
+ * </DataTable.Tbody>
58
+ * </DataTable>
59
+ * ```
60
+ */
61
+ Tbody: typeof DataTableTbody;
62
+ /**
63
+ * @see 🏷️ {@link DataTableTrProps}
64
+ * @example
65
+ * ```jsx
66
+ * <DataTable>
67
+ * <DataTable.Tr>
68
+ * ... TODO
69
+ * </DataTable.Tr
70
+ * </DataTable>
71
+ * ```
72
+ */
73
+ Tr: typeof DataTableTr;
74
+ /**
75
+ * @see 🏷️ {@link DataTableThProps}
76
+ * @example
77
+ * ```jsx
78
+ * <DataTable>
79
+ * <DataTable.Thead>
80
+ * <DataTable.Th>Header 1</DataTable.Th>
81
+ * <DataTable.Th>Header 2</DataTable.Th>
82
+ * </DataTable.Thead>
83
+ * </DataTable>
84
+ * ```
85
+ */
86
+ Th: typeof DataTableTh;
87
+ /**
88
+ * @see 🏷️ {@link DataTableTdProps}
89
+ * @example
90
+ * ```jsx
91
+ * <DataTable>
92
+ * <DataTable.Tbody>
93
+ * <DataTable.Td>
94
+ * Lorem ipsum
95
+ * </DataTable.Td>
96
+ * <DataTable.Td>
97
+ * Dolor sit amet
98
+ * </DataTable.Td>
99
+ * </DataTable.Tbody>
100
+ * </DataTable>
101
+ * ```
102
+ */
103
+ Td: typeof DataTableTd;
104
+ }
105
+
106
+ const DataTable = forwardRef<HTMLTableElement, DataTableProps>(
107
+ ({ className, ...rest }, forwardedRef) => {
108
+ return (
109
+ <table
110
+ {...rest}
111
+ ref={forwardedRef}
112
+ className={cl("aksel-data-table", className)}
113
+ />
114
+ );
115
+ },
116
+ ) as DataTableRootComponent;
117
+
118
+ DataTable.Caption = DataTableCaption;
119
+ DataTable.Thead = DataTableThead;
120
+ DataTable.Tbody = DataTableTbody;
121
+ DataTable.Th = DataTableTh;
122
+ DataTable.Tr = DataTableTr;
123
+ DataTable.Td = DataTableTd;
124
+
125
+ export {
126
+ DataTable,
127
+ DataTableCaption,
128
+ DataTableTbody,
129
+ DataTableTd,
130
+ DataTableTh,
131
+ DataTableThead,
132
+ DataTableTr,
133
+ };
134
+ export default DataTable;
135
+ export type {
136
+ DataTableProps,
137
+ DataTableCaptionProps,
138
+ DataTableTbodyProps,
139
+ DataTableTdProps,
140
+ DataTableThProps,
141
+ DataTableTheadProps,
142
+ DataTableTrProps,
143
+ };
@@ -0,0 +1,19 @@
1
+ import React, { forwardRef } from "react";
2
+ import { cl } from "../../../utils/helpers";
3
+
4
+ type DataTableTbodyProps = React.HTMLAttributes<HTMLTableSectionElement>;
5
+
6
+ const DataTableTbody = forwardRef<HTMLTableSectionElement, DataTableTbodyProps>(
7
+ ({ className, ...rest }, forwardedRef) => {
8
+ return (
9
+ <tbody
10
+ {...rest}
11
+ ref={forwardedRef}
12
+ className={cl("aksel-data-table__tbody", className)}
13
+ />
14
+ );
15
+ },
16
+ );
17
+
18
+ export { DataTableTbody };
19
+ export type { DataTableTbodyProps };
@@ -0,0 +1,19 @@
1
+ import React, { forwardRef } from "react";
2
+ import { cl } from "../../../utils/helpers";
3
+
4
+ type DataTableTdProps = React.HTMLAttributes<HTMLTableCellElement>;
5
+
6
+ const DataTableTd = forwardRef<HTMLTableCellElement, DataTableTdProps>(
7
+ ({ className, ...rest }, forwardedRef) => {
8
+ return (
9
+ <td
10
+ {...rest}
11
+ ref={forwardedRef}
12
+ className={cl("aksel-data-table__td", className)}
13
+ />
14
+ );
15
+ },
16
+ );
17
+
18
+ export { DataTableTd };
19
+ export type { DataTableTdProps };
@@ -0,0 +1,19 @@
1
+ import React, { forwardRef } from "react";
2
+ import { cl } from "../../../utils/helpers";
3
+
4
+ type DataTableThProps = React.HTMLAttributes<HTMLTableCellElement>;
5
+
6
+ const DataTableTh = forwardRef<HTMLTableCellElement, DataTableThProps>(
7
+ ({ className, ...rest }, forwardedRef) => {
8
+ return (
9
+ <th
10
+ {...rest}
11
+ ref={forwardedRef}
12
+ className={cl("aksel-data-table__th", className)}
13
+ />
14
+ );
15
+ },
16
+ );
17
+
18
+ export { DataTableTh };
19
+ export type { DataTableThProps };
@@ -0,0 +1,19 @@
1
+ import React, { forwardRef } from "react";
2
+ import { cl } from "../../../utils/helpers";
3
+
4
+ type DataTableTheadProps = React.HTMLAttributes<HTMLTableSectionElement>;
5
+
6
+ const DataTableThead = forwardRef<HTMLTableSectionElement, DataTableTheadProps>(
7
+ ({ className, ...rest }, forwardedRef) => {
8
+ return (
9
+ <thead
10
+ {...rest}
11
+ ref={forwardedRef}
12
+ className={cl("aksel-data-table__thead", className)}
13
+ />
14
+ );
15
+ },
16
+ );
17
+
18
+ export { DataTableThead };
19
+ export type { DataTableTheadProps };
@@ -0,0 +1,19 @@
1
+ import React, { forwardRef } from "react";
2
+ import { cl } from "../../../utils/helpers";
3
+
4
+ type DataTableTrProps = React.HTMLAttributes<HTMLTableRowElement>;
5
+
6
+ const DataTableTr = forwardRef<HTMLTableRowElement, DataTableTrProps>(
7
+ ({ className, ...rest }, forwardedRef) => {
8
+ return (
9
+ <tr
10
+ {...rest}
11
+ ref={forwardedRef}
12
+ className={cl("aksel-data-table__tr", className)}
13
+ />
14
+ );
15
+ },
16
+ );
17
+
18
+ export { DataTableTr };
19
+ export type { DataTableTrProps };
@@ -0,0 +1,11 @@
1
+ "use client";
2
+ export {
3
+ DataToolbar,
4
+ DataToolbarSearchField,
5
+ DataToolbarToggleButton,
6
+ } from "./root/DataToolbarRoot";
7
+ export type {
8
+ DataToolbarProps,
9
+ DataToolbarSearchFieldProps,
10
+ DataToolbarToggleButtonProps,
11
+ } from "./root/DataToolbarRoot";
@@ -0,0 +1,65 @@
1
+ import React from "react";
2
+ import { cl } from "../../../utils/helpers";
3
+ import {
4
+ DataToolbarSearchField,
5
+ type DataToolbarSearchFieldProps,
6
+ } from "../search-field/DataToolbarSearchField";
7
+ import DataToolbarToggleButton, {
8
+ type DataToolbarToggleButtonProps,
9
+ } from "../toggle-button/DataToolbarToggleButton";
10
+
11
+ interface DataToolbarProps extends React.HTMLAttributes<HTMLDivElement> {
12
+ children: React.ReactNode;
13
+ }
14
+
15
+ interface DataToolbarRootComponent extends React.ForwardRefExoticComponent<
16
+ DataToolbarProps & React.RefAttributes<HTMLDivElement>
17
+ > {
18
+ /**
19
+ * @see 🏷️ {@link DataToolbarSearchFieldProps}
20
+ * @example
21
+ * ```tsx
22
+ * <DataToolbar>
23
+ * <DataToolbar.SearchField />
24
+ * </DataToolbar>
25
+ * ```
26
+ */
27
+ SearchField: typeof DataToolbarSearchField;
28
+
29
+ /**
30
+ * @see 🏷️ {@link DataToolbarToggleButtonProps}
31
+ * @example
32
+ * ```tsx
33
+ * <DataToolbar>
34
+ * <DataToolbar.ToggleButton />
35
+ * </DataToolbar>
36
+ * ```
37
+ */
38
+ ToggleButton: typeof DataToolbarToggleButton;
39
+ }
40
+
41
+ const DataToolbar = React.forwardRef<HTMLDivElement, DataToolbarProps>(
42
+ ({ children, className, ...rest }, forwardRef) => {
43
+ return (
44
+ <div
45
+ ref={forwardRef}
46
+ {...rest}
47
+ className={cl("aksel-data-toolbar", className)}
48
+ role="toolbar"
49
+ >
50
+ {children}
51
+ </div>
52
+ );
53
+ },
54
+ ) as DataToolbarRootComponent;
55
+
56
+ DataToolbar.SearchField = DataToolbarSearchField;
57
+ DataToolbar.ToggleButton = DataToolbarToggleButton;
58
+
59
+ export { DataToolbar, DataToolbarSearchField, DataToolbarToggleButton };
60
+ export default DataToolbar;
61
+ export type {
62
+ DataToolbarProps,
63
+ DataToolbarSearchFieldProps,
64
+ DataToolbarToggleButtonProps,
65
+ };
@@ -0,0 +1,29 @@
1
+ import React from "react";
2
+ import { Search, type SearchProps } from "../../../form/search";
3
+
4
+ type DataToolbarSearchFieldProps = Omit<
5
+ React.HTMLAttributes<HTMLInputElement>,
6
+ "data-color" | "size" | "type"
7
+ > &
8
+ Pick<SearchProps, "label" | "onChange">;
9
+
10
+ const DataToolbarSearchField = React.forwardRef<
11
+ HTMLInputElement,
12
+ DataToolbarSearchFieldProps
13
+ >(({ className, ...props }, ref) => {
14
+ return (
15
+ <Search
16
+ className={className}
17
+ ref={ref}
18
+ {...props}
19
+ variant="simple"
20
+ size="small"
21
+ htmlSize="12"
22
+ placeholder="Quick filter"
23
+ />
24
+ );
25
+ });
26
+
27
+ export { DataToolbarSearchField };
28
+ export default DataToolbarSearchField;
29
+ export type { DataToolbarSearchFieldProps };
@@ -0,0 +1,60 @@
1
+ import React from "react";
2
+ import { cl, composeEventHandlers } from "../../../utils/helpers";
3
+ import { useControllableState } from "../../../utils/hooks";
4
+
5
+ type DataToolbarToggleButtonProps =
6
+ React.ButtonHTMLAttributes<HTMLButtonElement> & {
7
+ /**
8
+ * Indicates whether the toggle button is pressed or not.
9
+ * @default false
10
+ */
11
+ isPressed?: boolean;
12
+ /**
13
+ * Default uncontrolled pressed state
14
+ * @default false
15
+ */
16
+ defaultPressed?: boolean;
17
+ /**
18
+ * Callback for new pressed state
19
+ */
20
+ onPressChange?: (isPressed: boolean) => void;
21
+ };
22
+
23
+ const DataToolbarToggleButton = React.forwardRef<
24
+ HTMLButtonElement,
25
+ DataToolbarToggleButtonProps
26
+ >(
27
+ (
28
+ {
29
+ className,
30
+ isPressed,
31
+ defaultPressed = false,
32
+ onPressChange,
33
+ onClick,
34
+ ...props
35
+ },
36
+ ref,
37
+ ) => {
38
+ const [pressed, setPressed] = useControllableState({
39
+ defaultValue: defaultPressed,
40
+ value: isPressed,
41
+ onChange: onPressChange,
42
+ });
43
+
44
+ return (
45
+ <button
46
+ className={cl("aksel-data-toolbar__toggle-button", className)}
47
+ ref={ref}
48
+ {...props}
49
+ aria-pressed={pressed}
50
+ onClick={composeEventHandlers(onClick, () =>
51
+ setPressed((oldState) => !oldState),
52
+ )}
53
+ />
54
+ );
55
+ },
56
+ );
57
+
58
+ export { DataToolbarToggleButton };
59
+ export default DataToolbarToggleButton;
60
+ export type { DataToolbarToggleButtonProps };
@@ -67,14 +67,13 @@ interface InternalHeaderComponent
67
67
  * ```jsx
68
68
  * <InternalHeader >
69
69
  * <InternalHeader.Title href="/#home">Tittel med lenke</InternalHeader.Title>
70
- * <Dropdown>
71
- * <InternalHeader.Button
72
- * as={Dropdown.Toggle}
73
- * >
70
+ * <ActionMenu>
71
+ * <ActionMenu.Trigger>
72
+ * <InternalHeader.Button>
74
73
  * <MenuGridIcon title="MenuGridIconer og oppslagsverk" />
75
74
  * </InternalHeader.Button>
76
- * <Dropdown.Menu />
77
- * </Dropdown>
75
+ * </ActionMenu.Trigger>
76
+ * </ActionMenu>
78
77
  * </InternalHeader>
79
78
  * ```
80
79
  */
@@ -544,9 +544,14 @@ interface ActionMenuItemProps extends Omit<MenuItemProps, "asChild"> {
544
544
  */
545
545
  variant?: "danger";
546
546
  /**
547
- * Adds an icon on the left side. The icon will always have aria-hidden.
547
+ * Adds an icon on the left side. For right side position use iconPosition. The icon will always have aria-hidden.
548
548
  */
549
549
  icon?: React.ReactNode;
550
+ /**
551
+ * Position of icon.
552
+ * @default "left"
553
+ */
554
+ iconPosition?: "left" | "right";
550
555
  }
551
556
 
552
557
  export const ActionMenuItem: OverridableComponent<
@@ -561,6 +566,7 @@ export const ActionMenuItem: OverridableComponent<
561
566
  icon,
562
567
  shortcut,
563
568
  variant,
569
+ iconPosition = "left",
564
570
  ...rest
565
571
  },
566
572
  ref,
@@ -570,15 +576,18 @@ export const ActionMenuItem: OverridableComponent<
570
576
  {...rest}
571
577
  className={cl("aksel-action-menu__item", className, {
572
578
  "aksel-action-menu__item--danger": variant === "danger",
573
- "aksel-action-menu__item--has-icon": icon,
574
579
  })}
580
+ data-marker={icon ? iconPosition : undefined}
575
581
  aria-keyshortcuts={shortcut ?? undefined}
576
582
  asChild
577
583
  >
578
584
  <Component ref={ref}>
579
585
  {children}
580
586
  {icon && (
581
- <Marker placement="left" className="aksel-action-menu__marker-icon">
587
+ <Marker
588
+ placement={iconPosition}
589
+ className="aksel-action-menu__marker-icon"
590
+ >
582
591
  {icon}
583
592
  </Marker>
584
593
  )}
@@ -632,10 +641,8 @@ export const ActionMenuCheckboxItem = forwardRef<
632
641
  event.preventDefault();
633
642
  })}
634
643
  asChild={false}
635
- className={cl(
636
- "aksel-action-menu__item aksel-action-menu__item--has-icon",
637
- className,
638
- )}
644
+ className={cl("aksel-action-menu__item", className)}
645
+ data-marker="left"
639
646
  aria-keyshortcuts={shortcut}
640
647
  >
641
648
  {children}
@@ -768,10 +775,8 @@ export const ActionMenuRadioItem = forwardRef<
768
775
  event.preventDefault();
769
776
  })}
770
777
  asChild={false}
771
- className={cl(
772
- "aksel-action-menu__item aksel-action-menu__item--has-icon",
773
- className,
774
- )}
778
+ className={cl("aksel-action-menu__item", className)}
779
+ data-marker="left"
775
780
  >
776
781
  {children}
777
782
  <Marker placement="left">
@@ -888,35 +893,54 @@ type MenuSubTriggerProps = React.ComponentPropsWithoutRef<
888
893
  interface ActionMenuSubTriggerProps
889
894
  extends Omit<MenuSubTriggerProps, "asChild"> {
890
895
  icon?: React.ReactNode;
896
+ /**
897
+ * Position of icon.
898
+ * @default "left"
899
+ */
900
+ iconPosition?: "left" | "right";
891
901
  }
892
902
 
893
903
  export const ActionMenuSubTrigger = forwardRef<
894
904
  ActionMenuSubTriggerElement,
895
905
  ActionMenuSubTriggerProps
896
- >(({ children, className, icon, ...rest }: ActionMenuSubTriggerProps, ref) => {
897
- return (
898
- <Menu.SubTrigger
899
- ref={ref}
900
- {...rest}
901
- asChild={false}
902
- className={cl(
903
- "aksel-action-menu__item aksel-action-menu__sub-trigger",
904
- className,
905
- { "aksel-action-menu__item--has-icon": icon },
906
- )}
907
- >
908
- {children}
909
- {icon && (
910
- <Marker placement="left" className="aksel-action-menu__marker-icon">
911
- {icon}
906
+ >(
907
+ (
908
+ {
909
+ children,
910
+ className,
911
+ icon,
912
+ iconPosition = "left",
913
+ ...rest
914
+ }: ActionMenuSubTriggerProps,
915
+ ref,
916
+ ) => {
917
+ return (
918
+ <Menu.SubTrigger
919
+ ref={ref}
920
+ {...rest}
921
+ asChild={false}
922
+ className={cl(
923
+ "aksel-action-menu__item aksel-action-menu__sub-trigger",
924
+ className,
925
+ )}
926
+ data-marker={icon ? iconPosition : undefined}
927
+ >
928
+ {children}
929
+ {icon && (
930
+ <Marker
931
+ placement={iconPosition}
932
+ className="aksel-action-menu__marker-icon"
933
+ >
934
+ {icon}
935
+ </Marker>
936
+ )}
937
+ <Marker placement="right" className="aksel-action-menu__marker-icon">
938
+ <ChevronRightIcon aria-hidden />
912
939
  </Marker>
913
- )}
914
- <Marker placement="right" className="aksel-action-menu__marker-icon">
915
- <ChevronRightIcon aria-hidden />
916
- </Marker>
917
- </Menu.SubTrigger>
918
- );
919
- });
940
+ </Menu.SubTrigger>
941
+ );
942
+ },
943
+ );
920
944
 
921
945
  /* -------------------------------------------------------------------------- */
922
946
  /* ActionMenuSubContent */