@bioturing/components 0.33.1 → 0.35.2
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/dist/components/base-menu/component.d.ts +12 -0
- package/dist/components/base-menu/component.d.ts.map +1 -0
- package/dist/components/base-menu/component.js +69 -0
- package/dist/components/base-menu/component.js.map +1 -0
- package/dist/components/base-menu/index.d.ts +18 -0
- package/dist/components/base-menu/index.d.ts.map +1 -0
- package/dist/components/base-menu/index.js +11 -0
- package/dist/components/base-menu/index.js.map +1 -0
- package/dist/components/base-menu/item.css +1 -0
- package/dist/components/base-menu/item.d.ts +47 -0
- package/dist/components/base-menu/item.d.ts.map +1 -0
- package/dist/components/base-menu/item.js +73 -0
- package/dist/components/base-menu/item.js.map +1 -0
- package/dist/components/base-menu/style.css +1 -0
- package/dist/components/breadcrumb/component.d.ts +3 -2
- package/dist/components/breadcrumb/component.d.ts.map +1 -1
- package/dist/components/breadcrumb/component.js +138 -38
- package/dist/components/breadcrumb/component.js.map +1 -1
- package/dist/components/breadcrumb/index.d.ts +1 -0
- package/dist/components/breadcrumb/index.d.ts.map +1 -1
- package/dist/components/breadcrumb/item.d.ts +3 -0
- package/dist/components/breadcrumb/item.d.ts.map +1 -0
- package/dist/components/breadcrumb/item.js +19 -0
- package/dist/components/breadcrumb/item.js.map +1 -0
- package/dist/components/breadcrumb/style.css +1 -1
- package/dist/components/breadcrumb/types.d.ts +9 -2
- package/dist/components/breadcrumb/types.d.ts.map +1 -1
- package/dist/components/code-block/component.d.ts +1 -1
- package/dist/components/code-block/component.d.ts.map +1 -1
- package/dist/components/code-block/component.js +80 -71
- package/dist/components/code-block/component.js.map +1 -1
- package/dist/components/code-block/types.d.ts +17 -0
- package/dist/components/code-block/types.d.ts.map +1 -1
- package/dist/components/combobox/component.d.ts +3 -26
- package/dist/components/combobox/component.d.ts.map +1 -1
- package/dist/components/combobox/component.js +326 -216
- package/dist/components/combobox/component.js.map +1 -1
- package/dist/components/combobox/style.css +1 -1
- package/dist/components/command-palette/component.js +6 -6
- package/dist/components/command-palette/component.js.map +1 -1
- package/dist/components/dropdown-menu/component.d.ts.map +1 -1
- package/dist/components/dropdown-menu/component.js +90 -87
- package/dist/components/dropdown-menu/component.js.map +1 -1
- package/dist/components/dropdown-menu/divider.d.ts.map +1 -1
- package/dist/components/dropdown-menu/divider.js +17 -10
- package/dist/components/dropdown-menu/divider.js.map +1 -1
- package/dist/components/dropdown-menu/item.d.ts +19 -9
- package/dist/components/dropdown-menu/item.d.ts.map +1 -1
- package/dist/components/dropdown-menu/item.js +71 -130
- package/dist/components/dropdown-menu/item.js.map +1 -1
- package/dist/components/dropdown-menu/style.css +1 -1
- package/dist/components/dropdown-menu/useDropdownMenu.d.ts.map +1 -1
- package/dist/components/dropdown-menu/useDropdownMenu.js +60 -63
- package/dist/components/dropdown-menu/useDropdownMenu.js.map +1 -1
- package/dist/components/field/component.d.ts +5 -1
- package/dist/components/field/component.d.ts.map +1 -1
- package/dist/components/field/component.js +29 -20
- package/dist/components/field/component.js.map +1 -1
- package/dist/components/popup-panel/component.d.ts.map +1 -1
- package/dist/components/popup-panel/component.js +101 -101
- package/dist/components/popup-panel/component.js.map +1 -1
- package/dist/components/scroll-area/component.d.ts +1 -1
- package/dist/components/scroll-area/component.d.ts.map +1 -1
- package/dist/components/scroll-area/component.js +74 -58
- package/dist/components/scroll-area/component.js.map +1 -1
- package/dist/components/select-trigger/component.d.ts +71 -9
- package/dist/components/select-trigger/component.d.ts.map +1 -1
- package/dist/components/select-trigger/component.js +180 -139
- package/dist/components/select-trigger/component.js.map +1 -1
- package/dist/components/select-trigger/index.d.ts +1 -2
- package/dist/components/select-trigger/index.d.ts.map +1 -1
- package/dist/components/select-trigger/style.css +1 -1
- package/dist/components/table/component.d.ts.map +1 -1
- package/dist/components/table/component.js +53 -52
- package/dist/components/table/component.js.map +1 -1
- package/dist/components/theme-provider/style.css +1 -1
- package/dist/components/truncate/component.d.ts.map +1 -1
- package/dist/components/truncate/component.js +84 -80
- package/dist/components/truncate/component.js.map +1 -1
- package/dist/components/truncate/helpers.d.ts +9 -0
- package/dist/components/truncate/helpers.d.ts.map +1 -1
- package/dist/components/truncate/helpers.js +70 -40
- package/dist/components/truncate/helpers.js.map +1 -1
- package/dist/components/truncate/index.d.ts +1 -0
- package/dist/components/truncate/index.d.ts.map +1 -1
- package/dist/components/truncate/useOverflowDetection.d.ts +19 -0
- package/dist/components/truncate/useOverflowDetection.d.ts.map +1 -0
- package/dist/components/truncate/useOverflowDetection.js +54 -0
- package/dist/components/truncate/useOverflowDetection.js.map +1 -0
- package/dist/components/utils/WithRenderProp.d.ts.map +1 -1
- package/dist/components/utils/WithRenderProp.js +10 -10
- package/dist/components/utils/WithRenderProp.js.map +1 -1
- package/dist/components/vertical-collapsible-panel/component.d.ts +14 -0
- package/dist/components/vertical-collapsible-panel/component.d.ts.map +1 -1
- package/dist/components/vertical-collapsible-panel/component.js +82 -75
- package/dist/components/vertical-collapsible-panel/component.js.map +1 -1
- package/dist/components/vertical-collapsible-panel/style.css +1 -1
- package/dist/index.js +230 -224
- package/dist/index.js.map +1 -1
- package/dist/stats.html +1 -1
- package/package.json +5 -6
- package/dist/components/dropdown-menu/item.css +0 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { useState as E, useCallback as s, useLayoutEffect as p } from "react";
|
|
2
|
+
import { checkOverflow as k } from "./helpers.js";
|
|
3
|
+
const z = (h = {}) => {
|
|
4
|
+
const {
|
|
5
|
+
container: n,
|
|
6
|
+
additionalElements: f = [],
|
|
7
|
+
enabled: t = !0,
|
|
8
|
+
type: l = "horizontal",
|
|
9
|
+
availableHeight: u,
|
|
10
|
+
text: a
|
|
11
|
+
} = h, [b, v] = E(!1), r = s(() => n ? n instanceof HTMLElement ? n : "current" in n ? n.current : null : null, [n]), i = s(() => {
|
|
12
|
+
const e = r();
|
|
13
|
+
return e ? k(e, {
|
|
14
|
+
type: l,
|
|
15
|
+
availableHeight: u,
|
|
16
|
+
text: a
|
|
17
|
+
}) : !1;
|
|
18
|
+
}, [r, l, u, a]), c = s(() => {
|
|
19
|
+
if (!t) return;
|
|
20
|
+
const e = i();
|
|
21
|
+
v(e);
|
|
22
|
+
}, [i, t]), w = s(
|
|
23
|
+
(e, o, m) => {
|
|
24
|
+
const d = e.filter(Boolean);
|
|
25
|
+
if (d.length === 0) return;
|
|
26
|
+
window.document.fonts?.ready?.then(o);
|
|
27
|
+
const O = new ResizeObserver(() => {
|
|
28
|
+
window.requestAnimationFrame(o);
|
|
29
|
+
});
|
|
30
|
+
return d.forEach((g) => O.observe(g)), () => {
|
|
31
|
+
O.disconnect(), m && m();
|
|
32
|
+
};
|
|
33
|
+
},
|
|
34
|
+
[]
|
|
35
|
+
);
|
|
36
|
+
return p(() => {
|
|
37
|
+
if (!t) {
|
|
38
|
+
v(!1);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const e = r();
|
|
42
|
+
if (!e) return;
|
|
43
|
+
const o = [e, ...f];
|
|
44
|
+
return w(o, c);
|
|
45
|
+
}, [t, r, f, w, c]), {
|
|
46
|
+
isOverflowing: b,
|
|
47
|
+
checkOverflowNow: i,
|
|
48
|
+
recheckOverflow: c
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
export {
|
|
52
|
+
z as useOverflowDetection
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=useOverflowDetection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOverflowDetection.js","sources":["../../../src/components/truncate/useOverflowDetection.ts"],"sourcesContent":["import { useCallback, useLayoutEffect, useState } from \"react\";\nimport { checkOverflow, OverflowCheckOptions } from \"./helpers\";\n\nexport interface UseOverflowDetectionOptions extends OverflowCheckOptions {\n /** Element to observe for size changes */\n container?: HTMLElement | React.RefObject<HTMLElement> | null;\n /** Additional elements to observe (e.g., parent containers) */\n additionalElements?: (HTMLElement | null)[];\n /** Whether to enable the overflow detection */\n enabled?: boolean;\n}\n\nexport interface UseOverflowDetectionResult {\n /** Whether the content is currently overflowing */\n isOverflowing: boolean;\n /** Function to manually check overflow */\n checkOverflowNow: () => boolean;\n /** Function to manually trigger a recheck */\n recheckOverflow: () => void;\n}\n\nexport const useOverflowDetection = (\n options: UseOverflowDetectionOptions = {}\n): UseOverflowDetectionResult => {\n const {\n container: containerProp,\n additionalElements = [],\n enabled = true,\n type = \"horizontal\",\n availableHeight,\n text,\n } = options;\n\n const [isOverflowing, setIsOverflowing] = useState(false);\n\n const getContainer = useCallback((): HTMLElement | null => {\n if (!containerProp) return null;\n\n if (containerProp instanceof HTMLElement) {\n return containerProp;\n }\n\n if (\"current\" in containerProp) {\n return containerProp.current;\n }\n\n return null;\n }, [containerProp]);\n\n const checkOverflowNow = useCallback((): boolean => {\n const container = getContainer();\n if (!container) return false;\n\n return checkOverflow(container, {\n type,\n availableHeight,\n text,\n });\n }, [getContainer, type, availableHeight, text]);\n\n const recheckOverflow = useCallback(() => {\n if (!enabled) return;\n\n const newIsOverflowing = checkOverflowNow();\n setIsOverflowing(newIsOverflowing);\n }, [checkOverflowNow, enabled]);\n\n const observe = useCallback(\n (\n elements: (HTMLElement | null)[],\n callback: () => void,\n cleanup?: () => void\n ) => {\n const validElements = elements.filter(Boolean) as HTMLElement[];\n if (validElements.length === 0) return;\n\n // Wait for fonts to load\n window.document.fonts?.ready?.then(callback);\n\n const observer = new ResizeObserver(() => {\n window.requestAnimationFrame(callback);\n });\n\n validElements.forEach((el) => observer.observe(el));\n\n return () => {\n observer.disconnect();\n if (cleanup) cleanup();\n };\n },\n []\n );\n\n useLayoutEffect(() => {\n if (!enabled) {\n setIsOverflowing(false);\n return;\n }\n\n const container = getContainer();\n if (!container) return;\n\n const elementsToObserve = [container, ...additionalElements];\n\n return observe(elementsToObserve, recheckOverflow);\n }, [enabled, getContainer, additionalElements, observe, recheckOverflow]);\n\n return {\n isOverflowing,\n checkOverflowNow,\n recheckOverflow,\n };\n};"],"names":["useOverflowDetection","options","containerProp","additionalElements","enabled","type","availableHeight","text","isOverflowing","setIsOverflowing","useState","getContainer","useCallback","checkOverflowNow","container","checkOverflow","recheckOverflow","newIsOverflowing","observe","elements","callback","cleanup","validElements","observer","el","useLayoutEffect","elementsToObserve"],"mappings":";;AAqBO,MAAMA,IAAuB,CAClCC,IAAuC,OACR;AAC/B,QAAM;AAAA,IACJ,WAAWC;AAAA,IACX,oBAAAC,IAAqB,CAAA;AAAA,IACrB,SAAAC,IAAU;AAAA,IACV,MAAAC,IAAO;AAAA,IACP,iBAAAC;AAAA,IACA,MAAAC;AAAA,EAAA,IACEN,GAEE,CAACO,GAAeC,CAAgB,IAAIC,EAAS,EAAK,GAElDC,IAAeC,EAAY,MAC1BV,IAEDA,aAAyB,cACpBA,IAGL,aAAaA,IACRA,EAAc,UAGhB,OAVoB,MAW1B,CAACA,CAAa,CAAC,GAEZW,IAAmBD,EAAY,MAAe;AAClD,UAAME,IAAYH,EAAA;AAClB,WAAKG,IAEEC,EAAcD,GAAW;AAAA,MAC9B,MAAAT;AAAA,MACA,iBAAAC;AAAA,MACA,MAAAC;AAAA,IAAA,CACD,IANsB;AAAA,EAOzB,GAAG,CAACI,GAAcN,GAAMC,GAAiBC,CAAI,CAAC,GAExCS,IAAkBJ,EAAY,MAAM;AACxC,QAAI,CAACR,EAAS;AAEd,UAAMa,IAAmBJ,EAAA;AACzB,IAAAJ,EAAiBQ,CAAgB;AAAA,EACnC,GAAG,CAACJ,GAAkBT,CAAO,CAAC,GAExBc,IAAUN;AAAA,IACd,CACEO,GACAC,GACAC,MACG;AACH,YAAMC,IAAgBH,EAAS,OAAO,OAAO;AAC7C,UAAIG,EAAc,WAAW,EAAG;AAGhC,aAAO,SAAS,OAAO,OAAO,KAAKF,CAAQ;AAE3C,YAAMG,IAAW,IAAI,eAAe,MAAM;AACxC,eAAO,sBAAsBH,CAAQ;AAAA,MACvC,CAAC;AAED,aAAAE,EAAc,QAAQ,CAACE,MAAOD,EAAS,QAAQC,CAAE,CAAC,GAE3C,MAAM;AACX,QAAAD,EAAS,WAAA,GACLF,KAASA,EAAA;AAAA,MACf;AAAA,IACF;AAAA,IACA,CAAA;AAAA,EAAC;AAGH,SAAAI,EAAgB,MAAM;AACpB,QAAI,CAACrB,GAAS;AACZ,MAAAK,EAAiB,EAAK;AACtB;AAAA,IACF;AAEA,UAAMK,IAAYH,EAAA;AAClB,QAAI,CAACG,EAAW;AAEhB,UAAMY,IAAoB,CAACZ,GAAW,GAAGX,CAAkB;AAE3D,WAAOe,EAAQQ,GAAmBV,CAAe;AAAA,EACnD,GAAG,CAACZ,GAASO,GAAcR,GAAoBe,GAASF,CAAe,CAAC,GAEjE;AAAA,IACL,eAAAR;AAAA,IACA,kBAAAK;AAAA,IACA,iBAAAG;AAAA,EAAA;AAEJ;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WithRenderProp.d.ts","sourceRoot":"","sources":["../../../src/components/utils/WithRenderProp.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"WithRenderProp.d.ts","sourceRoot":"","sources":["../../../src/components/utils/WithRenderProp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE/C,MAAM,MAAM,mBAAmB,CAC7B,CAAC,SAAS,KAAK,CAAC,WAAW,GAAG,KAAK,EACnC,KAAK,SAAS,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAC9D,MAAM,EACN,OAAO,CACR,IACC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG;IACtC,MAAM,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACrC,EAAE,CAAC,EAAE,CAAC,CAAC;IACP,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,QAAA,MAAM,mBAAmB,GACvB,CAAC,SAAS,KAAK,CAAC,WAAW,GAAG,KAAK,EACnC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAE/D,OAAO,mBAAmB,CAAC,CAAC,EAAE,KAAK,CAAC,EACpC,KAAK,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,SAW3B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAsC,CAC/D,CAAC,SAAS,KAAK,CAAC,WAAW,GAAG,KAAK,EACnC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAE/D,KAAK,EAAE,mBAAmB,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG;IACrC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1C,KACE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
render: n || ((s) => /* @__PURE__ */ m(t, { ...s })),
|
|
1
|
+
import { forwardRef as s } from "react";
|
|
2
|
+
import { useRender as m } from "@base-ui-components/react/use-render";
|
|
3
|
+
const p = (e, r) => {
|
|
4
|
+
const { render: t, as: n = "div", state: o, ...d } = e;
|
|
5
|
+
return m({
|
|
6
|
+
render: t,
|
|
8
7
|
props: d,
|
|
9
8
|
state: o,
|
|
10
|
-
ref: r
|
|
9
|
+
ref: r,
|
|
10
|
+
defaultTagName: n
|
|
11
11
|
});
|
|
12
|
-
},
|
|
12
|
+
}, i = s(p);
|
|
13
13
|
export {
|
|
14
|
-
|
|
14
|
+
i as WithRenderProp
|
|
15
15
|
};
|
|
16
16
|
//# sourceMappingURL=WithRenderProp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WithRenderProp.js","sources":["../../../src/components/utils/WithRenderProp.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\nimport { useRender } from \"@base-ui-components/react/use-render\";\nimport { ElementTypeToDOMType } from \"./types\";\n\nexport type WithRenderPropProps<\n T extends React.ElementType = \"div\",\n State extends Record<string | number | symbol, unknown> = Record<\n string,\n unknown\n >\n> = React.ComponentPropsWithoutRef<T> & {\n render?: useRender.RenderProp<State>;\n as?: T;\n state?: State;\n};\n\nconst WithRenderPropInner = <\n T extends React.ElementType = \"div\",\n State extends Record<string, unknown> = Record<string, unknown>\n>(\n props: WithRenderPropProps<T, State>,\n ref: React.ForwardedRef<T>\n) => {\n const { render, as
|
|
1
|
+
{"version":3,"file":"WithRenderProp.js","sources":["../../../src/components/utils/WithRenderProp.tsx"],"sourcesContent":["import React, { forwardRef, JSX } from \"react\";\nimport { useRender } from \"@base-ui-components/react/use-render\";\nimport { ElementTypeToDOMType } from \"./types\";\n\nexport type WithRenderPropProps<\n T extends React.ElementType = \"div\",\n State extends Record<string | number | symbol, unknown> = Record<\n string,\n unknown\n >\n> = React.ComponentPropsWithoutRef<T> & {\n render?: useRender.RenderProp<State>;\n as?: T;\n state?: State;\n};\n\nconst WithRenderPropInner = <\n T extends React.ElementType = \"div\",\n State extends Record<string, unknown> = Record<string, unknown>\n>(\n props: WithRenderPropProps<T, State>,\n ref: React.ForwardedRef<T>\n) => {\n const { render, as = \"div\", state, ...etc } = props;\n const renderedElement = useRender({\n render: render,\n props: etc,\n state,\n ref: ref as unknown as React.Ref<ElementTypeToDOMType<T>>,\n defaultTagName: as as keyof JSX.IntrinsicElements,\n });\n return renderedElement;\n};\n\nexport const WithRenderProp = forwardRef(WithRenderPropInner) as <\n T extends React.ElementType = \"div\",\n State extends Record<string, unknown> = Record<string, unknown>\n>(\n props: WithRenderPropProps<T, State> & {\n ref?: React.Ref<ElementTypeToDOMType<T>>;\n }\n) => ReturnType<typeof WithRenderPropInner>;\n"],"names":["WithRenderPropInner","props","ref","render","as","state","etc","useRender","WithRenderProp","forwardRef"],"mappings":";;AAgBA,MAAMA,IAAsB,CAI1BC,GACAC,MACG;AACH,QAAM,EAAE,QAAAC,GAAQ,IAAAC,IAAK,OAAO,OAAAC,GAAO,GAAGC,MAAQL;AAQ9C,SAPwBM,EAAU;AAAA,IAChC,QAAAJ;AAAA,IACA,OAAOG;AAAA,IACP,OAAAD;AAAA,IACA,KAAAH;AAAA,IACA,gBAAgBE;AAAA,EAAA,CACjB;AAEH,GAEaI,IAAiBC,EAAWT,CAAmB;"}
|
|
@@ -60,6 +60,20 @@ export interface VerticalCollapsiblePanelProps {
|
|
|
60
60
|
* Keeping it as mounted, just hide the content
|
|
61
61
|
*/
|
|
62
62
|
keepMounted?: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Custom expand icon
|
|
65
|
+
*/
|
|
66
|
+
expandIcon?: React.ReactNode | ((props: {
|
|
67
|
+
open: boolean;
|
|
68
|
+
className?: string;
|
|
69
|
+
}) => React.ReactNode);
|
|
70
|
+
/**
|
|
71
|
+
* Custom collapse icon
|
|
72
|
+
*/
|
|
73
|
+
collapseIcon?: React.ReactNode | ((props: {
|
|
74
|
+
open: boolean;
|
|
75
|
+
className?: string;
|
|
76
|
+
}) => React.ReactNode);
|
|
63
77
|
}
|
|
64
78
|
export declare const VerticalCollapsiblePanel: React.FC<VerticalCollapsiblePanelProps>;
|
|
65
79
|
//# sourceMappingURL=component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/vertical-collapsible-panel/component.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/vertical-collapsible-panel/component.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAgB3D,OAAO,aAAa,CAAC;AAErB,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C;;;OAGG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE7B;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;SAEK;IACL,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,UAAU,CAAC,EACP,KAAK,CAAC,SAAS,GACf,CAAC,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IACxE;;OAEG;IACH,YAAY,CAAC,EACT,KAAK,CAAC,SAAS,GACf,CAAC,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;CACzE;AAED,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAC7C,6BAA6B,CAmJ9B,CAAC"}
|
|
@@ -1,94 +1,101 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsxs as
|
|
3
|
-
import { useState as
|
|
4
|
-
import { Collapsible as
|
|
5
|
-
import {
|
|
6
|
-
import { useControlledState as
|
|
2
|
+
import { jsxs as a, jsx as s } from "react/jsx-runtime";
|
|
3
|
+
import { useState as S, useRef as A, useEffect as E } from "react";
|
|
4
|
+
import { Collapsible as m } from "@base-ui-components/react";
|
|
5
|
+
import { MinusCircleIcon as T, PlusCircleIcon as V } from "@bioturing/assets";
|
|
6
|
+
import { useControlledState as $ } from "../hooks/useControlledState.js";
|
|
7
7
|
import './style.css';/* empty css */
|
|
8
|
-
import { Transition as
|
|
9
|
-
import { useCls as
|
|
10
|
-
import { useAnimationsFinished as
|
|
11
|
-
import { clsx as
|
|
12
|
-
import { Truncate as
|
|
13
|
-
import { IconButton as
|
|
14
|
-
const
|
|
15
|
-
children:
|
|
8
|
+
import { Transition as q } from "../transition/component.js";
|
|
9
|
+
import { useCls as z } from "../utils/antdUtils.js";
|
|
10
|
+
import { useAnimationsFinished as D } from "../hooks/base-ui.js";
|
|
11
|
+
import { clsx as n } from "../utils/cn.js";
|
|
12
|
+
import { Truncate as G } from "../truncate/component.js";
|
|
13
|
+
import { IconButton as y } from "../icon-button/component.js";
|
|
14
|
+
const ee = ({
|
|
15
|
+
children: C,
|
|
16
16
|
title: i,
|
|
17
|
-
defaultOpen:
|
|
18
|
-
open:
|
|
19
|
-
onOpenChange:
|
|
20
|
-
className:
|
|
21
|
-
headerClassName:
|
|
22
|
-
headerInnerClassName:
|
|
23
|
-
bodyClassName:
|
|
17
|
+
defaultOpen: v = !1,
|
|
18
|
+
open: x,
|
|
19
|
+
onOpenChange: O,
|
|
20
|
+
className: g,
|
|
21
|
+
headerClassName: w,
|
|
22
|
+
headerInnerClassName: R,
|
|
23
|
+
bodyClassName: k,
|
|
24
24
|
contentPadding: o = "16px",
|
|
25
|
-
afterTitle:
|
|
26
|
-
actions:
|
|
27
|
-
useTitleAsTrigger:
|
|
28
|
-
keepMounted:
|
|
25
|
+
afterTitle: d,
|
|
26
|
+
actions: B,
|
|
27
|
+
useTitleAsTrigger: f = !0,
|
|
28
|
+
keepMounted: F = !1,
|
|
29
|
+
expandIcon: c,
|
|
30
|
+
collapseIcon: p
|
|
29
31
|
}) => {
|
|
30
|
-
const e =
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
), [
|
|
35
|
-
waitForNextTick:
|
|
32
|
+
const e = z(), [l, u] = $(
|
|
33
|
+
x,
|
|
34
|
+
O,
|
|
35
|
+
v
|
|
36
|
+
), [I, j] = S(l), h = A(null), b = D(h, {
|
|
37
|
+
waitForNextTick: l
|
|
36
38
|
});
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
E(() => {
|
|
40
|
+
b(() => {
|
|
41
|
+
j(l);
|
|
40
42
|
});
|
|
41
|
-
}, [
|
|
42
|
-
|
|
43
|
+
}, [l, b]);
|
|
44
|
+
const r = e(
|
|
45
|
+
"collapsible-panel-caret",
|
|
46
|
+
l && e("collapsible-panel-caret-open")
|
|
47
|
+
), t = typeof c == "function" ? c({
|
|
48
|
+
open: l,
|
|
49
|
+
className: r
|
|
50
|
+
}) : c, N = typeof p == "function" ? p({
|
|
51
|
+
open: l,
|
|
52
|
+
className: r
|
|
53
|
+
}) : p || t;
|
|
54
|
+
return /* @__PURE__ */ a(
|
|
55
|
+
m.Root,
|
|
43
56
|
{
|
|
44
|
-
className:
|
|
45
|
-
open:
|
|
46
|
-
onOpenChange:
|
|
47
|
-
ref:
|
|
57
|
+
className: n(e("collapsible-panel"), g),
|
|
58
|
+
open: l,
|
|
59
|
+
onOpenChange: u,
|
|
60
|
+
ref: h,
|
|
48
61
|
children: [
|
|
49
|
-
/* @__PURE__ */
|
|
50
|
-
/* @__PURE__ */
|
|
62
|
+
/* @__PURE__ */ a("div", { className: n(e("collapsible-panel-header"), w), children: [
|
|
63
|
+
/* @__PURE__ */ a(
|
|
51
64
|
"div",
|
|
52
65
|
{
|
|
53
|
-
className:
|
|
66
|
+
className: n(
|
|
54
67
|
e("collapsible-panel-header-inner"),
|
|
55
|
-
|
|
68
|
+
R
|
|
56
69
|
),
|
|
57
70
|
children: [
|
|
58
|
-
/* @__PURE__ */
|
|
71
|
+
/* @__PURE__ */ s(
|
|
59
72
|
"div",
|
|
60
73
|
{
|
|
61
74
|
className: e("collapsible-panel-header-text"),
|
|
62
|
-
onClick:
|
|
63
|
-
style:
|
|
75
|
+
onClick: f ? () => u((M) => !M) : void 0,
|
|
76
|
+
style: f ? {
|
|
64
77
|
cursor: "pointer"
|
|
65
78
|
} : {},
|
|
66
|
-
children: typeof i == "string" ? /* @__PURE__ */
|
|
79
|
+
children: typeof i == "string" ? /* @__PURE__ */ s(G, { children: i }) : i
|
|
67
80
|
}
|
|
68
81
|
),
|
|
69
|
-
/* @__PURE__ */
|
|
70
|
-
|
|
71
|
-
/* @__PURE__ */
|
|
72
|
-
|
|
82
|
+
/* @__PURE__ */ a("div", { className: e("collapsible-panel-header-actions"), children: [
|
|
83
|
+
l && B,
|
|
84
|
+
/* @__PURE__ */ s(
|
|
85
|
+
m.Trigger,
|
|
73
86
|
{
|
|
74
87
|
className: e("collapsible-panel-trigger"),
|
|
75
|
-
render:
|
|
76
|
-
|
|
88
|
+
render: l ? /* @__PURE__ */ s(y, { children: N || /* @__PURE__ */ s(
|
|
89
|
+
T,
|
|
77
90
|
{
|
|
78
|
-
weight: "
|
|
79
|
-
className:
|
|
80
|
-
e("collapsible-panel-caret"),
|
|
81
|
-
s && e("collapsible-panel-caret-open")
|
|
82
|
-
)
|
|
91
|
+
weight: "regular",
|
|
92
|
+
className: r
|
|
83
93
|
}
|
|
84
|
-
) }) : /* @__PURE__ */
|
|
85
|
-
|
|
94
|
+
) }) : /* @__PURE__ */ s(y, { children: t || /* @__PURE__ */ s(
|
|
95
|
+
V,
|
|
86
96
|
{
|
|
87
|
-
weight: "
|
|
88
|
-
className:
|
|
89
|
-
e("collapsible-panel-caret"),
|
|
90
|
-
s && e("collapsible-panel-caret-open")
|
|
91
|
-
)
|
|
97
|
+
weight: "regular",
|
|
98
|
+
className: r
|
|
92
99
|
}
|
|
93
100
|
) })
|
|
94
101
|
}
|
|
@@ -97,23 +104,23 @@ const X = ({
|
|
|
97
104
|
]
|
|
98
105
|
}
|
|
99
106
|
),
|
|
100
|
-
|
|
107
|
+
l && d && /* @__PURE__ */ s("div", { className: e("collapsible-panel-header-after"), children: d })
|
|
101
108
|
] }),
|
|
102
|
-
/* @__PURE__ */
|
|
103
|
-
|
|
109
|
+
/* @__PURE__ */ s(
|
|
110
|
+
m.Panel,
|
|
104
111
|
{
|
|
105
112
|
className: e("collapsible-panel-content"),
|
|
106
113
|
style: typeof o < "u" ? {
|
|
107
114
|
"--ds-content-padding": o === !1 || o === 0 ? "0" : typeof o == "number" ? `${o}px` : o
|
|
108
115
|
} : {},
|
|
109
|
-
keepMounted:
|
|
110
|
-
children: /* @__PURE__ */
|
|
111
|
-
|
|
116
|
+
keepMounted: F,
|
|
117
|
+
children: /* @__PURE__ */ s(
|
|
118
|
+
q,
|
|
112
119
|
{
|
|
113
|
-
show:
|
|
114
|
-
className:
|
|
120
|
+
show: I,
|
|
121
|
+
className: n(e("collapsible-panel-body"), k),
|
|
115
122
|
keepMounted: !0,
|
|
116
|
-
children: /* @__PURE__ */
|
|
123
|
+
children: /* @__PURE__ */ s("div", { children: C })
|
|
117
124
|
}
|
|
118
125
|
)
|
|
119
126
|
}
|
|
@@ -123,6 +130,6 @@ const X = ({
|
|
|
123
130
|
);
|
|
124
131
|
};
|
|
125
132
|
export {
|
|
126
|
-
|
|
133
|
+
ee as VerticalCollapsiblePanel
|
|
127
134
|
};
|
|
128
135
|
//# sourceMappingURL=component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/vertical-collapsible-panel/component.tsx"],"sourcesContent":["\"use client\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { Collapsible } from \"@base-ui-components/react\";\nimport { MinusCircle, PlusCircle } from \"@bioturing/assets\";\nimport { useCls, clsx } from \"../utils\";\nimport { useControlledState } from \"../hooks/useControlledState\";\nimport { Transition } from \"../transition\";\nimport { useAnimationsFinished } from \"../hooks\";\nimport { IconButton } from \"../icon-button\";\nimport { Truncate } from \"../truncate\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\nexport interface VerticalCollapsiblePanelProps {\n /**\n * The content of the panel that will be toggled\n */\n children: React.ReactNode;\n /**\n * The header of the panel\n */\n title?: React.ReactNode;\n /**\n * Indicate if the title should be used as a trigger\n * @default true\n */\n useTitleAsTrigger?: boolean;\n /**\n * Custom Content Padding\n * @default \"24px\"\n */\n contentPadding?: number | string | boolean;\n /**\n * Add more content below the title\n * Only show when panel is open\n */\n afterTitle?: React.ReactNode;\n\n /**\n * Whether the panel is expanded by default\n */\n defaultOpen?: boolean;\n /**\n * Control the open state (makes the component controlled)\n */\n open?: boolean;\n /**\n * Callback when the open state changes\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * Additional class name for the component\n */\n className?: string;\n /**\n * Addtional class name for the header\n */\n headerClassName?: string;\n /**\n * Addtional class name for the header\n */\n headerInnerClassName?: string;\n /**\n * Addtional class name for the body\n * */\n bodyClassName?: string;\n /**\n * Actions to be displayed in the header\n * Only show when panel is open\n */\n actions?: React.ReactNode;\n /**\n * Keeping it as mounted, just hide the content\n */\n keepMounted?: boolean;\n}\n\nexport const VerticalCollapsiblePanel: React.FC<\n VerticalCollapsiblePanelProps\n> = ({\n children,\n title,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n className,\n headerClassName,\n headerInnerClassName,\n bodyClassName,\n contentPadding = \"16px\",\n afterTitle,\n actions,\n useTitleAsTrigger = true,\n keepMounted = false,\n}) => {\n const cls = useCls();\n // Use useControlledState for open state\n const [isOpen, setIsOpen] = useControlledState(\n controlledOpen,\n onOpenChange,\n defaultOpen\n );\n const [isBodyOpen, setIsBodyOpen] = useState(isOpen);\n const ref = useRef<HTMLDivElement>(null);\n const runOnceAnimationsFinish = useAnimationsFinished(ref, {\n waitForNextTick: isOpen,\n });\n useEffect(() => {\n runOnceAnimationsFinish(() => {\n setIsBodyOpen(isOpen);\n });\n }, [isOpen, runOnceAnimationsFinish]);\n return (\n <Collapsible.Root\n className={clsx(cls(\"collapsible-panel\"), className)}\n open={isOpen}\n onOpenChange={setIsOpen}\n ref={ref}\n >\n <div className={clsx(cls(\"collapsible-panel-header\"), headerClassName)}>\n <div\n className={clsx(\n cls(\"collapsible-panel-header-inner\"),\n headerInnerClassName\n )}\n >\n <div\n className={cls(\"collapsible-panel-header-text\")}\n onClick={\n useTitleAsTrigger ? () => setIsOpen((open) => !open) : undefined\n }\n style={\n useTitleAsTrigger\n ? {\n cursor: \"pointer\",\n }\n : {}\n }\n >\n {typeof title == \"string\" ? <Truncate>{title}</Truncate> : title}\n </div>\n <div className={cls(\"collapsible-panel-header-actions\")}>\n {isOpen && actions}\n <Collapsible.Trigger\n className={cls(\"collapsible-panel-trigger\")}\n render={\n isOpen ? (\n <IconButton>\n <MinusCircle\n weight=\"bold\"\n className={clsx(\n cls(\"collapsible-panel-caret\"),\n isOpen && cls(\"collapsible-panel-caret-open\")\n )}\n />\n </IconButton>\n ) : (\n <IconButton>\n <PlusCircle\n weight=\"bold\"\n className={clsx(\n cls(\"collapsible-panel-caret\"),\n isOpen && cls(\"collapsible-panel-caret-open\")\n )}\n />\n </IconButton>\n )\n }\n ></Collapsible.Trigger>\n </div>\n </div>\n {isOpen && afterTitle && (\n <div className={cls(\"collapsible-panel-header-after\")}>\n {afterTitle}\n </div>\n )}\n </div>\n <Collapsible.Panel\n className={cls(\"collapsible-panel-content\")}\n style={\n (typeof contentPadding != \"undefined\"\n ? {\n \"--ds-content-padding\":\n contentPadding === false || contentPadding === 0\n ? \"0\"\n : typeof contentPadding == \"number\"\n ? `${contentPadding}px`\n : contentPadding,\n }\n : {}) as React.CSSProperties\n }\n keepMounted={keepMounted}\n >\n <Transition\n show={isBodyOpen}\n className={clsx(cls(\"collapsible-panel-body\"), bodyClassName)}\n keepMounted\n >\n <div>{children}</div>\n </Transition>\n </Collapsible.Panel>\n </Collapsible.Root>\n );\n};\n"],"names":["VerticalCollapsiblePanel","children","title","defaultOpen","controlledOpen","onOpenChange","className","headerClassName","headerInnerClassName","bodyClassName","contentPadding","afterTitle","actions","useTitleAsTrigger","keepMounted","cls","useCls","isOpen","setIsOpen","useControlledState","isBodyOpen","setIsBodyOpen","useState","ref","useRef","runOnceAnimationsFinish","useAnimationsFinished","useEffect","jsxs","Collapsible","clsx","jsx","open","Truncate","IconButton","MinusCircle","PlusCircle","Transition"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component.js","sources":["../../../src/components/vertical-collapsible-panel/component.tsx"],"sourcesContent":["\"use client\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { Collapsible } from \"@base-ui-components/react\";\nimport {\n MinusCircle,\n MinusCircleIcon,\n PlusCircle,\n PlusCircleIcon,\n} from \"@bioturing/assets\";\nimport { useCls, clsx } from \"../utils\";\nimport { useControlledState } from \"../hooks/useControlledState\";\nimport { Transition } from \"../transition\";\nimport { useAnimationsFinished } from \"../hooks\";\nimport { IconButton } from \"../icon-button\";\nimport { Truncate } from \"../truncate\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\nexport interface VerticalCollapsiblePanelProps {\n /**\n * The content of the panel that will be toggled\n */\n children: React.ReactNode;\n /**\n * The header of the panel\n */\n title?: React.ReactNode;\n /**\n * Indicate if the title should be used as a trigger\n * @default true\n */\n useTitleAsTrigger?: boolean;\n /**\n * Custom Content Padding\n * @default \"24px\"\n */\n contentPadding?: number | string | boolean;\n /**\n * Add more content below the title\n * Only show when panel is open\n */\n afterTitle?: React.ReactNode;\n\n /**\n * Whether the panel is expanded by default\n */\n defaultOpen?: boolean;\n /**\n * Control the open state (makes the component controlled)\n */\n open?: boolean;\n /**\n * Callback when the open state changes\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * Additional class name for the component\n */\n className?: string;\n /**\n * Addtional class name for the header\n */\n headerClassName?: string;\n /**\n * Addtional class name for the header\n */\n headerInnerClassName?: string;\n /**\n * Addtional class name for the body\n * */\n bodyClassName?: string;\n /**\n * Actions to be displayed in the header\n * Only show when panel is open\n */\n actions?: React.ReactNode;\n /**\n * Keeping it as mounted, just hide the content\n */\n keepMounted?: boolean;\n /**\n * Custom expand icon\n */\n expandIcon?:\n | React.ReactNode\n | ((props: { open: boolean; className?: string }) => React.ReactNode);\n /**\n * Custom collapse icon\n */\n collapseIcon?:\n | React.ReactNode\n | ((props: { open: boolean; className?: string }) => React.ReactNode);\n}\n\nexport const VerticalCollapsiblePanel: React.FC<\n VerticalCollapsiblePanelProps\n> = ({\n children,\n title,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n className,\n headerClassName,\n headerInnerClassName,\n bodyClassName,\n contentPadding = \"16px\",\n afterTitle,\n actions,\n useTitleAsTrigger = true,\n keepMounted = false,\n expandIcon,\n collapseIcon,\n}) => {\n const cls = useCls();\n // Use useControlledState for open state\n const [isOpen, setIsOpen] = useControlledState(\n controlledOpen,\n onOpenChange,\n defaultOpen\n );\n const [isBodyOpen, setIsBodyOpen] = useState(isOpen);\n const ref = useRef<HTMLDivElement>(null);\n const runOnceAnimationsFinish = useAnimationsFinished(ref, {\n waitForNextTick: isOpen,\n });\n useEffect(() => {\n runOnceAnimationsFinish(() => {\n setIsBodyOpen(isOpen);\n });\n }, [isOpen, runOnceAnimationsFinish]);\n const iconClassName = cls(\n \"collapsible-panel-caret\",\n isOpen && cls(\"collapsible-panel-caret-open\")\n );\n const expandIconRender =\n typeof expandIcon === \"function\"\n ? expandIcon({\n open: isOpen,\n className: iconClassName,\n })\n : expandIcon;\n const collapseIconRender =\n typeof collapseIcon === \"function\"\n ? collapseIcon({\n open: isOpen,\n className: iconClassName,\n })\n : collapseIcon || expandIconRender;\n return (\n <Collapsible.Root\n className={clsx(cls(\"collapsible-panel\"), className)}\n open={isOpen}\n onOpenChange={setIsOpen}\n ref={ref}\n >\n <div className={clsx(cls(\"collapsible-panel-header\"), headerClassName)}>\n <div\n className={clsx(\n cls(\"collapsible-panel-header-inner\"),\n headerInnerClassName\n )}\n >\n <div\n className={cls(\"collapsible-panel-header-text\")}\n onClick={\n useTitleAsTrigger ? () => setIsOpen((open) => !open) : undefined\n }\n style={\n useTitleAsTrigger\n ? {\n cursor: \"pointer\",\n }\n : {}\n }\n >\n {typeof title == \"string\" ? <Truncate>{title}</Truncate> : title}\n </div>\n <div className={cls(\"collapsible-panel-header-actions\")}>\n {isOpen && actions}\n <Collapsible.Trigger\n className={cls(\"collapsible-panel-trigger\")}\n render={\n isOpen ? (\n <IconButton>\n {collapseIconRender ? (\n collapseIconRender\n ) : (\n <MinusCircleIcon\n weight=\"regular\"\n className={iconClassName}\n />\n )}\n </IconButton>\n ) : (\n <IconButton>\n {expandIconRender ? (\n expandIconRender\n ) : (\n <PlusCircleIcon\n weight=\"regular\"\n className={iconClassName}\n />\n )}\n </IconButton>\n )\n }\n ></Collapsible.Trigger>\n </div>\n </div>\n {isOpen && afterTitle && (\n <div className={cls(\"collapsible-panel-header-after\")}>\n {afterTitle}\n </div>\n )}\n </div>\n <Collapsible.Panel\n className={cls(\"collapsible-panel-content\")}\n style={\n (typeof contentPadding != \"undefined\"\n ? {\n \"--ds-content-padding\":\n contentPadding === false || contentPadding === 0\n ? \"0\"\n : typeof contentPadding == \"number\"\n ? `${contentPadding}px`\n : contentPadding,\n }\n : {}) as React.CSSProperties\n }\n keepMounted={keepMounted}\n >\n <Transition\n show={isBodyOpen}\n className={clsx(cls(\"collapsible-panel-body\"), bodyClassName)}\n keepMounted\n >\n <div>{children}</div>\n </Transition>\n </Collapsible.Panel>\n </Collapsible.Root>\n );\n};\n"],"names":["VerticalCollapsiblePanel","children","title","defaultOpen","controlledOpen","onOpenChange","className","headerClassName","headerInnerClassName","bodyClassName","contentPadding","afterTitle","actions","useTitleAsTrigger","keepMounted","expandIcon","collapseIcon","cls","useCls","isOpen","setIsOpen","useControlledState","isBodyOpen","setIsBodyOpen","useState","ref","useRef","runOnceAnimationsFinish","useAnimationsFinished","useEffect","iconClassName","expandIconRender","collapseIconRender","jsxs","Collapsible","clsx","jsx","open","Truncate","IconButton","MinusCircleIcon","PlusCircleIcon","Transition"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer components{.ds-collapsible-panel{overflow:hidden;flex-basis:fit-content;flex-grow:0;flex-shrink:0;display:flex;max-height:100%;flex-direction:column}.ds-collapsible-panel[data-closed]{transition:all .2s ease-out}.ds-collapsible-panel[data-open]{transition:all .2s ease-in;flex-grow:1}.ds-collapsible-panel-trigger{background:none;border:none;padding:0;cursor:pointer;text-align:left}.ds-collapsible-panel-header{display:flex;flex-direction:column;flex-grow:0;transition:all .2s ease-in-out;border-bottom:1px solid transparent}.ds-collapsible-panel-header-inner{display:flex;align-items:center;transition:width .2s ease;padding:.75rem 1rem;gap:.5rem}.ds-collapsible-panel-header-after{display:flex;align-items:center;padding:0 1rem .75rem;gap:.5rem}.ds-collapsible-panel[data-open] .ds-collapsible-panel-header{border-bottom:1px solid var(--ds-color-split)}.ds-collapsible-panel[data-open] .ds-collapsible-panel-header-inner{justify-content:flex-start;flex-grow:1}.ds-collapsible-panel-trigger:hover .ds-collapsible-panel-header{background-color:var(--ds-color-bg-hover)}.ds-collapsible-panel-header-actions{display:flex;align-items:center;justify-content:center;flex-shrink:0;gap:.5rem;flex-grow:0}.ds-collapsible-panel-header-text{flex-grow:1;display:inline-block;font-size:var(--text-ds-h5);font-weight:var(--text-ds-h5--font-weight);line-height:var(--text-ds-h5--line-height);color:var(--ds-color-text)}.ds-collapsible-panel[data-closed] .ds-collapsible-panel-header-inner{transform:rotate(180deg);writing-mode:vertical-rl}.ds-collapsible-panel-content{display:flex;flex-direction:column;flex-grow:1;flex-shrink:1;overflow-y:auto}.ds-collapsible-panel-content[data-closed]{display:none}.ds-collapsible-panel-body{padding:var(--ds-content-padding);flex-grow:1;transition:opacity .2s ease-in-out}.ds-collapsible-panel-body[data-starting],.ds-collapsible-panel-body[data-ending]{opacity:0}}
|
|
1
|
+
@layer components{.ds-collapsible-panel{overflow:hidden;flex-basis:fit-content;flex-grow:0;flex-shrink:0;display:flex;max-height:100%;flex-direction:column}.ds-collapsible-panel[data-closed]{transition:all .2s ease-out}.ds-collapsible-panel[data-closed] .ds-collapsible-panel-trigger>*{transform:rotate(-180deg)}.ds-collapsible-panel[data-open]{transition:all .2s ease-in;flex-grow:1}.ds-collapsible-panel-trigger{background:none;border:none;padding:0;cursor:pointer;text-align:left}.ds-collapsible-panel-header{display:flex;flex-direction:column;flex-grow:0;transition:all .2s ease-in-out;border-bottom:1px solid transparent}.ds-collapsible-panel-header-inner{display:flex;align-items:center;transition:width .2s ease;padding:.75rem 1rem;gap:.5rem}.ds-collapsible-panel-header-after{display:flex;align-items:center;padding:0 1rem .75rem;gap:.5rem}.ds-collapsible-panel[data-open] .ds-collapsible-panel-header{border-bottom:1px solid var(--ds-color-split)}.ds-collapsible-panel[data-open] .ds-collapsible-panel-header-inner{justify-content:flex-start;flex-grow:1}.ds-collapsible-panel-trigger:hover .ds-collapsible-panel-header{background-color:var(--ds-color-bg-hover)}.ds-collapsible-panel-header-actions{display:flex;align-items:center;justify-content:center;flex-shrink:0;gap:.5rem;flex-grow:0}.ds-collapsible-panel-header-text{flex-grow:1;display:inline-block;font-size:var(--text-ds-h5);font-weight:var(--text-ds-h5--font-weight);line-height:var(--text-ds-h5--line-height);color:var(--ds-color-text)}.ds-collapsible-panel[data-closed] .ds-collapsible-panel-header-inner{transform:rotate(180deg);writing-mode:vertical-rl}.ds-collapsible-panel-content{display:flex;flex-direction:column;flex-grow:1;flex-shrink:1;overflow-y:auto}.ds-collapsible-panel-content[data-closed]{display:none}.ds-collapsible-panel-body{padding:var(--ds-content-padding);flex-grow:1;transition:opacity .2s ease-in-out}.ds-collapsible-panel-body[data-starting],.ds-collapsible-panel-body[data-ending]{opacity:0}}
|