@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.
- package/cjs/collapsible/Collapsible.context.d.ts +48 -0
- package/cjs/collapsible/Collapsible.context.js +10 -0
- package/cjs/collapsible/Collapsible.context.js.map +1 -0
- package/cjs/collapsible/Collapsible.d.ts +48 -0
- package/cjs/collapsible/Collapsible.js +91 -0
- package/cjs/collapsible/Collapsible.js.map +1 -0
- package/cjs/collapsible/Collapsible.types.d.ts +19 -0
- package/cjs/collapsible/Collapsible.types.js +3 -0
- package/cjs/collapsible/Collapsible.types.js.map +1 -0
- package/cjs/collapsible/index.d.ts +3 -0
- package/cjs/collapsible/index.js +14 -0
- package/cjs/collapsible/index.js.map +1 -0
- package/cjs/collapsible/parts/Collapsible.Content.d.ts +10 -0
- package/cjs/collapsible/parts/Collapsible.Content.js +48 -0
- package/cjs/collapsible/parts/Collapsible.Content.js.map +1 -0
- package/cjs/collapsible/parts/Collapsible.Trigger.d.ts +10 -0
- package/cjs/collapsible/parts/Collapsible.Trigger.js +49 -0
- package/cjs/collapsible/parts/Collapsible.Trigger.js.map +1 -0
- package/cjs/layout/stack/Spacer.js +1 -1
- package/cjs/layout/stack/Spacer.js.map +1 -1
- package/esm/collapsible/Collapsible.context.d.ts +48 -0
- package/esm/collapsible/Collapsible.context.js +6 -0
- package/esm/collapsible/Collapsible.context.js.map +1 -0
- package/esm/collapsible/Collapsible.d.ts +48 -0
- package/esm/collapsible/Collapsible.js +62 -0
- package/esm/collapsible/Collapsible.js.map +1 -0
- package/esm/collapsible/Collapsible.types.d.ts +19 -0
- package/esm/collapsible/Collapsible.types.js +2 -0
- package/esm/collapsible/Collapsible.types.js.map +1 -0
- package/esm/collapsible/index.d.ts +3 -0
- package/esm/collapsible/index.js +5 -0
- package/esm/collapsible/index.js.map +1 -0
- package/esm/collapsible/parts/Collapsible.Content.d.ts +10 -0
- package/esm/collapsible/parts/Collapsible.Content.js +22 -0
- package/esm/collapsible/parts/Collapsible.Content.js.map +1 -0
- package/esm/collapsible/parts/Collapsible.Trigger.d.ts +10 -0
- package/esm/collapsible/parts/Collapsible.Trigger.js +23 -0
- package/esm/collapsible/parts/Collapsible.Trigger.js.map +1 -0
- package/esm/layout/stack/Spacer.js +1 -1
- package/esm/layout/stack/Spacer.js.map +1 -1
- package/package.json +3 -3
- package/src/collapsible/Collapsible.context.tsx +32 -0
- package/src/collapsible/Collapsible.tsx +100 -0
- package/src/collapsible/Collapsible.types.ts +19 -0
- package/src/collapsible/index.ts +10 -0
- package/src/collapsible/parts/Collapsible.Content.tsx +39 -0
- package/src/collapsible/parts/Collapsible.Trigger.tsx +42 -0
- 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 @@
|
|
|
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("
|
|
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,
|
|
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 @@
|
|
|
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("
|
|
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,
|
|
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.
|
|
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.
|
|
577
|
-
"@navikt/ds-tokens": "^6.6.
|
|
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;
|