@payloadcms/ui 3.24.0-canary.72057b1 → 3.24.0-canary.7d9fbaf
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/elements/AppHeader/index.d.ts.map +1 -1
- package/dist/elements/AppHeader/index.js +2 -4
- package/dist/elements/AppHeader/index.js.map +1 -1
- package/dist/elements/Banner/index.d.ts.map +1 -1
- package/dist/elements/Banner/index.js +1 -2
- package/dist/elements/Banner/index.js.map +1 -1
- package/dist/elements/BulkUpload/EditForm/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/EditForm/index.js +6 -2
- package/dist/elements/BulkUpload/EditForm/index.js.map +1 -1
- package/dist/elements/BulkUpload/EditMany/DrawerContent.d.ts.map +1 -1
- package/dist/elements/BulkUpload/EditMany/DrawerContent.js +22 -20
- package/dist/elements/BulkUpload/EditMany/DrawerContent.js.map +1 -1
- package/dist/elements/Button/index.d.ts.map +1 -1
- package/dist/elements/Button/index.js +11 -12
- package/dist/elements/Button/index.js.map +1 -1
- package/dist/elements/Button/types.d.ts +5 -0
- package/dist/elements/Button/types.d.ts.map +1 -1
- package/dist/elements/Button/types.js.map +1 -1
- package/dist/elements/Card/index.d.ts +7 -3
- package/dist/elements/Card/index.d.ts.map +1 -1
- package/dist/elements/Card/index.js +0 -2
- package/dist/elements/Card/index.js.map +1 -1
- package/dist/elements/CopyLocaleData/index.d.ts.map +1 -1
- package/dist/elements/CopyLocaleData/index.js +220 -99
- package/dist/elements/CopyLocaleData/index.js.map +1 -1
- package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
- package/dist/elements/DeleteDocument/index.js +7 -3
- package/dist/elements/DeleteDocument/index.js.map +1 -1
- package/dist/elements/DeleteMany/index.d.ts.map +1 -1
- package/dist/elements/DeleteMany/index.js +2 -2
- package/dist/elements/DeleteMany/index.js.map +1 -1
- package/dist/elements/DocumentLocked/index.d.ts.map +1 -1
- package/dist/elements/DocumentLocked/index.js +67 -39
- package/dist/elements/DocumentLocked/index.js.map +1 -1
- package/dist/elements/DocumentTakeOver/index.d.ts.map +1 -1
- package/dist/elements/DocumentTakeOver/index.js +28 -12
- package/dist/elements/DocumentTakeOver/index.js.map +1 -1
- package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
- package/dist/elements/DuplicateDocument/index.js +8 -4
- package/dist/elements/DuplicateDocument/index.js.map +1 -1
- package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
- package/dist/elements/EditMany/DrawerContent.js +3 -2
- package/dist/elements/EditMany/DrawerContent.js.map +1 -1
- package/dist/elements/EditUpload/index.js +1 -1
- package/dist/elements/EditUpload/index.js.map +1 -1
- package/dist/elements/LeaveWithoutSaving/index.js.map +1 -1
- package/dist/elements/LeaveWithoutSaving/usePreventLeave.d.ts.map +1 -1
- package/dist/elements/LeaveWithoutSaving/usePreventLeave.js +6 -2
- package/dist/elements/LeaveWithoutSaving/usePreventLeave.js.map +1 -1
- package/dist/elements/Link/formatUrl.d.ts +4 -0
- package/dist/elements/Link/formatUrl.d.ts.map +1 -0
- package/dist/elements/Link/formatUrl.js +87 -0
- package/dist/elements/Link/formatUrl.js.map +1 -0
- package/dist/elements/Link/index.d.ts +6 -0
- package/dist/elements/Link/index.d.ts.map +1 -0
- package/dist/elements/Link/index.js +58 -0
- package/dist/elements/Link/index.js.map +1 -0
- package/dist/elements/Logout/index.d.ts +5 -0
- package/dist/elements/Logout/index.d.ts.map +1 -1
- package/dist/elements/Logout/index.js +10 -13
- package/dist/elements/Logout/index.js.map +1 -1
- package/dist/elements/Nav/context.d.ts.map +1 -1
- package/dist/elements/Nav/context.js +3 -1
- package/dist/elements/Nav/context.js.map +1 -1
- package/dist/elements/Pill/index.d.ts.map +1 -1
- package/dist/elements/Pill/index.js +1 -2
- package/dist/elements/Pill/index.js.map +1 -1
- package/dist/elements/Popup/PopupButtonList/index.d.ts.map +1 -1
- package/dist/elements/Popup/PopupButtonList/index.js +1 -2
- package/dist/elements/Popup/PopupButtonList/index.js.map +1 -1
- package/dist/elements/PreviewSizes/index.js +1 -1
- package/dist/elements/PreviewSizes/index.js.map +1 -1
- package/dist/elements/StayLoggedIn/index.d.ts.map +1 -1
- package/dist/elements/StayLoggedIn/index.js +32 -27
- package/dist/elements/StayLoggedIn/index.js.map +1 -1
- package/dist/elements/StepNav/index.d.ts +5 -0
- package/dist/elements/StepNav/index.d.ts.map +1 -1
- package/dist/elements/StepNav/index.js +18 -25
- package/dist/elements/StepNav/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Blocks/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Blocks/index.js +12 -4
- package/dist/elements/Table/DefaultCell/fields/Blocks/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/index.js +1 -2
- package/dist/elements/Table/DefaultCell/index.js.map +1 -1
- package/dist/elements/Thumbnail/index.js +2 -2
- package/dist/elements/Thumbnail/index.js.map +1 -1
- package/dist/elements/UnpublishMany/index.d.ts.map +1 -1
- package/dist/elements/UnpublishMany/index.js.map +1 -1
- package/dist/exports/client/{CodeEditor-BMYVMDNZ.js → CodeEditor-L6GW2VQ6.js} +2 -2
- package/dist/exports/client/chunk-ZZDNSFEW.js +26 -0
- package/dist/exports/client/{chunk-CQQHQHCB.js.map → chunk-ZZDNSFEW.js.map} +4 -4
- package/dist/exports/client/index.d.ts +3 -0
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +23 -23
- package/dist/exports/client/index.js.map +4 -4
- package/dist/fields/Array/index.d.ts.map +1 -1
- package/dist/fields/Array/index.js +1 -2
- package/dist/fields/Array/index.js.map +1 -1
- package/dist/fields/Blocks/BlockRow.d.ts +1 -1
- package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
- package/dist/fields/Blocks/BlockRow.js.map +1 -1
- package/dist/fields/Blocks/BlocksDrawer/index.d.ts +1 -1
- package/dist/fields/Blocks/BlocksDrawer/index.d.ts.map +1 -1
- package/dist/fields/Blocks/BlocksDrawer/index.js +31 -23
- package/dist/fields/Blocks/BlocksDrawer/index.js.map +1 -1
- package/dist/fields/Blocks/RowActions.d.ts +1 -1
- package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
- package/dist/fields/Blocks/RowActions.js.map +1 -1
- package/dist/fields/Blocks/index.d.ts.map +1 -1
- package/dist/fields/Blocks/index.js +6 -4
- package/dist/fields/Blocks/index.js.map +1 -1
- package/dist/fields/JSON/index.d.ts.map +1 -1
- package/dist/fields/JSON/index.js +5 -6
- package/dist/fields/JSON/index.js.map +1 -1
- package/dist/fields/Join/index.d.ts.map +1 -1
- package/dist/fields/Join/index.js +20 -4
- package/dist/fields/Join/index.js.map +1 -1
- package/dist/fields/Relationship/optionsReducer.d.ts.map +1 -1
- package/dist/fields/Relationship/optionsReducer.js +1 -0
- package/dist/fields/Relationship/optionsReducer.js.map +1 -1
- package/dist/fields/Upload/RelationshipContent/index.js +1 -1
- package/dist/fields/Upload/RelationshipContent/index.js.map +1 -1
- package/dist/forms/Form/index.d.ts.map +1 -1
- package/dist/forms/Form/index.js +5 -1
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +2 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.js +1 -1
- package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.js +2 -1
- package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
- package/dist/providers/Auth/index.d.ts.map +1 -1
- package/dist/providers/Auth/index.js +9 -13
- package/dist/providers/Auth/index.js.map +1 -1
- package/dist/providers/Config/index.d.ts +2 -2
- package/dist/providers/Config/index.d.ts.map +1 -1
- package/dist/providers/Config/index.js +17 -2
- package/dist/providers/Config/index.js.map +1 -1
- package/dist/providers/ListQuery/index.d.ts.map +1 -1
- package/dist/providers/ListQuery/index.js +2 -1
- package/dist/providers/ListQuery/index.js.map +1 -1
- package/dist/providers/Root/index.d.ts.map +1 -1
- package/dist/providers/Root/index.js +44 -41
- package/dist/providers/Root/index.js.map +1 -1
- package/dist/providers/RouteTransition/ProgressBar/index.d.ts +17 -0
- package/dist/providers/RouteTransition/ProgressBar/index.d.ts.map +1 -0
- package/dist/providers/RouteTransition/ProgressBar/index.js +104 -0
- package/dist/providers/RouteTransition/ProgressBar/index.js.map +1 -0
- package/dist/providers/RouteTransition/ProgressBar/index.scss +21 -0
- package/dist/providers/RouteTransition/index.d.ts +51 -0
- package/dist/providers/RouteTransition/index.d.ts.map +1 -0
- package/dist/providers/RouteTransition/index.js +133 -0
- package/dist/providers/RouteTransition/index.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/utilities/buildClientFieldSchemaMap/traverseFields.d.ts.map +1 -1
- package/dist/utilities/buildClientFieldSchemaMap/traverseFields.js +3 -1
- package/dist/utilities/buildClientFieldSchemaMap/traverseFields.js.map +1 -1
- package/dist/utilities/buildFieldSchemaMap/traverseFields.d.ts.map +1 -1
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js +4 -1
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js.map +1 -1
- package/dist/utilities/buildTableState.d.ts.map +1 -1
- package/dist/utilities/buildTableState.js +1 -0
- package/dist/utilities/buildTableState.js.map +1 -1
- package/dist/utilities/copyDataFromLocale.d.ts.map +1 -1
- package/dist/utilities/copyDataFromLocale.js +22 -18
- package/dist/utilities/copyDataFromLocale.js.map +1 -1
- package/dist/utilities/getClientConfig.js.map +1 -1
- package/dist/utilities/renderTable.d.ts.map +1 -1
- package/dist/utilities/renderTable.js +0 -37
- package/dist/utilities/renderTable.js.map +1 -1
- package/dist/views/Edit/index.d.ts.map +1 -1
- package/dist/views/Edit/index.js +5 -1
- package/dist/views/Edit/index.js.map +1 -1
- package/dist/views/List/ListHeader/index.d.ts.map +1 -1
- package/dist/views/List/ListHeader/index.js +1 -4
- package/dist/views/List/ListHeader/index.js.map +1 -1
- package/dist/views/List/index.d.ts.map +1 -1
- package/dist/views/List/index.js +0 -3
- package/dist/views/List/index.js.map +1 -1
- package/package.json +6 -6
- package/dist/exports/client/chunk-CQQHQHCB.js +0 -26
- /package/dist/exports/client/{CodeEditor-BMYVMDNZ.js.map → CodeEditor-L6GW2VQ6.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DrawerContent.js","names":["c","_c","useModal","getTranslation","useRouter","useSearchParams","qs","React","useCallback","useEffect","useMemo","useState","useForm","Form","RenderFields","FormSubmit","XIcon","useAuth","useConfig","DocumentInfoProvider","OperationContext","useRouteCache","SelectAllStatus","useSelection","useServerFunctions","useTranslation","abortAndIgnore","handleAbortRef","filterOutUploadFields","mergeListSearchAndWhere","parseSearchParams","FieldSelect","baseClass","sanitizeUnselectedFields","formState","selected","filteredData","reduce","acc","field","foundState","path","value","Submit","t0","$","action","disabled","submit","t","t1","method","overrides","skipValidation","save","t2","_jsx","className","onClick","children","PublishButton","_status","SaveDraftButton","buttonStyle","EditManyDrawerContent","props","collection","slug","fields","labels","plural","drawerSlug","selectedFromProps","permissions","user","closeModal","config","routes","api","apiRoute","serverURL","getFormState","count","getQueryParams","selectAll","i18n","setSelected","router","initialState","setInitialState","hasInitializedState","useRef","abortFormStateRef","clearRouteCache","collectionPermissions","collections","searchParams","filteredFields","controller","AbortController","current","getInitialState","state","result","collectionSlug","data","docPermissions","docPreferences","operation","schemaPath","signal","onChange","prevFormState","abortFormState","queryString","queryWithSearch","collectionConfig","search","get","onSuccess","replace","stringify","page","AllAvailable","undefined","addQueryPrefix","currentEditor","hasPublishedDoc","id","initialData","isLocked","lastUpdateTime","mostRecentVersionIsAutosaved","unpublishedVersionCount","versionCount","Provider","_jsxs","label","type","length","parentIndexPath","parentPath","parentSchemaPath","readOnly","versions","drafts","Fragment"],"sources":["../../../src/elements/EditMany/DrawerContent.tsx"],"sourcesContent":["'use client'\n\nimport type { FieldWithPathClient, FormState } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport type { FormProps } from '../../forms/Form/index.js'\n\nimport { useForm } from '../../forms/Form/context.js'\nimport { Form } from '../../forms/Form/index.js'\nimport { RenderFields } from '../../forms/RenderFields/index.js'\nimport { FormSubmit } from '../../forms/Submit/index.js'\nimport { XIcon } from '../../icons/X/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { DocumentInfoProvider } from '../../providers/DocumentInfo/index.js'\nimport { OperationContext } from '../../providers/Operation/index.js'\nimport { useRouteCache } from '../../providers/RouteCache/index.js'\nimport { SelectAllStatus, useSelection } from '../../providers/Selection/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js'\nimport { filterOutUploadFields } from '../../utilities/filterOutUploadFields.js'\nimport { mergeListSearchAndWhere } from '../../utilities/mergeListSearchAndWhere.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { FieldSelect } from '../FieldSelect/index.js'\nimport { baseClass, type EditManyProps } from './index.js'\nimport './index.scss'\n\nconst sanitizeUnselectedFields = (formState: FormState, selected: FieldWithPathClient[]) => {\n const filteredData = selected.reduce((acc, field) => {\n const foundState = formState?.[field.path]\n\n if (foundState) {\n acc[field.path] = formState?.[field.path]?.value\n }\n\n return acc\n }, {} as FormData)\n\n return filteredData\n}\n\nconst Submit: React.FC<{\n readonly action: string\n readonly disabled: boolean\n readonly selected?: FieldWithPathClient[]\n}> = ({ action, disabled, selected }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n overrides: (formState) => sanitizeUnselectedFields(formState, selected),\n skipValidation: true,\n })\n }, [action, submit, selected])\n\n return (\n <FormSubmit className={`${baseClass}__save`} disabled={disabled} onClick={save}>\n {t('general:save')}\n </FormSubmit>\n )\n}\n\nconst PublishButton: React.FC<{\n action: string\n disabled: boolean\n selected?: FieldWithPathClient[]\n}> = ({ action, disabled, selected }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n overrides: (formState) => ({\n ...sanitizeUnselectedFields(formState, selected),\n _status: 'published',\n }),\n skipValidation: true,\n })\n }, [action, submit, selected])\n\n return (\n <FormSubmit className={`${baseClass}__publish`} disabled={disabled} onClick={save}>\n {t('version:publishChanges')}\n </FormSubmit>\n )\n}\n\nconst SaveDraftButton: React.FC<{\n action: string\n disabled: boolean\n selected?: FieldWithPathClient[]\n}> = ({ action, disabled, selected }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n overrides: (formState) => ({\n ...sanitizeUnselectedFields(formState, selected),\n _status: 'draft',\n }),\n skipValidation: true,\n })\n }, [action, submit, selected])\n\n return (\n <FormSubmit\n buttonStyle=\"secondary\"\n className={`${baseClass}__draft`}\n disabled={disabled}\n onClick={save}\n >\n {t('version:saveDraft')}\n </FormSubmit>\n )\n}\n\nexport const EditManyDrawerContent: React.FC<\n {\n drawerSlug: string\n selected: FieldWithPathClient[]\n } & EditManyProps\n> = (props) => {\n const {\n collection: { slug, fields, labels: { plural } } = {},\n collection,\n drawerSlug,\n selected: selectedFromProps,\n } = props\n\n const { permissions, user } = useAuth()\n\n const { closeModal } = useModal()\n\n const {\n config: {\n routes: { api: apiRoute },\n serverURL,\n },\n } = useConfig()\n\n const { getFormState } = useServerFunctions()\n\n const { count, getQueryParams, selectAll } = useSelection()\n const { i18n, t } = useTranslation()\n const [selected, setSelected] = useState<FieldWithPathClient[]>([])\n\n useEffect(() => {\n setSelected(selectedFromProps)\n }, [selectedFromProps])\n\n const router = useRouter()\n const [initialState, setInitialState] = useState<FormState>()\n const hasInitializedState = React.useRef(false)\n const abortFormStateRef = React.useRef<AbortController>(null)\n const { clearRouteCache } = useRouteCache()\n const collectionPermissions = permissions?.collections?.[slug]\n const searchParams = useSearchParams()\n\n const filteredFields = filterOutUploadFields(fields)\n\n React.useEffect(() => {\n const controller = new AbortController()\n\n if (!hasInitializedState.current) {\n const getInitialState = async () => {\n const { state: result } = await getFormState({\n collectionSlug: slug,\n data: {},\n docPermissions: collectionPermissions,\n docPreferences: null,\n operation: 'update',\n schemaPath: slug,\n signal: controller.signal,\n skipValidation: true,\n })\n\n setInitialState(result)\n hasInitializedState.current = true\n }\n\n void getInitialState()\n }\n\n return () => {\n abortAndIgnore(controller)\n }\n }, [apiRoute, hasInitializedState, serverURL, slug, getFormState, user, collectionPermissions])\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState }) => {\n const controller = handleAbortRef(abortFormStateRef)\n\n const { state } = await getFormState({\n collectionSlug: slug,\n docPermissions: collectionPermissions,\n docPreferences: null,\n formState: prevFormState,\n operation: 'update',\n schemaPath: slug,\n signal: controller.signal,\n })\n\n abortFormStateRef.current = null\n\n return state\n },\n [getFormState, slug, collectionPermissions],\n )\n\n useEffect(() => {\n const abortFormState = abortFormStateRef.current\n\n return () => {\n abortAndIgnore(abortFormState)\n }\n }, [])\n\n const queryString = useMemo(() => {\n const queryWithSearch = mergeListSearchAndWhere({\n collectionConfig: collection,\n search: searchParams.get('search'),\n })\n\n return getQueryParams(queryWithSearch)\n }, [collection, searchParams, getQueryParams])\n\n const onSuccess = () => {\n router.replace(\n qs.stringify(\n {\n ...parseSearchParams(searchParams),\n page: selectAll === SelectAllStatus.AllAvailable ? '1' : undefined,\n },\n { addQueryPrefix: true },\n ),\n )\n clearRouteCache() // Use clearRouteCache instead of router.refresh, as we only need to clear the cache if the user has route caching enabled - clearRouteCache checks for this\n closeModal(drawerSlug)\n }\n\n return (\n <DocumentInfoProvider\n collectionSlug={slug}\n currentEditor={user}\n hasPublishedDoc={false}\n id={null}\n initialData={{}}\n initialState={initialState}\n isLocked={false}\n lastUpdateTime={0}\n mostRecentVersionIsAutosaved={false}\n unpublishedVersionCount={0}\n versionCount={0}\n >\n <OperationContext.Provider value=\"update\">\n <div className={`${baseClass}__main`}>\n <div className={`${baseClass}__header`}>\n <h2 className={`${baseClass}__header__title`}>\n {t('general:editingLabel', { count, label: getTranslation(plural, i18n) })}\n </h2>\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__header__close`}\n id={`close-drawer__${drawerSlug}`}\n onClick={() => closeModal(drawerSlug)}\n type=\"button\"\n >\n <XIcon />\n </button>\n </div>\n <Form\n className={`${baseClass}__form`}\n initialState={initialState}\n onChange={[onChange]}\n onSuccess={onSuccess}\n >\n <FieldSelect fields={filteredFields} setSelected={setSelected} />\n {selected.length === 0 ? null : (\n <RenderFields\n fields={selected}\n parentIndexPath=\"\"\n parentPath=\"\"\n parentSchemaPath={slug}\n permissions={collectionPermissions?.fields}\n readOnly={false}\n />\n )}\n <div className={`${baseClass}__sidebar-wrap`}>\n <div className={`${baseClass}__sidebar`}>\n <div className={`${baseClass}__sidebar-sticky-wrap`}>\n <div className={`${baseClass}__document-actions`}>\n {collection?.versions?.drafts ? (\n <React.Fragment>\n <SaveDraftButton\n action={`${serverURL}${apiRoute}/${slug}${queryString}&draft=true`}\n disabled={selected.length === 0}\n selected={selected}\n />\n <PublishButton\n action={`${serverURL}${apiRoute}/${slug}${queryString}&draft=true`}\n disabled={selected.length === 0}\n selected={selected}\n />\n </React.Fragment>\n ) : (\n <Submit\n action={`${serverURL}${apiRoute}/${slug}${queryString}`}\n disabled={selected.length === 0}\n selected={selected}\n />\n )}\n </div>\n </div>\n </div>\n </div>\n </Form>\n </div>\n </OperationContext.Provider>\n </DocumentInfoProvider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"DrawerContent.js","names":["c","_c","useModal","getTranslation","useRouter","useSearchParams","qs","React","useCallback","useEffect","useMemo","useState","useForm","Form","RenderFields","FormSubmit","XIcon","useAuth","useConfig","DocumentInfoProvider","OperationContext","useRouteCache","SelectAllStatus","useSelection","useServerFunctions","useTranslation","abortAndIgnore","handleAbortRef","filterOutUploadFields","mergeListSearchAndWhere","parseSearchParams","FieldSelect","baseClass","sanitizeUnselectedFields","formState","selected","filteredData","reduce","acc","field","foundState","path","value","Submit","t0","$","action","disabled","submit","t","t1","method","overrides","skipValidation","save","t2","_jsx","className","onClick","children","PublishButton","_status","SaveDraftButton","buttonStyle","EditManyDrawerContent","props","collection","slug","fields","labels","plural","singular","drawerSlug","selectedFromProps","permissions","user","closeModal","config","routes","api","apiRoute","serverURL","getFormState","count","getQueryParams","selectAll","i18n","setSelected","router","initialState","setInitialState","hasInitializedState","useRef","abortFormStateRef","clearRouteCache","collectionPermissions","collections","searchParams","filteredFields","controller","AbortController","current","getInitialState","state","result","collectionSlug","data","docPermissions","docPreferences","operation","schemaPath","signal","onChange","prevFormState","abortFormState","queryString","queryWithSearch","collectionConfig","search","get","onSuccess","replace","stringify","page","AllAvailable","undefined","addQueryPrefix","currentEditor","hasPublishedDoc","id","initialData","isLocked","lastUpdateTime","mostRecentVersionIsAutosaved","unpublishedVersionCount","versionCount","Provider","_jsxs","label","type","length","parentIndexPath","parentPath","parentSchemaPath","readOnly","versions","drafts","Fragment"],"sources":["../../../src/elements/EditMany/DrawerContent.tsx"],"sourcesContent":["'use client'\n\nimport type { FieldWithPathClient, FormState } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport type { FormProps } from '../../forms/Form/index.js'\n\nimport { useForm } from '../../forms/Form/context.js'\nimport { Form } from '../../forms/Form/index.js'\nimport { RenderFields } from '../../forms/RenderFields/index.js'\nimport { FormSubmit } from '../../forms/Submit/index.js'\nimport { XIcon } from '../../icons/X/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { DocumentInfoProvider } from '../../providers/DocumentInfo/index.js'\nimport { OperationContext } from '../../providers/Operation/index.js'\nimport { useRouteCache } from '../../providers/RouteCache/index.js'\nimport { SelectAllStatus, useSelection } from '../../providers/Selection/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js'\nimport { filterOutUploadFields } from '../../utilities/filterOutUploadFields.js'\nimport { mergeListSearchAndWhere } from '../../utilities/mergeListSearchAndWhere.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { FieldSelect } from '../FieldSelect/index.js'\nimport { baseClass, type EditManyProps } from './index.js'\nimport './index.scss'\n\nconst sanitizeUnselectedFields = (formState: FormState, selected: FieldWithPathClient[]) => {\n const filteredData = selected.reduce((acc, field) => {\n const foundState = formState?.[field.path]\n\n if (foundState) {\n acc[field.path] = formState?.[field.path]?.value\n }\n\n return acc\n }, {} as FormData)\n\n return filteredData\n}\n\nconst Submit: React.FC<{\n readonly action: string\n readonly disabled: boolean\n readonly selected?: FieldWithPathClient[]\n}> = ({ action, disabled, selected }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n overrides: (formState) => sanitizeUnselectedFields(formState, selected),\n skipValidation: true,\n })\n }, [action, submit, selected])\n\n return (\n <FormSubmit className={`${baseClass}__save`} disabled={disabled} onClick={save}>\n {t('general:save')}\n </FormSubmit>\n )\n}\n\nconst PublishButton: React.FC<{\n action: string\n disabled: boolean\n selected?: FieldWithPathClient[]\n}> = ({ action, disabled, selected }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n overrides: (formState) => ({\n ...sanitizeUnselectedFields(formState, selected),\n _status: 'published',\n }),\n skipValidation: true,\n })\n }, [action, submit, selected])\n\n return (\n <FormSubmit className={`${baseClass}__publish`} disabled={disabled} onClick={save}>\n {t('version:publishChanges')}\n </FormSubmit>\n )\n}\n\nconst SaveDraftButton: React.FC<{\n action: string\n disabled: boolean\n selected?: FieldWithPathClient[]\n}> = ({ action, disabled, selected }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n overrides: (formState) => ({\n ...sanitizeUnselectedFields(formState, selected),\n _status: 'draft',\n }),\n skipValidation: true,\n })\n }, [action, submit, selected])\n\n return (\n <FormSubmit\n buttonStyle=\"secondary\"\n className={`${baseClass}__draft`}\n disabled={disabled}\n onClick={save}\n >\n {t('version:saveDraft')}\n </FormSubmit>\n )\n}\n\nexport const EditManyDrawerContent: React.FC<\n {\n drawerSlug: string\n selected: FieldWithPathClient[]\n } & EditManyProps\n> = (props) => {\n const {\n collection: { slug, fields, labels: { plural, singular } } = {},\n collection,\n drawerSlug,\n selected: selectedFromProps,\n } = props\n\n const { permissions, user } = useAuth()\n\n const { closeModal } = useModal()\n\n const {\n config: {\n routes: { api: apiRoute },\n serverURL,\n },\n } = useConfig()\n\n const { getFormState } = useServerFunctions()\n\n const { count, getQueryParams, selectAll } = useSelection()\n const { i18n, t } = useTranslation()\n const [selected, setSelected] = useState<FieldWithPathClient[]>([])\n\n useEffect(() => {\n setSelected(selectedFromProps)\n }, [selectedFromProps])\n\n const router = useRouter()\n const [initialState, setInitialState] = useState<FormState>()\n const hasInitializedState = React.useRef(false)\n const abortFormStateRef = React.useRef<AbortController>(null)\n const { clearRouteCache } = useRouteCache()\n const collectionPermissions = permissions?.collections?.[slug]\n const searchParams = useSearchParams()\n\n const filteredFields = filterOutUploadFields(fields)\n\n React.useEffect(() => {\n const controller = new AbortController()\n\n if (!hasInitializedState.current) {\n const getInitialState = async () => {\n const { state: result } = await getFormState({\n collectionSlug: slug,\n data: {},\n docPermissions: collectionPermissions,\n docPreferences: null,\n operation: 'update',\n schemaPath: slug,\n signal: controller.signal,\n skipValidation: true,\n })\n\n setInitialState(result)\n hasInitializedState.current = true\n }\n\n void getInitialState()\n }\n\n return () => {\n abortAndIgnore(controller)\n }\n }, [apiRoute, hasInitializedState, serverURL, slug, getFormState, user, collectionPermissions])\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState }) => {\n const controller = handleAbortRef(abortFormStateRef)\n\n const { state } = await getFormState({\n collectionSlug: slug,\n docPermissions: collectionPermissions,\n docPreferences: null,\n formState: prevFormState,\n operation: 'update',\n schemaPath: slug,\n signal: controller.signal,\n })\n\n abortFormStateRef.current = null\n\n return state\n },\n [getFormState, slug, collectionPermissions],\n )\n\n useEffect(() => {\n const abortFormState = abortFormStateRef.current\n\n return () => {\n abortAndIgnore(abortFormState)\n }\n }, [])\n\n const queryString = useMemo(() => {\n const queryWithSearch = mergeListSearchAndWhere({\n collectionConfig: collection,\n search: searchParams.get('search'),\n })\n\n return getQueryParams(queryWithSearch)\n }, [collection, searchParams, getQueryParams])\n\n const onSuccess = () => {\n router.replace(\n qs.stringify(\n {\n ...parseSearchParams(searchParams),\n page: selectAll === SelectAllStatus.AllAvailable ? '1' : undefined,\n },\n { addQueryPrefix: true },\n ),\n )\n clearRouteCache() // Use clearRouteCache instead of router.refresh, as we only need to clear the cache if the user has route caching enabled - clearRouteCache checks for this\n closeModal(drawerSlug)\n }\n\n return (\n <DocumentInfoProvider\n collectionSlug={slug}\n currentEditor={user}\n hasPublishedDoc={false}\n id={null}\n initialData={{}}\n initialState={initialState}\n isLocked={false}\n lastUpdateTime={0}\n mostRecentVersionIsAutosaved={false}\n unpublishedVersionCount={0}\n versionCount={0}\n >\n <OperationContext.Provider value=\"update\">\n <div className={`${baseClass}__main`}>\n <div className={`${baseClass}__header`}>\n <h2 className={`${baseClass}__header__title`}>\n {t('general:editingLabel', {\n count,\n label: getTranslation(count > 1 ? plural : singular, i18n),\n })}\n </h2>\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__header__close`}\n id={`close-drawer__${drawerSlug}`}\n onClick={() => closeModal(drawerSlug)}\n type=\"button\"\n >\n <XIcon />\n </button>\n </div>\n <Form\n className={`${baseClass}__form`}\n initialState={initialState}\n onChange={[onChange]}\n onSuccess={onSuccess}\n >\n <FieldSelect fields={filteredFields} setSelected={setSelected} />\n {selected.length === 0 ? null : (\n <RenderFields\n fields={selected}\n parentIndexPath=\"\"\n parentPath=\"\"\n parentSchemaPath={slug}\n permissions={collectionPermissions?.fields}\n readOnly={false}\n />\n )}\n <div className={`${baseClass}__sidebar-wrap`}>\n <div className={`${baseClass}__sidebar`}>\n <div className={`${baseClass}__sidebar-sticky-wrap`}>\n <div className={`${baseClass}__document-actions`}>\n {collection?.versions?.drafts ? (\n <React.Fragment>\n <SaveDraftButton\n action={`${serverURL}${apiRoute}/${slug}${queryString}&draft=true`}\n disabled={selected.length === 0}\n selected={selected}\n />\n <PublishButton\n action={`${serverURL}${apiRoute}/${slug}${queryString}&draft=true`}\n disabled={selected.length === 0}\n selected={selected}\n />\n </React.Fragment>\n ) : (\n <Submit\n action={`${serverURL}${apiRoute}/${slug}${queryString}`}\n disabled={selected.length === 0}\n selected={selected}\n />\n )}\n </div>\n </div>\n </div>\n </div>\n </Form>\n </div>\n </OperationContext.Provider>\n </DocumentInfoProvider>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAIA,SAASC,QAAQ,QAAQ;AACzB,SAASC,cAAc,QAAQ;AAC/B,SAASC,SAAS,EAAEC,eAAe,QAAQ;AAC3C,YAAYC,EAAA,MAAQ;AACpB,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ;AAIjE,SAASC,OAAO,QAAQ;AACxB,SAASC,IAAI,QAAQ;AACrB,SAASC,YAAY,QAAQ;AAC7B,SAASC,UAAU,QAAQ;AAC3B,SAASC,KAAK,QAAQ;AACtB,SAASC,OAAO,QAAQ;AACxB,SAASC,SAAS,QAAQ;AAC1B,SAASC,oBAAoB,QAAQ;AACrC,SAASC,gBAAgB,QAAQ;AACjC,SAASC,aAAa,QAAQ;AAC9B,SAASC,eAAe,EAAEC,YAAY,QAAQ;AAC9C,SAASC,kBAAkB,QAAQ;AACnC,SAASC,cAAc,QAAQ;AAC/B,SAASC,cAAc,EAAEC,cAAc,QAAQ;AAC/C,SAASC,qBAAqB,QAAQ;AACtC,SAASC,uBAAuB,QAAQ;AACxC,SAASC,iBAAiB,QAAQ;AAClC,SAASC,WAAW,QAAQ;AAC5B,SAASC,SAAS,QAA4B;AAC9C,OAAO;AAEP,MAAMC,wBAAA,GAA2BA,CAACC,SAAA,EAAsBC,QAAA;EACtD,MAAMC,YAAA,GAAeD,QAAA,CAASE,MAAM,CAAC,CAACC,GAAA,EAAKC,KAAA;IACzC,MAAMC,UAAA,GAAaN,SAAA,GAAYK,KAAA,CAAME,IAAI,CAAC;IAE1C,IAAID,UAAA,EAAY;MACdF,GAAG,CAACC,KAAA,CAAME,IAAI,CAAC,GAAGP,SAAA,GAAYK,KAAA,CAAME,IAAI,CAAC,EAAEC,KAAA;IAC7C;IAEA,OAAOJ,GAAA;EACT,GAAG,CAAC;EAEJ,OAAOF,YAAA;AACT;AAEA,MAAMO,MAAA,GAIDC,EAAA;EAAA,MAAAC,CAAA,GAAA5C,EAAA;EAAC;IAAA6C,MAAA;IAAAC,QAAA;IAAAZ;EAAA,IAAAS,EAA8B;EAClC;IAAAI;EAAA,IAAmBpC,OAAA;EACnB;IAAAqC;EAAA,IAAcxB,cAAA;EAAA,IAAAyB,EAAA;EAAA,IAAAL,CAAA,QAAAC,MAAA,IAAAD,CAAA,QAAAV,QAAA,IAAAU,CAAA,QAAAG,MAAA;IAEWE,EAAA,GAAAA,CAAA;MAClBF,MAAA;QAAAF,MAAA;QAAAK,MAAA,EAEK;QAAAC,SAAA,EAAAlB,SAAA,IACkBD,wBAAA,CAAyBC,SAAA,EAAWC,QAAA;QAAAkB,cAAA;MAAA,CAEhE;IAAA;IACFR,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAV,QAAA;IAAAU,CAAA,MAAAG,MAAA;IAAAH,CAAA,MAAAK,EAAA;EAAA;IAAAA,EAAA,GAAAL,CAAA;EAAA;EAPA,MAAAS,IAAA,GAAaJ,EAOgB;EAAA,IAAAK,EAAA;EAAA,IAAAV,CAAA,QAAAE,QAAA,IAAAF,CAAA,QAAAS,IAAA,IAAAT,CAAA,QAAAI,CAAA;IAG3BM,EAAA,GAAAC,IAAA,CAAAzC,UAAA;MAAA0C,SAAA,EAAuB,GAAAzB,SAAA,QAAoB;MAAAe,QAAA;MAAAW,OAAA,EAA+BJ,IAAA;MAAAK,QAAA,EACvEV,CAAA,CAAE;IAAA,C;;;;;;;;SADLM,E;CAIJ;AAEA,MAAMK,aAAA,GAIDhB,EAAA;EAAA,MAAAC,CAAA,GAAA5C,EAAA;EAAC;IAAA6C,MAAA;IAAAC,QAAA;IAAAZ;EAAA,IAAAS,EAA8B;EAClC;IAAAI;EAAA,IAAmBpC,OAAA;EACnB;IAAAqC;EAAA,IAAcxB,cAAA;EAAA,IAAAyB,EAAA;EAAA,IAAAL,CAAA,QAAAC,MAAA,IAAAD,CAAA,QAAAV,QAAA,IAAAU,CAAA,QAAAG,MAAA;IAEWE,EAAA,GAAAA,CAAA;MAClBF,MAAA;QAAAF,MAAA;QAAAK,MAAA,EAEK;QAAAC,SAAA,EAAAlB,SAAA;UAAA,GAEHD,wBAAA,CAAyBC,SAAA,EAAWC,QAAA,CAAS;UAAA0B,OAAA,EACvC;QAAA;QAAAR,cAAA;MAAA,CAGb;IAAA;IACFR,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAV,QAAA;IAAAU,CAAA,MAAAG,MAAA;IAAAH,CAAA,MAAAK,EAAA;EAAA;IAAAA,EAAA,GAAAL,CAAA;EAAA;EAVA,MAAAS,IAAA,GAAaJ,EAUgB;EAAA,IAAAK,EAAA;EAAA,IAAAV,CAAA,QAAAE,QAAA,IAAAF,CAAA,QAAAS,IAAA,IAAAT,CAAA,QAAAI,CAAA;IAG3BM,EAAA,GAAAC,IAAA,CAAAzC,UAAA;MAAA0C,SAAA,EAAuB,GAAAzB,SAAA,WAAuB;MAAAe,QAAA;MAAAW,OAAA,EAA+BJ,IAAA;MAAAK,QAAA,EAC1EV,CAAA,CAAE;IAAA,C;;;;;;;;SADLM,E;CAIJ;AAEA,MAAMO,eAAA,GAIDlB,EAAA;EAAA,MAAAC,CAAA,GAAA5C,EAAA;EAAC;IAAA6C,MAAA;IAAAC,QAAA;IAAAZ;EAAA,IAAAS,EAA8B;EAClC;IAAAI;EAAA,IAAmBpC,OAAA;EACnB;IAAAqC;EAAA,IAAcxB,cAAA;EAAA,IAAAyB,EAAA;EAAA,IAAAL,CAAA,QAAAC,MAAA,IAAAD,CAAA,QAAAV,QAAA,IAAAU,CAAA,QAAAG,MAAA;IAEWE,EAAA,GAAAA,CAAA;MAClBF,MAAA;QAAAF,MAAA;QAAAK,MAAA,EAEK;QAAAC,SAAA,EAAAlB,SAAA;UAAA,GAEHD,wBAAA,CAAyBC,SAAA,EAAWC,QAAA,CAAS;UAAA0B,OAAA,EACvC;QAAA;QAAAR,cAAA;MAAA,CAGb;IAAA;IACFR,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAV,QAAA;IAAAU,CAAA,MAAAG,MAAA;IAAAH,CAAA,MAAAK,EAAA;EAAA;IAAAA,EAAA,GAAAL,CAAA;EAAA;EAVA,MAAAS,IAAA,GAAaJ,EAUgB;EAAA,IAAAK,EAAA;EAAA,IAAAV,CAAA,QAAAE,QAAA,IAAAF,CAAA,QAAAS,IAAA,IAAAT,CAAA,QAAAI,CAAA;IAG3BM,EAAA,GAAAC,IAAA,CAAAzC,UAAA;MAAAgD,WAAA,EACc;MAAAN,SAAA,EACD,GAAAzB,SAAA,SAAqB;MAAAe,QAAA;MAAAW,OAAA,EAEvBJ,IAAA;MAAAK,QAAA,EAERV,CAAA,CAAE;IAAA,C;;;;;;;;SANLM,E;CASJ;AAEA,OAAO,MAAMS,qBAAA,GAKRC,KAAA;EACH,MAAM;IACJC,UAAA,EAAY;MAAEC,IAAI;MAAEC,MAAM;MAAEC,MAAA,EAAQ;QAAEC,MAAM;QAAEC;MAAQ;IAAE,CAAE,GAAG,CAAC,CAAC;IAC/DL,UAAU;IACVM,UAAU;IACVrC,QAAA,EAAUsC;EAAiB,CAC5B,GAAGR,KAAA;EAEJ,MAAM;IAAES,WAAW;IAAEC;EAAI,CAAE,GAAG1D,OAAA;EAE9B,MAAM;IAAE2D;EAAU,CAAE,GAAG1E,QAAA;EAEvB,MAAM;IACJ2E,MAAA,EAAQ;MACNC,MAAA,EAAQ;QAAEC,GAAA,EAAKC;MAAQ,CAAE;MACzBC;IAAS;EACV,CACF,GAAG/D,SAAA;EAEJ,MAAM;IAAEgE;EAAY,CAAE,GAAG1D,kBAAA;EAEzB,MAAM;IAAE2D,KAAK;IAAEC,cAAc;IAAEC;EAAS,CAAE,GAAG9D,YAAA;EAC7C,MAAM;IAAE+D,IAAI;IAAErC;EAAC,CAAE,GAAGxB,cAAA;EACpB,MAAM,CAACU,QAAA,EAAUoD,WAAA,CAAY,GAAG5E,QAAA,CAAgC,EAAE;EAElEF,SAAA,CAAU;IACR8E,WAAA,CAAYd,iBAAA;EACd,GAAG,CAACA,iBAAA,CAAkB;EAEtB,MAAMe,MAAA,GAASpF,SAAA;EACf,MAAM,CAACqF,YAAA,EAAcC,eAAA,CAAgB,GAAG/E,QAAA;EACxC,MAAMgF,mBAAA,GAAsBpF,KAAA,CAAMqF,MAAM,CAAC;EACzC,MAAMC,iBAAA,GAAoBtF,KAAA,CAAMqF,MAAM,CAAkB;EACxD,MAAM;IAAEE;EAAe,CAAE,GAAGzE,aAAA;EAC5B,MAAM0E,qBAAA,GAAwBrB,WAAA,EAAasB,WAAA,GAAc7B,IAAA,CAAK;EAC9D,MAAM8B,YAAA,GAAe5F,eAAA;EAErB,MAAM6F,cAAA,GAAiBtE,qBAAA,CAAsBwC,MAAA;EAE7C7D,KAAA,CAAME,SAAS,CAAC;IACd,MAAM0F,UAAA,GAAa,IAAIC,eAAA;IAEvB,IAAI,CAACT,mBAAA,CAAoBU,OAAO,EAAE;MAChC,MAAMC,eAAA,GAAkB,MAAAA,CAAA;QACtB,MAAM;UAAEC,KAAA,EAAOC;QAAM,CAAE,GAAG,MAAMtB,YAAA,CAAa;UAC3CuB,cAAA,EAAgBtC,IAAA;UAChBuC,IAAA,EAAM,CAAC;UACPC,cAAA,EAAgBZ,qBAAA;UAChBa,cAAA,EAAgB;UAChBC,SAAA,EAAW;UACXC,UAAA,EAAY3C,IAAA;UACZ4C,MAAA,EAAQZ,UAAA,CAAWY,MAAM;UACzB1D,cAAA,EAAgB;QAClB;QAEAqC,eAAA,CAAgBc,MAAA;QAChBb,mBAAA,CAAoBU,OAAO,GAAG;MAChC;MAEA,KAAKC,eAAA;IACP;IAEA,OAAO;MACL5E,cAAA,CAAeyE,UAAA;IACjB;EACF,GAAG,CAACnB,QAAA,EAAUW,mBAAA,EAAqBV,SAAA,EAAWd,IAAA,EAAMe,YAAA,EAAcP,IAAA,EAAMoB,qBAAA,CAAsB;EAE9F,MAAMiB,QAAA,GAAqCxG,WAAA,CACzC,OAAO;IAAE0B,SAAA,EAAW+E;EAAa,CAAE;IACjC,MAAMd,YAAA,GAAaxE,cAAA,CAAekE,iBAAA;IAElC,MAAM;MAAEU;IAAK,CAAE,GAAG,MAAMrB,YAAA,CAAa;MACnCuB,cAAA,EAAgBtC,IAAA;MAChBwC,cAAA,EAAgBZ,qBAAA;MAChBa,cAAA,EAAgB;MAChB1E,SAAA,EAAW+E,aAAA;MACXJ,SAAA,EAAW;MACXC,UAAA,EAAY3C,IAAA;MACZ4C,MAAA,EAAQZ,YAAA,CAAWY;IACrB;IAEAlB,iBAAA,CAAkBQ,OAAO,GAAG;IAE5B,OAAOE,KAAA;EACT,GACA,CAACrB,YAAA,EAAcf,IAAA,EAAM4B,qBAAA,CAAsB;EAG7CtF,SAAA,CAAU;IACR,MAAMyG,cAAA,GAAiBrB,iBAAA,CAAkBQ,OAAO;IAEhD,OAAO;MACL3E,cAAA,CAAewF,cAAA;IACjB;EACF,GAAG,EAAE;EAEL,MAAMC,WAAA,GAAczG,OAAA,CAAQ;IAC1B,MAAM0G,eAAA,GAAkBvF,uBAAA,CAAwB;MAC9CwF,gBAAA,EAAkBnD,UAAA;MAClBoD,MAAA,EAAQrB,YAAA,CAAasB,GAAG,CAAC;IAC3B;IAEA,OAAOnC,cAAA,CAAegC,eAAA;EACxB,GAAG,CAAClD,UAAA,EAAY+B,YAAA,EAAcb,cAAA,CAAe;EAE7C,MAAMoC,SAAA,GAAYA,CAAA;IAChBhC,MAAA,CAAOiC,OAAO,CACZnH,EAAA,CAAGoH,SAAS,CACV;MACE,GAAG5F,iBAAA,CAAkBmE,YAAA,CAAa;MAClC0B,IAAA,EAAMtC,SAAA,KAAc/D,eAAA,CAAgBsG,YAAY,GAAG,MAAMC;IAC3D,GACA;MAAEC,cAAA,EAAgB;IAAK;IAG3BhC,eAAA,GAAkB;IAAA;IAClBlB,UAAA,CAAWJ,UAAA;EACb;EAEA,oBACEhB,IAAA,CAACrC,oBAAA;IACCsF,cAAA,EAAgBtC,IAAA;IAChB4D,aAAA,EAAepD,IAAA;IACfqD,eAAA,EAAiB;IACjBC,EAAA,EAAI;IACJC,WAAA,EAAa,CAAC;IACdzC,YAAA,EAAcA,YAAA;IACd0C,QAAA,EAAU;IACVC,cAAA,EAAgB;IAChBC,4BAAA,EAA8B;IAC9BC,uBAAA,EAAyB;IACzBC,YAAA,EAAc;cAEd,aAAA/E,IAAA,CAACpC,gBAAA,CAAiBoH,QAAQ;MAAC9F,KAAA,EAAM;gBAC/B,aAAA+F,KAAA,CAAC;QAAIhF,SAAA,EAAW,GAAGzB,SAAA,QAAiB;gCAClCyG,KAAA,CAAC;UAAIhF,SAAA,EAAW,GAAGzB,SAAA,UAAmB;kCACpCwB,IAAA,CAAC;YAAGC,SAAA,EAAW,GAAGzB,SAAA,iBAA0B;sBACzCiB,CAAA,CAAE,wBAAwB;cACzBkC,KAAA;cACAuD,KAAA,EAAOvI,cAAA,CAAegF,KAAA,GAAQ,IAAIb,MAAA,GAASC,QAAA,EAAUe,IAAA;YACvD;2BAEF9B,IAAA,CAAC;YACC,cAAYP,CAAA,CAAE;YACdQ,SAAA,EAAW,GAAGzB,SAAA,iBAA0B;YACxCiG,EAAA,EAAI,iBAAiBzD,UAAA,EAAY;YACjCd,OAAA,EAASA,CAAA,KAAMkB,UAAA,CAAWJ,UAAA;YAC1BmE,IAAA,EAAK;sBAEL,aAAAnF,IAAA,CAACxC,KAAA;;yBAGLyH,KAAA,CAAC5H,IAAA;UACC4C,SAAA,EAAW,GAAGzB,SAAA,QAAiB;UAC/ByD,YAAA,EAAcA,YAAA;UACduB,QAAA,EAAU,CAACA,QAAA,CAAS;UACpBQ,SAAA,EAAWA,SAAA;kCAEXhE,IAAA,CAACzB,WAAA;YAAYqC,MAAA,EAAQ8B,cAAA;YAAgBX,WAAA,EAAaA;cACjDpD,QAAA,CAASyG,MAAM,KAAK,IAAI,oBACvBpF,IAAA,CAAC1C,YAAA;YACCsD,MAAA,EAAQjC,QAAA;YACR0G,eAAA,EAAgB;YAChBC,UAAA,EAAW;YACXC,gBAAA,EAAkB5E,IAAA;YAClBO,WAAA,EAAaqB,qBAAA,EAAuB3B,MAAA;YACpC4E,QAAA,EAAU;2BAGdxF,IAAA,CAAC;YAAIC,SAAA,EAAW,GAAGzB,SAAA,gBAAyB;sBAC1C,aAAAwB,IAAA,CAAC;cAAIC,SAAA,EAAW,GAAGzB,SAAA,WAAoB;wBACrC,aAAAwB,IAAA,CAAC;gBAAIC,SAAA,EAAW,GAAGzB,SAAA,uBAAgC;0BACjD,aAAAwB,IAAA,CAAC;kBAAIC,SAAA,EAAW,GAAGzB,SAAA,oBAA6B;4BAC7CkC,UAAA,EAAY+E,QAAA,EAAUC,MAAA,gBACrBT,KAAA,CAAClI,KAAA,CAAM4I,QAAQ;4CACb3F,IAAA,CAACM,eAAA;sBACChB,MAAA,EAAQ,GAAGmC,SAAA,GAAYD,QAAA,IAAYb,IAAA,GAAOgD,WAAA,aAAwB;sBAClEpE,QAAA,EAAUZ,QAAA,CAASyG,MAAM,KAAK;sBAC9BzG,QAAA,EAAUA;qCAEZqB,IAAA,CAACI,aAAA;sBACCd,MAAA,EAAQ,GAAGmC,SAAA,GAAYD,QAAA,IAAYb,IAAA,GAAOgD,WAAA,aAAwB;sBAClEpE,QAAA,EAAUZ,QAAA,CAASyG,MAAM,KAAK;sBAC9BzG,QAAA,EAAUA;;oCAIdqB,IAAA,CAACb,MAAA;oBACCG,MAAA,EAAQ,GAAGmC,SAAA,GAAYD,QAAA,IAAYb,IAAA,GAAOgD,WAAA,EAAa;oBACvDpE,QAAA,EAAUZ,QAAA,CAASyG,MAAM,KAAK;oBAC9BzG,QAAA,EAAUA;;;;;;;;;;AAYlC","ignoreList":[]}
|
|
@@ -142,7 +142,7 @@ export const EditUpload = ({
|
|
|
142
142
|
y: yCenter
|
|
143
143
|
});
|
|
144
144
|
};
|
|
145
|
-
const fileSrcToUse = imageCacheTag ? `${fileSrc}?${imageCacheTag}` : fileSrc;
|
|
145
|
+
const fileSrcToUse = imageCacheTag ? `${fileSrc}?${encodeURIComponent(imageCacheTag)}` : fileSrc;
|
|
146
146
|
return /*#__PURE__*/_jsxs("div", {
|
|
147
147
|
className: baseClass,
|
|
148
148
|
children: [/*#__PURE__*/_jsxs("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useModal","React","useRef","useState","ReactCrop","editDrawerSlug","PlusIcon","useTranslation","Button","baseClass","Input","props","name","onChange","ref","value","_jsxs","className","_jsx","e","target","type","defaultCrop","height","unit","width","x","y","EditUpload","fileName","fileSrc","imageCacheTag","initialCrop","initialFocalPoint","onSave","showCrop","showFocalPoint","closeModal","t","crop","setCrop","defaultFocalPosition","focalPosition","setFocalPosition","checkBounds","setCheckBounds","uncroppedPixelHeight","setUncroppedPixelHeight","uncroppedPixelWidth","setUncroppedPixelWidth","focalWrapRef","undefined","imageRef","cropRef","heightInputRef","widthInputRef","imageLoaded","setImageLoaded","onImageLoad","currentTarget","naturalHeight","naturalWidth","fineTuneCrop","dimension","intValue","parseInt","percentage","fineTuneFocalPosition","coordinate","prevPosition","saveEdits","focalPoint","heightInPixels","Number","current","widthInPixels","onDragEnd","useCallback","centerFocalPoint","containerRect","getBoundingClientRect","boundsRect","xCenter","left","yCenter","top","fileSrcToUse","title","buttonStyle","onClick","disabled","style","aspectRatio","_","c","onComplete","renderSelectionAddon","alt","onLoad","src","DraggableElement","boundsRef","containerRef","initialPosition","toFixed","children","position","setPosition","isDragging","setIsDragging","dragRef","getCoordinates","mouseXArg","mouseYArg","recenter","mouseX","mouseY","xOutOfBounds","right","yOutOfBounds","bottom","handleMouseDown","event","preventDefault","handleMouseMove","clientX","clientY","onDrop","useEffect","filter","Boolean","join","onMouseMove","onMouseDown","onMouseUp"],"sources":["../../../src/elements/EditUpload/index.tsx"],"sourcesContent":["'use client'\n\nimport type { UploadEdits } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport React, { useRef, useState } from 'react'\nimport ReactCrop from 'react-image-crop'\nimport 'react-image-crop/dist/ReactCrop.css'\n\nimport { editDrawerSlug } from '../../elements/Upload/index.js'\nimport { PlusIcon } from '../../icons/Plus/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport './index.scss'\n\nconst baseClass = 'edit-upload'\n\ntype Props = {\n name: string\n onChange: (value: string) => void\n ref?: React.RefObject<HTMLInputElement>\n value: string\n}\n\nconst Input: React.FC<Props> = (props) => {\n const { name, onChange, ref, value } = props\n\n return (\n <div className={`${baseClass}__input`}>\n {name}\n <input\n name={name}\n onChange={(e) => onChange(e.target.value)}\n ref={ref}\n type=\"number\"\n value={value}\n />\n </div>\n )\n}\n\ntype FocalPosition = {\n x: number\n y: number\n}\n\nexport type EditUploadProps = {\n fileName: string\n fileSrc: string\n imageCacheTag?: string\n initialCrop?: UploadEdits['crop']\n initialFocalPoint?: FocalPosition\n onSave?: (uploadEdits: UploadEdits) => void\n showCrop?: boolean\n showFocalPoint?: boolean\n}\n\nconst defaultCrop: UploadEdits['crop'] = {\n height: 100,\n unit: '%',\n width: 100,\n x: 0,\n y: 0,\n}\n\nexport const EditUpload: React.FC<EditUploadProps> = ({\n fileName,\n fileSrc,\n imageCacheTag,\n initialCrop,\n initialFocalPoint,\n onSave,\n showCrop,\n showFocalPoint,\n}) => {\n const { closeModal } = useModal()\n const { t } = useTranslation()\n\n const [crop, setCrop] = useState<UploadEdits['crop']>(() => ({\n ...defaultCrop,\n ...(initialCrop || {}),\n }))\n\n const defaultFocalPosition: FocalPosition = {\n x: 50,\n y: 50,\n }\n\n const [focalPosition, setFocalPosition] = useState<FocalPosition>(() => ({\n ...defaultFocalPosition,\n ...initialFocalPoint,\n }))\n\n const [checkBounds, setCheckBounds] = useState<boolean>(false)\n const [uncroppedPixelHeight, setUncroppedPixelHeight] = useState<number>(0)\n const [uncroppedPixelWidth, setUncroppedPixelWidth] = useState<number>(0)\n\n const focalWrapRef = useRef<HTMLDivElement | undefined>(undefined)\n const imageRef = useRef<HTMLImageElement | undefined>(undefined)\n const cropRef = useRef<HTMLDivElement | undefined>(undefined)\n\n const heightInputRef = useRef<HTMLInputElement | null>(null)\n const widthInputRef = useRef<HTMLInputElement | null>(null)\n\n const [imageLoaded, setImageLoaded] = useState<boolean>(false)\n\n const onImageLoad = (e) => {\n // set the default image height/width on load\n setUncroppedPixelHeight(e.currentTarget.naturalHeight)\n setUncroppedPixelWidth(e.currentTarget.naturalWidth)\n setImageLoaded(true)\n }\n\n const fineTuneCrop = ({ dimension, value }: { dimension: 'height' | 'width'; value: string }) => {\n const intValue = parseInt(value)\n if (dimension === 'width' && intValue >= uncroppedPixelWidth) {\n return null\n }\n if (dimension === 'height' && intValue >= uncroppedPixelHeight) {\n return null\n }\n\n const percentage =\n 100 * (intValue / (dimension === 'width' ? uncroppedPixelWidth : uncroppedPixelHeight))\n\n if (percentage === 100 || percentage === 0) {\n return null\n }\n\n setCrop({\n ...crop,\n [dimension]: percentage,\n })\n }\n\n const fineTuneFocalPosition = ({\n coordinate,\n value,\n }: {\n coordinate: 'x' | 'y'\n value: string\n }) => {\n const intValue = parseInt(value)\n if (intValue >= 0 && intValue <= 100) {\n setFocalPosition((prevPosition) => ({ ...prevPosition, [coordinate]: intValue }))\n }\n }\n\n const saveEdits = () => {\n if (typeof onSave === 'function') {\n onSave({\n crop: crop ? crop : undefined,\n focalPoint: focalPosition,\n heightInPixels: Number(heightInputRef?.current?.value ?? uncroppedPixelHeight),\n widthInPixels: Number(widthInputRef?.current?.value ?? uncroppedPixelWidth),\n })\n }\n closeModal(editDrawerSlug)\n }\n\n const onDragEnd = React.useCallback(({ x, y }) => {\n setFocalPosition({ x, y })\n setCheckBounds(false)\n }, [])\n\n const centerFocalPoint = () => {\n const containerRect = focalWrapRef.current.getBoundingClientRect()\n const boundsRect = showCrop\n ? cropRef.current.getBoundingClientRect()\n : imageRef.current.getBoundingClientRect()\n const xCenter =\n ((boundsRect.left - containerRect.left + boundsRect.width / 2) / containerRect.width) * 100\n const yCenter =\n ((boundsRect.top - containerRect.top + boundsRect.height / 2) / containerRect.height) * 100\n setFocalPosition({ x: xCenter, y: yCenter })\n }\n\n const fileSrcToUse = imageCacheTag ? `${fileSrc}?${imageCacheTag}` : fileSrc\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h2 title={`${t('general:editing')} ${fileName}`}>\n {t('general:editing')} {fileName}\n </h2>\n <div className={`${baseClass}__actions`}>\n <Button\n aria-label={t('general:cancel')}\n buttonStyle=\"secondary\"\n className={`${baseClass}__cancel`}\n onClick={() => closeModal(editDrawerSlug)}\n >\n {t('general:cancel')}\n </Button>\n <Button\n aria-label={t('general:applyChanges')}\n buttonStyle=\"primary\"\n className={`${baseClass}__save`}\n disabled={!imageLoaded}\n onClick={saveEdits}\n >\n {t('general:applyChanges')}\n </Button>\n </div>\n </div>\n <div className={`${baseClass}__toolWrap`}>\n <div className={`${baseClass}__crop`}>\n <div\n className={`${baseClass}__focal-wrapper`}\n ref={focalWrapRef}\n style={{\n aspectRatio: `${uncroppedPixelWidth / uncroppedPixelHeight}`,\n }}\n >\n {showCrop ? (\n <ReactCrop\n className={`${baseClass}__reactCrop`}\n crop={crop}\n onChange={(_, c) => setCrop(c)}\n onComplete={() => setCheckBounds(true)}\n renderSelectionAddon={() => {\n return <div className={`${baseClass}__crop-window`} ref={cropRef} />\n }}\n >\n <img\n alt={t('upload:setCropArea')}\n onLoad={onImageLoad}\n ref={imageRef}\n src={fileSrcToUse}\n />\n </ReactCrop>\n ) : (\n <img\n alt={t('upload:setFocalPoint')}\n onLoad={onImageLoad}\n ref={imageRef}\n src={fileSrcToUse}\n />\n )}\n {showFocalPoint && (\n <DraggableElement\n boundsRef={showCrop ? cropRef : imageRef}\n checkBounds={showCrop ? checkBounds : false}\n className={`${baseClass}__focalPoint`}\n containerRef={focalWrapRef}\n initialPosition={focalPosition}\n onDragEnd={onDragEnd}\n setCheckBounds={showCrop ? setCheckBounds : false}\n >\n <PlusIcon />\n </DraggableElement>\n )}\n </div>\n </div>\n {(showCrop || showFocalPoint) && (\n <div className={`${baseClass}__sidebar`}>\n {showCrop && (\n <div className={`${baseClass}__groupWrap`}>\n <div>\n <div className={`${baseClass}__titleWrap`}>\n <h3>{t('upload:crop')}</h3>\n <Button\n buttonStyle=\"none\"\n className={`${baseClass}__reset`}\n onClick={() =>\n setCrop({\n height: 100,\n unit: '%',\n width: 100,\n x: 0,\n y: 0,\n })\n }\n >\n {t('general:reset')}\n </Button>\n </div>\n </div>\n <span className={`${baseClass}__description`}>\n {t('upload:cropToolDescription')}\n </span>\n <div className={`${baseClass}__inputsWrap`}>\n <Input\n name={`${t('upload:width')} (px)`}\n onChange={(value) => fineTuneCrop({ dimension: 'width', value })}\n ref={widthInputRef}\n value={((crop.width / 100) * uncroppedPixelWidth).toFixed(0)}\n />\n <Input\n name={`${t('upload:height')} (px)`}\n onChange={(value) => fineTuneCrop({ dimension: 'height', value })}\n ref={heightInputRef}\n value={((crop.height / 100) * uncroppedPixelHeight).toFixed(0)}\n />\n </div>\n </div>\n )}\n\n {showFocalPoint && (\n <div className={`${baseClass}__groupWrap`}>\n <div>\n <div className={`${baseClass}__titleWrap`}>\n <h3>{t('upload:focalPoint')}</h3>\n <Button\n buttonStyle=\"none\"\n className={`${baseClass}__reset`}\n onClick={centerFocalPoint}\n >\n {t('general:reset')}\n </Button>\n </div>\n </div>\n <span className={`${baseClass}__description`}>\n {t('upload:focalPointDescription')}\n </span>\n <div className={`${baseClass}__inputsWrap`}>\n <Input\n name=\"X %\"\n onChange={(value) => fineTuneFocalPosition({ coordinate: 'x', value })}\n value={focalPosition.x.toFixed(0)}\n />\n <Input\n name=\"Y %\"\n onChange={(value) => fineTuneFocalPosition({ coordinate: 'y', value })}\n value={focalPosition.y.toFixed(0)}\n />\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n\nconst DraggableElement = ({\n boundsRef,\n checkBounds,\n children,\n className,\n containerRef,\n initialPosition = { x: 50, y: 50 },\n onDragEnd,\n setCheckBounds,\n}) => {\n const [position, setPosition] = useState({ x: initialPosition.x, y: initialPosition.y })\n const [isDragging, setIsDragging] = useState(false)\n const dragRef = useRef<HTMLButtonElement | undefined>(undefined)\n\n const getCoordinates = React.useCallback(\n (mouseXArg?: number, mouseYArg?: number, recenter?: boolean) => {\n const containerRect = containerRef.current.getBoundingClientRect()\n const boundsRect = boundsRef.current.getBoundingClientRect()\n const mouseX = mouseXArg ?? boundsRect.left\n const mouseY = mouseYArg ?? boundsRect.top\n\n const xOutOfBounds = mouseX < boundsRect.left || mouseX > boundsRect.right\n const yOutOfBounds = mouseY < boundsRect.top || mouseY > boundsRect.bottom\n\n let x = ((mouseX - containerRect.left) / containerRect.width) * 100\n let y = ((mouseY - containerRect.top) / containerRect.height) * 100\n const xCenter =\n ((boundsRect.left - containerRect.left + boundsRect.width / 2) / containerRect.width) * 100\n const yCenter =\n ((boundsRect.top - containerRect.top + boundsRect.height / 2) / containerRect.height) * 100\n if (xOutOfBounds || yOutOfBounds) {\n setIsDragging(false)\n if (mouseX < boundsRect.left) {\n x = ((boundsRect.left - containerRect.left) / containerRect.width) * 100\n } else if (mouseX > boundsRect.right) {\n x =\n ((containerRect.width - (containerRect.right - boundsRect.right)) /\n containerRect.width) *\n 100\n }\n\n if (mouseY < boundsRect.top) {\n y = ((boundsRect.top - containerRect.top) / containerRect.height) * 100\n } else if (mouseY > boundsRect.bottom) {\n y =\n ((containerRect.height - (containerRect.bottom - boundsRect.bottom)) /\n containerRect.height) *\n 100\n }\n\n if (recenter) {\n x = xOutOfBounds ? xCenter : x\n y = yOutOfBounds ? yCenter : y\n }\n }\n\n return { x, y }\n },\n [boundsRef, containerRef],\n )\n\n const handleMouseDown = (event) => {\n event.preventDefault()\n setIsDragging(true)\n }\n\n const handleMouseMove = (event) => {\n if (!isDragging) {\n return null\n }\n const { x, y } = getCoordinates(event.clientX, event.clientY)\n\n setPosition({ x, y })\n }\n\n const onDrop = () => {\n setIsDragging(false)\n onDragEnd(position)\n }\n\n React.useEffect(() => {\n if (isDragging || !dragRef.current) {\n return\n }\n if (checkBounds) {\n const { height, left, top, width } = dragRef.current.getBoundingClientRect()\n const { x, y } = getCoordinates(left + width / 2, top + height / 2, true)\n onDragEnd({ x, y })\n setPosition({ x, y })\n setCheckBounds(false)\n return\n }\n }, [getCoordinates, isDragging, checkBounds, setCheckBounds, position.x, position.y, onDragEnd])\n\n React.useEffect(() => {\n setPosition({ x: initialPosition.x, y: initialPosition.y })\n }, [initialPosition.x, initialPosition.y])\n\n return (\n <div\n className={[\n `${baseClass}__draggable-container`,\n isDragging && `${baseClass}__draggable-container--dragging`,\n ]\n .filter(Boolean)\n .join(' ')}\n onMouseMove={handleMouseMove}\n >\n <button\n className={[`${baseClass}__draggable`, className].filter(Boolean).join(' ')}\n onMouseDown={handleMouseDown}\n onMouseUp={onDrop}\n ref={dragRef}\n style={{ left: `${position.x}%`, top: `${position.y}%` }}\n type=\"button\"\n >\n {children}\n </button>\n <div />\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useModal","React","useRef","useState","ReactCrop","editDrawerSlug","PlusIcon","useTranslation","Button","baseClass","Input","props","name","onChange","ref","value","_jsxs","className","_jsx","e","target","type","defaultCrop","height","unit","width","x","y","EditUpload","fileName","fileSrc","imageCacheTag","initialCrop","initialFocalPoint","onSave","showCrop","showFocalPoint","closeModal","t","crop","setCrop","defaultFocalPosition","focalPosition","setFocalPosition","checkBounds","setCheckBounds","uncroppedPixelHeight","setUncroppedPixelHeight","uncroppedPixelWidth","setUncroppedPixelWidth","focalWrapRef","undefined","imageRef","cropRef","heightInputRef","widthInputRef","imageLoaded","setImageLoaded","onImageLoad","currentTarget","naturalHeight","naturalWidth","fineTuneCrop","dimension","intValue","parseInt","percentage","fineTuneFocalPosition","coordinate","prevPosition","saveEdits","focalPoint","heightInPixels","Number","current","widthInPixels","onDragEnd","useCallback","centerFocalPoint","containerRect","getBoundingClientRect","boundsRect","xCenter","left","yCenter","top","fileSrcToUse","encodeURIComponent","title","buttonStyle","onClick","disabled","style","aspectRatio","_","c","onComplete","renderSelectionAddon","alt","onLoad","src","DraggableElement","boundsRef","containerRef","initialPosition","toFixed","children","position","setPosition","isDragging","setIsDragging","dragRef","getCoordinates","mouseXArg","mouseYArg","recenter","mouseX","mouseY","xOutOfBounds","right","yOutOfBounds","bottom","handleMouseDown","event","preventDefault","handleMouseMove","clientX","clientY","onDrop","useEffect","filter","Boolean","join","onMouseMove","onMouseDown","onMouseUp"],"sources":["../../../src/elements/EditUpload/index.tsx"],"sourcesContent":["'use client'\n\nimport type { UploadEdits } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport React, { useRef, useState } from 'react'\nimport ReactCrop from 'react-image-crop'\nimport 'react-image-crop/dist/ReactCrop.css'\n\nimport { editDrawerSlug } from '../../elements/Upload/index.js'\nimport { PlusIcon } from '../../icons/Plus/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport './index.scss'\n\nconst baseClass = 'edit-upload'\n\ntype Props = {\n name: string\n onChange: (value: string) => void\n ref?: React.RefObject<HTMLInputElement>\n value: string\n}\n\nconst Input: React.FC<Props> = (props) => {\n const { name, onChange, ref, value } = props\n\n return (\n <div className={`${baseClass}__input`}>\n {name}\n <input\n name={name}\n onChange={(e) => onChange(e.target.value)}\n ref={ref}\n type=\"number\"\n value={value}\n />\n </div>\n )\n}\n\ntype FocalPosition = {\n x: number\n y: number\n}\n\nexport type EditUploadProps = {\n fileName: string\n fileSrc: string\n imageCacheTag?: string\n initialCrop?: UploadEdits['crop']\n initialFocalPoint?: FocalPosition\n onSave?: (uploadEdits: UploadEdits) => void\n showCrop?: boolean\n showFocalPoint?: boolean\n}\n\nconst defaultCrop: UploadEdits['crop'] = {\n height: 100,\n unit: '%',\n width: 100,\n x: 0,\n y: 0,\n}\n\nexport const EditUpload: React.FC<EditUploadProps> = ({\n fileName,\n fileSrc,\n imageCacheTag,\n initialCrop,\n initialFocalPoint,\n onSave,\n showCrop,\n showFocalPoint,\n}) => {\n const { closeModal } = useModal()\n const { t } = useTranslation()\n\n const [crop, setCrop] = useState<UploadEdits['crop']>(() => ({\n ...defaultCrop,\n ...(initialCrop || {}),\n }))\n\n const defaultFocalPosition: FocalPosition = {\n x: 50,\n y: 50,\n }\n\n const [focalPosition, setFocalPosition] = useState<FocalPosition>(() => ({\n ...defaultFocalPosition,\n ...initialFocalPoint,\n }))\n\n const [checkBounds, setCheckBounds] = useState<boolean>(false)\n const [uncroppedPixelHeight, setUncroppedPixelHeight] = useState<number>(0)\n const [uncroppedPixelWidth, setUncroppedPixelWidth] = useState<number>(0)\n\n const focalWrapRef = useRef<HTMLDivElement | undefined>(undefined)\n const imageRef = useRef<HTMLImageElement | undefined>(undefined)\n const cropRef = useRef<HTMLDivElement | undefined>(undefined)\n\n const heightInputRef = useRef<HTMLInputElement | null>(null)\n const widthInputRef = useRef<HTMLInputElement | null>(null)\n\n const [imageLoaded, setImageLoaded] = useState<boolean>(false)\n\n const onImageLoad = (e) => {\n // set the default image height/width on load\n setUncroppedPixelHeight(e.currentTarget.naturalHeight)\n setUncroppedPixelWidth(e.currentTarget.naturalWidth)\n setImageLoaded(true)\n }\n\n const fineTuneCrop = ({ dimension, value }: { dimension: 'height' | 'width'; value: string }) => {\n const intValue = parseInt(value)\n if (dimension === 'width' && intValue >= uncroppedPixelWidth) {\n return null\n }\n if (dimension === 'height' && intValue >= uncroppedPixelHeight) {\n return null\n }\n\n const percentage =\n 100 * (intValue / (dimension === 'width' ? uncroppedPixelWidth : uncroppedPixelHeight))\n\n if (percentage === 100 || percentage === 0) {\n return null\n }\n\n setCrop({\n ...crop,\n [dimension]: percentage,\n })\n }\n\n const fineTuneFocalPosition = ({\n coordinate,\n value,\n }: {\n coordinate: 'x' | 'y'\n value: string\n }) => {\n const intValue = parseInt(value)\n if (intValue >= 0 && intValue <= 100) {\n setFocalPosition((prevPosition) => ({ ...prevPosition, [coordinate]: intValue }))\n }\n }\n\n const saveEdits = () => {\n if (typeof onSave === 'function') {\n onSave({\n crop: crop ? crop : undefined,\n focalPoint: focalPosition,\n heightInPixels: Number(heightInputRef?.current?.value ?? uncroppedPixelHeight),\n widthInPixels: Number(widthInputRef?.current?.value ?? uncroppedPixelWidth),\n })\n }\n closeModal(editDrawerSlug)\n }\n\n const onDragEnd = React.useCallback(({ x, y }) => {\n setFocalPosition({ x, y })\n setCheckBounds(false)\n }, [])\n\n const centerFocalPoint = () => {\n const containerRect = focalWrapRef.current.getBoundingClientRect()\n const boundsRect = showCrop\n ? cropRef.current.getBoundingClientRect()\n : imageRef.current.getBoundingClientRect()\n const xCenter =\n ((boundsRect.left - containerRect.left + boundsRect.width / 2) / containerRect.width) * 100\n const yCenter =\n ((boundsRect.top - containerRect.top + boundsRect.height / 2) / containerRect.height) * 100\n setFocalPosition({ x: xCenter, y: yCenter })\n }\n\n const fileSrcToUse = imageCacheTag ? `${fileSrc}?${encodeURIComponent(imageCacheTag)}` : fileSrc\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h2 title={`${t('general:editing')} ${fileName}`}>\n {t('general:editing')} {fileName}\n </h2>\n <div className={`${baseClass}__actions`}>\n <Button\n aria-label={t('general:cancel')}\n buttonStyle=\"secondary\"\n className={`${baseClass}__cancel`}\n onClick={() => closeModal(editDrawerSlug)}\n >\n {t('general:cancel')}\n </Button>\n <Button\n aria-label={t('general:applyChanges')}\n buttonStyle=\"primary\"\n className={`${baseClass}__save`}\n disabled={!imageLoaded}\n onClick={saveEdits}\n >\n {t('general:applyChanges')}\n </Button>\n </div>\n </div>\n <div className={`${baseClass}__toolWrap`}>\n <div className={`${baseClass}__crop`}>\n <div\n className={`${baseClass}__focal-wrapper`}\n ref={focalWrapRef}\n style={{\n aspectRatio: `${uncroppedPixelWidth / uncroppedPixelHeight}`,\n }}\n >\n {showCrop ? (\n <ReactCrop\n className={`${baseClass}__reactCrop`}\n crop={crop}\n onChange={(_, c) => setCrop(c)}\n onComplete={() => setCheckBounds(true)}\n renderSelectionAddon={() => {\n return <div className={`${baseClass}__crop-window`} ref={cropRef} />\n }}\n >\n <img\n alt={t('upload:setCropArea')}\n onLoad={onImageLoad}\n ref={imageRef}\n src={fileSrcToUse}\n />\n </ReactCrop>\n ) : (\n <img\n alt={t('upload:setFocalPoint')}\n onLoad={onImageLoad}\n ref={imageRef}\n src={fileSrcToUse}\n />\n )}\n {showFocalPoint && (\n <DraggableElement\n boundsRef={showCrop ? cropRef : imageRef}\n checkBounds={showCrop ? checkBounds : false}\n className={`${baseClass}__focalPoint`}\n containerRef={focalWrapRef}\n initialPosition={focalPosition}\n onDragEnd={onDragEnd}\n setCheckBounds={showCrop ? setCheckBounds : false}\n >\n <PlusIcon />\n </DraggableElement>\n )}\n </div>\n </div>\n {(showCrop || showFocalPoint) && (\n <div className={`${baseClass}__sidebar`}>\n {showCrop && (\n <div className={`${baseClass}__groupWrap`}>\n <div>\n <div className={`${baseClass}__titleWrap`}>\n <h3>{t('upload:crop')}</h3>\n <Button\n buttonStyle=\"none\"\n className={`${baseClass}__reset`}\n onClick={() =>\n setCrop({\n height: 100,\n unit: '%',\n width: 100,\n x: 0,\n y: 0,\n })\n }\n >\n {t('general:reset')}\n </Button>\n </div>\n </div>\n <span className={`${baseClass}__description`}>\n {t('upload:cropToolDescription')}\n </span>\n <div className={`${baseClass}__inputsWrap`}>\n <Input\n name={`${t('upload:width')} (px)`}\n onChange={(value) => fineTuneCrop({ dimension: 'width', value })}\n ref={widthInputRef}\n value={((crop.width / 100) * uncroppedPixelWidth).toFixed(0)}\n />\n <Input\n name={`${t('upload:height')} (px)`}\n onChange={(value) => fineTuneCrop({ dimension: 'height', value })}\n ref={heightInputRef}\n value={((crop.height / 100) * uncroppedPixelHeight).toFixed(0)}\n />\n </div>\n </div>\n )}\n\n {showFocalPoint && (\n <div className={`${baseClass}__groupWrap`}>\n <div>\n <div className={`${baseClass}__titleWrap`}>\n <h3>{t('upload:focalPoint')}</h3>\n <Button\n buttonStyle=\"none\"\n className={`${baseClass}__reset`}\n onClick={centerFocalPoint}\n >\n {t('general:reset')}\n </Button>\n </div>\n </div>\n <span className={`${baseClass}__description`}>\n {t('upload:focalPointDescription')}\n </span>\n <div className={`${baseClass}__inputsWrap`}>\n <Input\n name=\"X %\"\n onChange={(value) => fineTuneFocalPosition({ coordinate: 'x', value })}\n value={focalPosition.x.toFixed(0)}\n />\n <Input\n name=\"Y %\"\n onChange={(value) => fineTuneFocalPosition({ coordinate: 'y', value })}\n value={focalPosition.y.toFixed(0)}\n />\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n\nconst DraggableElement = ({\n boundsRef,\n checkBounds,\n children,\n className,\n containerRef,\n initialPosition = { x: 50, y: 50 },\n onDragEnd,\n setCheckBounds,\n}) => {\n const [position, setPosition] = useState({ x: initialPosition.x, y: initialPosition.y })\n const [isDragging, setIsDragging] = useState(false)\n const dragRef = useRef<HTMLButtonElement | undefined>(undefined)\n\n const getCoordinates = React.useCallback(\n (mouseXArg?: number, mouseYArg?: number, recenter?: boolean) => {\n const containerRect = containerRef.current.getBoundingClientRect()\n const boundsRect = boundsRef.current.getBoundingClientRect()\n const mouseX = mouseXArg ?? boundsRect.left\n const mouseY = mouseYArg ?? boundsRect.top\n\n const xOutOfBounds = mouseX < boundsRect.left || mouseX > boundsRect.right\n const yOutOfBounds = mouseY < boundsRect.top || mouseY > boundsRect.bottom\n\n let x = ((mouseX - containerRect.left) / containerRect.width) * 100\n let y = ((mouseY - containerRect.top) / containerRect.height) * 100\n const xCenter =\n ((boundsRect.left - containerRect.left + boundsRect.width / 2) / containerRect.width) * 100\n const yCenter =\n ((boundsRect.top - containerRect.top + boundsRect.height / 2) / containerRect.height) * 100\n if (xOutOfBounds || yOutOfBounds) {\n setIsDragging(false)\n if (mouseX < boundsRect.left) {\n x = ((boundsRect.left - containerRect.left) / containerRect.width) * 100\n } else if (mouseX > boundsRect.right) {\n x =\n ((containerRect.width - (containerRect.right - boundsRect.right)) /\n containerRect.width) *\n 100\n }\n\n if (mouseY < boundsRect.top) {\n y = ((boundsRect.top - containerRect.top) / containerRect.height) * 100\n } else if (mouseY > boundsRect.bottom) {\n y =\n ((containerRect.height - (containerRect.bottom - boundsRect.bottom)) /\n containerRect.height) *\n 100\n }\n\n if (recenter) {\n x = xOutOfBounds ? xCenter : x\n y = yOutOfBounds ? yCenter : y\n }\n }\n\n return { x, y }\n },\n [boundsRef, containerRef],\n )\n\n const handleMouseDown = (event) => {\n event.preventDefault()\n setIsDragging(true)\n }\n\n const handleMouseMove = (event) => {\n if (!isDragging) {\n return null\n }\n const { x, y } = getCoordinates(event.clientX, event.clientY)\n\n setPosition({ x, y })\n }\n\n const onDrop = () => {\n setIsDragging(false)\n onDragEnd(position)\n }\n\n React.useEffect(() => {\n if (isDragging || !dragRef.current) {\n return\n }\n if (checkBounds) {\n const { height, left, top, width } = dragRef.current.getBoundingClientRect()\n const { x, y } = getCoordinates(left + width / 2, top + height / 2, true)\n onDragEnd({ x, y })\n setPosition({ x, y })\n setCheckBounds(false)\n return\n }\n }, [getCoordinates, isDragging, checkBounds, setCheckBounds, position.x, position.y, onDragEnd])\n\n React.useEffect(() => {\n setPosition({ x: initialPosition.x, y: initialPosition.y })\n }, [initialPosition.x, initialPosition.y])\n\n return (\n <div\n className={[\n `${baseClass}__draggable-container`,\n isDragging && `${baseClass}__draggable-container--dragging`,\n ]\n .filter(Boolean)\n .join(' ')}\n onMouseMove={handleMouseMove}\n >\n <button\n className={[`${baseClass}__draggable`, className].filter(Boolean).join(' ')}\n onMouseDown={handleMouseDown}\n onMouseUp={onDrop}\n ref={dragRef}\n style={{ left: `${position.x}%`, top: `${position.y}%` }}\n type=\"button\"\n >\n {children}\n </button>\n <div />\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","React","useCallback","useEffect","useFormModified","useAuth","useTranslation","Button","Modal","useModal","usePreventLeave","modalSlug","baseClass","Component","t0","$","isActive","onCancel","onConfirm","closeModal","openModal","t","t1","t2","t3","_jsx","className","onClose","slug","children","_jsxs","buttonStyle","onClick","size","LeaveWithoutSaving","modified","user","show","setShow","useState","hasAccepted","setHasAccepted","prevent","Boolean","Symbol","for","onPrevent","handleAccept","onAccept","t4","t5"],"sources":["../../../src/elements/LeaveWithoutSaving/index.tsx"],"sourcesContent":["'use client'\nimport React, { useCallback, useEffect } from 'react'\n\nimport { useFormModified } from '../../forms/Form/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { Modal, useModal } from '../Modal/index.js'\nimport './index.scss'\nimport { usePreventLeave } from './usePreventLeave.js'\n\nconst modalSlug = 'leave-without-saving'\n\nconst baseClass = 'leave-without-saving'\n\nconst Component: React.FC<{\n isActive: boolean\n onCancel: () => void\n onConfirm: () => void\n}> = ({ isActive, onCancel, onConfirm }) => {\n const { closeModal,
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","React","useCallback","useEffect","useFormModified","useAuth","useTranslation","Button","Modal","useModal","usePreventLeave","modalSlug","baseClass","Component","t0","$","isActive","onCancel","onConfirm","closeModal","openModal","t","t1","t2","t3","_jsx","className","onClose","slug","children","_jsxs","buttonStyle","onClick","size","LeaveWithoutSaving","modified","user","show","setShow","useState","hasAccepted","setHasAccepted","prevent","Boolean","Symbol","for","onPrevent","handleAccept","onAccept","t4","t5"],"sources":["../../../src/elements/LeaveWithoutSaving/index.tsx"],"sourcesContent":["'use client'\nimport React, { useCallback, useEffect } from 'react'\n\nimport { useFormModified } from '../../forms/Form/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { Modal, useModal } from '../Modal/index.js'\nimport './index.scss'\nimport { usePreventLeave } from './usePreventLeave.js'\n\nconst modalSlug = 'leave-without-saving'\n\nconst baseClass = 'leave-without-saving'\n\nconst Component: React.FC<{\n isActive: boolean\n onCancel: () => void\n onConfirm: () => void\n}> = ({ isActive, onCancel, onConfirm }) => {\n const { closeModal, openModal } = useModal()\n const { t } = useTranslation()\n\n // Manually check for modal state as 'esc' key will not trigger the nav inactivity\n // useEffect(() => {\n // if (!modalState?.[modalSlug]?.isOpen && isActive) {\n // onCancel()\n // }\n // }, [modalState, isActive, onCancel])\n\n useEffect(() => {\n if (isActive) {\n openModal(modalSlug)\n } else {\n closeModal(modalSlug)\n }\n }, [isActive, openModal, closeModal])\n\n return (\n <Modal className={baseClass} onClose={onCancel} slug={modalSlug}>\n <div className={`${baseClass}__wrapper`}>\n <div className={`${baseClass}__content`}>\n <h1>{t('general:leaveWithoutSaving')}</h1>\n <p>{t('general:changesNotSaved')}</p>\n </div>\n <div className={`${baseClass}__controls`}>\n <Button buttonStyle=\"secondary\" onClick={onCancel} size=\"large\">\n {t('general:stayOnThisPage')}\n </Button>\n <Button onClick={onConfirm} size=\"large\">\n {t('general:leaveAnyway')}\n </Button>\n </div>\n </div>\n </Modal>\n )\n}\n\nexport const LeaveWithoutSaving: React.FC = () => {\n const { closeModal } = useModal()\n const modified = useFormModified()\n const { user } = useAuth()\n const [show, setShow] = React.useState(false)\n const [hasAccepted, setHasAccepted] = React.useState(false)\n\n const prevent = Boolean(modified && user)\n\n const onPrevent = useCallback(() => {\n setShow(true)\n }, [])\n\n const handleAccept = useCallback(() => {\n closeModal(modalSlug)\n }, [closeModal])\n\n usePreventLeave({ hasAccepted, onAccept: handleAccept, onPrevent, prevent })\n\n return (\n <Component\n isActive={show}\n onCancel={() => {\n setShow(false)\n }}\n onConfirm={() => {\n setHasAccepted(true)\n }}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePreventLeave.d.ts","sourceRoot":"","sources":["../../../src/elements/LeaveWithoutSaving/usePreventLeave.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"usePreventLeave.d.ts","sourceRoot":"","sources":["../../../src/elements/LeaveWithoutSaving/usePreventLeave.tsx"],"names":[],"mappings":"AA4BA,eAAO,MAAM,eAAe,aAAa,CAAC,MAAM,OAAO,CAAC,GAAG,OAAO,YAAmB,MAAM,SA6B1F,CAAA;AAED,eAAO,MAAM,eAAe,4DAMzB;IACD,WAAW,EAAE,OAAO,CAAA;IAEpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IAErB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB,SAqFA,CAAA"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import { c as _c } from "react/compiler-runtime";
|
|
8
8
|
import { useRouter } from 'next/navigation.js';
|
|
9
9
|
import { useCallback, useEffect, useRef } from 'react';
|
|
10
|
+
import { useRouteTransition } from '../../providers/RouteTransition/index.js';
|
|
10
11
|
function on(obj, ...args) {
|
|
11
12
|
if (obj && obj.addEventListener) {
|
|
12
13
|
obj.addEventListener(...args);
|
|
@@ -70,6 +71,9 @@ export const usePreventLeave = ({
|
|
|
70
71
|
}) => {
|
|
71
72
|
// check when page is about to be reloaded
|
|
72
73
|
useBeforeUnload(prevent, message);
|
|
74
|
+
const {
|
|
75
|
+
startRouteTransition
|
|
76
|
+
} = useRouteTransition();
|
|
73
77
|
const router = useRouter();
|
|
74
78
|
const cancelledURL = useRef('');
|
|
75
79
|
// check when page is about to be changed
|
|
@@ -129,8 +133,8 @@ export const usePreventLeave = ({
|
|
|
129
133
|
if (onAccept) {
|
|
130
134
|
onAccept();
|
|
131
135
|
}
|
|
132
|
-
router.push(cancelledURL.current);
|
|
136
|
+
startRouteTransition(() => router.push(cancelledURL.current));
|
|
133
137
|
}
|
|
134
|
-
}, [hasAccepted, onAccept, router]);
|
|
138
|
+
}, [hasAccepted, onAccept, router, startRouteTransition]);
|
|
135
139
|
};
|
|
136
140
|
//# sourceMappingURL=usePreventLeave.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePreventLeave.js","names":["c","_c","useRouter","useCallback","useEffect","useRef","on","obj","args","addEventListener","off","removeEventListener","useBeforeUnload","t0","message","$","enabled","undefined","t1","event","finalEnabled","preventDefault","returnValue","handler","t2","t3","window","usePreventLeave","hasAccepted","onAccept","onPrevent","prevent","router","cancelledURL","isAnchorOfCurrentUrl","currentUrl","newUrl","currentUrlObj","URL","newUrlObj","hostname","pathname","search","currentHash","hash","newHash","href","replace","findClosestAnchor","element","tagName","toLowerCase","parentElement","handleClick","target","anchor","location","isAnchor","isDownloadLink","download","isPageLeaving","confirm","current","stopPropagation","err","alert","document","push"],"sources":["../../../src/elements/LeaveWithoutSaving/usePreventLeave.tsx"],"sourcesContent":["'use client'\n// Credit: @Taiki92777\n// - Source: https://github.com/vercel/next.js/discussions/32231#discussioncomment-7284386\n// Credit: `react-use` maintainers\n// - Source: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/useBeforeUnload.ts#L2\nimport { useRouter } from 'next/navigation.js'\nimport { useCallback, useEffect, useRef } from 'react'\n\nfunction on<T extends Document | EventTarget | HTMLElement | Window>(\n obj: null | T,\n ...args: [string,
|
|
1
|
+
{"version":3,"file":"usePreventLeave.js","names":["c","_c","useRouter","useCallback","useEffect","useRef","useRouteTransition","on","obj","args","addEventListener","off","removeEventListener","useBeforeUnload","t0","message","$","enabled","undefined","t1","event","finalEnabled","preventDefault","returnValue","handler","t2","t3","window","usePreventLeave","hasAccepted","onAccept","onPrevent","prevent","startRouteTransition","router","cancelledURL","isAnchorOfCurrentUrl","currentUrl","newUrl","currentUrlObj","URL","newUrlObj","hostname","pathname","search","currentHash","hash","newHash","href","replace","findClosestAnchor","element","tagName","toLowerCase","parentElement","handleClick","target","anchor","location","isAnchor","isDownloadLink","download","isPageLeaving","confirm","current","stopPropagation","err","alert","document","push"],"sources":["../../../src/elements/LeaveWithoutSaving/usePreventLeave.tsx"],"sourcesContent":["'use client'\n// Credit: @Taiki92777\n// - Source: https://github.com/vercel/next.js/discussions/32231#discussioncomment-7284386\n// Credit: `react-use` maintainers\n// - Source: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/useBeforeUnload.ts#L2\nimport { useRouter } from 'next/navigation.js'\nimport { useCallback, useEffect, useRef } from 'react'\n\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\n\nfunction on<T extends Document | EventTarget | HTMLElement | Window>(\n obj: null | T,\n ...args: [string, (() => void) | null, ...any] | Parameters<T['addEventListener']>\n): void {\n if (obj && obj.addEventListener) {\n obj.addEventListener(...(args as Parameters<HTMLElement['addEventListener']>))\n }\n}\n\nfunction off<T extends Document | EventTarget | HTMLElement | Window>(\n obj: null | T,\n ...args: [string, (() => void) | null, ...any] | Parameters<T['removeEventListener']>\n): void {\n if (obj && obj.removeEventListener) {\n obj.removeEventListener(...(args as Parameters<HTMLElement['removeEventListener']>))\n }\n}\n\nexport const useBeforeUnload = (enabled: (() => boolean) | boolean = true, message?: string) => {\n const handler = useCallback(\n (event: BeforeUnloadEvent) => {\n const finalEnabled = typeof enabled === 'function' ? enabled() : true\n\n if (!finalEnabled) {\n return\n }\n\n event.preventDefault()\n\n if (message) {\n event.returnValue = message\n }\n\n return message\n },\n [enabled, message],\n )\n\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n on(window, 'beforeunload', handler)\n\n return () => off(window, 'beforeunload', handler)\n }, [enabled, handler])\n}\n\nexport const usePreventLeave = ({\n hasAccepted = false,\n message = 'Are you sure want to leave this page?',\n onAccept,\n onPrevent,\n prevent = true,\n}: {\n hasAccepted: boolean\n // if no `onPrevent` is provided, the message will be displayed in a confirm dialog\n message?: string\n onAccept?: () => void\n // to use a custom confirmation dialog, provide a function that returns a boolean\n onPrevent?: () => void\n prevent: boolean\n}) => {\n // check when page is about to be reloaded\n useBeforeUnload(prevent, message)\n const { startRouteTransition } = useRouteTransition()\n\n const router = useRouter()\n const cancelledURL = useRef<string>('')\n\n // check when page is about to be changed\n useEffect(() => {\n function isAnchorOfCurrentUrl(currentUrl: string, newUrl: string) {\n const currentUrlObj = new URL(currentUrl)\n const newUrlObj = new URL(newUrl)\n // Compare hostname, pathname, and search parameters\n if (\n currentUrlObj.hostname === newUrlObj.hostname &&\n currentUrlObj.pathname === newUrlObj.pathname &&\n currentUrlObj.search === newUrlObj.search\n ) {\n // Check if the new URL is just an anchor of the current URL page\n const currentHash = currentUrlObj.hash\n const newHash = newUrlObj.hash\n return (\n currentHash !== newHash &&\n currentUrlObj.href.replace(currentHash, '') === newUrlObj.href.replace(newHash, '')\n )\n }\n return false\n }\n\n function findClosestAnchor(element: HTMLElement | null): HTMLAnchorElement | null {\n while (element && element.tagName.toLowerCase() !== 'a') {\n element = element.parentElement\n }\n return element as HTMLAnchorElement\n }\n\n function handleClick(event: MouseEvent) {\n try {\n const target = event.target as HTMLElement\n const anchor = findClosestAnchor(target)\n if (anchor) {\n const currentUrl = window.location.href\n const newUrl = anchor.href\n const isAnchor = isAnchorOfCurrentUrl(currentUrl, newUrl)\n const isDownloadLink = anchor.download !== ''\n\n const isPageLeaving = !(newUrl === currentUrl || isAnchor || isDownloadLink)\n\n if (isPageLeaving && prevent && (!onPrevent ? !window.confirm(message) : true)) {\n // Keep a reference of the href\n cancelledURL.current = newUrl\n\n // Cancel the route change\n event.preventDefault()\n event.stopPropagation()\n\n if (typeof onPrevent === 'function') {\n onPrevent()\n }\n }\n }\n } catch (err) {\n alert(err)\n }\n }\n\n // Add the global click event listener\n document.addEventListener('click', handleClick, true)\n\n // Clean up the global click event listener when the component is unmounted\n return () => {\n document.removeEventListener('click', handleClick, true)\n }\n }, [onPrevent, prevent, message])\n\n useEffect(() => {\n if (hasAccepted && cancelledURL.current) {\n if (onAccept) {\n onAccept()\n }\n\n startRouteTransition(() => router.push(cancelledURL.current))\n }\n }, [hasAccepted, onAccept, router, startRouteTransition])\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatUrl.d.ts","sourceRoot":"","sources":["../../../src/elements/Link/formatUrl.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAgBpC,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,eAAe,CAUpF;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,UAkD1C"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// Format function modified from nodejs
|
|
2
|
+
// Copyright Joyent, Inc. and other Node contributors.
|
|
3
|
+
//
|
|
4
|
+
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
5
|
+
// copy of this software and associated documentation files (the
|
|
6
|
+
// "Software"), to deal in the Software without restriction, including
|
|
7
|
+
// without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
9
|
+
// persons to whom the Software is furnished to do so, subject to the
|
|
10
|
+
// following conditions:
|
|
11
|
+
//
|
|
12
|
+
// The above copyright notice and this permission notice shall be included
|
|
13
|
+
// in all copies or substantial portions of the Software.
|
|
14
|
+
//
|
|
15
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
16
|
+
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
18
|
+
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
19
|
+
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
20
|
+
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
21
|
+
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
const slashedProtocols = /https?|ftp|gopher|file/;
|
|
23
|
+
function stringifyUrlQueryParam(param) {
|
|
24
|
+
if (typeof param === 'string' || typeof param === 'number' && !isNaN(param) || typeof param === 'boolean') {
|
|
25
|
+
return String(param);
|
|
26
|
+
} else {
|
|
27
|
+
return '';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function urlQueryToSearchParams(urlQuery) {
|
|
31
|
+
const result = new URLSearchParams();
|
|
32
|
+
Object.entries(urlQuery).forEach(([key, value]) => {
|
|
33
|
+
if (Array.isArray(value)) {
|
|
34
|
+
value.forEach(item => result.append(key, stringifyUrlQueryParam(item)));
|
|
35
|
+
} else {
|
|
36
|
+
result.set(key, stringifyUrlQueryParam(value));
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
export function formatUrl(urlObj) {
|
|
42
|
+
let {
|
|
43
|
+
auth
|
|
44
|
+
} = urlObj;
|
|
45
|
+
const {
|
|
46
|
+
hostname
|
|
47
|
+
} = urlObj;
|
|
48
|
+
let protocol = urlObj.protocol || '';
|
|
49
|
+
let pathname = urlObj.pathname || '';
|
|
50
|
+
let hash = urlObj.hash || '';
|
|
51
|
+
let query = urlObj.query || '';
|
|
52
|
+
let host = false;
|
|
53
|
+
auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : '';
|
|
54
|
+
if (urlObj.host) {
|
|
55
|
+
host = auth + urlObj.host;
|
|
56
|
+
} else if (hostname) {
|
|
57
|
+
host = auth + (~hostname.indexOf(':') ? `[${hostname}]` : hostname);
|
|
58
|
+
if (urlObj.port) {
|
|
59
|
+
host += ':' + urlObj.port;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (query && typeof query === 'object') {
|
|
63
|
+
query = String(urlQueryToSearchParams(query));
|
|
64
|
+
}
|
|
65
|
+
let search = urlObj.search || query && `?${query}` || '';
|
|
66
|
+
if (protocol && !protocol.endsWith(':')) {
|
|
67
|
+
protocol += ':';
|
|
68
|
+
}
|
|
69
|
+
if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) {
|
|
70
|
+
host = '//' + (host || '');
|
|
71
|
+
if (pathname && pathname[0] !== '/') {
|
|
72
|
+
pathname = '/' + pathname;
|
|
73
|
+
}
|
|
74
|
+
} else if (!host) {
|
|
75
|
+
host = '';
|
|
76
|
+
}
|
|
77
|
+
if (hash && hash[0] !== '#') {
|
|
78
|
+
hash = '#' + hash;
|
|
79
|
+
}
|
|
80
|
+
if (search && search[0] !== '?') {
|
|
81
|
+
search = '?' + search;
|
|
82
|
+
}
|
|
83
|
+
pathname = pathname.replace(/[?#]/g, encodeURIComponent);
|
|
84
|
+
search = search.replace('#', '%23');
|
|
85
|
+
return `${protocol}${host}${pathname}${search}${hash}`;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=formatUrl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatUrl.js","names":["slashedProtocols","stringifyUrlQueryParam","param","isNaN","String","urlQueryToSearchParams","urlQuery","result","URLSearchParams","Object","entries","forEach","key","value","Array","isArray","item","append","set","formatUrl","urlObj","auth","hostname","protocol","pathname","hash","query","host","encodeURIComponent","replace","indexOf","port","search","endsWith","slashes","test"],"sources":["../../../src/elements/Link/formatUrl.ts"],"sourcesContent":["// Format function modified from nodejs\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport type { UrlObject } from 'url'\n\nconst slashedProtocols = /https?|ftp|gopher|file/\n\nfunction stringifyUrlQueryParam(param: unknown): string {\n if (\n typeof param === 'string' ||\n (typeof param === 'number' && !isNaN(param)) ||\n typeof param === 'boolean'\n ) {\n return String(param)\n } else {\n return ''\n }\n}\n\nexport function urlQueryToSearchParams(urlQuery: UrlObject['query']): URLSearchParams {\n const result = new URLSearchParams()\n Object.entries(urlQuery).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach((item) => result.append(key, stringifyUrlQueryParam(item)))\n } else {\n result.set(key, stringifyUrlQueryParam(value))\n }\n })\n return result\n}\n\nexport function formatUrl(urlObj: UrlObject) {\n let { auth } = urlObj\n const { hostname } = urlObj\n let protocol = urlObj.protocol || ''\n let pathname = urlObj.pathname || ''\n let hash = urlObj.hash || ''\n let query = urlObj.query || ''\n let host: false | string = false\n\n auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : ''\n\n if (urlObj.host) {\n host = auth + urlObj.host\n } else if (hostname) {\n host = auth + (~hostname.indexOf(':') ? `[${hostname}]` : hostname)\n if (urlObj.port) {\n host += ':' + urlObj.port\n }\n }\n\n if (query && typeof query === 'object') {\n query = String(urlQueryToSearchParams(query))\n }\n\n let search = urlObj.search || (query && `?${query}`) || ''\n\n if (protocol && !protocol.endsWith(':')) {\n protocol += ':'\n }\n\n if (urlObj.slashes || ((!protocol || slashedProtocols.test(protocol)) && host !== false)) {\n host = '//' + (host || '')\n if (pathname && pathname[0] !== '/') {\n pathname = '/' + pathname\n }\n } else if (!host) {\n host = ''\n }\n\n if (hash && hash[0] !== '#') {\n hash = '#' + hash\n }\n if (search && search[0] !== '?') {\n search = '?' + search\n }\n\n pathname = pathname.replace(/[?#]/g, encodeURIComponent)\n search = search.replace('#', '%23')\n\n return `${protocol}${host}${pathname}${search}${hash}`\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Link/index.tsx"],"names":[],"mappings":"AACA,OAAO,cAAc,MAAM,cAAc,CAAA;AAEzC,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,QAAA,MAAM,QAAQ,EACkB,OAAO,cAAc,CAAC,OAAO,CAAA;AAgB7D,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAwCzD,CAAA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
4
|
+
import NextLinkImport from 'next/link.js';
|
|
5
|
+
import { useRouter } from 'next/navigation.js';
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import { useRouteTransition } from '../../providers/RouteTransition/index.js';
|
|
8
|
+
import { formatUrl } from './formatUrl.js';
|
|
9
|
+
const NextLink = NextLinkImport.default || NextLinkImport;
|
|
10
|
+
// Copied from https://github.com/vercel/next.js/blob/canary/packages/next/src/client/link.tsx#L180-L191
|
|
11
|
+
function isModifiedEvent(event) {
|
|
12
|
+
const eventTarget = event.currentTarget;
|
|
13
|
+
const target = eventTarget.getAttribute('target');
|
|
14
|
+
return target && target !== '_self' || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey ||
|
|
15
|
+
// triggers resource download
|
|
16
|
+
event.nativeEvent && event.nativeEvent.which === 2;
|
|
17
|
+
}
|
|
18
|
+
export const Link = ({
|
|
19
|
+
children,
|
|
20
|
+
href,
|
|
21
|
+
onClick,
|
|
22
|
+
ref,
|
|
23
|
+
replace,
|
|
24
|
+
scroll,
|
|
25
|
+
...rest
|
|
26
|
+
}) => {
|
|
27
|
+
const router = useRouter();
|
|
28
|
+
const {
|
|
29
|
+
startRouteTransition
|
|
30
|
+
} = useRouteTransition();
|
|
31
|
+
return /*#__PURE__*/_jsx(NextLink, {
|
|
32
|
+
href: href,
|
|
33
|
+
onClick: e => {
|
|
34
|
+
if (isModifiedEvent(e)) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (onClick) {
|
|
38
|
+
onClick(e);
|
|
39
|
+
}
|
|
40
|
+
startRouteTransition(() => {
|
|
41
|
+
const url = typeof href === 'string' ? href : formatUrl(href);
|
|
42
|
+
if (replace) {
|
|
43
|
+
void router.replace(url, {
|
|
44
|
+
scroll
|
|
45
|
+
});
|
|
46
|
+
} else {
|
|
47
|
+
void router.push(url, {
|
|
48
|
+
scroll
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
ref: ref,
|
|
54
|
+
...rest,
|
|
55
|
+
children: children
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["NextLinkImport","useRouter","React","useRouteTransition","formatUrl","NextLink","default","isModifiedEvent","event","eventTarget","currentTarget","target","getAttribute","metaKey","ctrlKey","shiftKey","altKey","nativeEvent","which","Link","children","href","onClick","ref","replace","scroll","rest","router","startRouteTransition","_jsx","e","url","push"],"sources":["../../../src/elements/Link/index.tsx"],"sourcesContent":["'use client'\nimport NextLinkImport from 'next/link.js'\nimport { useRouter } from 'next/navigation.js'\nimport React from 'react'\n\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { formatUrl } from './formatUrl.js'\n\nconst NextLink = (NextLinkImport.default ||\n NextLinkImport) as unknown as typeof NextLinkImport.default\n\n// Copied from https://github.com/vercel/next.js/blob/canary/packages/next/src/client/link.tsx#L180-L191\nfunction isModifiedEvent(event: React.MouseEvent): boolean {\n const eventTarget = event.currentTarget as HTMLAnchorElement | SVGAElement\n const target = eventTarget.getAttribute('target')\n return (\n (target && target !== '_self') ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey || // triggers resource download\n (event.nativeEvent && event.nativeEvent.which === 2)\n )\n}\n\nexport const Link: React.FC<Parameters<typeof NextLink>[0]> = ({\n children,\n href,\n onClick,\n ref,\n replace,\n scroll,\n ...rest\n}) => {\n const router = useRouter()\n const { startRouteTransition } = useRouteTransition()\n\n return (\n <NextLink\n href={href}\n onClick={(e) => {\n if (isModifiedEvent(e)) {\n return\n }\n\n if (onClick) {\n onClick(e)\n }\n\n startRouteTransition(() => {\n const url = typeof href === 'string' ? href : formatUrl(href)\n\n if (replace) {\n void router.replace(url, { scroll })\n } else {\n void router.push(url, { scroll })\n }\n })\n }}\n ref={ref}\n {...rest}\n >\n {children}\n </NextLink>\n )\n}\n"],"mappings":"AAAA;;;AACA,OAAOA,cAAA,MAAoB;AAC3B,SAASC,SAAS,QAAQ;AAC1B,OAAOC,KAAA,MAAW;AAElB,SAASC,kBAAkB,QAAQ;AACnC,SAASC,SAAS,QAAQ;AAE1B,MAAMC,QAAA,GAAYL,cAAA,CAAeM,OAAO,IACtCN,cAAA;AAEF;AACA,SAASO,gBAAgBC,KAAuB;EAC9C,MAAMC,WAAA,GAAcD,KAAA,CAAME,aAAa;EACvC,MAAMC,MAAA,GAASF,WAAA,CAAYG,YAAY,CAAC;EACxC,OACED,MAAC,IAAUA,MAAA,KAAW,WACtBH,KAAA,CAAMK,OAAO,IACbL,KAAA,CAAMM,OAAO,IACbN,KAAA,CAAMO,QAAQ,IACdP,KAAA,CAAMQ,MAAM;EAAI;EACfR,KAAA,CAAMS,WAAW,IAAIT,KAAA,CAAMS,WAAW,CAACC,KAAK,KAAK;AAEtD;AAEA,OAAO,MAAMC,IAAA,GAAiDA,CAAC;EAC7DC,QAAQ;EACRC,IAAI;EACJC,OAAO;EACPC,GAAG;EACHC,OAAO;EACPC,MAAM;EACN,GAAGC;AAAA,CACJ;EACC,MAAMC,MAAA,GAAS1B,SAAA;EACf,MAAM;IAAE2B;EAAoB,CAAE,GAAGzB,kBAAA;EAEjC,oBACE0B,IAAA,CAACxB,QAAA;IACCgB,IAAA,EAAMA,IAAA;IACNC,OAAA,EAAUQ,CAAA;MACR,IAAIvB,eAAA,CAAgBuB,CAAA,GAAI;QACtB;MACF;MAEA,IAAIR,OAAA,EAAS;QACXA,OAAA,CAAQQ,CAAA;MACV;MAEAF,oBAAA,CAAqB;QACnB,MAAMG,GAAA,GAAM,OAAOV,IAAA,KAAS,WAAWA,IAAA,GAAOjB,SAAA,CAAUiB,IAAA;QAExD,IAAIG,OAAA,EAAS;UACX,KAAKG,MAAA,CAAOH,OAAO,CAACO,GAAA,EAAK;YAAEN;UAAO;QACpC,OAAO;UACL,KAAKE,MAAA,CAAOK,IAAI,CAACD,GAAA,EAAK;YAAEN;UAAO;QACjC;MACF;IACF;IACAF,GAAA,EAAKA,GAAA;IACJ,GAAGG,IAAI;cAEPN;;AAGP","ignoreList":[]}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
export declare const Logout: React.FC<{
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated
|
|
5
|
+
* This prop is deprecated and will be removed in the next major version.
|
|
6
|
+
* Components now import their own `Link` directly from `next/link`.
|
|
7
|
+
*/
|
|
3
8
|
Link?: React.ComponentType;
|
|
4
9
|
tabIndex?: number;
|
|
5
10
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Logout/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Logout/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAUzB,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;IAC5B;;;;OAIG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAiCA,CAAA"}
|