@bioturing/components 0.15.4 → 0.16.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/component.js +16 -11
- package/dist/components/Badge/component.js.map +1 -1
- package/dist/components/Breadcrumb/component.js +4 -3
- package/dist/components/Breadcrumb/component.js.map +1 -1
- package/dist/components/Breadcrumb/style.css +1 -1
- package/dist/components/Breadcrumb/useItemRender.js +17 -16
- package/dist/components/Breadcrumb/useItemRender.js.map +1 -1
- package/dist/components/Button/component.js +30 -3
- package/dist/components/Button/component.js.map +1 -1
- package/dist/components/Button/style.css +1 -1
- package/dist/components/CodeBlock/component.js +7 -6
- package/dist/components/CodeBlock/component.js.map +1 -1
- package/dist/components/CodeBlock/style.css +1 -1
- package/dist/components/Collapse/component.js +35 -0
- package/dist/components/Collapse/component.js.map +1 -0
- package/dist/components/Collapse/style.css +1 -0
- package/dist/components/DSRoot/component.js +8 -7
- package/dist/components/DSRoot/component.js.map +1 -1
- package/dist/components/DSRoot/context.js +5 -4
- package/dist/components/DSRoot/context.js.map +1 -1
- package/dist/components/DropdownMenu/component.js +1 -0
- package/dist/components/DropdownMenu/component.js.map +1 -1
- package/dist/components/Field/component.js +13 -12
- package/dist/components/Field/component.js.map +1 -1
- package/dist/components/Form/component.js +4 -3
- package/dist/components/Form/component.js.map +1 -1
- package/dist/components/Form/item.js +1 -0
- package/dist/components/Form/item.js.map +1 -1
- package/dist/components/IconButton/component.js +1 -0
- package/dist/components/IconButton/component.js.map +1 -1
- package/dist/components/Modal/Modal.js +9 -8
- package/dist/components/Modal/Modal.js.map +1 -1
- package/dist/components/Modal/ModalProvider.js +1 -0
- package/dist/components/Modal/ModalProvider.js.map +1 -1
- package/dist/components/Modal/index.js +11 -10
- package/dist/components/Modal/index.js.map +1 -1
- package/dist/components/Popover/component.js +6 -5
- package/dist/components/Popover/component.js.map +1 -1
- package/dist/components/PopupPanel/component.js +74 -68
- package/dist/components/PopupPanel/component.js.map +1 -1
- package/dist/components/ScrollArea/component.js +10 -9
- package/dist/components/ScrollArea/component.js.map +1 -1
- package/dist/components/Slider/component.js +9 -8
- package/dist/components/Slider/component.js.map +1 -1
- package/dist/components/Splitter/component.js +12 -11
- package/dist/components/Splitter/component.js.map +1 -1
- package/dist/components/Stack/Stack.js.map +1 -1
- package/dist/components/Stack/StackChild.js +26 -23
- package/dist/components/Stack/StackChild.js.map +1 -1
- package/dist/components/Stack/style.css +1 -1
- package/dist/components/Table/component.js +84 -72
- package/dist/components/Table/component.js.map +1 -1
- package/dist/components/Table/style.css +1 -1
- package/dist/components/Tag/component.js +6 -5
- package/dist/components/Tag/component.js.map +1 -1
- package/dist/components/ThemeProvider/component.js +15 -14
- package/dist/components/ThemeProvider/component.js.map +1 -1
- package/dist/components/Toast/component.js +17 -16
- package/dist/components/Toast/component.js.map +1 -1
- package/dist/components/Toast/function.js +5 -4
- package/dist/components/Toast/function.js.map +1 -1
- package/dist/components/Tooltip/component.js +13 -12
- package/dist/components/Tooltip/component.js.map +1 -1
- package/dist/components/Tour/component.js +5 -4
- package/dist/components/Tour/component.js.map +1 -1
- package/dist/components/Transition/component.js +45 -32
- package/dist/components/Transition/component.js.map +1 -1
- package/dist/components/Tree/components.js +9 -8
- package/dist/components/Tree/components.js.map +1 -1
- package/dist/components/Tree/helpers.js +1 -0
- package/dist/components/Tree/helpers.js.map +1 -1
- package/dist/components/Tree/useTreeCommon.js +12 -11
- package/dist/components/Tree/useTreeCommon.js.map +1 -1
- package/dist/components/Truncate/component.js +1 -0
- package/dist/components/Truncate/component.js.map +1 -1
- package/dist/components/Truncate/style.css +1 -1
- package/dist/components/Upload/component.js +13 -11
- package/dist/components/Upload/component.js.map +1 -1
- package/dist/components/Upload/dragger.js +3 -2
- package/dist/components/Upload/dragger.js.map +1 -1
- package/dist/components/Upload/hooks.js +3 -2
- package/dist/components/Upload/hooks.js.map +1 -1
- package/dist/components/Upload/style.css +1 -0
- package/dist/components/VerticalCollapsiblePanel/component.js +35 -32
- package/dist/components/VerticalCollapsiblePanel/component.js.map +1 -1
- package/dist/components/hooks/antd.js +4 -3
- package/dist/components/hooks/antd.js.map +1 -1
- package/dist/components/hooks/base-ui.js +34 -28
- package/dist/components/hooks/base-ui.js.map +1 -1
- package/dist/components/hooks/useControlledState.js +17 -9
- package/dist/components/hooks/useControlledState.js.map +1 -1
- package/dist/components/utils/WithAntdTokens.js +14 -13
- package/dist/components/utils/WithAntdTokens.js.map +1 -1
- package/dist/components/utils/antdUtils.js +1 -0
- package/dist/components/utils/antdUtils.js.map +1 -1
- package/dist/index.d.ts +131 -77
- package/dist/index.js +166 -157
- package/dist/index.js.map +1 -1
- package/dist/metadata.js +81 -87
- package/dist/metadata.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/Form/component.tsx"],"sourcesContent":["\"use client\";\nimport ErrorList from \"antd/es/form/ErrorList\";\nimport {\n FormProps as AntdFormProps,\n default as AntdInternalForm,\n useForm,\n useWatch,\n} from \"antd/es/form/Form\";\nimport FormList from \"antd/es/form/FormList\";\nimport { FormProvider } from \"antd/es/form/context\";\nimport useFormInstance from \"antd/es/form/hooks/useFormInstance\";\nimport * as React from \"react\";\nimport { FormItem, type FormItemProps } from \"./item\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\nexport interface FormProps<Values = any> extends AntdFormProps<Values> {}\n\ninterface InternalFormProps<Values = any>\n extends React.ComponentProps<typeof AntdInternalForm<Values>> {}\n\nconst InternalForm = <Values = any,>({\n ...rest\n}: InternalFormProps<Values>) => {\n return <AntdInternalForm {...rest} />;\n};\n\nexport const Form = Object.assign(InternalForm, {\n useForm,\n useFormInstance,\n useWatch,\n Item: FormItem,\n List: FormList,\n ErrorList,\n Provider: FormProvider,\n});\n\nexport type { FormItemProps };\n"],"names":["InternalForm","rest","jsx","AntdInternalForm","Form","useForm","useFormInstance","useWatch","FormItem","FormList","ErrorList","FormProvider"],"mappings":"
|
|
1
|
+
{"version":3,"file":"component.js","sources":["../../../src/components/Form/component.tsx"],"sourcesContent":["\"use client\";\nimport ErrorList from \"antd/es/form/ErrorList\";\nimport {\n FormProps as AntdFormProps,\n default as AntdInternalForm,\n useForm,\n useWatch,\n} from \"antd/es/form/Form\";\nimport FormList from \"antd/es/form/FormList\";\nimport { FormProvider } from \"antd/es/form/context\";\nimport useFormInstance from \"antd/es/form/hooks/useFormInstance\";\nimport * as React from \"react\";\nimport { FormItem, type FormItemProps } from \"./item\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\nexport interface FormProps<Values = any> extends AntdFormProps<Values> {}\n\ninterface InternalFormProps<Values = any>\n extends React.ComponentProps<typeof AntdInternalForm<Values>> {}\n\nconst InternalForm = <Values = any,>({\n ...rest\n}: InternalFormProps<Values>) => {\n return <AntdInternalForm {...rest} />;\n};\n\nexport const Form = Object.assign(InternalForm, {\n useForm,\n useFormInstance,\n useWatch,\n Item: FormItem,\n List: FormList,\n ErrorList,\n Provider: FormProvider,\n});\n\nexport type { FormItemProps };\n"],"names":["InternalForm","rest","jsx","AntdInternalForm","Form","useForm","useFormInstance","useWatch","FormItem","FormList","ErrorList","FormProvider"],"mappings":";;;;;;;;;AAsBA,MAAMA,IAAe,CAAgB;AAAA,EACnC,GAAGC;AACL,MACS,gBAAAC,EAACC,GAAkB,EAAA,GAAGF,EAAM,CAAA,GAGxBG,IAAO,OAAO,OAAOJ,GAAc;AAAA,EAC9C,SAAAK;AAAA,EACA,iBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,MAAMC;AAAA,EACN,MAAMC;AAAA,EACN,WAAAC;AAAA,EACA,UAAUC;AACZ,CAAC;"}
|
|
@@ -1 +1 @@
|
|
|
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":"
|
|
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 +1 @@
|
|
|
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 } from \"antd\";\nimport { useCls, useAntdCssVarClassname } from \"../utils\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\n// Base props without href/as handling\ntype IconButtonBaseProps = {\n label?: React.ReactNode;\n size?: \"small\" | \"medium\";\n negativeMargin?: boolean;\n tooltipProps?: React.ComponentProps<typeof Tooltip>;\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 props: IconButtonProps<E> & PolymorphicComponentProps<E>,\n ref: Ref<Element>\n) => {\n const {\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 ...rest\n } = props;\n const cls = useCls();\n const antdCssVarClassname = useAntdCssVarClassname();\n const buttonClasses = [\n cls(\"icon-button\"),\n cls(`icon-button-${size}`),\n cls(negativeMargin ? \"icon-button-negative-margin\" : \"\"),\n antdCssVarClassname,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n // Use a type assertion for the component to avoid TypeScript errors\n const Component = (as || (href ? \"a\" : \"button\")) as ElementType;\n\n // Collect anchor-specific props only if they're defined\n const anchorProps =\n Component === \"a\"\n ? {\n ...(target !== undefined && { target }),\n ...(rel !== undefined && { rel }),\n ...(download !== undefined && { download }),\n ...(hrefLang !== undefined && { hrefLang }),\n ...(referrerPolicy !== undefined && { referrerPolicy }),\n }\n : {};\n\n const elementProps = {\n ref,\n className: buttonClasses,\n ...(Component === \"button\" && { type: \"button\" }),\n ...(href && { href }),\n ...anchorProps,\n ...rest,\n };\n\n const element = <Component {...elementProps}>{children}</Component>;\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\nexport default IconButton;\n"],"names":["IconButtonImpl","props","ref","label","size","negativeMargin","children","className","tooltipProps","as","href","target","rel","download","hrefLang","referrerPolicy","rest","cls","useCls","antdCssVarClassname","useAntdCssVarClassname","buttonClasses","Component","anchorProps","elementProps","element","jsx","Tooltip","IconButton","forwardRef"],"mappings":"
|
|
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 } from \"antd\";\nimport { useCls, useAntdCssVarClassname } from \"../utils\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\n// Base props without href/as handling\ntype IconButtonBaseProps = {\n label?: React.ReactNode;\n size?: \"small\" | \"medium\";\n negativeMargin?: boolean;\n tooltipProps?: React.ComponentProps<typeof Tooltip>;\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 props: IconButtonProps<E> & PolymorphicComponentProps<E>,\n ref: Ref<Element>\n) => {\n const {\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 ...rest\n } = props;\n const cls = useCls();\n const antdCssVarClassname = useAntdCssVarClassname();\n const buttonClasses = [\n cls(\"icon-button\"),\n cls(`icon-button-${size}`),\n cls(negativeMargin ? \"icon-button-negative-margin\" : \"\"),\n antdCssVarClassname,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n // Use a type assertion for the component to avoid TypeScript errors\n const Component = (as || (href ? \"a\" : \"button\")) as ElementType;\n\n // Collect anchor-specific props only if they're defined\n const anchorProps =\n Component === \"a\"\n ? {\n ...(target !== undefined && { target }),\n ...(rel !== undefined && { rel }),\n ...(download !== undefined && { download }),\n ...(hrefLang !== undefined && { hrefLang }),\n ...(referrerPolicy !== undefined && { referrerPolicy }),\n }\n : {};\n\n const elementProps = {\n ref,\n className: buttonClasses,\n ...(Component === \"button\" && { type: \"button\" }),\n ...(href && { href }),\n ...anchorProps,\n ...rest,\n };\n\n const element = <Component {...elementProps}>{children}</Component>;\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\nexport default IconButton;\n"],"names":["IconButtonImpl","props","ref","label","size","negativeMargin","children","className","tooltipProps","as","href","target","rel","download","hrefLang","referrerPolicy","rest","cls","useCls","antdCssVarClassname","useAntdCssVarClassname","buttonClasses","Component","anchorProps","elementProps","element","jsx","Tooltip","IconButton","forwardRef"],"mappings":";;;;;;AAwEA,MAAMA,IAAiB,CACrBC,GACAC,MACG;AACG,QAAA;AAAA,IACJ,OAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,gBAAAC,IAAiB;AAAA,IACjB,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,cAAAC,IAAe,CAAC;AAAA,IAChB,IAAAC;AAAA,IACA,MAAAC;AAAA;AAAA,IAEA,QAAAC;AAAA,IACA,KAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACDf,GACEgB,IAAMC,EAAO,GACbC,IAAsBC,EAAuB,GAC7CC,IAAgB;AAAA,IACpBJ,EAAI,aAAa;AAAA,IACjBA,EAAI,eAAeb,CAAI,EAAE;AAAA,IACzBa,EAAIZ,IAAiB,gCAAgC,EAAE;AAAA,IACvDc;AAAA,IACAZ;AAAA,EAEC,EAAA,OAAO,OAAO,EACd,KAAK,GAAG,GAGLe,IAAab,MAAOC,IAAO,MAAM,WAGjCa,IACJD,MAAc,MACV;AAAA,IACE,GAAIX,MAAW,UAAa,EAAE,QAAAA,EAAO;AAAA,IACrC,GAAIC,MAAQ,UAAa,EAAE,KAAAA,EAAI;AAAA,IAC/B,GAAIC,MAAa,UAAa,EAAE,UAAAA,EAAS;AAAA,IACzC,GAAIC,MAAa,UAAa,EAAE,UAAAA,EAAS;AAAA,IACzC,GAAIC,MAAmB,UAAa,EAAE,gBAAAA,EAAe;AAAA,EAAA,IAEvD,CAAC,GAEDS,IAAe;AAAA,IACnB,KAAAtB;AAAA,IACA,WAAWmB;AAAA,IACX,GAAIC,MAAc,YAAY,EAAE,MAAM,SAAS;AAAA,IAC/C,GAAIZ,KAAQ,EAAE,MAAAA,EAAK;AAAA,IACnB,GAAGa;AAAA,IACH,GAAGP;AAAA,EACL,GAEMS,IAAU,gBAAAC,EAACJ,GAAW,EAAA,GAAGE,GAAe,UAAAlB,GAAS;AAEhD,SAAAH,IACJ,gBAAAuB,EAAAC,GAAA,EAAQ,OAAOxB,GAAO,OAAO,IAAQ,GAAGK,GACtC,UAAAiB,EAAA,CACH,IAEAA;AAEJ,GAGaG,IAAaC,EAAW7B,CAAc;"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { jsx as e, jsxs as m, Fragment as N } from "react/jsx-runtime";
|
|
2
3
|
import me from "antd/es/modal";
|
|
3
4
|
import { XIcon as fe } from "@bioturing/assets";
|
|
@@ -5,8 +6,8 @@ import { useState as R, useRef as ue, useCallback as pe, useEffect as he } from
|
|
|
5
6
|
import { ModalContextProvider as be } from "antd/es/modal/context";
|
|
6
7
|
import L from "antd/es/modal/components/NormalCancelBtn";
|
|
7
8
|
import C from "antd/es/modal/components/NormalOkBtn";
|
|
8
|
-
import { getConfirmLocale as
|
|
9
|
-
import { useLocale as
|
|
9
|
+
import { getConfirmLocale as ge } from "antd/es/modal/locale";
|
|
10
|
+
import { useLocale as ve } from "antd/es/locale";
|
|
10
11
|
import { ModalSize as f } from "./constants.js";
|
|
11
12
|
import { Stack as h } from "../Stack/index.js";
|
|
12
13
|
import { Truncate as ye } from "../Truncate/component.js";
|
|
@@ -14,10 +15,10 @@ import { IconButton as we } from "../IconButton/component.js";
|
|
|
14
15
|
import { useCls as xe } from "../utils/antdUtils.js";
|
|
15
16
|
const We = ({
|
|
16
17
|
open: b,
|
|
17
|
-
closeIcon:
|
|
18
|
+
closeIcon: g,
|
|
18
19
|
children: j,
|
|
19
20
|
size: E,
|
|
20
|
-
footer:
|
|
21
|
+
footer: v,
|
|
21
22
|
width: F,
|
|
22
23
|
style: P,
|
|
23
24
|
styles: c,
|
|
@@ -46,7 +47,7 @@ const We = ({
|
|
|
46
47
|
bodyScrollable: Y = !0,
|
|
47
48
|
...Z
|
|
48
49
|
}) => {
|
|
49
|
-
const _ =
|
|
50
|
+
const _ = g === void 0 ? /* @__PURE__ */ e(fe, { size: 16, weight: "bold" }) : g, t = E || (Q === "default" ? "medium" : "xsmall"), ee = F || f[t], oe = {
|
|
50
51
|
"--ds-modal-bg": `var(--ds-color-bg-${V || (t && t in f && parseInt(f[t]) <= parseInt(f.medium) ? "elevated" : "container")})`,
|
|
51
52
|
...P,
|
|
52
53
|
...t === "fullscreen" ? { top: 0, maxWidth: "100%", height: "100%" } : {}
|
|
@@ -76,7 +77,7 @@ const We = ({
|
|
|
76
77
|
he(() => () => {
|
|
77
78
|
d.current && (d.current.disconnect(), d.current = null);
|
|
78
79
|
}, []);
|
|
79
|
-
const [s] =
|
|
80
|
+
const [s] = ve("Modal", ge()), le = y || (s == null ? void 0 : s.okText), se = x || (s == null ? void 0 : s.cancelText), S = {
|
|
80
81
|
loading: A,
|
|
81
82
|
...$
|
|
82
83
|
}, O = {
|
|
@@ -110,7 +111,7 @@ const We = ({
|
|
|
110
111
|
title: /* @__PURE__ */ m(N, { children: [
|
|
111
112
|
/* @__PURE__ */ m(h, { align: "center", gap: 8, className: a("modal-title-wrapper"), children: [
|
|
112
113
|
/* @__PURE__ */ e(h.Child, { grow: !0, children: typeof u == "string" ? /* @__PURE__ */ e(ye, { children: u }) : u }),
|
|
113
|
-
/* @__PURE__ */ m(h.Child, { stack: !0, hug: !0, align: "center", children: [
|
|
114
|
+
/* @__PURE__ */ m(h.Child, { stack: !0, hug: !0, align: "center", gap: 8, children: [
|
|
114
115
|
D,
|
|
115
116
|
/* @__PURE__ */ e(
|
|
116
117
|
we,
|
|
@@ -148,7 +149,7 @@ const We = ({
|
|
|
148
149
|
cancelText: x,
|
|
149
150
|
okType: "primary",
|
|
150
151
|
confirmLoading: w,
|
|
151
|
-
footer: typeof
|
|
152
|
+
footer: typeof v > "u" ? z && k ? null : ce : v,
|
|
152
153
|
centered: K,
|
|
153
154
|
...Z,
|
|
154
155
|
children: j
|
|
@@ -1 +1 @@
|
|
|
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\">\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":"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"}
|
|
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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalProvider.js","sources":["../../../src/components/Modal/ModalProvider.tsx"],"sourcesContent":["\"use client\";\nimport React, { useEffect, useState } from \"react\";\nimport { Modal } from \"./Modal\";\nimport { modalManager } from \"./ModalService\";\nimport type { ModalConfig, ModalEvent } from \"./ModalService\";\n\nexport interface ModalProviderProps {\n children?: React.ReactNode;\n}\n\nexport const ModalProvider: React.FC<ModalProviderProps> = ({ children }) => {\n const [modals, setModals] = useState<ModalConfig[]>([]);\n\n useEffect(() => {\n const unsubscribe = modalManager.subscribe((event: ModalEvent) => {\n setModals((prev) => {\n switch (event.type) {\n case \"add\":\n return [...prev, event.payload];\n case \"update\":\n return prev.map((m) => {\n if (m.id === event.payload.id) {\n const cfg = event.payload.config;\n const merged =\n typeof cfg === \"function\" ? cfg(m) : { ...m, ...cfg };\n return { ...m, ...merged };\n }\n return m;\n });\n case \"destroy\":\n return prev.filter((m) => m.id !== event.payload.id);\n case \"destroyAll\":\n return [];\n default:\n return prev;\n }\n });\n });\n return unsubscribe;\n }, []);\n\n return (\n <>\n {children}\n {modals.map((modal) => {\n const {\n id,\n content,\n children,\n onOk,\n onCancel,\n trigger,\n ...modalProps\n } = modal;\n return (\n <Modal\n {...modalProps}\n key={id}\n // control visibility for transitions\n open={modalProps.open}\n onOk={(e) => {\n onOk?.(e);\n modalManager.emit({\n type: \"update\",\n payload: { id, config: { open: false } },\n });\n }}\n onCancel={(e) => {\n onCancel?.(e);\n modalManager.emit({\n type: \"update\",\n payload: { id, config: { open: false } },\n });\n }}\n afterClose={() => {\n // destroy and restore focus\n modalManager.emit({ type: \"destroy\", payload: { id } });\n if (trigger instanceof HTMLElement) {\n trigger.focus();\n }\n }}\n >\n {content || children}\n </Modal>\n );\n })}\n </>\n );\n};\n"],"names":["ModalProvider","children","modals","setModals","useState","useEffect","modalManager","event","prev","m","cfg","merged","jsxs","Fragment","modal","id","content","onOk","onCancel","trigger","modalProps","createElement","Modal","e"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ModalProvider.js","sources":["../../../src/components/Modal/ModalProvider.tsx"],"sourcesContent":["\"use client\";\nimport React, { useEffect, useState } from \"react\";\nimport { Modal } from \"./Modal\";\nimport { modalManager } from \"./ModalService\";\nimport type { ModalConfig, ModalEvent } from \"./ModalService\";\n\nexport interface ModalProviderProps {\n children?: React.ReactNode;\n}\n\nexport const ModalProvider: React.FC<ModalProviderProps> = ({ children }) => {\n const [modals, setModals] = useState<ModalConfig[]>([]);\n\n useEffect(() => {\n const unsubscribe = modalManager.subscribe((event: ModalEvent) => {\n setModals((prev) => {\n switch (event.type) {\n case \"add\":\n return [...prev, event.payload];\n case \"update\":\n return prev.map((m) => {\n if (m.id === event.payload.id) {\n const cfg = event.payload.config;\n const merged =\n typeof cfg === \"function\" ? cfg(m) : { ...m, ...cfg };\n return { ...m, ...merged };\n }\n return m;\n });\n case \"destroy\":\n return prev.filter((m) => m.id !== event.payload.id);\n case \"destroyAll\":\n return [];\n default:\n return prev;\n }\n });\n });\n return unsubscribe;\n }, []);\n\n return (\n <>\n {children}\n {modals.map((modal) => {\n const {\n id,\n content,\n children,\n onOk,\n onCancel,\n trigger,\n ...modalProps\n } = modal;\n return (\n <Modal\n {...modalProps}\n key={id}\n // control visibility for transitions\n open={modalProps.open}\n onOk={(e) => {\n onOk?.(e);\n modalManager.emit({\n type: \"update\",\n payload: { id, config: { open: false } },\n });\n }}\n onCancel={(e) => {\n onCancel?.(e);\n modalManager.emit({\n type: \"update\",\n payload: { id, config: { open: false } },\n });\n }}\n afterClose={() => {\n // destroy and restore focus\n modalManager.emit({ type: \"destroy\", payload: { id } });\n if (trigger instanceof HTMLElement) {\n trigger.focus();\n }\n }}\n >\n {content || children}\n </Modal>\n );\n })}\n </>\n );\n};\n"],"names":["ModalProvider","children","modals","setModals","useState","useEffect","modalManager","event","prev","m","cfg","merged","jsxs","Fragment","modal","id","content","onOk","onCancel","trigger","modalProps","createElement","Modal","e"],"mappings":";;;;;AAUO,MAAMA,IAA8C,CAAC,EAAE,UAAAC,QAAe;AAC3E,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAwB,CAAA,CAAE;AAEtD,SAAAC,EAAU,MACYC,EAAa,UAAU,CAACC,MAAsB;AAChE,IAAAJ,EAAU,CAACK,MAAS;AAClB,cAAQD,EAAM,MAAM;AAAA,QAClB,KAAK;AACH,iBAAO,CAAC,GAAGC,GAAMD,EAAM,OAAO;AAAA,QAChC,KAAK;AACI,iBAAAC,EAAK,IAAI,CAACC,MAAM;AACrB,gBAAIA,EAAE,OAAOF,EAAM,QAAQ,IAAI;AACvB,oBAAAG,IAAMH,EAAM,QAAQ,QACpBI,IACJ,OAAOD,KAAQ,aAAaA,EAAID,CAAC,IAAI,EAAE,GAAGA,GAAG,GAAGC,EAAI;AACtD,qBAAO,EAAE,GAAGD,GAAG,GAAGE,EAAO;AAAA,YAAA;AAEpB,mBAAAF;AAAA,UAAA,CACR;AAAA,QACH,KAAK;AACI,iBAAAD,EAAK,OAAO,CAACC,MAAMA,EAAE,OAAOF,EAAM,QAAQ,EAAE;AAAA,QACrD,KAAK;AACH,iBAAO,CAAC;AAAA,QACV;AACS,iBAAAC;AAAA,MAAA;AAAA,IACX,CACD;AAAA,EAAA,CACF,GAEA,EAAE,GAIA,gBAAAI,EAAAC,GAAA,EAAA,UAAA;AAAA,IAAAZ;AAAA,IACAC,EAAO,IAAI,CAACY,MAAU;AACf,YAAA;AAAA,QACJ,IAAAC;AAAA,QACA,SAAAC;AAAA,QACA,UAAAf;AAAAA,QACA,MAAAgB;AAAA,QACA,UAAAC;AAAA,QACA,SAAAC;AAAA,QACA,GAAGC;AAAA,MAAA,IACDN;AAEF,aAAA,gBAAAO;AAAA,QAACC;AAAA,QAAA;AAAA,UACE,GAAGF;AAAA,UACJ,KAAKL;AAAA,UAEL,MAAMK,EAAW;AAAA,UACjB,MAAM,CAACG,MAAM;AACX,YAAAN,KAAA,QAAAA,EAAOM,IACPjB,EAAa,KAAK;AAAA,cAChB,MAAM;AAAA,cACN,SAAS,EAAE,IAAAS,GAAI,QAAQ,EAAE,MAAM,GAAQ,EAAA;AAAA,YAAA,CACxC;AAAA,UACH;AAAA,UACA,UAAU,CAACQ,MAAM;AACf,YAAAL,KAAA,QAAAA,EAAWK,IACXjB,EAAa,KAAK;AAAA,cAChB,MAAM;AAAA,cACN,SAAS,EAAE,IAAAS,GAAI,QAAQ,EAAE,MAAM,GAAQ,EAAA;AAAA,YAAA,CACxC;AAAA,UACH;AAAA,UACA,YAAY,MAAM;AAEH,YAAAT,EAAA,KAAK,EAAE,MAAM,WAAW,SAAS,EAAE,IAAAS,EAAA,GAAM,GAClDI,aAAmB,eACrBA,EAAQ,MAAM;AAAA,UAChB;AAAA,QACF;AAAA,QAECH,KAAWf;AAAAA,MACd;AAAA,IAEH,CAAA;AAAA,EAAA,GACH;AAEJ;"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import o from "antd/es/app/useApp";
|
|
2
3
|
import { Modal as r } from "./Modal.js";
|
|
3
|
-
import { destroyAll as e, confirm as i, warning as
|
|
4
|
-
import { ModalProvider as
|
|
4
|
+
import { destroyAll as e, confirm as i, warning as s, error as t, success as m, info as n, open as a } from "./functions.js";
|
|
5
|
+
import { ModalProvider as d } from "./ModalProvider.js";
|
|
5
6
|
import './style.css';/* empty css */
|
|
6
|
-
const
|
|
7
|
-
Provider:
|
|
8
|
-
open:
|
|
9
|
-
info:
|
|
10
|
-
success:
|
|
11
|
-
error:
|
|
12
|
-
warning:
|
|
7
|
+
const l = () => o().modal, g = Object.assign(r, {
|
|
8
|
+
Provider: d,
|
|
9
|
+
open: a,
|
|
10
|
+
info: n,
|
|
11
|
+
success: m,
|
|
12
|
+
error: t,
|
|
13
|
+
warning: s,
|
|
13
14
|
confirm: i,
|
|
14
15
|
destroyAll: e,
|
|
15
|
-
useModal:
|
|
16
|
+
useModal: l
|
|
16
17
|
});
|
|
17
18
|
export {
|
|
18
19
|
g as Modal
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Modal/index.ts"],"sourcesContent":["\"use client\";\nimport useApp from \"antd/es/app/useApp\";\nimport { Modal as MainModal } from \"./Modal\";\nimport {\n confirm,\n info,\n success,\n error,\n warning,\n open,\n destroyAll,\n type ModalFuncProps,\n} from \"./functions\";\nimport { ModalProvider, type ModalProviderProps } from \"./ModalProvider\";\n\nimport \"./style.css\";\n\nconst useModal = () => {\n return useApp().modal;\n};\n\n// Export the Modal component with static methods\nexport const Modal = Object.assign(MainModal, {\n Provider: ModalProvider,\n open,\n info,\n success,\n error,\n warning,\n confirm,\n destroyAll,\n useModal,\n});\n\nexport { ModalFuncProps, ModalProviderProps };\n"],"names":["useModal","useApp","Modal","MainModal","ModalProvider","open","info","success","error","warning","confirm","destroyAll"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Modal/index.ts"],"sourcesContent":["\"use client\";\nimport useApp from \"antd/es/app/useApp\";\nimport { Modal as MainModal } from \"./Modal\";\nimport {\n confirm,\n info,\n success,\n error,\n warning,\n open,\n destroyAll,\n type ModalFuncProps,\n} from \"./functions\";\nimport { ModalProvider, type ModalProviderProps } from \"./ModalProvider\";\n\nimport \"./style.css\";\n\nconst useModal = () => {\n return useApp().modal;\n};\n\n// Export the Modal component with static methods\nexport const Modal = Object.assign(MainModal, {\n Provider: ModalProvider,\n open,\n info,\n success,\n error,\n warning,\n confirm,\n destroyAll,\n useModal,\n});\n\nexport { ModalFuncProps, ModalProviderProps };\n"],"names":["useModal","useApp","Modal","MainModal","ModalProvider","open","info","success","error","warning","confirm","destroyAll"],"mappings":";;;;;;AAiBA,MAAMA,IAAW,MACRC,EAAS,EAAA,OAILC,IAAQ,OAAO,OAAOC,GAAW;AAAA,EAC5C,UAAUC;AAAA,EACV,MAAAC;AAAA,EACA,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,UAAAX;AACF,CAAC;"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { jsx as p } from "react/jsx-runtime";
|
|
2
3
|
import m from "antd/es/popover";
|
|
3
|
-
const
|
|
4
|
+
const f = ({
|
|
4
5
|
className: o,
|
|
5
6
|
style: r,
|
|
6
|
-
arrow:
|
|
7
|
-
...
|
|
8
|
-
}) => /* @__PURE__ */ p(m, { className: o, arrow:
|
|
7
|
+
arrow: e = !1,
|
|
8
|
+
...t
|
|
9
|
+
}) => /* @__PURE__ */ p(m, { className: o, arrow: e, style: r, ...t });
|
|
9
10
|
export {
|
|
10
|
-
|
|
11
|
+
f as Popover
|
|
11
12
|
};
|
|
12
13
|
//# sourceMappingURL=component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/Popover/component.tsx"],"sourcesContent":["\"use client\";\nimport {\n default as AntPopover,\n type PopoverProps as AntPopoverProps,\n} from \"antd/es/popover\";\n\n// Define props interface extending Ant Design's PopoverProps\nexport interface PopoverProps extends AntPopoverProps {\n /**\n * Arrow config for of the popover\n * @default false\n */\n arrow?: AntPopoverProps[\"arrow\"];\n}\n\n// Create Popover component\nexport const Popover = ({\n className,\n style,\n arrow = false,\n ...rest\n}: PopoverProps) => {\n return (\n <AntPopover className={className} arrow={arrow} style={style} {...rest} />\n );\n};\n"],"names":["Popover","className","style","arrow","rest","AntPopover"],"mappings":"
|
|
1
|
+
{"version":3,"file":"component.js","sources":["../../../src/components/Popover/component.tsx"],"sourcesContent":["\"use client\";\nimport {\n default as AntPopover,\n type PopoverProps as AntPopoverProps,\n} from \"antd/es/popover\";\n\n// Define props interface extending Ant Design's PopoverProps\nexport interface PopoverProps extends AntPopoverProps {\n /**\n * Arrow config for of the popover\n * @default false\n */\n arrow?: AntPopoverProps[\"arrow\"];\n}\n\n// Create Popover component\nexport const Popover = ({\n className,\n style,\n arrow = false,\n ...rest\n}: PopoverProps) => {\n return (\n <AntPopover className={className} arrow={arrow} style={style} {...rest} />\n );\n};\n"],"names":["Popover","className","style","arrow","rest","AntPopover"],"mappings":";;;AAgBO,MAAMA,IAAU,CAAC;AAAA,EACtB,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,GAAGC;AACL,wBAEKC,GAAW,EAAA,WAAAJ,GAAsB,OAAAE,GAAc,OAAAD,GAAe,GAAGE,GAAM;"}
|
|
@@ -1,74 +1,77 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as n, jsxs as d, Fragment as N } from "react/jsx-runtime";
|
|
3
|
+
import { Popover as i } from "@base-ui-components/react/popover";
|
|
4
|
+
import { useState as f, useCallback as k, useEffect as O, useMemo as s } from "react";
|
|
5
|
+
import ee from "antd/es/flex";
|
|
6
|
+
import { X as te } from "@bioturing/assets";
|
|
7
|
+
import { PopupPanelSize as ne } from "./constants.js";
|
|
8
|
+
import { useResizable as re } from "react-use-resizable";
|
|
9
|
+
import oe from "merge-refs";
|
|
9
10
|
import './style.css';/* empty css */
|
|
10
|
-
import { useControlledState as
|
|
11
|
-
import { useCls as
|
|
11
|
+
import { useControlledState as pe } from "../hooks/useControlledState.js";
|
|
12
|
+
import { useCls as ie, useAntdCssVarClassname as de, parseAntdPlacement as ue } from "../utils/antdUtils.js";
|
|
12
13
|
import { clsx as o } from "../utils/cn.js";
|
|
13
|
-
import { IconButton as
|
|
14
|
-
const
|
|
14
|
+
import { IconButton as le } from "../IconButton/component.js";
|
|
15
|
+
const xe = ({
|
|
15
16
|
children: S,
|
|
16
17
|
placement: I,
|
|
17
18
|
openOnHover: V = !1,
|
|
18
19
|
open: D,
|
|
19
20
|
onOpenChange: W,
|
|
20
21
|
content: j,
|
|
21
|
-
title:
|
|
22
|
+
title: h,
|
|
22
23
|
trigger: A = "click",
|
|
23
24
|
className: E,
|
|
24
25
|
anchor: F,
|
|
25
26
|
beforeCloseButton: P,
|
|
26
27
|
afterCloseButton: C,
|
|
27
|
-
afterTitle:
|
|
28
|
-
size:
|
|
29
|
-
footer:
|
|
28
|
+
afterTitle: g,
|
|
29
|
+
size: c = "medium",
|
|
30
|
+
footer: l,
|
|
30
31
|
defaultOpen: $,
|
|
31
32
|
resizable: M = !1,
|
|
32
|
-
classNames: e
|
|
33
|
+
classNames: e,
|
|
34
|
+
modal: T = !1,
|
|
35
|
+
closeOnClickOutside: U = !0
|
|
33
36
|
}) => {
|
|
34
|
-
const [
|
|
37
|
+
const [X, H] = pe(
|
|
35
38
|
D,
|
|
36
39
|
W,
|
|
37
40
|
$ ?? !1
|
|
38
41
|
// Always provide a default value to prevent undefined
|
|
39
|
-
), t =
|
|
40
|
-
|
|
42
|
+
), t = ie(), y = de(), b = ue(I), [v, q] = f(null), [G, J] = f(), [K, L] = f(), Q = k((r) => {
|
|
43
|
+
q(r);
|
|
41
44
|
}, []);
|
|
42
45
|
O(() => {
|
|
43
|
-
if (!
|
|
44
|
-
const r = new ResizeObserver((
|
|
45
|
-
for (const
|
|
46
|
-
|
|
46
|
+
if (!v) return;
|
|
47
|
+
const r = new ResizeObserver((u) => {
|
|
48
|
+
for (const p of u)
|
|
49
|
+
J(p.contentRect.width), L(p.contentRect.height);
|
|
47
50
|
});
|
|
48
|
-
return r.observe(
|
|
51
|
+
return r.observe(v), () => {
|
|
49
52
|
r.disconnect();
|
|
50
53
|
};
|
|
51
|
-
}, [
|
|
52
|
-
const w =
|
|
53
|
-
/* @__PURE__ */
|
|
54
|
-
|
|
54
|
+
}, [v]);
|
|
55
|
+
const w = s(() => /* @__PURE__ */ n(te, { size: 16 }), []), Y = k(() => /* @__PURE__ */ d("div", { className: o(t("popup-panel-header"), e == null ? void 0 : e.header), children: [
|
|
56
|
+
/* @__PURE__ */ d(
|
|
57
|
+
ee,
|
|
55
58
|
{
|
|
56
59
|
align: "center",
|
|
57
60
|
gap: 8,
|
|
58
61
|
className: t("popup-panel-title-wrapper"),
|
|
59
62
|
children: [
|
|
60
63
|
/* @__PURE__ */ n(
|
|
61
|
-
|
|
64
|
+
i.Title,
|
|
62
65
|
{
|
|
63
|
-
render: /* @__PURE__ */ n("div", { className: o(t("grow", "truncate"), e == null ? void 0 : e.title), children:
|
|
66
|
+
render: /* @__PURE__ */ n("div", { className: o(t("grow", "truncate"), e == null ? void 0 : e.title), children: h })
|
|
64
67
|
}
|
|
65
68
|
),
|
|
66
|
-
/* @__PURE__ */
|
|
69
|
+
/* @__PURE__ */ d("div", { className: "flex items-center gap-2", children: [
|
|
67
70
|
P,
|
|
68
71
|
/* @__PURE__ */ n(
|
|
69
|
-
|
|
72
|
+
i.Close,
|
|
70
73
|
{
|
|
71
|
-
render: /* @__PURE__ */ n(
|
|
74
|
+
render: /* @__PURE__ */ n(le, { children: w })
|
|
72
75
|
}
|
|
73
76
|
),
|
|
74
77
|
C
|
|
@@ -76,46 +79,49 @@ const be = ({
|
|
|
76
79
|
]
|
|
77
80
|
}
|
|
78
81
|
),
|
|
79
|
-
|
|
82
|
+
g || null
|
|
80
83
|
] }), [
|
|
81
84
|
C,
|
|
82
|
-
|
|
85
|
+
g,
|
|
83
86
|
P,
|
|
84
87
|
t,
|
|
85
88
|
e == null ? void 0 : e.header,
|
|
86
89
|
e == null ? void 0 : e.title,
|
|
87
90
|
w,
|
|
88
|
-
|
|
89
|
-
]), [
|
|
90
|
-
initialWidth:
|
|
91
|
-
initialHeight:
|
|
91
|
+
h
|
|
92
|
+
]), [z, x] = f(!1), { getRootProps: Z, getHandleProps: R, rootRef: _ } = re({
|
|
93
|
+
initialWidth: G,
|
|
94
|
+
initialHeight: K,
|
|
92
95
|
onDragStart: () => x(!0),
|
|
93
96
|
onDragEnd: () => x(!1)
|
|
94
97
|
});
|
|
95
98
|
O(() => {
|
|
96
|
-
|
|
97
|
-
}, [
|
|
98
|
-
const { ref:
|
|
99
|
+
z ? document.body.style.userSelect = "none" : document.body.style.userSelect = "";
|
|
100
|
+
}, [z]);
|
|
101
|
+
const { ref: B, ...m } = Z(), a = (r, u) => {
|
|
99
102
|
if (!r.current) return;
|
|
100
|
-
const { widthDiff:
|
|
101
|
-
r.current.style.left = `${parseInt(r.current.style.left || "0") -
|
|
103
|
+
const { widthDiff: p } = u;
|
|
104
|
+
r.current.style.left = `${parseInt(r.current.style.left || "0") - p}px`;
|
|
102
105
|
};
|
|
103
|
-
return /* @__PURE__ */
|
|
104
|
-
|
|
106
|
+
return /* @__PURE__ */ d(
|
|
107
|
+
i.Root,
|
|
105
108
|
{
|
|
106
109
|
openOnHover: A === "hover" ? !0 : V,
|
|
107
|
-
open:
|
|
108
|
-
onOpenChange:
|
|
110
|
+
open: X,
|
|
111
|
+
onOpenChange: (r, u, p) => {
|
|
112
|
+
p === "outside-press" && !U || H(r, u, p);
|
|
113
|
+
},
|
|
114
|
+
modal: T,
|
|
109
115
|
children: [
|
|
110
116
|
/* @__PURE__ */ n(
|
|
111
|
-
|
|
117
|
+
i.Trigger,
|
|
112
118
|
{
|
|
113
119
|
render: S,
|
|
114
120
|
className: o(t("popup-panel-trigger"), e == null ? void 0 : e.trigger)
|
|
115
121
|
}
|
|
116
122
|
),
|
|
117
|
-
/* @__PURE__ */ n(
|
|
118
|
-
|
|
123
|
+
/* @__PURE__ */ n(i.Portal, { children: /* @__PURE__ */ n(
|
|
124
|
+
i.Positioner,
|
|
119
125
|
{
|
|
120
126
|
className: o(
|
|
121
127
|
t("popup-panel-root"),
|
|
@@ -127,23 +133,23 @@ const be = ({
|
|
|
127
133
|
sideOffset: 4,
|
|
128
134
|
anchor: F,
|
|
129
135
|
style: {
|
|
130
|
-
"--size-width":
|
|
136
|
+
"--size-width": c ? ne[c] : void 0
|
|
131
137
|
},
|
|
132
|
-
children: /* @__PURE__ */
|
|
133
|
-
|
|
138
|
+
children: /* @__PURE__ */ d(
|
|
139
|
+
i.Popup,
|
|
134
140
|
{
|
|
135
141
|
className: o(
|
|
136
142
|
t("popup-panel"),
|
|
137
|
-
t(`popup-panel-size-${
|
|
143
|
+
t(`popup-panel-size-${c}`),
|
|
138
144
|
E,
|
|
139
145
|
e == null ? void 0 : e.popup,
|
|
140
146
|
y
|
|
141
147
|
),
|
|
142
|
-
ref:
|
|
143
|
-
...
|
|
144
|
-
...
|
|
148
|
+
ref: oe(B, Q),
|
|
149
|
+
...m,
|
|
150
|
+
...z ? { "data-resizing": !0 } : {},
|
|
145
151
|
children: [
|
|
146
|
-
|
|
152
|
+
h && Y(),
|
|
147
153
|
/* @__PURE__ */ n(
|
|
148
154
|
"div",
|
|
149
155
|
{
|
|
@@ -151,14 +157,14 @@ const be = ({
|
|
|
151
157
|
children: /* @__PURE__ */ n("div", { className: t("popup-panel-content-inner"), children: j })
|
|
152
158
|
}
|
|
153
159
|
),
|
|
154
|
-
|
|
160
|
+
l && /* @__PURE__ */ n(
|
|
155
161
|
"div",
|
|
156
162
|
{
|
|
157
163
|
className: o(t("popup-panel-footer"), e == null ? void 0 : e.footer),
|
|
158
|
-
children: typeof
|
|
164
|
+
children: typeof l == "function" ? l({ close: () => H(!1) }) : l
|
|
159
165
|
}
|
|
160
166
|
),
|
|
161
|
-
M && /* @__PURE__ */
|
|
167
|
+
M && /* @__PURE__ */ d(N, { children: [
|
|
162
168
|
/* @__PURE__ */ n(
|
|
163
169
|
"div",
|
|
164
170
|
{
|
|
@@ -167,7 +173,7 @@ const be = ({
|
|
|
167
173
|
e == null ? void 0 : e.resizeHandle
|
|
168
174
|
),
|
|
169
175
|
"data-placement": "bottom-left",
|
|
170
|
-
...
|
|
176
|
+
...R({
|
|
171
177
|
lockHorizontal: !0
|
|
172
178
|
})
|
|
173
179
|
}
|
|
@@ -180,10 +186,10 @@ const be = ({
|
|
|
180
186
|
e == null ? void 0 : e.resizeHandle
|
|
181
187
|
),
|
|
182
188
|
"data-placement": "top-left",
|
|
183
|
-
...
|
|
189
|
+
...R({
|
|
184
190
|
reverse: !0,
|
|
185
191
|
lockVertical: !0,
|
|
186
|
-
onResize: (r) =>
|
|
192
|
+
onResize: (r) => a(_, r)
|
|
187
193
|
})
|
|
188
194
|
}
|
|
189
195
|
),
|
|
@@ -195,7 +201,7 @@ const be = ({
|
|
|
195
201
|
e == null ? void 0 : e.resizeHandle
|
|
196
202
|
),
|
|
197
203
|
"data-placement": "top-right",
|
|
198
|
-
...
|
|
204
|
+
...R({
|
|
199
205
|
lockVertical: !0
|
|
200
206
|
})
|
|
201
207
|
}
|
|
@@ -211,6 +217,6 @@ const be = ({
|
|
|
211
217
|
);
|
|
212
218
|
};
|
|
213
219
|
export {
|
|
214
|
-
|
|
220
|
+
xe as PopupPanel
|
|
215
221
|
};
|
|
216
222
|
//# sourceMappingURL=component.js.map
|