@strapi/content-type-builder 5.58.0 → 5.60.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/admin/components/AIChat/FeedbackModal.js +13 -7
- package/dist/admin/components/AIChat/FeedbackModal.js.map +1 -1
- package/dist/admin/components/AIChat/FeedbackModal.mjs +14 -8
- package/dist/admin/components/AIChat/FeedbackModal.mjs.map +1 -1
- package/dist/admin/components/AIChat/UploadCodeModal.js +12 -6
- package/dist/admin/components/AIChat/UploadCodeModal.js.map +1 -1
- package/dist/admin/components/AIChat/UploadCodeModal.mjs +13 -7
- package/dist/admin/components/AIChat/UploadCodeModal.mjs.map +1 -1
- package/dist/admin/components/AIChat/UploadFigmaModal.js +12 -6
- package/dist/admin/components/AIChat/UploadFigmaModal.js.map +1 -1
- package/dist/admin/components/AIChat/UploadFigmaModal.mjs +13 -7
- package/dist/admin/components/AIChat/UploadFigmaModal.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js +6 -3
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js.map +1 -1
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs +7 -4
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Collapsible.js +9 -4
- package/dist/admin/components/AIChat/components/Collapsible.js.map +1 -1
- package/dist/admin/components/AIChat/components/Collapsible.mjs +10 -5
- package/dist/admin/components/AIChat/components/Collapsible.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Dropzone.js +13 -6
- package/dist/admin/components/AIChat/components/Dropzone.js.map +1 -1
- package/dist/admin/components/AIChat/components/Dropzone.mjs +14 -7
- package/dist/admin/components/AIChat/components/Dropzone.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/FloatingPanel.js +11 -4
- package/dist/admin/components/AIChat/components/FloatingPanel.js.map +1 -1
- package/dist/admin/components/AIChat/components/FloatingPanel.mjs +12 -5
- package/dist/admin/components/AIChat/components/FloatingPanel.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/FullScreenImage.js +16 -8
- package/dist/admin/components/AIChat/components/FullScreenImage.js.map +1 -1
- package/dist/admin/components/AIChat/components/FullScreenImage.mjs +17 -9
- package/dist/admin/components/AIChat/components/FullScreenImage.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Input.js +6 -3
- package/dist/admin/components/AIChat/components/Input.js.map +1 -1
- package/dist/admin/components/AIChat/components/Input.mjs +7 -4
- package/dist/admin/components/AIChat/components/Input.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Messages/Message.js +88 -12
- package/dist/admin/components/AIChat/components/Messages/Message.js.map +1 -1
- package/dist/admin/components/AIChat/components/Messages/Message.mjs +87 -13
- package/dist/admin/components/AIChat/components/Messages/Message.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/StepModal.js +44 -17
- package/dist/admin/components/AIChat/components/StepModal.js.map +1 -1
- package/dist/admin/components/AIChat/components/StepModal.mjs +45 -18
- package/dist/admin/components/AIChat/components/StepModal.mjs.map +1 -1
- package/dist/admin/components/AIChat/providers/ChatProvider.js +79 -27
- package/dist/admin/components/AIChat/providers/ChatProvider.js.map +1 -1
- package/dist/admin/components/AIChat/providers/ChatProvider.mjs +80 -28
- package/dist/admin/components/AIChat/providers/ChatProvider.mjs.map +1 -1
- package/dist/admin/components/AIChat/providers/SchemaProvider.js +6 -3
- package/dist/admin/components/AIChat/providers/SchemaProvider.js.map +1 -1
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs +7 -4
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs.map +1 -1
- package/dist/admin/components/AttributeOptions/AttributeOption.js +2 -2
- package/dist/admin/components/AttributeOptions/AttributeOption.js.map +1 -1
- package/dist/admin/components/AttributeOptions/AttributeOption.mjs +2 -2
- package/dist/admin/components/AttributeOptions/AttributeOption.mjs.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.js.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.mjs.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.js.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.mjs.map +1 -1
- package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.js +2 -1
- package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.js.map +1 -1
- package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.mjs +2 -1
- package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.mjs.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.js +317 -275
- package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.mjs +319 -277
- package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
- package/dist/admin/components/DataManager/RenameMigrationModal.js.map +1 -1
- package/dist/admin/components/DataManager/RenameMigrationModal.mjs.map +1 -1
- package/dist/admin/components/DataManager/reducer.js +31 -4
- package/dist/admin/components/DataManager/reducer.js.map +1 -1
- package/dist/admin/components/DataManager/reducer.mjs +31 -4
- package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
- package/dist/admin/components/DynamicZoneList.js +2 -1
- package/dist/admin/components/DynamicZoneList.js.map +1 -1
- package/dist/admin/components/DynamicZoneList.mjs +2 -1
- package/dist/admin/components/DynamicZoneList.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/ConditionForm.js +2 -1
- package/dist/admin/components/FormModal/attributes/ConditionForm.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/ConditionForm.mjs +2 -1
- package/dist/admin/components/FormModal/attributes/ConditionForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/types.js +2 -2
- package/dist/admin/components/FormModal/attributes/types.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/types.mjs +2 -2
- package/dist/admin/components/FormModal/attributes/types.mjs.map +1 -1
- package/dist/admin/components/FormModal/forms/forms.js +1 -1
- package/dist/admin/components/FormModal/forms/forms.js.map +1 -1
- package/dist/admin/components/FormModal/forms/forms.mjs +1 -1
- package/dist/admin/components/FormModal/forms/forms.mjs.map +1 -1
- package/dist/admin/components/GenericInputs.js +2 -1
- package/dist/admin/components/GenericInputs.js.map +1 -1
- package/dist/admin/components/GenericInputs.mjs +2 -1
- package/dist/admin/components/GenericInputs.mjs.map +1 -1
- package/dist/admin/components/TabForm.js.map +1 -1
- package/dist/admin/components/TabForm.mjs.map +1 -1
- package/dist/admin/src/components/AIChat/components/FullScreenImage.d.ts +8 -0
- package/dist/admin/src/components/AIChat/components/Messages/Message.d.ts +20 -0
- package/dist/admin/utils/folderTelemetry.js.map +1 -1
- package/dist/admin/utils/folderTelemetry.mjs.map +1 -1
- package/dist/admin/utils/formAPI.js.map +1 -1
- package/dist/admin/utils/formAPI.mjs.map +1 -1
- package/dist/server/controllers/validation/common.js +1 -1
- package/dist/server/controllers/validation/common.js.map +1 -1
- package/dist/server/controllers/validation/common.mjs +1 -1
- package/dist/server/controllers/validation/common.mjs.map +1 -1
- package/dist/server/controllers/validation/schema.js +3 -2
- package/dist/server/controllers/validation/schema.js.map +1 -1
- package/dist/server/controllers/validation/schema.mjs +4 -3
- package/dist/server/controllers/validation/schema.mjs.map +1 -1
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs.map +1 -1
- package/dist/server/services/migration-builder/index.js.map +1 -1
- package/dist/server/services/migration-builder/index.mjs.map +1 -1
- package/dist/server/services/schema.js +34 -1
- package/dist/server/services/schema.js.map +1 -1
- package/dist/server/services/schema.mjs +34 -1
- package/dist/server/services/schema.mjs.map +1 -1
- package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/services/migration-builder/index.d.ts.map +1 -1
- package/dist/server/src/services/schema-builder/types.d.ts.map +1 -1
- package/dist/server/src/services/schema.d.ts.map +1 -1
- package/dist/server/src/utils/uid-target.d.ts +18 -0
- package/dist/server/src/utils/uid-target.d.ts.map +1 -0
- package/dist/server/utils/uid-target.js +34 -0
- package/dist/server/utils/uid-target.js.map +1 -0
- package/dist/server/utils/uid-target.mjs +31 -0
- package/dist/server/utils/uid-target.mjs.map +1 -0
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Attachment.mjs","sources":["../../../../../../../admin/src/components/AIChat/components/Attachments/components/Attachment.tsx"],"sourcesContent":["import { ReactNode, createContext, useContext } from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Trash, WarningCircle } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\n/* -------------------------------------------------------------------------------------------------\n * Attachment Context\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AttachmentContextValue {\n error?: string | null;\n}\n\nconst AttachmentContext = createContext<AttachmentContextValue>({ error: null });\n\nconst useAttachmentContext = () => useContext(AttachmentContext);\n\n/* -------------------------------------------------------------------------------------------------\n * Attachment Root\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface AttachmentRootProps {\n children: ReactNode;\n error?: string | null;\n minWidth?: string;\n maxWidth?: string;\n}\n\nconst StyledRoot = styled(Box)`\n &:hover {\n cursor: pointer;\n background: ${({ theme }) => theme.colors.neutral100};\n }\n`;\n\n// TODO: How to make this a button instead?\nconst Root = ({ children, error = null, minWidth, maxWidth }: AttachmentRootProps) => {\n return (\n <AttachmentContext.Provider value={
|
|
1
|
+
{"version":3,"file":"Attachment.mjs","sources":["../../../../../../../admin/src/components/AIChat/components/Attachments/components/Attachment.tsx"],"sourcesContent":["import { ReactNode, createContext, useContext, useMemo } from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Trash, WarningCircle } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\n/* -------------------------------------------------------------------------------------------------\n * Attachment Context\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AttachmentContextValue {\n error?: string | null;\n}\n\nconst AttachmentContext = createContext<AttachmentContextValue>({ error: null });\n\nconst useAttachmentContext = () => useContext(AttachmentContext);\n\n/* -------------------------------------------------------------------------------------------------\n * Attachment Root\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface AttachmentRootProps {\n children: ReactNode;\n error?: string | null;\n minWidth?: string;\n maxWidth?: string;\n}\n\nconst StyledRoot = styled(Box)`\n &:hover {\n cursor: pointer;\n background: ${({ theme }) => theme.colors.neutral100};\n }\n`;\n\n// TODO: How to make this a button instead?\nconst Root = ({ children, error = null, minWidth, maxWidth }: AttachmentRootProps) => {\n const contextValue = useMemo(() => ({ error }), [error]);\n\n return (\n <AttachmentContext.Provider value={contextValue}>\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n gap={2}\n minWidth={minWidth}\n maxWidth={maxWidth}\n >\n <StyledRoot\n background=\"neutral0\"\n hasRadius\n borderColor=\"neutral200\"\n borderStyle=\"solid\"\n borderWidth=\"1px\"\n padding={2}\n width=\"100%\"\n >\n <Flex gap={2}>{children}</Flex>\n </StyledRoot>\n {error && (\n <Typography variant=\"pi\" textColor=\"danger500\">\n {error}\n </Typography>\n )}\n </Flex>\n </AttachmentContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Attachment Preview\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AttachmentPreviewProps {\n children: ReactNode;\n}\n\nconst Preview = ({ children }: AttachmentPreviewProps) => {\n const { error } = useAttachmentContext();\n\n return (\n <Flex alignItems=\"center\" justifyContent=\"center\">\n {error ? <WarningCircle fill=\"danger500\" /> : children}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Attachment Title\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AttachmentTitleProps {\n children: ReactNode;\n}\n\nconst Title = ({ children }: AttachmentTitleProps) => {\n return (\n <Box grow={1}>\n <Typography variant=\"omega\" ellipsis style={{ userSelect: 'none', maxWidth: '100px' }}>\n {children}\n </Typography>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Attachment Remove\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AttachmentRemoveProps {\n onClick: () => void;\n}\n\nconst Remove = ({ onClick }: AttachmentRemoveProps) => {\n return (\n <Flex alignItems=\"center\" justifyContent=\"center\" shrink={0} onClick={onClick}>\n <Trash fill=\"neutral500\" />\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Attachment Compound\n * -----------------------------------------------------------------------------------------------*/\n\nexport const Attachment = {\n Root,\n Preview,\n Title,\n Remove,\n};\n\nexport { useAttachmentContext };\n"],"names":["AttachmentContext","createContext","error","useAttachmentContext","useContext","StyledRoot","styled","Box","theme","colors","neutral100","Root","children","minWidth","maxWidth","contextValue","useMemo","_jsx","Provider","value","_jsxs","Flex","direction","alignItems","gap","background","hasRadius","borderColor","borderStyle","borderWidth","padding","width","Typography","variant","textColor","Preview","justifyContent","WarningCircle","fill","Title","grow","ellipsis","style","userSelect","Remove","onClick","shrink","Trash","Attachment"],"mappings":"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"}
|
|
@@ -20,11 +20,16 @@ const AnimatedContent = styledComponents.styled(designSystem.Box)`
|
|
|
20
20
|
`;
|
|
21
21
|
const Collapsible = ({ children, defaultOpen = false })=>{
|
|
22
22
|
const [open, setOpen] = React.useState(defaultOpen);
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
const toggle = React.useCallback(()=>setOpen((prev)=>!prev), []);
|
|
24
|
+
const contextValue = React.useMemo(()=>({
|
|
25
25
|
open,
|
|
26
|
-
toggle
|
|
27
|
-
},
|
|
26
|
+
toggle
|
|
27
|
+
}), [
|
|
28
|
+
open,
|
|
29
|
+
toggle
|
|
30
|
+
]);
|
|
31
|
+
return /*#__PURE__*/ jsxRuntime.jsx(CollapsibleContext.Provider, {
|
|
32
|
+
value: contextValue,
|
|
28
33
|
children: children
|
|
29
34
|
});
|
|
30
35
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Collapsible.js","sources":["../../../../../admin/src/components/AIChat/components/Collapsible.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"Collapsible.js","sources":["../../../../../admin/src/components/AIChat/components/Collapsible.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n useState,\n createContext,\n useContext,\n useRef,\n useLayoutEffect,\n} from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\ninterface CollapsibleContextValue {\n open: boolean;\n toggle: () => void;\n}\n\nconst CollapsibleContext = createContext<CollapsibleContextValue | undefined>(undefined);\n\nexport const useCollapsible = () => {\n const context = useContext(CollapsibleContext);\n if (!context) {\n throw new Error('Collapsible components must be wrapped in <Collapsible />');\n }\n return context;\n};\n\nconst AnimatedContent = styled(Box)`\n overflow: hidden;\n transition: height ${({ theme }) => theme.motion.timings['200']}\n ${({ theme }) => theme.motion.easings.easeOutQuad};\n`;\n\nexport const Collapsible = ({\n children,\n defaultOpen = false,\n}: {\n children: React.ReactNode;\n defaultOpen?: boolean;\n}) => {\n const [open, setOpen] = useState(defaultOpen);\n const toggle = useCallback(() => setOpen((prev) => !prev), []);\n const contextValue = useMemo(() => ({ open, toggle }), [open, toggle]);\n\n return <CollapsibleContext.Provider value={contextValue}>{children}</CollapsibleContext.Provider>;\n};\n\nexport const CollapsibleTrigger = ({\n children,\n}: {\n children: React.ReactNode | ((props: { open: boolean }) => React.ReactNode);\n}) => {\n const { toggle, open } = useCollapsible();\n return (\n <Box onClick={toggle} style={{ cursor: 'pointer' }}>\n {typeof children === 'function' ? children({ open }) : children}\n </Box>\n );\n};\n\nexport const CollapsibleContent = ({ children }: { children: React.ReactNode }) => {\n const { open } = useCollapsible();\n const contentRef = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState<number>(0);\n\n useLayoutEffect(() => {\n if (contentRef.current) {\n const contentHeight = contentRef.current.scrollHeight;\n setHeight(contentHeight);\n }\n }, [children]);\n\n return (\n <AnimatedContent\n ref={contentRef}\n role=\"region\"\n aria-hidden={!open}\n style={{\n height: open ? `${height}px` : 0,\n visibility: height === 0 ? 'hidden' : 'visible',\n }}\n >\n {children}\n </AnimatedContent>\n );\n};\n"],"names":["CollapsibleContext","createContext","undefined","useCollapsible","context","useContext","Error","AnimatedContent","styled","Box","theme","motion","timings","easings","easeOutQuad","Collapsible","children","defaultOpen","open","setOpen","useState","toggle","useCallback","prev","contextValue","useMemo","_jsx","Provider","value","CollapsibleTrigger","onClick","style","cursor","CollapsibleContent","contentRef","useRef","height","setHeight","useLayoutEffect","current","contentHeight","scrollHeight","ref","role","aria-hidden","visibility"],"mappings":";;;;;;;AAkBA,MAAMA,mCAAqBC,mBAAAA,CAAmDC,SAAAA,CAAAA;MAEjEC,cAAAA,GAAiB,IAAA;AAC5B,IAAA,MAAMC,UAAUC,gBAAAA,CAAWL,kBAAAA,CAAAA;AAC3B,IAAA,IAAI,CAACI,OAAAA,EAAS;AACZ,QAAA,MAAM,IAAIE,KAAAA,CAAM,2DAAA,CAAA;AAClB,IAAA;IACA,OAAOF,OAAAA;AACT;AAEA,MAAMG,eAAAA,GAAkBC,uBAAAA,CAAOC,gBAAAA,CAAI;;qBAEd,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,OAAO,CAAC,KAAA,CAAM;IAC7D,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACE,OAAO,CAACC,WAAW,CAAC;AACtD,CAAC;AAEM,MAAMC,cAAc,CAAC,EAC1BC,QAAQ,EACRC,WAAAA,GAAc,KAAK,EAIpB,GAAA;AACC,IAAA,MAAM,CAACC,IAAAA,EAAMC,OAAAA,CAAQ,GAAGC,cAAAA,CAASH,WAAAA,CAAAA;IACjC,MAAMI,MAAAA,GAASC,kBAAY,IAAMH,OAAAA,CAAQ,CAACI,IAAAA,GAAS,CAACA,OAAO,EAAE,CAAA;IAC7D,MAAMC,YAAAA,GAAeC,aAAAA,CAAQ,KAAO;AAAEP,YAAAA,IAAAA;AAAMG,YAAAA;AAAO,SAAA,CAAA,EAAI;AAACH,QAAAA,IAAAA;AAAMG,QAAAA;AAAO,KAAA,CAAA;IAErE,qBAAOK,cAAA,CAAC1B,mBAAmB2B,QAAQ,EAAA;QAACC,KAAAA,EAAOJ,YAAAA;AAAeR,QAAAA,QAAAA,EAAAA;;AAC5D;AAEO,MAAMa,kBAAAA,GAAqB,CAAC,EACjCb,QAAQ,EAGT,GAAA;AACC,IAAA,MAAM,EAAEK,MAAM,EAAEH,IAAI,EAAE,GAAGf,cAAAA,EAAAA;AACzB,IAAA,qBACEuB,cAAA,CAACjB,gBAAAA,EAAAA;QAAIqB,OAAAA,EAAST,MAAAA;QAAQU,KAAAA,EAAO;YAAEC,MAAAA,EAAQ;AAAU,SAAA;kBAC9C,OAAOhB,QAAAA,KAAa,aAAaA,QAAAA,CAAS;AAAEE,YAAAA;SAAK,CAAA,GAAKF;;AAG7D;AAEO,MAAMiB,kBAAAA,GAAqB,CAAC,EAAEjB,QAAQ,EAAiC,GAAA;IAC5E,MAAM,EAAEE,IAAI,EAAE,GAAGf,cAAAA,EAAAA;AACjB,IAAA,MAAM+B,aAAaC,YAAAA,CAAuB,IAAA,CAAA;AAC1C,IAAA,MAAM,CAACC,MAAAA,EAAQC,SAAAA,CAAU,GAAGjB,cAAAA,CAAiB,CAAA,CAAA;IAE7CkB,qBAAAA,CAAgB,IAAA;QACd,IAAIJ,UAAAA,CAAWK,OAAO,EAAE;AACtB,YAAA,MAAMC,aAAAA,GAAgBN,UAAAA,CAAWK,OAAO,CAACE,YAAY;YACrDJ,SAAAA,CAAUG,aAAAA,CAAAA;AACZ,QAAA;IACF,CAAA,EAAG;AAACxB,QAAAA;AAAS,KAAA,CAAA;AAEb,IAAA,qBACEU,cAAA,CAACnB,eAAAA,EAAAA;QACCmC,GAAAA,EAAKR,UAAAA;QACLS,IAAAA,EAAK,QAAA;AACLC,QAAAA,aAAAA,EAAa,CAAC1B,IAAAA;QACda,KAAAA,EAAO;AACLK,YAAAA,MAAAA,EAAQlB,IAAAA,GAAO,CAAA,EAAGkB,MAAAA,CAAO,EAAE,CAAC,GAAG,CAAA;YAC/BS,UAAAA,EAAYT,MAAAA,KAAW,IAAI,QAAA,GAAW;AACxC,SAAA;AAECpB,QAAAA,QAAAA,EAAAA;;AAGP;;;;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { useState, useRef, useLayoutEffect, createContext, useContext } from 'react';
|
|
2
|
+
import { useState, useCallback, useMemo, useRef, useLayoutEffect, createContext, useContext } from 'react';
|
|
3
3
|
import { Box } from '@strapi/design-system';
|
|
4
4
|
import { styled } from 'styled-components';
|
|
5
5
|
|
|
@@ -18,11 +18,16 @@ const AnimatedContent = styled(Box)`
|
|
|
18
18
|
`;
|
|
19
19
|
const Collapsible = ({ children, defaultOpen = false })=>{
|
|
20
20
|
const [open, setOpen] = useState(defaultOpen);
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
const toggle = useCallback(()=>setOpen((prev)=>!prev), []);
|
|
22
|
+
const contextValue = useMemo(()=>({
|
|
23
23
|
open,
|
|
24
|
-
toggle
|
|
25
|
-
},
|
|
24
|
+
toggle
|
|
25
|
+
}), [
|
|
26
|
+
open,
|
|
27
|
+
toggle
|
|
28
|
+
]);
|
|
29
|
+
return /*#__PURE__*/ jsx(CollapsibleContext.Provider, {
|
|
30
|
+
value: contextValue,
|
|
26
31
|
children: children
|
|
27
32
|
});
|
|
28
33
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Collapsible.mjs","sources":["../../../../../admin/src/components/AIChat/components/Collapsible.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"Collapsible.mjs","sources":["../../../../../admin/src/components/AIChat/components/Collapsible.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n useState,\n createContext,\n useContext,\n useRef,\n useLayoutEffect,\n} from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\ninterface CollapsibleContextValue {\n open: boolean;\n toggle: () => void;\n}\n\nconst CollapsibleContext = createContext<CollapsibleContextValue | undefined>(undefined);\n\nexport const useCollapsible = () => {\n const context = useContext(CollapsibleContext);\n if (!context) {\n throw new Error('Collapsible components must be wrapped in <Collapsible />');\n }\n return context;\n};\n\nconst AnimatedContent = styled(Box)`\n overflow: hidden;\n transition: height ${({ theme }) => theme.motion.timings['200']}\n ${({ theme }) => theme.motion.easings.easeOutQuad};\n`;\n\nexport const Collapsible = ({\n children,\n defaultOpen = false,\n}: {\n children: React.ReactNode;\n defaultOpen?: boolean;\n}) => {\n const [open, setOpen] = useState(defaultOpen);\n const toggle = useCallback(() => setOpen((prev) => !prev), []);\n const contextValue = useMemo(() => ({ open, toggle }), [open, toggle]);\n\n return <CollapsibleContext.Provider value={contextValue}>{children}</CollapsibleContext.Provider>;\n};\n\nexport const CollapsibleTrigger = ({\n children,\n}: {\n children: React.ReactNode | ((props: { open: boolean }) => React.ReactNode);\n}) => {\n const { toggle, open } = useCollapsible();\n return (\n <Box onClick={toggle} style={{ cursor: 'pointer' }}>\n {typeof children === 'function' ? children({ open }) : children}\n </Box>\n );\n};\n\nexport const CollapsibleContent = ({ children }: { children: React.ReactNode }) => {\n const { open } = useCollapsible();\n const contentRef = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState<number>(0);\n\n useLayoutEffect(() => {\n if (contentRef.current) {\n const contentHeight = contentRef.current.scrollHeight;\n setHeight(contentHeight);\n }\n }, [children]);\n\n return (\n <AnimatedContent\n ref={contentRef}\n role=\"region\"\n aria-hidden={!open}\n style={{\n height: open ? `${height}px` : 0,\n visibility: height === 0 ? 'hidden' : 'visible',\n }}\n >\n {children}\n </AnimatedContent>\n );\n};\n"],"names":["CollapsibleContext","createContext","undefined","useCollapsible","context","useContext","Error","AnimatedContent","styled","Box","theme","motion","timings","easings","easeOutQuad","Collapsible","children","defaultOpen","open","setOpen","useState","toggle","useCallback","prev","contextValue","useMemo","_jsx","Provider","value","CollapsibleTrigger","onClick","style","cursor","CollapsibleContent","contentRef","useRef","height","setHeight","useLayoutEffect","current","contentHeight","scrollHeight","ref","role","aria-hidden","visibility"],"mappings":";;;;;AAkBA,MAAMA,mCAAqBC,aAAAA,CAAmDC,SAAAA,CAAAA;MAEjEC,cAAAA,GAAiB,IAAA;AAC5B,IAAA,MAAMC,UAAUC,UAAAA,CAAWL,kBAAAA,CAAAA;AAC3B,IAAA,IAAI,CAACI,OAAAA,EAAS;AACZ,QAAA,MAAM,IAAIE,KAAAA,CAAM,2DAAA,CAAA;AAClB,IAAA;IACA,OAAOF,OAAAA;AACT;AAEA,MAAMG,eAAAA,GAAkBC,MAAAA,CAAOC,GAAAA,CAAI;;qBAEd,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,OAAO,CAAC,KAAA,CAAM;IAC7D,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACE,OAAO,CAACC,WAAW,CAAC;AACtD,CAAC;AAEM,MAAMC,cAAc,CAAC,EAC1BC,QAAQ,EACRC,WAAAA,GAAc,KAAK,EAIpB,GAAA;AACC,IAAA,MAAM,CAACC,IAAAA,EAAMC,OAAAA,CAAQ,GAAGC,QAAAA,CAASH,WAAAA,CAAAA;IACjC,MAAMI,MAAAA,GAASC,YAAY,IAAMH,OAAAA,CAAQ,CAACI,IAAAA,GAAS,CAACA,OAAO,EAAE,CAAA;IAC7D,MAAMC,YAAAA,GAAeC,OAAAA,CAAQ,KAAO;AAAEP,YAAAA,IAAAA;AAAMG,YAAAA;AAAO,SAAA,CAAA,EAAI;AAACH,QAAAA,IAAAA;AAAMG,QAAAA;AAAO,KAAA,CAAA;IAErE,qBAAOK,GAAA,CAAC1B,mBAAmB2B,QAAQ,EAAA;QAACC,KAAAA,EAAOJ,YAAAA;AAAeR,QAAAA,QAAAA,EAAAA;;AAC5D;AAEO,MAAMa,kBAAAA,GAAqB,CAAC,EACjCb,QAAQ,EAGT,GAAA;AACC,IAAA,MAAM,EAAEK,MAAM,EAAEH,IAAI,EAAE,GAAGf,cAAAA,EAAAA;AACzB,IAAA,qBACEuB,GAAA,CAACjB,GAAAA,EAAAA;QAAIqB,OAAAA,EAAST,MAAAA;QAAQU,KAAAA,EAAO;YAAEC,MAAAA,EAAQ;AAAU,SAAA;kBAC9C,OAAOhB,QAAAA,KAAa,aAAaA,QAAAA,CAAS;AAAEE,YAAAA;SAAK,CAAA,GAAKF;;AAG7D;AAEO,MAAMiB,kBAAAA,GAAqB,CAAC,EAAEjB,QAAQ,EAAiC,GAAA;IAC5E,MAAM,EAAEE,IAAI,EAAE,GAAGf,cAAAA,EAAAA;AACjB,IAAA,MAAM+B,aAAaC,MAAAA,CAAuB,IAAA,CAAA;AAC1C,IAAA,MAAM,CAACC,MAAAA,EAAQC,SAAAA,CAAU,GAAGjB,QAAAA,CAAiB,CAAA,CAAA;IAE7CkB,eAAAA,CAAgB,IAAA;QACd,IAAIJ,UAAAA,CAAWK,OAAO,EAAE;AACtB,YAAA,MAAMC,aAAAA,GAAgBN,UAAAA,CAAWK,OAAO,CAACE,YAAY;YACrDJ,SAAAA,CAAUG,aAAAA,CAAAA;AACZ,QAAA;IACF,CAAA,EAAG;AAACxB,QAAAA;AAAS,KAAA,CAAA;AAEb,IAAA,qBACEU,GAAA,CAACnB,eAAAA,EAAAA;QACCmC,GAAAA,EAAKR,UAAAA;QACLS,IAAAA,EAAK,QAAA;AACLC,QAAAA,aAAAA,EAAa,CAAC1B,IAAAA;QACda,KAAAA,EAAO;AACLK,YAAAA,MAAAA,EAAQlB,IAAAA,GAAO,CAAA,EAAGkB,MAAAA,CAAO,EAAE,CAAC,GAAG,CAAA;YAC/BS,UAAAA,EAAYT,MAAAA,KAAW,IAAI,QAAA,GAAW;AACxC,SAAA;AAECpB,QAAAA,QAAAA,EAAAA;;AAGP;;;;"}
|
|
@@ -5,6 +5,10 @@ var React = require('react');
|
|
|
5
5
|
var designSystem = require('@strapi/design-system');
|
|
6
6
|
var reactDropzone = require('react-dropzone');
|
|
7
7
|
|
|
8
|
+
const DEFAULT_ON_ADD_FILES = ()=>{};
|
|
9
|
+
const DEFAULT_ACCEPT = {
|
|
10
|
+
'image/*': []
|
|
11
|
+
};
|
|
8
12
|
const useClipboardPasteImages = ({ onAddFiles, isEnabled = false })=>{
|
|
9
13
|
const handlePaste = React.useCallback(async (e)=>{
|
|
10
14
|
if (!isEnabled) return;
|
|
@@ -41,9 +45,7 @@ const useClipboardPasteImages = ({ onAddFiles, isEnabled = false })=>{
|
|
|
41
45
|
};
|
|
42
46
|
const DropzoneContext = /*#__PURE__*/ React.createContext({});
|
|
43
47
|
const useDropzoneContext = ()=>React.useContext(DropzoneContext);
|
|
44
|
-
const Root = ({ children, isEnabled = true, onAddFiles =
|
|
45
|
-
'image/*': []
|
|
46
|
-
}, ...props })=>{
|
|
48
|
+
const Root = ({ children, isEnabled = true, onAddFiles = DEFAULT_ON_ADD_FILES, accept = DEFAULT_ACCEPT, ...props })=>{
|
|
47
49
|
// Use clipboard paste hook for handling clipboard events
|
|
48
50
|
useClipboardPasteImages({
|
|
49
51
|
onAddFiles,
|
|
@@ -55,12 +57,17 @@ const Root = ({ children, isEnabled = true, onAddFiles = ()=>{}, accept = {
|
|
|
55
57
|
noKeyboard: true,
|
|
56
58
|
accept
|
|
57
59
|
});
|
|
58
|
-
|
|
59
|
-
value: {
|
|
60
|
+
const contextValue = React.useMemo(()=>({
|
|
60
61
|
isEnabled,
|
|
61
62
|
isDragActive,
|
|
62
63
|
onAddFiles
|
|
63
|
-
},
|
|
64
|
+
}), [
|
|
65
|
+
isEnabled,
|
|
66
|
+
isDragActive,
|
|
67
|
+
onAddFiles
|
|
68
|
+
]);
|
|
69
|
+
return /*#__PURE__*/ jsxRuntime.jsx(DropzoneContext.Provider, {
|
|
70
|
+
value: contextValue,
|
|
64
71
|
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
65
72
|
direction: "column",
|
|
66
73
|
alignItems: "flex-start",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropzone.js","sources":["../../../../../admin/src/components/AIChat/components/Dropzone.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect } from 'react';\n\nimport { Flex, Box, Typography } from '@strapi/design-system';\nimport { useDropzone } from 'react-dropzone';\n\n/* -------------------------------------------------------------------------------------------------\n * Hooks\n * -----------------------------------------------------------------------------------------------*/\n\ninterface UseClipboardPasteProps {\n onAddFiles: (files: File[]) => void;\n isEnabled?: boolean;\n accept?: {\n [key: string]: string[];\n };\n}\n\nexport const useClipboardPasteImages = ({\n onAddFiles,\n isEnabled = false,\n}: UseClipboardPasteProps) => {\n const handlePaste = useCallback(\n async (e: ClipboardEvent) => {\n if (!isEnabled) return;\n // Try to get items from clipboard\n const items = e.clipboardData?.items;\n\n if (!items || items.length === 0) return;\n\n const files: File[] = [];\n\n // Process clipboard items\n for (const item of items) {\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (file && file.type.startsWith('image/')) {\n files.push(file);\n }\n }\n }\n\n if (files.length > 0) {\n onAddFiles(files);\n e.preventDefault(); // Prevent the default paste behavior\n }\n },\n [isEnabled, onAddFiles]\n );\n\n // Set up the paste event listener\n useEffect(() => {\n document.addEventListener('paste', handlePaste);\n return () => {\n document.removeEventListener('paste', handlePaste);\n };\n }, [handlePaste]);\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Dropzone Context\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface DropzoneContextValue {\n isEnabled?: boolean;\n isDragActive?: boolean;\n onAddFiles?: (files: File[]) => void;\n}\n\nconst DropzoneContext = createContext<DropzoneContextValue>({});\n\nexport const useDropzoneContext = () => useContext(DropzoneContext);\n\n/* -------------------------------------------------------------------------------------------------\n * Dropzone Root\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface DropzoneRootProps extends React.ComponentPropsWithoutRef<typeof Flex> {\n children: React.ReactNode;\n isEnabled?: boolean;\n onAddFiles?: (files: File[]) => void;\n accept?: {\n [key: string]: string[];\n };\n}\n\nexport const Root = ({\n children,\n isEnabled = true,\n onAddFiles = () => {},\n accept = { 'image/*': [] },\n ...props\n}: DropzoneRootProps) => {\n // Use clipboard paste hook for handling clipboard events\n useClipboardPasteImages({ onAddFiles, isEnabled, accept });\n\n // Use dropzone for drag and drop functionality\n const { getRootProps, isDragActive } = useDropzone({\n onDrop: onAddFiles,\n noClick: true,\n noKeyboard: true,\n accept,\n });\n\n return (\n <DropzoneContext.Provider\n value={{\n isEnabled,\n isDragActive,\n onAddFiles,\n }}\n >\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n width=\"100%\"\n position=\"relative\"\n {...getRootProps()}\n {...props}\n >\n {children}\n </Flex>\n </DropzoneContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Dropzone Area\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DropzoneAreaProps extends React.ComponentPropsWithoutRef<typeof Flex> {\n error?: string | null;\n title?: string;\n}\n\nconst Area = ({ error, title, ...props }: DropzoneAreaProps) => {\n const { isEnabled, isDragActive } = useDropzoneContext();\n\n // If not dragging, don't render the dropzone area\n if (!isDragActive) {\n return null;\n }\n\n const displayTitle = title || 'Drop images here';\n\n return (\n <Flex\n position=\"absolute\"\n top={0}\n left={0}\n right={0}\n bottom={0}\n zIndex={2}\n cursor={isEnabled ? 'pointer' : 'not-allowed'}\n width=\"100%\"\n height=\"100%\"\n borderStyle=\"dashed\"\n borderColor={error ? 'danger600' : 'primary500'}\n background={error ? 'danger100' : 'primary100'}\n hasRadius\n padding={7}\n justifyContent=\"center\"\n direction=\"column\"\n alignItems=\"center\"\n gap={2}\n {...props}\n >\n <Box width=\"24px\" height=\"24px\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M19.5 13.572L12 6.072L4.5 13.572\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 6.072V20.072\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.9998 20.072H20.0001\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </Box>\n <Flex direction=\"column\" alignItems=\"center\" gap={2}>\n <Typography variant=\"omega\" textColor=\"neutral600\" textAlign=\"center\">\n {displayTitle}\n </Typography>\n {error && (\n <Typography variant=\"pi\" textColor=\"danger600\">\n {error}\n </Typography>\n )}\n </Flex>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Dropzone Compound\n * -----------------------------------------------------------------------------------------------*/\n\nexport const Dropzone = {\n Root,\n Area,\n useDropzoneContext,\n};\n"],"names":["useClipboardPasteImages","onAddFiles","isEnabled","handlePaste","useCallback","e","items","clipboardData","length","files","item","kind","file","getAsFile","type","startsWith","push","preventDefault","useEffect","document","addEventListener","removeEventListener","DropzoneContext","createContext","useDropzoneContext","useContext","Root","children","accept","props","getRootProps","isDragActive","useDropzone","onDrop","noClick","noKeyboard","_jsx","Provider","value","Flex","direction","alignItems","width","position","Area","error","title","displayTitle","_jsxs","top","left","right","bottom","zIndex","cursor","height","borderStyle","borderColor","background","hasRadius","padding","justifyContent","gap","Box","svg","viewBox","fill","xmlns","path","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","Typography","variant","textColor","textAlign","Dropzone"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dropzone.js","sources":["../../../../../admin/src/components/AIChat/components/Dropzone.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect, useMemo } from 'react';\n\nimport { Flex, Box, Typography } from '@strapi/design-system';\nimport { useDropzone } from 'react-dropzone';\n\nconst DEFAULT_ON_ADD_FILES: NonNullable<DropzoneRootProps['onAddFiles']> = () => {};\nconst DEFAULT_ACCEPT: NonNullable<DropzoneRootProps['accept']> = { 'image/*': [] };\n\n/* -------------------------------------------------------------------------------------------------\n * Hooks\n * -----------------------------------------------------------------------------------------------*/\n\ninterface UseClipboardPasteProps {\n onAddFiles: (files: File[]) => void;\n isEnabled?: boolean;\n accept?: {\n [key: string]: string[];\n };\n}\n\nexport const useClipboardPasteImages = ({\n onAddFiles,\n isEnabled = false,\n}: UseClipboardPasteProps) => {\n const handlePaste = useCallback(\n async (e: ClipboardEvent) => {\n if (!isEnabled) return;\n // Try to get items from clipboard\n const items = e.clipboardData?.items;\n\n if (!items || items.length === 0) return;\n\n const files: File[] = [];\n\n // Process clipboard items\n for (const item of items) {\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (file && file.type.startsWith('image/')) {\n files.push(file);\n }\n }\n }\n\n if (files.length > 0) {\n onAddFiles(files);\n e.preventDefault(); // Prevent the default paste behavior\n }\n },\n [isEnabled, onAddFiles]\n );\n\n // Set up the paste event listener\n useEffect(() => {\n document.addEventListener('paste', handlePaste);\n return () => {\n document.removeEventListener('paste', handlePaste);\n };\n }, [handlePaste]);\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Dropzone Context\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface DropzoneContextValue {\n isEnabled?: boolean;\n isDragActive?: boolean;\n onAddFiles?: (files: File[]) => void;\n}\n\nconst DropzoneContext = createContext<DropzoneContextValue>({});\n\nexport const useDropzoneContext = () => useContext(DropzoneContext);\n\n/* -------------------------------------------------------------------------------------------------\n * Dropzone Root\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface DropzoneRootProps extends React.ComponentPropsWithoutRef<typeof Flex> {\n children: React.ReactNode;\n isEnabled?: boolean;\n onAddFiles?: (files: File[]) => void;\n accept?: {\n [key: string]: string[];\n };\n}\n\nexport const Root = ({\n children,\n isEnabled = true,\n onAddFiles = DEFAULT_ON_ADD_FILES,\n accept = DEFAULT_ACCEPT,\n ...props\n}: DropzoneRootProps) => {\n // Use clipboard paste hook for handling clipboard events\n useClipboardPasteImages({ onAddFiles, isEnabled, accept });\n\n // Use dropzone for drag and drop functionality\n const { getRootProps, isDragActive } = useDropzone({\n onDrop: onAddFiles,\n noClick: true,\n noKeyboard: true,\n accept,\n });\n const contextValue = useMemo(\n () => ({ isEnabled, isDragActive, onAddFiles }),\n [isEnabled, isDragActive, onAddFiles]\n );\n\n return (\n <DropzoneContext.Provider value={contextValue}>\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n width=\"100%\"\n position=\"relative\"\n {...getRootProps()}\n {...props}\n >\n {children}\n </Flex>\n </DropzoneContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Dropzone Area\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DropzoneAreaProps extends React.ComponentPropsWithoutRef<typeof Flex> {\n error?: string | null;\n title?: string;\n}\n\nconst Area = ({ error, title, ...props }: DropzoneAreaProps) => {\n const { isEnabled, isDragActive } = useDropzoneContext();\n\n // If not dragging, don't render the dropzone area\n if (!isDragActive) {\n return null;\n }\n\n const displayTitle = title || 'Drop images here';\n\n return (\n <Flex\n position=\"absolute\"\n top={0}\n left={0}\n right={0}\n bottom={0}\n zIndex={2}\n cursor={isEnabled ? 'pointer' : 'not-allowed'}\n width=\"100%\"\n height=\"100%\"\n borderStyle=\"dashed\"\n borderColor={error ? 'danger600' : 'primary500'}\n background={error ? 'danger100' : 'primary100'}\n hasRadius\n padding={7}\n justifyContent=\"center\"\n direction=\"column\"\n alignItems=\"center\"\n gap={2}\n {...props}\n >\n <Box width=\"24px\" height=\"24px\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M19.5 13.572L12 6.072L4.5 13.572\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 6.072V20.072\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.9998 20.072H20.0001\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </Box>\n <Flex direction=\"column\" alignItems=\"center\" gap={2}>\n <Typography variant=\"omega\" textColor=\"neutral600\" textAlign=\"center\">\n {displayTitle}\n </Typography>\n {error && (\n <Typography variant=\"pi\" textColor=\"danger600\">\n {error}\n </Typography>\n )}\n </Flex>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Dropzone Compound\n * -----------------------------------------------------------------------------------------------*/\n\nexport const Dropzone = {\n Root,\n Area,\n useDropzoneContext,\n};\n"],"names":["DEFAULT_ON_ADD_FILES","DEFAULT_ACCEPT","useClipboardPasteImages","onAddFiles","isEnabled","handlePaste","useCallback","e","items","clipboardData","length","files","item","kind","file","getAsFile","type","startsWith","push","preventDefault","useEffect","document","addEventListener","removeEventListener","DropzoneContext","createContext","useDropzoneContext","useContext","Root","children","accept","props","getRootProps","isDragActive","useDropzone","onDrop","noClick","noKeyboard","contextValue","useMemo","_jsx","Provider","value","Flex","direction","alignItems","width","position","Area","error","title","displayTitle","_jsxs","top","left","right","bottom","zIndex","cursor","height","borderStyle","borderColor","background","hasRadius","padding","justifyContent","gap","Box","svg","viewBox","fill","xmlns","path","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","Typography","variant","textColor","textAlign","Dropzone"],"mappings":"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"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import { useCallback, useEffect, createContext, useContext } from 'react';
|
|
2
|
+
import { useMemo, useCallback, useEffect, createContext, useContext } from 'react';
|
|
3
3
|
import { Flex, Box, Typography } from '@strapi/design-system';
|
|
4
4
|
import { useDropzone } from 'react-dropzone';
|
|
5
5
|
|
|
6
|
+
const DEFAULT_ON_ADD_FILES = ()=>{};
|
|
7
|
+
const DEFAULT_ACCEPT = {
|
|
8
|
+
'image/*': []
|
|
9
|
+
};
|
|
6
10
|
const useClipboardPasteImages = ({ onAddFiles, isEnabled = false })=>{
|
|
7
11
|
const handlePaste = useCallback(async (e)=>{
|
|
8
12
|
if (!isEnabled) return;
|
|
@@ -39,9 +43,7 @@ const useClipboardPasteImages = ({ onAddFiles, isEnabled = false })=>{
|
|
|
39
43
|
};
|
|
40
44
|
const DropzoneContext = /*#__PURE__*/ createContext({});
|
|
41
45
|
const useDropzoneContext = ()=>useContext(DropzoneContext);
|
|
42
|
-
const Root = ({ children, isEnabled = true, onAddFiles =
|
|
43
|
-
'image/*': []
|
|
44
|
-
}, ...props })=>{
|
|
46
|
+
const Root = ({ children, isEnabled = true, onAddFiles = DEFAULT_ON_ADD_FILES, accept = DEFAULT_ACCEPT, ...props })=>{
|
|
45
47
|
// Use clipboard paste hook for handling clipboard events
|
|
46
48
|
useClipboardPasteImages({
|
|
47
49
|
onAddFiles,
|
|
@@ -53,12 +55,17 @@ const Root = ({ children, isEnabled = true, onAddFiles = ()=>{}, accept = {
|
|
|
53
55
|
noKeyboard: true,
|
|
54
56
|
accept
|
|
55
57
|
});
|
|
56
|
-
|
|
57
|
-
value: {
|
|
58
|
+
const contextValue = useMemo(()=>({
|
|
58
59
|
isEnabled,
|
|
59
60
|
isDragActive,
|
|
60
61
|
onAddFiles
|
|
61
|
-
},
|
|
62
|
+
}), [
|
|
63
|
+
isEnabled,
|
|
64
|
+
isDragActive,
|
|
65
|
+
onAddFiles
|
|
66
|
+
]);
|
|
67
|
+
return /*#__PURE__*/ jsx(DropzoneContext.Provider, {
|
|
68
|
+
value: contextValue,
|
|
62
69
|
children: /*#__PURE__*/ jsx(Flex, {
|
|
63
70
|
direction: "column",
|
|
64
71
|
alignItems: "flex-start",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropzone.mjs","sources":["../../../../../admin/src/components/AIChat/components/Dropzone.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect } from 'react';\n\nimport { Flex, Box, Typography } from '@strapi/design-system';\nimport { useDropzone } from 'react-dropzone';\n\n/* -------------------------------------------------------------------------------------------------\n * Hooks\n * -----------------------------------------------------------------------------------------------*/\n\ninterface UseClipboardPasteProps {\n onAddFiles: (files: File[]) => void;\n isEnabled?: boolean;\n accept?: {\n [key: string]: string[];\n };\n}\n\nexport const useClipboardPasteImages = ({\n onAddFiles,\n isEnabled = false,\n}: UseClipboardPasteProps) => {\n const handlePaste = useCallback(\n async (e: ClipboardEvent) => {\n if (!isEnabled) return;\n // Try to get items from clipboard\n const items = e.clipboardData?.items;\n\n if (!items || items.length === 0) return;\n\n const files: File[] = [];\n\n // Process clipboard items\n for (const item of items) {\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (file && file.type.startsWith('image/')) {\n files.push(file);\n }\n }\n }\n\n if (files.length > 0) {\n onAddFiles(files);\n e.preventDefault(); // Prevent the default paste behavior\n }\n },\n [isEnabled, onAddFiles]\n );\n\n // Set up the paste event listener\n useEffect(() => {\n document.addEventListener('paste', handlePaste);\n return () => {\n document.removeEventListener('paste', handlePaste);\n };\n }, [handlePaste]);\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Dropzone Context\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface DropzoneContextValue {\n isEnabled?: boolean;\n isDragActive?: boolean;\n onAddFiles?: (files: File[]) => void;\n}\n\nconst DropzoneContext = createContext<DropzoneContextValue>({});\n\nexport const useDropzoneContext = () => useContext(DropzoneContext);\n\n/* -------------------------------------------------------------------------------------------------\n * Dropzone Root\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface DropzoneRootProps extends React.ComponentPropsWithoutRef<typeof Flex> {\n children: React.ReactNode;\n isEnabled?: boolean;\n onAddFiles?: (files: File[]) => void;\n accept?: {\n [key: string]: string[];\n };\n}\n\nexport const Root = ({\n children,\n isEnabled = true,\n onAddFiles = () => {},\n accept = { 'image/*': [] },\n ...props\n}: DropzoneRootProps) => {\n // Use clipboard paste hook for handling clipboard events\n useClipboardPasteImages({ onAddFiles, isEnabled, accept });\n\n // Use dropzone for drag and drop functionality\n const { getRootProps, isDragActive } = useDropzone({\n onDrop: onAddFiles,\n noClick: true,\n noKeyboard: true,\n accept,\n });\n\n return (\n <DropzoneContext.Provider\n value={{\n isEnabled,\n isDragActive,\n onAddFiles,\n }}\n >\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n width=\"100%\"\n position=\"relative\"\n {...getRootProps()}\n {...props}\n >\n {children}\n </Flex>\n </DropzoneContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Dropzone Area\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DropzoneAreaProps extends React.ComponentPropsWithoutRef<typeof Flex> {\n error?: string | null;\n title?: string;\n}\n\nconst Area = ({ error, title, ...props }: DropzoneAreaProps) => {\n const { isEnabled, isDragActive } = useDropzoneContext();\n\n // If not dragging, don't render the dropzone area\n if (!isDragActive) {\n return null;\n }\n\n const displayTitle = title || 'Drop images here';\n\n return (\n <Flex\n position=\"absolute\"\n top={0}\n left={0}\n right={0}\n bottom={0}\n zIndex={2}\n cursor={isEnabled ? 'pointer' : 'not-allowed'}\n width=\"100%\"\n height=\"100%\"\n borderStyle=\"dashed\"\n borderColor={error ? 'danger600' : 'primary500'}\n background={error ? 'danger100' : 'primary100'}\n hasRadius\n padding={7}\n justifyContent=\"center\"\n direction=\"column\"\n alignItems=\"center\"\n gap={2}\n {...props}\n >\n <Box width=\"24px\" height=\"24px\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M19.5 13.572L12 6.072L4.5 13.572\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 6.072V20.072\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.9998 20.072H20.0001\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </Box>\n <Flex direction=\"column\" alignItems=\"center\" gap={2}>\n <Typography variant=\"omega\" textColor=\"neutral600\" textAlign=\"center\">\n {displayTitle}\n </Typography>\n {error && (\n <Typography variant=\"pi\" textColor=\"danger600\">\n {error}\n </Typography>\n )}\n </Flex>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Dropzone Compound\n * -----------------------------------------------------------------------------------------------*/\n\nexport const Dropzone = {\n Root,\n Area,\n useDropzoneContext,\n};\n"],"names":["useClipboardPasteImages","onAddFiles","isEnabled","handlePaste","useCallback","e","items","clipboardData","length","files","item","kind","file","getAsFile","type","startsWith","push","preventDefault","useEffect","document","addEventListener","removeEventListener","DropzoneContext","createContext","useDropzoneContext","useContext","Root","children","accept","props","getRootProps","isDragActive","useDropzone","onDrop","noClick","noKeyboard","_jsx","Provider","value","Flex","direction","alignItems","width","position","Area","error","title","displayTitle","_jsxs","top","left","right","bottom","zIndex","cursor","height","borderStyle","borderColor","background","hasRadius","padding","justifyContent","gap","Box","svg","viewBox","fill","xmlns","path","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","Typography","variant","textColor","textAlign","Dropzone"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dropzone.mjs","sources":["../../../../../admin/src/components/AIChat/components/Dropzone.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect, useMemo } from 'react';\n\nimport { Flex, Box, Typography } from '@strapi/design-system';\nimport { useDropzone } from 'react-dropzone';\n\nconst DEFAULT_ON_ADD_FILES: NonNullable<DropzoneRootProps['onAddFiles']> = () => {};\nconst DEFAULT_ACCEPT: NonNullable<DropzoneRootProps['accept']> = { 'image/*': [] };\n\n/* -------------------------------------------------------------------------------------------------\n * Hooks\n * -----------------------------------------------------------------------------------------------*/\n\ninterface UseClipboardPasteProps {\n onAddFiles: (files: File[]) => void;\n isEnabled?: boolean;\n accept?: {\n [key: string]: string[];\n };\n}\n\nexport const useClipboardPasteImages = ({\n onAddFiles,\n isEnabled = false,\n}: UseClipboardPasteProps) => {\n const handlePaste = useCallback(\n async (e: ClipboardEvent) => {\n if (!isEnabled) return;\n // Try to get items from clipboard\n const items = e.clipboardData?.items;\n\n if (!items || items.length === 0) return;\n\n const files: File[] = [];\n\n // Process clipboard items\n for (const item of items) {\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (file && file.type.startsWith('image/')) {\n files.push(file);\n }\n }\n }\n\n if (files.length > 0) {\n onAddFiles(files);\n e.preventDefault(); // Prevent the default paste behavior\n }\n },\n [isEnabled, onAddFiles]\n );\n\n // Set up the paste event listener\n useEffect(() => {\n document.addEventListener('paste', handlePaste);\n return () => {\n document.removeEventListener('paste', handlePaste);\n };\n }, [handlePaste]);\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Dropzone Context\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface DropzoneContextValue {\n isEnabled?: boolean;\n isDragActive?: boolean;\n onAddFiles?: (files: File[]) => void;\n}\n\nconst DropzoneContext = createContext<DropzoneContextValue>({});\n\nexport const useDropzoneContext = () => useContext(DropzoneContext);\n\n/* -------------------------------------------------------------------------------------------------\n * Dropzone Root\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface DropzoneRootProps extends React.ComponentPropsWithoutRef<typeof Flex> {\n children: React.ReactNode;\n isEnabled?: boolean;\n onAddFiles?: (files: File[]) => void;\n accept?: {\n [key: string]: string[];\n };\n}\n\nexport const Root = ({\n children,\n isEnabled = true,\n onAddFiles = DEFAULT_ON_ADD_FILES,\n accept = DEFAULT_ACCEPT,\n ...props\n}: DropzoneRootProps) => {\n // Use clipboard paste hook for handling clipboard events\n useClipboardPasteImages({ onAddFiles, isEnabled, accept });\n\n // Use dropzone for drag and drop functionality\n const { getRootProps, isDragActive } = useDropzone({\n onDrop: onAddFiles,\n noClick: true,\n noKeyboard: true,\n accept,\n });\n const contextValue = useMemo(\n () => ({ isEnabled, isDragActive, onAddFiles }),\n [isEnabled, isDragActive, onAddFiles]\n );\n\n return (\n <DropzoneContext.Provider value={contextValue}>\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n width=\"100%\"\n position=\"relative\"\n {...getRootProps()}\n {...props}\n >\n {children}\n </Flex>\n </DropzoneContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Dropzone Area\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DropzoneAreaProps extends React.ComponentPropsWithoutRef<typeof Flex> {\n error?: string | null;\n title?: string;\n}\n\nconst Area = ({ error, title, ...props }: DropzoneAreaProps) => {\n const { isEnabled, isDragActive } = useDropzoneContext();\n\n // If not dragging, don't render the dropzone area\n if (!isDragActive) {\n return null;\n }\n\n const displayTitle = title || 'Drop images here';\n\n return (\n <Flex\n position=\"absolute\"\n top={0}\n left={0}\n right={0}\n bottom={0}\n zIndex={2}\n cursor={isEnabled ? 'pointer' : 'not-allowed'}\n width=\"100%\"\n height=\"100%\"\n borderStyle=\"dashed\"\n borderColor={error ? 'danger600' : 'primary500'}\n background={error ? 'danger100' : 'primary100'}\n hasRadius\n padding={7}\n justifyContent=\"center\"\n direction=\"column\"\n alignItems=\"center\"\n gap={2}\n {...props}\n >\n <Box width=\"24px\" height=\"24px\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M19.5 13.572L12 6.072L4.5 13.572\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 6.072V20.072\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.9998 20.072H20.0001\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </Box>\n <Flex direction=\"column\" alignItems=\"center\" gap={2}>\n <Typography variant=\"omega\" textColor=\"neutral600\" textAlign=\"center\">\n {displayTitle}\n </Typography>\n {error && (\n <Typography variant=\"pi\" textColor=\"danger600\">\n {error}\n </Typography>\n )}\n </Flex>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Dropzone Compound\n * -----------------------------------------------------------------------------------------------*/\n\nexport const Dropzone = {\n Root,\n Area,\n useDropzoneContext,\n};\n"],"names":["DEFAULT_ON_ADD_FILES","DEFAULT_ACCEPT","useClipboardPasteImages","onAddFiles","isEnabled","handlePaste","useCallback","e","items","clipboardData","length","files","item","kind","file","getAsFile","type","startsWith","push","preventDefault","useEffect","document","addEventListener","removeEventListener","DropzoneContext","createContext","useDropzoneContext","useContext","Root","children","accept","props","getRootProps","isDragActive","useDropzone","onDrop","noClick","noKeyboard","contextValue","useMemo","_jsx","Provider","value","Flex","direction","alignItems","width","position","Area","error","title","displayTitle","_jsxs","top","left","right","bottom","zIndex","cursor","height","borderStyle","borderColor","background","hasRadius","padding","justifyContent","gap","Box","svg","viewBox","fill","xmlns","path","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","Typography","variant","textColor","textAlign","Dropzone"],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ var Icons = require('@strapi/icons');
|
|
|
7
7
|
var styledComponents = require('styled-components');
|
|
8
8
|
var animations = require('./animations.js');
|
|
9
9
|
|
|
10
|
+
const DEFAULT_ON_TOGGLE = ()=>{};
|
|
10
11
|
const PanelContext = /*#__PURE__*/ React.createContext({
|
|
11
12
|
size: 'md',
|
|
12
13
|
position: 'bottom-right',
|
|
@@ -78,14 +79,20 @@ const PanelContainer = styledComponents.styled(designSystem.Box)`
|
|
|
78
79
|
}
|
|
79
80
|
}
|
|
80
81
|
`;
|
|
81
|
-
const Root = ({ children, size = 'md', position = 'bottom-right', isOpen = false, onToggle =
|
|
82
|
-
|
|
83
|
-
value: {
|
|
82
|
+
const Root = ({ children, size = 'md', position = 'bottom-right', isOpen = false, onToggle = DEFAULT_ON_TOGGLE, toggleIcon })=>{
|
|
83
|
+
const contextValue = React.useMemo(()=>({
|
|
84
84
|
size,
|
|
85
85
|
position,
|
|
86
86
|
isOpen,
|
|
87
87
|
onToggle
|
|
88
|
-
},
|
|
88
|
+
}), [
|
|
89
|
+
size,
|
|
90
|
+
position,
|
|
91
|
+
isOpen,
|
|
92
|
+
onToggle
|
|
93
|
+
]);
|
|
94
|
+
return /*#__PURE__*/ jsxRuntime.jsx(PanelContext.Provider, {
|
|
95
|
+
value: contextValue,
|
|
89
96
|
children: /*#__PURE__*/ jsxRuntime.jsxs(FixedWrapper, {
|
|
90
97
|
$position: position,
|
|
91
98
|
children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingPanel.js","sources":["../../../../../admin/src/components/AIChat/components/FloatingPanel.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nimport { Box, Flex, IconButton } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { ANIMATIONS } from './animations';\n\ntype PanelSize = 'sm' | 'md' | 'lg';\ntype PanelPosition = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';\n\ninterface PanelContextValue {\n size: PanelSize;\n position: PanelPosition;\n isOpen: boolean;\n onToggle: () => void;\n}\n\nconst PanelContext = createContext<PanelContextValue>({\n size: 'md',\n position: 'bottom-right',\n isOpen: false,\n onToggle: () => {},\n});\n\nconst PANEL_SIZES: Record<PanelSize, { width: string; height: string }> = {\n sm: { width: '350px', height: '500px' },\n md: { width: '480px', height: '600px' },\n lg: { width: '600px', height: '700px' },\n};\n\nconst PANEL_POSITIONS: Record<PanelPosition, { [key: string]: number }> = {\n 'bottom-right': { bottom: 4, right: 4 },\n 'bottom-left': { bottom: 4, left: 4 },\n 'top-right': { top: 4, right: 4 },\n 'top-left': { top: 4, left: 4 },\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Panel Root\n * -----------------------------------------------------------------------------------------------*/\ninterface RootProps {\n children: React.ReactNode;\n size?: PanelSize;\n position?: PanelPosition;\n isOpen?: boolean;\n onToggle?: () => void;\n toggleIcon?: React.ReactNode;\n}\n\nconst FixedWrapper = styled(Box)<{ $position: PanelPosition }>`\n position: fixed;\n display: flex;\n flex-direction: column;\n z-index: 11;\n align-items: ${({ $position }) => ($position.includes('right') ? 'flex-end' : 'flex-start')};\n ${({ $position, theme }) =>\n Object.entries(PANEL_POSITIONS[$position]).reduce(\n (acc, [key, value]) => ({\n ...acc,\n [key]: theme.spaces[value],\n }),\n {}\n )}\n`;\n\nconst PanelContainer = styled(Box)<{ $size: PanelSize; $position: PanelPosition }>`\n width: ${({ $size }) => PANEL_SIZES[$size].width};\n max-height: 85vh;\n max-width: 85vw;\n display: flex;\n flex-direction: column;\n height: ${({ $size }) => PANEL_SIZES[$size].height};\n\n @media (prefers-reduced-motion: no-preference) {\n animation-duration: 200ms;\n animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n\n &[data-state='open'] {\n animation-name: ${({ $position }) =>\n $position.startsWith('top') ? ANIMATIONS.slideDownIn : ANIMATIONS.slideUpIn};\n }\n\n &[data-state='closed'] {\n animation-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);\n animation-name: ${({ $position }) =>\n $position.startsWith('top') ? ANIMATIONS.slideDownOut : ANIMATIONS.slideUpOut};\n }\n }\n`;\n\nconst Root = ({\n children,\n size = 'md',\n position = 'bottom-right',\n isOpen = false,\n onToggle = () => {},\n toggleIcon,\n}: RootProps) => {\n return (\n <PanelContext.Provider value={{ size, position, isOpen, onToggle }}>\n <FixedWrapper $position={position}>\n {isOpen ? (\n <PanelContainer\n $size={size}\n $position={position}\n background=\"neutral0\"\n shadow=\"popupShadow\"\n hasRadius\n borderColor=\"neutral200\"\n borderStyle=\"solid\"\n borderWidth=\"1px\"\n data-state={isOpen ? 'open' : 'closed'}\n >\n {children}\n </PanelContainer>\n ) : null}\n {toggleIcon && !isOpen && toggleIcon}\n </FixedWrapper>\n </PanelContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\nconst Header = ({ children }: { children: React.ReactNode }) => (\n // Adjust padding to fit title and right icons\n <Box padding={[2, 2, 2, 4]} borderColor=\"neutral150\" borderStyle=\"solid\" borderWidth=\"0 0 1px 0\">\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n {children}\n </Flex>\n </Box>\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Body\n * -----------------------------------------------------------------------------------------------*/\nconst Body = ({ children }: { children: React.ReactNode }) => {\n return (\n <Box padding={4} flex=\"1\" overflow=\"auto\">\n {children}\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Footer\n * -----------------------------------------------------------------------------------------------*/\nconst Footer = ({ children }: { children: React.ReactNode }) => <Box padding={4}>{children}</Box>;\n\n/* -------------------------------------------------------------------------------------------------\n * Close Panel\n * -----------------------------------------------------------------------------------------------*/\nconst Close = ({ label }: { label?: string }) => {\n const { onToggle } = usePanel();\n\n return (\n <IconButton onClick={onToggle} variant=\"ghost\" label={label || 'Close'}>\n <Cross />\n </IconButton>\n );\n};\n\nexport const Panel = {\n Root,\n Header,\n Body,\n Footer,\n Close,\n};\n\nexport const usePanel = () => useContext(PanelContext);\n"],"names":["PanelContext","createContext","size","position","isOpen","onToggle","PANEL_SIZES","sm","width","height","md","lg","PANEL_POSITIONS","bottom","right","left","top","FixedWrapper","styled","Box","$position","includes","theme","Object","entries","reduce","acc","key","value","spaces","PanelContainer","$size","startsWith","ANIMATIONS","slideDownIn","slideUpIn","slideDownOut","slideUpOut","Root","children","toggleIcon","_jsx","Provider","_jsxs","background","shadow","hasRadius","borderColor","borderStyle","borderWidth","data-state","Header","padding","Flex","justifyContent","alignItems","Body","flex","overflow","Footer","Close","label","usePanel","IconButton","onClick","variant","Cross","Panel","useContext"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FloatingPanel.js","sources":["../../../../../admin/src/components/AIChat/components/FloatingPanel.tsx"],"sourcesContent":["import { createContext, useContext, useMemo } from 'react';\n\nimport { Box, Flex, IconButton } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { ANIMATIONS } from './animations';\n\nconst DEFAULT_ON_TOGGLE: NonNullable<RootProps['onToggle']> = () => {};\n\ntype PanelSize = 'sm' | 'md' | 'lg';\ntype PanelPosition = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';\n\ninterface PanelContextValue {\n size: PanelSize;\n position: PanelPosition;\n isOpen: boolean;\n onToggle: () => void;\n}\n\nconst PanelContext = createContext<PanelContextValue>({\n size: 'md',\n position: 'bottom-right',\n isOpen: false,\n onToggle: () => {},\n});\n\nconst PANEL_SIZES: Record<PanelSize, { width: string; height: string }> = {\n sm: { width: '350px', height: '500px' },\n md: { width: '480px', height: '600px' },\n lg: { width: '600px', height: '700px' },\n};\n\nconst PANEL_POSITIONS: Record<PanelPosition, { [key: string]: number }> = {\n 'bottom-right': { bottom: 4, right: 4 },\n 'bottom-left': { bottom: 4, left: 4 },\n 'top-right': { top: 4, right: 4 },\n 'top-left': { top: 4, left: 4 },\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Panel Root\n * -----------------------------------------------------------------------------------------------*/\ninterface RootProps {\n children: React.ReactNode;\n size?: PanelSize;\n position?: PanelPosition;\n isOpen?: boolean;\n onToggle?: () => void;\n toggleIcon?: React.ReactNode;\n}\n\nconst FixedWrapper = styled(Box)<{ $position: PanelPosition }>`\n position: fixed;\n display: flex;\n flex-direction: column;\n z-index: 11;\n align-items: ${({ $position }) => ($position.includes('right') ? 'flex-end' : 'flex-start')};\n ${({ $position, theme }) =>\n Object.entries(PANEL_POSITIONS[$position]).reduce(\n (acc, [key, value]) => ({\n ...acc,\n [key]: theme.spaces[value],\n }),\n {}\n )}\n`;\n\nconst PanelContainer = styled(Box)<{ $size: PanelSize; $position: PanelPosition }>`\n width: ${({ $size }) => PANEL_SIZES[$size].width};\n max-height: 85vh;\n max-width: 85vw;\n display: flex;\n flex-direction: column;\n height: ${({ $size }) => PANEL_SIZES[$size].height};\n\n @media (prefers-reduced-motion: no-preference) {\n animation-duration: 200ms;\n animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n\n &[data-state='open'] {\n animation-name: ${({ $position }) =>\n $position.startsWith('top') ? ANIMATIONS.slideDownIn : ANIMATIONS.slideUpIn};\n }\n\n &[data-state='closed'] {\n animation-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);\n animation-name: ${({ $position }) =>\n $position.startsWith('top') ? ANIMATIONS.slideDownOut : ANIMATIONS.slideUpOut};\n }\n }\n`;\n\nconst Root = ({\n children,\n size = 'md',\n position = 'bottom-right',\n isOpen = false,\n onToggle = DEFAULT_ON_TOGGLE,\n toggleIcon,\n}: RootProps) => {\n const contextValue = useMemo(\n () => ({ size, position, isOpen, onToggle }),\n [size, position, isOpen, onToggle]\n );\n\n return (\n <PanelContext.Provider value={contextValue}>\n <FixedWrapper $position={position}>\n {isOpen ? (\n <PanelContainer\n $size={size}\n $position={position}\n background=\"neutral0\"\n shadow=\"popupShadow\"\n hasRadius\n borderColor=\"neutral200\"\n borderStyle=\"solid\"\n borderWidth=\"1px\"\n data-state={isOpen ? 'open' : 'closed'}\n >\n {children}\n </PanelContainer>\n ) : null}\n {toggleIcon && !isOpen && toggleIcon}\n </FixedWrapper>\n </PanelContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\nconst Header = ({ children }: { children: React.ReactNode }) => (\n // Adjust padding to fit title and right icons\n <Box padding={[2, 2, 2, 4]} borderColor=\"neutral150\" borderStyle=\"solid\" borderWidth=\"0 0 1px 0\">\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n {children}\n </Flex>\n </Box>\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Body\n * -----------------------------------------------------------------------------------------------*/\nconst Body = ({ children }: { children: React.ReactNode }) => {\n return (\n <Box padding={4} flex=\"1\" overflow=\"auto\">\n {children}\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Footer\n * -----------------------------------------------------------------------------------------------*/\nconst Footer = ({ children }: { children: React.ReactNode }) => <Box padding={4}>{children}</Box>;\n\n/* -------------------------------------------------------------------------------------------------\n * Close Panel\n * -----------------------------------------------------------------------------------------------*/\nconst Close = ({ label }: { label?: string }) => {\n const { onToggle } = usePanel();\n\n return (\n <IconButton onClick={onToggle} variant=\"ghost\" label={label || 'Close'}>\n <Cross />\n </IconButton>\n );\n};\n\nexport const Panel = {\n Root,\n Header,\n Body,\n Footer,\n Close,\n};\n\nexport const usePanel = () => useContext(PanelContext);\n"],"names":["DEFAULT_ON_TOGGLE","PanelContext","createContext","size","position","isOpen","onToggle","PANEL_SIZES","sm","width","height","md","lg","PANEL_POSITIONS","bottom","right","left","top","FixedWrapper","styled","Box","$position","includes","theme","Object","entries","reduce","acc","key","value","spaces","PanelContainer","$size","startsWith","ANIMATIONS","slideDownIn","slideUpIn","slideDownOut","slideUpOut","Root","children","toggleIcon","contextValue","useMemo","_jsx","Provider","_jsxs","background","shadow","hasRadius","borderColor","borderStyle","borderWidth","data-state","Header","padding","Flex","justifyContent","alignItems","Body","flex","overflow","Footer","Close","label","usePanel","IconButton","onClick","variant","Cross","Panel","useContext"],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import { createContext, useContext } from 'react';
|
|
2
|
+
import { useMemo, createContext, useContext } from 'react';
|
|
3
3
|
import { Box, Flex, IconButton } from '@strapi/design-system';
|
|
4
4
|
import { Cross } from '@strapi/icons';
|
|
5
5
|
import { styled } from 'styled-components';
|
|
6
6
|
import { ANIMATIONS } from './animations.mjs';
|
|
7
7
|
|
|
8
|
+
const DEFAULT_ON_TOGGLE = ()=>{};
|
|
8
9
|
const PanelContext = /*#__PURE__*/ createContext({
|
|
9
10
|
size: 'md',
|
|
10
11
|
position: 'bottom-right',
|
|
@@ -76,14 +77,20 @@ const PanelContainer = styled(Box)`
|
|
|
76
77
|
}
|
|
77
78
|
}
|
|
78
79
|
`;
|
|
79
|
-
const Root = ({ children, size = 'md', position = 'bottom-right', isOpen = false, onToggle =
|
|
80
|
-
|
|
81
|
-
value: {
|
|
80
|
+
const Root = ({ children, size = 'md', position = 'bottom-right', isOpen = false, onToggle = DEFAULT_ON_TOGGLE, toggleIcon })=>{
|
|
81
|
+
const contextValue = useMemo(()=>({
|
|
82
82
|
size,
|
|
83
83
|
position,
|
|
84
84
|
isOpen,
|
|
85
85
|
onToggle
|
|
86
|
-
},
|
|
86
|
+
}), [
|
|
87
|
+
size,
|
|
88
|
+
position,
|
|
89
|
+
isOpen,
|
|
90
|
+
onToggle
|
|
91
|
+
]);
|
|
92
|
+
return /*#__PURE__*/ jsx(PanelContext.Provider, {
|
|
93
|
+
value: contextValue,
|
|
87
94
|
children: /*#__PURE__*/ jsxs(FixedWrapper, {
|
|
88
95
|
$position: position,
|
|
89
96
|
children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingPanel.mjs","sources":["../../../../../admin/src/components/AIChat/components/FloatingPanel.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nimport { Box, Flex, IconButton } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { ANIMATIONS } from './animations';\n\ntype PanelSize = 'sm' | 'md' | 'lg';\ntype PanelPosition = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';\n\ninterface PanelContextValue {\n size: PanelSize;\n position: PanelPosition;\n isOpen: boolean;\n onToggle: () => void;\n}\n\nconst PanelContext = createContext<PanelContextValue>({\n size: 'md',\n position: 'bottom-right',\n isOpen: false,\n onToggle: () => {},\n});\n\nconst PANEL_SIZES: Record<PanelSize, { width: string; height: string }> = {\n sm: { width: '350px', height: '500px' },\n md: { width: '480px', height: '600px' },\n lg: { width: '600px', height: '700px' },\n};\n\nconst PANEL_POSITIONS: Record<PanelPosition, { [key: string]: number }> = {\n 'bottom-right': { bottom: 4, right: 4 },\n 'bottom-left': { bottom: 4, left: 4 },\n 'top-right': { top: 4, right: 4 },\n 'top-left': { top: 4, left: 4 },\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Panel Root\n * -----------------------------------------------------------------------------------------------*/\ninterface RootProps {\n children: React.ReactNode;\n size?: PanelSize;\n position?: PanelPosition;\n isOpen?: boolean;\n onToggle?: () => void;\n toggleIcon?: React.ReactNode;\n}\n\nconst FixedWrapper = styled(Box)<{ $position: PanelPosition }>`\n position: fixed;\n display: flex;\n flex-direction: column;\n z-index: 11;\n align-items: ${({ $position }) => ($position.includes('right') ? 'flex-end' : 'flex-start')};\n ${({ $position, theme }) =>\n Object.entries(PANEL_POSITIONS[$position]).reduce(\n (acc, [key, value]) => ({\n ...acc,\n [key]: theme.spaces[value],\n }),\n {}\n )}\n`;\n\nconst PanelContainer = styled(Box)<{ $size: PanelSize; $position: PanelPosition }>`\n width: ${({ $size }) => PANEL_SIZES[$size].width};\n max-height: 85vh;\n max-width: 85vw;\n display: flex;\n flex-direction: column;\n height: ${({ $size }) => PANEL_SIZES[$size].height};\n\n @media (prefers-reduced-motion: no-preference) {\n animation-duration: 200ms;\n animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n\n &[data-state='open'] {\n animation-name: ${({ $position }) =>\n $position.startsWith('top') ? ANIMATIONS.slideDownIn : ANIMATIONS.slideUpIn};\n }\n\n &[data-state='closed'] {\n animation-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);\n animation-name: ${({ $position }) =>\n $position.startsWith('top') ? ANIMATIONS.slideDownOut : ANIMATIONS.slideUpOut};\n }\n }\n`;\n\nconst Root = ({\n children,\n size = 'md',\n position = 'bottom-right',\n isOpen = false,\n onToggle = () => {},\n toggleIcon,\n}: RootProps) => {\n return (\n <PanelContext.Provider value={{ size, position, isOpen, onToggle }}>\n <FixedWrapper $position={position}>\n {isOpen ? (\n <PanelContainer\n $size={size}\n $position={position}\n background=\"neutral0\"\n shadow=\"popupShadow\"\n hasRadius\n borderColor=\"neutral200\"\n borderStyle=\"solid\"\n borderWidth=\"1px\"\n data-state={isOpen ? 'open' : 'closed'}\n >\n {children}\n </PanelContainer>\n ) : null}\n {toggleIcon && !isOpen && toggleIcon}\n </FixedWrapper>\n </PanelContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\nconst Header = ({ children }: { children: React.ReactNode }) => (\n // Adjust padding to fit title and right icons\n <Box padding={[2, 2, 2, 4]} borderColor=\"neutral150\" borderStyle=\"solid\" borderWidth=\"0 0 1px 0\">\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n {children}\n </Flex>\n </Box>\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Body\n * -----------------------------------------------------------------------------------------------*/\nconst Body = ({ children }: { children: React.ReactNode }) => {\n return (\n <Box padding={4} flex=\"1\" overflow=\"auto\">\n {children}\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Footer\n * -----------------------------------------------------------------------------------------------*/\nconst Footer = ({ children }: { children: React.ReactNode }) => <Box padding={4}>{children}</Box>;\n\n/* -------------------------------------------------------------------------------------------------\n * Close Panel\n * -----------------------------------------------------------------------------------------------*/\nconst Close = ({ label }: { label?: string }) => {\n const { onToggle } = usePanel();\n\n return (\n <IconButton onClick={onToggle} variant=\"ghost\" label={label || 'Close'}>\n <Cross />\n </IconButton>\n );\n};\n\nexport const Panel = {\n Root,\n Header,\n Body,\n Footer,\n Close,\n};\n\nexport const usePanel = () => useContext(PanelContext);\n"],"names":["PanelContext","createContext","size","position","isOpen","onToggle","PANEL_SIZES","sm","width","height","md","lg","PANEL_POSITIONS","bottom","right","left","top","FixedWrapper","styled","Box","$position","includes","theme","Object","entries","reduce","acc","key","value","spaces","PanelContainer","$size","startsWith","ANIMATIONS","slideDownIn","slideUpIn","slideDownOut","slideUpOut","Root","children","toggleIcon","_jsx","Provider","_jsxs","background","shadow","hasRadius","borderColor","borderStyle","borderWidth","data-state","Header","padding","Flex","justifyContent","alignItems","Body","flex","overflow","Footer","Close","label","usePanel","IconButton","onClick","variant","Cross","Panel","useContext"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FloatingPanel.mjs","sources":["../../../../../admin/src/components/AIChat/components/FloatingPanel.tsx"],"sourcesContent":["import { createContext, useContext, useMemo } from 'react';\n\nimport { Box, Flex, IconButton } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { ANIMATIONS } from './animations';\n\nconst DEFAULT_ON_TOGGLE: NonNullable<RootProps['onToggle']> = () => {};\n\ntype PanelSize = 'sm' | 'md' | 'lg';\ntype PanelPosition = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';\n\ninterface PanelContextValue {\n size: PanelSize;\n position: PanelPosition;\n isOpen: boolean;\n onToggle: () => void;\n}\n\nconst PanelContext = createContext<PanelContextValue>({\n size: 'md',\n position: 'bottom-right',\n isOpen: false,\n onToggle: () => {},\n});\n\nconst PANEL_SIZES: Record<PanelSize, { width: string; height: string }> = {\n sm: { width: '350px', height: '500px' },\n md: { width: '480px', height: '600px' },\n lg: { width: '600px', height: '700px' },\n};\n\nconst PANEL_POSITIONS: Record<PanelPosition, { [key: string]: number }> = {\n 'bottom-right': { bottom: 4, right: 4 },\n 'bottom-left': { bottom: 4, left: 4 },\n 'top-right': { top: 4, right: 4 },\n 'top-left': { top: 4, left: 4 },\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Panel Root\n * -----------------------------------------------------------------------------------------------*/\ninterface RootProps {\n children: React.ReactNode;\n size?: PanelSize;\n position?: PanelPosition;\n isOpen?: boolean;\n onToggle?: () => void;\n toggleIcon?: React.ReactNode;\n}\n\nconst FixedWrapper = styled(Box)<{ $position: PanelPosition }>`\n position: fixed;\n display: flex;\n flex-direction: column;\n z-index: 11;\n align-items: ${({ $position }) => ($position.includes('right') ? 'flex-end' : 'flex-start')};\n ${({ $position, theme }) =>\n Object.entries(PANEL_POSITIONS[$position]).reduce(\n (acc, [key, value]) => ({\n ...acc,\n [key]: theme.spaces[value],\n }),\n {}\n )}\n`;\n\nconst PanelContainer = styled(Box)<{ $size: PanelSize; $position: PanelPosition }>`\n width: ${({ $size }) => PANEL_SIZES[$size].width};\n max-height: 85vh;\n max-width: 85vw;\n display: flex;\n flex-direction: column;\n height: ${({ $size }) => PANEL_SIZES[$size].height};\n\n @media (prefers-reduced-motion: no-preference) {\n animation-duration: 200ms;\n animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n\n &[data-state='open'] {\n animation-name: ${({ $position }) =>\n $position.startsWith('top') ? ANIMATIONS.slideDownIn : ANIMATIONS.slideUpIn};\n }\n\n &[data-state='closed'] {\n animation-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);\n animation-name: ${({ $position }) =>\n $position.startsWith('top') ? ANIMATIONS.slideDownOut : ANIMATIONS.slideUpOut};\n }\n }\n`;\n\nconst Root = ({\n children,\n size = 'md',\n position = 'bottom-right',\n isOpen = false,\n onToggle = DEFAULT_ON_TOGGLE,\n toggleIcon,\n}: RootProps) => {\n const contextValue = useMemo(\n () => ({ size, position, isOpen, onToggle }),\n [size, position, isOpen, onToggle]\n );\n\n return (\n <PanelContext.Provider value={contextValue}>\n <FixedWrapper $position={position}>\n {isOpen ? (\n <PanelContainer\n $size={size}\n $position={position}\n background=\"neutral0\"\n shadow=\"popupShadow\"\n hasRadius\n borderColor=\"neutral200\"\n borderStyle=\"solid\"\n borderWidth=\"1px\"\n data-state={isOpen ? 'open' : 'closed'}\n >\n {children}\n </PanelContainer>\n ) : null}\n {toggleIcon && !isOpen && toggleIcon}\n </FixedWrapper>\n </PanelContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\nconst Header = ({ children }: { children: React.ReactNode }) => (\n // Adjust padding to fit title and right icons\n <Box padding={[2, 2, 2, 4]} borderColor=\"neutral150\" borderStyle=\"solid\" borderWidth=\"0 0 1px 0\">\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n {children}\n </Flex>\n </Box>\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Body\n * -----------------------------------------------------------------------------------------------*/\nconst Body = ({ children }: { children: React.ReactNode }) => {\n return (\n <Box padding={4} flex=\"1\" overflow=\"auto\">\n {children}\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Footer\n * -----------------------------------------------------------------------------------------------*/\nconst Footer = ({ children }: { children: React.ReactNode }) => <Box padding={4}>{children}</Box>;\n\n/* -------------------------------------------------------------------------------------------------\n * Close Panel\n * -----------------------------------------------------------------------------------------------*/\nconst Close = ({ label }: { label?: string }) => {\n const { onToggle } = usePanel();\n\n return (\n <IconButton onClick={onToggle} variant=\"ghost\" label={label || 'Close'}>\n <Cross />\n </IconButton>\n );\n};\n\nexport const Panel = {\n Root,\n Header,\n Body,\n Footer,\n Close,\n};\n\nexport const usePanel = () => useContext(PanelContext);\n"],"names":["DEFAULT_ON_TOGGLE","PanelContext","createContext","size","position","isOpen","onToggle","PANEL_SIZES","sm","width","height","md","lg","PANEL_POSITIONS","bottom","right","left","top","FixedWrapper","styled","Box","$position","includes","theme","Object","entries","reduce","acc","key","value","spaces","PanelContainer","$size","startsWith","ANIMATIONS","slideDownIn","slideUpIn","slideDownOut","slideUpOut","Root","children","toggleIcon","contextValue","useMemo","_jsx","Provider","_jsxs","background","shadow","hasRadius","borderColor","borderStyle","borderWidth","data-state","Header","padding","Flex","justifyContent","alignItems","Body","flex","overflow","Footer","Close","label","usePanel","IconButton","onClick","variant","Cross","Panel","useContext"],"mappings":"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"}
|
|
@@ -118,19 +118,28 @@ const ImageModal = ({ src, alt, onClose })=>{
|
|
|
118
118
|
* -----------------------------------------------------------------------------------------------*/ // Root component that provides context
|
|
119
119
|
const Root = ({ children, src, alt, onClose, defaultOpen = false })=>{
|
|
120
120
|
const [isOpen, setIsOpen] = React.useState(defaultOpen);
|
|
121
|
-
const open = ()=>setIsOpen(true);
|
|
122
|
-
const close = ()=>{
|
|
121
|
+
const open = React.useCallback(()=>setIsOpen(true), []);
|
|
122
|
+
const close = React.useCallback(()=>{
|
|
123
123
|
setIsOpen(false);
|
|
124
124
|
onClose?.();
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
|
|
125
|
+
}, [
|
|
126
|
+
onClose
|
|
127
|
+
]);
|
|
128
|
+
const contextValue = React.useMemo(()=>({
|
|
128
129
|
isOpen,
|
|
129
130
|
open,
|
|
130
131
|
close,
|
|
131
132
|
src,
|
|
132
133
|
alt
|
|
133
|
-
},
|
|
134
|
+
}), [
|
|
135
|
+
isOpen,
|
|
136
|
+
open,
|
|
137
|
+
close,
|
|
138
|
+
src,
|
|
139
|
+
alt
|
|
140
|
+
]);
|
|
141
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(FullScreenImageContext.Provider, {
|
|
142
|
+
value: contextValue,
|
|
134
143
|
children: [
|
|
135
144
|
children,
|
|
136
145
|
isOpen && /*#__PURE__*/ jsxRuntime.jsx(ImageModal, {
|
|
@@ -182,8 +191,7 @@ const Trigger = ({ children, asChild = false })=>{
|
|
|
182
191
|
* Export
|
|
183
192
|
* -----------------------------------------------------------------------------------------------*/ const FullScreenImage = {
|
|
184
193
|
Root,
|
|
185
|
-
Trigger
|
|
186
|
-
};
|
|
194
|
+
Trigger};
|
|
187
195
|
|
|
188
196
|
exports.FullScreenImage = FullScreenImage;
|
|
189
197
|
exports.setOpacity = setOpacity;
|