+
+ {{this.itemTitle}}
+ {{#if this.docNumber}}
+
+ {{this.docNumber}}
+
+ {{/if}}
+
+
+ {{/in-element}}
+{{/if}}
diff --git a/web/app/components/project/resource-list-item.ts b/web/app/components/project/resource-list-item.ts
new file mode 100644
index 000000000..03cd61daa
--- /dev/null
+++ b/web/app/components/project/resource-list-item.ts
@@ -0,0 +1,344 @@
+import { action } from "@ember/object";
+import Component from "@glimmer/component";
+import { draggable } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
+import {
+ dropTargetForElements,
+ ElementDropTargetEventBasePayload,
+ ElementDropTargetGetFeedbackArgs,
+} from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
+import {
+ attachClosestEdge,
+ Edge,
+ extractClosestEdge,
+} from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge";
+import { assert } from "@ember/debug";
+import { combine } from "@atlaskit/pragmatic-drag-and-drop/combine";
+import { tracked } from "@glimmer/tracking";
+import { RelatedResource } from "../related-resources";
+import { setCustomNativeDragPreview } from "@atlaskit/pragmatic-drag-and-drop/element/set-custom-native-drag-preview";
+import { announce } from "@atlaskit/pragmatic-drag-and-drop-live-region";
+import { guidFor } from "@ember/object/internals";
+import { schedule } from "@ember/runloop";
+
+enum Edges {
+ Top = "top",
+ Bottom = "bottom",
+}
+
+interface ProjectResourceListItemComponentSignature {
+ Element: HTMLLIElement;
+ Args: {
+ isReadOnly: boolean;
+ item: RelatedResource;
+ itemCount: number;
+ index: number;
+ onSave: (currentIndex: number, newIndex: number) => void;
+ };
+ Blocks: {
+ default: [
+ {
+ moveToTop: () => void;
+ moveUp: () => void;
+ moveDown: () => void;
+ moveToBottom: () => void;
+ },
+ ];
+ };
+}
+
+export default class ProjectResourceListItemComponent extends Component