@payloadcms/ui 3.0.0-canary.ee0375f → 3.0.0-canary.ef0a8d0
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/@types/assets.d.js.map +1 -1
- package/dist/assets/index.js.map +1 -1
- package/dist/elements/AppHeader/index.js.map +1 -1
- package/dist/elements/ArrayAction/index.js.map +1 -1
- package/dist/elements/Autosave/index.js.map +1 -1
- package/dist/elements/Banner/index.js.map +1 -1
- package/dist/elements/Banner/index.scss +4 -4
- package/dist/elements/Button/index.js.map +1 -1
- package/dist/elements/Button/types.js.map +1 -1
- package/dist/elements/Card/index.js.map +1 -1
- package/dist/elements/CodeEditor/CodeEditor.js.map +1 -1
- package/dist/elements/CodeEditor/index.js.map +1 -1
- package/dist/elements/CodeEditor/types.d.ts +2 -2
- package/dist/elements/CodeEditor/types.d.ts.map +1 -1
- package/dist/elements/CodeEditor/types.js.map +1 -1
- package/dist/elements/Collapsible/index.js.map +1 -1
- package/dist/elements/Collapsible/index.scss +13 -47
- package/dist/elements/Collapsible/provider.js.map +1 -1
- package/dist/elements/ColumnSelector/index.js.map +1 -1
- package/dist/elements/CopyToClipboard/index.js.map +1 -1
- package/dist/elements/DatePicker/DatePicker.d.ts +2 -2
- package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/elements/DatePicker/DatePicker.js +2 -2
- package/dist/elements/DatePicker/DatePicker.js.map +1 -1
- package/dist/elements/DatePicker/getFormattedLocale.js.map +1 -1
- package/dist/elements/DatePicker/index.js.map +1 -1
- package/dist/elements/DatePicker/types.d.ts +2 -2
- package/dist/elements/DatePicker/types.d.ts.map +1 -1
- package/dist/elements/DatePicker/types.js.map +1 -1
- package/dist/elements/DeleteDocument/index.js.map +1 -1
- package/dist/elements/DeleteDocument/index.scss +1 -0
- package/dist/elements/DeleteMany/index.js.map +1 -1
- package/dist/elements/DeleteMany/index.scss +1 -0
- package/dist/elements/DocumentControls/index.js.map +1 -1
- package/dist/elements/DocumentDrawer/DrawerContent.js +2 -2
- package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/DocumentDrawer/index.js.map +1 -1
- package/dist/elements/DocumentDrawer/types.d.ts +4 -4
- package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/types.js.map +1 -1
- package/dist/elements/DocumentFields/index.js.map +1 -1
- package/dist/elements/DraggableSortable/DraggableSortableItem/index.d.ts +2 -2
- package/dist/elements/DraggableSortable/DraggableSortableItem/index.d.ts.map +1 -1
- package/dist/elements/DraggableSortable/DraggableSortableItem/index.js.map +1 -1
- package/dist/elements/DraggableSortable/DraggableSortableItem/types.d.ts +4 -4
- package/dist/elements/DraggableSortable/DraggableSortableItem/types.d.ts.map +1 -1
- package/dist/elements/DraggableSortable/DraggableSortableItem/types.js.map +1 -1
- package/dist/elements/DraggableSortable/index.js.map +1 -1
- package/dist/elements/DraggableSortable/types.js.map +1 -1
- package/dist/elements/DraggableSortable/useDraggableSortable/index.js.map +1 -1
- package/dist/elements/DraggableSortable/useDraggableSortable/types.js.map +1 -1
- package/dist/elements/Drawer/index.js.map +1 -1
- package/dist/elements/Drawer/types.d.ts +2 -2
- package/dist/elements/Drawer/types.d.ts.map +1 -1
- package/dist/elements/Drawer/types.js.map +1 -1
- package/dist/elements/Drawer/useDrawerSlug.js.map +1 -1
- package/dist/elements/Dropzone/index.d.ts +1 -0
- package/dist/elements/Dropzone/index.d.ts.map +1 -1
- package/dist/elements/Dropzone/index.js +8 -1
- package/dist/elements/Dropzone/index.js.map +1 -1
- package/dist/elements/DuplicateDocument/index.js.map +1 -1
- package/dist/elements/EditMany/index.js.map +1 -1
- package/dist/elements/EditUpload/index.js.map +1 -1
- package/dist/elements/ErrorPill/index.js.map +1 -1
- package/dist/elements/ErrorPill/index.scss +2 -14
- package/dist/elements/FieldSelect/index.d.ts +7 -2
- package/dist/elements/FieldSelect/index.d.ts.map +1 -1
- package/dist/elements/FieldSelect/index.js +1 -1
- package/dist/elements/FieldSelect/index.js.map +1 -1
- package/dist/elements/FileDetails/FileMeta/index.js.map +1 -1
- package/dist/elements/FileDetails/index.d.ts +4 -3
- package/dist/elements/FileDetails/index.d.ts.map +1 -1
- package/dist/elements/FileDetails/index.js +6 -5
- package/dist/elements/FileDetails/index.js.map +1 -1
- package/dist/elements/GenerateConfirmation/index.js.map +1 -1
- package/dist/elements/GenerateConfirmation/index.scss +1 -0
- package/dist/elements/Gutter/index.js.map +1 -1
- package/dist/elements/Hamburger/index.js.map +1 -1
- package/dist/elements/HydrateClientUser/index.d.ts +2 -2
- package/dist/elements/HydrateClientUser/index.d.ts.map +1 -1
- package/dist/elements/HydrateClientUser/index.js.map +1 -1
- package/dist/elements/IDLabel/index.js.map +1 -1
- package/dist/elements/ListControls/getTextFieldsToBeSearched.js.map +1 -1
- package/dist/elements/ListControls/index.d.ts.map +1 -1
- package/dist/elements/ListControls/index.js +2 -1
- package/dist/elements/ListControls/index.js.map +1 -1
- package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/ListDrawer/index.js.map +1 -1
- package/dist/elements/ListDrawer/types.d.ts +2 -2
- package/dist/elements/ListDrawer/types.d.ts.map +1 -1
- package/dist/elements/ListDrawer/types.js.map +1 -1
- package/dist/elements/ListSelection/index.js.map +1 -1
- package/dist/elements/Loading/index.js.map +1 -1
- package/dist/elements/LoadingOverlay/index.js.map +1 -1
- package/dist/elements/LoadingOverlay/reducer.js.map +1 -1
- package/dist/elements/LoadingOverlay/types.js.map +1 -1
- package/dist/elements/Localizer/LocalizerLabel/index.js.map +1 -1
- package/dist/elements/Localizer/index.js.map +1 -1
- package/dist/elements/Logout/index.js.map +1 -1
- package/dist/elements/Modal/index.js.map +1 -1
- package/dist/elements/Nav/NavToggler/index.js.map +1 -1
- package/dist/elements/Nav/context.js.map +1 -1
- package/dist/elements/NavGroup/index.js.map +1 -1
- package/dist/elements/Pagination/ClickableArrow/index.js.map +1 -1
- package/dist/elements/Pagination/Page/index.js.map +1 -1
- package/dist/elements/Pagination/Separator/index.js.map +1 -1
- package/dist/elements/Pagination/index.js.map +1 -1
- package/dist/elements/PerPage/index.js.map +1 -1
- package/dist/elements/Pill/index.d.ts +2 -2
- package/dist/elements/Pill/index.d.ts.map +1 -1
- package/dist/elements/Pill/index.js.map +1 -1
- package/dist/elements/Pill/index.scss +9 -21
- package/dist/elements/Popup/PopupButtonList/index.js.map +1 -1
- package/dist/elements/Popup/PopupTrigger/index.js.map +1 -1
- package/dist/elements/Popup/PopupTrigger/types.js.map +1 -1
- package/dist/elements/Popup/index.js.map +1 -1
- package/dist/elements/PreviewButton/index.js.map +1 -1
- package/dist/elements/PreviewButton/usePreviewURL.js.map +1 -1
- package/dist/elements/PreviewSizes/index.d.ts +4 -4
- package/dist/elements/PreviewSizes/index.d.ts.map +1 -1
- package/dist/elements/PreviewSizes/index.js.map +1 -1
- package/dist/elements/PublishButton/index.d.ts.map +1 -1
- package/dist/elements/PublishButton/index.js +16 -0
- package/dist/elements/PublishButton/index.js.map +1 -1
- package/dist/elements/PublishMany/index.js.map +1 -1
- package/dist/elements/ReactSelect/ClearIndicator/index.js.map +1 -1
- package/dist/elements/ReactSelect/Control/index.js +0 -1
- package/dist/elements/ReactSelect/Control/index.js.map +1 -1
- package/dist/elements/ReactSelect/DropdownIndicator/index.d.ts +2 -2
- package/dist/elements/ReactSelect/DropdownIndicator/index.d.ts.map +1 -1
- package/dist/elements/ReactSelect/DropdownIndicator/index.js.map +1 -1
- package/dist/elements/ReactSelect/Input/index.js.map +1 -1
- package/dist/elements/ReactSelect/MultiValue/index.js.map +1 -1
- package/dist/elements/ReactSelect/MultiValueLabel/index.js.map +1 -1
- package/dist/elements/ReactSelect/MultiValueRemove/index.d.ts +2 -2
- package/dist/elements/ReactSelect/MultiValueRemove/index.d.ts.map +1 -1
- package/dist/elements/ReactSelect/MultiValueRemove/index.js.map +1 -1
- package/dist/elements/ReactSelect/SingleValue/index.js.map +1 -1
- package/dist/elements/ReactSelect/ValueContainer/index.js.map +1 -1
- package/dist/elements/ReactSelect/index.d.ts.map +1 -1
- package/dist/elements/ReactSelect/index.js +0 -1
- package/dist/elements/ReactSelect/index.js.map +1 -1
- package/dist/elements/ReactSelect/index.scss +9 -2
- package/dist/elements/ReactSelect/types.d.ts +1 -1
- package/dist/elements/ReactSelect/types.d.ts.map +1 -1
- package/dist/elements/ReactSelect/types.js.map +1 -1
- package/dist/elements/RenderCustomClientComponent/index.js.map +1 -1
- package/dist/elements/RenderCustomComponent/index.js.map +1 -1
- package/dist/elements/RenderTitle/index.js.map +1 -1
- package/dist/elements/SaveButton/index.js.map +1 -1
- package/dist/elements/SaveDraftButton/index.d.ts +1 -0
- package/dist/elements/SaveDraftButton/index.d.ts.map +1 -1
- package/dist/elements/SaveDraftButton/index.js +1 -1
- package/dist/elements/SaveDraftButton/index.js.map +1 -1
- package/dist/elements/SearchFilter/index.js.map +1 -1
- package/dist/elements/SelectAll/index.js.map +1 -1
- package/dist/elements/SelectRow/index.js.map +1 -1
- package/dist/elements/ShimmerEffect/index.js.map +1 -1
- package/dist/elements/SortColumn/index.js.map +1 -1
- package/dist/elements/SortComplex/index.js +2 -2
- package/dist/elements/SortComplex/index.js.map +1 -1
- package/dist/elements/Status/index.js.map +1 -1
- package/dist/elements/Status/index.scss +1 -0
- package/dist/elements/StayLoggedIn/index.js.map +1 -1
- package/dist/elements/StepNav/SetStepNav.js.map +1 -1
- package/dist/elements/StepNav/context.js.map +1 -1
- package/dist/elements/StepNav/index.js.map +1 -1
- package/dist/elements/StepNav/types.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Array/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Blocks/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Checkbox/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Code/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Date/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/File/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/JSON/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Relationship/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Relationship/index.js +0 -1
- package/dist/elements/Table/DefaultCell/fields/Relationship/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Select/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Textarea/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/index.js.map +1 -1
- package/dist/elements/Table/RelationshipProvider/index.d.ts.map +1 -1
- package/dist/elements/Table/RelationshipProvider/index.js +11 -10
- package/dist/elements/Table/RelationshipProvider/index.js.map +1 -1
- package/dist/elements/Table/RelationshipProvider/reducer.js.map +1 -1
- package/dist/elements/Table/TableCellProvider/index.js.map +1 -1
- package/dist/elements/Table/index.js.map +1 -1
- package/dist/elements/TableColumns/buildColumnState.d.ts.map +1 -1
- package/dist/elements/TableColumns/buildColumnState.js +0 -1
- package/dist/elements/TableColumns/buildColumnState.js.map +1 -1
- package/dist/elements/TableColumns/filterFields.js.map +1 -1
- package/dist/elements/TableColumns/getInitialColumns.js.map +1 -1
- package/dist/elements/TableColumns/index.js.map +1 -1
- package/dist/elements/Thumbnail/index.js.map +1 -1
- package/dist/elements/ThumbnailCard/index.d.ts +2 -2
- package/dist/elements/ThumbnailCard/index.d.ts.map +1 -1
- package/dist/elements/ThumbnailCard/index.js.map +1 -1
- package/dist/elements/Tooltip/index.js.map +1 -1
- package/dist/elements/Translation/index.js.map +1 -1
- package/dist/elements/UnpublishMany/index.js.map +1 -1
- package/dist/elements/Upload/index.d.ts +9 -5
- package/dist/elements/Upload/index.d.ts.map +1 -1
- package/dist/elements/Upload/index.js +144 -45
- package/dist/elements/Upload/index.js.map +1 -1
- package/dist/elements/Upload/index.scss +6 -3
- package/dist/elements/ViewDescription/index.js.map +1 -1
- package/dist/elements/ViewDescription/types.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Date/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Date/types.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Number/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Number/types.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Relationship/index.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Relationship/index.js +8 -8
- package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Relationship/index.scss +2 -2
- package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Relationship/types.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Select/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Select/types.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Text/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Text/types.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/index.js +1 -1
- package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/types.js.map +1 -1
- package/dist/elements/WhereBuilder/field-types.js.map +1 -1
- package/dist/elements/WhereBuilder/index.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/index.js +12 -6
- package/dist/elements/WhereBuilder/index.js.map +1 -1
- package/dist/elements/WhereBuilder/reduceFieldMap.d.ts +13 -2
- package/dist/elements/WhereBuilder/reduceFieldMap.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/reduceFieldMap.js +80 -16
- package/dist/elements/WhereBuilder/reduceFieldMap.js.map +1 -1
- package/dist/elements/WhereBuilder/transformWhereQuery.js.map +1 -1
- package/dist/elements/WhereBuilder/types.d.ts +2 -0
- package/dist/elements/WhereBuilder/types.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/types.js.map +1 -1
- package/dist/elements/WhereBuilder/validateWhereQuery.js +0 -1
- package/dist/elements/WhereBuilder/validateWhereQuery.js.map +1 -1
- package/dist/elements/WindowInfo/index.js.map +1 -1
- package/dist/elements/WithServerSideProps/index.js.map +1 -1
- package/dist/elements/withMergedProps/index.js.map +1 -1
- package/dist/exports/client/{CodeEditor-UTZFZWZG.js → CodeEditor-OI35YO7H.js} +1 -1
- package/dist/exports/client/{CodeEditor-UTZFZWZG.js.map → CodeEditor-OI35YO7H.js.map} +1 -1
- package/dist/exports/client/DatePicker-5IFHNQHA.js +14 -0
- package/dist/exports/client/DatePicker-5IFHNQHA.js.map +8 -0
- package/dist/exports/client/chunk-WDFUZ6GL.js +30 -0
- package/dist/exports/client/chunk-WDFUZ6GL.js.map +8 -0
- package/dist/exports/client/index.d.ts +6 -3
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +19 -33
- package/dist/exports/client/index.js.map +4 -4
- package/dist/exports/shared/index.d.ts +0 -1
- package/dist/exports/shared/index.d.ts.map +1 -1
- package/dist/exports/shared/index.js +2 -12
- package/dist/exports/shared/index.js.map +4 -4
- package/dist/fields/Array/ArrayRow.d.ts +2 -2
- package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
- package/dist/fields/Array/ArrayRow.js.map +1 -1
- package/dist/fields/Array/index.d.ts +2 -2
- package/dist/fields/Array/index.d.ts.map +1 -1
- package/dist/fields/Array/index.js.map +1 -1
- package/dist/fields/Blocks/BlockRow.d.ts +2 -2
- package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
- package/dist/fields/Blocks/BlockRow.js.map +1 -1
- package/dist/fields/Blocks/BlocksDrawer/BlockSearch/index.js.map +1 -1
- package/dist/fields/Blocks/BlocksDrawer/index.js.map +1 -1
- package/dist/fields/Blocks/RowActions.js.map +1 -1
- package/dist/fields/Blocks/SectionTitle/index.js.map +1 -1
- package/dist/fields/Blocks/index.d.ts +2 -2
- package/dist/fields/Blocks/index.d.ts.map +1 -1
- package/dist/fields/Blocks/index.js.map +1 -1
- package/dist/fields/Checkbox/Input.js.map +1 -1
- package/dist/fields/Checkbox/index.js +2 -1
- package/dist/fields/Checkbox/index.js.map +1 -1
- package/dist/fields/Checkbox/index.scss +2 -1
- package/dist/fields/Checkbox/types.d.ts +2 -2
- package/dist/fields/Checkbox/types.d.ts.map +1 -1
- package/dist/fields/Checkbox/types.js.map +1 -1
- package/dist/fields/Code/index.d.ts +2 -2
- package/dist/fields/Code/index.d.ts.map +1 -1
- package/dist/fields/Code/index.js +1 -1
- package/dist/fields/Code/index.js.map +1 -1
- package/dist/fields/Code/index.scss +3 -21
- package/dist/fields/Collapsible/index.d.ts +2 -2
- package/dist/fields/Collapsible/index.d.ts.map +1 -1
- package/dist/fields/Collapsible/index.js.map +1 -1
- package/dist/fields/Collapsible/index.scss +0 -4
- package/dist/fields/ConfirmPassword/index.js.map +1 -1
- package/dist/fields/DateTime/index.d.ts +2 -2
- package/dist/fields/DateTime/index.d.ts.map +1 -1
- package/dist/fields/DateTime/index.js +1 -1
- package/dist/fields/DateTime/index.js.map +1 -1
- package/dist/fields/Email/index.d.ts +2 -2
- package/dist/fields/Email/index.d.ts.map +1 -1
- package/dist/fields/Email/index.js.map +1 -1
- package/dist/fields/FieldDescription/index.js.map +1 -1
- package/dist/fields/FieldError/index.js.map +1 -1
- package/dist/fields/FieldError/index.scss +6 -5
- package/dist/fields/FieldLabel/index.js.map +1 -1
- package/dist/fields/Group/index.d.ts +2 -2
- package/dist/fields/Group/index.d.ts.map +1 -1
- package/dist/fields/Group/index.js.map +1 -1
- package/dist/fields/Group/provider.js.map +1 -1
- package/dist/fields/Hidden/index.d.ts +2 -2
- package/dist/fields/Hidden/index.d.ts.map +1 -1
- package/dist/fields/Hidden/index.js.map +1 -1
- package/dist/fields/JSON/index.d.ts +2 -2
- package/dist/fields/JSON/index.d.ts.map +1 -1
- package/dist/fields/JSON/index.js +0 -5
- package/dist/fields/JSON/index.js.map +1 -1
- package/dist/fields/JSON/index.scss +6 -25
- package/dist/fields/Number/index.d.ts +2 -2
- package/dist/fields/Number/index.d.ts.map +1 -1
- package/dist/fields/Number/index.js +1 -3
- package/dist/fields/Number/index.js.map +1 -1
- package/dist/fields/Password/index.d.ts +2 -2
- package/dist/fields/Password/index.d.ts.map +1 -1
- package/dist/fields/Password/index.js.map +1 -1
- package/dist/fields/Point/index.d.ts +2 -2
- package/dist/fields/Point/index.d.ts.map +1 -1
- package/dist/fields/Point/index.js +6 -6
- package/dist/fields/Point/index.js.map +1 -1
- package/dist/fields/Point/index.scss +4 -0
- package/dist/fields/RadioGroup/Radio/index.js.map +1 -1
- package/dist/fields/RadioGroup/index.d.ts +2 -2
- package/dist/fields/RadioGroup/index.d.ts.map +1 -1
- package/dist/fields/RadioGroup/index.js +7 -6
- package/dist/fields/RadioGroup/index.js.map +1 -1
- package/dist/fields/RadioGroup/index.scss +7 -0
- package/dist/fields/Relationship/AddNew/index.js.map +1 -1
- package/dist/fields/Relationship/AddNew/types.js.map +1 -1
- package/dist/fields/Relationship/AddNew/useRelatedCollections.js.map +1 -1
- package/dist/fields/Relationship/createRelationMap.js.map +1 -1
- package/dist/fields/Relationship/findOptionsByValue.js.map +1 -1
- package/dist/fields/Relationship/index.js +1 -1
- package/dist/fields/Relationship/index.js.map +1 -1
- package/dist/fields/Relationship/index.scss +2 -2
- package/dist/fields/Relationship/optionsReducer.js.map +1 -1
- package/dist/fields/Relationship/select-components/MultiValueLabel/index.js.map +1 -1
- package/dist/fields/Relationship/select-components/SingleValue/index.js.map +1 -1
- package/dist/fields/Relationship/types.d.ts +2 -2
- package/dist/fields/Relationship/types.d.ts.map +1 -1
- package/dist/fields/Relationship/types.js.map +1 -1
- package/dist/fields/RichText/index.d.ts +2 -2
- package/dist/fields/RichText/index.d.ts.map +1 -1
- package/dist/fields/RichText/index.js.map +1 -1
- package/dist/fields/Row/index.js.map +1 -1
- package/dist/fields/Row/provider.js.map +1 -1
- package/dist/fields/Row/types.d.ts +2 -2
- package/dist/fields/Row/types.d.ts.map +1 -1
- package/dist/fields/Row/types.js.map +1 -1
- package/dist/fields/Select/Input.d.ts +2 -2
- package/dist/fields/Select/Input.d.ts.map +1 -1
- package/dist/fields/Select/Input.js +0 -5
- package/dist/fields/Select/Input.js.map +1 -1
- package/dist/fields/Select/index.d.ts +2 -2
- package/dist/fields/Select/index.d.ts.map +1 -1
- package/dist/fields/Select/index.js +1 -1
- package/dist/fields/Select/index.js.map +1 -1
- package/dist/fields/Tabs/Tab/index.js.map +1 -1
- package/dist/fields/Tabs/index.d.ts +2 -2
- package/dist/fields/Tabs/index.d.ts.map +1 -1
- package/dist/fields/Tabs/index.js.map +1 -1
- package/dist/fields/Tabs/provider.js.map +1 -1
- package/dist/fields/Text/Input.js.map +1 -1
- package/dist/fields/Text/index.js.map +1 -1
- package/dist/fields/Text/types.d.ts +4 -4
- package/dist/fields/Text/types.d.ts.map +1 -1
- package/dist/fields/Text/types.js.map +1 -1
- package/dist/fields/Textarea/Input.js.map +1 -1
- package/dist/fields/Textarea/index.d.ts.map +1 -1
- package/dist/fields/Textarea/index.js +1 -1
- package/dist/fields/Textarea/index.js.map +1 -1
- package/dist/fields/Textarea/types.d.ts +4 -4
- package/dist/fields/Textarea/types.d.ts.map +1 -1
- package/dist/fields/Textarea/types.js.map +1 -1
- package/dist/fields/UI/index.js.map +1 -1
- package/dist/fields/Upload/Input.d.ts +3 -2
- package/dist/fields/Upload/Input.d.ts.map +1 -1
- package/dist/fields/Upload/Input.js +2 -1
- package/dist/fields/Upload/Input.js.map +1 -1
- package/dist/fields/Upload/index.js.map +1 -1
- package/dist/fields/Upload/types.d.ts +2 -2
- package/dist/fields/Upload/types.d.ts.map +1 -1
- package/dist/fields/Upload/types.js.map +1 -1
- package/dist/fields/index.js.map +1 -1
- package/dist/fields/shared/index.js.map +1 -1
- package/dist/forms/FieldPropsProvider/index.js.map +1 -1
- package/dist/forms/Form/context.js.map +1 -1
- package/dist/forms/Form/createNestedFieldPath.js.map +1 -1
- package/dist/forms/Form/errorMessages.js.map +1 -1
- package/dist/forms/Form/fieldReducer.js +2 -2
- package/dist/forms/Form/fieldReducer.js.map +1 -1
- package/dist/forms/Form/index.d.ts.map +1 -1
- package/dist/forms/Form/index.js +8 -11
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/Form/initContextState.js.map +1 -1
- package/dist/forms/Form/mergeErrorPaths.js.map +1 -1
- package/dist/forms/Form/mergeServerFormState.js +2 -2
- package/dist/forms/Form/mergeServerFormState.js.map +1 -1
- package/dist/forms/Form/rows.js.map +1 -1
- package/dist/forms/Form/types.d.ts +7 -7
- package/dist/forms/Form/types.d.ts.map +1 -1
- package/dist/forms/Form/types.js.map +1 -1
- package/dist/forms/NullifyField/index.js.map +1 -1
- package/dist/forms/RenderFields/RenderField.js.map +1 -1
- package/dist/forms/RenderFields/index.js.map +1 -1
- package/dist/forms/RenderFields/index.scss +7 -4
- package/dist/forms/RenderFields/types.js.map +1 -1
- package/dist/forms/RowLabel/Context/index.d.ts +2 -2
- package/dist/forms/RowLabel/Context/index.d.ts.map +1 -1
- package/dist/forms/RowLabel/Context/index.js.map +1 -1
- package/dist/forms/RowLabel/index.js.map +1 -1
- package/dist/forms/RowLabel/types.js.map +1 -1
- package/dist/forms/Submit/index.js.map +1 -1
- package/dist/forms/WatchChildErrors/buildPathSegments.js.map +1 -1
- package/dist/forms/WatchChildErrors/getFieldStateFromPaths.js.map +1 -1
- package/dist/forms/WatchChildErrors/getNestedFieldState.js.map +1 -1
- package/dist/forms/WatchChildErrors/index.js.map +1 -1
- package/dist/forms/buildStateFromSchema/addFieldStatePromise.d.ts +2 -2
- package/dist/forms/buildStateFromSchema/addFieldStatePromise.d.ts.map +1 -1
- package/dist/forms/buildStateFromSchema/addFieldStatePromise.js +1 -1
- package/dist/forms/buildStateFromSchema/addFieldStatePromise.js.map +1 -1
- package/dist/forms/buildStateFromSchema/buildStateFromSchema.spec.js +1 -1
- package/dist/forms/buildStateFromSchema/buildStateFromSchema.spec.js.map +1 -1
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/index.js.map +1 -1
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/iterateFields.js.map +1 -1
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.js.map +1 -1
- package/dist/forms/buildStateFromSchema/getFilterOptionsQuery.d.ts +2 -2
- package/dist/forms/buildStateFromSchema/getFilterOptionsQuery.d.ts.map +1 -1
- package/dist/forms/buildStateFromSchema/getFilterOptionsQuery.js.map +1 -1
- package/dist/forms/buildStateFromSchema/index.d.ts +4 -3
- package/dist/forms/buildStateFromSchema/index.d.ts.map +1 -1
- package/dist/forms/buildStateFromSchema/index.js +1 -0
- package/dist/forms/buildStateFromSchema/index.js.map +1 -1
- package/dist/forms/buildStateFromSchema/iterateFields.d.ts +2 -2
- package/dist/forms/buildStateFromSchema/iterateFields.d.ts.map +1 -1
- package/dist/forms/buildStateFromSchema/iterateFields.js.map +1 -1
- package/dist/forms/useField/index.js.map +1 -1
- package/dist/forms/useField/types.js.map +1 -1
- package/dist/forms/withCondition/WatchCondition.js.map +1 -1
- package/dist/forms/withCondition/index.js.map +1 -1
- package/dist/graphics/Account/Default/index.js.map +1 -1
- package/dist/graphics/Account/Gravatar/index.d.ts.map +1 -1
- package/dist/graphics/Account/Gravatar/index.js +4 -4
- package/dist/graphics/Account/Gravatar/index.js.map +1 -1
- package/dist/graphics/Account/index.js.map +1 -1
- package/dist/graphics/DefaultBlockImage/index.js.map +1 -1
- package/dist/graphics/ExternalLink/index.js.map +1 -1
- package/dist/graphics/File/index.js.map +1 -1
- package/dist/graphics/Icon/index.js.map +1 -1
- package/dist/graphics/Logo/index.js.map +1 -1
- package/dist/hooks/useDebounce.js.map +1 -1
- package/dist/hooks/useDebouncedCallback.js.map +1 -1
- package/dist/hooks/useDebouncedEffect.js.map +1 -1
- package/dist/hooks/useDelay.js.map +1 -1
- package/dist/hooks/useDelayedRender.js.map +1 -1
- package/dist/hooks/useHotkey.js +1 -1
- package/dist/hooks/useHotkey.js.map +1 -1
- package/dist/hooks/useIntersect.js +1 -1
- package/dist/hooks/useIntersect.js.map +1 -1
- package/dist/hooks/usePayloadAPI.js +2 -2
- package/dist/hooks/usePayloadAPI.js.map +1 -1
- package/dist/hooks/useResize.js.map +1 -1
- package/dist/hooks/useThrottledEffect.d.ts.map +1 -1
- package/dist/hooks/useThrottledEffect.js +1 -1
- package/dist/hooks/useThrottledEffect.js.map +1 -1
- package/dist/hooks/useUseAsTitle.js.map +1 -1
- package/dist/icons/Calendar/index.js.map +1 -1
- package/dist/icons/Check/index.js.map +1 -1
- package/dist/icons/Chevron/index.js.map +1 -1
- package/dist/icons/CloseMenu/index.js.map +1 -1
- package/dist/icons/CodeBlock/index.js.map +1 -1
- package/dist/icons/Copy/index.js.map +1 -1
- package/dist/icons/DragHandle/index.js.map +1 -1
- package/dist/icons/Edit/index.js.map +1 -1
- package/dist/icons/Line/index.js.map +1 -1
- package/dist/icons/Link/index.js.map +1 -1
- package/dist/icons/LogOut/index.js.map +1 -1
- package/dist/icons/Menu/index.js.map +1 -1
- package/dist/icons/MinimizeMaximize/index.js.map +1 -1
- package/dist/icons/More/index.js.map +1 -1
- package/dist/icons/Plus/index.js.map +1 -1
- package/dist/icons/Search/index.js.map +1 -1
- package/dist/icons/Swap/index.js.map +1 -1
- package/dist/icons/X/index.js.map +1 -1
- package/dist/providers/Actions/SetViewActions/index.js.map +1 -1
- package/dist/providers/Actions/index.js.map +1 -1
- package/dist/providers/Auth/index.d.ts +2 -0
- package/dist/providers/Auth/index.d.ts.map +1 -1
- package/dist/providers/Auth/index.js +8 -2
- package/dist/providers/Auth/index.js.map +1 -1
- package/dist/providers/ClientFunction/index.js.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/actions.d.ts.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/actions.js +3 -3
- package/dist/providers/ComponentMap/buildComponentMap/actions.js.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/collections.d.ts.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/collections.js +17 -12
- package/dist/providers/ComponentMap/buildComponentMap/collections.js.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/fields.d.ts.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/fields.js +1 -0
- package/dist/providers/ComponentMap/buildComponentMap/fields.js.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/globals.d.ts.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/globals.js +1 -0
- package/dist/providers/ComponentMap/buildComponentMap/globals.js.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/index.js +2 -2
- package/dist/providers/ComponentMap/buildComponentMap/index.js.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/types.d.ts +3 -2
- package/dist/providers/ComponentMap/buildComponentMap/types.d.ts.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/types.js.map +1 -1
- package/dist/providers/ComponentMap/index.js.map +1 -1
- package/dist/providers/Config/index.js.map +1 -1
- package/dist/providers/DocumentEvents/index.js.map +1 -1
- package/dist/providers/DocumentInfo/index.d.ts +2 -2
- package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
- package/dist/providers/DocumentInfo/index.js +2 -2
- package/dist/providers/DocumentInfo/index.js.map +1 -1
- package/dist/providers/DocumentInfo/types.d.ts +6 -6
- package/dist/providers/DocumentInfo/types.d.ts.map +1 -1
- package/dist/providers/DocumentInfo/types.js.map +1 -1
- package/dist/providers/EditDepth/index.js.map +1 -1
- package/dist/providers/EntityVisibility/index.js.map +1 -1
- package/dist/providers/FieldComponents/index.js.map +1 -1
- package/dist/providers/FormQueryParams/index.js.map +1 -1
- package/dist/providers/FormQueryParams/types.js.map +1 -1
- package/dist/providers/ListInfo/index.d.ts +2 -2
- package/dist/providers/ListInfo/index.d.ts.map +1 -1
- package/dist/providers/ListInfo/index.js.map +1 -1
- package/dist/providers/ListQuery/index.d.ts +2 -2
- package/dist/providers/ListQuery/index.d.ts.map +1 -1
- package/dist/providers/ListQuery/index.js +1 -1
- package/dist/providers/ListQuery/index.js.map +1 -1
- package/dist/providers/Locale/index.js.map +1 -1
- package/dist/providers/Operation/index.js.map +1 -1
- package/dist/providers/Params/index.js.map +1 -1
- package/dist/providers/Preferences/index.js +3 -3
- package/dist/providers/Preferences/index.js.map +1 -1
- package/dist/providers/Root/index.js.map +1 -1
- package/dist/providers/RouteCache/index.js.map +1 -1
- package/dist/providers/ScrollInfo/index.js.map +1 -1
- package/dist/providers/SearchParams/index.d.ts +1 -1
- package/dist/providers/SearchParams/index.d.ts.map +1 -1
- package/dist/providers/SearchParams/index.js +1 -1
- package/dist/providers/SearchParams/index.js.map +1 -1
- package/dist/providers/Selection/index.js +2 -2
- package/dist/providers/Selection/index.js.map +1 -1
- package/dist/providers/Theme/index.js.map +1 -1
- package/dist/providers/ToastContainer/icons/Error.js +2 -2
- package/dist/providers/ToastContainer/icons/Error.js.map +1 -1
- package/dist/providers/ToastContainer/icons/Info.js +2 -2
- package/dist/providers/ToastContainer/icons/Info.js.map +1 -1
- package/dist/providers/ToastContainer/icons/Success.js +2 -2
- package/dist/providers/ToastContainer/icons/Success.js.map +1 -1
- package/dist/providers/ToastContainer/icons/Warning.js +2 -2
- package/dist/providers/ToastContainer/icons/Warning.js.map +1 -1
- package/dist/providers/ToastContainer/index.d.ts.map +1 -1
- package/dist/providers/ToastContainer/index.js +3 -1
- package/dist/providers/ToastContainer/index.js.map +1 -1
- package/dist/providers/Translation/index.js.map +1 -1
- package/dist/providers/WindowInfo/index.js.map +1 -1
- package/dist/scss/app.scss +2 -2
- package/dist/scss/colors.scss +76 -76
- package/dist/scss/toasts.scss +67 -44
- package/dist/styles.css +1 -1
- package/dist/utilities/api.d.ts +2 -2
- package/dist/utilities/api.d.ts.map +1 -1
- package/dist/utilities/api.js +1 -1
- package/dist/utilities/api.js.map +1 -1
- package/dist/utilities/arraysHaveSameStrings.js.map +1 -1
- package/dist/utilities/buildComponentMap.js.map +1 -1
- package/dist/utilities/buildFieldSchemaMap/index.d.ts.map +1 -1
- package/dist/utilities/buildFieldSchemaMap/index.js +2 -5
- package/dist/utilities/buildFieldSchemaMap/index.js.map +1 -1
- package/dist/utilities/buildFieldSchemaMap/traverseFields.d.ts +1 -2
- package/dist/utilities/buildFieldSchemaMap/traverseFields.d.ts.map +1 -1
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js +7 -11
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js.map +1 -1
- package/dist/utilities/buildFieldSchemaMap/types.js.map +1 -1
- package/dist/utilities/buildFormState.d.ts +4 -4
- package/dist/utilities/buildFormState.d.ts.map +1 -1
- package/dist/utilities/buildFormState.js +1 -3
- package/dist/utilities/buildFormState.js.map +1 -1
- package/dist/utilities/canUseDOM.js.map +1 -1
- package/dist/utilities/dateLocales.js.map +1 -1
- package/dist/utilities/findLocaleFromCode.js.map +1 -1
- package/dist/utilities/flattenFieldMap.js.map +1 -1
- package/dist/utilities/formatDate.js.map +1 -1
- package/dist/utilities/formatDocTitle.js.map +1 -1
- package/dist/utilities/formatFields.js.map +1 -1
- package/dist/utilities/generateFieldID.js.map +1 -1
- package/dist/utilities/getFormState.js.map +1 -1
- package/dist/utilities/getOffsetTop.js.map +1 -1
- package/dist/utilities/getRequestLanguage.js.map +1 -1
- package/dist/utilities/getSupportedMonacoLocale.js.map +1 -1
- package/dist/utilities/groupNavItems.js.map +1 -1
- package/dist/utilities/hasSavePermission.js.map +1 -1
- package/dist/utilities/isEditing.js.map +1 -1
- package/dist/utilities/reduceFieldsToValuesWithValidation.js +1 -1
- package/dist/utilities/reduceFieldsToValuesWithValidation.js.map +1 -1
- package/dist/utilities/scrollToID.js.map +1 -1
- package/dist/utilities/setsAreEqual.js.map +1 -1
- package/package.json +18 -27
- package/dist/exports/client/DatePicker-CBQPW5J5.js +0 -30
- package/dist/exports/client/DatePicker-CBQPW5J5.js.map +0 -8
- package/dist/exports/client/chunk-DODCWLCH.js +0 -14
- package/dist/exports/client/chunk-DODCWLCH.js.map +0 -8
- package/dist/forms/Form/getDataByPath.d.ts +0 -3
- package/dist/forms/Form/getDataByPath.d.ts.map +0 -1
- package/dist/forms/Form/getDataByPath.js +0 -18
- package/dist/forms/Form/getDataByPath.js.map +0 -1
- package/dist/forms/Form/getSiblingData.d.ts +0 -3
- package/dist/forms/Form/getSiblingData.d.ts.map +0 -1
- package/dist/forms/Form/getSiblingData.js +0 -33
- package/dist/forms/Form/getSiblingData.js.map +0 -1
- package/dist/utilities/reduceFieldsToValues.d.ts +0 -10
- package/dist/utilities/reduceFieldsToValues.d.ts.map +0 -1
- package/dist/utilities/reduceFieldsToValues.js +0 -22
- package/dist/utilities/reduceFieldsToValues.js.map +0 -1
- package/dist/utilities/unflatten.d.ts +0 -9
- package/dist/utilities/unflatten.d.ts.map +0 -1
- package/dist/utilities/unflatten.js +0 -58
- package/dist/utilities/unflatten.js.map +0 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { isImage } from 'payload/shared';
|
|
4
|
-
import React, { useCallback, useEffect, useState } from 'react';
|
|
3
|
+
import { isImage, reduceFieldsToValues } from 'payload/shared';
|
|
4
|
+
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
5
|
+
import { toast } from 'sonner';
|
|
5
6
|
import { FieldError } from '../../fields/FieldError/index.js';
|
|
6
7
|
import { fieldBaseClass } from '../../fields/shared/index.js';
|
|
7
8
|
import { useForm } from '../../forms/Form/context.js';
|
|
@@ -9,7 +10,6 @@ import { useField } from '../../forms/useField/index.js';
|
|
|
9
10
|
import { useDocumentInfo } from '../../providers/DocumentInfo/index.js';
|
|
10
11
|
import { useFormQueryParams } from '../../providers/FormQueryParams/index.js';
|
|
11
12
|
import { useTranslation } from '../../providers/Translation/index.js';
|
|
12
|
-
import { reduceFieldsToValues } from '../../utilities/reduceFieldsToValues.js';
|
|
13
13
|
import { Button } from '../Button/index.js';
|
|
14
14
|
import { Drawer, DrawerToggler } from '../Drawer/index.js';
|
|
15
15
|
import { Dropzone } from '../Dropzone/index.js';
|
|
@@ -27,26 +27,37 @@ const validate = (value)=>{
|
|
|
27
27
|
}
|
|
28
28
|
return true;
|
|
29
29
|
};
|
|
30
|
-
export const UploadActions = ({
|
|
30
|
+
export const UploadActions = ({ customActions, enableAdjustments, enablePreviewSizes, mimeType })=>{
|
|
31
31
|
const { t } = useTranslation();
|
|
32
|
+
const fileTypeIsAdjustable = isImage(mimeType) && mimeType !== 'image/svg+xml';
|
|
33
|
+
if (!fileTypeIsAdjustable && (!customActions || customActions.length === 0)) return null;
|
|
32
34
|
return /*#__PURE__*/ _jsxs("div", {
|
|
33
|
-
className: `${baseClass}
|
|
35
|
+
className: `${baseClass}__upload-actions`,
|
|
34
36
|
children: [
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
fileTypeIsAdjustable && /*#__PURE__*/ _jsxs(React.Fragment, {
|
|
38
|
+
children: [
|
|
39
|
+
enablePreviewSizes && /*#__PURE__*/ _jsx(DrawerToggler, {
|
|
40
|
+
className: `${baseClass}__previewSizes`,
|
|
41
|
+
slug: sizePreviewSlug,
|
|
42
|
+
children: t('upload:previewSizes')
|
|
43
|
+
}),
|
|
44
|
+
enableAdjustments && /*#__PURE__*/ _jsx(DrawerToggler, {
|
|
45
|
+
className: `${baseClass}__edit`,
|
|
46
|
+
slug: editDrawerSlug,
|
|
47
|
+
children: t('upload:editImage')
|
|
48
|
+
})
|
|
49
|
+
]
|
|
39
50
|
}),
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
51
|
+
customActions && customActions.map((CustomAction, i)=>{
|
|
52
|
+
return /*#__PURE__*/ _jsx(React.Fragment, {
|
|
53
|
+
children: CustomAction
|
|
54
|
+
}, i);
|
|
44
55
|
})
|
|
45
56
|
]
|
|
46
57
|
});
|
|
47
58
|
};
|
|
48
59
|
export const Upload = (props)=>{
|
|
49
|
-
const { collectionSlug, initialState, onChange,
|
|
60
|
+
const { collectionSlug, customActions, initialState, onChange, uploadConfig } = props;
|
|
50
61
|
const [replacingFile, setReplacingFile] = useState(false);
|
|
51
62
|
const [fileSrc, setFileSrc] = useState(null);
|
|
52
63
|
const { t } = useTranslation();
|
|
@@ -62,8 +73,34 @@ export const Upload = (props)=>{
|
|
|
62
73
|
x: 0,
|
|
63
74
|
y: 0
|
|
64
75
|
});
|
|
76
|
+
const [showUrlInput, setShowUrlInput] = useState(false);
|
|
77
|
+
const [fileUrl, setFileUrl] = useState('');
|
|
78
|
+
const cursorPositionRef = useRef(null);
|
|
79
|
+
const urlInputRef = useRef(null);
|
|
80
|
+
const handleFileChange = useCallback((newFile)=>{
|
|
81
|
+
if (newFile instanceof File) {
|
|
82
|
+
const fileReader = new FileReader();
|
|
83
|
+
fileReader.onload = (e)=>{
|
|
84
|
+
const imgSrc = e.target?.result;
|
|
85
|
+
if (typeof imgSrc === 'string') {
|
|
86
|
+
setFileSrc(imgSrc);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
fileReader.readAsDataURL(newFile);
|
|
90
|
+
}
|
|
91
|
+
setValue(newFile);
|
|
92
|
+
setShowUrlInput(false);
|
|
93
|
+
if (typeof onChange === 'function') {
|
|
94
|
+
onChange(newFile);
|
|
95
|
+
}
|
|
96
|
+
}, [
|
|
97
|
+
onChange,
|
|
98
|
+
setValue
|
|
99
|
+
]);
|
|
65
100
|
const handleFileNameChange = (e)=>{
|
|
66
101
|
const updatedFileName = e.target.value;
|
|
102
|
+
const cursorPosition = e.target.selectionStart;
|
|
103
|
+
cursorPositionRef.current = cursorPosition;
|
|
67
104
|
if (value) {
|
|
68
105
|
const fileValue = value;
|
|
69
106
|
// Creating a new File object with updated properties
|
|
@@ -72,24 +109,35 @@ export const Upload = (props)=>{
|
|
|
72
109
|
], updatedFileName, {
|
|
73
110
|
type: fileValue.type
|
|
74
111
|
});
|
|
75
|
-
|
|
76
|
-
;
|
|
112
|
+
handleFileChange(newFile);
|
|
77
113
|
}
|
|
78
114
|
};
|
|
79
|
-
|
|
115
|
+
useEffect(()=>{
|
|
116
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
117
|
+
const inputElement = document.querySelector(`.${baseClass}__filename`);
|
|
118
|
+
if (inputElement && cursorPositionRef.current !== null) {
|
|
119
|
+
inputElement.setSelectionRange(cursorPositionRef.current, cursorPositionRef.current);
|
|
120
|
+
}
|
|
121
|
+
}, [
|
|
122
|
+
value
|
|
123
|
+
]);
|
|
124
|
+
const handleFileSelection = useCallback((files)=>{
|
|
80
125
|
const fileToUpload = files?.[0];
|
|
81
|
-
|
|
126
|
+
handleFileChange(fileToUpload);
|
|
82
127
|
}, [
|
|
83
|
-
|
|
128
|
+
handleFileChange
|
|
84
129
|
]);
|
|
85
130
|
const handleFileRemoval = useCallback(()=>{
|
|
86
131
|
setReplacingFile(true);
|
|
87
|
-
|
|
132
|
+
handleFileChange(null);
|
|
88
133
|
setFileSrc('');
|
|
134
|
+
setFileUrl('');
|
|
135
|
+
setDoc({});
|
|
136
|
+
setShowUrlInput(false);
|
|
89
137
|
}, [
|
|
90
|
-
|
|
138
|
+
handleFileChange
|
|
91
139
|
]);
|
|
92
|
-
const onEditsSave =
|
|
140
|
+
const onEditsSave = useCallback(({ crop, focalPosition })=>{
|
|
93
141
|
setCrop({
|
|
94
142
|
x: crop.x || 0,
|
|
95
143
|
y: crop.y || 0
|
|
@@ -108,6 +156,28 @@ export const Upload = (props)=>{
|
|
|
108
156
|
dispatchFormQueryParams,
|
|
109
157
|
setModified
|
|
110
158
|
]);
|
|
159
|
+
const handlePasteUrlClick = ()=>{
|
|
160
|
+
setShowUrlInput((prev)=>!prev);
|
|
161
|
+
};
|
|
162
|
+
const handleUrlSubmit = async ()=>{
|
|
163
|
+
if (fileUrl) {
|
|
164
|
+
try {
|
|
165
|
+
const response = await fetch(fileUrl);
|
|
166
|
+
const data = await response.blob();
|
|
167
|
+
// Extract the file name from the URL
|
|
168
|
+
const fileName = fileUrl.split('/').pop();
|
|
169
|
+
// Create a new File object from the Blob data
|
|
170
|
+
const file = new File([
|
|
171
|
+
data
|
|
172
|
+
], fileName, {
|
|
173
|
+
type: data.type
|
|
174
|
+
});
|
|
175
|
+
handleFileChange(file);
|
|
176
|
+
} catch (e) {
|
|
177
|
+
toast.error(e.message);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
};
|
|
111
181
|
useEffect(()=>{
|
|
112
182
|
setDoc(reduceFieldsToValues(initialState || {}, true));
|
|
113
183
|
setReplacingFile(false);
|
|
@@ -115,23 +185,12 @@ export const Upload = (props)=>{
|
|
|
115
185
|
initialState
|
|
116
186
|
]);
|
|
117
187
|
useEffect(()=>{
|
|
118
|
-
if (
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
const imgSrc = e.target?.result;
|
|
122
|
-
if (typeof imgSrc === 'string') {
|
|
123
|
-
setFileSrc(imgSrc);
|
|
124
|
-
}
|
|
125
|
-
};
|
|
126
|
-
fileReader.readAsDataURL(value);
|
|
127
|
-
}
|
|
128
|
-
if (typeof onChange === 'function') {
|
|
129
|
-
onChange(value);
|
|
188
|
+
if (showUrlInput && urlInputRef.current) {
|
|
189
|
+
urlInputRef.current.focus() // Focus on the remote-url input field when showUrlInput is true
|
|
190
|
+
;
|
|
130
191
|
}
|
|
131
192
|
}, [
|
|
132
|
-
|
|
133
|
-
onChange,
|
|
134
|
-
updatedAt
|
|
193
|
+
showUrlInput
|
|
135
194
|
]);
|
|
136
195
|
const canRemoveUpload = docPermissions?.update?.permission && 'delete' in docPermissions && docPermissions?.delete?.permission;
|
|
137
196
|
const hasImageSizes = uploadConfig?.imageSizes?.length > 0;
|
|
@@ -151,9 +210,10 @@ export const Upload = (props)=>{
|
|
|
151
210
|
showError: showError
|
|
152
211
|
}),
|
|
153
212
|
doc.filename && !replacingFile && /*#__PURE__*/ _jsx(FileDetails, {
|
|
154
|
-
canEdit: showCrop || showFocalPoint,
|
|
155
213
|
collectionSlug: collectionSlug,
|
|
214
|
+
customUploadActions: customActions,
|
|
156
215
|
doc: doc,
|
|
216
|
+
enableAdjustments: showCrop || showFocalPoint,
|
|
157
217
|
handleRemove: canRemoveUpload ? handleFileRemoval : undefined,
|
|
158
218
|
hasImageSizes: hasImageSizes,
|
|
159
219
|
imageCacheTag: doc.updatedAt,
|
|
@@ -162,12 +222,49 @@ export const Upload = (props)=>{
|
|
|
162
222
|
(!doc.filename || replacingFile) && /*#__PURE__*/ _jsxs("div", {
|
|
163
223
|
className: `${baseClass}__upload`,
|
|
164
224
|
children: [
|
|
165
|
-
!value && /*#__PURE__*/ _jsx(Dropzone, {
|
|
225
|
+
!value && !showUrlInput && /*#__PURE__*/ _jsx(Dropzone, {
|
|
166
226
|
className: `${baseClass}__dropzone`,
|
|
167
227
|
mimeTypes: uploadConfig?.mimeTypes,
|
|
168
|
-
onChange: handleFileSelection
|
|
228
|
+
onChange: handleFileSelection,
|
|
229
|
+
onPasteUrlClick: handlePasteUrlClick
|
|
230
|
+
}),
|
|
231
|
+
showUrlInput && /*#__PURE__*/ _jsxs(React.Fragment, {
|
|
232
|
+
children: [
|
|
233
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
234
|
+
className: `${baseClass}__remote-file-wrap`,
|
|
235
|
+
children: [
|
|
236
|
+
/*#__PURE__*/ _jsx("input", {
|
|
237
|
+
className: `${baseClass}__remote-file`,
|
|
238
|
+
onChange: (e)=>{
|
|
239
|
+
setFileUrl(e.target.value);
|
|
240
|
+
},
|
|
241
|
+
ref: urlInputRef,
|
|
242
|
+
type: "text",
|
|
243
|
+
value: fileUrl
|
|
244
|
+
}),
|
|
245
|
+
/*#__PURE__*/ _jsx("div", {
|
|
246
|
+
className: `${baseClass}__add-file-wrap`,
|
|
247
|
+
children: /*#__PURE__*/ _jsx("button", {
|
|
248
|
+
className: `${baseClass}__add-file`,
|
|
249
|
+
onClick: handleUrlSubmit,
|
|
250
|
+
type: "button",
|
|
251
|
+
children: t('upload:addImage')
|
|
252
|
+
})
|
|
253
|
+
})
|
|
254
|
+
]
|
|
255
|
+
}),
|
|
256
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
257
|
+
buttonStyle: "icon-label",
|
|
258
|
+
className: `${baseClass}__remove`,
|
|
259
|
+
icon: "x",
|
|
260
|
+
iconStyle: "with-border",
|
|
261
|
+
onClick: handleFileRemoval,
|
|
262
|
+
round: true,
|
|
263
|
+
tooltip: t('general:cancel')
|
|
264
|
+
})
|
|
265
|
+
]
|
|
169
266
|
}),
|
|
170
|
-
value && /*#__PURE__*/ _jsxs(React.Fragment, {
|
|
267
|
+
value && fileSrc && /*#__PURE__*/ _jsxs(React.Fragment, {
|
|
171
268
|
children: [
|
|
172
269
|
/*#__PURE__*/ _jsx("div", {
|
|
173
270
|
className: `${baseClass}__thumbnail-wrap`,
|
|
@@ -185,9 +282,11 @@ export const Upload = (props)=>{
|
|
|
185
282
|
type: "text",
|
|
186
283
|
value: value.name
|
|
187
284
|
}),
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
285
|
+
/*#__PURE__*/ _jsx(UploadActions, {
|
|
286
|
+
customActions: customActions,
|
|
287
|
+
enableAdjustments: showCrop || showFocalPoint,
|
|
288
|
+
enablePreviewSizes: hasImageSizes && doc.filename && !replacingFile,
|
|
289
|
+
mimeType: value.type
|
|
191
290
|
})
|
|
192
291
|
]
|
|
193
292
|
}),
|
|
@@ -209,7 +308,7 @@ export const Upload = (props)=>{
|
|
|
209
308
|
slug: editDrawerSlug,
|
|
210
309
|
children: /*#__PURE__*/ _jsx(EditUpload, {
|
|
211
310
|
fileName: value?.name || doc?.filename,
|
|
212
|
-
fileSrc:
|
|
311
|
+
fileSrc: doc?.url || fileSrc,
|
|
213
312
|
imageCacheTag: doc.updatedAt,
|
|
214
313
|
initialCrop: formQueryParams?.uploadEdits?.crop ?? {},
|
|
215
314
|
initialFocalPoint: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/Upload/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState, SanitizedCollectionConfig } from 'payload'\n\nimport { isImage } from 'payload/shared'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { fieldBaseClass } from '../../fields/shared/index.js'\nimport { useForm } from '../../forms/Form/context.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useFormQueryParams } from '../../providers/FormQueryParams/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { reduceFieldsToValues } from '../../utilities/reduceFieldsToValues.js'\nimport { Button } from '../Button/index.js'\nimport { Drawer, DrawerToggler } from '../Drawer/index.js'\nimport { Dropzone } from '../Dropzone/index.js'\nimport { EditUpload } from '../EditUpload/index.js'\nimport { FileDetails } from '../FileDetails/index.js'\nimport { PreviewSizes } from '../PreviewSizes/index.js'\nimport { Thumbnail } from '../Thumbnail/index.js'\nimport './index.scss'\n\nconst baseClass = 'file-field'\nexport const editDrawerSlug = 'edit-upload'\nexport const sizePreviewSlug = 'preview-sizes'\n\nconst validate = (value) => {\n if (!value && value !== undefined) {\n return 'A file is required.'\n }\n\n return true\n}\n\nexport const UploadActions = ({ canEdit, showSizePreviews }) => {\n const { t } = useTranslation()\n return (\n <div className={`${baseClass}__file-mutation`}>\n {showSizePreviews && (\n <DrawerToggler className={`${baseClass}__previewSizes`} slug={sizePreviewSlug}>\n {t('upload:previewSizes')}\n </DrawerToggler>\n )}\n {canEdit && (\n <DrawerToggler className={`${baseClass}__edit`} slug={editDrawerSlug}>\n {t('upload:editImage')}\n </DrawerToggler>\n )}\n </div>\n )\n}\n\nexport type UploadProps = {\n collectionSlug: string\n initialState?: FormState\n onChange?: (file?: File) => void\n updatedAt?: string\n uploadConfig: SanitizedCollectionConfig['upload']\n}\n\nexport const Upload: React.FC<UploadProps> = (props) => {\n const { collectionSlug, initialState, onChange, updatedAt, uploadConfig } = props\n\n const [replacingFile, setReplacingFile] = useState(false)\n const [fileSrc, setFileSrc] = useState<null | string>(null)\n const { t } = useTranslation()\n const { setModified } = useForm()\n const { dispatchFormQueryParams, formQueryParams } = useFormQueryParams()\n const [doc, setDoc] = useState(reduceFieldsToValues(initialState || {}, true))\n const { docPermissions } = useDocumentInfo()\n const { errorMessage, setValue, showError, value } = useField<File>({\n path: 'file',\n validate,\n })\n const [_crop, setCrop] = useState({ x: 0, y: 0 })\n\n const handleFileNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const updatedFileName = e.target.value\n if (value) {\n const fileValue = value\n // Creating a new File object with updated properties\n const newFile = new File([fileValue], updatedFileName, { type: fileValue.type })\n setValue(newFile) // Updating the state with the new File object\n }\n }\n\n const handleFileSelection = React.useCallback(\n (files: FileList) => {\n const fileToUpload = files?.[0]\n setValue(fileToUpload)\n },\n [setValue],\n )\n\n const handleFileRemoval = useCallback(() => {\n setReplacingFile(true)\n setValue(null)\n setFileSrc('')\n }, [setValue])\n\n const onEditsSave = React.useCallback(\n ({ crop, focalPosition }) => {\n setCrop({\n x: crop.x || 0,\n y: crop.y || 0,\n })\n\n setModified(true)\n dispatchFormQueryParams({\n type: 'SET',\n params: {\n uploadEdits:\n crop || focalPosition\n ? {\n crop: crop || null,\n focalPoint: focalPosition ? focalPosition : null,\n }\n : null,\n },\n })\n },\n [dispatchFormQueryParams, setModified],\n )\n\n useEffect(() => {\n setDoc(reduceFieldsToValues(initialState || {}, true))\n setReplacingFile(false)\n }, [initialState])\n\n useEffect(() => {\n if (value instanceof File) {\n const fileReader = new FileReader()\n fileReader.onload = (e) => {\n const imgSrc = e.target?.result\n\n if (typeof imgSrc === 'string') {\n setFileSrc(imgSrc)\n }\n }\n fileReader.readAsDataURL(value)\n }\n\n if (typeof onChange === 'function') {\n onChange(value)\n }\n }, [value, onChange, updatedAt])\n\n const canRemoveUpload =\n docPermissions?.update?.permission &&\n 'delete' in docPermissions &&\n docPermissions?.delete?.permission\n\n const hasImageSizes = uploadConfig?.imageSizes?.length > 0\n const hasResizeOptions = Boolean(uploadConfig?.resizeOptions)\n // Explicity check if set to true, default is undefined\n const focalPointEnabled = uploadConfig?.focalPoint === true\n\n const { crop: showCrop = true, focalPoint = true } = uploadConfig\n\n const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled)\n\n return (\n <div className={[fieldBaseClass, baseClass].filter(Boolean).join(' ')}>\n <FieldError message={errorMessage} showError={showError} />\n {doc.filename && !replacingFile && (\n <FileDetails\n canEdit={showCrop || showFocalPoint}\n collectionSlug={collectionSlug}\n doc={doc}\n handleRemove={canRemoveUpload ? handleFileRemoval : undefined}\n hasImageSizes={hasImageSizes}\n imageCacheTag={doc.updatedAt}\n uploadConfig={uploadConfig}\n />\n )}\n {(!doc.filename || replacingFile) && (\n <div className={`${baseClass}__upload`}>\n {!value && (\n <Dropzone\n className={`${baseClass}__dropzone`}\n mimeTypes={uploadConfig?.mimeTypes}\n onChange={handleFileSelection}\n />\n )}\n\n {value && (\n <React.Fragment>\n <div className={`${baseClass}__thumbnail-wrap`}>\n <Thumbnail\n collectionSlug={collectionSlug}\n fileSrc={isImage(value.type) ? fileSrc : null}\n />\n </div>\n <div className={`${baseClass}__file-adjustments`}>\n <input\n className={`${baseClass}__filename`}\n onChange={handleFileNameChange}\n type=\"text\"\n value={value.name}\n />\n\n {isImage(value.type) && value.type !== 'image/svg+xml' && (\n <UploadActions\n canEdit={showCrop || showFocalPoint}\n showSizePreviews={hasImageSizes && doc.filename && !replacingFile}\n />\n )}\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={handleFileRemoval}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n </div>\n )}\n {(value || doc.filename) && (\n <Drawer Header={null} slug={editDrawerSlug}>\n <EditUpload\n fileName={value?.name || doc?.filename}\n fileSrc={fileSrc || doc?.url}\n imageCacheTag={doc.updatedAt}\n initialCrop={formQueryParams?.uploadEdits?.crop ?? {}}\n initialFocalPoint={{\n x: formQueryParams?.uploadEdits?.focalPoint.x || doc.focalX || 50,\n y: formQueryParams?.uploadEdits?.focalPoint.y || doc.focalY || 50,\n }}\n onSave={onEditsSave}\n showCrop={showCrop}\n showFocalPoint={showFocalPoint}\n />\n </Drawer>\n )}\n {doc && hasImageSizes && (\n <Drawer\n className={`${baseClass}__previewDrawer`}\n hoverTitle\n slug={sizePreviewSlug}\n title={t('upload:sizesFor', { label: doc?.filename })}\n >\n <PreviewSizes doc={doc} imageCacheTag={doc.updatedAt} uploadConfig={uploadConfig} />\n </Drawer>\n )}\n </div>\n )\n}\n"],"names":["isImage","React","useCallback","useEffect","useState","FieldError","fieldBaseClass","useForm","useField","useDocumentInfo","useFormQueryParams","useTranslation","reduceFieldsToValues","Button","Drawer","DrawerToggler","Dropzone","EditUpload","FileDetails","PreviewSizes","Thumbnail","baseClass","editDrawerSlug","sizePreviewSlug","validate","value","undefined","UploadActions","canEdit","showSizePreviews","t","div","className","slug","Upload","props","collectionSlug","initialState","onChange","updatedAt","uploadConfig","replacingFile","setReplacingFile","fileSrc","setFileSrc","setModified","dispatchFormQueryParams","formQueryParams","doc","setDoc","docPermissions","errorMessage","setValue","showError","path","_crop","setCrop","x","y","handleFileNameChange","e","updatedFileName","target","fileValue","newFile","File","type","handleFileSelection","files","fileToUpload","handleFileRemoval","onEditsSave","crop","focalPosition","params","uploadEdits","focalPoint","fileReader","FileReader","onload","imgSrc","result","readAsDataURL","canRemoveUpload","update","permission","delete","hasImageSizes","imageSizes","length","hasResizeOptions","Boolean","resizeOptions","focalPointEnabled","showCrop","showFocalPoint","filter","join","message","filename","handleRemove","imageCacheTag","mimeTypes","Fragment","input","name","buttonStyle","icon","iconStyle","onClick","round","tooltip","Header","fileName","url","initialCrop","initialFocalPoint","focalX","focalY","onSave","hoverTitle","title","label"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/Upload/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState, SanitizedCollectionConfig } from 'payload'\n\nimport { isImage, reduceFieldsToValues } from 'payload/shared'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { fieldBaseClass } from '../../fields/shared/index.js'\nimport { useForm } from '../../forms/Form/context.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useFormQueryParams } from '../../providers/FormQueryParams/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { Drawer, DrawerToggler } from '../Drawer/index.js'\nimport { Dropzone } from '../Dropzone/index.js'\nimport { EditUpload } from '../EditUpload/index.js'\nimport { FileDetails } from '../FileDetails/index.js'\nimport { PreviewSizes } from '../PreviewSizes/index.js'\nimport { Thumbnail } from '../Thumbnail/index.js'\nimport './index.scss'\n\nconst baseClass = 'file-field'\nexport const editDrawerSlug = 'edit-upload'\nexport const sizePreviewSlug = 'preview-sizes'\n\nconst validate = (value) => {\n if (!value && value !== undefined) {\n return 'A file is required.'\n }\n\n return true\n}\n\ntype UploadActionsArgs = {\n customActions?: React.ReactNode[]\n enableAdjustments: boolean\n enablePreviewSizes: boolean\n mimeType: string\n}\n\nexport const UploadActions = ({\n customActions,\n enableAdjustments,\n enablePreviewSizes,\n mimeType,\n}: UploadActionsArgs) => {\n const { t } = useTranslation()\n\n const fileTypeIsAdjustable = isImage(mimeType) && mimeType !== 'image/svg+xml'\n\n if (!fileTypeIsAdjustable && (!customActions || customActions.length === 0)) return null\n\n return (\n <div className={`${baseClass}__upload-actions`}>\n {fileTypeIsAdjustable && (\n <React.Fragment>\n {enablePreviewSizes && (\n <DrawerToggler className={`${baseClass}__previewSizes`} slug={sizePreviewSlug}>\n {t('upload:previewSizes')}\n </DrawerToggler>\n )}\n {enableAdjustments && (\n <DrawerToggler className={`${baseClass}__edit`} slug={editDrawerSlug}>\n {t('upload:editImage')}\n </DrawerToggler>\n )}\n </React.Fragment>\n )}\n\n {customActions &&\n customActions.map((CustomAction, i) => {\n return <React.Fragment key={i}>{CustomAction}</React.Fragment>\n })}\n </div>\n )\n}\n\nexport type UploadProps = {\n collectionSlug: string\n customActions?: React.ReactNode[]\n initialState?: FormState\n onChange?: (file?: File) => void\n uploadConfig: SanitizedCollectionConfig['upload']\n}\n\nexport const Upload: React.FC<UploadProps> = (props) => {\n const { collectionSlug, customActions, initialState, onChange, uploadConfig } = props\n\n const [replacingFile, setReplacingFile] = useState(false)\n const [fileSrc, setFileSrc] = useState<null | string>(null)\n const { t } = useTranslation()\n const { setModified } = useForm()\n const { dispatchFormQueryParams, formQueryParams } = useFormQueryParams()\n const [doc, setDoc] = useState(reduceFieldsToValues(initialState || {}, true))\n const { docPermissions } = useDocumentInfo()\n const { errorMessage, setValue, showError, value } = useField<File>({\n path: 'file',\n validate,\n })\n const [_crop, setCrop] = useState({ x: 0, y: 0 })\n\n const [showUrlInput, setShowUrlInput] = useState(false)\n const [fileUrl, setFileUrl] = useState<string>('')\n\n const cursorPositionRef = useRef(null)\n const urlInputRef = useRef<HTMLInputElement>(null)\n\n const handleFileChange = useCallback(\n (newFile: File) => {\n if (newFile instanceof File) {\n const fileReader = new FileReader()\n fileReader.onload = (e) => {\n const imgSrc = e.target?.result\n\n if (typeof imgSrc === 'string') {\n setFileSrc(imgSrc)\n }\n }\n fileReader.readAsDataURL(newFile)\n }\n\n setValue(newFile)\n setShowUrlInput(false)\n\n if (typeof onChange === 'function') {\n onChange(newFile)\n }\n },\n [onChange, setValue],\n )\n\n const handleFileNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const updatedFileName = e.target.value\n const cursorPosition = e.target.selectionStart\n\n cursorPositionRef.current = cursorPosition\n\n if (value) {\n const fileValue = value\n // Creating a new File object with updated properties\n const newFile = new File([fileValue], updatedFileName, { type: fileValue.type })\n handleFileChange(newFile)\n }\n }\n\n useEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const inputElement = document.querySelector(`.${baseClass}__filename`) as HTMLInputElement\n if (inputElement && cursorPositionRef.current !== null) {\n inputElement.setSelectionRange(cursorPositionRef.current, cursorPositionRef.current)\n }\n }, [value])\n\n const handleFileSelection = useCallback(\n (files: FileList) => {\n const fileToUpload = files?.[0]\n handleFileChange(fileToUpload)\n },\n [handleFileChange],\n )\n\n const handleFileRemoval = useCallback(() => {\n setReplacingFile(true)\n handleFileChange(null)\n setFileSrc('')\n setFileUrl('')\n setDoc({})\n setShowUrlInput(false)\n }, [handleFileChange])\n\n const onEditsSave = useCallback(\n ({ crop, focalPosition }) => {\n setCrop({\n x: crop.x || 0,\n y: crop.y || 0,\n })\n\n setModified(true)\n dispatchFormQueryParams({\n type: 'SET',\n params: {\n uploadEdits:\n crop || focalPosition\n ? {\n crop: crop || null,\n focalPoint: focalPosition ? focalPosition : null,\n }\n : null,\n },\n })\n },\n [dispatchFormQueryParams, setModified],\n )\n\n const handlePasteUrlClick = () => {\n setShowUrlInput((prev) => !prev)\n }\n\n const handleUrlSubmit = async () => {\n if (fileUrl) {\n try {\n const response = await fetch(fileUrl)\n const data = await response.blob()\n\n // Extract the file name from the URL\n const fileName = fileUrl.split('/').pop()\n\n // Create a new File object from the Blob data\n const file = new File([data], fileName, { type: data.type })\n handleFileChange(file)\n } catch (e) {\n toast.error(e.message)\n }\n }\n }\n\n useEffect(() => {\n setDoc(reduceFieldsToValues(initialState || {}, true))\n setReplacingFile(false)\n }, [initialState])\n\n useEffect(() => {\n if (showUrlInput && urlInputRef.current) {\n urlInputRef.current.focus() // Focus on the remote-url input field when showUrlInput is true\n }\n }, [showUrlInput])\n\n const canRemoveUpload =\n docPermissions?.update?.permission &&\n 'delete' in docPermissions &&\n docPermissions?.delete?.permission\n\n const hasImageSizes = uploadConfig?.imageSizes?.length > 0\n const hasResizeOptions = Boolean(uploadConfig?.resizeOptions)\n // Explicity check if set to true, default is undefined\n const focalPointEnabled = uploadConfig?.focalPoint === true\n\n const { crop: showCrop = true, focalPoint = true } = uploadConfig\n\n const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled)\n\n return (\n <div className={[fieldBaseClass, baseClass].filter(Boolean).join(' ')}>\n <FieldError message={errorMessage} showError={showError} />\n {doc.filename && !replacingFile && (\n <FileDetails\n collectionSlug={collectionSlug}\n customUploadActions={customActions}\n doc={doc}\n enableAdjustments={showCrop || showFocalPoint}\n handleRemove={canRemoveUpload ? handleFileRemoval : undefined}\n hasImageSizes={hasImageSizes}\n imageCacheTag={doc.updatedAt}\n uploadConfig={uploadConfig}\n />\n )}\n {(!doc.filename || replacingFile) && (\n <div className={`${baseClass}__upload`}>\n {!value && !showUrlInput && (\n <Dropzone\n className={`${baseClass}__dropzone`}\n mimeTypes={uploadConfig?.mimeTypes}\n onChange={handleFileSelection}\n onPasteUrlClick={handlePasteUrlClick}\n />\n )}\n {showUrlInput && (\n <React.Fragment>\n <div className={`${baseClass}__remote-file-wrap`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__remote-file`}\n onChange={(e) => {\n setFileUrl(e.target.value)\n }}\n ref={urlInputRef}\n type=\"text\"\n value={fileUrl}\n />\n <div className={`${baseClass}__add-file-wrap`}>\n <button\n className={`${baseClass}__add-file`}\n onClick={handleUrlSubmit}\n type=\"button\"\n >\n {t('upload:addImage')}\n </button>\n </div>\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={handleFileRemoval}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n {value && fileSrc && (\n <React.Fragment>\n <div className={`${baseClass}__thumbnail-wrap`}>\n <Thumbnail\n collectionSlug={collectionSlug}\n fileSrc={isImage(value.type) ? fileSrc : null}\n />\n </div>\n <div className={`${baseClass}__file-adjustments`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__filename`}\n onChange={handleFileNameChange}\n type=\"text\"\n value={value.name}\n />\n <UploadActions\n customActions={customActions}\n enableAdjustments={showCrop || showFocalPoint}\n enablePreviewSizes={hasImageSizes && doc.filename && !replacingFile}\n mimeType={value.type}\n />\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={handleFileRemoval}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n </div>\n )}\n {(value || doc.filename) && (\n <Drawer Header={null} slug={editDrawerSlug}>\n <EditUpload\n fileName={value?.name || doc?.filename}\n fileSrc={doc?.url || fileSrc}\n imageCacheTag={doc.updatedAt}\n initialCrop={formQueryParams?.uploadEdits?.crop ?? {}}\n initialFocalPoint={{\n x: formQueryParams?.uploadEdits?.focalPoint.x || doc.focalX || 50,\n y: formQueryParams?.uploadEdits?.focalPoint.y || doc.focalY || 50,\n }}\n onSave={onEditsSave}\n showCrop={showCrop}\n showFocalPoint={showFocalPoint}\n />\n </Drawer>\n )}\n {doc && hasImageSizes && (\n <Drawer\n className={`${baseClass}__previewDrawer`}\n hoverTitle\n slug={sizePreviewSlug}\n title={t('upload:sizesFor', { label: doc?.filename })}\n >\n <PreviewSizes doc={doc} imageCacheTag={doc.updatedAt} uploadConfig={uploadConfig} />\n </Drawer>\n )}\n </div>\n )\n}\n"],"names":["isImage","reduceFieldsToValues","React","useCallback","useEffect","useRef","useState","toast","FieldError","fieldBaseClass","useForm","useField","useDocumentInfo","useFormQueryParams","useTranslation","Button","Drawer","DrawerToggler","Dropzone","EditUpload","FileDetails","PreviewSizes","Thumbnail","baseClass","editDrawerSlug","sizePreviewSlug","validate","value","undefined","UploadActions","customActions","enableAdjustments","enablePreviewSizes","mimeType","t","fileTypeIsAdjustable","length","div","className","Fragment","slug","map","CustomAction","i","Upload","props","collectionSlug","initialState","onChange","uploadConfig","replacingFile","setReplacingFile","fileSrc","setFileSrc","setModified","dispatchFormQueryParams","formQueryParams","doc","setDoc","docPermissions","errorMessage","setValue","showError","path","_crop","setCrop","x","y","showUrlInput","setShowUrlInput","fileUrl","setFileUrl","cursorPositionRef","urlInputRef","handleFileChange","newFile","File","fileReader","FileReader","onload","e","imgSrc","target","result","readAsDataURL","handleFileNameChange","updatedFileName","cursorPosition","selectionStart","current","fileValue","type","inputElement","document","querySelector","setSelectionRange","handleFileSelection","files","fileToUpload","handleFileRemoval","onEditsSave","crop","focalPosition","params","uploadEdits","focalPoint","handlePasteUrlClick","prev","handleUrlSubmit","response","fetch","data","blob","fileName","split","pop","file","error","message","focus","canRemoveUpload","update","permission","delete","hasImageSizes","imageSizes","hasResizeOptions","Boolean","resizeOptions","focalPointEnabled","showCrop","showFocalPoint","filter","join","filename","customUploadActions","handleRemove","imageCacheTag","updatedAt","mimeTypes","onPasteUrlClick","input","ref","button","onClick","buttonStyle","icon","iconStyle","round","tooltip","name","Header","url","initialCrop","initialFocalPoint","focalX","focalY","onSave","hoverTitle","title","label"],"mappings":"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"}
|
|
@@ -35,7 +35,8 @@
|
|
|
35
35
|
place-self: flex-start;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
&__file-adjustments
|
|
38
|
+
&__file-adjustments,
|
|
39
|
+
&__remote-file-wrap {
|
|
39
40
|
padding: $baseline;
|
|
40
41
|
width: 100%;
|
|
41
42
|
display: flex;
|
|
@@ -43,12 +44,14 @@
|
|
|
43
44
|
gap: calc(var(--base) / 2);
|
|
44
45
|
}
|
|
45
46
|
|
|
46
|
-
&__filename
|
|
47
|
+
&__filename,
|
|
48
|
+
&__remote-file {
|
|
47
49
|
@include formInput;
|
|
48
50
|
background-color: var(--theme-bg);
|
|
49
51
|
}
|
|
50
52
|
|
|
51
|
-
&
|
|
53
|
+
&__upload-actions,
|
|
54
|
+
&__add-file-wrap {
|
|
52
55
|
display: flex;
|
|
53
56
|
gap: calc(var(--base) / 2);
|
|
54
57
|
flex-wrap: wrap;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/ViewDescription/index.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport './index.scss'\n\nexport type DescriptionFunction = () => string\n\nexport type DescriptionComponent = React.ComponentType<any>\n\ntype Description = DescriptionComponent | DescriptionFunction | Record<string, string> | string\n\nexport type ViewDescriptionProps = {\n description?: Description\n}\n\nexport function isComponent(description: Description): description is DescriptionComponent {\n return React.isValidElement(description)\n}\n\nexport const ViewDescription: React.FC<ViewDescriptionProps> = (props) => {\n const { i18n } = useTranslation()\n const { description } = props\n\n if (isComponent(description)) {\n const Description = description\n return <Description />\n }\n\n if (description) {\n return (\n <div className=\"view-description\">\n {typeof description === 'function' ? description() : getTranslation(description, i18n)}\n </div>\n )\n }\n\n return null\n}\n"],"names":["getTranslation","React","useTranslation","isComponent","description","isValidElement","ViewDescription","props","i18n","Description","div","className"],"
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/ViewDescription/index.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport './index.scss'\n\nexport type DescriptionFunction = () => string\n\nexport type DescriptionComponent = React.ComponentType<any>\n\ntype Description = DescriptionComponent | DescriptionFunction | Record<string, string> | string\n\nexport type ViewDescriptionProps = {\n description?: Description\n}\n\nexport function isComponent(description: Description): description is DescriptionComponent {\n return React.isValidElement(description)\n}\n\nexport const ViewDescription: React.FC<ViewDescriptionProps> = (props) => {\n const { i18n } = useTranslation()\n const { description } = props\n\n if (isComponent(description)) {\n const Description = description\n return <Description />\n }\n\n if (description) {\n return (\n <div className=\"view-description\">\n {typeof description === 'function' ? description() : getTranslation(description, i18n)}\n </div>\n )\n }\n\n return null\n}\n"],"names":["getTranslation","React","useTranslation","isComponent","description","isValidElement","ViewDescription","props","i18n","Description","div","className"],"mappings":"AAAA;;AACA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,OAAOC,WAAW,QAAO;AAEzB,SAASC,cAAc,QAAQ,uCAAsC;AACrE,OAAO,eAAc;AAYrB,OAAO,SAASC,YAAYC,WAAwB;IAClD,qBAAOH,MAAMI,cAAc,CAACD;AAC9B;AAEA,OAAO,MAAME,kBAAkD,CAACC;IAC9D,MAAM,EAAEC,IAAI,EAAE,GAAGN;IACjB,MAAM,EAAEE,WAAW,EAAE,GAAGG;IAExB,IAAIJ,YAAYC,cAAc;QAC5B,MAAMK,cAAcL;QACpB,qBAAO,KAACK;IACV;IAEA,IAAIL,aAAa;QACf,qBACE,KAACM;YAAIC,WAAU;sBACZ,OAAOP,gBAAgB,aAAaA,gBAAgBJ,eAAeI,aAAaI;;IAGvF;IAEA,OAAO;AACT,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/ViewDescription/types.ts"],"names":[],"
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/ViewDescription/types.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/elements/WhereBuilder/Condition/Date/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport type { Props } from './types.js'\n\nimport { DatePickerField } from '../../../DatePicker/index.js'\n\nconst baseClass = 'condition-value-date'\n\nexport const DateField: React.FC<Props> = ({ admin, disabled, onChange, value }) => {\n const { date } = admin || {}\n\n return (\n <div className={baseClass}>\n <DatePickerField {...date} onChange={onChange} readOnly={disabled} value={value} />\n </div>\n )\n}\n"],"names":["React","DatePickerField","baseClass","DateField","admin","disabled","onChange","value","date","div","className","readOnly"],"
|
|
1
|
+
{"version":3,"sources":["../../../../../src/elements/WhereBuilder/Condition/Date/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport type { Props } from './types.js'\n\nimport { DatePickerField } from '../../../DatePicker/index.js'\n\nconst baseClass = 'condition-value-date'\n\nexport const DateField: React.FC<Props> = ({ admin, disabled, onChange, value }) => {\n const { date } = admin || {}\n\n return (\n <div className={baseClass}>\n <DatePickerField {...date} onChange={onChange} readOnly={disabled} value={value} />\n </div>\n )\n}\n"],"names":["React","DatePickerField","baseClass","DateField","admin","disabled","onChange","value","date","div","className","readOnly"],"mappings":"AAAA;;AACA,OAAOA,WAAW,QAAO;AAIzB,SAASC,eAAe,QAAQ,+BAA8B;AAE9D,MAAMC,YAAY;AAElB,OAAO,MAAMC,YAA6B,CAAC,EAAEC,KAAK,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,KAAK,EAAE;IAC7E,MAAM,EAAEC,IAAI,EAAE,GAAGJ,SAAS,CAAC;IAE3B,qBACE,KAACK;QAAIC,WAAWR;kBACd,cAAA,KAACD;YAAiB,GAAGO,IAAI;YAAEF,UAAUA;YAAUK,UAAUN;YAAUE,OAAOA;;;AAGhF,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/elements/WhereBuilder/Condition/Date/types.ts"],"sourcesContent":["import type { Props as DateType } from '../../../../elements/DatePicker/types.js'\n\nexport type Props = {\n admin?: {\n date?: DateType\n }\n disabled?: boolean\n onChange: () => void\n value: Date\n}\n"],"names":[],"
|
|
1
|
+
{"version":3,"sources":["../../../../../src/elements/WhereBuilder/Condition/Date/types.ts"],"sourcesContent":["import type { Props as DateType } from '../../../../elements/DatePicker/types.js'\n\nexport type Props = {\n admin?: {\n date?: DateType\n }\n disabled?: boolean\n onChange: () => void\n value: Date\n}\n"],"names":[],"mappings":"AAEA,WAOC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/elements/WhereBuilder/Condition/Number/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport type { Props } from './types.js'\n\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport './index.scss'\n\nconst baseClass = 'condition-value-number'\n\nexport const NumberField: React.FC<Props> = ({ disabled, onChange, value }) => {\n const { t } = useTranslation()\n return (\n <input\n className={baseClass}\n disabled={disabled}\n onChange={(e) => onChange(e.target.value)}\n placeholder={t('general:enterAValue')}\n type=\"number\"\n value={value}\n />\n )\n}\n"],"names":["React","useTranslation","baseClass","NumberField","disabled","onChange","value","t","input","className","e","target","placeholder","type"],"
|
|
1
|
+
{"version":3,"sources":["../../../../../src/elements/WhereBuilder/Condition/Number/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport type { Props } from './types.js'\n\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport './index.scss'\n\nconst baseClass = 'condition-value-number'\n\nexport const NumberField: React.FC<Props> = ({ disabled, onChange, value }) => {\n const { t } = useTranslation()\n return (\n <input\n className={baseClass}\n disabled={disabled}\n onChange={(e) => onChange(e.target.value)}\n placeholder={t('general:enterAValue')}\n type=\"number\"\n value={value}\n />\n )\n}\n"],"names":["React","useTranslation","baseClass","NumberField","disabled","onChange","value","t","input","className","e","target","placeholder","type"],"mappings":"AAAA;;AACA,OAAOA,WAAW,QAAO;AAIzB,SAASC,cAAc,QAAQ,6CAA4C;AAC3E,OAAO,eAAc;AAErB,MAAMC,YAAY;AAElB,OAAO,MAAMC,cAA+B,CAAC,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,KAAK,EAAE;IACxE,MAAM,EAAEC,CAAC,EAAE,GAAGN;IACd,qBACE,KAACO;QACCC,WAAWP;QACXE,UAAUA;QACVC,UAAU,CAACK,IAAML,SAASK,EAAEC,MAAM,CAACL,KAAK;QACxCM,aAAaL,EAAE;QACfM,MAAK;QACLP,OAAOA;;AAGb,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/elements/WhereBuilder/Condition/Number/types.ts"],"sourcesContent":["export type Props = {\n disabled?: boolean\n onChange: (e: string) => void\n value: string\n}\n"],"names":[],"
|
|
1
|
+
{"version":3,"sources":["../../../../../src/elements/WhereBuilder/Condition/Number/types.ts"],"sourcesContent":["export type Props = {\n disabled?: boolean\n onChange: (e: string) => void\n value: string\n}\n"],"names":[],"mappings":"AAAA,WAIC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAuD,MAAM,OAAO,CAAA;AAG3E,OAAO,KAAK,EAAE,KAAK,EAAqB,MAAM,YAAY,CAAA;AAM1D,OAAO,cAAc,CAAA;AAOrB,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAwU7C,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import
|
|
3
|
+
import * as qs from 'qs-esm';
|
|
4
4
|
import React, { useCallback, useEffect, useReducer, useState } from 'react';
|
|
5
5
|
import { useDebounce } from '../../../../hooks/useDebounce.js';
|
|
6
6
|
import { useConfig } from '../../../../providers/Config/index.js';
|
|
@@ -68,7 +68,7 @@ export const RelationshipField = (props)=>{
|
|
|
68
68
|
});
|
|
69
69
|
}
|
|
70
70
|
try {
|
|
71
|
-
const response = await fetch(`${serverURL}${api}/${relationSlug}${
|
|
71
|
+
const response = await fetch(`${serverURL}${api}/${relationSlug}${qs.stringify(query, {
|
|
72
72
|
addQueryPrefix: true
|
|
73
73
|
})}`, {
|
|
74
74
|
credentials: 'include',
|
|
@@ -111,7 +111,7 @@ export const RelationshipField = (props)=>{
|
|
|
111
111
|
const loadMoreOptions = React.useCallback(()=>{
|
|
112
112
|
if (partiallyLoadedRelationshipSlugs.current.length > 0) {
|
|
113
113
|
const abortController = new AbortController();
|
|
114
|
-
loadRelationOptions({
|
|
114
|
+
void loadRelationOptions({
|
|
115
115
|
abortController,
|
|
116
116
|
relationSlug: partiallyLoadedRelationshipSlugs.current[0]
|
|
117
117
|
});
|
|
@@ -217,7 +217,7 @@ export const RelationshipField = (props)=>{
|
|
|
217
217
|
const abortControllers = [];
|
|
218
218
|
relations.forEach((relation)=>{
|
|
219
219
|
const abortController = new AbortController();
|
|
220
|
-
loadRelationOptions({
|
|
220
|
+
void loadRelationOptions({
|
|
221
221
|
abortController,
|
|
222
222
|
relationSlug: relation
|
|
223
223
|
});
|
|
@@ -243,9 +243,9 @@ export const RelationshipField = (props)=>{
|
|
|
243
243
|
(matchedOptions || []).forEach((option, i)=>{
|
|
244
244
|
if (!option) {
|
|
245
245
|
if (hasMultipleRelations) {
|
|
246
|
-
addOptionByID(value[i].value, value[i].relationTo);
|
|
246
|
+
void addOptionByID(value[i].value, value[i].relationTo);
|
|
247
247
|
} else {
|
|
248
|
-
addOptionByID(value[i], relationTo);
|
|
248
|
+
void addOptionByID(value[i], relationTo);
|
|
249
249
|
}
|
|
250
250
|
}
|
|
251
251
|
});
|
|
@@ -254,9 +254,9 @@ export const RelationshipField = (props)=>{
|
|
|
254
254
|
if (!matchedOption) {
|
|
255
255
|
if (hasMultipleRelations) {
|
|
256
256
|
const valueWithRelation = value;
|
|
257
|
-
addOptionByID(valueWithRelation.value, valueWithRelation.relationTo);
|
|
257
|
+
void addOptionByID(valueWithRelation.value, valueWithRelation.relationTo);
|
|
258
258
|
} else {
|
|
259
|
-
addOptionByID(value, relationTo);
|
|
259
|
+
void addOptionByID(value, relationTo);
|
|
260
260
|
}
|
|
261
261
|
}
|
|
262
262
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { Where } from 'payload'\n/* eslint-disable @typescript-eslint/no-floating-promises */\nimport type { PaginatedDocs } from 'payload'\n\nimport QueryString from 'qs'\nimport React, { useCallback, useEffect, useReducer, useState } from 'react'\n\nimport type { Option } from '../../../ReactSelect/types.js'\nimport type { Props, ValueWithRelation } from './types.js'\n\nimport { useDebounce } from '../../../../hooks/useDebounce.js'\nimport { useConfig } from '../../../../providers/Config/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport './index.scss'\nimport optionsReducer from './optionsReducer.js'\n\nconst baseClass = 'condition-value-relationship'\n\nconst maxResultsPerRequest = 10\n\nexport const RelationshipField: React.FC<Props> = (props) => {\n const { admin: { isSortable } = {}, disabled, hasMany, onChange, relationTo, value } = props\n\n const {\n collections,\n routes: { api },\n serverURL,\n } = useConfig()\n\n const hasMultipleRelations = Array.isArray(relationTo)\n const [options, dispatchOptions] = useReducer(optionsReducer, [])\n const [search, setSearch] = useState('')\n const [errorLoading, setErrorLoading] = useState('')\n const [hasLoadedFirstOptions, setHasLoadedFirstOptions] = useState(false)\n const debouncedSearch = useDebounce(search, 300)\n const { i18n, t } = useTranslation()\n const relationSlugs = hasMultipleRelations ? relationTo : [relationTo]\n const initialRelationMap = () => {\n const map: Map<string, number> = new Map()\n relationSlugs.forEach((relation) => {\n map.set(relation, 1)\n })\n return map\n }\n const nextPageByRelationshipRef = React.useRef<Map<string, number>>(initialRelationMap())\n const partiallyLoadedRelationshipSlugs = React.useRef<string[]>(relationSlugs)\n\n const addOptions = useCallback(\n (data, relation) => {\n const collection = collections.find((coll) => coll.slug === relation)\n dispatchOptions({ type: 'ADD', collection, data, hasMultipleRelations, i18n, relation })\n },\n [collections, hasMultipleRelations, i18n],\n )\n\n const loadRelationOptions = React.useCallback(\n async ({\n abortController,\n relationSlug,\n }: {\n abortController: AbortController\n relationSlug: string\n }) => {\n const collection = collections.find((coll) => coll.slug === relationSlug)\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n const pageIndex = nextPageByRelationshipRef.current.get(relationSlug)\n\n if (partiallyLoadedRelationshipSlugs.current.includes(relationSlug)) {\n const query: {\n depth?: number\n limit?: number\n page?: number\n where: Where\n } = {\n depth: 0,\n limit: maxResultsPerRequest,\n page: pageIndex,\n where: {\n and: [],\n },\n }\n\n if (debouncedSearch) {\n query.where.and.push({\n [fieldToSearch]: {\n like: debouncedSearch,\n },\n })\n }\n\n try {\n const response = await fetch(\n `${serverURL}${api}/${relationSlug}${QueryString.stringify(query, { addQueryPrefix: true })}`,\n {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n signal: abortController.signal,\n },\n )\n\n if (response.ok) {\n const data: PaginatedDocs = await response.json()\n if (data.docs.length > 0) {\n addOptions(data, relationSlug)\n\n if (!debouncedSearch) {\n if (data.nextPage) {\n nextPageByRelationshipRef.current.set(relationSlug, data.nextPage)\n } else {\n partiallyLoadedRelationshipSlugs.current =\n partiallyLoadedRelationshipSlugs.current.filter(\n (partiallyLoadedRelation) => partiallyLoadedRelation !== relationSlug,\n )\n }\n }\n }\n } else {\n setErrorLoading(t('error:unspecific'))\n }\n } catch (e) {\n if (!abortController.signal.aborted) {\n console.error(e)\n }\n }\n }\n\n setHasLoadedFirstOptions(true)\n },\n [addOptions, api, collections, debouncedSearch, i18n.language, serverURL, t],\n )\n\n const loadMoreOptions = React.useCallback(() => {\n if (partiallyLoadedRelationshipSlugs.current.length > 0) {\n const abortController = new AbortController()\n loadRelationOptions({\n abortController,\n relationSlug: partiallyLoadedRelationshipSlugs.current[0],\n })\n }\n }, [loadRelationOptions])\n\n const findOptionsByValue = useCallback((): Option | Option[] => {\n if (value) {\n if (hasMany) {\n if (Array.isArray(value)) {\n return value.map((val) => {\n if (hasMultipleRelations) {\n let matchedOption: Option\n\n options.forEach((opt) => {\n if (opt.options) {\n opt.options.some((subOpt) => {\n if (subOpt?.value === val.value) {\n matchedOption = subOpt\n return true\n }\n\n return false\n })\n }\n })\n\n return matchedOption\n }\n\n return options.find((opt) => opt.value === val)\n })\n }\n\n return undefined\n }\n\n if (hasMultipleRelations) {\n let matchedOption: Option\n\n const valueWithRelation = value as ValueWithRelation\n\n options.forEach((opt) => {\n if (opt?.options) {\n opt.options.some((subOpt) => {\n if (subOpt?.value === valueWithRelation.value) {\n matchedOption = subOpt\n return true\n }\n return false\n })\n }\n })\n\n return matchedOption\n }\n\n return options.find((opt) => opt.value === value)\n }\n\n return undefined\n }, [hasMany, hasMultipleRelations, value, options])\n\n const handleInputChange = useCallback(\n (newSearch) => {\n if (search !== newSearch) {\n setSearch(newSearch)\n }\n },\n [search],\n )\n\n const addOptionByID = useCallback(\n async (id, relation) => {\n if (!errorLoading && id !== 'null' && id && relation) {\n const response = await fetch(`${serverURL}${api}/${relation}/${id}?depth=0`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (response.ok) {\n const data = await response.json()\n addOptions({ docs: [data] }, relation)\n } else {\n // eslint-disable-next-line no-console\n console.error(t('error:loadingDocument', { id }))\n }\n }\n },\n [i18n, addOptions, api, errorLoading, serverURL, t],\n )\n\n /**\n * 1. Trigger initial relationship options fetch\n * 2. When search changes, loadRelationOptions will\n * fire off again\n */\n useEffect(() => {\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n const abortControllers: AbortController[] = []\n relations.forEach((relation) => {\n const abortController = new AbortController()\n loadRelationOptions({\n abortController,\n relationSlug: relation,\n })\n abortControllers.push(abortController)\n })\n\n return () => {\n abortControllers.forEach((controller) => {\n if (controller.signal) controller.abort()\n })\n }\n }, [i18n, loadRelationOptions, relationTo])\n\n /**\n * Load any options that were not returned\n * in the first 10 of each relation fetch\n */\n useEffect(() => {\n if (value && hasLoadedFirstOptions) {\n if (hasMany) {\n const matchedOptions = findOptionsByValue()\n\n ;((matchedOptions as Option[]) || []).forEach((option, i) => {\n if (!option) {\n if (hasMultipleRelations) {\n addOptionByID(value[i].value, value[i].relationTo)\n } else {\n addOptionByID(value[i], relationTo)\n }\n }\n })\n } else {\n const matchedOption = findOptionsByValue()\n\n if (!matchedOption) {\n if (hasMultipleRelations) {\n const valueWithRelation = value as ValueWithRelation\n addOptionByID(valueWithRelation.value, valueWithRelation.relationTo)\n } else {\n addOptionByID(value, relationTo)\n }\n }\n }\n }\n }, [\n addOptionByID,\n findOptionsByValue,\n hasMany,\n hasMultipleRelations,\n relationTo,\n value,\n hasLoadedFirstOptions,\n ])\n\n const classes = ['field-type', baseClass, errorLoading && 'error-loading']\n .filter(Boolean)\n .join(' ')\n\n const valueToRender = (findOptionsByValue() || value) as Option\n\n return (\n <div className={classes}>\n {!errorLoading && (\n <ReactSelect\n disabled={disabled}\n isMulti={hasMany}\n isSortable={isSortable}\n onChange={(selected) => {\n if (!selected) {\n onChange(null)\n return\n }\n if (hasMany && Array.isArray(selected)) {\n onChange(\n selected\n ? selected.map((option) => {\n if (hasMultipleRelations) {\n return {\n relationTo: option?.relationTo,\n value: option?.value,\n }\n }\n\n return option?.value\n })\n : null,\n )\n } else if (hasMultipleRelations && !Array.isArray(selected)) {\n onChange({\n relationTo: selected?.relationTo,\n value: selected?.value,\n })\n } else if (!Array.isArray(selected)) {\n onChange(selected?.value)\n }\n }}\n onInputChange={handleInputChange}\n onMenuScrollToBottom={loadMoreOptions}\n options={options}\n placeholder={t('general:selectValue')}\n value={valueToRender}\n />\n )}\n {errorLoading && <div className={`${baseClass}__error-loading`}>{errorLoading}</div>}\n </div>\n )\n}\n"],"names":["QueryString","React","useCallback","useEffect","useReducer","useState","useDebounce","useConfig","useTranslation","ReactSelect","optionsReducer","baseClass","maxResultsPerRequest","RelationshipField","props","admin","isSortable","disabled","hasMany","onChange","relationTo","value","collections","routes","api","serverURL","hasMultipleRelations","Array","isArray","options","dispatchOptions","search","setSearch","errorLoading","setErrorLoading","hasLoadedFirstOptions","setHasLoadedFirstOptions","debouncedSearch","i18n","t","relationSlugs","initialRelationMap","map","Map","forEach","relation","set","nextPageByRelationshipRef","useRef","partiallyLoadedRelationshipSlugs","addOptions","data","collection","find","coll","slug","type","loadRelationOptions","abortController","relationSlug","fieldToSearch","useAsTitle","pageIndex","current","get","includes","query","depth","limit","page","where","and","push","like","response","fetch","stringify","addQueryPrefix","credentials","headers","language","signal","ok","json","docs","length","nextPage","filter","partiallyLoadedRelation","e","aborted","console","error","loadMoreOptions","AbortController","findOptionsByValue","val","matchedOption","opt","some","subOpt","undefined","valueWithRelation","handleInputChange","newSearch","addOptionByID","id","relations","abortControllers","controller","abort","matchedOptions","option","i","classes","Boolean","join","valueToRender","div","className","isMulti","selected","onInputChange","onMenuScrollToBottom","placeholder"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { PaginatedDocs, Where } from 'payload'\n\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useReducer, useState } from 'react'\n\nimport type { Option } from '../../../ReactSelect/types.js'\nimport type { Props, ValueWithRelation } from './types.js'\n\nimport { useDebounce } from '../../../../hooks/useDebounce.js'\nimport { useConfig } from '../../../../providers/Config/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport './index.scss'\nimport optionsReducer from './optionsReducer.js'\n\nconst baseClass = 'condition-value-relationship'\n\nconst maxResultsPerRequest = 10\n\nexport const RelationshipField: React.FC<Props> = (props) => {\n const { admin: { isSortable } = {}, disabled, hasMany, onChange, relationTo, value } = props\n\n const {\n collections,\n routes: { api },\n serverURL,\n } = useConfig()\n\n const hasMultipleRelations = Array.isArray(relationTo)\n const [options, dispatchOptions] = useReducer(optionsReducer, [])\n const [search, setSearch] = useState('')\n const [errorLoading, setErrorLoading] = useState('')\n const [hasLoadedFirstOptions, setHasLoadedFirstOptions] = useState(false)\n const debouncedSearch = useDebounce(search, 300)\n const { i18n, t } = useTranslation()\n const relationSlugs = hasMultipleRelations ? relationTo : [relationTo]\n const initialRelationMap = () => {\n const map: Map<string, number> = new Map()\n relationSlugs.forEach((relation) => {\n map.set(relation, 1)\n })\n return map\n }\n const nextPageByRelationshipRef = React.useRef<Map<string, number>>(initialRelationMap())\n const partiallyLoadedRelationshipSlugs = React.useRef<string[]>(relationSlugs)\n\n const addOptions = useCallback(\n (data, relation) => {\n const collection = collections.find((coll) => coll.slug === relation)\n dispatchOptions({ type: 'ADD', collection, data, hasMultipleRelations, i18n, relation })\n },\n [collections, hasMultipleRelations, i18n],\n )\n\n const loadRelationOptions = React.useCallback(\n async ({\n abortController,\n relationSlug,\n }: {\n abortController: AbortController\n relationSlug: string\n }) => {\n const collection = collections.find((coll) => coll.slug === relationSlug)\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n const pageIndex = nextPageByRelationshipRef.current.get(relationSlug)\n\n if (partiallyLoadedRelationshipSlugs.current.includes(relationSlug)) {\n const query: {\n depth?: number\n limit?: number\n page?: number\n where: Where\n } = {\n depth: 0,\n limit: maxResultsPerRequest,\n page: pageIndex,\n where: {\n and: [],\n },\n }\n\n if (debouncedSearch) {\n query.where.and.push({\n [fieldToSearch]: {\n like: debouncedSearch,\n },\n })\n }\n\n try {\n const response = await fetch(\n `${serverURL}${api}/${relationSlug}${qs.stringify(query, { addQueryPrefix: true })}`,\n {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n signal: abortController.signal,\n },\n )\n\n if (response.ok) {\n const data: PaginatedDocs = await response.json()\n if (data.docs.length > 0) {\n addOptions(data, relationSlug)\n\n if (!debouncedSearch) {\n if (data.nextPage) {\n nextPageByRelationshipRef.current.set(relationSlug, data.nextPage)\n } else {\n partiallyLoadedRelationshipSlugs.current =\n partiallyLoadedRelationshipSlugs.current.filter(\n (partiallyLoadedRelation) => partiallyLoadedRelation !== relationSlug,\n )\n }\n }\n }\n } else {\n setErrorLoading(t('error:unspecific'))\n }\n } catch (e) {\n if (!abortController.signal.aborted) {\n console.error(e)\n }\n }\n }\n\n setHasLoadedFirstOptions(true)\n },\n [addOptions, api, collections, debouncedSearch, i18n.language, serverURL, t],\n )\n\n const loadMoreOptions = React.useCallback(() => {\n if (partiallyLoadedRelationshipSlugs.current.length > 0) {\n const abortController = new AbortController()\n void loadRelationOptions({\n abortController,\n relationSlug: partiallyLoadedRelationshipSlugs.current[0],\n })\n }\n }, [loadRelationOptions])\n\n const findOptionsByValue = useCallback((): Option | Option[] => {\n if (value) {\n if (hasMany) {\n if (Array.isArray(value)) {\n return value.map((val) => {\n if (hasMultipleRelations) {\n let matchedOption: Option\n\n options.forEach((opt) => {\n if (opt.options) {\n opt.options.some((subOpt) => {\n if (subOpt?.value === val.value) {\n matchedOption = subOpt\n return true\n }\n\n return false\n })\n }\n })\n\n return matchedOption\n }\n\n return options.find((opt) => opt.value === val)\n })\n }\n\n return undefined\n }\n\n if (hasMultipleRelations) {\n let matchedOption: Option\n\n const valueWithRelation = value as ValueWithRelation\n\n options.forEach((opt) => {\n if (opt?.options) {\n opt.options.some((subOpt) => {\n if (subOpt?.value === valueWithRelation.value) {\n matchedOption = subOpt\n return true\n }\n return false\n })\n }\n })\n\n return matchedOption\n }\n\n return options.find((opt) => opt.value === value)\n }\n\n return undefined\n }, [hasMany, hasMultipleRelations, value, options])\n\n const handleInputChange = useCallback(\n (newSearch) => {\n if (search !== newSearch) {\n setSearch(newSearch)\n }\n },\n [search],\n )\n\n const addOptionByID = useCallback(\n async (id, relation) => {\n if (!errorLoading && id !== 'null' && id && relation) {\n const response = await fetch(`${serverURL}${api}/${relation}/${id}?depth=0`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (response.ok) {\n const data = await response.json()\n addOptions({ docs: [data] }, relation)\n } else {\n // eslint-disable-next-line no-console\n console.error(t('error:loadingDocument', { id }))\n }\n }\n },\n [i18n, addOptions, api, errorLoading, serverURL, t],\n )\n\n /**\n * 1. Trigger initial relationship options fetch\n * 2. When search changes, loadRelationOptions will\n * fire off again\n */\n useEffect(() => {\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n const abortControllers: AbortController[] = []\n relations.forEach((relation) => {\n const abortController = new AbortController()\n void loadRelationOptions({\n abortController,\n relationSlug: relation,\n })\n abortControllers.push(abortController)\n })\n\n return () => {\n abortControllers.forEach((controller) => {\n if (controller.signal) controller.abort()\n })\n }\n }, [i18n, loadRelationOptions, relationTo])\n\n /**\n * Load any options that were not returned\n * in the first 10 of each relation fetch\n */\n useEffect(() => {\n if (value && hasLoadedFirstOptions) {\n if (hasMany) {\n const matchedOptions = findOptionsByValue()\n\n ;((matchedOptions as Option[]) || []).forEach((option, i) => {\n if (!option) {\n if (hasMultipleRelations) {\n void addOptionByID(value[i].value, value[i].relationTo)\n } else {\n void addOptionByID(value[i], relationTo)\n }\n }\n })\n } else {\n const matchedOption = findOptionsByValue()\n\n if (!matchedOption) {\n if (hasMultipleRelations) {\n const valueWithRelation = value as ValueWithRelation\n void addOptionByID(valueWithRelation.value, valueWithRelation.relationTo)\n } else {\n void addOptionByID(value, relationTo)\n }\n }\n }\n }\n }, [\n addOptionByID,\n findOptionsByValue,\n hasMany,\n hasMultipleRelations,\n relationTo,\n value,\n hasLoadedFirstOptions,\n ])\n\n const classes = ['field-type', baseClass, errorLoading && 'error-loading']\n .filter(Boolean)\n .join(' ')\n\n const valueToRender = (findOptionsByValue() || value) as Option\n\n return (\n <div className={classes}>\n {!errorLoading && (\n <ReactSelect\n disabled={disabled}\n isMulti={hasMany}\n isSortable={isSortable}\n onChange={(selected) => {\n if (!selected) {\n onChange(null)\n return\n }\n if (hasMany && Array.isArray(selected)) {\n onChange(\n selected\n ? selected.map((option) => {\n if (hasMultipleRelations) {\n return {\n relationTo: option?.relationTo,\n value: option?.value,\n }\n }\n\n return option?.value\n })\n : null,\n )\n } else if (hasMultipleRelations && !Array.isArray(selected)) {\n onChange({\n relationTo: selected?.relationTo,\n value: selected?.value,\n })\n } else if (!Array.isArray(selected)) {\n onChange(selected?.value)\n }\n }}\n onInputChange={handleInputChange}\n onMenuScrollToBottom={loadMoreOptions}\n options={options}\n placeholder={t('general:selectValue')}\n value={valueToRender}\n />\n )}\n {errorLoading && <div className={`${baseClass}__error-loading`}>{errorLoading}</div>}\n </div>\n )\n}\n"],"names":["qs","React","useCallback","useEffect","useReducer","useState","useDebounce","useConfig","useTranslation","ReactSelect","optionsReducer","baseClass","maxResultsPerRequest","RelationshipField","props","admin","isSortable","disabled","hasMany","onChange","relationTo","value","collections","routes","api","serverURL","hasMultipleRelations","Array","isArray","options","dispatchOptions","search","setSearch","errorLoading","setErrorLoading","hasLoadedFirstOptions","setHasLoadedFirstOptions","debouncedSearch","i18n","t","relationSlugs","initialRelationMap","map","Map","forEach","relation","set","nextPageByRelationshipRef","useRef","partiallyLoadedRelationshipSlugs","addOptions","data","collection","find","coll","slug","type","loadRelationOptions","abortController","relationSlug","fieldToSearch","useAsTitle","pageIndex","current","get","includes","query","depth","limit","page","where","and","push","like","response","fetch","stringify","addQueryPrefix","credentials","headers","language","signal","ok","json","docs","length","nextPage","filter","partiallyLoadedRelation","e","aborted","console","error","loadMoreOptions","AbortController","findOptionsByValue","val","matchedOption","opt","some","subOpt","undefined","valueWithRelation","handleInputChange","newSearch","addOptionByID","id","relations","abortControllers","controller","abort","matchedOptions","option","i","classes","Boolean","join","valueToRender","div","className","isMulti","selected","onInputChange","onMenuScrollToBottom","placeholder"],"mappings":"AAAA;;AAGA,YAAYA,QAAQ,SAAQ;AAC5B,OAAOC,SAASC,WAAW,EAAEC,SAAS,EAAEC,UAAU,EAAEC,QAAQ,QAAQ,QAAO;AAK3E,SAASC,WAAW,QAAQ,mCAAkC;AAC9D,SAASC,SAAS,QAAQ,wCAAuC;AACjE,SAASC,cAAc,QAAQ,6CAA4C;AAC3E,SAASC,WAAW,QAAQ,gCAA+B;AAC3D,OAAO,eAAc;AACrB,OAAOC,oBAAoB,sBAAqB;AAEhD,MAAMC,YAAY;AAElB,MAAMC,uBAAuB;AAE7B,OAAO,MAAMC,oBAAqC,CAACC;IACjD,MAAM,EAAEC,OAAO,EAAEC,UAAU,EAAE,GAAG,CAAC,CAAC,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,KAAK,EAAE,GAAGP;IAEvF,MAAM,EACJQ,WAAW,EACXC,QAAQ,EAAEC,GAAG,EAAE,EACfC,SAAS,EACV,GAAGlB;IAEJ,MAAMmB,uBAAuBC,MAAMC,OAAO,CAACR;IAC3C,MAAM,CAACS,SAASC,gBAAgB,GAAG1B,WAAWM,gBAAgB,EAAE;IAChE,MAAM,CAACqB,QAAQC,UAAU,GAAG3B,SAAS;IACrC,MAAM,CAAC4B,cAAcC,gBAAgB,GAAG7B,SAAS;IACjD,MAAM,CAAC8B,uBAAuBC,yBAAyB,GAAG/B,SAAS;IACnE,MAAMgC,kBAAkB/B,YAAYyB,QAAQ;IAC5C,MAAM,EAAEO,IAAI,EAAEC,CAAC,EAAE,GAAG/B;IACpB,MAAMgC,gBAAgBd,uBAAuBN,aAAa;QAACA;KAAW;IACtE,MAAMqB,qBAAqB;QACzB,MAAMC,MAA2B,IAAIC;QACrCH,cAAcI,OAAO,CAAC,CAACC;YACrBH,IAAII,GAAG,CAACD,UAAU;QACpB;QACA,OAAOH;IACT;IACA,MAAMK,4BAA4B9C,MAAM+C,MAAM,CAAsBP;IACpE,MAAMQ,mCAAmChD,MAAM+C,MAAM,CAAWR;IAEhE,MAAMU,aAAahD,YACjB,CAACiD,MAAMN;QACL,MAAMO,aAAa9B,YAAY+B,IAAI,CAAC,CAACC,OAASA,KAAKC,IAAI,KAAKV;QAC5Df,gBAAgB;YAAE0B,MAAM;YAAOJ;YAAYD;YAAMzB;YAAsBY;YAAMO;QAAS;IACxF,GACA;QAACvB;QAAaI;QAAsBY;KAAK;IAG3C,MAAMmB,sBAAsBxD,MAAMC,WAAW,CAC3C,OAAO,EACLwD,eAAe,EACfC,YAAY,EAIb;QACC,MAAMP,aAAa9B,YAAY+B,IAAI,CAAC,CAACC,OAASA,KAAKC,IAAI,KAAKI;QAC5D,MAAMC,gBAAgBR,YAAYrC,OAAO8C,cAAc;QACvD,MAAMC,YAAYf,0BAA0BgB,OAAO,CAACC,GAAG,CAACL;QAExD,IAAIV,iCAAiCc,OAAO,CAACE,QAAQ,CAACN,eAAe;YACnE,MAAMO,QAKF;gBACFC,OAAO;gBACPC,OAAOxD;gBACPyD,MAAMP;gBACNQ,OAAO;oBACLC,KAAK,EAAE;gBACT;YACF;YAEA,IAAIlC,iBAAiB;gBACnB6B,MAAMI,KAAK,CAACC,GAAG,CAACC,IAAI,CAAC;oBACnB,CAACZ,cAAc,EAAE;wBACfa,MAAMpC;oBACR;gBACF;YACF;YAEA,IAAI;gBACF,MAAMqC,WAAW,MAAMC,MACrB,CAAC,EAAElD,UAAU,EAAED,IAAI,CAAC,EAAEmC,aAAa,EAAE3D,GAAG4E,SAAS,CAACV,OAAO;oBAAEW,gBAAgB;gBAAK,GAAG,CAAC,EACpF;oBACEC,aAAa;oBACbC,SAAS;wBACP,mBAAmBzC,KAAK0C,QAAQ;oBAClC;oBACAC,QAAQvB,gBAAgBuB,MAAM;gBAChC;gBAGF,IAAIP,SAASQ,EAAE,EAAE;oBACf,MAAM/B,OAAsB,MAAMuB,SAASS,IAAI;oBAC/C,IAAIhC,KAAKiC,IAAI,CAACC,MAAM,GAAG,GAAG;wBACxBnC,WAAWC,MAAMQ;wBAEjB,IAAI,CAACtB,iBAAiB;4BACpB,IAAIc,KAAKmC,QAAQ,EAAE;gCACjBvC,0BAA0BgB,OAAO,CAACjB,GAAG,CAACa,cAAcR,KAAKmC,QAAQ;4BACnE,OAAO;gCACLrC,iCAAiCc,OAAO,GACtCd,iCAAiCc,OAAO,CAACwB,MAAM,CAC7C,CAACC,0BAA4BA,4BAA4B7B;4BAE/D;wBACF;oBACF;gBACF,OAAO;oBACLzB,gBAAgBK,EAAE;gBACpB;YACF,EAAE,OAAOkD,GAAG;gBACV,IAAI,CAAC/B,gBAAgBuB,MAAM,CAACS,OAAO,EAAE;oBACnCC,QAAQC,KAAK,CAACH;gBAChB;YACF;QACF;QAEArD,yBAAyB;IAC3B,GACA;QAACc;QAAY1B;QAAKF;QAAae;QAAiBC,KAAK0C,QAAQ;QAAEvD;QAAWc;KAAE;IAG9E,MAAMsD,kBAAkB5F,MAAMC,WAAW,CAAC;QACxC,IAAI+C,iCAAiCc,OAAO,CAACsB,MAAM,GAAG,GAAG;YACvD,MAAM3B,kBAAkB,IAAIoC;YAC5B,KAAKrC,oBAAoB;gBACvBC;gBACAC,cAAcV,iCAAiCc,OAAO,CAAC,EAAE;YAC3D;QACF;IACF,GAAG;QAACN;KAAoB;IAExB,MAAMsC,qBAAqB7F,YAAY;QACrC,IAAImB,OAAO;YACT,IAAIH,SAAS;gBACX,IAAIS,MAAMC,OAAO,CAACP,QAAQ;oBACxB,OAAOA,MAAMqB,GAAG,CAAC,CAACsD;wBAChB,IAAItE,sBAAsB;4BACxB,IAAIuE;4BAEJpE,QAAQe,OAAO,CAAC,CAACsD;gCACf,IAAIA,IAAIrE,OAAO,EAAE;oCACfqE,IAAIrE,OAAO,CAACsE,IAAI,CAAC,CAACC;wCAChB,IAAIA,QAAQ/E,UAAU2E,IAAI3E,KAAK,EAAE;4CAC/B4E,gBAAgBG;4CAChB,OAAO;wCACT;wCAEA,OAAO;oCACT;gCACF;4BACF;4BAEA,OAAOH;wBACT;wBAEA,OAAOpE,QAAQwB,IAAI,CAAC,CAAC6C,MAAQA,IAAI7E,KAAK,KAAK2E;oBAC7C;gBACF;gBAEA,OAAOK;YACT;YAEA,IAAI3E,sBAAsB;gBACxB,IAAIuE;gBAEJ,MAAMK,oBAAoBjF;gBAE1BQ,QAAQe,OAAO,CAAC,CAACsD;oBACf,IAAIA,KAAKrE,SAAS;wBAChBqE,IAAIrE,OAAO,CAACsE,IAAI,CAAC,CAACC;4BAChB,IAAIA,QAAQ/E,UAAUiF,kBAAkBjF,KAAK,EAAE;gCAC7C4E,gBAAgBG;gCAChB,OAAO;4BACT;4BACA,OAAO;wBACT;oBACF;gBACF;gBAEA,OAAOH;YACT;YAEA,OAAOpE,QAAQwB,IAAI,CAAC,CAAC6C,MAAQA,IAAI7E,KAAK,KAAKA;QAC7C;QAEA,OAAOgF;IACT,GAAG;QAACnF;QAASQ;QAAsBL;QAAOQ;KAAQ;IAElD,MAAM0E,oBAAoBrG,YACxB,CAACsG;QACC,IAAIzE,WAAWyE,WAAW;YACxBxE,UAAUwE;QACZ;IACF,GACA;QAACzE;KAAO;IAGV,MAAM0E,gBAAgBvG,YACpB,OAAOwG,IAAI7D;QACT,IAAI,CAACZ,gBAAgByE,OAAO,UAAUA,MAAM7D,UAAU;YACpD,MAAM6B,WAAW,MAAMC,MAAM,CAAC,EAAElD,UAAU,EAAED,IAAI,CAAC,EAAEqB,SAAS,CAAC,EAAE6D,GAAG,QAAQ,CAAC,EAAE;gBAC3E5B,aAAa;gBACbC,SAAS;oBACP,mBAAmBzC,KAAK0C,QAAQ;gBAClC;YACF;YAEA,IAAIN,SAASQ,EAAE,EAAE;gBACf,MAAM/B,OAAO,MAAMuB,SAASS,IAAI;gBAChCjC,WAAW;oBAAEkC,MAAM;wBAACjC;qBAAK;gBAAC,GAAGN;YAC/B,OAAO;gBACL,sCAAsC;gBACtC8C,QAAQC,KAAK,CAACrD,EAAE,yBAAyB;oBAAEmE;gBAAG;YAChD;QACF;IACF,GACA;QAACpE;QAAMY;QAAY1B;QAAKS;QAAcR;QAAWc;KAAE;IAGrD;;;;GAIC,GACDpC,UAAU;QACR,MAAMwG,YAAYhF,MAAMC,OAAO,CAACR,cAAcA,aAAa;YAACA;SAAW;QACvE,MAAMwF,mBAAsC,EAAE;QAC9CD,UAAU/D,OAAO,CAAC,CAACC;YACjB,MAAMa,kBAAkB,IAAIoC;YAC5B,KAAKrC,oBAAoB;gBACvBC;gBACAC,cAAcd;YAChB;YACA+D,iBAAiBpC,IAAI,CAACd;QACxB;QAEA,OAAO;YACLkD,iBAAiBhE,OAAO,CAAC,CAACiE;gBACxB,IAAIA,WAAW5B,MAAM,EAAE4B,WAAWC,KAAK;YACzC;QACF;IACF,GAAG;QAACxE;QAAMmB;QAAqBrC;KAAW;IAE1C;;;GAGC,GACDjB,UAAU;QACR,IAAIkB,SAASc,uBAAuB;YAClC,IAAIjB,SAAS;gBACX,MAAM6F,iBAAiBhB;gBAErB,CAAA,AAACgB,kBAA+B,EAAE,AAAD,EAAGnE,OAAO,CAAC,CAACoE,QAAQC;oBACrD,IAAI,CAACD,QAAQ;wBACX,IAAItF,sBAAsB;4BACxB,KAAK+E,cAAcpF,KAAK,CAAC4F,EAAE,CAAC5F,KAAK,EAAEA,KAAK,CAAC4F,EAAE,CAAC7F,UAAU;wBACxD,OAAO;4BACL,KAAKqF,cAAcpF,KAAK,CAAC4F,EAAE,EAAE7F;wBAC/B;oBACF;gBACF;YACF,OAAO;gBACL,MAAM6E,gBAAgBF;gBAEtB,IAAI,CAACE,eAAe;oBAClB,IAAIvE,sBAAsB;wBACxB,MAAM4E,oBAAoBjF;wBAC1B,KAAKoF,cAAcH,kBAAkBjF,KAAK,EAAEiF,kBAAkBlF,UAAU;oBAC1E,OAAO;wBACL,KAAKqF,cAAcpF,OAAOD;oBAC5B;gBACF;YACF;QACF;IACF,GAAG;QACDqF;QACAV;QACA7E;QACAQ;QACAN;QACAC;QACAc;KACD;IAED,MAAM+E,UAAU;QAAC;QAAcvG;QAAWsB,gBAAgB;KAAgB,CACvEsD,MAAM,CAAC4B,SACPC,IAAI,CAAC;IAER,MAAMC,gBAAiBtB,wBAAwB1E;IAE/C,qBACE,MAACiG;QAAIC,WAAWL;;YACb,CAACjF,8BACA,KAACxB;gBACCQ,UAAUA;gBACVuG,SAAStG;gBACTF,YAAYA;gBACZG,UAAU,CAACsG;oBACT,IAAI,CAACA,UAAU;wBACbtG,SAAS;wBACT;oBACF;oBACA,IAAID,WAAWS,MAAMC,OAAO,CAAC6F,WAAW;wBACtCtG,SACEsG,WACIA,SAAS/E,GAAG,CAAC,CAACsE;4BACZ,IAAItF,sBAAsB;gCACxB,OAAO;oCACLN,YAAY4F,QAAQ5F;oCACpBC,OAAO2F,QAAQ3F;gCACjB;4BACF;4BAEA,OAAO2F,QAAQ3F;wBACjB,KACA;oBAER,OAAO,IAAIK,wBAAwB,CAACC,MAAMC,OAAO,CAAC6F,WAAW;wBAC3DtG,SAAS;4BACPC,YAAYqG,UAAUrG;4BACtBC,OAAOoG,UAAUpG;wBACnB;oBACF,OAAO,IAAI,CAACM,MAAMC,OAAO,CAAC6F,WAAW;wBACnCtG,SAASsG,UAAUpG;oBACrB;gBACF;gBACAqG,eAAenB;gBACfoB,sBAAsB9B;gBACtBhE,SAASA;gBACT+F,aAAarF,EAAE;gBACflB,OAAOgG;;YAGVpF,8BAAgB,KAACqF;gBAAIC,WAAW,CAAC,EAAE5G,UAAU,eAAe,CAAC;0BAAGsB;;;;AAGvE,EAAC"}
|