@payloadcms/ui 3.68.0-internal-debug.2eb12b9 → 3.68.0-internal-debug.dafc24d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/elements/AddNewRelation/index.js +83 -27
- package/dist/elements/AddNewRelation/index.js.map +1 -1
- package/dist/elements/AnimateHeight/index.js +13 -5
- package/dist/elements/AnimateHeight/index.js.map +1 -1
- package/dist/elements/AnimateHeight/usePatchAnimateHeight.js +2 -2
- package/dist/elements/AnimateHeight/usePatchAnimateHeight.js.map +1 -1
- package/dist/elements/AppHeader/index.js +107 -35
- package/dist/elements/AppHeader/index.js.map +1 -1
- package/dist/elements/ArrayAction/index.js +116 -36
- package/dist/elements/ArrayAction/index.js.map +1 -1
- package/dist/elements/Autosave/index.js +19 -6
- package/dist/elements/Autosave/index.js.map +1 -1
- package/dist/elements/Banner/index.js +25 -9
- package/dist/elements/Banner/index.js.map +1 -1
- package/dist/elements/BulkUpload/ActionsBar/index.js +97 -33
- package/dist/elements/BulkUpload/ActionsBar/index.js.map +1 -1
- package/dist/elements/BulkUpload/AddFilesView/index.js +43 -15
- package/dist/elements/BulkUpload/AddFilesView/index.js.map +1 -1
- package/dist/elements/BulkUpload/AddingFilesView/index.js +47 -15
- package/dist/elements/BulkUpload/AddingFilesView/index.js.map +1 -1
- package/dist/elements/BulkUpload/DiscardWithoutSaving/index.js +7 -3
- package/dist/elements/BulkUpload/DiscardWithoutSaving/index.js.map +1 -1
- package/dist/elements/BulkUpload/DrawerCloseButton/index.js +12 -4
- package/dist/elements/BulkUpload/DrawerCloseButton/index.js.map +1 -1
- package/dist/elements/BulkUpload/EditForm/index.js +53 -17
- package/dist/elements/BulkUpload/EditForm/index.js.map +1 -1
- package/dist/elements/BulkUpload/EditMany/DrawerContent.js +90 -30
- package/dist/elements/BulkUpload/EditMany/DrawerContent.js.map +1 -1
- package/dist/elements/BulkUpload/EditMany/index.js +33 -13
- package/dist/elements/BulkUpload/EditMany/index.js.map +1 -1
- package/dist/elements/BulkUpload/FileSidebar/index.js +214 -70
- package/dist/elements/BulkUpload/FileSidebar/index.js.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.js +21 -13
- package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
- package/dist/elements/BulkUpload/Header/index.js +19 -7
- package/dist/elements/BulkUpload/Header/index.js.map +1 -1
- package/dist/elements/BulkUpload/index.js +70 -19
- package/dist/elements/BulkUpload/index.js.map +1 -1
- package/dist/elements/Button/index.js +103 -35
- package/dist/elements/Button/index.js.map +1 -1
- package/dist/elements/Button/types.js +13 -1
- package/dist/elements/Button/types.js.map +1 -1
- package/dist/elements/Card/index.js +30 -10
- package/dist/elements/Card/index.js.map +1 -1
- package/dist/elements/CheckboxPopup/index.js +19 -7
- package/dist/elements/CheckboxPopup/index.js.map +1 -1
- package/dist/elements/ClipboardAction/ClipboardActionLabel.js +16 -4
- package/dist/elements/ClipboardAction/ClipboardActionLabel.js.map +1 -1
- package/dist/elements/ClipboardAction/index.js +42 -14
- package/dist/elements/ClipboardAction/index.js.map +1 -1
- package/dist/elements/CloseModalButton/index.js +12 -4
- package/dist/elements/CloseModalButton/index.js.map +1 -1
- package/dist/elements/CodeEditor/CodeEditor.js +15 -7
- package/dist/elements/CodeEditor/CodeEditor.js.map +1 -1
- package/dist/elements/CodeEditor/index.js +18 -6
- package/dist/elements/CodeEditor/index.js.map +1 -1
- package/dist/elements/CodeEditor/types.js +3 -1
- package/dist/elements/CodeEditor/types.js.map +1 -1
- package/dist/elements/Collapsible/index.js +92 -29
- package/dist/elements/Collapsible/index.js.map +1 -1
- package/dist/elements/Collapsible/provider.js +7 -3
- package/dist/elements/Collapsible/provider.js.map +1 -1
- package/dist/elements/ColumnSelector/index.js +13 -5
- package/dist/elements/ColumnSelector/index.js.map +1 -1
- package/dist/elements/Combobox/index.js +43 -13
- package/dist/elements/Combobox/index.js.map +1 -1
- package/dist/elements/ConfirmationModal/index.js +49 -17
- package/dist/elements/ConfirmationModal/index.js.map +1 -1
- package/dist/elements/CopyLocaleData/index.js +73 -25
- package/dist/elements/CopyLocaleData/index.js.map +1 -1
- package/dist/elements/CopyToClipboard/index.js +18 -6
- package/dist/elements/CopyToClipboard/index.js.map +1 -1
- package/dist/elements/DatePicker/DatePicker.js +42 -13
- package/dist/elements/DatePicker/DatePicker.js.map +1 -1
- package/dist/elements/DatePicker/getFormattedLocale.js +1 -0
- package/dist/elements/DatePicker/getFormattedLocale.js.map +1 -1
- package/dist/elements/DatePicker/index.js +19 -7
- package/dist/elements/DatePicker/index.js.map +1 -1
- package/dist/elements/DefaultListViewTabs/index.js +25 -9
- package/dist/elements/DefaultListViewTabs/index.js.map +1 -1
- package/dist/elements/DeleteDocument/index.js +49 -17
- package/dist/elements/DeleteDocument/index.js.map +1 -1
- package/dist/elements/DeleteMany/index.js +98 -26
- package/dist/elements/DeleteMany/index.js.map +1 -1
- package/dist/elements/DocumentControls/index.js +304 -96
- package/dist/elements/DocumentControls/index.js.map +1 -1
- package/dist/elements/DocumentDrawer/DrawerContent.js +12 -4
- package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/DocumentDrawer/DrawerHeader/index.js +59 -19
- package/dist/elements/DocumentDrawer/DrawerHeader/index.js.map +1 -1
- package/dist/elements/DocumentDrawer/Provider.js +12 -4
- package/dist/elements/DocumentDrawer/Provider.js.map +1 -1
- package/dist/elements/DocumentDrawer/index.js +32 -10
- package/dist/elements/DocumentDrawer/index.js.map +1 -1
- package/dist/elements/DocumentDrawer/types.js +11 -1
- package/dist/elements/DocumentDrawer/types.js.map +1 -1
- package/dist/elements/DocumentFields/index.js +54 -18
- package/dist/elements/DocumentFields/index.js.map +1 -1
- package/dist/elements/DocumentLocked/index.js +73 -25
- package/dist/elements/DocumentLocked/index.js.map +1 -1
- package/dist/elements/DocumentTakeOver/index.js +49 -17
- package/dist/elements/DocumentTakeOver/index.js.map +1 -1
- package/dist/elements/DraggableSortable/DraggableSortableItem/index.js +7 -3
- package/dist/elements/DraggableSortable/DraggableSortableItem/index.js.map +1 -1
- package/dist/elements/DraggableSortable/index.js +19 -7
- package/dist/elements/DraggableSortable/index.js.map +1 -1
- package/dist/elements/DraggableSortable/useDraggableSortable/index.js +1 -0
- package/dist/elements/DraggableSortable/useDraggableSortable/index.js.map +1 -1
- package/dist/elements/Drawer/index.js +80 -26
- package/dist/elements/Drawer/index.js.map +1 -1
- package/dist/elements/DrawerActionHeader/index.js +37 -13
- package/dist/elements/DrawerActionHeader/index.js.map +1 -1
- package/dist/elements/DrawerContentContainer/index.js +7 -3
- package/dist/elements/DrawerContentContainer/index.js.map +1 -1
- package/dist/elements/Dropzone/index.js +7 -3
- package/dist/elements/Dropzone/index.js.map +1 -1
- package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js +61 -21
- package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js.map +1 -1
- package/dist/elements/DuplicateDocument/index.js +25 -9
- package/dist/elements/DuplicateDocument/index.js.map +1 -1
- package/dist/elements/EditMany/DrawerContent.js +146 -44
- package/dist/elements/EditMany/DrawerContent.js.map +1 -1
- package/dist/elements/EditMany/index.js +40 -14
- package/dist/elements/EditMany/index.js.map +1 -1
- package/dist/elements/EditUpload/index.js +232 -76
- package/dist/elements/EditUpload/index.js.map +1 -1
- package/dist/elements/EmailAndUsername/index.js +31 -11
- package/dist/elements/EmailAndUsername/index.js.map +1 -1
- package/dist/elements/ErrorPill/index.js +19 -7
- package/dist/elements/ErrorPill/index.js.map +1 -1
- package/dist/elements/FieldDiffContainer/index.js +25 -9
- package/dist/elements/FieldDiffContainer/index.js.map +1 -1
- package/dist/elements/FieldDiffLabel/index.js +7 -3
- package/dist/elements/FieldDiffLabel/index.js.map +1 -1
- package/dist/elements/FieldSelect/index.js +19 -7
- package/dist/elements/FieldSelect/index.js.map +1 -1
- package/dist/elements/FileDetails/DraggableFileDetails/index.js +70 -22
- package/dist/elements/FileDetails/DraggableFileDetails/index.js.map +1 -1
- package/dist/elements/FileDetails/FileMeta/index.js +43 -15
- package/dist/elements/FileDetails/FileMeta/index.js.map +1 -1
- package/dist/elements/FileDetails/StaticFileDetails/index.js +43 -15
- package/dist/elements/FileDetails/StaticFileDetails/index.js.map +1 -1
- package/dist/elements/FileDetails/index.js +13 -5
- package/dist/elements/FileDetails/index.js.map +1 -1
- package/dist/elements/FolderView/Breadcrumbs/index.js +31 -11
- package/dist/elements/FolderView/Breadcrumbs/index.js.map +1 -1
- package/dist/elements/FolderView/BrowseByFolderButton/index.js +12 -4
- package/dist/elements/FolderView/BrowseByFolderButton/index.js.map +1 -1
- package/dist/elements/FolderView/Cell/index.client.js +7 -3
- package/dist/elements/FolderView/Cell/index.client.js.map +1 -1
- package/dist/elements/FolderView/Cell/index.server.js +7 -3
- package/dist/elements/FolderView/Cell/index.server.js.map +1 -1
- package/dist/elements/FolderView/ColoredFolderIcon/index.js +7 -3
- package/dist/elements/FolderView/ColoredFolderIcon/index.js.map +1 -1
- package/dist/elements/FolderView/CurrentFolderActions/index.js +68 -24
- package/dist/elements/FolderView/CurrentFolderActions/index.js.map +1 -1
- package/dist/elements/FolderView/DragOverlaySelection/index.js +31 -11
- package/dist/elements/FolderView/DragOverlaySelection/index.js.map +1 -1
- package/dist/elements/FolderView/DraggableTableRow/index.js +25 -9
- package/dist/elements/FolderView/DraggableTableRow/index.js.map +1 -1
- package/dist/elements/FolderView/DraggableWithClick/index.js +7 -3
- package/dist/elements/FolderView/DraggableWithClick/index.js.map +1 -1
- package/dist/elements/FolderView/Drawers/EditFolderAction/index.js +15 -7
- package/dist/elements/FolderView/Drawers/EditFolderAction/index.js.map +1 -1
- package/dist/elements/FolderView/Drawers/MoveToFolder/index.js +189 -62
- package/dist/elements/FolderView/Drawers/MoveToFolder/index.js.map +1 -1
- package/dist/elements/FolderView/FilterFolderTypePill/index.js +19 -7
- package/dist/elements/FolderView/FilterFolderTypePill/index.js.map +1 -1
- package/dist/elements/FolderView/FolderField/index.server.js +7 -3
- package/dist/elements/FolderView/FolderField/index.server.js.map +1 -1
- package/dist/elements/FolderView/FolderFileCard/index.js +104 -31
- package/dist/elements/FolderView/FolderFileCard/index.js.map +1 -1
- package/dist/elements/FolderView/FolderFileTable/index.js +49 -17
- package/dist/elements/FolderView/FolderFileTable/index.js.map +1 -1
- package/dist/elements/FolderView/FolderTypeField/index.js +7 -3
- package/dist/elements/FolderView/FolderTypeField/index.js.map +1 -1
- package/dist/elements/FolderView/ItemCardGrid/index.js +21 -9
- package/dist/elements/FolderView/ItemCardGrid/index.js.map +1 -1
- package/dist/elements/FolderView/MoveDocToFolder/index.js +28 -13
- package/dist/elements/FolderView/MoveDocToFolder/index.js.map +1 -1
- package/dist/elements/FolderView/SimpleTable/index.js +67 -23
- package/dist/elements/FolderView/SimpleTable/index.js.map +1 -1
- package/dist/elements/FolderView/SortByPill/index.js +86 -30
- package/dist/elements/FolderView/SortByPill/index.js.map +1 -1
- package/dist/elements/FolderView/ToggleViewButtons/index.js +25 -9
- package/dist/elements/FolderView/ToggleViewButtons/index.js.map +1 -1
- package/dist/elements/FullscreenModal/index.js +7 -3
- package/dist/elements/FullscreenModal/index.js.map +1 -1
- package/dist/elements/GenerateConfirmation/index.js +31 -11
- package/dist/elements/GenerateConfirmation/index.js.map +1 -1
- package/dist/elements/GroupByBuilder/index.js +43 -15
- package/dist/elements/GroupByBuilder/index.js.map +1 -1
- package/dist/elements/Gutter/index.js +7 -3
- package/dist/elements/Gutter/index.js.map +1 -1
- package/dist/elements/HTMLDiff/diff/index.js +24 -3
- package/dist/elements/HTMLDiff/diff/index.js.map +1 -1
- package/dist/elements/HTMLDiff/index.js +13 -5
- package/dist/elements/HTMLDiff/index.js.map +1 -1
- package/dist/elements/Hamburger/index.js +35 -11
- package/dist/elements/Hamburger/index.js.map +1 -1
- package/dist/elements/HydrateAuthProvider/index.js +6 -1
- package/dist/elements/HydrateAuthProvider/index.js.map +1 -1
- package/dist/elements/IDLabel/index.js +13 -5
- package/dist/elements/IDLabel/index.js.map +1 -1
- package/dist/elements/LeaveWithoutSaving/index.js +13 -5
- package/dist/elements/LeaveWithoutSaving/index.js.map +1 -1
- package/dist/elements/LeaveWithoutSaving/usePreventLeave.js +3 -1
- package/dist/elements/LeaveWithoutSaving/usePreventLeave.js.map +1 -1
- package/dist/elements/Link/index.js +12 -4
- package/dist/elements/Link/index.js.map +1 -1
- package/dist/elements/ListControls/index.js +126 -42
- package/dist/elements/ListControls/index.js.map +1 -1
- package/dist/elements/ListControls/types.js +7 -1
- package/dist/elements/ListControls/types.js.map +1 -1
- package/dist/elements/ListDrawer/DrawerContent.js +20 -8
- package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/ListDrawer/Provider.js +15 -4
- package/dist/elements/ListDrawer/Provider.js.map +1 -1
- package/dist/elements/ListDrawer/index.js +34 -11
- package/dist/elements/ListDrawer/index.js.map +1 -1
- package/dist/elements/ListDrawer/types.js +5 -1
- package/dist/elements/ListDrawer/types.js.map +1 -1
- package/dist/elements/ListHeader/DrawerRelationshipSelect/index.js +19 -7
- package/dist/elements/ListHeader/DrawerRelationshipSelect/index.js.map +1 -1
- package/dist/elements/ListHeader/DrawerTitleActions/ListDrawerCreateNewDocButton.js +13 -5
- package/dist/elements/ListHeader/DrawerTitleActions/ListDrawerCreateNewDocButton.js.map +1 -1
- package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js +12 -4
- package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js.map +1 -1
- package/dist/elements/ListHeader/TitleActions/ListCreateNewDocButton.js +7 -3
- package/dist/elements/ListHeader/TitleActions/ListCreateNewDocButton.js.map +1 -1
- package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.js +48 -16
- package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.js.map +1 -1
- package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +37 -13
- package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -1
- package/dist/elements/ListHeader/index.js +43 -15
- package/dist/elements/ListHeader/index.js.map +1 -1
- package/dist/elements/ListSelection/index.js +66 -20
- package/dist/elements/ListSelection/index.js.map +1 -1
- package/dist/elements/LivePreview/Device/index.js +13 -5
- package/dist/elements/LivePreview/Device/index.js.map +1 -1
- package/dist/elements/LivePreview/DeviceContainer/index.js +7 -3
- package/dist/elements/LivePreview/DeviceContainer/index.js.map +1 -1
- package/dist/elements/LivePreview/IFrame/index.js +7 -3
- package/dist/elements/LivePreview/IFrame/index.js.map +1 -1
- package/dist/elements/LivePreview/Toggler/index.js +13 -5
- package/dist/elements/LivePreview/Toggler/index.js.map +1 -1
- package/dist/elements/LivePreview/Toolbar/Controls/index.js +137 -45
- package/dist/elements/LivePreview/Toolbar/Controls/index.js.map +1 -1
- package/dist/elements/LivePreview/Toolbar/SizeInput/index.js +7 -3
- package/dist/elements/LivePreview/Toolbar/SizeInput/index.js.map +1 -1
- package/dist/elements/LivePreview/Toolbar/index.js +48 -16
- package/dist/elements/LivePreview/Toolbar/index.js.map +1 -1
- package/dist/elements/LivePreview/ToolbarArea/index.js +7 -3
- package/dist/elements/LivePreview/ToolbarArea/index.js.map +1 -1
- package/dist/elements/LivePreview/Window/index.js +41 -13
- package/dist/elements/LivePreview/Window/index.js.map +1 -1
- package/dist/elements/Loading/index.js +55 -19
- package/dist/elements/Loading/index.js.map +1 -1
- package/dist/elements/LoadingOverlay/index.js +13 -5
- package/dist/elements/LoadingOverlay/index.js.map +1 -1
- package/dist/elements/Localizer/LocalizerLabel/index.js +31 -11
- package/dist/elements/Localizer/LocalizerLabel/index.js.map +1 -1
- package/dist/elements/Localizer/index.js +47 -15
- package/dist/elements/Localizer/index.js.map +1 -1
- package/dist/elements/Locked/index.js +18 -6
- package/dist/elements/Locked/index.js.map +1 -1
- package/dist/elements/Logout/index.js +17 -5
- package/dist/elements/Logout/index.js.map +1 -1
- package/dist/elements/Nav/NavToggler/index.js +7 -3
- package/dist/elements/Nav/NavToggler/index.js.map +1 -1
- package/dist/elements/Nav/context.js +7 -3
- package/dist/elements/Nav/context.js.map +1 -1
- package/dist/elements/NavGroup/index.js +49 -17
- package/dist/elements/NavGroup/index.js.map +1 -1
- package/dist/elements/NoListResults/index.js +19 -7
- package/dist/elements/NoListResults/index.js.map +1 -1
- package/dist/elements/PageControls/GroupByPageControls.js +7 -3
- package/dist/elements/PageControls/GroupByPageControls.js.map +1 -1
- package/dist/elements/PageControls/index.js +37 -13
- package/dist/elements/PageControls/index.js.map +1 -1
- package/dist/elements/Pagination/ClickableArrow/index.js +12 -4
- package/dist/elements/Pagination/ClickableArrow/index.js.map +1 -1
- package/dist/elements/Pagination/Page/index.js +7 -3
- package/dist/elements/Pagination/Page/index.js.map +1 -1
- package/dist/elements/Pagination/Separator/index.js +7 -3
- package/dist/elements/Pagination/Separator/index.js.map +1 -1
- package/dist/elements/Pagination/index.js +19 -7
- package/dist/elements/Pagination/index.js.map +1 -1
- package/dist/elements/PerPage/index.js +61 -21
- package/dist/elements/PerPage/index.js.map +1 -1
- package/dist/elements/PermanentlyDeleteButton/index.js +31 -11
- package/dist/elements/PermanentlyDeleteButton/index.js.map +1 -1
- package/dist/elements/Pill/index.js +42 -15
- package/dist/elements/Pill/index.js.map +1 -1
- package/dist/elements/PillSelector/index.js +34 -10
- package/dist/elements/PillSelector/index.js.map +1 -1
- package/dist/elements/Popup/PopupButtonList/index.js +25 -9
- package/dist/elements/Popup/PopupButtonList/index.js.map +1 -1
- package/dist/elements/Popup/PopupDivider/index.js +7 -3
- package/dist/elements/Popup/PopupDivider/index.js.map +1 -1
- package/dist/elements/Popup/PopupGroupLabel/index.js +7 -3
- package/dist/elements/Popup/PopupGroupLabel/index.js.map +1 -1
- package/dist/elements/Popup/PopupTrigger/index.js +13 -5
- package/dist/elements/Popup/PopupTrigger/index.js.map +1 -1
- package/dist/elements/Popup/index.js +60 -20
- package/dist/elements/Popup/index.js.map +1 -1
- package/dist/elements/PreviewButton/index.js +12 -4
- package/dist/elements/PreviewButton/index.js.map +1 -1
- package/dist/elements/PreviewSizes/index.js +97 -33
- package/dist/elements/PreviewSizes/index.js.map +1 -1
- package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.js +67 -23
- package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.js.map +1 -1
- package/dist/elements/PublishButton/ScheduleDrawer/index.js +165 -53
- package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
- package/dist/elements/PublishButton/index.js +49 -17
- package/dist/elements/PublishButton/index.js.map +1 -1
- package/dist/elements/PublishMany/DrawerContent.js +7 -3
- package/dist/elements/PublishMany/DrawerContent.js.map +1 -1
- package/dist/elements/PublishMany/index.js +28 -10
- package/dist/elements/PublishMany/index.js.map +1 -1
- package/dist/elements/QueryPresets/QueryPresetBar/index.js +109 -38
- package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
- package/dist/elements/QueryPresets/QueryPresetToggler/index.js +42 -14
- package/dist/elements/QueryPresets/QueryPresetToggler/index.js.map +1 -1
- package/dist/elements/QueryPresets/cells/AccessCell/index.js +25 -9
- package/dist/elements/QueryPresets/cells/AccessCell/index.js.map +1 -1
- package/dist/elements/QueryPresets/cells/ColumnsCell/index.js +13 -5
- package/dist/elements/QueryPresets/cells/ColumnsCell/index.js.map +1 -1
- package/dist/elements/QueryPresets/cells/GroupByCell/index.js +13 -5
- package/dist/elements/QueryPresets/cells/GroupByCell/index.js.map +1 -1
- package/dist/elements/QueryPresets/cells/WhereCell/index.js +7 -3
- package/dist/elements/QueryPresets/cells/WhereCell/index.js.map +1 -1
- package/dist/elements/QueryPresets/fields/ColumnsField/index.js +25 -9
- package/dist/elements/QueryPresets/fields/ColumnsField/index.js.map +1 -1
- package/dist/elements/QueryPresets/fields/GroupByField/index.js +31 -11
- package/dist/elements/QueryPresets/fields/GroupByField/index.js.map +1 -1
- package/dist/elements/QueryPresets/fields/WhereField/index.js +79 -27
- package/dist/elements/QueryPresets/fields/WhereField/index.js.map +1 -1
- package/dist/elements/ReactSelect/ClearIndicator/index.js +13 -5
- package/dist/elements/ReactSelect/ClearIndicator/index.js.map +1 -1
- package/dist/elements/ReactSelect/Control/index.js +13 -5
- package/dist/elements/ReactSelect/Control/index.js.map +1 -1
- package/dist/elements/ReactSelect/DropdownIndicator/index.js +13 -5
- package/dist/elements/ReactSelect/DropdownIndicator/index.js.map +1 -1
- package/dist/elements/ReactSelect/Input/index.js +13 -5
- package/dist/elements/ReactSelect/Input/index.js.map +1 -1
- package/dist/elements/ReactSelect/MultiValue/index.js +13 -5
- package/dist/elements/ReactSelect/MultiValue/index.js.map +1 -1
- package/dist/elements/ReactSelect/MultiValueLabel/index.js +13 -5
- package/dist/elements/ReactSelect/MultiValueLabel/index.js.map +1 -1
- package/dist/elements/ReactSelect/MultiValueRemove/index.js +19 -7
- package/dist/elements/ReactSelect/MultiValueRemove/index.js.map +1 -1
- package/dist/elements/ReactSelect/SingleValue/index.js +13 -5
- package/dist/elements/ReactSelect/SingleValue/index.js.map +1 -1
- package/dist/elements/ReactSelect/ValueContainer/index.js +19 -7
- package/dist/elements/ReactSelect/ValueContainer/index.js.map +1 -1
- package/dist/elements/ReactSelect/index.js +45 -17
- package/dist/elements/ReactSelect/index.js.map +1 -1
- package/dist/elements/ReactSelect/types.js +8 -1
- package/dist/elements/ReactSelect/types.js.map +1 -1
- package/dist/elements/RelationshipTable/AddNewButton.js +37 -13
- package/dist/elements/RelationshipTable/AddNewButton.js.map +1 -1
- package/dist/elements/RelationshipTable/Pagination.js +7 -3
- package/dist/elements/RelationshipTable/Pagination.js.map +1 -1
- package/dist/elements/RelationshipTable/cells/DrawerLink/index.js +24 -8
- package/dist/elements/RelationshipTable/cells/DrawerLink/index.js.map +1 -1
- package/dist/elements/RelationshipTable/index.js +121 -41
- package/dist/elements/RelationshipTable/index.js.map +1 -1
- package/dist/elements/RenderComponent/index.js +19 -7
- package/dist/elements/RenderComponent/index.js.map +1 -1
- package/dist/elements/RenderIfInViewport/index.js +7 -3
- package/dist/elements/RenderIfInViewport/index.js.map +1 -1
- package/dist/elements/RenderServerComponent/index.js +13 -5
- package/dist/elements/RenderServerComponent/index.js.map +1 -1
- package/dist/elements/RenderTitle/index.js +25 -9
- package/dist/elements/RenderTitle/index.js.map +1 -1
- package/dist/elements/RestoreButton/index.js +49 -17
- package/dist/elements/RestoreButton/index.js.map +1 -1
- package/dist/elements/RestoreMany/index.js +38 -13
- package/dist/elements/RestoreMany/index.js.map +1 -1
- package/dist/elements/SaveButton/index.js +8 -5
- package/dist/elements/SaveButton/index.js.map +1 -1
- package/dist/elements/SaveDraftButton/index.js +8 -5
- package/dist/elements/SaveDraftButton/index.js.map +1 -1
- package/dist/elements/SearchBar/index.js +24 -8
- package/dist/elements/SearchBar/index.js.map +1 -1
- package/dist/elements/SearchFilter/index.js +13 -5
- package/dist/elements/SearchFilter/index.js.map +1 -1
- package/dist/elements/SearchFilter/types.js +19 -1
- package/dist/elements/SearchFilter/types.js.map +1 -1
- package/dist/elements/SelectAll/index.js +7 -3
- package/dist/elements/SelectAll/index.js.map +1 -1
- package/dist/elements/SelectMany/index.js +7 -3
- package/dist/elements/SelectMany/index.js.map +1 -1
- package/dist/elements/SelectRow/index.js +13 -5
- package/dist/elements/SelectRow/index.js.map +1 -1
- package/dist/elements/ShimmerEffect/index.js +31 -11
- package/dist/elements/ShimmerEffect/index.js.map +1 -1
- package/dist/elements/SortColumn/index.js +48 -16
- package/dist/elements/SortColumn/index.js.map +1 -1
- package/dist/elements/SortComplex/index.js +55 -19
- package/dist/elements/SortComplex/index.js.map +1 -1
- package/dist/elements/SortHeader/index.js +24 -8
- package/dist/elements/SortHeader/index.js.map +1 -1
- package/dist/elements/SortRow/index.js +13 -5
- package/dist/elements/SortRow/index.js.map +1 -1
- package/dist/elements/Status/index.js +63 -23
- package/dist/elements/Status/index.js.map +1 -1
- package/dist/elements/StayLoggedIn/index.js +7 -3
- package/dist/elements/StayLoggedIn/index.js.map +1 -1
- package/dist/elements/StepNav/context.js +7 -3
- package/dist/elements/StepNav/context.js.map +1 -1
- package/dist/elements/StepNav/index.js +109 -33
- package/dist/elements/StepNav/index.js.map +1 -1
- package/dist/elements/StickyToolbar/index.js +7 -3
- package/dist/elements/StickyToolbar/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Array/index.js +7 -3
- package/dist/elements/Table/DefaultCell/fields/Array/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Blocks/index.js +7 -3
- package/dist/elements/Table/DefaultCell/fields/Blocks/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Checkbox/index.js +13 -5
- package/dist/elements/Table/DefaultCell/fields/Checkbox/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Code/index.js +13 -5
- package/dist/elements/Table/DefaultCell/fields/Code/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Date/index.js +7 -3
- package/dist/elements/Table/DefaultCell/fields/Date/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/File/index.js +21 -9
- package/dist/elements/Table/DefaultCell/fields/File/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/JSON/index.js +13 -5
- package/dist/elements/Table/DefaultCell/fields/JSON/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Relationship/index.js +19 -7
- package/dist/elements/Table/DefaultCell/fields/Relationship/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Select/index.js +11 -7
- package/dist/elements/Table/DefaultCell/fields/Select/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Textarea/index.js +7 -3
- package/dist/elements/Table/DefaultCell/fields/Textarea/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/index.js +45 -16
- package/dist/elements/Table/DefaultCell/index.js.map +1 -1
- package/dist/elements/Table/OrderableRow.js +25 -9
- package/dist/elements/Table/OrderableRow.js.map +1 -1
- package/dist/elements/Table/OrderableRowDragPreview.js +19 -7
- package/dist/elements/Table/OrderableRowDragPreview.js.map +1 -1
- package/dist/elements/Table/OrderableTable.js +79 -27
- package/dist/elements/Table/OrderableTable.js.map +1 -1
- package/dist/elements/Table/RelationshipProvider/index.js +10 -3
- package/dist/elements/Table/RelationshipProvider/index.js.map +1 -1
- package/dist/elements/Table/index.js +55 -19
- package/dist/elements/Table/index.js.map +1 -1
- package/dist/elements/Thumbnail/createThumbnail.js +12 -12
- package/dist/elements/Thumbnail/createThumbnail.js.map +1 -1
- package/dist/elements/Thumbnail/index.js +47 -15
- package/dist/elements/Thumbnail/index.js.map +1 -1
- package/dist/elements/ThumbnailCard/index.js +19 -7
- package/dist/elements/ThumbnailCard/index.js.map +1 -1
- package/dist/elements/TimezonePicker/index.js +19 -7
- package/dist/elements/TimezonePicker/index.js.map +1 -1
- package/dist/elements/Toasts/fieldErrors.js +24 -8
- package/dist/elements/Toasts/fieldErrors.js.map +1 -1
- package/dist/elements/Tooltip/index.js +34 -12
- package/dist/elements/Tooltip/index.js.map +1 -1
- package/dist/elements/Translation/index.js +25 -9
- package/dist/elements/Translation/index.js.map +1 -1
- package/dist/elements/TrashBanner/index.js +18 -6
- package/dist/elements/TrashBanner/index.js.map +1 -1
- package/dist/elements/UnpublishMany/DrawerContent.js +7 -3
- package/dist/elements/UnpublishMany/DrawerContent.js.map +1 -1
- package/dist/elements/UnpublishMany/index.js +28 -10
- package/dist/elements/UnpublishMany/index.js.map +1 -1
- package/dist/elements/Upload/index.js +235 -83
- package/dist/elements/Upload/index.js.map +1 -1
- package/dist/elements/ViewDescription/index.js +7 -3
- package/dist/elements/ViewDescription/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Date/index.js +13 -5
- package/dist/elements/WhereBuilder/Condition/Date/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/DefaultFilter/index.js +37 -13
- package/dist/elements/WhereBuilder/Condition/DefaultFilter/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Number/index.js +13 -4
- package/dist/elements/WhereBuilder/Condition/Number/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Relationship/index.js +23 -12
- package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Select/index.js +7 -3
- package/dist/elements/WhereBuilder/Condition/Select/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Text/index.js +13 -4
- package/dist/elements/WhereBuilder/Condition/Text/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/index.js +73 -25
- package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
- package/dist/elements/WhereBuilder/index.js +87 -31
- package/dist/elements/WhereBuilder/index.js.map +1 -1
- package/dist/elements/WithServerSideProps/index.js +7 -3
- package/dist/elements/WithServerSideProps/index.js.map +1 -1
- package/dist/elements/withMergedProps/index.js +7 -3
- package/dist/elements/withMergedProps/index.js.map +1 -1
- package/dist/exports/client/index.js +26 -2
- package/dist/exports/client/index.js.map +1 -1
- package/dist/exports/shared/index.js +2 -1
- package/dist/exports/shared/index.js.map +1 -1
- package/dist/fields/Array/ArrayRow.js +52 -16
- package/dist/fields/Array/ArrayRow.js.map +1 -1
- package/dist/fields/Array/index.js +169 -57
- package/dist/fields/Array/index.js.map +1 -1
- package/dist/fields/Blocks/BlockRow.js +72 -24
- package/dist/fields/Blocks/BlockRow.js.map +1 -1
- package/dist/fields/Blocks/BlockSelector/BlockSearch/index.js +18 -6
- package/dist/fields/Blocks/BlockSelector/BlockSearch/index.js.map +1 -1
- package/dist/fields/Blocks/BlockSelector/index.js +74 -24
- package/dist/fields/Blocks/BlockSelector/index.js.map +1 -1
- package/dist/fields/Blocks/BlocksDrawer/index.js +13 -5
- package/dist/fields/Blocks/BlocksDrawer/index.js.map +1 -1
- package/dist/fields/Blocks/RowActions.js +19 -7
- package/dist/fields/Blocks/RowActions.js.map +1 -1
- package/dist/fields/Blocks/SectionTitle/index.js +13 -5
- package/dist/fields/Blocks/SectionTitle/index.js.map +1 -1
- package/dist/fields/Blocks/index.js +187 -63
- package/dist/fields/Blocks/index.js.map +1 -1
- package/dist/fields/Checkbox/Input.js +47 -15
- package/dist/fields/Checkbox/Input.js.map +1 -1
- package/dist/fields/Checkbox/index.js +37 -13
- package/dist/fields/Checkbox/index.js.map +1 -1
- package/dist/fields/Code/index.js +55 -19
- package/dist/fields/Code/index.js.map +1 -1
- package/dist/fields/Collapsible/index.js +61 -21
- package/dist/fields/Collapsible/index.js.map +1 -1
- package/dist/fields/ConfirmPassword/index.js +31 -11
- package/dist/fields/ConfirmPassword/index.js.map +1 -1
- package/dist/fields/DateTime/index.js +61 -21
- package/dist/fields/DateTime/index.js.map +1 -1
- package/dist/fields/Email/index.js +55 -19
- package/dist/fields/Email/index.js.map +1 -1
- package/dist/fields/FieldDescription/index.js +7 -3
- package/dist/fields/FieldDescription/index.js.map +1 -1
- package/dist/fields/FieldError/index.js +7 -3
- package/dist/fields/FieldError/index.js.map +1 -1
- package/dist/fields/FieldLabel/index.js +19 -7
- package/dist/fields/FieldLabel/index.js.map +1 -1
- package/dist/fields/Group/index.js +78 -26
- package/dist/fields/Group/index.js.map +1 -1
- package/dist/fields/Group/provider.js +7 -3
- package/dist/fields/Group/provider.js.map +1 -1
- package/dist/fields/Hidden/index.js +7 -3
- package/dist/fields/Hidden/index.js.map +1 -1
- package/dist/fields/JSON/index.js +55 -19
- package/dist/fields/JSON/index.js.map +1 -1
- package/dist/fields/Join/index.js +49 -17
- package/dist/fields/Join/index.js.map +1 -1
- package/dist/fields/Number/index.js +71 -25
- package/dist/fields/Number/index.js.map +1 -1
- package/dist/fields/Password/index.js +7 -3
- package/dist/fields/Password/index.js.map +1 -1
- package/dist/fields/Password/input.js +61 -21
- package/dist/fields/Password/input.js.map +1 -1
- package/dist/fields/Password/types.js +11 -1
- package/dist/fields/Password/types.js.map +1 -1
- package/dist/fields/Point/index.js +97 -33
- package/dist/fields/Point/index.js.map +1 -1
- package/dist/fields/RadioGroup/Radio/index.js +31 -11
- package/dist/fields/RadioGroup/Radio/index.js.map +1 -1
- package/dist/fields/RadioGroup/index.js +67 -23
- package/dist/fields/RadioGroup/index.js.map +1 -1
- package/dist/fields/Relationship/Input.js +84 -28
- package/dist/fields/Relationship/Input.js.map +1 -1
- package/dist/fields/Relationship/index.js +7 -3
- package/dist/fields/Relationship/index.js.map +1 -1
- package/dist/fields/Relationship/select-components/MultiValueLabel/index.js +47 -16
- package/dist/fields/Relationship/select-components/MultiValueLabel/index.js.map +1 -1
- package/dist/fields/Relationship/select-components/SingleValue/index.js +52 -17
- package/dist/fields/Relationship/select-components/SingleValue/index.js.map +1 -1
- package/dist/fields/Row/index.js +19 -7
- package/dist/fields/Row/index.js.map +1 -1
- package/dist/fields/Row/provider.js +7 -3
- package/dist/fields/Row/provider.js.map +1 -1
- package/dist/fields/Select/Input.js +55 -19
- package/dist/fields/Select/Input.js.map +1 -1
- package/dist/fields/Select/index.js +7 -3
- package/dist/fields/Select/index.js.map +1 -1
- package/dist/fields/Slug/index.js +37 -13
- package/dist/fields/Slug/index.js.map +1 -1
- package/dist/fields/Tabs/Tab/index.js +25 -9
- package/dist/fields/Tabs/Tab/index.js.map +1 -1
- package/dist/fields/Tabs/index.js +67 -23
- package/dist/fields/Tabs/index.js.map +1 -1
- package/dist/fields/Tabs/provider.js +7 -3
- package/dist/fields/Tabs/provider.js.map +1 -1
- package/dist/fields/Text/Input.js +60 -20
- package/dist/fields/Text/Input.js.map +1 -1
- package/dist/fields/Text/index.js +10 -5
- package/dist/fields/Text/index.js.map +1 -1
- package/dist/fields/Textarea/Input.js +61 -21
- package/dist/fields/Textarea/Input.js.map +1 -1
- package/dist/fields/Textarea/index.js +7 -3
- package/dist/fields/Textarea/index.js.map +1 -1
- package/dist/fields/Upload/HasMany/index.js +48 -16
- package/dist/fields/Upload/HasMany/index.js.map +1 -1
- package/dist/fields/Upload/HasOne/index.js +13 -5
- package/dist/fields/Upload/HasOne/index.js.map +1 -1
- package/dist/fields/Upload/Input.js +154 -56
- package/dist/fields/Upload/Input.js.map +1 -1
- package/dist/fields/Upload/RelationshipContent/index.js +73 -25
- package/dist/fields/Upload/RelationshipContent/index.js.map +1 -1
- package/dist/fields/Upload/UploadCard/index.js +7 -3
- package/dist/fields/Upload/UploadCard/index.js.map +1 -1
- package/dist/fields/Upload/index.js +13 -5
- package/dist/fields/Upload/index.js.map +1 -1
- package/dist/fields/Upload/types.js +1 -0
- package/dist/fields/Upload/types.js.map +1 -1
- package/dist/fields/shared/index.js +2 -3
- package/dist/fields/shared/index.js.map +1 -1
- package/dist/forms/Form/fieldReducer.js +2 -1
- package/dist/forms/Form/fieldReducer.js.map +1 -1
- package/dist/forms/Form/index.js +78 -31
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/Form/mergeServerFormState.js +11 -3
- package/dist/forms/Form/mergeServerFormState.js.map +1 -1
- package/dist/forms/Form/reduceToSerializableFields.js +2 -2
- package/dist/forms/Form/reduceToSerializableFields.js.map +1 -1
- package/dist/forms/Form/types.js +52 -1
- package/dist/forms/Form/types.js.map +1 -1
- package/dist/forms/NullifyField/index.js +15 -6
- package/dist/forms/NullifyField/index.js.map +1 -1
- package/dist/forms/RenderFields/RenderField.js +138 -46
- package/dist/forms/RenderFields/RenderField.js.map +1 -1
- package/dist/forms/RenderFields/index.js +19 -7
- package/dist/forms/RenderFields/index.js.map +1 -1
- package/dist/forms/RowLabel/Context/index.js +7 -3
- package/dist/forms/RowLabel/Context/index.js.map +1 -1
- package/dist/forms/RowLabel/index.js +19 -7
- package/dist/forms/RowLabel/index.js.map +1 -1
- package/dist/forms/Submit/index.js +13 -5
- package/dist/forms/Submit/index.js.map +1 -1
- package/dist/forms/WatchChildErrors/index.js +6 -1
- package/dist/forms/WatchChildErrors/index.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +20 -0
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/index.js +33 -1
- package/dist/forms/fieldSchemasToFormState/index.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/isRowCollapsed.js +2 -2
- package/dist/forms/fieldSchemasToFormState/isRowCollapsed.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/iterateFields.js +16 -0
- package/dist/forms/fieldSchemasToFormState/iterateFields.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.js +21 -9
- package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js +22 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/types.js +5 -1
- package/dist/forms/fieldSchemasToFormState/types.js.map +1 -1
- package/dist/forms/useField/index.js +1 -0
- package/dist/forms/useField/index.js.map +1 -1
- package/dist/forms/useField/types.js +19 -1
- package/dist/forms/useField/types.js.map +1 -1
- package/dist/forms/withCondition/index.js +13 -5
- package/dist/forms/withCondition/index.js.map +1 -1
- package/dist/graphics/Account/Default/index.js +25 -9
- package/dist/graphics/Account/Default/index.js.map +1 -1
- package/dist/graphics/Account/Gravatar/index.js +7 -3
- package/dist/graphics/Account/Gravatar/index.js.map +1 -1
- package/dist/graphics/Account/index.js +12 -4
- package/dist/graphics/Account/index.js.map +1 -1
- package/dist/graphics/DefaultBlockImage/index.js +67 -23
- package/dist/graphics/DefaultBlockImage/index.js.map +1 -1
- package/dist/graphics/File/index.js +19 -7
- package/dist/graphics/File/index.js.map +1 -1
- package/dist/graphics/Icon/index.js +19 -7
- package/dist/graphics/Icon/index.js.map +1 -1
- package/dist/graphics/Logo/index.js +85 -29
- package/dist/graphics/Logo/index.js.map +1 -1
- package/dist/hooks/useControllableState.js +9 -1
- package/dist/hooks/useControllableState.js.map +1 -1
- package/dist/hooks/useDelayedRender.js +3 -1
- package/dist/hooks/useDelayedRender.js.map +1 -1
- package/dist/hooks/useHotkey.js +2 -2
- package/dist/hooks/useHotkey.js.map +1 -1
- package/dist/hooks/usePayloadAPI.js +3 -4
- package/dist/hooks/usePayloadAPI.js.map +1 -1
- package/dist/hooks/usePopupWindow.js +2 -2
- package/dist/hooks/usePopupWindow.js.map +1 -1
- package/dist/hooks/useQueue.js +15 -7
- package/dist/hooks/useQueue.js.map +1 -1
- package/dist/hooks/useResize.js +4 -3
- package/dist/hooks/useResize.js.map +1 -1
- package/dist/icons/Calendar/index.js +13 -5
- package/dist/icons/Calendar/index.js.map +1 -1
- package/dist/icons/Check/index.js +13 -5
- package/dist/icons/Check/index.js.map +1 -1
- package/dist/icons/Chevron/index.js +13 -5
- package/dist/icons/Chevron/index.js.map +1 -1
- package/dist/icons/CloseMenu/index.js +13 -5
- package/dist/icons/CloseMenu/index.js.map +1 -1
- package/dist/icons/CodeBlock/index.js +13 -5
- package/dist/icons/CodeBlock/index.js.map +1 -1
- package/dist/icons/Copy/index.js +13 -5
- package/dist/icons/Copy/index.js.map +1 -1
- package/dist/icons/Document/index.js +13 -5
- package/dist/icons/Document/index.js.map +1 -1
- package/dist/icons/Dots/index.js +22 -6
- package/dist/icons/Dots/index.js.map +1 -1
- package/dist/icons/DragHandle/index.js +43 -15
- package/dist/icons/DragHandle/index.js.map +1 -1
- package/dist/icons/Edit/index.js +13 -5
- package/dist/icons/Edit/index.js.map +1 -1
- package/dist/icons/ExternalLink/index.js +13 -5
- package/dist/icons/ExternalLink/index.js.map +1 -1
- package/dist/icons/Eye/index.js +36 -12
- package/dist/icons/Eye/index.js.map +1 -1
- package/dist/icons/Folder/index.js +13 -5
- package/dist/icons/Folder/index.js.map +1 -1
- package/dist/icons/Gear/index.js +19 -7
- package/dist/icons/Gear/index.js.map +1 -1
- package/dist/icons/GridView/index.js +31 -11
- package/dist/icons/GridView/index.js.map +1 -1
- package/dist/icons/Line/index.js +13 -5
- package/dist/icons/Line/index.js.map +1 -1
- package/dist/icons/Link/index.js +13 -5
- package/dist/icons/Link/index.js.map +1 -1
- package/dist/icons/ListView/index.js +13 -5
- package/dist/icons/ListView/index.js.map +1 -1
- package/dist/icons/Lock/index.js +19 -7
- package/dist/icons/Lock/index.js.map +1 -1
- package/dist/icons/LogOut/index.js +13 -5
- package/dist/icons/LogOut/index.js.map +1 -1
- package/dist/icons/Menu/index.js +13 -5
- package/dist/icons/Menu/index.js.map +1 -1
- package/dist/icons/MinimizeMaximize/index.js +18 -6
- package/dist/icons/MinimizeMaximize/index.js.map +1 -1
- package/dist/icons/More/index.js +25 -9
- package/dist/icons/More/index.js.map +1 -1
- package/dist/icons/MoveFolder/index.js +37 -13
- package/dist/icons/MoveFolder/index.js.map +1 -1
- package/dist/icons/People/index.js +13 -5
- package/dist/icons/People/index.js.map +1 -1
- package/dist/icons/Plus/index.js +13 -5
- package/dist/icons/Plus/index.js.map +1 -1
- package/dist/icons/Search/index.js +13 -5
- package/dist/icons/Search/index.js.map +1 -1
- package/dist/icons/Sort/index.js +25 -9
- package/dist/icons/Sort/index.js.map +1 -1
- package/dist/icons/Swap/index.js +13 -5
- package/dist/icons/Swap/index.js.map +1 -1
- package/dist/icons/ThreeDots/index.js +22 -6
- package/dist/icons/ThreeDots/index.js.map +1 -1
- package/dist/icons/Trash/index.js +13 -5
- package/dist/icons/Trash/index.js.map +1 -1
- package/dist/icons/X/index.js +13 -5
- package/dist/icons/X/index.js.map +1 -1
- package/dist/providers/Actions/index.js +7 -3
- package/dist/providers/Actions/index.js.map +1 -1
- package/dist/providers/Auth/index.js +42 -6
- package/dist/providers/Auth/index.js.map +1 -1
- package/dist/providers/ClickOutside/index.js +7 -3
- package/dist/providers/ClickOutside/index.js.map +1 -1
- package/dist/providers/ClientFunction/index.js +13 -5
- package/dist/providers/ClientFunction/index.js.map +1 -1
- package/dist/providers/Config/index.js +23 -6
- package/dist/providers/Config/index.js.map +1 -1
- package/dist/providers/DocumentEvents/index.js +7 -3
- package/dist/providers/DocumentEvents/index.js.map +1 -1
- package/dist/providers/DocumentInfo/index.js +31 -16
- package/dist/providers/DocumentInfo/index.js.map +1 -1
- package/dist/providers/DocumentInfo/types.js +25 -1
- package/dist/providers/DocumentInfo/types.js.map +1 -1
- package/dist/providers/DocumentTitle/index.js +7 -3
- package/dist/providers/DocumentTitle/index.js.map +1 -1
- package/dist/providers/EditDepth/index.js +7 -3
- package/dist/providers/EditDepth/index.js.map +1 -1
- package/dist/providers/EntityVisibility/index.js +7 -3
- package/dist/providers/EntityVisibility/index.js.map +1 -1
- package/dist/providers/Folders/index.js +51 -5
- package/dist/providers/Folders/index.js.map +1 -1
- package/dist/providers/ListQuery/index.js +13 -5
- package/dist/providers/ListQuery/index.js.map +1 -1
- package/dist/providers/ListQuery/types.js +5 -1
- package/dist/providers/ListQuery/types.js.map +1 -1
- package/dist/providers/LivePreview/context.js +11 -1
- package/dist/providers/LivePreview/context.js.map +1 -1
- package/dist/providers/LivePreview/index.js +20 -9
- package/dist/providers/LivePreview/index.js.map +1 -1
- package/dist/providers/Locale/index.js +13 -5
- package/dist/providers/Locale/index.js.map +1 -1
- package/dist/providers/Operation/index.js +7 -3
- package/dist/providers/Operation/index.js.map +1 -1
- package/dist/providers/Params/index.js +7 -3
- package/dist/providers/Params/index.js.map +1 -1
- package/dist/providers/Preferences/index.js +14 -5
- package/dist/providers/Preferences/index.js.map +1 -1
- package/dist/providers/Root/index.js +154 -50
- package/dist/providers/Root/index.js.map +1 -1
- package/dist/providers/RouteCache/index.js +7 -3
- package/dist/providers/RouteCache/index.js.map +1 -1
- package/dist/providers/RouteTransition/ProgressBar/index.js +13 -5
- package/dist/providers/RouteTransition/ProgressBar/index.js.map +1 -1
- package/dist/providers/RouteTransition/index.js +16 -12
- package/dist/providers/RouteTransition/index.js.map +1 -1
- package/dist/providers/SearchParams/index.js +7 -3
- package/dist/providers/SearchParams/index.js.map +1 -1
- package/dist/providers/Selection/index.js +14 -5
- package/dist/providers/Selection/index.js.map +1 -1
- package/dist/providers/ServerFunctions/index.js +32 -25
- package/dist/providers/ServerFunctions/index.js.map +1 -1
- package/dist/providers/TableColumns/RenderDefaultCell/index.js +13 -5
- package/dist/providers/TableColumns/RenderDefaultCell/index.js.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/index.js +17 -12
- package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.js +17 -8
- package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
- package/dist/providers/TableColumns/index.js +7 -3
- package/dist/providers/TableColumns/index.js.map +1 -1
- package/dist/providers/TableColumns/types.js +17 -1
- package/dist/providers/TableColumns/types.js.map +1 -1
- package/dist/providers/Theme/index.js +7 -3
- package/dist/providers/Theme/index.js.map +1 -1
- package/dist/providers/ToastContainer/icons/Error.js +19 -7
- package/dist/providers/ToastContainer/icons/Error.js.map +1 -1
- package/dist/providers/ToastContainer/icons/Info.js +19 -7
- package/dist/providers/ToastContainer/icons/Info.js.map +1 -1
- package/dist/providers/ToastContainer/icons/Success.js +19 -7
- package/dist/providers/ToastContainer/icons/Success.js.map +1 -1
- package/dist/providers/ToastContainer/icons/Warning.js +19 -7
- package/dist/providers/ToastContainer/icons/Warning.js.map +1 -1
- package/dist/providers/ToastContainer/index.js +27 -7
- package/dist/providers/ToastContainer/index.js.map +1 -1
- package/dist/providers/Translation/index.js +7 -3
- package/dist/providers/Translation/index.js.map +1 -1
- package/dist/providers/UploadControls/index.js +7 -3
- package/dist/providers/UploadControls/index.js.map +1 -1
- package/dist/providers/UploadEdits/index.js +7 -3
- package/dist/providers/UploadEdits/index.js.map +1 -1
- package/dist/providers/UploadHandlers/index.js +7 -3
- package/dist/providers/UploadHandlers/index.js.map +1 -1
- package/dist/utilities/abortAndIgnore.js +4 -6
- package/dist/utilities/abortAndIgnore.js.map +1 -1
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js +2 -2
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js.map +1 -1
- package/dist/utilities/combineFieldLabel.js +37 -13
- package/dist/utilities/combineFieldLabel.js.map +1 -1
- package/dist/utilities/copyDataFromLocale.js +6 -2
- package/dist/utilities/copyDataFromLocale.js.map +1 -1
- package/dist/utilities/getDisplayedFieldValue.js +8 -8
- package/dist/utilities/getDisplayedFieldValue.js.map +1 -1
- package/dist/utilities/getFolderResultsComponentAndData.js +31 -14
- package/dist/utilities/getFolderResultsComponentAndData.js.map +1 -1
- package/dist/utilities/handleFormStateLocking.js +2 -2
- package/dist/utilities/handleFormStateLocking.js.map +1 -1
- package/dist/utilities/hasSavePermission.js +5 -1
- package/dist/utilities/hasSavePermission.js.map +1 -1
- package/dist/utilities/isURLAllowed.js +6 -6
- package/dist/utilities/isURLAllowed.js.map +1 -1
- package/dist/utilities/renderTable.js +84 -27
- package/dist/utilities/renderTable.js.map +1 -1
- package/dist/utilities/schedulePublishHandler.js +3 -1
- package/dist/utilities/schedulePublishHandler.js.map +1 -1
- package/dist/utilities/upsertPreferences.js +1 -0
- package/dist/utilities/upsertPreferences.js.map +1 -1
- package/dist/views/BrowseByFolder/index.js +168 -56
- package/dist/views/BrowseByFolder/index.js.map +1 -1
- package/dist/views/CollectionFolder/ListSelection/index.js +67 -23
- package/dist/views/CollectionFolder/ListSelection/index.js.map +1 -1
- package/dist/views/CollectionFolder/index.js +147 -47
- package/dist/views/CollectionFolder/index.js.map +1 -1
- package/dist/views/Edit/Auth/APIKey.js +67 -23
- package/dist/views/Edit/Auth/APIKey.js.map +1 -1
- package/dist/views/Edit/Auth/index.js +91 -31
- package/dist/views/Edit/Auth/index.js.map +1 -1
- package/dist/views/Edit/index.js +124 -48
- package/dist/views/Edit/index.js.map +1 -1
- package/dist/views/List/GroupByHeader/index.js +19 -7
- package/dist/views/List/GroupByHeader/index.js.map +1 -1
- package/dist/views/List/ListHeader/index.js +68 -23
- package/dist/views/List/ListHeader/index.js.map +1 -1
- package/dist/views/List/ListSelection/index.js +49 -17
- package/dist/views/List/ListSelection/index.js.map +1 -1
- package/dist/views/List/index.js +162 -54
- package/dist/views/List/index.js.map +1 -1
- package/package.json +7 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/FullscreenModal/index.tsx"],"sourcesContent":["'use client'\nimport type { Modal as ModalType } from '@faceless-ui/modal'\n\nimport { Modal } from '@faceless-ui/modal'\nimport React from 'react'\n\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\n\nexport function FullscreenModal(props: Parameters<typeof ModalType>[0]) {\n const currentDepth = useEditDepth()\n\n return (\n <Modal\n // Fixes https://github.com/payloadcms/payload/issues/13778\n closeOnBlur={false}\n {...props}\n style={{\n ...(props.style || {}),\n zIndex: `calc(100 + ${currentDepth || 0} + 1)`,\n }}\n />\n )\n}\n"],"names":["Modal","React","useEditDepth","FullscreenModal","props","currentDepth","closeOnBlur","style","zIndex"],"mappings":"AAAA;;AAGA,SAASA,KAAK,QAAQ,qBAAoB;AAC1C,OAAOC,WAAW,QAAO;AAEzB,SAASC,YAAY,QAAQ,qCAAoC;AAEjE,OAAO,SAASC,gBAAgBC,KAAsC;IACpE,MAAMC,eAAeH;IAErB,qBACE,
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/FullscreenModal/index.tsx"],"sourcesContent":["'use client'\nimport type { Modal as ModalType } from '@faceless-ui/modal'\n\nimport { Modal } from '@faceless-ui/modal'\nimport React from 'react'\n\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\n\nexport function FullscreenModal(props: Parameters<typeof ModalType>[0]) {\n const currentDepth = useEditDepth()\n\n return (\n <Modal\n // Fixes https://github.com/payloadcms/payload/issues/13778\n closeOnBlur={false}\n {...props}\n style={{\n ...(props.style || {}),\n zIndex: `calc(100 + ${currentDepth || 0} + 1)`,\n }}\n />\n )\n}\n"],"names":["Modal","React","useEditDepth","FullscreenModal","props","currentDepth","closeOnBlur","style","zIndex"],"mappings":"AAAA;;AAGA,SAASA,KAAK,QAAQ,qBAAoB;AAC1C,OAAOC,WAAW,QAAO;AAEzB,SAASC,YAAY,QAAQ,qCAAoC;AAEjE,OAAO,SAASC,gBAAgBC,KAAsC;IACpE,MAAMC,eAAeH;IAErB,qBACE,QAACF;QACC,2DAA2D;QAC3DM,aAAa;QACZ,GAAGF,KAAK;QACTG,OAAO;YACL,GAAIH,MAAMG,KAAK,IAAI,CAAC,CAAC;YACrBC,QAAQ,CAAC,WAAW,EAAEH,gBAAgB,EAAE,KAAK,CAAC;QAChD;;;;;;AAGN"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import {
|
|
2
|
+
import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
|
3
3
|
import { useModal } from '@faceless-ui/modal';
|
|
4
4
|
import React, { useCallback } from 'react';
|
|
5
5
|
import { toast } from 'sonner';
|
|
@@ -23,33 +23,53 @@ export function GenerateConfirmation(props) {
|
|
|
23
23
|
setKey,
|
|
24
24
|
t
|
|
25
25
|
]);
|
|
26
|
-
return /*#__PURE__*/
|
|
26
|
+
return /*#__PURE__*/ _jsxDEV(React.Fragment, {
|
|
27
27
|
children: [
|
|
28
|
-
/*#__PURE__*/
|
|
28
|
+
/*#__PURE__*/ _jsxDEV(Button, {
|
|
29
29
|
buttonStyle: "secondary",
|
|
30
30
|
onClick: ()=>{
|
|
31
31
|
toggleModal(modalSlug);
|
|
32
32
|
},
|
|
33
33
|
size: "small",
|
|
34
34
|
children: t('authentication:generateNewAPIKey')
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
}, void 0, false, {
|
|
36
|
+
fileName: "src/elements/GenerateConfirmation/index.tsx",
|
|
37
|
+
lineNumber: 34,
|
|
38
|
+
columnNumber: 7
|
|
39
|
+
}, this),
|
|
40
|
+
/*#__PURE__*/ _jsxDEV(ConfirmationModal, {
|
|
41
|
+
body: /*#__PURE__*/ _jsxDEV(Translation, {
|
|
38
42
|
elements: {
|
|
39
|
-
1: ({ children })=>/*#__PURE__*/
|
|
43
|
+
1: ({ children })=>/*#__PURE__*/ _jsxDEV("strong", {
|
|
40
44
|
children: children
|
|
41
|
-
}
|
|
45
|
+
}, void 0, false, {
|
|
46
|
+
fileName: "src/elements/GenerateConfirmation/index.tsx",
|
|
47
|
+
lineNumber: 47,
|
|
48
|
+
columnNumber: 36
|
|
49
|
+
}, void 0)
|
|
42
50
|
},
|
|
43
51
|
i18nKey: "authentication:generatingNewAPIKeyWillInvalidate",
|
|
44
52
|
t: t
|
|
45
|
-
}
|
|
53
|
+
}, void 0, false, {
|
|
54
|
+
fileName: "src/elements/GenerateConfirmation/index.tsx",
|
|
55
|
+
lineNumber: 45,
|
|
56
|
+
columnNumber: 11
|
|
57
|
+
}, void 0),
|
|
46
58
|
confirmLabel: t('authentication:generate'),
|
|
47
59
|
heading: t('authentication:confirmGeneration'),
|
|
48
60
|
modalSlug: modalSlug,
|
|
49
61
|
onConfirm: handleGenerate
|
|
50
|
-
}
|
|
62
|
+
}, void 0, false, {
|
|
63
|
+
fileName: "src/elements/GenerateConfirmation/index.tsx",
|
|
64
|
+
lineNumber: 43,
|
|
65
|
+
columnNumber: 7
|
|
66
|
+
}, this)
|
|
51
67
|
]
|
|
52
|
-
}
|
|
68
|
+
}, void 0, true, {
|
|
69
|
+
fileName: "src/elements/GenerateConfirmation/index.tsx",
|
|
70
|
+
lineNumber: 33,
|
|
71
|
+
columnNumber: 5
|
|
72
|
+
}, this);
|
|
53
73
|
}
|
|
54
74
|
|
|
55
75
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/GenerateConfirmation/index.tsx"],"sourcesContent":["'use client'\nimport { useModal } from '@faceless-ui/modal'\nimport React, { useCallback } from 'react'\nimport { toast } from 'sonner'\n\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { Translation } from '../Translation/index.js'\n\nexport type GenerateConfirmationProps = {\n highlightField: (Boolean) => void\n setKey: () => void\n}\n\nexport function GenerateConfirmation(props: GenerateConfirmationProps) {\n const { highlightField, setKey } = props\n\n const { id } = useDocumentInfo()\n const { toggleModal } = useModal()\n const { t } = useTranslation()\n\n const modalSlug = `generate-confirmation-${id}`\n\n const handleGenerate = useCallback(() => {\n setKey()\n toast.success(t('authentication:newAPIKeyGenerated'))\n highlightField(true)\n }, [highlightField, setKey, t])\n\n return (\n <React.Fragment>\n <Button\n buttonStyle=\"secondary\"\n onClick={() => {\n toggleModal(modalSlug)\n }}\n size=\"small\"\n >\n {t('authentication:generateNewAPIKey')}\n </Button>\n <ConfirmationModal\n body={\n <Translation\n elements={{\n 1: ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"authentication:generatingNewAPIKeyWillInvalidate\"\n t={t}\n />\n }\n confirmLabel={t('authentication:generate')}\n heading={t('authentication:confirmGeneration')}\n modalSlug={modalSlug}\n onConfirm={handleGenerate}\n />\n </React.Fragment>\n )\n}\n"],"names":["useModal","React","useCallback","toast","useDocumentInfo","useTranslation","Button","ConfirmationModal","Translation","GenerateConfirmation","props","highlightField","setKey","id","toggleModal","t","modalSlug","handleGenerate","success","Fragment","buttonStyle","onClick","size","body","elements","children","strong","i18nKey","confirmLabel","heading","onConfirm"],"mappings":"AAAA;;AACA,SAASA,QAAQ,QAAQ,qBAAoB;AAC7C,OAAOC,SAASC,WAAW,QAAQ,QAAO;AAC1C,SAASC,KAAK,QAAQ,SAAQ;AAE9B,SAASC,eAAe,QAAQ,wCAAuC;AACvE,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,MAAM,QAAQ,qBAAoB;AAC3C,SAASC,iBAAiB,QAAQ,gCAA+B;AACjE,SAASC,WAAW,QAAQ,0BAAyB;AAOrD,OAAO,SAASC,qBAAqBC,KAAgC;IACnE,MAAM,EAAEC,cAAc,EAAEC,MAAM,EAAE,GAAGF;IAEnC,MAAM,EAAEG,EAAE,EAAE,GAAGT;IACf,MAAM,EAAEU,WAAW,EAAE,GAAGd;IACxB,MAAM,EAAEe,CAAC,EAAE,GAAGV;IAEd,MAAMW,YAAY,CAAC,sBAAsB,EAAEH,IAAI;IAE/C,MAAMI,iBAAiBf,YAAY;QACjCU;QACAT,MAAMe,OAAO,CAACH,EAAE;QAChBJ,eAAe;IACjB,GAAG;QAACA;QAAgBC;QAAQG;KAAE;IAE9B,qBACE,
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/GenerateConfirmation/index.tsx"],"sourcesContent":["'use client'\nimport { useModal } from '@faceless-ui/modal'\nimport React, { useCallback } from 'react'\nimport { toast } from 'sonner'\n\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { Translation } from '../Translation/index.js'\n\nexport type GenerateConfirmationProps = {\n highlightField: (Boolean) => void\n setKey: () => void\n}\n\nexport function GenerateConfirmation(props: GenerateConfirmationProps) {\n const { highlightField, setKey } = props\n\n const { id } = useDocumentInfo()\n const { toggleModal } = useModal()\n const { t } = useTranslation()\n\n const modalSlug = `generate-confirmation-${id}`\n\n const handleGenerate = useCallback(() => {\n setKey()\n toast.success(t('authentication:newAPIKeyGenerated'))\n highlightField(true)\n }, [highlightField, setKey, t])\n\n return (\n <React.Fragment>\n <Button\n buttonStyle=\"secondary\"\n onClick={() => {\n toggleModal(modalSlug)\n }}\n size=\"small\"\n >\n {t('authentication:generateNewAPIKey')}\n </Button>\n <ConfirmationModal\n body={\n <Translation\n elements={{\n 1: ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"authentication:generatingNewAPIKeyWillInvalidate\"\n t={t}\n />\n }\n confirmLabel={t('authentication:generate')}\n heading={t('authentication:confirmGeneration')}\n modalSlug={modalSlug}\n onConfirm={handleGenerate}\n />\n </React.Fragment>\n )\n}\n"],"names":["useModal","React","useCallback","toast","useDocumentInfo","useTranslation","Button","ConfirmationModal","Translation","GenerateConfirmation","props","highlightField","setKey","id","toggleModal","t","modalSlug","handleGenerate","success","Fragment","buttonStyle","onClick","size","body","elements","children","strong","i18nKey","confirmLabel","heading","onConfirm"],"mappings":"AAAA;;AACA,SAASA,QAAQ,QAAQ,qBAAoB;AAC7C,OAAOC,SAASC,WAAW,QAAQ,QAAO;AAC1C,SAASC,KAAK,QAAQ,SAAQ;AAE9B,SAASC,eAAe,QAAQ,wCAAuC;AACvE,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,MAAM,QAAQ,qBAAoB;AAC3C,SAASC,iBAAiB,QAAQ,gCAA+B;AACjE,SAASC,WAAW,QAAQ,0BAAyB;AAOrD,OAAO,SAASC,qBAAqBC,KAAgC;IACnE,MAAM,EAAEC,cAAc,EAAEC,MAAM,EAAE,GAAGF;IAEnC,MAAM,EAAEG,EAAE,EAAE,GAAGT;IACf,MAAM,EAAEU,WAAW,EAAE,GAAGd;IACxB,MAAM,EAAEe,CAAC,EAAE,GAAGV;IAEd,MAAMW,YAAY,CAAC,sBAAsB,EAAEH,IAAI;IAE/C,MAAMI,iBAAiBf,YAAY;QACjCU;QACAT,MAAMe,OAAO,CAACH,EAAE;QAChBJ,eAAe;IACjB,GAAG;QAACA;QAAgBC;QAAQG;KAAE;IAE9B,qBACE,QAACd,MAAMkB,QAAQ;;0BACb,QAACb;gBACCc,aAAY;gBACZC,SAAS;oBACPP,YAAYE;gBACd;gBACAM,MAAK;0BAEJP,EAAE;;;;;;0BAEL,QAACR;gBACCgB,oBACE,QAACf;oBACCgB,UAAU;wBACR,GAAG,CAAC,EAAEC,QAAQ,EAAE,iBAAK,QAACC;0CAAQD;;;;;;oBAChC;oBACAE,SAAQ;oBACRZ,GAAGA;;;;;;gBAGPa,cAAcb,EAAE;gBAChBc,SAASd,EAAE;gBACXC,WAAWA;gBACXc,WAAWb;;;;;;;;;;;;AAInB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import {
|
|
2
|
+
import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
|
3
3
|
import './index.scss';
|
|
4
4
|
import React, { useMemo } from 'react';
|
|
5
5
|
import { SelectInput } from '../../fields/Select/Input.js';
|
|
@@ -44,18 +44,22 @@ export const GroupByBuilder = ({ collectionSlug, fields })=>{
|
|
|
44
44
|
const { query, refineListData } = useListQuery();
|
|
45
45
|
const groupByFieldName = query.groupBy?.replace(/^-/, '');
|
|
46
46
|
const groupByField = reducedFields.find((field)=>field.value === groupByFieldName);
|
|
47
|
-
return /*#__PURE__*/
|
|
47
|
+
return /*#__PURE__*/ _jsxDEV("div", {
|
|
48
48
|
className: baseClass,
|
|
49
49
|
children: [
|
|
50
|
-
/*#__PURE__*/
|
|
50
|
+
/*#__PURE__*/ _jsxDEV("div", {
|
|
51
51
|
className: `${baseClass}__header`,
|
|
52
52
|
children: [
|
|
53
|
-
/*#__PURE__*/
|
|
53
|
+
/*#__PURE__*/ _jsxDEV("p", {
|
|
54
54
|
children: t('general:groupByLabel', {
|
|
55
55
|
label: ''
|
|
56
56
|
})
|
|
57
|
-
}
|
|
58
|
-
|
|
57
|
+
}, void 0, false, {
|
|
58
|
+
fileName: "src/elements/GroupByBuilder/index.tsx",
|
|
59
|
+
lineNumber: 68,
|
|
60
|
+
columnNumber: 9
|
|
61
|
+
}, this),
|
|
62
|
+
query.groupBy && /*#__PURE__*/ _jsxDEV("button", {
|
|
59
63
|
className: `${baseClass}__clear-button`,
|
|
60
64
|
id: "group-by--reset",
|
|
61
65
|
onClick: async ()=>{
|
|
@@ -65,13 +69,21 @@ export const GroupByBuilder = ({ collectionSlug, fields })=>{
|
|
|
65
69
|
},
|
|
66
70
|
type: "button",
|
|
67
71
|
children: t('general:clear')
|
|
68
|
-
}
|
|
72
|
+
}, void 0, false, {
|
|
73
|
+
fileName: "src/elements/GroupByBuilder/index.tsx",
|
|
74
|
+
lineNumber: 74,
|
|
75
|
+
columnNumber: 11
|
|
76
|
+
}, this)
|
|
69
77
|
]
|
|
70
|
-
}
|
|
71
|
-
|
|
78
|
+
}, void 0, true, {
|
|
79
|
+
fileName: "src/elements/GroupByBuilder/index.tsx",
|
|
80
|
+
lineNumber: 67,
|
|
81
|
+
columnNumber: 7
|
|
82
|
+
}, this),
|
|
83
|
+
/*#__PURE__*/ _jsxDEV("div", {
|
|
72
84
|
className: `${baseClass}__inputs`,
|
|
73
85
|
children: [
|
|
74
|
-
/*#__PURE__*/
|
|
86
|
+
/*#__PURE__*/ _jsxDEV(ReactSelect, {
|
|
75
87
|
filterOption: (option, inputValue)=>(option?.data?.plainTextLabel || option.label).toLowerCase().includes(inputValue.toLowerCase()),
|
|
76
88
|
id: "group-by--field-select",
|
|
77
89
|
isClearable: true,
|
|
@@ -95,8 +107,12 @@ export const GroupByBuilder = ({ collectionSlug, fields })=>{
|
|
|
95
107
|
label: groupByField?.label || t('general:selectValue'),
|
|
96
108
|
value: groupByFieldName || ''
|
|
97
109
|
}
|
|
98
|
-
}
|
|
99
|
-
|
|
110
|
+
}, void 0, false, {
|
|
111
|
+
fileName: "src/elements/GroupByBuilder/index.tsx",
|
|
112
|
+
lineNumber: 89,
|
|
113
|
+
columnNumber: 9
|
|
114
|
+
}, this),
|
|
115
|
+
/*#__PURE__*/ _jsxDEV(SelectInput, {
|
|
100
116
|
id: "group-by--sort",
|
|
101
117
|
isClearable: false,
|
|
102
118
|
name: "direction",
|
|
@@ -122,11 +138,23 @@ export const GroupByBuilder = ({ collectionSlug, fields })=>{
|
|
|
122
138
|
path: "direction",
|
|
123
139
|
readOnly: !groupByFieldName,
|
|
124
140
|
value: !query.groupBy ? 'asc' : typeof query.groupBy === 'string' ? `${query.groupBy.startsWith('-') ? 'desc' : 'asc'}` : ''
|
|
125
|
-
}
|
|
141
|
+
}, void 0, false, {
|
|
142
|
+
fileName: "src/elements/GroupByBuilder/index.tsx",
|
|
143
|
+
lineNumber: 125,
|
|
144
|
+
columnNumber: 9
|
|
145
|
+
}, this)
|
|
126
146
|
]
|
|
127
|
-
}
|
|
147
|
+
}, void 0, true, {
|
|
148
|
+
fileName: "src/elements/GroupByBuilder/index.tsx",
|
|
149
|
+
lineNumber: 88,
|
|
150
|
+
columnNumber: 7
|
|
151
|
+
}, this)
|
|
128
152
|
]
|
|
129
|
-
}
|
|
153
|
+
}, void 0, true, {
|
|
154
|
+
fileName: "src/elements/GroupByBuilder/index.tsx",
|
|
155
|
+
lineNumber: 66,
|
|
156
|
+
columnNumber: 5
|
|
157
|
+
}, this);
|
|
130
158
|
};
|
|
131
159
|
|
|
132
160
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/GroupByBuilder/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientField, Field, SanitizedCollectionConfig } from 'payload'\n\nimport './index.scss'\n\nimport React, { useMemo } from 'react'\n\nimport { SelectInput } from '../../fields/Select/Input.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { reduceFieldsToOptions } from '../../utilities/reduceFieldsToOptions.js'\nimport { ReactSelect } from '../ReactSelect/index.js'\n\nexport type Props = {\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n fields: ClientField[]\n}\n\nconst baseClass = 'group-by-builder'\n\n/**\n * Note: Some fields are already omitted from the list of fields:\n * - fields with nested field, e.g. `tabs`, `groups`, etc.\n * - fields that don't affect data, i.e. `row`, `collapsible`, `ui`, etc.\n * So we don't technically need to omit them here, but do anyway.\n * But some remaining fields still need an additional check, e.g. `richText`, etc.\n */\nconst supportedFieldTypes: Field['type'][] = [\n 'text',\n 'textarea',\n 'number',\n 'select',\n 'relationship',\n 'date',\n 'checkbox',\n 'radio',\n 'email',\n 'number',\n 'upload',\n]\n\nexport const GroupByBuilder: React.FC<Props> = ({ collectionSlug, fields }) => {\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n\n const fieldPermissions = permissions?.collections?.[collectionSlug]?.fields\n\n const reducedFields = useMemo(\n () =>\n reduceFieldsToOptions({\n fieldPermissions,\n fields,\n i18n,\n }),\n [fields, fieldPermissions, i18n],\n )\n\n const { query, refineListData } = useListQuery()\n\n const groupByFieldName = query.groupBy?.replace(/^-/, '')\n\n const groupByField = reducedFields.find((field) => field.value === groupByFieldName)\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <p>\n {t('general:groupByLabel', {\n label: '',\n })}\n </p>\n {query.groupBy && (\n <button\n className={`${baseClass}__clear-button`}\n id=\"group-by--reset\"\n onClick={async () => {\n await refineListData({\n groupBy: '',\n })\n }}\n type=\"button\"\n >\n {t('general:clear')}\n </button>\n )}\n </div>\n <div className={`${baseClass}__inputs`}>\n <ReactSelect\n filterOption={(option, inputValue) =>\n ((option?.data?.plainTextLabel as string) || option.label)\n .toLowerCase()\n .includes(inputValue.toLowerCase())\n }\n id=\"group-by--field-select\"\n isClearable\n isMulti={false}\n onChange={async (v: { value: string } | null) => {\n const value = v === null ? undefined : v.value\n\n // value is being cleared\n if (v === null) {\n await refineListData({\n groupBy: '',\n page: 1,\n })\n }\n\n await refineListData({\n groupBy: value ? (query.groupBy?.startsWith('-') ? `-${value}` : value) : undefined,\n page: 1,\n })\n }}\n options={reducedFields.filter(\n (field) =>\n !field.field.admin.disableGroupBy &&\n field.value !== 'id' &&\n supportedFieldTypes.includes(field.field.type),\n )}\n value={{\n label: groupByField?.label || t('general:selectValue'),\n value: groupByFieldName || '',\n }}\n />\n <SelectInput\n id=\"group-by--sort\"\n isClearable={false}\n name=\"direction\"\n onChange={async ({ value }: { value: string }) => {\n if (!groupByFieldName) {\n return\n }\n\n await refineListData({\n groupBy: value === 'asc' ? groupByFieldName : `-${groupByFieldName}`,\n page: 1,\n })\n }}\n options={[\n { label: t('general:ascending'), value: 'asc' },\n { label: t('general:descending'), value: 'desc' },\n ]}\n path=\"direction\"\n readOnly={!groupByFieldName}\n value={\n !query.groupBy\n ? 'asc'\n : typeof query.groupBy === 'string'\n ? `${query.groupBy.startsWith('-') ? 'desc' : 'asc'}`\n : ''\n }\n />\n </div>\n </div>\n )\n}\n"],"names":["React","useMemo","SelectInput","useAuth","useListQuery","useTranslation","reduceFieldsToOptions","ReactSelect","baseClass","supportedFieldTypes","GroupByBuilder","collectionSlug","fields","i18n","t","permissions","fieldPermissions","collections","reducedFields","query","refineListData","groupByFieldName","groupBy","replace","groupByField","find","field","value","div","className","p","label","button","id","onClick","type","filterOption","option","inputValue","data","plainTextLabel","toLowerCase","includes","isClearable","isMulti","onChange","v","undefined","page","startsWith","options","filter","admin","disableGroupBy","name","path","readOnly"],"mappings":"AAAA;;AAGA,OAAO,eAAc;AAErB,OAAOA,SAASC,OAAO,QAAQ,QAAO;AAEtC,SAASC,WAAW,QAAQ,+BAA8B;AAC1D,SAASC,OAAO,QAAQ,gCAA+B;AACvD,SAASC,YAAY,QAAQ,qCAAoC;AACjE,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,qBAAqB,QAAQ,2CAA0C;AAChF,SAASC,WAAW,QAAQ,0BAAyB;AAOrD,MAAMC,YAAY;AAElB;;;;;;CAMC,GACD,MAAMC,sBAAuC;IAC3C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAED,OAAO,MAAMC,iBAAkC,CAAC,EAAEC,cAAc,EAAEC,MAAM,EAAE;IACxE,MAAM,EAAEC,IAAI,EAAEC,CAAC,EAAE,GAAGT;IACpB,MAAM,EAAEU,WAAW,EAAE,GAAGZ;IAExB,MAAMa,mBAAmBD,aAAaE,aAAa,CAACN,eAAe,EAAEC;IAErE,MAAMM,gBAAgBjB,QACpB,IACEK,sBAAsB;YACpBU;YACAJ;YACAC;QACF,IACF;QAACD;QAAQI;QAAkBH;KAAK;IAGlC,MAAM,EAAEM,KAAK,EAAEC,cAAc,EAAE,GAAGhB;IAElC,MAAMiB,mBAAmBF,MAAMG,OAAO,EAAEC,QAAQ,MAAM;IAEtD,MAAMC,eAAeN,cAAcO,IAAI,CAAC,CAACC,QAAUA,MAAMC,KAAK,KAAKN;IAEnE,qBACE,
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/GroupByBuilder/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientField, Field, SanitizedCollectionConfig } from 'payload'\n\nimport './index.scss'\n\nimport React, { useMemo } from 'react'\n\nimport { SelectInput } from '../../fields/Select/Input.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { reduceFieldsToOptions } from '../../utilities/reduceFieldsToOptions.js'\nimport { ReactSelect } from '../ReactSelect/index.js'\n\nexport type Props = {\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n fields: ClientField[]\n}\n\nconst baseClass = 'group-by-builder'\n\n/**\n * Note: Some fields are already omitted from the list of fields:\n * - fields with nested field, e.g. `tabs`, `groups`, etc.\n * - fields that don't affect data, i.e. `row`, `collapsible`, `ui`, etc.\n * So we don't technically need to omit them here, but do anyway.\n * But some remaining fields still need an additional check, e.g. `richText`, etc.\n */\nconst supportedFieldTypes: Field['type'][] = [\n 'text',\n 'textarea',\n 'number',\n 'select',\n 'relationship',\n 'date',\n 'checkbox',\n 'radio',\n 'email',\n 'number',\n 'upload',\n]\n\nexport const GroupByBuilder: React.FC<Props> = ({ collectionSlug, fields }) => {\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n\n const fieldPermissions = permissions?.collections?.[collectionSlug]?.fields\n\n const reducedFields = useMemo(\n () =>\n reduceFieldsToOptions({\n fieldPermissions,\n fields,\n i18n,\n }),\n [fields, fieldPermissions, i18n],\n )\n\n const { query, refineListData } = useListQuery()\n\n const groupByFieldName = query.groupBy?.replace(/^-/, '')\n\n const groupByField = reducedFields.find((field) => field.value === groupByFieldName)\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <p>\n {t('general:groupByLabel', {\n label: '',\n })}\n </p>\n {query.groupBy && (\n <button\n className={`${baseClass}__clear-button`}\n id=\"group-by--reset\"\n onClick={async () => {\n await refineListData({\n groupBy: '',\n })\n }}\n type=\"button\"\n >\n {t('general:clear')}\n </button>\n )}\n </div>\n <div className={`${baseClass}__inputs`}>\n <ReactSelect\n filterOption={(option, inputValue) =>\n ((option?.data?.plainTextLabel as string) || option.label)\n .toLowerCase()\n .includes(inputValue.toLowerCase())\n }\n id=\"group-by--field-select\"\n isClearable\n isMulti={false}\n onChange={async (v: { value: string } | null) => {\n const value = v === null ? undefined : v.value\n\n // value is being cleared\n if (v === null) {\n await refineListData({\n groupBy: '',\n page: 1,\n })\n }\n\n await refineListData({\n groupBy: value ? (query.groupBy?.startsWith('-') ? `-${value}` : value) : undefined,\n page: 1,\n })\n }}\n options={reducedFields.filter(\n (field) =>\n !field.field.admin.disableGroupBy &&\n field.value !== 'id' &&\n supportedFieldTypes.includes(field.field.type),\n )}\n value={{\n label: groupByField?.label || t('general:selectValue'),\n value: groupByFieldName || '',\n }}\n />\n <SelectInput\n id=\"group-by--sort\"\n isClearable={false}\n name=\"direction\"\n onChange={async ({ value }: { value: string }) => {\n if (!groupByFieldName) {\n return\n }\n\n await refineListData({\n groupBy: value === 'asc' ? groupByFieldName : `-${groupByFieldName}`,\n page: 1,\n })\n }}\n options={[\n { label: t('general:ascending'), value: 'asc' },\n { label: t('general:descending'), value: 'desc' },\n ]}\n path=\"direction\"\n readOnly={!groupByFieldName}\n value={\n !query.groupBy\n ? 'asc'\n : typeof query.groupBy === 'string'\n ? `${query.groupBy.startsWith('-') ? 'desc' : 'asc'}`\n : ''\n }\n />\n </div>\n </div>\n )\n}\n"],"names":["React","useMemo","SelectInput","useAuth","useListQuery","useTranslation","reduceFieldsToOptions","ReactSelect","baseClass","supportedFieldTypes","GroupByBuilder","collectionSlug","fields","i18n","t","permissions","fieldPermissions","collections","reducedFields","query","refineListData","groupByFieldName","groupBy","replace","groupByField","find","field","value","div","className","p","label","button","id","onClick","type","filterOption","option","inputValue","data","plainTextLabel","toLowerCase","includes","isClearable","isMulti","onChange","v","undefined","page","startsWith","options","filter","admin","disableGroupBy","name","path","readOnly"],"mappings":"AAAA;;AAGA,OAAO,eAAc;AAErB,OAAOA,SAASC,OAAO,QAAQ,QAAO;AAEtC,SAASC,WAAW,QAAQ,+BAA8B;AAC1D,SAASC,OAAO,QAAQ,gCAA+B;AACvD,SAASC,YAAY,QAAQ,qCAAoC;AACjE,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,qBAAqB,QAAQ,2CAA0C;AAChF,SAASC,WAAW,QAAQ,0BAAyB;AAOrD,MAAMC,YAAY;AAElB;;;;;;CAMC,GACD,MAAMC,sBAAuC;IAC3C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAED,OAAO,MAAMC,iBAAkC,CAAC,EAAEC,cAAc,EAAEC,MAAM,EAAE;IACxE,MAAM,EAAEC,IAAI,EAAEC,CAAC,EAAE,GAAGT;IACpB,MAAM,EAAEU,WAAW,EAAE,GAAGZ;IAExB,MAAMa,mBAAmBD,aAAaE,aAAa,CAACN,eAAe,EAAEC;IAErE,MAAMM,gBAAgBjB,QACpB,IACEK,sBAAsB;YACpBU;YACAJ;YACAC;QACF,IACF;QAACD;QAAQI;QAAkBH;KAAK;IAGlC,MAAM,EAAEM,KAAK,EAAEC,cAAc,EAAE,GAAGhB;IAElC,MAAMiB,mBAAmBF,MAAMG,OAAO,EAAEC,QAAQ,MAAM;IAEtD,MAAMC,eAAeN,cAAcO,IAAI,CAAC,CAACC,QAAUA,MAAMC,KAAK,KAAKN;IAEnE,qBACE,QAACO;QAAIC,WAAWrB;;0BACd,QAACoB;gBAAIC,WAAW,GAAGrB,UAAU,QAAQ,CAAC;;kCACpC,QAACsB;kCACEhB,EAAE,wBAAwB;4BACzBiB,OAAO;wBACT;;;;;;oBAEDZ,MAAMG,OAAO,kBACZ,QAACU;wBACCH,WAAW,GAAGrB,UAAU,cAAc,CAAC;wBACvCyB,IAAG;wBACHC,SAAS;4BACP,MAAMd,eAAe;gCACnBE,SAAS;4BACX;wBACF;wBACAa,MAAK;kCAEJrB,EAAE;;;;;;;;;;;;0BAIT,QAACc;gBAAIC,WAAW,GAAGrB,UAAU,QAAQ,CAAC;;kCACpC,QAACD;wBACC6B,cAAc,CAACC,QAAQC,aACrB,AAAC,CAAA,AAACD,QAAQE,MAAMC,kBAA6BH,OAAON,KAAK,AAAD,EACrDU,WAAW,GACXC,QAAQ,CAACJ,WAAWG,WAAW;wBAEpCR,IAAG;wBACHU,WAAW;wBACXC,SAAS;wBACTC,UAAU,OAAOC;4BACf,MAAMnB,QAAQmB,MAAM,OAAOC,YAAYD,EAAEnB,KAAK;4BAE9C,yBAAyB;4BACzB,IAAImB,MAAM,MAAM;gCACd,MAAM1B,eAAe;oCACnBE,SAAS;oCACT0B,MAAM;gCACR;4BACF;4BAEA,MAAM5B,eAAe;gCACnBE,SAASK,QAASR,MAAMG,OAAO,EAAE2B,WAAW,OAAO,CAAC,CAAC,EAAEtB,OAAO,GAAGA,QAASoB;gCAC1EC,MAAM;4BACR;wBACF;wBACAE,SAAShC,cAAciC,MAAM,CAC3B,CAACzB,QACC,CAACA,MAAMA,KAAK,CAAC0B,KAAK,CAACC,cAAc,IACjC3B,MAAMC,KAAK,KAAK,QAChBlB,oBAAoBiC,QAAQ,CAAChB,MAAMA,KAAK,CAACS,IAAI;wBAEjDR,OAAO;4BACLI,OAAOP,cAAcO,SAASjB,EAAE;4BAChCa,OAAON,oBAAoB;wBAC7B;;;;;;kCAEF,QAACnB;wBACC+B,IAAG;wBACHU,aAAa;wBACbW,MAAK;wBACLT,UAAU,OAAO,EAAElB,KAAK,EAAqB;4BAC3C,IAAI,CAACN,kBAAkB;gCACrB;4BACF;4BAEA,MAAMD,eAAe;gCACnBE,SAASK,UAAU,QAAQN,mBAAmB,CAAC,CAAC,EAAEA,kBAAkB;gCACpE2B,MAAM;4BACR;wBACF;wBACAE,SAAS;4BACP;gCAAEnB,OAAOjB,EAAE;gCAAsBa,OAAO;4BAAM;4BAC9C;gCAAEI,OAAOjB,EAAE;gCAAuBa,OAAO;4BAAO;yBACjD;wBACD4B,MAAK;wBACLC,UAAU,CAACnC;wBACXM,OACE,CAACR,MAAMG,OAAO,GACV,QACA,OAAOH,MAAMG,OAAO,KAAK,WACvB,GAAGH,MAAMG,OAAO,CAAC2B,UAAU,CAAC,OAAO,SAAS,OAAO,GACnD;;;;;;;;;;;;;;;;;;AAMlB,EAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import {
|
|
2
|
+
import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import './index.scss';
|
|
5
5
|
const baseClass = 'gutter';
|
|
@@ -7,7 +7,7 @@ export const Gutter = (props)=>{
|
|
|
7
7
|
const { children, className, left = true, negativeLeft = false, negativeRight = false, ref, right = true } = props;
|
|
8
8
|
const shouldPadLeft = left && !negativeLeft;
|
|
9
9
|
const shouldPadRight = right && !negativeRight;
|
|
10
|
-
return /*#__PURE__*/
|
|
10
|
+
return /*#__PURE__*/ _jsxDEV("div", {
|
|
11
11
|
className: [
|
|
12
12
|
baseClass,
|
|
13
13
|
shouldPadLeft && `${baseClass}--left`,
|
|
@@ -18,7 +18,11 @@ export const Gutter = (props)=>{
|
|
|
18
18
|
].filter(Boolean).join(' '),
|
|
19
19
|
ref: ref,
|
|
20
20
|
children: children
|
|
21
|
-
}
|
|
21
|
+
}, void 0, false, {
|
|
22
|
+
fileName: "src/elements/Gutter/index.tsx",
|
|
23
|
+
lineNumber: 33,
|
|
24
|
+
columnNumber: 5
|
|
25
|
+
}, this);
|
|
22
26
|
};
|
|
23
27
|
|
|
24
28
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/Gutter/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport './index.scss'\n\nexport type GutterProps = {\n children: React.ReactNode\n className?: string\n left?: boolean\n negativeLeft?: boolean\n negativeRight?: boolean\n ref?: React.RefObject<HTMLDivElement>\n right?: boolean\n}\n\nconst baseClass = 'gutter'\n\nexport const Gutter: React.FC<GutterProps> = (props) => {\n const {\n children,\n className,\n left = true,\n negativeLeft = false,\n negativeRight = false,\n ref,\n right = true,\n } = props\n\n const shouldPadLeft = left && !negativeLeft\n const shouldPadRight = right && !negativeRight\n\n return (\n <div\n className={[\n baseClass,\n shouldPadLeft && `${baseClass}--left`,\n shouldPadRight && `${baseClass}--right`,\n negativeLeft && `${baseClass}--negative-left`,\n negativeRight && `${baseClass}--negative-right`,\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n ref={ref}\n >\n {children}\n </div>\n )\n}\n"],"names":["React","baseClass","Gutter","props","children","className","left","negativeLeft","negativeRight","ref","right","shouldPadLeft","shouldPadRight","div","filter","Boolean","join"],"mappings":"AAAA;;AACA,OAAOA,WAAW,QAAO;AAEzB,OAAO,eAAc;AAYrB,MAAMC,YAAY;AAElB,OAAO,MAAMC,SAAgC,CAACC;IAC5C,MAAM,EACJC,QAAQ,EACRC,SAAS,EACTC,OAAO,IAAI,EACXC,eAAe,KAAK,EACpBC,gBAAgB,KAAK,EACrBC,GAAG,EACHC,QAAQ,IAAI,EACb,GAAGP;IAEJ,MAAMQ,gBAAgBL,QAAQ,CAACC;IAC/B,MAAMK,iBAAiBF,SAAS,CAACF;IAEjC,qBACE,
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/Gutter/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport './index.scss'\n\nexport type GutterProps = {\n children: React.ReactNode\n className?: string\n left?: boolean\n negativeLeft?: boolean\n negativeRight?: boolean\n ref?: React.RefObject<HTMLDivElement>\n right?: boolean\n}\n\nconst baseClass = 'gutter'\n\nexport const Gutter: React.FC<GutterProps> = (props) => {\n const {\n children,\n className,\n left = true,\n negativeLeft = false,\n negativeRight = false,\n ref,\n right = true,\n } = props\n\n const shouldPadLeft = left && !negativeLeft\n const shouldPadRight = right && !negativeRight\n\n return (\n <div\n className={[\n baseClass,\n shouldPadLeft && `${baseClass}--left`,\n shouldPadRight && `${baseClass}--right`,\n negativeLeft && `${baseClass}--negative-left`,\n negativeRight && `${baseClass}--negative-right`,\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n ref={ref}\n >\n {children}\n </div>\n )\n}\n"],"names":["React","baseClass","Gutter","props","children","className","left","negativeLeft","negativeRight","ref","right","shouldPadLeft","shouldPadRight","div","filter","Boolean","join"],"mappings":"AAAA;;AACA,OAAOA,WAAW,QAAO;AAEzB,OAAO,eAAc;AAYrB,MAAMC,YAAY;AAElB,OAAO,MAAMC,SAAgC,CAACC;IAC5C,MAAM,EACJC,QAAQ,EACRC,SAAS,EACTC,OAAO,IAAI,EACXC,eAAe,KAAK,EACpBC,gBAAgB,KAAK,EACrBC,GAAG,EACHC,QAAQ,IAAI,EACb,GAAGP;IAEJ,MAAMQ,gBAAgBL,QAAQ,CAACC;IAC/B,MAAMK,iBAAiBF,SAAS,CAACF;IAEjC,qBACE,QAACK;QACCR,WAAW;YACTJ;YACAU,iBAAiB,GAAGV,UAAU,MAAM,CAAC;YACrCW,kBAAkB,GAAGX,UAAU,OAAO,CAAC;YACvCM,gBAAgB,GAAGN,UAAU,eAAe,CAAC;YAC7CO,iBAAiB,GAAGP,UAAU,gBAAgB,CAAC;YAC/CI;SACD,CACES,MAAM,CAACC,SACPC,IAAI,CAAC;QACRP,KAAKA;kBAEJL;;;;;;AAGP,EAAC"}
|
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
// Taken and modified from https://github.com/Arman19941113/html-diff/blob/master/packages/html-diff/src/index.ts
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Index of entry in tokenized token list
|
|
4
|
+
*/ /**
|
|
5
|
+
* The classNames for wrapper DOM.
|
|
6
|
+
* Use this to configure your own styles without importing the built-in CSS file
|
|
7
|
+
*/ /**
|
|
8
|
+
* @defaultValue 1000
|
|
9
|
+
*/ /**
|
|
10
|
+
* When greedyMatch is enabled, if the length of the sub-tokens exceeds greedyBoundary,
|
|
11
|
+
* we will use the matched sub-tokens that are sufficiently good, even if they are not optimal, to enhance performance.
|
|
12
|
+
* @defaultValue true
|
|
13
|
+
*/ /**
|
|
14
|
+
* Determine the minimum threshold for calculating common sub-tokens.
|
|
15
|
+
* You may adjust it to a value larger than 2, but not lower, due to the potential inclusion of HTML tags in the count.
|
|
16
|
+
* @defaultValue 2
|
|
17
|
+
*/ /**
|
|
18
|
+
* Whether to tokenize by character or by word.
|
|
19
|
+
* @defaultValue false
|
|
20
|
+
*/ // eslint-disable-next-line regexp/no-super-linear-backtracking, regexp/optimal-quantifier-concatenation
|
|
3
21
|
const htmlStartTagReg = /^<(?<name>[^\s/>]+)[^>]*>$/;
|
|
4
22
|
// eslint-disable-next-line regexp/no-super-linear-backtracking, regexp/optimal-quantifier-concatenation
|
|
5
23
|
const htmlTagWithNameReg = /^<(?<isEnd>\/)?(?<name>[^\s>]+)[^>]*>$/;
|
|
@@ -126,7 +144,8 @@ export class HtmlDiff {
|
|
|
126
144
|
if (isMatchExplicitlyDisabled) {
|
|
127
145
|
textStartIndex = i + 1;
|
|
128
146
|
result += token;
|
|
129
|
-
} else
|
|
147
|
+
} else // this token is html tag
|
|
148
|
+
if (!isMatchElement && isHtmlTag) {
|
|
130
149
|
// handle text tokens before
|
|
131
150
|
if (i > textStartIndex) {
|
|
132
151
|
result += this.dressUpText(type, tokens.slice(textStartIndex, i));
|
|
@@ -135,7 +154,9 @@ export class HtmlDiff {
|
|
|
135
154
|
textStartIndex = i + 1;
|
|
136
155
|
if (token.match(htmlVideoTagReg)) {
|
|
137
156
|
result += this.dressUpBlockTag(type, token);
|
|
138
|
-
} else {
|
|
157
|
+
} else /* else if ([htmlImgTagReg].some((item) => token.match(item))) {
|
|
158
|
+
result += this.dressUpInlineTag(type, token)
|
|
159
|
+
}*/ {
|
|
139
160
|
result += token;
|
|
140
161
|
}
|
|
141
162
|
} else if (isMatchElement && isHtmlTag) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/elements/HTMLDiff/diff/index.ts"],"sourcesContent":["// Taken and modified from https://github.com/Arman19941113/html-diff/blob/master/packages/html-diff/src/index.ts\n\ninterface MatchedBlock {\n newEnd: number\n newStart: number\n oldEnd: number\n oldStart: number\n size: number\n}\n\ninterface Operation {\n /**\n * Index of entry in tokenized token list\n */\n newEnd: number\n newStart: number\n oldEnd: number\n oldStart: number\n type: 'create' | 'delete' | 'equal' | 'replace'\n}\n\ntype BaseOpType = 'create' | 'delete'\n\ninterface HtmlDiffConfig {\n classNames: {\n createBlock: string\n createInline: string\n deleteBlock: string\n deleteInline: string\n }\n greedyBoundary: number\n greedyMatch: boolean\n minMatchedSize: number\n}\n\nexport interface HtmlDiffOptions {\n /**\n * The classNames for wrapper DOM.\n * Use this to configure your own styles without importing the built-in CSS file\n */\n classNames?: Partial<{\n createBlock?: string\n createInline?: string\n deleteBlock?: string\n deleteInline?: string\n }>\n /**\n * @defaultValue 1000\n */\n greedyBoundary?: number\n /**\n * When greedyMatch is enabled, if the length of the sub-tokens exceeds greedyBoundary,\n * we will use the matched sub-tokens that are sufficiently good, even if they are not optimal, to enhance performance.\n * @defaultValue true\n */\n greedyMatch?: boolean\n /**\n * Determine the minimum threshold for calculating common sub-tokens.\n * You may adjust it to a value larger than 2, but not lower, due to the potential inclusion of HTML tags in the count.\n * @defaultValue 2\n */\n minMatchedSize?: number\n /**\n * Whether to tokenize by character or by word.\n * @defaultValue false\n */\n tokenizeByCharacter?: boolean\n}\n\n// eslint-disable-next-line regexp/no-super-linear-backtracking, regexp/optimal-quantifier-concatenation\nconst htmlStartTagReg = /^<(?<name>[^\\s/>]+)[^>]*>$/\n// eslint-disable-next-line regexp/no-super-linear-backtracking, regexp/optimal-quantifier-concatenation\nconst htmlTagWithNameReg = /^<(?<isEnd>\\/)?(?<name>[^\\s>]+)[^>]*>$/\n\nconst htmlTagReg = /^<[^>]+>/\nconst htmlImgTagReg = /^<img[^>]*>$/\nconst htmlVideoTagReg = /^<video[^>]*>.*?<\\/video>$/ms\n\nexport class HtmlDiff {\n private readonly config: HtmlDiffConfig\n private leastCommonLength: number = Infinity\n private readonly matchedBlockList: MatchedBlock[] = []\n private readonly newTokens: string[] = []\n private readonly oldTokens: string[] = []\n private readonly operationList: Operation[] = []\n private sideBySideContents?: [string, string]\n private unifiedContent?: string\n\n constructor(\n oldHtml: string,\n newHtml: string,\n {\n classNames = {\n createBlock: 'html-diff-create-block-wrapper',\n createInline: 'html-diff-create-inline-wrapper',\n deleteBlock: 'html-diff-delete-block-wrapper',\n deleteInline: 'html-diff-delete-inline-wrapper',\n },\n greedyBoundary = 1000,\n greedyMatch = true,\n minMatchedSize = 2,\n tokenizeByCharacter = false,\n }: HtmlDiffOptions = {},\n ) {\n // init config\n this.config = {\n classNames: {\n createBlock: 'html-diff-create-block-wrapper',\n createInline: 'html-diff-create-inline-wrapper',\n deleteBlock: 'html-diff-delete-block-wrapper',\n deleteInline: 'html-diff-delete-inline-wrapper',\n ...classNames,\n },\n greedyBoundary,\n greedyMatch,\n minMatchedSize,\n }\n // white space is junk\n oldHtml = oldHtml.trim()\n newHtml = newHtml.trim()\n\n // no need to diff\n if (oldHtml === newHtml) {\n this.unifiedContent = oldHtml\n let equalSequence = 0\n // eslint-disable-next-line regexp/no-super-linear-backtracking, regexp/optimal-quantifier-concatenation\n const content = oldHtml.replace(/<([^\\s/>]+)[^>]*>/g, (match: string, name: string) => {\n const tagNameLength = name.length + 1\n return `${match.slice(0, tagNameLength)} data-seq=\"${++equalSequence}\"${match.slice(tagNameLength)}`\n })\n this.sideBySideContents = [content, content]\n return\n }\n\n // step1: split HTML to tokens(atomic tokens)\n const tokenizeFn = tokenizeByCharacter ? this.tokenizeByCharacter : this.tokenizeByWord\n this.oldTokens = tokenizeFn(oldHtml)\n this.newTokens = tokenizeFn(newHtml)\n // step2: find matched blocks\n this.matchedBlockList = this.getMatchedBlockList()\n\n // step3: generate operation list\n this.operationList = this.getOperationList()\n }\n\n // Find the longest matched block between tokens\n private computeBestMatchedBlock(\n oldStart: number,\n oldEnd: number,\n newStart: number,\n newEnd: number,\n ): MatchedBlock | null {\n let bestMatchedBlock = null\n for (let i = oldStart; i < oldEnd; i++) {\n const len = Math.min(oldEnd - i, newEnd - newStart)\n const ret = this.slideBestMatchedBlock(i, newStart, len)\n if (ret && (!bestMatchedBlock || ret.size > bestMatchedBlock.size)) {\n bestMatchedBlock = ret\n if (ret.size > this.leastCommonLength) {\n return bestMatchedBlock\n }\n }\n }\n for (let j = newStart; j < newEnd; j++) {\n const len = Math.min(oldEnd - oldStart, newEnd - j)\n const ret = this.slideBestMatchedBlock(oldStart, j, len)\n if (ret && (!bestMatchedBlock || ret.size > bestMatchedBlock.size)) {\n bestMatchedBlock = ret\n if (ret.size > this.leastCommonLength) {\n return bestMatchedBlock\n }\n }\n }\n return bestMatchedBlock\n }\n\n private computeMatchedBlockList(\n oldStart: number,\n oldEnd: number,\n newStart: number,\n newEnd: number,\n matchedBlockList: MatchedBlock[] = [],\n ): MatchedBlock[] {\n const matchBlock = this.computeBestMatchedBlock(oldStart, oldEnd, newStart, newEnd)\n\n if (!matchBlock) {\n return []\n }\n\n if (oldStart < matchBlock.oldStart && newStart < matchBlock.newStart) {\n this.computeMatchedBlockList(\n oldStart,\n matchBlock.oldStart,\n newStart,\n matchBlock.newStart,\n matchedBlockList,\n )\n }\n matchedBlockList.push(matchBlock)\n if (oldEnd > matchBlock.oldEnd && newEnd > matchBlock.newEnd) {\n this.computeMatchedBlockList(\n matchBlock.oldEnd,\n oldEnd,\n matchBlock.newEnd,\n newEnd,\n matchedBlockList,\n )\n }\n return matchedBlockList\n }\n\n private dressUpBlockTag(type: BaseOpType, token: string): string {\n if (type === 'create') {\n return `<div class=\"${this.config.classNames.createBlock}\">${token}</div>`\n }\n if (type === 'delete') {\n return `<div class=\"${this.config.classNames.deleteBlock}\">${token}</div>`\n }\n return ''\n }\n\n private dressUpDiffContent(type: BaseOpType, tokens: string[]): string {\n const tokensLength = tokens.length\n if (!tokensLength) {\n return ''\n }\n\n let result = ''\n let textStartIndex = 0\n let i = -1\n for (const token of tokens) {\n i++\n\n // If this is true, this HTML should be diffed as well - not just its children\n const isMatchElement = token.includes('data-enable-match=\"true\"')\n const isMatchExplicitlyDisabled = token.includes('data-enable-match=\"false\"')\n const isHtmlTag = !!token.match(htmlTagReg)?.length\n\n if (isMatchExplicitlyDisabled) {\n textStartIndex = i + 1\n result += token\n }\n // this token is html tag\n else if (!isMatchElement && isHtmlTag) {\n // handle text tokens before\n if (i > textStartIndex) {\n result += this.dressUpText(type, tokens.slice(textStartIndex, i))\n }\n // handle this tag\n textStartIndex = i + 1\n if (token.match(htmlVideoTagReg)) {\n result += this.dressUpBlockTag(type, token)\n } /* else if ([htmlImgTagReg].some((item) => token.match(item))) {\n result += this.dressUpInlineTag(type, token)\n }*/ else {\n result += token\n }\n } else if (isMatchElement && isHtmlTag) {\n // handle text tokens before\n if (i > textStartIndex) {\n result += this.dressUpText(type, tokens.slice(textStartIndex, i))\n }\n\n // handle this tag\n textStartIndex = i + 1\n // Add data-match-type to the tag that can be styled\n const newToken = this.dressupMatchEnabledHtmlTag(type, token)\n\n result += newToken\n }\n }\n if (textStartIndex < tokensLength) {\n result += this.dressUpText(type, tokens.slice(textStartIndex))\n }\n return result\n }\n\n private dressUpInlineTag(type: BaseOpType, token: string): string {\n if (type === 'create') {\n return `<span class=\"${this.config.classNames.createInline}\">${token}</span>`\n }\n if (type === 'delete') {\n return `<span class=\"${this.config.classNames.deleteInline}\">${token}</span>`\n }\n return ''\n }\n\n private dressupMatchEnabledHtmlTag(type: BaseOpType, token: string): string {\n // token is a single html tag, e.g. <a data-enable-match=\"true\" href=\"https://2\" rel=undefined target=undefined>\n // add data-match-type to the tag\n const tagName = token.match(htmlStartTagReg)?.groups?.name\n if (!tagName) {\n return token\n }\n const tagNameLength = tagName.length + 1\n const matchType = type === 'create' ? 'create' : 'delete'\n return `${token.slice(0, tagNameLength)} data-match-type=\"${matchType}\"${token.slice(\n tagNameLength,\n token.length,\n )}`\n }\n\n private dressUpText(type: BaseOpType, tokens: string[]): string {\n const text = tokens.join('')\n if (!text.trim()) {\n return ''\n }\n if (type === 'create') {\n return `<span data-match-type=\"create\">${text}</span>`\n }\n if (type === 'delete') {\n return `<span data-match-type=\"delete\">${text}</span>`\n }\n return ''\n }\n\n /**\n * Generates a list of token entries that are matched between the old and new HTML. This list will not\n * include token ranges that differ.\n */\n private getMatchedBlockList(): MatchedBlock[] {\n const n1 = this.oldTokens.length\n const n2 = this.newTokens.length\n\n // 1. sync from start\n let start: MatchedBlock | null = null\n let i = 0\n while (i < n1 && i < n2 && this.oldTokens[i] === this.newTokens[i]) {\n i++\n }\n if (i >= this.config.minMatchedSize) {\n start = {\n newEnd: i,\n newStart: 0,\n oldEnd: i,\n oldStart: 0,\n size: i,\n }\n }\n\n // 2. sync from end\n let end: MatchedBlock | null = null\n let e1 = n1 - 1\n let e2 = n2 - 1\n while (i <= e1 && i <= e2 && this.oldTokens[e1] === this.newTokens[e2]) {\n e1--\n e2--\n }\n const size = n1 - 1 - e1\n if (size >= this.config.minMatchedSize) {\n end = {\n newEnd: n2,\n newStart: e2 + 1,\n oldEnd: n1,\n oldStart: e1 + 1,\n size,\n }\n }\n\n // 3. handle rest\n const oldStart = start ? i : 0\n const oldEnd = end ? e1 + 1 : n1\n const newStart = start ? i : 0\n const newEnd = end ? e2 + 1 : n2\n // optimize for large tokens\n if (this.config.greedyMatch) {\n const commonLength = Math.min(oldEnd - oldStart, newEnd - newStart)\n if (commonLength > this.config.greedyBoundary) {\n this.leastCommonLength = Math.floor(commonLength / 3)\n }\n }\n const ret = this.computeMatchedBlockList(oldStart, oldEnd, newStart, newEnd)\n if (start) {\n ret.unshift(start)\n }\n if (end) {\n ret.push(end)\n }\n\n return ret\n }\n\n // Generate operation list by matchedBlockList\n private getOperationList(): Operation[] {\n const operationList: Operation[] = []\n let walkIndexOld = 0\n let walkIndexNew = 0\n for (const matchedBlock of this.matchedBlockList) {\n const isOldStartIndexMatched = walkIndexOld === matchedBlock.oldStart\n const isNewStartIndexMatched = walkIndexNew === matchedBlock.newStart\n const operationBase = {\n newEnd: matchedBlock.newStart,\n newStart: walkIndexNew,\n oldEnd: matchedBlock.oldStart,\n oldStart: walkIndexOld,\n }\n if (!isOldStartIndexMatched && !isNewStartIndexMatched) {\n operationList.push(Object.assign(operationBase, { type: 'replace' as const }))\n } else if (isOldStartIndexMatched && !isNewStartIndexMatched) {\n operationList.push(Object.assign(operationBase, { type: 'create' as const }))\n } else if (!isOldStartIndexMatched && isNewStartIndexMatched) {\n operationList.push(Object.assign(operationBase, { type: 'delete' as const }))\n }\n\n operationList.push({\n type: 'equal',\n newEnd: matchedBlock.newEnd,\n newStart: matchedBlock.newStart,\n oldEnd: matchedBlock.oldEnd,\n oldStart: matchedBlock.oldStart,\n })\n walkIndexOld = matchedBlock.oldEnd\n walkIndexNew = matchedBlock.newEnd\n }\n // handle the tail content\n const maxIndexOld = this.oldTokens.length\n const maxIndexNew = this.newTokens.length\n const tailOperationBase = {\n newEnd: maxIndexNew,\n newStart: walkIndexNew,\n oldEnd: maxIndexOld,\n oldStart: walkIndexOld,\n }\n const isOldFinished = walkIndexOld === maxIndexOld\n const isNewFinished = walkIndexNew === maxIndexNew\n if (!isOldFinished && !isNewFinished) {\n operationList.push(Object.assign(tailOperationBase, { type: 'replace' as const }))\n } else if (isOldFinished && !isNewFinished) {\n operationList.push(Object.assign(tailOperationBase, { type: 'create' as const }))\n } else if (!isOldFinished && isNewFinished) {\n operationList.push(Object.assign(tailOperationBase, { type: 'delete' as const }))\n }\n return operationList\n }\n\n private slideBestMatchedBlock(addA: number, addB: number, len: number): MatchedBlock | null {\n let maxSize = 0\n let bestMatchedBlock: MatchedBlock | null = null\n\n let continuousSize = 0\n for (let i = 0; i < len; i++) {\n if (this.oldTokens[addA + i] === this.newTokens[addB + i]) {\n continuousSize++\n } else {\n continuousSize = 0\n }\n if (continuousSize > maxSize) {\n maxSize = continuousSize\n bestMatchedBlock = {\n newEnd: addB + i + 1,\n newStart: addB + i - continuousSize + 1,\n oldEnd: addA + i + 1,\n oldStart: addA + i - continuousSize + 1,\n size: continuousSize,\n }\n }\n }\n\n return maxSize >= this.config.minMatchedSize ? bestMatchedBlock : null\n }\n\n /**\n * Convert HTML to tokens at character level, preserving HTML tags as complete tokens\n * @example\n * tokenize(\"<a> Hello World </a>\")\n * [\"<a>\", \" \", \"H\", \"e\", \"l\", \"l\", \"o\", \" \", \"W\", \"o\", \"r\", \"l\", \"d\", \" \", \"</a>\"]\n */\n private tokenizeByCharacter(html: string): string[] {\n // First, identify HTML tags and preserve them as complete tokens\n const tokens: string[] = []\n let currentPos = 0\n\n // Regular expression to match HTML tags (including picture and video tags with content)\n const tagRegex = /<picture[^>]*>.*?<\\/picture>|<video[^>]*>.*?<\\/video>|<[^>]+>/gs\n let match: null | RegExpExecArray\n\n while ((match = tagRegex.exec(html)) !== null) {\n // Add characters before the tag\n const beforeTag = html.substring(currentPos, match.index)\n if (beforeTag) {\n // Split non-tag content into individual characters\n for (const char of beforeTag) {\n tokens.push(char)\n }\n }\n\n // Add the complete tag as a single token\n tokens.push(match[0])\n currentPos = match.index + match[0].length\n }\n\n // Add any remaining characters after the last tag\n const remaining = html.substring(currentPos)\n for (const char of remaining) {\n tokens.push(char)\n }\n\n return tokens\n }\n\n /**\n * convert HTML to tokens\n * @example\n * tokenize(\"<a> Hello World </a>\")\n * [\"<a>\",\" \", \"Hello\", \" \", \"World\", \" \", \"</a>\"]\n */\n private tokenizeByWord(html: string): string[] {\n // atomic token: html tag、continuous numbers or letters、blank spaces、other symbol\n return (\n html.match(\n /<picture[^>]*>.*?<\\/picture>|<video[^>]*>.*?<\\/video>|<[^>]+>|\\w+\\b|\\s+|[^<>\\w]/gs,\n ) || []\n )\n }\n\n public getSideBySideContents(): string[] {\n if (this.sideBySideContents !== undefined) {\n return this.sideBySideContents\n }\n\n let oldHtml = ''\n let newHtml = ''\n let equalSequence = 0\n this.operationList.forEach((operation) => {\n switch (operation.type) {\n case 'create': {\n newHtml += this.dressUpDiffContent(\n 'create',\n this.newTokens.slice(operation.newStart, operation.newEnd),\n )\n break\n }\n\n case 'delete': {\n const deletedTokens = this.oldTokens.slice(operation.oldStart, operation.oldEnd)\n oldHtml += this.dressUpDiffContent('delete', deletedTokens)\n break\n }\n case 'equal': {\n const equalTokens = this.newTokens.slice(operation.newStart, operation.newEnd)\n let equalString = ''\n for (const token of equalTokens) {\n // find start tags and add data-seq to enable sync scroll\n const startTagMatch = token.match(htmlStartTagReg)\n if (startTagMatch) {\n equalSequence += 1\n const tagNameLength = (startTagMatch?.groups?.name?.length ?? 0) + 1\n equalString += `${token.slice(0, tagNameLength)} data-seq=\"${equalSequence}\"${token.slice(tagNameLength)}`\n } else {\n equalString += token\n }\n }\n oldHtml += equalString\n newHtml += equalString\n break\n }\n\n case 'replace': {\n oldHtml += this.dressUpDiffContent(\n 'delete',\n this.oldTokens.slice(operation.oldStart, operation.oldEnd),\n )\n newHtml += this.dressUpDiffContent(\n 'create',\n this.newTokens.slice(operation.newStart, operation.newEnd),\n )\n break\n }\n\n default: {\n console.error('Richtext diff error - invalid operation: ' + String(operation.type))\n }\n }\n })\n\n const result: [string, string] = [oldHtml, newHtml]\n this.sideBySideContents = result\n return result\n }\n\n public getUnifiedContent(): string {\n if (this.unifiedContent !== undefined) {\n return this.unifiedContent\n }\n\n let result = ''\n this.operationList.forEach((operation) => {\n switch (operation.type) {\n case 'create': {\n result += this.dressUpDiffContent(\n 'create',\n this.newTokens.slice(operation.newStart, operation.newEnd),\n )\n break\n }\n\n case 'delete': {\n result += this.dressUpDiffContent(\n 'delete',\n this.oldTokens.slice(operation.oldStart, operation.oldEnd),\n )\n break\n }\n\n case 'equal': {\n for (const token of this.newTokens.slice(operation.newStart, operation.newEnd)) {\n result += token\n }\n break\n }\n\n case 'replace': {\n // handle specially tag replace\n const olds = this.oldTokens.slice(operation.oldStart, operation.oldEnd)\n const news = this.newTokens.slice(operation.newStart, operation.newEnd)\n if (\n olds.length === 1 &&\n news.length === 1 &&\n olds[0]?.match(htmlTagReg) &&\n news[0]?.match(htmlTagReg)\n ) {\n result += news[0]\n break\n }\n\n const deletedTokens: string[] = []\n const createdTokens: string[] = []\n let createIndex = operation.newStart\n for (\n let deleteIndex = operation.oldStart;\n deleteIndex < operation.oldEnd;\n deleteIndex++\n ) {\n const deletedToken = this.oldTokens[deleteIndex]\n\n if (!deletedToken) {\n continue\n }\n\n const matchTagResultD = deletedToken?.match(htmlTagWithNameReg)\n if (matchTagResultD) {\n // handle replaced tag token\n\n // skip special tag\n if ([htmlImgTagReg, htmlVideoTagReg].some((item) => deletedToken?.match(item))) {\n deletedTokens.push(deletedToken)\n continue\n }\n\n // handle normal tag\n result += this.dressUpDiffContent('delete', deletedTokens)\n deletedTokens.splice(0)\n let isTagInNewFind = false\n for (\n let tempCreateIndex = createIndex;\n tempCreateIndex < operation.newEnd;\n tempCreateIndex++\n ) {\n const createdToken = this.newTokens[tempCreateIndex]\n if (!createdToken) {\n continue\n }\n const matchTagResultC = createdToken?.match(htmlTagWithNameReg)\n if (\n matchTagResultC &&\n matchTagResultC.groups?.name === matchTagResultD.groups?.name &&\n matchTagResultC.groups?.isEnd === matchTagResultD.groups?.isEnd\n ) {\n // find first matched tag, but not maybe the expected tag(to optimize)\n isTagInNewFind = true\n result += this.dressUpDiffContent('create', createdTokens)\n result += createdToken\n createdTokens.splice(0)\n createIndex = tempCreateIndex + 1\n break\n } else {\n createdTokens.push(createdToken)\n }\n }\n if (!isTagInNewFind) {\n result += deletedToken\n createdTokens.splice(0)\n }\n } else {\n // token is not a tag\n deletedTokens.push(deletedToken)\n }\n }\n if (createIndex < operation.newEnd) {\n createdTokens.push(...this.newTokens.slice(createIndex, operation.newEnd))\n }\n result += this.dressUpDiffContent('delete', deletedTokens)\n result += this.dressUpDiffContent('create', createdTokens)\n break\n }\n\n default: {\n console.error('Richtext diff error - invalid operation: ' + String(operation.type))\n }\n }\n })\n this.unifiedContent = result\n return result\n }\n}\n"],"names":["htmlStartTagReg","htmlTagWithNameReg","htmlTagReg","htmlImgTagReg","htmlVideoTagReg","HtmlDiff","config","leastCommonLength","Infinity","matchedBlockList","newTokens","oldTokens","operationList","sideBySideContents","unifiedContent","constructor","oldHtml","newHtml","classNames","createBlock","createInline","deleteBlock","deleteInline","greedyBoundary","greedyMatch","minMatchedSize","tokenizeByCharacter","trim","equalSequence","content","replace","match","name","tagNameLength","length","slice","tokenizeFn","tokenizeByWord","getMatchedBlockList","getOperationList","computeBestMatchedBlock","oldStart","oldEnd","newStart","newEnd","bestMatchedBlock","i","len","Math","min","ret","slideBestMatchedBlock","size","j","computeMatchedBlockList","matchBlock","push","dressUpBlockTag","type","token","dressUpDiffContent","tokens","tokensLength","result","textStartIndex","isMatchElement","includes","isMatchExplicitlyDisabled","isHtmlTag","dressUpText","newToken","dressupMatchEnabledHtmlTag","dressUpInlineTag","tagName","groups","matchType","text","join","n1","n2","start","end","e1","e2","commonLength","floor","unshift","walkIndexOld","walkIndexNew","matchedBlock","isOldStartIndexMatched","isNewStartIndexMatched","operationBase","Object","assign","maxIndexOld","maxIndexNew","tailOperationBase","isOldFinished","isNewFinished","addA","addB","maxSize","continuousSize","html","currentPos","tagRegex","exec","beforeTag","substring","index","char","remaining","getSideBySideContents","undefined","forEach","operation","deletedTokens","equalTokens","equalString","startTagMatch","console","error","String","getUnifiedContent","olds","news","createdTokens","createIndex","deleteIndex","deletedToken","matchTagResultD","some","item","splice","isTagInNewFind","tempCreateIndex","createdToken","matchTagResultC","isEnd"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/elements/HTMLDiff/diff/index.ts"],"sourcesContent":["// Taken and modified from https://github.com/Arman19941113/html-diff/blob/master/packages/html-diff/src/index.ts\n\ninterface MatchedBlock {\n newEnd: number\n newStart: number\n oldEnd: number\n oldStart: number\n size: number\n}\n\ninterface Operation {\n /**\n * Index of entry in tokenized token list\n */\n newEnd: number\n newStart: number\n oldEnd: number\n oldStart: number\n type: 'create' | 'delete' | 'equal' | 'replace'\n}\n\ntype BaseOpType = 'create' | 'delete'\n\ninterface HtmlDiffConfig {\n classNames: {\n createBlock: string\n createInline: string\n deleteBlock: string\n deleteInline: string\n }\n greedyBoundary: number\n greedyMatch: boolean\n minMatchedSize: number\n}\n\nexport interface HtmlDiffOptions {\n /**\n * The classNames for wrapper DOM.\n * Use this to configure your own styles without importing the built-in CSS file\n */\n classNames?: Partial<{\n createBlock?: string\n createInline?: string\n deleteBlock?: string\n deleteInline?: string\n }>\n /**\n * @defaultValue 1000\n */\n greedyBoundary?: number\n /**\n * When greedyMatch is enabled, if the length of the sub-tokens exceeds greedyBoundary,\n * we will use the matched sub-tokens that are sufficiently good, even if they are not optimal, to enhance performance.\n * @defaultValue true\n */\n greedyMatch?: boolean\n /**\n * Determine the minimum threshold for calculating common sub-tokens.\n * You may adjust it to a value larger than 2, but not lower, due to the potential inclusion of HTML tags in the count.\n * @defaultValue 2\n */\n minMatchedSize?: number\n /**\n * Whether to tokenize by character or by word.\n * @defaultValue false\n */\n tokenizeByCharacter?: boolean\n}\n\n// eslint-disable-next-line regexp/no-super-linear-backtracking, regexp/optimal-quantifier-concatenation\nconst htmlStartTagReg = /^<(?<name>[^\\s/>]+)[^>]*>$/\n// eslint-disable-next-line regexp/no-super-linear-backtracking, regexp/optimal-quantifier-concatenation\nconst htmlTagWithNameReg = /^<(?<isEnd>\\/)?(?<name>[^\\s>]+)[^>]*>$/\n\nconst htmlTagReg = /^<[^>]+>/\nconst htmlImgTagReg = /^<img[^>]*>$/\nconst htmlVideoTagReg = /^<video[^>]*>.*?<\\/video>$/ms\n\nexport class HtmlDiff {\n private readonly config: HtmlDiffConfig\n private leastCommonLength: number = Infinity\n private readonly matchedBlockList: MatchedBlock[] = []\n private readonly newTokens: string[] = []\n private readonly oldTokens: string[] = []\n private readonly operationList: Operation[] = []\n private sideBySideContents?: [string, string]\n private unifiedContent?: string\n\n constructor(\n oldHtml: string,\n newHtml: string,\n {\n classNames = {\n createBlock: 'html-diff-create-block-wrapper',\n createInline: 'html-diff-create-inline-wrapper',\n deleteBlock: 'html-diff-delete-block-wrapper',\n deleteInline: 'html-diff-delete-inline-wrapper',\n },\n greedyBoundary = 1000,\n greedyMatch = true,\n minMatchedSize = 2,\n tokenizeByCharacter = false,\n }: HtmlDiffOptions = {},\n ) {\n // init config\n this.config = {\n classNames: {\n createBlock: 'html-diff-create-block-wrapper',\n createInline: 'html-diff-create-inline-wrapper',\n deleteBlock: 'html-diff-delete-block-wrapper',\n deleteInline: 'html-diff-delete-inline-wrapper',\n ...classNames,\n },\n greedyBoundary,\n greedyMatch,\n minMatchedSize,\n }\n // white space is junk\n oldHtml = oldHtml.trim()\n newHtml = newHtml.trim()\n\n // no need to diff\n if (oldHtml === newHtml) {\n this.unifiedContent = oldHtml\n let equalSequence = 0\n // eslint-disable-next-line regexp/no-super-linear-backtracking, regexp/optimal-quantifier-concatenation\n const content = oldHtml.replace(/<([^\\s/>]+)[^>]*>/g, (match: string, name: string) => {\n const tagNameLength = name.length + 1\n return `${match.slice(0, tagNameLength)} data-seq=\"${++equalSequence}\"${match.slice(tagNameLength)}`\n })\n this.sideBySideContents = [content, content]\n return\n }\n\n // step1: split HTML to tokens(atomic tokens)\n const tokenizeFn = tokenizeByCharacter ? this.tokenizeByCharacter : this.tokenizeByWord\n this.oldTokens = tokenizeFn(oldHtml)\n this.newTokens = tokenizeFn(newHtml)\n // step2: find matched blocks\n this.matchedBlockList = this.getMatchedBlockList()\n\n // step3: generate operation list\n this.operationList = this.getOperationList()\n }\n\n // Find the longest matched block between tokens\n private computeBestMatchedBlock(\n oldStart: number,\n oldEnd: number,\n newStart: number,\n newEnd: number,\n ): MatchedBlock | null {\n let bestMatchedBlock = null\n for (let i = oldStart; i < oldEnd; i++) {\n const len = Math.min(oldEnd - i, newEnd - newStart)\n const ret = this.slideBestMatchedBlock(i, newStart, len)\n if (ret && (!bestMatchedBlock || ret.size > bestMatchedBlock.size)) {\n bestMatchedBlock = ret\n if (ret.size > this.leastCommonLength) {\n return bestMatchedBlock\n }\n }\n }\n for (let j = newStart; j < newEnd; j++) {\n const len = Math.min(oldEnd - oldStart, newEnd - j)\n const ret = this.slideBestMatchedBlock(oldStart, j, len)\n if (ret && (!bestMatchedBlock || ret.size > bestMatchedBlock.size)) {\n bestMatchedBlock = ret\n if (ret.size > this.leastCommonLength) {\n return bestMatchedBlock\n }\n }\n }\n return bestMatchedBlock\n }\n\n private computeMatchedBlockList(\n oldStart: number,\n oldEnd: number,\n newStart: number,\n newEnd: number,\n matchedBlockList: MatchedBlock[] = [],\n ): MatchedBlock[] {\n const matchBlock = this.computeBestMatchedBlock(oldStart, oldEnd, newStart, newEnd)\n\n if (!matchBlock) {\n return []\n }\n\n if (oldStart < matchBlock.oldStart && newStart < matchBlock.newStart) {\n this.computeMatchedBlockList(\n oldStart,\n matchBlock.oldStart,\n newStart,\n matchBlock.newStart,\n matchedBlockList,\n )\n }\n matchedBlockList.push(matchBlock)\n if (oldEnd > matchBlock.oldEnd && newEnd > matchBlock.newEnd) {\n this.computeMatchedBlockList(\n matchBlock.oldEnd,\n oldEnd,\n matchBlock.newEnd,\n newEnd,\n matchedBlockList,\n )\n }\n return matchedBlockList\n }\n\n private dressUpBlockTag(type: BaseOpType, token: string): string {\n if (type === 'create') {\n return `<div class=\"${this.config.classNames.createBlock}\">${token}</div>`\n }\n if (type === 'delete') {\n return `<div class=\"${this.config.classNames.deleteBlock}\">${token}</div>`\n }\n return ''\n }\n\n private dressUpDiffContent(type: BaseOpType, tokens: string[]): string {\n const tokensLength = tokens.length\n if (!tokensLength) {\n return ''\n }\n\n let result = ''\n let textStartIndex = 0\n let i = -1\n for (const token of tokens) {\n i++\n\n // If this is true, this HTML should be diffed as well - not just its children\n const isMatchElement = token.includes('data-enable-match=\"true\"')\n const isMatchExplicitlyDisabled = token.includes('data-enable-match=\"false\"')\n const isHtmlTag = !!token.match(htmlTagReg)?.length\n\n if (isMatchExplicitlyDisabled) {\n textStartIndex = i + 1\n result += token\n }\n // this token is html tag\n else if (!isMatchElement && isHtmlTag) {\n // handle text tokens before\n if (i > textStartIndex) {\n result += this.dressUpText(type, tokens.slice(textStartIndex, i))\n }\n // handle this tag\n textStartIndex = i + 1\n if (token.match(htmlVideoTagReg)) {\n result += this.dressUpBlockTag(type, token)\n } /* else if ([htmlImgTagReg].some((item) => token.match(item))) {\n result += this.dressUpInlineTag(type, token)\n }*/ else {\n result += token\n }\n } else if (isMatchElement && isHtmlTag) {\n // handle text tokens before\n if (i > textStartIndex) {\n result += this.dressUpText(type, tokens.slice(textStartIndex, i))\n }\n\n // handle this tag\n textStartIndex = i + 1\n // Add data-match-type to the tag that can be styled\n const newToken = this.dressupMatchEnabledHtmlTag(type, token)\n\n result += newToken\n }\n }\n if (textStartIndex < tokensLength) {\n result += this.dressUpText(type, tokens.slice(textStartIndex))\n }\n return result\n }\n\n private dressUpInlineTag(type: BaseOpType, token: string): string {\n if (type === 'create') {\n return `<span class=\"${this.config.classNames.createInline}\">${token}</span>`\n }\n if (type === 'delete') {\n return `<span class=\"${this.config.classNames.deleteInline}\">${token}</span>`\n }\n return ''\n }\n\n private dressupMatchEnabledHtmlTag(type: BaseOpType, token: string): string {\n // token is a single html tag, e.g. <a data-enable-match=\"true\" href=\"https://2\" rel=undefined target=undefined>\n // add data-match-type to the tag\n const tagName = token.match(htmlStartTagReg)?.groups?.name\n if (!tagName) {\n return token\n }\n const tagNameLength = tagName.length + 1\n const matchType = type === 'create' ? 'create' : 'delete'\n return `${token.slice(0, tagNameLength)} data-match-type=\"${matchType}\"${token.slice(\n tagNameLength,\n token.length,\n )}`\n }\n\n private dressUpText(type: BaseOpType, tokens: string[]): string {\n const text = tokens.join('')\n if (!text.trim()) {\n return ''\n }\n if (type === 'create') {\n return `<span data-match-type=\"create\">${text}</span>`\n }\n if (type === 'delete') {\n return `<span data-match-type=\"delete\">${text}</span>`\n }\n return ''\n }\n\n /**\n * Generates a list of token entries that are matched between the old and new HTML. This list will not\n * include token ranges that differ.\n */\n private getMatchedBlockList(): MatchedBlock[] {\n const n1 = this.oldTokens.length\n const n2 = this.newTokens.length\n\n // 1. sync from start\n let start: MatchedBlock | null = null\n let i = 0\n while (i < n1 && i < n2 && this.oldTokens[i] === this.newTokens[i]) {\n i++\n }\n if (i >= this.config.minMatchedSize) {\n start = {\n newEnd: i,\n newStart: 0,\n oldEnd: i,\n oldStart: 0,\n size: i,\n }\n }\n\n // 2. sync from end\n let end: MatchedBlock | null = null\n let e1 = n1 - 1\n let e2 = n2 - 1\n while (i <= e1 && i <= e2 && this.oldTokens[e1] === this.newTokens[e2]) {\n e1--\n e2--\n }\n const size = n1 - 1 - e1\n if (size >= this.config.minMatchedSize) {\n end = {\n newEnd: n2,\n newStart: e2 + 1,\n oldEnd: n1,\n oldStart: e1 + 1,\n size,\n }\n }\n\n // 3. handle rest\n const oldStart = start ? i : 0\n const oldEnd = end ? e1 + 1 : n1\n const newStart = start ? i : 0\n const newEnd = end ? e2 + 1 : n2\n // optimize for large tokens\n if (this.config.greedyMatch) {\n const commonLength = Math.min(oldEnd - oldStart, newEnd - newStart)\n if (commonLength > this.config.greedyBoundary) {\n this.leastCommonLength = Math.floor(commonLength / 3)\n }\n }\n const ret = this.computeMatchedBlockList(oldStart, oldEnd, newStart, newEnd)\n if (start) {\n ret.unshift(start)\n }\n if (end) {\n ret.push(end)\n }\n\n return ret\n }\n\n // Generate operation list by matchedBlockList\n private getOperationList(): Operation[] {\n const operationList: Operation[] = []\n let walkIndexOld = 0\n let walkIndexNew = 0\n for (const matchedBlock of this.matchedBlockList) {\n const isOldStartIndexMatched = walkIndexOld === matchedBlock.oldStart\n const isNewStartIndexMatched = walkIndexNew === matchedBlock.newStart\n const operationBase = {\n newEnd: matchedBlock.newStart,\n newStart: walkIndexNew,\n oldEnd: matchedBlock.oldStart,\n oldStart: walkIndexOld,\n }\n if (!isOldStartIndexMatched && !isNewStartIndexMatched) {\n operationList.push(Object.assign(operationBase, { type: 'replace' as const }))\n } else if (isOldStartIndexMatched && !isNewStartIndexMatched) {\n operationList.push(Object.assign(operationBase, { type: 'create' as const }))\n } else if (!isOldStartIndexMatched && isNewStartIndexMatched) {\n operationList.push(Object.assign(operationBase, { type: 'delete' as const }))\n }\n\n operationList.push({\n type: 'equal',\n newEnd: matchedBlock.newEnd,\n newStart: matchedBlock.newStart,\n oldEnd: matchedBlock.oldEnd,\n oldStart: matchedBlock.oldStart,\n })\n walkIndexOld = matchedBlock.oldEnd\n walkIndexNew = matchedBlock.newEnd\n }\n // handle the tail content\n const maxIndexOld = this.oldTokens.length\n const maxIndexNew = this.newTokens.length\n const tailOperationBase = {\n newEnd: maxIndexNew,\n newStart: walkIndexNew,\n oldEnd: maxIndexOld,\n oldStart: walkIndexOld,\n }\n const isOldFinished = walkIndexOld === maxIndexOld\n const isNewFinished = walkIndexNew === maxIndexNew\n if (!isOldFinished && !isNewFinished) {\n operationList.push(Object.assign(tailOperationBase, { type: 'replace' as const }))\n } else if (isOldFinished && !isNewFinished) {\n operationList.push(Object.assign(tailOperationBase, { type: 'create' as const }))\n } else if (!isOldFinished && isNewFinished) {\n operationList.push(Object.assign(tailOperationBase, { type: 'delete' as const }))\n }\n return operationList\n }\n\n private slideBestMatchedBlock(addA: number, addB: number, len: number): MatchedBlock | null {\n let maxSize = 0\n let bestMatchedBlock: MatchedBlock | null = null\n\n let continuousSize = 0\n for (let i = 0; i < len; i++) {\n if (this.oldTokens[addA + i] === this.newTokens[addB + i]) {\n continuousSize++\n } else {\n continuousSize = 0\n }\n if (continuousSize > maxSize) {\n maxSize = continuousSize\n bestMatchedBlock = {\n newEnd: addB + i + 1,\n newStart: addB + i - continuousSize + 1,\n oldEnd: addA + i + 1,\n oldStart: addA + i - continuousSize + 1,\n size: continuousSize,\n }\n }\n }\n\n return maxSize >= this.config.minMatchedSize ? bestMatchedBlock : null\n }\n\n /**\n * Convert HTML to tokens at character level, preserving HTML tags as complete tokens\n * @example\n * tokenize(\"<a> Hello World </a>\")\n * [\"<a>\", \" \", \"H\", \"e\", \"l\", \"l\", \"o\", \" \", \"W\", \"o\", \"r\", \"l\", \"d\", \" \", \"</a>\"]\n */\n private tokenizeByCharacter(html: string): string[] {\n // First, identify HTML tags and preserve them as complete tokens\n const tokens: string[] = []\n let currentPos = 0\n\n // Regular expression to match HTML tags (including picture and video tags with content)\n const tagRegex = /<picture[^>]*>.*?<\\/picture>|<video[^>]*>.*?<\\/video>|<[^>]+>/gs\n let match: null | RegExpExecArray\n\n while ((match = tagRegex.exec(html)) !== null) {\n // Add characters before the tag\n const beforeTag = html.substring(currentPos, match.index)\n if (beforeTag) {\n // Split non-tag content into individual characters\n for (const char of beforeTag) {\n tokens.push(char)\n }\n }\n\n // Add the complete tag as a single token\n tokens.push(match[0])\n currentPos = match.index + match[0].length\n }\n\n // Add any remaining characters after the last tag\n const remaining = html.substring(currentPos)\n for (const char of remaining) {\n tokens.push(char)\n }\n\n return tokens\n }\n\n /**\n * convert HTML to tokens\n * @example\n * tokenize(\"<a> Hello World </a>\")\n * [\"<a>\",\" \", \"Hello\", \" \", \"World\", \" \", \"</a>\"]\n */\n private tokenizeByWord(html: string): string[] {\n // atomic token: html tag、continuous numbers or letters、blank spaces、other symbol\n return (\n html.match(\n /<picture[^>]*>.*?<\\/picture>|<video[^>]*>.*?<\\/video>|<[^>]+>|\\w+\\b|\\s+|[^<>\\w]/gs,\n ) || []\n )\n }\n\n public getSideBySideContents(): string[] {\n if (this.sideBySideContents !== undefined) {\n return this.sideBySideContents\n }\n\n let oldHtml = ''\n let newHtml = ''\n let equalSequence = 0\n this.operationList.forEach((operation) => {\n switch (operation.type) {\n case 'create': {\n newHtml += this.dressUpDiffContent(\n 'create',\n this.newTokens.slice(operation.newStart, operation.newEnd),\n )\n break\n }\n\n case 'delete': {\n const deletedTokens = this.oldTokens.slice(operation.oldStart, operation.oldEnd)\n oldHtml += this.dressUpDiffContent('delete', deletedTokens)\n break\n }\n case 'equal': {\n const equalTokens = this.newTokens.slice(operation.newStart, operation.newEnd)\n let equalString = ''\n for (const token of equalTokens) {\n // find start tags and add data-seq to enable sync scroll\n const startTagMatch = token.match(htmlStartTagReg)\n if (startTagMatch) {\n equalSequence += 1\n const tagNameLength = (startTagMatch?.groups?.name?.length ?? 0) + 1\n equalString += `${token.slice(0, tagNameLength)} data-seq=\"${equalSequence}\"${token.slice(tagNameLength)}`\n } else {\n equalString += token\n }\n }\n oldHtml += equalString\n newHtml += equalString\n break\n }\n\n case 'replace': {\n oldHtml += this.dressUpDiffContent(\n 'delete',\n this.oldTokens.slice(operation.oldStart, operation.oldEnd),\n )\n newHtml += this.dressUpDiffContent(\n 'create',\n this.newTokens.slice(operation.newStart, operation.newEnd),\n )\n break\n }\n\n default: {\n console.error('Richtext diff error - invalid operation: ' + String(operation.type))\n }\n }\n })\n\n const result: [string, string] = [oldHtml, newHtml]\n this.sideBySideContents = result\n return result\n }\n\n public getUnifiedContent(): string {\n if (this.unifiedContent !== undefined) {\n return this.unifiedContent\n }\n\n let result = ''\n this.operationList.forEach((operation) => {\n switch (operation.type) {\n case 'create': {\n result += this.dressUpDiffContent(\n 'create',\n this.newTokens.slice(operation.newStart, operation.newEnd),\n )\n break\n }\n\n case 'delete': {\n result += this.dressUpDiffContent(\n 'delete',\n this.oldTokens.slice(operation.oldStart, operation.oldEnd),\n )\n break\n }\n\n case 'equal': {\n for (const token of this.newTokens.slice(operation.newStart, operation.newEnd)) {\n result += token\n }\n break\n }\n\n case 'replace': {\n // handle specially tag replace\n const olds = this.oldTokens.slice(operation.oldStart, operation.oldEnd)\n const news = this.newTokens.slice(operation.newStart, operation.newEnd)\n if (\n olds.length === 1 &&\n news.length === 1 &&\n olds[0]?.match(htmlTagReg) &&\n news[0]?.match(htmlTagReg)\n ) {\n result += news[0]\n break\n }\n\n const deletedTokens: string[] = []\n const createdTokens: string[] = []\n let createIndex = operation.newStart\n for (\n let deleteIndex = operation.oldStart;\n deleteIndex < operation.oldEnd;\n deleteIndex++\n ) {\n const deletedToken = this.oldTokens[deleteIndex]\n\n if (!deletedToken) {\n continue\n }\n\n const matchTagResultD = deletedToken?.match(htmlTagWithNameReg)\n if (matchTagResultD) {\n // handle replaced tag token\n\n // skip special tag\n if ([htmlImgTagReg, htmlVideoTagReg].some((item) => deletedToken?.match(item))) {\n deletedTokens.push(deletedToken)\n continue\n }\n\n // handle normal tag\n result += this.dressUpDiffContent('delete', deletedTokens)\n deletedTokens.splice(0)\n let isTagInNewFind = false\n for (\n let tempCreateIndex = createIndex;\n tempCreateIndex < operation.newEnd;\n tempCreateIndex++\n ) {\n const createdToken = this.newTokens[tempCreateIndex]\n if (!createdToken) {\n continue\n }\n const matchTagResultC = createdToken?.match(htmlTagWithNameReg)\n if (\n matchTagResultC &&\n matchTagResultC.groups?.name === matchTagResultD.groups?.name &&\n matchTagResultC.groups?.isEnd === matchTagResultD.groups?.isEnd\n ) {\n // find first matched tag, but not maybe the expected tag(to optimize)\n isTagInNewFind = true\n result += this.dressUpDiffContent('create', createdTokens)\n result += createdToken\n createdTokens.splice(0)\n createIndex = tempCreateIndex + 1\n break\n } else {\n createdTokens.push(createdToken)\n }\n }\n if (!isTagInNewFind) {\n result += deletedToken\n createdTokens.splice(0)\n }\n } else {\n // token is not a tag\n deletedTokens.push(deletedToken)\n }\n }\n if (createIndex < operation.newEnd) {\n createdTokens.push(...this.newTokens.slice(createIndex, operation.newEnd))\n }\n result += this.dressUpDiffContent('delete', deletedTokens)\n result += this.dressUpDiffContent('create', createdTokens)\n break\n }\n\n default: {\n console.error('Richtext diff error - invalid operation: ' + String(operation.type))\n }\n }\n })\n this.unifiedContent = result\n return result\n }\n}\n"],"names":["htmlStartTagReg","htmlTagWithNameReg","htmlTagReg","htmlImgTagReg","htmlVideoTagReg","HtmlDiff","config","leastCommonLength","Infinity","matchedBlockList","newTokens","oldTokens","operationList","sideBySideContents","unifiedContent","constructor","oldHtml","newHtml","classNames","createBlock","createInline","deleteBlock","deleteInline","greedyBoundary","greedyMatch","minMatchedSize","tokenizeByCharacter","trim","equalSequence","content","replace","match","name","tagNameLength","length","slice","tokenizeFn","tokenizeByWord","getMatchedBlockList","getOperationList","computeBestMatchedBlock","oldStart","oldEnd","newStart","newEnd","bestMatchedBlock","i","len","Math","min","ret","slideBestMatchedBlock","size","j","computeMatchedBlockList","matchBlock","push","dressUpBlockTag","type","token","dressUpDiffContent","tokens","tokensLength","result","textStartIndex","isMatchElement","includes","isMatchExplicitlyDisabled","isHtmlTag","dressUpText","newToken","dressupMatchEnabledHtmlTag","dressUpInlineTag","tagName","groups","matchType","text","join","n1","n2","start","end","e1","e2","commonLength","floor","unshift","walkIndexOld","walkIndexNew","matchedBlock","isOldStartIndexMatched","isNewStartIndexMatched","operationBase","Object","assign","maxIndexOld","maxIndexNew","tailOperationBase","isOldFinished","isNewFinished","addA","addB","maxSize","continuousSize","html","currentPos","tagRegex","exec","beforeTag","substring","index","char","remaining","getSideBySideContents","undefined","forEach","operation","deletedTokens","equalTokens","equalString","startTagMatch","console","error","String","getUnifiedContent","olds","news","createdTokens","createIndex","deleteIndex","deletedToken","matchTagResultD","some","item","splice","isTagInNewFind","tempCreateIndex","createdToken","matchTagResultC","isEnd"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { HtmlDiff } from './diff/index.js';
|
|
4
4
|
import './index.scss';
|
|
@@ -8,18 +8,26 @@ export const getHTMLDiffComponents = ({ fromHTML, toHTML, tokenizeByCharacter })
|
|
|
8
8
|
tokenizeByCharacter
|
|
9
9
|
});
|
|
10
10
|
const [oldHTML, newHTML] = diffHTML.getSideBySideContents();
|
|
11
|
-
const From = oldHTML ? /*#__PURE__*/
|
|
11
|
+
const From = oldHTML ? /*#__PURE__*/ _jsxDEV("div", {
|
|
12
12
|
className: `${baseClass}__diff-old html-diff`,
|
|
13
13
|
dangerouslySetInnerHTML: {
|
|
14
14
|
__html: oldHTML
|
|
15
15
|
}
|
|
16
|
-
}
|
|
17
|
-
|
|
16
|
+
}, void 0, false, {
|
|
17
|
+
fileName: "src/elements/HTMLDiff/index.tsx",
|
|
18
|
+
lineNumber: 27,
|
|
19
|
+
columnNumber: 5
|
|
20
|
+
}, this) : null;
|
|
21
|
+
const To = newHTML ? /*#__PURE__*/ _jsxDEV("div", {
|
|
18
22
|
className: `${baseClass}__diff-new html-diff`,
|
|
19
23
|
dangerouslySetInnerHTML: {
|
|
20
24
|
__html: newHTML
|
|
21
25
|
}
|
|
22
|
-
}
|
|
26
|
+
}, void 0, false, {
|
|
27
|
+
fileName: "src/elements/HTMLDiff/index.tsx",
|
|
28
|
+
lineNumber: 34,
|
|
29
|
+
columnNumber: 5
|
|
30
|
+
}, this) : null;
|
|
23
31
|
return {
|
|
24
32
|
From,
|
|
25
33
|
To
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/HTMLDiff/index.tsx"],"sourcesContent":["import React from 'react'\n\nimport { HtmlDiff } from './diff/index.js'\nimport './index.scss'\n\nconst baseClass = 'html-diff'\n\nexport const getHTMLDiffComponents = ({\n fromHTML,\n toHTML,\n tokenizeByCharacter,\n}: {\n fromHTML: string\n toHTML: string\n tokenizeByCharacter?: boolean\n}): {\n From: React.ReactNode\n To: React.ReactNode\n} => {\n const diffHTML = new HtmlDiff(fromHTML, toHTML, {\n tokenizeByCharacter,\n })\n\n const [oldHTML, newHTML] = diffHTML.getSideBySideContents()\n\n const From = oldHTML ? (\n <div\n className={`${baseClass}__diff-old html-diff`}\n dangerouslySetInnerHTML={{ __html: oldHTML }}\n />\n ) : null\n\n const To = newHTML ? (\n <div\n className={`${baseClass}__diff-new html-diff`}\n dangerouslySetInnerHTML={{ __html: newHTML }}\n />\n ) : null\n\n return { From, To }\n}\n"],"names":["React","HtmlDiff","baseClass","getHTMLDiffComponents","fromHTML","toHTML","tokenizeByCharacter","diffHTML","oldHTML","newHTML","getSideBySideContents","From","div","className","dangerouslySetInnerHTML","__html","To"],"mappings":";AAAA,OAAOA,WAAW,QAAO;AAEzB,SAASC,QAAQ,QAAQ,kBAAiB;AAC1C,OAAO,eAAc;AAErB,MAAMC,YAAY;AAElB,OAAO,MAAMC,wBAAwB,CAAC,EACpCC,QAAQ,EACRC,MAAM,EACNC,mBAAmB,EAKpB;IAIC,MAAMC,WAAW,IAAIN,SAASG,UAAUC,QAAQ;QAC9CC;IACF;IAEA,MAAM,CAACE,SAASC,QAAQ,GAAGF,SAASG,qBAAqB;IAEzD,MAAMC,OAAOH,wBACX,
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/HTMLDiff/index.tsx"],"sourcesContent":["import React from 'react'\n\nimport { HtmlDiff } from './diff/index.js'\nimport './index.scss'\n\nconst baseClass = 'html-diff'\n\nexport const getHTMLDiffComponents = ({\n fromHTML,\n toHTML,\n tokenizeByCharacter,\n}: {\n fromHTML: string\n toHTML: string\n tokenizeByCharacter?: boolean\n}): {\n From: React.ReactNode\n To: React.ReactNode\n} => {\n const diffHTML = new HtmlDiff(fromHTML, toHTML, {\n tokenizeByCharacter,\n })\n\n const [oldHTML, newHTML] = diffHTML.getSideBySideContents()\n\n const From = oldHTML ? (\n <div\n className={`${baseClass}__diff-old html-diff`}\n dangerouslySetInnerHTML={{ __html: oldHTML }}\n />\n ) : null\n\n const To = newHTML ? (\n <div\n className={`${baseClass}__diff-new html-diff`}\n dangerouslySetInnerHTML={{ __html: newHTML }}\n />\n ) : null\n\n return { From, To }\n}\n"],"names":["React","HtmlDiff","baseClass","getHTMLDiffComponents","fromHTML","toHTML","tokenizeByCharacter","diffHTML","oldHTML","newHTML","getSideBySideContents","From","div","className","dangerouslySetInnerHTML","__html","To"],"mappings":";AAAA,OAAOA,WAAW,QAAO;AAEzB,SAASC,QAAQ,QAAQ,kBAAiB;AAC1C,OAAO,eAAc;AAErB,MAAMC,YAAY;AAElB,OAAO,MAAMC,wBAAwB,CAAC,EACpCC,QAAQ,EACRC,MAAM,EACNC,mBAAmB,EAKpB;IAIC,MAAMC,WAAW,IAAIN,SAASG,UAAUC,QAAQ;QAC9CC;IACF;IAEA,MAAM,CAACE,SAASC,QAAQ,GAAGF,SAASG,qBAAqB;IAEzD,MAAMC,OAAOH,wBACX,QAACI;QACCC,WAAW,GAAGX,UAAU,oBAAoB,CAAC;QAC7CY,yBAAyB;YAAEC,QAAQP;QAAQ;;;;;eAE3C;IAEJ,MAAMQ,KAAKP,wBACT,QAACG;QACCC,WAAW,GAAGX,UAAU,oBAAoB,CAAC;QAC7CY,yBAAyB;YAAEC,QAAQN;QAAQ;;;;;eAE3C;IAEJ,OAAO;QAAEE;QAAMK;IAAG;AACpB,EAAC"}
|