diff --git a/packages/builder/src/components/common/Spinner.svelte b/packages/builder/src/components/common/Spinner.svelte
index a9c947915c..c719724fd8 100644
--- a/packages/builder/src/components/common/Spinner.svelte
+++ b/packages/builder/src/components/common/Spinner.svelte
@@ -1,5 +1,7 @@
-
diff --git a/packages/builder/src/components/database/DataTable/AttachmentList.svelte b/packages/builder/src/components/database/DataTable/AttachmentList.svelte
new file mode 100644
index 0000000000..ed97fd366c
--- /dev/null
+++ b/packages/builder/src/components/database/DataTable/AttachmentList.svelte
@@ -0,0 +1,64 @@
+
+
+
+
+
diff --git a/packages/builder/src/components/database/DataTable/ModelDataTable.svelte b/packages/builder/src/components/database/DataTable/ModelDataTable.svelte
index 0804b5e8da..20f7a61c6b 100644
--- a/packages/builder/src/components/database/DataTable/ModelDataTable.svelte
+++ b/packages/builder/src/components/database/DataTable/ModelDataTable.svelte
@@ -6,6 +6,7 @@
import { Button, Icon } from "@budibase/bbui"
import ActionButton from "components/common/ActionButton.svelte"
import LinkedRecord from "./LinkedRecord.svelte"
+ import AttachmentList from "./AttachmentList.svelte"
import TablePagination from "./TablePagination.svelte"
import { DeleteRecordModal, CreateEditRecordModal } from "./modals"
import RowPopover from "./popovers/Row.svelte"
@@ -90,6 +91,8 @@
{/each}
@@ -108,6 +111,7 @@
section {
margin-bottom: 20px;
}
+
.title {
font-size: 24px;
font-weight: 600;
diff --git a/packages/builder/src/components/database/DataTable/Table.svelte b/packages/builder/src/components/database/DataTable/Table.svelte
index d3fdc63046..4d6563d8bd 100644
--- a/packages/builder/src/components/database/DataTable/Table.svelte
+++ b/packages/builder/src/components/database/DataTable/Table.svelte
@@ -6,7 +6,7 @@
import api from "builderStore/api"
import { Button, Icon } from "@budibase/bbui"
import ActionButton from "components/common/ActionButton.svelte"
- import LinkedRecord from "./LinkedRecord.svelte"
+ import AttachmentList from "./AttachmentList.svelte"
import TablePagination from "./TablePagination.svelte"
import { DeleteRecordModal, CreateEditRecordModal } from "./modals"
import RowPopover from "./popovers/Row.svelte"
@@ -59,7 +59,11 @@
{#each paginatedData as row}
{/each}
diff --git a/packages/builder/src/components/database/DataTable/modals/CreateEditRecord.svelte b/packages/builder/src/components/database/DataTable/modals/CreateEditRecord.svelte
index 32df16ed7f..8edecd913c 100644
--- a/packages/builder/src/components/database/DataTable/modals/CreateEditRecord.svelte
+++ b/packages/builder/src/components/database/DataTable/modals/CreateEditRecord.svelte
@@ -1,5 +1,5 @@
diff --git a/packages/builder/src/components/database/DataTable/modals/RecordFieldControl.svelte b/packages/builder/src/components/database/DataTable/modals/RecordFieldControl.svelte
index ed56618e3e..991a5fea63 100644
--- a/packages/builder/src/components/database/DataTable/modals/RecordFieldControl.svelte
+++ b/packages/builder/src/components/database/DataTable/modals/RecordFieldControl.svelte
@@ -1,9 +1,10 @@
- {#if parameter.name === 'workflow'}
+ {#if parameter.name === 'automation'}
{parameter.name}
{/if}
- {#if parameter.name === 'workflow'}
+ {#if parameter.name === 'automation'}
{:else if parameter.name === 'url'}
diff --git a/packages/builder/src/components/userInterface/IconSelect/IconSelect.svelte b/packages/builder/src/components/userInterface/IconSelect/IconSelect.svelte
new file mode 100644
index 0000000000..9ad50b8c9a
--- /dev/null
+++ b/packages/builder/src/components/userInterface/IconSelect/IconSelect.svelte
@@ -0,0 +1,293 @@
+
+
+
+
+
+
+
+
+
+ {#each alphabet as letter, idx}
+ switchLetter(letter)}>
+ {letter}
+
+ {#if idx !== alphabet.length - 1}
+ -
+ {/if}
+ {/each}
+
+
+
+
+
+
+ {#if pagedIcons.length > 0}
+
+ {#if !loading}
+ {#each pagedIcons as icon}
+
(value = icon.value)}>
+
+
+
+
{icon.label}
+
+ {/each}
+ {/if}
+
+ {:else}
+
+
+ {`There is no icons for this ${searchTerm ? 'search' : 'page'}`}
+
+
+ {/if}
+
+
+
+
diff --git a/packages/builder/src/components/userInterface/IconSelect/icons.js b/packages/builder/src/components/userInterface/IconSelect/icons.js
new file mode 100644
index 0000000000..a491396e52
--- /dev/null
+++ b/packages/builder/src/components/userInterface/IconSelect/icons.js
@@ -0,0 +1,6450 @@
+export default [
+ {
+ value: "fab fa-500px",
+ label: "500px",
+ },
+ {
+ value: "fab fa-accessible-icon",
+ label: "accessible-icon",
+ },
+ {
+ value: "fab fa-accusoft",
+ label: "accusoft",
+ },
+ {
+ value: "fab fa-acquisitions-incorporated",
+ label: "acquisitions-incorporated",
+ },
+ {
+ value: "fas fa-ad",
+ label: "ad",
+ },
+ {
+ value: "fas fa-address-book",
+ label: "address-book",
+ },
+ {
+ value: "far fa-address-book",
+ label: "address-book",
+ },
+ {
+ value: "fas fa-address-card",
+ label: "address-card",
+ },
+ {
+ value: "far fa-address-card",
+ label: "address-card",
+ },
+ {
+ value: "fas fa-adjust",
+ label: "adjust",
+ },
+ {
+ value: "fab fa-adn",
+ label: "adn",
+ },
+ {
+ value: "fab fa-adobe",
+ label: "adobe",
+ },
+ {
+ value: "fab fa-adversal",
+ label: "adversal",
+ },
+ {
+ value: "fab fa-affiliatetheme",
+ label: "affiliatetheme",
+ },
+ {
+ value: "fas fa-air-freshener",
+ label: "air-freshener",
+ },
+ {
+ value: "fab fa-airbnb",
+ label: "airbnb",
+ },
+ {
+ value: "fab fa-algolia",
+ label: "algolia",
+ },
+ {
+ value: "fas fa-align-center",
+ label: "align-center",
+ },
+ {
+ value: "fas fa-align-justify",
+ label: "align-justify",
+ },
+ {
+ value: "fas fa-align-left",
+ label: "align-left",
+ },
+ {
+ value: "fas fa-align-right",
+ label: "align-right",
+ },
+ {
+ value: "fab fa-alipay",
+ label: "alipay",
+ },
+ {
+ value: "fas fa-allergies",
+ label: "allergies",
+ },
+ {
+ value: "fab fa-amazon",
+ label: "amazon",
+ },
+ {
+ value: "fab fa-amazon-pay",
+ label: "amazon-pay",
+ },
+ {
+ value: "fas fa-ambulance",
+ label: "ambulance",
+ },
+ {
+ value: "fas fa-american-sign-language-interpreting",
+ label: "american-sign-language-interpreting",
+ },
+ {
+ value: "fab fa-amilia",
+ label: "amilia",
+ },
+ {
+ value: "fas fa-anchor",
+ label: "anchor",
+ },
+ {
+ value: "fab fa-android",
+ label: "android",
+ },
+ {
+ value: "fab fa-angellist",
+ label: "angellist",
+ },
+ {
+ value: "fas fa-angle-double-down",
+ label: "angle-double-down",
+ },
+ {
+ value: "fas fa-angle-double-left",
+ label: "angle-double-left",
+ },
+ {
+ value: "fas fa-angle-double-right",
+ label: "angle-double-right",
+ },
+ {
+ value: "fas fa-angle-double-up",
+ label: "angle-double-up",
+ },
+ {
+ value: "fas fa-angle-down",
+ label: "angle-down",
+ },
+ {
+ value: "fas fa-angle-left",
+ label: "angle-left",
+ },
+ {
+ value: "fas fa-angle-right",
+ label: "angle-right",
+ },
+ {
+ value: "fas fa-angle-up",
+ label: "angle-up",
+ },
+ {
+ value: "fas fa-angry",
+ label: "angry",
+ },
+ {
+ value: "far fa-angry",
+ label: "angry",
+ },
+ {
+ value: "fab fa-angrycreative",
+ label: "angrycreative",
+ },
+ {
+ value: "fab fa-angular",
+ label: "angular",
+ },
+ {
+ value: "fas fa-ankh",
+ label: "ankh",
+ },
+ {
+ value: "fab fa-app-store",
+ label: "app-store",
+ },
+ {
+ value: "fab fa-app-store-ios",
+ label: "app-store-ios",
+ },
+ {
+ value: "fab fa-apper",
+ label: "apper",
+ },
+ {
+ value: "fab fa-apple",
+ label: "apple",
+ },
+ {
+ value: "fas fa-apple-alt",
+ label: "apple-alt",
+ },
+ {
+ value: "fab fa-apple-pay",
+ label: "apple-pay",
+ },
+ {
+ value: "fas fa-archive",
+ label: "archive",
+ },
+ {
+ value: "fas fa-archway",
+ label: "archway",
+ },
+ {
+ value: "fas fa-arrow-alt-circle-down",
+ label: "arrow-alt-circle-down",
+ },
+ {
+ value: "far fa-arrow-alt-circle-down",
+ label: "arrow-alt-circle-down",
+ },
+ {
+ value: "fas fa-arrow-alt-circle-left",
+ label: "arrow-alt-circle-left",
+ },
+ {
+ value: "far fa-arrow-alt-circle-left",
+ label: "arrow-alt-circle-left",
+ },
+ {
+ value: "fas fa-arrow-alt-circle-right",
+ label: "arrow-alt-circle-right",
+ },
+ {
+ value: "far fa-arrow-alt-circle-right",
+ label: "arrow-alt-circle-right",
+ },
+ {
+ value: "fas fa-arrow-alt-circle-up",
+ label: "arrow-alt-circle-up",
+ },
+ {
+ value: "far fa-arrow-alt-circle-up",
+ label: "arrow-alt-circle-up",
+ },
+ {
+ value: "fas fa-arrow-circle-down",
+ label: "arrow-circle-down",
+ },
+ {
+ value: "fas fa-arrow-circle-left",
+ label: "arrow-circle-left",
+ },
+ {
+ value: "fas fa-arrow-circle-right",
+ label: "arrow-circle-right",
+ },
+ {
+ value: "fas fa-arrow-circle-up",
+ label: "arrow-circle-up",
+ },
+ {
+ value: "fas fa-arrow-down",
+ label: "arrow-down",
+ },
+ {
+ value: "fas fa-arrow-left",
+ label: "arrow-left",
+ },
+ {
+ value: "fas fa-arrow-right",
+ label: "arrow-right",
+ },
+ {
+ value: "fas fa-arrow-up",
+ label: "arrow-up",
+ },
+ {
+ value: "fas fa-arrows-alt",
+ label: "arrows-alt",
+ },
+ {
+ value: "fas fa-arrows-alt-h",
+ label: "arrows-alt-h",
+ },
+ {
+ value: "fas fa-arrows-alt-v",
+ label: "arrows-alt-v",
+ },
+ {
+ value: "fab fa-artstation",
+ label: "artstation",
+ },
+ {
+ value: "fas fa-assistive-listening-systems",
+ label: "assistive-listening-systems",
+ },
+ {
+ value: "fas fa-asterisk",
+ label: "asterisk",
+ },
+ {
+ value: "fab fa-asymmetrik",
+ label: "asymmetrik",
+ },
+ {
+ value: "fas fa-at",
+ label: "at",
+ },
+ {
+ value: "fas fa-atlas",
+ label: "atlas",
+ },
+ {
+ value: "fab fa-atlassian",
+ label: "atlassian",
+ },
+ {
+ value: "fas fa-atom",
+ label: "atom",
+ },
+ {
+ value: "fab fa-audible",
+ label: "audible",
+ },
+ {
+ value: "fas fa-audio-description",
+ label: "audio-description",
+ },
+ {
+ value: "fab fa-autoprefixer",
+ label: "autoprefixer",
+ },
+ {
+ value: "fab fa-avianex",
+ label: "avianex",
+ },
+ {
+ value: "fab fa-aviato",
+ label: "aviato",
+ },
+ {
+ value: "fas fa-award",
+ label: "award",
+ },
+ {
+ value: "fab fa-aws",
+ label: "aws",
+ },
+ {
+ value: "fas fa-baby",
+ label: "baby",
+ },
+ {
+ value: "fas fa-baby-carriage",
+ label: "baby-carriage",
+ },
+ {
+ value: "fas fa-backspace",
+ label: "backspace",
+ },
+ {
+ value: "fas fa-backward",
+ label: "backward",
+ },
+ {
+ value: "fas fa-bacon",
+ label: "bacon",
+ },
+ {
+ value: "fas fa-bacteria",
+ label: "bacteria",
+ },
+ {
+ value: "fas fa-bacterium",
+ label: "bacterium",
+ },
+ {
+ value: "fas fa-bahai",
+ label: "bahai",
+ },
+ {
+ value: "fas fa-balance-scale",
+ label: "balance-scale",
+ },
+ {
+ value: "fas fa-balance-scale-left",
+ label: "balance-scale-left",
+ },
+ {
+ value: "fas fa-balance-scale-right",
+ label: "balance-scale-right",
+ },
+ {
+ value: "fas fa-ban",
+ label: "ban",
+ },
+ {
+ value: "fas fa-band-aid",
+ label: "band-aid",
+ },
+ {
+ value: "fab fa-bandcamp",
+ label: "bandcamp",
+ },
+ {
+ value: "",
+ label: "",
+ },
+ {
+ value: "fas fa-barcode",
+ label: "barcode",
+ },
+ {
+ value: "fas fa-bars",
+ label: "bars",
+ },
+ {
+ value: "fas fa-baseball-ball",
+ label: "baseball-ball",
+ },
+ {
+ value: "fas fa-basketball-ball",
+ label: "basketball-ball",
+ },
+ {
+ value: "fas fa-bath",
+ label: "bath",
+ },
+ {
+ value: "fas fa-battery-empty",
+ label: "battery-empty",
+ },
+ {
+ value: "fas fa-battery-full",
+ label: "battery-full",
+ },
+ {
+ value: "fas fa-battery-half",
+ label: "battery-half",
+ },
+ {
+ value: "fas fa-battery-quarter",
+ label: "battery-quarter",
+ },
+ {
+ value: "fas fa-battery-three-quarters",
+ label: "battery-three-quarters",
+ },
+ {
+ value: "fab fa-battle-net",
+ label: "battle-net",
+ },
+ {
+ value: "fas fa-bed",
+ label: "bed",
+ },
+ {
+ value: "fas fa-beer",
+ label: "beer",
+ },
+ {
+ value: "fab fa-behance",
+ label: "behance",
+ },
+ {
+ value: "fab fa-behance-square",
+ label: "behance-square",
+ },
+ {
+ value: "fas fa-bell",
+ label: "bell",
+ },
+ {
+ value: "far fa-bell",
+ label: "bell",
+ },
+ {
+ value: "fas fa-bell-slash",
+ label: "bell-slash",
+ },
+ {
+ value: "far fa-bell-slash",
+ label: "bell-slash",
+ },
+ {
+ value: "fas fa-bezier-curve",
+ label: "bezier-curve",
+ },
+ {
+ value: "fas fa-bible",
+ label: "bible",
+ },
+ {
+ value: "fas fa-bicycle",
+ label: "bicycle",
+ },
+ {
+ value: "fas fa-biking",
+ label: "biking",
+ },
+ {
+ value: "fab fa-bimobject",
+ label: "bimobject",
+ },
+ {
+ value: "fas fa-binoculars",
+ label: "binoculars",
+ },
+ {
+ value: "fas fa-biohazard",
+ label: "biohazard",
+ },
+ {
+ value: "fas fa-birthday-cake",
+ label: "birthday-cake",
+ },
+ {
+ value: "fab fa-bitbucket",
+ label: "bitbucket",
+ },
+ {
+ value: "fab fa-bitcoin",
+ label: "bitcoin",
+ },
+ {
+ value: "fab fa-bity",
+ label: "bity",
+ },
+ {
+ value: "fab fa-black-tie",
+ label: "black-tie",
+ },
+ {
+ value: "fab fa-blackberry",
+ label: "blackberry",
+ },
+ {
+ value: "fas fa-blender",
+ label: "blender",
+ },
+ {
+ value: "fas fa-blender-phone",
+ label: "blender-phone",
+ },
+ {
+ value: "fas fa-blind",
+ label: "blind",
+ },
+ {
+ value: "fas fa-blog",
+ label: "blog",
+ },
+ {
+ value: "fab fa-blogger",
+ label: "blogger",
+ },
+ {
+ value: "fab fa-blogger-b",
+ label: "blogger-b",
+ },
+ {
+ value: "fab fa-bluetooth",
+ label: "bluetooth",
+ },
+ {
+ value: "fab fa-bluetooth-b",
+ label: "bluetooth-b",
+ },
+ {
+ value: "fas fa-bold",
+ label: "bold",
+ },
+ {
+ value: "fas fa-bolt",
+ label: "bolt",
+ },
+ {
+ value: "fas fa-bomb",
+ label: "bomb",
+ },
+ {
+ value: "fas fa-bone",
+ label: "bone",
+ },
+ {
+ value: "fas fa-bong",
+ label: "bong",
+ },
+ {
+ value: "fas fa-book",
+ label: "book",
+ },
+ {
+ value: "fas fa-book-dead",
+ label: "book-dead",
+ },
+ {
+ value: "fas fa-book-medical",
+ label: "book-medical",
+ },
+ {
+ value: "fas fa-book-open",
+ label: "book-open",
+ },
+ {
+ value: "fas fa-book-reader",
+ label: "book-reader",
+ },
+ {
+ value: "fas fa-bookmark",
+ label: "bookmark",
+ },
+ {
+ value: "far fa-bookmark",
+ label: "bookmark",
+ },
+ {
+ value: "fab fa-bootstrap",
+ label: "bootstrap",
+ },
+ {
+ value: "fas fa-border-all",
+ label: "border-all",
+ },
+ {
+ value: "fas fa-border-none",
+ label: "border-none",
+ },
+ {
+ value: "fas fa-border-style",
+ label: "border-style",
+ },
+ {
+ value: "fas fa-bowling-ball",
+ label: "bowling-ball",
+ },
+ {
+ value: "fas fa-box",
+ label: "box",
+ },
+ {
+ value: "fas fa-box-open",
+ label: "box-open",
+ },
+ {
+ value: "fas fa-box-tissue",
+ label: "box-tissue",
+ },
+ {
+ value: "fas fa-boxes",
+ label: "boxes",
+ },
+ {
+ value: "fas fa-braille",
+ label: "braille",
+ },
+ {
+ value: "fas fa-brain",
+ label: "brain",
+ },
+ {
+ value: "fas fa-bread-slice",
+ label: "bread-slice",
+ },
+ {
+ value: "fas fa-briefcase",
+ label: "briefcase",
+ },
+ {
+ value: "fas fa-briefcase-medical",
+ label: "briefcase-medical",
+ },
+ {
+ value: "fas fa-broadcast-tower",
+ label: "broadcast-tower",
+ },
+ {
+ value: "fas fa-broom",
+ label: "broom",
+ },
+ {
+ value: "fas fa-brush",
+ label: "brush",
+ },
+ {
+ value: "fab fa-btc",
+ label: "btc",
+ },
+ {
+ value: "fab fa-buffer",
+ label: "buffer",
+ },
+ {
+ value: "fas fa-bug",
+ label: "bug",
+ },
+ {
+ value: "fas fa-building",
+ label: "building",
+ },
+ {
+ value: "far fa-building",
+ label: "building",
+ },
+ {
+ value: "fas fa-bullhorn",
+ label: "bullhorn",
+ },
+ {
+ value: "fas fa-bullseye",
+ label: "bullseye",
+ },
+ {
+ value: "fas fa-burn",
+ label: "burn",
+ },
+ {
+ value: "fab fa-buromobelexperte",
+ label: "buromobelexperte",
+ },
+ {
+ value: "fas fa-bus",
+ label: "bus",
+ },
+ {
+ value: "fas fa-bus-alt",
+ label: "bus-alt",
+ },
+ {
+ value: "fas fa-business-time",
+ label: "business-time",
+ },
+ {
+ value: "fab fa-buy-n-large",
+ label: "buy-n-large",
+ },
+ {
+ value: "fab fa-buysellads",
+ label: "buysellads",
+ },
+ {
+ value: "fas fa-calculator",
+ label: "calculator",
+ },
+ {
+ value: "fas fa-calendar",
+ label: "calendar",
+ },
+ {
+ value: "far fa-calendar",
+ label: "calendar",
+ },
+ {
+ value: "fas fa-calendar-alt",
+ label: "calendar-alt",
+ },
+ {
+ value: "far fa-calendar-alt",
+ label: "calendar-alt",
+ },
+ {
+ value: "fas fa-calendar-check",
+ label: "calendar-check",
+ },
+ {
+ value: "far fa-calendar-check",
+ label: "calendar-check",
+ },
+ {
+ value: "fas fa-calendar-day",
+ label: "calendar-day",
+ },
+ {
+ value: "fas fa-calendar-minus",
+ label: "calendar-minus",
+ },
+ {
+ value: "far fa-calendar-minus",
+ label: "calendar-minus",
+ },
+ {
+ value: "fas fa-calendar-plus",
+ label: "calendar-plus",
+ },
+ {
+ value: "far fa-calendar-plus",
+ label: "calendar-plus",
+ },
+ {
+ value: "fas fa-calendar-times",
+ label: "calendar-times",
+ },
+ {
+ value: "far fa-calendar-times",
+ label: "calendar-times",
+ },
+ {
+ value: "fas fa-calendar-week",
+ label: "calendar-week",
+ },
+ {
+ value: "fas fa-camera",
+ label: "camera",
+ },
+ {
+ value: "fas fa-camera-retro",
+ label: "camera-retro",
+ },
+ {
+ value: "",
+ label: "",
+ },
+ {
+ value: "fas fa-campground",
+ label: "campground",
+ },
+ {
+ value: "fab fa-canadian-maple-leaf",
+ label: "canadian-maple-leaf",
+ },
+ {
+ value: "fas fa-candy-cane",
+ label: "candy-cane",
+ },
+ {
+ value: "fas fa-cannabis",
+ label: "cannabis",
+ },
+ {
+ value: "fas fa-capsules",
+ label: "capsules",
+ },
+ {
+ value: "fas fa-car",
+ label: "car",
+ },
+ {
+ value: "fas fa-car-alt",
+ label: "car-alt",
+ },
+ {
+ value: "fas fa-car-battery",
+ label: "car-battery",
+ },
+ {
+ value: "fas fa-car-crash",
+ label: "car-crash",
+ },
+ {
+ value: "fas fa-car-side",
+ label: "car-side",
+ },
+ {
+ value: "fas fa-caravan",
+ label: "caravan",
+ },
+ {
+ value: "fas fa-caret-down",
+ label: "caret-down",
+ },
+ {
+ value: "fas fa-caret-left",
+ label: "caret-left",
+ },
+ {
+ value: "fas fa-caret-right",
+ label: "caret-right",
+ },
+ {
+ value: "fas fa-caret-square-down",
+ label: "caret-square-down",
+ },
+ {
+ value: "far fa-caret-square-down",
+ label: "caret-square-down",
+ },
+ {
+ value: "fas fa-caret-square-left",
+ label: "caret-square-left",
+ },
+ {
+ value: "far fa-caret-square-left",
+ label: "caret-square-left",
+ },
+ {
+ value: "fas fa-caret-square-right",
+ label: "caret-square-right",
+ },
+ {
+ value: "far fa-caret-square-right",
+ label: "caret-square-right",
+ },
+ {
+ value: "fas fa-caret-square-up",
+ label: "caret-square-up",
+ },
+ {
+ value: "far fa-caret-square-up",
+ label: "caret-square-up",
+ },
+ {
+ value: "fas fa-caret-up",
+ label: "caret-up",
+ },
+ {
+ value: "fas fa-carrot",
+ label: "carrot",
+ },
+ {
+ value: "fas fa-cart-arrow-down",
+ label: "cart-arrow-down",
+ },
+ {
+ value: "fas fa-cart-plus",
+ label: "cart-plus",
+ },
+ {
+ value: "fas fa-cash-register",
+ label: "cash-register",
+ },
+ {
+ value: "fas fa-cat",
+ label: "cat",
+ },
+ {
+ value: "fab fa-cc-amazon-pay",
+ label: "cc-amazon-pay",
+ },
+ {
+ value: "fab fa-cc-amex",
+ label: "cc-amex",
+ },
+ {
+ value: "fab fa-cc-apple-pay",
+ label: "cc-apple-pay",
+ },
+ {
+ value: "fab fa-cc-diners-club",
+ label: "cc-diners-club",
+ },
+ {
+ value: "fab fa-cc-discover",
+ label: "cc-discover",
+ },
+ {
+ value: "fab fa-cc-jcb",
+ label: "cc-jcb",
+ },
+ {
+ value: "fab fa-cc-mastercard",
+ label: "cc-mastercard",
+ },
+ {
+ value: "fab fa-cc-paypal",
+ label: "cc-paypal",
+ },
+ {
+ value: "fab fa-cc-stripe",
+ label: "cc-stripe",
+ },
+ {
+ value: "fab fa-cc-visa",
+ label: "cc-visa",
+ },
+ {
+ value: "fab fa-centercode",
+ label: "centercode",
+ },
+ {
+ value: "fab fa-centos",
+ label: "centos",
+ },
+ {
+ value: "fas fa-certificate",
+ label: "certificate",
+ },
+ {
+ value: "fas fa-chair",
+ label: "chair",
+ },
+ {
+ value: "fas fa-chalkboard",
+ label: "chalkboard",
+ },
+ {
+ value: "fas fa-chalkboard-teacher",
+ label: "chalkboard-teacher",
+ },
+ {
+ value: "fas fa-charging-station",
+ label: "charging-station",
+ },
+ {
+ value: "fas fa-chart-area",
+ label: "chart-area",
+ },
+ {
+ value: "fas fa-chart-bar",
+ label: "chart-bar",
+ },
+ {
+ value: "far fa-chart-bar",
+ label: "chart-bar",
+ },
+ {
+ value: "fas fa-chart-line",
+ label: "chart-line",
+ },
+ {
+ value: "fas fa-chart-pie",
+ label: "chart-pie",
+ },
+ {
+ value: "fas fa-check",
+ label: "check",
+ },
+ {
+ value: "fas fa-check-circle",
+ label: "check-circle",
+ },
+ {
+ value: "far fa-check-circle",
+ label: "check-circle",
+ },
+ {
+ value: "fas fa-check-double",
+ label: "check-double",
+ },
+ {
+ value: "fas fa-check-square",
+ label: "check-square",
+ },
+ {
+ value: "far fa-check-square",
+ label: "check-square",
+ },
+ {
+ value: "fas fa-cheese",
+ label: "cheese",
+ },
+ {
+ value: "fas fa-chess",
+ label: "chess",
+ },
+ {
+ value: "fas fa-chess-bishop",
+ label: "chess-bishop",
+ },
+ {
+ value: "fas fa-chess-board",
+ label: "chess-board",
+ },
+ {
+ value: "fas fa-chess-king",
+ label: "chess-king",
+ },
+ {
+ value: "fas fa-chess-knight",
+ label: "chess-knight",
+ },
+ {
+ value: "fas fa-chess-pawn",
+ label: "chess-pawn",
+ },
+ {
+ value: "fas fa-chess-queen",
+ label: "chess-queen",
+ },
+ {
+ value: "fas fa-chess-rook",
+ label: "chess-rook",
+ },
+ {
+ value: "fas fa-chevron-circle-down",
+ label: "chevron-circle-down",
+ },
+ {
+ value: "fas fa-chevron-circle-left",
+ label: "chevron-circle-left",
+ },
+ {
+ value: "fas fa-chevron-circle-right",
+ label: "chevron-circle-right",
+ },
+ {
+ value: "fas fa-chevron-circle-up",
+ label: "chevron-circle-up",
+ },
+ {
+ value: "fas fa-chevron-down",
+ label: "chevron-down",
+ },
+ {
+ value: "fas fa-chevron-left",
+ label: "chevron-left",
+ },
+ {
+ value: "fas fa-chevron-right",
+ label: "chevron-right",
+ },
+ {
+ value: "fas fa-chevron-up",
+ label: "chevron-up",
+ },
+ {
+ value: "fas fa-child",
+ label: "child",
+ },
+ {
+ value: "fab fa-chrome",
+ label: "chrome",
+ },
+ {
+ value: "fab fa-chromecast",
+ label: "chromecast",
+ },
+ {
+ value: "fas fa-church",
+ label: "church",
+ },
+ {
+ value: "fas fa-circle",
+ label: "circle",
+ },
+ {
+ value: "far fa-circle",
+ label: "circle",
+ },
+ {
+ value: "fas fa-circle-notch",
+ label: "circle-notch",
+ },
+ {
+ value: "fas fa-city",
+ label: "city",
+ },
+ {
+ value: "fas fa-clinic-medical",
+ label: "clinic-medical",
+ },
+ {
+ value: "fas fa-clipboard",
+ label: "clipboard",
+ },
+ {
+ value: "far fa-clipboard",
+ label: "clipboard",
+ },
+ {
+ value: "fas fa-clipboard-check",
+ label: "clipboard-check",
+ },
+ {
+ value: "fas fa-clipboard-list",
+ label: "clipboard-list",
+ },
+ {
+ value: "fas fa-clock",
+ label: "clock",
+ },
+ {
+ value: "far fa-clock",
+ label: "clock",
+ },
+ {
+ value: "fas fa-clone",
+ label: "clone",
+ },
+ {
+ value: "far fa-clone",
+ label: "clone",
+ },
+ {
+ value: "fas fa-closed-captioning",
+ label: "closed-captioning",
+ },
+ {
+ value: "far fa-closed-captioning",
+ label: "closed-captioning",
+ },
+ {
+ value: "fas fa-cloud",
+ label: "cloud",
+ },
+ {
+ value: "fas fa-cloud-download-alt",
+ label: "cloud-download-alt",
+ },
+ {
+ value: "fas fa-cloud-meatball",
+ label: "cloud-meatball",
+ },
+ {
+ value: "fas fa-cloud-moon",
+ label: "cloud-moon",
+ },
+ {
+ value: "fas fa-cloud-moon-rain",
+ label: "cloud-moon-rain",
+ },
+ {
+ value: "fas fa-cloud-rain",
+ label: "cloud-rain",
+ },
+ {
+ value: "fas fa-cloud-showers-heavy",
+ label: "cloud-showers-heavy",
+ },
+ {
+ value: "fas fa-cloud-sun",
+ label: "cloud-sun",
+ },
+ {
+ value: "fas fa-cloud-sun-rain",
+ label: "cloud-sun-rain",
+ },
+ {
+ value: "fas fa-cloud-upload-alt",
+ label: "cloud-upload-alt",
+ },
+ {
+ value: "fab fa-cloudscale",
+ label: "cloudscale",
+ },
+ {
+ value: "fab fa-cloudsmith",
+ label: "cloudsmith",
+ },
+ {
+ value: "fab fa-cloudversify",
+ label: "cloudversify",
+ },
+ {
+ value: "fas fa-cocktail",
+ label: "cocktail",
+ },
+ {
+ value: "fas fa-code",
+ label: "code",
+ },
+ {
+ value: "fas fa-code-branch",
+ label: "code-branch",
+ },
+ {
+ value: "fab fa-codepen",
+ label: "codepen",
+ },
+ {
+ value: "fab fa-codiepie",
+ label: "codiepie",
+ },
+ {
+ value: "fas fa-coffee",
+ label: "coffee",
+ },
+ {
+ value: "fas fa-cog",
+ label: "cog",
+ },
+ {
+ value: "fas fa-cogs",
+ label: "cogs",
+ },
+ {
+ value: "fas fa-coins",
+ label: "coins",
+ },
+ {
+ value: "fas fa-columns",
+ label: "columns",
+ },
+ {
+ value: "fas fa-comment",
+ label: "comment",
+ },
+ {
+ value: "far fa-comment",
+ label: "comment",
+ },
+ {
+ value: "fas fa-comment-alt",
+ label: "comment-alt",
+ },
+ {
+ value: "far fa-comment-alt",
+ label: "comment-alt",
+ },
+ {
+ value: "fas fa-comment-dollar",
+ label: "comment-dollar",
+ },
+ {
+ value: "fas fa-comment-dots",
+ label: "comment-dots",
+ },
+ {
+ value: "far fa-comment-dots",
+ label: "comment-dots",
+ },
+ {
+ value: "fas fa-comment-medical",
+ label: "comment-medical",
+ },
+ {
+ value: "fas fa-comment-slash",
+ label: "comment-slash",
+ },
+ {
+ value: "fas fa-comments",
+ label: "comments",
+ },
+ {
+ value: "far fa-comments",
+ label: "comments",
+ },
+ {
+ value: "fas fa-comments-dollar",
+ label: "comments-dollar",
+ },
+ {
+ value: "fas fa-compact-disc",
+ label: "compact-disc",
+ },
+ {
+ value: "fas fa-compass",
+ label: "compass",
+ },
+ {
+ value: "far fa-compass",
+ label: "compass",
+ },
+ {
+ value: "fas fa-compress",
+ label: "compress",
+ },
+ {
+ value: "fas fa-compress-alt",
+ label: "compress-alt",
+ },
+ {
+ value: "fas fa-compress-arrows-alt",
+ label: "compress-arrows-alt",
+ },
+ {
+ value: "fas fa-concierge-bell",
+ label: "concierge-bell",
+ },
+ {
+ value: "fab fa-confluence",
+ label: "confluence",
+ },
+ {
+ value: "fab fa-connectdevelop",
+ label: "connectdevelop",
+ },
+ {
+ value: "fab fa-contao",
+ label: "contao",
+ },
+ {
+ value: "fas fa-cookie",
+ label: "cookie",
+ },
+ {
+ value: "fas fa-cookie-bite",
+ label: "cookie-bite",
+ },
+ {
+ value: "fas fa-copy",
+ label: "copy",
+ },
+ {
+ value: "far fa-copy",
+ label: "copy",
+ },
+ {
+ value: "fas fa-copyright",
+ label: "copyright",
+ },
+ {
+ value: "far fa-copyright",
+ label: "copyright",
+ },
+ {
+ value: "fab fa-cotton-bureau",
+ label: "cotton-bureau",
+ },
+ {
+ value: "fas fa-couch",
+ label: "couch",
+ },
+ {
+ value: "fab fa-cpanel",
+ label: "cpanel",
+ },
+ {
+ value: "fab fa-creative-commons",
+ label: "creative-commons",
+ },
+ {
+ value: "fab fa-creative-commons-by",
+ label: "creative-commons-by",
+ },
+ {
+ value: "fab fa-creative-commons-nc",
+ label: "creative-commons-nc",
+ },
+ {
+ value: "fab fa-creative-commons-nc-eu",
+ label: "creative-commons-nc-eu",
+ },
+ {
+ value: "fab fa-creative-commons-nc-jp",
+ label: "creative-commons-nc-jp",
+ },
+ {
+ value: "fab fa-creative-commons-nd",
+ label: "creative-commons-nd",
+ },
+ {
+ value: "fab fa-creative-commons-pd",
+ label: "creative-commons-pd",
+ },
+ {
+ value: "fab fa-creative-commons-pd-alt",
+ label: "creative-commons-pd-alt",
+ },
+ {
+ value: "fab fa-creative-commons-remix",
+ label: "creative-commons-remix",
+ },
+ {
+ value: "fab fa-creative-commons-sa",
+ label: "creative-commons-sa",
+ },
+ {
+ value: "fab fa-creative-commons-sampling",
+ label: "creative-commons-sampling",
+ },
+ {
+ value: "fab fa-creative-commons-sampling-plus",
+ label: "creative-commons-sampling-plus",
+ },
+ {
+ value: "fab fa-creative-commons-share",
+ label: "creative-commons-share",
+ },
+ {
+ value: "fab fa-creative-commons-zero",
+ label: "creative-commons-zero",
+ },
+ {
+ value: "fas fa-credit-card",
+ label: "credit-card",
+ },
+ {
+ value: "far fa-credit-card",
+ label: "credit-card",
+ },
+ {
+ value: "fab fa-critical-role",
+ label: "critical-role",
+ },
+ {
+ value: "fas fa-crop",
+ label: "crop",
+ },
+ {
+ value: "fas fa-crop-alt",
+ label: "crop-alt",
+ },
+ {
+ value: "fas fa-cross",
+ label: "cross",
+ },
+ {
+ value: "fas fa-crosshairs",
+ label: "crosshairs",
+ },
+ {
+ value: "fas fa-crow",
+ label: "crow",
+ },
+ {
+ value: "fas fa-crown",
+ label: "crown",
+ },
+ {
+ value: "fas fa-crutch",
+ label: "crutch",
+ },
+ {
+ value: "fab fa-css3",
+ label: "css3",
+ },
+ {
+ value: "fab fa-css3-alt",
+ label: "css3-alt",
+ },
+ {
+ value: "fas fa-cube",
+ label: "cube",
+ },
+ {
+ value: "fas fa-cubes",
+ label: "cubes",
+ },
+ {
+ value: "fas fa-cut",
+ label: "cut",
+ },
+ {
+ value: "fab fa-cuttlefish",
+ label: "cuttlefish",
+ },
+ {
+ value: "fab fa-d-and-d",
+ label: "d-and-d",
+ },
+ {
+ value: "fab fa-d-and-d-beyond",
+ label: "d-and-d-beyond",
+ },
+ {
+ value: "fab fa-dailymotion",
+ label: "dailymotion",
+ },
+ {
+ value: "fab fa-dashcube",
+ label: "dashcube",
+ },
+ {
+ value: "fas fa-database",
+ label: "database",
+ },
+ {
+ value: "fas fa-deaf",
+ label: "deaf",
+ },
+ {
+ value: "fab fa-deezer",
+ label: "deezer",
+ },
+ {
+ value: "fab fa-delicious",
+ label: "delicious",
+ },
+ {
+ value: "fas fa-democrat",
+ label: "democrat",
+ },
+ {
+ value: "fab fa-deploydog",
+ label: "deploydog",
+ },
+ {
+ value: "fab fa-deskpro",
+ label: "deskpro",
+ },
+ {
+ value: "fas fa-desktop",
+ label: "desktop",
+ },
+ {
+ value: "fab fa-dev",
+ label: "dev",
+ },
+ {
+ value: "fab fa-deviantart",
+ label: "deviantart",
+ },
+ {
+ value: "fas fa-dharmachakra",
+ label: "dharmachakra",
+ },
+ {
+ value: "fab fa-dhl",
+ label: "dhl",
+ },
+ {
+ value: "fas fa-diagnoses",
+ label: "diagnoses",
+ },
+ {
+ value: "fab fa-diaspora",
+ label: "diaspora",
+ },
+ {
+ value: "fas fa-dice",
+ label: "dice",
+ },
+ {
+ value: "fas fa-dice-d20",
+ label: "dice-d20",
+ },
+ {
+ value: "fas fa-dice-d6",
+ label: "dice-d6",
+ },
+ {
+ value: "fas fa-dice-five",
+ label: "dice-five",
+ },
+ {
+ value: "fas fa-dice-four",
+ label: "dice-four",
+ },
+ {
+ value: "fas fa-dice-one",
+ label: "dice-one",
+ },
+ {
+ value: "",
+ label: "",
+ },
+ {
+ value: "fas fa-dice-six",
+ label: "dice-six",
+ },
+ {
+ value: "fas fa-dice-three",
+ label: "dice-three",
+ },
+ {
+ value: "fas fa-dice-two",
+ label: "dice-two",
+ },
+ {
+ value: "fab fa-digg",
+ label: "digg",
+ },
+ {
+ value: "fab fa-digital-ocean",
+ label: "digital-ocean",
+ },
+ {
+ value: "fas fa-digital-tachograph",
+ label: "digital-tachograph",
+ },
+ {
+ value: "fas fa-directions",
+ label: "directions",
+ },
+ {
+ value: "fab fa-discord",
+ label: "discord",
+ },
+ {
+ value: "fab fa-discourse",
+ label: "discourse",
+ },
+ {
+ value: "fas fa-disease",
+ label: "disease",
+ },
+ {
+ value: "fas fa-divide",
+ label: "divide",
+ },
+ {
+ value: "fas fa-dizzy",
+ label: "dizzy",
+ },
+ {
+ value: "far fa-dizzy",
+ label: "dizzy",
+ },
+ {
+ value: "fas fa-dna",
+ label: "dna",
+ },
+ {
+ value: "fab fa-dochub",
+ label: "dochub",
+ },
+ {
+ value: "fab fa-docker",
+ label: "docker",
+ },
+ {
+ value: "fas fa-dog",
+ label: "dog",
+ },
+ {
+ value: "fas fa-dollar-sign",
+ label: "dollar-sign",
+ },
+ {
+ value: "fas fa-dolly",
+ label: "dolly",
+ },
+ {
+ value: "fas fa-dolly-flatbed",
+ label: "dolly-flatbed",
+ },
+ {
+ value: "fas fa-donate",
+ label: "donate",
+ },
+ {
+ value: "fas fa-door-closed",
+ label: "door-closed",
+ },
+ {
+ value: "fas fa-door-open",
+ label: "door-open",
+ },
+ {
+ value: "fas fa-dot-circle",
+ label: "dot-circle",
+ },
+ {
+ value: "far fa-dot-circle",
+ label: "dot-circle",
+ },
+ {
+ value: "fas fa-dove",
+ label: "dove",
+ },
+ {
+ value: "fas fa-download",
+ label: "download",
+ },
+ {
+ value: "fab fa-draft2digital",
+ label: "draft2digital",
+ },
+ {
+ value: "fas fa-drafting-compass",
+ label: "drafting-compass",
+ },
+ {
+ value: "fas fa-dragon",
+ label: "dragon",
+ },
+ {
+ value: "fas fa-draw-polygon",
+ label: "draw-polygon",
+ },
+ {
+ value: "fab fa-dribbble",
+ label: "dribbble",
+ },
+ {
+ value: "fab fa-dribbble-square",
+ label: "dribbble-square",
+ },
+ {
+ value: "fab fa-dropbox",
+ label: "dropbox",
+ },
+ {
+ value: "fas fa-drum",
+ label: "drum",
+ },
+ {
+ value: "fas fa-drum-steelpan",
+ label: "drum-steelpan",
+ },
+ {
+ value: "fas fa-drumstick-bite",
+ label: "drumstick-bite",
+ },
+ {
+ value: "fab fa-drupal",
+ label: "drupal",
+ },
+ {
+ value: "fas fa-dumbbell",
+ label: "dumbbell",
+ },
+ {
+ value: "fas fa-dumpster",
+ label: "dumpster",
+ },
+ {
+ value: "fas fa-dumpster-fire",
+ label: "dumpster-fire",
+ },
+ {
+ value: "fas fa-dungeon",
+ label: "dungeon",
+ },
+ {
+ value: "fab fa-dyalog",
+ label: "dyalog",
+ },
+ {
+ value: "fab fa-earlybirds",
+ label: "earlybirds",
+ },
+ {
+ value: "fab fa-ebay",
+ label: "ebay",
+ },
+ {
+ value: "fab fa-edge",
+ label: "edge",
+ },
+ {
+ value: "fab fa-edge-legacy",
+ label: "edge-legacy",
+ },
+ {
+ value: "fas fa-edit",
+ label: "edit",
+ },
+ {
+ value: "far fa-edit",
+ label: "edit",
+ },
+ {
+ value: "fas fa-egg",
+ label: "egg",
+ },
+ {
+ value: "fas fa-eject",
+ label: "eject",
+ },
+ {
+ value: "fab fa-elementor",
+ label: "elementor",
+ },
+ {
+ value: "fas fa-ellipsis-h",
+ label: "ellipsis-h",
+ },
+ {
+ value: "fas fa-ellipsis-v",
+ label: "ellipsis-v",
+ },
+ {
+ value: "fab fa-ello",
+ label: "ello",
+ },
+ {
+ value: "fab fa-ember",
+ label: "ember",
+ },
+ {
+ value: "fab fa-empire",
+ label: "empire",
+ },
+ {
+ value: "fas fa-envelope",
+ label: "envelope",
+ },
+ {
+ value: "far fa-envelope",
+ label: "envelope",
+ },
+ {
+ value: "fas fa-envelope-open",
+ label: "envelope-open",
+ },
+ {
+ value: "far fa-envelope-open",
+ label: "envelope-open",
+ },
+ {
+ value: "fas fa-envelope-open-text",
+ label: "envelope-open-text",
+ },
+ {
+ value: "fas fa-envelope-square",
+ label: "envelope-square",
+ },
+ {
+ value: "fab fa-envira",
+ label: "envira",
+ },
+ {
+ value: "fas fa-equals",
+ label: "equals",
+ },
+ {
+ value: "fas fa-eraser",
+ label: "eraser",
+ },
+ {
+ value: "fab fa-erlang",
+ label: "erlang",
+ },
+ {
+ value: "fab fa-ethereum",
+ label: "ethereum",
+ },
+ {
+ value: "fas fa-ethernet",
+ label: "ethernet",
+ },
+ {
+ value: "fab fa-etsy",
+ label: "etsy",
+ },
+ {
+ value: "fas fa-euro-sign",
+ label: "euro-sign",
+ },
+ {
+ value: "fab fa-evernote",
+ label: "evernote",
+ },
+ {
+ value: "fas fa-exchange-alt",
+ label: "exchange-alt",
+ },
+ {
+ value: "fas fa-exclamation",
+ label: "exclamation",
+ },
+ {
+ value: "fas fa-exclamation-circle",
+ label: "exclamation-circle",
+ },
+ {
+ value: "fas fa-exclamation-triangle",
+ label: "exclamation-triangle",
+ },
+ {
+ value: "fas fa-expand",
+ label: "expand",
+ },
+ {
+ value: "fas fa-expand-alt",
+ label: "expand-alt",
+ },
+ {
+ value: "fas fa-expand-arrows-alt",
+ label: "expand-arrows-alt",
+ },
+ {
+ value: "fab fa-expeditedssl",
+ label: "expeditedssl",
+ },
+ {
+ value: "fas fa-external-link-alt",
+ label: "external-link-alt",
+ },
+ {
+ value: "fas fa-external-link-square-alt",
+ label: "external-link-square-alt",
+ },
+ {
+ value: "fas fa-eye",
+ label: "eye",
+ },
+ {
+ value: "far fa-eye",
+ label: "eye",
+ },
+ {
+ value: "fas fa-eye-dropper",
+ label: "eye-dropper",
+ },
+ {
+ value: "fas fa-eye-slash",
+ label: "eye-slash",
+ },
+ {
+ value: "far fa-eye-slash",
+ label: "eye-slash",
+ },
+ {
+ value: "fab fa-facebook",
+ label: "facebook",
+ },
+ {
+ value: "fab fa-facebook-f",
+ label: "facebook-f",
+ },
+ {
+ value: "fab fa-facebook-messenger",
+ label: "facebook-messenger",
+ },
+ {
+ value: "fab fa-facebook-square",
+ label: "facebook-square",
+ },
+ {
+ value: "fas fa-fan",
+ label: "fan",
+ },
+ {
+ value: "fab fa-fantasy-flight-games",
+ label: "fantasy-flight-games",
+ },
+ {
+ value: "fas fa-fast-backward",
+ label: "fast-backward",
+ },
+ {
+ value: "fas fa-fast-forward",
+ label: "fast-forward",
+ },
+ {
+ value: "fas fa-faucet",
+ label: "faucet",
+ },
+ {
+ value: "fas fa-fax",
+ label: "fax",
+ },
+ {
+ value: "fas fa-feather",
+ label: "feather",
+ },
+ {
+ value: "fas fa-feather-alt",
+ label: "feather-alt",
+ },
+ {
+ value: "fab fa-fedex",
+ label: "fedex",
+ },
+ {
+ value: "",
+ label: "",
+ },
+ {
+ value: "fab fa-fedora",
+ label: "fedora",
+ },
+ {
+ value: "fas fa-female",
+ label: "female",
+ },
+ {
+ value: "fas fa-fighter-jet",
+ label: "fighter-jet",
+ },
+ {
+ value: "fab fa-figma",
+ label: "figma",
+ },
+ {
+ value: "fas fa-file",
+ label: "file",
+ },
+ {
+ value: "far fa-file",
+ label: "file",
+ },
+ {
+ value: "fas fa-file-alt",
+ label: "file-alt",
+ },
+ {
+ value: "far fa-file-alt",
+ label: "file-alt",
+ },
+ {
+ value: "fas fa-file-archive",
+ label: "file-archive",
+ },
+ {
+ value: "far fa-file-archive",
+ label: "file-archive",
+ },
+ {
+ value: "fas fa-file-audio",
+ label: "file-audio",
+ },
+ {
+ value: "far fa-file-audio",
+ label: "file-audio",
+ },
+ {
+ value: "fas fa-file-code",
+ label: "file-code",
+ },
+ {
+ value: "far fa-file-code",
+ label: "file-code",
+ },
+ {
+ value: "fas fa-file-contract",
+ label: "file-contract",
+ },
+ {
+ value: "fas fa-file-csv",
+ label: "file-csv",
+ },
+ {
+ value: "fas fa-file-download",
+ label: "file-download",
+ },
+ {
+ value: "fas fa-file-excel",
+ label: "file-excel",
+ },
+ {
+ value: "far fa-file-excel",
+ label: "file-excel",
+ },
+ {
+ value: "fas fa-file-export",
+ label: "file-export",
+ },
+ {
+ value: "fas fa-file-image",
+ label: "file-image",
+ },
+ {
+ value: "far fa-file-image",
+ label: "file-image",
+ },
+ {
+ value: "fas fa-file-import",
+ label: "file-import",
+ },
+ {
+ value: "fas fa-file-invoice",
+ label: "file-invoice",
+ },
+ {
+ value: "fas fa-file-invoice-dollar",
+ label: "file-invoice-dollar",
+ },
+ {
+ value: "fas fa-file-medical",
+ label: "file-medical",
+ },
+ {
+ value: "fas fa-file-medical-alt",
+ label: "file-medical-alt",
+ },
+ {
+ value: "fas fa-file-pdf",
+ label: "file-pdf",
+ },
+ {
+ value: "far fa-file-pdf",
+ label: "file-pdf",
+ },
+ {
+ value: "fas fa-file-powerpoint",
+ label: "file-powerpoint",
+ },
+ {
+ value: "far fa-file-powerpoint",
+ label: "file-powerpoint",
+ },
+ {
+ value: "fas fa-file-prescription",
+ label: "file-prescription",
+ },
+ {
+ value: "fas fa-file-signature",
+ label: "file-signature",
+ },
+ {
+ value: "fas fa-file-upload",
+ label: "file-upload",
+ },
+ {
+ value: "fas fa-file-video",
+ label: "file-video",
+ },
+ {
+ value: "far fa-file-video",
+ label: "file-video",
+ },
+ {
+ value: "fas fa-file-word",
+ label: "file-word",
+ },
+ {
+ value: "far fa-file-word",
+ label: "file-word",
+ },
+ {
+ value: "fas fa-fill",
+ label: "fill",
+ },
+ {
+ value: "fas fa-fill-drip",
+ label: "fill-drip",
+ },
+ {
+ value: "fas fa-film",
+ label: "film",
+ },
+ {
+ value: "fas fa-filter",
+ label: "filter",
+ },
+ {
+ value: "fas fa-fingerprint",
+ label: "fingerprint",
+ },
+ {
+ value: "fas fa-fire",
+ label: "fire",
+ },
+ {
+ value: "fas fa-fire-alt",
+ label: "fire-alt",
+ },
+ {
+ value: "fas fa-fire-extinguisher",
+ label: "fire-extinguisher",
+ },
+ {
+ value: "fab fa-firefox",
+ label: "firefox",
+ },
+ {
+ value: "fab fa-firefox-browser",
+ label: "firefox-browser",
+ },
+ {
+ value: "fas fa-first-aid",
+ label: "first-aid",
+ },
+ {
+ value: "fab fa-first-order",
+ label: "first-order",
+ },
+ {
+ value: "fab fa-first-order-alt",
+ label: "first-order-alt",
+ },
+ {
+ value: "fab fa-firstdraft",
+ label: "firstdraft",
+ },
+ {
+ value: "fas fa-fish",
+ label: "fish",
+ },
+ {
+ value: "fas fa-fist-raised",
+ label: "fist-raised",
+ },
+ {
+ value: "fas fa-flag",
+ label: "flag",
+ },
+ {
+ value: "far fa-flag",
+ label: "flag",
+ },
+ {
+ value: "fas fa-flag-checkered",
+ label: "flag-checkered",
+ },
+ {
+ value: "fas fa-flag-usa",
+ label: "flag-usa",
+ },
+ {
+ value: "fas fa-flask",
+ label: "flask",
+ },
+ {
+ value: "fab fa-flickr",
+ label: "flickr",
+ },
+ {
+ value: "fab fa-flipboard",
+ label: "flipboard",
+ },
+ {
+ value: "fas fa-flushed",
+ label: "flushed",
+ },
+ {
+ value: "far fa-flushed",
+ label: "flushed",
+ },
+ {
+ value: "fab fa-fly",
+ label: "fly",
+ },
+ {
+ value: "fas fa-folder",
+ label: "folder",
+ },
+ {
+ value: "far fa-folder",
+ label: "folder",
+ },
+ {
+ value: "fas fa-folder-minus",
+ label: "folder-minus",
+ },
+ {
+ value: "fas fa-folder-open",
+ label: "folder-open",
+ },
+ {
+ value: "far fa-folder-open",
+ label: "folder-open",
+ },
+ {
+ value: "fas fa-folder-plus",
+ label: "folder-plus",
+ },
+ {
+ value: "fas fa-font",
+ label: "font",
+ },
+ {
+ value: "fab fa-font-awesome",
+ label: "font-awesome",
+ },
+ {
+ value: "fab fa-font-awesome-alt",
+ label: "font-awesome-alt",
+ },
+ {
+ value: "fab fa-font-awesome-flag",
+ label: "font-awesome-flag",
+ },
+ {
+ value: "fab fa-fonticons",
+ label: "fonticons",
+ },
+ {
+ value: "fab fa-fonticons-fi",
+ label: "fonticons-fi",
+ },
+ {
+ value: "fas fa-football-ball",
+ label: "football-ball",
+ },
+ {
+ value: "fab fa-fort-awesome",
+ label: "fort-awesome",
+ },
+ {
+ value: "fab fa-fort-awesome-alt",
+ label: "fort-awesome-alt",
+ },
+ {
+ value: "fab fa-forumbee",
+ label: "forumbee",
+ },
+ {
+ value: "fas fa-forward",
+ label: "forward",
+ },
+ {
+ value: "fab fa-foursquare",
+ label: "foursquare",
+ },
+ {
+ value: "fab fa-free-code-camp",
+ label: "free-code-camp",
+ },
+ {
+ value: "fab fa-freebsd",
+ label: "freebsd",
+ },
+ {
+ value: "fas fa-frog",
+ label: "frog",
+ },
+ {
+ value: "fas fa-frown",
+ label: "frown",
+ },
+ {
+ value: "far fa-frown",
+ label: "frown",
+ },
+ {
+ value: "fas fa-frown-open",
+ label: "frown-open",
+ },
+ {
+ value: "far fa-frown-open",
+ label: "frown-open",
+ },
+ {
+ value: "fab fa-fulcrum",
+ label: "fulcrum",
+ },
+ {
+ value: "fas fa-funnel-dollar",
+ label: "funnel-dollar",
+ },
+ {
+ value: "fas fa-futbol",
+ label: "futbol",
+ },
+ {
+ value: "far fa-futbol",
+ label: "futbol",
+ },
+ {
+ value: "fab fa-galactic-republic",
+ label: "galactic-republic",
+ },
+ {
+ value: "fab fa-galactic-senate",
+ label: "galactic-senate",
+ },
+ {
+ value: "fas fa-gamepad",
+ label: "gamepad",
+ },
+ {
+ value: "fas fa-gas-pump",
+ label: "gas-pump",
+ },
+ {
+ value: "fas fa-gavel",
+ label: "gavel",
+ },
+ {
+ value: "fas fa-gem",
+ label: "gem",
+ },
+ {
+ value: "far fa-gem",
+ label: "gem",
+ },
+ {
+ value: "",
+ label: "",
+ },
+ {
+ value: "fas fa-genderless",
+ label: "genderless",
+ },
+ {
+ value: "fab fa-get-pocket",
+ label: "get-pocket",
+ },
+ {
+ value: "fab fa-gg",
+ label: "gg",
+ },
+ {
+ value: "fab fa-gg-circle",
+ label: "gg-circle",
+ },
+ {
+ value: "fas fa-ghost",
+ label: "ghost",
+ },
+ {
+ value: "fas fa-gift",
+ label: "gift",
+ },
+ {
+ value: "fas fa-gifts",
+ label: "gifts",
+ },
+ {
+ value: "fab fa-git",
+ label: "git",
+ },
+ {
+ value: "fab fa-git-alt",
+ label: "git-alt",
+ },
+ {
+ value: "fab fa-git-square",
+ label: "git-square",
+ },
+ {
+ value: "fab fa-github",
+ label: "github",
+ },
+ {
+ value: "fab fa-github-alt",
+ label: "github-alt",
+ },
+ {
+ value: "fab fa-github-square",
+ label: "github-square",
+ },
+ {
+ value: "fab fa-gitkraken",
+ label: "gitkraken",
+ },
+ {
+ value: "fab fa-gitlab",
+ label: "gitlab",
+ },
+ {
+ value: "fab fa-gitter",
+ label: "gitter",
+ },
+ {
+ value: "fas fa-glass-cheers",
+ label: "glass-cheers",
+ },
+ {
+ value: "fas fa-glass-martini",
+ label: "glass-martini",
+ },
+ {
+ value: "fas fa-glass-martini-alt",
+ label: "glass-martini-alt",
+ },
+ {
+ value: "fas fa-glass-whiskey",
+ label: "glass-whiskey",
+ },
+ {
+ value: "fas fa-glasses",
+ label: "glasses",
+ },
+ {
+ value: "fab fa-glide",
+ label: "glide",
+ },
+ {
+ value: "fab fa-glide-g",
+ label: "glide-g",
+ },
+ {
+ value: "fas fa-globe",
+ label: "globe",
+ },
+ {
+ value: "fas fa-globe-africa",
+ label: "globe-africa",
+ },
+ {
+ value: "fas fa-globe-americas",
+ label: "globe-americas",
+ },
+ {
+ value: "fas fa-globe-asia",
+ label: "globe-asia",
+ },
+ {
+ value: "fas fa-globe-europe",
+ label: "globe-europe",
+ },
+ {
+ value: "fab fa-gofore",
+ label: "gofore",
+ },
+ {
+ value: "fas fa-golf-ball",
+ label: "golf-ball",
+ },
+ {
+ value: "fab fa-goodreads",
+ label: "goodreads",
+ },
+ {
+ value: "fab fa-goodreads-g",
+ label: "goodreads-g",
+ },
+ {
+ value: "fab fa-google",
+ label: "google",
+ },
+ {
+ value: "fab fa-google-drive",
+ label: "google-drive",
+ },
+ {
+ value: "fab fa-google-pay",
+ label: "google-pay",
+ },
+ {
+ value: "fab fa-google-play",
+ label: "google-play",
+ },
+ {
+ value: "fab fa-google-plus",
+ label: "google-plus",
+ },
+ {
+ value: "fab fa-google-plus-g",
+ label: "google-plus-g",
+ },
+ {
+ value: "fab fa-google-plus-square",
+ label: "google-plus-square",
+ },
+ {
+ value: "fab fa-google-wallet",
+ label: "google-wallet",
+ },
+ {
+ value: "fas fa-gopuram",
+ label: "gopuram",
+ },
+ {
+ value: "fas fa-graduation-cap",
+ label: "graduation-cap",
+ },
+ {
+ value: "fab fa-gratipay",
+ label: "gratipay",
+ },
+ {
+ value: "fab fa-grav",
+ label: "grav",
+ },
+ {
+ value: "fas fa-greater-than",
+ label: "greater-than",
+ },
+ {
+ value: "fas fa-greater-than-equal",
+ label: "greater-than-equal",
+ },
+ {
+ value: "fas fa-grimace",
+ label: "grimace",
+ },
+ {
+ value: "far fa-grimace",
+ label: "grimace",
+ },
+ {
+ value: "fas fa-grin",
+ label: "grin",
+ },
+ {
+ value: "far fa-grin",
+ label: "grin",
+ },
+ {
+ value: "fas fa-grin-alt",
+ label: "grin-alt",
+ },
+ {
+ value: "far fa-grin-alt",
+ label: "grin-alt",
+ },
+ {
+ value: "fas fa-grin-beam",
+ label: "grin-beam",
+ },
+ {
+ value: "far fa-grin-beam",
+ label: "grin-beam",
+ },
+ {
+ value: "fas fa-grin-beam-sweat",
+ label: "grin-beam-sweat",
+ },
+ {
+ value: "far fa-grin-beam-sweat",
+ label: "grin-beam-sweat",
+ },
+ {
+ value: "fas fa-grin-hearts",
+ label: "grin-hearts",
+ },
+ {
+ value: "far fa-grin-hearts",
+ label: "grin-hearts",
+ },
+ {
+ value: "fas fa-grin-squint",
+ label: "grin-squint",
+ },
+ {
+ value: "far fa-grin-squint",
+ label: "grin-squint",
+ },
+ {
+ value: "fas fa-grin-squint-tears",
+ label: "grin-squint-tears",
+ },
+ {
+ value: "far fa-grin-squint-tears",
+ label: "grin-squint-tears",
+ },
+ {
+ value: "fas fa-grin-stars",
+ label: "grin-stars",
+ },
+ {
+ value: "far fa-grin-stars",
+ label: "grin-stars",
+ },
+ {
+ value: "fas fa-grin-tears",
+ label: "grin-tears",
+ },
+ {
+ value: "far fa-grin-tears",
+ label: "grin-tears",
+ },
+ {
+ value: "fas fa-grin-tongue",
+ label: "grin-tongue",
+ },
+ {
+ value: "far fa-grin-tongue",
+ label: "grin-tongue",
+ },
+ {
+ value: "fas fa-grin-tongue-squint",
+ label: "grin-tongue-squint",
+ },
+ {
+ value: "far fa-grin-tongue-squint",
+ label: "grin-tongue-squint",
+ },
+ {
+ value: "fas fa-grin-tongue-wink",
+ label: "grin-tongue-wink",
+ },
+ {
+ value: "far fa-grin-tongue-wink",
+ label: "grin-tongue-wink",
+ },
+ {
+ value: "fas fa-grin-wink",
+ label: "grin-wink",
+ },
+ {
+ value: "far fa-grin-wink",
+ label: "grin-wink",
+ },
+ {
+ value: "fas fa-grip-horizontal",
+ label: "grip-horizontal",
+ },
+ {
+ value: "fas fa-grip-lines",
+ label: "grip-lines",
+ },
+ {
+ value: "fas fa-grip-lines-vertical",
+ label: "grip-lines-vertical",
+ },
+ {
+ value: "fas fa-grip-vertical",
+ label: "grip-vertical",
+ },
+ {
+ value: "fab fa-gripfire",
+ label: "gripfire",
+ },
+ {
+ value: "fab fa-grunt",
+ label: "grunt",
+ },
+ {
+ value: "fas fa-guitar",
+ label: "guitar",
+ },
+ {
+ value: "fab fa-gulp",
+ label: "gulp",
+ },
+ {
+ value: "fas fa-h-square",
+ label: "h-square",
+ },
+ {
+ value: "fab fa-hacker-news",
+ label: "hacker-news",
+ },
+ {
+ value: "fab fa-hacker-news-square",
+ label: "hacker-news-square",
+ },
+ {
+ value: "fab fa-hackerrank",
+ label: "hackerrank",
+ },
+ {
+ value: "fas fa-hamburger",
+ label: "hamburger",
+ },
+ {
+ value: "fas fa-hammer",
+ label: "hammer",
+ },
+ {
+ value: "fas fa-hamsa",
+ label: "hamsa",
+ },
+ {
+ value: "fas fa-hand-holding",
+ label: "hand-holding",
+ },
+ {
+ value: "fas fa-hand-holding-heart",
+ label: "hand-holding-heart",
+ },
+ {
+ value: "fas fa-hand-holding-medical",
+ label: "hand-holding-medical",
+ },
+ {
+ value: "fas fa-hand-holding-usd",
+ label: "hand-holding-usd",
+ },
+ {
+ value: "fas fa-hand-holding-water",
+ label: "hand-holding-water",
+ },
+ {
+ value: "fas fa-hand-lizard",
+ label: "hand-lizard",
+ },
+ {
+ value: "far fa-hand-lizard",
+ label: "hand-lizard",
+ },
+ {
+ value: "fas fa-hand-middle-finger",
+ label: "hand-middle-finger",
+ },
+ {
+ value: "fas fa-hand-paper",
+ label: "hand-paper",
+ },
+ {
+ value: "far fa-hand-paper",
+ label: "hand-paper",
+ },
+ {
+ value: "fas fa-hand-peace",
+ label: "hand-peace",
+ },
+ {
+ value: "",
+ label: "",
+ },
+ {
+ value: "far fa-hand-peace",
+ label: "hand-peace",
+ },
+ {
+ value: "fas fa-hand-point-down",
+ label: "hand-point-down",
+ },
+ {
+ value: "far fa-hand-point-down",
+ label: "hand-point-down",
+ },
+ {
+ value: "fas fa-hand-point-left",
+ label: "hand-point-left",
+ },
+ {
+ value: "far fa-hand-point-left",
+ label: "hand-point-left",
+ },
+ {
+ value: "fas fa-hand-point-right",
+ label: "hand-point-right",
+ },
+ {
+ value: "far fa-hand-point-right",
+ label: "hand-point-right",
+ },
+ {
+ value: "fas fa-hand-point-up",
+ label: "hand-point-up",
+ },
+ {
+ value: "far fa-hand-point-up",
+ label: "hand-point-up",
+ },
+ {
+ value: "fas fa-hand-pointer",
+ label: "hand-pointer",
+ },
+ {
+ value: "far fa-hand-pointer",
+ label: "hand-pointer",
+ },
+ {
+ value: "fas fa-hand-rock",
+ label: "hand-rock",
+ },
+ {
+ value: "far fa-hand-rock",
+ label: "hand-rock",
+ },
+ {
+ value: "fas fa-hand-scissors",
+ label: "hand-scissors",
+ },
+ {
+ value: "far fa-hand-scissors",
+ label: "hand-scissors",
+ },
+ {
+ value: "fas fa-hand-sparkles",
+ label: "hand-sparkles",
+ },
+ {
+ value: "fas fa-hand-spock",
+ label: "hand-spock",
+ },
+ {
+ value: "far fa-hand-spock",
+ label: "hand-spock",
+ },
+ {
+ value: "fas fa-hands",
+ label: "hands",
+ },
+ {
+ value: "fas fa-hands-helping",
+ label: "hands-helping",
+ },
+ {
+ value: "fas fa-hands-wash",
+ label: "hands-wash",
+ },
+ {
+ value: "fas fa-handshake",
+ label: "handshake",
+ },
+ {
+ value: "far fa-handshake",
+ label: "handshake",
+ },
+ {
+ value: "fas fa-handshake-alt-slash",
+ label: "handshake-alt-slash",
+ },
+ {
+ value: "fas fa-handshake-slash",
+ label: "handshake-slash",
+ },
+ {
+ value: "fas fa-hanukiah",
+ label: "hanukiah",
+ },
+ {
+ value: "fas fa-hard-hat",
+ label: "hard-hat",
+ },
+ {
+ value: "fas fa-hashtag",
+ label: "hashtag",
+ },
+ {
+ value: "fas fa-hat-cowboy",
+ label: "hat-cowboy",
+ },
+ {
+ value: "fas fa-hat-cowboy-side",
+ label: "hat-cowboy-side",
+ },
+ {
+ value: "fas fa-hat-wizard",
+ label: "hat-wizard",
+ },
+ {
+ value: "fas fa-hdd",
+ label: "hdd",
+ },
+ {
+ value: "far fa-hdd",
+ label: "hdd",
+ },
+ {
+ value: "fas fa-head-side-cough",
+ label: "head-side-cough",
+ },
+ {
+ value: "fas fa-head-side-cough-slash",
+ label: "head-side-cough-slash",
+ },
+ {
+ value: "fas fa-head-side-mask",
+ label: "head-side-mask",
+ },
+ {
+ value: "fas fa-head-side-virus",
+ label: "head-side-virus",
+ },
+ {
+ value: "fas fa-heading",
+ label: "heading",
+ },
+ {
+ value: "fas fa-headphones",
+ label: "headphones",
+ },
+ {
+ value: "fas fa-headphones-alt",
+ label: "headphones-alt",
+ },
+ {
+ value: "fas fa-headset",
+ label: "headset",
+ },
+ {
+ value: "fas fa-heart",
+ label: "heart",
+ },
+ {
+ value: "far fa-heart",
+ label: "heart",
+ },
+ {
+ value: "fas fa-heart-broken",
+ label: "heart-broken",
+ },
+ {
+ value: "fas fa-heartbeat",
+ label: "heartbeat",
+ },
+ {
+ value: "fas fa-helicopter",
+ label: "helicopter",
+ },
+ {
+ value: "fas fa-highlighter",
+ label: "highlighter",
+ },
+ {
+ value: "fas fa-hiking",
+ label: "hiking",
+ },
+ {
+ value: "fas fa-hippo",
+ label: "hippo",
+ },
+ {
+ value: "fab fa-hips",
+ label: "hips",
+ },
+ {
+ value: "fab fa-hire-a-helper",
+ label: "hire-a-helper",
+ },
+ {
+ value: "fas fa-history",
+ label: "history",
+ },
+ {
+ value: "fas fa-hockey-puck",
+ label: "hockey-puck",
+ },
+ {
+ value: "fas fa-holly-berry",
+ label: "holly-berry",
+ },
+ {
+ value: "fas fa-home",
+ label: "home",
+ },
+ {
+ value: "fab fa-hooli",
+ label: "hooli",
+ },
+ {
+ value: "fab fa-hornbill",
+ label: "hornbill",
+ },
+ {
+ value: "fas fa-horse",
+ label: "horse",
+ },
+ {
+ value: "fas fa-horse-head",
+ label: "horse-head",
+ },
+ {
+ value: "fas fa-hospital",
+ label: "hospital",
+ },
+ {
+ value: "far fa-hospital",
+ label: "hospital",
+ },
+ {
+ value: "fas fa-hospital-alt",
+ label: "hospital-alt",
+ },
+ {
+ value: "fas fa-hospital-symbol",
+ label: "hospital-symbol",
+ },
+ {
+ value: "fas fa-hospital-user",
+ label: "hospital-user",
+ },
+ {
+ value: "fas fa-hot-tub",
+ label: "hot-tub",
+ },
+ {
+ value: "fas fa-hotdog",
+ label: "hotdog",
+ },
+ {
+ value: "fas fa-hotel",
+ label: "hotel",
+ },
+ {
+ value: "fab fa-hotjar",
+ label: "hotjar",
+ },
+ {
+ value: "fas fa-hourglass",
+ label: "hourglass",
+ },
+ {
+ value: "far fa-hourglass",
+ label: "hourglass",
+ },
+ {
+ value: "fas fa-hourglass-end",
+ label: "hourglass-end",
+ },
+ {
+ value: "fas fa-hourglass-half",
+ label: "hourglass-half",
+ },
+ {
+ value: "fas fa-hourglass-start",
+ label: "hourglass-start",
+ },
+ {
+ value: "fas fa-house-damage",
+ label: "house-damage",
+ },
+ {
+ value: "fas fa-house-user",
+ label: "house-user",
+ },
+ {
+ value: "fab fa-houzz",
+ label: "houzz",
+ },
+ {
+ value: "fas fa-hryvnia",
+ label: "hryvnia",
+ },
+ {
+ value: "fab fa-html5",
+ label: "html5",
+ },
+ {
+ value: "fab fa-hubspot",
+ label: "hubspot",
+ },
+ {
+ value: "fas fa-i-cursor",
+ label: "i-cursor",
+ },
+ {
+ value: "fas fa-ice-cream",
+ label: "ice-cream",
+ },
+ {
+ value: "fas fa-icicles",
+ label: "icicles",
+ },
+ {
+ value: "fas fa-icons",
+ label: "icons",
+ },
+ {
+ value: "fas fa-id-badge",
+ label: "id-badge",
+ },
+ {
+ value: "far fa-id-badge",
+ label: "id-badge",
+ },
+ {
+ value: "fas fa-id-card",
+ label: "id-card",
+ },
+ {
+ value: "far fa-id-card",
+ label: "id-card",
+ },
+ {
+ value: "fas fa-id-card-alt",
+ label: "id-card-alt",
+ },
+ {
+ value: "fab fa-ideal",
+ label: "ideal",
+ },
+ {
+ value: "fas fa-igloo",
+ label: "igloo",
+ },
+ {
+ value: "fas fa-image",
+ label: "image",
+ },
+ {
+ value: "far fa-image",
+ label: "image",
+ },
+ {
+ value: "fas fa-images",
+ label: "images",
+ },
+ {
+ value: "far fa-images",
+ label: "images",
+ },
+ {
+ value: "fab fa-imdb",
+ label: "imdb",
+ },
+ {
+ value: "fas fa-inbox",
+ label: "inbox",
+ },
+ {
+ value: "fas fa-indent",
+ label: "indent",
+ },
+ {
+ value: "fas fa-industry",
+ label: "industry",
+ },
+ {
+ value: "fas fa-infinity",
+ label: "infinity",
+ },
+ {
+ value: "fas fa-info",
+ label: "info",
+ },
+ {
+ value: "",
+ label: "",
+ },
+ {
+ value: "fas fa-info-circle",
+ label: "info-circle",
+ },
+ {
+ value: "fab fa-instagram",
+ label: "instagram",
+ },
+ {
+ value: "fab fa-instagram-square",
+ label: "instagram-square",
+ },
+ {
+ value: "fab fa-intercom",
+ label: "intercom",
+ },
+ {
+ value: "fab fa-internet-explorer",
+ label: "internet-explorer",
+ },
+ {
+ value: "fab fa-invision",
+ label: "invision",
+ },
+ {
+ value: "fab fa-ioxhost",
+ label: "ioxhost",
+ },
+ {
+ value: "fas fa-italic",
+ label: "italic",
+ },
+ {
+ value: "fab fa-itch-io",
+ label: "itch-io",
+ },
+ {
+ value: "fab fa-itunes",
+ label: "itunes",
+ },
+ {
+ value: "fab fa-itunes-note",
+ label: "itunes-note",
+ },
+ {
+ value: "fab fa-java",
+ label: "java",
+ },
+ {
+ value: "fas fa-jedi",
+ label: "jedi",
+ },
+ {
+ value: "fab fa-jedi-order",
+ label: "jedi-order",
+ },
+ {
+ value: "fab fa-jenkins",
+ label: "jenkins",
+ },
+ {
+ value: "fab fa-jira",
+ label: "jira",
+ },
+ {
+ value: "fab fa-joget",
+ label: "joget",
+ },
+ {
+ value: "fas fa-joint",
+ label: "joint",
+ },
+ {
+ value: "fab fa-joomla",
+ label: "joomla",
+ },
+ {
+ value: "fas fa-journal-whills",
+ label: "journal-whills",
+ },
+ {
+ value: "fab fa-js",
+ label: "js",
+ },
+ {
+ value: "fab fa-js-square",
+ label: "js-square",
+ },
+ {
+ value: "fab fa-jsfiddle",
+ label: "jsfiddle",
+ },
+ {
+ value: "fas fa-kaaba",
+ label: "kaaba",
+ },
+ {
+ value: "fab fa-kaggle",
+ label: "kaggle",
+ },
+ {
+ value: "fas fa-key",
+ label: "key",
+ },
+ {
+ value: "fab fa-keybase",
+ label: "keybase",
+ },
+ {
+ value: "fas fa-keyboard",
+ label: "keyboard",
+ },
+ {
+ value: "far fa-keyboard",
+ label: "keyboard",
+ },
+ {
+ value: "fab fa-keycdn",
+ label: "keycdn",
+ },
+ {
+ value: "fas fa-khanda",
+ label: "khanda",
+ },
+ {
+ value: "fab fa-kickstarter",
+ label: "kickstarter",
+ },
+ {
+ value: "fab fa-kickstarter-k",
+ label: "kickstarter-k",
+ },
+ {
+ value: "fas fa-kiss",
+ label: "kiss",
+ },
+ {
+ value: "far fa-kiss",
+ label: "kiss",
+ },
+ {
+ value: "fas fa-kiss-beam",
+ label: "kiss-beam",
+ },
+ {
+ value: "far fa-kiss-beam",
+ label: "kiss-beam",
+ },
+ {
+ value: "fas fa-kiss-wink-heart",
+ label: "kiss-wink-heart",
+ },
+ {
+ value: "far fa-kiss-wink-heart",
+ label: "kiss-wink-heart",
+ },
+ {
+ value: "fas fa-kiwi-bird",
+ label: "kiwi-bird",
+ },
+ {
+ value: "fab fa-korvue",
+ label: "korvue",
+ },
+ {
+ value: "fas fa-landmark",
+ label: "landmark",
+ },
+ {
+ value: "fas fa-language",
+ label: "language",
+ },
+ {
+ value: "fas fa-laptop",
+ label: "laptop",
+ },
+ {
+ value: "fas fa-laptop-code",
+ label: "laptop-code",
+ },
+ {
+ value: "fas fa-laptop-house",
+ label: "laptop-house",
+ },
+ {
+ value: "fas fa-laptop-medical",
+ label: "laptop-medical",
+ },
+ {
+ value: "fab fa-laravel",
+ label: "laravel",
+ },
+ {
+ value: "fab fa-lastfm",
+ label: "lastfm",
+ },
+ {
+ value: "fab fa-lastfm-square",
+ label: "lastfm-square",
+ },
+ {
+ value: "fas fa-laugh",
+ label: "laugh",
+ },
+ {
+ value: "far fa-laugh",
+ label: "laugh",
+ },
+ {
+ value: "fas fa-laugh-beam",
+ label: "laugh-beam",
+ },
+ {
+ value: "far fa-laugh-beam",
+ label: "laugh-beam",
+ },
+ {
+ value: "fas fa-laugh-squint",
+ label: "laugh-squint",
+ },
+ {
+ value: "far fa-laugh-squint",
+ label: "laugh-squint",
+ },
+ {
+ value: "fas fa-laugh-wink",
+ label: "laugh-wink",
+ },
+ {
+ value: "far fa-laugh-wink",
+ label: "laugh-wink",
+ },
+ {
+ value: "fas fa-layer-group",
+ label: "layer-group",
+ },
+ {
+ value: "fas fa-leaf",
+ label: "leaf",
+ },
+ {
+ value: "fab fa-leanpub",
+ label: "leanpub",
+ },
+ {
+ value: "fas fa-lemon",
+ label: "lemon",
+ },
+ {
+ value: "far fa-lemon",
+ label: "lemon",
+ },
+ {
+ value: "fab fa-less",
+ label: "less",
+ },
+ {
+ value: "fas fa-less-than",
+ label: "less-than",
+ },
+ {
+ value: "fas fa-less-than-equal",
+ label: "less-than-equal",
+ },
+ {
+ value: "fas fa-level-down-alt",
+ label: "level-down-alt",
+ },
+ {
+ value: "fas fa-level-up-alt",
+ label: "level-up-alt",
+ },
+ {
+ value: "fas fa-life-ring",
+ label: "life-ring",
+ },
+ {
+ value: "far fa-life-ring",
+ label: "life-ring",
+ },
+ {
+ value: "fas fa-lightbulb",
+ label: "lightbulb",
+ },
+ {
+ value: "far fa-lightbulb",
+ label: "lightbulb",
+ },
+ {
+ value: "fab fa-line",
+ label: "line",
+ },
+ {
+ value: "fas fa-link",
+ label: "link",
+ },
+ {
+ value: "fab fa-linkedin",
+ label: "linkedin",
+ },
+ {
+ value: "fab fa-linkedin-in",
+ label: "linkedin-in",
+ },
+ {
+ value: "fab fa-linode",
+ label: "linode",
+ },
+ {
+ value: "fab fa-linux",
+ label: "linux",
+ },
+ {
+ value: "fas fa-lira-sign",
+ label: "lira-sign",
+ },
+ {
+ value: "fas fa-list",
+ label: "list",
+ },
+ {
+ value: "fas fa-list-alt",
+ label: "list-alt",
+ },
+ {
+ value: "far fa-list-alt",
+ label: "list-alt",
+ },
+ {
+ value: "fas fa-list-ol",
+ label: "list-ol",
+ },
+ {
+ value: "fas fa-list-ul",
+ label: "list-ul",
+ },
+ {
+ value: "fas fa-location-arrow",
+ label: "location-arrow",
+ },
+ {
+ value: "fas fa-lock",
+ label: "lock",
+ },
+ {
+ value: "fas fa-lock-open",
+ label: "lock-open",
+ },
+ {
+ value: "fas fa-long-arrow-alt-down",
+ label: "long-arrow-alt-down",
+ },
+ {
+ value: "fas fa-long-arrow-alt-left",
+ label: "long-arrow-alt-left",
+ },
+ {
+ value: "fas fa-long-arrow-alt-right",
+ label: "long-arrow-alt-right",
+ },
+ {
+ value: "fas fa-long-arrow-alt-up",
+ label: "long-arrow-alt-up",
+ },
+ {
+ value: "fas fa-low-vision",
+ label: "low-vision",
+ },
+ {
+ value: "fas fa-luggage-cart",
+ label: "luggage-cart",
+ },
+ {
+ value: "fas fa-lungs",
+ label: "lungs",
+ },
+ {
+ value: "fas fa-lungs-virus",
+ label: "lungs-virus",
+ },
+ {
+ value: "fab fa-lyft",
+ label: "lyft",
+ },
+ {
+ value: "fab fa-magento",
+ label: "magento",
+ },
+ {
+ value: "fas fa-magic",
+ label: "magic",
+ },
+ {
+ value: "fas fa-magnet",
+ label: "magnet",
+ },
+ {
+ value: "fas fa-mail-bulk",
+ label: "mail-bulk",
+ },
+ {
+ value: "",
+ label: "",
+ },
+ {
+ value: "fab fa-mailchimp",
+ label: "mailchimp",
+ },
+ {
+ value: "fas fa-male",
+ label: "male",
+ },
+ {
+ value: "fab fa-mandalorian",
+ label: "mandalorian",
+ },
+ {
+ value: "fas fa-map",
+ label: "map",
+ },
+ {
+ value: "far fa-map",
+ label: "map",
+ },
+ {
+ value: "fas fa-map-marked",
+ label: "map-marked",
+ },
+ {
+ value: "fas fa-map-marked-alt",
+ label: "map-marked-alt",
+ },
+ {
+ value: "fas fa-map-marker",
+ label: "map-marker",
+ },
+ {
+ value: "fas fa-map-marker-alt",
+ label: "map-marker-alt",
+ },
+ {
+ value: "fas fa-map-pin",
+ label: "map-pin",
+ },
+ {
+ value: "fas fa-map-signs",
+ label: "map-signs",
+ },
+ {
+ value: "fab fa-markdown",
+ label: "markdown",
+ },
+ {
+ value: "fas fa-marker",
+ label: "marker",
+ },
+ {
+ value: "fas fa-mars",
+ label: "mars",
+ },
+ {
+ value: "fas fa-mars-double",
+ label: "mars-double",
+ },
+ {
+ value: "fas fa-mars-stroke",
+ label: "mars-stroke",
+ },
+ {
+ value: "fas fa-mars-stroke-h",
+ label: "mars-stroke-h",
+ },
+ {
+ value: "fas fa-mars-stroke-v",
+ label: "mars-stroke-v",
+ },
+ {
+ value: "fas fa-mask",
+ label: "mask",
+ },
+ {
+ value: "fab fa-mastodon",
+ label: "mastodon",
+ },
+ {
+ value: "fab fa-maxcdn",
+ label: "maxcdn",
+ },
+ {
+ value: "fab fa-mdb",
+ label: "mdb",
+ },
+ {
+ value: "fas fa-medal",
+ label: "medal",
+ },
+ {
+ value: "fab fa-medapps",
+ label: "medapps",
+ },
+ {
+ value: "fab fa-medium",
+ label: "medium",
+ },
+ {
+ value: "fab fa-medium-m",
+ label: "medium-m",
+ },
+ {
+ value: "fas fa-medkit",
+ label: "medkit",
+ },
+ {
+ value: "fab fa-medrt",
+ label: "medrt",
+ },
+ {
+ value: "fab fa-meetup",
+ label: "meetup",
+ },
+ {
+ value: "fab fa-megaport",
+ label: "megaport",
+ },
+ {
+ value: "fas fa-meh",
+ label: "meh",
+ },
+ {
+ value: "far fa-meh",
+ label: "meh",
+ },
+ {
+ value: "fas fa-meh-blank",
+ label: "meh-blank",
+ },
+ {
+ value: "far fa-meh-blank",
+ label: "meh-blank",
+ },
+ {
+ value: "fas fa-meh-rolling-eyes",
+ label: "meh-rolling-eyes",
+ },
+ {
+ value: "far fa-meh-rolling-eyes",
+ label: "meh-rolling-eyes",
+ },
+ {
+ value: "fas fa-memory",
+ label: "memory",
+ },
+ {
+ value: "fab fa-mendeley",
+ label: "mendeley",
+ },
+ {
+ value: "fas fa-menorah",
+ label: "menorah",
+ },
+ {
+ value: "fas fa-mercury",
+ label: "mercury",
+ },
+ {
+ value: "fas fa-meteor",
+ label: "meteor",
+ },
+ {
+ value: "fab fa-microblog",
+ label: "microblog",
+ },
+ {
+ value: "fas fa-microchip",
+ label: "microchip",
+ },
+ {
+ value: "fas fa-microphone",
+ label: "microphone",
+ },
+ {
+ value: "fas fa-microphone-alt",
+ label: "microphone-alt",
+ },
+ {
+ value: "fas fa-microphone-alt-slash",
+ label: "microphone-alt-slash",
+ },
+ {
+ value: "fas fa-microphone-slash",
+ label: "microphone-slash",
+ },
+ {
+ value: "fas fa-microscope",
+ label: "microscope",
+ },
+ {
+ value: "fab fa-microsoft",
+ label: "microsoft",
+ },
+ {
+ value: "fas fa-minus",
+ label: "minus",
+ },
+ {
+ value: "fas fa-minus-circle",
+ label: "minus-circle",
+ },
+ {
+ value: "fas fa-minus-square",
+ label: "minus-square",
+ },
+ {
+ value: "far fa-minus-square",
+ label: "minus-square",
+ },
+ {
+ value: "fas fa-mitten",
+ label: "mitten",
+ },
+ {
+ value: "fab fa-mix",
+ label: "mix",
+ },
+ {
+ value: "fab fa-mixcloud",
+ label: "mixcloud",
+ },
+ {
+ value: "fab fa-mixer",
+ label: "mixer",
+ },
+ {
+ value: "fab fa-mizuni",
+ label: "mizuni",
+ },
+ {
+ value: "fas fa-mobile",
+ label: "mobile",
+ },
+ {
+ value: "fas fa-mobile-alt",
+ label: "mobile-alt",
+ },
+ {
+ value: "fab fa-modx",
+ label: "modx",
+ },
+ {
+ value: "fab fa-monero",
+ label: "monero",
+ },
+ {
+ value: "fas fa-money-bill",
+ label: "money-bill",
+ },
+ {
+ value: "fas fa-money-bill-alt",
+ label: "money-bill-alt",
+ },
+ {
+ value: "far fa-money-bill-alt",
+ label: "money-bill-alt",
+ },
+ {
+ value: "fas fa-money-bill-wave",
+ label: "money-bill-wave",
+ },
+ {
+ value: "fas fa-money-bill-wave-alt",
+ label: "money-bill-wave-alt",
+ },
+ {
+ value: "fas fa-money-check",
+ label: "money-check",
+ },
+ {
+ value: "fas fa-money-check-alt",
+ label: "money-check-alt",
+ },
+ {
+ value: "fas fa-monument",
+ label: "monument",
+ },
+ {
+ value: "fas fa-moon",
+ label: "moon",
+ },
+ {
+ value: "far fa-moon",
+ label: "moon",
+ },
+ {
+ value: "fas fa-mortar-pestle",
+ label: "mortar-pestle",
+ },
+ {
+ value: "fas fa-mosque",
+ label: "mosque",
+ },
+ {
+ value: "fas fa-motorcycle",
+ label: "motorcycle",
+ },
+ {
+ value: "fas fa-mountain",
+ label: "mountain",
+ },
+ {
+ value: "fas fa-mouse",
+ label: "mouse",
+ },
+ {
+ value: "fas fa-mouse-pointer",
+ label: "mouse-pointer",
+ },
+ {
+ value: "fas fa-mug-hot",
+ label: "mug-hot",
+ },
+ {
+ value: "fas fa-music",
+ label: "music",
+ },
+ {
+ value: "fab fa-napster",
+ label: "napster",
+ },
+ {
+ value: "fab fa-neos",
+ label: "neos",
+ },
+ {
+ value: "fas fa-network-wired",
+ label: "network-wired",
+ },
+ {
+ value: "fas fa-neuter",
+ label: "neuter",
+ },
+ {
+ value: "fas fa-newspaper",
+ label: "newspaper",
+ },
+ {
+ value: "far fa-newspaper",
+ label: "newspaper",
+ },
+ {
+ value: "fab fa-nimblr",
+ label: "nimblr",
+ },
+ {
+ value: "fab fa-node",
+ label: "node",
+ },
+ {
+ value: "fab fa-node-js",
+ label: "node-js",
+ },
+ {
+ value: "fas fa-not-equal",
+ label: "not-equal",
+ },
+ {
+ value: "fas fa-notes-medical",
+ label: "notes-medical",
+ },
+ {
+ value: "fab fa-npm",
+ label: "npm",
+ },
+ {
+ value: "fab fa-ns8",
+ label: "ns8",
+ },
+ {
+ value: "fab fa-nutritionix",
+ label: "nutritionix",
+ },
+ {
+ value: "fas fa-object-group",
+ label: "object-group",
+ },
+ {
+ value: "far fa-object-group",
+ label: "object-group",
+ },
+ {
+ value: "fas fa-object-ungroup",
+ label: "object-ungroup",
+ },
+ {
+ value: "far fa-object-ungroup",
+ label: "object-ungroup",
+ },
+ {
+ value: "fab fa-odnoklassniki",
+ label: "odnoklassniki",
+ },
+ {
+ value: "fab fa-odnoklassniki-square",
+ label: "odnoklassniki-square",
+ },
+ {
+ value: "",
+ label: "",
+ },
+ {
+ value: "fas fa-oil-can",
+ label: "oil-can",
+ },
+ {
+ value: "fab fa-old-republic",
+ label: "old-republic",
+ },
+ {
+ value: "fas fa-om",
+ label: "om",
+ },
+ {
+ value: "fab fa-opencart",
+ label: "opencart",
+ },
+ {
+ value: "fab fa-openid",
+ label: "openid",
+ },
+ {
+ value: "fab fa-opera",
+ label: "opera",
+ },
+ {
+ value: "fab fa-optin-monster",
+ label: "optin-monster",
+ },
+ {
+ value: "fab fa-orcid",
+ label: "orcid",
+ },
+ {
+ value: "fab fa-osi",
+ label: "osi",
+ },
+ {
+ value: "fas fa-otter",
+ label: "otter",
+ },
+ {
+ value: "fas fa-outdent",
+ label: "outdent",
+ },
+ {
+ value: "fab fa-page4",
+ label: "page4",
+ },
+ {
+ value: "fab fa-pagelines",
+ label: "pagelines",
+ },
+ {
+ value: "fas fa-pager",
+ label: "pager",
+ },
+ {
+ value: "fas fa-paint-brush",
+ label: "paint-brush",
+ },
+ {
+ value: "fas fa-paint-roller",
+ label: "paint-roller",
+ },
+ {
+ value: "fas fa-palette",
+ label: "palette",
+ },
+ {
+ value: "fab fa-palfed",
+ label: "palfed",
+ },
+ {
+ value: "fas fa-pallet",
+ label: "pallet",
+ },
+ {
+ value: "fas fa-paper-plane",
+ label: "paper-plane",
+ },
+ {
+ value: "far fa-paper-plane",
+ label: "paper-plane",
+ },
+ {
+ value: "fas fa-paperclip",
+ label: "paperclip",
+ },
+ {
+ value: "fas fa-parachute-box",
+ label: "parachute-box",
+ },
+ {
+ value: "fas fa-paragraph",
+ label: "paragraph",
+ },
+ {
+ value: "fas fa-parking",
+ label: "parking",
+ },
+ {
+ value: "fas fa-passport",
+ label: "passport",
+ },
+ {
+ value: "fas fa-pastafarianism",
+ label: "pastafarianism",
+ },
+ {
+ value: "fas fa-paste",
+ label: "paste",
+ },
+ {
+ value: "fab fa-patreon",
+ label: "patreon",
+ },
+ {
+ value: "fas fa-pause",
+ label: "pause",
+ },
+ {
+ value: "fas fa-pause-circle",
+ label: "pause-circle",
+ },
+ {
+ value: "far fa-pause-circle",
+ label: "pause-circle",
+ },
+ {
+ value: "fas fa-paw",
+ label: "paw",
+ },
+ {
+ value: "fab fa-paypal",
+ label: "paypal",
+ },
+ {
+ value: "fas fa-peace",
+ label: "peace",
+ },
+ {
+ value: "fas fa-pen",
+ label: "pen",
+ },
+ {
+ value: "fas fa-pen-alt",
+ label: "pen-alt",
+ },
+ {
+ value: "fas fa-pen-fancy",
+ label: "pen-fancy",
+ },
+ {
+ value: "fas fa-pen-nib",
+ label: "pen-nib",
+ },
+ {
+ value: "fas fa-pen-square",
+ label: "pen-square",
+ },
+ {
+ value: "fas fa-pencil-alt",
+ label: "pencil-alt",
+ },
+ {
+ value: "fas fa-pencil-ruler",
+ label: "pencil-ruler",
+ },
+ {
+ value: "fab fa-penny-arcade",
+ label: "penny-arcade",
+ },
+ {
+ value: "fas fa-people-arrows",
+ label: "people-arrows",
+ },
+ {
+ value: "fas fa-people-carry",
+ label: "people-carry",
+ },
+ {
+ value: "fas fa-pepper-hot",
+ label: "pepper-hot",
+ },
+ {
+ value: "fas fa-percent",
+ label: "percent",
+ },
+ {
+ value: "fas fa-percentage",
+ label: "percentage",
+ },
+ {
+ value: "fab fa-periscope",
+ label: "periscope",
+ },
+ {
+ value: "fas fa-person-booth",
+ label: "person-booth",
+ },
+ {
+ value: "fab fa-phabricator",
+ label: "phabricator",
+ },
+ {
+ value: "fab fa-phoenix-framework",
+ label: "phoenix-framework",
+ },
+ {
+ value: "fab fa-phoenix-squadron",
+ label: "phoenix-squadron",
+ },
+ {
+ value: "fas fa-phone",
+ label: "phone",
+ },
+ {
+ value: "fas fa-phone-alt",
+ label: "phone-alt",
+ },
+ {
+ value: "fas fa-phone-slash",
+ label: "phone-slash",
+ },
+ {
+ value: "fas fa-phone-square",
+ label: "phone-square",
+ },
+ {
+ value: "fas fa-phone-square-alt",
+ label: "phone-square-alt",
+ },
+ {
+ value: "fas fa-phone-volume",
+ label: "phone-volume",
+ },
+ {
+ value: "fas fa-photo-video",
+ label: "photo-video",
+ },
+ {
+ value: "fab fa-php",
+ label: "php",
+ },
+ {
+ value: "fab fa-pied-piper",
+ label: "pied-piper",
+ },
+ {
+ value: "fab fa-pied-piper-alt",
+ label: "pied-piper-alt",
+ },
+ {
+ value: "fab fa-pied-piper-hat",
+ label: "pied-piper-hat",
+ },
+ {
+ value: "fab fa-pied-piper-pp",
+ label: "pied-piper-pp",
+ },
+ {
+ value: "fab fa-pied-piper-square",
+ label: "pied-piper-square",
+ },
+ {
+ value: "fas fa-piggy-bank",
+ label: "piggy-bank",
+ },
+ {
+ value: "fas fa-pills",
+ label: "pills",
+ },
+ {
+ value: "fab fa-pinterest",
+ label: "pinterest",
+ },
+ {
+ value: "fab fa-pinterest-p",
+ label: "pinterest-p",
+ },
+ {
+ value: "fab fa-pinterest-square",
+ label: "pinterest-square",
+ },
+ {
+ value: "fas fa-pizza-slice",
+ label: "pizza-slice",
+ },
+ {
+ value: "fas fa-place-of-worship",
+ label: "place-of-worship",
+ },
+ {
+ value: "fas fa-plane",
+ label: "plane",
+ },
+ {
+ value: "fas fa-plane-arrival",
+ label: "plane-arrival",
+ },
+ {
+ value: "fas fa-plane-departure",
+ label: "plane-departure",
+ },
+ {
+ value: "fas fa-plane-slash",
+ label: "plane-slash",
+ },
+ {
+ value: "fas fa-play",
+ label: "play",
+ },
+ {
+ value: "fas fa-play-circle",
+ label: "play-circle",
+ },
+ {
+ value: "far fa-play-circle",
+ label: "play-circle",
+ },
+ {
+ value: "fab fa-playstation",
+ label: "playstation",
+ },
+ {
+ value: "fas fa-plug",
+ label: "plug",
+ },
+ {
+ value: "fas fa-plus",
+ label: "plus",
+ },
+ {
+ value: "fas fa-plus-circle",
+ label: "plus-circle",
+ },
+ {
+ value: "fas fa-plus-square",
+ label: "plus-square",
+ },
+ {
+ value: "far fa-plus-square",
+ label: "plus-square",
+ },
+ {
+ value: "fas fa-podcast",
+ label: "podcast",
+ },
+ {
+ value: "fas fa-poll",
+ label: "poll",
+ },
+ {
+ value: "fas fa-poll-h",
+ label: "poll-h",
+ },
+ {
+ value: "fas fa-poo",
+ label: "poo",
+ },
+ {
+ value: "fas fa-poo-storm",
+ label: "poo-storm",
+ },
+ {
+ value: "fas fa-poop",
+ label: "poop",
+ },
+ {
+ value: "fas fa-portrait",
+ label: "portrait",
+ },
+ {
+ value: "fas fa-pound-sign",
+ label: "pound-sign",
+ },
+ {
+ value: "fas fa-power-off",
+ label: "power-off",
+ },
+ {
+ value: "fas fa-pray",
+ label: "pray",
+ },
+ {
+ value: "fas fa-praying-hands",
+ label: "praying-hands",
+ },
+ {
+ value: "fas fa-prescription",
+ label: "prescription",
+ },
+ {
+ value: "fas fa-prescription-bottle",
+ label: "prescription-bottle",
+ },
+ {
+ value: "fas fa-prescription-bottle-alt",
+ label: "prescription-bottle-alt",
+ },
+ {
+ value: "",
+ label: "",
+ },
+ {
+ value: "fas fa-print",
+ label: "print",
+ },
+ {
+ value: "fas fa-procedures",
+ label: "procedures",
+ },
+ {
+ value: "fab fa-product-hunt",
+ label: "product-hunt",
+ },
+ {
+ value: "fas fa-project-diagram",
+ label: "project-diagram",
+ },
+ {
+ value: "fas fa-pump-medical",
+ label: "pump-medical",
+ },
+ {
+ value: "fas fa-pump-soap",
+ label: "pump-soap",
+ },
+ {
+ value: "fab fa-pushed",
+ label: "pushed",
+ },
+ {
+ value: "fas fa-puzzle-piece",
+ label: "puzzle-piece",
+ },
+ {
+ value: "fab fa-python",
+ label: "python",
+ },
+ {
+ value: "fab fa-qq",
+ label: "qq",
+ },
+ {
+ value: "fas fa-qrcode",
+ label: "qrcode",
+ },
+ {
+ value: "fas fa-question",
+ label: "question",
+ },
+ {
+ value: "fas fa-question-circle",
+ label: "question-circle",
+ },
+ {
+ value: "far fa-question-circle",
+ label: "question-circle",
+ },
+ {
+ value: "fas fa-quidditch",
+ label: "quidditch",
+ },
+ {
+ value: "fab fa-quinscape",
+ label: "quinscape",
+ },
+ {
+ value: "fab fa-quora",
+ label: "quora",
+ },
+ {
+ value: "fas fa-quote-left",
+ label: "quote-left",
+ },
+ {
+ value: "fas fa-quote-right",
+ label: "quote-right",
+ },
+ {
+ value: "fas fa-quran",
+ label: "quran",
+ },
+ {
+ value: "fab fa-r-project",
+ label: "r-project",
+ },
+ {
+ value: "fas fa-radiation",
+ label: "radiation",
+ },
+ {
+ value: "fas fa-radiation-alt",
+ label: "radiation-alt",
+ },
+ {
+ value: "fas fa-rainbow",
+ label: "rainbow",
+ },
+ {
+ value: "fas fa-random",
+ label: "random",
+ },
+ {
+ value: "fab fa-raspberry-pi",
+ label: "raspberry-pi",
+ },
+ {
+ value: "fab fa-ravelry",
+ label: "ravelry",
+ },
+ {
+ value: "fab fa-react",
+ label: "react",
+ },
+ {
+ value: "fab fa-reacteurope",
+ label: "reacteurope",
+ },
+ {
+ value: "fab fa-readme",
+ label: "readme",
+ },
+ {
+ value: "fab fa-rebel",
+ label: "rebel",
+ },
+ {
+ value: "fas fa-receipt",
+ label: "receipt",
+ },
+ {
+ value: "fas fa-record-vinyl",
+ label: "record-vinyl",
+ },
+ {
+ value: "fas fa-recycle",
+ label: "recycle",
+ },
+ {
+ value: "fab fa-red-river",
+ label: "red-river",
+ },
+ {
+ value: "fab fa-reddit",
+ label: "reddit",
+ },
+ {
+ value: "fab fa-reddit-alien",
+ label: "reddit-alien",
+ },
+ {
+ value: "fab fa-reddit-square",
+ label: "reddit-square",
+ },
+ {
+ value: "fab fa-redhat",
+ label: "redhat",
+ },
+ {
+ value: "fas fa-redo",
+ label: "redo",
+ },
+ {
+ value: "fas fa-redo-alt",
+ label: "redo-alt",
+ },
+ {
+ value: "fas fa-registered",
+ label: "registered",
+ },
+ {
+ value: "far fa-registered",
+ label: "registered",
+ },
+ {
+ value: "fas fa-remove-format",
+ label: "remove-format",
+ },
+ {
+ value: "fab fa-renren",
+ label: "renren",
+ },
+ {
+ value: "fas fa-reply",
+ label: "reply",
+ },
+ {
+ value: "fas fa-reply-all",
+ label: "reply-all",
+ },
+ {
+ value: "fab fa-replyd",
+ label: "replyd",
+ },
+ {
+ value: "fas fa-republican",
+ label: "republican",
+ },
+ {
+ value: "fab fa-researchgate",
+ label: "researchgate",
+ },
+ {
+ value: "fab fa-resolving",
+ label: "resolving",
+ },
+ {
+ value: "fas fa-restroom",
+ label: "restroom",
+ },
+ {
+ value: "fas fa-retweet",
+ label: "retweet",
+ },
+ {
+ value: "fab fa-rev",
+ label: "rev",
+ },
+ {
+ value: "fas fa-ribbon",
+ label: "ribbon",
+ },
+ {
+ value: "fas fa-ring",
+ label: "ring",
+ },
+ {
+ value: "fas fa-road",
+ label: "road",
+ },
+ {
+ value: "fas fa-robot",
+ label: "robot",
+ },
+ {
+ value: "fas fa-rocket",
+ label: "rocket",
+ },
+ {
+ value: "fab fa-rocketchat",
+ label: "rocketchat",
+ },
+ {
+ value: "fab fa-rockrms",
+ label: "rockrms",
+ },
+ {
+ value: "fas fa-route",
+ label: "route",
+ },
+ {
+ value: "fas fa-rss",
+ label: "rss",
+ },
+ {
+ value: "fas fa-rss-square",
+ label: "rss-square",
+ },
+ {
+ value: "fas fa-ruble-sign",
+ label: "ruble-sign",
+ },
+ {
+ value: "fas fa-ruler",
+ label: "ruler",
+ },
+ {
+ value: "fas fa-ruler-combined",
+ label: "ruler-combined",
+ },
+ {
+ value: "fas fa-ruler-horizontal",
+ label: "ruler-horizontal",
+ },
+ {
+ value: "fas fa-ruler-vertical",
+ label: "ruler-vertical",
+ },
+ {
+ value: "fas fa-running",
+ label: "running",
+ },
+ {
+ value: "fas fa-rupee-sign",
+ label: "rupee-sign",
+ },
+ {
+ value: "fab fa-rust",
+ label: "rust",
+ },
+ {
+ value: "fas fa-sad-cry",
+ label: "sad-cry",
+ },
+ {
+ value: "far fa-sad-cry",
+ label: "sad-cry",
+ },
+ {
+ value: "fas fa-sad-tear",
+ label: "sad-tear",
+ },
+ {
+ value: "far fa-sad-tear",
+ label: "sad-tear",
+ },
+ {
+ value: "fab fa-safari",
+ label: "safari",
+ },
+ {
+ value: "fab fa-salesforce",
+ label: "salesforce",
+ },
+ {
+ value: "fab fa-sass",
+ label: "sass",
+ },
+ {
+ value: "fas fa-satellite",
+ label: "satellite",
+ },
+ {
+ value: "fas fa-satellite-dish",
+ label: "satellite-dish",
+ },
+ {
+ value: "fas fa-save",
+ label: "save",
+ },
+ {
+ value: "far fa-save",
+ label: "save",
+ },
+ {
+ value: "fab fa-schlix",
+ label: "schlix",
+ },
+ {
+ value: "fas fa-school",
+ label: "school",
+ },
+ {
+ value: "fas fa-screwdriver",
+ label: "screwdriver",
+ },
+ {
+ value: "fab fa-scribd",
+ label: "scribd",
+ },
+ {
+ value: "fas fa-scroll",
+ label: "scroll",
+ },
+ {
+ value: "fas fa-sd-card",
+ label: "sd-card",
+ },
+ {
+ value: "fas fa-search",
+ label: "search",
+ },
+ {
+ value: "fas fa-search-dollar",
+ label: "search-dollar",
+ },
+ {
+ value: "fas fa-search-location",
+ label: "search-location",
+ },
+ {
+ value: "fas fa-search-minus",
+ label: "search-minus",
+ },
+ {
+ value: "fas fa-search-plus",
+ label: "search-plus",
+ },
+ {
+ value: "fab fa-searchengin",
+ label: "searchengin",
+ },
+ {
+ value: "fas fa-seedling",
+ label: "seedling",
+ },
+ {
+ value: "fab fa-sellcast",
+ label: "sellcast",
+ },
+ {
+ value: "fab fa-sellsy",
+ label: "sellsy",
+ },
+ {
+ value: "fas fa-server",
+ label: "server",
+ },
+ {
+ value: "fab fa-servicestack",
+ label: "servicestack",
+ },
+ {
+ value: "",
+ label: "",
+ },
+ {
+ value: "fas fa-shapes",
+ label: "shapes",
+ },
+ {
+ value: "fas fa-share",
+ label: "share",
+ },
+ {
+ value: "fas fa-share-alt",
+ label: "share-alt",
+ },
+ {
+ value: "fas fa-share-alt-square",
+ label: "share-alt-square",
+ },
+ {
+ value: "fas fa-share-square",
+ label: "share-square",
+ },
+ {
+ value: "far fa-share-square",
+ label: "share-square",
+ },
+ {
+ value: "fas fa-shekel-sign",
+ label: "shekel-sign",
+ },
+ {
+ value: "fas fa-shield-alt",
+ label: "shield-alt",
+ },
+ {
+ value: "fas fa-shield-virus",
+ label: "shield-virus",
+ },
+ {
+ value: "fas fa-ship",
+ label: "ship",
+ },
+ {
+ value: "fas fa-shipping-fast",
+ label: "shipping-fast",
+ },
+ {
+ value: "fab fa-shirtsinbulk",
+ label: "shirtsinbulk",
+ },
+ {
+ value: "fas fa-shoe-prints",
+ label: "shoe-prints",
+ },
+ {
+ value: "fab fa-shopify",
+ label: "shopify",
+ },
+ {
+ value: "fas fa-shopping-bag",
+ label: "shopping-bag",
+ },
+ {
+ value: "fas fa-shopping-basket",
+ label: "shopping-basket",
+ },
+ {
+ value: "fas fa-shopping-cart",
+ label: "shopping-cart",
+ },
+ {
+ value: "fab fa-shopware",
+ label: "shopware",
+ },
+ {
+ value: "fas fa-shower",
+ label: "shower",
+ },
+ {
+ value: "fas fa-shuttle-van",
+ label: "shuttle-van",
+ },
+ {
+ value: "fas fa-sign",
+ label: "sign",
+ },
+ {
+ value: "fas fa-sign-in-alt",
+ label: "sign-in-alt",
+ },
+ {
+ value: "fas fa-sign-language",
+ label: "sign-language",
+ },
+ {
+ value: "fas fa-sign-out-alt",
+ label: "sign-out-alt",
+ },
+ {
+ value: "fas fa-signal",
+ label: "signal",
+ },
+ {
+ value: "fas fa-signature",
+ label: "signature",
+ },
+ {
+ value: "fas fa-sim-card",
+ label: "sim-card",
+ },
+ {
+ value: "fab fa-simplybuilt",
+ label: "simplybuilt",
+ },
+ {
+ value: "fas fa-sink",
+ label: "sink",
+ },
+ {
+ value: "fab fa-sistrix",
+ label: "sistrix",
+ },
+ {
+ value: "fas fa-sitemap",
+ label: "sitemap",
+ },
+ {
+ value: "fab fa-sith",
+ label: "sith",
+ },
+ {
+ value: "fas fa-skating",
+ label: "skating",
+ },
+ {
+ value: "fab fa-sketch",
+ label: "sketch",
+ },
+ {
+ value: "fas fa-skiing",
+ label: "skiing",
+ },
+ {
+ value: "fas fa-skiing-nordic",
+ label: "skiing-nordic",
+ },
+ {
+ value: "fas fa-skull",
+ label: "skull",
+ },
+ {
+ value: "fas fa-skull-crossbones",
+ label: "skull-crossbones",
+ },
+ {
+ value: "fab fa-skyatlas",
+ label: "skyatlas",
+ },
+ {
+ value: "fab fa-skype",
+ label: "skype",
+ },
+ {
+ value: "fab fa-slack",
+ label: "slack",
+ },
+ {
+ value: "fab fa-slack-hash",
+ label: "slack-hash",
+ },
+ {
+ value: "fas fa-slash",
+ label: "slash",
+ },
+ {
+ value: "fas fa-sleigh",
+ label: "sleigh",
+ },
+ {
+ value: "fas fa-sliders-h",
+ label: "sliders-h",
+ },
+ {
+ value: "fab fa-slideshare",
+ label: "slideshare",
+ },
+ {
+ value: "fas fa-smile",
+ label: "smile",
+ },
+ {
+ value: "far fa-smile",
+ label: "smile",
+ },
+ {
+ value: "fas fa-smile-beam",
+ label: "smile-beam",
+ },
+ {
+ value: "far fa-smile-beam",
+ label: "smile-beam",
+ },
+ {
+ value: "fas fa-smile-wink",
+ label: "smile-wink",
+ },
+ {
+ value: "far fa-smile-wink",
+ label: "smile-wink",
+ },
+ {
+ value: "fas fa-smog",
+ label: "smog",
+ },
+ {
+ value: "fas fa-smoking",
+ label: "smoking",
+ },
+ {
+ value: "fas fa-smoking-ban",
+ label: "smoking-ban",
+ },
+ {
+ value: "fas fa-sms",
+ label: "sms",
+ },
+ {
+ value: "fab fa-snapchat",
+ label: "snapchat",
+ },
+ {
+ value: "fab fa-snapchat-ghost",
+ label: "snapchat-ghost",
+ },
+ {
+ value: "fab fa-snapchat-square",
+ label: "snapchat-square",
+ },
+ {
+ value: "fas fa-snowboarding",
+ label: "snowboarding",
+ },
+ {
+ value: "fas fa-snowflake",
+ label: "snowflake",
+ },
+ {
+ value: "far fa-snowflake",
+ label: "snowflake",
+ },
+ {
+ value: "fas fa-snowman",
+ label: "snowman",
+ },
+ {
+ value: "fas fa-snowplow",
+ label: "snowplow",
+ },
+ {
+ value: "fas fa-soap",
+ label: "soap",
+ },
+ {
+ value: "fas fa-socks",
+ label: "socks",
+ },
+ {
+ value: "fas fa-solar-panel",
+ label: "solar-panel",
+ },
+ {
+ value: "fas fa-sort",
+ label: "sort",
+ },
+ {
+ value: "fas fa-sort-alpha-down",
+ label: "sort-alpha-down",
+ },
+ {
+ value: "fas fa-sort-alpha-down-alt",
+ label: "sort-alpha-down-alt",
+ },
+ {
+ value: "fas fa-sort-alpha-up",
+ label: "sort-alpha-up",
+ },
+ {
+ value: "fas fa-sort-alpha-up-alt",
+ label: "sort-alpha-up-alt",
+ },
+ {
+ value: "fas fa-sort-amount-down",
+ label: "sort-amount-down",
+ },
+ {
+ value: "fas fa-sort-amount-down-alt",
+ label: "sort-amount-down-alt",
+ },
+ {
+ value: "fas fa-sort-amount-up",
+ label: "sort-amount-up",
+ },
+ {
+ value: "fas fa-sort-amount-up-alt",
+ label: "sort-amount-up-alt",
+ },
+ {
+ value: "fas fa-sort-down",
+ label: "sort-down",
+ },
+ {
+ value: "fas fa-sort-numeric-down",
+ label: "sort-numeric-down",
+ },
+ {
+ value: "fas fa-sort-numeric-down-alt",
+ label: "sort-numeric-down-alt",
+ },
+ {
+ value: "fas fa-sort-numeric-up",
+ label: "sort-numeric-up",
+ },
+ {
+ value: "fas fa-sort-numeric-up-alt",
+ label: "sort-numeric-up-alt",
+ },
+ {
+ value: "fas fa-sort-up",
+ label: "sort-up",
+ },
+ {
+ value: "fab fa-soundcloud",
+ label: "soundcloud",
+ },
+ {
+ value: "fab fa-sourcetree",
+ label: "sourcetree",
+ },
+ {
+ value: "fas fa-spa",
+ label: "spa",
+ },
+ {
+ value: "fas fa-space-shuttle",
+ label: "space-shuttle",
+ },
+ {
+ value: "fab fa-speakap",
+ label: "speakap",
+ },
+ {
+ value: "fab fa-speaker-deck",
+ label: "speaker-deck",
+ },
+ {
+ value: "fas fa-spell-check",
+ label: "spell-check",
+ },
+ {
+ value: "fas fa-spider",
+ label: "spider",
+ },
+ {
+ value: "fas fa-spinner",
+ label: "spinner",
+ },
+ {
+ value: "fas fa-splotch",
+ label: "splotch",
+ },
+ {
+ value: "fab fa-spotify",
+ label: "spotify",
+ },
+ {
+ value: "fas fa-spray-can",
+ label: "spray-can",
+ },
+ {
+ value: "fas fa-square",
+ label: "square",
+ },
+ {
+ value: "far fa-square",
+ label: "square",
+ },
+ {
+ value: "fas fa-square-full",
+ label: "square-full",
+ },
+ {
+ value: "fas fa-square-root-alt",
+ label: "square-root-alt",
+ },
+ {
+ value: "fab fa-squarespace",
+ label: "squarespace",
+ },
+ {
+ value: "fab fa-stack-exchange",
+ label: "stack-exchange",
+ },
+ {
+ value: "",
+ label: "",
+ },
+ {
+ value: "fab fa-stack-overflow",
+ label: "stack-overflow",
+ },
+ {
+ value: "fab fa-stackpath",
+ label: "stackpath",
+ },
+ {
+ value: "fas fa-stamp",
+ label: "stamp",
+ },
+ {
+ value: "fas fa-star",
+ label: "star",
+ },
+ {
+ value: "far fa-star",
+ label: "star",
+ },
+ {
+ value: "fas fa-star-and-crescent",
+ label: "star-and-crescent",
+ },
+ {
+ value: "fas fa-star-half",
+ label: "star-half",
+ },
+ {
+ value: "far fa-star-half",
+ label: "star-half",
+ },
+ {
+ value: "fas fa-star-half-alt",
+ label: "star-half-alt",
+ },
+ {
+ value: "fas fa-star-of-david",
+ label: "star-of-david",
+ },
+ {
+ value: "fas fa-star-of-life",
+ label: "star-of-life",
+ },
+ {
+ value: "fab fa-staylinked",
+ label: "staylinked",
+ },
+ {
+ value: "fab fa-steam",
+ label: "steam",
+ },
+ {
+ value: "fab fa-steam-square",
+ label: "steam-square",
+ },
+ {
+ value: "fab fa-steam-symbol",
+ label: "steam-symbol",
+ },
+ {
+ value: "fas fa-step-backward",
+ label: "step-backward",
+ },
+ {
+ value: "fas fa-step-forward",
+ label: "step-forward",
+ },
+ {
+ value: "fas fa-stethoscope",
+ label: "stethoscope",
+ },
+ {
+ value: "fab fa-sticker-mule",
+ label: "sticker-mule",
+ },
+ {
+ value: "fas fa-sticky-note",
+ label: "sticky-note",
+ },
+ {
+ value: "far fa-sticky-note",
+ label: "sticky-note",
+ },
+ {
+ value: "fas fa-stop",
+ label: "stop",
+ },
+ {
+ value: "fas fa-stop-circle",
+ label: "stop-circle",
+ },
+ {
+ value: "far fa-stop-circle",
+ label: "stop-circle",
+ },
+ {
+ value: "fas fa-stopwatch",
+ label: "stopwatch",
+ },
+ {
+ value: "fas fa-stopwatch-20",
+ label: "stopwatch-20",
+ },
+ {
+ value: "fas fa-store",
+ label: "store",
+ },
+ {
+ value: "fas fa-store-alt",
+ label: "store-alt",
+ },
+ {
+ value: "fas fa-store-alt-slash",
+ label: "store-alt-slash",
+ },
+ {
+ value: "fas fa-store-slash",
+ label: "store-slash",
+ },
+ {
+ value: "fab fa-strava",
+ label: "strava",
+ },
+ {
+ value: "fas fa-stream",
+ label: "stream",
+ },
+ {
+ value: "fas fa-street-view",
+ label: "street-view",
+ },
+ {
+ value: "fas fa-strikethrough",
+ label: "strikethrough",
+ },
+ {
+ value: "fab fa-stripe",
+ label: "stripe",
+ },
+ {
+ value: "fab fa-stripe-s",
+ label: "stripe-s",
+ },
+ {
+ value: "fas fa-stroopwafel",
+ label: "stroopwafel",
+ },
+ {
+ value: "fab fa-studiovinari",
+ label: "studiovinari",
+ },
+ {
+ value: "fab fa-stumbleupon",
+ label: "stumbleupon",
+ },
+ {
+ value: "fab fa-stumbleupon-circle",
+ label: "stumbleupon-circle",
+ },
+ {
+ value: "fas fa-subscript",
+ label: "subscript",
+ },
+ {
+ value: "fas fa-subway",
+ label: "subway",
+ },
+ {
+ value: "fas fa-suitcase",
+ label: "suitcase",
+ },
+ {
+ value: "fas fa-suitcase-rolling",
+ label: "suitcase-rolling",
+ },
+ {
+ value: "fas fa-sun",
+ label: "sun",
+ },
+ {
+ value: "far fa-sun",
+ label: "sun",
+ },
+ {
+ value: "fab fa-superpowers",
+ label: "superpowers",
+ },
+ {
+ value: "fas fa-superscript",
+ label: "superscript",
+ },
+ {
+ value: "fab fa-supple",
+ label: "supple",
+ },
+ {
+ value: "fas fa-surprise",
+ label: "surprise",
+ },
+ {
+ value: "far fa-surprise",
+ label: "surprise",
+ },
+ {
+ value: "fab fa-suse",
+ label: "suse",
+ },
+ {
+ value: "fas fa-swatchbook",
+ label: "swatchbook",
+ },
+ {
+ value: "fab fa-swift",
+ label: "swift",
+ },
+ {
+ value: "fas fa-swimmer",
+ label: "swimmer",
+ },
+ {
+ value: "fas fa-swimming-pool",
+ label: "swimming-pool",
+ },
+ {
+ value: "fab fa-symfony",
+ label: "symfony",
+ },
+ {
+ value: "fas fa-synagogue",
+ label: "synagogue",
+ },
+ {
+ value: "fas fa-sync",
+ label: "sync",
+ },
+ {
+ value: "fas fa-sync-alt",
+ label: "sync-alt",
+ },
+ {
+ value: "fas fa-syringe",
+ label: "syringe",
+ },
+ {
+ value: "fas fa-table",
+ label: "table",
+ },
+ {
+ value: "fas fa-table-tennis",
+ label: "table-tennis",
+ },
+ {
+ value: "fas fa-tablet",
+ label: "tablet",
+ },
+ {
+ value: "fas fa-tablet-alt",
+ label: "tablet-alt",
+ },
+ {
+ value: "fas fa-tablets",
+ label: "tablets",
+ },
+ {
+ value: "fas fa-tachometer-alt",
+ label: "tachometer-alt",
+ },
+ {
+ value: "fas fa-tag",
+ label: "tag",
+ },
+ {
+ value: "fas fa-tags",
+ label: "tags",
+ },
+ {
+ value: "fas fa-tape",
+ label: "tape",
+ },
+ {
+ value: "fas fa-tasks",
+ label: "tasks",
+ },
+ {
+ value: "fas fa-taxi",
+ label: "taxi",
+ },
+ {
+ value: "fab fa-teamspeak",
+ label: "teamspeak",
+ },
+ {
+ value: "fas fa-teeth",
+ label: "teeth",
+ },
+ {
+ value: "fas fa-teeth-open",
+ label: "teeth-open",
+ },
+ {
+ value: "fab fa-telegram",
+ label: "telegram",
+ },
+ {
+ value: "fab fa-telegram-plane",
+ label: "telegram-plane",
+ },
+ {
+ value: "fas fa-temperature-high",
+ label: "temperature-high",
+ },
+ {
+ value: "fas fa-temperature-low",
+ label: "temperature-low",
+ },
+ {
+ value: "fab fa-tencent-weibo",
+ label: "tencent-weibo",
+ },
+ {
+ value: "fas fa-tenge",
+ label: "tenge",
+ },
+ {
+ value: "fas fa-terminal",
+ label: "terminal",
+ },
+ {
+ value: "fas fa-text-height",
+ label: "text-height",
+ },
+ {
+ value: "fas fa-text-width",
+ label: "text-width",
+ },
+ {
+ value: "fas fa-th",
+ label: "th",
+ },
+ {
+ value: "fas fa-th-large",
+ label: "th-large",
+ },
+ {
+ value: "fas fa-th-list",
+ label: "th-list",
+ },
+ {
+ value: "fab fa-the-red-yeti",
+ label: "the-red-yeti",
+ },
+ {
+ value: "fas fa-theater-masks",
+ label: "theater-masks",
+ },
+ {
+ value: "fab fa-themeco",
+ label: "themeco",
+ },
+ {
+ value: "fab fa-themeisle",
+ label: "themeisle",
+ },
+ {
+ value: "fas fa-thermometer",
+ label: "thermometer",
+ },
+ {
+ value: "fas fa-thermometer-empty",
+ label: "thermometer-empty",
+ },
+ {
+ value: "fas fa-thermometer-full",
+ label: "thermometer-full",
+ },
+ {
+ value: "fas fa-thermometer-half",
+ label: "thermometer-half",
+ },
+ {
+ value: "fas fa-thermometer-quarter",
+ label: "thermometer-quarter",
+ },
+ {
+ value: "fas fa-thermometer-three-quarters",
+ label: "thermometer-three-quarters",
+ },
+ {
+ value: "fab fa-think-peaks",
+ label: "think-peaks",
+ },
+ {
+ value: "fas fa-thumbs-down",
+ label: "thumbs-down",
+ },
+ {
+ value: "far fa-thumbs-down",
+ label: "thumbs-down",
+ },
+ {
+ value: "",
+ label: "",
+ },
+ {
+ value: "fas fa-thumbs-up",
+ label: "thumbs-up",
+ },
+ {
+ value: "far fa-thumbs-up",
+ label: "thumbs-up",
+ },
+ {
+ value: "fas fa-thumbtack",
+ label: "thumbtack",
+ },
+ {
+ value: "fas fa-ticket-alt",
+ label: "ticket-alt",
+ },
+ {
+ value: "fab fa-tiktok",
+ label: "tiktok",
+ },
+ {
+ value: "fas fa-times",
+ label: "times",
+ },
+ {
+ value: "fas fa-times-circle",
+ label: "times-circle",
+ },
+ {
+ value: "far fa-times-circle",
+ label: "times-circle",
+ },
+ {
+ value: "fas fa-tint",
+ label: "tint",
+ },
+ {
+ value: "fas fa-tint-slash",
+ label: "tint-slash",
+ },
+ {
+ value: "fas fa-tired",
+ label: "tired",
+ },
+ {
+ value: "far fa-tired",
+ label: "tired",
+ },
+ {
+ value: "fas fa-toggle-off",
+ label: "toggle-off",
+ },
+ {
+ value: "fas fa-toggle-on",
+ label: "toggle-on",
+ },
+ {
+ value: "fas fa-toilet",
+ label: "toilet",
+ },
+ {
+ value: "fas fa-toilet-paper",
+ label: "toilet-paper",
+ },
+ {
+ value: "fas fa-toilet-paper-slash",
+ label: "toilet-paper-slash",
+ },
+ {
+ value: "fas fa-toolbox",
+ label: "toolbox",
+ },
+ {
+ value: "fas fa-tools",
+ label: "tools",
+ },
+ {
+ value: "fas fa-tooth",
+ label: "tooth",
+ },
+ {
+ value: "fas fa-torah",
+ label: "torah",
+ },
+ {
+ value: "fas fa-torii-gate",
+ label: "torii-gate",
+ },
+ {
+ value: "fas fa-tractor",
+ label: "tractor",
+ },
+ {
+ value: "fab fa-trade-federation",
+ label: "trade-federation",
+ },
+ {
+ value: "fas fa-trademark",
+ label: "trademark",
+ },
+ {
+ value: "fas fa-traffic-light",
+ label: "traffic-light",
+ },
+ {
+ value: "fas fa-trailer",
+ label: "trailer",
+ },
+ {
+ value: "fas fa-train",
+ label: "train",
+ },
+ {
+ value: "fas fa-tram",
+ label: "tram",
+ },
+ {
+ value: "fas fa-transgender",
+ label: "transgender",
+ },
+ {
+ value: "fas fa-transgender-alt",
+ label: "transgender-alt",
+ },
+ {
+ value: "fas fa-trash",
+ label: "trash",
+ },
+ {
+ value: "fas fa-trash-alt",
+ label: "trash-alt",
+ },
+ {
+ value: "far fa-trash-alt",
+ label: "trash-alt",
+ },
+ {
+ value: "fas fa-trash-restore",
+ label: "trash-restore",
+ },
+ {
+ value: "fas fa-trash-restore-alt",
+ label: "trash-restore-alt",
+ },
+ {
+ value: "fas fa-tree",
+ label: "tree",
+ },
+ {
+ value: "fab fa-trello",
+ label: "trello",
+ },
+ {
+ value: "fab fa-tripadvisor",
+ label: "tripadvisor",
+ },
+ {
+ value: "fas fa-trophy",
+ label: "trophy",
+ },
+ {
+ value: "fas fa-truck",
+ label: "truck",
+ },
+ {
+ value: "fas fa-truck-loading",
+ label: "truck-loading",
+ },
+ {
+ value: "fas fa-truck-monster",
+ label: "truck-monster",
+ },
+ {
+ value: "fas fa-truck-moving",
+ label: "truck-moving",
+ },
+ {
+ value: "fas fa-truck-pickup",
+ label: "truck-pickup",
+ },
+ {
+ value: "fas fa-tshirt",
+ label: "tshirt",
+ },
+ {
+ value: "fas fa-tty",
+ label: "tty",
+ },
+ {
+ value: "fab fa-tumblr",
+ label: "tumblr",
+ },
+ {
+ value: "fab fa-tumblr-square",
+ label: "tumblr-square",
+ },
+ {
+ value: "fas fa-tv",
+ label: "tv",
+ },
+ {
+ value: "fab fa-twitch",
+ label: "twitch",
+ },
+ {
+ value: "fab fa-twitter",
+ label: "twitter",
+ },
+ {
+ value: "fab fa-twitter-square",
+ label: "twitter-square",
+ },
+ {
+ value: "fab fa-typo3",
+ label: "typo3",
+ },
+ {
+ value: "fab fa-uber",
+ label: "uber",
+ },
+ {
+ value: "fab fa-ubuntu",
+ label: "ubuntu",
+ },
+ {
+ value: "fab fa-uikit",
+ label: "uikit",
+ },
+ {
+ value: "fab fa-umbraco",
+ label: "umbraco",
+ },
+ {
+ value: "fas fa-umbrella",
+ label: "umbrella",
+ },
+ {
+ value: "fas fa-umbrella-beach",
+ label: "umbrella-beach",
+ },
+ {
+ value: "fas fa-underline",
+ label: "underline",
+ },
+ {
+ value: "fas fa-undo",
+ label: "undo",
+ },
+ {
+ value: "fas fa-undo-alt",
+ label: "undo-alt",
+ },
+ {
+ value: "fab fa-uniregistry",
+ label: "uniregistry",
+ },
+ {
+ value: "fab fa-unity",
+ label: "unity",
+ },
+ {
+ value: "fas fa-universal-access",
+ label: "universal-access",
+ },
+ {
+ value: "fas fa-university",
+ label: "university",
+ },
+ {
+ value: "fas fa-unlink",
+ label: "unlink",
+ },
+ {
+ value: "fas fa-unlock",
+ label: "unlock",
+ },
+ {
+ value: "fas fa-unlock-alt",
+ label: "unlock-alt",
+ },
+ {
+ value: "fab fa-unsplash",
+ label: "unsplash",
+ },
+ {
+ value: "fab fa-untappd",
+ label: "untappd",
+ },
+ {
+ value: "fas fa-upload",
+ label: "upload",
+ },
+ {
+ value: "fab fa-ups",
+ label: "ups",
+ },
+ {
+ value: "fab fa-usb",
+ label: "usb",
+ },
+ {
+ value: "fas fa-user",
+ label: "user",
+ },
+ {
+ value: "far fa-user",
+ label: "user",
+ },
+ {
+ value: "fas fa-user-alt",
+ label: "user-alt",
+ },
+ {
+ value: "fas fa-user-alt-slash",
+ label: "user-alt-slash",
+ },
+ {
+ value: "fas fa-user-astronaut",
+ label: "user-astronaut",
+ },
+ {
+ value: "fas fa-user-check",
+ label: "user-check",
+ },
+ {
+ value: "fas fa-user-circle",
+ label: "user-circle",
+ },
+ {
+ value: "far fa-user-circle",
+ label: "user-circle",
+ },
+ {
+ value: "fas fa-user-clock",
+ label: "user-clock",
+ },
+ {
+ value: "fas fa-user-cog",
+ label: "user-cog",
+ },
+ {
+ value: "fas fa-user-edit",
+ label: "user-edit",
+ },
+ {
+ value: "fas fa-user-friends",
+ label: "user-friends",
+ },
+ {
+ value: "fas fa-user-graduate",
+ label: "user-graduate",
+ },
+ {
+ value: "fas fa-user-injured",
+ label: "user-injured",
+ },
+ {
+ value: "fas fa-user-lock",
+ label: "user-lock",
+ },
+ {
+ value: "fas fa-user-md",
+ label: "user-md",
+ },
+ {
+ value: "fas fa-user-minus",
+ label: "user-minus",
+ },
+ {
+ value: "fas fa-user-ninja",
+ label: "user-ninja",
+ },
+ {
+ value: "fas fa-user-nurse",
+ label: "user-nurse",
+ },
+ {
+ value: "fas fa-user-plus",
+ label: "user-plus",
+ },
+ {
+ value: "fas fa-user-secret",
+ label: "user-secret",
+ },
+ {
+ value: "fas fa-user-shield",
+ label: "user-shield",
+ },
+ {
+ value: "fas fa-user-slash",
+ label: "user-slash",
+ },
+ {
+ value: "fas fa-user-tag",
+ label: "user-tag",
+ },
+ {
+ value: "fas fa-user-tie",
+ label: "user-tie",
+ },
+ {
+ value: "",
+ label: "",
+ },
+ {
+ value: "fas fa-user-times",
+ label: "user-times",
+ },
+ {
+ value: "fas fa-users",
+ label: "users",
+ },
+ {
+ value: "fas fa-users-cog",
+ label: "users-cog",
+ },
+ {
+ value: "fas fa-users-slash",
+ label: "users-slash",
+ },
+ {
+ value: "fab fa-usps",
+ label: "usps",
+ },
+ {
+ value: "fab fa-ussunnah",
+ label: "ussunnah",
+ },
+ {
+ value: "fas fa-utensil-spoon",
+ label: "utensil-spoon",
+ },
+ {
+ value: "fas fa-utensils",
+ label: "utensils",
+ },
+ {
+ value: "fab fa-vaadin",
+ label: "vaadin",
+ },
+ {
+ value: "fas fa-vector-square",
+ label: "vector-square",
+ },
+ {
+ value: "fas fa-venus",
+ label: "venus",
+ },
+ {
+ value: "fas fa-venus-double",
+ label: "venus-double",
+ },
+ {
+ value: "fas fa-venus-mars",
+ label: "venus-mars",
+ },
+ {
+ value: "fab fa-viacoin",
+ label: "viacoin",
+ },
+ {
+ value: "fab fa-viadeo",
+ label: "viadeo",
+ },
+ {
+ value: "fab fa-viadeo-square",
+ label: "viadeo-square",
+ },
+ {
+ value: "fas fa-vial",
+ label: "vial",
+ },
+ {
+ value: "fas fa-vials",
+ label: "vials",
+ },
+ {
+ value: "fab fa-viber",
+ label: "viber",
+ },
+ {
+ value: "fas fa-video",
+ label: "video",
+ },
+ {
+ value: "fas fa-video-slash",
+ label: "video-slash",
+ },
+ {
+ value: "fas fa-vihara",
+ label: "vihara",
+ },
+ {
+ value: "fab fa-vimeo",
+ label: "vimeo",
+ },
+ {
+ value: "fab fa-vimeo-square",
+ label: "vimeo-square",
+ },
+ {
+ value: "fab fa-vimeo-v",
+ label: "vimeo-v",
+ },
+ {
+ value: "fab fa-vine",
+ label: "vine",
+ },
+ {
+ value: "fas fa-virus",
+ label: "virus",
+ },
+ {
+ value: "fas fa-virus-slash",
+ label: "virus-slash",
+ },
+ {
+ value: "fas fa-viruses",
+ label: "viruses",
+ },
+ {
+ value: "fab fa-vk",
+ label: "vk",
+ },
+ {
+ value: "fab fa-vnv",
+ label: "vnv",
+ },
+ {
+ value: "fas fa-voicemail",
+ label: "voicemail",
+ },
+ {
+ value: "fas fa-volleyball-ball",
+ label: "volleyball-ball",
+ },
+ {
+ value: "fas fa-volume-down",
+ label: "volume-down",
+ },
+ {
+ value: "fas fa-volume-mute",
+ label: "volume-mute",
+ },
+ {
+ value: "fas fa-volume-off",
+ label: "volume-off",
+ },
+ {
+ value: "fas fa-volume-up",
+ label: "volume-up",
+ },
+ {
+ value: "fas fa-vote-yea",
+ label: "vote-yea",
+ },
+ {
+ value: "fas fa-vr-cardboard",
+ label: "vr-cardboard",
+ },
+ {
+ value: "fab fa-vuejs",
+ label: "vuejs",
+ },
+ {
+ value: "fas fa-walking",
+ label: "walking",
+ },
+ {
+ value: "fas fa-wallet",
+ label: "wallet",
+ },
+ {
+ value: "fas fa-warehouse",
+ label: "warehouse",
+ },
+ {
+ value: "fas fa-water",
+ label: "water",
+ },
+ {
+ value: "fas fa-wave-square",
+ label: "wave-square",
+ },
+ {
+ value: "fab fa-waze",
+ label: "waze",
+ },
+ {
+ value: "fab fa-weebly",
+ label: "weebly",
+ },
+ {
+ value: "fab fa-weibo",
+ label: "weibo",
+ },
+ {
+ value: "fas fa-weight",
+ label: "weight",
+ },
+ {
+ value: "fas fa-weight-hanging",
+ label: "weight-hanging",
+ },
+ {
+ value: "fab fa-weixin",
+ label: "weixin",
+ },
+ {
+ value: "fab fa-whatsapp",
+ label: "whatsapp",
+ },
+ {
+ value: "fab fa-whatsapp-square",
+ label: "whatsapp-square",
+ },
+ {
+ value: "fas fa-wheelchair",
+ label: "wheelchair",
+ },
+ {
+ value: "fab fa-whmcs",
+ label: "whmcs",
+ },
+ {
+ value: "fas fa-wifi",
+ label: "wifi",
+ },
+ {
+ value: "fab fa-wikipedia-w",
+ label: "wikipedia-w",
+ },
+ {
+ value: "fas fa-wind",
+ label: "wind",
+ },
+ {
+ value: "fas fa-window-close",
+ label: "window-close",
+ },
+ {
+ value: "far fa-window-close",
+ label: "window-close",
+ },
+ {
+ value: "fas fa-window-maximize",
+ label: "window-maximize",
+ },
+ {
+ value: "far fa-window-maximize",
+ label: "window-maximize",
+ },
+ {
+ value: "fas fa-window-minimize",
+ label: "window-minimize",
+ },
+ {
+ value: "far fa-window-minimize",
+ label: "window-minimize",
+ },
+ {
+ value: "fas fa-window-restore",
+ label: "window-restore",
+ },
+ {
+ value: "far fa-window-restore",
+ label: "window-restore",
+ },
+ {
+ value: "fab fa-windows",
+ label: "windows",
+ },
+ {
+ value: "fas fa-wine-bottle",
+ label: "wine-bottle",
+ },
+ {
+ value: "fas fa-wine-glass",
+ label: "wine-glass",
+ },
+ {
+ value: "fas fa-wine-glass-alt",
+ label: "wine-glass-alt",
+ },
+ {
+ value: "fab fa-wix",
+ label: "wix",
+ },
+ {
+ value: "fab fa-wizards-of-the-coast",
+ label: "wizards-of-the-coast",
+ },
+ {
+ value: "fab fa-wolf-pack-battalion",
+ label: "wolf-pack-battalion",
+ },
+ {
+ value: "fas fa-won-sign",
+ label: "won-sign",
+ },
+ {
+ value: "fab fa-wordpress",
+ label: "wordpress",
+ },
+ {
+ value: "fab fa-wordpress-simple",
+ label: "wordpress-simple",
+ },
+ {
+ value: "fab fa-wpbeginner",
+ label: "wpbeginner",
+ },
+ {
+ value: "fab fa-wpexplorer",
+ label: "wpexplorer",
+ },
+ {
+ value: "fab fa-wpforms",
+ label: "wpforms",
+ },
+ {
+ value: "fab fa-wpressr",
+ label: "wpressr",
+ },
+ {
+ value: "fas fa-wrench",
+ label: "wrench",
+ },
+ {
+ value: "fas fa-x-ray",
+ label: "x-ray",
+ },
+ {
+ value: "fab fa-xbox",
+ label: "xbox",
+ },
+ {
+ value: "fab fa-xing",
+ label: "xing",
+ },
+ {
+ value: "fab fa-xing-square",
+ label: "xing-square",
+ },
+ {
+ value: "fab fa-y-combinator",
+ label: "y-combinator",
+ },
+ {
+ value: "fab fa-yahoo",
+ label: "yahoo",
+ },
+ {
+ value: "fab fa-yammer",
+ label: "yammer",
+ },
+ {
+ value: "fab fa-yandex",
+ label: "yandex",
+ },
+ {
+ value: "fab fa-yandex-international",
+ label: "yandex-international",
+ },
+ {
+ value: "fab fa-yarn",
+ label: "yarn",
+ },
+ {
+ value: "fab fa-yelp",
+ label: "yelp",
+ },
+ {
+ value: "fas fa-yen-sign",
+ label: "yen-sign",
+ },
+ {
+ value: "fas fa-yin-yang",
+ label: "yin-yang",
+ },
+ {
+ value: "fab fa-yoast",
+ label: "yoast",
+ },
+ {
+ value: "fab fa-youtube",
+ label: "youtube",
+ },
+ {
+ value: "fab fa-youtube-square",
+ label: "youtube-square",
+ },
+ {
+ value: "fab fa-zhihu",
+ label: "zhihu",
+ },
+]
diff --git a/packages/builder/src/components/userInterface/IconSelect/index.js b/packages/builder/src/components/userInterface/IconSelect/index.js
new file mode 100644
index 0000000000..716915d99b
--- /dev/null
+++ b/packages/builder/src/components/userInterface/IconSelect/index.js
@@ -0,0 +1,3 @@
+import "@fortawesome/fontawesome-free/js/all.js"
+
+export { default as IconSelect } from "./IconSelect.svelte"
diff --git a/packages/builder/src/components/userInterface/PropertyControl.svelte b/packages/builder/src/components/userInterface/PropertyControl.svelte
index f1d6fe54d1..395c842122 100644
--- a/packages/builder/src/components/userInterface/PropertyControl.svelte
+++ b/packages/builder/src/components/userInterface/PropertyControl.svelte
@@ -71,7 +71,7 @@
let temp = runtimeToReadableBinding(bindableProperties, value)
- return value === undefined && props.defaultValue !== undefined
+ return !value && props.defaultValue !== undefined
? props.defaultValue
: temp
}
diff --git a/packages/builder/src/components/userInterface/temporaryPanelStructure.js b/packages/builder/src/components/userInterface/temporaryPanelStructure.js
index cb52881017..296ae26606 100644
--- a/packages/builder/src/components/userInterface/temporaryPanelStructure.js
+++ b/packages/builder/src/components/userInterface/temporaryPanelStructure.js
@@ -6,6 +6,7 @@ import ModelViewSelect from "components/userInterface/ModelViewSelect.svelte"
import ModelViewFieldSelect from "components/userInterface/ModelViewFieldSelect.svelte"
import Event from "components/userInterface/EventsEditor/EventPropertyControl.svelte"
import ScreenSelect from "components/userInterface/ScreenSelect.svelte"
+import { IconSelect } from "components/userInterface/IconSelect"
import Colorpicker from "@budibase/colorpicker"
import { all } from "./propertyCategories.js"
@@ -221,16 +222,41 @@ export default {
settings: [{ label: "URL", key: "url", control: Input }],
},
},
- // {
- // _component: "@budibase/standard-components/icon",
- // name: "Icon",
- // description: "A basic component for displaying icons",
- // icon: "ri-sun-fill",
- // children: [],
- // properties: {
- // design: { ...all },
- // },
- // },
+ {
+ _component: "@budibase/standard-components/icon",
+ name: "Icon",
+ description: "A basic component for displaying icons",
+ icon: "ri-sun-fill",
+ children: [],
+ properties: {
+ design: {},
+ settings: [
+ { label: "Icon", key: "icon", control: IconSelect },
+ {
+ label: "Size",
+ key: "size",
+ control: OptionSelect,
+ defaultValue: "fa-lg",
+ options: [
+ { value: "fa-xs", label: "xs" },
+ { value: "fa-sm", label: "sm" },
+ { value: "fa-lg", label: "lg" },
+ { value: "fa-2x", label: "2x" },
+ { value: "fa-3x", label: "3x" },
+ { value: "fa-5x", label: "5x" },
+ { value: "fa-7x", label: "7x" },
+ { value: "fa-10x", label: "10x" },
+ ],
+ },
+ {
+ label: "Color",
+ key: "color",
+ control: Colorpicker,
+ defaultValue: "#000",
+ },
+ ],
+ },
+ },
{
_component: "@budibase/standard-components/link",
name: "Link",
diff --git a/packages/builder/src/components/workflow/WorkflowPanel/index.js b/packages/builder/src/components/workflow/WorkflowPanel/index.js
deleted file mode 100644
index 35fec385a7..0000000000
--- a/packages/builder/src/components/workflow/WorkflowPanel/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export { default as WorkflowPanel } from "./WorkflowPanel.svelte"
-export { default as BlockList } from "./BlockList/BlockList.svelte"
-export { default as WorkflowList } from "./WorkflowList/WorkflowList.svelte"
diff --git a/packages/builder/src/components/workflow/index.js b/packages/builder/src/components/workflow/index.js
deleted file mode 100644
index a3f5c4a2bc..0000000000
--- a/packages/builder/src/components/workflow/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export { default as WorkflowBuilder } from "./WorkflowBuilder/WorkflowBuilder.svelte"
-export { default as SetupPanel } from "./SetupPanel/SetupPanel.svelte"
-export { default as WorkflowPanel } from "./WorkflowPanel/WorkflowPanel.svelte"
diff --git a/packages/builder/src/constants/backend/index.js b/packages/builder/src/constants/backend/index.js
index 43a01786f4..45de862a98 100644
--- a/packages/builder/src/constants/backend/index.js
+++ b/packages/builder/src/constants/backend/index.js
@@ -51,24 +51,15 @@ export const FIELDS = {
},
},
},
- // IMAGE: {
- // name: "File",
- // icon: "ri-image-line",
- // type: "file",
- // constraints: {
- // type: "string",
- // presence: { allowEmpty: true },
- // },
- // },
- // FILE: {
- // name: "Image",
- // icon: "ri-file-line",
- // type: "file",
- // constraints: {
- // type: "string",
- // presence: { allowEmpty: true },
- // },
- // },
+ ATTACHMENT: {
+ name: "Attachment",
+ icon: "ri-file-line",
+ type: "attachment",
+ constraints: {
+ type: "array",
+ presence: { allowEmpty: true },
+ },
+ },
// LINKED_FIELDS: {
// name: "Linked Fields",
// icon: "ri-link",
@@ -79,3 +70,9 @@ export const FIELDS = {
// },
// },
}
+
+export const FILE_TYPES = {
+ IMAGE: ["png", "tiff", "gif", "raw", "jpg", "jpeg"],
+ CODE: ["js", "rs", "py", "java", "rb", "hs", "yml"],
+ DOCUMENT: ["odf", "docx", "doc", "pdf", "csv"],
+}
diff --git a/packages/builder/src/pages/[application]/_reset.svelte b/packages/builder/src/pages/[application]/_reset.svelte
index 2ebad20abf..ad12dd54e8 100644
--- a/packages/builder/src/pages/[application]/_reset.svelte
+++ b/packages/builder/src/pages/[application]/_reset.svelte
@@ -1,6 +1,6 @@
- {#if $workflowStore.selectedWorkflow}
+ {#if $automationStore.selectedAutomation}
diff --git a/packages/builder/src/pages/[application]/automate/index.svelte b/packages/builder/src/pages/[application]/automate/index.svelte
new file mode 100644
index 0000000000..36d04677cd
--- /dev/null
+++ b/packages/builder/src/pages/[application]/automate/index.svelte
@@ -0,0 +1,5 @@
+
+
+
diff --git a/packages/builder/src/pages/[application]/backend/_layout.svelte b/packages/builder/src/pages/[application]/backend/_layout.svelte
index 5a9dc3bd4f..0dfefef094 100644
--- a/packages/builder/src/pages/[application]/backend/_layout.svelte
+++ b/packages/builder/src/pages/[application]/backend/_layout.svelte
@@ -1,3 +1,4 @@
+
-
-
diff --git a/packages/builder/tests/buildStateOrigins.spec.js b/packages/builder/tests/buildStateOrigins.spec.js
deleted file mode 100644
index 29d8907873..0000000000
--- a/packages/builder/tests/buildStateOrigins.spec.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import { buildStateOrigins } from "../src/builderStore/buildStateOrigins"
-
-it("builds the correct stateOrigins object from a screen definition with handlers", () => {
- expect(
- buildStateOrigins({
- name: "screen1",
- description: "",
- props: {
- _component: "@budibase/standard-components/container",
- className: "",
- type: "div",
- onClick: [
- {
- "##eventHandlerType": "Set State",
- parameters: {
- path: "testKey",
- value: "value",
- },
- },
- ],
- },
- })
- ).toEqual({
- testKey: {
- "##eventHandlerType": "Set State",
- parameters: {
- path: "testKey",
- value: "value",
- },
- },
- })
-})
diff --git a/packages/builder/yarn.lock b/packages/builder/yarn.lock
index 2579176003..27bc9d6dbd 100644
--- a/packages/builder/yarn.lock
+++ b/packages/builder/yarn.lock
@@ -709,14 +709,23 @@
lodash "^4.17.13"
to-fast-properties "^2.0.0"
-"@budibase/bbui@^1.33.0":
- version "1.33.0"
- resolved "https://registry.yarnpkg.com/@budibase/bbui/-/bbui-1.33.0.tgz#216b24dd815f45880e9795e66b04848329b0390f"
- integrity sha512-Rrt5eLbea014TIfAbT40kP0D0AWNUi8Q0kDr3UZO6Aq4UXgjc0f53ZuJ7Kb66YRDWrqiucjf1FtvOUs3/YaD6g==
+"@budibase/bbui@^1.34.2":
+ version "1.34.2"
+ resolved "https://registry.yarnpkg.com/@budibase/bbui/-/bbui-1.34.2.tgz#e4fcc728dc8d51a918f8ebd5c3f0b0afacfa4047"
+ integrity sha512-6RusGPZnEpHx1gtGcjk/lFLgMgFdDpSIxB8v2MiA+kp+uP1pFlzegbaDh+/JXyqFwK7HO91I0yXXBoPjibi7Aw==
dependencies:
sirv-cli "^0.4.6"
svelte-flatpickr "^2.4.0"
+"@budibase/client@^0.1.21":
+ version "0.1.21"
+ resolved "https://registry.yarnpkg.com/@budibase/client/-/client-0.1.21.tgz#db414445c132b373f6c25e39d62628eb60cd8ac3"
+ integrity sha512-/ju0vYbWh9MUjmxkGNlOL4S/VQd4p5mbz5rHu0yt55ak9t/yyzI6PzBBxlucBeRbXYd9OFynFjy1pvYt1v+z9Q==
+ dependencies:
+ deep-equal "^2.0.1"
+ mustache "^4.0.1"
+ regexparam "^1.3.0"
+
"@budibase/colorpicker@^1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@budibase/colorpicker/-/colorpicker-1.0.1.tgz#940c180e7ebba0cb0756c4c8ef13f5dfab58e810"
@@ -769,6 +778,11 @@
debug "^3.1.0"
lodash.once "^4.1.1"
+"@fortawesome/fontawesome-free@^5.14.0":
+ version "5.14.0"
+ resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.14.0.tgz#a371e91029ebf265015e64f81bfbf7d228c9681f"
+ integrity sha512-OfdMsF+ZQgdKHP9jUbmDcRrP0eX90XXrsXIdyjLbkmSBzmMXPABB8eobUJtivaupucYaByz6WNe1PI1JuYm3qA==
+
"@hapi/address@^2.1.2":
version "2.1.4"
resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
@@ -1388,6 +1402,11 @@ array-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+array-filter@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83"
+ integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=
+
array-union@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
@@ -1442,6 +1461,13 @@ atob@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+available-typed-arrays@^1.0.0, available-typed-arrays@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5"
+ integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==
+ dependencies:
+ array-filter "^1.0.0"
+
aws-sign2@~0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
@@ -2391,6 +2417,26 @@ decode-uri-component@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+deep-equal@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.0.3.tgz#cad1c15277ad78a5c01c49c2dee0f54de8a6a7b0"
+ integrity sha512-Spqdl4H+ky45I9ByyJtXteOm9CaIrPmnIPmOhrkKGNYWeDgCvJ8jNYVCTjChxW4FqGuZnLHADc8EKRMX6+CgvA==
+ dependencies:
+ es-abstract "^1.17.5"
+ es-get-iterator "^1.1.0"
+ is-arguments "^1.0.4"
+ is-date-object "^1.0.2"
+ is-regex "^1.0.5"
+ isarray "^2.0.5"
+ object-is "^1.1.2"
+ object-keys "^1.1.1"
+ object.assign "^4.1.0"
+ regexp.prototype.flags "^1.3.0"
+ side-channel "^1.0.2"
+ which-boxed-primitive "^1.0.1"
+ which-collection "^1.0.1"
+ which-typed-array "^1.1.2"
+
deep-is@~0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
@@ -2560,6 +2606,54 @@ es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5:
string.prototype.trimleft "^2.1.1"
string.prototype.trimright "^2.1.1"
+es-abstract@^1.17.4:
+ version "1.17.6"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a"
+ integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==
+ dependencies:
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+ is-callable "^1.2.0"
+ is-regex "^1.1.0"
+ object-inspect "^1.7.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.0"
+ string.prototype.trimend "^1.0.1"
+ string.prototype.trimstart "^1.0.1"
+
+es-abstract@^1.18.0-next.0:
+ version "1.18.0-next.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.0.tgz#b302834927e624d8e5837ed48224291f2c66e6fc"
+ integrity sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ==
+ dependencies:
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+ is-callable "^1.2.0"
+ is-negative-zero "^2.0.0"
+ is-regex "^1.1.1"
+ object-inspect "^1.8.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.0"
+ string.prototype.trimend "^1.0.1"
+ string.prototype.trimstart "^1.0.1"
+
+es-get-iterator@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.0.tgz#bb98ad9d6d63b31aacdc8f89d5d0ee57bcb5b4c8"
+ integrity sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==
+ dependencies:
+ es-abstract "^1.17.4"
+ has-symbols "^1.0.1"
+ is-arguments "^1.0.4"
+ is-map "^2.0.1"
+ is-set "^2.0.1"
+ is-string "^1.0.5"
+ isarray "^2.0.5"
+
es-to-primitive@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
@@ -2866,7 +2960,7 @@ for-in@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
-foreach@~2.0.1:
+foreach@^2.0.5, foreach@~2.0.1:
version "2.0.5"
resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k=
@@ -3240,16 +3334,31 @@ is-accessor-descriptor@^1.0.0:
dependencies:
kind-of "^6.0.0"
+is-arguments@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
+ integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==
+
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+is-bigint@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.0.tgz#73da8c33208d00f130e9b5e15d23eac9215601c4"
+ integrity sha512-t5mGUXC/xRheCK431ylNiSkGGpBp8bHENBcENTkDT6ppwPzEVxNGZRvgvmOEfbWkFhA7D2GEuE2mmQTr78sl2g==
+
is-binary-path@~2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
dependencies:
binary-extensions "^2.0.0"
+is-boolean-object@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.1.tgz#10edc0900dd127697a92f6f9807c7617d68ac48e"
+ integrity sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==
+
is-buffer@^1.1.5:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
@@ -3258,6 +3367,11 @@ is-callable@^1.1.4, is-callable@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
+is-callable@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.1.tgz#4d1e21a4f437509d25ce55f8184350771421c96d"
+ integrity sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg==
+
is-ci@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
@@ -3276,7 +3390,7 @@ is-data-descriptor@^1.0.0:
dependencies:
kind-of "^6.0.0"
-is-date-object@^1.0.1:
+is-date-object@^1.0.1, is-date-object@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
@@ -3341,10 +3455,25 @@ is-installed-globally@^0.3.2:
global-dirs "^2.0.1"
is-path-inside "^3.0.1"
+is-map@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1"
+ integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==
+
is-module@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
+is-negative-zero@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461"
+ integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=
+
+is-number-object@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197"
+ integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==
+
is-number@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
@@ -3401,6 +3530,18 @@ is-regex@^1.0.5:
dependencies:
has "^1.0.3"
+is-regex@^1.1.0, is-regex@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9"
+ integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==
+ dependencies:
+ has-symbols "^1.0.1"
+
+is-set@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43"
+ integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==
+
is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
@@ -3409,16 +3550,41 @@ is-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
+is-string@^1.0.4, is-string@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
+ integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
+
is-symbol@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
dependencies:
has-symbols "^1.0.1"
+is-typed-array@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.3.tgz#a4ff5a5e672e1a55f99c7f54e59597af5c1df04d"
+ integrity sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ==
+ dependencies:
+ available-typed-arrays "^1.0.0"
+ es-abstract "^1.17.4"
+ foreach "^2.0.5"
+ has-symbols "^1.0.1"
+
is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+is-weakmap@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2"
+ integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==
+
+is-weakset@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.1.tgz#e9a0af88dbd751589f5e50d80f4c98b780884f83"
+ integrity sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==
+
is-windows@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
@@ -3439,6 +3605,11 @@ isarray@1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+isarray@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
+ integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
+
isbuffer@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/isbuffer/-/isbuffer-0.0.0.tgz#38c146d9df528b8bf9b0701c3d43cf12df3fc39b"
@@ -4558,6 +4729,19 @@ object-inspect@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
+object-inspect@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0"
+ integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==
+
+object-is@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6"
+ integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+
object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
@@ -5068,6 +5252,19 @@ regex-not@^1.0.0, regex-not@^1.0.2:
extend-shallow "^3.0.2"
safe-regex "^1.1.0"
+regexp.prototype.flags@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75"
+ integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+
+regexparam@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/regexparam/-/regexparam-1.3.0.tgz#2fe42c93e32a40eff6235d635e0ffa344b92965f"
+ integrity sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g==
+
regexpu-core@^4.7.0:
version "4.7.0"
resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938"
@@ -5475,6 +5672,14 @@ shortid@^2.2.15:
dependencies:
nanoid "^2.1.0"
+side-channel@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.3.tgz#cdc46b057550bbab63706210838df5d4c19519c3"
+ integrity sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g==
+ dependencies:
+ es-abstract "^1.18.0-next.0"
+ object-inspect "^1.8.0"
+
signal-exit@^3.0.0, signal-exit@^3.0.2:
version "3.0.3"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
@@ -5701,7 +5906,7 @@ string-width@^4.2.0:
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.0"
-string.prototype.trimend@^1.0.0:
+string.prototype.trimend@^1.0.0, string.prototype.trimend@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
dependencies:
@@ -5724,7 +5929,7 @@ string.prototype.trimright@^2.1.1:
es-abstract "^1.17.5"
string.prototype.trimend "^1.0.0"
-string.prototype.trimstart@^1.0.0:
+string.prototype.trimstart@^1.0.0, string.prototype.trimstart@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
dependencies:
@@ -6179,10 +6384,43 @@ whatwg-url@^8.0.0:
tr46 "^2.0.2"
webidl-conversions "^5.0.0"
+which-boxed-primitive@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz#cbe8f838ebe91ba2471bb69e9edbda67ab5a5ec1"
+ integrity sha512-7BT4TwISdDGBgaemWU0N0OU7FeAEJ9Oo2P1PHRm/FCWoEi2VLWC9b6xvxAA3C/NMpxg3HXVgi0sMmGbNUbNepQ==
+ dependencies:
+ is-bigint "^1.0.0"
+ is-boolean-object "^1.0.0"
+ is-number-object "^1.0.3"
+ is-string "^1.0.4"
+ is-symbol "^1.0.2"
+
+which-collection@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906"
+ integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==
+ dependencies:
+ is-map "^2.0.1"
+ is-set "^2.0.1"
+ is-weakmap "^2.0.1"
+ is-weakset "^2.0.1"
+
which-module@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+which-typed-array@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.2.tgz#e5f98e56bda93e3dac196b01d47c1156679c00b2"
+ integrity sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ==
+ dependencies:
+ available-typed-arrays "^1.0.2"
+ es-abstract "^1.17.5"
+ foreach "^2.0.5"
+ function-bind "^1.1.1"
+ has-symbols "^1.0.1"
+ is-typed-array "^1.1.3"
+
which@^1.2.9, which@^1.3.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
diff --git a/packages/server/package.json b/packages/server/package.json
index 35105eabab..93d4ff9e7c 100644
--- a/packages/server/package.json
+++ b/packages/server/package.json
@@ -71,6 +71,7 @@
"pino-pretty": "^4.0.0",
"pouchdb": "^7.2.1",
"pouchdb-all-dbs": "^1.0.2",
+ "sharp": "^0.26.0",
"squirrelly": "^7.5.0",
"tar-fs": "^2.1.0",
"uuid": "^3.3.2",
diff --git a/packages/server/src/api/controllers/workflow.js b/packages/server/src/api/controllers/automation.js
similarity index 64%
rename from packages/server/src/api/controllers/workflow.js
rename to packages/server/src/api/controllers/automation.js
index fde4333736..2c415fec8b 100644
--- a/packages/server/src/api/controllers/workflow.js
+++ b/packages/server/src/api/controllers/automation.js
@@ -1,8 +1,8 @@
const CouchDB = require("../../db")
const newid = require("../../db/newid")
-const actions = require("../../workflows/actions")
-const logic = require("../../workflows/logic")
-const triggers = require("../../workflows/triggers")
+const actions = require("../../automations/actions")
+const logic = require("../../automations/logic")
+const triggers = require("../../automations/triggers")
/*************************
* *
@@ -10,12 +10,12 @@ const triggers = require("../../workflows/triggers")
* *
*************************/
-function cleanWorkflowInputs(workflow) {
- if (workflow == null) {
- return workflow
+function cleanAutomationInputs(automation) {
+ if (automation == null) {
+ return automation
}
- let steps = workflow.definition.steps
- let trigger = workflow.definition.trigger
+ let steps = automation.definition.steps
+ let trigger = automation.definition.trigger
let allSteps = [...steps, trigger]
for (let step of allSteps) {
if (step == null) {
@@ -27,25 +27,25 @@ function cleanWorkflowInputs(workflow) {
}
}
}
- return workflow
+ return automation
}
exports.create = async function(ctx) {
const db = new CouchDB(ctx.user.instanceId)
- let workflow = ctx.request.body
+ let automation = ctx.request.body
- workflow._id = newid()
+ automation._id = newid()
- workflow.type = "workflow"
- workflow = cleanWorkflowInputs(workflow)
- const response = await db.post(workflow)
- workflow._rev = response.rev
+ automation.type = "automation"
+ automation = cleanAutomationInputs(automation)
+ const response = await db.post(automation)
+ automation._rev = response.rev
ctx.status = 200
ctx.body = {
- message: "Workflow created successfully",
- workflow: {
- ...workflow,
+ message: "Automation created successfully",
+ automation: {
+ ...automation,
...response,
},
}
@@ -53,17 +53,17 @@ exports.create = async function(ctx) {
exports.update = async function(ctx) {
const db = new CouchDB(ctx.user.instanceId)
- let workflow = ctx.request.body
+ let automation = ctx.request.body
- workflow = cleanWorkflowInputs(workflow)
- const response = await db.put(workflow)
- workflow._rev = response.rev
+ automation = cleanAutomationInputs(automation)
+ const response = await db.put(automation)
+ automation._rev = response.rev
ctx.status = 200
ctx.body = {
- message: `Workflow ${workflow._id} updated successfully.`,
- workflow: {
- ...workflow,
+ message: `Automation ${automation._id} updated successfully.`,
+ automation: {
+ ...automation,
_rev: response.rev,
_id: response.id,
},
@@ -73,7 +73,7 @@ exports.update = async function(ctx) {
exports.fetch = async function(ctx) {
const db = new CouchDB(ctx.user.instanceId)
const response = await db.query(`database/by_type`, {
- key: ["workflow"],
+ key: ["automation"],
include_docs: true,
})
ctx.body = response.rows.map(row => row.doc)
@@ -117,14 +117,14 @@ module.exports.getDefinitionList = async function(ctx) {
exports.trigger = async function(ctx) {
const db = new CouchDB(ctx.user.instanceId)
- let workflow = await db.get(ctx.params.id)
- await triggers.externalTrigger(workflow, {
+ let automation = await db.get(ctx.params.id)
+ await triggers.externalTrigger(automation, {
...ctx.request.body,
instanceId: ctx.user.instanceId,
})
ctx.status = 200
ctx.body = {
- message: `Workflow ${workflow._id} has been triggered.`,
- workflow,
+ message: `Automation ${automation._id} has been triggered.`,
+ automation,
}
}
diff --git a/packages/server/src/api/controllers/deploy/aws.js b/packages/server/src/api/controllers/deploy/aws.js
index 5355eeefd8..91f28793da 100644
--- a/packages/server/src/api/controllers/deploy/aws.js
+++ b/packages/server/src/api/controllers/deploy/aws.js
@@ -2,6 +2,7 @@ const fs = require("fs")
const AWS = require("aws-sdk")
const fetch = require("node-fetch")
const { budibaseAppsDir } = require("../../../utilities/budibaseDir")
+const PouchDB = require("../../../db")
async function invalidateCDN(cfDistribution, appId) {
const cf = new AWS.CloudFront({})
@@ -63,8 +64,22 @@ function walkDir(dirPath, callback) {
}
}
+function prepareUploadForS3({ filePath, s3Key, metadata, s3 }) {
+ const fileExtension = [...filePath.split(".")].pop()
+ const fileBytes = fs.readFileSync(filePath)
+ return s3
+ .upload({
+ Key: s3Key,
+ Body: fileBytes,
+ ContentType: CONTENT_TYPE_MAP[fileExtension.toLowerCase()],
+ Metadata: metadata,
+ })
+ .promise()
+}
+
exports.uploadAppAssets = async function({
appId,
+ instanceId,
credentials,
bucket,
cfDistribution,
@@ -86,30 +101,47 @@ exports.uploadAppAssets = async function({
const appPages = fs.readdirSync(appAssetsPath)
- const uploads = []
+ let uploads = []
for (let page of appPages) {
- walkDir(`${appAssetsPath}/${page}`, function prepareUploadsForS3(filePath) {
- const fileExtension = [...filePath.split(".")].pop()
- const fileBytes = fs.readFileSync(filePath)
-
- const upload = s3
- .upload({
- Key: filePath.replace(appAssetsPath, `assets/${appId}`),
- Body: fileBytes,
- ContentType: CONTENT_TYPE_MAP[fileExtension],
- Metadata: {
- accountId,
- },
- })
- .promise()
-
- uploads.push(upload)
+ // Upload HTML, CSS and JS for each page of the web app
+ walkDir(`${appAssetsPath}/${page}`, function(filePath) {
+ const appAssetUpload = prepareUploadForS3({
+ filePath,
+ s3Key: filePath.replace(appAssetsPath, `assets/${appId}`),
+ s3,
+ metadata: { accountId },
+ })
+ uploads.push(appAssetUpload)
})
}
+ // Upload file attachments
+ const db = new PouchDB(instanceId)
+ const fileUploads = await db.get("_local/fileuploads")
+ if (fileUploads) {
+ for (let file of fileUploads.uploads) {
+ if (file.uploaded) continue
+
+ const attachmentUpload = prepareUploadForS3({
+ filePath: file.path,
+ s3Key: `assets/${appId}/attachments/${file.name}`,
+ s3,
+ metadata: { accountId },
+ })
+
+ uploads.push(attachmentUpload)
+
+ // mark file as uploaded
+ file.uploaded = true
+ }
+
+ db.put(fileUploads)
+ }
+
try {
await Promise.all(uploads)
+ // TODO: update dynamoDB with a synopsis of the app deployment for historical purposes
await invalidateCDN(cfDistribution, appId)
} catch (err) {
console.error("Error uploading budibase app assets to s3", err)
diff --git a/packages/server/src/api/controllers/deploy/index.js b/packages/server/src/api/controllers/deploy/index.js
index 8e35d45ef2..34579b64c7 100644
--- a/packages/server/src/api/controllers/deploy/index.js
+++ b/packages/server/src/api/controllers/deploy/index.js
@@ -42,6 +42,7 @@ exports.deployApp = async function(ctx) {
await uploadAppAssets({
clientId,
appId: ctx.user.appId,
+ instanceId: ctx.user.instanceId,
...credentials,
})
diff --git a/packages/server/src/api/controllers/instance.js b/packages/server/src/api/controllers/instance.js
index 4bc22bd650..eb7b205240 100644
--- a/packages/server/src/api/controllers/instance.js
+++ b/packages/server/src/api/controllers/instance.js
@@ -31,9 +31,9 @@ exports.create = async function(ctx) {
emit([doc.type], doc._id)
}.toString(),
},
- by_workflow_trigger: {
+ by_automation_trigger: {
map: function(doc) {
- if (doc.type === "workflow") {
+ if (doc.type === "automation") {
const trigger = doc.definition.trigger
if (trigger) {
emit([trigger.event], trigger)
diff --git a/packages/server/src/api/controllers/record.js b/packages/server/src/api/controllers/record.js
index 6bbd909d17..c8ef9e96fa 100644
--- a/packages/server/src/api/controllers/record.js
+++ b/packages/server/src/api/controllers/record.js
@@ -188,7 +188,7 @@ exports.destroy = async function(ctx) {
}
ctx.body = await db.remove(ctx.params.recordId, ctx.params.revId)
ctx.status = 200
- // for workflows
+ // for automations
ctx.record = record
emitEvent(`record:delete`, ctx, record)
}
diff --git a/packages/server/src/api/controllers/static.js b/packages/server/src/api/controllers/static.js
index a3f3cb2421..fd4afb42e7 100644
--- a/packages/server/src/api/controllers/static.js
+++ b/packages/server/src/api/controllers/static.js
@@ -1,13 +1,18 @@
const send = require("koa-send")
const { resolve, join } = require("path")
+const jwt = require("jsonwebtoken")
+const fetch = require("node-fetch")
+const fs = require("fs")
+const uuid = require("uuid")
+
const {
budibaseAppsDir,
budibaseTempDir,
} = require("../../utilities/budibaseDir")
+const CouchDB = require("../../db")
const setBuilderToken = require("../../utilities/builder/setBuilderToken")
const { ANON_LEVEL_ID } = require("../../utilities/accessLevels")
-const jwt = require("jsonwebtoken")
-const fetch = require("node-fetch")
+const fileProcessor = require("../../utilities/fileProcessor")
exports.serveBuilder = async function(ctx) {
let builderPath = resolve(__dirname, "../../../builder")
@@ -17,6 +22,66 @@ exports.serveBuilder = async function(ctx) {
await send(ctx, ctx.file, { root: ctx.devPath || builderPath })
}
+exports.processLocalFileUpload = async function(ctx) {
+ const { files } = ctx.request.body
+
+ const attachmentsPath = resolve(
+ budibaseAppsDir(),
+ ctx.user.appId,
+ "attachments"
+ )
+
+ // create attachments dir if it doesnt exist
+ !fs.existsSync(attachmentsPath) &&
+ fs.mkdirSync(attachmentsPath, { recursive: true })
+
+ const filesToProcess = files.map(file => {
+ const fileExtension = [...file.path.split(".")].pop()
+ // filenames converted to UUIDs so they are unique
+ const fileName = `${uuid.v4()}.${fileExtension}`
+
+ return {
+ ...file,
+ fileName,
+ extension: fileExtension,
+ outputPath: join(attachmentsPath, fileName),
+ url: join("/attachments", fileName),
+ }
+ })
+
+ const fileProcessOperations = filesToProcess.map(file =>
+ fileProcessor.process(file)
+ )
+
+ try {
+ const processedFiles = await Promise.all(fileProcessOperations)
+
+ let pendingFileUploads
+ // local document used to track which files need to be uploaded
+ // db.get throws an error if the document doesn't exist
+ // need to use a promise to default
+ const db = new CouchDB(ctx.user.instanceId)
+ await db
+ .get("_local/fileuploads")
+ .then(data => {
+ pendingFileUploads = data
+ })
+ .catch(() => {
+ pendingFileUploads = { _id: "_local/fileuploads", uploads: [] }
+ })
+
+ pendingFileUploads.uploads = [
+ ...processedFiles,
+ ...pendingFileUploads.uploads,
+ ]
+ await db.put(pendingFileUploads)
+
+ ctx.body = processedFiles
+ } catch (err) {
+ ctx.throw(500, err)
+ }
+}
+
exports.serveApp = async function(ctx) {
const mainOrAuth = ctx.isAuthenticated ? "main" : "unauthenticated"
@@ -62,6 +127,24 @@ exports.serveApp = async function(ctx) {
await send(ctx, ctx.file || "index.html", { root: ctx.devPath || appPath })
}
+exports.serveAttachment = async function(ctx) {
+ const appId = ctx.user.appId
+
+ const attachmentsPath = resolve(budibaseAppsDir(), appId, "attachments")
+
+ // Serve from CloudFront
+ if (process.env.CLOUD) {
+ const S3_URL = `https://cdn.app.budi.live/assets/${appId}/attachments/${ctx.file}`
+
+ const response = await fetch(S3_URL)
+ const body = await response.text()
+ ctx.body = body
+ return
+ }
+
+ await send(ctx, ctx.file, { root: attachmentsPath })
+}
+
exports.serveAppAsset = async function(ctx) {
// default to homedir
const mainOrAuth = ctx.isAuthenticated ? "main" : "unauthenticated"
diff --git a/packages/server/src/api/controllers/view/index.js b/packages/server/src/api/controllers/view/index.js
index a45132c2af..b04b59e32b 100644
--- a/packages/server/src/api/controllers/view/index.js
+++ b/packages/server/src/api/controllers/view/index.js
@@ -12,7 +12,7 @@ const controller = {
!name.startsWith("all") &&
name !== "by_type" &&
name !== "by_username" &&
- name !== "by_workflow_trigger"
+ name !== "by_automation_trigger"
) {
response.push({
name,
diff --git a/packages/server/src/api/index.js b/packages/server/src/api/index.js
index 48c2a9041f..b7f156fb6a 100644
--- a/packages/server/src/api/index.js
+++ b/packages/server/src/api/index.js
@@ -16,7 +16,7 @@ const {
viewRoutes,
staticRoutes,
componentRoutes,
- workflowRoutes,
+ automationRoutes,
accesslevelRoutes,
apiKeysRoutes,
} = require("./routes")
@@ -84,8 +84,8 @@ router.use(userRoutes.allowedMethods())
router.use(instanceRoutes.routes())
router.use(instanceRoutes.allowedMethods())
-router.use(workflowRoutes.routes())
-router.use(workflowRoutes.allowedMethods())
+router.use(automationRoutes.routes())
+router.use(automationRoutes.allowedMethods())
router.use(deployRoutes.routes())
router.use(deployRoutes.allowedMethods())
diff --git a/packages/server/src/api/routes/workflow.js b/packages/server/src/api/routes/automation.js
similarity index 74%
rename from packages/server/src/api/routes/workflow.js
rename to packages/server/src/api/routes/automation.js
index 24176645be..84b429be66 100644
--- a/packages/server/src/api/routes/workflow.js
+++ b/packages/server/src/api/routes/automation.js
@@ -1,5 +1,5 @@
const Router = require("@koa/router")
-const controller = require("../controllers/workflow")
+const controller = require("../controllers/automation")
const authorized = require("../../middleware/authorized")
const joiValidator = require("../../middleware/joi-validator")
const { BUILDER } = require("../../utilities/accessLevels")
@@ -30,7 +30,7 @@ function generateValidator(existing = false) {
_id: existing ? Joi.string().required() : Joi.string(),
_rev: existing ? Joi.string().required() : Joi.string(),
name: Joi.string().required(),
- type: Joi.string().valid("workflow").required(),
+ type: Joi.string().valid("automation").required(),
definition: Joi.object({
steps: Joi.array().required().items(generateStepSchema(["ACTION", "LOGIC"])),
trigger: generateStepSchema(["TRIGGER"]),
@@ -40,40 +40,40 @@ function generateValidator(existing = false) {
router
.get(
- "/api/workflows/trigger/list",
+ "/api/automations/trigger/list",
authorized(BUILDER),
controller.getTriggerList
)
.get(
- "/api/workflows/action/list",
+ "/api/automations/action/list",
authorized(BUILDER),
controller.getActionList
)
.get(
- "/api/workflows/logic/list",
+ "/api/automations/logic/list",
authorized(BUILDER),
controller.getLogicList
)
.get(
- "/api/workflows/definitions/list",
+ "/api/automations/definitions/list",
authorized(BUILDER),
controller.getDefinitionList
)
- .get("/api/workflows", authorized(BUILDER), controller.fetch)
- .get("/api/workflows/:id", authorized(BUILDER), controller.find)
+ .get("/api/automations", authorized(BUILDER), controller.fetch)
+ .get("/api/automations/:id", authorized(BUILDER), controller.find)
.put(
- "/api/workflows",
+ "/api/automations",
authorized(BUILDER),
generateValidator(true),
controller.update
)
.post(
- "/api/workflows",
+ "/api/automations",
authorized(BUILDER),
generateValidator(false),
controller.create
)
- .post("/api/workflows/:id/trigger", controller.trigger)
- .delete("/api/workflows/:id/:rev", authorized(BUILDER), controller.destroy)
+ .post("/api/automations/:id/trigger", controller.trigger)
+ .delete("/api/automations/:id/:rev", authorized(BUILDER), controller.destroy)
module.exports = router
diff --git a/packages/server/src/api/routes/index.js b/packages/server/src/api/routes/index.js
index 36dcdcd630..a2b8d3bb6c 100644
--- a/packages/server/src/api/routes/index.js
+++ b/packages/server/src/api/routes/index.js
@@ -9,7 +9,7 @@ const recordRoutes = require("./record")
const viewRoutes = require("./view")
const staticRoutes = require("./static")
const componentRoutes = require("./component")
-const workflowRoutes = require("./workflow")
+const automationRoutes = require("./automation")
const accesslevelRoutes = require("./accesslevel")
const deployRoutes = require("./deploy")
const apiKeysRoutes = require("./apikeys")
@@ -27,7 +27,7 @@ module.exports = {
viewRoutes,
staticRoutes,
componentRoutes,
- workflowRoutes,
+ automationRoutes,
accesslevelRoutes,
apiKeysRoutes,
}
diff --git a/packages/server/src/api/routes/static.js b/packages/server/src/api/routes/static.js
index 6fff1996fa..0ce6a62668 100644
--- a/packages/server/src/api/routes/static.js
+++ b/packages/server/src/api/routes/static.js
@@ -2,6 +2,8 @@ const Router = require("@koa/router")
const controller = require("../controllers/static")
const { budibaseTempDir } = require("../../utilities/budibaseDir")
const env = require("../../environment")
+const authorized = require("../../middleware/authorized")
+const { BUILDER } = require("../../utilities/accessLevels")
const router = Router()
@@ -21,8 +23,14 @@ if (env.NODE_ENV !== "production") {
}
router
+ .post(
+ "/api/attachments/process",
+ authorized(BUILDER),
+ controller.processLocalFileUpload
+ )
.get("/componentlibrary", controller.serveComponentLibrary)
.get("/assets/:file*", controller.serveAppAsset)
+ .get("/attachments/:file*", controller.serveAttachment)
.get("/:appId/:path*", controller.serveApp)
module.exports = router
diff --git a/packages/server/src/api/routes/tests/workflow.spec.js b/packages/server/src/api/routes/tests/automation.spec.js
similarity index 63%
rename from packages/server/src/api/routes/tests/workflow.spec.js
rename to packages/server/src/api/routes/tests/automation.spec.js
index 8e0f79a9a6..18730acad6 100644
--- a/packages/server/src/api/routes/tests/workflow.spec.js
+++ b/packages/server/src/api/routes/tests/automation.spec.js
@@ -13,9 +13,9 @@ const {
const { delay } = require("./testUtils")
-const TEST_WORKFLOW = {
- _id: "Test Workflow",
- name: "My Workflow",
+const TEST_AUTOMATION = {
+ _id: "Test Automation",
+ name: "My Automation",
pageId: "123123123",
screenId: "kasdkfldsafkl",
live: true,
@@ -27,20 +27,20 @@ const TEST_WORKFLOW = {
steps: [
],
},
- type: "workflow",
+ type: "automation",
}
let ACTION_DEFINITIONS = {}
let TRIGGER_DEFINITIONS = {}
let LOGIC_DEFINITIONS = {}
-describe("/workflows", () => {
+describe("/automations", () => {
let request
let server
let app
let instance
- let workflow
- let workflowId
+ let automation
+ let automationId
beforeAll(async () => {
({ request, server } = await supertest())
@@ -49,7 +49,7 @@ describe("/workflows", () => {
})
beforeEach(async () => {
- if (workflow) await destroyDocument(workflow.id)
+ if (automation) await destroyDocument(automation.id)
instance = await createInstance(request, app._id)
})
@@ -57,18 +57,18 @@ describe("/workflows", () => {
server.close()
})
- const createWorkflow = async () => {
- workflow = await insertDocument(instance._id, {
- type: "workflow",
- ...TEST_WORKFLOW
+ const createAutomation = async () => {
+ automation = await insertDocument(instance._id, {
+ type: "automation",
+ ...TEST_AUTOMATION
})
- workflow = { ...workflow, ...TEST_WORKFLOW }
+ automation = { ...automation, ...TEST_AUTOMATION }
}
describe("get definitions", () => {
it("returns a list of definitions for actions", async () => {
const res = await request
- .get(`/api/workflows/action/list`)
+ .get(`/api/automations/action/list`)
.set(defaultHeaders(app._id, instance._id))
.expect('Content-Type', /json/)
.expect(200)
@@ -79,7 +79,7 @@ describe("/workflows", () => {
it("returns a list of definitions for triggers", async () => {
const res = await request
- .get(`/api/workflows/trigger/list`)
+ .get(`/api/automations/trigger/list`)
.set(defaultHeaders(app._id, instance._id))
.expect('Content-Type', /json/)
.expect(200)
@@ -90,7 +90,7 @@ describe("/workflows", () => {
it("returns a list of definitions for actions", async () => {
const res = await request
- .get(`/api/workflows/logic/list`)
+ .get(`/api/automations/logic/list`)
.set(defaultHeaders(app._id, instance._id))
.expect('Content-Type', /json/)
.expect(200)
@@ -101,7 +101,7 @@ describe("/workflows", () => {
it("returns all of the definitions in one", async () => {
const res = await request
- .get(`/api/workflows/definitions/list`)
+ .get(`/api/automations/definitions/list`)
.set(defaultHeaders(app._id, instance._id))
.expect('Content-Type', /json/)
.expect(200)
@@ -113,7 +113,7 @@ describe("/workflows", () => {
})
describe("create", () => {
- it("should setup the workflow fully", () => {
+ it("should setup the automation fully", () => {
let trigger = TRIGGER_DEFINITIONS["RECORD_SAVED"]
trigger.id = "wadiawdo34"
let saveAction = ACTION_DEFINITIONS["SAVE_RECORD"]
@@ -123,51 +123,51 @@ describe("/workflows", () => {
}
saveAction.id = "awde444wk"
- TEST_WORKFLOW.definition.steps.push(saveAction)
- TEST_WORKFLOW.definition.trigger = trigger
+ TEST_AUTOMATION.definition.steps.push(saveAction)
+ TEST_AUTOMATION.definition.trigger = trigger
})
- it("returns a success message when the workflow is successfully created", async () => {
+ it("returns a success message when the automation is successfully created", async () => {
const res = await request
- .post(`/api/workflows`)
+ .post(`/api/automations`)
.set(defaultHeaders(app._id, instance._id))
- .send(TEST_WORKFLOW)
+ .send(TEST_AUTOMATION)
.expect('Content-Type', /json/)
.expect(200)
- expect(res.body.message).toEqual("Workflow created successfully")
- expect(res.body.workflow.name).toEqual("My Workflow")
- expect(res.body.workflow._id).not.toEqual(null)
- workflowId = res.body.workflow._id
+ expect(res.body.message).toEqual("Automation created successfully")
+ expect(res.body.automation.name).toEqual("My Automation")
+ expect(res.body.automation._id).not.toEqual(null)
+ automationId = res.body.automation._id
})
it("should apply authorization to endpoint", async () => {
await builderEndpointShouldBlockNormalUsers({
request,
method: "POST",
- url: `/api/workflows`,
+ url: `/api/automations`,
instanceId: instance._id,
appId: app._id,
- body: TEST_WORKFLOW
+ body: TEST_AUTOMATION
})
})
})
describe("trigger", () => {
- it("trigger the workflow successfully", async () => {
+ it("trigger the automation successfully", async () => {
let model = await createModel(request, app._id, instance._id)
- TEST_WORKFLOW.definition.trigger.inputs.modelId = model._id
- TEST_WORKFLOW.definition.steps[0].inputs.record.modelId = model._id
- await createWorkflow()
+ TEST_AUTOMATION.definition.trigger.inputs.modelId = model._id
+ TEST_AUTOMATION.definition.steps[0].inputs.record.modelId = model._id
+ await createAutomation()
const res = await request
- .post(`/api/workflows/${workflow._id}/trigger`)
+ .post(`/api/automations/${automation._id}/trigger`)
.send({ name: "Test" })
.set(defaultHeaders(app._id, instance._id))
.expect('Content-Type', /json/)
.expect(200)
- expect(res.body.message).toEqual(`Workflow ${workflow._id} has been triggered.`)
- expect(res.body.workflow.name).toEqual(TEST_WORKFLOW.name)
- // wait for workflow to complete in background
+ expect(res.body.message).toEqual(`Automation ${automation._id} has been triggered.`)
+ expect(res.body.automation.name).toEqual(TEST_AUTOMATION.name)
+ // wait for automation to complete in background
await delay(500)
let elements = await getAllFromModel(request, app._id, instance._id, model._id)
expect(elements.length).toEqual(1)
@@ -177,42 +177,42 @@ describe("/workflows", () => {
})
describe("update", () => {
- it("updates a workflows data", async () => {
- await createWorkflow()
- workflow._id = workflow.id
- workflow._rev = workflow.rev
- workflow.name = "Updated Name"
- workflow.type = "workflow"
+ it("updates a automations data", async () => {
+ await createAutomation()
+ automation._id = automation.id
+ automation._rev = automation.rev
+ automation.name = "Updated Name"
+ automation.type = "automation"
const res = await request
- .put(`/api/workflows`)
+ .put(`/api/automations`)
.set(defaultHeaders(app._id, instance._id))
- .send(workflow)
+ .send(automation)
.expect('Content-Type', /json/)
.expect(200)
- expect(res.body.message).toEqual("Workflow Test Workflow updated successfully.")
- expect(res.body.workflow.name).toEqual("Updated Name")
+ expect(res.body.message).toEqual("Automation Test Automation updated successfully.")
+ expect(res.body.automation.name).toEqual("Updated Name")
})
})
describe("fetch", () => {
- it("return all the workflows for an instance", async () => {
- await createWorkflow()
+ it("return all the automations for an instance", async () => {
+ await createAutomation()
const res = await request
- .get(`/api/workflows`)
+ .get(`/api/automations`)
.set(defaultHeaders(app._id, instance._id))
.expect('Content-Type', /json/)
.expect(200)
- expect(res.body[0]).toEqual(expect.objectContaining(TEST_WORKFLOW))
+ expect(res.body[0]).toEqual(expect.objectContaining(TEST_AUTOMATION))
})
it("should apply authorization to endpoint", async () => {
await builderEndpointShouldBlockNormalUsers({
request,
method: "GET",
- url: `/api/workflows`,
+ url: `/api/automations`,
instanceId: instance._id,
appId: app._id,
})
@@ -220,23 +220,23 @@ describe("/workflows", () => {
})
describe("destroy", () => {
- it("deletes a workflow by its ID", async () => {
- await createWorkflow()
+ it("deletes a automation by its ID", async () => {
+ await createAutomation()
const res = await request
- .delete(`/api/workflows/${workflow.id}/${workflow.rev}`)
+ .delete(`/api/automations/${automation.id}/${automation.rev}`)
.set(defaultHeaders(app._id, instance._id))
.expect('Content-Type', /json/)
.expect(200)
- expect(res.body.id).toEqual(TEST_WORKFLOW._id)
+ expect(res.body.id).toEqual(TEST_AUTOMATION._id)
})
it("should apply authorization to endpoint", async () => {
- await createWorkflow()
+ await createAutomation()
await builderEndpointShouldBlockNormalUsers({
request,
method: "DELETE",
- url: `/api/workflows/${workflow.id}/${workflow._rev}`,
+ url: `/api/automations/${automation.id}/${automation._rev}`,
instanceId: instance._id,
appId: app._id,
})
diff --git a/packages/server/src/app.js b/packages/server/src/app.js
index 5f720ad865..7560c9cfa4 100644
--- a/packages/server/src/app.js
+++ b/packages/server/src/app.js
@@ -6,7 +6,7 @@ const http = require("http")
const api = require("./api")
const env = require("./environment")
const eventEmitter = require("./events")
-const workflows = require("./workflows/index")
+const automations = require("./automations/index")
const Sentry = require("@sentry/node")
const app = new Koa()
@@ -50,5 +50,5 @@ process.on("SIGINT", () => process.exit(1))
module.exports = server.listen(env.PORT || 4001, () => {
console.log(`Budibase running on ${JSON.stringify(server.address())}`)
- workflows.init()
+ automations.init()
})
diff --git a/packages/server/src/workflows/actions.js b/packages/server/src/automations/actions.js
similarity index 100%
rename from packages/server/src/workflows/actions.js
rename to packages/server/src/automations/actions.js
diff --git a/packages/server/src/workflows/index.js b/packages/server/src/automations/index.js
similarity index 93%
rename from packages/server/src/workflows/index.js
rename to packages/server/src/automations/index.js
index fc8c10e373..e419985ce2 100644
--- a/packages/server/src/workflows/index.js
+++ b/packages/server/src/automations/index.js
@@ -23,7 +23,7 @@ function runWorker(job) {
*/
module.exports.init = function() {
actions.init().then(() => {
- triggers.workflowQueue.process(async job => {
+ triggers.automationQueue.process(async job => {
if (environment.BUDIBASE_ENVIRONMENT === "PRODUCTION") {
await runWorker(job)
} else {
diff --git a/packages/server/src/workflows/logic.js b/packages/server/src/automations/logic.js
similarity index 100%
rename from packages/server/src/workflows/logic.js
rename to packages/server/src/automations/logic.js
diff --git a/packages/server/src/workflows/queue/inMemoryQueue.js b/packages/server/src/automations/queue/inMemoryQueue.js
similarity index 100%
rename from packages/server/src/workflows/queue/inMemoryQueue.js
rename to packages/server/src/automations/queue/inMemoryQueue.js
diff --git a/packages/server/src/workflows/steps/createUser.js b/packages/server/src/automations/steps/createUser.js
similarity index 99%
rename from packages/server/src/workflows/steps/createUser.js
rename to packages/server/src/automations/steps/createUser.js
index fe5267c963..8633c861ee 100644
--- a/packages/server/src/workflows/steps/createUser.js
+++ b/packages/server/src/automations/steps/createUser.js
@@ -82,4 +82,4 @@ module.exports.run = async function({ inputs, instanceId }) {
response: err,
}
}
-}
\ No newline at end of file
+}
diff --git a/packages/server/src/workflows/steps/delay.js b/packages/server/src/automations/steps/delay.js
similarity index 87%
rename from packages/server/src/workflows/steps/delay.js
rename to packages/server/src/automations/steps/delay.js
index b8e1cfbed7..73483a5bc9 100644
--- a/packages/server/src/workflows/steps/delay.js
+++ b/packages/server/src/automations/steps/delay.js
@@ -4,7 +4,7 @@ module.exports.definition = {
name: "Delay",
icon: "ri-time-fill",
tagline: "Delay for {{inputs.time}} milliseconds",
- description: "Delay the workflow until an amount of time has passed",
+ description: "Delay the automation until an amount of time has passed",
stepId: "DELAY",
inputs: {},
schema: {
diff --git a/packages/server/src/workflows/steps/deleteRecord.js b/packages/server/src/automations/steps/deleteRecord.js
similarity index 100%
rename from packages/server/src/workflows/steps/deleteRecord.js
rename to packages/server/src/automations/steps/deleteRecord.js
diff --git a/packages/server/src/workflows/steps/filter.js b/packages/server/src/automations/steps/filter.js
similarity index 96%
rename from packages/server/src/workflows/steps/filter.js
rename to packages/server/src/automations/steps/filter.js
index fd2e57282e..d6aa5eb522 100644
--- a/packages/server/src/workflows/steps/filter.js
+++ b/packages/server/src/automations/steps/filter.js
@@ -16,7 +16,7 @@ module.exports.definition = {
name: "Filter",
tagline: "{{inputs.field}} {{inputs.condition}} {{inputs.value}}",
icon: "ri-git-branch-line",
- description: "Filter any workflows which do not meet certain conditions",
+ description: "Filter any automations which do not meet certain conditions",
type: "LOGIC",
stepId: "FILTER",
inputs: {
diff --git a/packages/server/src/workflows/steps/saveRecord.js b/packages/server/src/automations/steps/saveRecord.js
similarity index 92%
rename from packages/server/src/workflows/steps/saveRecord.js
rename to packages/server/src/automations/steps/saveRecord.js
index 7fec84e781..7c571e5678 100644
--- a/packages/server/src/workflows/steps/saveRecord.js
+++ b/packages/server/src/automations/steps/saveRecord.js
@@ -28,6 +28,11 @@ module.exports.definition = {
},
outputs: {
properties: {
+ record: {
+ type: "object",
+ customType: "record",
+ description: "The new record",
+ },
response: {
type: "object",
description: "The response from the table",
@@ -69,6 +74,7 @@ module.exports.run = async function({ inputs, instanceId }) {
try {
await recordController.save(ctx)
return {
+ record: inputs.record,
response: ctx.body,
id: ctx.body._id,
revision: ctx.body._rev,
diff --git a/packages/server/src/workflows/steps/sendEmail.js b/packages/server/src/automations/steps/sendEmail.js
similarity index 100%
rename from packages/server/src/workflows/steps/sendEmail.js
rename to packages/server/src/automations/steps/sendEmail.js
diff --git a/packages/server/src/workflows/thread.js b/packages/server/src/automations/thread.js
similarity index 82%
rename from packages/server/src/workflows/thread.js
rename to packages/server/src/automations/thread.js
index 7fa0edc7db..f8a9509996 100644
--- a/packages/server/src/workflows/thread.js
+++ b/packages/server/src/automations/thread.js
@@ -42,18 +42,18 @@ function recurseMustache(inputs, context) {
}
/**
- * The workflow orchestrator is a class responsible for executing workflows.
- * It handles the context of the workflow and makes sure each step gets the correct
+ * The automation orchestrator is a class responsible for executing automations.
+ * It handles the context of the automation and makes sure each step gets the correct
* inputs and handles any outputs.
*/
class Orchestrator {
- constructor(workflow, triggerOutput) {
+ constructor(automation, triggerOutput) {
this._instanceId = triggerOutput.instanceId
// remove from context
delete triggerOutput.instanceId
// step zero is never used as the mustache is zero indexed for customer facing
this._context = { steps: [{}], trigger: triggerOutput }
- this._workflow = workflow
+ this._automation = automation
}
async getStepFunctionality(type, stepId) {
@@ -64,14 +64,14 @@ class Orchestrator {
step = logic.getLogic(stepId)
}
if (step == null) {
- throw `Cannot find workflow step by name ${stepId}`
+ throw `Cannot find automation step by name ${stepId}`
}
return step
}
async execute() {
- let workflow = this._workflow
- for (let step of workflow.definition.steps) {
+ let automation = this._automation
+ for (let step of automation.definition.steps) {
let stepFn = await this.getStepFunctionality(step.type, step.stepId)
step.inputs = recurseMustache(step.inputs, this._context)
// instanceId is always passed
@@ -90,11 +90,11 @@ class Orchestrator {
// callback is required for worker-farm to state that the worker thread has completed
module.exports = async (job, cb = null) => {
try {
- const workflowOrchestrator = new Orchestrator(
- job.data.workflow,
+ const automationOrchestrator = new Orchestrator(
+ job.data.automation,
job.data.event
)
- await workflowOrchestrator.execute()
+ await automationOrchestrator.execute()
if (cb) {
cb()
}
diff --git a/packages/server/src/workflows/triggers.js b/packages/server/src/automations/triggers.js
similarity index 72%
rename from packages/server/src/workflows/triggers.js
rename to packages/server/src/automations/triggers.js
index 7cc7a42c09..e4e578c04d 100644
--- a/packages/server/src/workflows/triggers.js
+++ b/packages/server/src/automations/triggers.js
@@ -2,7 +2,7 @@ const CouchDB = require("../db")
const emitter = require("../events/index")
const InMemoryQueue = require("./queue/inMemoryQueue")
-let workflowQueue = new InMemoryQueue()
+let automationQueue = new InMemoryQueue()
const FAKE_STRING = "TEST"
const FAKE_BOOL = false
@@ -76,28 +76,31 @@ const BUILTIN_DEFINITIONS = {
},
}
-async function queueRelevantRecordWorkflows(event, eventType) {
+async function queueRelevantRecordAutomations(event, eventType) {
if (event.instanceId == null) {
throw `No instanceId specified for ${eventType} - check event emitters.`
}
const db = new CouchDB(event.instanceId)
- const workflowsToTrigger = await db.query("database/by_workflow_trigger", {
- key: [eventType],
- include_docs: true,
- })
+ const automationsToTrigger = await db.query(
+ "database/by_automation_trigger",
+ {
+ key: [eventType],
+ include_docs: true,
+ }
+ )
- const workflows = workflowsToTrigger.rows.map(wf => wf.doc)
- for (let workflow of workflows) {
- let workflowDef = workflow.definition
- let workflowTrigger = workflowDef ? workflowDef.trigger : {}
+ const automations = automationsToTrigger.rows.map(wf => wf.doc)
+ for (let automation of automations) {
+ let automationDef = automation.definition
+ let automationTrigger = automationDef ? automationDef.trigger : {}
if (
- !workflow.live ||
- !workflowTrigger.inputs ||
- workflowTrigger.inputs.modelId !== event.record.modelId
+ !automation.live ||
+ !automationTrigger.inputs ||
+ automationTrigger.inputs.modelId !== event.record.modelId
) {
continue
}
- workflowQueue.add({ workflow, event })
+ automationQueue.add({ automation, event })
}
}
@@ -105,18 +108,18 @@ emitter.on("record:save", async function(event) {
if (!event || !event.record || !event.record.modelId) {
return
}
- await queueRelevantRecordWorkflows(event, "record:save")
+ await queueRelevantRecordAutomations(event, "record:save")
})
emitter.on("record:delete", async function(event) {
if (!event || !event.record || !event.record.modelId) {
return
}
- await queueRelevantRecordWorkflows(event, "record:delete")
+ await queueRelevantRecordAutomations(event, "record:delete")
})
-async function fillRecordOutput(workflow, params) {
- let triggerSchema = workflow.definition.trigger
+async function fillRecordOutput(automation, params) {
+ let triggerSchema = automation.definition.trigger
let modelId = triggerSchema.inputs.modelId
const db = new CouchDB(params.instanceId)
try {
@@ -147,19 +150,19 @@ async function fillRecordOutput(workflow, params) {
return params
}
-module.exports.externalTrigger = async function(workflow, params) {
+module.exports.externalTrigger = async function(automation, params) {
// TODO: replace this with allowing user in builder to input values in future
if (
- workflow.definition != null &&
- workflow.definition.trigger != null &&
- workflow.definition.trigger.inputs.modelId != null
+ automation.definition != null &&
+ automation.definition.trigger != null &&
+ automation.definition.trigger.inputs.modelId != null
) {
- params = await fillRecordOutput(workflow, params)
+ params = await fillRecordOutput(automation, params)
}
- workflowQueue.add({ workflow, event: params })
+ automationQueue.add({ automation, event: params })
}
-module.exports.workflowQueue = workflowQueue
+module.exports.automationQueue = automationQueue
module.exports.BUILTIN_DEFINITIONS = BUILTIN_DEFINITIONS
diff --git a/packages/server/src/events/index.js b/packages/server/src/events/index.js
index f627532e09..2d6d2fa585 100644
--- a/packages/server/src/events/index.js
+++ b/packages/server/src/events/index.js
@@ -2,7 +2,7 @@ const EventEmitter = require("events").EventEmitter
/**
* keeping event emitter in one central location as it might be used for things other than
- * workflows (what it was for originally) - having a central emitter will be useful in the
+ * automations (what it was for originally) - having a central emitter will be useful in the
* future.
*/
diff --git a/packages/server/src/utilities/accessLevels.js b/packages/server/src/utilities/accessLevels.js
index 3170afc461..0de8e85ffb 100644
--- a/packages/server/src/utilities/accessLevels.js
+++ b/packages/server/src/utilities/accessLevels.js
@@ -2,7 +2,7 @@
module.exports.READ_MODEL = "read-model"
module.exports.WRITE_MODEL = "write-model"
module.exports.READ_VIEW = "read-view"
-module.exports.EXECUTE_WORKFLOW = "execute-workflow"
+module.exports.EXECUTE_AUTOMATION = "execute-automation"
module.exports.USER_MANAGEMENT = "user-management"
module.exports.BUILDER = "builder"
module.exports.LIST_USERS = "list-users"
@@ -32,4 +32,5 @@ module.exports.adminPermissions = [
// to avoid circular dependencies this is included later, after exporting all enums
const permissions = require("./permissions")
module.exports.generateAdminPermissions = permissions.generateAdminPermissions
-module.exports.generatePowerUserPermissions = permissions.generatePowerUserPermissions
+module.exports.generatePowerUserPermissions =
+ permissions.generatePowerUserPermissions
diff --git a/packages/server/src/utilities/fileProcessor.js b/packages/server/src/utilities/fileProcessor.js
new file mode 100644
index 0000000000..3e580e9e37
--- /dev/null
+++ b/packages/server/src/utilities/fileProcessor.js
@@ -0,0 +1,30 @@
+const fs = require("fs")
+const sharp = require("sharp")
+const fsPromises = fs.promises
+
+const FORMATS = {
+ IMAGES: ["png", "jpg", "jpeg", "gif", "svg", "tiff", "raw"],
+}
+
+async function processImage(file) {
+ const imgMeta = await sharp(file.path)
+ .resize(300)
+ .toFile(file.outputPath)
+
+ return {
+ ...file,
+ ...imgMeta,
+ }
+}
+
+async function process(file) {
+ if (FORMATS.IMAGES.includes(file.extension.toLowerCase())) {
+ return await processImage(file)
+ }
+
+ // No processing required
+ await fsPromises.copyFile(file.path, file.outputPath)
+ return file
+}
+
+exports.process = process
diff --git a/packages/server/src/utilities/permissions.js b/packages/server/src/utilities/permissions.js
index 0c5b2603f3..aa7ce12bcb 100644
--- a/packages/server/src/utilities/permissions.js
+++ b/packages/server/src/utilities/permissions.js
@@ -1,6 +1,6 @@
const viewController = require("../api/controllers/view")
const modelController = require("../api/controllers/model")
-const workflowController = require("../api/controllers/workflow")
+const automationController = require("../api/controllers/automation")
const accessLevels = require("./accessLevels")
// this has been broken out to reduce risk of circular dependency from utilities, no enums defined here
@@ -26,13 +26,13 @@ const generatePowerUserPermissions = async instanceId => {
await viewController.fetch(fetchViewsCtx)
const views = fetchViewsCtx.body
- const fetchWorkflowsCtx = {
+ const fetchAutomationsCtx = {
user: {
instanceId,
},
}
- await workflowController.fetch(fetchWorkflowsCtx)
- const workflows = fetchWorkflowsCtx.body
+ await automationController.fetch(fetchAutomationsCtx)
+ const automations = fetchAutomationsCtx.body
const readModelPermissions = models.map(m => ({
itemId: m._id,
@@ -49,16 +49,16 @@ const generatePowerUserPermissions = async instanceId => {
name: accessLevels.READ_VIEW,
}))
- const executeWorkflowPermissions = workflows.map(w => ({
+ const executeAutomationPermissions = automations.map(w => ({
itemId: w._id,
- name: accessLevels.EXECUTE_WORKFLOW,
+ name: accessLevels.EXECUTE_AUTOMATION,
}))
return [
...readModelPermissions,
...writeModelPermissions,
...viewPermissions,
- ...executeWorkflowPermissions,
+ ...executeAutomationPermissions,
{ name: accessLevels.LIST_USERS },
]
}
diff --git a/packages/standard-components/components.json b/packages/standard-components/components.json
index d5f0557e56..e600b264be 100644
--- a/packages/standard-components/components.json
+++ b/packages/standard-components/components.json
@@ -199,11 +199,9 @@
"icon": {
"description": "A HTML icon tag",
"props": {
- "url": "string",
- "className": "string",
- "description": "string",
- "height": "string",
- "width": "string"
+ "icon": "string",
+ "size": {"type": "string", "default": "fa-lg"},
+ "color": {"type": "string", "default": "#000"}
}
},
"datatable": {
diff --git a/packages/standard-components/package.json b/packages/standard-components/package.json
index d93df1788d..7048f9af63 100644
--- a/packages/standard-components/package.json
+++ b/packages/standard-components/package.json
@@ -36,7 +36,8 @@
"gitHead": "284cceb9b703c38566c6e6363c022f79a08d5691",
"dependencies": {
"@beyonk/svelte-googlemaps": "^2.2.0",
- "@budibase/bbui": "^1.32.0",
+ "@fortawesome/fontawesome-free": "^5.14.0",
+ "@budibase/bbui": "^1.34.2",
"britecharts": "^2.16.1",
"d3-selection": "^1.4.2",
"fast-sort": "^2.2.0",
diff --git a/packages/standard-components/src/Icon.svelte b/packages/standard-components/src/Icon.svelte
index f220d3c8f9..c877a024dc 100644
--- a/packages/standard-components/src/Icon.svelte
+++ b/packages/standard-components/src/Icon.svelte
@@ -1,9 +1,9 @@
-
-
-
+
+
+
diff --git a/packages/standard-components/src/IconOld.svelte b/packages/standard-components/src/IconOld.svelte
new file mode 100644
index 0000000000..f220d3c8f9
--- /dev/null
+++ b/packages/standard-components/src/IconOld.svelte
@@ -0,0 +1,9 @@
+
+
+
diff --git a/packages/standard-components/src/index.js b/packages/standard-components/src/index.js
index 63c6b7c02e..0ce5088cb8 100644
--- a/packages/standard-components/src/index.js
+++ b/packages/standard-components/src/index.js
@@ -14,7 +14,6 @@ export { default as login } from "./Login.svelte"
export { default as saveRecordButton } from "./Templates/saveRecordButton"
export { default as link } from "./Link.svelte"
export { default as image } from "./Image.svelte"
-export { default as icon } from "./Icon.svelte"
export { default as Navigation } from "./Navigation.svelte"
export { default as datatable } from "./DataTable.svelte"
export { default as dataform } from "./DataForm.svelte"
@@ -30,3 +29,4 @@ export { default as cardhorizontal } from "./CardHorizontal.svelte"
export { default as recorddetail } from "./RecordDetail.svelte"
export { default as datepicker } from "./DatePicker.svelte"
export * from "./Chart"
+export { default as icon } from "./Icon.svelte"
diff --git a/yarn.lock b/yarn.lock
index af62734259..8c37dc6f01 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -79,6 +79,16 @@
lodash "^4.17.13"
to-fast-properties "^2.0.0"
+"@fortawesome/fontawesome-common-types@^0.1.7":
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.1.7.tgz#4336c4b06d0b5608ff1215464b66fcf9f4795284"
+
+"@fortawesome/fontawesome@^1.1.8":
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome/-/fontawesome-1.1.8.tgz#75fe66a60f95508160bb16bd781ad7d89b280f5b"
+ dependencies:
+ "@fortawesome/fontawesome-common-types" "^0.1.7"
+
"@lerna/add@3.14.0":
version "3.14.0"
resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.14.0.tgz#799d416e67d48c285967abf883be746557aefa48"