diff --git a/resources/assets/scripts/components/server/components/FileManagerFileRow.vue b/resources/assets/scripts/components/server/components/FileManagerFileRow.vue
new file mode 100644
index 000000000..c58e5f04b
--- /dev/null
+++ b/resources/assets/scripts/components/server/components/FileManagerFileRow.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
{{file.name}}
+
{{readableSize(file.size)}}
+
{{formatDate(file.modified)}}
+
+
+
+
+
+
diff --git a/resources/assets/scripts/components/server/components/FileManagerFolderRow.vue b/resources/assets/scripts/components/server/components/FileManagerFolderRow.vue
new file mode 100644
index 000000000..caea64b03
--- /dev/null
+++ b/resources/assets/scripts/components/server/components/FileManagerFolderRow.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+ {{directory.name}}
+
+ {{formatDate(directory.modified)}}
+
+
+
+
+
+
diff --git a/resources/assets/scripts/components/server/subpages/FileManager.vue b/resources/assets/scripts/components/server/subpages/FileManager.vue
index 1b1f62cdf..81ab9d0b1 100644
--- a/resources/assets/scripts/components/server/subpages/FileManager.vue
+++ b/resources/assets/scripts/components/server/subpages/FileManager.vue
@@ -30,28 +30,11 @@
This directory is empty.
-
-
-
-
- {{directory.name}}
-
- {{formatDate(directory.modified)}}
-
-
-
-
-
-
-
-
{{file.name}}
-
{{readableSize(file.size)}}
-
{{formatDate(file.modified)}}
-
+
+
+
+
+
@@ -59,16 +42,16 @@
diff --git a/resources/assets/scripts/helpers/index.js b/resources/assets/scripts/helpers/index.js
new file mode 100644
index 000000000..0fa47e9a6
--- /dev/null
+++ b/resources/assets/scripts/helpers/index.js
@@ -0,0 +1,34 @@
+import format from 'date-fns/format';
+
+/**
+ * Return the human readable filesize for a given number of bytes. This
+ * uses 1024 as the base, so the response is denoted accordingly.
+ *
+ * @param {Number} bytes
+ * @return {String}
+ */
+export function readableSize (bytes) {
+ if (Math.abs(bytes) < 1024) {
+ return `${bytes} Bytes`;
+ }
+
+ let u = -1;
+ const units = ['KiB', 'MiB', 'GiB', 'TiB'];
+
+ do {
+ bytes /= 1024;
+ u++;
+ } while (Math.abs(bytes) >= 1024 && u < units.length - 1);
+
+ return `${bytes.toFixed(1)} ${units[u]}`;
+}
+
+/**
+ * Format the given date as a human readable string.
+ *
+ * @param {String} date
+ * @return {String}
+ */
+export function formatDate (date) {
+ return format(date, 'MMM D, YYYY [at] HH:MM');
+}