@bioturing/components 0.19.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/{Badge → badge}/component.js.map +1 -1
- package/dist/components/{Breadcrumb → breadcrumb}/component.js.map +1 -1
- package/dist/components/{Breadcrumb → breadcrumb}/useItemRender.js +6 -5
- package/dist/components/breadcrumb/useItemRender.js.map +1 -0
- package/dist/components/{Button → button}/component.js.map +1 -1
- package/dist/components/{Checkbox → checkbox}/component.js +1 -0
- package/dist/components/checkbox/component.js.map +1 -0
- package/dist/components/choice-list/component.js +54 -0
- package/dist/components/choice-list/component.js.map +1 -0
- package/dist/components/choice-list/style.css +1 -0
- package/dist/components/cmdk/command-score.js +48 -0
- package/dist/components/cmdk/command-score.js.map +1 -0
- package/dist/components/cmdk/index.js +611 -0
- package/dist/components/cmdk/index.js.map +1 -0
- package/dist/components/{CodeBlock → code-block}/component.js +4 -4
- package/dist/components/code-block/component.js.map +1 -0
- package/dist/components/{Collapse → collapse}/component.js.map +1 -1
- package/dist/components/{ColorSelect → color-select}/component.js +10 -10
- package/dist/components/color-select/component.js.map +1 -0
- package/dist/components/drag-drop/context.js.map +1 -0
- package/dist/components/drag-drop/draggable.js.map +1 -0
- package/dist/components/drag-drop/droppable.js.map +1 -0
- package/dist/components/{DragDrop → drag-drop}/hooks.js +1 -0
- package/dist/components/drag-drop/hooks.js.map +1 -0
- package/dist/components/drag-drop/index.js.map +1 -0
- package/dist/components/{DragDrop → drag-drop}/value.js +4 -4
- package/dist/components/drag-drop/value.js.map +1 -0
- package/dist/components/dropdown-menu/component.js +199 -0
- package/dist/components/dropdown-menu/component.js.map +1 -0
- package/dist/components/dropdown-menu/style.css +1 -0
- package/dist/components/{DSRoot → ds-root}/component.js +3 -3
- package/dist/components/ds-root/component.js.map +1 -0
- package/dist/components/ds-root/context.js.map +1 -0
- package/dist/components/{Empty → empty}/component.js +6 -5
- package/dist/components/empty/component.js.map +1 -0
- package/dist/components/{Field → field}/component.js.map +1 -1
- package/dist/components/{Form → form}/component.js.map +1 -1
- package/dist/components/{Form → form}/item.js +1 -1
- package/dist/components/form/item.js.map +1 -0
- package/dist/components/hooks/useCharts.js +1 -1
- package/dist/components/hooks/useCharts.js.map +1 -1
- package/dist/components/{IconButton → icon-button}/component.js +2 -2
- package/dist/components/icon-button/component.js.map +1 -0
- package/dist/components/input/component.js +26 -0
- package/dist/components/input/component.js.map +1 -0
- package/dist/components/{Modal → modal}/Modal.js +3 -3
- package/dist/components/modal/Modal.js.map +1 -0
- package/dist/components/{Modal → modal}/ModalProvider.js.map +1 -1
- package/dist/components/{Modal → modal}/ModalService.js +3 -2
- package/dist/components/modal/ModalService.js.map +1 -0
- package/dist/components/{Modal → modal}/constants.js.map +1 -1
- package/dist/components/{Modal → modal}/functions.js +8 -7
- package/dist/components/modal/functions.js.map +1 -0
- package/dist/components/{Modal → modal}/index.js.map +1 -1
- package/dist/components/{Nav → nav}/context.js.map +1 -1
- package/dist/components/{Nav → nav}/group.js.map +1 -1
- package/dist/components/{Nav → nav}/heading.js.map +1 -1
- package/dist/components/{Nav → nav}/index.js +3 -2
- package/dist/components/nav/index.js.map +1 -0
- package/dist/components/{Nav → nav}/item.js +0 -1
- package/dist/components/nav/item.js.map +1 -0
- package/dist/components/{Popover → popover}/component.js.map +1 -1
- package/dist/components/{PopupPanel → popup-panel}/component.js +47 -47
- package/dist/components/popup-panel/component.js.map +1 -0
- package/dist/components/popup-panel/constants.js.map +1 -0
- package/dist/components/{Radio → radio}/component.js +6 -5
- package/dist/components/radio/component.js.map +1 -0
- package/dist/components/scroll-area/component.js.map +1 -0
- package/dist/components/{Segmented → segmented}/component.js +3 -2
- package/dist/components/segmented/component.js.map +1 -0
- package/dist/components/{Select → select}/component.js +7 -6
- package/dist/components/select/component.js.map +1 -0
- package/dist/components/{Slider → slider}/component.js.map +1 -1
- package/dist/components/{Spin → spin}/component.js +5 -4
- package/dist/components/spin/component.js.map +1 -0
- package/dist/components/{Splitter → splitter}/component.js.map +1 -1
- package/dist/components/{Stack → stack}/Stack.js.map +1 -1
- package/dist/components/{Stack → stack}/StackChild.js.map +1 -1
- package/dist/components/{Stack → stack}/index.js.map +1 -1
- package/dist/components/{Switch → switch}/component.js +3 -2
- package/dist/components/switch/component.js.map +1 -0
- package/dist/components/{Table → table}/component.js +1 -1
- package/dist/components/{Table → table}/component.js.map +1 -1
- package/dist/components/{Tag → tag}/component.js.map +1 -1
- package/dist/components/theme-provider/component.js.map +1 -0
- package/dist/components/{Toast → toast}/component.js +4 -4
- package/dist/components/toast/component.js.map +1 -0
- package/dist/components/{Toast → toast}/function.js.map +1 -1
- package/dist/components/{Tooltip → tooltip}/component.js.map +1 -1
- package/dist/components/{Tour → tour}/component.js.map +1 -1
- package/dist/components/{Transition → transition}/component.js.map +1 -1
- package/dist/components/{Tree → tree}/components.js.map +1 -1
- package/dist/components/{Tree → tree}/helpers.js.map +1 -1
- package/dist/components/{Tree → tree}/useTreeCommon.js.map +1 -1
- package/dist/components/{Tree → tree}/useUniqueKeysTree.js.map +1 -1
- package/dist/components/{Truncate → truncate}/component.js.map +1 -1
- package/dist/components/{Truncate → truncate}/helpers.js.map +1 -1
- package/dist/components/{Upload → upload}/component.js +1 -1
- package/dist/components/{Upload → upload}/component.js.map +1 -1
- package/dist/components/{Upload → upload}/dragger.js.map +1 -1
- package/dist/components/{Upload → upload}/hooks.js.map +1 -1
- package/dist/components/{Upload → upload}/item.js +7 -6
- package/dist/components/upload/item.js.map +1 -0
- package/dist/components/{Upload → upload}/utils.js.map +1 -1
- package/dist/components/utils/WithRenderProp.js +15 -0
- package/dist/components/utils/WithRenderProp.js.map +1 -0
- package/dist/components/{VerticalCollapsiblePanel → vertical-collapsible-panel}/component.js +9 -9
- package/dist/components/vertical-collapsible-panel/component.js.map +1 -0
- package/dist/index.d.ts +223 -2
- package/dist/index.js +158 -154
- package/dist/index.js.map +1 -1
- package/dist/metadata.js +14 -0
- package/dist/metadata.js.map +1 -1
- package/package.json +2 -1
- package/dist/components/Breadcrumb/useItemRender.js.map +0 -1
- package/dist/components/Checkbox/component.js.map +0 -1
- package/dist/components/CodeBlock/component.js.map +0 -1
- package/dist/components/ColorSelect/component.js.map +0 -1
- package/dist/components/DSRoot/component.js.map +0 -1
- package/dist/components/DSRoot/context.js.map +0 -1
- package/dist/components/DragDrop/context.js.map +0 -1
- package/dist/components/DragDrop/draggable.js.map +0 -1
- package/dist/components/DragDrop/droppable.js.map +0 -1
- package/dist/components/DragDrop/hooks.js.map +0 -1
- package/dist/components/DragDrop/index.js.map +0 -1
- package/dist/components/DragDrop/value.js.map +0 -1
- package/dist/components/DropdownMenu/component.js +0 -156
- package/dist/components/DropdownMenu/component.js.map +0 -1
- package/dist/components/DropdownMenu/style.css +0 -1
- package/dist/components/Empty/component.js.map +0 -1
- package/dist/components/Form/item.js.map +0 -1
- package/dist/components/IconButton/component.js.map +0 -1
- package/dist/components/Input/component.js +0 -25
- package/dist/components/Input/component.js.map +0 -1
- package/dist/components/Modal/Modal.js.map +0 -1
- package/dist/components/Modal/ModalService.js.map +0 -1
- package/dist/components/Modal/functions.js.map +0 -1
- package/dist/components/Nav/index.js.map +0 -1
- package/dist/components/Nav/item.js.map +0 -1
- package/dist/components/PopupPanel/component.js.map +0 -1
- package/dist/components/PopupPanel/constants.js.map +0 -1
- package/dist/components/Radio/component.js.map +0 -1
- package/dist/components/ScrollArea/component.js.map +0 -1
- package/dist/components/Segmented/component.js.map +0 -1
- package/dist/components/Select/component.js.map +0 -1
- package/dist/components/Spin/component.js.map +0 -1
- package/dist/components/Switch/component.js.map +0 -1
- package/dist/components/ThemeProvider/component.js.map +0 -1
- package/dist/components/Toast/component.js.map +0 -1
- package/dist/components/Upload/item.js.map +0 -1
- package/dist/components/VerticalCollapsiblePanel/component.js.map +0 -1
- /package/dist/components/{Badge → badge}/component.js +0 -0
- /package/dist/components/{Badge → badge}/style.css +0 -0
- /package/dist/components/{Breadcrumb → breadcrumb}/component.js +0 -0
- /package/dist/components/{Breadcrumb → breadcrumb}/style.css +0 -0
- /package/dist/components/{Button → button}/component.js +0 -0
- /package/dist/components/{Button → button}/style.css +0 -0
- /package/dist/components/{Checkbox → checkbox}/style.css +0 -0
- /package/dist/components/{CodeBlock → code-block}/style.css +0 -0
- /package/dist/components/{Collapse → collapse}/component.js +0 -0
- /package/dist/components/{Collapse → collapse}/style.css +0 -0
- /package/dist/components/{ColorSelect → color-select}/style.css +0 -0
- /package/dist/components/{DragDrop → drag-drop}/context.js +0 -0
- /package/dist/components/{DragDrop → drag-drop}/draggable.js +0 -0
- /package/dist/components/{DragDrop → drag-drop}/droppable.js +0 -0
- /package/dist/components/{DragDrop → drag-drop}/index.js +0 -0
- /package/dist/components/{DragDrop → drag-drop}/style.css +0 -0
- /package/dist/components/{DSRoot → ds-root}/context.js +0 -0
- /package/dist/components/{DSRoot → ds-root}/style.css +0 -0
- /package/dist/components/{Empty → empty}/style.css +0 -0
- /package/dist/components/{Field → field}/component.js +0 -0
- /package/dist/components/{Field → field}/style.css +0 -0
- /package/dist/components/{Form → form}/component.js +0 -0
- /package/dist/components/{Form → form}/style.css +0 -0
- /package/dist/components/{IconButton → icon-button}/style.css +0 -0
- /package/dist/components/{Modal → modal}/ModalProvider.js +0 -0
- /package/dist/components/{Modal → modal}/constants.js +0 -0
- /package/dist/components/{Modal → modal}/index.js +0 -0
- /package/dist/components/{Modal → modal}/style.css +0 -0
- /package/dist/components/{Nav → nav}/context.js +0 -0
- /package/dist/components/{Nav → nav}/group.js +0 -0
- /package/dist/components/{Nav → nav}/heading.js +0 -0
- /package/dist/components/{Nav → nav}/style.css +0 -0
- /package/dist/components/{Popover → popover}/component.js +0 -0
- /package/dist/components/{PopupPanel → popup-panel}/constants.js +0 -0
- /package/dist/components/{PopupPanel → popup-panel}/style.css +0 -0
- /package/dist/components/{Radio → radio}/style.css +0 -0
- /package/dist/components/{ScrollArea → scroll-area}/component.js +0 -0
- /package/dist/components/{ScrollArea → scroll-area}/style.css +0 -0
- /package/dist/components/{Segmented → segmented}/style.css +0 -0
- /package/dist/components/{Select → select}/style.css +0 -0
- /package/dist/components/{Slider → slider}/component.js +0 -0
- /package/dist/components/{Spin → spin}/style.css +0 -0
- /package/dist/components/{Splitter → splitter}/component.js +0 -0
- /package/dist/components/{Splitter → splitter}/style.css +0 -0
- /package/dist/components/{Stack → stack}/Stack.js +0 -0
- /package/dist/components/{Stack → stack}/StackChild.js +0 -0
- /package/dist/components/{Stack → stack}/index.js +0 -0
- /package/dist/components/{Stack → stack}/style.css +0 -0
- /package/dist/components/{Switch → switch}/style.css +0 -0
- /package/dist/components/{Table → table}/style.css +0 -0
- /package/dist/components/{Tag → tag}/component.js +0 -0
- /package/dist/components/{Tag → tag}/style.css +0 -0
- /package/dist/components/{ThemeProvider → theme-provider}/component.js +0 -0
- /package/dist/components/{ThemeProvider → theme-provider}/style.css +0 -0
- /package/dist/components/{Toast → toast}/function.js +0 -0
- /package/dist/components/{Toast → toast}/style.css +0 -0
- /package/dist/components/{Tooltip → tooltip}/component.js +0 -0
- /package/dist/components/{Tooltip → tooltip}/style.css +0 -0
- /package/dist/components/{Tour → tour}/component.js +0 -0
- /package/dist/components/{Tour → tour}/style.css +0 -0
- /package/dist/components/{Transition → transition}/component.js +0 -0
- /package/dist/components/{Tree → tree}/components.js +0 -0
- /package/dist/components/{Tree → tree}/helpers.js +0 -0
- /package/dist/components/{Tree → tree}/style.css +0 -0
- /package/dist/components/{Tree → tree}/useTreeCommon.js +0 -0
- /package/dist/components/{Tree → tree}/useUniqueKeysTree.js +0 -0
- /package/dist/components/{Truncate → truncate}/component.js +0 -0
- /package/dist/components/{Truncate → truncate}/helpers.js +0 -0
- /package/dist/components/{Truncate → truncate}/style.css +0 -0
- /package/dist/components/{Upload → upload}/dragger.js +0 -0
- /package/dist/components/{Upload → upload}/hooks.js +0 -0
- /package/dist/components/{Upload → upload}/style.css +0 -0
- /package/dist/components/{Upload → upload}/utils.js +0 -0
- /package/dist/components/{VerticalCollapsiblePanel → vertical-collapsible-panel}/style.css +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useItemRender.js","sources":["../../../src/components/Breadcrumb/useItemRender.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../utils\";\nimport { renderItem } from \"antd/es/breadcrumb/useItemRender\";\nimport { InternalRouteType } from \"antd/es/breadcrumb/Breadcrumb\";\nimport type { BreadcrumbProps } from \"./types\";\nimport { Truncate } from \"../Truncate\";\n\ntype AddParameters<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TFunction extends (...args: any) => any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TParameters extends [...args: any]\n> = (\n ...args: [...Parameters<TFunction>, ...TParameters]\n) => ReturnType<TFunction>;\n\ntype ItemRender = NonNullable<BreadcrumbProps[\"itemRender\"]>;\ntype InternalItemRenderParams = AddParameters<ItemRender, [href?: string]>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getBreadcrumbName(route: InternalRouteType, params: any) {\n if (route.title === undefined || route.title === null) {\n return null;\n }\n const paramsKeys = Object.keys(params).join(\"|\");\n return typeof route.title === \"object\"\n ? route.title\n : String(route.title).replace(\n new RegExp(`:(${paramsKeys})`, \"g\"),\n (replacement, key) => params[key] || replacement\n );\n}\n\nexport default function useItemRender(\n prefixCls: string,\n itemRender?: ItemRender\n) {\n const mergedItemRender: InternalItemRenderParams = (\n item,\n params,\n routes,\n path,\n href\n ) => {\n if (itemRender) {\n return itemRender(item, params, routes, path);\n }\n const name = getBreadcrumbName(item, params);\n const child = item.icon ? (\n <>\n <span className={cn(`${prefixCls}-item-icon`)}>{item.icon}</span>\n <span className={cn(`${prefixCls}-item-name`)}>\n {typeof name === \"string\" ? <Truncate>{name}</Truncate> : name}\n </span>\n </>\n ) : typeof name === \"string\" ? (\n <Truncate>{name}</Truncate>\n ) : (\n name\n );\n\n return renderItem(prefixCls, item, child, href);\n };\n\n return mergedItemRender;\n}\n"],"names":["getBreadcrumbName","route","params","paramsKeys","replacement","key","useItemRender","prefixCls","itemRender","item","routes","path","href","name","child","jsxs","Fragment","jsx","cn","Truncate","renderItem"],"mappings":";;;;AAoBA,SAASA,EAAkBC,GAA0BC,GAAa;AAChE,MAAID,EAAM,UAAU,UAAaA,EAAM,UAAU;AACxC,WAAA;AAET,QAAME,IAAa,OAAO,KAAKD,CAAM,EAAE,KAAK,GAAG;AACxC,SAAA,OAAOD,EAAM,SAAU,WAC1BA,EAAM,QACN,OAAOA,EAAM,KAAK,EAAE;AAAA,IAClB,IAAI,OAAO,KAAKE,CAAU,KAAK,GAAG;AAAA,IAClC,CAACC,GAAaC,MAAQH,EAAOG,CAAG,KAAKD;AAAA,EACvC;AACN;AAEwB,SAAAE,EACtBC,GACAC,GACA;AA4BO,SA3B4C,CACjDC,GACAP,GACAQ,GACAC,GACAC,MACG;AACH,QAAIJ;AACF,aAAOA,EAAWC,GAAMP,GAAQQ,GAAQC,CAAI;AAExC,UAAAE,IAAOb,EAAkBS,GAAMP,CAAM,GACrCY,IAAQL,EAAK,OAEf,gBAAAM,EAAAC,GAAA,EAAA,UAAA;AAAA,MAAC,gBAAAC,EAAA,QAAA,EAAK,WAAWC,EAAG,GAAGX,CAAS,YAAY,GAAI,YAAK,KAAK,CAAA;AAAA,MACzD,gBAAAU,EAAA,QAAA,EAAK,WAAWC,EAAG,GAAGX,CAAS,YAAY,GACzC,UAAA,OAAOM,KAAS,WAAW,gBAAAI,EAACE,GAAU,EAAA,UAAAN,EAAA,CAAK,IAAcA,EAC5D,CAAA;AAAA,IAAA,GACF,IACE,OAAOA,KAAS,WACjB,gBAAAI,EAAAE,GAAA,EAAU,YAAK,CAAA,IAEhBN;AAGF,WAAOO,EAAWb,GAAWE,GAAMK,GAAOF,CAAI;AAAA,EAChD;AAGF;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/Checkbox/component.tsx"],"sourcesContent":["import {\n Checkbox as AntCheckbox,\n type CheckboxProps as AntCheckboxProps,\n} from \"antd\";\nimport { forwardRef } from \"react\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\n// Define props interface extending Ant Design's CheckboxProps\nexport interface CheckboxProps extends AntCheckboxProps {}\n\n// Create inner function\nconst MainCheckboxInner = (\n props: CheckboxProps,\n ref: React.Ref<React.ComponentRef<typeof AntCheckbox>>\n) => {\n return <AntCheckbox ref={ref} {...props} />;\n};\n\n// Use forwardRef with type assertion\nconst MainCheckbox = forwardRef(MainCheckboxInner) as (\n props: CheckboxProps & {\n ref?: React.ForwardedRef<React.ComponentRef<typeof AntCheckbox>>;\n }\n) => ReturnType<typeof MainCheckboxInner>;\n\n// Create the final component with Group property\nexport const Checkbox = Object.assign(MainCheckbox, {\n Group: AntCheckbox.Group,\n});\n"],"names":["MainCheckboxInner","props","ref","jsx","AntCheckbox","MainCheckbox","forwardRef","Checkbox"],"mappings":";;;;AAaA,MAAMA,IAAoB,CACxBC,GACAC,MAEQ,gBAAAC,EAAAC,GAAA,EAAY,KAAAF,GAAW,GAAGD,EAAO,CAAA,GAIrCI,IAAeC,EAAWN,CAAiB,GAOpCO,IAAW,OAAO,OAAOF,GAAc;AAAA,EAClD,OAAOD,EAAY;AACrB,CAAC;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/CodeBlock/component.tsx"],"sourcesContent":["\"use client\";\nimport { useEffect, useState } from \"react\";\nimport { Check, Copy } from \"@bioturing/assets\";\nimport { IconButton } from \"../IconButton\";\nimport { ScrollArea } from \"../ScrollArea\";\nimport { Segmented } from \"../Segmented\";\nimport { ThemeProvider } from \"../ThemeProvider/component\";\nimport { useControlledState } from \"../hooks\";\nimport { clsx, useCls, WithAntdTokens } from \"../utils\";\nimport { Highlight, themes } from \"prism-react-renderer\";\nimport type { CodeBlockProps } from \"./types\";\nimport { reactNodeToString } from \"../utils\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\nexport const CodeBlock = ({\n code,\n children,\n // initial,\n lang: defaultLang = \"tsx\",\n className,\n options,\n activeOption: controlledActiveOption,\n defaultActiveOption = 0,\n onActiveOptionChange,\n copyText = \"Copy\",\n copySuccessText = \"Copied\",\n classNames,\n maxHeight,\n ...rest\n}: CodeBlockProps) => {\n const [activeOption, setActiveOption] = useControlledState(\n controlledActiveOption,\n onActiveOptionChange,\n defaultActiveOption\n );\n\n const [currentCode, setCurrentCode] = useState(code || \"\");\n const [lang, setLang] = useState(defaultLang);\n\n const hasOptions = options && options.length > 0;\n\n useEffect(() => {\n if (hasOptions) {\n const newCode = options[activeOption]?.code || \"\";\n const newLang = options[activeOption]?.lang || defaultLang;\n setCurrentCode(newCode);\n setLang(newLang);\n }\n }, [\n code,\n activeOption,\n defaultActiveOption,\n options,\n defaultLang,\n hasOptions,\n setActiveOption,\n ]);\n\n const [tooltipContent, setTooltipContent] = useState(copyText);\n const [copySuccess, setCopySuccess] = useState(false);\n\n const handleCopy = () => {\n const codeContent = currentCode ? currentCode : reactNodeToString(children);\n try {\n navigator.clipboard.writeText(codeContent).then(() => {\n setTooltipContent(copySuccessText);\n setCopySuccess(true);\n });\n } catch (_) {\n setTooltipContent(\"Failed to copy\");\n }\n };\n\n const handleMouseLeave = () => {\n setTooltipContent(copyText);\n setCopySuccess(false);\n };\n\n const cls = useCls();\n return (\n <ThemeProvider theme={\"dark\"}>\n <WithAntdTokens\n className={clsx(cls(\"code-block\"), className, classNames?.root)}\n {...rest}\n >\n {hasOptions && (\n <div className={cls(\"code-block-header\", classNames?.header)}>\n <Segmented\n value={activeOption}\n onChange={setActiveOption}\n options={options.map((opt, index) => ({\n label: opt.label,\n value: index,\n }))}\n />\n </div>\n )}\n <div className={cls(\"code-block-copy\")}>\n <IconButton\n onClick={handleCopy}\n label={tooltipContent}\n onMouseLeave={handleMouseLeave}\n >\n {copySuccess ? <Check /> : <Copy />}\n </IconButton>\n </div>\n <div\n className={cls(\"code-block-content\", classNames?.content)}\n style={{\n maxHeight:\n maxHeight &&\n (typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight),\n }}\n >\n <ScrollArea>\n {currentCode ? (\n <Highlight\n language={lang}\n code={currentCode}\n theme={themes.vsDark}\n >\n {({\n className,\n style,\n tokens,\n getLineProps,\n getTokenProps,\n }) => (\n <pre\n style={{ ...style, backgroundColor: \"transparent\" }}\n className={className}\n >\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {/* <span>{i + 1}</span> */}\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))}\n </div>\n ))}\n </pre>\n )}\n </Highlight>\n ) : (\n children\n )}\n </ScrollArea>\n </div>\n </WithAntdTokens>\n </ThemeProvider>\n );\n};\n"],"names":["CodeBlock","code","children","defaultLang","className","options","controlledActiveOption","defaultActiveOption","onActiveOptionChange","copyText","copySuccessText","classNames","maxHeight","rest","activeOption","setActiveOption","useControlledState","currentCode","setCurrentCode","useState","lang","setLang","hasOptions","useEffect","newCode","_a","newLang","_b","tooltipContent","setTooltipContent","copySuccess","setCopySuccess","handleCopy","codeContent","reactNodeToString","handleMouseLeave","cls","useCls","jsx","ThemeProvider","jsxs","WithAntdTokens","clsx","Segmented","opt","index","IconButton","Check","Copy","ScrollArea","Highlight","themes","style","tokens","getLineProps","getTokenProps","line","i","token","key"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/ColorSelect/component.tsx"],"sourcesContent":["\"use client\";\nimport React, {\n ComponentPropsWithoutRef,\n forwardRef,\n useRef,\n useState,\n useCallback,\n useMemo,\n useEffect,\n} from \"react\";\nimport ColorPicker from \"antd/es/color-picker\";\nimport { type ColorPickerProps, type Color } from \"antd/es/color-picker\";\nimport { useCls, isValidHexColor } from \"../utils\";\nimport { useControlledState } from \"../hooks\";\nimport { Tag } from \"../Tag\";\nimport { Stack } from \"../Stack\";\nimport { toast } from \"../Toast\";\nimport mergeRefs from \"merge-refs\";\nimport { moveTypingCursorToEnd } from \"../utils/client\";\n\n// Import component-specific styles\nimport \"./style.css\";\nimport { Tooltip } from \"../Tooltip\";\n\n/**\n * Props for the ColorSelect component.\n */\nexport interface ColorSelectProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\"> {\n /** Controlled list of selected hex colors */\n value?: string[];\n /** Default list of selected hex colors for uncontrolled usage */\n defaultValue?: string[];\n /** Callback invoked when selected colors change */\n onChange?: (value: string[]) => void;\n /** Props to pass through to the Ant Design ColorPicker, excluding value/onChange/onChangeComplete */\n colorPickerProps?: Omit<\n ColorPickerProps,\n \"value\" | \"onChange\" | \"onChangeComplete\"\n >;\n /** Preset color swatches displayed in the picker */\n presetColors?: string[];\n /** Controlled open state of the ColorPicker dropdown */\n open?: boolean;\n /** Callback invoked when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Default open state for uncontrolled usage */\n defaultOpen?: boolean;\n}\n\n/**\n * ColorSelectInner - Combines an input and Ant Design ColorPicker for selecting multiple colors.\n * Supports preset color swatches and freeform hex entry, displaying selections as tags.\n * Controlled/uncontrolled APIs for `value` and `open`, emitting invalid input notifications via toast.\n * @param props - {@link ColorSelectProps}\n * @param ref - ref to the input element\n * @returns JSX.Element\n */\nconst ColorSelectInner = (\n {\n className,\n value: valueProp,\n defaultValue,\n onChange,\n colorPickerProps,\n presetColors,\n open: openProp,\n onOpenChange,\n defaultOpen,\n ...rest\n },\n ref: React.Ref<React.ComponentRef<\"input\">>\n) => {\n const cls = useCls();\n const [value, setValue] = useControlledState<string[]>(\n valueProp,\n onChange,\n defaultValue\n );\n const [activeColorIndex, setActiveColorIndex] = useState<number | null>(null);\n const [searchValue, setSearchValue] = useState(\"\");\n const [tmpValue, setTmpValue] = useState(\"\");\n const [open, setOpen] = useControlledState<boolean>(\n openProp,\n onOpenChange,\n defaultOpen\n );\n\n const [isFocus, setIsFocus] = useState(false);\n\n const popupRef = useRef<HTMLDivElement>(null);\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const isFocusedProgramatically = useRef(false);\n\n const mousePosition = useRef({\n x: 0,\n y: 0,\n });\n\n const focusInput = useCallback(() => {\n isFocusedProgramatically.current = true;\n inputRef.current?.focus();\n moveTypingCursorToEnd(inputRef.current);\n }, []);\n\n const closeAndFocus = useCallback(() => {\n setOpen(false);\n focusInput();\n }, [setOpen, focusInput]);\n\n useEffect(() => {\n if (!open) return;\n const handler = (event: MouseEvent) => {\n if (!popupRef.current?.contains(event.target as Node)) {\n if (\n inputRef.current &&\n !inputRef.current.isEqualNode(event.target as Node)\n ) {\n closeAndFocus();\n }\n }\n };\n document.addEventListener(\"click\", handler);\n\n // Return cleanup function\n return () => document.removeEventListener(\"click\", handler);\n }, [open, closeAndFocus]);\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n mousePosition.current = {\n x: e.clientX,\n y: e.clientY,\n };\n };\n document.addEventListener(\"mousemove\", handleMouseMove);\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n };\n }, []);\n\n const onEnter = useCallback(() => {\n const searchValueSplit = searchValue\n .trim()\n .split(/[;,\\s]+/)\n .filter(Boolean);\n const addedValues = searchValueSplit.map((gene) =>\n gene.trim().toUpperCase()\n );\n const inValidValues: string[] = [];\n const validAddedValues = addedValues.reduce((acc, curr) => {\n if (!isValidHexColor(curr, true)) {\n inValidValues.push(curr);\n } else {\n acc.push(curr);\n }\n return acc;\n }, [] as string[]);\n if (inValidValues.length) {\n toast(`Invalid colors: ${inValidValues.join(\", \")}`);\n }\n const newColors = new Set([...value, ...validAddedValues]);\n if (onChange) onChange([...newColors]);\n if (onOpenChange) onOpenChange(false);\n setSearchValue(\"\");\n setTmpValue(\"\");\n setOpen(false);\n requestAnimationFrame(() => {\n setOpen(true);\n });\n }, [searchValue, value, onChange, onOpenChange, setOpen]);\n\n const onInputKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") onEnter();\n if (e.key === \"Backspace\" && !searchValue) {\n if (e.ctrlKey || e.metaKey) {\n setValue([]);\n } else {\n setValue(value.slice(0, -1));\n }\n }\n },\n [onEnter, searchValue, value, setValue]\n );\n\n const handlePopupMouseDown = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Prevent input blur when clicking popup\n e.preventDefault();\n e.stopPropagation();\n },\n []\n );\n\n const handlePopupMouseDownCapture = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Prevent input blur when clicking popup\n e.preventDefault();\n },\n []\n );\n\n const renderedColorPicker = useCallback(\n ({\n open,\n child,\n value,\n onChange,\n onOpenChange,\n }: {\n open: boolean;\n child: React.ReactNode;\n value: string;\n onChange: (value: Color) => void;\n onOpenChange?: (open: boolean) => void;\n }) => (\n <ColorPicker\n value={value}\n onChange={onChange}\n open={open}\n onOpenChange={onOpenChange}\n arrow={false}\n presets={\n presetColors\n ? [{ label: \"Preset Colors\", colors: presetColors }]\n : undefined\n }\n {...colorPickerProps}\n panelRender={(panel) => (\n <div\n ref={(el) => {\n if (el) {\n popupRef.current = el;\n }\n }}\n onMouseDown={handlePopupMouseDown}\n onMouseDownCapture={handlePopupMouseDownCapture}\n >\n {panel}\n </div>\n )}\n >\n {child}\n </ColorPicker>\n ),\n [\n presetColors,\n colorPickerProps,\n handlePopupMouseDown,\n handlePopupMouseDownCapture,\n ]\n );\n\n const renderedTags = useMemo(\n () =>\n value.map((color, index) => {\n const tag = (\n <Tooltip title={color} key={`${color}-${index}`}>\n <Tag\n className={cls(\"color-select-tag\")}\n closable\n onClose={() => setValue(value.filter((v) => v !== color))}\n icon={\n <span\n className={cls(\"color-select-swatch\")}\n style={{ backgroundColor: color }}\n />\n }\n onClick={() =>\n activeColorIndex === index\n ? setActiveColorIndex(null)\n : setActiveColorIndex(index)\n }\n />\n </Tooltip>\n );\n return renderedColorPicker({\n child: tag,\n open: activeColorIndex !== null && activeColorIndex === index,\n value: value[index],\n onChange: (color) => {\n setValue(\n value.map((v, i) => (i === index ? color.toHexString() : v))\n );\n },\n onOpenChange: (open) => {\n setActiveColorIndex(open ? index : null);\n },\n });\n }),\n [\n value,\n cls,\n setValue,\n activeColorIndex,\n setActiveColorIndex,\n renderedColorPicker,\n ]\n );\n\n const renderedColorPickerInput = useMemo(() => {\n return renderedColorPicker({\n child: (\n <input\n placeholder=\"Select or enter a color list\"\n className={cls(\"color-select-input\")}\n value={searchValue}\n type=\"text\"\n ref={mergeRefs(ref, inputRef)}\n onChange={(e) => {\n const currValue = e.target.value;\n setSearchValue(currValue);\n if (isValidHexColor(currValue, true)) setTmpValue(currValue);\n if (\n currValue.length > 7 ||\n (currValue.length == 7 && !currValue.startsWith(\"#\"))\n ) {\n // closeAndFocus();\n setOpen(false);\n } else {\n setOpen(true);\n }\n }}\n onKeyDown={onInputKeyDown}\n onFocus={(e) => {\n // if focus is triggered by programatically, do not open the popup\n // if (isFocusedProgramatically.current) {\n // isFocusedProgramatically.current = false;\n // return;\n // }\n setIsFocus(true);\n setOpen(true);\n }}\n onBlur={(e) => {\n // if (popupRef.current?.contains(e.relatedTarget)) return;\n // Check if click is inside popup using cursor position\n if (popupRef.current) {\n const rect = popupRef.current.getBoundingClientRect();\n const { x, y } = mousePosition.current;\n const isClickInsidePopup =\n x >= rect.left &&\n x <= rect.right &&\n y >= rect.top &&\n y <= rect.bottom;\n if (isClickInsidePopup) {\n e.preventDefault();\n e.stopPropagation();\n if (isValidHexColor(tmpValue)) {\n focusInput();\n }\n return;\n }\n }\n // Check if the new focus target is inside the popup\n setIsFocus(false);\n setOpen(false);\n }}\n />\n ),\n value: tmpValue,\n onChange: (color) => {\n // setValue([...value, color]);\n setTmpValue(color.toHexString());\n setSearchValue(color.toHexString());\n focusInput();\n },\n open,\n });\n }, [\n cls,\n tmpValue,\n onInputKeyDown,\n ref,\n renderedColorPicker,\n searchValue,\n setOpen,\n open,\n focusInput,\n mousePosition,\n ]);\n return (\n <Stack\n wrap\n gap={4}\n className={cls(\"color-select\")}\n data-focus={isFocus || undefined}\n {...rest}\n >\n {renderedTags}\n {renderedColorPickerInput}\n </Stack>\n );\n};\n\n// Use forwardRef with type assertion\nconst MainColorSelect = forwardRef(ColorSelectInner);\n\nexport const ColorSelect = MainColorSelect;\n"],"names":["ColorSelectInner","className","valueProp","defaultValue","onChange","colorPickerProps","presetColors","openProp","onOpenChange","defaultOpen","rest","ref","cls","useCls","value","setValue","useControlledState","activeColorIndex","setActiveColorIndex","useState","searchValue","setSearchValue","tmpValue","setTmpValue","open","setOpen","isFocus","setIsFocus","popupRef","useRef","inputRef","isFocusedProgramatically","mousePosition","focusInput","useCallback","_a","moveTypingCursorToEnd","closeAndFocus","useEffect","handler","event","handleMouseMove","e","onEnter","addedValues","gene","inValidValues","validAddedValues","acc","curr","isValidHexColor","toast","newColors","onInputKeyDown","handlePopupMouseDown","handlePopupMouseDownCapture","renderedColorPicker","child","jsx","ColorPicker","panel","el","renderedTags","useMemo","color","index","tag","Tooltip","Tag","v","i","renderedColorPickerInput","mergeRefs","currValue","rect","x","y","jsxs","Stack","MainColorSelect","forwardRef","ColorSelect"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/DSRoot/component.tsx"],"sourcesContent":["\"use client\";\nimport {\n ThemeProvider,\n type ThemeProviderProps,\n} from \"../ThemeProvider/component\";\nimport { Toast } from \"../Toast\";\nimport { Modal } from \"../Modal\";\nimport App from \"antd/es/app/App\";\nimport { DSRootContextProvider } from \"./context\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\nexport interface DSRootProps extends ThemeProviderProps {\n /**\n * Classname passed to App component\n */\n className?: string;\n\n /**\n * Element to which the theme classes are appended\n * @default \"html\"\n */\n appendClassesTo?: string | HTMLElement;\n}\n\nexport const DSRoot = ({\n className,\n appendClassesTo = \"html\",\n children,\n theme,\n ...props\n}: DSRootProps) => {\n return (\n <DSRootContextProvider value={{ theme: theme }}>\n <ThemeProvider theme={theme} {...props} appendClassesTo={appendClassesTo}>\n <App className={className}>\n <Toast.Provider>\n <Modal.Provider>\n <Toast.List />\n {children}\n </Modal.Provider>\n </Toast.Provider>\n </App>\n </ThemeProvider>\n </DSRootContextProvider>\n );\n};\n"],"names":["DSRoot","className","appendClassesTo","children","theme","props","jsx","DSRootContextProvider","ThemeProvider","App","Toast","jsxs","Modal"],"mappings":";;;;;;;;AA0BO,MAAMA,IAAS,CAAC;AAAA,EACrB,WAAAC;AAAA,EACA,iBAAAC,IAAkB;AAAA,EAClB,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,GAAGC;AACL,MAEI,gBAAAC,EAACC,KAAsB,OAAO,EAAE,OAAAH,EAC9B,GAAA,UAAA,gBAAAE,EAACE,GAAc,EAAA,OAAAJ,GAAe,GAAGC,GAAO,iBAAAH,GACtC,UAAC,gBAAAI,EAAAG,GAAA,EAAI,WAAAR,GACH,UAAC,gBAAAK,EAAAI,EAAM,UAAN,EACC,UAAA,gBAAAC,EAACC,EAAM,UAAN,EACC,UAAA;AAAA,EAAC,gBAAAN,EAAAI,EAAM,MAAN,EAAW;AAAA,EACXP;AACH,EAAA,CAAA,EACF,CAAA,GACF,EAAA,CACF,EACF,CAAA;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sources":["../../../src/components/DSRoot/context.ts"],"sourcesContent":["\"use client\";\nimport React from \"react\";\n\nconst DSRootContext = React.createContext<{\n theme: \"light\" | \"dark\";\n}>({\n theme: \"light\",\n});\n\nexport const DSRootContextProvider = DSRootContext.Provider;\n\nexport const useDS = () => React.useContext(DSRootContext);\n"],"names":["DSRootContext","React","DSRootContextProvider","useDS"],"mappings":";;AAGA,MAAMA,IAAgBC,EAAM,cAEzB;AAAA,EACD,OAAO;AACT,CAAC,GAEYC,IAAwBF,EAAc,UAEtCG,IAAQ,MAAMF,EAAM,WAAWD,CAAa;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sources":["../../../src/components/DragDrop/context.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport { type DragDropContextType, type Data } from \"./types\";\n\n/**\n * Drag context for sharing state between components\n */\nexport const DragDropContext = createContext<DragDropContextType>({\n active: null,\n setActive: () => {},\n onDragStart: undefined,\n onDragEnd: undefined,\n onDrop: undefined,\n isDragging: false,\n setIsDragging: () => {},\n});\n\n/**\n * Hook to access the Drag context\n */\nexport const useDragDropContext = <T extends Data = Data>() =>\n useContext(DragDropContext) as DragDropContextType<T>;\n"],"names":["DragDropContext","createContext","useDragDropContext","useContext"],"mappings":";;AAQO,MAAMA,IAAkBC,EAAmC;AAAA,EAChE,QAAQ;AAAA,EACR,WAAW,MAAM;AAAA,EAAC;AAAA,EAClB,aAAa;AAAA,EACb,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,eAAe,MAAM;AAAA,EAAA;AACvB,CAAC,GAKYC,IAAqB,MAChCC,EAAWH,CAAe;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"draggable.js","sources":["../../../src/components/DragDrop/draggable.tsx"],"sourcesContent":["\"use client\";\n\nimport { useDraggable } from \"./hooks\";\nimport { clsx, useCls } from \"../utils\";\nimport { useRender } from \"@base-ui-components/react/use-render\";\nimport type { Data, DragDropDraggableProps } from \"./types\";\nimport { DotsSixVerticalIcon } from \"@bioturing/assets\";\nimport { cloneElement, isValidElement, HTMLProps } from \"react\";\n\n/**\n * A draggable item component that can be used within the Drag context\n */\nexport const Draggable = <T extends Data = Data>({\n id,\n children,\n className,\n disabled = false,\n data,\n style,\n render,\n onDragEnd,\n onDragStart,\n indicator = true,\n onlyIndicatorDraggable = false,\n ...rest\n}: DragDropDraggableProps<T>) => {\n const cls = useCls();\n\n const { attributes, listeners, isDragging, setNodeRef } = useDraggable({\n id,\n data,\n disabled,\n onDragEnd,\n onDragStart,\n });\n\n const indicatorIcon =\n indicator === true ? (\n <DotsSixVerticalIcon className={cls(\"draggable-indicator\")} />\n ) : (\n indicator\n );\n const indicatorElement = isValidElement(indicatorIcon)\n ? onlyIndicatorDraggable\n ? cloneElement(indicatorIcon, {\n ...attributes,\n ...listeners,\n key: \"indicator\" + id,\n })\n : indicatorIcon\n : null;\n\n const combinedChildren = [\n indicatorElement,\n ...(Array.isArray(children) ? children : [children]),\n ];\n\n const renderedElement = useRender({\n render: render ? (\n render\n ) : (\n <div className={clsx(cls(\"draggable\"), className)} />\n ),\n ref: setNodeRef,\n props: {\n children: combinedChildren,\n className,\n style: {\n ...style,\n touchAction: \"none\", // Prevents scrolling on touch devices while dragging\n cursor: disabled ? \"default\" : \"grab\",\n opacity: isDragging ? 0.5 : 1, // Visual feedback when dragging\n },\n ...rest,\n ...attributes,\n ...(!onlyIndicatorDraggable ? listeners : {}),\n },\n state: {\n isDragging,\n id,\n data,\n },\n });\n\n return renderedElement;\n};\n"],"names":["Draggable","id","children","className","disabled","data","style","render","onDragEnd","onDragStart","indicator","onlyIndicatorDraggable","rest","cls","useCls","attributes","listeners","isDragging","setNodeRef","useDraggable","indicatorIcon","jsx","DotsSixVerticalIcon","combinedChildren","isValidElement","cloneElement","useRender","clsx"],"mappings":";;;;;;;;AAYO,MAAMA,IAAY,CAAwB;AAAA,EAC/C,IAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,wBAAAC,IAAyB;AAAA,EACzB,GAAGC;AACL,MAAiC;AAC/B,QAAMC,IAAMC,EAAO,GAEb,EAAE,YAAAC,GAAY,WAAAC,GAAW,YAAAC,GAAY,YAAAC,EAAA,IAAeC,EAAa;AAAA,IACrE,IAAAlB;AAAA,IACA,MAAAI;AAAA,IACA,UAAAD;AAAA,IACA,WAAAI;AAAA,IACA,aAAAC;AAAA,EAAA,CACD,GAEKW,IACJV,MAAc,KACZ,gBAAAW,EAACC,KAAoB,WAAWT,EAAI,qBAAqB,EAAA,CAAG,IAE5DH,GAYEa,IAAmB;AAAA,IAVAC,EAAeJ,CAAa,IACjDT,IACEc,EAAaL,GAAe;AAAA,MAC1B,GAAGL;AAAA,MACH,GAAGC;AAAA,MACH,KAAK,cAAcf;AAAA,IAAA,CACpB,IACDmB,IACF;AAAA,IAIF,GAAI,MAAM,QAAQlB,CAAQ,IAAIA,IAAW,CAACA,CAAQ;AAAA,EACpD;AA6BO,SA3BiBwB,EAAU;AAAA,IAChC,QAAQnB,KAGL,gBAAAc,EAAA,OAAA,EAAI,WAAWM,EAAKd,EAAI,WAAW,GAAGV,CAAS,EAAG,CAAA;AAAA,IAErD,KAAKe;AAAA,IACL,OAAO;AAAA,MACL,UAAUK;AAAA,MACV,WAAApB;AAAA,MACA,OAAO;AAAA,QACL,GAAGG;AAAA,QACH,aAAa;AAAA;AAAA,QACb,QAAQF,IAAW,YAAY;AAAA,QAC/B,SAASa,IAAa,MAAM;AAAA;AAAA,MAC9B;AAAA,MACA,GAAGL;AAAA,MACH,GAAGG;AAAA,MACH,GAAKJ,IAAqC,CAAA,IAAZK;AAAA,IAChC;AAAA,IACA,OAAO;AAAA,MACL,YAAAC;AAAA,MACA,IAAAhB;AAAA,MACA,MAAAI;AAAA,IAAA;AAAA,EACF,CACD;AAGH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"droppable.js","sources":["../../../src/components/DragDrop/droppable.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useCallback, useMemo, memo } from \"react\";\nimport { useDroppable } from \"./hooks\";\nimport { clsx, useCls } from \"../utils\";\nimport { ArrowsOutCardinalIcon } from \"@bioturing/assets\";\nimport { useRender } from \"@base-ui-components/react/use-render\";\nimport type { Data, DragDropDroppableProps, DraggableInfo } from \"./types\";\nimport { Value } from \"./value\";\nimport { uniqWith, isEqual } from \"es-toolkit\";\n\n/**\n * A drop zone component that can receive draggable items\n * Styled similarly to the Upload component's droppable area\n */\nconst DroppableInner = <T extends Data = Data, M extends boolean = false>({\n id,\n children,\n className,\n disabled = false,\n placeholder = \"Drop items here\",\n icon = <ArrowsOutCardinalIcon size={24} />,\n render,\n onDrop,\n validate,\n multiple,\n value,\n onChange,\n renderValueLabel,\n renderValueIcon,\n ...rest\n}: DragDropDroppableProps<T, M>) => {\n const cls = useCls();\n const handleOnDrop = useCallback(\n (item: DraggableInfo<T>) => {\n if (onDrop) {\n onDrop(item);\n }\n if (onChange) {\n if (multiple) {\n (onChange as (value: T[]) => void)(\n uniqWith([...(value as T[]), item.data], isEqual)\n );\n } else {\n (onChange as (value: T) => void)(item.data);\n }\n }\n },\n [onDrop, onChange, multiple, value]\n );\n const { isOver, setNodeRef, attributes, listeners } = useDroppable({\n id,\n disabled,\n onDrop: handleOnDrop,\n validate,\n });\n\n // memoize value props to avoid re-renders\n const valueProps = useMemo(\n () => ({ value, onChange, multiple, renderValueLabel, renderValueIcon }),\n [value, onChange, multiple, renderValueLabel, renderValueIcon]\n );\n\n // memoize dropzone content\n const dropzoneContent = useMemo(\n () =>\n children || (\n <div className={cls(\"drop-zone-content\")}>\n <div className={cls(\"drop-zone-icon\")}>{icon}</div>\n <div className={cls(\"drop-zone-text\")}>{placeholder}</div>\n </div>\n ),\n [children, cls, icon, placeholder]\n );\n\n // memoize default render tree\n const defaultRender = useCallback<\n (props: Record<string, unknown>) => React.ReactElement\n >(\n ({ className, ...props }) =>\n (!multiple && value) || (multiple && (value as T[]).length) ? (\n <Value<T, M>\n {...valueProps}\n className={className as string}\n {...props}\n />\n ) : (\n <div className={clsx(cls(\"drop-zone\"), className as string)} {...props}>\n {dropzoneContent}\n </div>\n ),\n [value, multiple, valueProps, dropzoneContent, cls]\n );\n\n const renderedElement = useRender({\n render: render ?? defaultRender,\n ref: setNodeRef,\n props: {\n className: className,\n ...attributes,\n ...listeners,\n ...rest,\n },\n state: {\n isOver,\n value,\n onChange: onChange as (value: M extends true ? T[] : T) => void,\n id,\n },\n });\n\n return renderedElement;\n};\n\nexport const Droppable = memo(DroppableInner) as typeof DroppableInner;\n"],"names":["DroppableInner","id","children","className","disabled","placeholder","icon","jsx","ArrowsOutCardinalIcon","render","onDrop","validate","multiple","value","onChange","renderValueLabel","renderValueIcon","rest","cls","useCls","handleOnDrop","useCallback","item","uniqWith","isEqual","isOver","setNodeRef","attributes","listeners","useDroppable","valueProps","useMemo","dropzoneContent","jsxs","defaultRender","props","Value","clsx","useRender","Droppable","memo"],"mappings":";;;;;;;;;;AAeA,MAAMA,IAAiB,CAAmD;AAAA,EACxE,IAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,aAAAC,IAAc;AAAA,EACd,MAAAC,IAAO,gBAAAC,EAACC,GAAsB,EAAA,MAAM,GAAI,CAAA;AAAA,EACxC,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,GAAGC;AACL,MAAoC;AAClC,QAAMC,IAAMC,EAAO,GACbC,IAAeC;AAAA,IACnB,CAACC,MAA2B;AAC1B,MAAIZ,KACFA,EAAOY,CAAI,GAETR,KAECA;AAAA,QADCF,IAEAW,EAAS,CAAC,GAAIV,GAAeS,EAAK,IAAI,GAAGE,CAAO,IAGjBF,EAAK;AAAA,MAFtC;AAAA,IAKN;AAAA,IACA,CAACZ,GAAQI,GAAUF,GAAUC,CAAK;AAAA,EACpC,GACM,EAAE,QAAAY,GAAQ,YAAAC,GAAY,YAAAC,GAAY,WAAAC,EAAA,IAAcC,EAAa;AAAA,IACjE,IAAA5B;AAAA,IACA,UAAAG;AAAA,IACA,QAAQgB;AAAA,IACR,UAAAT;AAAA,EAAA,CACD,GAGKmB,IAAaC;AAAA,IACjB,OAAO,EAAE,OAAAlB,GAAO,UAAAC,GAAU,UAAAF,GAAU,kBAAAG,GAAkB,iBAAAC,EAAgB;AAAA,IACtE,CAACH,GAAOC,GAAUF,GAAUG,GAAkBC,CAAe;AAAA,EAC/D,GAGMgB,IAAkBD;AAAA,IACtB,MACE7B,KACE,gBAAA+B,EAAC,SAAI,WAAWf,EAAI,mBAAmB,GACrC,UAAA;AAAA,MAAA,gBAAAX,EAAC,OAAI,EAAA,WAAWW,EAAI,gBAAgB,GAAI,UAAKZ,GAAA;AAAA,wBAC5C,OAAI,EAAA,WAAWY,EAAI,gBAAgB,GAAI,UAAYb,EAAA,CAAA;AAAA,IAAA,GACtD;AAAA,IAEJ,CAACH,GAAUgB,GAAKZ,GAAMD,CAAW;AAAA,EACnC,GAGM6B,IAAgBb;AAAA,IAGpB,CAAC,EAAE,WAAAlB,GAAW,GAAGgC,EACd,MAAA,CAACvB,KAAYC,KAAWD,KAAaC,EAAc,SAClD,gBAAAN;AAAA,MAAC6B;AAAA,MAAA;AAAA,QACE,GAAGN;AAAA,QACJ,WAAW3B;AAAAA,QACV,GAAGgC;AAAA,MAAA;AAAA,IAGN,IAAA,gBAAA5B,EAAC,OAAI,EAAA,WAAW8B,EAAKnB,EAAI,WAAW,GAAGf,CAAmB,GAAI,GAAGgC,GAC9D,UACHH,EAAA,CAAA;AAAA,IAEJ,CAACnB,GAAOD,GAAUkB,GAAYE,GAAiBd,CAAG;AAAA,EACpD;AAmBO,SAjBiBoB,EAAU;AAAA,IAChC,QAAQ7B,KAAUyB;AAAA,IAClB,KAAKR;AAAA,IACL,OAAO;AAAA,MACL,WAAAvB;AAAA,MACA,GAAGwB;AAAA,MACH,GAAGC;AAAA,MACH,GAAGX;AAAA,IACL;AAAA,IACA,OAAO;AAAA,MACL,QAAAQ;AAAA,MACA,OAAAZ;AAAA,MACA,UAAAC;AAAA,MACA,IAAAb;AAAA,IAAA;AAAA,EACF,CACD;AAGH,GAEasC,IAAYC,EAAKxC,CAAc;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sources":["../../../src/components/DragDrop/hooks.ts"],"sourcesContent":["import { useCallback, useRef, useState, useEffect } from \"react\";\n\nimport {\n DraggableInfo,\n type Data,\n type UseDraggableProps,\n type UseDroppableProps,\n} from \"./types\";\nimport { useDragDropContext } from \"./context\";\n\n/**\n * Hook for making an element draggable using HTML5 drag and drop API\n */\nexport function useDraggable<T extends Data = Data>({\n id,\n data,\n disabled = false,\n onDragStart: onDragStartProp,\n onDragEnd: onDragEndProp,\n}: UseDraggableProps<T>) {\n const [isDragging, setIsDragging] = useState(false);\n const nodeRef = useRef<HTMLElement | null>(null);\n const thumbnailNodeRef = useRef<HTMLElement | null>(null);\n\n const setNodeRef = useCallback((node: HTMLElement | null) => {\n nodeRef.current = node;\n }, []);\n\n const {\n setActive,\n onDragStart: onDragStartContext,\n onDragEnd: onDragEndContext,\n setIsDragging: setIsDraggingContext,\n } = useDragDropContext();\n\n const onDragStart = onDragStartProp || onDragStartContext;\n const onDragEnd = onDragEndProp || onDragEndContext;\n\n const handleDragStart = useCallback(\n (e: React.DragEvent) => {\n if (disabled) return;\n\n setIsDragging(true);\n setIsDraggingContext(true);\n\n // Update the active item in context\n const dragItem = { data, id };\n setActive(dragItem);\n\n // Call the onDragStart callback if available\n if (onDragStart) {\n onDragStart({ active: dragItem });\n }\n\n // Set data transfer\n let dataPayload: string;\n try {\n dataPayload = JSON.stringify({ id, data });\n } catch (error) {\n console.error(\"Error serializing data:\", error);\n return;\n }\n e.dataTransfer?.setData(\"application/json\", dataPayload);\n\n // For Firefox compatibility\n e.dataTransfer?.setData(\"text/plain\", dataPayload);\n\n // Set drag image (optional)\n const node = nodeRef.current;\n if (node) {\n const nodeRect = node.getBoundingClientRect();\n\n thumbnailNodeRef.current = node.cloneNode(true) as HTMLElement;\n thumbnailNodeRef.current.style.maxWidth = \"400px\";\n thumbnailNodeRef.current.style.position = \"absolute\";\n thumbnailNodeRef.current.style.pointerEvents = \"none\";\n thumbnailNodeRef.current.style.top = \"-99px\";\n thumbnailNodeRef.current.style.left = \"-99px\";\n thumbnailNodeRef.current.style.zIndex = \"-1\";\n\n node.parentElement?.appendChild(thumbnailNodeRef.current);\n\n // Use the node itself as the drag image\n e.dataTransfer?.setDragImage(\n thumbnailNodeRef.current,\n e.clientX - nodeRect.left,\n e.clientY - nodeRect.top\n );\n }\n },\n [id, data, disabled, onDragStart, setActive, setIsDraggingContext]\n );\n\n const handleDragEnd = useCallback(\n (_e: React.DragEvent) => {\n if (disabled) return;\n\n setIsDragging(false);\n setIsDraggingContext(false);\n thumbnailNodeRef.current?.remove();\n\n if (onDragEnd) {\n onDragEnd({ active: { data, id }, over: null });\n }\n },\n [id, data, disabled, onDragEnd, setIsDraggingContext]\n );\n\n return {\n isDragging,\n setNodeRef,\n attributes: {\n draggable: !disabled,\n role: \"button\",\n \"aria-pressed\": isDragging,\n tabIndex: disabled ? -1 : 0,\n \"data-dragging\": isDragging ? true : undefined,\n \"data-disabled\": disabled ? true : undefined,\n },\n listeners: {\n onDragStart: handleDragStart,\n onDragEnd: handleDragEnd,\n },\n };\n}\n\n/**\n * Hook for making an element a drop target using HTML5 drag and drop API\n */\nexport function useDroppable<T extends Data = Data>({\n id,\n disabled = false,\n validate = () => true,\n onDrop: onDropProp,\n}: UseDroppableProps<T>) {\n const [isOver, setIsOver] = useState(false);\n const [valid, setValid] = useState(undefined);\n const nodeRef = useRef<HTMLElement | null>(null);\n\n const setNodeRef = useCallback((node: HTMLElement | null) => {\n nodeRef.current = node;\n }, []);\n\n const {\n active,\n setActive,\n onDragEnd,\n onDrop: onDropContext,\n isDragging,\n } = useDragDropContext<T>();\n\n const onDrop = onDropProp || onDropContext;\n\n useEffect(() => {\n if (active && validate) {\n setValid(validate(active));\n }\n }, [active, validate]);\n\n const handleDragEnter = useCallback(\n (e: React.DragEvent) => {\n if (disabled) return;\n e.preventDefault();\n setIsOver(true);\n },\n [disabled]\n );\n\n const handleDragOver = useCallback(\n (e: React.DragEvent) => {\n if (disabled) return;\n e.preventDefault(); // Necessary to allow dropping\n e.dataTransfer.dropEffect = \"move\";\n },\n [disabled]\n );\n\n const handleDragLeave = useCallback(\n (e: React.DragEvent) => {\n if (disabled) return;\n // Only set isOver to false if we're leaving this element (not a child)\n if (e.currentTarget === e.target) {\n setIsOver(false);\n }\n },\n [disabled]\n );\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n if (disabled) return;\n e.preventDefault();\n if (!valid) return;\n\n try {\n // Try to get data from dataTransfer\n const jsonData = e.dataTransfer.getData(\"application/json\");\n let draggedItem: DraggableInfo<T>;\n\n if (jsonData) {\n draggedItem = JSON.parse(jsonData);\n } else if (active) {\n // Fall back to active item from context if dataTransfer is not available\n draggedItem = active;\n } else {\n return; // No item to drop\n }\n\n // Call the component's onDrop handler if provided\n if (onDrop) {\n onDrop(draggedItem);\n }\n\n // Call the onDragEnd callback from context if available\n if (onDragEnd && active) {\n onDragEnd({\n active: draggedItem,\n over: { id },\n });\n }\n\n setIsOver(false);\n\n // Reset the active item in context\n setActive(null);\n } catch (error) {\n console.error(\"Error processing drop:\", error);\n }\n },\n [disabled, id, active, onDrop, onDragEnd, setActive, valid]\n );\n\n return {\n isOver,\n setNodeRef,\n attributes: {\n \"data-droppable\": true,\n \"data-over\": isOver ? true : undefined,\n \"data-disabled\": disabled ? true : undefined,\n \"data-dragging\": isDragging ? true : undefined,\n \"data-valid\": valid ? true : undefined,\n },\n valid,\n listeners: {\n onDragEnter: handleDragEnter,\n onDragOver: handleDragOver,\n onDragLeave: handleDragLeave,\n onDrop: handleDrop,\n },\n };\n}\n"],"names":["useDraggable","id","data","disabled","onDragStartProp","onDragEndProp","isDragging","setIsDragging","useState","nodeRef","useRef","thumbnailNodeRef","setNodeRef","useCallback","node","setActive","onDragStartContext","onDragEndContext","setIsDraggingContext","useDragDropContext","onDragStart","onDragEnd","handleDragStart","e","dragItem","dataPayload","error","_a","_b","nodeRect","_c","_d","handleDragEnd","_e","useDroppable","validate","onDropProp","isOver","setIsOver","valid","setValid","active","onDropContext","onDrop","useEffect","handleDragEnter","handleDragOver","handleDragLeave","handleDrop","jsonData","draggedItem"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/DragDrop/index.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type DragEndEvent,\n type DragStartEvent,\n type Data as DragData,\n type UniqueIdentifier,\n type DragDropDraggableProps,\n type DragDropDroppableProps,\n type DragDropProps,\n} from \"./types\";\nimport { useState } from \"react\";\nimport { clsx, useCls } from \"../utils\";\nimport { Draggable } from \"./draggable\";\nimport { Droppable } from \"./droppable\";\nimport { Value } from \"./value\";\nimport { DragDropContext } from \"./context\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\n/**\n * The root component for the drag and drop functionality\n */\nexport function DragDropRoot<T extends DragData = DragData>({\n children,\n // These callbacks are passed to child components via context\n onDragEnd: _onDragEnd,\n onDragStart: _onDragStart,\n onDrop: _onDrop,\n className,\n}: DragDropProps<T>) {\n const cls = useCls();\n const [active, setActive] = useState<{\n data: T;\n id: UniqueIdentifier;\n } | null>(null);\n\n const [isDragging, setIsDragging] = useState(false);\n\n // These functions are now handled directly in the Item and DropZone components\n\n // Create context value for child components\n const contextValue = {\n active,\n setActive: (item: { data: unknown; id: UniqueIdentifier } | null) => {\n setActive(item as { data: T; id: UniqueIdentifier } | null);\n },\n isDragging,\n setIsDragging,\n onDragStart: _onDragStart,\n onDragEnd: _onDragEnd,\n onDrop: _onDrop,\n };\n\n return (\n <DragDropContext.Provider value={contextValue}>\n <div className={clsx(cls(\"drag-container\"), className)}>{children}</div>\n </DragDropContext.Provider>\n );\n}\n\n/**\n * Drag component with subcomponents\n */\nexport const DragDrop = Object.assign(DragDropRoot, {\n /**\n * Item that can be dragged\n */\n Draggable,\n\n /**\n * Zone where items can be dropped\n */\n Droppable,\n\n /**\n * Value component to display the value of the dragged item\n */\n Value,\n});\n\nexport type {\n DragEndEvent,\n DragStartEvent,\n DragDropDraggableProps,\n DragDropDroppableProps,\n DragData,\n DragDropProps,\n};\n"],"names":["DragDropRoot","children","_onDragEnd","_onDragStart","_onDrop","className","cls","useCls","active","setActive","useState","isDragging","setIsDragging","contextValue","item","DragDropContext","jsx","clsx","DragDrop","Draggable","Droppable","Value"],"mappings":";;;;;;;;;;AAwBO,SAASA,EAA4C;AAAA,EAC1D,UAAAC;AAAA;AAAA,EAEA,WAAWC;AAAA,EACX,aAAaC;AAAA,EACb,QAAQC;AAAA,EACR,WAAAC;AACF,GAAqB;AACnB,QAAMC,IAAMC,EAAO,GACb,CAACC,GAAQC,CAAS,IAAIC,EAGlB,IAAI,GAER,CAACC,GAAYC,CAAa,IAAIF,EAAS,EAAK,GAK5CG,IAAe;AAAA,IACnB,QAAAL;AAAA,IACA,WAAW,CAACM,MAAyD;AACnE,MAAAL,EAAUK,CAAgD;AAAA,IAC5D;AAAA,IACA,YAAAH;AAAA,IACA,eAAAC;AAAA,IACA,aAAaT;AAAA,IACb,WAAWD;AAAA,IACX,QAAQE;AAAA,EACV;AAEA,2BACGW,EAAgB,UAAhB,EAAyB,OAAOF,GAC/B,UAAC,gBAAAG,EAAA,OAAA,EAAI,WAAWC,EAAKX,EAAI,gBAAgB,GAAGD,CAAS,GAAI,UAAAJ,EAAS,CAAA,GACpE;AAEJ;AAKa,MAAAiB,IAAW,OAAO,OAAOlB,GAAc;AAAA;AAAA;AAAA;AAAA,EAIlD,WAAAmB;AAAA;AAAA;AAAA;AAAA,EAKA,WAAAC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAAC;AACF,CAAC;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"value.js","sources":["../../../src/components/DragDrop/value.tsx"],"sourcesContent":["\"use client\";\nimport { FileIcon, XIcon } from \"@bioturing/assets\";\nimport { isEqual } from \"es-toolkit\";\nimport React, {\n cloneElement,\n forwardRef,\n memo,\n useCallback,\n type ComponentPropsWithoutRef,\n type ForwardedRef,\n} from \"react\";\nimport { IconButton } from \"../IconButton\";\nimport { Stack } from \"../Stack\";\nimport { Tag } from \"../Tag\";\nimport { Truncate } from \"../Truncate\";\nimport { useCls } from \"../utils\";\nimport { DragDropValueProps, type Data } from \"./types\";\n\nfunction ValueInner<T extends Data, M extends boolean>(\n {\n value,\n onChange,\n multiple,\n renderValueLabel,\n renderValueIcon,\n className,\n style,\n ...rest\n }: DragDropValueProps<T, M> & ComponentPropsWithoutRef<\"div\">,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const cls = useCls();\n\n const renderLabel = useCallback(\n (value: T) => {\n const label = renderValueLabel(value);\n return typeof label === \"string\" ? (\n <Truncate position=\"middle\" className={cls(\"dropzone-value-label\")}>\n {label}\n </Truncate>\n ) : (\n <span className={cls(\"dropzone-value-label\")}>{label}</span>\n );\n },\n [cls, renderValueLabel]\n );\n\n const renderedValueIcon = useCallback(\n (value: T) => {\n return cloneElement(renderValueIcon(value) || <FileIcon />, {\n className: cls(\"dropzone-value-icon\"),\n });\n },\n [cls, renderValueIcon]\n );\n\n const handleResetMultiple = useCallback(\n (singleValue: T) => {\n (onChange as (value: T[]) => void)(\n (value as T[]).filter((v) => !isEqual(v, singleValue))\n );\n },\n [onChange, value]\n );\n\n const renderMultiple = useCallback(() => {\n return (\n <>\n {((value as T[]) || []).map((singleValue, index) => {\n const label = renderLabel(singleValue);\n return (\n <Tag\n key={index}\n icon={renderedValueIcon(singleValue)}\n size=\"large\"\n closable\n onClose={() => handleResetMultiple(singleValue)}\n >\n {label}\n </Tag>\n );\n })}\n </>\n );\n }, [renderLabel, value, renderedValueIcon, handleResetMultiple]);\n\n const handleResetSingle = useCallback(() => {\n onChange?.(null);\n }, [onChange]);\n\n const renderSingle = useCallback(() => {\n const label = renderLabel(value as T);\n return (\n <>\n {renderedValueIcon(value as T)}\n {label}\n <IconButton size=\"small\" onClick={handleResetSingle}>\n <XIcon />\n </IconButton>\n </>\n );\n }, [value, renderLabel, renderedValueIcon, handleResetSingle]);\n\n return (\n <Stack\n ref={ref}\n gap={multiple ? 4 : 8}\n align=\"center\"\n wrap={multiple}\n className={cls(\n \"dropzone-value\",\n multiple && \"dropzone-value-multiple\",\n className\n )}\n style={style}\n {...rest}\n >\n {multiple ? renderMultiple() : renderSingle()}\n </Stack>\n );\n}\n\nexport const Value = memo(forwardRef(ValueInner)) as <\n T extends Data,\n M extends boolean\n>(\n props: DragDropValueProps<T, M> & { ref?: ForwardedRef<HTMLDivElement> }\n) => ReturnType<typeof ValueInner>;\n"],"names":["ValueInner","value","onChange","multiple","renderValueLabel","renderValueIcon","className","style","rest","ref","cls","useCls","renderLabel","useCallback","label","Truncate","jsx","renderedValueIcon","cloneElement","FileIcon","handleResetMultiple","singleValue","v","isEqual","renderMultiple","index","Tag","handleResetSingle","renderSingle","jsxs","Fragment","IconButton","XIcon","Stack","Value","memo","forwardRef"],"mappings":";;;;;;;;;;AAkBA,SAASA,EACP;AAAA,EACE,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AACA,QAAMC,IAAMC,EAAO,GAEbC,IAAcC;AAAA,IAClB,CAACZ,MAAa;AACN,YAAAa,IAAQV,EAAiBH,CAAK;AACpC,aAAO,OAAOa,KAAU,6BACrBC,GAAS,EAAA,UAAS,UAAS,WAAWL,EAAI,sBAAsB,GAC9D,UAAAI,GACH,IAEC,gBAAAE,EAAA,QAAA,EAAK,WAAWN,EAAI,sBAAsB,GAAI,UAAMI,GAAA;AAAA,IAEzD;AAAA,IACA,CAACJ,GAAKN,CAAgB;AAAA,EACxB,GAEMa,IAAoBJ;AAAA,IACxB,CAACZ,MACQiB,EAAab,EAAgBJ,CAAK,KAAK,gBAAAe,EAACG,KAAS,GAAI;AAAA,MAC1D,WAAWT,EAAI,qBAAqB;AAAA,IAAA,CACrC;AAAA,IAEH,CAACA,GAAKL,CAAe;AAAA,EACvB,GAEMe,IAAsBP;AAAA,IAC1B,CAACQ,MAAmB;AACjB,MAAAnB;AAAA,QACED,EAAc,OAAO,CAACqB,MAAM,CAACC,EAAQD,GAAGD,CAAW,CAAC;AAAA,MACvD;AAAA,IACF;AAAA,IACA,CAACnB,GAAUD,CAAK;AAAA,EAClB,GAEMuB,IAAiBX,EAAY,6BAG1B,WAAiBZ,KAAA,CAAA,GAAI,IAAI,CAACoB,GAAaI,MAAU;AAC5C,UAAAX,IAAQF,EAAYS,CAAW;AAEnC,WAAA,gBAAAL;AAAA,MAACU;AAAA,MAAA;AAAA,QAEC,MAAMT,EAAkBI,CAAW;AAAA,QACnC,MAAK;AAAA,QACL,UAAQ;AAAA,QACR,SAAS,MAAMD,EAAoBC,CAAW;AAAA,QAE7C,UAAAP;AAAA,MAAA;AAAA,MANIW;AAAA,IAOP;AAAA,EAEH,CAAA,GACH,GAED,CAACb,GAAaX,GAAOgB,GAAmBG,CAAmB,CAAC,GAEzDO,IAAoBd,EAAY,MAAM;AAC1C,IAAAX,KAAA,QAAAA,EAAW;AAAA,EAAI,GACd,CAACA,CAAQ,CAAC,GAEP0B,IAAef,EAAY,MAAM;AAC/B,UAAAC,IAAQF,EAAYX,CAAU;AACpC,WAEK,gBAAA4B,EAAAC,GAAA,EAAA,UAAA;AAAA,MAAAb,EAAkBhB,CAAU;AAAA,MAC5Ba;AAAA,MACD,gBAAAE,EAACe,KAAW,MAAK,SAAQ,SAASJ,GAChC,UAAA,gBAAAX,EAACgB,IAAM,CAAA,EACT,CAAA;AAAA,IAAA,GACF;AAAA,KAED,CAAC/B,GAAOW,GAAaK,GAAmBU,CAAiB,CAAC;AAG3D,SAAA,gBAAAX;AAAA,IAACiB;AAAA,IAAA;AAAA,MACC,KAAAxB;AAAA,MACA,KAAKN,IAAW,IAAI;AAAA,MACpB,OAAM;AAAA,MACN,MAAMA;AAAA,MACN,WAAWO;AAAA,QACT;AAAA,QACAP,KAAY;AAAA,QACZG;AAAA,MACF;AAAA,MACA,OAAAC;AAAA,MACC,GAAGC;AAAA,MAEH,UAAAL,IAAWqB,EAAe,IAAII,EAAa;AAAA,IAAA;AAAA,EAC9C;AAEJ;AAEO,MAAMM,IAAQC,EAAKC,EAAWpC,CAAU,CAAC;"}
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsxs as l, jsx as d } from "react/jsx-runtime";
|
|
3
|
-
import { Menu as p } from "@base-ui-components/react/menu";
|
|
4
|
-
import { useCallback as A, useRef as E } from "react";
|
|
5
|
-
import { useControlled as R } from "@base-ui-components/react/utils";
|
|
6
|
-
import './style.css';/* empty css */
|
|
7
|
-
import { useCls as D, useAntdCssVarClassname as S, parseAntdPlacement as T } from "../utils/antdUtils.js";
|
|
8
|
-
import { clsx as u } from "../utils/cn.js";
|
|
9
|
-
const J = ({
|
|
10
|
-
children: M,
|
|
11
|
-
items: w,
|
|
12
|
-
placement: v,
|
|
13
|
-
openOnHover: y,
|
|
14
|
-
open: C,
|
|
15
|
-
onOpenChange: i,
|
|
16
|
-
className: L,
|
|
17
|
-
itemRender: h,
|
|
18
|
-
classNames: o
|
|
19
|
-
}) => {
|
|
20
|
-
const [P, f] = R({
|
|
21
|
-
controlled: C,
|
|
22
|
-
default: !1,
|
|
23
|
-
name: "open"
|
|
24
|
-
}), x = A(
|
|
25
|
-
(n) => {
|
|
26
|
-
f(n), i == null || i(n);
|
|
27
|
-
},
|
|
28
|
-
[f, i]
|
|
29
|
-
), t = D(), b = S(), g = T(v), G = E(null), k = w.reduce((n, e) => (n.length === 0 && e.type !== "header" && n.push({
|
|
30
|
-
label: null,
|
|
31
|
-
items: []
|
|
32
|
-
}), e.type === "header" ? n.push({
|
|
33
|
-
label: e.title,
|
|
34
|
-
items: []
|
|
35
|
-
}) : (e.type === "item" || e.type === "divider") && n.length > 0 && n[n.length - 1].items.push(e), n), []);
|
|
36
|
-
return /* @__PURE__ */ l(
|
|
37
|
-
p.Root,
|
|
38
|
-
{
|
|
39
|
-
openOnHover: y,
|
|
40
|
-
open: P,
|
|
41
|
-
onOpenChange: x,
|
|
42
|
-
children: [
|
|
43
|
-
/* @__PURE__ */ d(
|
|
44
|
-
p.Trigger,
|
|
45
|
-
{
|
|
46
|
-
render: M,
|
|
47
|
-
ref: G,
|
|
48
|
-
className: u(
|
|
49
|
-
t("dropdown-menu-trigger"),
|
|
50
|
-
o == null ? void 0 : o.trigger,
|
|
51
|
-
b
|
|
52
|
-
)
|
|
53
|
-
}
|
|
54
|
-
),
|
|
55
|
-
/* @__PURE__ */ d(p.Portal, { children: /* @__PURE__ */ d(
|
|
56
|
-
p.Positioner,
|
|
57
|
-
{
|
|
58
|
-
side: g.placement,
|
|
59
|
-
align: g.align,
|
|
60
|
-
sideOffset: 4,
|
|
61
|
-
className: u(t("dropdown-menu-root"), o == null ? void 0 : o.root),
|
|
62
|
-
children: /* @__PURE__ */ d(
|
|
63
|
-
p.Popup,
|
|
64
|
-
{
|
|
65
|
-
className: u(
|
|
66
|
-
t("dropdown-menu"),
|
|
67
|
-
L,
|
|
68
|
-
o == null ? void 0 : o.popup,
|
|
69
|
-
b
|
|
70
|
-
),
|
|
71
|
-
children: k.map((n, e) => /* @__PURE__ */ l(
|
|
72
|
-
p.Group,
|
|
73
|
-
{
|
|
74
|
-
className: u(
|
|
75
|
-
t("dropdown-menu-group"),
|
|
76
|
-
o == null ? void 0 : o.group
|
|
77
|
-
),
|
|
78
|
-
children: [
|
|
79
|
-
n.label && /* @__PURE__ */ d(
|
|
80
|
-
p.GroupLabel,
|
|
81
|
-
{
|
|
82
|
-
className: u(
|
|
83
|
-
t("dropdown-menu-header"),
|
|
84
|
-
o == null ? void 0 : o.groupLabel
|
|
85
|
-
),
|
|
86
|
-
children: /* @__PURE__ */ d("span", { children: n.label })
|
|
87
|
-
},
|
|
88
|
-
e
|
|
89
|
-
),
|
|
90
|
-
n.items.map((r, I) => r.type == "item" ? /* @__PURE__ */ l(
|
|
91
|
-
p.Item,
|
|
92
|
-
{
|
|
93
|
-
className: u(
|
|
94
|
-
t("dropdown-menu-item"),
|
|
95
|
-
o == null ? void 0 : o.item
|
|
96
|
-
),
|
|
97
|
-
disabled: r.disabled,
|
|
98
|
-
"data-danger": r.danger,
|
|
99
|
-
ref: r.ref,
|
|
100
|
-
onClick: r.onClick,
|
|
101
|
-
onMouseEnter: r.onMouseEnter,
|
|
102
|
-
onMouseLeave: r.onMouseLeave,
|
|
103
|
-
onMouseOver: r.onMouseOver,
|
|
104
|
-
onMouseOut: r.onMouseOut,
|
|
105
|
-
render: h ? (j) => h(r, j) : void 0,
|
|
106
|
-
children: [
|
|
107
|
-
r.icon && /* @__PURE__ */ d(
|
|
108
|
-
"span",
|
|
109
|
-
{
|
|
110
|
-
className: u(
|
|
111
|
-
t("dropdown-menu-item-icon"),
|
|
112
|
-
o == null ? void 0 : o.itemIcon
|
|
113
|
-
),
|
|
114
|
-
children: r.icon
|
|
115
|
-
}
|
|
116
|
-
),
|
|
117
|
-
/* @__PURE__ */ d("span", { children: r.label })
|
|
118
|
-
]
|
|
119
|
-
},
|
|
120
|
-
e + "-" + I
|
|
121
|
-
) : r.type == "divider" ? /* @__PURE__ */ d(
|
|
122
|
-
p.Separator,
|
|
123
|
-
{
|
|
124
|
-
className: u(
|
|
125
|
-
t("dropdown-menu-divider"),
|
|
126
|
-
o == null ? void 0 : o.separator
|
|
127
|
-
)
|
|
128
|
-
},
|
|
129
|
-
e
|
|
130
|
-
) : r.type == "header" ? /* @__PURE__ */ d(
|
|
131
|
-
p.GroupLabel,
|
|
132
|
-
{
|
|
133
|
-
className: u(
|
|
134
|
-
t("dropdown-menu-header"),
|
|
135
|
-
o == null ? void 0 : o.groupLabel
|
|
136
|
-
),
|
|
137
|
-
children: /* @__PURE__ */ d("span", { children: r.title })
|
|
138
|
-
},
|
|
139
|
-
e
|
|
140
|
-
) : null)
|
|
141
|
-
]
|
|
142
|
-
},
|
|
143
|
-
"group" + e
|
|
144
|
-
))
|
|
145
|
-
}
|
|
146
|
-
)
|
|
147
|
-
}
|
|
148
|
-
) })
|
|
149
|
-
]
|
|
150
|
-
}
|
|
151
|
-
);
|
|
152
|
-
};
|
|
153
|
-
export {
|
|
154
|
-
J as DropdownMenu
|
|
155
|
-
};
|
|
156
|
-
//# sourceMappingURL=component.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/DropdownMenu/component.tsx"],"sourcesContent":["\"use client\";\nimport {\n useCls,\n clsx,\n useAntdCssVarClassname,\n parseAntdPlacement,\n} from \"../utils\";\nimport { Menu } from \"@base-ui-components/react/menu\";\nimport { type PopoverProps } from \"antd/es/popover\";\nimport { useCallback, useRef } from \"react\";\nimport { useControlled } from \"@base-ui-components/react/utils\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\nexport type DropdownMenuItemType =\n | {\n type: \"item\";\n label?: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n key: React.Key;\n onClick?: React.HTMLAttributes<HTMLElement>[\"onClick\"];\n onMouseEnter?: React.HTMLAttributes<HTMLElement>[\"onMouseEnter\"];\n onMouseLeave?: React.HTMLAttributes<HTMLElement>[\"onMouseLeave\"];\n onMouseOver?: React.HTMLAttributes<HTMLElement>[\"onMouseOver\"];\n onMouseOut?: React.HTMLAttributes<HTMLElement>[\"onMouseOut\"];\n danger?: boolean;\n ref?: React.Ref<HTMLElement>;\n }\n | {\n type: \"divider\";\n }\n | {\n type: \"header\";\n title?: React.ReactNode;\n };\n\nexport interface DropdownMenuProps {\n /** Array of menu items to be displayed in the dropdown */\n items: DropdownMenuItemType[];\n /** Custom render function for the trigger element */\n children?: React.ComponentProps<typeof Menu.Trigger>[\"render\"];\n /**\n * Placement of the dropdown relative to the trigger element\n * @default \"bottomLeft\"\n */\n placement?: PopoverProps[\"placement\"];\n /**\n * Whether to open the dropdown on hover instead of click\n * @default false\n */\n openOnHover?: boolean;\n /**\n * Controlled open state of the dropdown\n */\n open?: boolean;\n /**\n * Callback fired when the dropdown open state changes\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * Additional CSS class for the dropdown component\n */\n className?: string;\n /**\n * Custom class names for different parts of the dropdown\n * @default {}\n */\n classNames?: {\n root?: string;\n trigger?: string;\n popup?: string;\n group?: string;\n groupLabel?: string;\n item?: string;\n itemIcon?: string;\n itemText?: string;\n separator?: string;\n positioner?: string;\n };\n /**\n * Custom render function for menu items\n */\n itemRender?: (\n item: DropdownMenuItemType,\n props: React.HTMLAttributes<HTMLElement>\n ) => React.ReactElement;\n}\n\ninterface DropdownMenuGroup {\n label: React.ReactNode | null;\n items: DropdownMenuItemType[];\n}\n\nexport const DropdownMenu = ({\n children,\n items,\n placement,\n openOnHover,\n open: outsideOpen,\n onOpenChange: outsideOnOpenChange,\n className,\n itemRender,\n classNames,\n}: DropdownMenuProps) => {\n const [open, setOpen] = useControlled({\n controlled: outsideOpen,\n default: false,\n name: \"open\",\n });\n const onOpenChange = useCallback(\n (newValue: boolean) => {\n setOpen(newValue);\n outsideOnOpenChange?.(newValue);\n },\n [setOpen, outsideOnOpenChange]\n );\n const cls = useCls();\n const antdCssVarClassname = useAntdCssVarClassname();\n const headlessUIPlacement = parseAntdPlacement(placement);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const itemGroups = items.reduce<DropdownMenuGroup[]>((acc, current) => {\n // If no groups exist yet and current item is not a header, create default group\n if (acc.length === 0 && current.type !== \"header\") {\n acc.push({\n label: null,\n items: [],\n });\n }\n\n // If it's a header, create a new group\n if (current.type === \"header\") {\n acc.push({\n label: current.title,\n items: [],\n });\n }\n // If it's an item and we have at least one group, add it to the last group's items\n else if (\n (current.type === \"item\" || current.type === \"divider\") &&\n acc.length > 0\n ) {\n acc[acc.length - 1].items.push(current);\n }\n // Skip dividers\n return acc;\n }, []);\n\n return (\n <Menu.Root\n openOnHover={openOnHover}\n open={open}\n onOpenChange={onOpenChange}\n >\n <Menu.Trigger\n render={children}\n ref={buttonRef}\n className={clsx(\n cls(\"dropdown-menu-trigger\"),\n classNames?.trigger,\n antdCssVarClassname\n )}\n ></Menu.Trigger>\n <Menu.Portal>\n <Menu.Positioner\n side={headlessUIPlacement.placement}\n align={headlessUIPlacement.align}\n sideOffset={4}\n className={clsx(cls(\"dropdown-menu-root\"), classNames?.root)}\n >\n <Menu.Popup\n className={clsx(\n cls(\"dropdown-menu\"),\n className,\n classNames?.popup,\n antdCssVarClassname\n )}\n >\n {itemGroups.map((group, i) => {\n return (\n <Menu.Group\n key={\"group\" + i}\n className={clsx(\n cls(\"dropdown-menu-group\"),\n classNames?.group\n )}\n >\n {group.label && (\n <Menu.GroupLabel\n key={i}\n className={clsx(\n cls(\"dropdown-menu-header\"),\n classNames?.groupLabel\n )}\n >\n <span>{group.label}</span>\n </Menu.GroupLabel>\n )}\n {group.items.map((item, j) => {\n return item.type == \"item\" ? (\n <Menu.Item\n key={i + \"-\" + j}\n className={clsx(\n cls(\"dropdown-menu-item\"),\n classNames?.item\n )}\n disabled={item.disabled}\n data-danger={item.danger}\n ref={item.ref}\n onClick={item.onClick}\n onMouseEnter={item.onMouseEnter}\n onMouseLeave={item.onMouseLeave}\n onMouseOver={item.onMouseOver}\n onMouseOut={item.onMouseOut}\n render={\n itemRender\n ? (itemProps) => itemRender(item, itemProps)\n : undefined\n }\n >\n {item.icon && (\n <span\n className={clsx(\n cls(\"dropdown-menu-item-icon\"),\n classNames?.itemIcon\n )}\n >\n {item.icon}\n </span>\n )}\n <span>{item.label}</span>\n </Menu.Item>\n ) : item.type == \"divider\" ? (\n <Menu.Separator\n key={i}\n className={clsx(\n cls(\"dropdown-menu-divider\"),\n classNames?.separator\n )}\n ></Menu.Separator>\n ) : item.type == \"header\" ? (\n <Menu.GroupLabel\n key={i}\n className={clsx(\n cls(\"dropdown-menu-header\"),\n classNames?.groupLabel\n )}\n >\n <span>{item.title}</span>\n </Menu.GroupLabel>\n ) : null;\n })}\n </Menu.Group>\n );\n })}\n </Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.Root>\n );\n};\n"],"names":["DropdownMenu","children","items","placement","openOnHover","outsideOpen","outsideOnOpenChange","className","itemRender","classNames","open","setOpen","useControlled","onOpenChange","useCallback","newValue","cls","useCls","antdCssVarClassname","useAntdCssVarClassname","headlessUIPlacement","parseAntdPlacement","buttonRef","useRef","itemGroups","acc","current","jsxs","Menu","jsx","clsx","group","i","item","j","itemProps"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@layer components{.ds-dropdown-menu-root{z-index:2000}.ds-dropdown-menu{box-shadow:var(--ds-box-shadow-secondary);border-radius:var(--ds-border-radius);background:var(--ds-color-bg-elevated);list-style:none;padding:.25rem;color:var(--ds-color-text);font-size:var(--ds-font-size);font-family:var(--ds-font-family);transition-property:transform,scale,opacity;transition-duration:.2s;transition-timing-function:var(--ds-motion-ease-out);transform-origin:var(--transform-origin)}.ds-dropdown-menu[data-ending-style],.ds-dropdown-menu[data-starting-style]{transform:scale(.9);opacity:0}.ds-dropdown-menu:focus{outline:none}.ds-dropdown-menu-item{padding:.375rem .75rem;border-radius:var(--ds-border-radius-sm);transition:all .3s var(--ds-motion-ease-out);cursor:pointer;display:flex;align-items:center}.ds-dropdown-menu-item:focus{outline:none}.ds-dropdown-menu-item:hover{background:var(--ds-control-item-bg-hover)}.ds-dropdown-menu-item:active,.ds-dropdown-menu-item:focus,.ds-dropdown-menu-item[data-focus]{background:var(--ds-control-item-bg-active)}.ds-dropdown-menu-item[data-disabled]{pointer-events:none;color:var(--ds-color-text-disabled)}.ds-dropdown-menu-item[data-danger]{color:var(--ds-color-error)}.ds-dropdown-menu-item[data-danger]:hover{background:var(--ds-color-error-bg)}.ds-dropdown-menu-item[data-danger]:active,.ds-dropdown-menu-item[data-danger]:focus,.ds-dropdown-menu-item[data-danger][data-focus]{background:var(--ds-color-error-bg-hover)}.ds-dropdown-menu-item-icon{display:flex;align-items:center;justify-content:center;margin-right:.5rem;font-size:1rem;color:var(--ds-color-icon)}[data-danger] .ds-dropdown-menu-item-icon{color:var(--ds-color-error)}.ds-dropdown-menu-divider{border-bottom:1px solid var(--ds-color-split);margin:.25rem 0}.ds-dropdown-menu-header{font-size:.75rem;font-weight:500;line-height:1rem;text-transform:uppercase;color:var(--ds-color-text-tertiary);padding:.75rem .75rem .25rem}.ds-dropdown-menu-header:first-child{padding-top:.5rem}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/Empty/component.tsx"],"sourcesContent":["import * as React from \"react\";\nimport {\n default as AntEmpty,\n type EmptyProps as AntEmptyProps,\n} from \"antd/es/empty\";\nimport { useCls, clsx } from \"../utils\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\nexport interface EmptyProps extends AntEmptyProps {\n /**\n * Empty icon size\n * @default 'medium'\n */\n size?: \"small\" | \"medium\" | \"large\";\n}\n\nexport const EmptyIcon: React.FC<React.ComponentPropsWithRef<\"svg\">> = (\n props\n) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n viewBox=\"0 0 32 32\"\n {...props}\n >\n <path\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeOpacity={\"0.3\"}\n strokeWidth=\"0.05em\"\n d=\"m4 26 3.773-11.316A1 1 0 0 1 8.72 14H29a1 1 0 0 1 .949 1.316L26.386 26zm0 0V8a1 1 0 0 1 1-1h6.666a1 1 0 0 1 .6.2L16 10h9a1 1 0 0 1 1 1v3\"\n ></path>\n </svg>\n);\n\nexport const Empty = ({\n image,\n size = \"medium\",\n className,\n ...rest\n}: EmptyProps) => {\n const cls = useCls();\n const emptyImage = image || <EmptyIcon className={cls(\"empty-icon\")} />;\n return (\n <AntEmpty\n image={emptyImage}\n className={clsx(cls(\"empty\", `empty-${size}`), className)}\n {...rest}\n />\n );\n};\n\nexport default Empty;\n"],"names":["EmptyIcon","props","jsx","Empty","image","size","className","rest","cls","useCls","emptyImage","AntEmpty","clsx"],"mappings":";;;;;AAkBa,MAAAA,IAA0D,CACrEC,MAEA,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,OAAM;AAAA,IACN,QAAO;AAAA,IACP,MAAK;AAAA,IACL,SAAQ;AAAA,IACP,GAAGD;AAAA,IAEJ,UAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,QAAO;AAAA,QACP,eAAc;AAAA,QACd,gBAAe;AAAA,QACf,eAAe;AAAA,QACf,aAAY;AAAA,QACZ,GAAE;AAAA,MAAA;AAAA,IAAA;AAAA,EACH;AACH,GAGWC,IAAQ,CAAC;AAAA,EACpB,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,WAAAC;AAAA,EACA,GAAGC;AACL,MAAkB;AAChB,QAAMC,IAAMC,EAAO,GACbC,IAAaN,KAAS,gBAAAF,EAACF,KAAU,WAAWQ,EAAI,YAAY,GAAG;AAEnE,SAAA,gBAAAN;AAAA,IAACS;AAAA,IAAA;AAAA,MACC,OAAOD;AAAA,MACP,WAAWE,EAAKJ,EAAI,SAAS,SAASH,CAAI,EAAE,GAAGC,CAAS;AAAA,MACvD,GAAGC;AAAA,IAAA;AAAA,EACN;AAEJ;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"item.js","sources":["../../../src/components/Form/item.tsx"],"sourcesContent":["\"use client\";\nimport { isValidElement } from \"react\";\nimport {\n default as AntdFormItem,\n type FormItemProps as AntdFormItemProps,\n} from \"antd/es/form/FormItem\";\nimport { Question } from \"@bioturing/assets\";\nimport { IconButton } from \"../IconButton\";\nimport { useCls } from \"../utils\";\n\nexport interface FormItemProps<Values = unknown>\n extends AntdFormItemProps<Values> {\n // tooltip?: React.ReactNode | TooltipProps;\n optionalMark?: boolean | React.ReactNode;\n}\n\nexport const FormItem = <Values = unknown,>({\n tooltip,\n label,\n optionalMark,\n ...rest\n}: FormItemProps<Values>) => {\n const cls = useCls();\n const renderedLabel =\n tooltip || optionalMark ? (\n <span className={cls(\"form-item-label-inner\")}>\n {label}\n {tooltip && (\n <IconButton\n className={cls(\"form-item-explaination-icon\")}\n label={\n typeof tooltip == \"string\" || isValidElement(tooltip)\n ? tooltip\n : undefined\n }\n >\n <Question />\n </IconButton>\n )}\n {optionalMark && (\n <span className={cls(\"form-item-label-optional-mark\")}>\n {typeof optionalMark == \"boolean\" ? \"(optional)\" : optionalMark}\n </span>\n )}\n </span>\n ) : (\n label\n );\n return <AntdFormItem label={renderedLabel} {...rest} />;\n};\n"],"names":["FormItem","tooltip","label","optionalMark","rest","cls","useCls","renderedLabel","jsxs","jsx","IconButton","isValidElement","Question","AntdFormItem"],"mappings":";;;;;;;AAgBO,MAAMA,IAAW,CAAoB;AAAA,EAC1C,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,GAAGC;AACL,MAA6B;AAC3B,QAAMC,IAAMC,EAAO,GACbC,IACJN,KAAWE,IACT,gBAAAK,EAAC,UAAK,WAAWH,EAAI,uBAAuB,GACzC,UAAA;AAAA,IAAAH;AAAA,IACAD,KACC,gBAAAQ;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,WAAWL,EAAI,6BAA6B;AAAA,QAC5C,OACE,OAAOJ,KAAW,YAAYU,EAAeV,CAAO,IAChDA,IACA;AAAA,QAGN,4BAACW,GAAS,CAAA,CAAA;AAAA,MAAA;AAAA,IACZ;AAAA,IAEDT,KACE,gBAAAM,EAAA,QAAA,EAAK,WAAWJ,EAAI,+BAA+B,GACjD,UAAO,OAAAF,KAAgB,YAAY,eAAeA,EACrD,CAAA;AAAA,EAAA,EAAA,CAEJ,IAEAD;AAEJ,SAAQ,gBAAAO,EAAAI,GAAA,EAAa,OAAON,GAAgB,GAAGH,GAAM;AACvD;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/IconButton/component.tsx"],"sourcesContent":["\"use client\";\nimport React, {\n forwardRef,\n type ElementType,\n type ComponentPropsWithoutRef,\n type ReactElement,\n type Ref,\n type AnchorHTMLAttributes,\n ComponentPropsWithRef,\n} from \"react\";\nimport { Tooltip, TooltipProps } from \"../Tooltip\";\nimport { useCls, clsx } from \"../utils\";\nimport { useRender } from \"@base-ui-components/react/use-render\";\n\n// Import component-specific styles\nimport \"./style.css\";\nimport { Spin } from \"../Spin\";\n\n// Base props without href/as handling\ntype IconButtonBaseProps = {\n /**\n * Label text or element to display within tooltip\n * @default undefined\n */\n label?: React.ReactNode;\n /**\n * Size of the icon button: small (1.25rem) or medium (1.5rem)\n * @default medium\n */\n size?: \"small\" | \"medium\";\n /**\n * Whether to apply negative margin for better visual alignment\n * @default true\n */\n negativeMargin?: boolean;\n /**\n * Whether to show loading state\n * @default false\n */\n loading?: boolean;\n /**\n * Props to pass to the Tooltip component when wrapping the button\n */\n tooltipProps?: TooltipProps;\n /**\n * Custom render function for the button\n */\n render?: useRender.RenderProp<{ loading: boolean }>;\n};\n\n// Extract anchor-specific props we want to automatically handle\ntype AnchorSpecificProps = Pick<\n AnchorHTMLAttributes<HTMLAnchorElement>,\n \"target\" | \"rel\" | \"download\" | \"hrefLang\" | \"referrerPolicy\"\n>;\n\n// Props when href is provided - as defaults to 'a' and includes anchor-specific props\ntype WithHrefProps<E extends ElementType = \"a\"> = IconButtonBaseProps & {\n href: string;\n as?: E;\n} & AnchorSpecificProps;\n\n// Props when href is not provided - as defaults to 'button'\ntype WithoutHrefProps<E extends ElementType = \"button\"> =\n IconButtonBaseProps & {\n href?: undefined;\n as?: E;\n } & {\n [K in keyof AnchorSpecificProps]?: never;\n };\n\n// Combined props type with conditional behavior\ntype IconButtonOwnProps<E extends ElementType = ElementType> =\n | WithHrefProps<E>\n | WithoutHrefProps<E>;\n\nexport type IconButtonProps<E extends ElementType = \"button\"> =\n IconButtonOwnProps<E> &\n Omit<ComponentPropsWithoutRef<E>, keyof IconButtonOwnProps<E>>;\n\n/**\n * A type-safe polymorphic component pattern\n */\ninterface PolymorphicComponentProps<E extends ElementType = \"button\"> {\n as?: E;\n href?: string;\n}\n\n/**\n * Type for wrapping the forwardRef implementation\n */\ntype IconButtonComponent = <E extends ElementType = \"button\">(\n props: IconButtonProps<E> & { ref?: ComponentPropsWithRef<E>[\"ref\"] }\n) => ReactElement;\n\n/**\n * Implementation of the IconButton component\n */\nconst IconButtonImpl = <E extends ElementType = \"button\">(\n {\n label,\n size = \"medium\",\n negativeMargin = true,\n children,\n className,\n tooltipProps = {},\n as,\n href,\n // Extract anchor-specific props\n target,\n rel,\n download,\n hrefLang,\n referrerPolicy,\n loading,\n render,\n ...rest\n }: IconButtonProps<E> & PolymorphicComponentProps<E>,\n ref: Ref<Element>\n) => {\n const cls = useCls();\n const buttonClasses = clsx(\n cls(\"icon-button\"),\n cls(`icon-button-${size}`),\n cls(negativeMargin ? \"icon-button-negative-margin\" : \"\"),\n className\n );\n\n // Use a type assertion for the component to avoid TypeScript errors\n const Component = (as || (href ? \"a\" : \"button\")) as ElementType;\n\n const elementProps = {\n ref,\n className: buttonClasses,\n ...(Component === \"button\" && { type: \"button\" }),\n ...(Component === \"a\"\n ? {\n ...(href && { href }),\n ...(target !== undefined && { target }),\n ...(rel !== undefined && { rel }),\n ...(download !== undefined && { download }),\n ...(hrefLang !== undefined && { hrefLang }),\n ...(referrerPolicy !== undefined && { referrerPolicy }),\n }\n : {}),\n \"data-loading\": loading,\n children: loading ? <Spin /> : children,\n ...rest,\n };\n\n const element = useRender({\n ref,\n render: render || <Component />,\n props: elementProps,\n state: {\n loading,\n },\n });\n\n return label ? (\n <Tooltip title={label} arrow={false} {...tooltipProps}>\n {element}\n </Tooltip>\n ) : (\n element\n );\n};\n\n// Export with correct typing\nexport const IconButton = forwardRef(IconButtonImpl) as IconButtonComponent;\n"],"names":["IconButtonImpl","label","size","negativeMargin","children","className","tooltipProps","as","href","target","rel","download","hrefLang","referrerPolicy","loading","render","rest","ref","cls","useCls","buttonClasses","clsx","Component","elementProps","jsx","Spin","element","useRender","Tooltip","IconButton","forwardRef"],"mappings":";;;;;;;;;AAkGA,MAAMA,IAAiB,CACrB;AAAA,EACE,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,gBAAAC,IAAiB;AAAA,EACjB,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,cAAAC,IAAe,CAAC;AAAA,EAChB,IAAAC;AAAA,EACA,MAAAC;AAAA;AAAA,EAEA,QAAAC;AAAA,EACA,KAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,GAAGC;AACL,GACAC,MACG;AACH,QAAMC,IAAMC,EAAO,GACbC,IAAgBC;AAAA,IACpBH,EAAI,aAAa;AAAA,IACjBA,EAAI,eAAehB,CAAI,EAAE;AAAA,IACzBgB,EAAIf,IAAiB,gCAAgC,EAAE;AAAA,IACvDE;AAAA,EACF,GAGMiB,IAAaf,MAAOC,IAAO,MAAM,WAEjCe,IAAe;AAAA,IACnB,KAAAN;AAAA,IACA,WAAWG;AAAA,IACX,GAAIE,MAAc,YAAY,EAAE,MAAM,SAAS;AAAA,IAC/C,GAAIA,MAAc,MACd;AAAA,MACE,GAAId,KAAQ,EAAE,MAAAA,EAAK;AAAA,MACnB,GAAIC,MAAW,UAAa,EAAE,QAAAA,EAAO;AAAA,MACrC,GAAIC,MAAQ,UAAa,EAAE,KAAAA,EAAI;AAAA,MAC/B,GAAIC,MAAa,UAAa,EAAE,UAAAA,EAAS;AAAA,MACzC,GAAIC,MAAa,UAAa,EAAE,UAAAA,EAAS;AAAA,MACzC,GAAIC,MAAmB,UAAa,EAAE,gBAAAA,EAAe;AAAA,IAAA,IAEvD,CAAC;AAAA,IACL,gBAAgBC;AAAA,IAChB,UAAUA,IAAW,gBAAAU,EAAAC,GAAA,CAAA,CAAK,IAAKrB;AAAA,IAC/B,GAAGY;AAAA,EACL,GAEMU,IAAUC,EAAU;AAAA,IACxB,KAAAV;AAAA,IACA,QAAQF,KAAU,gBAAAS,EAACF,GAAU,CAAA,CAAA;AAAA,IAC7B,OAAOC;AAAA,IACP,OAAO;AAAA,MACL,SAAAT;AAAA,IAAA;AAAA,EACF,CACD;AAEM,SAAAb,IACJ,gBAAAuB,EAAAI,GAAA,EAAQ,OAAO3B,GAAO,OAAO,IAAQ,GAAGK,GACtC,UAAAoB,EAAA,CACH,IAEAA;AAEJ,GAGaG,IAAaC,EAAW9B,CAAc;"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { jsx as r } from "react/jsx-runtime";
|
|
2
|
-
import { MagnifyingGlass as c, Eye as i, EyeClosed as u } from "@bioturing/assets";
|
|
3
|
-
import { Input as t } from "antd";
|
|
4
|
-
import { forwardRef as o } from "react";
|
|
5
|
-
const m = (n, e) => /* @__PURE__ */ r(t, { ref: e, ...n }), I = (n, e) => {
|
|
6
|
-
const s = {
|
|
7
|
-
iconRender: (a) => a ? /* @__PURE__ */ r(i, { size: 16 }) : /* @__PURE__ */ r(u, { size: 16 }),
|
|
8
|
-
...n
|
|
9
|
-
};
|
|
10
|
-
return /* @__PURE__ */ r(t.Password, { ref: e, ...s });
|
|
11
|
-
}, d = (n, e) => {
|
|
12
|
-
const s = {
|
|
13
|
-
enterButton: n.enterButton === !0 ? /* @__PURE__ */ r(c, { size: 16 }) : n.enterButton,
|
|
14
|
-
...n
|
|
15
|
-
};
|
|
16
|
-
return /* @__PURE__ */ r(t.Search, { ref: e, ...s });
|
|
17
|
-
}, p = (n, e) => /* @__PURE__ */ r(t.TextArea, { ref: e, ...n }), f = o(m), g = o(I), x = o(d), P = o(p), A = Object.assign(f, {
|
|
18
|
-
Password: g,
|
|
19
|
-
Search: x,
|
|
20
|
-
TextArea: P
|
|
21
|
-
});
|
|
22
|
-
export {
|
|
23
|
-
A as Input
|
|
24
|
-
};
|
|
25
|
-
//# sourceMappingURL=component.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/Input/component.tsx"],"sourcesContent":["import { Eye, EyeClosed, MagnifyingGlass } from \"@bioturing/assets\";\nimport {\n Input as AntInput,\n type InputProps as AntInputProps,\n type InputRef,\n} from \"antd\";\nimport { type PasswordProps as AntPasswordProps } from \"antd/es/input\";\nimport { type SearchProps as AntSearchProps } from \"antd/es/input\";\nimport { type TextAreaProps as AntTextAreaProps } from \"antd/es/input\";\nimport { forwardRef } from \"react\";\n\n// Define props interfaces\nexport interface InputProps extends AntInputProps {}\nexport interface PasswordProps extends AntPasswordProps {}\nexport interface TextAreaProps extends AntTextAreaProps {}\nexport interface SearchProps extends AntSearchProps {}\n\n// Create inner function for main Input\nconst MainInputInner = (props: InputProps, ref: React.Ref<InputRef>) => {\n return <AntInput ref={ref} {...props} />;\n};\n\n// Create inner function for Password\nconst PasswordInner = (props: PasswordProps, ref: React.Ref<InputRef>) => {\n // Apply default iconRender unless overridden by props\n const mergedProps = {\n iconRender: (visible: boolean) =>\n visible ? <Eye size={16} /> : <EyeClosed size={16} />,\n ...props,\n };\n\n return <AntInput.Password ref={ref} {...mergedProps} />;\n};\n\n// Create inner function for Search\nconst SearchInner = (props: SearchProps, ref: React.Ref<InputRef>) => {\n // Apply default enterButton unless overridden\n const mergedProps = {\n enterButton:\n props.enterButton === true ? (\n <MagnifyingGlass size={16} />\n ) : (\n props.enterButton\n ),\n ...props,\n };\n\n return <AntInput.Search ref={ref} {...mergedProps} />;\n};\n\n// Create inner function for TextArea\nconst TextAreaInner = (\n props: TextAreaProps,\n ref: React.Ref<HTMLTextAreaElement>\n) => {\n return <AntInput.TextArea ref={ref} {...props} />;\n};\n\n// Use forwardRef with type assertion for main Input\nconst MainInput = forwardRef(MainInputInner) as (\n props: InputProps & {\n ref?: React.ForwardedRef<InputRef>;\n }\n) => ReturnType<typeof MainInputInner>;\n\n// Use forwardRef with type assertion for Password\nconst Password = forwardRef(PasswordInner) as (\n props: PasswordProps & {\n ref?: React.ForwardedRef<InputRef>;\n }\n) => ReturnType<typeof PasswordInner>;\n\n// Use forwardRef with type assertion for Search\nconst Search = forwardRef(SearchInner) as (\n props: SearchProps & {\n ref?: React.ForwardedRef<InputRef>;\n }\n) => ReturnType<typeof SearchInner>;\n\n// Use forwardRef with type assertion for TextArea\nconst TextArea = forwardRef(TextAreaInner) as (\n props: TextAreaProps & {\n ref?: React.ForwardedRef<HTMLTextAreaElement>;\n }\n) => ReturnType<typeof TextAreaInner>;\n\n// Export the final composed component\nexport const Input = Object.assign(MainInput, {\n Password,\n Search,\n TextArea,\n});\n"],"names":["MainInputInner","props","ref","jsx","AntInput","PasswordInner","mergedProps","visible","Eye","EyeClosed","SearchInner","MagnifyingGlass","TextAreaInner","MainInput","forwardRef","Password","Search","TextArea","Input"],"mappings":";;;;AAkBA,MAAMA,IAAiB,CAACC,GAAmBC,MACjC,gBAAAC,EAAAC,GAAA,EAAS,KAAAF,GAAW,GAAGD,EAAO,CAAA,GAIlCI,IAAgB,CAACJ,GAAsBC,MAA6B;AAExE,QAAMI,IAAc;AAAA,IAClB,YAAY,CAACC,MACXA,IAAW,gBAAAJ,EAAAK,GAAA,EAAI,MAAM,GAAI,CAAA,IAAK,gBAAAL,EAACM,GAAU,EAAA,MAAM,GAAI,CAAA;AAAA,IACrD,GAAGR;AAAA,EACL;AAEA,2BAAQG,EAAS,UAAT,EAAkB,KAAAF,GAAW,GAAGI,GAAa;AACvD,GAGMI,IAAc,CAACT,GAAoBC,MAA6B;AAEpE,QAAMI,IAAc;AAAA,IAClB,aACEL,EAAM,gBAAgB,uBACnBU,GAAgB,EAAA,MAAM,IAAI,IAE3BV,EAAM;AAAA,IAEV,GAAGA;AAAA,EACL;AAEA,2BAAQG,EAAS,QAAT,EAAgB,KAAAF,GAAW,GAAGI,GAAa;AACrD,GAGMM,IAAgB,CACpBX,GACAC,wBAEQE,EAAS,UAAT,EAAkB,KAAAF,GAAW,GAAGD,GAAO,GAI3CY,IAAYC,EAAWd,CAAc,GAOrCe,IAAWD,EAAWT,CAAa,GAOnCW,IAASF,EAAWJ,CAAW,GAO/BO,IAAWH,EAAWF,CAAa,GAO5BM,IAAQ,OAAO,OAAOL,GAAW;AAAA,EAC5C,UAAAE;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AACF,CAAC;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.js","sources":["../../../src/components/Modal/Modal.tsx"],"sourcesContent":["\"use client\";\nimport {\n default as AntModal,\n type ModalProps as AntModalProps,\n} from \"antd/es/modal\";\nimport { XIcon } from \"@bioturing/assets\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useCls } from \"../utils\";\nimport { ModalContextProvider } from \"antd/es/modal/context\";\nimport NormalCancelBtn from \"antd/es/modal/components/NormalCancelBtn\";\nimport NormalOkBtn from \"antd/es/modal/components/NormalOkBtn\";\nimport { getConfirmLocale } from \"antd/es/modal/locale\";\nimport { useLocale } from \"antd/es/locale\";\nimport { IconButton } from \"../IconButton\";\nimport { ModalSize } from \"./constants\";\nimport { ModalType } from \"./functions\";\nimport { Truncate } from \"../Truncate\";\nimport { Stack } from \"../Stack\";\n\n// Define props interface extending Ant Design's ModalProps\nexport interface ModalProps extends Omit<AntModalProps, \"centered\"> {\n /**\n * Predefined sizes for the modal\n * - xsmall: 400px\n * - small: 520px\n * - medium: 640px (default)\n * - large: 840px\n * - xlarge: 1024px\n * - fullscreen: 100vw (takes full screen width with margins)\n * @default \"medium\" for default type, \"xsmall\" for other types\n */\n size?:\n | \"xsmall\"\n | \"small\"\n | \"medium\"\n | \"large\"\n | \"xlarge\"\n | \"xxlarge\"\n | \"fullscreen\";\n /**\n * Mark modal as loading\n * @default false\n */\n loading?: boolean;\n /**\n * Hide Ok button\n * @default false\n */\n hideOkButton?: boolean;\n /**\n * Hide Cancel button\n * @default false\n */\n hideCancelButton?: boolean;\n /**\n * Custom Content Padding\n * @default \"24px\"\n */\n contentPadding?: number | string | boolean;\n /**\n * Add more content below the title\n */\n afterTitle?: React.ReactNode;\n /**\n * Add more actions before close button\n */\n beforeCloseButton?: React.ReactNode;\n /**\n * Add more actions after close button\n */\n afterCloseButton?: React.ReactNode;\n /**\n * Set header and footer to fixed position\n * @default false\n */\n defaultFixedHeaderFooter?: boolean;\n /**\n * Centered Modal\n * @default true\n */\n centered?: boolean;\n /**\n * Modal type\n * @default \"default\"\n */\n type?: ModalType;\n /**\n * Default open state for uncontrolled modal\n * @default true\n */\n defaultOpen?: boolean;\n /**\n * Modal background\n * @default \"elevated\" if size smaller than \"medium\", otherwise \"container\"\n */\n background?: \"elevated\" | \"container\";\n /**\n * Modal old close callback\n * @deprecated use onCancel instead\n */\n onClose?: () => void;\n /**\n * Make modal body scrollable\n * @default true\n */\n bodyScrollable?: boolean;\n}\n\n// Create Modal component\nexport const Modal = ({\n open: externalOpen,\n closeIcon,\n children,\n size: sizeProp,\n footer,\n width,\n style,\n styles,\n classNames,\n okButtonProps,\n cancelButtonProps,\n loading,\n onOk,\n onCancel,\n okText,\n okType = \"primary\",\n confirmLoading,\n cancelText = \"Close\",\n hideOkButton = false,\n hideCancelButton = false,\n contentPadding,\n title,\n afterTitle,\n beforeCloseButton,\n afterCloseButton,\n defaultFixedHeaderFooter = false,\n centered = true,\n type = \"default\",\n defaultOpen = true,\n background: backgroundProp,\n bodyScrollable = true,\n ...rest\n}: ModalProps) => {\n // Default close icon with Phosphor icon\n const defaultCloseIcon =\n closeIcon === undefined ? <XIcon size={16} weight=\"bold\" /> : closeIcon;\n\n // Use custom width if provided, otherwise use the size from the map\n const defaultModalSize = type === \"default\" ? \"medium\" : \"xsmall\";\n\n const size: keyof typeof ModalSize = sizeProp || defaultModalSize;\n const modalWidth = width || ModalSize[size];\n\n const background =\n backgroundProp ||\n (size &&\n size in ModalSize &&\n parseInt(ModalSize[size]) <= parseInt(ModalSize.medium)\n ? \"elevated\"\n : \"container\");\n\n // Apply additional styles for fullscreen mode\n const modalStyle = {\n \"--ds-modal-bg\": `var(--ds-color-bg-${background})`,\n ...style,\n ...(size === \"fullscreen\"\n ? { top: 0, maxWidth: \"100%\", height: \"100%\" }\n : {}),\n };\n\n const modalStyles = {\n ...styles,\n body: {\n ...((typeof contentPadding != \"undefined\"\n ? {\n \"--ds-modal-content-padding\":\n contentPadding === false || contentPadding === 0\n ? \"0\"\n : typeof contentPadding == \"number\"\n ? `${contentPadding}px`\n : contentPadding,\n }\n : {}) as React.CSSProperties),\n ...styles?.body,\n },\n };\n\n const [isContentOverflow, setIsContentOverflow] = useState(false);\n\n const cls = useCls();\n\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n\n const modalInnerRef = useCallback(\n (node: HTMLElement | null) => {\n // If the node is null (component unmounting), just return\n if (!node) return;\n\n const modalBody = node.querySelector(\".\" + cls(\"modal-body\"));\n if (!(modalBody instanceof HTMLElement)) return;\n\n // Create ResizeObserver to detect overflow\n const resizeObserver = new ResizeObserver(() => {\n const hasOverflow = modalBody.scrollHeight > modalBody.clientHeight;\n setIsContentOverflow(hasOverflow);\n });\n\n // Store reference to the observer\n resizeObserverRef.current = resizeObserver;\n\n // Start observing\n resizeObserver.observe(modalBody);\n\n // Initial check\n const hasOverflow = modalBody.scrollHeight > modalBody.clientHeight;\n setIsContentOverflow(hasOverflow);\n },\n [cls]\n );\n\n // clean up resize observer\n useEffect(() => {\n return () => {\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n resizeObserverRef.current = null;\n }\n };\n }, []);\n\n const [locale] = useLocale(\"Modal\", getConfirmLocale());\n\n const okTextLocale: React.ReactNode = okText || locale?.okText;\n const cancelTextLocale = cancelText || locale?.cancelText;\n\n const modalOkButtonProps = {\n loading: loading,\n ...okButtonProps,\n };\n\n const modalCancelButtonProps = {\n ...cancelButtonProps,\n };\n\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n\n const uncontrolledOpen = typeof externalOpen === \"undefined\";\n\n const open = uncontrolledOpen ? internalOpen : externalOpen;\n\n const defaultFooter = (\n <ModalContextProvider\n value={{\n okButtonProps: modalOkButtonProps,\n cancelButtonProps: modalCancelButtonProps,\n onCancel,\n onOk,\n okType,\n confirmLoading,\n okTextLocale,\n cancelTextLocale,\n }}\n >\n {hideOkButton ? (\n <NormalCancelBtn />\n ) : hideCancelButton ? (\n <NormalOkBtn />\n ) : (\n <>\n <NormalCancelBtn />\n <NormalOkBtn />\n </>\n )}\n </ModalContextProvider>\n );\n const renderTitle = () => {\n return (\n <>\n <Stack align=\"center\" gap={8} className={cls(\"modal-title-wrapper\")}>\n <Stack.Child grow>\n {typeof title === \"string\" ? <Truncate>{title}</Truncate> : title}\n </Stack.Child>\n <Stack.Child stack hug align=\"center\" gap={8}>\n {beforeCloseButton}\n <IconButton\n onClick={(e: React.MouseEvent<HTMLButtonElement>) =>\n onCancel?.(e)\n }\n >\n {defaultCloseIcon}\n </IconButton>\n {afterCloseButton}\n </Stack.Child>\n {}\n </Stack>\n {afterTitle ? afterTitle : null}\n </>\n );\n };\n return (\n <AntModal\n closeIcon={false}\n open={open}\n width={modalWidth}\n style={modalStyle}\n title={renderTitle()}\n classNames={{\n ...classNames,\n wrapper: cls(\n \"modal-wrap\",\n size == \"fullscreen\" && \"modal-fullscreen\",\n isContentOverflow && \"modal-content-overflow\",\n bodyScrollable === false && \"modal-no-body-scroll\",\n defaultFixedHeaderFooter || isContentOverflow || size == \"fullscreen\"\n ? \"modal-fixed\"\n : \"\"\n ),\n }}\n styles={modalStyles}\n modalRender={(modal) => (\n <div ref={modalInnerRef} className={cls(\"modal-inner\")}>\n {modal}\n </div>\n )}\n okButtonProps={modalOkButtonProps}\n cancelButtonProps={modalCancelButtonProps}\n onOk={(e) => {\n if (uncontrolledOpen) setInternalOpen(false);\n onOk?.(e);\n }}\n onCancel={(e) => {\n if (uncontrolledOpen) setInternalOpen(false);\n onCancel?.(e);\n }}\n okText={okText}\n cancelText={cancelText}\n okType=\"primary\"\n confirmLoading={confirmLoading}\n footer={\n typeof footer === \"undefined\"\n ? hideOkButton && hideCancelButton\n ? null\n : defaultFooter\n : footer\n }\n centered={centered}\n {...rest}\n >\n {children}\n </AntModal>\n );\n};\n"],"names":["Modal","externalOpen","closeIcon","children","sizeProp","footer","width","style","styles","classNames","okButtonProps","cancelButtonProps","loading","onOk","onCancel","okText","okType","confirmLoading","cancelText","hideOkButton","hideCancelButton","contentPadding","title","afterTitle","beforeCloseButton","afterCloseButton","defaultFixedHeaderFooter","centered","type","defaultOpen","backgroundProp","bodyScrollable","rest","defaultCloseIcon","jsx","XIcon","size","modalWidth","ModalSize","modalStyle","modalStyles","isContentOverflow","setIsContentOverflow","useState","cls","useCls","resizeObserverRef","useRef","modalInnerRef","useCallback","node","modalBody","resizeObserver","hasOverflow","useEffect","locale","useLocale","getConfirmLocale","okTextLocale","cancelTextLocale","modalOkButtonProps","modalCancelButtonProps","internalOpen","setInternalOpen","uncontrolledOpen","open","defaultFooter","ModalContextProvider","NormalCancelBtn","NormalOkBtn","jsxs","Fragment","AntModal","Stack","Truncate","IconButton","e","modal"],"mappings":";;;;;;;;;;;;;;;AA6GO,MAAMA,KAAQ,CAAC;AAAA,EACpB,MAAMC;AAAA,EACN,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,MAAMC;AAAA,EACN,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC;AAAA,EACA,eAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,gBAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,cAAAC,IAAe;AAAA,EACf,kBAAAC,IAAmB;AAAA,EACnB,gBAAAC;AAAA,EACA,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,0BAAAC,IAA2B;AAAA,EAC3B,UAAAC,IAAW;AAAA,EACX,MAAAC,IAAO;AAAA,EACP,aAAAC,IAAc;AAAA,EACd,YAAYC;AAAA,EACZ,gBAAAC,IAAiB;AAAA,EACjB,GAAGC;AACL,MAAkB;AAEV,QAAAC,IACJ/B,MAAc,SAAY,gBAAAgC,EAACC,MAAM,MAAM,IAAI,QAAO,OAAA,CAAO,IAAKjC,GAK1DkC,IAA+BhC,MAFZwB,MAAS,YAAY,WAAW,WAGnDS,KAAa/B,KAASgC,EAAUF,CAAI,GAWpCG,KAAa;AAAA,IACjB,iBAAiB,qBATjBT,MACCM,KACDA,KAAQE,KACR,SAASA,EAAUF,CAAI,CAAC,KAAK,SAASE,EAAU,MAAM,IAClD,aACA,YAI4C;AAAA,IAChD,GAAG/B;AAAA,IACH,GAAI6B,MAAS,eACT,EAAE,KAAK,GAAG,UAAU,QAAQ,QAAQ,WACpC,CAAA;AAAA,EACN,GAEMI,KAAc;AAAA,IAClB,GAAGhC;AAAA,IACH,MAAM;AAAA,MACJ,GAAK,OAAOa,IAAkB,MAC1B;AAAA,QACE,8BACEA,MAAmB,MAASA,MAAmB,IAC3C,MACA,OAAOA,KAAkB,WACzB,GAAGA,CAAc,OACjBA;AAAA,MAAA,IAER,CAAC;AAAA,MACL,GAAGb,KAAA,gBAAAA,EAAQ;AAAA,IAAA;AAAA,EAEf,GAEM,CAACiC,GAAmBC,CAAoB,IAAIC,EAAS,EAAK,GAE1DC,IAAMC,GAAO,GAEbC,IAAoBC,GAA8B,IAAI,GAEtDC,KAAgBC;AAAA,IACpB,CAACC,MAA6B;AAE5B,UAAI,CAACA,EAAM;AAEX,YAAMC,IAAYD,EAAK,cAAc,MAAMN,EAAI,YAAY,CAAC;AACxD,UAAA,EAAEO,aAAqB,aAAc;AAGnC,YAAAC,IAAiB,IAAI,eAAe,MAAM;AACxCC,cAAAA,KAAcF,EAAU,eAAeA,EAAU;AACvD,QAAAT,EAAqBW,EAAW;AAAA,MAAA,CACjC;AAGD,MAAAP,EAAkB,UAAUM,GAG5BA,EAAe,QAAQD,CAAS;AAG1B,YAAAE,KAAcF,EAAU,eAAeA,EAAU;AACvD,MAAAT,EAAqBW,EAAW;AAAA,IAClC;AAAA,IACA,CAACT,CAAG;AAAA,EACN;AAGA,EAAAU,GAAU,MACD,MAAM;AACX,IAAIR,EAAkB,YACpBA,EAAkB,QAAQ,WAAW,GACrCA,EAAkB,UAAU;AAAA,EAEhC,GACC,EAAE;AAEL,QAAM,CAACS,CAAM,IAAIC,GAAU,SAASC,IAAkB,GAEhDC,KAAgC3C,MAAUwC,KAAA,gBAAAA,EAAQ,SAClDI,KAAmBzC,MAAcqC,KAAA,gBAAAA,EAAQ,aAEzCK,IAAqB;AAAA,IACzB,SAAAhD;AAAA,IACA,GAAGF;AAAA,EACL,GAEMmD,IAAyB;AAAA,IAC7B,GAAGlD;AAAA,EACL,GAEM,CAACmD,IAAcC,CAAe,IAAIpB,EAASd,CAAW,GAEtDmC,IAAmB,OAAO/D,IAAiB,KAE3CgE,KAAOD,IAAmBF,KAAe7D,GAEzCiE,KACJ,gBAAAhC;AAAA,IAACiC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,eAAeP;AAAA,QACf,mBAAmBC;AAAA,QACnB,UAAA/C;AAAA,QACA,MAAAD;AAAA,QACA,QAAAG;AAAA,QACA,gBAAAC;AAAA,QACA,cAAAyC;AAAA,QACA,kBAAAC;AAAA,MACF;AAAA,MAEC,UAAAxC,sBACEiD,GAAgB,CAAA,CAAA,IACfhD,IACD,gBAAAc,EAAAmC,GAAA,CAAA,CAAY,IAGX,gBAAAC,EAAAC,GAAA,EAAA,UAAA;AAAA,QAAA,gBAAArC,EAACkC,GAAgB,EAAA;AAAA,0BAChBC,GAAY,CAAA,CAAA;AAAA,MAAA,EACf,CAAA;AAAA,IAAA;AAAA,EAEJ;AA2BA,SAAA,gBAAAnC;AAAA,IAACsC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,MACX,MAAAP;AAAA,MACA,OAAO5B;AAAA,MACP,OAAOE;AAAA,MACP,OA3BE,gBAAA+B,EAAAC,GAAA,EAAA,UAAA;AAAA,QAAC,gBAAAD,EAAAG,GAAA,EAAM,OAAM,UAAS,KAAK,GAAG,WAAW7B,EAAI,qBAAqB,GAChE,UAAA;AAAA,UAAA,gBAAAV,EAACuC,EAAM,OAAN,EAAY,MAAI,IACd,UAAA,OAAOnD,KAAU,WAAY,gBAAAY,EAAAwC,IAAA,EAAU,UAAMpD,EAAA,CAAA,IAAcA,GAC9D;AAAA,UACA,gBAAAgD,EAACG,EAAM,OAAN,EAAY,OAAK,IAAC,KAAG,IAAC,OAAM,UAAS,KAAK,GACxC,UAAA;AAAA,YAAAjD;AAAA,YACD,gBAAAU;AAAA,cAACyC;AAAA,cAAA;AAAA,gBACC,SAAS,CAACC,MACR9D,KAAA,gBAAAA,EAAW8D;AAAA,gBAGZ,UAAA3C;AAAA,cAAA;AAAA,YACH;AAAA,YACCR;AAAA,UAAA,EACH,CAAA;AAAA,QAAA,GAEF;AAAA,QACCF,KAA0B;AAAA,MAAA,GAC7B;AAAA,MAUA,YAAY;AAAA,QACV,GAAGd;AAAA,QACH,SAASmC;AAAA,UACP;AAAA,UACAR,KAAQ,gBAAgB;AAAA,UACxBK,KAAqB;AAAA,UACrBV,MAAmB,MAAS;AAAA,UAC5BL,KAA4Be,KAAqBL,KAAQ,eACrD,gBACA;AAAA,QAAA;AAAA,MAER;AAAA,MACA,QAAQI;AAAA,MACR,aAAa,CAACqC,MACX,gBAAA3C,EAAA,OAAA,EAAI,KAAKc,IAAe,WAAWJ,EAAI,aAAa,GAClD,UACHiC,EAAA,CAAA;AAAA,MAEF,eAAejB;AAAA,MACf,mBAAmBC;AAAA,MACnB,MAAM,CAACe,MAAM;AACP,QAAAZ,OAAkC,EAAK,GAC3CnD,KAAA,QAAAA,EAAO+D;AAAA,MACT;AAAA,MACA,UAAU,CAACA,MAAM;AACX,QAAAZ,OAAkC,EAAK,GAC3ClD,KAAA,QAAAA,EAAW8D;AAAA,MACb;AAAA,MACA,QAAA7D;AAAA,MACA,YAAAG;AAAA,MACA,QAAO;AAAA,MACP,gBAAAD;AAAA,MACA,QACE,OAAOZ,IAAW,MACdc,KAAgBC,IACd,OACA8C,KACF7D;AAAA,MAEN,UAAAsB;AAAA,MACC,GAAGK;AAAA,MAEH,UAAA7B;AAAA,IAAA;AAAA,EACH;AAEJ;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ModalService.js","sources":["../../../src/components/Modal/ModalService.ts"],"sourcesContent":["import type { ModalFuncProps } from \"./functions\";\n\nexport type ModalConfig = ModalFuncProps & {\n id: string;\n trigger?: HTMLElement;\n};\n\nexport type UpdateConfig =\n | Partial<ModalFuncProps>\n | ((prev: ModalFuncProps) => ModalFuncProps);\n\nexport type ModalEvent =\n | { type: \"add\"; payload: ModalConfig }\n | { type: \"update\"; payload: { id: string; config: UpdateConfig } }\n | { type: \"destroy\"; payload: { id: string } }\n | { type: \"destroyAll\" };\n\ntype Listener = (event: ModalEvent) => void;\n\nclass ModalManager {\n private listeners: Listener[] = [];\n private counter = 0;\n\n subscribe(listener: Listener) {\n this.listeners.push(listener);\n return () => {\n this.listeners = this.listeners.filter((l) => l !== listener);\n };\n }\n\n emit(event: ModalEvent) {\n this.listeners.forEach((l) => l(event));\n }\n\n generateId() {\n this.counter += 1;\n return `modal_${this.counter}_${Date.now()}`;\n }\n}\n\nexport const modalManager = new ModalManager();\n"],"names":["ModalManager","__publicField","listener","l","event","modalManager"],"mappings":";;;AAmBA,MAAMA,EAAa;AAAA,EAAnB;AACU,IAAAC,EAAA,mBAAwB,CAAC;AACzB,IAAAA,EAAA,iBAAU;AAAA;AAAA,EAElB,UAAUC,GAAoB;AACvB,gBAAA,UAAU,KAAKA,CAAQ,GACrB,MAAM;AACX,WAAK,YAAY,KAAK,UAAU,OAAO,CAACC,MAAMA,MAAMD,CAAQ;AAAA,IAC9D;AAAA,EAAA;AAAA,EAGF,KAAKE,GAAmB;AACtB,SAAK,UAAU,QAAQ,CAACD,MAAMA,EAAEC,CAAK,CAAC;AAAA,EAAA;AAAA,EAGxC,aAAa;AACX,gBAAK,WAAW,GACT,SAAS,KAAK,OAAO,IAAI,KAAK,KAAK;AAAA,EAAA;AAE9C;AAEa,MAAAC,IAAe,IAAIL,EAAa;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"functions.js","sources":["../../../src/components/Modal/functions.tsx"],"sourcesContent":["import React, { JSX } from \"react\";\nimport type { ModalFuncProps as AntModalFuncProps } from \"antd\";\nimport { modalManager } from \"./ModalService\";\nimport { ModalProps } from \"./Modal\";\n\n// Extend Ant ModalFuncProps to include 'default'\nexport type ModalType = NonNullable<AntModalFuncProps[\"type\"]> | \"default\";\n\n// export type ModalFuncProps = Omit<AntModalFuncProps, \"type\"> & {\n// type?: ModalType;\n// };\n\nexport type ModalFuncProps = ModalProps & {\n /**\n * Content to be displayed in the modal\n * Similar to children prop in Modal component\n * Keep this to be compatible with antd ModalFuncProps\n */\n content?: React.ReactNode;\n};\n\nexport type ModalUpdateConfig =\n | Partial<ModalFuncProps>\n | ((prev: ModalFuncProps) => ModalFuncProps);\n\nexport interface ModalRef {\n update: (config: ModalUpdateConfig) => void;\n destroy: () => void;\n}\n\nfunction createModal(config: ModalFuncProps): ModalRef {\n // capture trigger element for focus restoration\n const trigger =\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : undefined;\n const { type = \"default\", ...restConfig } = config;\n\n const id = modalManager.generateId();\n // initialize modal as open\n modalManager.emit({\n type: \"add\",\n payload: {\n id,\n type,\n trigger,\n ...restConfig,\n },\n });\n return {\n update: (cfg: ModalUpdateConfig) =>\n modalManager.emit({ type: \"update\", payload: { id, config: cfg } }),\n destroy: () => modalManager.emit({ type: \"destroy\", payload: { id } }),\n };\n}\n\nexport const confirm = (config: ModalFuncProps): ModalRef =>\n createModal({ ...config, type: \"confirm\" });\nexport const info = (config: ModalFuncProps): ModalRef =>\n createModal({ ...config, type: \"info\" });\nexport const success = (config: ModalFuncProps): ModalRef =>\n createModal({ ...config, type: \"success\" });\nexport const error = (config: ModalFuncProps): ModalRef =>\n createModal({ ...config, type: \"error\" });\nexport const warning = (config: ModalFuncProps): ModalRef =>\n createModal({ ...config, type: \"warning\" });\n\n/**\n * Open a default (normal) modal\n */\nexport const open = (config: ModalFuncProps): ModalRef =>\n createModal({ ...config, type: \"default\" });\n\nexport const destroyAll = (): void => modalManager.emit({ type: \"destroyAll\" });\n"],"names":["createModal","config","trigger","type","restConfig","id","modalManager","cfg","confirm","info","success","error","warning","open","destroyAll"],"mappings":";AA8BA,SAASA,EAAYC,GAAkC;AAErD,QAAMC,IACJ,SAAS,yBAAyB,cAC9B,SAAS,gBACT,QACA,EAAE,MAAAC,IAAO,WAAW,GAAGC,EAAe,IAAAH,GAEtCI,IAAKC,EAAa,WAAW;AAEnC,SAAAA,EAAa,KAAK;AAAA,IAChB,MAAM;AAAA,IACN,SAAS;AAAA,MACP,IAAAD;AAAA,MACA,MAAAF;AAAA,MACA,SAAAD;AAAA,MACA,GAAGE;AAAA,IAAA;AAAA,EACL,CACD,GACM;AAAA,IACL,QAAQ,CAACG,MACPD,EAAa,KAAK,EAAE,MAAM,UAAU,SAAS,EAAE,IAAAD,GAAI,QAAQE,KAAO;AAAA,IACpE,SAAS,MAAMD,EAAa,KAAK,EAAE,MAAM,WAAW,SAAS,EAAE,IAAAD,IAAM,CAAA;AAAA,EACvE;AACF;AAEa,MAAAG,IAAU,CAACP,MACtBD,EAAY,EAAE,GAAGC,GAAQ,MAAM,UAAW,CAAA,GAC/BQ,IAAO,CAACR,MACnBD,EAAY,EAAE,GAAGC,GAAQ,MAAM,OAAQ,CAAA,GAC5BS,IAAU,CAACT,MACtBD,EAAY,EAAE,GAAGC,GAAQ,MAAM,UAAW,CAAA,GAC/BU,IAAQ,CAACV,MACpBD,EAAY,EAAE,GAAGC,GAAQ,MAAM,QAAS,CAAA,GAC7BW,IAAU,CAACX,MACtBD,EAAY,EAAE,GAAGC,GAAQ,MAAM,UAAW,CAAA,GAK/BY,IAAO,CAACZ,MACnBD,EAAY,EAAE,GAAGC,GAAQ,MAAM,UAAW,CAAA,GAE/Ba,IAAa,MAAYR,EAAa,KAAK,EAAE,MAAM,aAAc,CAAA;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Nav/index.tsx"],"sourcesContent":["import { NavItem, NavItemProps } from \"./item\";\nimport { NavHeading, NavHeadingProps } from \"./heading\";\nimport { NavGroup, NavGroupProps } from \"./group\";\n\nimport \"./style.css\";\n\nexport const Nav = {\n Item: NavItem,\n Heading: NavHeading,\n Group: NavGroup,\n};\n\nexport type { NavItemProps, NavHeadingProps, NavGroupProps };\n"],"names":["Nav","NavItem","NavHeading","NavGroup"],"mappings":";;;;AAMO,MAAMA,IAAM;AAAA,EACjB,MAAMC;AAAA,EACN,SAASC;AAAA,EACT,OAAOC;AACT;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"item.js","sources":["../../../src/components/Nav/item.tsx"],"sourcesContent":["\"use client\";\nimport React, {\n useState,\n type MouseEvent,\n forwardRef,\n isValidElement,\n useMemo,\n} from \"react\";\nimport { clsx, useCls } from \"../utils\";\nimport { Transition } from \"../Transition\";\nimport { useRender } from \"@base-ui-components/react/use-render\";\n\nexport interface NavItemProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * The icon to display in the nav item\n */\n icon?: React.ReactNode;\n /**\n * Whether the nav item is active\n */\n active?: boolean;\n /**\n * The render prop to render the nav item\n */\n render?: useRender.RenderProp<{\n active: boolean;\n icon?: React.ReactNode;\n }>;\n /**\n * The size of the nav item\n * @default \"medium\"\n */\n size?: \"small\" | \"medium\" | \"large\";\n /**\n * Whether to change the icon weight on active state\n * @default true\n */\n changeIconWeightOnActive?: boolean;\n}\n\n// Define a type for elements that can have a weight prop\ntype ElementWithWeight = React.ReactElement<{ weight?: string }>;\n\n// Type guard to check if an element can accept a weight prop\nconst canHaveWeightProp = (el: React.ReactNode): el is ElementWithWeight => {\n return isValidElement(el);\n};\n\nconst NavItemImpl = <T extends HTMLElement>(\n {\n icon,\n active = false,\n render,\n onClick,\n className,\n children,\n changeIconWeightOnActive = true,\n ...rest\n }: NavItemProps,\n ref: React.Ref<T>\n) => {\n const cls = useCls();\n\n // Apply weight prop only if the element can accept it\n const renderedIcon = useMemo(() => {\n if (!changeIconWeightOnActive || !active || !canHaveWeightProp(icon)) {\n return icon;\n }\n return React.cloneElement(icon, { weight: \"fill\" });\n }, [icon, changeIconWeightOnActive, active]);\n\n return useRender({\n render: render ?? <button className={clsx(cls(\"nav-item\"), className)} />,\n ref,\n props: {\n \"data-active\": active || undefined,\n \"aria-expanded\": rest[\"aria-expanded\"],\n className: undefined,\n ...rest,\n children: (\n <>\n <span className={cls(\"nav-item-icon\")}>{renderedIcon}</span>\n {/* <Transition\n starting=\"opacity-0 max-w-[0]\"\n ending=\"opacity-0 max-w-[0]\"\n className={cls(\"nav-item-transition\")}\n > */}\n <span className={cls(\"nav-item-content\")}>{children}</span>\n {/* </Transition> */}\n </>\n ),\n },\n state: { active, icon },\n });\n};\n\nconst NavItem = forwardRef(NavItemImpl) as <T extends HTMLElement>(\n props: NavItemProps & { ref?: React.Ref<T> }\n) => ReturnType<typeof NavItemImpl>;\n\nexport { NavItem };\n"],"names":["canHaveWeightProp","el","isValidElement","NavItemImpl","icon","active","render","onClick","className","children","changeIconWeightOnActive","rest","ref","cls","useCls","renderedIcon","useMemo","React","useRender","jsx","clsx","jsxs","Fragment","NavItem","forwardRef"],"mappings":";;;;;;AA6CA,MAAMA,IAAoB,CAACC,MAClBC,EAAeD,CAAE,GAGpBE,IAAc,CAClB;AAAA,EACE,MAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,0BAAAC,IAA2B;AAAA,EAC3B,GAAGC;AACL,GACAC,MACG;AACH,QAAMC,IAAMC,EAAO,GAGbC,IAAeC,EAAQ,MACvB,CAACN,KAA4B,CAACL,KAAU,CAACL,EAAkBI,CAAI,IAC1DA,IAEFa,EAAM,aAAab,GAAM,EAAE,QAAQ,QAAQ,GACjD,CAACA,GAAMM,GAA0BL,CAAM,CAAC;AAE3C,SAAOa,EAAU;AAAA,IACf,QAAQZ,KAAU,gBAAAa,EAAC,UAAO,EAAA,WAAWC,EAAKP,EAAI,UAAU,GAAGL,CAAS,EAAG,CAAA;AAAA,IACvE,KAAAI;AAAA,IACA,OAAO;AAAA,MACL,eAAeP,KAAU;AAAA,MACzB,iBAAiBM,EAAK,eAAe;AAAA,MACrC,WAAW;AAAA,MACX,GAAGA;AAAA,MACH,UAEI,gBAAAU,EAAAC,GAAA,EAAA,UAAA;AAAA,QAAA,gBAAAH,EAAC,QAAK,EAAA,WAAWN,EAAI,eAAe,GAAI,UAAaE,GAAA;AAAA,0BAMpD,QAAK,EAAA,WAAWF,EAAI,kBAAkB,GAAI,UAAAJ,EAAS,CAAA;AAAA,MAAA,EAEtD,CAAA;AAAA,IAEJ;AAAA,IACA,OAAO,EAAE,QAAAJ,GAAQ,MAAAD,EAAK;AAAA,EAAA,CACvB;AACH,GAEMmB,IAAUC,EAAWrB,CAAW;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/PopupPanel/component.tsx"],"sourcesContent":["\"use client\";\nimport { useCls, clsx, parseAntdPlacement } from \"../utils\";\nimport { Popover } from \"@base-ui-components/react/popover\";\n\nimport { type PopoverProps } from \"antd/es/popover\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport Flex from \"antd/es/flex\";\nimport { IconButton } from \"../IconButton\";\nimport { X } from \"@bioturing/assets\";\nimport { PopupPanelSize } from \"./constants\";\nimport { useControlledState } from \"../hooks\";\nimport { useResizable, type MoveValues } from \"react-use-resizable\";\nimport mergeRefs from \"merge-refs\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\nexport interface PopupPanelProps\n extends Omit<\n React.ComponentPropsWithRef<\"div\">,\n \"title\" | \"content\" | \"children\"\n > {\n /** The trigger element that opens the popup panel */\n children?: React.ComponentProps<typeof Popover.Trigger>[\"render\"];\n /** Placement of the popup panel relative to its trigger */\n placement?: PopoverProps[\"placement\"];\n /** Whether to open the popup panel on hover */\n openOnHover?: boolean;\n /** Controls the open state of the popup panel */\n open?: boolean;\n /** Callback fired when the open state changes */\n onOpenChange?: Popover.Root.Props[\"onOpenChange\"];\n /** Content to display inside the popup panel */\n content?: React.ReactNode;\n /** Title text or element to display in the panel header */\n title?: React.ReactNode;\n /** The event that triggers the popup panel */\n /**\n * @default \"click\"\n */\n trigger?: \"click\" | \"hover\";\n /** Custom anchor element for positioning the panel */\n anchor?: Popover.Positioner.Props[\"anchor\"];\n /** Content to display before the close button */\n beforeCloseButton?: React.ReactNode;\n /** Content to display after the close button */\n afterCloseButton?: React.ReactNode;\n /** Content to display after the title */\n afterTitle?: React.ReactNode;\n /**\n * Predefined sizes for the popup panel\n * - xsmall: 320px\n * - small: 400px\n * - medium: 480px (default)\n * - large: 640px\n * - xlarge: 840px\n * @default \"medium\" for default type, \"xsmall\" for other types\n */\n size?: keyof typeof PopupPanelSize;\n /**\n * Footer content for the popup panel\n * Can be a React node or a function that returns a React node\n */\n footer?:\n | React.ReactNode\n | ((props: { close: () => void }) => React.ReactNode);\n /**\n * Whether the panel should be open by default when uncontrolled\n * @default false\n */\n defaultOpen?: boolean;\n /**\n * Whether the panel should be resizable\n * @default false\n */\n resizable?: boolean;\n /**\n * Custom class names for different parts of the popup panel\n * @default {}\n */\n classNames?: {\n root?: string;\n trigger?: string;\n popup?: string;\n header?: string;\n title?: string;\n content?: string;\n footer?: string;\n resizeHandle?: string;\n };\n /**\n * Whether to close the panel when clicking outside\n * @default true\n */\n closeOnClickOutside?: boolean;\n /**\n * Whether to use modal mode\n * @default false\n */\n modal?: Popover.Root.Props[\"modal\"];\n}\n\nexport const PopupPanel = ({\n children,\n placement,\n openOnHover = false,\n open: outsideOpen,\n onOpenChange: outsideOnOpenChange,\n content,\n title,\n trigger = \"click\",\n className,\n anchor,\n beforeCloseButton,\n afterCloseButton,\n afterTitle,\n size = \"medium\",\n footer,\n defaultOpen,\n resizable = false,\n classNames,\n modal = false,\n closeOnClickOutside = true,\n}: PopupPanelProps) => {\n // Use controlled state with proper initialization to prevent switching between controlled/uncontrolled\n const [open, setOpen] = useControlledState(\n outsideOpen,\n outsideOnOpenChange,\n defaultOpen ?? false // Always provide a default value to prevent undefined\n );\n\n const cls = useCls();\n const headlessUIPlacement = parseAntdPlacement(placement);\n // We don't need triggerRef since we're using callbackRef for the popup\n const [popupRef, setPopupRef] = useState<HTMLDivElement | null>(null);\n const [width, setWidth] = useState<number>();\n const [height, setHeight] = useState<number>();\n const callbackRef = useCallback((node: HTMLDivElement) => {\n setPopupRef(node);\n }, []);\n useEffect(() => {\n if (!popupRef) return;\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setWidth(entry.contentRect.width);\n setHeight(entry.contentRect.height);\n }\n });\n observer.observe(popupRef);\n return () => {\n observer.disconnect();\n };\n }, [popupRef]);\n\n const defaultCloseIcon = useMemo(() => <X size={16} />, []);\n const renderTitle = useCallback(() => {\n return (\n <div className={clsx(cls(\"popup-panel-header\"), classNames?.header)}>\n <Flex\n align=\"center\"\n gap={8}\n className={cls(\"popup-panel-title-wrapper\")}\n >\n <Popover.Title\n render={\n <div className={clsx(cls(\"grow\", \"truncate\"), classNames?.title)}>\n {title}\n </div>\n }\n ></Popover.Title>\n <div className=\"flex items-center gap-2\">\n {beforeCloseButton}\n <Popover.Close\n render={<IconButton>{defaultCloseIcon}</IconButton>}\n />\n {afterCloseButton}\n </div>\n </Flex>\n {afterTitle ? afterTitle : null}\n </div>\n );\n }, [\n afterCloseButton,\n afterTitle,\n beforeCloseButton,\n cls,\n classNames?.header,\n classNames?.title,\n defaultCloseIcon,\n title,\n ]);\n const [resizing, setResizing] = useState(false);\n const { getRootProps, getHandleProps, rootRef } = useResizable({\n initialWidth: width,\n initialHeight: height,\n onDragStart: () => setResizing(true),\n onDragEnd: () => setResizing(false),\n });\n useEffect(() => {\n if (resizing) {\n document.body.style.userSelect = \"none\";\n } else {\n document.body.style.userSelect = \"\";\n }\n }, [resizing]);\n const { ref: rootRefProp, ...rootPropsWithoutRef } = getRootProps();\n // Handle reverse handle change for vertical resizing\n // Currently not used but kept for future implementation\n // const _onReverseHandleChangeVertical = (\n // parent: React.RefObject<HTMLDivElement>,\n // values: MoveValues\n // ) => {\n // if (!parent.current) return;\n // const { heightDiff } = values;\n // parent.current.style.top = `${\n // parseInt(parent.current.style.top || \"0\") - heightDiff\n // }px`;\n // };\n\n // Handle reverse handle change\n const onReverseHandleChangeHorizontal = (\n parent: React.RefObject<HTMLDivElement>,\n values: MoveValues\n ) => {\n if (!parent.current) return;\n const { widthDiff } = values;\n parent.current.style.left = `${\n parseInt(parent.current.style.left || \"0\") - widthDiff\n }px`;\n };\n\n return (\n <Popover.Root\n openOnHover={trigger === \"hover\" ? true : openOnHover}\n open={open}\n onOpenChange={(open, event, reason) => {\n if (reason === \"outside-press\" && !closeOnClickOutside) return;\n setOpen(open, event, reason);\n }}\n modal={modal}\n >\n <Popover.Trigger\n render={children}\n className={clsx(cls(\"popup-panel-trigger\"), classNames?.trigger)}\n ></Popover.Trigger>\n <Popover.Portal>\n <Popover.Positioner\n className={clsx(cls(\"popup-panel-root\"), classNames?.root)}\n side={headlessUIPlacement.placement}\n align={headlessUIPlacement.align}\n sideOffset={4}\n anchor={anchor}\n style={\n {\n \"--size-width\": size ? PopupPanelSize[size] : undefined,\n } as React.CSSProperties\n }\n >\n <Popover.Popup\n className={clsx(\n cls(\"popup-panel\"),\n cls(`popup-panel-size-${size}`),\n className,\n classNames?.popup\n )}\n ref={mergeRefs(rootRefProp, callbackRef)}\n {...rootPropsWithoutRef}\n {...(resizing ? { \"data-resizing\": true } : {})}\n >\n {/* <div ref={popupRef}> */}\n {title && renderTitle()}\n <div\n className={clsx(cls(\"popup-panel-content\"), classNames?.content)}\n >\n <div className={cls(\"popup-panel-content-inner\")}>{content}</div>\n </div>\n {footer && (\n <div\n className={clsx(cls(\"popup-panel-footer\"), classNames?.footer)}\n >\n {typeof footer === \"function\"\n ? footer({ close: () => setOpen(false) })\n : footer}\n </div>\n )}\n {resizable && (\n <>\n <div\n className={clsx(\n cls(\"popup-panel-resize-handle\"),\n classNames?.resizeHandle\n )}\n data-placement=\"bottom-left\"\n {...getHandleProps({\n lockHorizontal: true,\n })}\n />\n <div\n className={clsx(\n cls(\"popup-panel-resize-handle\"),\n classNames?.resizeHandle\n )}\n data-placement=\"top-left\"\n {...getHandleProps({\n reverse: true,\n lockVertical: true,\n onResize: (values) =>\n onReverseHandleChangeHorizontal(rootRef, values),\n })}\n />\n <div\n className={clsx(\n cls(\"popup-panel-resize-handle\"),\n classNames?.resizeHandle\n )}\n data-placement=\"top-right\"\n {...getHandleProps({\n lockVertical: true,\n })}\n />\n </>\n )}\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n </Popover.Root>\n );\n};\n"],"names":["PopupPanel","children","placement","openOnHover","outsideOpen","outsideOnOpenChange","content","title","trigger","className","anchor","beforeCloseButton","afterCloseButton","afterTitle","size","footer","defaultOpen","resizable","classNames","modal","closeOnClickOutside","open","setOpen","useControlledState","cls","useCls","headlessUIPlacement","parseAntdPlacement","popupRef","setPopupRef","useState","width","setWidth","height","setHeight","callbackRef","useCallback","node","useEffect","observer","entries","entry","defaultCloseIcon","useMemo","jsx","X","renderTitle","jsxs","clsx","Flex","Popover","IconButton","resizing","setResizing","getRootProps","getHandleProps","rootRef","useResizable","rootRefProp","rootPropsWithoutRef","onReverseHandleChangeHorizontal","parent","values","widthDiff","event","reason","PopupPanelSize","mergeRefs","Fragment"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../../src/components/PopupPanel/constants.ts"],"sourcesContent":["// Size map for predefined modal sizes\nexport enum PopupPanelSize {\n xsmall = \"320px\",\n small = \"400px\",\n medium = \"480px\",\n large = \"640px\",\n xlarge = \"840px\",\n}\n"],"names":["PopupPanelSize"],"mappings":"AACY,IAAAA,sBAAAA,OACVA,EAAA,SAAS,SACTA,EAAA,QAAQ,SACRA,EAAA,SAAS,SACTA,EAAA,QAAQ,SACRA,EAAA,SAAS,SALCA,IAAAA,KAAA,CAAA,CAAA;"}
|