@dnb/eufemia 9.40.0 → 9.42.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 (263) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/cjs/components/accordion/style/_accordion.scss +1 -1
  3. package/cjs/components/autocomplete/style/dnb-autocomplete.css +3 -14
  4. package/cjs/components/autocomplete/style/dnb-autocomplete.min.css +2 -2
  5. package/cjs/components/checkbox/style/dnb-checkbox.css +0 -7
  6. package/cjs/components/checkbox/style/dnb-checkbox.min.css +1 -1
  7. package/cjs/components/date-picker/style/dnb-date-picker.css +3 -35
  8. package/cjs/components/date-picker/style/dnb-date-picker.min.css +2 -2
  9. package/cjs/components/drawer/types.d.ts +5 -5
  10. package/cjs/components/dropdown/style/dnb-dropdown.css +0 -7
  11. package/cjs/components/dropdown/style/dnb-dropdown.min.css +1 -1
  12. package/cjs/components/form-label/FormLabel.js +1 -1
  13. package/cjs/components/form-label/style/_form-label.scss +0 -13
  14. package/cjs/components/form-label/style/dnb-form-label.css +0 -7
  15. package/cjs/components/form-label/style/dnb-form-label.min.css +1 -1
  16. package/cjs/components/form-row/style/dnb-form-row.css +0 -7
  17. package/cjs/components/form-row/style/dnb-form-row.min.css +1 -1
  18. package/cjs/components/input/style/_input.scss +4 -0
  19. package/cjs/components/input/style/dnb-input.css +3 -7
  20. package/cjs/components/input/style/dnb-input.min.css +1 -1
  21. package/cjs/components/input-masked/style/dnb-input-masked.css +3 -7
  22. package/cjs/components/input-masked/style/dnb-input-masked.min.css +1 -1
  23. package/cjs/components/modal/Modal.d.ts +2 -2
  24. package/cjs/components/number-format/NumberUtils.d.ts +3 -0
  25. package/cjs/components/radio/style/dnb-radio.css +0 -7
  26. package/cjs/components/radio/style/dnb-radio.min.css +1 -1
  27. package/cjs/components/slider/style/dnb-slider.css +0 -7
  28. package/cjs/components/slider/style/dnb-slider.min.css +1 -1
  29. package/cjs/components/switch/style/dnb-switch.css +0 -7
  30. package/cjs/components/switch/style/dnb-switch.min.css +1 -1
  31. package/cjs/components/table/Table.d.ts +4 -2
  32. package/cjs/components/table/Table.js +15 -51
  33. package/cjs/components/table/TableAccordion.d.ts +10 -0
  34. package/cjs/components/table/TableAccordion.js +265 -0
  35. package/cjs/components/table/TableAccordionContent.d.ts +18 -0
  36. package/cjs/components/table/TableAccordionContent.js +126 -0
  37. package/cjs/components/table/TableContainer.js +5 -6
  38. package/cjs/components/table/TableScrollView.js +2 -1
  39. package/cjs/components/table/TableTd.d.ts +6 -1
  40. package/cjs/components/table/TableTd.js +5 -1
  41. package/cjs/components/table/TableTh.d.ts +3 -3
  42. package/cjs/components/table/TableTh.js +2 -0
  43. package/cjs/components/table/TableTr.d.ts +27 -0
  44. package/cjs/components/table/TableTr.js +95 -18
  45. package/cjs/components/table/index.d.ts +1 -0
  46. package/cjs/components/table/index.js +11 -1
  47. package/cjs/components/table/style/_table-accordion.scss +285 -0
  48. package/cjs/components/table/style/_table-container.scss +13 -1
  49. package/cjs/components/table/style/_table-header-buttons.scss +20 -1
  50. package/cjs/components/table/style/_table-td.scss +29 -2
  51. package/cjs/components/table/style/_table-tr.scss +8 -2
  52. package/cjs/components/table/style/_table.scss +9 -7
  53. package/cjs/components/table/style/dnb-table.css +586 -324
  54. package/cjs/components/table/style/dnb-table.min.css +11 -2
  55. package/cjs/components/table/style/themes/dnb-table-theme-ui.css +5 -1
  56. package/cjs/components/table/style/themes/dnb-table-theme-ui.min.css +1 -1
  57. package/cjs/components/table/style/themes/dnb-table-theme-ui.scss +9 -1
  58. package/cjs/components/table/useHandleSortState.d.ts +34 -0
  59. package/cjs/components/table/useHandleSortState.js +196 -0
  60. package/cjs/components/textarea/style/dnb-textarea.css +0 -7
  61. package/cjs/components/textarea/style/dnb-textarea.min.css +1 -1
  62. package/cjs/components/toggle-button/style/dnb-toggle-button.css +0 -21
  63. package/cjs/components/toggle-button/style/dnb-toggle-button.min.css +1 -1
  64. package/cjs/elements/Element.d.ts +1 -1
  65. package/cjs/fragments/lib.d.ts +4 -7
  66. package/cjs/fragments/scroll-view/ScrollView.d.ts +12 -11
  67. package/cjs/fragments/scroll-view/ScrollView.js +8 -5
  68. package/cjs/fragments/scroll-view/style/_scroll-view.scss +11 -0
  69. package/cjs/shared/Eufemia.js +1 -1
  70. package/cjs/shared/helpers.js +7 -1
  71. package/cjs/shared/locales/en-GB.d.ts +4 -0
  72. package/cjs/shared/locales/en-GB.js +4 -0
  73. package/cjs/shared/locales/en-US.d.ts +4 -0
  74. package/cjs/shared/locales/index.d.ts +8 -0
  75. package/cjs/shared/locales/nb-NO.d.ts +4 -0
  76. package/cjs/shared/locales/nb-NO.js +4 -0
  77. package/cjs/style/dnb-ui-components.css +594 -320
  78. package/cjs/style/dnb-ui-components.min.css +13 -4
  79. package/cjs/style/dnb-ui-fragments.css +17 -1
  80. package/cjs/style/dnb-ui-fragments.min.css +1 -1
  81. package/cjs/style/themes/theme-eiendom/dnb-theme-eiendom.css +5 -1
  82. package/cjs/style/themes/theme-eiendom/dnb-theme-eiendom.min.css +1 -1
  83. package/cjs/style/themes/theme-ui/dnb-theme-ui.css +5 -1
  84. package/cjs/style/themes/theme-ui/dnb-theme-ui.min.css +1 -1
  85. package/components/accordion/style/_accordion.scss +1 -1
  86. package/components/autocomplete/style/dnb-autocomplete.css +3 -14
  87. package/components/autocomplete/style/dnb-autocomplete.min.css +2 -2
  88. package/components/checkbox/style/dnb-checkbox.css +0 -7
  89. package/components/checkbox/style/dnb-checkbox.min.css +1 -1
  90. package/components/date-picker/style/dnb-date-picker.css +3 -35
  91. package/components/date-picker/style/dnb-date-picker.min.css +2 -2
  92. package/components/drawer/types.d.ts +5 -5
  93. package/components/dropdown/style/dnb-dropdown.css +0 -7
  94. package/components/dropdown/style/dnb-dropdown.min.css +1 -1
  95. package/components/form-label/FormLabel.js +1 -1
  96. package/components/form-label/style/_form-label.scss +0 -13
  97. package/components/form-label/style/dnb-form-label.css +0 -7
  98. package/components/form-label/style/dnb-form-label.min.css +1 -1
  99. package/components/form-row/style/dnb-form-row.css +0 -7
  100. package/components/form-row/style/dnb-form-row.min.css +1 -1
  101. package/components/input/style/_input.scss +4 -0
  102. package/components/input/style/dnb-input.css +3 -7
  103. package/components/input/style/dnb-input.min.css +1 -1
  104. package/components/input-masked/style/dnb-input-masked.css +3 -7
  105. package/components/input-masked/style/dnb-input-masked.min.css +1 -1
  106. package/components/modal/Modal.d.ts +2 -2
  107. package/components/number-format/NumberUtils.d.ts +3 -0
  108. package/components/radio/style/dnb-radio.css +0 -7
  109. package/components/radio/style/dnb-radio.min.css +1 -1
  110. package/components/slider/style/dnb-slider.css +0 -7
  111. package/components/slider/style/dnb-slider.min.css +1 -1
  112. package/components/switch/style/dnb-switch.css +0 -7
  113. package/components/switch/style/dnb-switch.min.css +1 -1
  114. package/components/table/Table.d.ts +4 -2
  115. package/components/table/Table.js +13 -21
  116. package/components/table/TableAccordion.d.ts +10 -0
  117. package/components/table/TableAccordion.js +192 -0
  118. package/components/table/TableAccordionContent.d.ts +18 -0
  119. package/components/table/TableAccordionContent.js +63 -0
  120. package/components/table/TableContainer.js +5 -6
  121. package/components/table/TableScrollView.js +2 -1
  122. package/components/table/TableTd.d.ts +6 -1
  123. package/components/table/TableTd.js +3 -1
  124. package/components/table/TableTh.d.ts +3 -3
  125. package/components/table/TableTh.js +2 -0
  126. package/components/table/TableTr.d.ts +27 -0
  127. package/components/table/TableTr.js +59 -16
  128. package/components/table/index.d.ts +1 -0
  129. package/components/table/index.js +1 -0
  130. package/components/table/style/_table-accordion.scss +285 -0
  131. package/components/table/style/_table-container.scss +13 -1
  132. package/components/table/style/_table-header-buttons.scss +20 -1
  133. package/components/table/style/_table-td.scss +29 -2
  134. package/components/table/style/_table-tr.scss +8 -2
  135. package/components/table/style/_table.scss +9 -7
  136. package/components/table/style/dnb-table.css +586 -324
  137. package/components/table/style/dnb-table.min.css +11 -2
  138. package/components/table/style/themes/dnb-table-theme-ui.css +5 -1
  139. package/components/table/style/themes/dnb-table-theme-ui.min.css +1 -1
  140. package/components/table/style/themes/dnb-table-theme-ui.scss +9 -1
  141. package/components/table/useHandleSortState.d.ts +34 -0
  142. package/components/table/useHandleSortState.js +141 -0
  143. package/components/textarea/style/dnb-textarea.css +0 -7
  144. package/components/textarea/style/dnb-textarea.min.css +1 -1
  145. package/components/toggle-button/style/dnb-toggle-button.css +0 -21
  146. package/components/toggle-button/style/dnb-toggle-button.min.css +1 -1
  147. package/elements/Element.d.ts +1 -1
  148. package/es/components/accordion/style/_accordion.scss +1 -1
  149. package/es/components/autocomplete/style/dnb-autocomplete.css +3 -14
  150. package/es/components/autocomplete/style/dnb-autocomplete.min.css +2 -2
  151. package/es/components/checkbox/style/dnb-checkbox.css +0 -7
  152. package/es/components/checkbox/style/dnb-checkbox.min.css +1 -1
  153. package/es/components/date-picker/style/dnb-date-picker.css +3 -35
  154. package/es/components/date-picker/style/dnb-date-picker.min.css +2 -2
  155. package/es/components/drawer/types.d.ts +5 -5
  156. package/es/components/dropdown/style/dnb-dropdown.css +0 -7
  157. package/es/components/dropdown/style/dnb-dropdown.min.css +1 -1
  158. package/es/components/form-label/FormLabel.js +1 -1
  159. package/es/components/form-label/style/_form-label.scss +0 -13
  160. package/es/components/form-label/style/dnb-form-label.css +0 -7
  161. package/es/components/form-label/style/dnb-form-label.min.css +1 -1
  162. package/es/components/form-row/style/dnb-form-row.css +0 -7
  163. package/es/components/form-row/style/dnb-form-row.min.css +1 -1
  164. package/es/components/input/style/_input.scss +4 -0
  165. package/es/components/input/style/dnb-input.css +3 -7
  166. package/es/components/input/style/dnb-input.min.css +1 -1
  167. package/es/components/input-masked/style/dnb-input-masked.css +3 -7
  168. package/es/components/input-masked/style/dnb-input-masked.min.css +1 -1
  169. package/es/components/modal/Modal.d.ts +2 -2
  170. package/es/components/number-format/NumberUtils.d.ts +3 -0
  171. package/es/components/radio/style/dnb-radio.css +0 -7
  172. package/es/components/radio/style/dnb-radio.min.css +1 -1
  173. package/es/components/slider/style/dnb-slider.css +0 -7
  174. package/es/components/slider/style/dnb-slider.min.css +1 -1
  175. package/es/components/switch/style/dnb-switch.css +0 -7
  176. package/es/components/switch/style/dnb-switch.min.css +1 -1
  177. package/es/components/table/Table.d.ts +4 -2
  178. package/es/components/table/Table.js +14 -15
  179. package/es/components/table/TableAccordion.d.ts +10 -0
  180. package/es/components/table/TableAccordion.js +175 -0
  181. package/es/components/table/TableAccordionContent.d.ts +18 -0
  182. package/es/components/table/TableAccordionContent.js +54 -0
  183. package/es/components/table/TableContainer.js +5 -6
  184. package/es/components/table/TableScrollView.js +2 -1
  185. package/es/components/table/TableTd.d.ts +6 -1
  186. package/es/components/table/TableTd.js +3 -1
  187. package/es/components/table/TableTh.d.ts +3 -3
  188. package/es/components/table/TableTh.js +2 -0
  189. package/es/components/table/TableTr.d.ts +27 -0
  190. package/es/components/table/TableTr.js +51 -15
  191. package/es/components/table/index.d.ts +1 -0
  192. package/es/components/table/index.js +1 -0
  193. package/es/components/table/style/_table-accordion.scss +285 -0
  194. package/es/components/table/style/_table-container.scss +13 -1
  195. package/es/components/table/style/_table-header-buttons.scss +20 -1
  196. package/es/components/table/style/_table-td.scss +29 -2
  197. package/es/components/table/style/_table-tr.scss +8 -2
  198. package/es/components/table/style/_table.scss +9 -7
  199. package/es/components/table/style/dnb-table.css +586 -324
  200. package/es/components/table/style/dnb-table.min.css +11 -2
  201. package/es/components/table/style/themes/dnb-table-theme-ui.css +5 -1
  202. package/es/components/table/style/themes/dnb-table-theme-ui.min.css +1 -1
  203. package/es/components/table/style/themes/dnb-table-theme-ui.scss +9 -1
  204. package/es/components/table/useHandleSortState.d.ts +34 -0
  205. package/es/components/table/useHandleSortState.js +111 -0
  206. package/es/components/textarea/style/dnb-textarea.css +0 -7
  207. package/es/components/textarea/style/dnb-textarea.min.css +1 -1
  208. package/es/components/toggle-button/style/dnb-toggle-button.css +0 -21
  209. package/es/components/toggle-button/style/dnb-toggle-button.min.css +1 -1
  210. package/es/elements/Element.d.ts +1 -1
  211. package/es/fragments/lib.d.ts +4 -7
  212. package/es/fragments/scroll-view/ScrollView.d.ts +12 -11
  213. package/es/fragments/scroll-view/ScrollView.js +7 -3
  214. package/es/fragments/scroll-view/style/_scroll-view.scss +11 -0
  215. package/es/shared/Eufemia.js +1 -1
  216. package/es/shared/helpers.js +7 -1
  217. package/es/shared/locales/en-GB.d.ts +4 -0
  218. package/es/shared/locales/en-GB.js +4 -0
  219. package/es/shared/locales/en-US.d.ts +4 -0
  220. package/es/shared/locales/index.d.ts +8 -0
  221. package/es/shared/locales/nb-NO.d.ts +4 -0
  222. package/es/shared/locales/nb-NO.js +4 -0
  223. package/es/style/dnb-ui-components.css +594 -320
  224. package/es/style/dnb-ui-components.min.css +13 -4
  225. package/es/style/dnb-ui-fragments.css +17 -1
  226. package/es/style/dnb-ui-fragments.min.css +1 -1
  227. package/es/style/themes/theme-eiendom/dnb-theme-eiendom.css +5 -1
  228. package/es/style/themes/theme-eiendom/dnb-theme-eiendom.min.css +1 -1
  229. package/es/style/themes/theme-ui/dnb-theme-ui.css +5 -1
  230. package/es/style/themes/theme-ui/dnb-theme-ui.min.css +1 -1
  231. package/esm/dnb-ui-basis.min.mjs +1 -1
  232. package/esm/dnb-ui-components.min.mjs +1 -1
  233. package/esm/dnb-ui-elements.min.mjs +3 -3
  234. package/esm/dnb-ui-extensions.min.mjs +4 -4
  235. package/esm/dnb-ui-lib.min.mjs +2 -2
  236. package/esm/dnb-ui-web-components.min.mjs +2 -2
  237. package/fragments/lib.d.ts +4 -7
  238. package/fragments/scroll-view/ScrollView.d.ts +12 -11
  239. package/fragments/scroll-view/ScrollView.js +8 -4
  240. package/fragments/scroll-view/style/_scroll-view.scss +11 -0
  241. package/package.json +1 -1
  242. package/shared/Eufemia.js +1 -1
  243. package/shared/helpers.js +7 -1
  244. package/shared/locales/en-GB.d.ts +4 -0
  245. package/shared/locales/en-GB.js +4 -0
  246. package/shared/locales/en-US.d.ts +4 -0
  247. package/shared/locales/index.d.ts +8 -0
  248. package/shared/locales/nb-NO.d.ts +4 -0
  249. package/shared/locales/nb-NO.js +4 -0
  250. package/style/dnb-ui-components.css +594 -320
  251. package/style/dnb-ui-components.min.css +13 -4
  252. package/style/dnb-ui-fragments.css +17 -1
  253. package/style/dnb-ui-fragments.min.css +1 -1
  254. package/style/themes/theme-eiendom/dnb-theme-eiendom.css +5 -1
  255. package/style/themes/theme-eiendom/dnb-theme-eiendom.min.css +1 -1
  256. package/style/themes/theme-ui/dnb-theme-ui.css +5 -1
  257. package/style/themes/theme-ui/dnb-theme-ui.min.css +1 -1
  258. package/umd/dnb-ui-basis.min.js +1 -1
  259. package/umd/dnb-ui-components.min.js +1 -1
  260. package/umd/dnb-ui-elements.min.js +3 -3
  261. package/umd/dnb-ui-extensions.min.js +4 -4
  262. package/umd/dnb-ui-lib.min.js +2 -2
  263. package/umd/dnb-ui-web-components.min.js +2 -2
@@ -1,13 +1,17 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
3
- const _excluded = ["variant", "noWrap", "children", "className"];
3
+ const _excluded = ["variant", "noWrap", "expanded", "disabled", "noAnimation", "children", "className"];
4
4
  import React from 'react';
5
5
  import classnames from 'classnames';
6
+ import { useTableAccordion } from './TableAccordion';
6
7
  import TableContext from './TableContext';
7
8
  export default function Tr(componentProps) {
8
9
  const {
9
10
  variant,
10
11
  noWrap,
12
+ expanded,
13
+ disabled,
14
+ noAnimation,
11
15
  children,
12
16
  className: _className
13
17
  } = componentProps,
@@ -19,6 +23,19 @@ export default function Tr(componentProps) {
19
23
  variant
20
24
  });
21
25
  const className = classnames('dnb-table__tr', _className, currentVariant && `dnb-table__tr--${currentVariant}`, noWrap && 'dnb-table--no-wrap');
26
+ const accordionTr = useTableAccordion({
27
+ className,
28
+ children,
29
+ props,
30
+ expanded,
31
+ disabled,
32
+ noAnimation
33
+ });
34
+
35
+ if (accordionTr) {
36
+ return accordionTr;
37
+ }
38
+
22
39
  return React.createElement("tr", _extends({
23
40
  role: "row",
24
41
  className: className
@@ -43,22 +60,14 @@ function useHandleTrVariant({
43
60
  return countRef.count;
44
61
  };
45
62
 
46
- const decrement = () => {
47
- if (typeof countRef === 'undefined') {
48
- return null;
49
- }
50
-
51
- if (!variant || variant === 'even' && countRef.count % 2 === 1 || variant === 'odd' && countRef.count % 2 === 0) {
52
- countRef.count--;
53
- tableContext === null || tableContext === void 0 ? void 0 : tableContext.forceRerender();
63
+ const [count, setCount] = React.useState(() => {
64
+ if (typeof window === 'undefined') {
65
+ return increment();
54
66
  }
55
- };
56
-
57
- const count = React.useMemo(increment, [tableContext === null || tableContext === void 0 ? void 0 : tableContext.rerenderAlias]);
58
- React.useEffect(() => decrement, [tableContext === null || tableContext === void 0 ? void 0 : tableContext.trCountRef]);
67
+ });
59
68
  React.useEffect(() => {
60
- tableContext === null || tableContext === void 0 ? void 0 : tableContext.forceRerender();
61
- }, [variant]);
69
+ setCount(increment());
70
+ }, [tableContext === null || tableContext === void 0 ? void 0 : tableContext.rerenderAlias]);
62
71
  let currentVariant = variant;
63
72
 
64
73
  if (!currentVariant) {
@@ -68,4 +77,31 @@ function useHandleTrVariant({
68
77
  return {
69
78
  currentVariant
70
79
  };
80
+ }
81
+
82
+ export function useHandleOddEven({
83
+ children
84
+ }) {
85
+ const trCountRef = React.useRef({
86
+ count: 0
87
+ });
88
+ const [rerenderAlias, setRerenderAlias] = React.useState({});
89
+ const isMounted = React.useRef(false);
90
+ React.useEffect(() => {
91
+ if (isMounted.current) {
92
+ forceRerender();
93
+ }
94
+
95
+ isMounted.current = true;
96
+ }, [children]);
97
+ return {
98
+ trCountRef,
99
+ rerenderAlias,
100
+ setRerenderAlias
101
+ };
102
+
103
+ function forceRerender() {
104
+ trCountRef.current.count = 0;
105
+ setRerenderAlias({});
106
+ }
71
107
  }
@@ -1,3 +1,4 @@
1
+ export { useHandleSortState } from "./useHandleSortState";
1
2
  export default Table;
2
3
  export * from "./Table";
3
4
  import Table from "./Table";
@@ -1,3 +1,4 @@
1
1
  import Table from './Table';
2
+ export { useHandleSortState } from './useHandleSortState';
2
3
  export default Table;
3
4
  export * from './Table';
@@ -0,0 +1,285 @@
1
+ /*
2
+ * Table component
3
+ *
4
+ */
5
+
6
+ @mixin tableAccordionActiveColor {
7
+ .dnb-table__td__accordion-icon .dnb-icon {
8
+ color: var(--color-emerald-green);
9
+ }
10
+ }
11
+ @mixin tableAccordionDisabledColor {
12
+ .dnb-table__td__accordion-icon .dnb-icon {
13
+ color: var(--color-sea-green-30);
14
+ }
15
+ }
16
+
17
+ .dnb-table {
18
+ --accordion-background: var(--color-white);
19
+ --accordion-border-width: 0.0625rem;
20
+ --accordion-border: var(--accordion-border-width) solid
21
+ var(--color-black-20);
22
+
23
+ &__th#{&}__th__accordion-icon {
24
+ padding: 0;
25
+
26
+ // In case the table-layout is fixed
27
+ &,
28
+ div {
29
+ width: 3.5rem;
30
+
31
+ .dnb-table__size--medium & {
32
+ width: 3rem;
33
+ }
34
+ .dnb-table__size--small & {
35
+ width: 2.5rem;
36
+ }
37
+
38
+ text-indent: -300vw;
39
+ }
40
+ }
41
+
42
+ &__td#{&}__td__accordion-icon {
43
+ padding: 0;
44
+ user-select: none; // prevent selection on double-click
45
+ }
46
+
47
+ &__tr--has-accordion-content &__toggle-button {
48
+ display: flex; // to ensure we inherit the correct size from its content
49
+ justify-content: center;
50
+
51
+ .dnb-icon {
52
+ color: var(--color-sea-green);
53
+ transition: transform 500ms var(--accordion-easing);
54
+ }
55
+ }
56
+ &__tr--has-accordion-content#{&}__tr--no-animation
57
+ &__toggle-button
58
+ .dnb-icon,
59
+ html[data-visual-test]
60
+ &__tr--has-accordion-content
61
+ &__toggle-button
62
+ .dnb-icon {
63
+ transition: none !important;
64
+ }
65
+
66
+ &__tr--has-accordion-content,
67
+ &__tr__accordion_content {
68
+ position: relative;
69
+ z-index: 2;
70
+ }
71
+ &__tr--has-accordion-content:hover,
72
+ &__tr--has-accordion-content:active,
73
+ &__tr--has-accordion-content:focus,
74
+ &__tr--has-accordion-content#{&}__tr--expanded,
75
+ &__tr__accordion_content {
76
+ // ensure borders are visible in certain states
77
+ z-index: 3;
78
+ }
79
+
80
+ &__tr--has-accordion-content#{&}__tr--expanded
81
+ &__toggle-button
82
+ .dnb-icon {
83
+ transform: rotate(180deg);
84
+ }
85
+
86
+ &__tr--has-accordion-content#{&}__tr--expanded {
87
+ .dnb-table--border & td::after {
88
+ border-bottom: none;
89
+ }
90
+ .dnb-table--border & td:not(:first-of-type)::after {
91
+ border-left: none;
92
+ }
93
+ }
94
+
95
+ &__tr--has-accordion-content#{&}__tr:not(&__tr--disabled) {
96
+ outline: none;
97
+
98
+ td::before {
99
+ content: '';
100
+ position: absolute;
101
+ z-index: 3; // ensure we are over the "tableBorder"
102
+
103
+ // A negative number will force the table to overflow and a scrollbar will show up
104
+ inset: 0;
105
+
106
+ pointer-events: none;
107
+
108
+ // Here we use border to support Safari v16 on macOS
109
+ // but also to only have a border on specific sides
110
+ border: $focusRingWidth solid transparent;
111
+ }
112
+ td:not(:first-of-type)::before {
113
+ border-left: none;
114
+ }
115
+ td:not(:last-of-type)::before {
116
+ border-right: none;
117
+ }
118
+
119
+ @include hover() {
120
+ td::before {
121
+ border-color: var(--color-emerald-green);
122
+ }
123
+
124
+ @include tableAccordionActiveColor();
125
+ }
126
+ }
127
+
128
+ &__tr--has-accordion-content#{&}__tr--expanded:not(&__tr--disabled):hover
129
+ &__td {
130
+ background-color: var(--color-white);
131
+ }
132
+
133
+ &__tr--has-accordion-content#{&}__tr:not(&__tr--disabled):not(:active):not(:hover):focus {
134
+ td::before {
135
+ @include whatInput(keyboard) {
136
+ top: 0;
137
+ bottom: 0;
138
+ border-color: var(--color-emerald-green);
139
+ }
140
+ }
141
+ td:first-of-type::before {
142
+ left: 0;
143
+ }
144
+ td:last-of-type::before {
145
+ right: 0;
146
+ }
147
+ }
148
+
149
+ &__tr--has-accordion-content#{&}__tr:not(&__tr--disabled):active {
150
+ html:not([data-whatintent='touch']) &:hover td::before,
151
+ td::before {
152
+ border-color: var(--color-emerald-green);
153
+ border-width: 0.0625rem; // TODO: we should have something like activeRingWidth
154
+ }
155
+ }
156
+
157
+ &__tr--has-accordion-content#{&}__tr:not(&__tr--disabled):active &__td {
158
+ background-color: var(--color-pistachio);
159
+
160
+ @include tableAccordionActiveColor();
161
+ }
162
+
163
+ &__tr--has-accordion-content#{&}__tr--expanded:not(&__tr--disabled)#{&}__tr--hover:not(:active):hover
164
+ &__td {
165
+ background-color: var(--accordion-background);
166
+
167
+ &::before {
168
+ border: none;
169
+ border-top: var(--accordion-border);
170
+ }
171
+ }
172
+
173
+ &__tr--has-accordion-content#{&}__tr#{&}__tr--expanded:not(&__tr--disabled):not(:active):not(:hover) {
174
+ @include whatInputNot('keyboard') {
175
+ background-color: var(--accordion-background);
176
+
177
+ td::before {
178
+ border: none;
179
+ border-top: var(--accordion-border);
180
+ }
181
+ }
182
+ }
183
+
184
+ &__tr--has-accordion-content#{&}__tr--disabled {
185
+ @include tableAccordionDisabledColor();
186
+ }
187
+
188
+ &__tr__accordion_content {
189
+ @include IS_SAFARI_DESKTOP {
190
+ &[hidden] {
191
+ /**
192
+ * By reverting the display from "none" to "block",
193
+ * we trick VoiceOver to not make this row as the end of the table. We still need "hidden" to get the correct number of rows (childCount).
194
+ */
195
+ display: block;
196
+ }
197
+ }
198
+
199
+ td {
200
+ width: 100%;
201
+ }
202
+
203
+ td::before {
204
+ content: '';
205
+ position: absolute;
206
+ top: auto;
207
+ left: 0;
208
+ right: 0;
209
+ bottom: calc(var(--accordion-border-width) * -1);
210
+
211
+ pointer-events: none;
212
+
213
+ border-bottom: var(--accordion-border);
214
+ }
215
+
216
+ // because, when table has --outline
217
+ .dnb-table--outline &:last-of-type td::before {
218
+ border-bottom: none;
219
+ }
220
+
221
+ // because, when table has --border
222
+ .dnb-table--border & td::after {
223
+ border-top: none;
224
+ }
225
+
226
+ &__inner {
227
+ overflow: hidden;
228
+ will-change: height;
229
+ transition: height 400ms var(--accordion-easing);
230
+
231
+ &__spacing {
232
+ padding: 1rem;
233
+
234
+ transform: translateY(-10px);
235
+ transition: transform 500ms var(--accordion-easing);
236
+ }
237
+
238
+ position: relative;
239
+ }
240
+ &--parallax &__inner {
241
+ &__spacing {
242
+ transform: translateY(0);
243
+ }
244
+ }
245
+
246
+ > td,
247
+ > td.dnb-table__td {
248
+ padding: 0;
249
+
250
+ .dnb-dl,
251
+ .dnb-dl dt {
252
+ margin: 0;
253
+ }
254
+ }
255
+
256
+ &--expanded > td,
257
+ &--expanded > td.dnb-table__td {
258
+ background-color: var(--color-white);
259
+ }
260
+ }
261
+
262
+ &__tr__accordion_content#{&}__tr &__td {
263
+ background-color: var(--accordion-background);
264
+
265
+ /**
266
+ * Safari on iOS and macOS has problems on animating when vertical-align is baseline.
267
+ * What happens is that the td is not 0, even the content inside is 0. With vertical top, we omit that.
268
+ * But we do not need baseline in this tr > td, so we reset it.
269
+ */
270
+ vertical-align: top;
271
+ }
272
+
273
+ &__tr--has-accordion-content:not(&__tr--disabled) {
274
+ cursor: pointer;
275
+ }
276
+ // prevent selection while animating – useful when user double-clicks
277
+ // TODO: Our SASS version doe sot support :has – so we may use this in future
278
+ // &__tr--has-accordion-content:has(& + &__tr__accordion_content--animating) {
279
+ // user-select: none;
280
+ // }
281
+
282
+ &__td-wrapper {
283
+ display: flex;
284
+ }
285
+ }
@@ -30,18 +30,30 @@
30
30
  &:not([class*='space__bottom']) {
31
31
  margin-bottom: 0;
32
32
  }
33
+
34
+ &__size--large .dnb-table__th {
35
+ padding-top: 1.5rem;
36
+ }
33
37
  }
34
38
  }
35
39
 
36
40
  &__head {
37
41
  padding: 2rem 1rem 0;
38
42
 
43
+ &--empty {
44
+ padding: 0.5rem 0 0;
45
+ }
46
+
39
47
  .dnb-spacing & .dnb-h--large:not([class*='space__top']) {
40
48
  margin: 0;
41
49
  }
42
50
  }
43
51
  &__foot {
44
- padding: 0.5rem 1rem 2rem;
52
+ padding: 1rem 1rem 1.5rem;
53
+
54
+ &--empty {
55
+ padding: 0 0 1rem;
56
+ }
45
57
  }
46
58
 
47
59
  // When placed inside a Modal/Drawer, let the parent scroll-bar do its job.
@@ -87,9 +87,21 @@
87
87
  &::before {
88
88
  right: -0.5rem;
89
89
  }
90
- .dnb-icon {
90
+ html[data-visual-test] & .dnb-icon,
91
+ :not(.dnb-table--active) &:active .dnb-icon {
91
92
  opacity: 1;
92
93
  }
94
+
95
+ // show underline
96
+ html:not([data-visual-test]) & {
97
+ .dnb-button__text::after {
98
+ opacity: 1;
99
+ color: inherit;
100
+ }
101
+ &:not(:active) .dnb-button__text::after {
102
+ visibility: visible;
103
+ }
104
+ }
93
105
  }
94
106
 
95
107
  @include active() {
@@ -152,6 +164,13 @@
152
164
  }
153
165
  }
154
166
 
167
+ @include focus() {
168
+ // hide underline
169
+ .dnb-button__text::after {
170
+ opacity: 0;
171
+ }
172
+ }
173
+
155
174
  // webkit fix
156
175
  &:hover:focus:not(:active) .dnb-button__text::after {
157
176
  visibility: visible;
@@ -53,20 +53,47 @@
53
53
  border-bottom: var(--outline);
54
54
  }
55
55
  }
56
- &--outline tbody &__tr:last-of-type &__td:first-of-type {
56
+ &--outline thead &__th:first-of-type {
57
+ &,
58
+ &::after {
59
+ border-radius: 0.5rem 0 0 0;
60
+ }
61
+ }
62
+ &--outline thead &__th:last-of-type {
63
+ &,
64
+ &::after {
65
+ border-radius: 0 0.5rem 0 0;
66
+ }
67
+ }
68
+ &--outline tbody &__tr:last-of-type &__td:first-of-type,
69
+ &--outline
70
+ tbody
71
+ &__tr#{&}__tr--has-accordion-content:not(#{&}__tr--expanded):nth-last-child(2)
72
+ &__td:first-of-type {
57
73
  &,
58
74
  &::before,
59
75
  &::after {
60
76
  border-radius: 0 0 0 0.5rem;
61
77
  }
62
78
  }
63
- &--outline tbody &__tr:last-of-type &__td:last-of-type {
79
+ &--outline tbody &__tr:last-of-type &__td:last-of-type,
80
+ &--outline
81
+ tbody
82
+ &__tr#{&}__tr--has-accordion-content:not(#{&}__tr--expanded):nth-last-child(2)
83
+ &__td:last-of-type {
64
84
  &,
65
85
  &::before,
66
86
  &::after {
67
87
  border-radius: 0 0 0.5rem 0;
68
88
  }
69
89
  }
90
+ &--outline tbody &__tr#{&}__tr__accordion_content:last-of-type &__td {
91
+ &,
92
+ &::before,
93
+ &::after {
94
+ border-radius: 0 0 0.5rem 0.5rem;
95
+ }
96
+ }
70
97
 
71
98
  // reset parts if a "th" is used before td (row header)
72
99
  &--outline tbody &__tr &__th ~ &__td:first-of-type {
@@ -20,11 +20,17 @@
20
20
  background-color: var(--color-white);
21
21
  }
22
22
 
23
- &--outline thead &__tr:first-of-type {
23
+ &--outline thead &__tr:first-of-type,
24
+ &--outline
25
+ tbody
26
+ &__tr#{&}__tr--has-accordion-content:not(#{&}__tr--expanded):nth-last-child(2) {
24
27
  // use clip-path, because border-radius does not clip on tr's
25
28
  clip-path: inset(0 round 0.5rem 0.5rem 0 0);
26
29
  }
27
- &--outline tbody &__tr:last-of-type {
30
+ &--outline tbody &__tr:last-of-type,
31
+ &--outline
32
+ tbody
33
+ &__tr#{&}__tr--has-accordion-content:not(#{&}__tr--expanded):nth-last-child(2) {
28
34
  // use clip-path, because border-radius does not clip on tr's
29
35
  clip-path: inset(0 round 0 0 0.5rem 0.5rem);
30
36
  }
@@ -16,13 +16,6 @@
16
16
  }
17
17
 
18
18
  @import './_table-header-buttons.scss';
19
- @import './_table-th.scss';
20
- @import './_table-td.scss';
21
- @import './_table-tr.scss';
22
- @import './_table-cell.scss';
23
- @import './_table-sticky.scss';
24
- @import './_table-container.scss';
25
- @import './_table-deprecated.scss';
26
19
 
27
20
  .dnb-table {
28
21
  display: table;
@@ -60,6 +53,15 @@
60
53
  @include buttonsInTable();
61
54
  }
62
55
 
56
+ @import './_table-th.scss';
57
+ @import './_table-td.scss';
58
+ @import './_table-tr.scss';
59
+ @import './_table-cell.scss';
60
+ @import './_table-sticky.scss';
61
+ @import './_table-container.scss';
62
+ @import './_table-deprecated.scss';
63
+ @import './_table-accordion.scss';
64
+
63
65
  // Reset Table spacing
64
66
  .dnb-spacing .dnb-table {
65
67
  p,