@bioturing/components 0.26.2 → 0.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/components/checkbox/component.js.map +1 -1
  2. package/dist/components/choice-list/component.js +24 -21
  3. package/dist/components/choice-list/component.js.map +1 -1
  4. package/dist/components/cmdk/index.js.map +1 -1
  5. package/dist/components/combobox/component.js +202 -0
  6. package/dist/components/combobox/component.js.map +1 -0
  7. package/dist/components/combobox/style.css +1 -0
  8. package/dist/components/combobox/trigger.js +89 -0
  9. package/dist/components/combobox/trigger.js.map +1 -0
  10. package/dist/components/dropdown-menu/component.js +176 -162
  11. package/dist/components/dropdown-menu/component.js.map +1 -1
  12. package/dist/components/dropdown-menu/divider.js +16 -0
  13. package/dist/components/dropdown-menu/divider.js.map +1 -0
  14. package/dist/components/dropdown-menu/item.css +1 -0
  15. package/dist/components/dropdown-menu/item.js +131 -0
  16. package/dist/components/dropdown-menu/item.js.map +1 -0
  17. package/dist/components/dropdown-menu/style.css +1 -1
  18. package/dist/components/hooks/useDraggable.js +77 -0
  19. package/dist/components/hooks/useDraggable.js.map +1 -0
  20. package/dist/components/hooks/useHover.js +26 -0
  21. package/dist/components/hooks/useHover.js.map +1 -0
  22. package/dist/components/hooks/useTransitionStatus.js +52 -0
  23. package/dist/components/hooks/useTransitionStatus.js.map +1 -0
  24. package/dist/components/nav/item.js +2 -2
  25. package/dist/components/popup-panel/component.js +136 -169
  26. package/dist/components/popup-panel/component.js.map +1 -1
  27. package/dist/components/popup-panel/style.css +1 -1
  28. package/dist/components/resizable/component.js +239 -0
  29. package/dist/components/resizable/component.js.map +1 -0
  30. package/dist/components/resizable/style.css +1 -0
  31. package/dist/components/segmented/component.js +3 -3
  32. package/dist/components/segmented/component.js.map +1 -1
  33. package/dist/components/select/component.js +160 -91
  34. package/dist/components/select/component.js.map +1 -1
  35. package/dist/components/select/item.js +54 -0
  36. package/dist/components/select/item.js.map +1 -0
  37. package/dist/components/select/style.css +1 -1
  38. package/dist/components/spin/component.js +9 -8
  39. package/dist/components/spin/component.js.map +1 -1
  40. package/dist/components/splitter/splitter-panel.js +26 -43
  41. package/dist/components/splitter/splitter-panel.js.map +1 -1
  42. package/dist/components/splitter/splitter.js +99 -98
  43. package/dist/components/splitter/splitter.js.map +1 -1
  44. package/dist/components/splitter/useSizes.js +86 -0
  45. package/dist/components/splitter/useSizes.js.map +1 -0
  46. package/dist/components/stack/StackChild.js +9 -9
  47. package/dist/components/transition/component.js +1 -1
  48. package/dist/components/transition/component.js.map +1 -1
  49. package/dist/components/upload/dragger.js +19 -10
  50. package/dist/components/upload/dragger.js.map +1 -1
  51. package/dist/components/upload/item.js +21 -18
  52. package/dist/components/upload/item.js.map +1 -1
  53. package/dist/components/utils/antdUtils.js +18 -56
  54. package/dist/components/utils/antdUtils.js.map +1 -1
  55. package/dist/components/utils/placement.js +58 -0
  56. package/dist/components/utils/placement.js.map +1 -0
  57. package/dist/components/utils/reactElement.js +5 -0
  58. package/dist/components/utils/reactElement.js.map +1 -0
  59. package/dist/index.d.ts +478 -20
  60. package/dist/index.js +205 -189
  61. package/dist/index.js.map +1 -1
  62. package/dist/metadata.js +39 -5
  63. package/dist/metadata.js.map +1 -1
  64. package/package.json +4 -3
@@ -0,0 +1,86 @@
1
+ import u from "react";
2
+ const I = (s, l, d) => {
3
+ const o = s.cloneNode(!0);
4
+ o.style.position = "absolute", o.style.visibility = "hidden", o.style.pointerEvents = "none", o.style.zIndex = "-1", o.style.top = "0", o.style.left = "0", d === "horizontal" ? (o.style.width = l, o.style.height = "100%") : (o.style.width = "100%", o.style.height = l), document.body.appendChild(o);
5
+ const p = o.getBoundingClientRect(), a = d === "horizontal" ? p.width : p.height;
6
+ return document.body.removeChild(o), a > 0 ? Math.ceil(a) : 0;
7
+ };
8
+ function y(s) {
9
+ return Number(s.slice(0, -1)) / 100;
10
+ }
11
+ function M(s) {
12
+ return typeof s == "string" && s.endsWith("%");
13
+ }
14
+ function _(s, l, d = "horizontal", o = []) {
15
+ const p = s.map((e) => e.size), a = s.length, c = l || 0, w = (e) => e * c, [v, C] = u.useState(() => s.map((e) => e.defaultSize)), [z, P] = u.useState(/* @__PURE__ */ new Map()), b = (e) => e === "max-content" || e === "min-content" || e === "fit-content";
16
+ u.useEffect(() => {
17
+ const e = /* @__PURE__ */ new Map();
18
+ let i = !1;
19
+ s.forEach((r, n) => {
20
+ if (b(r.defaultSize)) {
21
+ const t = o[n];
22
+ if (t != null && t.current) {
23
+ const f = I(t.current, r.defaultSize, d);
24
+ if (f > 0) {
25
+ const g = z.get(n);
26
+ g === void 0 || g !== f ? (e.set(n, f), i = !0) : e.set(n, g);
27
+ }
28
+ }
29
+ }
30
+ }), i && P((r) => new Map([...r, ...e]));
31
+ }, [s, o, d, l]);
32
+ const m = u.useMemo(() => {
33
+ const e = [];
34
+ for (let i = 0; i < a; i += 1) {
35
+ let r = p[i] ?? v[i];
36
+ b(r) && z.has(i) && (r = z.get(i)), e[i] = r;
37
+ }
38
+ return e;
39
+ }, [a, v, p, z]), h = u.useMemo(() => {
40
+ let e = [], i = 0;
41
+ for (let n = 0; n < a; n += 1) {
42
+ const t = m[n];
43
+ if (M(t))
44
+ e[n] = y(t);
45
+ else if (t || t === 0) {
46
+ const f = Number(t);
47
+ Number.isNaN(f) || (e[n] = f / c);
48
+ } else
49
+ i += 1, e[n] = void 0;
50
+ }
51
+ const r = e.reduce((n, t) => n + (t || 0), 0);
52
+ if (r > 1 || !i) {
53
+ const n = 1 / r;
54
+ e = e.map((t) => t === void 0 ? 0 : t * n);
55
+ } else {
56
+ const n = (1 - r) / i;
57
+ e = e.map((t) => t === void 0 ? n : t);
58
+ }
59
+ return e;
60
+ }, [m, c]), S = u.useMemo(
61
+ () => h.map(w),
62
+ [h, c]
63
+ ), x = u.useMemo(
64
+ () => s.map((e) => M(e.min) ? y(e.min) : (e.min || 0) / c),
65
+ [s, c]
66
+ ), N = u.useMemo(
67
+ () => s.map((e) => M(e.max) ? y(e.max) : (e.max || c) / c),
68
+ [s, c]
69
+ );
70
+ return [
71
+ u.useMemo(
72
+ () => l ? S : m,
73
+ [S, l]
74
+ ),
75
+ S,
76
+ h,
77
+ x,
78
+ N,
79
+ C
80
+ ];
81
+ }
82
+ export {
83
+ _ as default,
84
+ y as getPtg
85
+ };
86
+ //# sourceMappingURL=useSizes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSizes.js","sources":["../../../src/components/splitter/useSizes.ts"],"sourcesContent":["import React from \"react\";\n\nimport type { SplitterPanelProps } from \"./splitter-panel\";\n\n// Helper to measure intrinsic content size\nconst measureIntrinsicSize = (\n element: HTMLElement, \n intrinsicType: \"max-content\" | \"min-content\" | \"fit-content\",\n layout: \"horizontal\" | \"vertical\"\n): number => {\n const clonedElement = element.cloneNode(true) as HTMLElement;\n \n // Set up the cloned element for measurement\n clonedElement.style.position = \"absolute\";\n clonedElement.style.visibility = \"hidden\";\n clonedElement.style.pointerEvents = \"none\";\n clonedElement.style.zIndex = \"-1\";\n clonedElement.style.top = \"0\";\n clonedElement.style.left = \"0\";\n\n if (layout === \"horizontal\") {\n clonedElement.style.width = intrinsicType;\n clonedElement.style.height = \"100%\";\n } else {\n clonedElement.style.width = \"100%\";\n clonedElement.style.height = intrinsicType;\n }\n\n document.body.appendChild(clonedElement);\n const rect = clonedElement.getBoundingClientRect();\n const size = layout === \"horizontal\" ? rect.width : rect.height;\n document.body.removeChild(clonedElement);\n\n return size > 0 ? Math.ceil(size) : 0;\n};\n\nexport function getPtg(str: string) {\n return Number(str.slice(0, -1)) / 100;\n}\n\nfunction isPtg(itemSize: string | number | undefined): itemSize is string {\n return typeof itemSize === \"string\" && itemSize.endsWith(\"%\");\n}\n\n/**\n * Save the size state.\n * Align the size into flex percentage base.\n */\nexport default function useSizes(\n items: SplitterPanelProps[],\n containerSize?: number,\n layout: \"horizontal\" | \"vertical\" = \"horizontal\",\n elementRefs: React.RefObject<HTMLElement>[] = []\n) {\n const propSizes = items.map((item) => item.size);\n\n const itemsCount = items.length;\n\n const mergedContainerSize = containerSize || 0;\n const ptg2px = (ptg: number) => ptg * mergedContainerSize;\n\n // We do not need care the size state match the `items` length in `useState`.\n // It will calculate later.\n const [innerSizes, setInnerSizes] = React.useState<\n (string | number | undefined)[]\n >(() => items.map((item) => item.defaultSize));\n\n // Track measured intrinsic sizes\n const [intrinsicSizes, setIntrinsicSizes] = React.useState<Map<number, number>>(new Map());\n \n // Helper function to check if a size is intrinsic\n const isIntrinsicSize = (size: string | number | undefined): size is \"max-content\" | \"min-content\" | \"fit-content\" => {\n return size === \"max-content\" || size === \"min-content\" || size === \"fit-content\";\n };\n\n // Measure intrinsic sizes directly using element refs\n React.useEffect(() => {\n const newSizes = new Map<number, number>();\n let hasChanges = false;\n\n items.forEach((item, index) => {\n if (isIntrinsicSize(item.defaultSize)) {\n const ref = elementRefs[index];\n if (ref?.current) {\n const measuredSize = measureIntrinsicSize(ref.current, item.defaultSize, layout);\n if (measuredSize > 0) {\n const currentSize = intrinsicSizes.get(index);\n if (currentSize === undefined || currentSize !== measuredSize) {\n newSizes.set(index, measuredSize);\n hasChanges = true;\n } else {\n newSizes.set(index, currentSize);\n }\n }\n }\n }\n });\n\n if (hasChanges) {\n setIntrinsicSizes(prev => new Map([...prev, ...newSizes]));\n }\n }, [items, elementRefs, layout, containerSize]); // Re-measure when container size changes for responsiveness\n const sizes = React.useMemo(() => {\n const mergedSizes: SplitterPanelProps[\"size\"][] = [];\n\n for (let i = 0; i < itemsCount; i += 1) {\n let size = propSizes[i] ?? innerSizes[i];\n \n // Replace intrinsic sizes with measured pixel values\n if (isIntrinsicSize(size) && intrinsicSizes.has(i)) {\n size = intrinsicSizes.get(i);\n }\n \n mergedSizes[i] = size;\n }\n\n return mergedSizes;\n }, [itemsCount, innerSizes, propSizes, intrinsicSizes]);\n\n // Post handle the size. Will do:\n // 1. Convert all the px into percentage if not empty.\n // 2. Get rest percentage for exist percentage.\n // 3. Fill the rest percentage into empty item.\n const postPercentSizes = React.useMemo(() => {\n let ptgList: (number | undefined)[] = [];\n let emptyCount = 0;\n\n // Fill default percentage\n for (let i = 0; i < itemsCount; i += 1) {\n const itemSize = sizes[i];\n\n if (isPtg(itemSize)) {\n ptgList[i] = getPtg(itemSize);\n } else if (itemSize || itemSize === 0) {\n const num = Number(itemSize);\n if (!Number.isNaN(num)) {\n ptgList[i] = num / mergedContainerSize;\n }\n } else {\n emptyCount += 1;\n ptgList[i] = undefined;\n }\n }\n\n const totalPtg = ptgList.reduce<number>((acc, ptg) => acc + (ptg || 0), 0);\n\n if (totalPtg > 1 || !emptyCount) {\n // If total percentage is larger than 1, we will scale it down.\n const scale = 1 / totalPtg;\n ptgList = ptgList.map((ptg) => (ptg === undefined ? 0 : ptg * scale));\n } else {\n // If total percentage is smaller than 1, we will fill the rest.\n const avgRest = (1 - totalPtg) / emptyCount;\n ptgList = ptgList.map((ptg) => (ptg === undefined ? avgRest : ptg));\n }\n\n return ptgList as number[];\n }, [sizes, mergedContainerSize]);\n\n const postPxSizes = React.useMemo(\n () => postPercentSizes.map(ptg2px),\n [postPercentSizes, mergedContainerSize]\n );\n\n const postPercentMinSizes = React.useMemo(\n () =>\n items.map((item) => {\n if (isPtg(item.min)) {\n return getPtg(item.min);\n }\n return (item.min || 0) / mergedContainerSize;\n }),\n [items, mergedContainerSize]\n );\n\n const postPercentMaxSizes = React.useMemo(\n () =>\n items.map((item) => {\n if (isPtg(item.max)) {\n return getPtg(item.max);\n }\n return (item.max || mergedContainerSize) / mergedContainerSize;\n }),\n [items, mergedContainerSize]\n );\n\n // If ssr, we will use the size from developer config first.\n const panelSizes = React.useMemo(\n () => (containerSize ? postPxSizes : sizes),\n [postPxSizes, containerSize]\n );\n\n return [\n panelSizes,\n postPxSizes,\n postPercentSizes,\n postPercentMinSizes,\n postPercentMaxSizes,\n setInnerSizes,\n ] as const;\n}\n"],"names":["measureIntrinsicSize","element","intrinsicType","layout","clonedElement","rect","size","getPtg","str","isPtg","itemSize","useSizes","items","containerSize","elementRefs","propSizes","item","itemsCount","mergedContainerSize","ptg2px","ptg","innerSizes","setInnerSizes","React","intrinsicSizes","setIntrinsicSizes","isIntrinsicSize","newSizes","hasChanges","index","ref","measuredSize","currentSize","prev","sizes","mergedSizes","postPercentSizes","ptgList","emptyCount","i","num","totalPtg","acc","scale","avgRest","postPxSizes","postPercentMinSizes","postPercentMaxSizes"],"mappings":"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"}
@@ -5,8 +5,8 @@ import { useRender as w } from "@base-ui-components/react/use-render";
5
5
  import { mergeProps as E } from "@base-ui-components/react/merge-props";
6
6
  import { Stack as P } from "./Stack.js";
7
7
  import { useCls as V } from "../utils/antdUtils.js";
8
- import { cn as j } from "../utils/cn.js";
9
- const x = g(
8
+ import { cn as _ } from "../utils/cn.js";
9
+ const j = g(
10
10
  ({
11
11
  flex: s,
12
12
  grow: m = !1,
@@ -15,8 +15,8 @@ const x = g(
15
15
  style: n,
16
16
  stack: f = !1,
17
17
  // stack props
18
- hug: p = !1,
19
- align: d = "flex-start",
18
+ hug: d = !1,
19
+ align: p = "flex-start",
20
20
  justify: k = "flex-start",
21
21
  vertical: u = !1,
22
22
  gap: h = 0,
@@ -25,13 +25,13 @@ const x = g(
25
25
  ...o
26
26
  }, a) => {
27
27
  const t = V(), N = {
28
- hug: p,
29
- align: d,
28
+ hug: d,
29
+ align: p,
30
30
  justify: k,
31
31
  vertical: u,
32
32
  gap: h,
33
33
  wrap: C
34
- }, r = v(() => typeof s == "boolean" || s === 0 || s === 1 ? t(s === !0 || s === 1 ? "stack-child-flex-1" : "stack-child-flex-0") : "", [s, t]), c = j(
34
+ }, r = v(() => typeof s == "boolean" || s === 0 || s === 1 ? t(s === !0 || s === 1 ? "stack-child-flex-1" : "stack-child-flex-0") : "", [s, t]), c = _(
35
35
  t("stack-child"),
36
36
  m && t("stack-child-grow"),
37
37
  i && t("stack-child-shrink"),
@@ -55,8 +55,8 @@ const x = g(
55
55
  return f ? /* @__PURE__ */ l(P, { ...N, ref: a, className: c, ...o, children: e }) : R;
56
56
  }
57
57
  );
58
- x.displayName = "StackChild";
58
+ j.displayName = "StackChild";
59
59
  export {
60
- x as StackChild
60
+ j as StackChild
61
61
  };
62
62
  //# sourceMappingURL=StackChild.js.map
@@ -3,7 +3,7 @@ import { jsx as y } from "react/jsx-runtime";
3
3
  import { useMemo as j, useRef as F, useCallback as A, isValidElement as E, useEffect as N } from "react";
4
4
  import { useRender as S } from "@base-ui-components/react/use-render";
5
5
  import { mergeProps as L } from "@base-ui-components/react/merge-props";
6
- import { useTransitionStatus as O } from "@base-ui-components/react/utils";
6
+ import { useTransitionStatus as O } from "../hooks/useTransitionStatus.js";
7
7
  import './style.css';/* empty css */
8
8
  import { useLatestRef as P, useAnimationsFinished as V } from "../hooks/base-ui.js";
9
9
  import { useCls as q } from "../utils/antdUtils.js";
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sources":["../../../src/components/transition/component.tsx"],"sourcesContent":["\"use client\";\nimport {\n CSSProperties,\n isValidElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport { useRender } from \"@base-ui-components/react/use-render\";\nimport { mergeProps } from \"@base-ui-components/react/merge-props\";\nimport { useTransitionStatus } from \"@base-ui-components/react/utils\";\nimport { clsx, useCls } from \"../utils\";\nimport { useAnimationsFinished, useLatestRef } from \"../hooks\";\n\nimport \"./style.css\";\n\nexport type TransitionProps = Omit<\n useRender.ComponentProps<\"div\">,\n \"render\" | \"children\"\n> & {\n /** Whether the component should be shown */\n show?: boolean;\n /** CSS classes to apply when the component is opened */\n starting?: string | CSSProperties;\n /** CSS classes to apply when the component is closed */\n ending?: string | CSSProperties;\n /** CSS classes to apply to the component */\n className?: string;\n /** Keep mounted */\n keepMounted?: boolean;\n /**\n * Callback function to be called when the transition ends\n */\n onTransitionComplete?: (show?: boolean) => void;\n /**\n * Whether to listen for animations in child elements\n */\n listenToChildAnimations?: boolean;\n /**\n * Whether to render the child as a child element\n * @default true\n */\n asChild?: boolean;\n children?: React.ReactNode | useRender.ComponentProps<\"div\">[\"render\"];\n};\n\nexport function Transition({\n children = <div />,\n className,\n starting,\n ending,\n show = true,\n keepMounted = false,\n onTransitionComplete,\n listenToChildAnimations = false,\n asChild = true,\n ...otherProps\n}: TransitionProps) {\n const { mounted, setMounted, transitionStatus } = useTransitionStatus(show);\n const showRef = useLatestRef(show);\n\n const cls = useCls();\n\n const combinedClassName = useMemo(\n () =>\n clsx(\n className,\n transitionStatus === \"starting\" &&\n typeof starting == \"string\" &&\n starting,\n transitionStatus === \"ending\" && typeof ending == \"string\" && ending,\n // hide by display: none when not mounted and keepMounted is true\n mounted == false && keepMounted ? cls(\"transition-hidden\") : undefined\n ),\n [className, starting, ending, transitionStatus, mounted, keepMounted, cls]\n );\n\n const ref = useRef<HTMLDivElement>(null);\n const runOnceAnimationsFinish = useAnimationsFinished(ref, {\n waitForNextTick: show,\n subtree: listenToChildAnimations,\n });\n\n const getRender = useCallback(() => {\n if (typeof children === \"function\") {\n return children;\n }\n if (asChild && isValidElement(children)) {\n return children;\n }\n return <div>{children}</div>;\n }, [children, asChild]);\n\n const rendered = useRender({\n render: getRender(),\n props: mergeProps<\"div\">(otherProps, {\n ref,\n className: combinedClassName,\n ...{\n \"data-starting\": transitionStatus === \"starting\" ? \"true\" : undefined,\n \"data-ending\": transitionStatus === \"ending\" ? \"true\" : undefined,\n },\n style: {\n ...(transitionStatus === \"starting\" && typeof starting === \"object\"\n ? starting\n : {}),\n ...(transitionStatus === \"ending\" && typeof ending === \"object\"\n ? ending\n : {}),\n },\n }),\n });\n\n useEffect(() => {\n runOnceAnimationsFinish(() => {\n if (show === showRef.current) {\n setMounted(show);\n onTransitionComplete?.(show);\n }\n });\n }, [\n show,\n keepMounted,\n runOnceAnimationsFinish,\n setMounted,\n showRef,\n onTransitionComplete,\n ]);\n\n return mounted || keepMounted ? rendered : null;\n}\n"],"names":["Transition","children","className","starting","ending","show","keepMounted","onTransitionComplete","listenToChildAnimations","asChild","otherProps","mounted","setMounted","transitionStatus","useTransitionStatus","showRef","useLatestRef","cls","useCls","combinedClassName","useMemo","clsx","ref","useRef","runOnceAnimationsFinish","useAnimationsFinished","getRender","useCallback","isValidElement","jsx","rendered","useRender","mergeProps","useEffect"],"mappings":";;;;;;;;;;AA+CO,SAASA,EAAW;AAAA,EACzB,UAAAC,sBAAY,OAAI,EAAA;AAAA,EAChB,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,aAAAC,IAAc;AAAA,EACd,sBAAAC;AAAA,EACA,yBAAAC,IAA0B;AAAA,EAC1B,SAAAC,IAAU;AAAA,EACV,GAAGC;AACL,GAAoB;AAClB,QAAM,EAAE,SAAAC,GAAS,YAAAC,GAAY,kBAAAC,EAAiB,IAAIC,EAAoBT,CAAI,GACpEU,IAAUC,EAAaX,CAAI,GAE3BY,IAAMC,EAAO,GAEbC,IAAoBC;AAAA,IACxB,MACEC;AAAA,MACEnB;AAAA,MACAW,MAAqB,cACnB,OAAOV,KAAY,YACnBA;AAAA,MACFU,MAAqB,YAAY,OAAOT,KAAU,YAAYA;AAAA;AAAA,MAE9DO,KAAW,MAASL,IAAcW,EAAI,mBAAmB,IAAI;AAAA,IAC/D;AAAA,IACF,CAACf,GAAWC,GAAUC,GAAQS,GAAkBF,GAASL,GAAaW,CAAG;AAAA,EAC3E,GAEMK,IAAMC,EAAuB,IAAI,GACjCC,IAA0BC,EAAsBH,GAAK;AAAA,IACzD,iBAAiBjB;AAAA,IACjB,SAASG;AAAA,EAAA,CACV,GAEKkB,IAAYC,EAAY,MACxB,OAAO1B,KAAa,cAGpBQ,KAAWmB,EAAe3B,CAAQ,IAC7BA,IAEF,gBAAA4B,EAAC,SAAK,UAAA5B,GAAS,GACrB,CAACA,GAAUQ,CAAO,CAAC,GAEhBqB,IAAWC,EAAU;AAAA,IACzB,QAAQL,EAAU;AAAA,IAClB,OAAOM,EAAkBtB,GAAY;AAAA,MACnC,KAAAY;AAAA,MACA,WAAWH;AAAA,MAET,iBAAiBN,MAAqB,aAAa,SAAS;AAAA,MAC5D,eAAeA,MAAqB,WAAW,SAAS;AAAA,MAE1D,OAAO;AAAA,QACL,GAAIA,MAAqB,cAAc,OAAOV,KAAa,WACvDA,IACA,CAAC;AAAA,QACL,GAAIU,MAAqB,YAAY,OAAOT,KAAW,WACnDA,IACA,CAAA;AAAA,MAAC;AAAA,IAER,CAAA;AAAA,EAAA,CACF;AAED,SAAA6B,EAAU,MAAM;AACd,IAAAT,EAAwB,MAAM;AACxB,MAAAnB,MAASU,EAAQ,YACnBH,EAAWP,CAAI,GACfE,KAAA,QAAAA,EAAuBF;AAAA,IACzB,CACD;AAAA,EAAA,GACA;AAAA,IACDA;AAAA,IACAC;AAAA,IACAkB;AAAA,IACAZ;AAAA,IACAG;AAAA,IACAR;AAAA,EAAA,CACD,GAEMI,KAAWL,IAAcwB,IAAW;AAC7C;"}
1
+ {"version":3,"file":"component.js","sources":["../../../src/components/transition/component.tsx"],"sourcesContent":["\"use client\";\nimport {\n CSSProperties,\n isValidElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport { useRender } from \"@base-ui-components/react/use-render\";\nimport { mergeProps } from \"@base-ui-components/react/merge-props\";\nimport { useTransitionStatus } from \"../hooks/useTransitionStatus\";\nimport { clsx, useCls } from \"../utils\";\nimport { useAnimationsFinished, useLatestRef } from \"../hooks\";\n\nimport \"./style.css\";\n\nexport type TransitionProps = Omit<\n useRender.ComponentProps<\"div\">,\n \"render\" | \"children\"\n> & {\n /** Whether the component should be shown */\n show?: boolean;\n /** CSS classes to apply when the component is opened */\n starting?: string | CSSProperties;\n /** CSS classes to apply when the component is closed */\n ending?: string | CSSProperties;\n /** CSS classes to apply to the component */\n className?: string;\n /** Keep mounted */\n keepMounted?: boolean;\n /**\n * Callback function to be called when the transition ends\n */\n onTransitionComplete?: (show?: boolean) => void;\n /**\n * Whether to listen for animations in child elements\n */\n listenToChildAnimations?: boolean;\n /**\n * Whether to render the child as a child element\n * @default true\n */\n asChild?: boolean;\n children?: React.ReactNode | useRender.ComponentProps<\"div\">[\"render\"];\n};\n\nexport function Transition({\n children = <div />,\n className,\n starting,\n ending,\n show = true,\n keepMounted = false,\n onTransitionComplete,\n listenToChildAnimations = false,\n asChild = true,\n ...otherProps\n}: TransitionProps) {\n const { mounted, setMounted, transitionStatus } = useTransitionStatus(show);\n const showRef = useLatestRef(show);\n\n const cls = useCls();\n\n const combinedClassName = useMemo(\n () =>\n clsx(\n className,\n transitionStatus === \"starting\" &&\n typeof starting == \"string\" &&\n starting,\n transitionStatus === \"ending\" && typeof ending == \"string\" && ending,\n // hide by display: none when not mounted and keepMounted is true\n mounted == false && keepMounted ? cls(\"transition-hidden\") : undefined\n ),\n [className, starting, ending, transitionStatus, mounted, keepMounted, cls]\n );\n\n const ref = useRef<HTMLDivElement>(null);\n const runOnceAnimationsFinish = useAnimationsFinished(ref, {\n waitForNextTick: show,\n subtree: listenToChildAnimations,\n });\n\n const getRender = useCallback(() => {\n if (typeof children === \"function\") {\n return children;\n }\n if (asChild && isValidElement(children)) {\n return children;\n }\n return <div>{children}</div>;\n }, [children, asChild]);\n\n const rendered = useRender({\n render: getRender(),\n props: mergeProps<\"div\">(otherProps, {\n ref,\n className: combinedClassName,\n ...{\n \"data-starting\": transitionStatus === \"starting\" ? \"true\" : undefined,\n \"data-ending\": transitionStatus === \"ending\" ? \"true\" : undefined,\n },\n style: {\n ...(transitionStatus === \"starting\" && typeof starting === \"object\"\n ? starting\n : {}),\n ...(transitionStatus === \"ending\" && typeof ending === \"object\"\n ? ending\n : {}),\n },\n }),\n });\n\n useEffect(() => {\n runOnceAnimationsFinish(() => {\n if (show === showRef.current) {\n setMounted(show);\n onTransitionComplete?.(show);\n }\n });\n }, [\n show,\n keepMounted,\n runOnceAnimationsFinish,\n setMounted,\n showRef,\n onTransitionComplete,\n ]);\n\n return mounted || keepMounted ? rendered : null;\n}\n"],"names":["Transition","children","className","starting","ending","show","keepMounted","onTransitionComplete","listenToChildAnimations","asChild","otherProps","mounted","setMounted","transitionStatus","useTransitionStatus","showRef","useLatestRef","cls","useCls","combinedClassName","useMemo","clsx","ref","useRef","runOnceAnimationsFinish","useAnimationsFinished","getRender","useCallback","isValidElement","jsx","rendered","useRender","mergeProps","useEffect"],"mappings":";;;;;;;;;;AA+CO,SAASA,EAAW;AAAA,EACzB,UAAAC,sBAAY,OAAI,EAAA;AAAA,EAChB,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,aAAAC,IAAc;AAAA,EACd,sBAAAC;AAAA,EACA,yBAAAC,IAA0B;AAAA,EAC1B,SAAAC,IAAU;AAAA,EACV,GAAGC;AACL,GAAoB;AAClB,QAAM,EAAE,SAAAC,GAAS,YAAAC,GAAY,kBAAAC,EAAiB,IAAIC,EAAoBT,CAAI,GACpEU,IAAUC,EAAaX,CAAI,GAE3BY,IAAMC,EAAO,GAEbC,IAAoBC;AAAA,IACxB,MACEC;AAAA,MACEnB;AAAA,MACAW,MAAqB,cACnB,OAAOV,KAAY,YACnBA;AAAA,MACFU,MAAqB,YAAY,OAAOT,KAAU,YAAYA;AAAA;AAAA,MAE9DO,KAAW,MAASL,IAAcW,EAAI,mBAAmB,IAAI;AAAA,IAC/D;AAAA,IACF,CAACf,GAAWC,GAAUC,GAAQS,GAAkBF,GAASL,GAAaW,CAAG;AAAA,EAC3E,GAEMK,IAAMC,EAAuB,IAAI,GACjCC,IAA0BC,EAAsBH,GAAK;AAAA,IACzD,iBAAiBjB;AAAA,IACjB,SAASG;AAAA,EAAA,CACV,GAEKkB,IAAYC,EAAY,MACxB,OAAO1B,KAAa,cAGpBQ,KAAWmB,EAAe3B,CAAQ,IAC7BA,IAEF,gBAAA4B,EAAC,SAAK,UAAA5B,GAAS,GACrB,CAACA,GAAUQ,CAAO,CAAC,GAEhBqB,IAAWC,EAAU;AAAA,IACzB,QAAQL,EAAU;AAAA,IAClB,OAAOM,EAAkBtB,GAAY;AAAA,MACnC,KAAAY;AAAA,MACA,WAAWH;AAAA,MAET,iBAAiBN,MAAqB,aAAa,SAAS;AAAA,MAC5D,eAAeA,MAAqB,WAAW,SAAS;AAAA,MAE1D,OAAO;AAAA,QACL,GAAIA,MAAqB,cAAc,OAAOV,KAAa,WACvDA,IACA,CAAC;AAAA,QACL,GAAIU,MAAqB,YAAY,OAAOT,KAAW,WACnDA,IACA,CAAA;AAAA,MAAC;AAAA,IAER,CAAA;AAAA,EAAA,CACF;AAED,SAAA6B,EAAU,MAAM;AACd,IAAAT,EAAwB,MAAM;AACxB,MAAAnB,MAASU,EAAQ,YACnBH,EAAWP,CAAI,GACfE,KAAA,QAAAA,EAAuBF;AAAA,IACzB,CACD;AAAA,EAAA,GACA;AAAA,IACDA;AAAA,IACAC;AAAA,IACAkB;AAAA,IACAZ;AAAA,IACAG;AAAA,IACAR;AAAA,EAAA,CACD,GAEMI,KAAWL,IAAcwB,IAAW;AAC7C;"}
@@ -1,22 +1,31 @@
1
1
  "use client";
2
- import { jsx as r, jsxs as i, Fragment as p } from "react/jsx-runtime";
3
- import m from "antd/es/upload";
4
- import { CloudArrowUp as u } from "@bioturing/assets";
5
- import { useUploadItemRender as c } from "./hooks.js";
6
- import { useCls as f } from "../utils/antdUtils.js";
2
+ import { jsx as r, jsxs as p, Fragment as m } from "react/jsx-runtime";
3
+ import c from "antd/es/upload";
4
+ import { CloudArrowUpIcon as u } from "@bioturing/assets";
5
+ import { useUploadItemRender as f } from "./hooks.js";
6
+ import { useCls as g } from "../utils/antdUtils.js";
7
7
  const N = ({
8
8
  children: o,
9
9
  uploadTitle: t = "Click or drag file to this area to upload",
10
10
  uploadDescription: l = "Support for a single or bulk upload.",
11
- itemRender: a,
12
- ...n
11
+ itemRender: n,
12
+ className: a,
13
+ ...s
13
14
  }) => {
14
- const e = f(), s = () => /* @__PURE__ */ i(p, { children: [
15
+ const e = g(), d = () => /* @__PURE__ */ p(m, { children: [
15
16
  /* @__PURE__ */ r("p", { className: e("upload-drag-icon"), children: /* @__PURE__ */ r(u, { size: 40 }) }),
16
17
  /* @__PURE__ */ r("p", { className: e("upload-text"), children: t }),
17
18
  /* @__PURE__ */ r("p", { className: e("upload-hint"), children: l })
18
- ] }), d = c({ showRemoveButton: !0 });
19
- return /* @__PURE__ */ r(m.Dragger, { itemRender: a || d, ...n, children: o || s() });
19
+ ] }), i = f({ showRemoveButton: !0 });
20
+ return /* @__PURE__ */ r(
21
+ c.Dragger,
22
+ {
23
+ className: a,
24
+ itemRender: n || i,
25
+ ...s,
26
+ children: o || d()
27
+ }
28
+ );
20
29
  };
21
30
  export {
22
31
  N as Dragger
@@ -1 +1 @@
1
- {"version":3,"file":"dragger.js","sources":["../../../src/components/upload/dragger.tsx"],"sourcesContent":["\"use client\";\nimport {\n default as AntUpload,\n type DraggerProps as AntDraggerProps,\n} from \"antd/es/upload\";\nimport React from \"react\";\nimport { CloudArrowUp } from \"@bioturing/assets\";\nimport { useCls } from \"../utils\";\nimport { useUploadItemRender } from \"./hooks\";\n\nexport interface DraggerProps extends AntDraggerProps {\n /**\n * Custom title for the upload component\n */\n uploadTitle?: React.ReactNode;\n /**\n * Custom description for the upload component\n **/\n uploadDescription?: React.ReactNode;\n}\n\nexport const Dragger = ({\n children,\n uploadTitle = \"Click or drag file to this area to upload\",\n uploadDescription = \"Support for a single or bulk upload.\",\n itemRender,\n ...rest\n}: DraggerProps) => {\n const cls = useCls();\n const renderChildren = () => {\n return (\n <>\n <p className={cls(\"upload-drag-icon\")}>\n <CloudArrowUp size={40} />\n </p>\n <p className={cls(\"upload-text\")}>{uploadTitle}</p>\n <p className={cls(\"upload-hint\")}>{uploadDescription}</p>\n </>\n );\n };\n const defaultItemRender = useUploadItemRender({ showRemoveButton: true });\n return (\n <AntUpload.Dragger itemRender={itemRender || defaultItemRender} {...rest}>\n {children ? children : renderChildren()}\n </AntUpload.Dragger>\n );\n};\n"],"names":["Dragger","children","uploadTitle","uploadDescription","itemRender","rest","cls","useCls","renderChildren","jsxs","Fragment","jsx","CloudArrowUp","defaultItemRender","useUploadItemRender","AntUpload"],"mappings":";;;;;;AAqBO,MAAMA,IAAU,CAAC;AAAA,EACtB,UAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,mBAAAC,IAAoB;AAAA,EACpB,YAAAC;AAAA,EACA,GAAGC;AACL,MAAoB;AAClB,QAAMC,IAAMC,EAAO,GACbC,IAAiB,MAGjB,gBAAAC,EAAAC,GAAA,EAAA,UAAA;AAAA,IAAC,gBAAAC,EAAA,KAAA,EAAE,WAAWL,EAAI,kBAAkB,GAClC,UAAC,gBAAAK,EAAAC,GAAA,EAAa,MAAM,GAAA,CAAI,EAC1B,CAAA;AAAA,sBACC,KAAE,EAAA,WAAWN,EAAI,aAAa,GAAI,UAAYJ,GAAA;AAAA,sBAC9C,KAAE,EAAA,WAAWI,EAAI,aAAa,GAAI,UAAkBH,EAAA,CAAA;AAAA,EAAA,GACvD,GAGEU,IAAoBC,EAAoB,EAAE,kBAAkB,IAAM;AACxE,SACG,gBAAAH,EAAAI,EAAU,SAAV,EAAkB,YAAYX,KAAcS,GAAoB,GAAGR,GACjE,UAAAJ,KAAsBO,EACzB,EAAA,CAAA;AAEJ;"}
1
+ {"version":3,"file":"dragger.js","sources":["../../../src/components/upload/dragger.tsx"],"sourcesContent":["\"use client\";\nimport {\n default as AntUpload,\n type DraggerProps as AntDraggerProps,\n} from \"antd/es/upload\";\nimport React from \"react\";\nimport { CloudArrowUpIcon } from \"@bioturing/assets\";\nimport { useCls } from \"../utils\";\nimport { useUploadItemRender } from \"./hooks\";\n\nexport interface DraggerProps extends AntDraggerProps {\n /**\n * Custom title for the upload component\n */\n uploadTitle?: React.ReactNode;\n /**\n * Custom description for the upload component\n **/\n uploadDescription?: React.ReactNode;\n}\n\nexport const Dragger = ({\n children,\n uploadTitle = \"Click or drag file to this area to upload\",\n uploadDescription = \"Support for a single or bulk upload.\",\n itemRender,\n className,\n ...rest\n}: DraggerProps) => {\n const cls = useCls();\n const renderChildren = () => {\n return (\n <>\n <p className={cls(\"upload-drag-icon\")}>\n <CloudArrowUpIcon size={40} />\n </p>\n <p className={cls(\"upload-text\")}>{uploadTitle}</p>\n <p className={cls(\"upload-hint\")}>{uploadDescription}</p>\n </>\n );\n };\n const defaultItemRender = useUploadItemRender({ showRemoveButton: true });\n return (\n <AntUpload.Dragger \n className={className}\n itemRender={itemRender || defaultItemRender} \n {...rest}\n >\n {children ? children : renderChildren()}\n </AntUpload.Dragger>\n );\n};\n"],"names":["Dragger","children","uploadTitle","uploadDescription","itemRender","className","rest","cls","useCls","renderChildren","jsxs","Fragment","jsx","CloudArrowUpIcon","defaultItemRender","useUploadItemRender","AntUpload"],"mappings":";;;;;;AAqBO,MAAMA,IAAU,CAAC;AAAA,EACtB,UAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,mBAAAC,IAAoB;AAAA,EACpB,YAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,MAAoB;AAClB,QAAMC,IAAMC,EAAO,GACbC,IAAiB,MAGjB,gBAAAC,EAAAC,GAAA,EAAA,UAAA;AAAA,IAAC,gBAAAC,EAAA,KAAA,EAAE,WAAWL,EAAI,kBAAkB,GAClC,UAAC,gBAAAK,EAAAC,GAAA,EAAiB,MAAM,GAAA,CAAI,EAC9B,CAAA;AAAA,sBACC,KAAE,EAAA,WAAWN,EAAI,aAAa,GAAI,UAAYL,GAAA;AAAA,sBAC9C,KAAE,EAAA,WAAWK,EAAI,aAAa,GAAI,UAAkBJ,EAAA,CAAA;AAAA,EAAA,GACvD,GAGEW,IAAoBC,EAAoB,EAAE,kBAAkB,IAAM;AAEtE,SAAA,gBAAAH;AAAA,IAACI,EAAU;AAAA,IAAV;AAAA,MACC,WAAAX;AAAA,MACA,YAAYD,KAAcU;AAAA,MACzB,GAAGR;AAAA,MAEH,UAAAL,KAAsBQ,EAAe;AAAA,IAAA;AAAA,EACxC;AAEJ;"}
@@ -1,23 +1,25 @@
1
1
  "use client";
2
2
  import { jsx as e, jsxs as i } from "react/jsx-runtime";
3
3
  import n from "antd/es/flex";
4
- import u from "antd/es/progress";
5
- import { Trash as g } from "@bioturing/assets";
6
- import { Truncate as f } from "../truncate/component.js";
7
- import { getUploadFileIcon as h } from "./utils.js";
8
- import { useCls as x } from "../utils/antdUtils.js";
9
- import { clsx as N } from "../utils/cn.js";
10
- import { IconButton as v } from "../icon-button/component.js";
11
- const U = ({
4
+ import f from "antd/es/progress";
5
+ import { Trash as h } from "@bioturing/assets";
6
+ import { Truncate as x } from "../truncate/component.js";
7
+ import { getUploadFileIcon as N } from "./utils.js";
8
+ import { useCls as v } from "../utils/antdUtils.js";
9
+ import { clsx as j } from "../utils/cn.js";
10
+ import { IconButton as z } from "../icon-button/component.js";
11
+ const y = ({
12
12
  fileName: t,
13
13
  fileType: s,
14
14
  status: o = "pending",
15
15
  percent: a,
16
16
  removable: m = !0,
17
17
  onRemove: c,
18
- extraActions: p
18
+ extraActions: p,
19
+ className: d,
20
+ ...u
19
21
  }) => {
20
- const r = x(), d = Math.round(a || 0), l = {
22
+ const r = v(), g = Math.round(a || 0), l = {
21
23
  done: "success",
22
24
  error: "exception",
23
25
  uploading: "active",
@@ -27,10 +29,11 @@ const U = ({
27
29
  return /* @__PURE__ */ e(
28
30
  n,
29
31
  {
30
- className: N(r("upload-item")),
32
+ className: j(r("upload-item"), d),
31
33
  justify: "space-between",
32
34
  align: "center",
33
35
  "data-error": o === "error",
36
+ ...u,
34
37
  children: /* @__PURE__ */ i(
35
38
  n,
36
39
  {
@@ -39,7 +42,7 @@ const U = ({
39
42
  flex: 1,
40
43
  className: r("upload-item-content"),
41
44
  children: [
42
- /* @__PURE__ */ e("span", { className: r("upload-item-icon"), children: h(s) }),
45
+ /* @__PURE__ */ e("span", { className: r("upload-item-icon"), children: N(s) }),
43
46
  /* @__PURE__ */ i(
44
47
  n,
45
48
  {
@@ -48,11 +51,11 @@ const U = ({
48
51
  flex: 1,
49
52
  className: r("upload-item-name-progress"),
50
53
  children: [
51
- /* @__PURE__ */ e(f, { position: "middle", children: t }),
54
+ /* @__PURE__ */ e(x, { position: "middle", children: t }),
52
55
  /* @__PURE__ */ e(
53
- u,
56
+ f,
54
57
  {
55
- percent: d,
58
+ percent: g,
56
59
  size: "small",
57
60
  className: r("upload-item-progress"),
58
61
  status: o && o in l ? l[o] : "normal"
@@ -64,10 +67,10 @@ const U = ({
64
67
  /* @__PURE__ */ i(n, { gap: 8, align: "center", children: [
65
68
  p,
66
69
  m && /* @__PURE__ */ e(
67
- v,
70
+ z,
68
71
  {
69
72
  label: "Remove",
70
- children: /* @__PURE__ */ e(g, { size: 16 }),
73
+ children: /* @__PURE__ */ e(h, { size: 16 }),
71
74
  onClick: c,
72
75
  size: "small"
73
76
  }
@@ -80,6 +83,6 @@ const U = ({
80
83
  );
81
84
  };
82
85
  export {
83
- U as UploadItem
86
+ y as UploadItem
84
87
  };
85
88
  //# sourceMappingURL=item.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"item.js","sources":["../../../src/components/upload/item.tsx"],"sourcesContent":["\"use client\";\nimport Flex from \"antd/es/flex\";\nimport Progress from \"antd/es/progress\";\nimport { type ProgressProps } from \"antd/es/progress\";\nimport { Trash } from \"@bioturing/assets\";\nimport { IconButton } from \"../icon-button\";\nimport { Truncate } from \"../truncate/component\";\nimport { clsx, useCls } from \"../utils\";\nimport { getUploadFileIcon } from \"./utils\";\n\nexport type UploadFileStatus =\n | \"error\"\n | \"done\"\n | \"uploading\"\n | \"removed\"\n | \"pending\";\n\nexport interface UploadItemProps {\n fileName: string;\n fileType?: string;\n status?: UploadFileStatus;\n percent?: number;\n removable?: boolean;\n onRemove?: () => void;\n extraActions?: React.ReactNode;\n}\n\nexport const UploadItem = ({\n fileName,\n fileType,\n status = \"pending\",\n percent,\n removable = true,\n onRemove,\n extraActions,\n}: UploadItemProps) => {\n const cls = useCls();\n const showPercent = Math.round(percent || 0);\n const statusWithProgress: Record<UploadFileStatus, ProgressProps[\"status\"]> =\n {\n done: \"success\",\n error: \"exception\",\n uploading: \"active\",\n removed: \"normal\",\n pending: \"normal\",\n };\n return (\n <Flex\n className={clsx(cls(\"upload-item\"))}\n justify=\"space-between\"\n align=\"center\"\n data-error={status === \"error\"}\n >\n <Flex\n align=\"center\"\n gap={16}\n flex={1}\n className={cls(\"upload-item-content\")}\n >\n <span className={cls(\"upload-item-icon\")}>\n {getUploadFileIcon(fileType)}\n </span>\n <Flex\n align=\"start\"\n vertical\n flex={1}\n className={cls(\"upload-item-name-progress\")}\n >\n <Truncate position=\"middle\">{fileName}</Truncate>\n <Progress\n percent={showPercent}\n size=\"small\"\n className={cls(\"upload-item-progress\")}\n status={\n status && status in statusWithProgress\n ? statusWithProgress[status]\n : \"normal\"\n }\n />\n </Flex>\n <Flex gap={8} align=\"center\">\n {extraActions}\n {removable && (\n <IconButton\n label=\"Remove\"\n children={<Trash size={16} />}\n onClick={onRemove}\n size=\"small\"\n />\n )}\n </Flex>\n </Flex>\n </Flex>\n );\n};\n"],"names":["UploadItem","fileName","fileType","status","percent","removable","onRemove","extraActions","cls","useCls","showPercent","statusWithProgress","jsx","Flex","clsx","jsxs","getUploadFileIcon","Truncate","Progress","IconButton","Trash"],"mappings":";;;;;;;;;;AA2BO,MAAMA,IAAa,CAAC;AAAA,EACzB,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,SAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC;AAAA,EACA,cAAAC;AACF,MAAuB;AACrB,QAAMC,IAAMC,EAAO,GACbC,IAAc,KAAK,MAAMN,KAAW,CAAC,GACrCO,IACJ;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,WAAW;AAAA,IACX,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAEA,SAAA,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAKN,EAAI,aAAa,CAAC;AAAA,MAClC,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,cAAYL,MAAW;AAAA,MAEvB,UAAA,gBAAAY;AAAA,QAACF;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,KAAK;AAAA,UACL,MAAM;AAAA,UACN,WAAWL,EAAI,qBAAqB;AAAA,UAEpC,UAAA;AAAA,YAAA,gBAAAI,EAAC,UAAK,WAAWJ,EAAI,kBAAkB,GACpC,UAAAQ,EAAkBd,CAAQ,GAC7B;AAAA,YACA,gBAAAa;AAAA,cAACF;AAAA,cAAA;AAAA,gBACC,OAAM;AAAA,gBACN,UAAQ;AAAA,gBACR,MAAM;AAAA,gBACN,WAAWL,EAAI,2BAA2B;AAAA,gBAE1C,UAAA;AAAA,kBAAC,gBAAAI,EAAAK,GAAA,EAAS,UAAS,UAAU,UAAShB,GAAA;AAAA,kBACtC,gBAAAW;AAAA,oBAACM;AAAA,oBAAA;AAAA,sBACC,SAASR;AAAA,sBACT,MAAK;AAAA,sBACL,WAAWF,EAAI,sBAAsB;AAAA,sBACrC,QACEL,KAAUA,KAAUQ,IAChBA,EAAmBR,CAAM,IACzB;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAER;AAAA,cAAA;AAAA,YACF;AAAA,YACC,gBAAAY,EAAAF,GAAA,EAAK,KAAK,GAAG,OAAM,UACjB,UAAA;AAAA,cAAAN;AAAA,cACAF,KACC,gBAAAO;AAAA,gBAACO;AAAA,gBAAA;AAAA,kBACC,OAAM;AAAA,kBACN,UAAU,gBAAAP,EAACQ,GAAM,EAAA,MAAM,GAAI,CAAA;AAAA,kBAC3B,SAASd;AAAA,kBACT,MAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,YACP,EAEJ,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ;"}
1
+ {"version":3,"file":"item.js","sources":["../../../src/components/upload/item.tsx"],"sourcesContent":["\"use client\";\nimport Flex from \"antd/es/flex\";\nimport Progress from \"antd/es/progress\";\nimport { type ProgressProps } from \"antd/es/progress\";\nimport { Trash } from \"@bioturing/assets\";\nimport { IconButton } from \"../icon-button\";\nimport { Truncate } from \"../truncate/component\";\nimport { clsx, useCls } from \"../utils\";\nimport { getUploadFileIcon } from \"./utils\";\n\nexport type UploadFileStatus =\n | \"error\"\n | \"done\"\n | \"uploading\"\n | \"removed\"\n | \"pending\";\n\nexport interface UploadItemProps extends React.HTMLAttributes<HTMLDivElement> {\n fileName: string;\n fileType?: string;\n status?: UploadFileStatus;\n percent?: number;\n removable?: boolean;\n onRemove?: () => void;\n extraActions?: React.ReactNode;\n}\n\nexport const UploadItem = ({\n fileName,\n fileType,\n status = \"pending\",\n percent,\n removable = true,\n onRemove,\n extraActions,\n className,\n ...rest\n}: UploadItemProps) => {\n const cls = useCls();\n const showPercent = Math.round(percent || 0);\n const statusWithProgress: Record<UploadFileStatus, ProgressProps[\"status\"]> =\n {\n done: \"success\",\n error: \"exception\",\n uploading: \"active\",\n removed: \"normal\",\n pending: \"normal\",\n };\n return (\n <Flex\n className={clsx(cls(\"upload-item\"), className)}\n justify=\"space-between\"\n align=\"center\"\n data-error={status === \"error\"}\n {...rest}\n >\n <Flex\n align=\"center\"\n gap={16}\n flex={1}\n className={cls(\"upload-item-content\")}\n >\n <span className={cls(\"upload-item-icon\")}>\n {getUploadFileIcon(fileType)}\n </span>\n <Flex\n align=\"start\"\n vertical\n flex={1}\n className={cls(\"upload-item-name-progress\")}\n >\n <Truncate position=\"middle\">{fileName}</Truncate>\n <Progress\n percent={showPercent}\n size=\"small\"\n className={cls(\"upload-item-progress\")}\n status={\n status && status in statusWithProgress\n ? statusWithProgress[status]\n : \"normal\"\n }\n />\n </Flex>\n <Flex gap={8} align=\"center\">\n {extraActions}\n {removable && (\n <IconButton\n label=\"Remove\"\n children={<Trash size={16} />}\n onClick={onRemove}\n size=\"small\"\n />\n )}\n </Flex>\n </Flex>\n </Flex>\n );\n};\n"],"names":["UploadItem","fileName","fileType","status","percent","removable","onRemove","extraActions","className","rest","cls","useCls","showPercent","statusWithProgress","jsx","Flex","clsx","jsxs","getUploadFileIcon","Truncate","Progress","IconButton","Trash"],"mappings":";;;;;;;;;;AA2BO,MAAMA,IAAa,CAAC;AAAA,EACzB,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,SAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,MAAuB;AACrB,QAAMC,IAAMC,EAAO,GACbC,IAAc,KAAK,MAAMR,KAAW,CAAC,GACrCS,IACJ;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,WAAW;AAAA,IACX,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAEA,SAAA,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAKN,EAAI,aAAa,GAAGF,CAAS;AAAA,MAC7C,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,cAAYL,MAAW;AAAA,MACtB,GAAGM;AAAA,MAEJ,UAAA,gBAAAQ;AAAA,QAACF;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,KAAK;AAAA,UACL,MAAM;AAAA,UACN,WAAWL,EAAI,qBAAqB;AAAA,UAEpC,UAAA;AAAA,YAAA,gBAAAI,EAAC,UAAK,WAAWJ,EAAI,kBAAkB,GACpC,UAAAQ,EAAkBhB,CAAQ,GAC7B;AAAA,YACA,gBAAAe;AAAA,cAACF;AAAA,cAAA;AAAA,gBACC,OAAM;AAAA,gBACN,UAAQ;AAAA,gBACR,MAAM;AAAA,gBACN,WAAWL,EAAI,2BAA2B;AAAA,gBAE1C,UAAA;AAAA,kBAAC,gBAAAI,EAAAK,GAAA,EAAS,UAAS,UAAU,UAASlB,GAAA;AAAA,kBACtC,gBAAAa;AAAA,oBAACM;AAAA,oBAAA;AAAA,sBACC,SAASR;AAAA,sBACT,MAAK;AAAA,sBACL,WAAWF,EAAI,sBAAsB;AAAA,sBACrC,QACEP,KAAUA,KAAUU,IAChBA,EAAmBV,CAAM,IACzB;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAER;AAAA,cAAA;AAAA,YACF;AAAA,YACC,gBAAAc,EAAAF,GAAA,EAAK,KAAK,GAAG,OAAM,UACjB,UAAA;AAAA,cAAAR;AAAA,cACAF,KACC,gBAAAS;AAAA,gBAACO;AAAA,gBAAA;AAAA,kBACC,OAAM;AAAA,kBACN,UAAU,gBAAAP,EAACQ,GAAM,EAAA,MAAM,GAAI,CAAA;AAAA,kBAC3B,SAAShB;AAAA,kBACT,MAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,YACP,EAEJ,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ;"}
@@ -1,62 +1,24 @@
1
1
  "use client";
2
- import n from "antd/es/config-provider";
3
- import c from "antd/es/theme/useToken";
4
- import { useContext as i, useCallback as a } from "react";
5
- import { cx as l } from "./cn.js";
6
- const b = () => {
7
- const { getPrefixCls: s } = i(n.ConfigContext);
8
- return { getPrefixCls: s };
9
- }, g = () => {
10
- var t;
11
- return (t = c()[4]) == null ? void 0 : t.key;
12
- }, k = () => {
13
- const { getPrefixCls: s } = i(n.ConfigContext);
14
- return a(
15
- (...e) => l(...e).map((o) => s(o)).join(" "),
16
- [s]
2
+ import o from "antd/es/config-provider";
3
+ import i from "antd/es/theme/useToken";
4
+ import { useContext as n, useCallback as C } from "react";
5
+ import { cx as c } from "./cn.js";
6
+ const x = () => {
7
+ const { getPrefixCls: t } = n(o.ConfigContext);
8
+ return { getPrefixCls: t };
9
+ }, a = () => {
10
+ var e;
11
+ return (e = i()[4]) == null ? void 0 : e.key;
12
+ }, p = () => {
13
+ const { getPrefixCls: t } = n(o.ConfigContext);
14
+ return C(
15
+ (...s) => c(...s).map((r) => t(r)).join(" "),
16
+ [t]
17
17
  );
18
18
  };
19
- function f(s) {
20
- const t = [];
21
- let e = "";
22
- for (const o of s)
23
- o >= "A" && o <= "Z" ? (e && t.push(e), e = o.toLowerCase()) : e += o;
24
- return e && t.push(e), t.length > 0 ? t : [s];
25
- }
26
- const h = (s = "bottomLeft") => {
27
- const [t, e] = f(s);
28
- let o, r = "center";
29
- if (t === "top" || t === "bottom") {
30
- if (o = t, e)
31
- switch (e) {
32
- case "left":
33
- r = "start";
34
- break;
35
- case "right":
36
- r = "end";
37
- break;
38
- }
39
- } else if (t === "left" || t === "right") {
40
- if (o = t, e)
41
- switch (e) {
42
- case "top":
43
- r = "start";
44
- break;
45
- case "bottom":
46
- r = "end";
47
- break;
48
- }
49
- } else
50
- o = "bottom";
51
- return {
52
- placement: o,
53
- align: r
54
- };
55
- };
56
19
  export {
57
- h as parseAntdPlacement,
58
- g as useAntdCssVarClassname,
59
- k as useCls,
60
- b as useGetPrefixCls
20
+ a as useAntdCssVarClassname,
21
+ p as useCls,
22
+ x as useGetPrefixCls
61
23
  };
62
24
  //# sourceMappingURL=antdUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"antdUtils.js","sources":["../../../src/components/utils/antdUtils.ts"],"sourcesContent":["\"use client\";\nimport { default as ConfigProvider } from \"antd/es/config-provider\";\nimport useToken from \"antd/es/theme/useToken\";\nimport { useCallback, useContext } from \"react\";\nimport type { ClassValue } from \"./types\";\nimport { cx } from \"./cn\";\nimport { PopoverProps } from \"antd/es/popover\";\n\nexport const useGetPrefixCls = () => {\n const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);\n return { getPrefixCls };\n};\n\n/**\n *\n * @returns the antd classname providing css variables\n */\nexport const useAntdCssVarClassname = () => {\n const token = useToken();\n return token[4]?.key;\n};\n\nexport const useCls = () => {\n const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);\n const cls = useCallback(\n (...args: ClassValue[]) => {\n return cx(...args)\n .map((cls) => getPrefixCls(cls))\n .join(\" \");\n },\n [getPrefixCls]\n );\n return cls;\n};\n\nfunction splitCamelCase(text: string): string[] {\n const result: string[] = [];\n let currentWord = \"\";\n\n for (const char of text) {\n if (char >= \"A\" && char <= \"Z\") {\n if (currentWord) {\n result.push(currentWord);\n }\n currentWord = char.toLowerCase();\n } else {\n currentWord += char;\n }\n }\n\n if (currentWord) {\n result.push(currentWord);\n }\n\n return result.length > 0 ? result : [text];\n}\n\nexport const parseAntdPlacement = (\n placement: PopoverProps[\"placement\"] = \"bottomLeft\"\n): {\n placement: \"top\" | \"bottom\" | \"left\" | \"right\";\n align: \"start\" | \"end\" | \"center\";\n} => {\n const [position1, position2] = splitCamelCase(placement);\n\n // Determine primary placement\n let primaryPlacement: \"top\" | \"bottom\" | \"left\" | \"right\";\n let align: \"start\" | \"end\" | \"center\" = \"center\";\n\n // First check if it's a vertical or horizontal primary placement\n if (position1 === \"top\" || position1 === \"bottom\") {\n primaryPlacement = position1;\n if (position2) {\n switch (position2) {\n case \"left\":\n align = \"start\";\n break;\n case \"right\":\n align = \"end\";\n break;\n // \"top\" or \"bottom\" as second position is invalid, defaults to center\n }\n }\n } else if (position1 === \"left\" || position1 === \"right\") {\n primaryPlacement = position1;\n if (position2) {\n switch (position2) {\n case \"top\":\n align = \"start\";\n break;\n case \"bottom\":\n align = \"end\";\n break;\n // \"left\" or \"right\" as second position is invalid, defaults to center\n }\n }\n } else {\n // Fallback for invalid placement\n primaryPlacement = \"bottom\";\n }\n\n return {\n placement: primaryPlacement,\n align,\n };\n};\n"],"names":["useGetPrefixCls","getPrefixCls","useContext","ConfigProvider","useAntdCssVarClassname","_a","useToken","useCls","useCallback","args","cx","cls","splitCamelCase","text","result","currentWord","char","parseAntdPlacement","placement","position1","position2","primaryPlacement","align"],"mappings":";;;;;AAQO,MAAMA,IAAkB,MAAM;AACnC,QAAM,EAAE,cAAAC,EAAiB,IAAAC,EAAWC,EAAe,aAAa;AAChE,SAAO,EAAE,cAAAF,EAAa;AACxB,GAMaG,IAAyB,MAAM;;AAEnC,UAAAC,IADOC,EAAS,EACV,CAAC,MAAP,gBAAAD,EAAU;AACnB,GAEaE,IAAS,MAAM;AAC1B,QAAM,EAAE,cAAAN,EAAiB,IAAAC,EAAWC,EAAe,aAAa;AASzD,SARKK;AAAA,IACV,IAAIC,MACKC,EAAG,GAAGD,CAAI,EACd,IAAI,CAACE,MAAQV,EAAaU,CAAG,CAAC,EAC9B,KAAK,GAAG;AAAA,IAEb,CAACV,CAAY;AAAA,EACf;AAEF;AAEA,SAASW,EAAeC,GAAwB;AAC9C,QAAMC,IAAmB,CAAC;AAC1B,MAAIC,IAAc;AAElB,aAAWC,KAAQH;AACb,IAAAG,KAAQ,OAAOA,KAAQ,OACrBD,KACFD,EAAO,KAAKC,CAAW,GAEzBA,IAAcC,EAAK,YAAY,KAEhBD,KAAAC;AAInB,SAAID,KACFD,EAAO,KAAKC,CAAW,GAGlBD,EAAO,SAAS,IAAIA,IAAS,CAACD,CAAI;AAC3C;AAEa,MAAAI,IAAqB,CAChCC,IAAuC,iBAIpC;AACH,QAAM,CAACC,GAAWC,CAAS,IAAIR,EAAeM,CAAS;AAGnD,MAAAG,GACAC,IAAoC;AAGpC,MAAAH,MAAc,SAASA,MAAc;AAEvC,QADmBE,IAAAF,GACfC;AACF,cAAQA,GAAW;AAAA,QACjB,KAAK;AACK,UAAAE,IAAA;AACR;AAAA,QACF,KAAK;AACK,UAAAA,IAAA;AACR;AAAA,MAAA;AAAA,aAIGH,MAAc,UAAUA,MAAc;AAE/C,QADmBE,IAAAF,GACfC;AACF,cAAQA,GAAW;AAAA,QACjB,KAAK;AACK,UAAAE,IAAA;AACR;AAAA,QACF,KAAK;AACK,UAAAA,IAAA;AACR;AAAA,MAAA;AAAA;AAMa,IAAAD,IAAA;AAGd,SAAA;AAAA,IACL,WAAWA;AAAA,IACX,OAAAC;AAAA,EACF;AACF;"}
1
+ {"version":3,"file":"antdUtils.js","sources":["../../../src/components/utils/antdUtils.ts"],"sourcesContent":["\"use client\";\nimport { default as ConfigProvider } from \"antd/es/config-provider\";\nimport useToken from \"antd/es/theme/useToken\";\nimport { useCallback, useContext } from \"react\";\nimport type { ClassValue } from \"./types\";\nimport { cx } from \"./cn\";\nimport { PopoverProps } from \"antd/es/popover\";\n\nexport const useGetPrefixCls = () => {\n const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);\n return { getPrefixCls };\n};\n\n/**\n *\n * @returns the antd classname providing css variables\n */\nexport const useAntdCssVarClassname = () => {\n const token = useToken();\n return token[4]?.key;\n};\n\nexport const useCls = () => {\n const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);\n const cls = useCallback(\n (...args: ClassValue[]) => {\n return cx(...args)\n .map((cls) => getPrefixCls(cls))\n .join(\" \");\n },\n [getPrefixCls]\n );\n return cls;\n};\n\n// Placement utilities moved to ./placement.ts\n"],"names":["useGetPrefixCls","getPrefixCls","useContext","ConfigProvider","useAntdCssVarClassname","_a","useToken","useCls","useCallback","args","cx","cls"],"mappings":";;;;;AAQO,MAAMA,IAAkB,MAAM;AACnC,QAAM,EAAE,cAAAC,EAAiB,IAAAC,EAAWC,EAAe,aAAa;AAChE,SAAO,EAAE,cAAAF,EAAa;AACxB,GAMaG,IAAyB,MAAM;;AAEnC,UAAAC,IADOC,EAAS,EACV,CAAC,MAAP,gBAAAD,EAAU;AACnB,GAEaE,IAAS,MAAM;AAC1B,QAAM,EAAE,cAAAN,EAAiB,IAAAC,EAAWC,EAAe,aAAa;AASzD,SARKK;AAAA,IACV,IAAIC,MACKC,EAAG,GAAGD,CAAI,EACd,IAAI,CAACE,MAAQV,EAAaU,CAAG,CAAC,EAC9B,KAAK,GAAG;AAAA,IAEb,CAACV,CAAY;AAAA,EACf;AAEF;"}
@@ -0,0 +1,58 @@
1
+ function i(r) {
2
+ const e = [];
3
+ let o = "";
4
+ for (let t = 0; t < r.length; t++) {
5
+ const n = r[t];
6
+ n >= "A" && n <= "Z" && o.length > 0 ? (e.push(o), o = n) : o += n;
7
+ }
8
+ return o && e.push(o), e.length > 0 ? e : [r];
9
+ }
10
+ function a(r = "bottomLeft") {
11
+ const [e, o] = i(r);
12
+ let t, n = "center";
13
+ if (["top", "bottom", "left", "right"].includes(e.toLowerCase())) {
14
+ if (t = e.toLowerCase(), o) {
15
+ const s = o.toLowerCase();
16
+ t === "top" || t === "bottom" ? s === "left" ? n = "start" : s === "right" && (n = "end") : s === "top" ? n = "start" : s === "bottom" && (n = "end");
17
+ }
18
+ } else
19
+ t = "bottom";
20
+ return {
21
+ side: t,
22
+ align: n
23
+ };
24
+ }
25
+ function l(r) {
26
+ const { side: e = "bottom", align: o = "center" } = r;
27
+ if (o === "center")
28
+ return e;
29
+ let t;
30
+ if (e === "top" || e === "bottom")
31
+ switch (o) {
32
+ case "start":
33
+ t = "Left";
34
+ break;
35
+ case "end":
36
+ t = "Right";
37
+ break;
38
+ default:
39
+ return e;
40
+ }
41
+ else
42
+ switch (o) {
43
+ case "start":
44
+ t = "Top";
45
+ break;
46
+ case "end":
47
+ t = "Bottom";
48
+ break;
49
+ default:
50
+ return e;
51
+ }
52
+ return `${e}${t}`;
53
+ }
54
+ export {
55
+ l as buildAntdPlacement,
56
+ a as parseAntdPlacement
57
+ };
58
+ //# sourceMappingURL=placement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placement.js","sources":["../../../src/components/utils/placement.ts"],"sourcesContent":["import type { PopoverProps } from \"antd/es/popover\";\n\n// Base UI placement types\nexport type BaseUISide = \"top\" | \"bottom\" | \"left\" | \"right\";\nexport type BaseUIAlign = \"start\" | \"end\" | \"center\";\n\n// Antd placement type (re-export for convenience)\nexport type AntdPlacement = PopoverProps[\"placement\"];\n\n// Base UI placement interface - used for both parsing and building\nexport interface BaseUIPlacement {\n side: BaseUISide;\n align: BaseUIAlign;\n}\n\n/**\n * Utility to split camelCase strings into parts\n * e.g., \"bottomLeft\" -> [\"bottom\", \"Left\"]\n */\nfunction splitCamelCase(text: string): string[] {\n const result: string[] = [];\n let currentWord = \"\";\n\n for (let i = 0; i < text.length; i++) {\n const char = text[i];\n\n if (char >= \"A\" && char <= \"Z\" && currentWord.length > 0) {\n result.push(currentWord);\n currentWord = char;\n } else {\n currentWord += char;\n }\n }\n\n if (currentWord) {\n result.push(currentWord);\n }\n\n return result.length > 0 ? result : [text];\n}\n\n/**\n * Parse Antd placement string into BaseUI side and align values\n * @param placement - Antd placement string (e.g., \"bottomLeft\", \"top\", \"rightTop\")\n * @returns Object with side and align properties for BaseUI components\n */\nexport function parseAntdPlacement(\n placement: AntdPlacement = \"bottomLeft\"\n): BaseUIPlacement {\n const [position1, position2] = splitCamelCase(placement);\n\n // Determine primary placement\n let side: BaseUISide;\n let align: BaseUIAlign = \"center\";\n\n // Check if first position is a side\n if ([\"top\", \"bottom\", \"left\", \"right\"].includes(position1.toLowerCase())) {\n side = position1.toLowerCase() as BaseUISide;\n\n // Determine alignment based on side and secondary position\n if (position2) {\n const secondaryLower = position2.toLowerCase();\n \n if (side === \"top\" || side === \"bottom\") {\n // For vertical sides, Left/Right become start/end\n if (secondaryLower === \"left\") align = \"start\";\n else if (secondaryLower === \"right\") align = \"end\";\n } else {\n // For horizontal sides, Top/Bottom become start/end\n if (secondaryLower === \"top\") align = \"start\";\n else if (secondaryLower === \"bottom\") align = \"end\";\n }\n }\n } else {\n // Fallback for invalid placement\n side = \"bottom\";\n }\n\n return {\n side,\n align,\n };\n}\n\n/**\n * Build Antd placement string from BaseUI side and align values\n * @param placement - Object with side and align properties\n * @returns Antd placement string\n */\nexport function buildAntdPlacement(placement: BaseUIPlacement): AntdPlacement {\n const { side = \"bottom\", align = \"center\" } = placement;\n \n if (align === \"center\") {\n return side;\n }\n\n let alignmentPart: string;\n\n // For vertical sides (top/bottom), alignment is horizontal\n if (side === \"top\" || side === \"bottom\") {\n switch (align) {\n case \"start\":\n alignmentPart = \"Left\";\n break;\n case \"end\":\n alignmentPart = \"Right\";\n break;\n default:\n return side;\n }\n }\n // For horizontal sides (left/right), alignment is vertical\n else {\n switch (align) {\n case \"start\":\n alignmentPart = \"Top\";\n break;\n case \"end\":\n alignmentPart = \"Bottom\";\n break;\n default:\n return side;\n }\n }\n\n return `${side}${alignmentPart}` as AntdPlacement;\n}"],"names":["splitCamelCase","text","result","currentWord","i","char","parseAntdPlacement","placement","position1","position2","side","align","secondaryLower","buildAntdPlacement","alignmentPart"],"mappings":"AAmBA,SAASA,EAAeC,GAAwB;AAC9C,QAAMC,IAAmB,CAAC;AAC1B,MAAIC,IAAc;AAElB,WAASC,IAAI,GAAGA,IAAIH,EAAK,QAAQG,KAAK;AAC9B,UAAAC,IAAOJ,EAAKG,CAAC;AAEnB,IAAIC,KAAQ,OAAOA,KAAQ,OAAOF,EAAY,SAAS,KACrDD,EAAO,KAAKC,CAAW,GACTA,IAAAE,KAECF,KAAAE;AAAA,EACjB;AAGF,SAAIF,KACFD,EAAO,KAAKC,CAAW,GAGlBD,EAAO,SAAS,IAAIA,IAAS,CAACD,CAAI;AAC3C;AAOgB,SAAAK,EACdC,IAA2B,cACV;AACjB,QAAM,CAACC,GAAWC,CAAS,IAAIT,EAAeO,CAAS;AAGnD,MAAAG,GACAC,IAAqB;AAGrB,MAAA,CAAC,OAAO,UAAU,QAAQ,OAAO,EAAE,SAASH,EAAU,YAAY,CAAC;AAIrE,QAHAE,IAAOF,EAAU,YAAY,GAGzBC,GAAW;AACP,YAAAG,IAAiBH,EAAU,YAAY;AAEzC,MAAAC,MAAS,SAASA,MAAS,WAEzBE,MAAmB,SAAgBD,IAAA,UAC9BC,MAAmB,YAAiBD,IAAA,SAGzCC,MAAmB,QAAeD,IAAA,UAC7BC,MAAmB,aAAkBD,IAAA;AAAA,IAChD;AAAA;AAIK,IAAAD,IAAA;AAGF,SAAA;AAAA,IACL,MAAAA;AAAA,IACA,OAAAC;AAAA,EACF;AACF;AAOO,SAASE,EAAmBN,GAA2C;AAC5E,QAAM,EAAE,MAAAG,IAAO,UAAU,OAAAC,IAAQ,SAAa,IAAAJ;AAE9C,MAAII,MAAU;AACL,WAAAD;AAGL,MAAAI;AAGA,MAAAJ,MAAS,SAASA,MAAS;AAC7B,YAAQC,GAAO;AAAA,MACb,KAAK;AACa,QAAAG,IAAA;AAChB;AAAA,MACF,KAAK;AACa,QAAAA,IAAA;AAChB;AAAA,MACF;AACS,eAAAJ;AAAA,IAAA;AAAA;AAKX,YAAQC,GAAO;AAAA,MACb,KAAK;AACa,QAAAG,IAAA;AAChB;AAAA,MACF,KAAK;AACa,QAAAA,IAAA;AAChB;AAAA,MACF;AACS,eAAAJ;AAAA,IAAA;AAIN,SAAA,GAAGA,CAAI,GAAGI,CAAa;AAChC;"}
@@ -0,0 +1,5 @@
1
+ const r = (o, p, t) => o.props && typeof o.props == "object" && p in o.props && o.props[p] !== void 0 ? o.props[p] : t;
2
+ export {
3
+ r as getReactElementProp
4
+ };
5
+ //# sourceMappingURL=reactElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactElement.js","sources":["../../../src/components/utils/reactElement.ts"],"sourcesContent":["export const getReactElementProp = <T>(\n el: React.ReactElement,\n propKey: string,\n defaultValue?: T\n) => {\n return el.props &&\n typeof el.props === \"object\" &&\n propKey in el.props &&\n el.props[propKey] !== undefined\n ? (el.props[propKey] as T)\n : defaultValue;\n};\n"],"names":["getReactElementProp","el","propKey","defaultValue"],"mappings":"AAAO,MAAMA,IAAsB,CACjCC,GACAC,GACAC,MAEOF,EAAG,SACR,OAAOA,EAAG,SAAU,YACpBC,KAAWD,EAAG,SACdA,EAAG,MAAMC,CAAO,MAAM,SACnBD,EAAG,MAAMC,CAAO,IACjBC;"}