@navikt/ds-react 4.7.4 → 4.9.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 (45) hide show
  1. package/_docs.json +389 -1
  2. package/cjs/index.js +1 -0
  3. package/cjs/layout/stack/HStack.js +51 -0
  4. package/cjs/layout/stack/Spacer.js +21 -0
  5. package/cjs/layout/stack/Stack.js +51 -0
  6. package/cjs/layout/stack/VStack.js +51 -0
  7. package/cjs/layout/stack/index.js +9 -0
  8. package/cjs/layout/stack/package.json +6 -0
  9. package/cjs/layout/utilities/css.js +17 -0
  10. package/cjs/table/ExpandableRow.js +20 -8
  11. package/esm/index.d.ts +1 -0
  12. package/esm/index.js +1 -0
  13. package/esm/index.js.map +1 -1
  14. package/esm/layout/stack/HStack.d.ts +24 -0
  15. package/esm/layout/stack/HStack.js +26 -0
  16. package/esm/layout/stack/HStack.js.map +1 -0
  17. package/esm/layout/stack/Spacer.d.ts +14 -0
  18. package/esm/layout/stack/Spacer.js +15 -0
  19. package/esm/layout/stack/Spacer.js.map +1 -0
  20. package/esm/layout/stack/Stack.d.ts +26 -0
  21. package/esm/layout/stack/Stack.js +23 -0
  22. package/esm/layout/stack/Stack.js.map +1 -0
  23. package/esm/layout/stack/VStack.d.ts +24 -0
  24. package/esm/layout/stack/VStack.js +26 -0
  25. package/esm/layout/stack/VStack.js.map +1 -0
  26. package/esm/layout/stack/index.d.ts +3 -0
  27. package/esm/layout/stack/index.js +4 -0
  28. package/esm/layout/stack/index.js.map +1 -0
  29. package/esm/layout/utilities/css.d.ts +10 -0
  30. package/esm/layout/utilities/css.js +14 -0
  31. package/esm/layout/utilities/css.js.map +1 -0
  32. package/esm/table/ExpandableRow.d.ts +6 -1
  33. package/esm/table/ExpandableRow.js +20 -8
  34. package/esm/table/ExpandableRow.js.map +1 -1
  35. package/package.json +2 -2
  36. package/src/index.ts +1 -0
  37. package/src/layout/stack/HStack.tsx +30 -0
  38. package/src/layout/stack/Spacer.tsx +15 -0
  39. package/src/layout/stack/Stack.tsx +76 -0
  40. package/src/layout/stack/VStack.tsx +30 -0
  41. package/src/layout/stack/index.ts +3 -0
  42. package/src/layout/stack/stack.stories.tsx +161 -0
  43. package/src/layout/utilities/css.ts +56 -0
  44. package/src/table/ExpandableRow.tsx +28 -8
  45. package/src/table/stories/table-expandable.stories.tsx +62 -1
package/esm/index.d.ts CHANGED
@@ -32,3 +32,4 @@ export * from "./toggle-group";
32
32
  export * from "./tooltip";
33
33
  export * from "./typography";
34
34
  export * from "./util";
35
+ export * from "./layout/stack";
package/esm/index.js CHANGED
@@ -32,4 +32,5 @@ export * from "./toggle-group";
32
32
  export * from "./tooltip";
33
33
  export * from "./typography";
34
34
  export * from "./util";
35
+ export * from "./layout/stack";
35
36
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { OverridableComponent } from "../../util/OverridableComponent";
2
+ import { StackProps } from "./Stack";
3
+ export type HStackProps = Omit<StackProps, "direction">;
4
+ /**
5
+ * Layout-primitive for horizontal flexbox
6
+ *
7
+ * @see [📝 Documentation](https://aksel.nav.no/komponenter/core/Stack)
8
+ * @see 🏷️ {@link HStackProps}
9
+ * @see [🤖 OverridableComponent](https://aksel.nav.no/grunnleggende/kode/overridablecomponent) support
10
+ *
11
+ * @example
12
+ * <HStack gap="8">
13
+ * <MyComponent />
14
+ * <MyComponent />
15
+ * </HStack>
16
+ *
17
+ * @example
18
+ * // Responsive gap
19
+ * <HStack gap={{xs: "2", md: "6"}}>
20
+ * <MyComponent />
21
+ * <MyComponent />
22
+ * </HStack>
23
+ */
24
+ export declare const HStack: OverridableComponent<HStackProps, HTMLDivElement>;
@@ -0,0 +1,26 @@
1
+ import React, { forwardRef } from "react";
2
+ import { Stack } from "./Stack";
3
+ /**
4
+ * Layout-primitive for horizontal flexbox
5
+ *
6
+ * @see [📝 Documentation](https://aksel.nav.no/komponenter/core/Stack)
7
+ * @see 🏷️ {@link HStackProps}
8
+ * @see [🤖 OverridableComponent](https://aksel.nav.no/grunnleggende/kode/overridablecomponent) support
9
+ *
10
+ * @example
11
+ * <HStack gap="8">
12
+ * <MyComponent />
13
+ * <MyComponent />
14
+ * </HStack>
15
+ *
16
+ * @example
17
+ * // Responsive gap
18
+ * <HStack gap={{xs: "2", md: "6"}}>
19
+ * <MyComponent />
20
+ * <MyComponent />
21
+ * </HStack>
22
+ */
23
+ export const HStack = forwardRef((props, ref) => {
24
+ return React.createElement(Stack, Object.assign({}, props, { ref: ref, direction: "row" }));
25
+ });
26
+ //# sourceMappingURL=HStack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HStack.js","sourceRoot":"","sources":["../../../src/layout/stack/HStack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAc,KAAK,EAAE,MAAM,SAAS,CAAC;AAI5C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,MAAM,GACjB,UAAU,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACxB,OAAO,oBAAC,KAAK,oBAAK,KAAK,IAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAC,KAAK,IAAG,CAAC;AACxD,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ /**
3
+ * Layout-primitive for auto-spacing between elements
4
+ *
5
+ * @see [📝 Documentation](https://aksel.nav.no/komponenter/core/Stack)
6
+ *
7
+ * @example
8
+ * <HStack gap="8">
9
+ * <MyComponent />
10
+ * <Spacer />
11
+ * <MyComponent />
12
+ * </HStack>
13
+ */
14
+ export declare const Spacer: () => React.JSX.Element;
@@ -0,0 +1,15 @@
1
+ import React from "react";
2
+ /**
3
+ * Layout-primitive for auto-spacing between elements
4
+ *
5
+ * @see [📝 Documentation](https://aksel.nav.no/komponenter/core/Stack)
6
+ *
7
+ * @example
8
+ * <HStack gap="8">
9
+ * <MyComponent />
10
+ * <Spacer />
11
+ * <MyComponent />
12
+ * </HStack>
13
+ */
14
+ export const Spacer = () => React.createElement("div", { className: "navds-stack__spacer" });
15
+ //# sourceMappingURL=Spacer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spacer.js","sourceRoot":"","sources":["../../../src/layout/stack/Spacer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,6BAAK,SAAS,EAAC,qBAAqB,GAAG,CAAC"}
@@ -0,0 +1,26 @@
1
+ import React, { HTMLAttributes } from "react";
2
+ import { OverridableComponent } from "../../util/OverridableComponent";
3
+ import { ResponsiveProp, SpacingScale } from "../utilities/css";
4
+ export interface StackProps extends HTMLAttributes<HTMLDivElement> {
5
+ children: React.ReactNode;
6
+ /**
7
+ * Justify-content
8
+ */
9
+ justify?: "start" | "center" | "end" | "space-around" | "space-between" | "space-evenly";
10
+ /**
11
+ * Align-items
12
+ */
13
+ align?: "start" | "center" | "end" | "baseline" | "stretch";
14
+ /**
15
+ * flex-wrap
16
+ */
17
+ wrap?: boolean;
18
+ /**
19
+ * @example
20
+ * gap='4'
21
+ * gap={{xs: '2', sm: '3', md: '4', lg: '5', xl: '6'}}
22
+ */
23
+ gap?: ResponsiveProp<SpacingScale>;
24
+ direction: "row" | "column";
25
+ }
26
+ export declare const Stack: OverridableComponent<StackProps, HTMLDivElement>;
@@ -0,0 +1,23 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import cl from "clsx";
13
+ import React, { forwardRef } from "react";
14
+ import { getResponsiveProps, } from "../utilities/css";
15
+ export const Stack = forwardRef((_a, ref) => {
16
+ var { as: Component = "div", className, align, justify, wrap = true, gap, style: _style, direction } = _a, rest = __rest(_a, ["as", "className", "align", "justify", "wrap", "gap", "style", "direction"]);
17
+ const style = Object.assign(Object.assign({ "--ac-stack-direction": direction, "--ac-stack-align": align, "--ac-stack-justify": justify, "--ac-stack-wrap": wrap ? "wrap" : "nowrap" }, getResponsiveProps(`stack`, "gap", "spacing", gap)), _style);
18
+ return (React.createElement(Component, Object.assign({}, rest, { ref: ref, style: style, className: cl("navds-stack", className, {
19
+ "navds-vstack": direction === "column",
20
+ "navds-hstack": direction === "row",
21
+ }) })));
22
+ });
23
+ //# sourceMappingURL=Stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stack.js","sourceRoot":"","sources":["../../../src/layout/stack/Stack.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,KAAK,EAAE,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAC;AAE1D,OAAO,EACL,kBAAkB,GAGnB,MAAM,kBAAkB,CAAC;AA+B1B,MAAM,CAAC,MAAM,KAAK,GAChB,UAAU,CACR,CACE,EAUC,EACD,GAAG,EACH,EAAE;QAZF,EACE,EAAE,EAAE,SAAS,GAAG,KAAK,EACrB,SAAS,EACT,KAAK,EACL,OAAO,EACP,IAAI,GAAG,IAAI,EACX,GAAG,EACH,KAAK,EAAE,MAAM,EACb,SAAS,OAEV,EADI,IAAI,cATT,4EAUC,CADQ;IAIT,MAAM,KAAK,GAAG,8BACZ,sBAAsB,EAAE,SAAS,EACjC,kBAAkB,EAAE,KAAK,EACzB,oBAAoB,EAAE,OAAO,EAC7B,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,IACxC,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,GAClD,MAAM,CACa,CAAC;IAEzB,OAAO,CACL,oBAAC,SAAS,oBACJ,IAAI,IACR,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE;YACtC,cAAc,EAAE,SAAS,KAAK,QAAQ;YACtC,cAAc,EAAE,SAAS,KAAK,KAAK;SACpC,CAAC,IACF,CACH,CAAC;AACJ,CAAC,CACF,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { OverridableComponent } from "../../util/OverridableComponent";
2
+ import { StackProps } from "./Stack";
3
+ export type VStackProps = Omit<StackProps, "direction" | "wrap">;
4
+ /**
5
+ * Layout-primitive for vetical flexbox
6
+ *
7
+ * @see [📝 Documentation](https://aksel.nav.no/komponenter/core/Stack)
8
+ * @see 🏷️ {@link VStackProps}
9
+ * @see [🤖 OverridableComponent](https://aksel.nav.no/grunnleggende/kode/overridablecomponent) support
10
+ *
11
+ * @example
12
+ * <VStack gap="8">
13
+ * <MyComponent />
14
+ * <MyComponent />
15
+ * </VStack>
16
+ *
17
+ * @example
18
+ * // Responsive gap
19
+ * <VStack gap={{xs: "2", md: "6"}}>
20
+ * <MyComponent />
21
+ * <MyComponent />
22
+ * </VStack>
23
+ */
24
+ export declare const VStack: OverridableComponent<VStackProps, HTMLDivElement>;
@@ -0,0 +1,26 @@
1
+ import React, { forwardRef } from "react";
2
+ import { Stack } from "./Stack";
3
+ /**
4
+ * Layout-primitive for vetical flexbox
5
+ *
6
+ * @see [📝 Documentation](https://aksel.nav.no/komponenter/core/Stack)
7
+ * @see 🏷️ {@link VStackProps}
8
+ * @see [🤖 OverridableComponent](https://aksel.nav.no/grunnleggende/kode/overridablecomponent) support
9
+ *
10
+ * @example
11
+ * <VStack gap="8">
12
+ * <MyComponent />
13
+ * <MyComponent />
14
+ * </VStack>
15
+ *
16
+ * @example
17
+ * // Responsive gap
18
+ * <VStack gap={{xs: "2", md: "6"}}>
19
+ * <MyComponent />
20
+ * <MyComponent />
21
+ * </VStack>
22
+ */
23
+ export const VStack = forwardRef((props, ref) => {
24
+ return React.createElement(Stack, Object.assign({}, props, { ref: ref, direction: "column", wrap: false }));
25
+ });
26
+ //# sourceMappingURL=VStack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VStack.js","sourceRoot":"","sources":["../../../src/layout/stack/VStack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAc,KAAK,EAAE,MAAM,SAAS,CAAC;AAI5C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,MAAM,GACjB,UAAU,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACxB,OAAO,oBAAC,KAAK,oBAAK,KAAK,IAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAC,QAAQ,EAAC,IAAI,EAAE,KAAK,IAAI,CAAC;AACxE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { HStack, type HStackProps } from "./HStack";
2
+ export { VStack, type VStackProps } from "./VStack";
3
+ export { Spacer } from "./Spacer";
@@ -0,0 +1,4 @@
1
+ export { HStack } from "./HStack";
2
+ export { VStack } from "./VStack";
3
+ export { Spacer } from "./Spacer";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/layout/stack/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAoB,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,MAAM,EAAoB,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,10 @@
1
+ export type BreakpointsAlias = "xs" | "sm" | "md" | "lg" | "xl";
2
+ export type SpacingScale = "0" | "05" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12" | "14" | "16" | "18" | "20" | "24" | "32";
3
+ export type ResponsiveProp<T> = T | {
4
+ [Breakpoint in BreakpointsAlias]?: T;
5
+ };
6
+ export declare function getResponsiveProps(componentName: string, componentProp: string, tokenSubgroup: string, responsiveProp?: string | {
7
+ [Breakpoint in BreakpointsAlias]?: string;
8
+ }): {
9
+ [x: string]: string;
10
+ };
@@ -0,0 +1,14 @@
1
+ export function getResponsiveProps(componentName, componentProp, tokenSubgroup, responsiveProp) {
2
+ if (!responsiveProp)
3
+ return {};
4
+ if (typeof responsiveProp === "string") {
5
+ return {
6
+ [`--ac-${componentName}-${componentProp}-xs`]: `var(--a-${tokenSubgroup}-${responsiveProp})`,
7
+ };
8
+ }
9
+ return Object.fromEntries(Object.entries(responsiveProp).map(([breakpointAlias, aliasOrScale]) => [
10
+ `--ac-${componentName}-${componentProp}-${breakpointAlias}`,
11
+ `var(--a-${tokenSubgroup}-${aliasOrScale})`,
12
+ ]));
13
+ }
14
+ //# sourceMappingURL=css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.js","sourceRoot":"","sources":["../../../src/layout/utilities/css.ts"],"names":[],"mappings":"AA8BA,MAAM,UAAU,kBAAkB,CAChC,aAAqB,EACrB,aAAqB,EACrB,aAAqB,EACrB,cAKK;IAEL,IAAI,CAAC,cAAc;QAAE,OAAO,EAAE,CAAC;IAE/B,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;QACtC,OAAO;YACL,CAAC,QAAQ,aAAa,IAAI,aAAa,KAAK,CAAC,EAAE,WAAW,aAAa,IAAI,cAAc,GAAG;SAC7F,CAAC;KACH;IAED,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC;QACtE,QAAQ,aAAa,IAAI,aAAa,IAAI,eAAe,EAAE;QAC3D,WAAW,aAAa,IAAI,YAAY,GAAG;KAC5C,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -25,10 +25,15 @@ export interface ExpandableRowProps extends Omit<RowProps, "content"> {
25
25
  */
26
26
  onOpenChange?: (open: boolean) => void;
27
27
  /**
28
- * Disable expansio
28
+ * Disable expansion. shadeOnHover will not be visible.
29
29
  * @default false
30
30
  */
31
31
  expansionDisabled?: boolean;
32
+ /**
33
+ * Makes the whole row clickable
34
+ * @default false
35
+ */
36
+ expandOnRowClick?: boolean;
32
37
  /**
33
38
  * The width of the expanded row's internal cell
34
39
  * @default 999
@@ -17,23 +17,35 @@ import DataCell from "./DataCell";
17
17
  import Row from "./Row";
18
18
  import { ChevronDownIcon } from "@navikt/aksel-icons";
19
19
  export const ExpandableRow = forwardRef((_a, ref) => {
20
- var { className, children, content, togglePlacement = "left", defaultOpen = false, open, onOpenChange, expansionDisabled = false, colSpan = 999 } = _a, rest = __rest(_a, ["className", "children", "content", "togglePlacement", "defaultOpen", "open", "onOpenChange", "expansionDisabled", "colSpan"]);
20
+ var { className, children, content, togglePlacement = "left", defaultOpen = false, open, onOpenChange, expansionDisabled = false, expandOnRowClick = false, colSpan = 999 } = _a, rest = __rest(_a, ["className", "children", "content", "togglePlacement", "defaultOpen", "open", "onOpenChange", "expansionDisabled", "expandOnRowClick", "colSpan"]);
21
21
  const [internalOpen, setInternalOpen] = useState(defaultOpen);
22
22
  const id = useId();
23
23
  const isOpen = open !== null && open !== void 0 ? open : internalOpen;
24
+ const expansionHandler = (e) => {
25
+ onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(!isOpen);
26
+ if (open === undefined) {
27
+ setInternalOpen((open) => !open);
28
+ }
29
+ e.stopPropagation();
30
+ };
31
+ const onRowClick = (e) => {
32
+ if (e.target.nodeName === "TD" || e.target.nodeName === "TH") {
33
+ expansionHandler(e);
34
+ }
35
+ };
24
36
  return (React.createElement(React.Fragment, null,
25
37
  React.createElement(Row, Object.assign({}, rest, { ref: ref, className: cl("navds-table__expandable-row", className, {
26
38
  "navds-table__expandable-row--open": isOpen,
27
- }) }),
39
+ "navds-table__expandable-row--expansion-disabled": expansionDisabled,
40
+ }), onClick: (e) => {
41
+ var _a;
42
+ !expansionDisabled && expandOnRowClick && onRowClick(e);
43
+ (_a = rest === null || rest === void 0 ? void 0 : rest.onClick) === null || _a === void 0 ? void 0 : _a.call(rest, e);
44
+ } }),
28
45
  togglePlacement === "right" && children,
29
46
  React.createElement(DataCell, { className: cl("navds-table__toggle-expand-cell", {
30
47
  "navds-table__toggle-expand-cell--open": isOpen,
31
- }) }, !expansionDisabled && (React.createElement("button", { type: "button", className: "navds-table__toggle-expand-button", "aria-controls": id, "aria-expanded": isOpen, onClick: () => {
32
- onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(!isOpen);
33
- if (open === undefined) {
34
- setInternalOpen((open) => !open);
35
- }
36
- } },
48
+ }) }, !expansionDisabled && (React.createElement("button", { type: "button", className: "navds-table__toggle-expand-button", "aria-controls": id, "aria-expanded": isOpen, onClick: expansionHandler },
37
49
  React.createElement(ChevronDownIcon, { className: "navds-table__expandable-icon", title: isOpen ? "Vis mindre" : "Vis mer" })))),
38
50
  togglePlacement === "left" && children),
39
51
  React.createElement("tr", { className: "navds-table__expanded-row", "aria-hidden": !isOpen, id: id },
@@ -1 +1 @@
1
- {"version":3,"file":"ExpandableRow.js","sourceRoot":"","sources":["../../src/table/ExpandableRow.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;AAC3B,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,GAAiB,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA2CtD,MAAM,CAAC,MAAM,aAAa,GAAsB,UAAU,CACxD,CACE,EAWC,EACD,GAAG,EACH,EAAE;QAbF,EACE,SAAS,EACT,QAAQ,EACR,OAAO,EACP,eAAe,GAAG,MAAM,EACxB,WAAW,GAAG,KAAK,EACnB,IAAI,EACJ,YAAY,EACZ,iBAAiB,GAAG,KAAK,EACzB,OAAO,GAAG,GAAG,OAEd,EADI,IAAI,cAVT,8HAWC,CADQ;IAIT,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAU,WAAW,CAAC,CAAC;IACvE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IAEnB,MAAM,MAAM,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,YAAY,CAAC;IAEpC,OAAO,CACL;QACE,oBAAC,GAAG,oBACE,IAAI,IACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,6BAA6B,EAAE,SAAS,EAAE;gBACtD,mCAAmC,EAAE,MAAM;aAC5C,CAAC;YAED,eAAe,KAAK,OAAO,IAAI,QAAQ;YACxC,oBAAC,QAAQ,IACP,SAAS,EAAE,EAAE,CAAC,iCAAiC,EAAE;oBAC/C,uCAAuC,EAAE,MAAM;iBAChD,CAAC,IAED,CAAC,iBAAiB,IAAI,CACrB,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mCAAmC,mBAC9B,EAAE,mBACF,MAAM,EACrB,OAAO,EAAE,GAAG,EAAE;oBACZ,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAG,CAAC,MAAM,CAAC,CAAC;oBACxB,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;qBAClC;gBACH,CAAC;gBAED,oBAAC,eAAe,IACd,SAAS,EAAC,8BAA8B,EACxC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,GACxC,CACK,CACV,CACQ;YACV,eAAe,KAAK,MAAM,IAAI,QAAQ,CACnC;QACN,4BAAI,SAAS,EAAC,2BAA2B,iBAAc,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;YACpE,4BAAI,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,gCAAgC;gBAC9D,oBAAC,aAAa,IACZ,SAAS,EAAC,oCAAoC,EAC9C,cAAc,EAAC,mCAAmC,EAClD,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAC3B,QAAQ,EAAE,GAAG,IAEZ,OAAO,CACM,CACb,CACF,CACJ,CACJ,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"ExpandableRow.js","sourceRoot":"","sources":["../../src/table/ExpandableRow.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@navikt/ds-react",
3
- "version": "4.7.4",
3
+ "version": "4.9.0",
4
4
  "description": "Aksel react-components for NAV designsystem",
5
5
  "author": "Aksel | NAV designsystem team",
6
6
  "license": "MIT",
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@floating-ui/react": "0.24.1",
41
- "@navikt/aksel-icons": "^4.7.4",
41
+ "@navikt/aksel-icons": "^4.9.0",
42
42
  "@radix-ui/react-tabs": "1.0.0",
43
43
  "@radix-ui/react-toggle-group": "1.0.0",
44
44
  "clsx": "^1.2.1",
package/src/index.ts CHANGED
@@ -32,3 +32,4 @@ export * from "./toggle-group";
32
32
  export * from "./tooltip";
33
33
  export * from "./typography";
34
34
  export * from "./util";
35
+ export * from "./layout/stack";
@@ -0,0 +1,30 @@
1
+ import React, { forwardRef } from "react";
2
+ import { OverridableComponent } from "../../util/OverridableComponent";
3
+ import { StackProps, Stack } from "./Stack";
4
+
5
+ export type HStackProps = Omit<StackProps, "direction">;
6
+
7
+ /**
8
+ * Layout-primitive for horizontal flexbox
9
+ *
10
+ * @see [📝 Documentation](https://aksel.nav.no/komponenter/core/Stack)
11
+ * @see 🏷️ {@link HStackProps}
12
+ * @see [🤖 OverridableComponent](https://aksel.nav.no/grunnleggende/kode/overridablecomponent) support
13
+ *
14
+ * @example
15
+ * <HStack gap="8">
16
+ * <MyComponent />
17
+ * <MyComponent />
18
+ * </HStack>
19
+ *
20
+ * @example
21
+ * // Responsive gap
22
+ * <HStack gap={{xs: "2", md: "6"}}>
23
+ * <MyComponent />
24
+ * <MyComponent />
25
+ * </HStack>
26
+ */
27
+ export const HStack: OverridableComponent<HStackProps, HTMLDivElement> =
28
+ forwardRef((props, ref) => {
29
+ return <Stack {...props} ref={ref} direction="row" />;
30
+ });
@@ -0,0 +1,15 @@
1
+ import React from "react";
2
+
3
+ /**
4
+ * Layout-primitive for auto-spacing between elements
5
+ *
6
+ * @see [📝 Documentation](https://aksel.nav.no/komponenter/core/Stack)
7
+ *
8
+ * @example
9
+ * <HStack gap="8">
10
+ * <MyComponent />
11
+ * <Spacer />
12
+ * <MyComponent />
13
+ * </HStack>
14
+ */
15
+ export const Spacer = () => <div className="navds-stack__spacer" />;
@@ -0,0 +1,76 @@
1
+ import cl from "clsx";
2
+ import React, { forwardRef, HTMLAttributes } from "react";
3
+ import { OverridableComponent } from "../../util/OverridableComponent";
4
+ import {
5
+ getResponsiveProps,
6
+ ResponsiveProp,
7
+ SpacingScale,
8
+ } from "../utilities/css";
9
+
10
+ export interface StackProps extends HTMLAttributes<HTMLDivElement> {
11
+ children: React.ReactNode;
12
+ /**
13
+ * Justify-content
14
+ */
15
+ justify?:
16
+ | "start"
17
+ | "center"
18
+ | "end"
19
+ | "space-around"
20
+ | "space-between"
21
+ | "space-evenly";
22
+ /**
23
+ * Align-items
24
+ */
25
+ align?: "start" | "center" | "end" | "baseline" | "stretch";
26
+ /**
27
+ * flex-wrap
28
+ */
29
+ wrap?: boolean;
30
+ /**
31
+ * @example
32
+ * gap='4'
33
+ * gap={{xs: '2', sm: '3', md: '4', lg: '5', xl: '6'}}
34
+ */
35
+ gap?: ResponsiveProp<SpacingScale>;
36
+ direction: "row" | "column";
37
+ }
38
+
39
+ export const Stack: OverridableComponent<StackProps, HTMLDivElement> =
40
+ forwardRef(
41
+ (
42
+ {
43
+ as: Component = "div",
44
+ className,
45
+ align,
46
+ justify,
47
+ wrap = true,
48
+ gap,
49
+ style: _style,
50
+ direction,
51
+ ...rest
52
+ },
53
+ ref
54
+ ) => {
55
+ const style = {
56
+ "--ac-stack-direction": direction,
57
+ "--ac-stack-align": align,
58
+ "--ac-stack-justify": justify,
59
+ "--ac-stack-wrap": wrap ? "wrap" : "nowrap",
60
+ ...getResponsiveProps(`stack`, "gap", "spacing", gap),
61
+ ..._style,
62
+ } as React.CSSProperties;
63
+
64
+ return (
65
+ <Component
66
+ {...rest}
67
+ ref={ref}
68
+ style={style}
69
+ className={cl("navds-stack", className, {
70
+ "navds-vstack": direction === "column",
71
+ "navds-hstack": direction === "row",
72
+ })}
73
+ />
74
+ );
75
+ }
76
+ );
@@ -0,0 +1,30 @@
1
+ import React, { forwardRef } from "react";
2
+ import { OverridableComponent } from "../../util/OverridableComponent";
3
+ import { StackProps, Stack } from "./Stack";
4
+
5
+ export type VStackProps = Omit<StackProps, "direction" | "wrap">;
6
+
7
+ /**
8
+ * Layout-primitive for vetical flexbox
9
+ *
10
+ * @see [📝 Documentation](https://aksel.nav.no/komponenter/core/Stack)
11
+ * @see 🏷️ {@link VStackProps}
12
+ * @see [🤖 OverridableComponent](https://aksel.nav.no/grunnleggende/kode/overridablecomponent) support
13
+ *
14
+ * @example
15
+ * <VStack gap="8">
16
+ * <MyComponent />
17
+ * <MyComponent />
18
+ * </VStack>
19
+ *
20
+ * @example
21
+ * // Responsive gap
22
+ * <VStack gap={{xs: "2", md: "6"}}>
23
+ * <MyComponent />
24
+ * <MyComponent />
25
+ * </VStack>
26
+ */
27
+ export const VStack: OverridableComponent<VStackProps, HTMLDivElement> =
28
+ forwardRef((props, ref) => {
29
+ return <Stack {...props} ref={ref} direction="column" wrap={false} />;
30
+ });
@@ -0,0 +1,3 @@
1
+ export { HStack, type HStackProps } from "./HStack";
2
+ export { VStack, type VStackProps } from "./VStack";
3
+ export { Spacer } from "./Spacer";