From cfa91cda27a96281afa128f0b788d35bec785c3e Mon Sep 17 00:00:00 2001 From: Oliver Trajceski Date: Mon, 28 Feb 2022 10:57:44 +0100 Subject: [PATCH] :sparkles: Add Templates (#2720) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Templates Bugs / Fixed Various Bugs / Multiply Api Request, Carousel Gradient, Core Nodes Filters ... * Updated MainSidebar Paddings * N8N-Templates Bugfixing - Remove Unnecesairy Icon (Shape), Refatctor infiniteScrollEnabled Prop + updated infiniterScroll functinality * N8N-2853 Fixed Carousel Arrows Bug after Cleaning the SearchBar * fix telemetry init * fix search tracking issues * N8N-2853 Created FilterTemplateNode Constant Array, Filter PlayButton and WebhookRespond from Nodes, Added Box for showing more nodes inside TemplateList, Updated NewWorkflowButton to primary, Fixed Markdown issue with Code * N8N-2853 Removed Placeholder if Workflows Or Collections are not found, Updated the Logic * fix telemetry events * clean up session id * update user inserted event * N8N-2853 Fixed Categories to Moving if the names are long * Add todos * Update Routes on loading * fix spacing * Update Border Color * Update Border Readius * fix filter fn * fix constant, console error * N8N-2853 PR Fixes, Refactoring, Removing unnecesairy code .. * N8N-2853 PR Fixes - Editor-ui Fixes, Refactoring, Removing Dead Code ... * N8N-2853 Refactor Card to LongCard * clean up spacing, replace css var * clean up spacing * set categories as optional in node * replace vars * refactor store * remove unnesssary import * fix error * fix templates view to start * add to cache * fix coll view data * fix categories * fix category event * fix collections carousel * fix initial load and search * fix infinite load * fix query param * fix scrolling issues * fix scroll to top * fix search * fix collections search * fix navigation bug * rename view * update package lock * rename workflow view * rename coll view * update routes * add wrapper component * set session id * fix search tracking * fix session tracking * remove deleted mutation * remove check for unsupported nodes * refactor filters * lazy load template * clean up types * refactor infinte scroll * fix end of search * Fix spacing * fix coll loading * fix types * fix coll view list * fix navigation * rename types * rename state * fix search responsiveness * fix coll view spacing * fix search view spacing * clean up views * set background color * center page not vert * fix workflow view * remove import * fix background color * fix background * clean props * clean up imports * refactor button * update background color * fix spacing issue * rename event * update telemetry event * update endpoints, add loading view, check for endpoint health * remove conolse log * N8N-2853 Fixed Menu Items Padding * replace endpoints * fix type issues * fix categories * N8N-2853 Fixed ParameterInput Placeholder after ElementUI Upgrade * update createdAt * :zap: Fix placeholder in creds config modal * :pencil2: Adjust docstring to `credText` placeholder version * N8N-2853 Optimized * N8N-2853 Optimized code * :zap: Add deployment type to FE settings * :zap: Add deployment type to interfaces * N8N-2853 Removed Animated prop from components * :zap: Add deployment type to store module * :sparkles: Create hiring banner * :zap: Display hiring banner * :rewind: Undo unrelated change * N8N-2853 Refactor TemplateFilters * :zap: Fix indentation * N8N-2853 Reorder items / TemplateList * :shirt: Fix lint * N8N-2853 Refactor TemplateFilters Component * N8N-2853 Reorder TemplateList * refactor template card * update timeout * fix removelistener * fix spacing * split enabled from offline * add spacing to go back * N8N-2853 Fixed Screens for Tablet & Mobile * N8N-2853 Update Stores Order * remove image componet * remove placeholder changes * N8N-2853 Fixed Chinnese Placeholders for El Select Component that comes from the Library Upgrade * N8N-2853 Fixed Vue Agile Console Warnings * N8N-2853 Update Collection Route * :pencil2: Update jobs URL * :truck: Move logging to root component * :zap: Refactor `deploymentType` to `isInternalUser` * :zap: Improve syntax * fix cut bug in readonly view * N8N-3012 Fixed Details section in templates with lots of description, Fixed Mardown Block with overflox-x * N8N-3012 Increased Font-size, Spacing and Line-height of the Categories Items * N8N-3012 Fixed Vue-agile client width error on resize * only delay redirect for root path * N8N-3012 Fixed Carousel Arrows that Disappear * N8N-3012 Make Loading Screen same color as Templates * N8N-3012 Markdown renders inline block as block code * add offline warning * hide log from workflow iframe * update text * make search button larger * N8N-3012 Categories / Tags extended all the way in details section * load data in cred modals * remove deleted message * add external hook * remove import * update env variable description * fix markdown width issue * disable telemetry for demo, add session id to template pages * fix telemetery bugs * N8N-3012 Not found Collections/Wokrkflow * N8N-3012 Checkboxes change order when categories are changed * N8N-3012 Refactor SortedCategories inside TemplateFilters component * fix firefox bug * add telemetry requirements * add error check * N8N-3012 Update GoBackButton to check if Route History is present * N8N-3012 Fixed WF Nodes Icons * hide workflow screenshots * remove unnessary mixins * rename prop * fix design a bit * rename data * clear workspace on destroy * fix copy paste bug * fix disabled state * N8N-3012 Fixed Saving/Leave without saving Modal * fix telemetry issue * fix telemetry issues, error bug * fix error notification * disable workflow menu items on templates * fix i18n elementui issue * Remove Emit - NodeType from HoverableNodeIcon component * TechnicalFixes: NavigateTo passed down as function should be helper * TechnicalFixes: Update NavigateTo function * TechnicalFixes: Add FilterCoreNodes directly as function * check for empty connecitions * fix titles * respect new lines * increase categories to be sliced * rename prop * onUseWorkflow * refactor click event * fix bug, refactor * fix loading story * add default * fix styles at right level of abstraction * add wrapper with width * remove loading blocks component * add story * rename prop * fix spacing * refactor tag, add story * move margin to container * fix tag redirect, remove unnessary check * make version optional * rename view * move from workflows to templates store * remove unnessary change * remove unnessary css * rename component * refactor collection card * add boolean to prevent shrink * clean up carousel * fix redirection bug on save * remove listeners to fix multiple listeners bug * remove unnessary types * clean up boolean set * fix node select bug * rename component * remove unnessary class * fix redirection bug * remove unnessary error * fix typo * fix blockquotes, pre * refactor markdown rendering * remove console log * escape markdown * fix safari bug * load active workflows to fix modal bug * :arrow_up: Update package-lock.json file * :zap: Add n8n version as header Co-authored-by: Mutasem Aldmour <4711238+mutdmour@users.noreply.github.com> Co-authored-by: Mutasem Co-authored-by: Iván Ovejero Co-authored-by: Jan Oberhauser --- package-lock.json | 523 +++++++++++------- packages/cli/config/index.ts | 15 + packages/cli/src/Interfaces.ts | 5 + packages/cli/src/Server.ts | 5 + .../.storybook/font-awesome-icons.js | 4 + packages/design-system/package.json | 12 +- .../components/N8nLoading/Loading.stories.js | 43 ++ .../src/components/N8nLoading/Loading.vue | 86 +++ .../src/components/N8nLoading/index.js | 3 + .../N8nMarkdown/Markdown.stories.js | 48 ++ .../src/components/N8nMarkdown/Markdown.vue | 220 ++++++++ .../src/components/N8nMarkdown/index.js | 3 + .../src/components/N8nTag/Tag.stories.js | 27 + .../src/components/N8nTag/Tag.vue | 25 + .../src/components/N8nTag/index.js | 3 + .../src/components/N8nTags/Tags.stories.js | 35 ++ .../src/components/N8nTags/Tags.vue | 32 ++ .../src/components/N8nTags/index.js | 3 + .../design-system/src/components/index.js | 8 + .../design-system/src/shims-element-ui.d.ts | 2 + packages/design-system/src/utils/markdown.ts | 12 + packages/design-system/theme/src/index.scss | 1 + .../design-system/theme/src/skeleton.scss | 82 +++ packages/editor-ui/package.json | 6 +- packages/editor-ui/src/App.vue | 113 +++- packages/editor-ui/src/Interface.ts | 93 +++- packages/editor-ui/src/api/settings.ts | 8 +- packages/editor-ui/src/api/templates.ts | 39 ++ packages/editor-ui/src/api/workflows.ts | 8 +- packages/editor-ui/src/components/Card.vue | 80 +++ .../src/components/CollectionCard.vue | 47 ++ .../src/components/CollectionsCarousel.vue | 181 ++++++ .../src/components/CredentialsList.vue | 17 +- .../src/components/CredentialsSelectModal.vue | 11 +- .../editor-ui/src/components/GoBackButton.vue | 55 ++ .../src/components/HoverableNodeIcon.vue | 176 ++++++ .../editor-ui/src/components/MainSidebar.vue | 80 ++- .../components/NodeCreator/NodeCreator.vue | 4 +- .../editor-ui/src/components/NodeList.vue | 111 ++++ .../src/components/ParameterInput.vue | 14 +- .../editor-ui/src/components/Telemetry.vue | 34 +- .../editor-ui/src/components/TemplateCard.vue | 176 ++++++ .../src/components/TemplateDetails.vue | 103 ++++ .../src/components/TemplateDetailsBlock.vue | 38 ++ .../src/components/TemplateFilters.vue | 151 +++++ .../editor-ui/src/components/TemplateList.vue | 116 ++++ .../editor-ui/src/components/WorkflowOpen.vue | 74 ++- .../src/components/WorkflowPreview.vue | 144 +++++ packages/editor-ui/src/components/helpers.ts | 32 +- .../src/components/mixins/copyPaste.ts | 79 ++- .../src/components/mixins/genericHelpers.ts | 3 +- .../src/components/mixins/showMessage.ts | 17 + .../src/components/mixins/workflowHelpers.ts | 27 +- packages/editor-ui/src/constants.ts | 33 +- packages/editor-ui/src/modules/credentials.ts | 6 + packages/editor-ui/src/modules/settings.ts | 22 + packages/editor-ui/src/modules/templates.ts | 282 ++++++++++ packages/editor-ui/src/modules/ui.ts | 7 + packages/editor-ui/src/modules/workflows.ts | 10 +- packages/editor-ui/src/n8n-theme.scss | 5 - packages/editor-ui/src/plugins/components.ts | 13 +- .../src/plugins/i18n/locales/en.json | 93 +++- packages/editor-ui/src/plugins/icons.ts | 6 + .../editor-ui/src/plugins/telemetry/index.ts | 39 +- packages/editor-ui/src/router.ts | 86 ++- packages/editor-ui/src/store.ts | 2 + packages/editor-ui/src/views/LoadingView.vue | 29 + packages/editor-ui/src/views/NodeView.vue | 108 ++-- .../src/views/TemplatesCollectionView.vue | 193 +++++++ .../src/views/TemplatesSearchView.vue | 396 +++++++++++++ .../editor-ui/src/views/TemplatesView.vue | 81 +++ .../src/views/TemplatesWorkflowView.vue | 194 +++++++ packages/editor-ui/src/vue-agile.d.ts | 1 + packages/editor-ui/vue.config.js | 2 + 74 files changed, 4409 insertions(+), 433 deletions(-) create mode 100644 packages/design-system/src/components/N8nLoading/Loading.stories.js create mode 100644 packages/design-system/src/components/N8nLoading/Loading.vue create mode 100644 packages/design-system/src/components/N8nLoading/index.js create mode 100644 packages/design-system/src/components/N8nMarkdown/Markdown.stories.js create mode 100644 packages/design-system/src/components/N8nMarkdown/Markdown.vue create mode 100644 packages/design-system/src/components/N8nMarkdown/index.js create mode 100644 packages/design-system/src/components/N8nTag/Tag.stories.js create mode 100644 packages/design-system/src/components/N8nTag/Tag.vue create mode 100644 packages/design-system/src/components/N8nTag/index.js create mode 100644 packages/design-system/src/components/N8nTags/Tags.stories.js create mode 100644 packages/design-system/src/components/N8nTags/Tags.vue create mode 100644 packages/design-system/src/components/N8nTags/index.js create mode 100644 packages/design-system/src/utils/markdown.ts create mode 100644 packages/design-system/theme/src/skeleton.scss create mode 100644 packages/editor-ui/src/api/templates.ts create mode 100644 packages/editor-ui/src/components/Card.vue create mode 100644 packages/editor-ui/src/components/CollectionCard.vue create mode 100644 packages/editor-ui/src/components/CollectionsCarousel.vue create mode 100644 packages/editor-ui/src/components/GoBackButton.vue create mode 100644 packages/editor-ui/src/components/HoverableNodeIcon.vue create mode 100644 packages/editor-ui/src/components/NodeList.vue create mode 100644 packages/editor-ui/src/components/TemplateCard.vue create mode 100644 packages/editor-ui/src/components/TemplateDetails.vue create mode 100644 packages/editor-ui/src/components/TemplateDetailsBlock.vue create mode 100644 packages/editor-ui/src/components/TemplateFilters.vue create mode 100644 packages/editor-ui/src/components/TemplateList.vue create mode 100644 packages/editor-ui/src/components/WorkflowPreview.vue create mode 100644 packages/editor-ui/src/modules/templates.ts create mode 100644 packages/editor-ui/src/views/LoadingView.vue create mode 100644 packages/editor-ui/src/views/TemplatesCollectionView.vue create mode 100644 packages/editor-ui/src/views/TemplatesSearchView.vue create mode 100644 packages/editor-ui/src/views/TemplatesView.vue create mode 100644 packages/editor-ui/src/views/TemplatesWorkflowView.vue create mode 100644 packages/editor-ui/src/vue-agile.d.ts diff --git a/package-lock.json b/package-lock.json index e5e85fc76b..99461f2cd0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -300,9 +300,9 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", - "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", + "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", @@ -396,9 +396,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz", + "integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==", "requires": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", @@ -406,8 +406,8 @@ "@babel/helper-split-export-declaration": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" } }, "@babel/helper-optimise-call-expression": { @@ -553,11 +553,11 @@ } }, "@babel/plugin-proposal-class-static-block": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", - "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz", + "integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.17.6", "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" } @@ -9930,14 +9930,14 @@ "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==" }, "@oclif/parser": { - "version": "3.8.6", - "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", - "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "version": "3.8.7", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.7.tgz", + "integrity": "sha512-b11xBmIUK+LuuwVGJpFs4LwQN2xj2cBWj2c4z1FtiXGrJ85h9xV6q+k136Hw0tGg1jQoRXuvuBnqQ7es7vO9/Q==", "requires": { - "@oclif/errors": "^1.2.2", + "@oclif/errors": "^1.3.5", "@oclif/linewrap": "^1.0.0", "chalk": "^4.1.0", - "tslib": "^2.0.0" + "tslib": "^2.3.1" }, "dependencies": { "ansi-styles": { @@ -10812,6 +10812,11 @@ } } }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" + }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", @@ -11041,10 +11046,11 @@ } }, "terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.11.0.tgz", + "integrity": "sha512-uCA9DLanzzWSsN1UirKwylhhRz3aKPInlfmpGfw8VN6jHsAtu8HJtIpeeHHK23rxnE/cDc+yvmq5wqkIC6Kn0A==", "requires": { + "acorn": "^8.5.0", "commander": "^2.20.0", "source-map": "~0.7.2", "source-map-support": "~0.5.20" @@ -11722,6 +11728,11 @@ "webpack-virtual-modules": "^0.2.2" }, "dependencies": { + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -11900,10 +11911,11 @@ } }, "terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.11.0.tgz", + "integrity": "sha512-uCA9DLanzzWSsN1UirKwylhhRz3aKPInlfmpGfw8VN6jHsAtu8HJtIpeeHHK23rxnE/cDc+yvmq5wqkIC6Kn0A==", "requires": { + "acorn": "^8.5.0", "commander": "^2.20.0", "source-map": "~0.7.2", "source-map-support": "~0.5.20" @@ -12592,15 +12604,20 @@ "@types/node": "*" } }, + "@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + }, "@types/localtunnel": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@types/localtunnel/-/localtunnel-1.9.0.tgz", "integrity": "sha512-3YxO7RHRrmtYNX6Rhkr97bnXHrF1Ckfo4axENWLcBXWi+8B1WsNbqPqe5Eg6TA5survjAWWvLTu1KQesuLHVgQ==" }, "@types/lodash": { - "version": "4.14.178", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", - "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==" + "version": "4.14.179", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.179.tgz", + "integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w==" }, "@types/lodash.camelcase": { "version": "4.3.6", @@ -12647,6 +12664,15 @@ "@types/node": "*" } }, + "@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "requires": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, "@types/mdast": { "version": "3.0.10", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", @@ -12655,6 +12681,11 @@ "@types/unist": "*" } }, + "@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, "@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", @@ -13646,15 +13677,6 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "optional": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -13690,21 +13712,6 @@ } } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "optional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "optional": true - }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -13767,58 +13774,6 @@ "worker-rpc": "^0.1.0" } }, - "fork-ts-checker-webpack-plugin-v5": { - "version": "npm:fork-ts-checker-webpack-plugin@5.2.1", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.2.1.tgz", - "integrity": "sha512-SVi+ZAQOGbtAsUWrZvGzz38ga2YqjWvca1pXQFUArIVXqli0lLoDQ8uS0wg0kSpcwpZmaW5jVCZXQebkyUQSsw==", - "optional": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "optional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "optional": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "optional": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -13853,12 +13808,6 @@ "slash": "^2.0.0" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "optional": true - }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -13887,16 +13836,6 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "optional": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -13932,17 +13871,6 @@ } } }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "optional": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -13953,15 +13881,6 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "optional": true, - "requires": { - "has-flag": "^4.0.0" - } - }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", @@ -14055,12 +13974,6 @@ "requires": { "tslib": "^1.8.1" } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "optional": true } } }, @@ -14869,11 +14782,11 @@ }, "dependencies": { "postcss": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", - "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.7.tgz", + "integrity": "sha512-L9Ye3r6hkkCeOETQX6iOaWZgjp3LL6Lpqm6EtgbKrgqGGteRMNb9vzBfRL96YOSu8o7x3MfIH9Mo5cPJFGrW6A==", "requires": { - "nanoid": "^3.2.0", + "nanoid": "^3.3.1", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } @@ -16000,9 +15913,9 @@ "integrity": "sha512-uUbetCWczQHbsKyX1C99XpQHBM8SWfovvaZhPIj23/1uV7SQf0WeRZbiLpw0JZm+LHTChfNgrLfDJOVoU2kU+A==" }, "aws-sdk": { - "version": "2.1077.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1077.0.tgz", - "integrity": "sha512-orJvJROs8hJaQRfHsX7Zl5PxEgrD/uTXyqXz9Yu9Io5VVxzvnOty9oHmvEMSlgTIf1qd01gnev/vpvP1HgzKtw==", + "version": "2.1082.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1082.0.tgz", + "integrity": "sha512-aDrUZ63O/ocuC827ursDqFQAm3jhqsJu1DvMCCFg73y+FK9pXXNHp2mwdi3UeeHvtfxISCLCjuyO3VFd/tpVfA==", "requires": { "buffer": "4.9.2", "events": "1.1.1", @@ -20356,6 +20269,11 @@ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, + "cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=" + }, "cssnano": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", @@ -21426,9 +21344,9 @@ "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" }, "electron-to-chromium": { - "version": "1.4.71", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz", - "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==" + "version": "1.4.73", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.73.tgz", + "integrity": "sha512-RlCffXkE/LliqfA5m29+dVDPB2r72y2D2egMMfIy3Le8ODrxjuZNVo4NIC2yPL01N4xb4nZQLwzi6Z5tGIGLnA==" }, "element-resize-detector": { "version": "1.2.4", @@ -21439,9 +21357,9 @@ } }, "element-ui": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.13.2.tgz", - "integrity": "sha512-r761DRPssMPKDiJZWFlG+4e4vr0cRG/atKr3Eqr8Xi0tQMNbtmYU1QXvFnKiFPFFGkgJ6zS6ASkG+sellcoHlQ==", + "version": "2.15.7", + "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.15.7.tgz", + "integrity": "sha512-+J6rnXajxzLwV6w8Q6bf7Yqzk1FO1ewbIrCy/4B5alnd7tj8WEpfQoAvISirVaUGVGy77d9Ji3o2bF4f0AsJLQ==", "requires": { "async-validator": "~1.8.1", "babel-helper-vue-jsx-merge-props": "^2.0.0", @@ -23534,6 +23452,124 @@ } } }, + "fork-ts-checker-webpack-plugin-v5": { + "version": "npm:fork-ts-checker-webpack-plugin@5.2.1", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.2.1.tgz", + "integrity": "sha512-SVi+ZAQOGbtAsUWrZvGzz38ga2YqjWvca1pXQFUArIVXqli0lLoDQ8uS0wg0kSpcwpZmaW5jVCZXQebkyUQSsw==", + "optional": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "optional": true + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "optional": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "optional": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "optional": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "optional": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "optional": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "optional": true + } + } + }, "form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -31263,11 +31299,6 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" - }, "json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", @@ -32042,6 +32073,11 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, + "lodash.orderby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.orderby/-/lodash.orderby-4.6.0.tgz", + "integrity": "sha1-5pfwTOXXhSL1TZM4syuBozk+TrM=" + }, "lodash.set": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", @@ -32071,6 +32107,11 @@ "lodash._reinterpolate": "^3.0.0" } }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" + }, "lodash.transform": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", @@ -32437,6 +32478,45 @@ "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" }, + "markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "requires": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" + } + } + }, + "markdown-it-emoji": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-2.0.0.tgz", + "integrity": "sha512-39j7/9vP/CPCKbEI44oV8yoPJTpvfeReTn/COgRhSpNrjWF3PfP/JUxxB0hxV6ynOY8KH8Y8aX9NMDdo6z+6YQ==" + }, + "markdown-it-link-attributes": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-link-attributes/-/markdown-it-link-attributes-4.0.0.tgz", + "integrity": "sha512-ssjxSLlLfQBkX6BvAx1rCPrx7ZoK91llQQvS3P7KXvlbnVD34OUkfXwWecN7su/7mrI/HOW0RI5szdJOIqYC3w==" + }, + "markdown-it-task-lists": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz", + "integrity": "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==" + }, "markdown-to-jsx": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.6.tgz", @@ -33245,11 +33325,11 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "mssql": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/mssql/-/mssql-6.4.0.tgz", - "integrity": "sha512-Mtgu3PXqoaL7aHCMurttvEHibjvz5XKjlR6ZCDyAeKtDBORpxm88JyzEU2EESVf7588GulYKc7Gr+Txf5CICBQ==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/mssql/-/mssql-6.4.1.tgz", + "integrity": "sha512-G1I7mM0gfxcH5TGSNoVmxq13Mve5YnQgRAlonqaMlHEjHjMn1g04bsrIQbVHFRdI6++dw/FGWlh8GoItJMoUDw==", "requires": { - "debug": "^4.3.2", + "debug": "^4.3.3", "tarn": "^1.1.5", "tedious": "^6.7.1" } @@ -37481,9 +37561,9 @@ }, "dependencies": { "history": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/history/-/history-5.2.0.tgz", - "integrity": "sha512-uPSF6lAJb3nSePJ43hN3eKj1dTWpN9gMod0ZssbFTIsen+WehTmEadgL+kg78xLJFdRfrrC//SavDzmRVdE+Ig==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", + "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", "requires": { "@babel/runtime": "^7.7.6" } @@ -37500,9 +37580,9 @@ }, "dependencies": { "history": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/history/-/history-5.2.0.tgz", - "integrity": "sha512-uPSF6lAJb3nSePJ43hN3eKj1dTWpN9gMod0ZssbFTIsen+WehTmEadgL+kg78xLJFdRfrrC//SavDzmRVdE+Ig==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", + "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", "requires": { "@babel/runtime": "^7.7.6" } @@ -37814,20 +37894,13 @@ "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, "refractor": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.5.0.tgz", - "integrity": "sha512-QwPJd3ferTZ4cSPPjdP5bsYHMytwWYnAN5EEnLtGvkqp/FCCnGsBgxrm9EuIDnjUC3Uc/kETtvVi7fSIVC74Dg==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz", + "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==", "requires": { "hastscript": "^6.0.0", "parse-entities": "^2.0.0", - "prismjs": "~1.25.0" - }, - "dependencies": { - "prismjs": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz", - "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==" - } + "prismjs": "~1.27.0" } }, "regenerate": { @@ -38244,9 +38317,9 @@ } }, "yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" } } }, @@ -38744,9 +38817,9 @@ } }, "sass": { - "version": "1.49.8", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.8.tgz", - "integrity": "sha512-NoGOjvDDOU9og9oAxhRnap71QaTjjlzrvLnKecUJ3GxhaQBrV6e7gPuSPF28u1OcVAArVojPAe4ZhOXwwC4tGw==", + "version": "1.49.9", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz", + "integrity": "sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==", "requires": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -39475,16 +39548,15 @@ } }, "sockjs-client": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", - "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.6.0.tgz", + "integrity": "sha512-qVHJlyfdHFht3eBFZdKEXKTlb7I4IV41xnVNo8yUKA1UHcPJwgW2SvTq9LhnjjCywSkSK7c/e4nghU0GOoMCRQ==", "requires": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", + "debug": "^3.2.7", + "eventsource": "^1.1.0", + "faye-websocket": "^0.11.4", "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.3" + "url-parse": "^1.5.10" }, "dependencies": { "debug": { @@ -41482,9 +41554,9 @@ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" }, "uglify-js": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.1.tgz", - "integrity": "sha512-FAGKF12fWdkpvNJZENacOH0e/83eG6JyVQyanIJaBXCN1J11TUQv1T1/z8S+Z0CG0ZPk1nPcreF/c7lrTd0TEQ==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.2.tgz", + "integrity": "sha512-peeoTk3hSwYdoc9nrdiEJk+gx1ALCtTjdYuKSXMTDqq7n1W7dHPqWDdSi+BPL0ni2YMeHD7hKUSdbj3TZauY2A==", "optional": true }, "uid-number": { @@ -41986,9 +42058,9 @@ } }, "url-parse": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.8.tgz", - "integrity": "sha512-9JZ5zDrn9wJoOy/t+rH00HHejbU8dq9VsOYVu272TYDrCiyVAgHKUSpPh3ruZIpv8PMVR+NXLZvfRPJv8xAcQw==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -42339,9 +42411,9 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, "vm2": { - "version": "3.9.8", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.8.tgz", - "integrity": "sha512-/1PYg/BwdKzMPo8maOZ0heT7DLI0DAFTm7YQaz/Lim9oIaFZsJs3EdtalvXuBfZwczNwsYhju75NW4d6E+4q+w==", + "version": "3.9.9", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.9.tgz", + "integrity": "sha512-xwTm7NLh/uOjARRBs8/95H0e8fT3Ukw5D/JJWhxMbhKzNh1Nu981jQKvkep9iKYNxzlVrdzD0mlBGkDKZWprlw==", "requires": { "acorn": "^8.7.0", "acorn-walk": "^8.2.0" @@ -42369,6 +42441,15 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz", "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==" }, + "vue-agile": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vue-agile/-/vue-agile-2.0.0.tgz", + "integrity": "sha512-5xkSLJQNRdQ7qpEnXj5FgLg33XKRHaTZKGP5qkvteOc/uGJX89MYCjPSgdNqJ1GYFGfdGAp0jvhihW8OMuXS3g==", + "requires": { + "lodash.orderby": "^4.6.0", + "lodash.throttle": "^4.1.1" + } + }, "vue-class-component": { "version": "7.2.6", "resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-7.2.6.tgz", @@ -42383,9 +42464,9 @@ } }, "vue-docgen-api": { - "version": "4.44.15", - "resolved": "https://registry.npmjs.org/vue-docgen-api/-/vue-docgen-api-4.44.15.tgz", - "integrity": "sha512-JBFe4EAUSmRqRHaNNHqDo1U+w1HRaHh00C0bYKE65HdN9QS6pCJCUBwi1blow0beDzLTAJYCa90xwG61WYBo4A==", + "version": "4.44.17", + "resolved": "https://registry.npmjs.org/vue-docgen-api/-/vue-docgen-api-4.44.17.tgz", + "integrity": "sha512-bU1V9gvXDv5GPaOmXYcnHrc3EjwRxZ8IKFE+Hk7QWpnI5/MYriyt7rf/g/z0JS8u0vGdiYqqUVx6CB+Ghmkm5g==", "requires": { "@babel/parser": "^7.13.12", "@babel/types": "^7.13.12", @@ -42397,7 +42478,7 @@ "pug": "^3.0.2", "recast": "0.20.5", "ts-map": "^1.0.3", - "vue-inbrowser-compiler-utils": "^4.44.15" + "vue-inbrowser-compiler-utils": "^4.44.17" }, "dependencies": { "lru-cache": { @@ -42473,9 +42554,9 @@ "integrity": "sha512-SX35iJHL5PJ4Gfh0Mo/q0shyHiI2V6Zkh51c+k8E9O1RKv5BQyYrCxRzpvPrsIOJEnLaeiovet3dsUB0e/kDzw==" }, "vue-inbrowser-compiler-utils": { - "version": "4.44.15", - "resolved": "https://registry.npmjs.org/vue-inbrowser-compiler-utils/-/vue-inbrowser-compiler-utils-4.44.15.tgz", - "integrity": "sha512-dbuZbFNl7q3+MjLyFxD14LnrbYuhexVCbCU9AFJ2zd3zqHrueXSYGzYTLLTZ++fnCMC3J60xe409e/KEft+Cbw==", + "version": "4.44.17", + "resolved": "https://registry.npmjs.org/vue-inbrowser-compiler-utils/-/vue-inbrowser-compiler-utils-4.44.17.tgz", + "integrity": "sha512-dvxumVgIzR4FXjAWYWIOnpD+6bW0dLkoAv43UShER8gVIhLFo9UEmbF31wD6YWJj94lUpbVIuWl2qc6axYNEAQ==", "requires": { "camelcase": "^5.3.1" } @@ -43914,6 +43995,22 @@ "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" }, + "xss": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.10.tgz", + "integrity": "sha512-qmoqrRksmzqSKvgqzN0055UFWY7OKx1/9JWeRswwEVX9fCG5jcYRxa/A2DHcmZX6VJvjzHRQ2STeeVcQkrmLSw==", + "requires": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + } + } + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/packages/cli/config/index.ts b/packages/cli/config/index.ts index 9bd78931a3..85544254c2 100644 --- a/packages/cli/config/index.ts +++ b/packages/cli/config/index.ts @@ -690,6 +690,21 @@ const config = convict({ }, }, + templates: { + enabled: { + doc: 'Whether templates feature is enabled to load workflow templates.', + format: Boolean, + default: true, + env: 'N8N_TEMPLATES_ENABLED', + }, + host: { + doc: 'Endpoint host to retrieve workflow templates from endpoints.', + format: String, + default: 'https://api.n8n.io/', + env: 'N8N_TEMPLATES_HOST', + }, + }, + binaryDataManager: { availableModes: { format: String, diff --git a/packages/cli/src/Interfaces.ts b/packages/cli/src/Interfaces.ts index f92b91427a..a2f9a2235a 100644 --- a/packages/cli/src/Interfaces.ts +++ b/packages/cli/src/Interfaces.ts @@ -412,6 +412,11 @@ export interface IN8nUISettings { personalizationSurvey: IPersonalizationSurvey; defaultLocale: string; logLevel: 'info' | 'debug' | 'warn' | 'error' | 'verbose'; + deploymentType: string; + templates: { + enabled: boolean; + host: string; + }; } export interface IPersonalizationSurveyAnswers { diff --git a/packages/cli/src/Server.ts b/packages/cli/src/Server.ts index 564a0e0dbd..70baa21fcc 100644 --- a/packages/cli/src/Server.ts +++ b/packages/cli/src/Server.ts @@ -286,6 +286,11 @@ class App { }, defaultLocale: config.get('defaultLocale'), logLevel: config.get('logs.level'), + deploymentType: config.get('deployment.type'), + templates: { + enabled: config.get('templates.enabled'), + host: config.get('templates.host'), + }, }; } diff --git a/packages/design-system/.storybook/font-awesome-icons.js b/packages/design-system/.storybook/font-awesome-icons.js index ca24a7f7a8..d839486fc0 100644 --- a/packages/design-system/.storybook/font-awesome-icons.js +++ b/packages/design-system/.storybook/font-awesome-icons.js @@ -17,6 +17,8 @@ import { faCheck, faChevronDown, faChevronUp, + faChevronLeft, + faChevronRight, faCode, faCodeBranch, faCog, @@ -100,6 +102,8 @@ library.add(faCalendar); library.add(faCheck); library.add(faChevronDown); library.add(faChevronUp); +library.add(faChevronLeft); +library.add(faChevronRight); library.add(faCode); library.add(faCodeBranch); library.add(faCog); diff --git a/packages/design-system/package.json b/packages/design-system/package.json index 6a209215e6..bb412f9cde 100644 --- a/packages/design-system/package.json +++ b/packages/design-system/package.json @@ -30,14 +30,14 @@ "@fortawesome/free-solid-svg-icons": "5.x", "@fortawesome/vue-fontawesome": "2.x", "core-js": "3.x", - "element-ui": "2.13.x" + "element-ui": "2.15.x" }, "devDependencies": { "@fortawesome/fontawesome-svg-core": "^1.2.35", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/vue-fontawesome": "^2.0.2", "core-js": "^3.6.5", - "element-ui": "~2.13.0", + "element-ui": "2.15.x", "storybook-addon-themes": "^6.1.0", "vue": "^2.6.11", "vue-class-component": "^7.2.3", @@ -48,6 +48,7 @@ "@storybook/addon-links": "^6.3.6", "@storybook/vue": "^6.3.6", "@types/jest": "^26.0.13", + "@types/markdown-it": "^12.2.3", "@typescript-eslint/eslint-plugin": "^4.29.0", "@typescript-eslint/parser": "^4.29.0", "@vue/cli-plugin-babel": "~4.5.0", @@ -63,6 +64,10 @@ "eslint-plugin-prettier": "^3.4.0", "eslint-plugin-vue": "^7.16.0", "gulp": "^4.0.0", + "markdown-it": "^12.3.2", + "markdown-it-emoji": "^2.0.0", + "markdown-it-link-attributes": "^4.0.0", + "markdown-it-task-lists": "^2.1.1", "prettier": "^2.3.2", "sass": "^1.26.5", "sass-loader": "^8.0.2", @@ -74,6 +79,7 @@ "gulp-clean-css": "^4.3.0", "gulp-dart-sass": "^1.0.2", "node-notifier": ">=8.0.1", - "trim": ">=0.0.3" + "trim": ">=0.0.3", + "xss": "^1.0.10" } } diff --git a/packages/design-system/src/components/N8nLoading/Loading.stories.js b/packages/design-system/src/components/N8nLoading/Loading.stories.js new file mode 100644 index 0000000000..2d08e3a409 --- /dev/null +++ b/packages/design-system/src/components/N8nLoading/Loading.stories.js @@ -0,0 +1,43 @@ +import N8nLoading from './Loading.vue'; + +export default { + title: 'Atoms/Loading', + component: N8nLoading, + argTypes: { + animated: { + control: { + type: 'boolean', + }, + }, + loading: { + control: { + type: 'boolean', + }, + }, + rows: { + control: { + type: 'select', + options: [1, 2, 3, 4, 5], + }, + }, + variant: { + control: { + type: 'select', + options: ['button', 'h1', 'image', 'p'], + }, + }, + }, +}; + +const Template = (args, { argTypes }) => ({ + props: Object.keys(argTypes), + components: { + N8nLoading, + }, + template: '', +}); + +export const Loading = Template.bind({}); +Loading.args = { + variant: 'p', +}; diff --git a/packages/design-system/src/components/N8nLoading/Loading.vue b/packages/design-system/src/components/N8nLoading/Loading.vue new file mode 100644 index 0000000000..011a8bfab5 --- /dev/null +++ b/packages/design-system/src/components/N8nLoading/Loading.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/packages/design-system/src/components/N8nLoading/index.js b/packages/design-system/src/components/N8nLoading/index.js new file mode 100644 index 0000000000..a7420bd670 --- /dev/null +++ b/packages/design-system/src/components/N8nLoading/index.js @@ -0,0 +1,3 @@ +import N8nLoading from './Loading.vue'; + +export default N8nLoading; diff --git a/packages/design-system/src/components/N8nMarkdown/Markdown.stories.js b/packages/design-system/src/components/N8nMarkdown/Markdown.stories.js new file mode 100644 index 0000000000..bd77554449 --- /dev/null +++ b/packages/design-system/src/components/N8nMarkdown/Markdown.stories.js @@ -0,0 +1,48 @@ +import N8nMarkdown from './Markdown.vue'; + +export default { + title: 'Atoms/Markdown', + component: N8nMarkdown, + argTypes: { + content: { + control: { + type: 'text', + }, + }, + loading: { + control: { + type: 'boolean', + }, + }, + loadingBlocks: { + control: { + type: 'select', + options: [1, 2, 3, 4, 5], + }, + }, + loadingRows: { + control: { + type: 'select', + options: [1, 2, 3, 4, 5], + }, + }, + }, +}; + +const Template = (args, { argTypes }) => ({ + props: Object.keys(argTypes), + components: { + N8nMarkdown, + }, + template: '', +}); + +export const Markdown = Template.bind({}); +Markdown.args = { + content: `I wanted a system to monitor website content changes and notify me. So I made it using n8n.\n\nEspecially my competitor blogs. I wanted to know how often they are posting new articles. (I used their sitemap.xml file) (The below workflow may vary)\n\nIn the Below example, I used HackerNews for example.\n\nExplanation:\n\n- First HTTP Request node crawls the webpage and grabs the website source code\n- Then wait for x minutes\n- Again, HTTP Node crawls the webpage\n- If Node compares both results are equal if anything is changed. It’ll go to the false branch and notify me in telegram.\n\n**Workflow:**\n\n![](fileId:1)\n\n**Sample Response:**\n\n![](https://community.n8n.io/uploads/default/original/2X/d/d21ba41d7ac9ff5cd8148fedb07d0f1ff53b2529.png)\n`, + loading: false, + images: [{ + id: 1, + url: 'https://community.n8n.io/uploads/default/optimized/2X/b/b737a95de4dfe0825d50ca098171e9f33a459e74_2_690x288.png', + }], +}; diff --git a/packages/design-system/src/components/N8nMarkdown/Markdown.vue b/packages/design-system/src/components/N8nMarkdown/Markdown.vue new file mode 100644 index 0000000000..b94d93ac3c --- /dev/null +++ b/packages/design-system/src/components/N8nMarkdown/Markdown.vue @@ -0,0 +1,220 @@ + + + + + diff --git a/packages/design-system/src/components/N8nMarkdown/index.js b/packages/design-system/src/components/N8nMarkdown/index.js new file mode 100644 index 0000000000..3751d0c839 --- /dev/null +++ b/packages/design-system/src/components/N8nMarkdown/index.js @@ -0,0 +1,3 @@ +import N8nMarkdown from './Markdown.vue'; + +export default N8nMarkdown; diff --git a/packages/design-system/src/components/N8nTag/Tag.stories.js b/packages/design-system/src/components/N8nTag/Tag.stories.js new file mode 100644 index 0000000000..c204d5c2dd --- /dev/null +++ b/packages/design-system/src/components/N8nTag/Tag.stories.js @@ -0,0 +1,27 @@ +import N8nTag from './Tag.vue'; + +export default { + title: 'Atoms/Tag', + component: N8nTag, + argTypes: { + text: { + control: { + control: 'text', + }, + }, + }, +}; + +const Template = (args, { argTypes }) => ({ + props: Object.keys(argTypes), + components: { + N8nTag, + }, + template: + '', +}); + +export const Tag = Template.bind({}); +Tag.args = { + text: 'tag name', +}; diff --git a/packages/design-system/src/components/N8nTag/Tag.vue b/packages/design-system/src/components/N8nTag/Tag.vue new file mode 100644 index 0000000000..401e4f24b5 --- /dev/null +++ b/packages/design-system/src/components/N8nTag/Tag.vue @@ -0,0 +1,25 @@ + + + + + diff --git a/packages/design-system/src/components/N8nTag/index.js b/packages/design-system/src/components/N8nTag/index.js new file mode 100644 index 0000000000..5e8a0d45a6 --- /dev/null +++ b/packages/design-system/src/components/N8nTag/index.js @@ -0,0 +1,3 @@ +import Tag from './Tag.vue'; + +export default Tag; diff --git a/packages/design-system/src/components/N8nTags/Tags.stories.js b/packages/design-system/src/components/N8nTags/Tags.stories.js new file mode 100644 index 0000000000..5b3370f349 --- /dev/null +++ b/packages/design-system/src/components/N8nTags/Tags.stories.js @@ -0,0 +1,35 @@ +import N8nTags from './Tags.vue'; + +export default { + title: 'Atoms/Tags', + component: N8nTags, + argTypes: { + }, +}; + +const Template = (args, { argTypes }) => ({ + props: Object.keys(argTypes), + components: { + N8nTags, + }, + template: + '', +}); + +export const Tags = Template.bind({}); +Tags.args = { + tags: [ + { + id: 1, + name: 'very long tag name', + }, + { + id: 2, + name: 'tag1', + }, + { + id: 3, + name: 'tag2 yo', + }, + ], +}; diff --git a/packages/design-system/src/components/N8nTags/Tags.vue b/packages/design-system/src/components/N8nTags/Tags.vue new file mode 100644 index 0000000000..cad6716ae3 --- /dev/null +++ b/packages/design-system/src/components/N8nTags/Tags.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/packages/design-system/src/components/N8nTags/index.js b/packages/design-system/src/components/N8nTags/index.js new file mode 100644 index 0000000000..ebf28f6470 --- /dev/null +++ b/packages/design-system/src/components/N8nTags/index.js @@ -0,0 +1,3 @@ +import Tags from './Tags.vue'; + +export default Tags; diff --git a/packages/design-system/src/components/index.js b/packages/design-system/src/components/index.js index a82ddc6e3f..c62ee197e9 100644 --- a/packages/design-system/src/components/index.js +++ b/packages/design-system/src/components/index.js @@ -5,12 +5,16 @@ import N8nInput from './N8nInput'; import N8nInfoTip from './N8nInfoTip'; import N8nInputNumber from './N8nInputNumber'; import N8nInputLabel from './N8nInputLabel'; +import N8nLoading from './N8nLoading'; import N8nHeading from './N8nHeading'; +import N8nMarkdown from './N8nMarkdown'; import N8nMenu from './N8nMenu'; import N8nMenuItem from './N8nMenuItem'; import N8nSelect from './N8nSelect'; import N8nSpinner from './N8nSpinner'; import N8nSquareButton from './N8nSquareButton'; +import N8nTags from './N8nTags'; +import N8nTag from './N8nTag'; import N8nText from './N8nText'; import N8nTooltip from './N8nTooltip'; import N8nOption from './N8nOption'; @@ -23,12 +27,16 @@ export { N8nInput, N8nInputLabel, N8nInputNumber, + N8nLoading, + N8nMarkdown, N8nHeading, N8nMenu, N8nMenuItem, N8nSelect, N8nSpinner, N8nSquareButton, + N8nTags, + N8nTag, N8nText, N8nTooltip, N8nOption, diff --git a/packages/design-system/src/shims-element-ui.d.ts b/packages/design-system/src/shims-element-ui.d.ts index e59e86f062..645df50e69 100644 --- a/packages/design-system/src/shims-element-ui.d.ts +++ b/packages/design-system/src/shims-element-ui.d.ts @@ -6,4 +6,6 @@ declare module 'element-ui/lib/select'; declare module 'element-ui/lib/option'; declare module 'element-ui/lib/menu'; declare module 'element-ui/lib/menu-item'; +declare module 'element-ui/lib/skeleton'; +declare module 'element-ui/lib/skeleton-item'; diff --git a/packages/design-system/src/utils/markdown.ts b/packages/design-system/src/utils/markdown.ts new file mode 100644 index 0000000000..8d757580d3 --- /dev/null +++ b/packages/design-system/src/utils/markdown.ts @@ -0,0 +1,12 @@ +export const escapeMarkdown = (html: string | undefined): string => { + if (!html) { + return ''; + } + const escaped = html.replace(//g, ">"); + // unescape greater than quotes at start of line + const withQuotes = escaped.replace(/^((\s)*(>)+)+\s*/gm, (matches) => { + return matches.replace(/>/g, '>'); + }); + + return withQuotes; +}; diff --git a/packages/design-system/theme/src/index.scss b/packages/design-system/theme/src/index.scss index 353317e1c3..953f306f1a 100644 --- a/packages/design-system/theme/src/index.scss +++ b/packages/design-system/theme/src/index.scss @@ -22,6 +22,7 @@ // @use "./checkbox-group.scss"; @use "./switch.scss"; @use "./select.scss"; +@use "./skeleton.scss"; @use "./button.scss"; // @use "./button-group.scss"; @use "./table.scss"; diff --git a/packages/design-system/theme/src/skeleton.scss b/packages/design-system/theme/src/skeleton.scss new file mode 100644 index 0000000000..7a0dc72ec5 --- /dev/null +++ b/packages/design-system/theme/src/skeleton.scss @@ -0,0 +1,82 @@ +.el-skeleton { + width: 100%; +} + +.el-skeleton__item { + width: 100%; + height: 16px; + border-radius: var(--border-radius-large); + background: var(--color-background-base); + display: inline-block; +} + +.el-skeleton__button { + width: 162px; + height: 40px; + border-radius: 20px; +} + +.el-skeleton__p { + width: 100%; + height: 16px; + margin-top: 16px; +} + +.el-skeleton__h1 { + height: 20px; + margin-top: 14px; +} + +.el-skeleton__image { + width: unset; + height: 500px !important; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + border-radius: 8px !important; +} + +.el-skeleton__image svg { + width: 22%; + height: 22%; + fill: var(--color-info-tint-1); +} + +.el-skeleton__first-line, +.el-skeleton__paragraph { + background: var(--color-background-base); +} + +.el-skeleton.is-animated .el-skeleton__item { + background: -webkit-gradient(linear, left top, right top, color-stop(25%, #f2f2f2), color-stop(37%, #e6e6e6), color-stop(63%, #f2f2f2)); + background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%); + background-size: 400% 100%; + -webkit-animation: el-skeleton-loading 1.4s ease infinite; + animation: el-skeleton-loading 1.4s ease infinite; +} + +@-webkit-keyframes el-skeleton-loading { + 0% { + background-position: 100% 50%; + } + + 100% { + background-position: 0 50%; + } +} + +@keyframes el-skeleton-loading { + 0% { + background-position: 100% 50%; + } + + 100% { + background-position: 0 50%; + } +} diff --git a/packages/editor-ui/package.json b/packages/editor-ui/package.json index 05faa59e9d..0e221856a9 100644 --- a/packages/editor-ui/package.json +++ b/packages/editor-ui/package.json @@ -31,7 +31,8 @@ "timeago.js": "^4.0.2", "v-click-outside": "^3.1.2", "vue-fragment": "^1.5.2", - "vue-i18n": "^8.26.7" + "vue-i18n": "^8.26.7", + "xss": "^1.0.10" }, "devDependencies": { "@fortawesome/fontawesome-svg-core": "^1.2.35", @@ -62,7 +63,7 @@ "babel-eslint": "^10.0.1", "cross-env": "^7.0.2", "dateformat": "^3.0.3", - "element-ui": "~2.13.0", + "element-ui": "~2.15.7", "eslint": "^7.32.0", "eslint-plugin-import": "^2.23.4", "eslint-plugin-vue": "^7.16.0", @@ -89,6 +90,7 @@ "typescript": "~4.3.5", "uuid": "^8.3.2", "vue": "^2.6.11", + "vue-agile": "^2.0.0", "vue-cli-plugin-webpack-bundle-analyzer": "^2.0.0", "vue-json-pretty": "1.7.1", "vue-prism-editor": "^0.3.0", diff --git a/packages/editor-ui/src/App.vue b/packages/editor-ui/src/App.vue index c248d1f626..0487c89a1c 100644 --- a/packages/editor-ui/src/App.vue +++ b/packages/editor-ui/src/App.vue @@ -1,46 +1,125 @@ diff --git a/packages/editor-ui/src/components/CollectionCard.vue b/packages/editor-ui/src/components/CollectionCard.vue new file mode 100644 index 0000000000..8a74fc7ee9 --- /dev/null +++ b/packages/editor-ui/src/components/CollectionCard.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/packages/editor-ui/src/components/CollectionsCarousel.vue b/packages/editor-ui/src/components/CollectionsCarousel.vue new file mode 100644 index 0000000000..6c536138a1 --- /dev/null +++ b/packages/editor-ui/src/components/CollectionsCarousel.vue @@ -0,0 +1,181 @@ + + + + + + + diff --git a/packages/editor-ui/src/components/CredentialsList.vue b/packages/editor-ui/src/components/CredentialsList.vue index d8154d5072..2fef894871 100644 --- a/packages/editor-ui/src/components/CredentialsList.vue +++ b/packages/editor-ui/src/components/CredentialsList.vue @@ -16,7 +16,7 @@ /> - + @@ -64,11 +64,12 @@ export default mixins( data() { return { CREDENTIAL_LIST_MODAL_KEY, + loading: true, }; }, computed: { ...mapGetters('credentials', ['allCredentials']), - credentialsToDisplay() { + credentialsToDisplay(): ICredentialsResponse[] { return this.allCredentials.reduce((accu: ICredentialsResponse[], cred: ICredentialsResponse) => { const type = this.$store.getters['credentials/getCredentialTypeByName'](cred.type); @@ -85,7 +86,17 @@ export default mixins( }, []); }, }, - mounted() { + async mounted() { + try { + await Promise.all([ + await this.$store.dispatch('credentials/fetchCredentialTypes'), + await this.$store.dispatch('credentials/fetchAllCredentials'), + ]); + } catch (e) { + this.$showError(e, this.$locale.baseText('credentialsList.errorLoadingCredentials')); + } + this.loading = false; + this.$externalHooks().run('credentialsList.mounted'); this.$telemetry.track('User opened Credentials panel', { workflow_id: this.$store.getters.workflowId }); }, diff --git a/packages/editor-ui/src/components/CredentialsSelectModal.vue b/packages/editor-ui/src/components/CredentialsSelectModal.vue index 2f4af064af..3f019fbb73 100644 --- a/packages/editor-ui/src/components/CredentialsSelectModal.vue +++ b/packages/editor-ui/src/components/CredentialsSelectModal.vue @@ -4,7 +4,9 @@ :eventBus="modalBus" width="50%" :center="true" + :loading="loading" maxWidth="460px" + minHeight="250px" > + + + - + - + - + - + - + - + - +