@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.
Files changed (102) hide show
  1. package/dist/components/base-menu/component.d.ts +12 -0
  2. package/dist/components/base-menu/component.d.ts.map +1 -0
  3. package/dist/components/base-menu/component.js +69 -0
  4. package/dist/components/base-menu/component.js.map +1 -0
  5. package/dist/components/base-menu/index.d.ts +18 -0
  6. package/dist/components/base-menu/index.d.ts.map +1 -0
  7. package/dist/components/base-menu/index.js +11 -0
  8. package/dist/components/base-menu/index.js.map +1 -0
  9. package/dist/components/base-menu/item.css +1 -0
  10. package/dist/components/base-menu/item.d.ts +47 -0
  11. package/dist/components/base-menu/item.d.ts.map +1 -0
  12. package/dist/components/base-menu/item.js +73 -0
  13. package/dist/components/base-menu/item.js.map +1 -0
  14. package/dist/components/base-menu/style.css +1 -0
  15. package/dist/components/breadcrumb/component.d.ts +3 -2
  16. package/dist/components/breadcrumb/component.d.ts.map +1 -1
  17. package/dist/components/breadcrumb/component.js +138 -38
  18. package/dist/components/breadcrumb/component.js.map +1 -1
  19. package/dist/components/breadcrumb/index.d.ts +1 -0
  20. package/dist/components/breadcrumb/index.d.ts.map +1 -1
  21. package/dist/components/breadcrumb/item.d.ts +3 -0
  22. package/dist/components/breadcrumb/item.d.ts.map +1 -0
  23. package/dist/components/breadcrumb/item.js +19 -0
  24. package/dist/components/breadcrumb/item.js.map +1 -0
  25. package/dist/components/breadcrumb/style.css +1 -1
  26. package/dist/components/breadcrumb/types.d.ts +9 -2
  27. package/dist/components/breadcrumb/types.d.ts.map +1 -1
  28. package/dist/components/code-block/component.d.ts +1 -1
  29. package/dist/components/code-block/component.d.ts.map +1 -1
  30. package/dist/components/code-block/component.js +80 -71
  31. package/dist/components/code-block/component.js.map +1 -1
  32. package/dist/components/code-block/types.d.ts +17 -0
  33. package/dist/components/code-block/types.d.ts.map +1 -1
  34. package/dist/components/combobox/component.d.ts +3 -26
  35. package/dist/components/combobox/component.d.ts.map +1 -1
  36. package/dist/components/combobox/component.js +326 -216
  37. package/dist/components/combobox/component.js.map +1 -1
  38. package/dist/components/combobox/style.css +1 -1
  39. package/dist/components/command-palette/component.js +6 -6
  40. package/dist/components/command-palette/component.js.map +1 -1
  41. package/dist/components/dropdown-menu/component.d.ts.map +1 -1
  42. package/dist/components/dropdown-menu/component.js +90 -87
  43. package/dist/components/dropdown-menu/component.js.map +1 -1
  44. package/dist/components/dropdown-menu/divider.d.ts.map +1 -1
  45. package/dist/components/dropdown-menu/divider.js +17 -10
  46. package/dist/components/dropdown-menu/divider.js.map +1 -1
  47. package/dist/components/dropdown-menu/item.d.ts +19 -9
  48. package/dist/components/dropdown-menu/item.d.ts.map +1 -1
  49. package/dist/components/dropdown-menu/item.js +71 -130
  50. package/dist/components/dropdown-menu/item.js.map +1 -1
  51. package/dist/components/dropdown-menu/style.css +1 -1
  52. package/dist/components/dropdown-menu/useDropdownMenu.d.ts.map +1 -1
  53. package/dist/components/dropdown-menu/useDropdownMenu.js +60 -63
  54. package/dist/components/dropdown-menu/useDropdownMenu.js.map +1 -1
  55. package/dist/components/field/component.d.ts +5 -1
  56. package/dist/components/field/component.d.ts.map +1 -1
  57. package/dist/components/field/component.js +29 -20
  58. package/dist/components/field/component.js.map +1 -1
  59. package/dist/components/popup-panel/component.d.ts.map +1 -1
  60. package/dist/components/popup-panel/component.js +101 -101
  61. package/dist/components/popup-panel/component.js.map +1 -1
  62. package/dist/components/scroll-area/component.d.ts +1 -1
  63. package/dist/components/scroll-area/component.d.ts.map +1 -1
  64. package/dist/components/scroll-area/component.js +74 -58
  65. package/dist/components/scroll-area/component.js.map +1 -1
  66. package/dist/components/select-trigger/component.d.ts +71 -9
  67. package/dist/components/select-trigger/component.d.ts.map +1 -1
  68. package/dist/components/select-trigger/component.js +180 -139
  69. package/dist/components/select-trigger/component.js.map +1 -1
  70. package/dist/components/select-trigger/index.d.ts +1 -2
  71. package/dist/components/select-trigger/index.d.ts.map +1 -1
  72. package/dist/components/select-trigger/style.css +1 -1
  73. package/dist/components/table/component.d.ts.map +1 -1
  74. package/dist/components/table/component.js +53 -52
  75. package/dist/components/table/component.js.map +1 -1
  76. package/dist/components/theme-provider/style.css +1 -1
  77. package/dist/components/truncate/component.d.ts.map +1 -1
  78. package/dist/components/truncate/component.js +84 -80
  79. package/dist/components/truncate/component.js.map +1 -1
  80. package/dist/components/truncate/helpers.d.ts +9 -0
  81. package/dist/components/truncate/helpers.d.ts.map +1 -1
  82. package/dist/components/truncate/helpers.js +70 -40
  83. package/dist/components/truncate/helpers.js.map +1 -1
  84. package/dist/components/truncate/index.d.ts +1 -0
  85. package/dist/components/truncate/index.d.ts.map +1 -1
  86. package/dist/components/truncate/useOverflowDetection.d.ts +19 -0
  87. package/dist/components/truncate/useOverflowDetection.d.ts.map +1 -0
  88. package/dist/components/truncate/useOverflowDetection.js +54 -0
  89. package/dist/components/truncate/useOverflowDetection.js.map +1 -0
  90. package/dist/components/utils/WithRenderProp.d.ts.map +1 -1
  91. package/dist/components/utils/WithRenderProp.js +10 -10
  92. package/dist/components/utils/WithRenderProp.js.map +1 -1
  93. package/dist/components/vertical-collapsible-panel/component.d.ts +14 -0
  94. package/dist/components/vertical-collapsible-panel/component.d.ts.map +1 -1
  95. package/dist/components/vertical-collapsible-panel/component.js +82 -75
  96. package/dist/components/vertical-collapsible-panel/component.js.map +1 -1
  97. package/dist/components/vertical-collapsible-panel/style.css +1 -1
  98. package/dist/index.js +230 -224
  99. package/dist/index.js.map +1 -1
  100. package/dist/stats.html +1 -1
  101. package/package.json +5 -6
  102. 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,KAAqB,MAAM,OAAO,CAAC;AAC1C,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,SAU3B,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
+ {"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 { jsx as m } from "react/jsx-runtime";
2
- import { forwardRef as p } from "react";
3
- import { useRender as i } from "@base-ui-components/react/use-render";
4
- const c = (e, r) => {
5
- const { render: n, as: t = "div", state: o, ...d } = e;
6
- return i({
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
- }, l = p(c);
12
+ }, i = s(p);
13
13
  export {
14
- l as WithRenderProp
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: Tag = \"div\", state, ...etc } = props;\n const renderedElement = useRender({\n render: render || ((props) => <Tag {...props} />),\n props: etc,\n state,\n ref: ref as unknown as React.Ref<ElementTypeToDOMType<T>>,\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","Tag","state","etc","useRender","jsx","WithRenderProp","forwardRef"],"mappings":";;;AAgBA,MAAMA,IAAsB,CAI1BC,GACAC,MACG;AACH,QAAM,EAAE,QAAAC,GAAQ,IAAIC,IAAM,OAAO,OAAAC,GAAO,GAAGC,MAAQL;AAOnD,SANwBM,EAAU;AAAA,IAChC,QAAQJ,MAAW,CAACF,MAAU,gBAAAO,EAACJ,GAAA,EAAK,GAAGH,EAAAA,CAAO;AAAA,IAC9C,OAAOK;AAAA,IACP,OAAAD;AAAA,IACA,KAAAH;AAAA,EAAA,CACD;AAEH,GAEaO,IAAiBC,EAAWV,CAAmB;"}
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;AAW3D,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;CACvB;AAED,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAC7C,6BAA6B,CA6H9B,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 r, jsx as l } from "react/jsx-runtime";
3
- import { useState as I, useRef as g, useEffect as j } from "react";
4
- import { Collapsible as n } from "@base-ui-components/react";
5
- import { MinusCircle as M, PlusCircle as R } from "@bioturing/assets";
6
- import { useControlledState as S } from "../hooks/useControlledState.js";
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 A } from "../transition/component.js";
9
- import { useCls as E } from "../utils/antdUtils.js";
10
- import { useAnimationsFinished as T } from "../hooks/base-ui.js";
11
- import { clsx as a } from "../utils/cn.js";
12
- import { Truncate as V } from "../truncate/component.js";
13
- import { IconButton as f } from "../icon-button/component.js";
14
- const X = ({
15
- children: h,
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: b = !1,
18
- open: u,
19
- onOpenChange: N,
20
- className: x,
21
- headerClassName: y,
22
- headerInnerClassName: C,
23
- bodyClassName: v,
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: p,
26
- actions: O,
27
- useTitleAsTrigger: c = !0,
28
- keepMounted: w = !1
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 = E(), [s, t] = S(
31
- u,
32
- N,
33
- b
34
- ), [k, B] = I(s), m = g(null), d = T(m, {
35
- waitForNextTick: s
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
- return j(() => {
38
- d(() => {
39
- B(s);
39
+ E(() => {
40
+ b(() => {
41
+ j(l);
40
42
  });
41
- }, [s, d]), /* @__PURE__ */ r(
42
- n.Root,
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: a(e("collapsible-panel"), x),
45
- open: s,
46
- onOpenChange: t,
47
- ref: m,
57
+ className: n(e("collapsible-panel"), g),
58
+ open: l,
59
+ onOpenChange: u,
60
+ ref: h,
48
61
  children: [
49
- /* @__PURE__ */ r("div", { className: a(e("collapsible-panel-header"), y), children: [
50
- /* @__PURE__ */ r(
62
+ /* @__PURE__ */ a("div", { className: n(e("collapsible-panel-header"), w), children: [
63
+ /* @__PURE__ */ a(
51
64
  "div",
52
65
  {
53
- className: a(
66
+ className: n(
54
67
  e("collapsible-panel-header-inner"),
55
- C
68
+ R
56
69
  ),
57
70
  children: [
58
- /* @__PURE__ */ l(
71
+ /* @__PURE__ */ s(
59
72
  "div",
60
73
  {
61
74
  className: e("collapsible-panel-header-text"),
62
- onClick: c ? () => t((F) => !F) : void 0,
63
- style: c ? {
75
+ onClick: f ? () => u((M) => !M) : void 0,
76
+ style: f ? {
64
77
  cursor: "pointer"
65
78
  } : {},
66
- children: typeof i == "string" ? /* @__PURE__ */ l(V, { children: i }) : i
79
+ children: typeof i == "string" ? /* @__PURE__ */ s(G, { children: i }) : i
67
80
  }
68
81
  ),
69
- /* @__PURE__ */ r("div", { className: e("collapsible-panel-header-actions"), children: [
70
- s && O,
71
- /* @__PURE__ */ l(
72
- n.Trigger,
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: s ? /* @__PURE__ */ l(f, { children: /* @__PURE__ */ l(
76
- M,
88
+ render: l ? /* @__PURE__ */ s(y, { children: N || /* @__PURE__ */ s(
89
+ T,
77
90
  {
78
- weight: "bold",
79
- className: a(
80
- e("collapsible-panel-caret"),
81
- s && e("collapsible-panel-caret-open")
82
- )
91
+ weight: "regular",
92
+ className: r
83
93
  }
84
- ) }) : /* @__PURE__ */ l(f, { children: /* @__PURE__ */ l(
85
- R,
94
+ ) }) : /* @__PURE__ */ s(y, { children: t || /* @__PURE__ */ s(
95
+ V,
86
96
  {
87
- weight: "bold",
88
- className: a(
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
- s && p && /* @__PURE__ */ l("div", { className: e("collapsible-panel-header-after"), children: p })
107
+ l && d && /* @__PURE__ */ s("div", { className: e("collapsible-panel-header-after"), children: d })
101
108
  ] }),
102
- /* @__PURE__ */ l(
103
- n.Panel,
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: w,
110
- children: /* @__PURE__ */ l(
111
- A,
116
+ keepMounted: F,
117
+ children: /* @__PURE__ */ s(
118
+ q,
112
119
  {
113
- show: k,
114
- className: a(e("collapsible-panel-body"), v),
120
+ show: I,
121
+ className: n(e("collapsible-panel-body"), k),
115
122
  keepMounted: !0,
116
- children: /* @__PURE__ */ l("div", { children: h })
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
- X as VerticalCollapsiblePanel
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":";;;;;;;;;;;;;AA8EO,MAAMA,IAET,CAAC;AAAA,EACH,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,MAAMC;AAAA,EACN,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,sBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,gBAAAC,IAAiB;AAAA,EACjB,YAAAC;AAAA,EACA,SAAAC;AAAA,EACA,mBAAAC,IAAoB;AAAA,EACpB,aAAAC,IAAc;AAChB,MAAM;AACJ,QAAMC,IAAMC,EAAA,GAEN,CAACC,GAAQC,CAAS,IAAIC;AAAA,IAC1Bf;AAAA,IACAC;AAAA,IACAF;AAAA,EAAA,GAEI,CAACiB,GAAYC,CAAa,IAAIC,EAASL,CAAM,GAC7CM,IAAMC,EAAuB,IAAI,GACjCC,IAA0BC,EAAsBH,GAAK;AAAA,IACzD,iBAAiBN;AAAA,EAAA,CAClB;AACD,SAAAU,EAAU,MAAM;AACd,IAAAF,EAAwB,MAAM;AAC5B,MAAAJ,EAAcJ,CAAM;AAAA,IACtB,CAAC;AAAA,EACH,GAAG,CAACA,GAAQQ,CAAuB,CAAC,GAElC,gBAAAG;AAAA,IAACC,EAAY;AAAA,IAAZ;AAAA,MACC,WAAWC,EAAKf,EAAI,mBAAmB,GAAGT,CAAS;AAAA,MACnD,MAAMW;AAAA,MACN,cAAcC;AAAA,MACd,KAAAK;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAAK,EAAC,SAAI,WAAWE,EAAKf,EAAI,0BAA0B,GAAGR,CAAe,GACnE,UAAA;AAAA,UAAA,gBAAAqB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWE;AAAA,gBACTf,EAAI,gCAAgC;AAAA,gBACpCP;AAAA,cAAA;AAAA,cAGF,UAAA;AAAA,gBAAA,gBAAAuB;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAWhB,EAAI,+BAA+B;AAAA,oBAC9C,SACEF,IAAoB,MAAMK,EAAU,CAACc,MAAS,CAACA,CAAI,IAAI;AAAA,oBAEzD,OACEnB,IACI;AAAA,sBACE,QAAQ;AAAA,oBAAA,IAEV,CAAA;AAAA,oBAGL,iBAAOX,KAAS,WAAW,gBAAA6B,EAACE,GAAA,EAAU,aAAM,IAAc/B;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAE7D,gBAAA0B,EAAC,OAAA,EAAI,WAAWb,EAAI,kCAAkC,GACnD,UAAA;AAAA,kBAAAE,KAAUL;AAAA,kBACX,gBAAAmB;AAAA,oBAACF,EAAY;AAAA,oBAAZ;AAAA,sBACC,WAAWd,EAAI,2BAA2B;AAAA,sBAC1C,QACEE,IACE,gBAAAc,EAACG,GAAA,EACC,UAAA,gBAAAH;AAAA,wBAACI;AAAA,wBAAA;AAAA,0BACC,QAAO;AAAA,0BACP,WAAWL;AAAA,4BACTf,EAAI,yBAAyB;AAAA,4BAC7BE,KAAUF,EAAI,8BAA8B;AAAA,0BAAA;AAAA,wBAC9C;AAAA,sBAAA,EACF,CACF,IAEA,gBAAAgB,EAACG,GAAA,EACC,UAAA,gBAAAH;AAAA,wBAACK;AAAA,wBAAA;AAAA,0BACC,QAAO;AAAA,0BACP,WAAWN;AAAA,4BACTf,EAAI,yBAAyB;AAAA,4BAC7BE,KAAUF,EAAI,8BAA8B;AAAA,0BAAA;AAAA,wBAC9C;AAAA,sBAAA,EACF,CACF;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAGL,EAAA,CACH;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAEDE,KAAUN,KACT,gBAAAoB,EAAC,OAAA,EAAI,WAAWhB,EAAI,gCAAgC,GACjD,UAAAJ,EAAA,CACH;AAAA,QAAA,GAEJ;AAAA,QACA,gBAAAoB;AAAA,UAACF,EAAY;AAAA,UAAZ;AAAA,YACC,WAAWd,EAAI,2BAA2B;AAAA,YAC1C,OACG,OAAOL,IAAkB,MACtB;AAAA,cACE,wBACEA,MAAmB,MAASA,MAAmB,IAC3C,MACA,OAAOA,KAAkB,WACzB,GAAGA,CAAc,OACjBA;AAAA,YAAA,IAER,CAAA;AAAA,YAEN,aAAAI;AAAA,YAEA,UAAA,gBAAAiB;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,MAAMjB;AAAA,gBACN,WAAWU,EAAKf,EAAI,wBAAwB,GAAGN,CAAa;AAAA,gBAC5D,aAAW;AAAA,gBAEX,UAAA,gBAAAsB,EAAC,SAAK,UAAA9B,EAAA,CAAS;AAAA,cAAA;AAAA,YAAA;AAAA,UACjB;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
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":";;;;;;;;;;;;;AA+FO,MAAMA,KAET,CAAC;AAAA,EACH,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,MAAMC;AAAA,EACN,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,sBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,gBAAAC,IAAiB;AAAA,EACjB,YAAAC;AAAA,EACA,SAAAC;AAAA,EACA,mBAAAC,IAAoB;AAAA,EACpB,aAAAC,IAAc;AAAA,EACd,YAAAC;AAAA,EACA,cAAAC;AACF,MAAM;AACJ,QAAMC,IAAMC,EAAA,GAEN,CAACC,GAAQC,CAAS,IAAIC;AAAA,IAC1BjB;AAAA,IACAC;AAAA,IACAF;AAAA,EAAA,GAEI,CAACmB,GAAYC,CAAa,IAAIC,EAASL,CAAM,GAC7CM,IAAMC,EAAuB,IAAI,GACjCC,IAA0BC,EAAsBH,GAAK;AAAA,IACzD,iBAAiBN;AAAA,EAAA,CAClB;AACD,EAAAU,EAAU,MAAM;AACd,IAAAF,EAAwB,MAAM;AAC5B,MAAAJ,EAAcJ,CAAM;AAAA,IACtB,CAAC;AAAA,EACH,GAAG,CAACA,GAAQQ,CAAuB,CAAC;AACpC,QAAMG,IAAgBb;AAAA,IACpB;AAAA,IACAE,KAAUF,EAAI,8BAA8B;AAAA,EAAA,GAExCc,IACJ,OAAOhB,KAAe,aAClBA,EAAW;AAAA,IACT,MAAMI;AAAA,IACN,WAAWW;AAAA,EAAA,CACZ,IACDf,GACAiB,IACJ,OAAOhB,KAAiB,aACpBA,EAAa;AAAA,IACX,MAAMG;AAAA,IACN,WAAWW;AAAA,EAAA,CACZ,IACDd,KAAgBe;AACtB,SACE,gBAAAE;AAAA,IAACC,EAAY;AAAA,IAAZ;AAAA,MACC,WAAWC,EAAKlB,EAAI,mBAAmB,GAAGX,CAAS;AAAA,MACnD,MAAMa;AAAA,MACN,cAAcC;AAAA,MACd,KAAAK;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAAQ,EAAC,SAAI,WAAWE,EAAKlB,EAAI,0BAA0B,GAAGV,CAAe,GACnE,UAAA;AAAA,UAAA,gBAAA0B;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWE;AAAA,gBACTlB,EAAI,gCAAgC;AAAA,gBACpCT;AAAA,cAAA;AAAA,cAGF,UAAA;AAAA,gBAAA,gBAAA4B;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAWnB,EAAI,+BAA+B;AAAA,oBAC9C,SACEJ,IAAoB,MAAMO,EAAU,CAACiB,MAAS,CAACA,CAAI,IAAI;AAAA,oBAEzD,OACExB,IACI;AAAA,sBACE,QAAQ;AAAA,oBAAA,IAEV,CAAA;AAAA,oBAGL,iBAAOX,KAAS,WAAW,gBAAAkC,EAACE,GAAA,EAAU,aAAM,IAAcpC;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAE7D,gBAAA+B,EAAC,OAAA,EAAI,WAAWhB,EAAI,kCAAkC,GACnD,UAAA;AAAA,kBAAAE,KAAUP;AAAA,kBACX,gBAAAwB;AAAA,oBAACF,EAAY;AAAA,oBAAZ;AAAA,sBACC,WAAWjB,EAAI,2BAA2B;AAAA,sBAC1C,QACEE,IACE,gBAAAiB,EAACG,GAAA,EACE,eAGC,gBAAAH;AAAA,wBAACI;AAAA,wBAAA;AAAA,0BACC,QAAO;AAAA,0BACP,WAAWV;AAAA,wBAAA;AAAA,sBAAA,EACb,CAEJ,IAEA,gBAAAM,EAACG,GAAA,EACE,eAGC,gBAAAH;AAAA,wBAACK;AAAA,wBAAA;AAAA,0BACC,QAAO;AAAA,0BACP,WAAWX;AAAA,wBAAA;AAAA,sBAAA,EACb,CAEJ;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAGL,EAAA,CACH;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAEDX,KAAUR,KACT,gBAAAyB,EAAC,OAAA,EAAI,WAAWnB,EAAI,gCAAgC,GACjD,UAAAN,EAAA,CACH;AAAA,QAAA,GAEJ;AAAA,QACA,gBAAAyB;AAAA,UAACF,EAAY;AAAA,UAAZ;AAAA,YACC,WAAWjB,EAAI,2BAA2B;AAAA,YAC1C,OACG,OAAOP,IAAkB,MACtB;AAAA,cACE,wBACEA,MAAmB,MAASA,MAAmB,IAC3C,MACA,OAAOA,KAAkB,WACzB,GAAGA,CAAc,OACjBA;AAAA,YAAA,IAER,CAAA;AAAA,YAEN,aAAAI;AAAA,YAEA,UAAA,gBAAAsB;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,MAAMpB;AAAA,gBACN,WAAWa,EAAKlB,EAAI,wBAAwB,GAAGR,CAAa;AAAA,gBAC5D,aAAW;AAAA,gBAEX,UAAA,gBAAA2B,EAAC,SAAK,UAAAnC,EAAA,CAAS;AAAA,cAAA;AAAA,YAAA;AAAA,UACjB;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -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}}