@navikt/ds-react 6.6.0 → 6.6.1

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 (48) hide show
  1. package/cjs/collapsible/Collapsible.context.d.ts +48 -0
  2. package/cjs/collapsible/Collapsible.context.js +10 -0
  3. package/cjs/collapsible/Collapsible.context.js.map +1 -0
  4. package/cjs/collapsible/Collapsible.d.ts +48 -0
  5. package/cjs/collapsible/Collapsible.js +91 -0
  6. package/cjs/collapsible/Collapsible.js.map +1 -0
  7. package/cjs/collapsible/Collapsible.types.d.ts +19 -0
  8. package/cjs/collapsible/Collapsible.types.js +3 -0
  9. package/cjs/collapsible/Collapsible.types.js.map +1 -0
  10. package/cjs/collapsible/index.d.ts +3 -0
  11. package/cjs/collapsible/index.js +14 -0
  12. package/cjs/collapsible/index.js.map +1 -0
  13. package/cjs/collapsible/parts/Collapsible.Content.d.ts +10 -0
  14. package/cjs/collapsible/parts/Collapsible.Content.js +48 -0
  15. package/cjs/collapsible/parts/Collapsible.Content.js.map +1 -0
  16. package/cjs/collapsible/parts/Collapsible.Trigger.d.ts +10 -0
  17. package/cjs/collapsible/parts/Collapsible.Trigger.js +49 -0
  18. package/cjs/collapsible/parts/Collapsible.Trigger.js.map +1 -0
  19. package/cjs/layout/stack/Spacer.js +1 -1
  20. package/cjs/layout/stack/Spacer.js.map +1 -1
  21. package/esm/collapsible/Collapsible.context.d.ts +48 -0
  22. package/esm/collapsible/Collapsible.context.js +6 -0
  23. package/esm/collapsible/Collapsible.context.js.map +1 -0
  24. package/esm/collapsible/Collapsible.d.ts +48 -0
  25. package/esm/collapsible/Collapsible.js +62 -0
  26. package/esm/collapsible/Collapsible.js.map +1 -0
  27. package/esm/collapsible/Collapsible.types.d.ts +19 -0
  28. package/esm/collapsible/Collapsible.types.js +2 -0
  29. package/esm/collapsible/Collapsible.types.js.map +1 -0
  30. package/esm/collapsible/index.d.ts +3 -0
  31. package/esm/collapsible/index.js +5 -0
  32. package/esm/collapsible/index.js.map +1 -0
  33. package/esm/collapsible/parts/Collapsible.Content.d.ts +10 -0
  34. package/esm/collapsible/parts/Collapsible.Content.js +22 -0
  35. package/esm/collapsible/parts/Collapsible.Content.js.map +1 -0
  36. package/esm/collapsible/parts/Collapsible.Trigger.d.ts +10 -0
  37. package/esm/collapsible/parts/Collapsible.Trigger.js +23 -0
  38. package/esm/collapsible/parts/Collapsible.Trigger.js.map +1 -0
  39. package/esm/layout/stack/Spacer.js +1 -1
  40. package/esm/layout/stack/Spacer.js.map +1 -1
  41. package/package.json +3 -3
  42. package/src/collapsible/Collapsible.context.tsx +32 -0
  43. package/src/collapsible/Collapsible.tsx +100 -0
  44. package/src/collapsible/Collapsible.types.ts +19 -0
  45. package/src/collapsible/index.ts +10 -0
  46. package/src/collapsible/parts/Collapsible.Content.tsx +39 -0
  47. package/src/collapsible/parts/Collapsible.Trigger.tsx +42 -0
  48. package/src/layout/stack/Spacer.tsx +1 -1
@@ -0,0 +1,48 @@
1
+ /// <reference types="react" />
2
+ import { CollapsibleBaseProps } from "./Collapsible.types";
3
+ export type CollapsibleContextProps = Pick<CollapsibleBaseProps, "open"> & {
4
+ /**
5
+ * Allows connecting trigger to content
6
+ */
7
+ contentId: string;
8
+ /**
9
+ * Allows connecting content to trigger
10
+ */
11
+ triggerId: string;
12
+ /**
13
+ * Callback for toggling open state
14
+ */
15
+ onOpenToggle: () => void;
16
+ /**
17
+ * Allows always rendering children in content when closed
18
+ */
19
+ lazy: boolean;
20
+ /**
21
+ * Utility for getting state as string. Usefull for data-attributes.
22
+ */
23
+ state: "open" | "closed";
24
+ };
25
+ export declare const CollapsibleContextProvider: import("react").ForwardRefExoticComponent<Pick<CollapsibleBaseProps, "open"> & {
26
+ /**
27
+ * Allows connecting trigger to content
28
+ */
29
+ contentId: string;
30
+ /**
31
+ * Allows connecting content to trigger
32
+ */
33
+ triggerId: string;
34
+ /**
35
+ * Callback for toggling open state
36
+ */
37
+ onOpenToggle: () => void;
38
+ /**
39
+ * Allows always rendering children in content when closed
40
+ */
41
+ lazy: boolean;
42
+ /**
43
+ * Utility for getting state as string. Usefull for data-attributes.
44
+ */
45
+ state: "open" | "closed";
46
+ } & {
47
+ children: import("react").ReactNode;
48
+ } & import("react").RefAttributes<unknown>>, useCollapsibleContext: <S extends boolean = true>(strict?: S) => S extends true ? CollapsibleContextProps : CollapsibleContextProps | undefined;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.useCollapsibleContext = exports.CollapsibleContextProvider = void 0;
5
+ const create_context_1 = require("../util/create-context");
6
+ _a = (0, create_context_1.createContext)({
7
+ name: "CollapsibleContext",
8
+ errorMessage: "<Collapsible.Trigger> and <Collapsible.Content> must be used within a <Collapsible>",
9
+ }), exports.CollapsibleContextProvider = _a[0], exports.useCollapsibleContext = _a[1];
10
+ //# sourceMappingURL=Collapsible.context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.context.js","sourceRoot":"","sources":["../../src/collapsible/Collapsible.context.tsx"],"names":[],"mappings":";;;;AAAA,2DAAuD;AA0B1C,KACX,IAAA,8BAAa,EAA0B;IACrC,IAAI,EAAE,oBAAoB;IAC1B,YAAY,EACV,qFAAqF;CACxF,CAAC,EALU,kCAA0B,UAAE,6BAAqB,SAK1D"}
@@ -0,0 +1,48 @@
1
+ import React from "react";
2
+ import { CollapsibleBaseProps } from "./Collapsible.types";
3
+ import CollapsibleContent from "./parts/Collapsible.Content";
4
+ import CollapsibleTrigger from "./parts/Collapsible.Trigger";
5
+ export interface CollapsibleProps extends CollapsibleBaseProps, React.HTMLAttributes<HTMLDivElement> {
6
+ }
7
+ interface CollapsibleComponent extends React.ForwardRefExoticComponent<CollapsibleProps & React.RefAttributes<HTMLDivElement>> {
8
+ /**
9
+ * @see 🏷️ {@link CollapsibleTriggerProps}
10
+ */
11
+ Trigger: typeof CollapsibleTrigger;
12
+ /**
13
+ * @see 🏷️ {@link CollapsibleContentProps}
14
+ */
15
+ Content: typeof CollapsibleContent;
16
+ }
17
+ /**
18
+ * Collapsible is a component that allows you to toggle visibility of content.
19
+ *
20
+ * @example
21
+ * ```jsx
22
+ * <Collapsible>
23
+ * <Collapsible.Trigger>Trigger</Collapsible.Trigger>
24
+ * <Collapsible.Content>
25
+ * Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae
26
+ * corporis maxime aliquam, voluptates nobis numquam, non odit optio
27
+ * architecto iure laborum possimus! Quibusdam sit ullam, consequatur sunt
28
+ * tempore optio aliquid!
29
+ * </Collapsible.Content>
30
+ * </Collapsible>
31
+ * ```
32
+ *
33
+ * @example With asChild
34
+ * ```jsx
35
+ * <Collapsible>
36
+ * <Collapsible.Trigger asChild>
37
+ * <Button>Button</Button>
38
+ * </Collapsible.Trigger>
39
+ * <Collapsible.Content asChild>
40
+ * <Box padding="4" background="surface-alt-3-subtle">
41
+ * <div>lorem ipsum</div>
42
+ * </Box>
43
+ * </Collapsible.Content>
44
+ * </Collapsible>
45
+ * ```
46
+ */
47
+ export declare const Collapsible: CollapsibleComponent;
48
+ export default Collapsible;
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __rest = (this && this.__rest) || function (s, e) {
26
+ var t = {};
27
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
28
+ t[p] = s[p];
29
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
30
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
31
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
32
+ t[p[i]] = s[p[i]];
33
+ }
34
+ return t;
35
+ };
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.Collapsible = void 0;
41
+ const react_1 = __importStar(require("react"));
42
+ const hooks_1 = require("../util/hooks");
43
+ const Collapsible_context_1 = require("./Collapsible.context");
44
+ const Collapsible_Content_1 = __importDefault(require("./parts/Collapsible.Content"));
45
+ const Collapsible_Trigger_1 = __importDefault(require("./parts/Collapsible.Trigger"));
46
+ /**
47
+ * Collapsible is a component that allows you to toggle visibility of content.
48
+ *
49
+ * @example
50
+ * ```jsx
51
+ * <Collapsible>
52
+ * <Collapsible.Trigger>Trigger</Collapsible.Trigger>
53
+ * <Collapsible.Content>
54
+ * Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae
55
+ * corporis maxime aliquam, voluptates nobis numquam, non odit optio
56
+ * architecto iure laborum possimus! Quibusdam sit ullam, consequatur sunt
57
+ * tempore optio aliquid!
58
+ * </Collapsible.Content>
59
+ * </Collapsible>
60
+ * ```
61
+ *
62
+ * @example With asChild
63
+ * ```jsx
64
+ * <Collapsible>
65
+ * <Collapsible.Trigger asChild>
66
+ * <Button>Button</Button>
67
+ * </Collapsible.Trigger>
68
+ * <Collapsible.Content asChild>
69
+ * <Box padding="4" background="surface-alt-3-subtle">
70
+ * <div>lorem ipsum</div>
71
+ * </Box>
72
+ * </Collapsible.Content>
73
+ * </Collapsible>
74
+ * ```
75
+ */
76
+ exports.Collapsible = (0, react_1.forwardRef)((_a, ref) => {
77
+ var { children, open, defaultOpen = false, onOpenChange, lazy = false } = _a, rest = __rest(_a, ["children", "open", "defaultOpen", "onOpenChange", "lazy"]);
78
+ const [_open, setOpen] = (0, hooks_1.useControllableState)({
79
+ value: open,
80
+ defaultValue: defaultOpen,
81
+ onChange: onOpenChange,
82
+ });
83
+ const internalId = (0, hooks_1.useId)();
84
+ const state = _open ? "open" : "closed";
85
+ return (react_1.default.createElement(Collapsible_context_1.CollapsibleContextProvider, { open: _open, onOpenToggle: (0, react_1.useCallback)(() => setOpen((prevOpen) => !prevOpen), [setOpen]), contentId: `collapsible-content-${internalId}`, triggerId: `collapsible-trigger-${internalId}`, lazy: lazy, state: state },
86
+ react_1.default.createElement("div", Object.assign({ ref: ref, "data-state": state }, rest), children)));
87
+ });
88
+ exports.Collapsible.Trigger = Collapsible_Trigger_1.default;
89
+ exports.Collapsible.Content = Collapsible_Content_1.default;
90
+ exports.default = exports.Collapsible;
91
+ //# sourceMappingURL=Collapsible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.js","sourceRoot":"","sources":["../../src/collapsible/Collapsible.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAuD;AACvD,yCAA4D;AAC5D,+DAAmE;AAEnE,sFAA6D;AAC7D,sFAA6D;AAoB7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACU,QAAA,WAAW,GAAG,IAAA,kBAAU,EACnC,CACE,EAOC,EACD,GAAG,EACH,EAAE;QATF,EACE,QAAQ,EACR,IAAI,EACJ,WAAW,GAAG,KAAK,EACnB,YAAY,EACZ,IAAI,GAAG,KAAK,OAEb,EADI,IAAI,cANT,2DAOC,CADQ;IAIT,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,IAAA,4BAAoB,EAAC;QAC5C,KAAK,EAAE,IAAI;QACX,YAAY,EAAE,WAAW;QACzB,QAAQ,EAAE,YAAY;KACvB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,IAAA,aAAK,GAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;IAExC,OAAO,CACL,8BAAC,gDAA0B,IACzB,IAAI,EAAE,KAAK,EACX,YAAY,EAAE,IAAA,mBAAW,EACvB,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EACtC,CAAC,OAAO,CAAC,CACV,EACD,SAAS,EAAE,uBAAuB,UAAU,EAAE,EAC9C,SAAS,EAAE,uBAAuB,UAAU,EAAE,EAC9C,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK;QAEZ,qDAAK,GAAG,EAAE,GAAG,gBAAc,KAAK,IAAM,IAAI,GACvC,QAAQ,CACL,CACqB,CAC9B,CAAC;AACJ,CAAC,CACsB,CAAC;AAE1B,mBAAW,CAAC,OAAO,GAAG,6BAAkB,CAAC;AACzC,mBAAW,CAAC,OAAO,GAAG,6BAAkB,CAAC;AAEzC,kBAAe,mBAAW,CAAC"}
@@ -0,0 +1,19 @@
1
+ export interface CollapsibleBaseProps {
2
+ /**
3
+ * The open state of the collapsible when it is initially rendered. Use when you do not need to control its open state.
4
+ */
5
+ defaultOpen?: boolean;
6
+ /**
7
+ * The controlled open state of the collapsible. Must be used in conjunction with onOpenChange.
8
+ */
9
+ open?: boolean;
10
+ /**
11
+ * Event handler called when the open state of the collapsible changes.
12
+ */
13
+ onOpenChange?: (open: boolean) => void;
14
+ /**
15
+ * Render the collapsible content lazily. This means that the content will not be rendered until the collapsible is open.
16
+ * @default false
17
+ */
18
+ lazy?: boolean;
19
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Collapsible.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.types.js","sourceRoot":"","sources":["../../src/collapsible/Collapsible.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export { default as Collapsible, type CollapsibleProps } from "./Collapsible";
2
+ export { default as CollapsibleTrigger, type CollapsibleTriggerProps, } from "./parts/Collapsible.Trigger";
3
+ export { default as CollapsibleContent, type CollapsibleContentProps, } from "./parts/Collapsible.Content";
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ "use client";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.CollapsibleContent = exports.CollapsibleTrigger = exports.Collapsible = void 0;
8
+ var Collapsible_1 = require("./Collapsible");
9
+ Object.defineProperty(exports, "Collapsible", { enumerable: true, get: function () { return __importDefault(Collapsible_1).default; } });
10
+ var Collapsible_Trigger_1 = require("./parts/Collapsible.Trigger");
11
+ Object.defineProperty(exports, "CollapsibleTrigger", { enumerable: true, get: function () { return __importDefault(Collapsible_Trigger_1).default; } });
12
+ var Collapsible_Content_1 = require("./parts/Collapsible.Content");
13
+ Object.defineProperty(exports, "CollapsibleContent", { enumerable: true, get: function () { return __importDefault(Collapsible_Content_1).default; } });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collapsible/index.ts"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;AACb,6CAA8E;AAArE,2HAAA,OAAO,OAAe;AAC/B,mEAGqC;AAFnC,0IAAA,OAAO,OAAsB;AAG/B,mEAGqC;AAFnC,0IAAA,OAAO,OAAsB"}
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ export interface CollapsibleContentProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "hidden" | "aria-controls" | "id"> {
3
+ /**
4
+ * When true, will render element as its child. This merges classes, styles and event handlers.
5
+ * @default false
6
+ */
7
+ asChild?: boolean;
8
+ }
9
+ export declare const CollapsibleContent: React.ForwardRefExoticComponent<CollapsibleContentProps & React.RefAttributes<HTMLDivElement>>;
10
+ export default CollapsibleContent;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __rest = (this && this.__rest) || function (s, e) {
26
+ var t = {};
27
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
28
+ t[p] = s[p];
29
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
30
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
31
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
32
+ t[p[i]] = s[p[i]];
33
+ }
34
+ return t;
35
+ };
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.CollapsibleContent = void 0;
38
+ const react_1 = __importStar(require("react"));
39
+ const Slot_1 = require("../../util/Slot");
40
+ const Collapsible_context_1 = require("../Collapsible.context");
41
+ exports.CollapsibleContent = (0, react_1.forwardRef)((_a, ref) => {
42
+ var { children, asChild } = _a, rest = __rest(_a, ["children", "asChild"]);
43
+ const ctx = (0, Collapsible_context_1.useCollapsibleContext)();
44
+ const Comp = asChild ? Slot_1.Slot : "div";
45
+ return (react_1.default.createElement(Comp, Object.assign({ ref: ref }, rest, { "data-state": ctx.state, hidden: !ctx.open, "aria-controls": ctx.open ? ctx.triggerId : undefined, id: ctx.contentId }), ctx.lazy || ctx.open ? children : null));
46
+ });
47
+ exports.default = exports.CollapsibleContent;
48
+ //# sourceMappingURL=Collapsible.Content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.Content.js","sourceRoot":"","sources":["../../../src/collapsible/parts/Collapsible.Content.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA0C;AAC1C,0CAAuC;AACvC,gEAA+D;AAclD,QAAA,kBAAkB,GAAG,IAAA,kBAAU,EAG1C,CAAC,EAA8B,EAAE,GAAG,EAAE,EAAE;QAAvC,EAAE,QAAQ,EAAE,OAAO,OAAW,EAAN,IAAI,cAA5B,uBAA8B,CAAF;IAC7B,MAAM,GAAG,GAAG,IAAA,2CAAqB,GAAE,CAAC;IAEpC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,WAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAEpC,OAAO,CACL,8BAAC,IAAI,kBACH,GAAG,EAAE,GAAG,IACJ,IAAI,kBACI,GAAG,CAAC,KAAK,EACrB,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,mBACF,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACnD,EAAE,EAAE,GAAG,CAAC,SAAS,KAEhB,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAClC,CACR,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,kBAAe,0BAAkB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ export interface CollapsibleTriggerProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "id" | "aria-controls" | "aria-expanded"> {
3
+ /**
4
+ * When true, will render element as its child. This merges classes, styles and event handlers.
5
+ * @default false
6
+ */
7
+ asChild?: boolean;
8
+ }
9
+ export declare const CollapsibleTrigger: React.ForwardRefExoticComponent<CollapsibleTriggerProps & React.RefAttributes<HTMLButtonElement>>;
10
+ export default CollapsibleTrigger;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __rest = (this && this.__rest) || function (s, e) {
26
+ var t = {};
27
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
28
+ t[p] = s[p];
29
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
30
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
31
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
32
+ t[p[i]] = s[p[i]];
33
+ }
34
+ return t;
35
+ };
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.CollapsibleTrigger = void 0;
38
+ const react_1 = __importStar(require("react"));
39
+ const Slot_1 = require("../../util/Slot");
40
+ const composeEventHandlers_1 = require("../../util/composeEventHandlers");
41
+ const Collapsible_context_1 = require("../Collapsible.context");
42
+ exports.CollapsibleTrigger = (0, react_1.forwardRef)((_a, ref) => {
43
+ var { children, asChild, onClick } = _a, rest = __rest(_a, ["children", "asChild", "onClick"]);
44
+ const ctx = (0, Collapsible_context_1.useCollapsibleContext)();
45
+ const Comp = asChild ? Slot_1.Slot : "button";
46
+ return (react_1.default.createElement(Comp, Object.assign({ ref: ref, type: "button", "data-state": ctx.state, onClick: (0, composeEventHandlers_1.composeEventHandlers)(onClick, ctx.onOpenToggle) }, rest, { id: ctx.triggerId, "aria-controls": ctx.open ? ctx.contentId : undefined, "aria-expanded": ctx.open }), children));
47
+ });
48
+ exports.default = exports.CollapsibleTrigger;
49
+ //# sourceMappingURL=Collapsible.Trigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.Trigger.js","sourceRoot":"","sources":["../../../src/collapsible/parts/Collapsible.Trigger.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA0C;AAC1C,0CAAuC;AACvC,0EAAuE;AACvE,gEAA+D;AAclD,QAAA,kBAAkB,GAAG,IAAA,kBAAU,EAG1C,CAAC,EAAuC,EAAE,GAAG,EAAE,EAAE;QAAhD,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,OAAW,EAAN,IAAI,cAArC,kCAAuC,CAAF;IACtC,MAAM,GAAG,GAAG,IAAA,2CAAqB,GAAE,CAAC;IAEpC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,WAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEvC,OAAO,CACL,8BAAC,IAAI,kBACH,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,QAAQ,gBACD,GAAG,CAAC,KAAK,EACrB,OAAO,EAAE,IAAA,2CAAoB,EAAC,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,IACpD,IAAI,IACR,EAAE,EAAE,GAAG,CAAC,SAAS,mBACF,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,mBACpC,GAAG,CAAC,IAAI,KAEtB,QAAQ,CACJ,CACR,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,kBAAe,0BAAkB,CAAC"}
@@ -17,7 +17,7 @@ const react_1 = __importDefault(require("react"));
17
17
  * <MyComponent />
18
18
  * </HStack>
19
19
  */
20
- const Spacer = () => react_1.default.createElement("div", { className: "navds-stack__spacer" });
20
+ const Spacer = () => react_1.default.createElement("span", { className: "navds-stack__spacer" });
21
21
  exports.Spacer = Spacer;
22
22
  exports.default = exports.Spacer;
23
23
  //# sourceMappingURL=Spacer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Spacer.js","sourceRoot":"","sources":["../../../src/layout/stack/Spacer.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B;;;;;;;;;;;GAWG;AACI,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,uCAAK,SAAS,EAAC,qBAAqB,GAAG,CAAC;AAAvD,QAAA,MAAM,UAAiD;AAEpE,kBAAe,cAAM,CAAC"}
1
+ {"version":3,"file":"Spacer.js","sourceRoot":"","sources":["../../../src/layout/stack/Spacer.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B;;;;;;;;;;;GAWG;AACI,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,wCAAM,SAAS,EAAC,qBAAqB,GAAG,CAAC;AAAxD,QAAA,MAAM,UAAkD;AAErE,kBAAe,cAAM,CAAC"}
@@ -0,0 +1,48 @@
1
+ /// <reference types="react" />
2
+ import { CollapsibleBaseProps } from "./Collapsible.types.js";
3
+ export type CollapsibleContextProps = Pick<CollapsibleBaseProps, "open"> & {
4
+ /**
5
+ * Allows connecting trigger to content
6
+ */
7
+ contentId: string;
8
+ /**
9
+ * Allows connecting content to trigger
10
+ */
11
+ triggerId: string;
12
+ /**
13
+ * Callback for toggling open state
14
+ */
15
+ onOpenToggle: () => void;
16
+ /**
17
+ * Allows always rendering children in content when closed
18
+ */
19
+ lazy: boolean;
20
+ /**
21
+ * Utility for getting state as string. Usefull for data-attributes.
22
+ */
23
+ state: "open" | "closed";
24
+ };
25
+ export declare const CollapsibleContextProvider: import("react").ForwardRefExoticComponent<Pick<CollapsibleBaseProps, "open"> & {
26
+ /**
27
+ * Allows connecting trigger to content
28
+ */
29
+ contentId: string;
30
+ /**
31
+ * Allows connecting content to trigger
32
+ */
33
+ triggerId: string;
34
+ /**
35
+ * Callback for toggling open state
36
+ */
37
+ onOpenToggle: () => void;
38
+ /**
39
+ * Allows always rendering children in content when closed
40
+ */
41
+ lazy: boolean;
42
+ /**
43
+ * Utility for getting state as string. Usefull for data-attributes.
44
+ */
45
+ state: "open" | "closed";
46
+ } & {
47
+ children: import("react").ReactNode;
48
+ } & import("react").RefAttributes<unknown>>, useCollapsibleContext: <S extends boolean = true>(strict?: S) => S extends true ? CollapsibleContextProps : CollapsibleContextProps | undefined;
@@ -0,0 +1,6 @@
1
+ import { createContext } from "../util/create-context.js";
2
+ export const [CollapsibleContextProvider, useCollapsibleContext] = createContext({
3
+ name: "CollapsibleContext",
4
+ errorMessage: "<Collapsible.Trigger> and <Collapsible.Content> must be used within a <Collapsible>",
5
+ });
6
+ //# sourceMappingURL=Collapsible.context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.context.js","sourceRoot":"","sources":["../../src/collapsible/Collapsible.context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AA0BvD,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,qBAAqB,CAAC,GAC9D,aAAa,CAA0B;IACrC,IAAI,EAAE,oBAAoB;IAC1B,YAAY,EACV,qFAAqF;CACxF,CAAC,CAAC"}
@@ -0,0 +1,48 @@
1
+ import React from "react";
2
+ import { CollapsibleBaseProps } from "./Collapsible.types.js";
3
+ import CollapsibleContent from "./parts/Collapsible.Content.js";
4
+ import CollapsibleTrigger from "./parts/Collapsible.Trigger.js";
5
+ export interface CollapsibleProps extends CollapsibleBaseProps, React.HTMLAttributes<HTMLDivElement> {
6
+ }
7
+ interface CollapsibleComponent extends React.ForwardRefExoticComponent<CollapsibleProps & React.RefAttributes<HTMLDivElement>> {
8
+ /**
9
+ * @see 🏷️ {@link CollapsibleTriggerProps}
10
+ */
11
+ Trigger: typeof CollapsibleTrigger;
12
+ /**
13
+ * @see 🏷️ {@link CollapsibleContentProps}
14
+ */
15
+ Content: typeof CollapsibleContent;
16
+ }
17
+ /**
18
+ * Collapsible is a component that allows you to toggle visibility of content.
19
+ *
20
+ * @example
21
+ * ```jsx
22
+ * <Collapsible>
23
+ * <Collapsible.Trigger>Trigger</Collapsible.Trigger>
24
+ * <Collapsible.Content>
25
+ * Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae
26
+ * corporis maxime aliquam, voluptates nobis numquam, non odit optio
27
+ * architecto iure laborum possimus! Quibusdam sit ullam, consequatur sunt
28
+ * tempore optio aliquid!
29
+ * </Collapsible.Content>
30
+ * </Collapsible>
31
+ * ```
32
+ *
33
+ * @example With asChild
34
+ * ```jsx
35
+ * <Collapsible>
36
+ * <Collapsible.Trigger asChild>
37
+ * <Button>Button</Button>
38
+ * </Collapsible.Trigger>
39
+ * <Collapsible.Content asChild>
40
+ * <Box padding="4" background="surface-alt-3-subtle">
41
+ * <div>lorem ipsum</div>
42
+ * </Box>
43
+ * </Collapsible.Content>
44
+ * </Collapsible>
45
+ * ```
46
+ */
47
+ export declare const Collapsible: CollapsibleComponent;
48
+ export default Collapsible;
@@ -0,0 +1,62 @@
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 React, { forwardRef, useCallback } from "react";
13
+ import { useControllableState, useId } from "../util/hooks/index.js";
14
+ import { CollapsibleContextProvider } from "./Collapsible.context.js";
15
+ import CollapsibleContent from "./parts/Collapsible.Content.js";
16
+ import CollapsibleTrigger from "./parts/Collapsible.Trigger.js";
17
+ /**
18
+ * Collapsible is a component that allows you to toggle visibility of content.
19
+ *
20
+ * @example
21
+ * ```jsx
22
+ * <Collapsible>
23
+ * <Collapsible.Trigger>Trigger</Collapsible.Trigger>
24
+ * <Collapsible.Content>
25
+ * Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae
26
+ * corporis maxime aliquam, voluptates nobis numquam, non odit optio
27
+ * architecto iure laborum possimus! Quibusdam sit ullam, consequatur sunt
28
+ * tempore optio aliquid!
29
+ * </Collapsible.Content>
30
+ * </Collapsible>
31
+ * ```
32
+ *
33
+ * @example With asChild
34
+ * ```jsx
35
+ * <Collapsible>
36
+ * <Collapsible.Trigger asChild>
37
+ * <Button>Button</Button>
38
+ * </Collapsible.Trigger>
39
+ * <Collapsible.Content asChild>
40
+ * <Box padding="4" background="surface-alt-3-subtle">
41
+ * <div>lorem ipsum</div>
42
+ * </Box>
43
+ * </Collapsible.Content>
44
+ * </Collapsible>
45
+ * ```
46
+ */
47
+ export const Collapsible = forwardRef((_a, ref) => {
48
+ var { children, open, defaultOpen = false, onOpenChange, lazy = false } = _a, rest = __rest(_a, ["children", "open", "defaultOpen", "onOpenChange", "lazy"]);
49
+ const [_open, setOpen] = useControllableState({
50
+ value: open,
51
+ defaultValue: defaultOpen,
52
+ onChange: onOpenChange,
53
+ });
54
+ const internalId = useId();
55
+ const state = _open ? "open" : "closed";
56
+ return (React.createElement(CollapsibleContextProvider, { open: _open, onOpenToggle: useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]), contentId: `collapsible-content-${internalId}`, triggerId: `collapsible-trigger-${internalId}`, lazy: lazy, state: state },
57
+ React.createElement("div", Object.assign({ ref: ref, "data-state": state }, rest), children)));
58
+ });
59
+ Collapsible.Trigger = CollapsibleTrigger;
60
+ Collapsible.Content = CollapsibleContent;
61
+ export default Collapsible;
62
+ //# sourceMappingURL=Collapsible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.js","sourceRoot":"","sources":["../../src/collapsible/Collapsible.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,kBAAkB,MAAM,6BAA6B,CAAC;AAC7D,OAAO,kBAAkB,MAAM,6BAA6B,CAAC;AAoB7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CACnC,CACE,EAOC,EACD,GAAG,EACH,EAAE;QATF,EACE,QAAQ,EACR,IAAI,EACJ,WAAW,GAAG,KAAK,EACnB,YAAY,EACZ,IAAI,GAAG,KAAK,OAEb,EADI,IAAI,cANT,2DAOC,CADQ;IAIT,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,oBAAoB,CAAC;QAC5C,KAAK,EAAE,IAAI;QACX,YAAY,EAAE,WAAW;QACzB,QAAQ,EAAE,YAAY;KACvB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,KAAK,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;IAExC,OAAO,CACL,oBAAC,0BAA0B,IACzB,IAAI,EAAE,KAAK,EACX,YAAY,EAAE,WAAW,CACvB,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EACtC,CAAC,OAAO,CAAC,CACV,EACD,SAAS,EAAE,uBAAuB,UAAU,EAAE,EAC9C,SAAS,EAAE,uBAAuB,UAAU,EAAE,EAC9C,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK;QAEZ,2CAAK,GAAG,EAAE,GAAG,gBAAc,KAAK,IAAM,IAAI,GACvC,QAAQ,CACL,CACqB,CAC9B,CAAC;AACJ,CAAC,CACsB,CAAC;AAE1B,WAAW,CAAC,OAAO,GAAG,kBAAkB,CAAC;AACzC,WAAW,CAAC,OAAO,GAAG,kBAAkB,CAAC;AAEzC,eAAe,WAAW,CAAC"}
@@ -0,0 +1,19 @@
1
+ export interface CollapsibleBaseProps {
2
+ /**
3
+ * The open state of the collapsible when it is initially rendered. Use when you do not need to control its open state.
4
+ */
5
+ defaultOpen?: boolean;
6
+ /**
7
+ * The controlled open state of the collapsible. Must be used in conjunction with onOpenChange.
8
+ */
9
+ open?: boolean;
10
+ /**
11
+ * Event handler called when the open state of the collapsible changes.
12
+ */
13
+ onOpenChange?: (open: boolean) => void;
14
+ /**
15
+ * Render the collapsible content lazily. This means that the content will not be rendered until the collapsible is open.
16
+ * @default false
17
+ */
18
+ lazy?: boolean;
19
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Collapsible.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.types.js","sourceRoot":"","sources":["../../src/collapsible/Collapsible.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export { default as Collapsible, type CollapsibleProps } from "./Collapsible.js";
2
+ export { default as CollapsibleTrigger, type CollapsibleTriggerProps, } from "./parts/Collapsible.Trigger.js";
3
+ export { default as CollapsibleContent, type CollapsibleContentProps, } from "./parts/Collapsible.Content.js";
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ export { default as Collapsible } from "./Collapsible.js";
3
+ export { default as CollapsibleTrigger, } from "./parts/Collapsible.Trigger.js";
4
+ export { default as CollapsibleContent, } from "./parts/Collapsible.Content.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collapsible/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,OAAO,IAAI,WAAW,EAAyB,MAAM,eAAe,CAAC;AAC9E,OAAO,EACL,OAAO,IAAI,kBAAkB,GAE9B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,OAAO,IAAI,kBAAkB,GAE9B,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ export interface CollapsibleContentProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "hidden" | "aria-controls" | "id"> {
3
+ /**
4
+ * When true, will render element as its child. This merges classes, styles and event handlers.
5
+ * @default false
6
+ */
7
+ asChild?: boolean;
8
+ }
9
+ export declare const CollapsibleContent: React.ForwardRefExoticComponent<CollapsibleContentProps & React.RefAttributes<HTMLDivElement>>;
10
+ export default CollapsibleContent;
@@ -0,0 +1,22 @@
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 React, { forwardRef } from "react";
13
+ import { Slot } from "../../util/Slot.js";
14
+ import { useCollapsibleContext } from "../Collapsible.context.js";
15
+ export const CollapsibleContent = forwardRef((_a, ref) => {
16
+ var { children, asChild } = _a, rest = __rest(_a, ["children", "asChild"]);
17
+ const ctx = useCollapsibleContext();
18
+ const Comp = asChild ? Slot : "div";
19
+ return (React.createElement(Comp, Object.assign({ ref: ref }, rest, { "data-state": ctx.state, hidden: !ctx.open, "aria-controls": ctx.open ? ctx.triggerId : undefined, id: ctx.contentId }), ctx.lazy || ctx.open ? children : null));
20
+ });
21
+ export default CollapsibleContent;
22
+ //# sourceMappingURL=Collapsible.Content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.Content.js","sourceRoot":"","sources":["../../../src/collapsible/parts/Collapsible.Content.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAc/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAG1C,CAAC,EAA8B,EAAE,GAAG,EAAE,EAAE;QAAvC,EAAE,QAAQ,EAAE,OAAO,OAAW,EAAN,IAAI,cAA5B,uBAA8B,CAAF;IAC7B,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAC;IAEpC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAEpC,OAAO,CACL,oBAAC,IAAI,kBACH,GAAG,EAAE,GAAG,IACJ,IAAI,kBACI,GAAG,CAAC,KAAK,EACrB,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,mBACF,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACnD,EAAE,EAAE,GAAG,CAAC,SAAS,KAEhB,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAClC,CACR,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ export interface CollapsibleTriggerProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "id" | "aria-controls" | "aria-expanded"> {
3
+ /**
4
+ * When true, will render element as its child. This merges classes, styles and event handlers.
5
+ * @default false
6
+ */
7
+ asChild?: boolean;
8
+ }
9
+ export declare const CollapsibleTrigger: React.ForwardRefExoticComponent<CollapsibleTriggerProps & React.RefAttributes<HTMLButtonElement>>;
10
+ export default CollapsibleTrigger;
@@ -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 React, { forwardRef } from "react";
13
+ import { Slot } from "../../util/Slot.js";
14
+ import { composeEventHandlers } from "../../util/composeEventHandlers.js";
15
+ import { useCollapsibleContext } from "../Collapsible.context.js";
16
+ export const CollapsibleTrigger = forwardRef((_a, ref) => {
17
+ var { children, asChild, onClick } = _a, rest = __rest(_a, ["children", "asChild", "onClick"]);
18
+ const ctx = useCollapsibleContext();
19
+ const Comp = asChild ? Slot : "button";
20
+ return (React.createElement(Comp, Object.assign({ ref: ref, type: "button", "data-state": ctx.state, onClick: composeEventHandlers(onClick, ctx.onOpenToggle) }, rest, { id: ctx.triggerId, "aria-controls": ctx.open ? ctx.contentId : undefined, "aria-expanded": ctx.open }), children));
21
+ });
22
+ export default CollapsibleTrigger;
23
+ //# sourceMappingURL=Collapsible.Trigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.Trigger.js","sourceRoot":"","sources":["../../../src/collapsible/parts/Collapsible.Trigger.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAc/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAG1C,CAAC,EAAuC,EAAE,GAAG,EAAE,EAAE;QAAhD,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,OAAW,EAAN,IAAI,cAArC,kCAAuC,CAAF;IACtC,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAC;IAEpC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEvC,OAAO,CACL,oBAAC,IAAI,kBACH,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,QAAQ,gBACD,GAAG,CAAC,KAAK,EACrB,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,IACpD,IAAI,IACR,EAAE,EAAE,GAAG,CAAC,SAAS,mBACF,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,mBACpC,GAAG,CAAC,IAAI,KAEtB,QAAQ,CACJ,CACR,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,eAAe,kBAAkB,CAAC"}
@@ -11,6 +11,6 @@ import React from "react";
11
11
  * <MyComponent />
12
12
  * </HStack>
13
13
  */
14
- export const Spacer = () => React.createElement("div", { className: "navds-stack__spacer" });
14
+ export const Spacer = () => React.createElement("span", { className: "navds-stack__spacer" });
15
15
  export default Spacer;
16
16
  //# sourceMappingURL=Spacer.js.map
@@ -1 +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;AAEpE,eAAe,MAAM,CAAC"}
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,8BAAM,SAAS,EAAC,qBAAqB,GAAG,CAAC;AAErE,eAAe,MAAM,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@navikt/ds-react",
3
- "version": "6.6.0",
3
+ "version": "6.6.1",
4
4
  "description": "React components from the Norwegian Labour and Welfare Administration.",
5
5
  "author": "Aksel, a team part of the Norwegian Labour and Welfare Administration.",
6
6
  "license": "MIT",
@@ -573,8 +573,8 @@
573
573
  },
574
574
  "dependencies": {
575
575
  "@floating-ui/react": "0.25.4",
576
- "@navikt/aksel-icons": "^6.6.0",
577
- "@navikt/ds-tokens": "^6.6.0",
576
+ "@navikt/aksel-icons": "^6.6.1",
577
+ "@navikt/ds-tokens": "^6.6.1",
578
578
  "clsx": "^2.1.0",
579
579
  "date-fns": "^3.0.0",
580
580
  "react-day-picker": "8.10.0"
@@ -0,0 +1,32 @@
1
+ import { createContext } from "../util/create-context";
2
+ import { CollapsibleBaseProps } from "./Collapsible.types";
3
+
4
+ export type CollapsibleContextProps = Pick<CollapsibleBaseProps, "open"> & {
5
+ /**
6
+ * Allows connecting trigger to content
7
+ */
8
+ contentId: string;
9
+ /**
10
+ * Allows connecting content to trigger
11
+ */
12
+ triggerId: string;
13
+ /**
14
+ * Callback for toggling open state
15
+ */
16
+ onOpenToggle: () => void;
17
+ /**
18
+ * Allows always rendering children in content when closed
19
+ */
20
+ lazy: boolean;
21
+ /**
22
+ * Utility for getting state as string. Usefull for data-attributes.
23
+ */
24
+ state: "open" | "closed";
25
+ };
26
+
27
+ export const [CollapsibleContextProvider, useCollapsibleContext] =
28
+ createContext<CollapsibleContextProps>({
29
+ name: "CollapsibleContext",
30
+ errorMessage:
31
+ "<Collapsible.Trigger> and <Collapsible.Content> must be used within a <Collapsible>",
32
+ });
@@ -0,0 +1,100 @@
1
+ import React, { forwardRef, useCallback } from "react";
2
+ import { useControllableState, useId } from "../util/hooks";
3
+ import { CollapsibleContextProvider } from "./Collapsible.context";
4
+ import { CollapsibleBaseProps } from "./Collapsible.types";
5
+ import CollapsibleContent from "./parts/Collapsible.Content";
6
+ import CollapsibleTrigger from "./parts/Collapsible.Trigger";
7
+
8
+ export interface CollapsibleProps
9
+ extends CollapsibleBaseProps,
10
+ React.HTMLAttributes<HTMLDivElement> {}
11
+
12
+ interface CollapsibleComponent
13
+ extends React.ForwardRefExoticComponent<
14
+ CollapsibleProps & React.RefAttributes<HTMLDivElement>
15
+ > {
16
+ /**
17
+ * @see 🏷️ {@link CollapsibleTriggerProps}
18
+ */
19
+ Trigger: typeof CollapsibleTrigger;
20
+ /**
21
+ * @see 🏷️ {@link CollapsibleContentProps}
22
+ */
23
+ Content: typeof CollapsibleContent;
24
+ }
25
+
26
+ /**
27
+ * Collapsible is a component that allows you to toggle visibility of content.
28
+ *
29
+ * @example
30
+ * ```jsx
31
+ * <Collapsible>
32
+ * <Collapsible.Trigger>Trigger</Collapsible.Trigger>
33
+ * <Collapsible.Content>
34
+ * Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae
35
+ * corporis maxime aliquam, voluptates nobis numquam, non odit optio
36
+ * architecto iure laborum possimus! Quibusdam sit ullam, consequatur sunt
37
+ * tempore optio aliquid!
38
+ * </Collapsible.Content>
39
+ * </Collapsible>
40
+ * ```
41
+ *
42
+ * @example With asChild
43
+ * ```jsx
44
+ * <Collapsible>
45
+ * <Collapsible.Trigger asChild>
46
+ * <Button>Button</Button>
47
+ * </Collapsible.Trigger>
48
+ * <Collapsible.Content asChild>
49
+ * <Box padding="4" background="surface-alt-3-subtle">
50
+ * <div>lorem ipsum</div>
51
+ * </Box>
52
+ * </Collapsible.Content>
53
+ * </Collapsible>
54
+ * ```
55
+ */
56
+ export const Collapsible = forwardRef<HTMLDivElement, CollapsibleProps>(
57
+ (
58
+ {
59
+ children,
60
+ open,
61
+ defaultOpen = false,
62
+ onOpenChange,
63
+ lazy = false,
64
+ ...rest
65
+ },
66
+ ref,
67
+ ) => {
68
+ const [_open, setOpen] = useControllableState({
69
+ value: open,
70
+ defaultValue: defaultOpen,
71
+ onChange: onOpenChange,
72
+ });
73
+
74
+ const internalId = useId();
75
+ const state = _open ? "open" : "closed";
76
+
77
+ return (
78
+ <CollapsibleContextProvider
79
+ open={_open}
80
+ onOpenToggle={useCallback(
81
+ () => setOpen((prevOpen) => !prevOpen),
82
+ [setOpen],
83
+ )}
84
+ contentId={`collapsible-content-${internalId}`}
85
+ triggerId={`collapsible-trigger-${internalId}`}
86
+ lazy={lazy}
87
+ state={state}
88
+ >
89
+ <div ref={ref} data-state={state} {...rest}>
90
+ {children}
91
+ </div>
92
+ </CollapsibleContextProvider>
93
+ );
94
+ },
95
+ ) as CollapsibleComponent;
96
+
97
+ Collapsible.Trigger = CollapsibleTrigger;
98
+ Collapsible.Content = CollapsibleContent;
99
+
100
+ export default Collapsible;
@@ -0,0 +1,19 @@
1
+ export interface CollapsibleBaseProps {
2
+ /**
3
+ * The open state of the collapsible when it is initially rendered. Use when you do not need to control its open state.
4
+ */
5
+ defaultOpen?: boolean;
6
+ /**
7
+ * The controlled open state of the collapsible. Must be used in conjunction with onOpenChange.
8
+ */
9
+ open?: boolean;
10
+ /**
11
+ * Event handler called when the open state of the collapsible changes.
12
+ */
13
+ onOpenChange?: (open: boolean) => void;
14
+ /**
15
+ * Render the collapsible content lazily. This means that the content will not be rendered until the collapsible is open.
16
+ * @default false
17
+ */
18
+ lazy?: boolean;
19
+ }
@@ -0,0 +1,10 @@
1
+ "use client";
2
+ export { default as Collapsible, type CollapsibleProps } from "./Collapsible";
3
+ export {
4
+ default as CollapsibleTrigger,
5
+ type CollapsibleTriggerProps,
6
+ } from "./parts/Collapsible.Trigger";
7
+ export {
8
+ default as CollapsibleContent,
9
+ type CollapsibleContentProps,
10
+ } from "./parts/Collapsible.Content";
@@ -0,0 +1,39 @@
1
+ import React, { forwardRef } from "react";
2
+ import { Slot } from "../../util/Slot";
3
+ import { useCollapsibleContext } from "../Collapsible.context";
4
+
5
+ export interface CollapsibleContentProps
6
+ extends Omit<
7
+ React.HTMLAttributes<HTMLDivElement>,
8
+ "hidden" | "aria-controls" | "id"
9
+ > {
10
+ /**
11
+ * When true, will render element as its child. This merges classes, styles and event handlers.
12
+ * @default false
13
+ */
14
+ asChild?: boolean;
15
+ }
16
+
17
+ export const CollapsibleContent = forwardRef<
18
+ HTMLDivElement,
19
+ CollapsibleContentProps
20
+ >(({ children, asChild, ...rest }, ref) => {
21
+ const ctx = useCollapsibleContext();
22
+
23
+ const Comp = asChild ? Slot : "div";
24
+
25
+ return (
26
+ <Comp
27
+ ref={ref}
28
+ {...rest}
29
+ data-state={ctx.state}
30
+ hidden={!ctx.open}
31
+ aria-controls={ctx.open ? ctx.triggerId : undefined}
32
+ id={ctx.contentId}
33
+ >
34
+ {ctx.lazy || ctx.open ? children : null}
35
+ </Comp>
36
+ );
37
+ });
38
+
39
+ export default CollapsibleContent;
@@ -0,0 +1,42 @@
1
+ import React, { forwardRef } from "react";
2
+ import { Slot } from "../../util/Slot";
3
+ import { composeEventHandlers } from "../../util/composeEventHandlers";
4
+ import { useCollapsibleContext } from "../Collapsible.context";
5
+
6
+ export interface CollapsibleTriggerProps
7
+ extends Omit<
8
+ React.ButtonHTMLAttributes<HTMLButtonElement>,
9
+ "id" | "aria-controls" | "aria-expanded"
10
+ > {
11
+ /**
12
+ * When true, will render element as its child. This merges classes, styles and event handlers.
13
+ * @default false
14
+ */
15
+ asChild?: boolean;
16
+ }
17
+
18
+ export const CollapsibleTrigger = forwardRef<
19
+ HTMLButtonElement,
20
+ CollapsibleTriggerProps
21
+ >(({ children, asChild, onClick, ...rest }, ref) => {
22
+ const ctx = useCollapsibleContext();
23
+
24
+ const Comp = asChild ? Slot : "button";
25
+
26
+ return (
27
+ <Comp
28
+ ref={ref}
29
+ type="button"
30
+ data-state={ctx.state}
31
+ onClick={composeEventHandlers(onClick, ctx.onOpenToggle)}
32
+ {...rest}
33
+ id={ctx.triggerId}
34
+ aria-controls={ctx.open ? ctx.contentId : undefined}
35
+ aria-expanded={ctx.open}
36
+ >
37
+ {children}
38
+ </Comp>
39
+ );
40
+ });
41
+
42
+ export default CollapsibleTrigger;
@@ -12,6 +12,6 @@ import React from "react";
12
12
  * <MyComponent />
13
13
  * </HStack>
14
14
  */
15
- export const Spacer = () => <div className="navds-stack__spacer" />;
15
+ export const Spacer = () => <span className="navds-stack__spacer" />;
16
16
 
17
17
  export default Spacer;