From 6049b21d22bbb0bd032560071a7ae495cd0b763d Mon Sep 17 00:00:00 2001 From: Valkyr-JS <154020147+Valkyr-JS@users.noreply.github.com> Date: Tue, 13 Jan 2026 04:49:50 +0000 Subject: [PATCH] Plugin API - card grid components (#6482) * SceneCardsGrid plugin API patch * GalleryCardGrid plugin API patch * GroupCardGrid plugin API patch * ImageGridCard plugin API patch * PerformerCardGrid plugin API patch * ImageGridCard name corrected * SceneMarkerCardsGrid plugin API patch * StudioCardGrid plugin API patch * TagCardGrid plugin API patch * GalleryGridCard.tsx renamed to GalleryCardGrid.tsx * ImageGridCard renamed to ImageCardGrid * SceneCardsGrid renamed to SceneCardGrid * SceneMarkerCardsGrid renamed to SceneMarkerCardGrid --- .../components/Galleries/GalleryCardGrid.tsx | 43 ++++++++++++++ .../components/Galleries/GalleryGridCard.tsx | 44 -------------- .../src/components/Galleries/GalleryList.tsx | 2 +- .../src/components/Groups/GroupCardGrid.tsx | 57 +++++++++---------- .../src/components/Images/ImageCardGrid.tsx | 47 +++++++++++++++ .../src/components/Images/ImageGridCard.tsx | 49 ---------------- ui/v2.5/src/components/Images/ImageList.tsx | 4 +- .../Performers/PerformerCardGrid.tsx | 54 +++++++++--------- .../src/components/Scenes/SceneCardGrid.tsx | 50 ++++++++++++++++ .../src/components/Scenes/SceneCardsGrid.tsx | 53 ----------------- ui/v2.5/src/components/Scenes/SceneList.tsx | 4 +- .../components/Scenes/SceneMarkerCardGrid.tsx | 46 +++++++++++++++ .../Scenes/SceneMarkerCardsGrid.tsx | 45 --------------- .../src/components/Scenes/SceneMarkerList.tsx | 4 +- .../src/components/Studios/StudioCardGrid.tsx | 54 +++++++++--------- ui/v2.5/src/components/Tags/TagCardGrid.tsx | 51 ++++++++--------- ui/v2.5/src/pluginApi.d.ts | 8 +++ 17 files changed, 305 insertions(+), 310 deletions(-) create mode 100644 ui/v2.5/src/components/Galleries/GalleryCardGrid.tsx delete mode 100644 ui/v2.5/src/components/Galleries/GalleryGridCard.tsx create mode 100644 ui/v2.5/src/components/Images/ImageCardGrid.tsx delete mode 100644 ui/v2.5/src/components/Images/ImageGridCard.tsx create mode 100644 ui/v2.5/src/components/Scenes/SceneCardGrid.tsx delete mode 100644 ui/v2.5/src/components/Scenes/SceneCardsGrid.tsx create mode 100644 ui/v2.5/src/components/Scenes/SceneMarkerCardGrid.tsx delete mode 100644 ui/v2.5/src/components/Scenes/SceneMarkerCardsGrid.tsx diff --git a/ui/v2.5/src/components/Galleries/GalleryCardGrid.tsx b/ui/v2.5/src/components/Galleries/GalleryCardGrid.tsx new file mode 100644 index 000000000..a249f27f7 --- /dev/null +++ b/ui/v2.5/src/components/Galleries/GalleryCardGrid.tsx @@ -0,0 +1,43 @@ +import React from "react"; +import * as GQL from "src/core/generated-graphql"; +import { GalleryCard } from "./GalleryCard"; +import { + useCardWidth, + useContainerDimensions, +} from "../Shared/GridCard/GridCard"; +import { PatchComponent } from "src/patch"; + +interface IGalleryCardGrid { + galleries: GQL.SlimGalleryDataFragment[]; + selectedIds: Set; + zoomIndex: number; + onSelectChange: (id: string, selected: boolean, shiftKey: boolean) => void; +} + +const zoomWidths = [280, 340, 480, 640]; + +export const GalleryCardGrid: React.FC = PatchComponent( + "GalleryCardGrid", + ({ galleries, selectedIds, zoomIndex, onSelectChange }) => { + const [componentRef, { width: containerWidth }] = useContainerDimensions(); + const cardWidth = useCardWidth(containerWidth, zoomIndex, zoomWidths); + + return ( +
+ {galleries.map((gallery) => ( + 0} + selected={selectedIds.has(gallery.id)} + onSelectedChanged={(selected: boolean, shiftKey: boolean) => + onSelectChange(gallery.id, selected, shiftKey) + } + /> + ))} +
+ ); + } +); diff --git a/ui/v2.5/src/components/Galleries/GalleryGridCard.tsx b/ui/v2.5/src/components/Galleries/GalleryGridCard.tsx deleted file mode 100644 index 111ddf08f..000000000 --- a/ui/v2.5/src/components/Galleries/GalleryGridCard.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import React from "react"; -import * as GQL from "src/core/generated-graphql"; -import { GalleryCard } from "./GalleryCard"; -import { - useCardWidth, - useContainerDimensions, -} from "../Shared/GridCard/GridCard"; - -interface IGalleryCardGrid { - galleries: GQL.SlimGalleryDataFragment[]; - selectedIds: Set; - zoomIndex: number; - onSelectChange: (id: string, selected: boolean, shiftKey: boolean) => void; -} - -const zoomWidths = [280, 340, 480, 640]; - -export const GalleryCardGrid: React.FC = ({ - galleries, - selectedIds, - zoomIndex, - onSelectChange, -}) => { - const [componentRef, { width: containerWidth }] = useContainerDimensions(); - const cardWidth = useCardWidth(containerWidth, zoomIndex, zoomWidths); - - return ( -
- {galleries.map((gallery) => ( - 0} - selected={selectedIds.has(gallery.id)} - onSelectedChanged={(selected: boolean, shiftKey: boolean) => - onSelectChange(gallery.id, selected, shiftKey) - } - /> - ))} -
- ); -}; diff --git a/ui/v2.5/src/components/Galleries/GalleryList.tsx b/ui/v2.5/src/components/Galleries/GalleryList.tsx index 952f27808..9a4fc5236 100644 --- a/ui/v2.5/src/components/Galleries/GalleryList.tsx +++ b/ui/v2.5/src/components/Galleries/GalleryList.tsx @@ -13,7 +13,7 @@ import { EditGalleriesDialog } from "./EditGalleriesDialog"; import { DeleteGalleriesDialog } from "./DeleteGalleriesDialog"; import { ExportDialog } from "../Shared/ExportDialog"; import { GalleryListTable } from "./GalleryListTable"; -import { GalleryCardGrid } from "./GalleryGridCard"; +import { GalleryCardGrid } from "./GalleryCardGrid"; import { View } from "../List/views"; import { PatchComponent } from "src/patch"; import { IItemListOperation } from "../List/FilteredListToolbar"; diff --git a/ui/v2.5/src/components/Groups/GroupCardGrid.tsx b/ui/v2.5/src/components/Groups/GroupCardGrid.tsx index 3ad6b02c4..e3b70c75f 100644 --- a/ui/v2.5/src/components/Groups/GroupCardGrid.tsx +++ b/ui/v2.5/src/components/Groups/GroupCardGrid.tsx @@ -5,6 +5,7 @@ import { useCardWidth, useContainerDimensions, } from "../Shared/GridCard/GridCard"; +import { PatchComponent } from "src/patch"; interface IGroupCardGrid { groups: GQL.ListGroupDataFragment[]; @@ -17,34 +18,30 @@ interface IGroupCardGrid { const zoomWidths = [210, 250, 300, 375]; -export const GroupCardGrid: React.FC = ({ - groups, - selectedIds, - zoomIndex, - onSelectChange, - fromGroupId, - onMove, -}) => { - const [componentRef, { width: containerWidth }] = useContainerDimensions(); - const cardWidth = useCardWidth(containerWidth, zoomIndex, zoomWidths); +export const GroupCardGrid: React.FC = PatchComponent( + "GroupCardGrid", + ({ groups, selectedIds, zoomIndex, onSelectChange, fromGroupId, onMove }) => { + const [componentRef, { width: containerWidth }] = useContainerDimensions(); + const cardWidth = useCardWidth(containerWidth, zoomIndex, zoomWidths); - return ( -
- {groups.map((p) => ( - 0} - selected={selectedIds.has(p.id)} - onSelectedChanged={(selected: boolean, shiftKey: boolean) => - onSelectChange(p.id, selected, shiftKey) - } - fromGroupId={fromGroupId} - onMove={onMove} - /> - ))} -
- ); -}; + return ( +
+ {groups.map((p) => ( + 0} + selected={selectedIds.has(p.id)} + onSelectedChanged={(selected: boolean, shiftKey: boolean) => + onSelectChange(p.id, selected, shiftKey) + } + fromGroupId={fromGroupId} + onMove={onMove} + /> + ))} +
+ ); + } +); diff --git a/ui/v2.5/src/components/Images/ImageCardGrid.tsx b/ui/v2.5/src/components/Images/ImageCardGrid.tsx new file mode 100644 index 000000000..dadab571b --- /dev/null +++ b/ui/v2.5/src/components/Images/ImageCardGrid.tsx @@ -0,0 +1,47 @@ +import React from "react"; +import * as GQL from "src/core/generated-graphql"; +import { ImageCard } from "./ImageCard"; +import { + useCardWidth, + useContainerDimensions, +} from "../Shared/GridCard/GridCard"; +import { PatchComponent } from "src/patch"; + +interface IImageCardGrid { + images: GQL.SlimImageDataFragment[]; + selectedIds: Set; + zoomIndex: number; + onSelectChange: (id: string, selected: boolean, shiftKey: boolean) => void; + onPreview: (index: number, ev: React.MouseEvent) => void; +} + +const zoomWidths = [280, 340, 480, 640]; + +export const ImageCardGrid: React.FC = PatchComponent( + "ImageCardGrid", + ({ images, selectedIds, zoomIndex, onSelectChange, onPreview }) => { + const [componentRef, { width: containerWidth }] = useContainerDimensions(); + const cardWidth = useCardWidth(containerWidth, zoomIndex, zoomWidths); + + return ( +
+ {images.map((image, index) => ( + 0} + selected={selectedIds.has(image.id)} + onSelectedChanged={(selected: boolean, shiftKey: boolean) => + onSelectChange(image.id, selected, shiftKey) + } + onPreview={ + selectedIds.size < 1 ? (ev) => onPreview(index, ev) : undefined + } + /> + ))} +
+ ); + } +); diff --git a/ui/v2.5/src/components/Images/ImageGridCard.tsx b/ui/v2.5/src/components/Images/ImageGridCard.tsx deleted file mode 100644 index cbb76d853..000000000 --- a/ui/v2.5/src/components/Images/ImageGridCard.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import React from "react"; -import * as GQL from "src/core/generated-graphql"; -import { ImageCard } from "./ImageCard"; -import { - useCardWidth, - useContainerDimensions, -} from "../Shared/GridCard/GridCard"; - -interface IImageCardGrid { - images: GQL.SlimImageDataFragment[]; - selectedIds: Set; - zoomIndex: number; - onSelectChange: (id: string, selected: boolean, shiftKey: boolean) => void; - onPreview: (index: number, ev: React.MouseEvent) => void; -} - -const zoomWidths = [280, 340, 480, 640]; - -export const ImageGridCard: React.FC = ({ - images, - selectedIds, - zoomIndex, - onSelectChange, - onPreview, -}) => { - const [componentRef, { width: containerWidth }] = useContainerDimensions(); - const cardWidth = useCardWidth(containerWidth, zoomIndex, zoomWidths); - - return ( -
- {images.map((image, index) => ( - 0} - selected={selectedIds.has(image.id)} - onSelectedChanged={(selected: boolean, shiftKey: boolean) => - onSelectChange(image.id, selected, shiftKey) - } - onPreview={ - selectedIds.size < 1 ? (ev) => onPreview(index, ev) : undefined - } - /> - ))} -
- ); -}; diff --git a/ui/v2.5/src/components/Images/ImageList.tsx b/ui/v2.5/src/components/Images/ImageList.tsx index 79496823d..7928090cc 100644 --- a/ui/v2.5/src/components/Images/ImageList.tsx +++ b/ui/v2.5/src/components/Images/ImageList.tsx @@ -22,7 +22,7 @@ import Gallery, { RenderImageProps } from "react-photo-gallery"; import { ExportDialog } from "../Shared/ExportDialog"; import { objectTitle } from "src/core/files"; import { useConfigurationContext } from "src/hooks/Config"; -import { ImageGridCard } from "./ImageGridCard"; +import { ImageCardGrid } from "./ImageCardGrid"; import { View } from "../List/views"; import { IItemListOperation } from "../List/FilteredListToolbar"; import { FileSize } from "../Shared/FileSize"; @@ -263,7 +263,7 @@ const ImageListImages: React.FC = ({ if (filter.displayMode === DisplayMode.Grid) { return ( - = ({ - performers, - selectedIds, - zoomIndex, - onSelectChange, - extraCriteria, -}) => { - const [componentRef, { width: containerWidth }] = useContainerDimensions(); - const cardWidth = useCardWidth(containerWidth, zoomIndex, zoomWidths); +export const PerformerCardGrid: React.FC = PatchComponent( + "PerformerCardGrid", + ({ performers, selectedIds, zoomIndex, onSelectChange, extraCriteria }) => { + const [componentRef, { width: containerWidth }] = useContainerDimensions(); + const cardWidth = useCardWidth(containerWidth, zoomIndex, zoomWidths); - return ( -
- {performers.map((p) => ( - 0} - selected={selectedIds.has(p.id)} - onSelectedChanged={(selected: boolean, shiftKey: boolean) => - onSelectChange(p.id, selected, shiftKey) - } - extraCriteria={extraCriteria} - /> - ))} -
- ); -}; + return ( +
+ {performers.map((p) => ( + 0} + selected={selectedIds.has(p.id)} + onSelectedChanged={(selected: boolean, shiftKey: boolean) => + onSelectChange(p.id, selected, shiftKey) + } + extraCriteria={extraCriteria} + /> + ))} +
+ ); + } +); diff --git a/ui/v2.5/src/components/Scenes/SceneCardGrid.tsx b/ui/v2.5/src/components/Scenes/SceneCardGrid.tsx new file mode 100644 index 000000000..f60b412d3 --- /dev/null +++ b/ui/v2.5/src/components/Scenes/SceneCardGrid.tsx @@ -0,0 +1,50 @@ +import React from "react"; +import * as GQL from "src/core/generated-graphql"; +import { SceneQueue } from "src/models/sceneQueue"; +import { SceneCard } from "./SceneCard"; +import { + useCardWidth, + useContainerDimensions, +} from "../Shared/GridCard/GridCard"; +import { PatchComponent } from "src/patch"; + +interface ISceneCardGrid { + scenes: GQL.SlimSceneDataFragment[]; + queue?: SceneQueue; + selectedIds: Set; + zoomIndex: number; + onSelectChange: (id: string, selected: boolean, shiftKey: boolean) => void; + fromGroupId?: string; +} + +const zoomWidths = [280, 340, 480, 640]; + +export const SceneCardGrid: React.FC = PatchComponent( + "SceneCardGrid", + ({ scenes, queue, selectedIds, zoomIndex, onSelectChange, fromGroupId }) => { + const [componentRef, { width: containerWidth }] = useContainerDimensions(); + + const cardWidth = useCardWidth(containerWidth, zoomIndex, zoomWidths); + + return ( +
+ {scenes.map((scene, index) => ( + 0} + selected={selectedIds.has(scene.id)} + onSelectedChanged={(selected: boolean, shiftKey: boolean) => + onSelectChange(scene.id, selected, shiftKey) + } + fromGroupId={fromGroupId} + /> + ))} +
+ ); + } +); diff --git a/ui/v2.5/src/components/Scenes/SceneCardsGrid.tsx b/ui/v2.5/src/components/Scenes/SceneCardsGrid.tsx deleted file mode 100644 index 03b907938..000000000 --- a/ui/v2.5/src/components/Scenes/SceneCardsGrid.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React from "react"; -import * as GQL from "src/core/generated-graphql"; -import { SceneQueue } from "src/models/sceneQueue"; -import { SceneCard } from "./SceneCard"; -import { - useCardWidth, - useContainerDimensions, -} from "../Shared/GridCard/GridCard"; - -interface ISceneCardsGrid { - scenes: GQL.SlimSceneDataFragment[]; - queue?: SceneQueue; - selectedIds: Set; - zoomIndex: number; - onSelectChange: (id: string, selected: boolean, shiftKey: boolean) => void; - fromGroupId?: string; -} - -const zoomWidths = [280, 340, 480, 640]; - -export const SceneCardsGrid: React.FC = ({ - scenes, - queue, - selectedIds, - zoomIndex, - onSelectChange, - fromGroupId, -}) => { - const [componentRef, { width: containerWidth }] = useContainerDimensions(); - - const cardWidth = useCardWidth(containerWidth, zoomIndex, zoomWidths); - - return ( -
- {scenes.map((scene, index) => ( - 0} - selected={selectedIds.has(scene.id)} - onSelectedChanged={(selected: boolean, shiftKey: boolean) => - onSelectChange(scene.id, selected, shiftKey) - } - fromGroupId={fromGroupId} - /> - ))} -
- ); -}; diff --git a/ui/v2.5/src/components/Scenes/SceneList.tsx b/ui/v2.5/src/components/Scenes/SceneList.tsx index d139c6a72..b85ca7ad8 100644 --- a/ui/v2.5/src/components/Scenes/SceneList.tsx +++ b/ui/v2.5/src/components/Scenes/SceneList.tsx @@ -15,7 +15,7 @@ import { EditScenesDialog } from "./EditScenesDialog"; import { DeleteScenesDialog } from "./DeleteScenesDialog"; import { GenerateDialog } from "../Dialogs/GenerateDialog"; import { ExportDialog } from "../Shared/ExportDialog"; -import { SceneCardsGrid } from "./SceneCardsGrid"; +import { SceneCardGrid } from "./SceneCardGrid"; import { TaggerContext } from "../Tagger/context"; import { IdentifyDialog } from "../Dialogs/IdentifyDialog/IdentifyDialog"; import { useConfigurationContext } from "src/hooks/Config"; @@ -209,7 +209,7 @@ const SceneList: React.FC<{ if (filter.displayMode === DisplayMode.Grid) { return ( - ; + zoomIndex: number; + onSelectChange: (id: string, selected: boolean, shiftKey: boolean) => void; +} + +const zoomWidths = [240, 340, 480, 640]; + +export const SceneMarkerCardGrid: React.FC = + PatchComponent( + "SceneMarkerCardGrid", + ({ markers, selectedIds, zoomIndex, onSelectChange }) => { + const [componentRef, { width: containerWidth }] = + useContainerDimensions(); + const cardWidth = useCardWidth(containerWidth, zoomIndex, zoomWidths); + + return ( +
+ {markers.map((marker, index) => ( + 0} + selected={selectedIds.has(marker.id)} + onSelectedChanged={(selected: boolean, shiftKey: boolean) => + onSelectChange(marker.id, selected, shiftKey) + } + /> + ))} +
+ ); + } + ); diff --git a/ui/v2.5/src/components/Scenes/SceneMarkerCardsGrid.tsx b/ui/v2.5/src/components/Scenes/SceneMarkerCardsGrid.tsx deleted file mode 100644 index 9f01fe6da..000000000 --- a/ui/v2.5/src/components/Scenes/SceneMarkerCardsGrid.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import React from "react"; -import * as GQL from "src/core/generated-graphql"; -import { SceneMarkerCard } from "./SceneMarkerCard"; -import { - useCardWidth, - useContainerDimensions, -} from "../Shared/GridCard/GridCard"; - -interface ISceneMarkerCardsGrid { - markers: GQL.SceneMarkerDataFragment[]; - selectedIds: Set; - zoomIndex: number; - onSelectChange: (id: string, selected: boolean, shiftKey: boolean) => void; -} - -const zoomWidths = [240, 340, 480, 640]; - -export const SceneMarkerCardsGrid: React.FC = ({ - markers, - selectedIds, - zoomIndex, - onSelectChange, -}) => { - const [componentRef, { width: containerWidth }] = useContainerDimensions(); - const cardWidth = useCardWidth(containerWidth, zoomIndex, zoomWidths); - - return ( -
- {markers.map((marker, index) => ( - 0} - selected={selectedIds.has(marker.id)} - onSelectedChanged={(selected: boolean, shiftKey: boolean) => - onSelectChange(marker.id, selected, shiftKey) - } - /> - ))} -
- ); -}; diff --git a/ui/v2.5/src/components/Scenes/SceneMarkerList.tsx b/ui/v2.5/src/components/Scenes/SceneMarkerList.tsx index 074ee2b83..b5975ca5a 100644 --- a/ui/v2.5/src/components/Scenes/SceneMarkerList.tsx +++ b/ui/v2.5/src/components/Scenes/SceneMarkerList.tsx @@ -14,7 +14,7 @@ import { ListFilterModel } from "src/models/list-filter/filter"; import { DisplayMode } from "src/models/list-filter/types"; import { MarkerWallPanel } from "./SceneMarkerWallPanel"; import { View } from "../List/views"; -import { SceneMarkerCardsGrid } from "./SceneMarkerCardsGrid"; +import { SceneMarkerCardGrid } from "./SceneMarkerCardGrid"; import { DeleteSceneMarkersDialog } from "./DeleteSceneMarkersDialog"; import { EditSceneMarkersDialog } from "./EditSceneMarkersDialog"; import { PatchComponent } from "src/patch"; @@ -109,7 +109,7 @@ export const SceneMarkerList: React.FC = PatchComponent( if (filter.displayMode === DisplayMode.Grid) { return ( - = ({ - studios, - fromParent, - selectedIds, - zoomIndex, - onSelectChange, -}) => { - const [componentRef, { width: containerWidth }] = useContainerDimensions(); - const cardWidth = useCardWidth(containerWidth, zoomIndex, zoomWidths); +export const StudioCardGrid: React.FC = PatchComponent( + "StudioCardGrid", + ({ studios, fromParent, selectedIds, zoomIndex, onSelectChange }) => { + const [componentRef, { width: containerWidth }] = useContainerDimensions(); + const cardWidth = useCardWidth(containerWidth, zoomIndex, zoomWidths); - return ( -
- {studios.map((studio) => ( - 0} - selected={selectedIds.has(studio.id)} - onSelectedChanged={(selected: boolean, shiftKey: boolean) => - onSelectChange(studio.id, selected, shiftKey) - } - /> - ))} -
- ); -}; + return ( +
+ {studios.map((studio) => ( + 0} + selected={selectedIds.has(studio.id)} + onSelectedChanged={(selected: boolean, shiftKey: boolean) => + onSelectChange(studio.id, selected, shiftKey) + } + /> + ))} +
+ ); + } +); diff --git a/ui/v2.5/src/components/Tags/TagCardGrid.tsx b/ui/v2.5/src/components/Tags/TagCardGrid.tsx index ac3bf0317..d779da7e0 100644 --- a/ui/v2.5/src/components/Tags/TagCardGrid.tsx +++ b/ui/v2.5/src/components/Tags/TagCardGrid.tsx @@ -5,6 +5,7 @@ import { useContainerDimensions, } from "../Shared/GridCard/GridCard"; import { TagCard } from "./TagCard"; +import { PatchComponent } from "src/patch"; interface ITagCardGrid { tags: (GQL.TagDataFragment | GQL.TagListDataFragment)[]; @@ -15,30 +16,28 @@ interface ITagCardGrid { const zoomWidths = [280, 340, 480, 640]; -export const TagCardGrid: React.FC = ({ - tags, - selectedIds, - zoomIndex, - onSelectChange, -}) => { - const [componentRef, { width: containerWidth }] = useContainerDimensions(); - const cardWidth = useCardWidth(containerWidth, zoomIndex, zoomWidths); +export const TagCardGrid: React.FC = PatchComponent( + "TagCardGrid", + ({ tags, selectedIds, zoomIndex, onSelectChange }) => { + const [componentRef, { width: containerWidth }] = useContainerDimensions(); + const cardWidth = useCardWidth(containerWidth, zoomIndex, zoomWidths); - return ( -
- {tags.map((tag) => ( - 0} - selected={selectedIds.has(tag.id)} - onSelectedChanged={(selected: boolean, shiftKey: boolean) => - onSelectChange(tag.id, selected, shiftKey) - } - /> - ))} -
- ); -}; + return ( +
+ {tags.map((tag) => ( + 0} + selected={selectedIds.has(tag.id)} + onSelectedChanged={(selected: boolean, shiftKey: boolean) => + onSelectChange(tag.id, selected, shiftKey) + } + /> + ))} +
+ ); + } +); diff --git a/ui/v2.5/src/pluginApi.d.ts b/ui/v2.5/src/pluginApi.d.ts index 9372f333d..680f39cd0 100644 --- a/ui/v2.5/src/pluginApi.d.ts +++ b/ui/v2.5/src/pluginApi.d.ts @@ -672,6 +672,7 @@ declare namespace PluginApi { "GalleryCard.Image": React.FC; "GalleryCard.Overlays": React.FC; "GalleryCard.Popovers": React.FC; + GalleryCardGrid: React.FC; GalleryAddPanel: React.FC; GalleryIDSelect: React.FC; GalleryImagesPanel: React.FC; @@ -679,6 +680,7 @@ declare namespace PluginApi { GallerySelect: React.FC; GridCard: React.FC; GroupCard: React.FC; + GroupCardGrid: React.FC; GroupIDSelect: React.FC; GroupList: React.FC; GroupSelect: React.FC; @@ -687,6 +689,7 @@ declare namespace PluginApi { HoverPopover: React.FC; Icon: React.FC; ImageCard: React.FC; + ImageCardGrid: React.FC; ImageInput: React.FC; ImageList: React.FC; LightboxLink: React.FC; @@ -697,6 +700,7 @@ declare namespace PluginApi { NumberSetting: React.FC; PerformerAppearsWithPanel: React.FC; PerformerCard: React.FC; + PerformerCardGrid: React.FC; "PerformerCard.Details": React.FC; "PerformerCard.Image": React.FC; "PerformerCard.Overlays": React.FC; @@ -728,12 +732,14 @@ declare namespace PluginApi { "SceneCard.Image": React.FC; "SceneCard.Overlays": React.FC; "SceneCard.Popovers": React.FC; + SceneCardGrid: React.FC; SceneList: React.FC; SceneListOperations: React.FC; SceneMarkerCard: React.FC; "SceneMarkerCard.Details": React.FC; "SceneMarkerCard.Image": React.FC; "SceneMarkerCard.Popovers": React.FC; + SceneMarkerCardGrid: React.FC; SceneMarkerList: React.FC; SelectSetting: React.FC; Setting: React.FC; @@ -742,6 +748,7 @@ declare namespace PluginApi { StringListSetting: React.FC; StringSetting: React.FC; StudioCard: React.FC; + StudioCardGrid: React.FC; StudioDetailsPanel: React.FC; StudioIDSelect: React.FC; StudioList: React.FC; @@ -754,6 +761,7 @@ declare namespace PluginApi { "TagCard.Overlays": React.FC; "TagCard.Popovers": React.FC; "TagCard.Title": React.FC; + TagCardGrid: React.FC; TagLink: React.FC; TagList: React.FC; TagSelect: React.FC;