Browse Source

Merge branch 'nocodb:develop' into patch-1

pull/9053/head
Salim B 4 months ago committed by GitHub
parent
commit
c199d8cdfa
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 50
      .github/workflows/release-executables.yml
  2. 2
      build-local-docker-image.sh
  3. 21
      packages/nc-gui/app.vue
  4. 8
      packages/nc-gui/assets/img/giftCard.svg
  5. 5
      packages/nc-gui/assets/nc-icons/alert-triangle-solid.svg
  6. 3
      packages/nc-gui/assets/nc-icons/apple_solid.svg
  7. 10
      packages/nc-gui/assets/nc-icons/asana.svg
  8. 15
      packages/nc-gui/assets/nc-icons/bit-bucket.svg
  9. 4
      packages/nc-gui/assets/nc-icons/book-open.svg
  10. 4
      packages/nc-gui/assets/nc-icons/box.svg
  11. 4
      packages/nc-gui/assets/nc-icons/check-circle-solid.svg
  12. 3
      packages/nc-gui/assets/nc-icons/circle.svg
  13. 11
      packages/nc-gui/assets/nc-icons/claude.svg
  14. 12
      packages/nc-gui/assets/nc-icons/data-bricks.svg
  15. 7
      packages/nc-gui/assets/nc-icons/doller-sign.svg
  16. 3
      packages/nc-gui/assets/nc-icons/dropbox.svg
  17. 8
      packages/nc-gui/assets/nc-icons/gift.svg
  18. 5
      packages/nc-gui/assets/nc-icons/git-commit.svg
  19. 17
      packages/nc-gui/assets/nc-icons/github_solid.svg
  20. 16
      packages/nc-gui/assets/nc-icons/gitlab.svg
  21. 12
      packages/nc-gui/assets/nc-icons/globe.svg
  22. 14
      packages/nc-gui/assets/nc-icons/gmail.svg
  23. 89
      packages/nc-gui/assets/nc-icons/google-docs.svg
  24. 15
      packages/nc-gui/assets/nc-icons/google-drive.svg
  25. 17
      packages/nc-gui/assets/nc-icons/google_calendar.svg
  26. 60
      packages/nc-gui/assets/nc-icons/google_sheet.svg
  27. 3
      packages/nc-gui/assets/nc-icons/greenhouse.svg
  28. 11
      packages/nc-gui/assets/nc-icons/groq.svg
  29. 3
      packages/nc-gui/assets/nc-icons/heart.svg
  30. 10
      packages/nc-gui/assets/nc-icons/hubspot.svg
  31. 6
      packages/nc-gui/assets/nc-icons/integration.svg
  32. 10
      packages/nc-gui/assets/nc-icons/intercom.svg
  33. 20
      packages/nc-gui/assets/nc-icons/jira.svg
  34. 12
      packages/nc-gui/assets/nc-icons/lever.svg
  35. 4
      packages/nc-gui/assets/nc-icons/mail.svg
  36. 11
      packages/nc-gui/assets/nc-icons/mailchimp.svg
  37. 10
      packages/nc-gui/assets/nc-icons/mattermost.svg
  38. 10
      packages/nc-gui/assets/nc-icons/microsoft-dynamics-365.svg
  39. 28
      packages/nc-gui/assets/nc-icons/microsoft-teams.svg
  40. 19
      packages/nc-gui/assets/nc-icons/microsoft_access.svg
  41. 251
      packages/nc-gui/assets/nc-icons/microsoft_excel.svg
  42. 238
      packages/nc-gui/assets/nc-icons/microsoft_outlook.svg
  43. 11
      packages/nc-gui/assets/nc-icons/miro.svg
  44. 10
      packages/nc-gui/assets/nc-icons/mssql-server.svg
  45. 16
      packages/nc-gui/assets/nc-icons/multi-file.svg
  46. 7
      packages/nc-gui/assets/nc-icons/ollama.svg
  47. 10
      packages/nc-gui/assets/nc-icons/openai.svg
  48. 10
      packages/nc-gui/assets/nc-icons/oracle.svg
  49. 3
      packages/nc-gui/assets/nc-icons/pipedrive.svg
  50. 5
      packages/nc-gui/assets/nc-icons/play.svg
  51. 15
      packages/nc-gui/assets/nc-icons/postgresql.svg
  52. 11
      packages/nc-gui/assets/nc-icons/quickbooks.svg
  53. 20
      packages/nc-gui/assets/nc-icons/salesforce.svg
  54. 5
      packages/nc-gui/assets/nc-icons/save.svg
  55. 6
      packages/nc-gui/assets/nc-icons/server1.svg
  56. 13
      packages/nc-gui/assets/nc-icons/slack.svg
  57. 10
      packages/nc-gui/assets/nc-icons/snowflake.svg
  58. 17
      packages/nc-gui/assets/nc-icons/sql-server.svg
  59. 11
      packages/nc-gui/assets/nc-icons/stripe.svg
  60. 32
      packages/nc-gui/assets/nc-icons/survey_monkey.svg
  61. 18
      packages/nc-gui/assets/nc-icons/tableau.svg
  62. 15
      packages/nc-gui/assets/nc-icons/telegram.svg
  63. 10
      packages/nc-gui/assets/nc-icons/thumbs-up-outline.svg
  64. 16
      packages/nc-gui/assets/nc-icons/trello.svg
  65. 10
      packages/nc-gui/assets/nc-icons/twilio.svg
  66. 11
      packages/nc-gui/assets/nc-icons/typeform.svg
  67. 7
      packages/nc-gui/assets/nc-icons/view-gantt.svg
  68. 11
      packages/nc-gui/assets/nc-icons/whatsapp-solid.svg
  69. 3
      packages/nc-gui/assets/nc-icons/whatsapp.svg
  70. 12
      packages/nc-gui/assets/nc-icons/workday.svg
  71. 10
      packages/nc-gui/assets/nc-icons/zendesk.svg
  72. 7
      packages/nc-gui/assets/nc-icons/zoho-crm.svg
  73. 7
      packages/nc-gui/assets/style.scss
  74. 10
      packages/nc-gui/components.d.ts
  75. 5
      packages/nc-gui/components/account/Integration.vue
  76. 294
      packages/nc-gui/components/account/UserList.vue
  77. 173
      packages/nc-gui/components/api-client/Headers.vue
  78. 120
      packages/nc-gui/components/api-client/Params.vue
  79. 4
      packages/nc-gui/components/cell/ClampedText.vue
  80. 9
      packages/nc-gui/components/cell/attachment/AttachFile.vue
  81. 453
      packages/nc-gui/components/cell/attachment/Carousel.vue
  82. 209
      packages/nc-gui/components/cell/attachment/Modal.vue
  83. 18
      packages/nc-gui/components/cell/attachment/Preview/Image.vue
  84. 46
      packages/nc-gui/components/cell/attachment/Preview/MiscOffice.vue
  85. 63
      packages/nc-gui/components/cell/attachment/Preview/Pdf.vue
  86. 55
      packages/nc-gui/components/cell/attachment/Preview/Video.vue
  87. 12
      packages/nc-gui/components/cell/attachment/UploadProviders/Local.vue
  88. 6
      packages/nc-gui/components/cell/attachment/UploadProviders/Url.vue
  89. 351
      packages/nc-gui/components/cell/attachment/index.vue
  90. 67
      packages/nc-gui/components/cell/attachment/utils.ts
  91. 4
      packages/nc-gui/components/dashboard/Sidebar.vue
  92. 34
      packages/nc-gui/components/dashboard/Sidebar/TopSection.vue
  93. 20
      packages/nc-gui/components/dashboard/TreeView/ProjectNode.vue
  94. 63
      packages/nc-gui/components/dashboard/TreeView/TableNode.vue
  95. 53
      packages/nc-gui/components/dashboard/TreeView/ViewsList.vue
  96. 10
      packages/nc-gui/components/dashboard/View.vue
  97. 383
      packages/nc-gui/components/dashboard/settings/DataSources.vue
  98. 85
      packages/nc-gui/components/dashboard/settings/Metadata.vue
  99. 202
      packages/nc-gui/components/dashboard/settings/Modal.vue
  100. 217
      packages/nc-gui/components/dashboard/settings/UIAcl.vue
  101. Some files were not shown because too many files have changed in this diff Show More

50
.github/workflows/release-executables.yml

@ -75,6 +75,7 @@ jobs:
# Install nocodb version based on provided tag name
npm i -E nocodb@${{ github.event.inputs.tag || inputs.tag }}
# install npm dependendencies
npm i
@ -91,16 +92,47 @@ jobs:
# clean up code to optimize size
npx modclean --patterns="default:*" --ignore="nc-lib-gui/**,nocodb/**,dayjs/**,express-status-monitor/**,sqlite3/**" --run
# build executables
npm run build
ls ./dist
# Move macOS executables for signing
mkdir ./mac-dist
mv ./dist/Noco-macos-arm64 ./mac-dist/
mv ./dist/Noco-macos-x64 ./mac-dist/
mkdir ./dist
# build darwin x64 executable
npm uninstall sharp
npm install --cpu=x64 --os=darwin sharp
npx --yes pkg@5.8.1 . --compress GZip -t node18-macos-x64 -o Noco-macos-x64
mv ./Noco-macos-x64 ./mac-dist/
# build darwin arm64 executable
npm uninstall sharp
npm install --cpu=arm64 --os=darwin sharp
npx --yes pkg@5.8.1 . --compress GZip -t node18-macos-arm64 -o Noco-macos-arm64
mv ./Noco-macos-arm64 ./mac-dist/
# build linux x64 executable
npm uninstall sharp
npm install --cpu=x64 --os=linux sharp
npx --yes pkg@5.8.1 . --compress GZip -t node18-linux-x64 -o Noco-linux-x64
mv ./Noco-linux-x64 ./dist/
# build linux arm64 executable
npm uninstall sharp
npm install --cpu=arm64 --os=linux sharp
npx --yes pkg@5.8.1 . --compress GZip -t node18-linux-arm64 -o Noco-linux-arm64
mv ./Noco-linux-arm64 ./dist/
# build windows x64 executable
npm uninstall sharp
npm install --cpu=x64 --os=win32 sharp
npx --yes pkg@5.8.1 . --compress GZip -t node18-win-x64 -o Noco-win-x64.exe
mv ./Noco-win-x64.exe ./dist/
# build windows arm64 executable
npm uninstall sharp
npm install --cpu=arm64 --os=win32 sharp
npx --yes pkg@5.8.1 . --compress GZip -t node18-win-arm64 -o Noco-win-arm64.exe
mv ./Noco-win-arm64.exe ./dist/
- name: Upload executables to asset
id: upload-release-asset

2
build-local-docker-image.sh

@ -26,7 +26,7 @@ function remove_image() {
function install_dependencies() {
# Install all dependencies
cd ${SCRIPT_DIR}
pnpm i || ERROR="install_dependencies failed"
pnpm bootstrap || ERROR="install_dependencies failed"
}
function build_gui() {

21
packages/nc-gui/app.vue

@ -96,6 +96,27 @@ onMounted(() => {
refreshCommandPalette()
})
})
// ref: https://github.com/vuejs/vue-cli/issues/7431#issuecomment-1793385162
// Stop error resizeObserver
const debounce = (callback: (...args: any[]) => void, delay: number) => {
let tid: any
return function (...args: any[]) {
const ctx = self
tid && clearTimeout(tid)
tid = setTimeout(() => {
callback.apply(ctx, args)
}, delay)
}
}
const _ = (window as any).ResizeObserver
;(window as any).ResizeObserver = class ResizeObserver extends _ {
constructor(callback: (...args: any[]) => void) {
callback = debounce(callback, 20)
super(callback)
}
}
</script>
<template>

8
packages/nc-gui/assets/img/giftCard.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

5
packages/nc-gui/assets/nc-icons/alert-triangle-solid.svg

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
<path d="M8.57514 3.21635L1.51681 14.9997C1.37128 15.2517 1.29428 15.5374 1.29346 15.8284C1.29265 16.1195 1.36805 16.4056 1.51216 16.6585C1.65627 16.9113 1.86408 17.122 2.1149 17.2696C2.36571 17.4171 2.65081 17.4965 2.94181 17.4997H17.0585C17.3495 17.4965 17.6346 17.4171 17.8854 17.2696C18.1362 17.122 18.344 16.9113 18.4881 16.6585C18.6322 16.4056 18.7076 16.1195 18.7068 15.8284C18.706 15.5374 18.629 15.2517 18.4835 14.9997L11.4251 3.21635C11.2766 2.97144 11.0674 2.76895 10.8178 2.62842C10.5682 2.48789 10.2866 2.41406 10.0001 2.41406C9.71369 2.41406 9.43208 2.48789 9.18248 2.62842C8.93287 2.76895 8.7237 2.97144 8.57514 3.21635Z" fill="currentColor" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M10 7.5V10.8333" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M10 14.167H10.0083" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

3
packages/nc-gui/assets/nc-icons/apple_solid.svg

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="32" viewBox="0 0 28 32" fill="none">
<path d="M26.1914 10.9109C26.0394 11.0046 22.6963 12.951 22.7343 17.0001C22.7763 21.8434 26.98 23.4562 27.0283 23.4745C26.9907 23.5898 26.3562 25.7717 24.8124 28.025C23.4783 29.9771 22.0963 31.9181 19.9149 31.9586C17.7719 31.9979 17.0812 30.6871 14.6331 30.6871C12.1834 30.6871 11.4167 31.9181 9.39012 31.9979C7.2847 32.0775 5.68177 29.8899 4.33777 27.9485C1.59026 23.9755 -0.510428 16.7204 2.3103 11.8243C3.71067 9.39274 6.21367 7.85225 8.92948 7.81246C10.9978 7.77337 12.9483 9.20289 14.2135 9.20289C15.4605 9.20289 17.6956 7.53647 20.3301 7.73137C21.3626 7.80789 24.2937 8.11606 26.1914 10.9109ZM18.7045 5.10862C19.8234 3.75637 20.5762 1.87313 20.3689 0C18.7585 0.0638623 16.8109 1.07268 15.6558 2.42407C14.6215 3.62119 13.7131 5.53851 13.9597 7.37342C15.7546 7.51211 17.5865 6.46171 18.7045 5.10862Z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 931 B

10
packages/nc-gui/assets/nc-icons/asana.svg

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="30" viewBox="0 0 32 30" fill="none">
<g clip-path="url(#clip0_881_27774)">
<path d="M25.0406 15.8463C21.197 15.8463 18.0812 18.9622 18.0812 22.8059C18.0812 26.6496 21.197 29.7655 25.0406 29.7655C28.8842 29.7655 32 26.6496 32 22.8059C32 18.9622 28.8842 15.8463 25.0406 15.8463ZM6.95943 15.8469C3.11588 15.8469 0 18.9622 0 22.8059C0 26.6496 3.11588 29.7655 6.95943 29.7655C10.8031 29.7655 13.9192 26.6496 13.9192 22.8059C13.9192 18.9622 10.8031 15.8469 6.95943 15.8469ZM22.9593 7.14678C22.9593 10.9906 19.8435 14.1068 16.0001 14.1068C12.1563 14.1068 9.04059 10.9906 9.04059 7.14678C9.04059 3.30368 12.1563 0.1875 16.0001 0.1875C19.8435 0.1875 22.9593 3.30368 22.9593 7.14678Z" fill="#F06A6A"/>
</g>
<defs>
<clipPath id="clip0_881_27774">
<rect width="32" height="29.625" fill="white" transform="translate(0 0.1875)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 927 B

15
packages/nc-gui/assets/nc-icons/bit-bucket.svg

@ -0,0 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="30" viewBox="0 0 32 30" fill="none">
<g clip-path="url(#clip0_858_14572)">
<path d="M1.03852 0.562585C0.735629 0.558679 0.446516 0.688907 0.248732 0.918336C0.0509483 1.14777 -0.0352608 1.45291 0.0132305 1.75192L4.36557 28.1735C4.4775 28.8409 5.05249 29.3316 5.7292 29.3372H26.6091C27.1171 29.3438 27.5532 28.9774 27.6344 28.476L31.9868 1.75704C32.0353 1.45804 31.9491 1.15289 31.7513 0.923463C31.5535 0.694034 31.2644 0.563805 30.9615 0.567712L1.03852 0.562585ZM19.3655 19.6585H12.7011L10.8966 10.231H20.9803L19.3655 19.6585Z" fill="#2684FF"/>
<path d="M30.5762 10.2178H20.9615L19.348 19.6378H12.689L4.82617 28.9707C5.07539 29.1862 5.39313 29.306 5.72258 29.3087H26.591C27.0985 29.3153 27.5343 28.9492 27.6155 28.4482L30.5762 10.2178Z" fill="url(#paint0_linear_858_14572)"/>
</g>
<defs>
<linearGradient id="paint0_linear_858_14572" x1="2802.14" y1="274.018" x2="1691.48" y2="1851" gradientUnits="userSpaceOnUse">
<stop offset="0.18" stop-color="#0052CC"/>
<stop offset="1" stop-color="#2684FF"/>
</linearGradient>
<clipPath id="clip0_858_14572">
<rect width="32" height="28.875" fill="white" transform="translate(0 0.5625)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

4
packages/nc-gui/assets/nc-icons/book-open.svg

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<path d="M14.6667 2H10.6667C9.95942 2 9.28115 2.28095 8.78105 2.78105C8.28095 3.28115 8 3.95942 8 4.66667V14C8 13.4696 8.21071 12.9609 8.58579 12.5858C8.96086 12.2107 9.46957 12 10 12H14.6667V2Z" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M1.33331 2H5.33331C6.04056 2 6.71883 2.28095 7.21893 2.78105C7.71903 3.28115 7.99998 3.95942 7.99998 4.66667V14C7.99998 13.4696 7.78927 12.9609 7.41419 12.5858C7.03912 12.2107 6.53041 12 5.99998 12H1.33331V2Z" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 709 B

4
packages/nc-gui/assets/nc-icons/box.svg

@ -0,0 +1,4 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="32" height="32" rx="4" fill="#0061D5"/>
<path d="M27.7884 21.0273C28.088 21.4467 28.0281 21.986 27.6686 22.2856C27.2491 22.5852 26.6499 22.5253 26.3503 22.1658L24.2531 19.4693L22.2158 22.1058C21.9162 22.5253 21.317 22.5253 20.8976 22.2257C20.4781 21.9261 20.4182 21.3868 20.7178 20.9673L23.1146 17.8515L20.7178 14.7356C20.4182 14.3162 20.538 13.717 20.8976 13.4174C21.317 13.1178 21.9162 13.2376 22.2158 13.5971L24.2531 16.2936L26.3503 13.717C26.6499 13.2975 27.1892 13.2376 27.6686 13.5372C28.088 13.8368 28.088 14.436 27.7884 14.8555L25.4515 17.9114L27.7884 21.0273ZM16.8829 20.6677C15.325 20.6677 14.0666 19.4693 14.0666 17.9114C14.0666 16.4134 15.325 15.1551 16.8829 15.1551C18.4408 15.1551 19.6991 16.4134 19.6991 17.9114C19.6392 19.4693 18.3809 20.6677 16.8829 20.6677ZM8.61387 20.6677C7.05594 20.6677 5.79761 19.4693 5.79761 17.9114C5.79761 16.4134 7.05594 15.1551 8.61387 15.1551C10.1718 15.1551 11.4301 16.4134 11.4301 17.9114C11.4301 19.4693 10.1718 20.6677 8.61387 20.6677ZM16.8829 13.3575C15.1452 13.3575 13.5873 14.3162 12.8083 15.7543C12.0293 14.3162 10.4714 13.3575 8.67379 13.3575C7.59522 13.3575 6.6365 13.717 5.85753 14.2563V10.4214C5.85753 9.942 5.43809 9.52255 4.95873 9.52255C4.41944 9.52255 4 9.942 4 10.4214V17.9713C4.05992 20.488 6.09721 22.4654 8.61387 22.4654C10.4115 22.4654 11.9694 21.4467 12.7484 20.0086C13.5273 21.4467 15.0853 22.4654 16.823 22.4654C19.3995 22.4654 21.4968 20.4281 21.4968 17.8515C21.5567 15.3948 19.4595 13.3575 16.8829 13.3575Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

4
packages/nc-gui/assets/nc-icons/check-circle-solid.svg

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
<path d="M9.99984 18.3337C14.6022 18.3337 18.3332 14.6027 18.3332 10.0003C18.3332 5.39795 14.6022 1.66699 9.99984 1.66699C5.39746 1.66699 1.6665 5.39795 1.6665 10.0003C1.6665 14.6027 5.39746 18.3337 9.99984 18.3337Z" fill="currentColor" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M13.5 7.5L8.6875 12.5L6.5 10.2273" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 562 B

3
packages/nc-gui/assets/nc-icons/circle.svg

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
<path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 316 B

11
packages/nc-gui/assets/nc-icons/claude.svg

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_926_22148)">
<path d="M25.4883 0H6.51169C2.91538 0 0 2.93931 0 6.56512V25.4349C0 29.0607 2.91538 32 6.51169 32H25.4883C29.0846 32 32 29.0607 32 25.4349V6.56512C32 2.93931 29.0846 0 25.4883 0Z" fill="#CC9B7A"/>
<path d="M19.9158 9.36133H17.2053L22.1398 22.6378L24.8503 22.638L19.9158 9.36133ZM12.0829 9.36133L7.14844 22.638H9.91437L10.9101 19.85L16.088 19.8498L17.0947 22.638H19.8606L14.9153 9.36133H12.0829ZM11.8172 17.3826L13.4991 12.7138L15.1918 17.3826H11.8172Z" fill="#1F1F1E"/>
</g>
<defs>
<clipPath id="clip0_926_22148">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 748 B

12
packages/nc-gui/assets/nc-icons/data-bricks.svg

@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_858_13877)">
<path d="M0.527344 18.7482V23.9059L16.0003 32L31.4732 23.9059V18.7482L26.0144 15.9624L31.4732 13.1012V7.98118V7.94353L31.4356 7.98118L16.0003 0L0.564991 7.94353H0.527344V13.1012L5.98617 15.9624L0.527344 18.7482Z" fill="#DB1905"/>
<path d="M0.527344 18.7478L16.0003 26.8419L31.4732 18.7478L26.0144 15.9619L16.0003 21.1949L5.98617 15.9619L0.527344 18.7478Z" fill="#FF5224"/>
<path d="M31.4732 7.98118L16.0003 16.0753L0.527344 7.98118L16.0003 0L31.4732 7.98118Z" fill="#FF5224"/>
</g>
<defs>
<clipPath id="clip0_858_13877">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 759 B

7
packages/nc-gui/assets/nc-icons/doller-sign.svg

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<path d="M8 0.666992V15.3337" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round"
stroke-linejoin="round" />
<path
d="M11.3333 3.33301H6.33333C5.71449 3.33301 5.121 3.57884 4.68342 4.01643C4.24583 4.45401 4 5.0475 4 5.66634C4 6.28518 4.24583 6.87867 4.68342 7.31626C5.121 7.75384 5.71449 7.99967 6.33333 7.99967H9.66667C10.2855 7.99967 10.879 8.24551 11.3166 8.68309C11.7542 9.12068 12 9.71417 12 10.333C12 10.9518 11.7542 11.5453 11.3166 11.9829C10.879 12.4205 10.2855 12.6663 9.66667 12.6663H4"
stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round" />
</svg>

After

Width:  |  Height:  |  Size: 742 B

3
packages/nc-gui/assets/nc-icons/dropbox.svg

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="30" viewBox="0 0 32 30" fill="none">
<path d="M7.99997 1.37793L0 6.50998L7.99997 11.5666L15.9999 6.50998L7.99997 1.37793ZM23.9999 1.37793L15.9999 6.50998L23.9999 11.5666L31.9999 6.50998L23.9999 1.37793ZM0 16.6986L7.99997 21.8307L15.9999 16.6986L7.99997 11.5666L0 16.6986ZM23.9999 11.5666L15.9999 16.6986L23.9999 21.8307L31.9999 16.6986L23.9999 11.5666ZM7.99997 23.491L15.9999 28.6231L23.9999 23.491L15.9999 18.4345L7.99997 23.491Z" fill="#0062FF"/>
</svg>

After

Width:  |  Height:  |  Size: 516 B

8
packages/nc-gui/assets/nc-icons/gift.svg

@ -0,0 +1,8 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20 12V22H4V12" fill="#FF4A3F"/>
<path d="M20 12V22H4V12" stroke="#1F293A" stroke-width="0.4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M22 7H2V12H22V7Z" fill="#FF4A3F" stroke="#1F293A" stroke-width="0.4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 22V7" stroke="#FCBE3A" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 7H16.5C17.163 7 17.7989 6.73661 18.2678 6.26777C18.7366 5.79893 19 5.16304 19 4.5C19 3.83696 18.7366 3.20107 18.2678 2.73223C17.7989 2.26339 17.163 2 16.5 2C13 2 12 7 12 7Z" stroke="#FCBE3A" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 7H7.5C6.83696 7 6.20107 6.73661 5.73223 6.26777C5.26339 5.79893 5 5.16304 5 4.5C5 3.83696 5.26339 3.20107 5.73223 2.73223C6.20107 2.26339 6.83696 2 7.5 2C11 2 12 7 12 7Z" stroke="#FCBE3A" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

5
packages/nc-gui/assets/nc-icons/git-commit.svg

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<path d="M11.3401 8H15.3068" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M0.699951 8H4.66662" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M7.99992 10.6663C9.47268 10.6663 10.6666 9.47243 10.6666 7.99967C10.6666 6.52692 9.47268 5.33301 7.99992 5.33301C6.52716 5.33301 5.33325 6.52692 5.33325 7.99967C5.33325 9.47243 6.52716 10.6663 7.99992 10.6663Z" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 669 B

17
packages/nc-gui/assets/nc-icons/github_solid.svg

@ -0,0 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_881_27792)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.0003 0.666656C12.202 0.668627 8.52813 2.01393 5.63578 4.46202C2.74344 6.91011 0.821164 10.3013 0.212685 14.0293C-0.395793 17.7573 0.349195 21.5789 2.31445 24.8109C4.27971 28.0428 7.33708 30.4743 10.9399 31.6706C11.7347 31.8181 12.0341 31.3255 12.0341 30.9067C12.0341 30.4878 12.0182 29.2733 12.0129 27.9456C7.56182 28.9072 6.62127 26.0673 6.62127 26.0673C5.89532 24.2232 4.84614 23.7385 4.84614 23.7385C3.39425 22.7533 4.95478 22.7717 4.95478 22.7717C6.56299 22.885 7.40817 24.4129 7.40817 24.4129C8.83357 26.8444 11.1518 26.1411 12.0632 25.7301C12.2063 24.7001 12.6223 23.9993 13.0806 23.6015C9.52507 23.2011 5.78934 21.8365 5.78934 15.7406C5.76731 14.1596 6.35732 12.6307 7.43731 11.4702C7.27304 11.0698 6.7246 9.4523 7.59361 7.25523C7.59361 7.25523 8.9369 6.82846 11.9944 8.88591C14.6168 8.17282 17.3838 8.17282 20.0063 8.88591C23.0611 6.82846 24.4017 7.25523 24.4017 7.25523C25.2734 9.44703 24.7249 11.0645 24.5607 11.4702C25.6441 12.6309 26.2353 14.1625 26.2113 15.7458C26.2113 21.8549 22.4676 23.2011 18.9067 23.5936C19.479 24.0889 19.9904 25.0557 19.9904 26.5415C19.9904 28.6701 19.9718 30.3824 19.9718 30.9067C19.9718 31.3308 20.2606 31.826 21.0713 31.6706C24.6746 30.4742 27.7322 28.0423 29.6974 24.8098C31.6627 21.5773 32.4073 17.7551 31.7981 14.0267C31.1889 10.2984 29.2657 6.90713 26.3724 4.45946C23.4791 2.0118 19.8044 0.667378 16.0056 0.666656H16.0003Z" fill="#191717"/>
<path d="M10.7038 26.6337C10.7038 26.7628 10.5554 26.8734 10.3647 26.8761C10.1739 26.8787 10.0176 26.7733 10.0176 26.6442C10.0176 26.5152 10.1659 26.4045 10.3567 26.4019C10.5475 26.3992 10.7038 26.502 10.7038 26.6337Z" fill="#191717"/>
<path d="M11.9225 26.4309C11.9463 26.5599 11.8139 26.6943 11.6231 26.7259C11.4323 26.7575 11.2654 26.6811 11.2416 26.5547C11.2177 26.4282 11.3555 26.2912 11.541 26.257C11.7264 26.2227 11.8986 26.3018 11.9225 26.4309Z" fill="#191717"/>
<path d="M9.39494 26.5441C9.3552 26.6679 9.17503 26.7233 8.99487 26.6706C8.81471 26.6179 8.69548 26.4704 8.72993 26.3439C8.76437 26.2175 8.94718 26.1595 9.12999 26.2175C9.31281 26.2754 9.42938 26.415 9.39494 26.5441Z" fill="#191717"/>
<path d="M8.19474 26.0278C8.10731 26.1252 7.9298 26.0989 7.78408 25.9672C7.63836 25.8355 7.60391 25.6563 7.69134 25.5615C7.77877 25.4667 7.95629 25.493 8.1073 25.6221C8.25832 25.7512 8.28747 25.9329 8.19474 26.0278Z" fill="#191717"/>
<path d="M7.33903 25.1426C7.241 25.2111 7.07408 25.1426 6.98135 25.0057C6.95571 24.9811 6.93532 24.9516 6.92139 24.919C6.90746 24.8864 6.90027 24.8514 6.90027 24.816C6.90027 24.7806 6.90746 24.7455 6.92139 24.7129C6.93532 24.6803 6.95571 24.6509 6.98135 24.6263C7.07938 24.5605 7.2463 24.6263 7.33903 24.7607C7.43176 24.895 7.43441 25.0742 7.33903 25.1426Z" fill="#191717"/>
<path d="M6.70835 24.2285C6.65348 24.256 6.5907 24.2637 6.53077 24.2502C6.47084 24.2368 6.41748 24.203 6.37982 24.1547C6.27649 24.0441 6.25528 23.8913 6.33477 23.8228C6.41425 23.7543 6.55733 23.7859 6.66066 23.8966C6.76399 24.0072 6.78783 24.16 6.70835 24.2285Z" fill="#191717"/>
<path d="M6.05921 23.5093C6.02476 23.5884 5.89759 23.6121 5.79426 23.5568C5.69094 23.5014 5.61411 23.3987 5.6512 23.317C5.68829 23.2354 5.81282 23.2143 5.91614 23.2696C6.01947 23.3249 6.09895 23.4303 6.05921 23.5093Z" fill="#191717"/>
</g>
<defs>
<clipPath id="clip0_881_27792">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

16
packages/nc-gui/assets/nc-icons/gitlab.svg

@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" width="36" height="32" viewBox="0 0 36 32" fill="none">
<g clip-path="url(#clip0_881_27798)">
<path d="M18.0102 32.0101L24.3971 12.3531H11.6232L18.0102 32.0101Z" fill="#E24329"/>
<path d="M18.0102 32.0101L11.6232 12.3531H2.672L18.0102 32.0101Z" fill="#FC6D26"/>
<path d="M2.67197 12.3531L0.731078 18.3267C0.554047 18.8715 0.747938 19.4684 1.21142 19.8051L18.0101 32.0101L2.67197 12.3531Z" fill="#FCA326"/>
<path d="M2.672 12.3532H11.6232L7.77629 0.513932C7.57844 -0.0953436 6.71659 -0.0951783 6.51873 0.513932L2.672 12.3532Z" fill="#E24329"/>
<path d="M18.0101 32.0101L24.3971 12.3531H33.3483L18.0101 32.0101Z" fill="#FC6D26"/>
<path d="M33.3483 12.3531L35.2892 18.3267C35.4662 18.8715 35.2723 19.4684 34.8089 19.8051L18.0101 32.0101L33.3483 12.3531Z" fill="#FCA326"/>
<path d="M33.3483 12.3532H24.3971L28.244 0.513932C28.4419 -0.0953436 29.3037 -0.0951783 29.5016 0.513932L33.3483 12.3532Z" fill="#E24329"/>
</g>
<defs>
<clipPath id="clip0_881_27798">
<rect width="34.7119" height="32" fill="white" transform="translate(0.644043)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

12
packages/nc-gui/assets/nc-icons/globe.svg

@ -0,0 +1,12 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="globe" clip-path="url(#clip0_184_5557)">
<path id="Vector" d="M8.00001 14.6666C11.6819 14.6666 14.6667 11.6819 14.6667 7.99998C14.6667 4.31808 11.6819 1.33331 8.00001 1.33331C4.31811 1.33331 1.33334 4.31808 1.33334 7.99998C1.33334 11.6819 4.31811 14.6666 8.00001 14.6666Z" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path id="Vector_2" d="M1.33334 8H14.6667" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path id="Vector_3" d="M8.00001 1.33331C9.66753 3.15888 10.6152 5.528 10.6667 7.99998C10.6152 10.472 9.66753 12.8411 8.00001 14.6666C6.33249 12.8411 5.38484 10.472 5.33334 7.99998C5.38484 5.528 6.33249 3.15888 8.00001 1.33331V1.33331Z" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<defs>
<clipPath id="clip0_184_5557">
<rect width="16" height="16" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

14
packages/nc-gui/assets/nc-icons/gmail.svg

@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="24" viewBox="0 0 32 24" fill="none">
<g clip-path="url(#clip0_858_13960)">
<path d="M2.18182 23.9998H7.27273V11.6362L0 6.18164V21.818C0 23.0253 0.978182 23.9998 2.18182 23.9998Z" fill="#4285F4"/>
<path d="M24.7275 23.9998H29.8184C31.0257 23.9998 32.0003 23.0216 32.0003 21.818V6.18164L24.7275 11.6362" fill="#34A853"/>
<path d="M24.7275 2.18215V11.6367L32.0003 6.18215V3.27306C32.0003 0.574876 28.9203 -0.963306 26.7639 0.654875" fill="#FBBC04"/>
<path d="M7.27246 11.6362V2.18164L15.9997 8.7271L24.727 2.18164V11.6362L15.9997 18.1816" fill="#EA4335"/>
<path d="M0 3.27306V6.18215L7.27273 11.6367V2.18215L5.23636 0.654875C3.07636 -0.963306 0 0.574876 0 3.27306Z" fill="#C5221F"/>
</g>
<defs>
<clipPath id="clip0_858_13960">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 895 B

89
packages/nc-gui/assets/nc-icons/google-docs.svg

@ -0,0 +1,89 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="47px" height="65px" viewBox="0 0 47 65" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 54.1 (76490) - https://sketchapp.com -->
<title>Docs-icon</title>
<desc>Created with Sketch.</desc>
<defs>
<path d="M29.375,0 L4.40625,0 C1.9828125,0 0,1.99431818 0,4.43181818 L0,60.5681818 C0,63.0056818 1.9828125,65 4.40625,65 L42.59375,65 C45.0171875,65 47,63.0056818 47,60.5681818 L47,17.7272727 L29.375,0 Z" id="path-1"></path>
<path d="M29.375,0 L4.40625,0 C1.9828125,0 0,1.99431818 0,4.43181818 L0,60.5681818 C0,63.0056818 1.9828125,65 4.40625,65 L42.59375,65 C45.0171875,65 47,63.0056818 47,60.5681818 L47,17.7272727 L29.375,0 Z" id="path-3"></path>
<linearGradient x1="50.0053945%" y1="8.58610612%" x2="50.0053945%" y2="100.013939%" id="linearGradient-5">
<stop stop-color="#1A237E" stop-opacity="0.2" offset="0%"></stop>
<stop stop-color="#1A237E" stop-opacity="0.02" offset="100%"></stop>
</linearGradient>
<path d="M29.375,0 L4.40625,0 C1.9828125,0 0,1.99431818 0,4.43181818 L0,60.5681818 C0,63.0056818 1.9828125,65 4.40625,65 L42.59375,65 C45.0171875,65 47,63.0056818 47,60.5681818 L47,17.7272727 L29.375,0 Z" id="path-6"></path>
<path d="M29.375,0 L4.40625,0 C1.9828125,0 0,1.99431818 0,4.43181818 L0,60.5681818 C0,63.0056818 1.9828125,65 4.40625,65 L42.59375,65 C45.0171875,65 47,63.0056818 47,60.5681818 L47,17.7272727 L29.375,0 Z" id="path-8"></path>
<path d="M29.375,0 L4.40625,0 C1.9828125,0 0,1.99431818 0,4.43181818 L0,60.5681818 C0,63.0056818 1.9828125,65 4.40625,65 L42.59375,65 C45.0171875,65 47,63.0056818 47,60.5681818 L47,17.7272727 L29.375,0 Z" id="path-10"></path>
<path d="M29.375,0 L4.40625,0 C1.9828125,0 0,1.99431818 0,4.43181818 L0,60.5681818 C0,63.0056818 1.9828125,65 4.40625,65 L42.59375,65 C45.0171875,65 47,63.0056818 47,60.5681818 L47,17.7272727 L29.375,0 Z" id="path-12"></path>
<path d="M29.375,0 L4.40625,0 C1.9828125,0 0,1.99431818 0,4.43181818 L0,60.5681818 C0,63.0056818 1.9828125,65 4.40625,65 L42.59375,65 C45.0171875,65 47,63.0056818 47,60.5681818 L47,17.7272727 L29.375,0 Z" id="path-14"></path>
<radialGradient cx="3.16804688%" cy="2.71744318%" fx="3.16804688%" fy="2.71744318%" r="161.248516%" gradientTransform="translate(0.031680,0.027174),scale(1.000000,0.723077),translate(-0.031680,-0.027174)" id="radialGradient-16">
<stop stop-color="#FFFFFF" stop-opacity="0.1" offset="0%"></stop>
<stop stop-color="#FFFFFF" stop-opacity="0" offset="100%"></stop>
</radialGradient>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Consumer-Apps-Docs-Large-VD-R8" transform="translate(-451.000000, -463.000000)">
<g id="Hero" transform="translate(0.000000, 63.000000)">
<g id="Personal" transform="translate(277.000000, 309.000000)">
<g id="Docs-icon" transform="translate(174.000000, 91.000000)">
<g id="Group">
<g id="Clipped">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="SVGID_1_"></g>
<path d="M29.375,0 L4.40625,0 C1.9828125,0 0,1.99431818 0,4.43181818 L0,60.5681818 C0,63.0056818 1.9828125,65 4.40625,65 L42.59375,65 C45.0171875,65 47,63.0056818 47,60.5681818 L47,17.7272727 L36.71875,10.3409091 L29.375,0 Z" id="Path" fill="#4285F4" fill-rule="nonzero" mask="url(#mask-2)"></path>
</g>
<g id="Clipped">
<mask id="mask-4" fill="white">
<use xlink:href="#path-3"></use>
</mask>
<g id="SVGID_1_"></g>
<polygon id="Path" fill="url(#linearGradient-5)" fill-rule="nonzero" mask="url(#mask-4)" points="30.6638281 16.4309659 47 32.8582386 47 17.7272727"></polygon>
</g>
<g id="Clipped">
<mask id="mask-7" fill="white">
<use xlink:href="#path-6"></use>
</mask>
<g id="SVGID_1_"></g>
<path d="M11.75,47.2727273 L35.25,47.2727273 L35.25,44.3181818 L11.75,44.3181818 L11.75,47.2727273 Z M11.75,53.1818182 L29.375,53.1818182 L29.375,50.2272727 L11.75,50.2272727 L11.75,53.1818182 Z M11.75,32.5 L11.75,35.4545455 L35.25,35.4545455 L35.25,32.5 L11.75,32.5 Z M11.75,41.3636364 L35.25,41.3636364 L35.25,38.4090909 L11.75,38.4090909 L11.75,41.3636364 Z" id="Shape" fill="#F1F1F1" fill-rule="nonzero" mask="url(#mask-7)"></path>
</g>
<g id="Clipped">
<mask id="mask-9" fill="white">
<use xlink:href="#path-8"></use>
</mask>
<g id="SVGID_1_"></g>
<g id="Group" mask="url(#mask-9)">
<g transform="translate(26.437500, -2.954545)">
<path d="M2.9375,2.95454545 L2.9375,16.25 C2.9375,18.6985795 4.90929688,20.6818182 7.34375,20.6818182 L20.5625,20.6818182 L2.9375,2.95454545 Z" id="Path" fill="#A1C2FA" fill-rule="nonzero"></path>
</g>
</g>
</g>
<g id="Clipped">
<mask id="mask-11" fill="white">
<use xlink:href="#path-10"></use>
</mask>
<g id="SVGID_1_"></g>
<path d="M4.40625,0 C1.9828125,0 0,1.99431818 0,4.43181818 L0,4.80113636 C0,2.36363636 1.9828125,0.369318182 4.40625,0.369318182 L29.375,0.369318182 L29.375,0 L4.40625,0 Z" id="Path" fill-opacity="0.2" fill="#FFFFFF" fill-rule="nonzero" mask="url(#mask-11)"></path>
</g>
<g id="Clipped">
<mask id="mask-13" fill="white">
<use xlink:href="#path-12"></use>
</mask>
<g id="SVGID_1_"></g>
<path d="M42.59375,64.6306818 L4.40625,64.6306818 C1.9828125,64.6306818 0,62.6363636 0,60.1988636 L0,60.5681818 C0,63.0056818 1.9828125,65 4.40625,65 L42.59375,65 C45.0171875,65 47,63.0056818 47,60.5681818 L47,60.1988636 C47,62.6363636 45.0171875,64.6306818 42.59375,64.6306818 Z" id="Path" fill-opacity="0.2" fill="#1A237E" fill-rule="nonzero" mask="url(#mask-13)"></path>
</g>
<g id="Clipped">
<mask id="mask-15" fill="white">
<use xlink:href="#path-14"></use>
</mask>
<g id="SVGID_1_"></g>
<path d="M33.78125,17.7272727 C31.3467969,17.7272727 29.375,15.7440341 29.375,13.2954545 L29.375,13.6647727 C29.375,16.1133523 31.3467969,18.0965909 33.78125,18.0965909 L47,18.0965909 L47,17.7272727 L33.78125,17.7272727 Z" id="Path" fill-opacity="0.1" fill="#1A237E" fill-rule="nonzero" mask="url(#mask-15)"></path>
</g>
</g>
<path d="M29.375,0 L4.40625,0 C1.9828125,0 0,1.99431818 0,4.43181818 L0,60.5681818 C0,63.0056818 1.9828125,65 4.40625,65 L42.59375,65 C45.0171875,65 47,63.0056818 47,60.5681818 L47,17.7272727 L29.375,0 Z" id="Path" fill="url(#radialGradient-16)" fill-rule="nonzero"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.0 KiB

15
packages/nc-gui/assets/nc-icons/google-drive.svg

@ -0,0 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="30" viewBox="0 0 32 30" fill="none">
<g clip-path="url(#clip0_881_27829)">
<path d="M2.41928 25.1917L3.83052 27.6293C4.12375 28.1425 4.54528 28.5457 5.04014 28.839C6.45753 27.0398 7.44418 25.6591 8.00008 24.6969C8.56421 23.7204 9.25762 22.1931 10.0803 20.115C7.8633 19.8231 6.18325 19.6772 5.04014 19.6772C3.94318 19.6772 2.26314 19.8231 0 20.115C0 20.6831 0.146624 21.2513 0.439867 21.7644L2.41928 25.1917Z" fill="#0066DA"/>
<path d="M26.9602 28.839C27.455 28.5457 27.8766 28.1425 28.1698 27.6293L28.7563 26.6213L31.5604 21.7644C31.8537 21.2513 32.0003 20.6831 32.0003 20.115C29.7241 19.8231 28.0471 19.6772 26.9693 19.6772C25.8111 19.6772 24.1341 19.8231 21.9384 20.115C22.7513 22.2045 23.4355 23.7318 23.9911 24.6969C24.5515 25.6705 25.5412 27.0512 26.9602 28.839Z" fill="#EA4335"/>
<path d="M16.0001 9.85139C17.6401 7.87069 18.7703 6.34338 19.3908 5.26945C19.8904 4.4047 20.4402 3.02401 21.0402 1.12737C20.5454 0.83412 19.9772 0.6875 19.3908 0.6875H12.6095C12.023 0.6875 11.4548 0.852448 10.96 1.12737C11.7232 3.30263 12.3709 4.85073 12.903 5.77167C13.4909 6.7894 14.5233 8.14931 16.0001 9.85139Z" fill="#00832D"/>
<path d="M21.92 20.115H10.0803L5.04016 28.839C5.53502 29.1323 6.10318 29.2789 6.68968 29.2789H25.3107C25.8972 29.2789 26.4653 29.1139 26.9602 28.839L21.92 20.115Z" fill="#2684FC"/>
<path d="M16.0002 9.85141L10.96 1.12738C10.4652 1.42062 10.0436 1.82382 9.75038 2.33702L0.439867 18.4655C0.146624 18.9787 0 19.5468 0 20.115H10.0803L16.0002 9.85141Z" fill="#00AC47"/>
<path d="M26.9052 10.4013L22.2499 2.33702C21.9567 1.82382 21.5351 1.42062 21.0402 1.12738L16.0001 9.85141L21.92 20.115H31.982C31.982 19.5468 31.8353 18.9787 31.5421 18.4655L26.9052 10.4013Z" fill="#FFBA00"/>
</g>
<defs>
<clipPath id="clip0_881_27829">
<rect width="32" height="28.625" fill="white" transform="translate(0 0.6875)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

17
packages/nc-gui/assets/nc-icons/google_calendar.svg

@ -0,0 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_881_27812)">
<path d="M24.421 7.57895H7.57886V24.4211H24.421V7.57895Z" fill="white"/>
<path d="M24.4212 32L32.0001 24.4211L28.2106 23.7745L24.4212 24.4211L23.7295 27.8873L24.4212 32Z" fill="#EA4335"/>
<path d="M0 24.4211V29.4737C0 30.8695 1.13053 32 2.52632 32H7.57895L8.35711 28.2105L7.57895 24.4211L3.4499 23.7745L0 24.4211Z" fill="#188038"/>
<path d="M32.0001 7.57895V2.52632C32.0001 1.13053 30.8696 0 29.4738 0H24.4212C23.96 1.87948 23.7295 3.26264 23.7295 4.14947C23.7295 5.03629 23.96 6.17945 24.4212 7.57895C26.0973 8.05894 27.3605 8.29893 28.2106 8.29893C29.0607 8.29893 30.3239 8.05894 32.0001 7.57895Z" fill="#1967D2"/>
<path d="M32.0001 7.57895H24.4211V24.4211H32.0001V7.57895Z" fill="#FBBC04"/>
<path d="M24.421 24.4211H7.57886V32H24.421V24.4211Z" fill="#34A853"/>
<path d="M24.4211 0H2.52632C1.13053 0 0 1.13053 0 2.52632V24.4211H7.57895V7.57895H24.4211V0Z" fill="#4285F4"/>
<path d="M11.0336 20.6442C10.4042 20.219 9.96836 19.5979 9.73047 18.7768L11.1915 18.1747C11.3242 18.68 11.5557 19.0716 11.8863 19.3495C12.2147 19.6274 12.6147 19.7642 13.082 19.7642C13.5599 19.7642 13.9705 19.619 14.3136 19.3284C14.6568 19.0379 14.8294 18.6674 14.8294 18.219C14.8294 17.76 14.6484 17.3853 14.2863 17.0947C13.9242 16.8042 13.4694 16.659 12.9263 16.659H12.082V15.2126H12.8399C13.3073 15.2126 13.701 15.0863 14.021 14.8337C14.341 14.5811 14.501 14.2358 14.501 13.7958C14.501 13.4042 14.3578 13.0926 14.0715 12.859C13.7852 12.6253 13.4231 12.5074 12.9831 12.5074C12.5536 12.5074 12.2126 12.6211 11.9599 12.8505C11.7075 13.0806 11.5177 13.3711 11.4084 13.6947L9.96205 13.0926C10.1536 12.5495 10.5052 12.0695 11.021 11.6547C11.5368 11.24 12.1957 11.0316 12.9957 11.0316C13.5873 11.0316 14.1199 11.1453 14.5915 11.3747C15.0631 11.6042 15.4336 11.9221 15.701 12.3263C15.9684 12.7326 16.101 13.1874 16.101 13.6926C16.101 14.2084 15.9768 14.6442 15.7284 15.0021C15.4799 15.36 15.1747 15.6337 14.8126 15.8253V15.9116C15.2801 16.1044 15.6863 16.421 15.9873 16.8274C16.2926 17.2379 16.4463 17.7284 16.4463 18.3011C16.4463 18.8737 16.301 19.3853 16.0105 19.8337C15.7199 20.2821 15.3178 20.6358 14.8084 20.8926C14.2968 21.1495 13.722 21.28 13.0842 21.28C12.3452 21.2821 11.6631 21.0695 11.0336 20.6442ZM20.0084 13.3937L18.4042 14.5537L17.602 13.3368L20.4799 11.2611H21.5831V21.0526H20.0084V13.3937Z" fill="#4285F4"/>
</g>
<defs>
<clipPath id="clip0_881_27812">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

60
packages/nc-gui/assets/nc-icons/google_sheet.svg

@ -0,0 +1,60 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="32" viewBox="0 0 24 32" fill="none">
<g clip-path="url(#clip0_881_27842)">
<mask id="mask0_881_27842" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="24" height="32">
<path d="M14.8258 0.457703H2.81581C1.65014 0.457703 0.696411 1.41143 0.696411 2.57711V29.4229C0.696411 30.5885 1.65014 31.5423 2.81581 31.5423H21.184C22.3496 31.5423 23.3034 30.5885 23.3034 29.4229V8.93531L14.8258 0.457703Z" fill="white"/>
</mask>
<g mask="url(#mask0_881_27842)">
<path d="M14.8258 0.457703H2.81581C1.65014 0.457703 0.696411 1.41143 0.696411 2.57711V29.4229C0.696411 30.5885 1.65014 31.5423 2.81581 31.5423H21.184C22.3496 31.5423 23.3034 30.5885 23.3034 29.4229V8.93531L18.3581 5.40298L14.8258 0.457703Z" fill="#0F9D58"/>
</g>
<mask id="mask1_881_27842" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="24" height="32">
<path d="M14.8258 0.457703H2.81581C1.65014 0.457703 0.696411 1.41143 0.696411 2.57711V29.4229C0.696411 30.5885 1.65014 31.5423 2.81581 31.5423H21.184C22.3496 31.5423 23.3034 30.5885 23.3034 29.4229V8.93531L14.8258 0.457703Z" fill="white"/>
</mask>
<g mask="url(#mask1_881_27842)">
<path d="M6.34814 15.6467V25.8905H17.6516V15.6467H6.34814ZM11.2934 24.4776H7.76108V22.7114H11.2934V24.4776ZM11.2934 21.6517H7.76108V19.8855H11.2934V21.6517ZM11.2934 18.8258H7.76108V17.0597H11.2934V18.8258ZM16.2387 24.4776H12.7064V22.7114H16.2387V24.4776ZM16.2387 21.6517H12.7064V19.8855H16.2387V21.6517ZM16.2387 18.8258H12.7064V17.0597H16.2387V18.8258Z" fill="#F1F1F1"/>
</g>
<mask id="mask2_881_27842" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="24" height="32">
<path d="M14.8258 0.457703H2.81581C1.65014 0.457703 0.696411 1.41143 0.696411 2.57711V29.4229C0.696411 30.5885 1.65014 31.5423 2.81581 31.5423H21.184C22.3496 31.5423 23.3034 30.5885 23.3034 29.4229V8.93531L14.8258 0.457703Z" fill="white"/>
</mask>
<g mask="url(#mask2_881_27842)">
<path d="M15.4457 8.31537L23.3034 16.1713V8.93529L15.4457 8.31537Z" fill="url(#paint0_linear_881_27842)"/>
</g>
<mask id="mask3_881_27842" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="24" height="32">
<path d="M14.8258 0.457703H2.81581C1.65014 0.457703 0.696411 1.41143 0.696411 2.57711V29.4229C0.696411 30.5885 1.65014 31.5423 2.81581 31.5423H21.184C22.3496 31.5423 23.3034 30.5885 23.3034 29.4229V8.93531L14.8258 0.457703Z" fill="white"/>
</mask>
<g mask="url(#mask3_881_27842)">
<path d="M14.8258 0.457703V6.81591C14.8258 7.98688 15.7742 8.93531 16.9452 8.93531H23.3034L14.8258 0.457703Z" fill="#87CEAC"/>
</g>
<mask id="mask4_881_27842" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="24" height="32">
<path d="M14.8258 0.457703H2.81581C1.65014 0.457703 0.696411 1.41143 0.696411 2.57711V29.4229C0.696411 30.5885 1.65014 31.5423 2.81581 31.5423H21.184C22.3496 31.5423 23.3034 30.5885 23.3034 29.4229V8.93531L14.8258 0.457703Z" fill="white"/>
</mask>
<g mask="url(#mask4_881_27842)">
<path d="M2.81581 0.457703C1.65014 0.457703 0.696411 1.41143 0.696411 2.57711V2.75372C0.696411 1.58805 1.65014 0.63432 2.81581 0.63432H14.8258V0.457703H2.81581Z" fill="white" fill-opacity="0.2"/>
</g>
<mask id="mask5_881_27842" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="24" height="32">
<path d="M14.8258 0.457703H2.81581C1.65014 0.457703 0.696411 1.41143 0.696411 2.57711V29.4229C0.696411 30.5885 1.65014 31.5423 2.81581 31.5423H21.184C22.3496 31.5423 23.3034 30.5885 23.3034 29.4229V8.93531L14.8258 0.457703Z" fill="white"/>
</mask>
<g mask="url(#mask5_881_27842)">
<path d="M21.184 31.3657H2.81581C1.65014 31.3657 0.696411 30.4119 0.696411 29.2463V29.4229C0.696411 30.5886 1.65014 31.5423 2.81581 31.5423H21.184C22.3496 31.5423 23.3034 30.5886 23.3034 29.4229V29.2463C23.3034 30.4119 22.3496 31.3657 21.184 31.3657Z" fill="#263238" fill-opacity="0.2"/>
</g>
<mask id="mask6_881_27842" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="24" height="32">
<path d="M14.8258 0.457703H2.81581C1.65014 0.457703 0.696411 1.41143 0.696411 2.57711V29.4229C0.696411 30.5885 1.65014 31.5423 2.81581 31.5423H21.184C22.3496 31.5423 23.3034 30.5885 23.3034 29.4229V8.93531L14.8258 0.457703Z" fill="white"/>
</mask>
<g mask="url(#mask6_881_27842)">
<path d="M16.9452 8.93532C15.7742 8.93532 14.8258 7.98689 14.8258 6.81592V6.99254C14.8258 8.16351 15.7742 9.11194 16.9452 9.11194H23.3034V8.93532H16.9452Z" fill="#263238" fill-opacity="0.1"/>
</g>
<path d="M14.8258 0.457703H2.81581C1.65014 0.457703 0.696411 1.41143 0.696411 2.57711V29.4229C0.696411 30.5885 1.65014 31.5423 2.81581 31.5423H21.184C22.3496 31.5423 23.3034 30.5885 23.3034 29.4229V8.93531L14.8258 0.457703Z" fill="url(#paint1_radial_881_27842)"/>
</g>
<defs>
<linearGradient id="paint0_linear_881_27842" x1="408.372" y1="75.7671" x2="408.372" y2="794.017" gradientUnits="userSpaceOnUse">
<stop stop-color="#263238" stop-opacity="0.2"/>
<stop offset="1" stop-color="#263238" stop-opacity="0.02"/>
</linearGradient>
<radialGradient id="paint1_radial_881_27842" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(72.3164 61.8945) scale(3645.34 3645.34)">
<stop stop-color="white" stop-opacity="0.1"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</radialGradient>
<clipPath id="clip0_881_27842">
<rect width="23.403" height="32" fill="white" transform="translate(0.298462)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.6 KiB

3
packages/nc-gui/assets/nc-icons/greenhouse.svg

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="32" viewBox="0 0 18 32" fill="none">
<path d="M9.26916 31.9355C5.0929 31.9966 1.68765 28.4146 1.76597 24.2757C1.79907 22.2849 2.61686 20.3876 4.04149 18.9967C5.46611 17.6057 7.38233 16.8334 9.37335 16.8479C13.3513 16.8587 16.6818 20.2726 16.7537 24.2541C16.8298 28.472 13.3527 32.0002 9.26916 31.9355ZM15.4092 24.4395C15.4344 21.0206 12.701 18.2297 9.30149 18.2038C5.90199 18.178 3.13123 20.9272 3.10249 24.3454C3.08486 25.9882 3.7203 27.5707 4.86913 28.7451C6.01796 29.9196 7.58613 30.5897 9.22892 30.6083C12.5911 30.6507 15.3841 27.8627 15.4092 24.4395ZM1.78106 9.08749C1.77443 8.27131 1.9293 7.46188 2.23677 6.70579C2.54424 5.94971 2.99822 5.26192 3.57259 4.68201C4.14696 4.1021 4.83036 3.64152 5.58346 3.32681C6.33655 3.01209 7.14446 2.84945 7.96066 2.84825C11.3523 2.84178 14.146 5.64272 14.151 9.05372C14.1568 12.5136 11.4069 15.3145 7.99515 15.3246C4.53314 15.3339 1.79112 12.5804 1.78106 9.08749ZM3.13986 9.04869C3.13368 9.68134 3.25217 10.309 3.48856 10.8959C3.72496 11.4827 4.07463 12.0173 4.51761 12.469C4.96059 12.9207 5.48821 13.2808 6.07034 13.5286C6.65247 13.7764 7.27771 13.9071 7.91037 13.9133C8.54302 13.9195 9.17069 13.801 9.75755 13.5646C10.3444 13.3282 10.879 12.9786 11.3307 12.5356C11.7824 12.0926 12.1425 11.565 12.3903 10.9828C12.6381 10.4007 12.7688 9.77547 12.775 9.14282C12.7923 6.44607 10.6581 4.24728 8.00378 4.22572C5.33577 4.20704 3.16069 6.36272 3.13986 9.04869ZM11.6167 1.26167C11.619 0.926071 11.7545 0.605124 11.9934 0.369437C12.1117 0.252736 12.2518 0.160479 12.4058 0.0979338C12.5598 0.0353886 12.7245 0.00377984 12.8907 0.00491219C13.0569 0.00604454 13.2212 0.0398959 13.3743 0.104533C13.5274 0.169171 13.6662 0.263329 13.7829 0.381631C13.8996 0.499933 13.9919 0.640063 14.0544 0.794019C14.117 0.947976 14.1486 1.11274 14.1475 1.27892C14.1493 1.44676 14.1175 1.61327 14.0541 1.76867C13.9907 1.92408 13.8968 2.06524 13.7781 2.18386C13.6593 2.30248 13.5181 2.39617 13.3626 2.45942C13.2071 2.52268 13.0406 2.55422 12.8727 2.5522C12.1614 2.54717 11.6167 1.9867 11.6167 1.26167Z" fill="#38B2A7"/>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

11
packages/nc-gui/assets/nc-icons/groq.svg

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_926_22160)">
<path d="M0 16C0 7.16344 7.16344 0 16 0C24.8366 0 32 7.16344 32 16C32 24.8366 24.8366 32 16 32C7.16344 32 0 24.8366 0 16Z" fill="#F54F35"/>
<path d="M20.3783 7.80069L20.68 8.04268C21.7054 8.96097 22.3846 10.2668 22.6071 11.6216C22.6226 11.9118 22.6307 12.2024 22.6328 12.4931L22.6375 13.01L22.6395 13.5644L22.6422 14.1396C22.6438 14.5411 22.6447 14.9426 22.6453 15.3439C22.6469 15.9553 22.6519 16.5666 22.6568 17.1781C22.6579 17.569 22.6587 17.9598 22.6594 18.3505L22.6654 18.9009C22.6602 20.7663 22.1284 22.3763 20.8385 23.7641C20.1138 24.4375 19.3821 24.9377 18.4678 25.3131L18.0878 25.4811C16.6112 26.0152 14.856 25.8627 13.4106 25.3012C12.612 24.9223 11.9529 24.4781 11.3037 23.8803C11.8892 23.1597 12.4834 22.5439 13.2141 21.9698L13.7017 22.348C14.5888 22.9781 15.4745 23.1776 16.5574 23.0843C17.6654 22.8639 18.5403 22.3675 19.2639 21.4922C19.9284 20.4122 19.9946 19.5464 19.9852 18.2932L19.9871 17.7403C19.9876 17.356 19.9863 16.9718 19.9836 16.5875C19.9804 16.0016 19.9836 15.4157 19.9878 14.8299C19.9873 14.4553 19.9865 14.0808 19.9852 13.7062L19.9892 13.1789C19.9736 11.9059 19.7134 11.0758 18.9255 10.0792C17.8452 9.21029 16.8392 8.772 15.4368 8.8387C14.2703 9.02784 13.3228 9.58696 12.6066 10.5264C12.0156 11.4643 11.759 12.4288 11.9405 13.532C12.2893 14.7335 12.7395 15.7526 13.8509 16.3977C14.7819 16.885 15.585 16.9586 16.6271 16.9849L17.0719 17.0013C17.4311 17.0143 17.7903 17.0247 18.1494 17.0345V19.5818C15.4936 19.6889 13.4346 19.6859 11.3272 17.8547C10.009 16.534 9.20376 14.7423 9.14453 12.8753C9.20726 11.304 9.7702 10.0265 10.6668 8.75592L10.9356 8.34788C13.4844 5.66147 17.5206 5.48205 20.3783 7.80069Z" fill="#FEFBFB"/>
</g>
<defs>
<clipPath id="clip0_926_22160">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

3
packages/nc-gui/assets/nc-icons/heart.svg

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<path d="M13.8931 3.07357C13.5526 2.73291 13.1483 2.46267 12.7033 2.2783C12.2584 2.09392 11.7814 1.99902 11.2998 1.99902C10.8181 1.99902 10.3412 2.09392 9.89618 2.2783C9.45121 2.46267 9.04692 2.73291 8.70642 3.07357L7.99975 3.78024L7.29309 3.07357C6.60529 2.38578 5.67244 1.99938 4.69975 1.99938C3.72706 1.99938 2.79422 2.38578 2.10642 3.07357C1.41863 3.76137 1.03223 4.69422 1.03223 5.66691C1.03223 6.6396 1.41863 7.57245 2.10642 8.26024L2.81309 8.96691L7.99975 14.1536L13.1864 8.96691L13.8931 8.26024C14.2337 7.91974 14.504 7.51545 14.6884 7.07048C14.8727 6.6255 14.9676 6.14857 14.9676 5.66691C14.9676 5.18525 14.8727 4.70831 14.6884 4.26334C14.504 3.81836 14.2337 3.41408 13.8931 3.07357V3.07357Z" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 900 B

10
packages/nc-gui/assets/nc-icons/hubspot.svg

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_881_27892)">
<path d="M29.3632 15.2004C28.6503 13.9836 27.6331 12.9731 26.4115 12.2683C25.4789 11.7263 24.5145 11.382 23.4256 11.2331V7.3341C23.9537 7.11528 24.404 6.74307 24.7182 6.26561C25.0324 5.78814 25.1962 5.22738 25.1883 4.65583C25.1903 4.26986 25.1159 3.88732 24.9696 3.53017C24.8232 3.17303 24.6077 2.84833 24.3354 2.57472C24.0632 2.30112 23.7396 2.08401 23.3832 1.93586C23.0268 1.78771 22.6446 1.71145 22.2586 1.71145C21.4768 1.71145 20.7269 2.02135 20.1732 2.57325C19.6194 3.12515 19.3071 3.87404 19.3045 4.65583C19.3045 5.85214 19.9392 6.87266 21.0306 7.3341V11.2111C20.1266 11.3419 19.2495 11.6173 18.4329 12.0266L7.9957 4.1236C8.06895 3.84771 8.13242 3.56207 8.13242 3.26177C8.13242 1.45998 6.67244 0 4.87066 0C3.06887 0 1.61133 1.45998 1.61133 3.26177C1.61133 5.06355 3.07131 6.52354 4.8731 6.52354C5.48834 6.52354 6.0572 6.34287 6.54793 6.04746L7.23153 6.56504L16.5945 13.3156C16.0989 13.7697 15.6374 14.2873 15.2688 14.8684C14.5217 16.0525 14.0651 17.3538 14.0651 18.7747V19.0677C14.0684 20.0313 14.242 20.9868 14.5778 21.89C14.861 22.6615 15.2761 23.3646 15.7912 23.9994L12.6808 27.1171C11.7604 26.7753 10.7277 27.0024 10.0319 27.6982C9.55823 28.1694 9.29211 28.8115 9.29455 29.4804C9.29699 30.1494 9.55823 30.7866 10.0343 31.2627C10.5104 31.7388 11.1476 32.0024 11.8166 32.0024C12.4855 32.0024 13.1276 31.7388 13.5988 31.2627C14.07 30.7866 14.3386 30.1494 14.3361 29.4804C14.3359 29.2236 14.2964 28.9684 14.2189 28.7236L17.4319 25.5106C17.8713 25.8158 18.3474 26.0722 18.8601 26.2919C19.9139 26.7541 21.0518 26.9935 22.2025 26.995H22.4222C23.7699 26.995 25.0419 26.6777 26.2357 26.0307C27.4629 25.3726 28.4939 24.4014 29.2241 23.2157C29.9736 22.0194 30.3837 20.6937 30.3837 19.2361V19.1629C30.3837 17.7298 30.0517 16.4089 29.3583 15.198L29.3632 15.2004ZM25.4398 21.9437C24.5682 22.9129 23.5648 23.5111 22.432 23.5111H22.2171C21.5701 23.5111 20.9354 23.3329 20.3177 23.0057C19.6404 22.6535 19.0665 22.131 18.6526 21.4896C18.2034 20.8548 17.9592 20.1614 17.9592 19.4266V19.2068C17.9592 18.4842 18.0984 17.7981 18.4475 17.1511C18.8211 16.4187 19.3264 15.8938 19.9978 15.4568C20.6692 15.0198 21.3602 14.8098 22.1463 14.8098H22.2196C22.9276 14.8098 23.6039 14.949 24.2386 15.2737C24.8817 15.6119 25.4279 16.1085 25.8256 16.7166C26.2193 17.3264 26.4628 18.0208 26.536 18.743L26.5531 19.1995C26.5531 20.1932 26.1723 21.1136 25.413 21.9486L25.4398 21.9437Z" fill="#F8761F"/>
</g>
<defs>
<clipPath id="clip0_881_27892">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

6
packages/nc-gui/assets/nc-icons/integration.svg

@ -0,0 +1,6 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.99307 13.3778C4.49298 12.8777 4.21203 12.1995 4.21203 11.4922C4.21203 10.785 4.49298 10.1067 4.99308 9.6066L5.46448 9.13519" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M6.64292 2.29989L12.2998 7.95669L10.1785 10.078C9.67838 10.5781 9.0001 10.859 8.29286 10.859C7.58561 10.859 6.90733 10.5781 6.40724 10.078L4.52162 8.19242C4.02153 7.69233 3.74058 7.01405 3.74058 6.3068C3.74058 5.59956 4.02153 4.92128 4.52162 4.42119L6.64292 2.29989Z" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M13.2426 4.18542L11.1212 6.30675" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M10.4142 1.35699L8.29286 3.47831" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 978 B

10
packages/nc-gui/assets/nc-icons/intercom.svg

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_858_14755)">
<path d="M27.7334 17.5935C27.7303 17.8744 27.6166 18.1428 27.4169 18.3403C27.2172 18.5379 26.9476 18.6487 26.6667 18.6487C26.3858 18.6487 26.1162 18.5379 25.9165 18.3403C25.7168 18.1428 25.603 17.8744 25.6 17.5935V8C25.603 7.7191 25.7168 7.45073 25.9165 7.25317C26.1162 7.05561 26.3858 6.9448 26.6667 6.9448C26.9476 6.9448 27.2172 7.05561 27.4169 7.25317C27.6166 7.45073 27.7303 7.7191 27.7334 8V17.5935ZM27.3611 24.2701C27.1963 24.4112 23.2449 27.727 16 27.727C8.75525 27.727 4.804 24.4111 4.63912 24.27C4.42437 24.0858 4.29155 23.8239 4.26986 23.5419C4.24818 23.2598 4.33941 22.9807 4.5235 22.7659C4.70719 22.5514 4.96845 22.4186 5.24996 22.3965C5.53148 22.3744 5.81025 22.4649 6.02513 22.6481C6.08775 22.7006 9.61625 25.5935 16.0001 25.5935C22.4641 25.5935 25.938 22.6798 25.9724 22.6504C26.4188 22.267 27.0934 22.3185 27.4765 22.766C27.6606 22.9808 27.7519 23.2599 27.7303 23.542C27.7087 23.824 27.5759 24.086 27.3611 24.2701ZM4.26662 8C4.26967 7.7191 4.38339 7.45073 4.5831 7.25317C4.78281 7.05561 5.05239 6.9448 5.33331 6.9448C5.61423 6.9448 5.88381 7.05561 6.08353 7.25317C6.28324 7.45073 6.39696 7.7191 6.4 8V17.5935C6.39696 17.8744 6.28324 18.1428 6.08353 18.3403C5.88381 18.5379 5.61423 18.6487 5.33331 18.6487C5.05239 18.6487 4.78281 18.5379 4.5831 18.3403C4.38339 18.1428 4.26967 17.8744 4.26662 17.5935V8ZM9.60013 5.86662C9.60441 5.58657 9.71867 5.31943 9.91824 5.1229C10.1178 4.92636 10.3867 4.81621 10.6667 4.81621C10.9468 4.81621 11.2157 4.92636 11.4153 5.1229C11.6148 5.31943 11.7291 5.58657 11.7334 5.86662V20.1168C11.7291 20.3968 11.6148 20.6639 11.4153 20.8605C11.2157 21.057 10.9468 21.1672 10.6667 21.1672C10.3867 21.1672 10.1178 21.057 9.91824 20.8605C9.71867 20.6639 9.60441 20.3968 9.60013 20.1168V5.86662ZM14.9334 5.32688C14.9334 5.1868 14.9609 5.04809 15.0145 4.91868C15.0681 4.78926 15.1467 4.67167 15.2457 4.57262C15.3448 4.47357 15.4624 4.39501 15.5918 4.34141C15.7212 4.28781 15.8599 4.26023 16 4.26025C16.1401 4.26022 16.2788 4.28778 16.4082 4.34137C16.5377 4.39496 16.6553 4.47353 16.7543 4.57258C16.8534 4.67163 16.932 4.78922 16.9856 4.91865C17.0392 5.04807 17.0668 5.18679 17.0667 5.32688V20.7935C17.0637 21.0744 16.95 21.3428 16.7503 21.5403C16.5506 21.7379 16.281 21.8487 16.0001 21.8487C15.7191 21.8487 15.4496 21.7379 15.2499 21.5403C15.0501 21.3428 14.9364 21.0744 14.9334 20.7935V5.32688ZM20.2668 5.86662C20.271 5.58657 20.3853 5.31943 20.5849 5.1229C20.7844 4.92636 21.0533 4.81621 21.3334 4.81621C21.6135 4.81621 21.8823 4.92636 22.0819 5.1229C22.2814 5.31943 22.3957 5.58657 22.4 5.86662V20.1168C22.3957 20.3968 22.2814 20.6639 22.0819 20.8605C21.8823 21.057 21.6135 21.1672 21.3334 21.1672C21.0533 21.1672 20.7844 21.057 20.5849 20.8605C20.3853 20.6639 20.271 20.3968 20.2668 20.1168V5.86662ZM28 0H4C1.79087 0 0 1.79087 0 4V28C0 30.209 1.79087 32 4 32H28C30.2091 32 32 30.209 32 28V4C32 1.79087 30.2091 0 28 0Z" fill="#1F8DED"/>
</g>
<defs>
<clipPath id="clip0_858_14755">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

20
packages/nc-gui/assets/nc-icons/jira.svg

@ -0,0 +1,20 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_881_27899)">
<path d="M30.5823 0H15.2134C15.2134 1.84001 15.9443 3.60466 17.2454 4.90575C18.5465 6.20684 20.3111 6.93778 22.1512 6.93778H24.9823V9.67111C24.9847 13.4993 28.0874 16.602 31.9156 16.6044V1.33333C31.9156 0.596954 31.3186 0 30.5823 0Z" fill="#2684FF"/>
<path d="M22.9778 7.65778H7.60889C7.61134 11.4859 10.7141 14.5887 14.5422 14.5911H17.3733V17.3333C17.3782 21.1615 20.4829 24.2622 24.3111 24.2622V8.99111C24.3111 8.25473 23.7142 7.65778 22.9778 7.65778Z" fill="url(#paint0_linear_881_27899)"/>
<path d="M15.3689 15.3111H0C0 19.1427 3.10615 22.2489 6.93778 22.2489H9.77778V24.9822C9.78022 28.8069 12.8775 31.9082 16.7022 31.9155V16.6444C16.7022 15.9081 16.1053 15.3111 15.3689 15.3111Z" fill="url(#paint1_linear_881_27899)"/>
</g>
<defs>
<linearGradient id="paint0_linear_881_27899" x1="1644.94" y1="10.3245" x2="995.143" y2="688.359" gradientUnits="userSpaceOnUse">
<stop offset="0.18" stop-color="#0052CC"/>
<stop offset="1" stop-color="#2684FF"/>
</linearGradient>
<linearGradient id="paint1_linear_881_27899" x1="1681.33" y1="22.8665" x2="929.674" y2="762.39" gradientUnits="userSpaceOnUse">
<stop offset="0.18" stop-color="#0052CC"/>
<stop offset="1" stop-color="#2684FF"/>
</linearGradient>
<clipPath id="clip0_881_27899">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

12
packages/nc-gui/assets/nc-icons/lever.svg

@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_858_14536)">
<path d="M31.6989 30.3151L25.6749 24.29C25.4846 24.1035 25.2288 23.999 24.9624 23.999C24.6959 23.999 24.4401 24.1035 24.2498 24.29L18.2258 30.3151C18.0821 30.452 17.9836 30.6295 17.9432 30.8238C17.9029 31.0182 17.9227 31.2202 18 31.4031C18.0773 31.5859 18.2084 31.7408 18.376 31.8473C18.5435 31.9538 18.7395 32.0067 18.9378 31.9991H30.9869C31.1841 32.004 31.3782 31.9494 31.544 31.8425C31.7097 31.7356 31.8395 31.5812 31.9163 31.3995C31.9931 31.2178 32.0135 31.0172 31.9747 30.8238C31.9359 30.6304 31.8398 30.4531 31.6989 30.3151Z" fill="#C3C6CC"/>
<path d="M31.8987 8.67475L30.0117 3.07272C29.9265 2.81938 29.7908 2.58598 29.6127 2.38672L0.228516 31.7699C0.400958 31.9242 0.626211 32.0062 0.857518 31.9989H9.20356C9.43682 32 9.66801 31.9551 9.88389 31.8667C10.0998 31.7784 10.2961 31.6483 10.4616 31.4839L31.4987 10.4468C31.7273 10.2202 31.8865 9.93309 31.9573 9.61914C32.0282 9.30519 32.0078 8.97752 31.8987 8.67475Z" fill="#E1E3E6"/>
<path d="M28.9266 1.98609L23.3246 0.100081C23.0218 -0.00908496 22.6941 -0.0294319 22.3802 0.0414374C22.0662 0.112307 21.7791 0.271439 21.5526 0.500082L0.514457 21.5372C0.183514 21.872 -0.00130248 22.3244 0.000454166 22.7952V31.1412C-0.00689207 31.3725 0.0751158 31.5978 0.229455 31.7702L29.6136 2.38712C29.4141 2.2084 29.1803 2.07197 28.9266 1.98609Z" fill="#C3C6CC"/>
</g>
<defs>
<clipPath id="clip0_858_14536">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

4
packages/nc-gui/assets/nc-icons/mail.svg

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<path d="M2.66683 2.66699H13.3335C14.0668 2.66699 14.6668 3.26699 14.6668 4.00033V12.0003C14.6668 12.7337 14.0668 13.3337 13.3335 13.3337H2.66683C1.9335 13.3337 1.3335 12.7337 1.3335 12.0003V4.00033C1.3335 3.26699 1.9335 2.66699 2.66683 2.66699Z" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M14.6668 4L8.00016 8.66667L1.3335 4" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 587 B

11
packages/nc-gui/assets/nc-icons/mailchimp.svg

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_881_27909)">
<path d="M0 0H32V32H0" fill="#FFDD22"/>
<path d="M26.125 19.125L25.75 18.0625C25.75 18.0625 27.3125 15.6875 23.4375 14.875C23.4375 14.875 23.6875 11.9375 22.3125 10.5625C25.3125 7.62497 24.625 3.18747 17.8125 6.06247C14.3125 -0.625031 0.812511 15.0625 6.43751 17.5625C5.87501 18.3125 5.87501 22.0625 9.75001 22.4375C12.375 28.0625 18.75 28.4375 22.4375 26.75C26.125 25.0625 28.25 19.6875 26.125 19.125ZM9.68751 21.625C6.50001 21.3125 6.18751 16.9375 8.93751 16.5C11.6875 16.0625 12.375 21.875 9.68751 21.625ZM8.75001 15.6875C7.87501 15.6875 6.81251 16.875 6.81251 16.875C2.56251 14.8125 14.5 1.12497 17.0625 6.43747C17.0625 6.43747 10.8125 9.43747 8.75001 15.6875ZM21.25 21C21.25 20.75 19.9375 21.375 17.5625 20.5625C17.75 19.25 20.5625 21.6875 25.25 18.5L25.625 19.8125C27.375 19.5 25.625 25.4375 20 25.375C15.4375 25.3125 14 20.625 16.5 18.0625C17 17.5625 14.6875 16.5625 15.125 14.375C15.3125 13.4375 16.125 12.0625 18.1875 12.4375C20.25 12.8125 20.6875 10.9375 22.0625 11.625C23.4375 12.3125 22.625 14.9375 22.8125 15.3125C23 15.6875 25 15.75 25.375 16.8125C25.75 17.875 22.8125 20.1875 18.25 19.5625C17.1875 19.4375 16.5625 20.8125 17.25 21.6875C18.625 23.6875 24.25 22.375 25.1875 20.4375C22.8125 22.25 17.9375 22.9375 17.5625 21C18.9375 21.625 21.25 21.25 21.25 21ZM13.0625 11.125C14.4375 9.43747 16.25 8.43747 16.25 8.43747L15.875 9.37497C15.875 9.37497 17.1875 8.37497 18.625 8.37497L18.125 8.87497C19.75 8.93747 20.4375 9.56247 20.4375 9.56247C20.4375 9.56247 16.625 8.43747 13.0625 11.125ZM21.5 13.5625C22.3125 13.5 22.0625 15.375 22.0625 15.375H21.5625C21.5625 15.375 20.6875 13.625 21.5 13.5625ZM17.8125 15.625C17.25 15.6875 16.625 16 16.6875 15.75C16.9375 14.75 19.25 15 19.1875 15.875C19.125 16.75 18.625 15.5 17.8125 15.625ZM19.125 16.375C19.1875 16.5 18.6875 16.375 18.3125 16.4375C17.9375 16.5 17.5625 16.6875 17.5625 16.5625C17.5625 16.4375 19 15.875 19.125 16.375ZM20.375 16.5625C20.5625 16.1875 21.3125 16.5625 21.125 16.9375C20.9375 17.3125 20.1875 16.9375 20.375 16.5625ZM21.9375 16.6875C21.5625 16.6875 21.5625 15.875 21.9375 15.875C22.3125 15.875 22.3125 16.75 21.9375 16.75V16.6875ZM10.6875 20C10.875 20.1875 10.3125 20.5625 9.87501 20.25C9.43751 19.9375 10.375 18.4375 9.25001 18.0625C8.12501 17.6875 8.43751 19.125 8.12501 18.9375C7.81251 18.75 8.56251 16.75 9.87501 17.5625C11.1875 18.375 9.50001 19.625 10.25 20C11 20.375 10.5625 19.875 10.6875 20Z" fill="#222222"/>
</g>
<defs>
<clipPath id="clip0_881_27909">
<rect width="32" height="32" rx="4" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

10
packages/nc-gui/assets/nc-icons/mattermost.svg

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<g clip-path="url(#clip0_1608_52255)">
<path d="M15.6408 10.5643C14.2184 14.7482 9.65945 16.9918 5.45825 15.5756C1.25684 14.1592 -0.995991 9.61935 0.426249 5.43543C1.58382 2.03006 4.81897 -0.0895385 8.24826 0.00290606L7.14898 1.29613C5.1148 1.66249 3.35815 3.04594 2.66783 5.07691C1.64069 8.09864 3.36237 11.4094 6.51332 12.4717C9.66427 13.5338 13.0514 11.9455 14.0787 8.92381C14.7668 6.89947 14.2212 4.74571 12.8387 3.2248L12.7543 1.52683C15.5255 3.52987 16.7964 7.16475 15.6408 10.5643ZM10.0495 8.37075C9.28927 9.11231 8.35538 9.04459 7.74806 8.8398C7.14054 8.63482 6.35737 8.12396 6.20584 7.07491C6.05431 6.02587 6.74001 5.17357 6.74001 5.17357L8.2342 3.32327L9.10438 2.26639L9.85137 1.34536C9.85137 1.34536 10.1942 0.888163 10.2919 0.79391C10.3112 0.775019 10.3311 0.76276 10.3506 0.753315L10.3648 0.746281L10.3673 0.745276C10.4085 0.727591 10.4557 0.723773 10.5013 0.739247C10.5461 0.754319 10.5807 0.784866 10.6026 0.822447L10.6072 0.829883L10.6112 0.838323C10.6219 0.858219 10.6307 0.881129 10.6349 0.909466C10.6548 1.04351 10.6484 1.61425 10.6484 1.61425L10.68 2.79755L10.7266 4.16351L10.7849 6.53733C10.7849 6.53733 10.8098 7.62898 10.0495 8.37075Z" fill="#1875F0"/>
</g>
<defs>
<clipPath id="clip0_1608_52255">
<rect width="16" height="16" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

10
packages/nc-gui/assets/nc-icons/microsoft-dynamics-365.svg

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="32" viewBox="0 0 20 32" fill="none">
<g clip-path="url(#clip0_858_14322)">
<path d="M0 32L6.234 14.108L0 10.02V32ZM19.716 20.934V10.776L0 32L19.716 20.934ZM0 0V8.574L12.866 14.884L18.846 10.02L0 0Z" fill="black"/>
</g>
<defs>
<clipPath id="clip0_858_14322">
<rect width="20" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 413 B

28
packages/nc-gui/assets/nc-icons/microsoft-teams.svg

@ -0,0 +1,28 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<g clip-path="url(#clip0_1608_52223)">
<path d="M11.16 6.24805H15.2929C15.6833 6.24805 15.9998 6.56457 15.9998 6.95502V10.7195C15.9998 12.1545 14.8365 13.3178 13.4015 13.3178H13.3892C11.9542 13.318 10.7907 12.1549 10.7905 10.7199C10.7905 10.7199 10.7905 10.7196 10.7905 10.7195V6.61754C10.7905 6.41347 10.956 6.24805 11.16 6.24805Z" fill="#5059C9"/>
<path d="M13.9537 5.50411C14.8785 5.50411 15.6281 4.75445 15.6281 3.82969C15.6281 2.90494 14.8785 2.15527 13.9537 2.15527C13.029 2.15527 12.2793 2.90494 12.2793 3.82969C12.2793 4.75445 13.029 5.50411 13.9537 5.50411Z" fill="#5059C9"/>
<path d="M8.74429 5.50421C10.0801 5.50421 11.1629 4.42136 11.1629 3.0856C11.1629 1.74984 10.0801 0.666992 8.74429 0.666992C7.40853 0.666992 6.32568 1.74984 6.32568 3.0856C6.32568 4.42136 7.40853 5.50421 8.74429 5.50421Z" fill="#7B83EB"/>
<path d="M11.969 6.24805H5.14707C4.76127 6.25759 4.45607 6.57777 4.46503 6.96359V11.2572C4.41115 13.5724 6.24287 15.4937 8.55805 15.5504C10.8732 15.4937 12.7049 13.5724 12.6511 11.2572V6.96359C12.66 6.57777 12.3548 6.25759 11.969 6.24805Z" fill="#7B83EB"/>
<path opacity="0.1" d="M8.93016 6.24805V12.2648C8.92831 12.5407 8.76111 12.7886 8.50597 12.8936C8.42474 12.928 8.33743 12.9457 8.24923 12.9457H4.79248C4.74411 12.8229 4.69946 12.7001 4.66225 12.5736C4.532 12.1467 4.46554 11.7028 4.46504 11.2564V6.96247C4.45609 6.57727 4.76078 6.25759 5.14597 6.24805H8.93016Z" fill="black"/>
<path opacity="0.2" d="M8.55807 6.24805V12.6369C8.55807 12.7251 8.54034 12.8124 8.50597 12.8936C8.40092 13.1488 8.15305 13.316 7.87714 13.3178H4.96737C4.90411 13.195 4.84458 13.0722 4.79248 12.9457C4.74039 12.8192 4.69946 12.7001 4.66225 12.5736C4.532 12.1467 4.46554 11.7028 4.46504 11.2564V6.96247C4.45609 6.57727 4.76078 6.25759 5.14597 6.24805H8.55807Z" fill="black"/>
<path opacity="0.2" d="M8.55806 6.24805V11.8927C8.55523 12.2676 8.25202 12.5708 7.87713 12.5736H4.66225C4.532 12.1467 4.46554 11.7028 4.46504 11.2564V6.96247C4.45609 6.57727 4.76078 6.25759 5.14597 6.24805H8.55806Z" fill="black"/>
<path opacity="0.2" d="M8.18596 6.24805V11.8927C8.18313 12.2676 7.87992 12.5708 7.50503 12.5736H4.66225C4.532 12.1467 4.46554 11.7028 4.46504 11.2564V6.96247C4.45609 6.57727 4.76078 6.25759 5.14597 6.24805H8.18596Z" fill="black"/>
<path opacity="0.1" d="M8.93026 4.32448V5.49657C8.867 5.50029 8.80747 5.50402 8.74421 5.50402C8.68095 5.50402 8.62142 5.5003 8.55816 5.49657C8.43256 5.48824 8.308 5.46831 8.18607 5.43704C7.43258 5.2586 6.81007 4.73016 6.51165 4.01565C6.4603 3.89565 6.42044 3.77106 6.39258 3.64355H8.24932C8.6248 3.64498 8.92883 3.949 8.93026 4.32448Z" fill="black"/>
<path opacity="0.2" d="M8.55823 4.69655V5.49655C8.43263 5.48822 8.30807 5.46829 8.18614 5.43702C7.43265 5.25858 6.81014 4.73014 6.51172 4.01562H7.8773C8.25277 4.01705 8.5568 4.32108 8.55823 4.69655Z" fill="black"/>
<path opacity="0.2" d="M8.55823 4.69655V5.49655C8.43263 5.48822 8.30807 5.46829 8.18614 5.43702C7.43265 5.25858 6.81014 4.73014 6.51172 4.01562H7.8773C8.25277 4.01705 8.5568 4.32108 8.55823 4.69655Z" fill="black"/>
<path opacity="0.2" d="M8.18614 4.69656V5.43702C7.43265 5.25858 6.81014 4.73014 6.51172 4.01562H7.50521C7.88069 4.01705 8.18471 4.32108 8.18614 4.69656Z" fill="black"/>
<path d="M0.682043 4.01562H7.50399C7.88068 4.01562 8.18604 4.32099 8.18604 4.69767V11.5196C8.18604 11.8963 7.88067 12.2017 7.50399 12.2017H0.682043C0.305358 12.2017 0 11.8963 0 11.5196V4.69767C0 4.32099 0.305365 4.01562 0.682043 4.01562Z" fill="url(#paint0_linear_1608_52223)"/>
<path d="M5.88829 6.61197H4.52457V10.3255H3.65574V6.61197H2.29834V5.8916H5.88829V6.61197Z" fill="white"/>
</g>
<defs>
<linearGradient id="paint0_linear_1608_52223" x1="142.208" y1="-49.2781" x2="676.397" y2="875.914" gradientUnits="userSpaceOnUse">
<stop stop-color="#5A62C3"/>
<stop offset="0.5" stop-color="#4D55BD"/>
<stop offset="1" stop-color="#3940AB"/>
</linearGradient>
<clipPath id="clip0_1608_52223">
<rect width="16" height="16" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

19
packages/nc-gui/assets/nc-icons/microsoft_access.svg

@ -0,0 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="32" viewBox="0 0 28 32" fill="none">
<g clip-path="url(#clip0_881_27919)">
<path d="M4.33203 19.5188V26.5564C4.33203 28.4998 9.42183 30.0752 15.7004 30.0752C21.9791 30.0752 27.0689 28.4998 27.0689 26.5564V19.5188H4.33203Z" fill="#881421"/>
<path d="M4.33203 12.4812V19.5188C4.33203 21.4622 9.42183 23.0376 15.7004 23.0376C21.9791 23.0376 27.0689 21.4622 27.0689 19.5188V12.4812H4.33203Z" fill="#AF2031"/>
<path d="M4.33203 5.4436V12.4812C4.33203 14.4246 9.42183 16 15.7004 16C21.9791 16 27.0689 14.4246 27.0689 12.4812V5.4436H4.33203Z" fill="#C94F60"/>
<path d="M15.7004 8.96239C21.979 8.96239 27.0689 7.38697 27.0689 5.4436C27.0689 3.50022 21.979 1.9248 15.7004 1.9248C9.42184 1.9248 4.33203 3.50022 4.33203 5.4436C4.33203 7.38697 9.42184 8.96239 15.7004 8.96239Z" fill="#E08095"/>
<path opacity="0.2" d="M12.9937 9.68244V23.9417C12.9949 24.0144 12.9876 24.0871 12.972 24.1582C12.9227 24.451 12.7711 24.7168 12.544 24.9082C12.3169 25.0996 12.0293 25.2041 11.7323 25.203H4.33203V8.42108H11.7323C11.898 8.4208 12.0622 8.45323 12.2154 8.51652C12.3685 8.5798 12.5077 8.6727 12.6249 8.78989C12.7421 8.90707 12.835 9.04624 12.8982 9.1994C12.9615 9.35256 12.994 9.51671 12.9937 9.68244Z" fill="black"/>
<path opacity="0.1" d="M13.535 9.6824V22.8589C13.5305 23.3356 13.3391 23.7915 13.002 24.1286C12.6649 24.4657 12.209 24.6571 11.7323 24.6616H4.33203V7.8797H11.7323C12.2099 7.88141 12.6674 8.07189 13.0051 8.40959C13.3428 8.74729 13.5333 9.20482 13.535 9.6824Z" fill="black"/>
<path opacity="0.2" d="M12.9937 9.68244V22.859C12.994 23.0247 12.9615 23.1888 12.8982 23.342C12.835 23.4952 12.7421 23.6343 12.6249 23.7515C12.5077 23.8687 12.3685 23.9616 12.2154 24.0249C12.0622 24.0882 11.898 24.1206 11.7323 24.1203H4.33203V8.42108H11.7323C11.898 8.4208 12.0622 8.45323 12.2154 8.51652C12.3685 8.5798 12.5077 8.6727 12.6249 8.78989C12.7421 8.90707 12.835 9.04624 12.8982 9.1994C12.9615 9.35256 12.994 9.51671 12.9937 9.68244Z" fill="black"/>
<path opacity="0.1" d="M12.4523 9.68244V22.859C12.4526 23.0247 12.4202 23.1888 12.3569 23.342C12.2936 23.4952 12.2007 23.6343 12.0835 23.7515C11.9663 23.8687 11.8272 23.9616 11.674 24.0249C11.5208 24.0882 11.3567 24.1206 11.191 24.1203H4.33203V8.42108H11.191C11.3567 8.4208 11.5208 8.45323 11.674 8.51652C11.8272 8.5798 11.9663 8.6727 12.0835 8.78989C12.2007 8.90707 12.2936 9.04624 12.3569 9.1994C12.4202 9.35256 12.4526 9.51671 12.4523 9.68244Z" fill="black"/>
<path d="M11.1893 8.42108H-1.44259C-2.14011 8.42108 -2.70557 8.98654 -2.70557 9.68406V22.316C-2.70557 23.0135 -2.14011 23.579 -1.44259 23.579H11.1893C11.8869 23.579 12.4523 23.0135 12.4523 22.316V9.68406C12.4523 8.98654 11.8869 8.42108 11.1893 8.42108Z" fill="#AF2031"/>
<path d="M3.96598 11.8944H5.82661L8.81541 20.1051H7.05764L6.39936 18.147H3.32447L2.67756 20.1051H0.931152L3.96598 11.8944ZM6.00417 16.8819L5.04814 13.9099C4.96944 13.6923 4.91002 13.4682 4.87058 13.2402H4.83593C4.80028 13.4742 4.74282 13.7044 4.66432 13.9277L3.69692 16.8819H6.00417Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_881_27919">
<rect width="26.1376" height="32" fill="white" transform="translate(0.931152)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

251
packages/nc-gui/assets/nc-icons/microsoft_excel.svg

@ -0,0 +1,251 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_877_12918)">
<path d="M9.32544 1.3506H30.6561C31.0148 1.34873 31.3567 1.49623 31.6011 1.75623C31.8511 2.02373 31.9904 2.37623 31.9904 2.74248V29.1887C31.9898 29.555 31.8504 29.9069 31.6011 30.175C31.3567 30.4356 31.0136 30.5825 30.6561 30.5806H9.32544C8.57919 30.5675 7.98606 29.9512 7.99919 29.205V29.1962V2.74373C7.98106 1.9956 8.56919 1.3731 9.31669 1.3506H9.32544Z" fill="#21A366"/>
<path d="M7.99998 15.9669V29.2306C7.9631 29.9769 8.53623 30.6106 9.28248 30.6475L9.29372 30.6481H30.6587C31.41 30.635 32.0081 30.015 31.9931 29.2644V29.2556V15.9912L7.99998 15.9669Z" fill="#185C37"/>
<path d="M8 8.66248H31.9925V15.975H8V8.66248Z" fill="#107C41"/>
<path d="M30.6581 1.35059H19.9968V23.2787H31.9931V2.74372C31.9925 2.37747 31.8531 2.02559 31.6037 1.75747C31.3575 1.49622 31.015 1.34934 30.6581 1.35059Z" fill="#33C481"/>
<path d="M32.0005 8.66248H19.9961V15.9743H32.0005V8.66248Z" fill="#21A366"/>
<path d="M32.0005 15.9669H19.9961V23.2787H32.0005V15.9669Z" fill="#107C41"/>
<path d="M17.483 15.975H17.1017V15.9769H17.483V15.975ZM16.488 7.32062H15.8074C15.8711 7.42062 15.918 7.53249 15.943 7.65187H16.098V7.65124H16.1061C16.1149 7.65124 16.123 7.65187 16.1317 7.65187C16.6774 7.66999 17.1067 8.12062 17.1011 8.66249H17.4817V8.36437C17.498 7.80187 17.053 7.33437 16.488 7.32062Z" fill="#209D63"/>
<path d="M17.1017 15.9762V23.9087V23.9175C17.1036 24.0212 17.0892 24.12 17.0624 24.215C17.0624 24.2981 17.0511 24.38 17.0317 24.4568C17.3105 24.2693 17.4911 23.9475 17.483 23.5856V23.585V15.9756L17.1017 15.9762Z" fill="#175935"/>
<path d="M17.4831 8.66248H17.1024C17.1024 8.6706 17.1024 8.67935 17.1018 8.68685V15.9743H17.4831V8.66248Z" fill="#0F783F"/>
<path d="M8.0249 24.4906V26.8437H14.6574C15.3887 26.8394 15.9812 26.2537 15.9999 25.5268C15.9537 25.5487 15.9043 25.5681 15.8543 25.5831C15.6324 26.02 15.1799 26.3187 14.6574 26.3225H8.0249V25.8581V24.4906Z" fill="#175633"/>
<path d="M17.1018 15.975H17.0606V15.9769H17.1018V15.975ZM16.1075 7.65125H16.0993V7.65187H15.9443C15.9612 7.72875 15.9687 7.80937 15.9662 7.89187V8.07437H16.0918C16.4843 8.09 16.8162 8.3275 16.9706 8.6625H17.1037C17.1087 8.12 16.6793 7.67 16.1343 7.65187C16.1243 7.65187 16.1162 7.65125 16.1075 7.65125Z" fill="#1E935C"/>
<path d="M17.0618 15.9763V24.1506L17.0624 24.17C17.063 24.185 17.063 24.2006 17.063 24.2156C17.0899 24.1213 17.1036 24.0219 17.1024 23.9181V23.9094V15.9775L17.0618 15.9763Z" fill="#165332"/>
<path d="M17.1031 8.66248H16.97C17.0337 8.80123 17.0675 8.95623 17.0618 9.1181V15.9743H17.1031V8.68748C17.1031 8.67935 17.1031 8.67123 17.1031 8.66248Z" fill="#0E703B"/>
<path d="M17.0324 24.4581C16.9936 24.4838 16.9542 24.5075 16.9124 24.5275C16.8211 24.6556 16.7005 24.7619 16.5605 24.8363C16.5336 24.9488 16.4886 25.0538 16.428 25.1494C16.7267 25.0288 16.9536 24.7706 17.0324 24.4581Z" fill="#175633"/>
<path d="M17.063 24.215C17.0305 24.3281 16.9799 24.4331 16.9124 24.5268C16.9542 24.5068 16.9936 24.4831 17.0324 24.4575C17.0517 24.38 17.0624 24.2993 17.063 24.215Z" fill="#165332"/>
<path d="M16.9123 24.5275C16.8123 24.5768 16.7036 24.61 16.5879 24.6237C16.5861 24.6962 16.5767 24.7675 16.5598 24.8356C16.7011 24.7612 16.8211 24.655 16.9123 24.5275Z" fill="#155030"/>
<path d="M17.0618 15.975H16.92V15.9756H17.0618V15.975ZM16.0912 8.07562H15.9656V8.13062C15.9656 8.14812 15.9662 8.16562 15.9656 8.18312V8.39625C15.9656 8.41375 15.9662 8.43125 15.9656 8.44875V8.60812C16.0637 8.61312 16.1575 8.6325 16.2462 8.66437H16.9687C16.815 8.32875 16.4837 8.09 16.0912 8.07562Z" fill="#1C8A56"/>
<path d="M16.9192 15.9762V23.835V23.8356C16.9261 24.1425 16.798 24.4206 16.5886 24.6125C16.5886 24.6162 16.5886 24.6193 16.5886 24.6231C16.7036 24.6093 16.813 24.5756 16.913 24.5268C16.9799 24.4331 17.0311 24.3281 17.0636 24.215C17.0636 24.2 17.0636 24.185 17.063 24.1693L17.0624 24.15V15.9756L16.9192 15.9762Z" fill="#154E2E"/>
<path d="M16.9693 8.66248H16.2468C16.6368 8.80123 16.9168 9.17185 16.9193 9.60748V15.975H17.0612V9.11872C17.0668 8.95622 17.0337 8.80123 16.9693 8.66248Z" fill="#0D6937"/>
<path d="M14.9725 6.84808H14.9637H8V7.79246V7.13871H14.9637H14.9725C15.18 7.14371 15.3712 7.21058 15.53 7.32121H15.8081C15.6319 7.04371 15.325 6.85683 14.9725 6.84808Z" fill="#21A265"/>
<path d="M15.8079 7.32062H15.5298C15.6542 7.40749 15.7579 7.52062 15.8329 7.65187H15.9442C15.9179 7.53249 15.8717 7.42062 15.8079 7.32062Z" fill="#209C62"/>
<path d="M15.9438 7.65186H15.8325C15.905 7.77873 15.9506 7.92186 15.9631 8.07436H15.9656V7.89186C15.9681 7.80998 15.9606 7.72936 15.9438 7.65186Z" fill="#1E925B"/>
<path d="M15.9669 8.07562H15.9644C15.9662 8.09375 15.9669 8.1125 15.9669 8.13062V8.07562Z" fill="#1C8855"/>
<path d="M15.8535 25.5825C15.771 25.6068 15.6835 25.6212 15.5929 25.6243H15.406C15.1923 25.77 14.9342 25.855 14.6567 25.8568H8.02417V26.3212H14.6567C15.1798 26.3181 15.6317 26.0187 15.8535 25.5825Z" fill="#144B2D"/>
<path d="M8.0249 24.4906V25.8568H14.6574C14.9355 25.855 15.193 25.77 15.4068 25.6243H8.6224H8.62178C8.4999 25.6206 8.38865 25.5744 8.30365 25.5H8.02678V25.185V24.4906H8.0249Z" fill="#114227"/>
<path d="M8.12928 25.1856H8.0249V25.5006H8.30178C8.2099 25.4212 8.14803 25.31 8.12928 25.1856Z" fill="#0F3A23"/>
<path d="M8.0249 24.4906V25.1856H8.12928C8.1249 25.1556 8.12303 25.125 8.12428 25.0944V24.4956C8.11803 24.4956 8.11303 24.4956 8.10678 24.4956C8.07928 24.4956 8.0524 24.4937 8.0249 24.4906Z" fill="#0D321E"/>
<path d="M16.9193 15.975H16.5887V15.9756H16.9193V15.975ZM15.9668 8.60687V8.65062C15.9718 8.655 15.978 8.65875 15.9837 8.66312H16.2474C16.1587 8.63125 16.0637 8.61187 15.9668 8.60687Z" fill="#1A8050"/>
<path d="M16.5894 15.9756V24.5875C16.5894 24.5956 16.5894 24.6043 16.5894 24.6118C16.7987 24.42 16.9275 24.1418 16.92 23.835V23.8343V15.9756H16.5894Z" fill="#13492B"/>
<path d="M16.2467 8.66248H15.9829C16.1679 8.80435 16.2992 8.96873 16.2992 9.15935V9.61435C16.4848 9.80435 16.5967 10.0656 16.5892 10.3525V15.9731H16.9198V9.60685C16.9167 9.17185 16.6373 8.80123 16.2467 8.66248Z" fill="#0D6233"/>
<path d="M8.01562 23.8293V24.4893C8.01812 24.4893 8.02187 24.49 8.02437 24.49V23.8362C8.02187 23.8343 8.01875 23.8318 8.01562 23.8293Z" fill="#155030"/>
<path d="M8.03303 24.4393H8.0249V24.49C8.05178 24.4937 8.07928 24.495 8.1074 24.495C8.11365 24.495 8.11865 24.495 8.1249 24.495V24.4887H8.03365V24.4387" fill="#0C2E1C"/>
<path d="M8.12421 24.4393H8.03296V24.4893H8.12421V24.4393Z" fill="#0B2919"/>
<path d="M8.0249 23.8375V24.4406H8.03303V23.8443C8.03053 23.8406 8.02803 23.8387 8.0249 23.8375Z" fill="#0B2919"/>
<path d="M8.03296 23.8431V24.4393H8.12421V23.8993C8.09171 23.8843 8.06108 23.865 8.03296 23.8431Z" fill="#0A2617"/>
<path d="M7.99857 7.7912C7.89482 7.88495 7.83107 8.02182 7.83357 8.17245V8.1812V23.4356C7.83357 23.5843 7.89669 23.7193 7.99857 23.8137V23.4887C7.93294 23.3999 7.89482 23.2899 7.89919 23.1706V22.9631C7.89919 22.9524 7.89919 22.9412 7.89919 22.9306V22.6481C7.89919 22.6431 7.89919 22.6374 7.89919 22.6312V20.4918H7.99857V7.7912Z" fill="#CBCBCB"/>
<path d="M7.99854 23.4894V23.8144L7.99916 23.815V23.4906C7.99978 23.49 7.99979 23.49 7.99854 23.4894Z" fill="#1A8251"/>
<path d="M8 23.4906V23.815C8.005 23.8194 8.01063 23.8244 8.01562 23.8287V23.5106C8.01 23.5037 8.005 23.4981 8 23.4906Z" fill="#13492C"/>
<path d="M7.99855 20.4931H7.89917V22.6325C7.89917 22.6375 7.89917 22.6431 7.89917 22.6494V20.7925H7.99855V20.4931Z" fill="#CACACA"/>
<path d="M15.9668 8.65057V8.66307H15.9837C15.9768 8.65807 15.9718 8.65495 15.9668 8.65057Z" fill="#156A42"/>
<path d="M15.9825 8.66248H15.9656V8.96998C16.0781 9.11998 16.1487 9.30247 16.1631 9.49872C16.2112 9.53372 16.2568 9.57248 16.2981 9.6156V9.1606C16.2987 8.96935 16.1675 8.80498 15.9825 8.66248Z" fill="#0A512A"/>
<path d="M15.9668 8.97058V9.13371C15.9868 9.22058 15.998 9.31058 15.9999 9.40308C16.058 9.42996 16.113 9.46183 16.1637 9.49871C16.1487 9.30246 16.078 9.12058 15.9668 8.97058Z" fill="#094926"/>
<path d="M15.9668 9.13434C15.9868 9.22121 15.998 9.31121 15.9999 9.40371C15.9974 9.31059 15.9855 9.22121 15.9668 9.13434Z" fill="#083F21"/>
<path d="M15.9668 9.13434V9.38871C15.978 9.39309 15.9887 9.39809 15.9999 9.40371C15.9974 9.31184 15.9855 9.22121 15.9668 9.13434Z" fill="#07381E"/>
<path d="M8.01562 23.5112V23.8294C8.01812 23.8319 8.02187 23.8344 8.02437 23.8362V23.5206C8.02187 23.5181 8.01875 23.5144 8.01562 23.5112Z" fill="#114127"/>
<path d="M8.0249 23.5219V23.8375C8.0274 23.8393 8.0299 23.8419 8.03303 23.8437V23.5306C8.03053 23.5275 8.02803 23.5244 8.0249 23.5219Z" fill="#0A2617"/>
<path d="M8.03296 23.5306V23.8437C8.06108 23.8656 8.09171 23.885 8.12421 23.9006V23.6093C8.09108 23.5862 8.05983 23.56 8.03296 23.5306Z" fill="#092415"/>
<path d="M16.4287 25.1481C16.3244 25.19 16.2106 25.2156 16.0912 25.22H16V25.4925C16 25.5038 16 25.515 16 25.5269C16.1762 25.4431 16.3244 25.3113 16.4287 25.1481Z" fill="#175633"/>
<path d="M16 25.22H15.9775C15.9538 25.3481 15.9119 25.47 15.8538 25.5831C15.9038 25.5681 15.9531 25.55 15.9994 25.5268C15.9994 25.5156 15.9994 25.5043 15.9994 25.4925V25.22" fill="#155030"/>
<path d="M16.5613 24.8356C16.4238 24.9094 16.2669 24.9513 16.1 24.9538H16V24.9781V25.2194H16.0912C16.2106 25.215 16.3237 25.1894 16.4287 25.1475C16.4894 25.0531 16.5338 24.9481 16.5613 24.8356Z" fill="#155030"/>
<path d="M15.9998 24.9788C15.9992 25.0613 15.991 25.1419 15.9773 25.22H15.9998V24.9788Z" fill="#144B2D"/>
<path d="M16.5881 24.6225C16.5838 24.6231 16.5794 24.6231 16.575 24.6244C16.4188 24.7619 16.22 24.8531 16 24.875V24.9537H16.0994C16.2662 24.9512 16.4231 24.9081 16.5606 24.8356C16.5769 24.7675 16.5863 24.6962 16.5881 24.6225Z" fill="#144B2D"/>
<path d="M16.5892 24.6125C16.5848 24.6169 16.5804 24.6206 16.5754 24.625C16.5798 24.6244 16.5842 24.6244 16.5886 24.6231C16.5892 24.6194 16.5892 24.6156 16.5892 24.6125Z" fill="#13492B"/>
<path d="M15.9767 25.22H15.7961C15.6961 25.3806 15.563 25.5181 15.4067 25.6243H15.5936C15.6836 25.6218 15.7705 25.6068 15.8542 25.5825C15.9111 25.4693 15.9536 25.3475 15.9767 25.22Z" fill="#12462A"/>
<path d="M15.7962 25.22H15.4675C15.2431 25.3925 14.9625 25.4968 14.6575 25.5006H8.30249C8.38812 25.575 8.49874 25.6206 8.62062 25.625H8.62124H15.4062C15.5631 25.5187 15.6956 25.38 15.7962 25.22Z" fill="#113E25"/>
<path d="M15.9998 24.9543H15.9235C15.8904 25.0481 15.8473 25.1375 15.7954 25.22H15.976C15.991 25.1418 15.9985 25.0612 15.9985 24.9787V24.9543" fill="#114227"/>
<path d="M15.9236 24.9543H15.7299C15.6555 25.0543 15.5668 25.1443 15.468 25.22H15.7968C15.848 25.1362 15.8911 25.0481 15.9236 24.9543Z" fill="#103B23"/>
<path d="M15.9999 24.875C15.9824 24.8769 15.9656 24.8775 15.9481 24.8787C15.9412 24.9044 15.9331 24.9294 15.9243 24.9544H15.9999V24.875Z" fill="#113E25"/>
<path d="M15.948 24.8787C15.9399 24.8787 15.9324 24.8793 15.9242 24.8793H15.7811C15.7642 24.905 15.7467 24.9293 15.7292 24.9537H15.923C15.9324 24.9293 15.9399 24.9043 15.948 24.8787Z" fill="#0F3821"/>
<path d="M8.95551 25.1856H8.12988C8.14801 25.31 8.21113 25.4212 8.30238 25.5006H14.658C14.963 25.4969 15.2436 25.3925 15.468 25.22H9.11926C9.06113 25.2169 9.00613 25.205 8.95551 25.1856Z" fill="#0E3821"/>
<path d="M15.7298 24.9543H15.4167C15.203 25.1006 14.9436 25.1856 14.6655 25.1856C14.663 25.1856 14.6605 25.1856 14.6573 25.1856H8.95483C9.00546 25.2056 9.06108 25.2168 9.11858 25.22H15.4667C15.5667 25.1437 15.6555 25.0543 15.7298 24.9543Z" fill="#0E3520"/>
<path d="M15.7817 24.8793H15.5161C15.4842 24.9056 15.4511 24.93 15.4167 24.9537H15.7299C15.748 24.9293 15.7655 24.905 15.7817 24.8793Z" fill="#0D331E"/>
<path d="M8.46991 24.4894H8.19928C8.17491 24.4931 8.14928 24.4944 8.12491 24.4956V25.0944C8.12428 25.125 8.12553 25.1556 8.12991 25.1856H8.95553C8.77428 25.1156 8.64241 24.9469 8.62428 24.7475C8.54928 24.6788 8.49491 24.5906 8.46991 24.4894Z" fill="#0D301D"/>
<path d="M8.62354 24.7462C8.64166 24.9462 8.77354 25.1143 8.95479 25.1843H14.6573C14.6598 25.1843 14.6623 25.1843 14.6654 25.1843C14.9442 25.1843 15.2029 25.0993 15.4167 24.9531H9.13479H9.12604C9.02791 24.9493 8.93666 24.9187 8.86104 24.8675C8.77104 24.8487 8.68979 24.8062 8.62354 24.7462Z" fill="#0C2E1C"/>
<path d="M8.8606 24.8681C8.93685 24.9187 9.02747 24.9506 9.1256 24.9537H9.13435H15.4162C15.4506 24.93 15.4837 24.9056 15.5156 24.8794H8.95997C8.92622 24.8787 8.8931 24.875 8.8606 24.8681Z" fill="#0C2D1B"/>
<path d="M16.575 24.6243C16.5463 24.6281 16.5181 24.6293 16.4881 24.6293H16V24.8737C16.22 24.8531 16.4188 24.7631 16.575 24.6243Z" fill="#13462A"/>
<path d="M16.5892 15.975H16.2986V15.9756H16.5892V15.975Z" fill="#18794C"/>
<path d="M16.2987 15.9756V22.9137C16.3012 23.1031 16.2531 23.2812 16.1656 23.4343V23.4437V23.4443C16.1706 23.6593 16.1094 23.86 16 24.0262V24.1393V24.6287H16.4881C16.5169 24.6281 16.5463 24.6262 16.575 24.6237C16.5794 24.6193 16.5838 24.6156 16.5888 24.6112C16.5888 24.6031 16.5888 24.5943 16.5888 24.5868V15.9756H16.2987Z" fill="#124429"/>
<path d="M16.2986 9.6156V15.975H16.5886V10.3544C16.5961 10.0675 16.4848 9.80623 16.2986 9.6156Z" fill="#0C5C30"/>
<path d="M16 24.6306H15.995C15.9869 24.7156 15.9712 24.7987 15.9487 24.8787C15.9662 24.8781 15.9837 24.8769 16.0006 24.875V24.6306" fill="#103B23"/>
<path d="M15.9999 24.5137C15.9999 24.5531 15.998 24.5919 15.9949 24.6306H15.9999V24.5137Z" fill="#103A23"/>
<path d="M15.9943 24.6306H15.9093C15.875 24.7181 15.8331 24.8019 15.7825 24.8794H15.9256C15.9337 24.8794 15.9412 24.8787 15.9493 24.8787C15.9712 24.7987 15.9868 24.7156 15.9943 24.6306Z" fill="#0E3520"/>
<path d="M15.9999 24.1406C15.9999 24.3131 15.9674 24.4781 15.9087 24.63H15.9937C15.9974 24.5912 15.9987 24.5531 15.9987 24.5131V24.1406" fill="#0E341F"/>
<path d="M15.9094 24.6306H15.7487C15.6819 24.7237 15.6031 24.8069 15.5156 24.8794H15.7812C15.8325 24.8019 15.8756 24.7181 15.9094 24.6306Z" fill="#0D311D"/>
<path d="M15.9999 24.0281C15.9955 24.035 15.9905 24.0431 15.9849 24.0499C15.9524 24.2649 15.8699 24.4618 15.7493 24.6306H15.9099C15.9686 24.4787 16.0011 24.3131 16.0011 24.1412V24.0281" fill="#0D301D"/>
<path d="M8.62111 24.4894H8.46924C8.49361 24.59 8.54924 24.6788 8.62361 24.7469C8.62174 24.7313 8.62111 24.7144 8.62111 24.6975V24.4894Z" fill="#0C2E1C"/>
<path d="M8.63859 24.4894H8.62109V24.6981C8.62109 24.715 8.62172 24.7306 8.62359 24.7475C8.68922 24.8069 8.77109 24.85 8.86109 24.8694C8.73609 24.7844 8.65172 24.6463 8.63859 24.4894Z" fill="#0C2D1B"/>
<path d="M9.17805 24.4894H8.63867C8.65117 24.6463 8.73617 24.785 8.86055 24.8681C8.89305 24.875 8.92555 24.8788 8.95992 24.8794H15.5149C15.6024 24.8069 15.6818 24.7231 15.748 24.6306H9.51555H9.51492C9.3843 24.6263 9.2668 24.5725 9.17805 24.4894Z" fill="#0B2B1A"/>
<path d="M15.9849 24.05C15.8061 24.3087 15.5099 24.4812 15.1705 24.4894H14.6649H9.17798C9.26548 24.5737 9.38423 24.6262 9.51548 24.6306H9.5161H15.7486C15.8699 24.4625 15.9536 24.2644 15.9849 24.05Z" fill="#0B2B1A"/>
<path d="M8.19864 24.4894H8.12427V24.4956C8.14864 24.495 8.17302 24.4931 8.19864 24.4894Z" fill="#0C2D1B"/>
<path d="M8.45989 24.4393H8.12427V24.4893H8.19864H8.46927C8.46614 24.4731 8.46239 24.4562 8.45989 24.4393Z" fill="#0A2818"/>
<path d="M8.12427 23.9006V24.4406H8.45989C8.45614 24.4138 8.45364 24.3863 8.45489 24.3581V23.9525H8.33114C8.25739 23.9488 8.18739 23.93 8.12427 23.9006Z" fill="#0A2516"/>
<path d="M16.1656 23.435C16.12 23.515 16.0637 23.5875 16 23.6525V24.0275C16.1094 23.8606 16.1712 23.6594 16.1656 23.4456V23.445V23.435Z" fill="#103D24"/>
<path d="M15.9999 23.8594C15.9999 23.9244 15.9949 23.9881 15.9849 24.0506C15.9899 24.0437 15.9942 24.0356 15.9999 24.0287V23.8594Z" fill="#0C2C1B"/>
<path d="M15.9999 23.6525C15.9505 23.7019 15.8974 23.7456 15.8393 23.7831C15.6137 24.2006 15.173 24.4856 14.6655 24.4887H15.1712C15.5105 24.4806 15.8068 24.3081 15.9855 24.0494C15.9949 23.9869 15.9993 23.9231 16.0005 23.8581V23.6519" fill="#0A2818"/>
<path d="M8.62121 24.4393H8.45996C8.46246 24.4562 8.46496 24.4725 8.46934 24.4893H8.62121V24.4393Z" fill="#0A2718"/>
<path d="M8.63672 24.4393H8.62109V24.4893H8.63859C8.63797 24.4731 8.63672 24.4562 8.63672 24.4393Z" fill="#0A2617"/>
<path d="M9.13234 24.4393H8.63672C8.63672 24.4562 8.63672 24.4725 8.63859 24.4893H9.17797C9.16234 24.4737 9.14609 24.4568 9.13234 24.4393Z" fill="#0A2616"/>
<path d="M15.8392 23.7838C15.8242 23.7931 15.8092 23.8031 15.7936 23.8119C15.5561 24.1888 15.1361 24.4394 14.6573 24.4394H9.13232C9.14607 24.4569 9.16232 24.4738 9.17795 24.4894H14.6648C15.1729 24.4863 15.6142 24.2013 15.8392 23.7838Z" fill="#0A2516"/>
<path d="M8.62122 23.9512H8.45435V24.3569C8.45435 24.385 8.45622 24.4119 8.45935 24.4394H8.62059V23.9512" fill="#0A2416"/>
<path d="M8.63672 23.9512H8.62109V24.4394H8.63672C8.63672 24.4369 8.63672 24.4344 8.63672 24.4312V23.9512Z" fill="#092415"/>
<path d="M9.0187 23.9512H8.63745V24.4319C8.63745 24.4344 8.63745 24.4369 8.63745 24.44H9.13308C9.0587 24.3469 9.01558 24.2287 9.01933 24.1006L9.0187 23.9512Z" fill="#092315"/>
<path d="M15.7936 23.8118C15.6499 23.8962 15.4824 23.9468 15.3036 23.9512H9.01861V24.1C9.01424 24.2281 9.05799 24.3475 9.13236 24.4393H14.6574C15.1361 24.4393 15.5561 24.1887 15.7936 23.8118Z" fill="#092315"/>
<path d="M16.2987 15.975H16.1655V15.9756H16.2987V15.975Z" fill="#14653F"/>
<path d="M16.1655 15.9756V23.4356C16.253 23.2825 16.3012 23.1043 16.2987 22.915V15.9762L16.1655 15.9756Z" fill="#0F3922"/>
<path d="M16.1636 9.49933C16.1661 9.53558 16.1673 9.5712 16.1654 9.60808V15.975H16.2986V9.61558C16.2573 9.57308 16.2117 9.53433 16.1636 9.49933Z" fill="#0A4D28"/>
<path d="M8.12427 23.6081V23.8993C8.18739 23.93 8.25739 23.9475 8.33177 23.95H8.45552V23.6818L8.39739 23.6931H8.38864C8.28989 23.6906 8.19927 23.6593 8.12427 23.6081Z" fill="#092315"/>
<path d="M16.1656 15.975H16V15.9756H16.1656V15.975Z" fill="#135C39"/>
<path d="M16 15.9756V23.6531C16.065 23.5881 16.12 23.5156 16.1656 23.4356V15.9756H16Z" fill="#0E341F"/>
<path d="M16 9.40375C16 9.41437 16 9.425 16 9.43437V9.74937V10.0475V15.975H16.1656V9.60812C16.1662 9.57125 16.1662 9.53562 16.1637 9.49937C16.1119 9.4625 16.0575 9.43062 16 9.40375Z" fill="#094624"/>
<path d="M15.9668 9.38873V9.47186C15.9868 9.56123 15.998 9.65436 15.9999 9.74873V9.43373C15.9999 9.42311 15.9999 9.41248 15.9999 9.40311C15.9887 9.39811 15.9768 9.39311 15.9668 9.38873Z" fill="#07361D"/>
<path d="M15.9668 9.47186V9.77874C15.9868 9.86561 15.998 9.95499 15.9999 10.0469V9.74874C15.998 9.65436 15.9868 9.56124 15.9668 9.47186Z" fill="#07331B"/>
<path d="M16 23.1462C16 23.3769 15.9419 23.5931 15.8394 23.7837C15.8975 23.745 15.9506 23.7012 16 23.6531V23.1462Z" fill="#0A2516"/>
<path d="M16 23.0975C16 23.3606 15.9243 23.605 15.7937 23.8131C15.8093 23.8043 15.8243 23.795 15.8393 23.785C15.9418 23.5956 16 23.3781 16 23.1475V23.0975Z" fill="#092315"/>
<path d="M15.9668 9.77875V10.1437C15.9868 10.2331 15.998 10.3262 15.9999 10.4206V10.885V15.9744V10.0469C15.998 9.955 15.9855 9.86562 15.9668 9.77875Z" fill="#063119"/>
<path d="M15.9668 10.1437V10.6081C15.9868 10.6975 15.998 10.7906 15.9999 10.885V10.4206C15.998 10.325 15.9868 10.2331 15.9668 10.1437Z" fill="#062F19"/>
<path d="M8.62108 23.6506L8.45483 23.6831V23.9513H8.62108V23.6506Z" fill="#092315"/>
<path d="M8.63672 23.6481L8.62109 23.6506V23.9513H8.63672V23.6481Z" fill="#092214"/>
<path d="M15.9668 10.6081V11.1137C15.988 11.2056 15.9993 11.3006 15.9999 11.3987V15.9743V10.885C15.998 10.79 15.9868 10.6975 15.9668 10.6081Z" fill="#062E18"/>
<path d="M9.01859 23.575L8.63672 23.6481V23.9512H9.01859V23.575Z" fill="#092214"/>
<path d="M15.9999 15.975H15.9668L15.9999 15.9756V15.975Z" fill="#0C3B25"/>
<path d="M15.9668 15.975V21.5625C15.9668 22.1344 14.4912 22.6319 13.9362 22.6319L9.01929 23.5744V23.9506H15.3043C15.483 23.9463 15.6499 23.8963 15.7943 23.8113C15.9249 23.6044 16.0005 23.3588 16.0005 23.0956V15.9738L15.9668 15.975Z" fill="#092214"/>
<path d="M15.9668 11.1144V15.975H15.9999V11.3994C15.9987 11.3006 15.9874 11.205 15.9668 11.1144Z" fill="#062D18"/>
<path d="M14.9725 7.13745H14.9637H8V7.7912V7.40183H9.25375C9.33 7.35245 9.42063 7.32183 9.51688 7.31933H15.5306C15.3713 7.20995 15.18 7.14245 14.9725 7.13745Z" fill="#1F975F"/>
<path d="M15.5298 7.32062H9.51605C9.41855 7.32437 9.32855 7.35374 9.25293 7.40312H14.9629H14.9717C15.2179 7.40937 15.4423 7.50249 15.6154 7.65187H15.8329C15.7579 7.52062 15.6542 7.40749 15.5298 7.32062Z" fill="#1E925B"/>
<path d="M15.833 7.65186H15.6155C15.7455 7.76498 15.8467 7.91061 15.9067 8.07436H15.9636C15.9517 7.92186 15.9049 7.77873 15.833 7.65186Z" fill="#1C8855"/>
<path d="M15.9631 8.07562H15.9062C15.9425 8.17625 15.9631 8.28312 15.9669 8.39562V8.13062C15.9656 8.11125 15.965 8.09312 15.9631 8.07562Z" fill="#1A8050"/>
<path d="M7.99865 20.7925H7.8999V22.6481V21.0406H7.99865V20.7925Z" fill="#BEBEBE"/>
<path d="M7.89992 22.9637V23.1712C7.89617 23.2906 7.93304 23.4012 7.99929 23.4894V23.25C7.93929 23.1694 7.90304 23.07 7.89992 22.9637Z" fill="#B9B9B9"/>
<path d="M7.99854 23.2487V23.4887L7.99916 23.4893V23.25C7.99978 23.25 7.99979 23.25 7.99854 23.2487Z" fill="#18774A"/>
<path d="M8 23.2506V23.4906C8.005 23.4975 8.01063 23.5044 8.01562 23.5106V23.2706C8.01 23.2637 8.005 23.2575 8 23.2506Z" fill="#114328"/>
<path d="M8.01562 23.2706V23.5106C8.01812 23.5144 8.02187 23.5175 8.02437 23.5213V23.2813C8.02187 23.2781 8.01875 23.2744 8.01562 23.2706Z" fill="#103C24"/>
<path d="M8.0249 23.2812V23.5212C8.0274 23.5237 8.0299 23.5275 8.03303 23.53V23.29C8.03053 23.2869 8.02803 23.2837 8.0249 23.2812Z" fill="#0A2516"/>
<path d="M8.03296 23.29V23.53C8.05983 23.56 8.09108 23.5862 8.12421 23.6081V23.3681C8.09108 23.3462 8.05983 23.32 8.03296 23.29Z" fill="#092315"/>
<path d="M8.12427 23.3681V23.6081C8.19989 23.6587 8.29114 23.6894 8.38802 23.6931H8.39677L8.45489 23.6819V23.4419L8.39677 23.4531H8.38802C8.28989 23.45 8.19927 23.4187 8.12427 23.3681Z" fill="#092214"/>
<path d="M8.62108 23.41L8.45483 23.4425V23.6831L8.62108 23.6506V23.41Z" fill="#092214"/>
<path d="M8.63672 23.4069L8.62109 23.41V23.6506L8.63672 23.6481V23.4069Z" fill="#092214"/>
<path d="M9.01859 23.3331L8.63672 23.4069V23.6481L9.01859 23.575V23.3331Z" fill="#092114"/>
<path d="M15.9668 15.975V21.3144C15.9668 21.8862 14.4912 22.3837 13.9362 22.3837L9.01929 23.3331V23.5744L13.9362 22.6318C14.4912 22.6318 15.9668 22.135 15.9668 21.5625V15.975Z" fill="#092114"/>
<path d="M9.25375 7.40308H8V7.79245C8.0875 7.71245 8.20438 7.66245 8.3325 7.6612H9.04937C9.0875 7.5537 9.15937 7.46308 9.25375 7.40308Z" fill="#1C8855"/>
<path d="M14.9724 7.40308H14.9637H9.25369C9.15994 7.4637 9.08807 7.5537 9.04932 7.65995H9.05994C9.08432 7.65558 9.10994 7.65308 9.13557 7.65183H15.6156C15.4424 7.50183 15.2187 7.4087 14.9724 7.40308Z" fill="#1B8453"/>
<path d="M15.615 7.65186H9.13495C9.10933 7.65248 9.08433 7.65561 9.05933 7.65998H13.4056C13.8912 7.66248 14.3706 7.78561 14.7987 8.01686C14.8125 8.03498 14.8381 8.05436 14.8712 8.07561H15.9056C15.8462 7.91061 15.7456 7.76498 15.615 7.65186Z" fill="#197C4E"/>
<path d="M15.9062 8.07562H14.8718C14.8981 8.09125 14.9287 8.10875 14.965 8.12625C15.0518 8.14625 15.135 8.17562 15.215 8.21125C15.3025 8.25187 15.385 8.30062 15.4612 8.3575C15.6118 8.43 15.7681 8.5125 15.9031 8.605H15.9256C15.9393 8.605 15.9525 8.60562 15.9668 8.60687V8.39562C15.9631 8.28312 15.9431 8.17562 15.9062 8.07562Z" fill="#187549"/>
<path d="M15.2144 8.21124C15.3019 8.25187 15.3844 8.30062 15.4606 8.35749C15.4606 8.35749 15.4606 8.35749 15.4612 8.35749C15.3844 8.30062 15.3019 8.25187 15.2144 8.21124Z" fill="#14623D"/>
<path d="M14.9644 8.12622C15.0912 8.19122 15.2719 8.26747 15.4606 8.35747C15.3844 8.3006 15.3019 8.25122 15.2144 8.21122C15.1344 8.1756 15.0512 8.14622 14.9644 8.12622Z" fill="#115535"/>
<path d="M15.9256 8.60498H15.9031C15.925 8.61998 15.9462 8.63498 15.9662 8.65061V8.60686C15.9525 8.60561 15.9393 8.60561 15.9256 8.60498Z" fill="#166F45"/>
<path d="M7.8999 22.6481V22.9638C7.90365 23.07 7.93928 23.1688 7.99928 23.2488V22.9413C7.93803 22.8594 7.90178 22.7581 7.8999 22.6481Z" fill="#AFAFAF"/>
<path d="M7.99854 22.9412V23.2487L7.99978 23.25V22.9425C7.99978 22.9418 7.99979 22.9418 7.99854 22.9412Z" fill="#177046"/>
<path d="M8 22.9431V23.2506C8.005 23.2575 8.01063 23.2644 8.01562 23.2706V22.9631C8.01 22.9562 8.005 22.95 8 22.9431Z" fill="#103F26"/>
<path d="M7.99855 21.0406H7.89917V22.6487C7.90104 22.7581 7.93792 22.8593 7.99855 22.9418V21.0406Z" fill="#AEAEAE"/>
<path d="M9.04937 7.65997H8.3325C8.20438 7.66185 8.08812 7.71185 8 7.79122V21.0406V22.9412L8.00062 22.9418V15.9656V8.66185H8.01625V8.60372C8.01875 8.6031 8.0225 8.60185 8.025 8.60122V8.08997H8.64312C8.67437 7.87622 8.8375 7.70435 9.04813 7.66122C9.04813 7.66122 9.04937 7.6606 9.04937 7.65997Z" fill="#176F46"/>
<path d="M8 15.9669V22.9431C8.005 22.95 8.01063 22.9569 8.01562 22.9631V15.975H8V15.9669Z" fill="#103F26"/>
<path d="M8.01562 8.66248H8V15.9669V15.975H8.01562V8.66248Z" fill="#0B552C"/>
<path d="M9.05983 7.65997H9.04921C9.04921 7.6606 9.04858 7.66185 9.04858 7.66185C9.05171 7.66122 9.05608 7.6606 9.05983 7.65997Z" fill="#166D44"/>
<path d="M9.04807 7.66248C8.83682 7.7056 8.67369 7.87748 8.64307 8.09123H9.00682C9.01119 8.0906 9.01494 8.08935 9.01932 8.08873V7.8431C9.01744 7.77873 9.02807 7.71873 9.04807 7.66248Z" fill="#156942"/>
<path d="M13.4049 7.65997H9.05861C9.05486 7.6606 9.05173 7.66185 9.04736 7.66185C9.02736 7.7181 9.01674 7.77935 9.01736 7.84247V8.0881C9.04986 8.07997 9.08299 8.0756 9.11736 8.07497H14.8699C14.8367 8.05372 14.8111 8.03435 14.7974 8.01622C14.3699 7.78497 13.8911 7.66247 13.4049 7.65997Z" fill="#156640"/>
<path d="M9.0186 8.08746C9.01423 8.08809 9.01048 8.08934 9.0061 8.08996H9.0186V8.08746Z" fill="#14643F"/>
<path d="M14.8718 8.07562H9.11929C9.08491 8.07625 9.05179 8.08062 9.01929 8.08875V8.09125H14.6568H14.6655C14.768 8.09187 14.868 8.10437 14.9643 8.12625C14.9287 8.10812 14.8968 8.09125 14.8718 8.07562Z" fill="#14623D"/>
<path d="M14.6655 8.09125H14.6567C14.763 8.09125 14.8655 8.10375 14.9642 8.12625C14.868 8.10312 14.768 8.09125 14.6655 8.09125Z" fill="#115535"/>
<path d="M15.4604 8.35748C15.5548 8.42873 15.6404 8.51186 15.7136 8.60498H15.9029C15.7673 8.51311 15.6111 8.43061 15.4604 8.35748Z" fill="#14623D"/>
<path d="M8.64303 8.09125H8.0249V8.6025V8.4225H8.03303V8.09125H8.64303Z" fill="#135E3B"/>
<path d="M15.46 8.35748C15.5543 8.42873 15.6406 8.51186 15.7131 8.60498C15.6406 8.51186 15.5556 8.42873 15.46 8.35748C15.4606 8.35748 15.4606 8.35748 15.46 8.35748Z" fill="#115535"/>
<path d="M8.64296 8.09125H8.03296V8.4225H8.63796V8.16625C8.63671 8.14125 8.63983 8.11562 8.64296 8.09125Z" fill="#115233"/>
<path d="M9.00669 8.09125H8.64294C8.63919 8.11562 8.63794 8.14125 8.63794 8.16687V8.42312H8.64919C8.70419 8.26062 8.83856 8.13437 9.00669 8.09125Z" fill="#104F32"/>
<path d="M9.01868 8.09125H9.00618C8.83806 8.13437 8.70368 8.26125 8.64868 8.4225H9.01868V8.09125Z" fill="#104D30"/>
<path d="M14.6568 8.09125H9.01929V8.4225H14.6568C14.8743 8.42312 15.0805 8.47687 15.2618 8.56875C15.3243 8.575 15.3843 8.58687 15.443 8.605H15.7137C15.6412 8.51187 15.5549 8.42875 15.4605 8.3575C15.273 8.2675 15.0912 8.19062 14.9643 8.12625C14.8655 8.10312 14.763 8.09125 14.6568 8.09125Z" fill="#0F4C2F"/>
<path d="M8.03303 8.42249H8.0249V8.60249C8.0274 8.60186 8.0299 8.60061 8.03303 8.59999V8.42249Z" fill="#115233"/>
<path d="M8.63674 8.42249H8.03174V8.59936C8.05611 8.59249 8.08111 8.58874 8.10611 8.58874C8.13674 8.58874 8.16736 8.59374 8.19736 8.60374H8.61986C8.61799 8.55374 8.62424 8.50561 8.63549 8.45936V8.42249" fill="#0F4A2E"/>
<path d="M8.6487 8.42249H8.63745V8.45999C8.64058 8.44811 8.64495 8.43499 8.6487 8.42249Z" fill="#0E472C"/>
<path d="M8.63686 8.45996C8.62436 8.50621 8.61936 8.55434 8.62123 8.60434H8.63686V8.45996Z" fill="#0E472C"/>
<path d="M9.0187 8.42249H8.6487C8.64433 8.43499 8.64058 8.44811 8.63745 8.45999V8.60436H9.0187V8.42249Z" fill="#0E462C"/>
<path d="M14.6568 8.42249H9.01929V8.60499H15.1549L15.1724 8.56374H15.1893C15.2137 8.56436 15.2387 8.56624 15.2618 8.56874C15.0793 8.47686 14.8743 8.42436 14.6568 8.42249Z" fill="#0E442B"/>
<path d="M15.9025 8.60498H15.7131C15.7281 8.62311 15.7419 8.64248 15.7563 8.66311H15.9656V8.65061C15.9456 8.63561 15.9244 8.61998 15.9025 8.60498Z" fill="#135D3A"/>
<path d="M15.9667 8.66248H15.7573C15.8011 8.72498 15.8398 8.79123 15.8729 8.86123C15.9073 8.8956 15.9386 8.93123 15.9667 8.96998V8.66248Z" fill="#094725"/>
<path d="M15.7144 8.60498C15.7294 8.62311 15.7431 8.64248 15.7575 8.66311C15.7431 8.64373 15.7287 8.62436 15.7144 8.60498Z" fill="#105133"/>
<path d="M15.7568 8.66248C15.8006 8.72498 15.8393 8.79123 15.8718 8.8606C15.8393 8.79185 15.8006 8.72498 15.7568 8.66248Z" fill="#083E20"/>
<path d="M15.7142 8.60498H15.4436C15.4955 8.61998 15.5455 8.63998 15.5936 8.66311H15.7574C15.743 8.64373 15.728 8.62436 15.7142 8.60498Z" fill="#0F492E"/>
<path d="M15.756 8.66248H15.5923C15.6967 8.71248 15.7904 8.77998 15.871 8.8606C15.8392 8.79185 15.7998 8.72498 15.756 8.66248Z" fill="#07371D"/>
<path d="M8.01562 22.9631V23.2706C8.01812 23.2744 8.02187 23.2775 8.02437 23.2813V22.9738C8.02187 22.97 8.01875 22.9669 8.01562 22.9631Z" fill="#0F3922"/>
<path d="M8.02486 8.60248C8.02236 8.6031 8.01861 8.60435 8.01611 8.60498V8.6631H8.02486V8.60248Z" fill="#14643E"/>
<path d="M8.02486 15.975H8.01611V22.9631C8.01861 22.9669 8.02236 22.97 8.02486 22.9737V15.975Z" fill="#0F3822"/>
<path d="M8.025 8.66248H8.01562V15.975H8.025V10.0637V9.09435V8.66248Z" fill="#0A4C28"/>
<path d="M15.2617 8.57001C15.2836 8.58126 15.3055 8.59376 15.3273 8.60626H15.443C15.3842 8.58813 15.3236 8.57626 15.2617 8.57001Z" fill="#0E472C"/>
<path d="M8.03303 8.59937C8.03053 8.59999 8.02803 8.60124 8.0249 8.60187V8.66249H8.03303V8.59937Z" fill="#0F4C30"/>
<path d="M8.03303 8.66248H8.0249V9.09435V8.73748H8.03303V8.66248Z" fill="#073A1E"/>
<path d="M8.10733 8.58997C8.08171 8.58997 8.05733 8.59372 8.03296 8.60059V8.66372H8.62233V8.60684V8.60622H8.19983C8.16858 8.59497 8.13796 8.58997 8.10733 8.58997Z" fill="#0E462C"/>
<path d="M8.62111 8.66248H8.03174V8.73685H8.61924C8.61986 8.73685 8.61986 8.73623 8.62111 8.73623V8.66248Z" fill="#07361C"/>
<path d="M8.63672 8.60498H8.62109V8.60561V8.66248H8.63672V8.60498Z" fill="#0E442A"/>
<path d="M8.63672 8.66248H8.62109V8.73623C8.62609 8.73185 8.63172 8.72685 8.63672 8.72248V8.66248Z" fill="#07341B"/>
<path d="M9.0187 8.60498H8.63745V8.66311H8.7262C8.7962 8.62623 8.8762 8.60498 8.9612 8.60498H9.0187Z" fill="#0D4229"/>
<path d="M8.72669 8.66248H8.63794V8.72185C8.66481 8.69935 8.69481 8.67935 8.72669 8.66248Z" fill="#06321A"/>
<path d="M15.1886 8.56433H15.1717L15.1542 8.60558H9.01855H15.3267C15.3048 8.59308 15.2829 8.58121 15.2611 8.56933C15.2367 8.56746 15.2136 8.56558 15.1886 8.56433Z" fill="#0D4229"/>
<path d="M8.03303 8.73749H8.0249V9.09436H8.03303V8.73749Z" fill="#07361C"/>
<path d="M8.03303 9.09436H8.0249V9.55874H8.03303V9.09436Z" fill="#07341B"/>
<path d="M8.0249 22.9738V23.2813C8.0274 23.2838 8.0299 23.2875 8.03303 23.29V22.9825C8.03053 22.98 8.02803 22.9763 8.0249 22.9738Z" fill="#0A2416"/>
<path d="M8.03303 9.55872H8.0249V10.0637H8.03303V9.55872Z" fill="#06311A"/>
<path d="M8.03303 15.975H8.0249V22.9737C8.0274 22.9762 8.0299 22.98 8.03303 22.9825V15.975Z" fill="#0A2416"/>
<path d="M8.03303 10.0637H8.0249V15.975H8.03303V10.0637Z" fill="#06311A"/>
<path d="M8.62046 8.73749H8.03296V9.09436H8.45546C8.45983 8.95311 8.52296 8.82686 8.62046 8.73749Z" fill="#07321A"/>
<path d="M8.45497 9.09436H8.03247V9.55874H8.2006C8.25935 9.46311 8.3481 9.38686 8.45497 9.34499V9.12749V9.11061C8.45497 9.10561 8.45497 9.09936 8.45497 9.09436Z" fill="#063019"/>
<path d="M8.03296 22.9825V23.29C8.05983 23.32 8.09108 23.3462 8.12421 23.3681V23.0606C8.09108 23.0387 8.05983 23.0125 8.03296 22.9825Z" fill="#092214"/>
<path d="M8.2006 9.55872H8.03247V10.0643H8.12372V9.83184C8.12435 9.73122 8.15247 9.63872 8.2006 9.55872Z" fill="#062F19"/>
<path d="M8.12421 15.975H8.03296V22.9825C8.05983 23.0125 8.09108 23.0387 8.12421 23.0612V15.975Z" fill="#092214"/>
<path d="M8.12421 10.0637H8.03296V15.975H8.12421V10.0637Z" fill="#062E18"/>
<path d="M15.8718 8.86188C15.9125 8.9475 15.9443 9.03875 15.9656 9.13438V8.97125C15.9375 8.93188 15.9062 8.89625 15.8718 8.86188Z" fill="#084122"/>
<path d="M15.8718 8.8606C15.9131 8.94622 15.9443 9.03872 15.9662 9.1331C15.9443 9.03872 15.9131 8.94747 15.8718 8.8606C15.8718 8.86185 15.8718 8.86185 15.8718 8.8606Z" fill="#073A1E"/>
<path d="M15.443 8.60498H15.3274C15.358 8.62311 15.3886 8.64248 15.4174 8.66311H15.5918C15.5449 8.63998 15.4949 8.62061 15.443 8.60498Z" fill="#0E462B"/>
<path d="M15.5931 8.66248H15.4187C15.665 8.83373 15.8525 9.08435 15.9418 9.3781C15.9506 9.38185 15.9587 9.38498 15.9662 9.38873V9.13435C15.9443 9.03872 15.9125 8.94747 15.8718 8.86185C15.7912 8.77997 15.6975 8.71248 15.5931 8.66248Z" fill="#07351C"/>
<path d="M8.62126 8.73621C8.62063 8.73621 8.62063 8.73683 8.61938 8.73683H8.62126V8.73621Z" fill="#07341B"/>
<path d="M8.63672 8.72247C8.63172 8.72685 8.62609 8.73122 8.62109 8.73622V8.73685H8.63672V8.72247Z" fill="#06321A"/>
<path d="M9.01871 8.60498H8.96059C8.87559 8.60498 8.79559 8.62623 8.72559 8.66311H9.01871V8.60498Z" fill="#0D4128"/>
<path d="M9.01859 8.66248H8.72547C8.69422 8.67935 8.66422 8.69935 8.63672 8.72185V8.73685H9.01797L9.01859 8.66248Z" fill="#06311A"/>
<path d="M15.3274 8.60498H9.01929V8.66311H15.4187C15.3887 8.64248 15.358 8.62311 15.3274 8.60498Z" fill="#0D4128"/>
<path d="M15.4173 8.66248H9.01855V8.73685H14.6561C15.1179 8.73685 15.5273 8.97123 15.7698 9.32748C15.8286 9.33873 15.8867 9.35622 15.9411 9.37747C15.8517 9.08435 15.6648 8.83373 15.4173 8.66248Z" fill="#06311A"/>
<path d="M8.62122 8.73749H8.61935C8.52185 8.82624 8.45997 8.95311 8.45435 9.09436H8.62122V8.73749Z" fill="#06311A"/>
<path d="M8.62122 9.09436H8.45435C8.45435 9.09936 8.45435 9.10561 8.45435 9.11124V9.12811V9.34561C8.50622 9.32561 8.56247 9.31249 8.62122 9.30936V9.09436Z" fill="#062F19"/>
<path d="M8.63672 8.73749H8.62109V9.09436H8.63672V8.73749Z" fill="#063119"/>
<path d="M8.63672 9.09436H8.62109V9.30999H8.63672V9.09436Z" fill="#062F19"/>
<path d="M9.01859 8.73749H8.63672V9.09436H9.01859V8.73749Z" fill="#062F19"/>
<path d="M14.6568 8.73749H9.01929V9.09436H14.6568C14.923 9.09624 15.1724 9.17499 15.3812 9.30999H15.5943H15.603C15.6599 9.31186 15.7162 9.31811 15.7705 9.32936C15.528 8.97124 15.1187 8.73749 14.6568 8.73749Z" fill="#062F19"/>
<path d="M9.01859 9.09436H8.63672V9.30999H9.01859V9.09436Z" fill="#062E18"/>
<path d="M14.6568 9.09436H9.01929V9.30999H15.3812C15.1712 9.17499 14.923 9.09561 14.6568 9.09436Z" fill="#062E18"/>
<path d="M8.45481 9.34497C8.34856 9.38685 8.25919 9.46247 8.20044 9.55872H8.45481V9.34497Z" fill="#062F19"/>
<path d="M8.12427 23.0606V23.3681C8.19989 23.4187 8.29114 23.4494 8.38802 23.4531H8.39677L8.45489 23.4419V23.135L8.39677 23.1462C8.29614 23.1444 8.20239 23.1131 8.12427 23.0606Z" fill="#092214"/>
<path d="M8.45479 9.55872H8.20041C8.15104 9.63872 8.12354 9.73247 8.12354 9.83247V10.065H8.45416V9.55934" fill="#062E18"/>
<path d="M8.45489 15.975H8.12427V23.0606C8.20239 23.1131 8.29614 23.145 8.39802 23.1462L8.45614 23.135V15.975" fill="#092214"/>
<path d="M8.45489 10.0637H8.12427V15.975H8.45489V10.0637Z" fill="#062E18"/>
<path d="M15.9412 9.37933C15.9505 9.40996 15.9587 9.44058 15.9655 9.47246V9.38933C15.958 9.38496 15.9499 9.38183 15.9412 9.37933Z" fill="#07331B"/>
<path d="M15.77 9.32812C15.8613 9.4625 15.9288 9.615 15.9663 9.77812V9.47125C15.9594 9.43937 15.9506 9.40875 15.9419 9.37813C15.8869 9.35688 15.8288 9.34063 15.77 9.32812Z" fill="#063019"/>
<path d="M8.62122 9.31C8.56247 9.3125 8.50622 9.325 8.45435 9.34625V9.56H8.62122V9.31Z" fill="#062F19"/>
<path d="M8.63672 9.31H8.62109V9.55875H8.63672V9.31Z" fill="#062E18"/>
<path d="M15.6025 9.31H15.5937H15.3806C15.6719 9.49875 15.8862 9.795 15.9662 10.1437V9.77875C15.9287 9.61562 15.8612 9.46312 15.77 9.32875C15.7156 9.3175 15.66 9.31187 15.6025 9.31Z" fill="#062F19"/>
<path d="M9.01859 9.31H8.63672V9.55875H9.01859V9.31Z" fill="#062E18"/>
<path d="M15.3812 9.31H9.01929V9.55875H14.6568C15.2949 9.5625 15.8299 10.0094 15.9668 10.6081V10.1437C15.8868 9.79437 15.6718 9.4975 15.3812 9.31Z" fill="#062D18"/>
<path d="M8.62108 23.1031L8.45483 23.1356V23.4425L8.62108 23.41V23.1031Z" fill="#092214"/>
<path d="M8.63672 23.1006L8.62109 23.1031V23.41L8.63672 23.4068V23.1006Z" fill="#092114"/>
<path d="M9.01859 23.0269L8.63672 23.1006V23.4069L9.01859 23.3331V23.0269Z" fill="#092114"/>
<path d="M15.9668 15.975V21.0156C15.9668 21.5875 14.4912 22.085 13.9362 22.085L9.01929 23.0275V23.3337L13.9362 22.3843C14.4912 22.3843 15.9668 21.8862 15.9668 21.315V15.975Z" fill="#092114"/>
<path d="M8.62108 9.55872H8.45483V10.0637H8.62108V9.55872Z" fill="#062E18"/>
<path d="M8.62108 15.975H8.45483V23.1356L8.62108 23.1031V15.975Z" fill="#092214"/>
<path d="M8.62108 10.0637H8.45483V15.975H8.62108V10.0637Z" fill="#062D18"/>
<path d="M8.63672 9.55872H8.62109V10.0637H8.63672V9.55872Z" fill="#062D18"/>
<path d="M8.63672 15.975H8.62109V23.1031L8.63672 23.1006V15.975Z" fill="#092114"/>
<path d="M8.63672 10.0637H8.62109V15.975H8.63672V10.0637Z" fill="#062D17"/>
<path d="M9.01859 9.55872H8.63672V10.0637H9.01859V9.55872Z" fill="#062D17"/>
<path d="M14.6568 9.55872H9.01929V10.0643H14.6568C15.2962 10.0681 15.8299 10.515 15.9668 11.1137V10.6081C15.8299 10.0087 15.2949 9.56247 14.6568 9.55872Z" fill="#062C17"/>
<path d="M9.01859 15.975H8.63672V23.1006L9.01859 23.0268V15.975Z" fill="#092114"/>
<path d="M9.01859 10.0637H8.63672V15.975H9.01859V10.0637Z" fill="#062C17"/>
<path d="M15.6868 15.975H9.01929V23.0275L13.9362 22.085C14.4912 22.085 15.9668 21.5869 15.9668 21.0156V15.975H15.6868Z" fill="#092114"/>
<path d="M14.6568 10.0637H9.01929V15.9743H15.6868H15.9662V11.1137C15.8299 10.5156 15.2955 10.0681 14.6568 10.0637Z" fill="#062C17"/>
<path d="M1.3349 7.60999H14.6655C15.4193 7.63186 16.0149 8.25686 15.9999 9.01123V22.9312C16.028 23.685 15.4443 24.3219 14.6899 24.3575H1.3349C0.583647 24.3437 -0.0144784 23.7244 0.000521623 22.9737V22.965V9.01186C-0.0144784 8.25749 0.580522 7.63249 1.3349 7.60999Z" fill="#107C41"/>
<path d="M3.62988 21.1906L6.77238 16.0669L3.88676 11.0087H6.20863L7.77551 14.2419C7.88676 14.4744 7.98676 14.7125 8.07426 14.9544C8.17363 14.7144 8.28988 14.465 8.40551 14.2419L10.0643 11.0331H12.1955L9.26926 16.0644L12.2949 21.1794H10.0243L8.19988 17.6556C8.11676 17.5025 8.04238 17.3444 7.97613 17.1831C7.92113 17.3425 7.84926 17.495 7.76051 17.6387L5.89551 21.195L3.62988 21.1906Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_877_12918">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 38 KiB

238
packages/nc-gui/assets/nc-icons/microsoft_outlook.svg

@ -0,0 +1,238 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_881_28190)">
<path d="M31.1368 15.2737C31.5962 15.2737 31.9687 15.6462 31.9687 16.1056C31.9687 16.565 31.5962 16.9375 31.1368 16.9375C30.6774 16.9375 30.3049 16.565 30.3049 16.1056C30.3049 15.6469 30.6774 15.2737 31.1368 15.2737Z" fill="#123B6D"/>
<path d="M8.66251 14.9769C9.21563 14.9769 9.66375 15.425 9.66375 15.9781C9.66375 16.5306 9.21563 16.9794 8.66251 16.9794C8.11001 16.9794 7.66125 16.5312 7.66125 15.9781C7.66125 15.425 8.10938 14.9769 8.66251 14.9769Z" fill="#123B6D"/>
<path d="M19.9844 15.9769H8.3269V16.5344L19.1744 22.4931L19.32 22.5694C19.74 22.7719 20.2294 22.7719 20.6494 22.5694L20.795 22.4931L31.6425 16.5344V15.9769H19.9844Z" fill="#123B6D"/>
<path d="M19.9844 15.9769H8.3269V15.4194L19.1744 9.46061L19.32 9.38436C19.74 9.18186 20.2294 9.18186 20.6494 9.38436L20.795 9.46061L31.5969 15.4275V15.9775H19.9844" fill="#123B6D"/>
<path d="M11.4275 2.53998H28.5618C29.3375 2.53998 29.9675 3.16935 29.9675 3.9456V26.0456C29.9675 26.8212 29.3381 27.4512 28.5618 27.4512H11.4275C10.6518 27.4512 10.0219 26.8219 10.0219 26.0456V3.94498C10.0225 3.16935 10.6518 2.53998 11.4275 2.53998Z" fill="#28A8EA"/>
<path d="M10.0225 16.94H17.9831V22.9444H10.0225V16.94Z" fill="#14447D"/>
<path d="M16.9906 16.94H23.9794V22.9444H16.9906V16.94Z" fill="#0364B8"/>
<path d="M10.0225 11.1569H16.9887V16.94H10.0225V11.1569Z" fill="#0664B2"/>
<path d="M23.9793 16.94H29.9762V22.9438H23.9793V16.94ZM16.9906 11.1569H23.9806V16.9394H16.9906V11.1569ZM10.0225 5.3819H16.9887V11.1569H10.0225V5.3819Z" fill="#0078D4"/>
<path d="M29.9762 5.3819H23.9794V11.1569H29.9762V5.3819Z" fill="#50D9FF"/>
<path d="M11.4275 2.54H28.54C28.9093 2.54 29.265 2.68188 29.5325 2.93688C29.7931 3.18563 29.9418 3.53126 29.9456 3.89188V5.41875H10.0225V3.89188C10.04 3.13063 10.6668 2.52688 11.4275 2.54Z" fill="#0358A7"/>
<path d="M19.205 22.5069C19.2418 22.5306 19.2806 22.5519 19.32 22.57L19.3075 22.5631C19.2768 22.5481 19.2462 22.5319 19.2162 22.5131L19.205 22.5069ZM32 15.9813C32 16.0506 31.9875 16.1188 31.9668 16.1819C31.9168 16.3294 31.8125 16.4556 31.6712 16.5331H31.6425L29.9775 17.4469L23.9806 20.7363L23.0243 21.2613L20.7337 22.5244C20.7181 22.5338 20.7025 22.5425 20.6856 22.5506L20.6506 22.57C20.4431 22.6694 20.2156 22.7219 19.9862 22.7219C19.7568 22.7219 19.5293 22.6694 19.3218 22.5694L31.36 29.1844C31.7306 28.9319 31.9818 28.5138 32.0006 28.0313C32.0012 28.0181 32.0012 28.005 32.0012 27.9919V15.9813M32 15.9763V15.9813C32 15.98 32 15.9781 32 15.9763Z" fill="url(#paint0_linear_881_28190)"/>
<path d="M31.2807 15.9769H30.6438L29.9675 16.3487V16.94H29.9769V17.4281L31.5963 16.5356L31.2807 15.9769Z" fill="#0E316A"/>
<path d="M31.1299 15.71L30.6437 15.9769H31.2806L31.1299 15.71Z" fill="#0E316A"/>
<path d="M29.9675 16.3488L28.8918 16.94H29.9675V16.3488Z" fill="#1967A8"/>
<path d="M23.9794 19.64L20.205 21.7144C20.1381 21.7431 20.0662 21.7575 19.9956 21.7575C19.925 21.7575 19.8525 21.7438 19.7862 21.7144C19.7269 21.69 18.7931 21.1813 17.4956 20.4694V21.5619L19.1756 22.485C19.1894 22.4944 19.2037 22.5044 19.2175 22.5131L19.3087 22.5631C19.3131 22.565 19.3169 22.5669 19.3212 22.5694C19.5306 22.6713 19.7587 22.7213 19.9856 22.7213C20.2125 22.7213 20.44 22.6706 20.65 22.5694C20.6625 22.5644 20.6737 22.5581 20.6862 22.5519L20.7344 22.5256C20.7556 22.5131 20.7756 22.4994 20.7956 22.485L23.025 21.2619L23.9812 20.7344V19.64" fill="#07458F"/>
<path d="M29.9769 16.94H29.9675H28.8919L23.9794 19.64V20.7344L29.9769 17.4281V16.94Z" fill="#054F9D"/>
<path d="M20.6838 22.5519C20.6725 22.5582 20.66 22.5632 20.6475 22.5694C20.4381 22.6713 20.21 22.7213 19.9831 22.7213C19.7563 22.7213 19.5288 22.6707 19.3188 22.5694C19.3144 22.5675 19.3106 22.5657 19.3063 22.5632L19.3188 22.57C19.5263 22.67 19.7538 22.7225 19.9831 22.7225C20.2125 22.7225 20.44 22.67 20.6475 22.5707L20.6838 22.5519ZM17.4944 21.5619L19.1744 22.4857C19.1838 22.4925 19.1944 22.4994 19.205 22.5069L19.2163 22.5132C19.2025 22.5044 19.1881 22.495 19.1744 22.485L17.4944 21.5619ZM23.0231 21.2619L20.7938 22.485C20.7738 22.4988 20.7531 22.5119 20.7325 22.5257L23.0231 21.2619Z" fill="url(#paint1_linear_881_28190)"/>
<path d="M9.49564 29.4613H30.4725C30.7881 29.4606 31.0969 29.365 31.3581 29.1863L19.3181 22.57C19.2675 22.5475 19.2181 22.5181 19.1725 22.4856L8.34002 16.5338L8.00439 16.3506V27.9925C8.00439 28.8025 8.66127 29.4594 9.47127 29.4594L9.49564 29.4613Z" fill="#28A8EA"/>
<path d="M17.1806 8.26874H16.9888V8.86686C17.045 8.98686 17.0781 9.11999 17.0819 9.26124V11.1556H17.495V8.96311C17.4925 8.69749 17.3788 8.44624 17.1806 8.26874Z" fill="#27A2E2"/>
<path d="M17.4943 16.94H17.0812V20.2438C17.2224 20.3206 17.3599 20.3963 17.4943 20.47V16.94Z" fill="#0361B2"/>
<path d="M17.4944 11.1569H17.0813V16.9394H17.4944V11.1569ZM16.9888 8.26874H15.9207C15.9244 8.27811 15.9275 8.28874 15.93 8.29936H16.0957C16.4894 8.29936 16.8313 8.53061 16.9882 8.86686V8.26874" fill="#0074CD"/>
<path d="M17.0818 20.2431V21.3356L17.4949 21.5625V20.47C17.3605 20.3956 17.2224 20.3206 17.0818 20.2431Z" fill="#07438A"/>
<path d="M17.0818 21.3356V21.3363L17.4943 21.5625V21.5619L17.0818 21.3356Z" fill="url(#paint2_linear_881_28190)"/>
<path d="M17.0819 21.3362V23.3037C17.0819 23.3125 17.0812 23.3212 17.0812 23.33V23.5481C17.0725 23.6444 17.0525 23.7369 17.0219 23.825C17.3006 23.655 17.4894 23.35 17.495 22.9994V21.5644L17.0819 21.3362Z" fill="#27A2E2"/>
<path d="M7.99878 23.6844V25.9919H8.00565V25.5256H7.99878V25.0981V23.6844Z" fill="#EEEEEE"/>
<path d="M15.9869 24.7919C15.9388 24.8144 15.8888 24.8331 15.8363 24.8481C15.6181 25.2537 15.1881 25.5275 14.6994 25.5275C14.6863 25.5275 14.6731 25.5275 14.66 25.5269H8.00439V25.9931H14.6594C14.6725 25.9931 14.6856 25.9937 14.6988 25.9937C15.3781 25.9925 15.9413 25.4675 15.9869 24.7919Z" fill="#259DDA"/>
<path d="M16.9888 8.86688V9.26501C17.045 9.38501 17.0775 9.51813 17.0806 9.65938V11.1569H17.0813V9.26251C17.0781 9.12126 17.0456 8.98688 16.9888 8.86688Z" fill="#2498D3"/>
<path d="M17.0818 16.94H17.0806V20.2425L17.0818 20.2431V16.94Z" fill="#035AA6"/>
<path d="M17.0818 11.1569H17.0812V16.9394H17.0818V11.1569ZM16.0962 8.29999H15.9305C15.9543 8.37436 15.968 8.45061 15.9743 8.52874V8.69686H16.0805C16.0855 8.69686 16.0918 8.69686 16.0974 8.69686C16.4912 8.69686 16.8318 8.92811 16.9899 9.26499V8.86686C16.8305 8.53124 16.4899 8.29999 16.0962 8.29999Z" fill="#006CC0"/>
<path d="M17.0806 20.2425V21.335L17.0818 21.3356V20.2431L17.0806 20.2425Z" fill="#063E81"/>
<path d="M17.0806 21.335V21.3356L17.0818 21.3363V21.3356L17.0806 21.335Z" fill="url(#paint3_linear_881_28190)"/>
<path d="M17.0806 21.3356V23.3294C17.0812 23.3206 17.0812 23.3119 17.0812 23.3031V21.3356H17.0806Z" fill="#2498D3"/>
<path d="M17.0212 23.8244C16.9706 23.8557 16.9162 23.8825 16.8587 23.9044C16.7656 24.0175 16.6481 24.1094 16.5149 24.1725C16.4731 24.3182 16.3981 24.4488 16.2999 24.5582C16.6387 24.4357 16.9043 24.165 17.0212 23.8244Z" fill="#259DDA"/>
<path d="M17.0806 23.3294C17.0694 23.5469 16.9887 23.7457 16.86 23.9038C16.9169 23.8819 16.9706 23.8557 17.0225 23.8238C17.0525 23.7363 17.0725 23.6432 17.0819 23.5469V23.3294" fill="#2498D3"/>
<path d="M16.86 23.9037C16.7656 23.94 16.6625 23.9619 16.5569 23.9669C16.555 23.9675 16.5544 23.9694 16.5525 23.9706C16.5475 24.04 16.535 24.1075 16.5162 24.1725C16.6494 24.1094 16.7669 24.0175 16.86 23.9037Z" fill="#2392CC"/>
<path d="M16.9887 9.26501V11.1569V16.9394H16.9131H16.99V11.1569H17.0812V9.65939C17.0775 9.51814 17.045 9.38501 16.9887 9.26501Z" fill="#228EC5"/>
<path d="M16.9906 16.94H16.9137V20.1506C16.9399 20.1644 16.9643 20.1788 16.9906 20.1925V16.94Z" fill="#11396A"/>
<path d="M17.0806 16.94H16.9894V20.1925C17.02 20.2094 17.05 20.2256 17.0806 20.2425V16.94Z" fill="#03549B"/>
<path d="M16.9887 11.1569H16.9131V16.94H16.9887V11.1569Z" fill="#055497"/>
<path d="M17.0806 11.1569H16.9894V16.9394H17.0806V11.1569ZM16.0969 8.6969C16.0919 8.6969 16.0856 8.6969 16.08 8.6969H15.9738V9.14065C16.4869 9.16315 16.9006 9.5819 16.9125 10.1025V11.1569H16.9881V9.26503C16.8319 8.92815 16.4906 8.6969 16.0969 8.6969Z" fill="#0065B3"/>
<path d="M16.9131 20.15V21.2425L16.99 21.2844V20.1919C16.9643 20.1782 16.9393 20.165 16.9131 20.15Z" fill="#0D2D60"/>
<path d="M16.9906 20.1925V21.285L17.0819 21.335V20.2425C17.0506 20.2256 17.02 20.2088 16.9906 20.1925Z" fill="#063A79"/>
<path d="M16.9131 21.2425V21.2437L17.0806 21.3356V21.335L16.9906 21.285L16.9131 21.2425Z" fill="url(#paint4_linear_881_28190)"/>
<path d="M16.9131 21.2438V23.2269V23.235C16.9063 23.5313 16.7688 23.7938 16.5563 23.9681C16.6625 23.9631 16.765 23.9413 16.8594 23.905C16.9881 23.7475 17.07 23.5482 17.08 23.3307V21.3369L16.9131 21.2438Z" fill="#228EC5"/>
<path d="M15.9206 8.26874H15.7906C15.7975 8.27811 15.8038 8.28874 15.81 8.29936H15.93C15.9269 8.28936 15.9244 8.27936 15.9206 8.26874Z" fill="#0073CB"/>
<path d="M15.9305 8.29999H15.8105C15.8843 8.41811 15.933 8.55249 15.9518 8.69686H15.9743V8.52874C15.9687 8.45061 15.9543 8.37311 15.9305 8.29999Z" fill="#006BBE"/>
<path d="M15.9744 8.6969H15.9519C15.9563 8.7294 15.9582 8.76253 15.9588 8.79628V8.88752C15.9675 8.93752 15.9719 8.98815 15.9725 9.04065V9.14127H15.9732V8.6969" fill="#0064B1"/>
<path d="M8.00565 25.0981H7.99878V25.5256H8.00565V25.0981Z" fill="#CFCFCF"/>
<path d="M15.8369 24.8475C15.7519 24.8713 15.6613 24.8844 15.5688 24.8844C15.5638 24.8844 15.5594 24.8844 15.5538 24.8844H15.4125C15.2075 25.02 14.9625 25.0994 14.7 25.0994C14.6869 25.0994 14.6738 25.0994 14.6606 25.0988H8.005V25.5269H14.66C14.6731 25.5269 14.6863 25.5275 14.6994 25.5275C15.1888 25.5263 15.6175 25.2538 15.8369 24.8475Z" fill="#2189BE"/>
<path d="M7.99878 23.6844V25.0981H8.00565V24.7688H7.99878V24.4794V23.845V23.6844Z" fill="#B6B6B6"/>
<path d="M8.29437 24.7687H8.00562V25.0975H14.6606C14.6737 25.0975 14.6869 25.0981 14.7 25.0981C14.9619 25.0981 15.2075 25.0194 15.4125 24.8831H8.61812C8.61562 24.8831 8.61312 24.8831 8.60999 24.8831C8.48874 24.8844 8.37937 24.8406 8.29437 24.7687Z" fill="#1D78A7"/>
<path d="M8.00565 24.4794H7.99878V24.7687H8.00565V24.4794Z" fill="#A2A2A2"/>
<path d="M8.12749 24.4794H8.00562V24.7687H8.29437C8.20812 24.6969 8.14812 24.595 8.12749 24.4794Z" fill="#196B95"/>
<path d="M8.00565 23.845H7.99878V24.4794H8.00565V23.845Z" fill="#8B8B8B"/>
<path d="M8.05435 23.845H8.00623V24.48H8.1281C8.12373 24.4557 8.12123 24.4294 8.12123 24.4038V23.8463C8.1106 23.8469 8.10123 23.8469 8.0906 23.8469C8.07748 23.8463 8.06622 23.8457 8.05435 23.845Z" fill="#165C80"/>
<path d="M7.99878 23.7687V23.845H8.00565V23.8387C8.00315 23.8387 8.00128 23.8381 7.99878 23.8381V23.7687Z" fill="#7A7A7A"/>
<path d="M8.00562 23.8394V23.8456H8.05374C8.03749 23.8437 8.02187 23.8419 8.00562 23.8394Z" fill="#135070"/>
<path d="M16.5563 23.9669C16.5544 23.9669 16.5538 23.9669 16.5519 23.9669C16.5519 23.9675 16.5519 23.9694 16.5519 23.9706C16.5531 23.9694 16.555 23.9681 16.5563 23.9669Z" fill="#2189BF"/>
<path d="M16.9131 16.94H16.5537V19.9544C16.6756 20.0213 16.795 20.0869 16.9131 20.1519V16.94Z" fill="#103663"/>
<path d="M16.9131 11.1569H16.5537V16.94H16.9131V11.1569Z" fill="#054F8D"/>
<path d="M15.9744 9.14062V9.21625C16.1744 9.35188 16.3169 9.51063 16.3169 9.6975V10.1781C16.46 10.345 16.5481 10.5606 16.5537 10.7969V11.1562H16.9131V10.1019C16.9012 9.58125 16.4862 9.16437 15.9744 9.14062Z" fill="#005FA7"/>
<path d="M16.5537 19.9537V21.0462L16.9131 21.2437V20.1512C16.7956 20.0862 16.6756 20.0206 16.5537 19.9537Z" fill="#0C2A5A"/>
<path d="M16.5537 21.0457V21.0463L16.9131 21.2438V21.2425L16.5537 21.0457Z" fill="url(#paint5_linear_881_28190)"/>
<path d="M16.5538 21.0463V23.9219C16.5538 23.9369 16.5531 23.9525 16.5519 23.9675C16.5538 23.9675 16.5544 23.9675 16.5563 23.9675C16.7681 23.7931 16.9063 23.5306 16.9131 23.2344V23.2263V21.2438L16.5538 21.0463Z" fill="#2084B9"/>
<path d="M15.9738 9.14062V9.21562L15.9744 9.21688V9.14062H15.9738Z" fill="#005EA7"/>
<path d="M8.12059 23.845H8.05371C8.06621 23.8457 8.07809 23.8457 8.08996 23.8457C8.10059 23.8463 8.10996 23.8457 8.12059 23.845Z" fill="#145475"/>
<path d="M8.00565 23.7687H7.99878V23.8381C8.00128 23.8381 8.00315 23.8387 8.00565 23.8387V23.7687Z" fill="#737373"/>
<path d="M8.12062 23.7687H8.00562V23.84C8.02124 23.8425 8.03812 23.8444 8.05374 23.8462H8.12062V23.7687Z" fill="#124C6A"/>
<path d="M8.00565 23.6844H7.99878V23.7688H8.00565V23.6844Z" fill="#696969"/>
<path d="M8.12062 23.6844H8.00562V23.7688H8.12062V23.6844Z" fill="#104560"/>
<path d="M15.9744 9.21686V9.38061C15.9831 9.43686 15.9875 9.49373 15.9881 9.55248V9.59123C16.0681 9.71561 16.1194 9.85936 16.1362 10.0137C16.2031 10.0612 16.2644 10.1162 16.3169 10.1775V9.69686C16.3169 9.51123 16.1731 9.35186 15.9744 9.21686Z" fill="#004E8A"/>
<path d="M15.9738 9.21564V9.37439C15.9738 9.37626 15.9744 9.37876 15.9744 9.38064V9.21689C15.9738 9.21564 15.9738 9.21564 15.9738 9.21564Z" fill="#004E89"/>
<path d="M15.988 9.59125V9.92687C15.988 9.92687 15.988 9.92687 15.988 9.9275C16.0399 9.95187 16.0899 9.98125 16.1362 10.0131C16.1199 9.85937 16.068 9.71562 15.988 9.59125Z" fill="#00477D"/>
<path d="M16.3012 24.5575C16.2049 24.5925 16.1024 24.6156 15.9962 24.625H15.9893V24.7469C15.9887 24.7619 15.9887 24.7769 15.9868 24.7919C16.1068 24.7344 16.2137 24.655 16.3012 24.5575Z" fill="#259DDA"/>
<path d="M15.9306 24.6244C15.9062 24.7025 15.8743 24.7769 15.8362 24.8481C15.8881 24.8331 15.9387 24.815 15.9868 24.7919C15.9874 24.7769 15.9887 24.7619 15.9893 24.7469V24.625L15.9306 24.6244Z" fill="#2392CC"/>
<path d="M16.5163 24.1725C16.3894 24.2319 16.2463 24.2662 16.0963 24.2662H15.9894V24.2812V24.625H15.9963C16.1025 24.6162 16.205 24.5925 16.3013 24.5575C16.3994 24.4487 16.4738 24.3175 16.5163 24.1725Z" fill="#2392CC"/>
<path d="M15.9893 24.2806C15.9849 24.4 15.9649 24.515 15.9305 24.6231L15.9893 24.6238V24.2806Z" fill="#2189BF"/>
<path d="M16.5519 23.9713C16.3969 24.0975 16.2013 24.1775 15.9888 24.1888V24.2669H16.0956C16.2456 24.2669 16.3875 24.2338 16.5156 24.1731C16.5344 24.1075 16.5469 24.04 16.5519 23.9713Z" fill="#2189BF"/>
<path d="M15.7031 24.62C15.62 24.7225 15.5219 24.8112 15.4119 24.8837H15.5531C15.5581 24.8837 15.5625 24.8837 15.5681 24.8837C15.6612 24.8837 15.7512 24.8706 15.8362 24.8469C15.8737 24.7756 15.9062 24.7012 15.9306 24.6231L15.7031 24.62Z" fill="#1E80B2"/>
<path d="M15.315 24.6138C15.1318 24.7138 14.9212 24.77 14.6993 24.77C14.6862 24.77 14.6731 24.77 14.66 24.7694H8.2937C8.3787 24.8413 8.48933 24.8844 8.60933 24.8844C8.61183 24.8844 8.61433 24.8844 8.61745 24.8844H15.4125C15.5218 24.8119 15.62 24.7219 15.7037 24.6206L15.315 24.6138Z" fill="#1B729E"/>
<path d="M15.9894 24.2656H15.9069C15.8575 24.3956 15.7887 24.5144 15.7037 24.62L15.9319 24.6238C15.9662 24.515 15.9862 24.4 15.9906 24.2812V24.2663" fill="#1D79A8"/>
<path d="M15.9068 24.2656H15.7224C15.6131 24.4087 15.4737 24.5269 15.3149 24.6138L15.7024 24.62C15.7887 24.5144 15.8574 24.395 15.9068 24.2656Z" fill="#1A6B96"/>
<path d="M15.9894 24.1875C15.9719 24.1881 15.9544 24.1894 15.9369 24.1894C15.9362 24.1894 15.9344 24.1894 15.9331 24.1894C15.925 24.215 15.9162 24.2413 15.9069 24.2656H15.9894V24.1875Z" fill="#1B729F"/>
<path d="M15.9118 24.1894H15.7768C15.7593 24.2156 15.7405 24.2413 15.7224 24.2663H15.9068C15.9162 24.2406 15.9249 24.2156 15.933 24.19C15.9262 24.1894 15.9193 24.1894 15.9118 24.1894Z" fill="#18668F"/>
<path d="M8.94119 24.4794H8.12744C8.14744 24.595 8.20807 24.6969 8.29432 24.7687H14.6612C14.6743 24.7687 14.6874 24.7694 14.7006 24.7694C14.9231 24.7694 15.1331 24.7131 15.3162 24.6131L9.12119 24.5094C9.11869 24.5094 9.11619 24.5094 9.11307 24.5094C9.05244 24.51 8.99494 24.4987 8.94119 24.4794Z" fill="#18668D"/>
<path d="M15.7225 24.2656H15.4063C15.2013 24.4013 14.955 24.4794 14.6919 24.4794C14.6813 24.4794 14.6706 24.4794 14.6606 24.4794H8.94189C8.99564 24.4988 9.05314 24.51 9.11377 24.51C9.11627 24.51 9.11877 24.51 9.12189 24.51L15.3169 24.6138C15.4744 24.5269 15.6131 24.4087 15.7225 24.2656Z" fill="#176187"/>
<path d="M15.7781 24.1894H15.5118C15.4787 24.2163 15.4437 24.2419 15.4075 24.2663H15.7237C15.7418 24.2413 15.7606 24.2156 15.7781 24.1894Z" fill="#165C81"/>
<path d="M8.47811 23.845H8.12686C8.12498 23.845 8.12248 23.845 8.12061 23.845V24.4025C8.12061 24.4288 8.12311 24.4544 8.12748 24.4788H8.94123C8.76686 24.415 8.63811 24.2563 8.61873 24.0632C8.55373 24.005 8.50498 23.9307 8.47811 23.845Z" fill="#15587B"/>
<path d="M8.61804 24.0638C8.63742 24.2569 8.76679 24.415 8.94054 24.4794H14.6593C14.6699 24.4794 14.6805 24.4794 14.6905 24.4794C14.9537 24.4794 15.1993 24.4007 15.4049 24.2657H9.13492C9.13242 24.2657 9.12992 24.2657 9.12804 24.2657C9.02429 24.2657 8.92804 24.2344 8.84742 24.18C8.76179 24.1619 8.68179 24.1207 8.61804 24.0638Z" fill="#145475"/>
<path d="M8.84937 24.1794C8.92937 24.2338 9.02562 24.265 9.12999 24.265C9.13249 24.265 9.13499 24.265 9.13687 24.265H15.4069C15.4431 24.2413 15.4781 24.2156 15.5112 24.1881H8.95374C8.95124 24.1881 8.94874 24.1881 8.94562 24.1881C8.91249 24.1894 8.87999 24.1856 8.84937 24.1794Z" fill="#135272"/>
<path d="M8.47558 23.8375H8.18183C8.16371 23.8413 8.14496 23.8425 8.12683 23.8444H8.47808C8.47746 23.8432 8.47683 23.8406 8.47558 23.8375Z" fill="#134E6D"/>
<path d="M16.5519 23.9675C16.5381 23.9682 16.5231 23.9682 16.5081 23.9682C16.5031 23.9682 16.4988 23.9682 16.4931 23.9682H15.9888V24.1882C16.2006 24.1769 16.3956 24.0982 16.5519 23.9707C16.5519 23.9694 16.5519 23.9682 16.5519 23.9675Z" fill="#1F81B3"/>
<path d="M16.5538 16.94H16.3169V19.8238C16.3969 19.8675 16.4756 19.9113 16.5538 19.9538V16.94Z" fill="#0F325D"/>
<path d="M16.5538 11.1569H16.3169V16.94H16.5538V11.1569Z" fill="#044A84"/>
<path d="M16.3169 10.1788V11.1569H16.5538V10.7975C16.5488 10.5606 16.46 10.345 16.3169 10.1788Z" fill="#00599D"/>
<path d="M16.3169 19.8231V20.9156L16.5538 21.0462V19.9537C16.4756 19.9106 16.3969 19.8669 16.3169 19.8231Z" fill="#0B2754"/>
<path d="M16.3169 20.9156V20.9163L16.5538 21.0463V21.0457L16.3169 20.9156Z" fill="url(#paint6_linear_881_28190)"/>
<path d="M16.3169 20.9163V22.3944C16.3169 22.405 16.3163 22.4156 16.3163 22.4256C16.3069 22.6188 16.2425 22.7963 16.1381 22.9438C16.125 23.1063 16.0713 23.2556 15.9894 23.3856V23.525V23.9688H16.4938C16.4988 23.9688 16.5031 23.9688 16.5088 23.9688C16.5238 23.9688 16.5375 23.9688 16.5525 23.9681C16.5531 23.9531 16.5544 23.9375 16.5544 23.9225V21.0469L16.3169 20.9163Z" fill="#1E7DAE"/>
<path d="M15.9894 23.9681H15.9806C15.9712 24.0444 15.955 24.1181 15.9331 24.1888C15.9337 24.1888 15.9356 24.1888 15.9369 24.1888C15.9544 24.1888 15.9719 24.1881 15.9894 24.1869V23.9681Z" fill="#1A6C97"/>
<path d="M15.9893 23.8594C15.9875 23.8962 15.985 23.9319 15.9806 23.9675H15.9893V23.8594Z" fill="#196993"/>
<path d="M15.9806 23.9681H15.895C15.8637 24.0463 15.8237 24.12 15.7781 24.1888H15.9125C15.9193 24.1888 15.9262 24.1888 15.9337 24.1888C15.955 24.1181 15.9706 24.0438 15.9806 23.9681Z" fill="#176288"/>
<path d="M15.9894 23.5237C15.9844 23.6806 15.9506 23.8306 15.895 23.9675H15.9806C15.985 23.9312 15.9875 23.8956 15.9894 23.8594V23.5237Z" fill="#176085"/>
<path d="M15.8944 23.9681H15.725C15.6625 24.0494 15.5906 24.1244 15.5112 24.1888H15.7775C15.8237 24.12 15.8631 24.0456 15.8944 23.9681Z" fill="#15587B"/>
<path d="M15.9893 23.3844C15.9831 23.3938 15.9762 23.4044 15.97 23.4144C15.9331 23.6207 15.8475 23.8088 15.7256 23.9675H15.895C15.9512 23.83 15.9843 23.6807 15.9893 23.5238V23.3844Z" fill="#15587A"/>
<path d="M8.61626 23.845H8.47876C8.50501 23.93 8.55438 24.0057 8.61876 24.0644C8.61813 24.0532 8.61688 24.0407 8.61626 24.0294V23.845Z" fill="#145475"/>
<path d="M8.63809 23.845H8.61621V24.0282C8.61621 24.0407 8.61684 24.0519 8.61871 24.0632C8.68246 24.1213 8.76184 24.1613 8.84934 24.1788C8.73809 24.1032 8.65871 23.9844 8.63809 23.845Z" fill="#135272"/>
<path d="M9.2037 23.845H8.63745C8.6587 23.9844 8.73745 24.1038 8.8487 24.18C8.87995 24.1863 8.91183 24.1894 8.94495 24.1894C8.94745 24.1894 8.94995 24.1894 8.95308 24.1894H15.5106C15.5906 24.1244 15.6625 24.05 15.7243 23.9688H9.53308C9.40745 23.9682 9.29308 23.9219 9.2037 23.845Z" fill="#134F6E"/>
<path d="M15.97 23.4144C15.7931 23.6706 15.4975 23.8381 15.1644 23.8381C15.1594 23.8381 15.155 23.8381 15.1494 23.8381H14.8319C14.7862 23.8431 14.74 23.845 14.6931 23.845C14.6825 23.845 14.6719 23.845 14.6606 23.845H9.20374C9.29249 23.9219 9.40811 23.9675 9.53436 23.9675H15.7256C15.8475 23.8087 15.9325 23.62 15.97 23.4144Z" fill="#134E6C"/>
<path d="M8.6162 23.8375H8.4762C8.47682 23.84 8.47807 23.8419 8.47807 23.8444H8.61557V23.8375" fill="#124C6A"/>
<path d="M8.63624 23.8375H8.61499V23.8444H8.63687C8.63687 23.8432 8.63687 23.8406 8.63624 23.8375Z" fill="#114A66"/>
<path d="M9.19561 23.8375H8.63623C8.63623 23.84 8.63686 23.8419 8.63686 23.8444H9.20311C9.20061 23.8432 9.19811 23.8406 9.19561 23.8375Z" fill="#114864"/>
<path d="M14.8312 23.8375H9.19556C9.19806 23.84 9.20056 23.8419 9.20368 23.8444H14.6606C14.6712 23.8444 14.6824 23.8444 14.6931 23.8444C14.7387 23.8457 14.7856 23.8431 14.8312 23.8375Z" fill="#114662"/>
<path d="M8.46061 23.7687H8.12061V23.845H8.12686C8.14498 23.8431 8.16373 23.8412 8.18186 23.8381H8.47561C8.46936 23.815 8.46436 23.7919 8.46061 23.7687Z" fill="#114966"/>
<path d="M8.45623 23.6844H8.12061V23.7688H8.46061C8.45811 23.7488 8.45623 23.7281 8.45623 23.7081V23.6844Z" fill="#10445F"/>
<path d="M16.1381 22.9437C16.095 23.005 16.045 23.0612 15.9894 23.1106V23.385C16.0719 23.2556 16.1244 23.105 16.1381 22.9437Z" fill="#1A6F9A"/>
<path d="M15.9893 23.2344C15.9868 23.2956 15.9806 23.3556 15.97 23.4144C15.9768 23.405 15.9831 23.395 15.9893 23.3844V23.2344Z" fill="#135171"/>
<path d="M15.9893 23.11C15.9268 23.165 15.8581 23.2125 15.7831 23.2512C15.5756 23.5731 15.2287 23.7956 14.8312 23.8375H15.1487C15.1537 23.8375 15.1581 23.8375 15.1637 23.8375C15.4968 23.8375 15.7931 23.67 15.9693 23.4137C15.9799 23.355 15.9868 23.2956 15.9887 23.2337V23.1094" fill="#114966"/>
<path d="M8.61618 23.7687H8.46118C8.46493 23.7925 8.46931 23.8162 8.47618 23.8381H8.61618V23.7687Z" fill="#114864"/>
<path d="M8.63184 23.7687H8.61621V23.8381H8.63746C8.63496 23.8206 8.63371 23.8031 8.63309 23.7844V23.7687" fill="#114661"/>
<path d="M9.13184 23.7687H8.63184V23.7844C8.63246 23.8025 8.63371 23.8206 8.63621 23.8381H9.19559C9.17246 23.8169 9.15059 23.7931 9.13184 23.7687Z" fill="#10455F"/>
<path d="M15.7831 23.2513C15.7575 23.2644 15.7325 23.2757 15.7062 23.2863C15.4687 23.5819 15.105 23.7688 14.7 23.7688C14.6868 23.7688 14.6737 23.7688 14.6606 23.7682H9.13184C9.15121 23.7938 9.17246 23.8163 9.19559 23.8375H14.8312C15.2293 23.7957 15.5756 23.5732 15.7831 23.2513Z" fill="#10445F"/>
<path d="M8.61616 23.6844H8.45679V23.7081C8.45679 23.7281 8.45866 23.7488 8.46116 23.7688H8.61616V23.6844Z" fill="#10435D"/>
<path d="M8.63184 23.6844H8.61621V23.7688H8.63184V23.6844Z" fill="#10415B"/>
<path d="M9.07996 23.6844H8.63184V23.7688H9.13184C9.11246 23.7419 9.09496 23.7144 9.07996 23.6844Z" fill="#0F415A"/>
<path d="M15.7062 23.2863C15.6612 23.3044 15.6162 23.3194 15.5687 23.33C15.32 23.5563 14.9962 23.6831 14.6593 23.6844H9.07996C9.09496 23.7144 9.11121 23.7425 9.13183 23.7688H14.6606C14.6737 23.7688 14.6868 23.7694 14.7 23.7694C15.1043 23.7688 15.4687 23.5819 15.7062 23.2863Z" fill="#0F4059"/>
<path d="M16.3169 16.94H16.1412V19.7269C16.2 19.7594 16.2587 19.7919 16.3169 19.8231V16.94Z" fill="#0C2B4D"/>
<path d="M16.3168 11.1569H16.1418V16.94H16.3168V11.1569Z" fill="#043E6E"/>
<path d="M16.1362 10.0137C16.1387 10.0425 16.1412 10.0725 16.1412 10.1025V11.1569H16.3169V10.1787C16.2637 10.1162 16.2031 10.0612 16.1362 10.0137Z" fill="#004A83"/>
<path d="M16.1418 19.7269V20.8181L16.3175 20.9144V19.8219C16.2593 19.7919 16.2006 19.7594 16.1418 19.7269Z" fill="#092147"/>
<path d="M16.1418 20.8194L16.3168 20.9163V20.9156L16.1418 20.8194Z" fill="url(#paint7_linear_881_28190)"/>
<path d="M16.1418 20.8194V22.875C16.1418 22.8975 16.1399 22.9206 16.1381 22.9425C16.2418 22.795 16.3062 22.6181 16.3162 22.4244C16.3162 22.4138 16.3168 22.4031 16.3168 22.3931V20.915L16.1418 20.8194Z" fill="#196891"/>
<path d="M16.1419 16.94H15.9894V19.6438C16.04 19.6719 16.0913 19.7 16.1419 19.7269V16.94Z" fill="#0B2646"/>
<path d="M16.1419 11.1569H15.9894V16.94H16.1419V11.1569Z" fill="#033864"/>
<path d="M15.988 9.92749C15.988 9.93437 15.9887 9.94124 15.9887 9.94874V10.2475V10.5369V11.1569H16.1412V10.1025C16.1405 10.0725 16.1387 10.0431 16.1362 10.0137C16.0899 9.98124 16.0399 9.95249 15.988 9.92749Z" fill="#004377"/>
<path d="M15.9894 19.6437V20.735L16.1419 20.8181V19.7269C16.0906 19.6987 16.04 19.6719 15.9894 19.6437Z" fill="#081E40"/>
<path d="M15.9894 20.735V20.7356L16.1419 20.8194L15.9894 20.735Z" fill="url(#paint8_linear_881_28190)"/>
<path d="M15.9894 20.7357V23.11C16.0456 23.06 16.0956 23.005 16.1381 22.9432C16.14 22.9207 16.1406 22.8982 16.1419 22.8757V20.82L15.9894 20.7357Z" fill="#165E83"/>
<path d="M15.988 9.92749V10.2275C15.988 10.2337 15.9887 10.2406 15.9887 10.2469V9.94812C15.9893 9.94187 15.988 9.93499 15.988 9.92749Z" fill="#00355E"/>
<path d="M15.988 10.2275V10.5169C15.988 10.5231 15.9887 10.53 15.9887 10.5362V10.2469C15.9893 10.2406 15.988 10.2344 15.988 10.2275Z" fill="#003156"/>
<path d="M15.9893 22.6C15.98 22.84 15.905 23.0631 15.7831 23.2512C15.8575 23.2125 15.9268 23.1656 15.9893 23.11V22.6Z" fill="#10445F"/>
<path d="M15.9893 22.5237C15.9799 22.8131 15.8743 23.0769 15.7062 23.2862C15.7324 23.2756 15.7581 23.2637 15.7831 23.2512C15.9049 23.0625 15.9793 22.84 15.9893 22.6V22.5237Z" fill="#0F4059"/>
<path d="M15.988 10.5181V10.8581C15.988 10.8631 15.9887 10.8694 15.9887 10.875V11.1575V10.5375C15.9893 10.5313 15.988 10.5238 15.988 10.5181Z" fill="#002F53"/>
<path d="M15.9894 11.1569H15.9888V11.2744C15.9888 11.2806 15.9894 11.2875 15.9894 11.2937V11.1569Z" fill="#022644"/>
<path d="M15.988 10.8582V11.1569H15.9887V10.8744C15.9893 10.8688 15.988 10.8632 15.988 10.8582Z" fill="#002E51"/>
<path d="M15.988 11.2744V11.7406C15.988 11.7469 15.9887 11.7537 15.9887 11.76V16.9394V11.2937C15.9893 11.2875 15.988 11.2806 15.988 11.2744Z" fill="#022542"/>
<path d="M15.9893 16.94H15.988V19.6425L15.9893 19.6438V16.94Z" fill="#07192E"/>
<path d="M15.988 11.74V16.94H15.9887V11.7606C15.9893 11.7531 15.988 11.7469 15.988 11.74Z" fill="#022441"/>
<path d="M15.988 19.6425V20.735H15.9893V19.6438L15.988 19.6425Z" fill="#05132A"/>
<path d="M15.988 20.735L15.9893 20.7356V20.735H15.988Z" fill="url(#paint9_linear_881_28190)"/>
<path d="M15.9881 20.735V22.4006C15.9881 22.7419 15.8469 23.0687 15.5987 23.3019C15.5894 23.3112 15.5787 23.3212 15.5681 23.33C15.6156 23.3187 15.6612 23.3037 15.7056 23.2862C15.8737 23.0769 15.9794 22.8131 15.9887 22.5237V20.7362L15.9881 20.735Z" fill="#0F3D56"/>
<path d="M10.0225 7.83313H9.9906V8.26875V8.07H10.0225V7.83313Z" fill="#EEEEEE"/>
<path d="M14.9725 7.83313C14.9675 7.83313 14.9631 7.83313 14.9575 7.83313H10.0225V8.07H14.9575L14.9731 8.06938C14.9781 8.06938 14.9825 8.06938 14.9881 8.06938C15.2106 8.06938 15.4168 8.14375 15.5825 8.26938H15.7912C15.6131 8.00625 15.3125 7.83313 14.9725 7.83313Z" fill="#0070C6"/>
<path d="M15.7913 8.26874H15.5825C15.5956 8.27811 15.6081 8.28874 15.62 8.29936H15.81C15.8044 8.28936 15.7981 8.27874 15.7913 8.26874Z" fill="#006BBE"/>
<path d="M15.8106 8.29999H15.6206C15.7462 8.40499 15.8462 8.54186 15.9062 8.69686H15.9519C15.9331 8.55249 15.8837 8.41749 15.8106 8.29999Z" fill="#0065B2"/>
<path d="M15.9513 8.6969H15.9056C15.9294 8.75752 15.9469 8.82065 15.9581 8.88627V8.79502C15.9575 8.76252 15.9556 8.7294 15.9513 8.6969Z" fill="#005EA7"/>
<path d="M15.9587 8.88623V9.13936C15.9631 9.13936 15.9681 9.13936 15.9725 9.13998V9.03936C15.9725 8.98811 15.9675 8.93623 15.9587 8.88623Z" fill="#005BA2"/>
<path d="M15.9587 9.14063V9.2075C15.9631 9.21125 15.9681 9.21375 15.9725 9.21688V9.14125C15.9681 9.14062 15.9637 9.14063 15.9587 9.14063Z" fill="#005698"/>
<path d="M15.9587 9.20624V9.29749C15.9637 9.32311 15.9694 9.34811 15.9725 9.37436V9.21561C15.9681 9.21249 15.9637 9.20999 15.9587 9.20624Z" fill="#00487F"/>
<path d="M10.0225 8.07001H9.9906V8.26876H10.0225V8.07001Z" fill="#D7D7D7"/>
<path d="M14.9881 8.0694C14.9831 8.0694 14.9787 8.0694 14.9731 8.0694L14.9575 8.07002H10.0225V8.26877H14.6593C14.6675 8.26877 14.6762 8.26877 14.6837 8.26877C14.6918 8.26877 14.6993 8.26877 14.7081 8.26877H15.5831C15.4168 8.14377 15.2106 8.0694 14.9881 8.0694Z" fill="#0065B3"/>
<path d="M15.5825 8.26874H14.7075C14.795 8.27061 14.8813 8.28124 14.9644 8.29936H15.62C15.6081 8.28936 15.5956 8.27874 15.5825 8.26874Z" fill="#0061AC"/>
<path d="M15.62 8.29999H14.9644C15.2325 8.35874 15.47 8.50061 15.6494 8.69686H15.9062C15.8456 8.54061 15.7462 8.40499 15.62 8.29999Z" fill="#005BA1"/>
<path d="M15.9062 8.6969H15.6493C15.7649 8.82377 15.8555 8.97377 15.9143 9.1394C15.9193 9.1394 15.9237 9.1394 15.9293 9.1394C15.9387 9.1394 15.9493 9.1394 15.9593 9.14003V8.8869C15.9468 8.82065 15.9293 8.75752 15.9062 8.6969Z" fill="#005698"/>
<path d="M15.9293 9.13936C15.9243 9.13936 15.9199 9.13936 15.9143 9.13936C15.9193 9.15498 15.9249 9.17061 15.9299 9.18748C15.9393 9.19373 15.9493 9.19998 15.9587 9.20561V9.13873C15.9487 9.13936 15.9393 9.13936 15.9293 9.13936Z" fill="#005290"/>
<path d="M15.9305 9.18811C15.9418 9.22436 15.9518 9.26061 15.9593 9.29749V9.20624C15.9499 9.19999 15.9399 9.19374 15.9305 9.18811Z" fill="#004579"/>
<path d="M1.33685 8.26878H14.6593C15.3806 8.25565 15.9762 8.83065 15.9887 9.55253V22.4007C15.9887 22.7419 15.8475 23.0688 15.5993 23.3019C15.3468 23.5456 15.01 23.6832 14.6606 23.6844H1.33685C0.986221 23.685 0.647471 23.5488 0.398096 23.3019C0.148096 23.0688 0.0037207 22.7425 0.0012207 22.4007V9.55253C0.0174707 8.8294 0.614346 8.25565 1.33685 8.26878Z" fill="#0078D4"/>
<path d="M3.83429 13.5694C4.19616 12.8256 4.77491 12.2088 5.49241 11.7969C6.30366 11.3631 7.21616 11.1525 8.13554 11.1856C8.99054 11.1675 9.83491 11.3788 10.5799 11.7969C11.2705 12.1881 11.8337 12.7725 12.1993 13.4775C12.5862 14.2488 12.7805 15.1038 12.7637 15.9675C12.7793 16.8706 12.578 17.765 12.1755 18.5725C11.8074 19.3088 11.2268 19.9181 10.5099 20.3225C8.93179 21.1413 7.05304 21.1413 5.47491 20.3225C4.77991 19.9238 4.21241 19.3356 3.84054 18.6263C3.45054 17.865 3.25304 17.0213 3.26741 16.1663C3.25241 15.2738 3.44616 14.3894 3.83179 13.5844L3.83429 13.5694ZM5.62179 17.7263C5.81366 18.195 6.13741 18.5988 6.55366 18.8881C6.98304 19.1813 7.49429 19.33 8.01241 19.3163C8.55491 19.3344 9.08929 19.1819 9.53991 18.8806C9.95366 18.5913 10.2693 18.1838 10.4493 17.7119C10.648 17.1919 10.7455 16.6406 10.7393 16.085C10.7474 15.5231 10.6537 14.9638 10.4643 14.435C10.2987 13.9556 9.99616 13.5363 9.59366 13.2288C9.14804 12.9131 8.61179 12.7519 8.06616 12.7713C7.53741 12.7563 7.01679 12.9056 6.57679 13.1994C6.15429 13.4913 5.82304 13.8956 5.62179 14.3681C5.19054 15.4431 5.19054 16.6469 5.62179 17.7263Z" fill="white"/>
<path d="M8.06746 12.7694C8.09621 12.7687 8.12558 12.7675 8.15433 12.7675C8.66996 12.7675 9.17308 12.9281 9.59496 13.2269C9.99746 13.5344 10.3 13.9544 10.4656 14.4331C10.6481 14.9406 10.7418 15.4775 10.7418 16.0162C10.7418 16.0381 10.7418 16.06 10.7412 16.0819C10.7412 16.0969 10.7412 16.1125 10.7412 16.1275C10.7412 16.6675 10.6437 17.2044 10.45 17.7094C10.27 18.18 9.95433 18.5881 9.54058 18.8781C9.11371 19.1637 8.61308 19.3156 8.09996 19.3156C8.07121 19.3156 8.04183 19.315 8.01308 19.3137C7.99058 19.3144 7.96808 19.3144 7.94558 19.3144C7.44996 19.3144 6.96558 19.1656 6.55433 18.8856C6.13808 18.5969 5.81371 18.1937 5.62246 17.7237C5.40683 17.1844 5.29871 16.6137 5.29871 16.0431C5.29871 15.4725 5.40746 14.9019 5.62308 14.3625C5.82371 13.89 6.15433 13.4856 6.57808 13.1937C6.99808 12.9144 7.49058 12.765 7.99371 12.765C8.01808 12.7675 8.04246 12.7681 8.06746 12.7694ZM7.94683 11.1825C7.09121 11.1825 6.24746 11.3931 5.49183 11.7969C4.77496 12.2087 4.19621 12.8262 3.83371 13.5694L3.83308 13.5844C3.46121 14.3594 3.26746 15.2081 3.26746 16.0675C3.26746 16.1006 3.26746 16.1344 3.26808 16.1669C3.26746 16.195 3.26746 16.2237 3.26746 16.2519C3.26746 17.0775 3.46371 17.8912 3.84058 18.6269C4.21308 19.3362 4.77933 19.9244 5.47496 20.3231C6.26371 20.7325 7.12871 20.9375 7.99183 20.9375C8.85496 20.9375 9.71996 20.7325 10.5087 20.3231C11.2256 19.92 11.8062 19.3106 12.1743 18.5731C12.5618 17.7944 12.7637 16.9369 12.7637 16.0681C12.7637 16.035 12.7637 16.0012 12.7631 15.9675C12.7637 15.9344 12.7637 15.9 12.7637 15.8669C12.7637 15.0375 12.5693 14.2194 12.1975 13.4781C11.8318 12.7731 11.2693 12.1887 10.5781 11.7975C9.86183 11.395 9.05496 11.1844 8.23558 11.1844C8.20121 11.1844 8.16808 11.1844 8.13371 11.185C8.07246 11.1831 8.00996 11.1825 7.94683 11.1825Z" fill="white"/>
<path d="M3.83429 13.5694C4.19616 12.8256 4.77491 12.2088 5.49241 11.7969C6.30366 11.3631 7.21616 11.1525 8.13554 11.1856C8.99054 11.1675 9.83491 11.3788 10.5799 11.7969C11.2705 12.1881 11.8337 12.7725 12.1993 13.4775C12.5862 14.2488 12.7805 15.1038 12.7637 15.9675C12.7793 16.8706 12.578 17.765 12.1755 18.5725C11.8074 19.3088 11.2268 19.9181 10.5099 20.3225C8.93179 21.1413 7.05304 21.1413 5.47491 20.3225C4.77991 19.9238 4.21241 19.3356 3.84054 18.6263C3.45054 17.865 3.25304 17.0213 3.26741 16.1663C3.25241 15.2738 3.44616 14.3894 3.83179 13.5844L3.83429 13.5694ZM5.62179 17.7263C5.81366 18.195 6.13741 18.5988 6.55366 18.8881C6.98304 19.1813 7.49429 19.33 8.01241 19.3163C8.55491 19.3344 9.08929 19.1819 9.53991 18.8806C9.95366 18.5913 10.2693 18.1838 10.4493 17.7119C10.648 17.1919 10.7455 16.6406 10.7393 16.085C10.7474 15.5231 10.6537 14.9638 10.4643 14.435C10.2987 13.9556 9.99616 13.5363 9.59366 13.2288C9.14804 12.9131 8.61179 12.7519 8.06616 12.7713C7.53741 12.7563 7.01679 12.9056 6.57679 13.1994C6.15429 13.4913 5.82304 13.8956 5.62179 14.3681C5.19054 15.4431 5.19054 16.6469 5.62179 17.7263Z" fill="url(#paint10_linear_881_28190)"/>
<path d="M3.83429 13.5694C4.19616 12.8256 4.77491 12.2088 5.49241 11.7969C6.30366 11.3631 7.21616 11.1525 8.13554 11.1856C8.99054 11.1675 9.83491 11.3788 10.5799 11.7969C11.2705 12.1881 11.8337 12.7725 12.1993 13.4775C12.5862 14.2488 12.7805 15.1038 12.7637 15.9675C12.7793 16.8706 12.578 17.765 12.1755 18.5725C11.8074 19.3088 11.2268 19.9181 10.5099 20.3225C8.93179 21.1413 7.05304 21.1413 5.47491 20.3225C4.77991 19.9238 4.21241 19.3356 3.84054 18.6263C3.45054 17.865 3.25304 17.0213 3.26741 16.1663C3.25241 15.2738 3.44616 14.3894 3.83179 13.5844L3.83429 13.5694ZM5.62179 17.7263C5.81366 18.195 6.13741 18.5988 6.55366 18.8881C6.98304 19.1813 7.49429 19.33 8.01241 19.3163C8.55491 19.3344 9.08929 19.1819 9.53991 18.8806C9.95366 18.5913 10.2693 18.1838 10.4493 17.7119C10.648 17.1919 10.7455 16.6406 10.7393 16.085C10.7474 15.5231 10.6537 14.9638 10.4643 14.435C10.2987 13.9556 9.99616 13.5363 9.59366 13.2288C9.14804 12.9131 8.61179 12.7519 8.06616 12.7713C7.53741 12.7563 7.01679 12.9056 6.57679 13.1994C6.15429 13.4913 5.82304 13.8956 5.62179 14.3681C5.19054 15.4431 5.19054 16.6469 5.62179 17.7263Z" fill="url(#paint11_linear_881_28190)"/>
</g>
<defs>
<linearGradient id="paint0_linear_881_28190" x1="31.6856" y1="22.5783" x2="21.5863" y2="34.1488" gradientUnits="userSpaceOnUse">
<stop stop-color="#35B8F1"/>
<stop offset="0.75" stop-color="#0D64AD"/>
<stop offset="1" stop-color="#0D64AD"/>
</linearGradient>
<linearGradient id="paint1_linear_881_28190" x1="27.5733" y1="18.9888" x2="17.4739" y2="30.5593" gradientUnits="userSpaceOnUse">
<stop stop-color="#1F6FAC"/>
<stop offset="0.75" stop-color="#0B458A"/>
<stop offset="1" stop-color="#0B458A"/>
</linearGradient>
<linearGradient id="paint2_linear_881_28190" x1="26.5469" y1="18.093" x2="16.4475" y2="29.6634" gradientUnits="userSpaceOnUse">
<stop stop-color="#1E6BA6"/>
<stop offset="0.75" stop-color="#0B4385"/>
<stop offset="1" stop-color="#0B4385"/>
</linearGradient>
<linearGradient id="paint3_linear_881_28190" x1="26.389" y1="17.9563" x2="22.4751" y2="22.4334" gradientUnits="userSpaceOnUse">
<stop stop-color="#1C649B"/>
<stop offset="0.75" stop-color="#0A3E7D"/>
<stop offset="1" stop-color="#0A3E7D"/>
</linearGradient>
<linearGradient id="paint4_linear_881_28190" x1="26.3323" y1="17.9055" x2="16.233" y2="29.4761" gradientUnits="userSpaceOnUse">
<stop stop-color="#1A5E91"/>
<stop offset="0.75" stop-color="#093A75"/>
<stop offset="1" stop-color="#093A75"/>
</linearGradient>
<linearGradient id="paint5_linear_881_28190" x1="26.1379" y1="17.736" x2="16.0385" y2="29.3064" gradientUnits="userSpaceOnUse">
<stop stop-color="#185788"/>
<stop offset="0.75" stop-color="#09366D"/>
<stop offset="1" stop-color="#09366D"/>
</linearGradient>
<linearGradient id="paint6_linear_881_28190" x1="25.9178" y1="17.5439" x2="15.8185" y2="29.1143" gradientUnits="userSpaceOnUse">
<stop stop-color="#17527F"/>
<stop offset="0.75" stop-color="#083366"/>
<stop offset="1" stop-color="#083366"/>
</linearGradient>
<linearGradient id="paint7_linear_881_28190" x1="25.7658" y1="17.411" x2="15.6663" y2="28.9816" gradientUnits="userSpaceOnUse">
<stop stop-color="#13456B"/>
<stop offset="0.75" stop-color="#072B56"/>
<stop offset="1" stop-color="#072B56"/>
</linearGradient>
<linearGradient id="paint8_linear_881_28190" x1="25.6445" y1="17.3053" x2="15.5453" y2="28.8757" gradientUnits="userSpaceOnUse">
<stop stop-color="#113E60"/>
<stop offset="0.75" stop-color="#06274D"/>
<stop offset="1" stop-color="#06274D"/>
</linearGradient>
<linearGradient id="paint9_linear_881_28190" x1="18.8226" y1="19.7105" x2="15.3633" y2="23.6828" gradientUnits="userSpaceOnUse">
<stop stop-color="#0B283F"/>
<stop offset="0.75" stop-color="#041932"/>
<stop offset="1" stop-color="#041932"/>
</linearGradient>
<linearGradient id="paint10_linear_881_28190" x1="8.01577" y1="12.7522" x2="8.01577" y2="22.5296" gradientUnits="userSpaceOnUse">
<stop stop-color="#F2F2F2"/>
<stop offset="1" stop-color="white"/>
</linearGradient>
<linearGradient id="paint11_linear_881_28190" x1="8.01577" y1="12.7522" x2="8.01577" y2="22.5296" gradientUnits="userSpaceOnUse">
<stop stop-color="#F2F2F2"/>
<stop offset="1" stop-color="white"/>
</linearGradient>
<clipPath id="clip0_881_28190">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 38 KiB

11
packages/nc-gui/assets/nc-icons/miro.svg

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_881_28372)">
<path d="M0 0H32V32H0V0Z" fill="#FFD02F"/>
<path d="M21.8054 4.26666H18.3894L21.422 8.96666L15.0107 4.26666H11.5947L14.6274 10.4253L8.21605 4.26666H4.80005L7.78272 12.2173L4.80005 27.7333H8.21605L14.6274 11.0967L11.5947 27.7333H15.0107L21.422 9.63866L18.3894 27.7333H21.8054L28.2667 7.85666L21.8054 4.26666Z" fill="#050038"/>
</g>
<defs>
<clipPath id="clip0_881_28372">
<rect width="32" height="32" rx="4" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 611 B

10
packages/nc-gui/assets/nc-icons/mssql-server.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 17 KiB

16
packages/nc-gui/assets/nc-icons/multi-file.svg

@ -1,8 +1,8 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.25 3H5.25C4.91848 3 4.60054 3.12643 4.36612 3.35147C4.1317 3.57652 4 3.88174 4 4.2V13.8C4 14.1183 4.1317 14.4235 4.36612 14.6485C4.60054 14.8736 4.91848 15 5.25 15H12.75C13.0815 15 13.3995 14.8736 13.6339 14.6485C13.8683 14.4235 14 14.1183 14 13.8V6.6L10.25 3Z" stroke="#FC3AC6" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M4 13H3.25C2.91848 13 2.60054 12.8736 2.36612 12.6485C2.1317 12.4235 2 12.1183 2 11.8V2.2C2 1.88174 2.1317 1.57652 2.36612 1.35147C2.60054 1.12643 2.91848 1 3.25 1H8.25L10.5 3" stroke="#FC3AC6" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M11.6666 11.3333H6.33325" stroke="#FC3AC6" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M11.6666 8.66669H6.33325" stroke="#FC3AC6" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M7.66659 6H6.99992H6.33325" stroke="#FC3AC6" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M10.3333 3.33331V7H13.4999" stroke="#FC3AC6" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<path d="M10.25 3H5.25C4.91848 3 4.60054 3.12643 4.36612 3.35147C4.1317 3.57652 4 3.88174 4 4.2V13.8C4 14.1183 4.1317 14.4235 4.36612 14.6485C4.60054 14.8736 4.91848 15 5.25 15H12.75C13.0815 15 13.3995 14.8736 13.6339 14.6485C13.8683 14.4235 14 14.1183 14 13.8V6.6L10.25 3Z" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M4 13H3.25C2.91848 13 2.60054 12.8736 2.36612 12.6485C2.1317 12.4235 2 12.1183 2 11.8V2.2C2 1.88174 2.1317 1.57652 2.36612 1.35147C2.60054 1.12643 2.91848 1 3.25 1H8.25L10.5 3" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M11.6663 11.333H6.33301" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M11.6663 8.66699H6.33301" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M7.66634 6H6.99967H6.33301" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M10.333 3.33301V6.99969H13.4997" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

7
packages/nc-gui/assets/nc-icons/ollama.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.4 KiB

10
packages/nc-gui/assets/nc-icons/openai.svg

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_926_22151)">
<path d="M29.688 13.0711C30.4105 10.8953 30.1604 8.51365 29.0017 6.53537C27.2594 3.50262 23.7577 1.9426 20.3378 2.67563C18.4105 0.531872 15.4863 -0.421414 12.6659 0.174614C9.84546 0.770642 7.55695 2.82551 6.66181 5.56571C4.41537 6.0264 2.47648 7.43295 1.34129 9.42545C-0.419968 12.4533 -0.0202085 16.2726 2.32984 18.8702C1.6046 21.045 1.85243 23.427 3.00986 25.4059C4.75431 28.4397 8.25837 29.9996 11.6801 29.2656C13.2021 30.9795 15.3886 31.9546 17.6806 31.9418C21.186 31.9449 24.2916 29.6819 25.3623 26.3441C27.6084 25.8826 29.547 24.4763 30.6829 22.4843C32.4229 19.4618 32.0214 15.6631 29.688 13.0711ZM17.6806 29.8512C16.2815 29.8534 14.9262 29.363 13.8524 28.466L14.0413 28.359L20.4007 24.6881C20.7227 24.4993 20.9213 24.1547 20.9233 23.7814V14.8152L23.6119 16.3705C23.6388 16.3842 23.6575 16.4099 23.6623 16.4397V23.8696C23.6554 27.1703 20.9813 29.8443 17.6806 29.8512ZM4.82324 24.3607C4.12157 23.1491 3.86963 21.7289 4.11174 20.3498L4.30063 20.4632L10.6664 24.134C10.9871 24.3222 11.3846 24.3222 11.7053 24.134L19.4814 19.6509V22.7551C19.48 22.7877 19.4638 22.8178 19.4374 22.8369L12.9961 26.5519C10.1338 28.2008 6.47677 27.2204 4.82324 24.3607ZM3.14838 10.5084C3.85492 9.28902 4.97015 8.35892 6.29662 7.88282V15.4386C6.29174 15.8104 6.48957 16.1554 6.81293 16.339L14.5513 20.8032L11.8627 22.3584C11.8332 22.3741 11.7978 22.3741 11.7683 22.3584L5.33955 18.6498C2.48285 16.994 1.50314 13.3398 3.14838 10.477V10.5084ZM25.2364 15.6401L17.4729 11.1318L20.1552 9.58286C20.1847 9.56719 20.2201 9.56719 20.2496 9.58286L26.6783 13.2978C28.6847 14.4556 29.8423 16.6678 29.6496 18.9763C29.4569 21.2848 27.9485 23.2745 25.7779 24.0836V16.5279C25.7666 16.1572 25.5609 15.8198 25.2364 15.6401ZM27.9124 11.6166L27.7235 11.5033L21.3704 7.80096C21.0477 7.61162 20.6478 7.61162 20.3252 7.80096L12.5553 12.2841V9.17989C12.5519 9.14774 12.5664 9.11633 12.5931 9.09804L19.0218 5.38941C21.0331 4.23069 23.533 4.33882 25.4368 5.66689C27.3406 6.99496 28.3053 9.30368 27.9124 11.5914V11.6166ZM11.0882 17.1197L8.39964 15.5708C8.37247 15.5543 8.35401 15.5267 8.34927 15.4953V8.0843C8.35233 5.76351 9.69616 3.65349 11.7979 2.66933C13.8997 1.68517 16.3809 2.00413 18.1655 3.48788L17.9766 3.59492L11.6171 7.26576C11.2952 7.45462 11.0966 7.79919 11.0945 8.17245L11.0882 17.1197ZM12.549 13.9715L16.0121 11.9755L19.4814 13.9715V17.9635L16.0247 19.9595L12.5553 17.9635L12.549 13.9715Z" fill="black"/>
</g>
<defs>
<clipPath id="clip0_926_22151">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

10
packages/nc-gui/assets/nc-icons/oracle.svg

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="6" viewBox="0 0 32 6" fill="none">
<g clip-path="url(#clip0_858_13918)">
<path d="M13.3023 3.31593H15.2834L14.2359 1.63063L12.3133 4.67774H11.4383L13.7768 1.01751C13.8785 0.86962 14.0479 0.780273 14.2359 0.780273C14.4177 0.780273 14.5871 0.86654 14.6857 1.01135L17.0334 4.67774H16.1584L15.7456 3.99683H13.7398L13.3023 3.31593ZM22.3913 3.99683V0.817247H21.6488V4.30802C21.6488 4.40353 21.6857 4.49596 21.7566 4.56682C21.8275 4.63768 21.923 4.67774 22.0277 4.67774H25.4137L25.8512 3.99683H22.3913ZM10.1073 3.42685C10.8283 3.42685 11.4137 2.84454 11.4137 2.12359C11.4137 1.40264 10.8283 0.817247 10.1074 0.817247H6.85904V4.67774H7.60127V1.49814H10.0581C10.4031 1.49814 10.6804 1.77851 10.6804 2.12359C10.6804 2.46866 10.4031 2.74903 10.0581 2.74903L7.96483 2.74595L10.1813 4.67773H11.2596L9.76845 3.42685L10.1073 3.42685ZM2.28995 4.67774C1.22421 4.67774 0.359375 3.81505 0.359375 2.74903C0.359375 1.68301 1.22422 0.817247 2.28994 0.817247H4.53382C5.59984 0.817247 6.46407 1.68301 6.46407 2.74903C6.46407 3.81506 5.59984 4.67774 4.53382 4.67774H2.28995ZM4.48391 3.99683C5.17438 3.99683 5.73358 3.43917 5.73358 2.74903C5.73358 2.05889 5.17438 1.49814 4.48391 1.49814H2.33954C1.6494 1.49814 1.08987 2.05889 1.08987 2.74903C1.08987 3.43917 1.6494 3.99683 2.33954 3.99683H4.48391ZM18.5832 4.67774C17.5171 4.67774 16.6514 3.81506 16.6514 2.74903C16.6514 1.68301 17.5171 0.817247 18.5832 0.817247H21.2482L20.8138 1.49814H18.6325C17.9423 1.49814 17.3816 2.05889 17.3816 2.74903C17.3816 3.43917 17.9423 3.99683 18.6325 3.99683H21.3098L20.8724 4.67774H18.5832ZM27.6629 3.99683C27.0929 3.99683 26.6092 3.61479 26.4613 3.08794H29.6347L30.0722 2.40704H26.4613C26.6092 1.88327 27.0929 1.49814 27.6629 1.49814H29.8411L30.2817 0.817247H27.6136C26.5475 0.817247 25.6818 1.68301 25.6818 2.74903C25.6818 3.81506 26.5475 4.67774 27.6136 4.67774H29.9028L30.3403 3.99683H27.6629ZM30.6792 1.22702C30.679 1.18248 30.6877 1.13835 30.7047 1.09717C30.7217 1.05599 30.7466 1.01858 30.7781 0.987085C30.8096 0.955588 30.8471 0.930629 30.8882 0.913643C30.9294 0.896657 30.9735 0.887979 31.0181 0.888109C31.2091 0.888109 31.3601 1.03908 31.3601 1.22702C31.3601 1.41804 31.2091 1.56901 31.0181 1.56901C30.8301 1.56901 30.6792 1.41804 30.6792 1.22702ZM31.0181 1.66452C31.2584 1.66452 31.4525 1.47042 31.4525 1.2301C31.4525 0.98978 31.2584 0.795678 31.0181 0.795678C30.7808 0.795678 30.5867 0.98978 30.5867 1.2301C30.5867 1.47042 30.7808 1.66452 31.0181 1.66452ZM30.978 0.971296C31.0458 0.971296 31.0735 0.974376 31.1044 0.986695C31.1906 1.01443 31.1998 1.09145 31.1998 1.12226C31.1998 1.12842 31.1998 1.14383 31.1937 1.16231C31.1906 1.1808 31.1783 1.21777 31.1352 1.2455C31.129 1.24858 31.1259 1.25166 31.1136 1.25783L31.2245 1.45809H31.1167L31.0181 1.27323H30.9503V1.45809H30.8548V0.971296H30.978ZM31.0119 1.19313C31.0427 1.19005 31.0735 1.19005 31.092 1.16231C31.1012 1.14999 31.1044 1.13767 31.1044 1.11918C31.1044 1.09454 31.0889 1.07297 31.0674 1.06064C31.0458 1.0514 31.0242 1.0514 30.978 1.0514H30.9503V1.19313H31.0119Z" fill="#F80000"/>
</g>
<defs>
<clipPath id="clip0_858_13918">
<rect width="32" height="5.05263" fill="white" transform="translate(0 0.473633)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

3
packages/nc-gui/assets/nc-icons/pipedrive.svg

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="26" height="32" viewBox="0 0 26 32" fill="none">
<path d="M15.4838 0C11.9283 0 9.85422 1.59544 8.87416 2.71225C8.7602 1.75499 8.12202 0.524216 5.68328 0.524216H0.327148V6.08547H2.51518C2.87986 6.08547 2.99382 6.19943 2.99382 6.5641V32H9.33V22.4501C9.33 22.1994 9.33 21.9487 9.30721 21.7436C10.2873 22.6553 12.179 23.9088 15.142 23.9088C21.3414 23.9088 25.6719 18.9858 25.6719 11.9658C25.7175 4.80912 21.5921 0 15.4838 0ZM14.1847 18.3704C10.7659 18.3704 9.21604 15.1111 9.21604 12.0798C9.21604 7.31624 11.8143 5.60684 14.2759 5.60684C17.2616 5.60684 19.2901 8.18234 19.2901 12.0342C19.2673 16.433 16.7146 18.3704 14.1847 18.3704Z" fill="#027737"/>
</svg>

After

Width:  |  Height:  |  Size: 702 B

5
packages/nc-gui/assets/nc-icons/play.svg

@ -0,0 +1,5 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="play">
<path id="Vector" d="M3.33331 2L12.6666 8L3.33331 14V2Z" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 273 B

15
packages/nc-gui/assets/nc-icons/postgresql.svg

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

11
packages/nc-gui/assets/nc-icons/quickbooks.svg

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_858_14700)">
<path d="M16 32C24.8366 32 32 24.8366 32 16C32 7.16344 24.8366 0 16 0C7.16344 0 0 7.16344 0 16C0 24.8366 7.16344 32 16 32Z" fill="#2CA01C"/>
<path d="M3.85701 15.9951C3.85829 19.6124 6.77541 22.5539 10.3927 22.5859H11.3181V20.1679H10.3927C8.15013 20.7798 5.83717 19.4576 5.22661 17.215C5.22149 17.1971 5.21765 17.1791 5.21253 17.1612C4.58405 14.8892 5.89989 12.5353 8.16421 11.8812H8.62629C9.20613 11.7545 9.80645 11.7545 10.3863 11.8812H12.634V24.7183C12.6225 26.0764 13.7143 27.1875 15.0724 27.2003V9.33915H10.4068C6.76389 9.35835 3.82757 12.3267 3.84677 15.9695V15.9708L3.85701 15.9951ZM21.617 9.34171H20.6916V11.8876H21.617C23.8545 11.2771 26.1623 12.5955 26.7729 14.8316C26.778 14.8483 26.7818 14.8662 26.7869 14.8828C27.4116 17.1471 26.0996 19.4921 23.8442 20.1449H23.3821C22.8023 20.2716 22.202 20.2716 21.6221 20.1449H19.3745V7.30907C19.386 5.95099 18.2941 4.83995 16.9361 4.82715V22.7139H21.6017C25.2765 22.6563 28.209 19.6316 28.1527 15.9567C28.0964 12.3625 25.1972 9.46203 21.6017 9.40571L21.617 9.34171Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_858_14700">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

20
packages/nc-gui/assets/nc-icons/salesforce.svg

@ -0,0 +1,20 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="24" viewBox="0 0 32 24" fill="none">
<g clip-path="url(#clip0_881_28380)">
<path d="M13.3191 3.20641C14.3501 2.13216 15.7855 1.46593 17.373 1.46593C19.4832 1.46593 21.3243 2.64265 22.3048 4.3895C23.1568 4.0088 24.0999 3.79705 25.0922 3.79705C28.8983 3.79705 31.984 6.9096 31.984 10.7489C31.984 14.5888 28.8983 17.7013 25.0922 17.7013C24.6277 17.7013 24.1737 17.6549 23.7347 17.5661C22.8713 19.1062 21.226 20.1467 19.3375 20.1467C18.547 20.1467 17.7992 19.9641 17.1334 19.6394C16.2582 21.6982 14.219 23.1418 11.8423 23.1418C9.36731 23.1418 7.25797 21.5757 6.4483 19.3794C6.09447 19.4545 5.72788 19.4937 5.35173 19.4937C2.40494 19.4937 0.0159912 17.0802 0.0159912 14.1024C0.0159912 12.1069 1.08933 10.3646 2.68409 9.43243C2.35576 8.67695 2.17315 7.84314 2.17315 6.96652C2.17315 3.54203 4.95327 0.766006 8.38232 0.766006C10.3956 0.766006 12.1848 1.72322 13.3191 3.20641Z" fill="#00A1E0"/>
<path d="M4.64626 12.3695C4.62623 12.4219 4.65355 12.4328 4.65992 12.4419C4.72004 12.4856 4.78106 12.517 4.84253 12.5521C5.16859 12.7251 5.47643 12.7757 5.79839 12.7757C6.45414 12.7757 6.86125 12.4269 6.86125 11.8654V11.8545C6.86125 11.3353 6.40177 11.1468 5.97052 11.0106L5.91451 10.9924C5.58936 10.8868 5.30885 10.7957 5.30885 10.5817V10.5703C5.30885 10.3872 5.47279 10.2524 5.72689 10.2524C6.00923 10.2524 6.34439 10.3462 6.56024 10.4655C6.56024 10.4655 6.62354 10.5065 6.64677 10.445C6.65952 10.4122 6.76881 10.1181 6.78019 10.0862C6.79249 10.0516 6.77063 10.0261 6.74832 10.0124C6.50196 9.8626 6.16133 9.76014 5.80886 9.76014L5.74328 9.76059C5.14309 9.76059 4.72413 10.1231 4.72413 10.6427V10.6536C4.72413 11.2014 5.18635 11.379 5.61942 11.5029L5.68909 11.5243C6.00468 11.6213 6.27654 11.7046 6.27654 11.9269V11.9378C6.27654 12.1409 6.09985 12.2921 5.81478 12.2921C5.70412 12.2921 5.3512 12.2898 4.97004 12.0489C4.92405 12.022 4.89718 12.0025 4.86166 11.981C4.84299 11.9692 4.79608 11.9487 4.77559 12.0106L4.64626 12.3695Z" fill="white"/>
<path d="M14.2462 12.3695C14.2262 12.4219 14.2535 12.4328 14.2599 12.4419C14.32 12.4856 14.381 12.517 14.4425 12.5521C14.7686 12.7251 15.0764 12.7757 15.3984 12.7757C16.0541 12.7757 16.4612 12.4269 16.4612 11.8654V11.8545C16.4612 11.3353 16.0017 11.1468 15.5705 11.0106L15.5145 10.9924C15.1893 10.8868 14.9088 10.7957 14.9088 10.5817V10.5703C14.9088 10.3872 15.0728 10.2524 15.3269 10.2524C15.6092 10.2524 15.9444 10.3462 16.1602 10.4655C16.1602 10.4655 16.2235 10.5065 16.2467 10.445C16.2595 10.4122 16.3688 10.1181 16.3802 10.0862C16.3925 10.0516 16.3706 10.0261 16.3483 10.0124C16.1019 9.8626 15.7613 9.76014 15.4088 9.76014L15.3433 9.76059C14.7431 9.76059 14.3241 10.1231 14.3241 10.6427V10.6536C14.3241 11.2014 14.7863 11.379 15.2194 11.5029L15.2891 11.5243C15.6047 11.6213 15.877 11.7046 15.877 11.9269V11.9378C15.877 12.1409 15.6998 12.2921 15.4148 12.2921C15.3041 12.2921 14.9512 12.2898 14.57 12.0489C14.524 12.022 14.4967 12.0034 14.4621 11.981C14.4503 11.9733 14.3947 11.9519 14.3756 12.0106L14.2462 12.3695Z" fill="white"/>
<path d="M20.7999 11.2697C20.7999 11.5871 20.7407 11.8371 20.6241 12.0138C20.5089 12.1886 20.3345 12.2738 20.0913 12.2738C19.8477 12.2738 19.6741 12.1891 19.5608 12.0138C19.446 11.8375 19.3877 11.5871 19.3877 11.2697C19.3877 10.9527 19.446 10.7032 19.5608 10.5283C19.6741 10.3552 19.8477 10.271 20.0913 10.271C20.3345 10.271 20.5089 10.3552 20.6245 10.5283C20.7407 10.7032 20.7999 10.9527 20.7999 11.2697ZM21.3472 10.6813C21.2935 10.4996 21.2097 10.3393 21.0981 10.2059C20.9866 10.072 20.8454 9.96452 20.6778 9.8862C20.5107 9.80832 20.3131 9.76871 20.0913 9.76871C19.8691 9.76871 19.6714 9.80832 19.5043 9.8862C19.3367 9.96452 19.1955 10.072 19.0835 10.2059C18.9724 10.3398 18.8886 10.5001 18.8344 10.6813C18.7811 10.8621 18.7543 11.0597 18.7543 11.2697C18.7543 11.4796 18.7811 11.6777 18.8344 11.858C18.8886 12.0393 18.9719 12.1995 19.084 12.3334C19.1955 12.4673 19.3372 12.5743 19.5043 12.6504C19.6719 12.7264 19.8691 12.7651 20.0913 12.7651C20.3131 12.7651 20.5102 12.7264 20.6778 12.6504C20.8449 12.5743 20.9866 12.4673 21.0981 12.3334C21.2097 12.2 21.2935 12.0397 21.3472 11.858C21.401 11.6772 21.4278 11.4791 21.4278 11.2697C21.4278 11.0602 21.401 10.8621 21.3472 10.6813Z" fill="white"/>
<path d="M25.8422 12.189C25.824 12.1358 25.7726 12.1558 25.7726 12.1558C25.6929 12.1863 25.6082 12.2145 25.518 12.2287C25.4265 12.2428 25.3258 12.2501 25.2179 12.2501C24.9529 12.2501 24.7425 12.1713 24.5917 12.0155C24.4406 11.8598 24.3559 11.608 24.3568 11.2673C24.3577 10.9572 24.4324 10.7241 24.5667 10.5465C24.7001 10.3698 24.9032 10.2792 25.1742 10.2792C25.4 10.2792 25.5722 10.3051 25.7525 10.362C25.7525 10.362 25.7958 10.3807 25.8163 10.3242C25.8641 10.1913 25.8996 10.0961 25.9506 9.94991C25.9652 9.90847 25.9297 9.89071 25.9169 9.8857C25.8459 9.85792 25.6783 9.81284 25.5517 9.79371C25.4333 9.7755 25.2949 9.76594 25.1409 9.76594C24.911 9.76594 24.706 9.8051 24.5307 9.88342C24.3559 9.9613 24.2074 10.0688 24.0899 10.2027C23.9724 10.3365 23.8832 10.4968 23.8235 10.6781C23.7643 10.8589 23.7343 11.0574 23.7343 11.2673C23.7343 11.7214 23.8568 12.0884 24.0986 12.3571C24.3408 12.6267 24.7047 12.7637 25.1792 12.7637C25.4597 12.7637 25.7475 12.7068 25.9543 12.6253C25.9543 12.6253 25.9939 12.6062 25.9766 12.5602L25.8422 12.189Z" fill="white"/>
<path d="M26.7999 10.9656C26.8259 10.7894 26.8746 10.6427 26.9497 10.5284C27.0631 10.3549 27.2362 10.2598 27.4793 10.2598C27.7225 10.2598 27.8833 10.3554 27.9985 10.5284C28.075 10.6427 28.1082 10.7957 28.1214 10.9656H26.7999ZM28.6428 10.5781C28.5964 10.4028 28.4812 10.2256 28.4056 10.1445C28.2863 10.0161 28.1697 9.92642 28.054 9.87633C27.9028 9.81166 27.7216 9.76886 27.5231 9.76886C27.2917 9.76886 27.0818 9.80756 26.9115 9.88771C26.7407 9.96786 26.5973 10.0772 26.4848 10.2133C26.3723 10.349 26.2876 10.5107 26.2339 10.6942C26.1797 10.8768 26.1523 11.0758 26.1523 11.2857C26.1523 11.4993 26.1806 11.6983 26.2366 11.8773C26.2931 12.0576 26.3832 12.2165 26.5053 12.3482C26.6269 12.4807 26.7835 12.5845 26.9711 12.6569C27.1574 12.7289 27.3837 12.7662 27.6437 12.7657C28.1788 12.7639 28.4607 12.6446 28.5768 12.5804C28.5973 12.569 28.6169 12.549 28.5923 12.4916L28.4712 12.1523C28.4529 12.1018 28.4015 12.1205 28.4015 12.1205C28.269 12.1696 28.0804 12.258 27.641 12.2571C27.3536 12.2566 27.1405 12.1719 27.0071 12.0394C26.87 11.9037 26.8031 11.7042 26.7912 11.4228L28.6442 11.4246C28.6442 11.4246 28.6929 11.4237 28.6979 11.3764C28.6998 11.3563 28.7617 10.9957 28.6428 10.5781Z" fill="white"/>
<path d="M11.9604 10.9656C11.9868 10.7894 12.0351 10.6427 12.1102 10.5284C12.2236 10.3549 12.3967 10.2598 12.6399 10.2598C12.883 10.2598 13.0438 10.3554 13.1595 10.5284C13.2355 10.6427 13.2687 10.7957 13.2819 10.9656H11.9604ZM13.8029 10.5781C13.7565 10.4028 13.6417 10.2256 13.5661 10.1445C13.4468 10.0161 13.3302 9.92642 13.2146 9.87633C13.0634 9.81166 12.8821 9.76886 12.6836 9.76886C12.4527 9.76886 12.2423 9.80756 12.072 9.88771C11.9012 9.96786 11.7578 10.0772 11.6453 10.2133C11.5328 10.349 11.4481 10.5107 11.3944 10.6942C11.3406 10.8768 11.3129 11.0758 11.3129 11.2857C11.3129 11.4993 11.3411 11.6983 11.3971 11.8773C11.4536 12.0576 11.5437 12.2165 11.6658 12.3482C11.7874 12.4807 11.944 12.5845 12.1316 12.6569C12.3179 12.7289 12.5442 12.7662 12.8043 12.7657C13.3393 12.7639 13.6212 12.6446 13.7373 12.5804C13.7578 12.569 13.7774 12.549 13.7528 12.4916L13.6321 12.1523C13.6135 12.1018 13.562 12.1205 13.562 12.1205C13.4295 12.1696 13.2414 12.258 12.8011 12.2571C12.5142 12.2566 12.3011 12.1719 12.1676 12.0394C12.0306 11.9037 11.9636 11.7042 11.9518 11.4228L13.8047 11.4246C13.8047 11.4246 13.8535 11.4237 13.8585 11.3764C13.8603 11.3563 13.9222 10.9957 13.8029 10.5781Z" fill="white"/>
<path d="M7.95515 12.1789C7.88275 12.1211 7.87273 12.1065 7.84814 12.0692C7.81171 12.0122 7.79304 11.9312 7.79304 11.8283C7.79304 11.6652 7.84677 11.5482 7.95834 11.4694C7.95697 11.4699 8.11772 11.3305 8.49569 11.3355C8.76118 11.3392 8.99844 11.3783 8.99844 11.3783V12.2208H8.99889C8.99889 12.2208 8.76346 12.2713 8.49843 12.2873C8.12137 12.3101 7.95379 12.1785 7.95515 12.1789ZM8.69242 10.877C8.61728 10.8715 8.51983 10.8683 8.40325 10.8683C8.24432 10.8683 8.09086 10.8883 7.94695 10.9271C7.80214 10.9658 7.6719 11.0263 7.55988 11.1065C7.4474 11.1871 7.35678 11.29 7.2912 11.412C7.22563 11.5341 7.19238 11.678 7.19238 11.8392C7.19238 12.0031 7.22062 12.1457 7.27708 12.2622C7.33355 12.3793 7.41507 12.4767 7.51889 12.5519C7.62181 12.627 7.74886 12.6821 7.89641 12.7153C8.04167 12.7486 8.20652 12.7654 8.38686 12.7654C8.57675 12.7654 8.76619 12.75 8.94971 12.7185C9.13141 12.6876 9.35455 12.6425 9.41648 12.6284C9.47796 12.6138 9.54627 12.5951 9.54627 12.5951C9.59226 12.5837 9.58862 12.5346 9.58862 12.5346L9.58771 10.8401C9.58771 10.4685 9.48843 10.193 9.29307 10.0222C9.09862 9.85189 8.81219 9.76582 8.44196 9.76582C8.30307 9.76582 8.07947 9.78495 7.94559 9.81182C7.94559 9.81182 7.54075 9.89014 7.37408 10.0204C7.37408 10.0204 7.33765 10.0432 7.35769 10.0942L7.48884 10.4466C7.50523 10.4922 7.5494 10.4767 7.5494 10.4767C7.5494 10.4767 7.56352 10.4712 7.57992 10.4617C7.93648 10.2677 8.38731 10.2736 8.38731 10.2736C8.58768 10.2736 8.7416 10.3137 8.84543 10.3933C8.94652 10.4708 8.99798 10.5878 8.99798 10.8346V10.9129C8.8386 10.8902 8.69242 10.877 8.69242 10.877Z" fill="white"/>
<path d="M23.6374 9.92216C23.6515 9.88027 23.6219 9.86023 23.6096 9.85568C23.5782 9.84338 23.4206 9.81014 23.299 9.8024C23.0663 9.78828 22.937 9.82744 22.8213 9.87936C22.7066 9.93127 22.5791 10.0151 22.508 10.1102V9.88482C22.508 9.8534 22.4857 9.82835 22.4548 9.82835H21.9798C21.9488 9.82835 21.9265 9.8534 21.9265 9.88482V12.6486C21.9265 12.6795 21.952 12.705 21.983 12.705H22.4698C22.5008 12.705 22.5258 12.6795 22.5258 12.6486V11.2678C22.5258 11.0825 22.5463 10.8976 22.5873 10.7815C22.6274 10.6667 22.682 10.5747 22.7494 10.5087C22.8172 10.4431 22.8942 10.3971 22.9785 10.3712C23.0645 10.3448 23.1597 10.3361 23.2271 10.3361C23.3241 10.3361 23.4306 10.3612 23.4306 10.3612C23.4662 10.3653 23.4862 10.3434 23.498 10.3111C23.5299 10.2264 23.6201 9.97271 23.6374 9.92216Z" fill="white"/>
<path d="M19.068 8.64127C19.0088 8.62305 18.955 8.61076 18.8849 8.59755C18.8139 8.5848 18.7292 8.57842 18.6331 8.57842C18.2979 8.57842 18.0338 8.67314 17.8484 8.85985C17.664 9.04565 17.5388 9.32844 17.4759 9.70049L17.4532 9.82572H17.0324C17.0324 9.82572 16.9814 9.8239 16.9705 9.87946L16.9017 10.2652C16.8967 10.3016 16.9126 10.3248 16.9618 10.3248H17.3712L16.9559 12.6436C16.9236 12.8303 16.8862 12.9838 16.8448 13.1004C16.8042 13.2151 16.7646 13.3012 16.7154 13.3641C16.6681 13.4242 16.6235 13.4688 16.546 13.4948C16.4823 13.5162 16.4085 13.5262 16.3279 13.5262C16.2833 13.5262 16.2236 13.5189 16.1795 13.5098C16.1357 13.5011 16.1125 13.4916 16.0793 13.4775C16.0793 13.4775 16.0315 13.4592 16.0123 13.5071C15.9973 13.5467 15.888 13.8468 15.8748 13.8837C15.8621 13.9205 15.8803 13.9492 15.9035 13.9579C15.9581 13.977 15.9987 13.9898 16.0729 14.0075C16.1758 14.0317 16.2628 14.033 16.3443 14.033C16.5146 14.033 16.6704 14.0089 16.7992 13.9624C16.9286 13.9155 17.0415 13.834 17.1417 13.7238C17.2496 13.6045 17.3175 13.4797 17.3821 13.309C17.4463 13.1405 17.5014 12.931 17.5452 12.6869L17.9627 10.3248H18.573C18.573 10.3248 18.6244 10.3266 18.6349 10.2706L18.7041 9.88538C18.7087 9.84849 18.6932 9.82572 18.6435 9.82572H18.0511C18.0543 9.81252 18.0811 9.60395 18.149 9.40768C18.1781 9.32434 18.2328 9.25649 18.2788 9.21004C18.3243 9.1645 18.3767 9.13217 18.4341 9.1135C18.4928 9.09437 18.5598 9.08527 18.6331 9.08527C18.6886 9.08527 18.7437 9.09164 18.7852 9.10029C18.8425 9.11259 18.8649 9.11896 18.8799 9.12352C18.9405 9.14173 18.9487 9.12397 18.9605 9.09483L19.1021 8.70593C19.1167 8.66404 19.0807 8.64628 19.068 8.64127Z" fill="white"/>
<path d="M10.7902 12.6487C10.7902 12.6797 10.7679 12.7047 10.7369 12.7047H10.2456C10.2146 12.7047 10.1927 12.6797 10.1927 12.6487V8.69414C10.1927 8.66317 10.2146 8.63813 10.2456 8.63813H10.7369C10.7679 8.63813 10.7902 8.66317 10.7902 8.69414V12.6487Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_881_28380">
<rect width="32" height="22.5" fill="white" transform="translate(0 0.75)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

5
packages/nc-gui/assets/nc-icons/save.svg

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<path d="M12.6667 14H3.33333C2.97971 14 2.64057 13.8595 2.39052 13.6095C2.14048 13.3594 2 13.0203 2 12.6667V3.33333C2 2.97971 2.14048 2.64057 2.39052 2.39052C2.64057 2.14048 2.97971 2 3.33333 2H10.6667L14 5.33333V12.6667C14 13.0203 13.8595 13.3594 13.6095 13.6095C13.3594 13.8595 13.0203 14 12.6667 14Z" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M11.3337 14.0003V8.66699H4.66699V14.0003" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M4.66699 2V5.33333H10.0003" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 782 B

6
packages/nc-gui/assets/nc-icons/server1.svg

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
<path d="M20 14H4C2.89543 14 2 14.8954 2 16V20C2 21.1046 2.89543 22 4 22H20C21.1046 22 22 21.1046 22 20V16C22 14.8954 21.1046 14 20 14Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M6 18H6.01" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M20 2H4C2.89543 2 2 2.89543 2 4V8C2 9.10457 2.89543 10 4 10H20C21.1046 10 22 9.10457 22 8V4C22 2.89543 21.1046 2 20 2Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M6 6H6.01" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 769 B

13
packages/nc-gui/assets/nc-icons/slack.svg

@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<g clip-path="url(#clip0_1608_52215)">
<path d="M3.36508 10.0824C3.36508 11.0094 2.61587 11.7586 1.68889 11.7586C0.761902 11.7586 0.0126953 11.0094 0.0126953 10.0824C0.0126953 9.15546 0.761902 8.40625 1.68889 8.40625H3.36508V10.0824ZM4.20317 10.0824C4.20317 9.15546 4.95238 8.40625 5.87936 8.40625C6.80635 8.40625 7.55555 9.15546 7.55555 10.0824V14.2729C7.55555 15.1999 6.80635 15.9491 5.87936 15.9491C4.95238 15.9491 4.20317 15.1999 4.20317 14.2729V10.0824Z" fill="#E01E5A"/>
<path d="M5.87936 3.35238C4.95238 3.35238 4.20317 2.60317 4.20317 1.67619C4.20317 0.749206 4.95238 0 5.87936 0C6.80635 0 7.55556 0.749206 7.55556 1.67619V3.35238H5.87936ZM5.87936 4.20317C6.80635 4.20317 7.55556 4.95238 7.55556 5.87936C7.55556 6.80635 6.80635 7.55556 5.87936 7.55556H1.67619C0.749206 7.55556 0 6.80635 0 5.87936C0 4.95238 0.749206 4.20317 1.67619 4.20317H5.87936Z" fill="#36C5F0"/>
<path d="M12.5967 5.87936C12.5967 4.95238 13.3459 4.20317 14.2729 4.20317C15.1999 4.20317 15.9491 4.95238 15.9491 5.87936C15.9491 6.80635 15.1999 7.55556 14.2729 7.55556H12.5967V5.87936ZM11.7586 5.87936C11.7586 6.80635 11.0094 7.55556 10.0824 7.55556C9.15546 7.55556 8.40625 6.80635 8.40625 5.87936V1.67619C8.40625 0.749206 9.15546 0 10.0824 0C11.0094 0 11.7586 0.749206 11.7586 1.67619V5.87936Z" fill="#2EB67D"/>
<path d="M10.0824 12.5967C11.0094 12.5967 11.7586 13.3459 11.7586 14.2729C11.7586 15.1999 11.0094 15.9491 10.0824 15.9491C9.15546 15.9491 8.40625 15.1999 8.40625 14.2729V12.5967H10.0824ZM10.0824 11.7586C9.15546 11.7586 8.40625 11.0094 8.40625 10.0824C8.40625 9.15546 9.15546 8.40625 10.0824 8.40625H14.2856C15.2126 8.40625 15.9618 9.15546 15.9618 10.0824C15.9618 11.0094 15.2126 11.7586 14.2856 11.7586H10.0824Z" fill="#ECB22E"/>
</g>
<defs>
<clipPath id="clip0_1608_52215">
<rect width="16" height="16" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

10
packages/nc-gui/assets/nc-icons/snowflake.svg

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_881_28398)">
<path d="M12.5265 20.2112C13.5452 20.2836 14.3524 21.118 14.3735 22.1415L14.3739 22.1825V29.9444C14.3739 31.0383 13.4782 31.9246 12.3783 31.9246C11.2864 31.9246 10.4017 31.0595 10.3805 29.9838L10.3801 29.9444V25.6025L6.57913 27.7754C5.62605 28.325 4.40713 27.9997 3.85373 27.0549C3.31002 26.12 3.62049 24.925 4.54641 24.3681L4.58327 24.3465L11.3676 20.4697C11.732 20.2594 12.137 20.1783 12.5265 20.2112ZM20.583 20.443L20.6308 20.4697L27.4138 24.3465C28.3696 24.8935 28.6939 26.1077 28.1445 27.0549C27.601 27.9874 26.4051 28.3164 25.4566 27.7964L25.4193 27.7754L21.6208 25.6025V29.9444C21.6208 31.0383 20.7279 31.9246 19.6227 31.9246C18.5308 31.9246 17.6483 31.0595 17.6272 29.9838L17.6268 29.9444V22.1825C17.6268 21.1404 18.4396 20.2846 19.4743 20.2112C19.8457 20.1797 20.2314 20.2525 20.583 20.443ZM2.95893 10.3762L2.99635 10.397L9.77563 14.2763C10.2523 14.5487 10.5704 14.9808 10.7047 15.4644C10.7493 15.6201 10.7696 15.7757 10.7775 15.9315C10.7826 16.1466 10.7544 16.3644 10.6866 16.5759C10.5483 17.0201 10.2536 17.4173 9.82089 17.6789L9.77563 17.7055L2.99635 21.5874C2.03934 22.1333 0.819264 21.8103 0.270023 20.8657C-0.276284 19.9284 0.0343468 18.7392 0.963074 18.1814L0.99957 18.16L4.78785 15.9947L0.99957 13.8234C0.0425596 13.2761 -0.284535 12.0684 0.270023 11.1227C0.812131 10.188 2.00776 9.85963 2.95893 10.3762ZM31.7309 11.1227C32.2841 12.0684 31.957 13.2761 31.0002 13.8234L27.2117 15.9947L31.0002 18.16C31.957 18.7082 32.2841 19.9162 31.7309 20.8657C31.1789 21.8103 29.9577 22.1333 29.0044 21.5874L22.22 17.7055C21.7676 17.4446 21.4535 17.0354 21.3141 16.5759C21.2477 16.3644 21.217 16.1466 21.2246 15.9315C21.2286 15.7757 21.2514 15.6201 21.2949 15.4644C21.4306 14.9808 21.7487 14.5489 22.22 14.2763L29.0044 10.397C29.9577 9.85109 31.1789 10.1757 31.7309 11.1227ZM16.4132 12.2925C16.5281 12.2925 16.6865 12.3571 16.7671 12.4393L19.5868 15.23C19.6673 15.3097 19.7325 15.468 19.7325 15.5821V16.405C19.7325 16.5166 19.6673 16.6746 19.5868 16.7532L16.7671 19.5442C16.6865 19.6262 16.5306 19.6933 16.4132 19.6933H15.584C15.4701 19.6933 15.3117 19.6262 15.2299 19.5442L12.4116 16.7532C12.3309 16.6746 12.2657 16.5166 12.2657 16.405V15.5821C12.2657 15.468 12.3309 15.3097 12.4116 15.23L15.2299 12.4393C15.3117 12.3571 15.4701 12.2925 15.584 12.2925H16.4132ZM16.0142 14.6743H15.9826C15.8688 14.6743 15.7105 14.7402 15.6312 14.8197L14.8147 15.6252C14.7329 15.7086 14.6703 15.8657 14.6703 15.9784V16.0101C14.6703 16.1214 14.7329 16.2772 14.8147 16.3583L15.6312 17.166C15.7116 17.2457 15.8688 17.3115 15.9826 17.3115H16.0142C16.1282 17.3115 16.2868 17.2457 16.3672 17.166L17.1837 16.3583C17.2641 16.2772 17.333 16.1214 17.333 16.0101V15.9784C17.333 15.8657 17.2641 15.7086 17.1837 15.6252L16.3672 14.8197C16.2868 14.7402 16.1282 14.6743 16.0142 14.6743ZM19.6227 0.0625C20.7145 0.0625 21.5993 0.927826 21.6204 2.00063L21.6208 2.03997V6.3832L25.4193 4.2078C26.3738 3.66097 27.5938 3.98536 28.1445 4.93079C28.6868 5.86825 28.3779 7.05833 27.4507 7.61532L27.4138 7.63698L20.6308 11.5175C20.2665 11.7252 19.8626 11.8075 19.4743 11.7756C18.4532 11.701 17.6482 10.8652 17.6272 9.84283L17.6268 9.80184V2.03997C17.6268 0.94906 18.5175 0.0625 19.6227 0.0625ZM12.3783 0.0625C13.4649 0.0625 14.3523 0.927826 14.3735 2.00063L14.3739 2.03997V9.80184C14.3739 10.8428 13.5588 11.7 12.5265 11.7756C12.1539 11.8061 11.7671 11.7322 11.4154 11.5438L11.3676 11.5175L4.58327 7.63698C3.62881 7.08969 3.30287 5.88058 3.85373 4.93079C4.39994 3.99764 5.5945 3.6695 6.54186 4.18694L6.57913 4.2078L10.3801 6.3832V2.03997C10.3801 0.94906 11.2731 0.0625 12.3783 0.0625Z" fill="#29B5E8"/>
</g>
<defs>
<clipPath id="clip0_881_28398">
<rect width="32" height="31.875" fill="white" transform="translate(0 0.0625)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

17
packages/nc-gui/assets/nc-icons/sql-server.svg

@ -0,0 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_858_34345)">
<path d="M24.2169 1.41601H4.13815C2.79078 1.41601 1.69727 2.51929 1.69727 3.8569V26.0006C1.69727 27.348 2.80055 28.4415 4.13815 28.4415H17.3677C17.2213 21.8609 19.4669 9.09015 24.2218 1.39648L24.2169 1.41601Z" fill="#0F80CC"/>
<path d="M23.4838 2.13379H4.13733C3.1805 2.13379 2.4043 2.91487 2.4043 3.86682V24.3947C6.78813 22.7105 13.3639 21.2606 17.9137 21.3289C19.3163 14.8069 21.1744 8.39246 23.4838 2.13379Z" fill="url(#paint0_linear_858_34345)"/>
<path d="M28.9026 0.693268C27.5259 -0.527175 25.8613 -0.0389977 24.2161 1.41577L23.4838 2.12851C20.6719 5.10639 18.1139 10.6326 17.2547 14.8553C17.5608 15.5241 17.8027 16.2204 17.9772 16.9349L18.0846 17.4231L18.192 17.921C18.192 17.921 18.1676 17.8234 18.0651 17.5305L17.9967 17.3352C17.983 17.299 17.9683 17.2632 17.9528 17.2278C17.7673 16.8031 17.2693 15.9 17.0399 15.5094C16.8623 16.0285 16.6946 16.551 16.5371 17.0765C17.1815 18.2579 17.572 20.2789 17.572 20.2789C17.572 20.2789 17.5378 20.1471 17.3767 19.6931C17.2303 19.2879 16.5175 18.0333 16.3516 17.7404C16.0587 18.8144 15.9464 19.5369 16.0489 19.7126C16.2442 20.0544 16.4394 20.689 16.6103 21.2943C16.8739 22.3678 17.089 23.4527 17.2547 24.5456L17.2791 24.8483C17.2285 26.0691 17.2529 27.2918 17.3523 28.5096C17.4793 30.0376 17.7185 31.3508 18.0211 32.0538L18.2262 31.9415C17.7868 30.5551 17.6013 28.7439 17.6794 26.6496C17.8014 23.4521 18.5337 19.5955 19.8957 15.5778C22.2048 9.46093 25.3877 4.58892 28.307 2.2652C25.6465 4.66703 22.0486 12.4388 20.9746 15.3142C19.7688 18.5361 18.9145 21.5628 18.397 24.4577C19.2855 21.7435 22.156 20.5718 22.156 20.5718C22.156 20.5718 23.5717 18.8339 25.212 16.3491L22.0632 17.1888L21.0478 17.6379C21.0478 17.6379 23.6352 16.0611 25.8661 15.3435C28.927 10.5252 32.2613 3.67603 28.9026 0.688386" fill="#003B57"/>
</g>
<defs>
<linearGradient id="paint0_linear_858_34345" x1="14.5648" y1="2.58779" x2="14.5648" y2="23.1596" gradientUnits="userSpaceOnUse">
<stop stop-color="#97D9F6"/>
<stop offset="0.92024" stop-color="#0F80CC"/>
<stop offset="1" stop-color="#0F80CC"/>
</linearGradient>
<clipPath id="clip0_858_34345">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

11
packages/nc-gui/assets/nc-icons/stripe.svg

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_881_28406)">
<path d="M28.8 0H3.2C1.43269 0 0 1.43269 0 3.2V28.8C0 30.5673 1.43269 32 3.2 32H28.8C30.5673 32 32 30.5673 32 28.8V3.2C32 1.43269 30.5673 0 28.8 0Z" fill="#6772E5"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.5707 11.968C14.5707 11.136 15.2533 10.816 16.384 10.816C18.0053 10.816 20.0533 11.3066 21.6747 12.1813V7.16798C19.904 6.46398 18.1547 6.18665 16.384 6.18665C12.0533 6.18665 9.17334 8.44798 9.17334 12.224C9.17334 18.112 17.28 17.1733 17.28 19.712C17.28 20.6933 16.4267 21.0133 15.232 21.0133C13.4613 21.0133 11.2 20.288 9.40801 19.3066V24.384C11.392 25.2373 13.3973 25.6 15.232 25.6C19.6693 25.6 22.72 23.4026 22.72 19.584C22.6987 13.2266 14.5707 14.3573 14.5707 11.968Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_881_28406">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 983 B

32
packages/nc-gui/assets/nc-icons/survey_monkey.svg

@ -0,0 +1,32 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_881_28414)">
<mask id="mask0_881_28414" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="-1" y="0" width="33" height="33">
<path d="M15.9442 32.0173C24.7691 32.0173 31.923 24.8633 31.923 16.0385C31.923 7.21364 24.7691 0.0596924 15.9442 0.0596924C7.1194 0.0596924 -0.0345459 7.21364 -0.0345459 16.0385C-0.0345459 24.8633 7.1194 32.0173 15.9442 32.0173Z" fill="white"/>
</mask>
<g mask="url(#mask0_881_28414)">
<mask id="mask1_881_28414" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="-1" y="0" width="33" height="33">
<path d="M-0.017334 0.0596924H31.9395V32.0165H-0.0169744L-0.017334 0.0596924Z" fill="white"/>
</mask>
<g mask="url(#mask1_881_28414)">
<path d="M15.9615 32.0173C24.7863 32.0173 31.9399 24.8633 31.9399 16.0389C31.9399 7.21404 24.7863 0.0604248 15.9615 0.0604248C7.13665 0.0604248 -0.0169678 7.21368 -0.0169678 16.0385C-0.0169678 24.8626 7.13665 32.0173 15.9615 32.0173Z" fill="#DDDDDC"/>
</g>
</g>
<mask id="mask2_881_28414" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="-1" y="0" width="33" height="33">
<path d="M15.9442 32.0173C24.7691 32.0173 31.923 24.8633 31.923 16.0385C31.923 7.21364 24.7691 0.0596924 15.9442 0.0596924C7.1194 0.0596924 -0.0345459 7.21364 -0.0345459 16.0385C-0.0345459 24.8633 7.1194 32.0173 15.9442 32.0173Z" fill="white"/>
</mask>
<g mask="url(#mask2_881_28414)">
<path d="M-25.2682 -17.4803H57.3015V44.4476H-25.2678L-25.2682 -17.4803Z" fill="#BDCF31"/>
</g>
<mask id="mask3_881_28414" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="-1" y="0" width="33" height="33">
<path d="M15.9442 32.0173C24.7691 32.0173 31.923 24.8633 31.923 16.0385C31.923 7.21364 24.7691 0.0596924 15.9442 0.0596924C7.1194 0.0596924 -0.0345459 7.21364 -0.0345459 16.0385C-0.0345459 24.8633 7.1194 32.0173 15.9442 32.0173Z" fill="white"/>
</mask>
<g mask="url(#mask3_881_28414)">
<path d="M25.9084 14.4205C25.6553 14.4205 25.405 14.4554 25.1692 14.5125C24.2379 10.8257 21.1559 7.99964 17.3382 7.43478C17.2806 6.79119 17.5269 5.78193 19.1366 4.80934L19.0885 4.71478C19.0885 4.71478 16.3925 5.56764 15.7831 7.25105C15.8097 6.72539 15.6184 5.93582 14.4477 5.3742C14.4477 5.3742 14.3553 5.40584 14.4021 5.44827C14.6343 5.66292 15.3739 6.37842 15.0601 7.37474C11.0007 7.744 7.67848 10.661 6.70482 14.5133C6.46298 14.4531 6.21479 14.4222 5.96558 14.4212C4.26203 14.4212 2.87524 15.8048 2.87524 17.5133C2.87524 19.2187 4.26239 20.6044 5.96558 20.6044C6.36468 20.6044 6.74509 20.5253 7.09457 20.3879C7.35804 21.0465 7.6949 21.6732 8.09879 22.2562L10.6753 20.5188L10.6423 20.498C9.96378 19.6261 9.54922 18.3421 9.47947 17.0643C9.40252 15.6548 9.74626 14.2551 10.6462 13.4321C12.5015 11.8526 14.5214 12.5728 15.7878 14.0865H16.1258C17.3921 12.6026 19.3894 11.913 21.2299 13.4752C22.118 14.2928 22.4654 15.6685 22.3978 17.0592C22.3366 18.3493 21.9196 19.6537 21.2382 20.5318L23.7781 22.2558C24.1801 21.672 24.5161 21.0453 24.7798 20.3872C25.1293 20.5239 25.509 20.6037 25.9077 20.6037C27.6156 20.6037 28.9987 19.2176 28.9987 17.5115C28.9989 17.1056 28.9191 16.7036 28.7639 16.3285C28.6086 15.9533 28.381 15.6125 28.094 15.3254C27.8069 15.0383 27.4662 14.8106 27.0911 14.6553C26.716 14.4999 26.314 14.42 25.9081 14.4201M6.07093 18.1307C5.73079 18.1307 5.4525 17.8549 5.4525 17.5108C5.45219 17.3979 5.48274 17.287 5.54087 17.1901C5.59899 17.0933 5.68248 17.0141 5.78231 16.9613C5.88214 16.9084 5.99451 16.8838 6.10729 16.8902C6.22007 16.8966 6.32896 16.9336 6.42221 16.9974C6.42581 17.3257 6.45097 17.6489 6.48873 17.9682C6.37473 18.0728 6.22563 18.1307 6.07093 18.1307ZM25.8013 18.1321C25.6487 18.1319 25.5015 18.0756 25.3878 17.9739C25.4248 17.6525 25.45 17.3278 25.4539 16.9981C25.5535 16.9312 25.6733 16.891 25.802 16.891C26.1436 16.891 26.4226 17.1696 26.4226 17.513C26.4226 17.8574 26.1421 18.1325 25.8016 18.1325" fill="white"/>
</g>
</g>
<defs>
<clipPath id="clip0_881_28414">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

18
packages/nc-gui/assets/nc-icons/tableau.svg

@ -0,0 +1,18 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_881_28442)">
<path d="M15.4912 1.76166V3.21673H12.8887V4.16311H15.4912V7.06142H16.5086V4.16311H19.1762V3.21673H16.5086V0.3125H15.4912V1.76166Z" fill="#7099A6"/>
<path d="M6.98548 5.45257V7.5642H3.04614V8.88914H6.98548V13.1775H8.44647V8.88914H12.445V7.5642H8.44647V3.34094H6.98548V5.45257Z" fill="#EB912C"/>
<path d="M23.494 5.45257V7.5642H19.5547V8.9542H23.494V13.1775H25.0142V8.9542H28.9535V7.5642H25.0142V3.34094H23.494V5.45257Z" fill="#59879B"/>
<path d="M15.1126 12.6451V15.0111H10.7296V16.7737H15.1126V21.5056H16.887V16.7737H21.27V15.0111H16.887V10.2791H15.1126V12.6451Z" fill="#E8762C"/>
<path d="M28.0012 13.8399V15.3246H25.3336V16.5253H28.0012V19.4887H29.3321V16.5253H31.9997V15.3246H29.3321V12.3612H28.0012V13.8399Z" fill="#5B6591"/>
<path d="M2.60257 13.9701V15.3896H0V16.3952H2.60257V19.2343H3.61993V16.3952L6.28756 16.3005V15.3896H3.61993V12.5505H2.60257V13.9701Z" fill="#7099A6"/>
<path d="M6.98548 20.6539V22.7656H3.04614V24.1556H6.98548V28.3788H8.50561V24.1556H12.445V22.7656H8.50561V18.5423H6.98548V20.6539Z" fill="#C72035"/>
<path d="M23.494 20.6539V22.7656H19.5547V24.0905H23.494V28.3788H25.0142V24.0905H28.9535V22.7656H25.0142V18.5423H23.494V20.6539Z" fill="#1F447E"/>
<path d="M15.367 26.0188V27.4975H12.6993V28.6982H15.367V31.6616H16.6978V28.6982H19.3655V27.4975H16.6978V24.5341H15.367V26.0188Z" fill="#5B6591"/>
</g>
<defs>
<clipPath id="clip0_881_28442">
<rect width="32" height="31.375" fill="white" transform="translate(0 0.3125)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

15
packages/nc-gui/assets/nc-icons/telegram.svg

@ -0,0 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_858_14191)">
<path d="M16 0C11.7575 0 7.685 1.68675 4.6875 4.68625C1.6875 7.68575 0 11.7583 0 16C0 20.2417 1.6875 24.3142 4.6875 27.3137C7.685 30.3132 11.7575 32 16 32C20.2425 32 24.315 30.3132 27.3125 27.3137C30.3125 24.3142 32 20.2417 32 16C32 11.7583 30.3125 7.68575 27.3125 4.68625C24.315 1.68675 20.2425 0 16 0Z" fill="url(#paint0_linear_858_14191)"/>
<path d="M7.24213 15.831C11.9071 13.799 15.0171 12.4593 16.5721 11.812C21.0171 9.96379 21.9396 9.64279 22.5421 9.63193C22.6746 9.62979 22.9696 9.66254 23.1621 9.81829C23.3221 9.94954 23.3671 10.127 23.3896 10.2515C23.4096 10.376 23.4371 10.6598 23.4146 10.8813C23.1746 13.4113 22.1321 19.5508 21.6021 22.3845C21.3796 23.5836 20.9371 23.9856 20.5096 24.0248C19.5796 24.1103 18.8746 23.4108 17.9746 22.821C16.5671 21.8978 15.7721 21.3233 14.4046 20.4225C12.8246 19.3815 13.8496 18.8093 14.7496 17.8743C14.9846 17.6295 19.0796 13.9058 19.1571 13.568C19.1671 13.5258 19.1771 13.3683 19.0821 13.2853C18.9896 13.202 18.8521 13.2305 18.7521 13.253C18.6096 13.285 16.3621 14.772 12.0021 17.7138C11.3646 18.1523 10.7871 18.366 10.2671 18.3548C9.69713 18.3425 8.59713 18.0318 7.77963 17.7663C6.77963 17.4405 5.98213 17.2683 6.05213 16.715C6.08713 16.427 6.48463 16.1323 7.24213 15.831Z" fill="white"/>
</g>
<defs>
<linearGradient id="paint0_linear_858_14191" x1="1600" y1="0" x2="1600" y2="3200" gradientUnits="userSpaceOnUse">
<stop stop-color="#2AABEE"/>
<stop offset="1" stop-color="#229ED9"/>
</linearGradient>
<clipPath id="clip0_858_14191">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

10
packages/nc-gui/assets/nc-icons/thumbs-up-outline.svg

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<g clip-path="url(#clip0_910_11614)">
<path d="M4.66671 14.6666H2.66671C2.31309 14.6666 1.97395 14.5262 1.7239 14.2761C1.47385 14.0261 1.33337 13.6869 1.33337 13.3333V8.66665C1.33337 8.31302 1.47385 7.97389 1.7239 7.72384C1.97395 7.47379 2.31309 7.33331 2.66671 7.33331H4.66671M9.33337 5.99998V3.33331C9.33337 2.80288 9.12266 2.29417 8.74759 1.9191C8.37252 1.54403 7.86381 1.33331 7.33337 1.33331L4.66671 7.33331V14.6666H12.1867C12.5083 14.6703 12.8203 14.5576 13.0653 14.3493C13.3103 14.1411 13.4718 13.8513 13.52 13.5333L14.44 7.53331C14.469 7.34222 14.4562 7.1471 14.4023 6.96148C14.3484 6.77586 14.2548 6.60418 14.1279 6.45832C14.0011 6.31247 13.8441 6.19593 13.6678 6.11679C13.4914 6.03765 13.3 5.99779 13.1067 5.99998H9.33337Z" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<defs>
<clipPath id="clip0_910_11614">
<rect width="16" height="16" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

16
packages/nc-gui/assets/nc-icons/trello.svg

@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_881_28458)">
<path d="M28.875 0H3.125C1.39911 0 0 1.39911 0 3.125V28.875C0 30.6009 1.39911 32 3.125 32H28.875C30.6009 32 32 30.6009 32 28.875V3.125C32 1.39911 30.6009 0 28.875 0Z" fill="url(#paint0_linear_881_28458)"/>
<path d="M26.3401 4.15997H19.5801C18.7517 4.15997 18.0801 4.83155 18.0801 5.65997V16.66C18.0801 17.4884 18.7517 18.16 19.5801 18.16H26.3401C27.1685 18.16 27.8401 17.4884 27.8401 16.66V5.65997C27.8401 4.83155 27.1685 4.15997 26.3401 4.15997Z" fill="white"/>
<path d="M12.4199 4.15997H5.65991C4.83148 4.15997 4.15991 4.83155 4.15991 5.65997V24.66C4.15991 25.4884 4.83148 26.16 5.65991 26.16H12.4199C13.2483 26.16 13.9199 25.4884 13.9199 24.66V5.65997C13.9199 4.83155 13.2483 4.15997 12.4199 4.15997Z" fill="white"/>
</g>
<defs>
<linearGradient id="paint0_linear_881_28458" x1="1600" y1="0" x2="1600" y2="3200" gradientUnits="userSpaceOnUse">
<stop stop-color="#0091E6"/>
<stop offset="1" stop-color="#0079BF"/>
</linearGradient>
<clipPath id="clip0_881_28458">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

10
packages/nc-gui/assets/nc-icons/twilio.svg

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<g clip-path="url(#clip0_1608_52257)">
<path d="M8 0C12.416 0 16 3.584 16 8C16 12.416 12.416 16 8 16C3.584 16 0 12.416 0 8C0 3.584 3.584 0 8 0ZM8 2.112C4.736 2.112 2.112 4.736 2.112 8C2.112 11.264 4.736 13.888 8 13.888C11.264 13.888 13.888 11.264 13.888 8C13.888 4.736 11.264 2.112 8 2.112ZM9.984 8.32C10.903 8.32 11.648 9.065 11.648 9.984C11.648 10.903 10.903 11.648 9.984 11.648C9.065 11.648 8.32 10.903 8.32 9.984C8.32 9.065 9.065 8.32 9.984 8.32ZM6.016 8.32C6.935 8.32 7.68 9.065 7.68 9.984C7.68 10.903 6.935 11.648 6.016 11.648C5.097 11.648 4.352 10.903 4.352 9.984C4.352 9.065 5.097 8.32 6.016 8.32ZM9.984 4.352C10.903 4.352 11.648 5.097 11.648 6.016C11.648 6.935 10.903 7.68 9.984 7.68C9.065 7.68 8.32 6.935 8.32 6.016C8.32 5.097 9.065 4.352 9.984 4.352ZM6.016 4.352C6.935 4.352 7.68 5.097 7.68 6.016C7.68 6.935 6.935 7.68 6.016 7.68C5.097 7.68 4.352 6.935 4.352 6.016C4.352 5.097 5.097 4.352 6.016 4.352Z" fill="#F12E45"/>
</g>
<defs>
<clipPath id="clip0_1608_52257">
<rect width="16" height="16" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

11
packages/nc-gui/assets/nc-icons/typeform.svg

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="22" viewBox="0 0 32 22" fill="none">
<g clip-path="url(#clip0_881_28469)">
<path d="M26.626 0.496216H15.145C12.177 0.496216 9.771 2.90226 9.771 5.87026V16.1298C9.771 19.0978 12.177 21.5038 15.145 21.5038H26.626C29.594 21.5038 32 19.0978 32 16.1298V5.87026C32 2.90226 29.594 0.496216 26.626 0.496216Z" fill="#1A1A18"/>
<path d="M7.32824 4.16034C7.32824 2.1367 5.68776 0.496216 3.66412 0.496216C1.64048 0.496216 0 2.1367 0 4.16034V17.8397C0 19.8634 1.64048 21.5038 3.66412 21.5038C5.68776 21.5038 7.32824 19.8634 7.32824 17.8397V4.16034Z" fill="#1A1A18"/>
</g>
<defs>
<clipPath id="clip0_881_28469">
<rect width="32" height="21.0076" fill="white" transform="translate(0 0.496216)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 796 B

7
packages/nc-gui/assets/nc-icons/view-gantt.svg

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<rect x="6" y="7" width="9" height="2" rx="1" stroke="currentColor" stroke-width="1.33"/>
<rect x="9" y="12" width="6" height="2" rx="1" stroke="currentColor" stroke-width="1.33"/>
<path d="M3.5 4V6C3.5 7.10457 4.39543 8 5.5 8H6" stroke="currentColor" stroke-width="1.33" stroke-linecap="round"/>
<path d="M3.5 4V11C3.5 12.1046 4.39543 13 5.5 13H9" stroke="currentColor" stroke-width="1.33" stroke-linecap="round"/>
<rect x="1" y="2" width="10" height="2" rx="1" stroke="currentColor" stroke-width="1.33"/>
</svg>

After

Width:  |  Height:  |  Size: 619 B

11
packages/nc-gui/assets/nc-icons/whatsapp-solid.svg

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_917_11898)">
<path d="M14.4393 31.2257C12.6537 31.1105 10.7977 30.5857 9.14652 29.7281C7.58492 28.9089 7.57212 28.9089 7.30972 28.9793C7.18172 29.0113 6.74012 29.1329 6.33692 29.2481C5.22972 29.5553 4.18012 29.8241 3.71292 29.9201C3.48252 29.9713 3.13052 30.0673 2.93212 30.1377C2.72732 30.2145 2.49052 30.2721 2.40732 30.2721C2.31772 30.2721 2.17692 30.2977 2.08732 30.3361C1.94652 30.3873 1.90812 30.3745 1.81852 30.2401C1.72892 30.0993 1.72892 30.0481 1.85052 29.5873C1.92092 29.3121 1.99772 29.0177 2.02332 28.9281C2.08732 28.6593 2.34332 27.7441 2.72092 26.4129C3.21372 24.6913 3.21372 24.6721 2.65692 23.7441C1.73532 22.1889 1.05052 20.4801 0.730523 18.9441C0.410523 17.3953 0.384923 14.8929 0.672923 13.3441C0.826523 12.4993 1.37052 10.5729 1.64572 9.89452C2.34972 8.16012 3.41852 6.57292 4.86492 5.11372C6.12572 3.84652 7.54652 2.82252 9.11452 2.04812C10.6057 1.31212 11.6873 0.960121 13.4729 0.633721C14.4265 0.460921 16.4809 0.396921 17.4665 0.505721C18.6249 0.640121 20.6281 1.10092 21.2745 1.37612C21.3833 1.42092 21.7033 1.55532 21.9849 1.67692C23.1049 2.13772 24.4105 2.93772 25.5049 3.82092C28.9609 6.60492 31.0153 10.6241 31.2905 15.1361C31.4953 18.4705 30.6953 21.5553 28.9289 24.1985C27.2457 26.7137 25.2297 28.5249 22.7529 29.7281C20.0713 31.0337 17.8121 31.4369 14.4393 31.2257Z" fill="#02E677"/>
<path d="M20.3198 24.5373C20.2494 24.5245 20.0254 24.4669 19.8206 24.4093C19.6222 24.3581 19.2958 24.2877 19.1038 24.2557C18.9118 24.2237 18.6622 24.1533 18.547 24.1021C18.4318 24.0509 18.195 23.9741 18.0158 23.9293C17.843 23.8909 17.6382 23.8205 17.5678 23.7757C17.4974 23.7373 17.3246 23.6605 17.1838 23.6157C17.043 23.5709 16.7998 23.4685 16.6398 23.3853C16.4798 23.3021 16.307 23.2317 16.243 23.2317C16.1854 23.2317 16.0894 23.1869 16.0318 23.1293C15.9742 23.0717 15.8334 22.9885 15.7246 22.9501C15.5518 22.8861 15.1294 22.6685 14.7838 22.4573C14.7326 22.4253 14.5854 22.3421 14.4574 22.2781C14.3358 22.2077 14.195 22.1053 14.1502 22.0541C14.099 21.9965 14.0222 21.9517 13.9774 21.9517C13.9262 21.9517 13.8366 21.9005 13.7726 21.8429C13.7086 21.7789 13.4846 21.6125 13.2734 21.4717C12.6654 21.0685 12.2046 20.6589 10.9438 19.3917C9.54215 17.9965 8.87655 17.2221 8.31335 16.3517C8.22375 16.2109 8.09575 16.0125 8.02535 15.9101C7.67975 15.3981 7.03975 14.1885 7.03975 14.0541C7.03975 14.0029 6.99495 13.9325 6.94375 13.8877C6.89255 13.8429 6.82855 13.7085 6.80935 13.5741C6.78375 13.4461 6.69415 13.1581 6.60455 12.9277C6.46375 12.5501 6.44455 12.4221 6.44455 11.5197C6.43815 10.5597 6.45095 10.5085 6.64935 9.91975C6.76455 9.58695 6.89895 9.26695 6.95015 9.20935C7.00135 9.15815 7.03975 9.08775 7.03975 9.05575C7.03975 8.95335 7.62215 8.12775 7.89735 7.83975C8.13415 7.59015 8.30695 7.46855 8.83175 7.18695C9.06215 7.06535 10.3806 7.07175 10.6174 7.19975C10.8606 7.32135 11.091 7.60295 11.2574 7.98055C11.3406 8.14695 11.4686 8.43495 11.5518 8.60775C11.635 8.78695 11.7758 9.08775 11.8654 9.27975C11.955 9.47175 12.0318 9.67015 12.0318 9.71495C12.0318 9.75975 12.0894 9.90695 12.1598 10.0349C12.4862 10.6493 12.6334 11.1037 12.659 11.6349C12.6782 12.1661 12.6782 12.1725 12.435 12.5309C12.3006 12.7293 12.1406 12.9405 12.083 13.0045C12.019 13.0685 11.9678 13.1389 11.9678 13.1709C11.9678 13.1965 11.8398 13.3565 11.6798 13.5229C11.0718 14.1565 11.1038 14.5789 11.8398 15.6477C12.5246 16.6333 13.427 17.6061 14.3294 18.3357C14.5854 18.5469 14.867 18.7837 14.9566 18.8669C15.0398 18.9437 15.1358 19.0077 15.1614 19.0077C15.187 19.0077 15.2638 19.0653 15.3214 19.1293C15.3854 19.1997 15.5262 19.2893 15.635 19.3341C15.7502 19.3789 15.8846 19.4493 15.9358 19.4941C16.0702 19.6029 16.8318 20.0061 17.0238 20.0637C17.1134 20.0893 17.2222 20.1405 17.267 20.1789C17.3182 20.2173 17.5422 20.3133 17.7726 20.3965C18.163 20.5309 18.195 20.5309 18.355 20.4349C18.547 20.3197 19.3662 19.4813 19.7886 18.9693C20.1982 18.4829 20.4158 18.3485 20.8254 18.3549C21.0814 18.3549 21.2606 18.4061 21.5358 18.5533C21.7406 18.6621 21.939 18.7517 21.9838 18.7517C22.0286 18.7517 22.099 18.7965 22.1438 18.8477C22.1886 18.9053 22.3486 18.9757 22.5022 19.0141C22.6558 19.0525 22.8158 19.1229 22.8542 19.1741C22.8926 19.2253 23.0462 19.2957 23.1934 19.3341C23.3342 19.3725 23.5262 19.4557 23.6158 19.5197C23.7054 19.5837 23.8654 19.6541 23.9806 19.6733C24.0958 19.6989 24.2494 19.7693 24.3326 19.8333C24.4158 19.8973 24.5694 19.9677 24.6718 19.9933C24.7806 20.0189 24.9406 20.1149 25.043 20.2109C25.1966 20.3581 25.2158 20.4221 25.2158 20.7997C25.2158 21.0877 25.1646 21.3693 25.0558 21.6829C24.9662 21.9325 24.8958 22.1821 24.8958 22.2333C24.8958 22.3869 24.3646 22.9885 23.8654 23.3981C23.0014 24.1085 22.035 24.4989 21.0302 24.5437C20.7102 24.5565 20.3902 24.5565 20.3198 24.5373Z" fill="#F6FEFA"/>
</g>
<defs>
<clipPath id="clip0_917_11898">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

3
packages/nc-gui/assets/nc-icons/whatsapp.svg

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<path d="M1 15L1.98436 11.4035C1.1485 9.95098 0.866189 8.24494 1.18958 6.60043C1.51298 4.95592 2.42022 3.48406 3.74374 2.45671C5.06727 1.42936 6.71765 0.915921 8.39005 1.01124C10.0625 1.10656 11.6439 1.80419 12.8422 2.97528C14.0406 4.14636 14.7749 5.71179 14.9096 7.3824C15.0442 9.05301 14.5701 10.7159 13.5748 12.064C12.5795 13.4121 11.1303 14.3543 9.49475 14.7166C7.85923 15.0788 6.14795 14.8366 4.67698 14.0348M2.66613 13.353L4.84934 12.7785C6.05083 13.5591 7.49981 13.8645 8.91416 13.6354C10.3285 13.4064 11.607 12.6591 12.5006 11.5392C13.3943 10.4192 13.8391 9.00679 13.7486 7.57688C13.6581 6.14696 13.0386 4.80192 12.0108 3.80365C10.983 2.80538 9.62053 2.22535 8.18858 2.17648C6.75663 2.12762 5.35775 2.61342 4.26432 3.53931C3.17088 4.46519 2.46117 5.76487 2.27336 7.18529C2.08555 8.60571 2.4331 10.0452 3.24832 11.2234M6.8104 6.35909C6.887 6.5506 6.8104 6.74211 6.38908 7.20939C6.15927 7.4392 6.23587 7.51581 6.64187 8.09034C7.04787 8.66487 7.71432 9.20109 8.32715 9.48836C8.93998 9.77562 8.90168 9.75647 9.15831 9.45005C9.73283 8.79892 9.57963 8.64571 10.1542 8.90617L11.1883 9.40409C11.4947 9.5573 11.51 9.5573 11.5139 9.74881C11.5177 9.94032 11.4488 10.4382 11.2458 10.6527C11.0428 10.8672 10.2882 11.6026 8.94765 11.1124C7.60708 10.6221 6.68783 10.2314 5.15576 8.16311C3.62368 6.09481 5.09447 4.86915 5.29364 4.79254C5.49281 4.71594 5.56176 4.73509 5.94478 4.74275C6.04692 4.74275 6.13629 4.80659 6.21289 4.93426" fill="#25D366"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

12
packages/nc-gui/assets/nc-icons/workday.svg

@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<g clip-path="url(#clip0_881_28477)">
<path d="M16 32C24.8366 32 32 24.8366 32 16C32 7.16344 24.8366 0 16 0C7.16344 0 0 7.16344 0 16C0 24.8366 7.16344 32 16 32Z" fill="#005CB9"/>
<path d="M8.48 11.36C8.52 11.28 8.52 11.2 8.56 11.12C9.6 7.8 12.6 5.56 16.04 5.56C19.48 5.56 22.48 7.8 23.52 11.08C23.56 11.16 23.56 11.24 23.6 11.32C23.76 11.84 23.44 12.4 22.92 12.56C22.4 12.72 21.84 12.4 21.68 11.88C21.64 11.84 21.64 11.76 21.64 11.72C20.8 9.24 18.56 7.6 16 7.6C13.44 7.6 11.2 9.28 10.44 11.72C10.4 11.8 10.4 11.84 10.4 11.88C10.28 12.32 9.88 12.6 9.44 12.6C9.36 12.6 9.28 12.6 9.16 12.56C8.64 12.44 8.32 11.88 8.48 11.36Z" fill="#F38B00"/>
<path d="M23.5601 15.88L21.0401 25.4C21.0001 25.56 20.8401 25.72 20.6401 25.72H18.5601C18.5601 25.72 18.2001 25.68 18.1601 25.48C17.8001 24.16 15.9601 17.48 15.9601 17.48C15.9601 17.48 14.2001 24.16 13.8801 25.48C13.8401 25.64 13.4801 25.8 13.4801 25.8H11.4001C11.2001 25.8 11.0401 25.68 11.0001 25.48L8.48006 15.96C8.40006 15.72 8.60006 15.44 8.88006 15.44H10.2401C10.4401 15.44 10.6001 15.56 10.6401 15.76C10.6401 15.76 12.4401 23.32 12.5201 23.36L14.5601 15.76C14.6001 15.6 14.8001 15.44 14.9601 15.44H17.0801C17.2801 15.44 17.4401 15.56 17.5201 15.76C17.5201 15.76 19.5201 23.32 19.5601 23.32L21.4001 15.76C21.4401 15.56 21.6001 15.44 21.8001 15.44H23.1601C23.4401 15.44 23.6401 15.68 23.5601 15.96" fill="white"/>
</g>
<defs>
<clipPath id="clip0_881_28477">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

10
packages/nc-gui/assets/nc-icons/zendesk.svg

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="26" viewBox="0 0 32 26" fill="none">
<g clip-path="url(#clip0_881_28488)">
<path d="M14.7811 7.21658V25.0632H0L14.7811 7.21658ZM14.7811 0.8125C14.7811 4.89301 11.4711 8.20307 7.39057 8.20307C3.31006 8.20307 0 4.89301 0 0.8125H14.7811ZM17.2189 25.0632C17.2189 20.9786 20.5248 17.6726 24.6094 17.6726C28.694 17.6726 32 20.9827 32 25.0632H17.2189ZM17.2189 18.655V0.8125H32L17.2189 18.655Z" fill="#03363D"/>
</g>
<defs>
<clipPath id="clip0_881_28488">
<rect width="32" height="24.375" fill="white" transform="translate(0 0.8125)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 639 B

7
packages/nc-gui/assets/nc-icons/zoho-crm.svg

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="12" viewBox="0 0 32 12" fill="none">
<path d="M14.2868 11.4619C14.043 11.4619 13.793 11.4119 13.5555 11.3056L8.48638 9.04298C7.58006 8.64295 7.17378 7.57412 7.57381 6.6678L9.83648 1.59868C10.2365 0.692366 11.3053 0.286086 12.2117 0.686115L17.2808 2.94878C18.1871 3.34881 18.5934 4.41764 18.1933 5.32396L15.9369 10.3931C15.6369 11.0681 14.9806 11.4619 14.2868 11.4619ZM13.9805 10.3556C14.3618 10.5243 14.8118 10.3493 14.9869 9.9743L17.2495 4.90517C17.4183 4.5239 17.2433 4.07386 16.8682 3.89885L11.7929 1.63618C11.4116 1.46742 10.9616 1.64244 10.7865 2.01746L8.52388 7.09284C8.35512 7.47411 8.53013 7.92415 8.90516 8.09916L13.9805 10.3556Z" fill="#089949"/>
<path d="M30.2005 11.4675H24.6439C23.6501 11.4675 22.8438 10.6612 22.8438 9.66734V4.11068C22.8438 3.11686 23.6501 2.31055 24.6439 2.31055H30.2005C31.1944 2.31055 32.0007 3.11686 32.0007 4.11068V9.66734C32.0007 10.6549 31.1944 11.4675 30.2005 11.4675ZM24.6439 3.34812C24.2251 3.34812 23.8813 3.6919 23.8813 4.11068V9.66734C23.8813 10.0861 24.2251 10.4299 24.6439 10.4299H30.2005C30.6193 10.4299 30.9631 10.0861 30.9631 9.66734V4.11068C30.9631 3.6919 30.6193 3.34812 30.2005 3.34812H24.6439Z" fill="#F9B21D"/>
<path d="M9.39834 5.13026L8.64829 6.80539C8.63579 6.82414 8.62953 6.84289 8.61703 6.85539L8.91081 8.65552C8.97956 9.06805 8.69829 9.46183 8.28576 9.52434L2.80411 10.4119C2.60409 10.4432 2.40408 10.3932 2.23532 10.2806C2.0728 10.1619 1.9603 9.98687 1.92904 9.78686L1.04148 4.3052C1.01023 4.10519 1.06023 3.90517 1.17274 3.73641C1.2915 3.5739 1.46651 3.46139 1.66652 3.43014L7.14818 2.54257C7.19193 2.53632 7.22943 2.53007 7.26694 2.53007C7.62946 2.53007 7.96074 2.79884 8.01699 3.16762L8.31076 4.98025L9.08582 3.24888L9.04206 3.00511C8.8858 2.02379 7.96074 1.35499 6.97941 1.5175L1.51026 2.40506C1.03523 2.48007 0.616448 2.73634 0.341427 3.12387C0.0601567 3.5114 -0.0523515 3.98643 0.022654 4.46772L0.910219 9.94937C0.985225 10.4244 1.24149 10.8432 1.63527 11.1245C1.94154 11.3495 2.31032 11.462 2.68535 11.462C2.77911 11.462 2.87911 11.4557 2.97912 11.437L8.46077 10.5494C9.44209 10.3931 10.1109 9.46808 9.94838 8.48676L9.39834 5.13026Z" fill="#E42527"/>
<path d="M15.9795 7.74926L16.7858 5.94288L16.5546 4.26776C16.5233 4.06774 16.5796 3.86773 16.7046 3.70522C16.8296 3.5427 17.0046 3.43645 17.2109 3.41145L22.7113 2.66139C22.7488 2.65514 22.78 2.65514 22.8175 2.65514C22.98 2.65514 23.1425 2.71139 23.28 2.8114C23.305 2.83015 23.3301 2.85515 23.3488 2.87391C23.5926 2.61764 23.9113 2.43637 24.2739 2.35512C24.1739 2.21761 24.0489 2.0926 23.9113 1.98634C23.5301 1.69257 23.055 1.57381 22.58 1.63631L17.0733 2.38637C16.5983 2.44887 16.1733 2.69889 15.8858 3.08017C15.592 3.46145 15.4732 3.93648 15.5357 4.41152L15.9795 7.74926Z" fill="#226DB4"/>
<path d="M25.3425 8.67402L24.6174 3.34863C24.2111 3.36113 23.8861 3.69866 23.8861 4.10494V5.66755L24.3111 8.81153C24.3424 9.01155 24.2861 9.21156 24.1611 9.37407C24.0361 9.53659 23.8611 9.64284 23.6548 9.66785L18.1544 10.4179C17.9544 10.4492 17.7544 10.3929 17.5919 10.2679C17.4294 10.1429 17.3231 9.96787 17.2981 9.7616L17.0419 7.89271L16.248 9.6991L16.2793 9.89911C16.3418 10.3741 16.5918 10.7992 16.9731 11.0867C17.2919 11.3305 17.6669 11.4555 18.0607 11.4555C18.1419 11.4555 18.2232 11.4492 18.3107 11.4367L23.8049 10.6929C24.2799 10.6304 24.7049 10.3804 24.9924 9.99912C25.28 9.62409 25.405 9.14906 25.3425 8.67402Z" fill="#226DB4"/>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

7
packages/nc-gui/assets/style.scss

@ -93,6 +93,13 @@ main {
}
}
// add border on input if it has value and it is not focused
.ant-input-affix-wrapper.nc-input-border-on-value {
&:not(:has(.ant-input-clear-icon-hidden)):has(.ant-input-clear-icon) {
@apply border-[var(--ant-primary-5)];
}
}
.ant-form-item-explain {
@apply !min-h-5;
.ant-form-item-explain-error {

10
packages/nc-gui/components.d.ts vendored

@ -81,8 +81,6 @@ declare module 'vue' {
IcRoundKeyboardArrowDown: typeof import('~icons/ic/round-keyboard-arrow-down')['default']
IcRoundSearch: typeof import('~icons/ic/round-search')['default']
LogosGoogleGmail: typeof import('~icons/logos/google-gmail')['default']
MaterialSymbolsArrowCircleLeftRounded: typeof import('~icons/material-symbols/arrow-circle-left-rounded')['default']
MaterialSymbolsArrowCircleRightRounded: typeof import('~icons/material-symbols/arrow-circle-right-rounded')['default']
MaterialSymbolsAttachFile: typeof import('~icons/material-symbols/attach-file')['default']
MaterialSymbolsChevronRightRounded: typeof import('~icons/material-symbols/chevron-right-rounded')['default']
MaterialSymbolsCloseRounded: typeof import('~icons/material-symbols/close-rounded')['default']
@ -108,9 +106,8 @@ declare module 'vue' {
MdiArrowULeftBottom: typeof import('~icons/mdi/arrow-u-left-bottom')['default']
MdiBookOpenBlankVariant: typeof import('~icons/mdi/book-open-blank-variant')['default']
MdiCalculatorVariant: typeof import('~icons/mdi/calculator-variant')['default']
MdiCamera: typeof import('~icons/mdi/camera')['default']
MdiCardsHeart: typeof import('~icons/mdi/cards-heart')['default']
MdiCellphoneMessage: typeof import('~icons/mdi/cellphone-message')['default']
MdiChat: typeof import('~icons/mdi/chat')['default']
MdiCheck: typeof import('~icons/mdi/check')['default']
MdiChevronLeft: typeof import('~icons/mdi/chevron-left')['default']
MdiChevronRight: typeof import('~icons/mdi/chevron-right')['default']
@ -120,7 +117,6 @@ declare module 'vue' {
MdiCodeTags: typeof import('~icons/mdi/code-tags')['default']
MdiContentCopy: typeof import('~icons/mdi/content-copy')['default']
MdiCurrencyUsd: typeof import('~icons/mdi/currency-usd')['default']
MdiDiscord: typeof import('~icons/mdi/discord')['default']
MdiDotsHorizontal: typeof import('~icons/mdi/dots-horizontal')['default']
MdiDotsVertical: typeof import('~icons/mdi/dots-vertical')['default']
MdiEye: typeof import('~icons/mdi/eye')['default']
@ -131,7 +127,6 @@ declare module 'vue' {
MdiFormatUnderline: typeof import('~icons/mdi/format-underline')['default']
MdiHeart: typeof import('~icons/mdi/heart')['default']
MdiHistory: typeof import('~icons/mdi/history')['default']
MdiKeyStar: typeof import('~icons/mdi/key-star')['default']
MdiLink: typeof import('~icons/mdi/link')['default']
MdiLinkVariant: typeof import('~icons/mdi/link-variant')['default']
MdiLoading: typeof import('~icons/mdi/loading')['default']
@ -140,13 +135,11 @@ declare module 'vue' {
MdiMapMarkerOutline: typeof import('~icons/mdi/map-marker-outline')['default']
MdiMenuDown: typeof import('~icons/mdi/menu-down')['default']
MdiMessageOutline: typeof import('~icons/mdi/message-outline')['default']
MdiMicrosoftTeams: typeof import('~icons/mdi/microsoft-teams')['default']
MdiMoonFull: typeof import('~icons/mdi/moon-full')['default']
MdiPlus: typeof import('~icons/mdi/plus')['default']
MdiReload: typeof import('~icons/mdi/reload')['default']
MdiRocketLaunchOutline: typeof import('~icons/mdi/rocket-launch-outline')['default']
MdiScriptTextOutline: typeof import('~icons/mdi/script-text-outline')['default']
MdiSlack: typeof import('~icons/mdi/slack')['default']
MdiStar: typeof import('~icons/mdi/star')['default']
MdiStarOutline: typeof import('~icons/mdi/star-outline')['default']
MdiStickerCheckOutline: typeof import('~icons/mdi/sticker-check-outline')['default']
@ -154,7 +147,6 @@ declare module 'vue' {
MdiTableColumnPlusAfter: typeof import('~icons/mdi/table-column-plus-after')['default']
MdiThumbUp: typeof import('~icons/mdi/thumb-up')['default']
MdiTick: typeof import('~icons/mdi/tick')['default']
MdiWhatsapp: typeof import('~icons/mdi/whatsapp')['default']
MiCircleWarning: typeof import('~icons/mi/circle-warning')['default']
NcIconsInbox: typeof import('~icons/nc-icons/inbox')['default']
PhMagnifyingGlassBold: typeof import('~icons/ph/magnifying-glass-bold')['default']

5
packages/nc-gui/components/account/Integration.vue

@ -0,0 +1,5 @@
<script lang="ts" setup></script>
<template>
<WorkspaceIntegrationsView />
</template>

294
packages/nc-gui/components/account/UserList.vue

@ -17,7 +17,7 @@ const { user: loggedInUser } = useGlobal()
const { copy } = useCopy()
const { sorts, loadSorts, handleGetSortedData, toggleSort } = useUserSorts('Org')
const { sorts, sortDirection, loadSorts, handleGetSortedData, saveOrUpdate: saveOrUpdateUserSort } = useUserSorts('Org')
const users = ref<UserType[]>([])
@ -163,10 +163,55 @@ const openDeleteModal = (user: UserType) => {
deleteModalInfo.value = user
isOpen.value = true
}
const orderBy = computed<Record<string, SordDirectionType>>({
get: () => {
return sortDirection.value
},
set: (value: Record<string, SordDirectionType>) => {
// Check if value is an empty object
if (Object.keys(value).length === 0) {
saveOrUpdateUserSort({})
return
}
const [field, direction] = Object.entries(value)[0]
saveOrUpdateUserSort({
field,
direction,
})
},
})
const columns = [
{
key: 'email',
title: t('objects.users'),
minWidth: 220,
dataIndex: 'email',
showOrderBy: true,
},
{
key: 'role',
title: t('general.access'),
basis: '30%',
minWidth: 272,
dataIndex: 'roles',
showOrderBy: true,
},
{
key: 'action',
title: t('labels.actions'),
width: 110,
minWidth: 110,
justify: 'justify-end',
},
] as NcTableColumnProps[]
</script>
<template>
<div data-testid="nc-super-user-list" class="h-full">
<div data-testid="nc-super-user-list" class="h-full px-6">
<div class="max-w-195 mx-auto h-full">
<div class="text-2xl text-left font-weight-bold mb-4" data-rec="true">{{ $t('title.userMgmt') }}</div>
<div class="py-2 flex gap-4 items-center justify-between">
@ -190,159 +235,134 @@ const openDeleteModal = (user: UserType) => {
</NcButton>
</div>
</div>
<div class="w-full rounded-md max-w-250 h-[calc(100%-12rem)] rounded-md overflow-hidden mt-5">
<div class="flex w-full bg-gray-50 border-1 rounded-t-md">
<LazyAccountHeaderWithSorter
class="py-3.5 text-gray-500 font-medium text-3.5 w-2/3 text-start pl-6"
:header="$t('objects.users')"
:active-sort="sorts"
field="email"
:toggle-sort="toggleSort"
/>
<LazyAccountHeaderWithSorter
class="py-3.5 text-gray-500 font-medium text-3.5 w-1/3 text-start"
:header="$t('general.access')"
:active-sort="sorts"
field="roles"
:toggle-sort="toggleSort"
/>
<div class="flex py-3.5 text-gray-500 font-medium text-3.5 w-28 justify-end mr-4" data-rec="true">
{{ $t('labels.action') }}
</div>
</div>
<div v-if="isLoading" class="flex items-center justify-center text-center h-[513px]">
<GeneralLoader size="xlarge" />
</div>
<!-- if users are empty -->
<div v-else-if="!users.length" class="flex items-center justify-center text-center h-full">
<a-empty :image="Empty.PRESENTED_IMAGE_SIMPLE" :description="$t('labels.noData')" />
</div>
<section v-else class="tbody h-[calc(100%-4rem)] nc-scrollbar-md border-t-0 !overflow-auto">
<div
v-for="el of sortedUsers"
:key="el.id"
data-testid="nc-token-list"
class="user flex py-3 justify-around px-1 border-b-1 border-l-1 border-r-1"
:class="{
'py-4': el.roles?.includes('super'),
}"
>
<div class="text-3.5 text-start w-2/3 pl-5 flex items-center">
<NcTooltip v-if="el.display_name">
<template #title>
{{ el.email }}
</template>
<GeneralTruncateText :length="29">
{{ el.display_name }}
</GeneralTruncateText>
</NcTooltip>
<GeneralTruncateText v-else :length="29">
<NcTable
v-model:order-by="orderBy"
:columns="columns"
:data="sortedUsers"
:is-data-loading="isLoading"
class="h-[calc(100%-140px)] max-w-250 mt-4"
>
<template #bodyCell="{ column, record: el }">
<div v-if="column.key === 'email'" class="w-full">
<NcTooltip v-if="el.display_name" class="truncate max-w-full">
<template #title>
{{ el.email }}
</GeneralTruncateText>
</template>
{{ el.display_name }}
</NcTooltip>
<NcTooltip v-else class="truncate max-w-full" show-on-truncate-only>
<template #title>
{{ el.email }}
</template>
{{ el.email }}
</NcTooltip>
</div>
<template v-if="column.key === 'role'">
<div v-if="el?.roles?.includes('super')" class="font-weight-bold" data-rec="true">
{{ $t('labels.superAdmin') }}
</div>
<div class="text-3.5 text-start w-1/3">
<div v-if="el?.roles?.includes('super')" class="font-weight-bold" data-rec="true">
{{ $t('labels.superAdmin') }}
</div>
<NcSelect
v-else-if="el.id !== loggedInUser?.id"
v-model:value="el.roles"
class="w-55 nc-user-roles"
:dropdown-match-select-width="false"
dropdown-class-name="max-w-64"
@change="updateRole(el.id, el.roles as string)"
<NcSelect
v-else-if="el.id !== loggedInUser?.id"
v-model:value="el.roles"
class="w-55 nc-user-roles"
:dropdown-match-select-width="false"
dropdown-class-name="max-w-64"
@change="updateRole(el.id, el.roles as string)"
>
<a-select-option
class="nc-users-list-role-option"
:value="OrgUserRoles.CREATOR"
:label="$t(`objects.roleType.orgLevelCreator`)"
>
<a-select-option
class="nc-users-list-role-option"
:value="OrgUserRoles.CREATOR"
:label="$t(`objects.roleType.orgLevelCreator`)"
>
<div class="w-full">
<div class="flex items-center gap-1 justify-between">
<div data-rec="true">{{ $t(`objects.roleType.orgLevelCreator`) }}</div>
<GeneralIcon
v-if="el?.roles === OrgUserRoles.CREATOR"
id="nc-selected-item-icon"
icon="check"
class="w-4 h-4 text-primary"
class="flex-none w-4 h-4 text-primary"
/>
</div>
<div class="text-gray-500 text-xs whitespace-normal" data-rec="true">
{{ $t('msg.info.roles.orgCreator') }}
</div>
</a-select-option>
</div>
</a-select-option>
<a-select-option
class="nc-users-list-role-option"
:value="OrgUserRoles.VIEWER"
:label="$t(`objects.roleType.orgLevelViewer`)"
>
<a-select-option
class="nc-users-list-role-option"
:value="OrgUserRoles.VIEWER"
:label="$t(`objects.roleType.orgLevelViewer`)"
>
<div class="w-full">
<div class="flex items-center gap-1 justify-between">
<div data-rec="true">{{ $t(`objects.roleType.orgLevelViewer`) }}</div>
<GeneralIcon
v-if="el.roles === OrgUserRoles.VIEWER"
id="nc-selected-item-icon"
icon="check"
class="w-4 h-4 text-primary"
class="flex-none w-4 h-4 text-primary"
/>
</div>
<div class="text-gray-500 text-xs whitespace-normal" data-rec="true">
{{ $t('msg.info.roles.orgViewer') }}
</div>
</a-select-option>
</NcSelect>
<div v-else class="font-weight-bold" data-rec="true">
{{ $t(`objects.roleType.orgLevelCreator`) }}
</div>
</div>
</a-select-option>
</NcSelect>
<div v-else class="font-weight-bold" data-rec="true">
{{ $t(`objects.roleType.orgLevelCreator`) }}
</div>
<span class="w-26 flex items-center justify-end mr-4">
<div
class="flex items-center gap-2"
:class="{
'opacity-0 pointer-events-none': el.roles?.includes('super'),
}"
>
<NcDropdown :trigger="['click']">
<NcButton size="xsmall" type="ghost">
<MdiDotsVertical
class="text-gray-600 h-5.5 w-5.5 rounded outline-0 p-0.5 nc-workspace-menu transform transition-transform !text-gray-400 cursor-pointer hover:(!text-gray-500 bg-gray-100)"
/>
</NcButton>
<template #overlay>
<NcMenu>
<template v-if="!el.roles?.includes('super')">
<!-- Resend invite Email -->
<NcMenuItem @click="resendInvite(el)">
<component :is="iconMap.email" class="flex text-gray-600" />
<div data-rec="true">{{ $t('activity.resendInvite') }}</div>
</NcMenuItem>
<NcMenuItem @click="copyInviteUrl(el)">
<component :is="iconMap.copy" class="flex text-gray-600" />
<div data-rec="true">{{ $t('activity.copyInviteURL') }}</div>
</NcMenuItem>
<NcMenuItem @click="copyPasswordResetUrl(el)">
<component :is="iconMap.copy" class="flex text-gray-600" />
<div>{{ $t('activity.copyPasswordResetURL') }}</div>
</NcMenuItem>
</template>
<template v-if="el.id !== loggedInUser?.id">
<NcDivider v-if="!el.roles?.includes('super')" />
<NcMenuItem data-rec="true" class="!text-red-500 !hover:bg-red-50" @click="openDeleteModal(el)">
<MaterialSymbolsDeleteOutlineRounded />
{{ $t('general.remove') }} {{ $t('objects.user') }}
</NcMenuItem>
</template>
</NcMenu>
</template>
<div
v-if="column.key === 'action'"
class="flex items-center gap-2"
:class="{
'opacity-0 pointer-events-none': el.roles?.includes('super'),
}"
>
<NcDropdown :trigger="['click']">
<NcButton size="xsmall" type="ghost">
<MdiDotsVertical
class="text-gray-600 h-5.5 w-5.5 rounded outline-0 p-0.5 nc-workspace-menu transform transition-transform !text-gray-400 cursor-pointer hover:(!text-gray-500 bg-gray-100)"
/>
</NcButton>
<template #overlay>
<NcMenu>
<template v-if="!el.roles?.includes('super')">
<!-- Resend invite Email -->
<NcMenuItem @click="resendInvite(el)">
<component :is="iconMap.email" class="flex text-gray-600" />
<div data-rec="true">{{ $t('activity.resendInvite') }}</div>
</NcMenuItem>
<NcMenuItem @click="copyInviteUrl(el)">
<component :is="iconMap.copy" class="flex text-gray-600" />
<div data-rec="true">{{ $t('activity.copyInviteURL') }}</div>
</NcMenuItem>
<NcMenuItem @click="copyPasswordResetUrl(el)">
<component :is="iconMap.copy" class="flex text-gray-600" />
<div>{{ $t('activity.copyPasswordResetURL') }}</div>
</NcMenuItem>
</template>
</NcDropdown>
</div>
</span>
<template v-if="el.id !== loggedInUser?.id">
<NcDivider v-if="!el.roles?.includes('super')" />
<NcMenuItem data-rec="true" class="!text-red-500 !hover:bg-red-50" @click="openDeleteModal(el)">
<MaterialSymbolsDeleteOutlineRounded />
{{ $t('general.remove') }} {{ $t('objects.user') }}
</NcMenuItem>
</template>
</NcMenu>
</template>
</NcDropdown>
</div>
</template>
<template #extraRow>
<div
v-if="sortedUsers.length === 1"
class="user pt-12 pb-4 px-2 flex flex-col items-center gap-6 text-center border-b-1 border-l-1 border-r-1"
v-if="pagination.total === 1 && sortedUsers.length === 1"
class="w-full pt-12 pb-4 px-2 flex flex-col items-center gap-6 text-center"
>
<div class="text-2xl text-gray-800 font-bold">
{{ $t('placeholder.inviteYourTeam') }}
@ -352,16 +372,20 @@ const openDeleteModal = (user: UserType) => {
</div>
<img src="~assets/img/placeholder/invite-team.png" class="!w-[30rem] flex-none" />
</div>
</section>
</div>
<div v-if="pagination.total > 10" class="flex items-center justify-center mt-4">
<a-pagination
v-model:current="currentPage"
:total="pagination.total"
show-less-items
@change="loadUsers(currentPage, currentLimit)"
/>
</div>
</template>
<template #tableFooter>
<div v-if="pagination.total > 10" class="px-4 py-2 flex items-center justify-center">
<a-pagination
v-model:current="currentPage"
:total="pagination.total"
show-less-items
@change="loadUsers(currentPage, currentLimit)"
/>
</div>
</template>
</NcTable>
<GeneralDeleteModal v-model:visible="isOpen" entity-name="User" :on-delete="() => deleteUser()">
<template #entity-preview>
<span>

173
packages/nc-gui/components/api-client/Headers.vue

@ -10,6 +10,7 @@ interface Option {
}
const vModel = useVModel(props, 'modelValue', emits)
const headerList = ref<Option[]>([
{ value: 'A-IM' },
{ value: 'Accept' },
@ -53,89 +54,109 @@ const headerList = ref<Option[]>([
])
const addHeaderRow = () => vModel.value.push({})
const deleteHeaderRow = (i: number) => vModel.value.splice(i, 1)
const filterOption = (input: string, option: Option) => option.value.toUpperCase().includes(input.toUpperCase())
</script>
<template>
<div class="flex flex-row justify-between w-full">
<table class="w-full nc-webhooks-params">
<thead class="h-8">
<tr>
<th class="w-8"></th>
<th>
<div class="text-left font-normal ml-2" data-rec="true">{{ $t('labels.headerName') }}</div>
</th>
<th>
<div class="text-left font-normal ml-2" data-rec="true">{{ $t('placeholder.value') }}</div>
</th>
<th class="w-8"></th>
</tr>
</thead>
<tbody>
<tr v-for="(headerRow, idx) in vModel" :key="idx" class="!h-2 overflow-hidden">
<td class="px-2 nc-hook-header-tab-checkbox">
<a-form-item class="form-item">
<a-checkbox v-model:checked="headerRow.enabled" />
</a-form-item>
</td>
<td class="px-2">
<a-form-item class="form-item">
<a-auto-complete
v-model:value="headerRow.name"
class="nc-input-hook-header-key"
:options="headerList"
:placeholder="$t('placeholder.key')"
:filter-option="filterOption"
dropdown-class-name="border-1 border-gray-200"
/>
</a-form-item>
</td>
<td class="px-2">
<a-form-item class="form-item">
<a-input
v-model:value="headerRow.value"
:placeholder="$t('placeholder.value')"
class="!rounded-md nc-input-hook-header-value"
/>
</a-form-item>
</td>
<td class="relative">
<div
v-if="idx !== 0"
class="absolute left-0 top-0.25 py-1 px-1.5 rounded-md border-1 border-gray-100"
:class="{
'text-gray-400 cursor-not-allowed bg-gray-50': vModel.length === 1,
'text-gray-600 cursor-pointer hover:bg-gray-50 hover:text-black': vModel.length !== 1,
}"
@click="deleteHeaderRow(idx)"
>
<component :is="iconMap.delete" />
</div>
</td>
</tr>
<tr>
<td :colspan="12" class="">
<NcButton size="small" type="secondary" @click="addHeaderRow">
<div class="flex flex-row items-center gap-x-1">
<div data-rec="true">{{ $t('labels.addHeader') }}</div>
<component :is="iconMap.plus" class="flex mx-auto" />
</div>
</NcButton>
</td>
</tr>
</tbody>
</table>
<div class="flex flex-col py-3 gap-1.5 w-full">
<div v-for="(headerRow, idx) in vModel" :key="idx" class="flex relative items-center w-full">
<a-form-item class="form-item w-8">
<NcCheckbox v-model:checked="headerRow.enabled" size="large" class="nc-hook-header-checkbox" />
</a-form-item>
<a-form-item class="form-item w-3/6">
<a-auto-complete
v-model:value="headerRow.name"
class="!rounded-l-lg !rounded-r-0 nc-input-hook-header-key hover:!border-x-0 !border-gray-200"
:options="headerList"
:placeholder="$t('placeholder.key')"
:filter-option="filterOption"
dropdown-class-name="border-1 border-gray-200"
/>
</a-form-item>
<a-form-item class="form-item w-3/6">
<a-input
v-model:value="headerRow.value"
:placeholder="$t('placeholder.value')"
class="nc-webhook-header-value-input !border-x-0 hover:!border-x-0 !border-gray-200 !rounded-none"
/>
</a-form-item>
<NcButton
class="!rounded-l-none delete-btn !border-gray-200 !shadow-none"
type="secondary"
size="small"
:disabled="vModel.length === 1"
@click="deleteHeaderRow(idx)"
>
<component :is="iconMap.deleteListItem" />
</NcButton>
</div>
<div class="mt-1.5">
<NcButton size="small" type="secondary" class="nc-btn-focus" @click="addHeaderRow">
<div class="flex flex-row items-center gap-x-2">
<component :is="iconMap.plus" class="flex-none" />
<div data-rec="true">{{ $t('general.add') }}</div>
</div>
</NcButton>
</div>
</div>
</template>
<style lang="scss" scoped>
.form-item {
@apply !mb-3;
<style scoped lang="scss">
.ant-input {
box-shadow: none !important;
&:hover {
@apply !hover:bg-gray-50;
}
}
.delete-btn:not([disabled]) {
@apply !text-gray-500;
}
:deep(.ant-input) {
@apply !placeholder-gray-500;
}
:deep(.ant-input.nc-webhook-header-value-input) {
@apply !border-x-0;
}
.ant-input-affix-wrapper {
@apply px-4 rounded-lg py-2 w-84 border-1 focus:border-brand-500 border-gray-200 !ring-0;
}
.nc-btn-focus:focus {
@apply !text-brand-500 !shadow-none;
}
:deep(.nc-input-hook-header-key.ant-select.ant-select-auto-complete) {
@apply !text-sm;
&.ant-select-focused {
.ant-select-selector {
@apply !shadow-none !border-gray-200;
}
}
:deep(.ant-select-selector) {
@apply !rounded-l-lg !rounded-r-none !border-gray-200;
.ant-select-selection-search .ant-select-selection-search-input::placeholder {
@apply !text-gray-500 !text-sm;
}
}
.ant-select-selector {
@apply !rounded-l-lg !rounded-r-none !border-gray-200;
.ant-select-selection-search-input {
@apply !text-sm;
}
.ant-select-selection-placeholder {
@apply !text-gray-500;
}
}
}
</style>

120
packages/nc-gui/components/api-client/Params.vue

@ -17,72 +17,70 @@ const deleteParamRow = (i: number) => {
</script>
<template>
<div class="flex flex-row justify-between w-full">
<table class="w-full nc-webhooks-params">
<thead class="h-8">
<tr>
<th class="w-8"></th>
<th>
<div class="text-left font-normal ml-2" data-rec="true">{{ $t('title.parameterName') }}</div>
</th>
<div class="flex flex-col py-3 gap-1.5 w-full">
<div v-for="(paramRow, idx) in vModel" :key="idx" class="flex relative items-center w-full">
<a-form-item class="form-item w-8">
<NcCheckbox v-model:checked="paramRow.enabled" size="large" />
</a-form-item>
<a-form-item class="form-item w-3/6">
<a-input v-model:value="paramRow.name" :placeholder="$t('placeholder.key')" class="!rounded-l-lg !border-gray-200" />
</a-form-item>
<a-form-item class="form-item w-3/6">
<a-input
v-model:value="paramRow.value"
:placeholder="$t('placeholder.value')"
class="nc-webhook-parameters-value-input !border-x-0 !border-gray-200 !rounded-none"
/>
</a-form-item>
<th>
<div class="text-left font-normal ml-2" data-rec="true">{{ $t('placeholder.value') }}</div>
</th>
<th class="w-8"></th>
</tr>
</thead>
<NcButton
class="!rounded-l-none delete-btn !border-gray-200 !shadow-none"
type="secondary"
size="small"
:disabled="vModel.length === 1"
@click="deleteParamRow(idx)"
>
<component :is="iconMap.deleteListItem" />
</NcButton>
</div>
<tbody>
<tr v-for="(paramRow, idx) in vModel" :key="idx" class="!h-2 overflow-hidden">
<td class="px-2">
<a-form-item class="form-item">
<a-checkbox v-model:checked="paramRow.enabled" />
</a-form-item>
</td>
<td class="px-2">
<a-form-item class="form-item">
<a-input v-model:value="paramRow.name" :placeholder="$t('placeholder.key')" class="!rounded-lg" />
</a-form-item>
</td>
<td class="px-2">
<a-form-item class="form-item">
<a-input v-model:value="paramRow.value" :placeholder="$t('placeholder.value')" class="!rounded-lg" />
</a-form-item>
</td>
<td class="relative">
<div
class="absolute left-0 top-0.25 py-1 px-1.5 rounded-md border-1 border-gray-100"
:class="{
'text-gray-400 cursor-not-allowed bg-gray-50': vModel.length === 1,
'text-gray-600 cursor-pointer hover:bg-gray-50 hover:text-black': vModel.length !== 1,
}"
@click="deleteParamRow(idx)"
>
<component :is="iconMap.delete" />
</div>
</td>
</tr>
<tr>
<td :colspan="12" class="">
<NcButton size="small" type="secondary" @click="addParamRow">
<div class="flex flex-row items-center gap-x-1">
<div data-rec="true">{{ $t('activity.addParameter') }}</div>
<component :is="iconMap.plus" class="flex mx-auto" />
</div>
</NcButton>
</td>
</tr>
</tbody>
</table>
<div class="mt-1.5">
<NcButton size="small" type="secondary" class="nc-btn-focus" @click="addParamRow">
<div class="flex flex-row items-center gap-x-2">
<component :is="iconMap.plus" class="flex-none" />
<div data-rec="true">{{ $t('general.add') }}</div>
</div>
</NcButton>
</div>
</div>
</template>
<style lang="scss" scoped>
.form-item {
@apply !mb-3;
.ant-input {
box-shadow: none !important;
&:hover {
@apply !hover:bg-gray-50;
}
}
.delete-btn:not([disabled]) {
@apply !text-gray-500;
}
:deep(.ant-input) {
@apply !placeholder-gray-500;
}
:deep(.ant-input.nc-webhook-parameters-value-input) {
@apply !border-x-0;
}
.ant-input-affix-wrapper {
@apply px-4 rounded-lg py-2 w-84 border-1 focus:border-brand-500 border-gray-200 !ring-0;
}
.nc-btn-focus:focus {
@apply !text-brand-500 !shadow-none;
}
</style>

4
packages/nc-gui/components/cell/ClampedText.vue

@ -7,7 +7,7 @@ const props = defineProps<{
<template>
<div v-if="!props.lines || props.lines === 1" class="text-ellipsis overflow-hidden">
<span :style="{ 'word-break': 'keep-all', 'white-space': 'nowrap' }">{{ props.value || '' }}</span>
<span :style="{ 'word-break': 'keep-all', 'white-space': 'nowrap' }">{{ props.value ?? '' }}</span>
</div>
<div
@ -21,6 +21,6 @@ const props = defineProps<{
'word-break': 'break-all',
}"
>
{{ props.value || '' }}
{{ props.value ?? '' }}
</div>
</template>

9
packages/nc-gui/components/cell/attachment/AttachFile.vue

@ -47,10 +47,11 @@ watch(activeMenu, (newVal, oldValue) => {
@keydown.esc="dialogShow = false"
>
<div class="flex h-full flex-row">
<div style="border-top-left-radius: 1rem; border-bottom-left-radius: 1rem" class="px-2 !-full flex-grow bg-gray-100">
<NcMenu class="!h-full !bg-gray-100">
<div style="border-top-left-radius: 1rem; border-bottom-left-radius: 1rem" class="px-2 !-full flex-grow bg-gray-50">
<NcMenu class="!h-full !bg-gray-50">
<NcMenuItem
key="local"
class="!hover:bg-gray-200 !hover:text-gray-800 rounded-md"
:class="{
'active-menu': activeMenu === 'local',
}"
@ -64,6 +65,7 @@ watch(activeMenu, (newVal, oldValue) => {
<NcMenuItem
v-if="!isPublic"
key="url"
class="!hover:bg-gray-200 !hover:text-gray-800 rounded-md"
:class="{
'active-menu': activeMenu === 'url',
}"
@ -76,6 +78,7 @@ watch(activeMenu, (newVal, oldValue) => {
</NcMenuItem>
<NcMenuItem
key="webcam"
class="!hover:bg-gray-200 !hover:text-gray-800 rounded-md"
:class="{
'active-menu': activeMenu === 'webcam',
}"
@ -115,7 +118,7 @@ watch(activeMenu, (newVal, oldValue) => {
<style lang="scss">
.nc-modal-attachment-create {
.active-menu {
@apply !bg-gray-200 font-sembold text-brand-500 rounded-md;
@apply bg-brand-50 font-sembold text-brand-500 rounded-md;
}
}

453
packages/nc-gui/components/cell/attachment/Carousel.vue

@ -1,156 +1,379 @@
<script lang="ts" setup>
import { onKeyDown } from '@vueuse/core'
import type { CarouselApi } from '../../nc/Carousel/interface'
import { useAttachmentCell } from './utils'
import { isOffice } from '~/utils/fileUtils'
const { selectedImage, visibleItems, downloadFile } = useAttachmentCell()!
const { selectedFile, visibleItems, downloadAttachment, removeFile, renameFile, isPublic, isReadonly, isRenameModalOpen } =
useAttachmentCell()!
const carouselRef = ref()
const isExpandedFormOpen = inject(IsExpandedFormOpenInj, ref(false))
const container = ref()
const { isSharedForm } = useSmartsheetStoreOrThrow()
const imageItems = computed(() => visibleItems.value.filter((item) => isImage(item.title, item.mimetype)))
/*
const openComments = ref(false)
*/
const { isUIAllowed } = useRoles()
const container = ref<HTMLElement | null>(null)
const emblaMainApi: CarouselApi = ref()
const emblaThumbnailApi: CarouselApi = ref()
const selectedIndex = ref()
const filetoDelete = reactive({
title: '',
i: 0,
})
const isModalOpen = ref(false)
function onRemoveFileClick(title: any, i: number) {
isModalOpen.value = true
filetoDelete.title = title
filetoDelete.i = i
}
const handleFileDelete = (i: number) => {
removeFile(i)
isModalOpen.value = false
filetoDelete.i = 0
filetoDelete.title = ''
}
const { getPossibleAttachmentSrc } = useAttachment()
/** navigate to previous image on button click */
onKeyDown(
(e) => ['Left', 'ArrowLeft', 'A'].includes(e.key),
() => {
if (carouselRef.value) carouselRef.value.prev()
},
)
/** navigate to next image on button click */
onKeyDown(
(e) => ['Right', 'ArrowRight', 'D'].includes(e.key),
() => {
if (carouselRef.value) carouselRef.value.next()
},
)
/** set our selected image when slide changes */
function onSlideChange(index: number) {
selectedImage.value = imageItems.value[index]
useEventListener(container, 'click', (e) => {
const target = e.target as HTMLElement
if (!target.closest('.keep-open') && !target.closest('.nc-button') && !target.closest('img') && !target.closest('video')) {
selectedFile.value = false
}
})
const onThumbClick = (index: number) => {
if (!emblaMainApi.value || !emblaThumbnailApi.value) return
emblaMainApi.value.scrollTo(index)
emblaThumbnailApi.value.scrollTo(index)
}
const onSelect = () => {
if (!emblaMainApi.value || !emblaThumbnailApi.value) return
const newSnap = emblaMainApi.value.selectedScrollSnap()
selectedIndex.value = newSnap
selectedFile.value = visibleItems.value[newSnap]
emblaThumbnailApi.value.scrollTo(newSnap)
}
/** set our carousel ref and move to initial slide */
const setCarouselRef = (el: Element) => {
carouselRef.value = el
const goPrev = () => {
if (!emblaMainApi.value || !emblaThumbnailApi.value) return
carouselRef.value?.goTo(
imageItems.value.findIndex((item) => item === selectedImage.value),
true,
)
emblaMainApi.value.scrollPrev()
emblaThumbnailApi.value.scrollPrev()
}
/** close overlay view when clicking outside of image */
useEventListener(container, 'click', (e) => {
if (!(e.target as HTMLElement)?.closest('.keep-open') && !(e.target as HTMLElement)?.closest('img')) {
selectedImage.value = false
const goNext = () => {
if (!emblaMainApi.value || !emblaThumbnailApi.value) return
emblaMainApi.value.scrollNext()
emblaThumbnailApi.value.scrollNext()
}
// When the carousel is initialized, we set the selected index to the index of the selected file
// and scroll to that index. We only need to do this once, so we use watchOnce.
watchOnce(emblaMainApi, async (emblaMainApi) => {
if (!emblaMainApi) return
// The focus is set to the container so that the keyboard navigation works
container.value?.focus()
emblaThumbnailApi.value?.on('reInit', onSelect)
emblaMainApi.on('select', onSelect)
await nextTick(() => {
if (!selectedIndex.value) {
const newIndex = visibleItems.value.findIndex((item) => {
if (selectedFile.value?.path) return item?.path === selectedFile.value.path
if (selectedFile.value?.url) return item?.url === selectedFile.value.url
return selectedFile.value?.title === item?.title
})
selectedIndex.value = newIndex
emblaMainApi.scrollTo(newIndex)
}
})
})
onMounted(() => {
document.addEventListener('keydown', onKeyDown)
})
onUnmounted(() => {
document.removeEventListener('keydown', onKeyDown)
})
function onKeyDown(event: KeyboardEvent) {
if (isRenameModalOpen.value) return
const prevKey = ['ArrowLeft', 'Left', 'a', 'A']
const nextKey = ['ArrowRight', 'Right', 'd', 'D']
if (prevKey.includes(event.key)) {
event.preventDefault()
emblaMainApi.value?.scrollPrev()
return
}
if (nextKey.includes(event.key)) {
event.preventDefault()
emblaMainApi.value?.scrollNext()
}
}
/* const toggleComment = () => {
openComments.value = !openComments.value
}
onMounted(() => {
if (!isPublic.value && !isExpandedFormOpen.value && isUIAllowed('commentList')) {
const { loadComments } = useRowCommentsOrThrow()
loadComments()
}
})
*/
const initEmblaApi = (val: any) => {
emblaMainApi.value = val
}
</script>
<template>
<GeneralOverlay v-model="selectedImage" :z-index="1001" class="bg-gray-500 bg-opacity-50">
<template v-if="selectedImage">
<div ref="container" class="overflow-hidden p-12 text-center relative xs:h-screen">
<div class="text-white group absolute top-5 right-5">
<component
:is="iconMap.closeCircle"
class="group-hover:text-red-500 cursor-pointer text-4xl"
@click.stop="selectedImage = false"
/>
</div>
<GeneralOverlay v-model="selectedFile" transition :z-index="isExpandedFormOpen ? 1000 : 50" class="bg-black bg-opacity-90">
<div class="flex w-full h-full">
<div
v-if="selectedFile"
ref="container"
class="flex w-full overflow-hidden justify-center text-center relative h-screen items-center"
>
<NcButton
class="top-5 !absolute cursor-pointer !z-30 !hover:bg-transparent left-5"
size="xsmall"
type="text"
@click.stop="selectedFile = false"
>
<component :is="iconMap.close" class="text-white" />
</NcButton>
<div
class="keep-open select-none group hover:(ring-1 ring-accent) ring-opacity-100 cursor-pointer leading-8 inline-block px-3 py-1 bg-gray-300 text-white mb-4 text-center rounded shadow"
@click.stop="downloadFile(selectedImage)"
class="keep-open select-none absolute top-5 pointer-events-none inset-x-0 mx-auto group flex items-center justify-center leading-8 inline-block text-center rounded shadow"
>
<h3 class="group-hover:text-primary">{{ selectedImage && selectedImage.title }}</h3>
<h3
style="width: max-content"
class="hover:underline pointer-events-auto font-semibold cursor-pointer text-white"
@click.stop="downloadAttachment(selectedFile)"
>
{{ selectedFile && selectedFile.title }}
</h3>
</div>
<a-carousel
v-if="!!selectedImage"
:ref="setCarouselRef"
dots-class="slick-dots slick-thumb"
:after-change="onSlideChange"
arrows
<NcCarousel class="!absolute inset-y-16 inset-x-24 keep-open flex justify-center items-center" @init-api="initEmblaApi">
<NcCarouselContent>
<NcCarouselItem v-for="(item, index) in visibleItems" :key="index">
<div v-if="selectedIndex === index" class="justify-center w-full h-full flex items-center">
<LazyCellAttachmentPreviewImage
v-if="isImage(item.title, item.mimeType)"
class="nc-attachment-img-wrapper"
object-fit="contain"
:alt="item.title"
:srcs="getPossibleAttachmentSrc(item)"
/>
<LazyCellAttachmentPreviewVideo
v-else-if="isVideo(item.title, item.mimeType)"
class="flex items-center w-full"
:mime-type="item.mimeType"
:title="item.title"
:src="getPossibleAttachmentSrc(item)"
/>
<LazyCellAttachmentPreviewPdf
v-else-if="isPdf(item.title, item.mimeType)"
class="keep-open"
:src="getPossibleAttachmentSrc(item)"
/>
<LazyCellAttachmentPreviewMiscOffice
v-else-if="isOffice(item.title, item.mimeType)"
class="keep-open"
:src="getPossibleAttachmentSrc(item)"
/>
<div v-else class="bg-white h-full flex flex-col justify-center rounded-md gap-1 items-center w-full">
<component :is="iconMap.file" class="text-gray-600 w-20 h-20" />
<div class="text-gray-800 text-sm">{{ item.title }}</div>
</div>
</div>
</NcCarouselItem>
</NcCarouselContent>
</NcCarousel>
<div
v-if="emblaMainApi?.canScrollPrev()"
:key="selectedIndex"
class="left-2 carousel-navigation keep-open"
@click="goPrev"
>
<template #prevArrow>
<div class="custom-slick-arrow left-2 z-1 keep-open">
<MaterialSymbolsArrowCircleLeftRounded class="rounded-full" />
</div>
</template>
<component :is="iconMap.arrowLeft" class="text-7xl" />
</div>
<div
v-if="emblaMainApi?.canScrollNext()"
:key="selectedIndex"
class="right-2 carousel-navigation keep-open"
@click="goNext"
>
<component :is="iconMap.arrowRight" class="text-7xl" />
</div>
<template #nextArrow>
<div class="custom-slick-arrow !right-2 z-1 keep-open">
<MaterialSymbolsArrowCircleRightRounded class="rounded-full" />
<!-- <div v-if="isUIAllowed('commentList') && !isExpandedFormOpen" class="absolute top-2 right-2">
<NcButton class="!hover:bg-transparent" type="text" size="small" @click="toggleComment">
<div class="flex gap-1 text-white justify-center items-center">
Comments
<GeneralIcon icon="messageCircle" />
</div>
</template>
</NcButton>
</div> -->
<template #customPaging="props">
<div class="cursor-pointer h-full nc-attachment-img-wrapper">
<LazyCellAttachmentImage
class="!block m-auto h-full w-full"
:alt="imageItems[props.i].title || `#${props.i}`"
:srcs="getPossibleAttachmentSrc(imageItems[props.i])"
/>
</div>
</template>
<div v-for="(item, idx) of imageItems" :key="idx">
<LazyCellAttachmentImage :srcs="getPossibleAttachmentSrc(item)" class="max-w-70vw max-h-70vh" />
</div>
</a-carousel>
</div>
</template>
</GeneralOverlay>
</template>
<div class="text-white absolute right-2 top-2 cursor-pointer"></div>
<style scoped>
.ant-carousel :deep(.custom-slick-arrow .nc-icon):hover {
@apply !bg-white;
}
.ant-carousel :deep(.slick-dots) {
@apply relative mt-4;
}
<div class="absolute w-full !bottom-2 max-h-18 z-30 flex items-center justify-center">
<NcCarousel class="absolute max-w-sm" @init-api="(val) => (emblaThumbnailApi = val)">
<NcCarouselContent class="!flex !gap-2">
<NcCarouselItem
v-for="(item, index) in visibleItems"
:key="index"
:class="{
'!opacity-100': index === selectedIndex,
'!basis-1/4': visibleItems.length >= 4,
'!basis-1/3': visibleItems.length === 3,
'!basis-1/2': visibleItems.length === 2,
}"
class="px-2 keep-open opacity-50 cursor-pointer"
@click="onThumbClick(index)"
>
<div class="flex items-center justify-center">
<LazyCellAttachmentPreviewImage
v-if="isImage(item.title, item.mimeType)"
class="nc-attachment-img-wrapper h-12"
object-fit="contain"
:alt="item.title"
:srcs="getPossibleAttachmentSrc(item, 'tiny')"
/>
<div
v-else-if="isVideo(item.title, item.mimeType)"
class="h-full flex items-center h-6 justify-center rounded-md px-2 py-1 border-1 border-gray-200"
>
<GeneralIcon class="text-white" icon="play" />
</div>
.ant-carousel :deep(.slick-slide) {
@apply w-full;
}
<div
v-else-if="isPdf(item.title, item.mimeType)"
class="h-full flex items-center h-6 justify-center rounded-md px-2 py-1 border-1 border-gray-200"
>
<GeneralIcon class="text-white" icon="pdfFile" />
</div>
.ant-carousel :deep(.slick-slide img) {
@apply border-1 m-auto;
}
<div v-else class="h-full flex items-center h-6 justify-center rounded-md px-2 py-1 border-1 border-gray-200">
<GeneralIcon class="text-white" icon="file" />
</div>
</div>
</NcCarouselItem>
</NcCarouselContent>
</NcCarousel>
</div>
.ant-carousel :deep(.slick-thumb) {
@apply bottom-2;
}
<div class="absolute keep-open right-2 z-30 bottom-3 transition-all gap-3 transition-ease-in-out !h-6 flex items-center">
<NcTooltip
v-if="!isSharedForm || (!isReadonly && isUIAllowed('dataEdit') && !isPublic)"
color="light"
placement="bottom"
>
<template #title> {{ $t('title.renameFile') }} </template>
<NcButton
size="xsmall"
class="nc-attachment-rename !hover:text-gray-400 !hover:bg-transparent !text-white"
type="text"
@click="renameFile(selectedFile, selectedIndex, true)"
>
<component :is="iconMap.rename" class="!hover:text-gray-400" />
</NcButton>
</NcTooltip>
.ant-carousel :deep(.slick-thumb li) {
@apply w-[60px] h-[45px];
}
<NcTooltip v-if="!isReadonly" color="light" placement="bottom">
<template #title> {{ $t('title.downloadFile') }} </template>
<NcButton
class="!hover:bg-transparent !text-white"
size="xsmall"
type="text"
@click="downloadAttachment(selectedFile)"
>
<component :is="iconMap.download" class="!hover:text-gray-400" />
</NcButton>
</NcTooltip>
.ant-carousel :deep(.slick-thumb li img) {
@apply w-full h-full block;
filter: grayscale(100%);
}
<NcTooltip v-if="!isReadonly" color="light" placement="bottom">
<template #title> {{ $t('title.removeFile') }} </template>
<NcButton
class="!hover:bg-transparent !text-white"
size="xsmall"
type="text"
@click="onRemoveFileClick(selectedFile.title, selectedIndex)"
>
<component
:is="iconMap.delete"
v-if="isSharedForm || (isUIAllowed('dataEdit') && !isPublic)"
class="!hover:text-gray-400"
/>
</NcButton>
</NcTooltip>
</div>
<GeneralDeleteModal v-model:visible="isModalOpen" entity-name="File" :on-delete="() => handleFileDelete(filetoDelete.i)">
<template #entity-preview>
<span>
<div class="flex flex-row items-center py-2.25 px-2.5 bg-gray-50 rounded-lg text-gray-700 mb-4">
<GeneralIcon icon="file" class="nc-view-icon"></GeneralIcon>
<div
class="capitalize text-ellipsis overflow-hidden select-none w-full pl-1.75"
:style="{ wordBreak: 'keep-all', whiteSpace: 'nowrap', display: 'inline' }"
>
{{ filetoDelete.title }}
</div>
</div>
</span>
</template>
</GeneralDeleteModal>
</div>
<!-- <div v-if="openComments && isUIAllowed('commentList') && !isExpandedFormOpen" class="bg-white w-88 min-w-88 max-w-88">
<LazySmartsheetExpandedFormSidebarComments />
</div> -->
</div>
</GeneralOverlay>
</template>
.ant-carousel :deep(.slick-thumb li.slick-active img) {
filter: grayscale(0%);
<style scoped lang="scss">
.carousel-navigation {
@apply absolute text-gray-400 hover:text-white cursor-pointer text-white h-full flex items-center inset-y-0 my-0;
}
</style>
.ant-carousel :deep(.slick-arrow.custom-slick-arrow) {
@apply text-4xl text-white hover:text-primary active:text-accent opacity-100 cursor-pointer z-1;
}
.ant-carousel :deep(.custom-slick-arrow:before) {
display: none;
}
.ant-carousel :deep(.custom-slick-arrow:hover) {
opacity: 0.5;
<style lang="scss">
.nc-attachment-carousel {
@apply w-max;
}
.nc-attachment-img-wrapper {
width: fit-content !important;
.carousel-container {
@apply !w-full flex items-center h-full;
.embla__container {
@apply items-center h-full w-full;
}
}
</style>

209
packages/nc-gui/components/cell/attachment/Modal.vue

@ -16,11 +16,11 @@ const {
FileIcon,
removeFile,
onDrop,
downloadFile,
downloadAttachment,
updateModelValue,
selectedImage,
selectedFile,
selectedVisibleItems,
bulkDownloadFiles,
bulkDownloadAttachments,
renameFile,
} = useAttachmentCell()!
@ -34,7 +34,7 @@ const { isOverDropZone } = useDropZone(dropZoneRef, onDrop)
const { isSharedForm } = useSmartsheetStoreOrThrow()
const { getPossibleAttachmentSrc, openAttachment } = useAttachment()
const { getPossibleAttachmentSrc } = useAttachment()
onKeyDown('Escape', () => {
modalVisible.value = false
@ -42,10 +42,10 @@ onKeyDown('Escape', () => {
})
function onClick(item: Record<string, any>) {
selectedImage.value = item
selectedFile.value = item
modalVisible.value = false
const stopHandle = watch(selectedImage, (nextImage) => {
const stopHandle = watch(selectedFile, (nextImage) => {
if (!nextImage) {
setTimeout(() => {
modalVisible.value = true
@ -82,19 +82,28 @@ const handleFileDelete = (i: number) => {
</script>
<template>
<a-modal
<NcModal
v-model:visible="modalVisible"
wrap-class-name="nc-modal-attachment-expand-cell"
class="nc-attachment-modal"
:class="{ active: modalVisible }"
width="80%"
:footer="null"
wrap-class-name="nc-modal-attachment-expand-cell"
>
<template #title>
<div class="flex gap-4">
<div class="flex justify-between pb-6 gap-4">
<div class="font-semibold text-xl">{{ column?.title }}</div>
<div class="flex items-center gap-2">
<NcButton v-if="selectedVisibleItems.length > 0" size="small" @click="bulkDownloadAttachments">
<div class="flex gap-2 items-center">
<GeneralIcon icon="download" />
{{ $t('activity.bulkDownload') }}
</div>
</NcButton>
<NcButton
v-if="isSharedForm || (!readOnly && isUIAllowed('dataEdit') && !isPublic)"
class="nc-attach-file group"
size="small"
data-testid="attachment-expand-file-picker-button"
@click="open"
>
@ -104,87 +113,101 @@ const handleFileDelete = (i: number) => {
</div>
</NcButton>
<div class="flex items-center gap-2">
{{ $t('labels.viewingAttachmentsOf') }}
<div class="font-semibold underline">{{ column?.title }}</div>
</div>
<NcButton type="secondary" size="small" @click="modalVisible = false">
<GeneralIcon icon="close" />
</NcButton>
</div>
</div>
<div
v-if="selectedVisibleItems.includes(true) && selectedVisibleItems.length > 1"
class="flex flex-1 items-center gap-3 justify-end mr-[30px]"
>
<NcButton type="primary" class="nc-attachment-download-all" @click="bulkDownloadFiles">
{{ $t('activity.bulkDownload') }}
</NcButton>
</div>
<div ref="dropZoneRef" tabindex="0" class="relative">
<div
v-if="isSharedForm || (!readOnly && !dragging && isOverDropZone)"
class="text-white absolute inset-0 bg-white flex flex-col items-center justify-center gap-2 border-dashed border-1 border-gray-700"
>
<MaterialSymbolsFileCopyOutline class="text-accent" height="35" width="35" />
<div class="text-gray-800 text-3xl">{{ $t('labels.dropHere') }}</div>
</div>
</template>
<div ref="dropZoneRef" tabindex="0">
<template v-if="isSharedForm || (!readOnly && !dragging)">
<general-overlay
v-model="isOverDropZone"
inline
class="text-white ring ring-accent ring-opacity-100 bg-gray-700/75 flex items-center justify-center gap-2 backdrop-blur-xl"
>
<MaterialSymbolsFileCopyOutline class="text-accent" height="35" width="35" />
<div class="text-white text-3xl">{{ $t('labels.dropHere') }}</div>
</general-overlay>
</template>
<div ref="sortableRef" :class="{ dragging }" class="grid grid-cols-2 md:grid-cols-3 xl:grid-cols-4 gap-6 relative p-6">
<div v-for="(item, i) of visibleItems" :key="`${item.title}-${i}`" class="flex flex-col group gap-1">
<a-card class="nc-attachment-item group">
<NcCheckbox
v-model:checked="selectedVisibleItems[i]"
class="nc-attachment-checkbox absolute top-2 left-2 group-hover:(opacity-100)"
:class="{ '!opacity-100': selectedVisibleItems[i] }"
<div
ref="sortableRef"
:class="{ dragging }"
class="grid max-h-140 overflow-auto nc-scrollbar-md md:grid-cols-3 xl:grid-cols-5 gap-y-8 gap-x-4 relative"
>
<div
v-for="(item, i) in visibleItems"
:key="`${item?.title}-${i}`"
class="nc-attachment-item group gap-1 flex border-1 rounded-md border-gray-200 flex-col relative"
>
<NcCheckbox
v-model:checked="selectedVisibleItems[i]"
class="nc-attachment-checkbox absolute top-2 left-2 group-hover:(opacity-100)"
:class="{ '!opacity-100': selectedVisibleItems[i] }"
/>
<div
:class="{
'cursor-move': dragging,
'cursor-pointer': !dragging,
}"
class="nc-attachment h-full flex justify-center items-center overflow-hidden"
>
<LazyCellAttachmentPreviewImage
v-if="isImage(item.title, item.mimetype)"
:srcs="getPossibleAttachmentSrc(item, 'card_cover')"
object-fit="cover"
class="!w-full object-cover !m-0 rounded-t-[5px] justify-center"
@click.stop="onClick(item)"
/>
<div
:class="[dragging ? 'cursor-move' : 'cursor-pointer']"
class="nc-attachment h-full w-full flex items-center justify-center overflow-hidden"
>
<LazyCellAttachmentImage
v-if="isImage(item.title, item.mimetype)"
:srcs="getPossibleAttachmentSrc(item)"
class="max-h-full h-64 m-auto justify-center"
@click.stop="onClick(item)"
/>
<component :is="FileIcon(item.icon)" v-else-if="item.icon" :height="45" :width="45" @click.stop="onClick(item)" />
<component
:is="FileIcon(item.icon)"
v-else-if="item.icon"
height="150"
width="150"
@click.stop="openAttachment(item)"
/>
<IcOutlineInsertDriveFile v-else :height="45" :width="45" @click.stop="onClick(item)" />
</div>
<IcOutlineInsertDriveFile v-else height="150" width="150" @click.stop="openAttachment(item)" />
</div>
</a-card>
<div class="relative flex" :title="item.title">
<div class="flex-auto truncate line-height-4">
<div class="relative px-1 pb-1 items-center flex" :title="item.title">
<NcTooltip
show-on-truncate-only
class="flex-auto truncate w-full text-[12px] items-center text-gray-700 text-sm line-height-4"
>
{{ item.title }}
</div>
<div class="flex-none hide-ui transition-all transition-ease-in-out !h-6 flex items-center bg-white">
<template #title>
{{ item.title }}
</template>
</NcTooltip>
<div class="flex-none hide-ui transition-all transition-ease-in-out !h-5 gap-0.5 flex items-center bg-white">
<NcTooltip placement="bottom">
<template #title> {{ $t('title.downloadFile') }} </template>
<NcButton class="!text-gray-500" size="xsmall" type="text" @click="downloadFile(item)">
<component :is="iconMap.download" />
<NcButton
class="!p-0 !w-5 !h-5 text-gray-500 !min-w-[fit-content]"
size="xsmall"
type="text"
@click="downloadAttachment(item)"
>
<component :is="iconMap.download" class="!text-xs h-13px w-13px" />
</NcButton>
</NcTooltip>
<NcTooltip v-if="!isSharedForm || (!readOnly && isUIAllowed('dataEdit') && !isPublic)" placement="bottom">
<template #title> {{ $t('title.renameFile') }} </template>
<NcButton size="xsmall" class="nc-attachment-rename !text-gray-500" type="text" @click="renameFile(item, i)">
<component :is="iconMap.rename" />
<NcButton
size="xsmall"
class="!p-0 nc-attachment-rename !h-5 !w-5 !text-gray-500 !min-w-[fit-content] gap-2"
type="text"
@click="renameFile(item, i)"
>
<component :is="iconMap.rename" class="text-xs h-13px w-13px" />
</NcButton>
</NcTooltip>
<NcTooltip v-if="!readOnly" placement="bottom">
<NcTooltip v-if="isSharedForm || (!readOnly && isUIAllowed('dataEdit') && !isPublic)" placement="bottom">
<template #title> {{ $t('title.removeFile') }} </template>
<NcButton class="!text-red-500" size="xsmall" type="text" @click="onRemoveFileClick(item.title, i)">
<component :is="iconMap.delete" v-if="isSharedForm || (isUIAllowed('dataEdit') && !isPublic)" />
<NcButton
class="!p-0 !h-4 !w-4 !text-red-500 nc-attachment-remove !min-w-[fit-content]"
size="xsmall"
type="text"
@click="onRemoveFileClick(item.title, i)"
>
<component :is="iconMap.delete" class="text-xs h-13px w-13px" />
</NcButton>
</NcTooltip>
</div>
@ -200,6 +223,7 @@ const handleFileDelete = (i: number) => {
</div>
</div>
</div>
<GeneralDeleteModal v-model:visible="isModalOpen" entity-name="File" :on-delete="() => handleFileDelete(filetoDelete.i)">
<template #entity-preview>
<span>
@ -215,48 +239,19 @@ const handleFileDelete = (i: number) => {
</span>
</template>
</GeneralDeleteModal>
</a-modal>
</NcModal>
</template>
<style lang="scss">
.hide-ui {
@apply h-0 w-0 overflow-hidden whitespace-nowrap;
// When the parent with class 'group' is hovered
@apply h-0 w-0 overflow-x-hidden whitespace-nowrap;
.group:hover & {
@apply h-auto w-auto overflow-visible whitespace-normal;
}
}
.nc-attachment-modal {
.nc-attachment-item {
@apply !h-2/3 !min-h-[200px] flex items-center justify-center relative;
@supports (-moz-appearance: none) {
@apply hover:border-0;
}
&::after {
@apply pointer-events-none rounded absolute top-0 left-0 right-0 bottom-0 transition-all duration-150 ease-in-out;
content: '';
}
@supports (-moz-appearance: none) {
&:hover::after {
@apply ring shadow;
}
&:active::after {
@apply ring ring-accent ring-opacity-100 shadow;
}
}
}
.ant-card-body {
@apply !p-2 w-full h-full;
}
.ant-modal-body {
@apply !p-0;
@apply h-[200px] max-h-[200px] flex relative;
}
.dragging {
@ -264,5 +259,9 @@ const handleFileDelete = (i: number) => {
@apply !pointer-events-none;
}
}
.nc-checkbox > .ant-checkbox {
box-shadow: none !important;
}
}
</style>

18
packages/nc-gui/components/cell/attachment/Image.vue → packages/nc-gui/components/cell/attachment/Preview/Image.vue

@ -2,6 +2,7 @@
interface Props {
srcs: string[]
alt?: string
objectFit?: string
}
const props = defineProps<Props>()
@ -12,13 +13,20 @@ const onError = () => index.value++
</script>
<template>
<LazyNuxtImg
v-if="index < props.srcs.length"
class="m-auto h-full max-h-full w-auto nc-attachment-image object-cover"
<!-- Replacing with Image component as nuxt-image is not triggering @error when the image doesn't load. Will fix later
TODO: @DarkPhoenix2704 Fix this later
-->
<img
v-if="index < props.srcs?.length"
:src="props.srcs[index]"
:alt="props?.alt || ''"
placeholder
quality="75"
:placeholder="props.alt"
:class="{
'!object-contain': props.objectFit === 'contain',
}"
loading="lazy"
:alt="props?.alt || ''"
class="m-auto h-full max-h-full w-auto nc-attachment-image object-cover"
@error="onError"
/>
<component :is="iconMap.imagePlaceholder" v-else />

46
packages/nc-gui/components/cell/attachment/Preview/MiscOffice.vue

@ -0,0 +1,46 @@
<script setup lang="ts">
interface Props {
src: string[]
class?: string
}
const props = defineProps<Props>()
const currentIndex = ref(0)
const handleError = () => {
if (currentIndex.value < props.src.length - 1) {
currentIndex.value = currentIndex.value + 1
} else {
currentIndex.value = -1
}
}
const openMethod = ref<'google' | undefined>()
</script>
<template>
<div v-if="!openMethod" :class="props.class" class="flex flex-col text-white gap-2 items-center justify-center">
<GeneralIcon class="w-28 h-28" icon="pdfFile" />
<NcButton type="secondary" @click="openMethod = 'google'">
<div class="flex items-center gap-1">
<GeneralIcon class="w-4 h-4" icon="googleDocs" />
Open with Google Docs
</div>
</NcButton>
</div>
<iframe
v-else-if="openMethod === 'google'"
:class="props.class"
:src="`https://docs.google.com/viewer?url=${encodeURIComponent(src[currentIndex])}&embedded=true`"
width="100%"
height="100%"
frameborder="0"
@error="handleError"
></iframe>
</template>
<style scoped lang="scss"></style>

63
packages/nc-gui/components/cell/attachment/Preview/Pdf.vue

@ -0,0 +1,63 @@
<script setup lang="ts">
interface Props {
src: string[]
class?: string
}
const props = defineProps<Props>()
const currentIndex = ref(0)
const handleError = () => {
if (currentIndex.value < props.src.length - 1) {
currentIndex.value = currentIndex.value + 1
} else {
currentIndex.value = -1
}
}
const openMethod = ref<'browser' | 'google' | undefined>()
</script>
<template>
<div v-if="!openMethod" :class="props.class" class="flex flex-col text-white gap-2 items-center justify-center">
<GeneralIcon class="w-28 h-28" icon="pdfFile" />
<div class="flex items-center justify-center gap-2">
<NcButton class="!w-52" type="secondary" @click="openMethod = 'browser'">
<div class="flex items-center gap-1">
<GeneralIcon icon="globe" class="!text-gray-700" />
Open in browser
</div>
</NcButton>
<NcButton type="secondary" class="!w-52" @click="openMethod = 'google'">
<div class="flex items-center gap-1">
<GeneralIcon class="w-4 h-4" icon="googleDocs" />
Open with Google Docs
</div>
</NcButton>
</div>
</div>
<pdf-object
v-if="openMethod === 'browser'"
:class="props.class"
:url="src[currentIndex]"
class="w-full h-full"
@error="handleError"
/>
<iframe
v-else-if="openMethod === 'google'"
:class="props.class"
type="application/pdf"
:src="`https://docs.google.com/viewer?url=${encodeURIComponent(src[currentIndex])}&embedded=true`"
width="100%"
height="100%"
frameborder="0"
@error="handleError"
></iframe>
</template>
<style scoped lang="scss"></style>

55
packages/nc-gui/components/cell/attachment/Preview/Video.vue

@ -0,0 +1,55 @@
<script setup lang="ts">
import Plyr from 'plyr'
import 'plyr/dist/plyr.css'
interface Props {
src?: string[]
mimeType?: string
class?: string
title?: string
}
const props = withDefaults(defineProps<Props>(), {
class: '',
})
const emit = defineEmits<Emits>()
interface Emits {
(event: 'init', player: any): void
}
const videoPlayer = ref<HTMLElement>()
const player = ref()
onMounted(() => {
if (!videoPlayer.value) return
player.value = new Plyr(videoPlayer.value, {
previewThumbnails: {},
})
emit('init', player.value)
})
onBeforeUnmount(() => {
if (player.value) {
player.value.destroy()
}
})
</script>
<template>
<video
ref="videoPlayer"
controls
playsinline
:class="{
[props.class]: props.class,
}"
class="videoplayer !min-w-128 !min-h-72 w-full"
>
<source v-for="(source, id) in props.src" :key="id" :src="source" :type="mimeType" />
</video>
</template>
<style scoped lang="scss"></style>

12
packages/nc-gui/components/cell/attachment/UploadProviders/Local.vue

@ -106,20 +106,20 @@ onBeforeUnmount(() => {
ref="dropZoneRef"
:class="{
'border-brand-500': isOverDropZone,
'border-dashed border-1': !tempFiles.length,
'border-dashed border-2': !tempFiles.length,
}"
data-testid="attachment-drop-zone"
:style="`height: ${tempFiles.length > 0 ? '324px' : '100%'}`"
class="flex flex-col items-center justify-center h-full w-full flex-grow-1 rounded-lg"
@click="tempFiles.length > 0 ? () => {} : open()"
>
<div v-if="!tempFiles.length" class="flex cursor-pointer items-center justify-center flex-col gap-2">
<div v-if="!tempFiles.length" class="flex cursor-pointer items-center justify-center flex-col gap-4">
<template v-if="!isOverDropZone">
<component :is="iconMap.upload" class="w-5 h-5" />
<component :is="iconMap.upload" class="w-8 h-8 text-gray-500" />
<h1>
{{ $t('labels.clickTo') }}
<span class="font-semibold"> {{ $t('labels.browseFiles') }} </span>
<span class="font-semibold text-brand-500"> {{ $t('labels.browseFiles') }} </span>
{{ $t('general.or') }}
<span class="font-semibold"> {{ $t('labels.dragFilesHere') }} </span>
@ -127,7 +127,7 @@ onBeforeUnmount(() => {
</h1>
</template>
<template v-if="isOverDropZone">
<component :is="iconMap.upload" class="w-5 text-brand-500 h-5" />
<component :is="iconMap.upload" class="w-8 text-brand-500 h-8" />
<h1 class="text-brand-500 font-bold">{{ $t('labels.dropHere') }}</h1>
</template>
</div>
@ -165,7 +165,7 @@ onBeforeUnmount(() => {
</div>
</template>
</div>
<div v-if="tempFiles.length" class="flex gap-2 pt-1 bg-white w-full items-center justify-end">
<div v-if="tempFiles.length" class="flex gap-2 pt-2 bg-white w-full items-center justify-end">
<NcButton :disabled="isLoading" type="secondary" size="small" @click="closeMenu">
{{ $t('labels.cancel') }}
</NcButton>

6
packages/nc-gui/components/cell/attachment/UploadProviders/Url.vue

@ -7,7 +7,7 @@ const emits = defineEmits<{
const { openAttachment } = useAttachment()
const { uploadViaUrl, updateModelValue } = useAttachmentCell()!
const { uploadViaUrl, updateModelValue, attachments } = useAttachmentCell()!
const closeMenu = () => {
emits('update:visible', false)
@ -26,7 +26,7 @@ const tempAttachments = ref<
>([])
const onSave = async () => {
updateModelValue(tempAttachments.value)
updateModelValue([...attachments.value, ...tempAttachments.value])
closeMenu()
}
@ -38,7 +38,7 @@ const deleteAttachment = (index: number) => {
tempAttachments.value.splice(index, 1)
}
const isValidUrl = ref(true)
const isValidUrl = ref(false)
const errorMessage = ref('')

351
packages/nc-gui/components/cell/attachment/index.vue

@ -38,19 +38,22 @@ const { isSharedForm } = useSmartsheetStoreOrThrow()!
const { isMobileMode } = useGlobal()
const { getPossibleAttachmentSrc, openAttachment: _openAttachment } = useAttachment()
const { getPossibleAttachmentSrc } = useAttachment()
const {
isPublic,
isForm,
column,
modalRendered,
downloadAttachment,
renameFile,
modalVisible,
attachments,
visibleItems,
onDrop,
isLoading,
FileIcon,
selectedImage,
selectedFile,
isReadonly,
storedFiles,
removeFile,
@ -60,7 +63,13 @@ const { dragging } = useSortable(sortableRef, visibleItems, updateModelValue, is
const active = inject(ActiveCellInj, ref(false))
const { state: rowState } = useSmartsheetRowStoreOrThrow()
const { state: rowState, row } = useSmartsheetRowStoreOrThrow()
const meta = inject(MetaInj, ref())
if (!isPublic.value && !isForm.value && meta.value) {
useProvideRowComments(meta, row)
}
const { isOverDropZone } = useDropZone(currentCellRef as any, onDrop)
@ -120,10 +129,12 @@ watch(
const isNewAttachmentModalOpen = ref(false)
useSelectedCellKeyupListener(inject(ActiveCellInj, ref(false)), (e) => {
if (e.key === 'Enter' && !isReadonly.value) {
if (modalVisible.value) return
if (e.key === 'Enter' && !isReadonly.value && !selectedFile.value) {
if (isNewAttachmentModalOpen.value) return
e.stopPropagation()
if (!modalVisible.value && !isMobileMode.value) {
modalRendered.value = true
modalVisible.value = true
} else {
// click Attach File button
@ -144,28 +155,18 @@ const open = (e: Event) => {
openAttachmentModal()
}
const openAttachment = (item: any) => {
if (isMobileMode.value && !isExpandedForm.value) {
isExpandedForm.value = true
return
}
_openAttachment(item)
}
const onExpand = () => {
if (isMobileMode.value) return
modalRendered.value = true
modalVisible.value = true
}
const onImageClick = (item: any) => {
const onFileClick = (item: any) => {
if (isMobileMode.value && !isExpandedForm.value) return
if (!isMobileMode.value && (isGallery.value || isKanban.value) && !isExpandedForm.value) return
selectedImage.value = item
selectedFile.value = item
}
const keydownEnter = (e: KeyboardEvent) => {
@ -200,83 +201,184 @@ const handleFileDelete = (i: number) => {
filetoDelete.i = 0
filetoDelete.title = ''
}
const attachmentSize = computed(() => {
if (isForm.value || isExpandedForm.value) {
return 'small'
}
switch (rowHeight.value) {
case 1:
return 'tiny'
case 2:
return 'tiny'
case 4:
return 'small'
case 6:
return 'small'
default:
return 'tiny'
}
})
</script>
<template>
<div v-if="isExpandedForm || isForm" class="form-attachment-cell">
<NcButton data-testid="attachment-cell-file-picker-button" type="secondary" size="small" @click="open">
<div class="flex items-center !text-xs gap-1 justify-center">
<MaterialSymbolsAttachFile class="text-gray-500 text-tiny" />
<span class="text-[10px]">
{{ $t('activity.addFiles') }}
</span>
</div>
</NcButton>
<LazyCellAttachmentCarousel v-if="selectedFile" />
<div v-if="visibleItems.length > 0" class="grid mt-2 gap-2 grid-cols-2">
<div
v-for="(item, i) in visibleItems"
:key="`${item?.title}-${i}`"
class="nc-attachment-item group gap-2 flex border-1 rounded-md border-gray-200 flex-col relative"
>
<div
:class="[dragging ? 'cursor-move' : 'cursor-pointer']"
class="nc-attachment h-full flex justify-center items-center overflow-hidden"
>
<LazyCellAttachmentPreviewImage
v-if="isImage(item.title, item.mimetype)"
:srcs="getPossibleAttachmentSrc(item, 'small')"
object-fit="cover"
class="!w-full !h-42 object-cover !m-0 rounded-t-[5px] justify-center"
@click="onFileClick(item)"
/>
<component :is="FileIcon(item.icon)" v-else-if="item.icon" :height="45" :width="45" @click="selectedFile = item" />
<IcOutlineInsertDriveFile v-else :height="45" :width="45" @click="selectedFile = item" />
</div>
<div class="relative px-1 flex" :title="item.title">
<NcTooltip show-on-truncate-only class="flex-auto truncate w-full text-[13px] items-center text-sm line-height-4">
{{ item.title }}
<template #title>
{{ item.title }}
</template>
</NcTooltip>
<div class="flex-none hide-ui transition-all transition-ease-in-out !h-5 gap-0.5 pb-2 flex items-center bg-white">
<NcTooltip placement="bottom">
<template #title> {{ $t('title.downloadFile') }} </template>
<NcButton
class="!p-0 !w-5 !h-5 text-gray-500 !min-w-[fit-content]"
size="xsmall"
type="text"
@click="downloadAttachment(item)"
>
<component :is="iconMap.download" class="!text-xs h-13px w-13px" />
</NcButton>
</NcTooltip>
<NcTooltip v-if="!isSharedForm || (!isReadonly && isUIAllowed('dataEdit') && !isPublic)" placement="bottom">
<template #title> {{ $t('title.renameFile') }} </template>
<NcButton
size="xsmall"
class="!p-0 nc-attachment-rename !h-5 !w-5 !text-gray-500 !min-w-[fit-content]"
type="text"
@click="renameFile(item, i)"
>
<component :is="iconMap.rename" class="text-xs h-13px w-13px" />
</NcButton>
</NcTooltip>
<NcTooltip v-if="!isReadonly" placement="bottom">
<template #title> {{ $t('title.removeFile') }} </template>
<NcButton
class="!p-0 !h-5 !w-5 !text-red-500 nc-attachment-remove !min-w-[fit-content]"
size="xsmall"
type="text"
@click="onRemoveFileClick(item.title, i)"
>
<component
:is="iconMap.delete"
v-if="isSharedForm || (isUIAllowed('dataEdit') && !isPublic)"
class="text-xs h-13px w-13px"
/>
</NcButton>
</NcTooltip>
</div>
</div>
</div>
</div>
</div>
<div
v-else
ref="attachmentCellRef"
:style="{
height:
isForm || isExpandedForm
? undefined
: `max(${!rowHeight || rowHeight === 1 ? rowHeightInPx['1'] - 10 : rowHeightInPx[`${rowHeight}`] - 18}px, ${
isGrid ? '22px' : '32px'
})`,
height: `max(${!rowHeight || rowHeight === 1 ? rowHeightInPx['1'] - 10 : rowHeightInPx[`${rowHeight}`] - 18}px, ${
isGrid ? '22px' : '32px'
})`,
}"
class="nc-attachment-cell relative flex color-transition gap-2 flex items-center w-full xs:(min-h-12 max-h-32)"
:class="{ 'justify-center': !active, 'justify-between': active, 'px-2': isExpandedForm }"
class="nc-attachment-cell relative group flex color-transition gap-2 flex items-center w-full xs:(min-h-12 max-h-32)"
:class="{ 'justify-center': !active, 'justify-between': active }"
>
<LazyCellAttachmentCarousel />
<LazyCellAttachmentCarousel v-if="selectedFile" />
<template v-if="isSharedForm || (!isReadonly && !dragging && !!currentCellRef)">
<template v-if="!isReadonly && !dragging && !!currentCellRef">
<general-overlay
v-model="isOverDropZone"
inline
:target="currentCellRef"
data-rec="true"
class="nc-attachment-cell-dropzone text-white text-lg ring ring-accent ring-opacity-100 bg-gray-700/75 flex items-center justify-center gap-2 backdrop-blur-xl"
class="nc-attachment-cell-dropzone text-white text-lg bg-gray-600/75 flex text-sm items-center justify-center gap-2"
>
<MaterialSymbolsFileCopyOutline class="text-accent" />
<MaterialSymbolsFileCopyOutline />
{{ $t('labels.dropHere') }}
</general-overlay>
</template>
<div
v-if="!isReadonly"
v-if="!isReadonly && active && !visibleItems.length"
:class="{ 'sm:(mx-auto px-4) xs:(w-full min-w-8)': !visibleItems.length }"
class="group cursor-pointer py-1 flex gap-1 items-center rounded border-none shadow-sm hover:(bg-primary bg-opacity-10)"
data-testid="attachment-cell-file-picker-button"
class="group cursor-pointer py-1 flex gap-1 items-center rounded border-none"
tabindex="0"
@click="open"
@keydown.enter="keydownEnter"
@keydown.space="keydownSpace"
>
<component :is="iconMap.reload" v-if="isLoading" :class="{ 'animate-infinite animate-spin': isLoading }" />
<NcTooltip placement="bottom" class="xs:w-full">
<template #title
><span data-rec="true">{{ $t('activity.attachmentDrop') }} </span></template
>
<template #title>
<span data-rec="true">{{ $t('activity.attachmentDrop') }} </span>
</template>
<div
v-if="active || !visibleItems.length || (isForm && visibleItems.length)"
class="flex items-center gap-1 xs:(w-full min-w-12 h-7 justify-center)"
<NcButton
type="secondary"
size="xsmall"
data-testid="attachment-cell-file-picker-button"
class="!px-2 !h-5.5 !min-w-[fit-content]"
@click.stop="open"
>
<MaterialSymbolsAttachFile class="text-gray-500 text-tiny" />
<div
v-if="!visibleItems.length"
data-rec="true"
class="group-hover:text-primary text-gray-500 dark:text-gray-200 dark:group-hover:!text-white text-tiny xs:(justify-center rounded-lg text-sm)"
>
{{ $t('activity.addFiles') }}
<div class="flex items-center !text-xs gap-1 justify-center">
<MaterialSymbolsAttachFile class="text-gray-500 text-tiny" />
<span class="text-[10px]">
{{ $t('activity.addFiles') }}
</span>
</div>
</div>
</NcButton>
</NcTooltip>
</div>
<div v-else class="flex" />
<template v-if="visibleItems.length">
<template v-if="visibleItems.length > 0">
<div
ref="sortableRef"
:class="{
'justify-center': !isExpandedForm && !isGallery && !isKanban,
'py-1': rowHeight === 1 && !isForm && !isExpandedForm,
'py-1.5 !gap-4 ': rowHeight !== 1 || isForm || isExpandedForm,
'justify-center': !isGallery && !isKanban,
'py-1': rowHeight === 1,
'py-1.5 !gap-4 ': rowHeight !== 1,
}"
class="nc-attachment-wrapper flex cursor-pointer w-full items-center flex-wrap gap-3 nc-scrollbar-thin mt-0 items-start px-[1px]"
:style="{
maxHeight: isForm || isExpandedForm ? undefined : `max(100%, ${isGrid ? '22px' : '32px'})`,
maxHeight: `max(100%, ${isGrid ? '22px' : '32px'})`,
}"
>
<template v-for="(item, i) of visibleItems" :key="item.url || item.title">
@ -287,10 +389,9 @@ const handleFileDelete = (i: number) => {
<div v-if="isImage(item.title, item.mimetype ?? item.type)">
<div
class="nc-attachment flex items-center flex-col flex-wrap justify-center flex-auto"
:class="{ '!w-30': isForm || isExpandedForm }"
@click="() => onImageClick(item)"
@click="() => onFileClick(item)"
>
<LazyCellAttachmentImage
<LazyCellAttachmentPreviewImage
:alt="item.title || `#${i}`"
class="rounded"
:class="{
@ -298,9 +399,9 @@ const handleFileDelete = (i: number) => {
'h-4.5': isGrid && (!rowHeight || rowHeight === 1),
'h-8': rowHeight === 2,
'h-16.8': rowHeight === 4,
'h-20.8': rowHeight === 6 || isForm || isExpandedForm,
'h-20.8': rowHeight === 6,
}"
:srcs="getPossibleAttachmentSrc(item)"
:srcs="getPossibleAttachmentSrc(item, attachmentSize)"
/>
</div>
</div>
@ -312,72 +413,99 @@ const handleFileDelete = (i: number) => {
'h-4.5': isGrid && (!rowHeight || rowHeight === 1),
'h-8': rowHeight === 2,
'h-16.8': rowHeight === 4,
'h-20.8 !w-30': rowHeight === 6 || isForm || isExpandedForm,
'ml-2': active,
'h-20.8 !w-30': rowHeight === 6,
}"
@click="openAttachment(item)"
@click="onFileClick(item)"
>
<component :is="FileIcon(item.icon)" v-if="item.icon" :class="{ 'h-13 w-13': isForm || isExpandedForm }" />
<component :is="FileIcon(item.icon)" v-if="item.icon" />
<IcOutlineInsertDriveFile v-else :class="{ 'h-13 w-13': isForm || isExpandedForm }" />
<IcOutlineInsertDriveFile v-else />
</div>
<a-tooltip v-if="!isReadonly && (isForm || isExpandedForm)">
<template #title> {{ $t('title.removeFile') }} </template>
<component
:is="iconMap.closeCircle"
v-if="isSharedForm || (isUIAllowed('dataEdit') && !isPublic)"
class="nc-attachment-remove"
@click.stop="onRemoveFileClick(item.title, i)"
/>
</a-tooltip>
</NcTooltip>
</template>
</div>
<div
v-if="active || (isForm && visibleItems.length)"
class="xs:hidden group cursor-pointer flex gap-1 items-center rounded border-none p-1"
<NcTooltip
placement="bottom"
class="nc-action-icon !absolute hidden right-0 nc-text-area-expand-btn !group-hover:block z-3"
:class="{
'top-0': isGrid && !(!rowHeight || rowHeight === 1),
'top-1': !isGrid,
}"
:style="isGrid && (!rowHeight || rowHeight === 1) ? { top: '50%', transform: 'translateY(-50%)' } : undefined"
>
<component :is="iconMap.reload" v-if="isLoading" :class="{ 'animate-infinite animate-spin': isLoading }" />
<template #title>{{ $t('activity.viewAttachment') }}</template>
<NcButton
type="secondary"
size="xsmall"
data-testid="attachment-cell-file-picker-button"
class="!p-0 !w-5 !h-5 !min-w-[fit-content]"
@click.stop="onExpand"
>
<component :is="iconMap.reload" v-if="isLoading" :class="{ 'animate-infinite animate-spin': isLoading }" />
<NcTooltip v-else placement="bottom" class="flex">
<template #title> {{ $t('activity.viewAttachment') }}</template>
<component :is="iconMap.expand" v-else class="transform group-hover:(!text-grey-800) text-gray-700 text-xs" />
</NcButton>
</NcTooltip>
<NcButton type="text" size="xsmall" @click.stop="onExpand">
<component :is="iconMap.expand" />
</NcButton>
</NcTooltip>
</div>
<NcTooltip
placement="bottom"
class="nc-action-icon !absolute hidden left-0 nc-text-area-expand-btn !group-hover:block z-3"
:class="{
'top-0': isGrid && !(!rowHeight || rowHeight === 1),
'top-1': !isGrid,
}"
:style="isGrid && (!rowHeight || rowHeight === 1) ? { top: '50%', transform: 'translateY(-50%)' } : undefined"
>
<template #title>{{ $t('activity.addFiles') }}</template>
<NcButton
type="secondary"
size="xsmall"
data-testid="attachment-cell-file-picker-button"
class="!p-0 !w-5 !h-5 !min-w-[fit-content]"
@click.stop="open"
>
<MaterialSymbolsAttachFile class="text-gray-500 text-tiny group-hover:(!text-grey-800) text-gray-700" />
</NcButton>
</NcTooltip>
</template>
<LazyCellAttachmentModal />
<LazyGeneralDeleteModal
v-if="isForm || isExpandedForm"
v-model:visible="isConfirmModalOpen"
entity-name="File"
:on-delete="() => handleFileDelete(filetoDelete.i)"
>
<template #entity-preview>
<span>
<div class="flex flex-row items-center py-2.25 px-2.5 bg-gray-50 rounded-lg text-gray-700 mb-4">
<GeneralIcon icon="file" class="nc-view-icon"></GeneralIcon>
<div
class="capitalize text-ellipsis overflow-hidden select-none w-full pl-1.75"
:style="{ wordBreak: 'keep-all', whiteSpace: 'nowrap', display: 'inline' }"
>
{{ filetoDelete.title }}
</div>
</div>
</span>
</template>
</LazyGeneralDeleteModal>
<LazyCellAttachmentModal v-if="modalRendered" />
</div>
<LazyGeneralDeleteModal
v-if="isForm || isExpandedForm"
v-model:visible="isConfirmModalOpen"
entity-name="File"
:on-delete="() => handleFileDelete(filetoDelete.i)"
>
<template #entity-preview>
<span>
<div class="flex flex-row items-center py-2.25 px-2.5 bg-gray-50 rounded-lg text-gray-700 mb-4">
<GeneralIcon icon="file" class="nc-view-icon"></GeneralIcon>
<div
class="capitalize text-ellipsis overflow-hidden select-none w-full pl-1.75"
:style="{ wordBreak: 'keep-all', whiteSpace: 'nowrap', display: 'inline' }"
>
{{ filetoDelete.title }}
</div>
</div>
</span>
</template>
</LazyGeneralDeleteModal>
<LazyCellAttachmentAttachFile v-if="isNewAttachmentModalOpen" v-model:value="isNewAttachmentModalOpen" />
</template>
<style lang="scss">
.nc-data-cell {
&:has(.form-attachment-cell) {
@apply !border-none;
box-shadow: none !important;
}
.nc-cell-attachment {
@apply !border-none;
}
}
.nc-cell {
.nc-attachment-cell {
.nc-attachment {
@ -397,15 +525,6 @@ const handleFileDelete = (i: number) => {
}
.nc-attachment-item {
@apply relative;
.nc-attachment-remove {
@apply absolute right-0.8 top-0.8 rounded hidden p-0.5 bg-white text-lg leading-none;
box-shadow: 0px 0px 4px #bbb;
}
&:hover .nc-attachment-remove {
@apply block;
}
}
}
</style>

67
packages/nc-gui/components/cell/attachment/utils.ts

@ -1,7 +1,6 @@
import type { AttachmentReqType, AttachmentType } from 'nocodb-sdk'
import { populateUniqueFileName } from 'nocodb-sdk'
import DOMPurify from 'isomorphic-dompurify'
import { saveAs } from 'file-saver'
import RenameFile from './RenameFile.vue'
import MdiPdfBox from '~icons/mdi/pdf-box'
import MdiFileWordOutline from '~icons/mdi/file-word-outline'
@ -11,6 +10,14 @@ import IcOutlineInsertDriveFile from '~icons/ic/outline-insert-drive-file'
export const [useProvideAttachmentCell, useAttachmentCell] = useInjectionState(
(updateModelValue: (data: string | Record<string, any>[]) => void) => {
const { $api } = useNuxtApp()
const baseURL = $api.instance.defaults.baseURL
const { row } = useSmartsheetRowStoreOrThrow()
const { fetchSharedViewAttachment } = useSharedView()
const isReadonly = inject(ReadonlyInj, ref(false))
const { t } = useI18n()
@ -30,10 +37,12 @@ export const [useProvideAttachmentCell, useAttachmentCell] = useInjectionState(
const attachments = ref<AttachmentType[]>([])
const modalRendered = ref(false)
const modalVisible = ref(false)
/** for image carousel */
const selectedImage = ref()
const selectedFile = ref()
const videoStream = ref<MediaStream | null>(null)
@ -47,9 +56,9 @@ export const [useProvideAttachmentCell, useAttachmentCell] = useInjectionState(
reset: true,
})
const { appInfo } = useGlobal()
const isRenameModalOpen = ref(false)
const { getAttachmentSrc } = useAttachment()
const { appInfo } = useGlobal()
const defaultAttachmentMeta = {
...(appInfo.value.ee && {
@ -257,18 +266,26 @@ export const [useProvideAttachmentCell, useAttachmentCell] = useInjectionState(
}
}
async function renameFile(attachment: AttachmentType, idx: number) {
async function renameFile(attachment: AttachmentType, idx: number, updateSelectedFile?: boolean) {
return new Promise<boolean>((resolve) => {
isRenameModalOpen.value = true
const { close } = useDialog(RenameFile, {
title: attachment.title,
onRename: (newTitle: string) => {
attachments.value[idx].title = newTitle
updateModelValue(JSON.stringify(attachments.value))
close()
if (updateSelectedFile) {
selectedFile.value = { ...attachment, title: newTitle }
}
isRenameModalOpen.value = false
resolve(true)
},
onCancel: () => {
close()
isRenameModalOpen.value = false
resolve(true)
},
})
@ -314,16 +331,36 @@ export const [useProvideAttachmentCell, useAttachmentCell] = useInjectionState(
}
/** bulk download selected files */
async function bulkDownloadFiles() {
await Promise.all(selectedVisibleItems.value.map(async (v, i) => v && (await downloadFile(visibleItems.value[i]))))
async function bulkDownloadAttachments() {
await Promise.all(selectedVisibleItems.value.map(async (v, i) => v && (await downloadAttachment(visibleItems.value[i]))))
selectedVisibleItems.value = Array.from({ length: visibleItems.value.length }, () => false)
}
/** download a file */
async function downloadFile(item: AttachmentType) {
const src = await getAttachmentSrc(item)
if (src) {
saveAs(src, item.title)
async function downloadAttachment(item: AttachmentType) {
if (!meta.value || !column.value) return
const modelId = meta.value.id
const columnId = column.value.id
const rowId = extractPkFromRow(unref(row).row, meta.value.columns!)
const src = item.url || item.path
if (modelId && columnId && rowId && src) {
const apiPromise = isPublic.value
? () => fetchSharedViewAttachment(columnId, rowId, src)
: () =>
$api.dbDataTableRow.attachmentDownload(modelId, columnId, rowId, {
urlOrPath: src,
})
await apiPromise().then((res) => {
if (res?.path) {
window.open(`${baseURL}/${res.path}`, '_blank')
} else if (res?.url) {
window.open(res.url, '_blank')
} else {
message.error('Failed to download file')
}
})
} else {
message.error('Failed to download file')
}
@ -380,22 +417,24 @@ export const [useProvideAttachmentCell, useAttachmentCell] = useInjectionState(
api,
open: () => open(),
onDrop,
modalRendered,
modalVisible,
FileIcon,
removeFile,
renameFile,
downloadFile,
downloadAttachment,
updateModelValue,
selectedImage,
selectedFile,
uploadViaUrl,
selectedVisibleItems,
storedFiles,
bulkDownloadFiles,
bulkDownloadAttachments,
defaultAttachmentMeta,
startCamera,
stopCamera,
videoStream,
permissionGranted,
isRenameModalOpen,
}
},
'useAttachmentCell',

4
packages/nc-gui/components/dashboard/Sidebar.vue

@ -56,7 +56,9 @@ onUnmounted(() => {
>
<DashboardTreeView v-if="!isWorkspaceLoading" />
</div>
<div v-if="!isSharedBase" class="border-t-1">
<div v-if="!isSharedBase" class="overflow-auto">
<GeneralGift v-if="!isEeUI" />
<div class="border-t-1 w-full"></div>
<DashboardSidebarBeforeUserInfo />
<DashboardSidebarUserInfo />
</div>

34
packages/nc-gui/components/dashboard/Sidebar/TopSection.vue

@ -8,9 +8,9 @@ const { appInfo } = useGlobal()
const { meta: metaKey, control } = useMagicKeys()
const { isWorkspaceLoading, isWorkspaceSettingsPageOpened } = storeToRefs(workspaceStore)
const { isWorkspaceLoading, isWorkspaceSettingsPageOpened, isIntegrationsPageOpened } = storeToRefs(workspaceStore)
const { navigateToWorkspaceSettings } = workspaceStore
const { navigateToWorkspaceSettings, navigateToIntegrations: _navigateToIntegrations } = workspaceStore
const { isSharedBase } = storeToRefs(baseStore)
@ -27,6 +27,12 @@ const navigateToSettings = () => {
// } else {
// }
}
const navigateToIntegrations = () => {
const cmdOrCtrl = isMac() ? metaKey.value : control.value
_navigateToIntegrations('', cmdOrCtrl)
}
</script>
<template>
@ -74,6 +80,30 @@ const navigateToSettings = () => {
<div>{{ $t('title.teamAndSettings') }}</div>
</div>
</NcButton>
<NcButton
v-if="isUIAllowed('workspaceSettings')"
v-e="['c:integrations']"
type="text"
size="xsmall"
class="nc-sidebar-top-button !xs:hidden my-0.5 !h-7"
data-testid="nc-sidebar-integrations-btn"
:centered="false"
:class="{
'!text-brand-600 !bg-brand-50 !hover:bg-brand-50': isIntegrationsPageOpened,
'!hover:(bg-gray-200 text-gray-700)': !isIntegrationsPageOpened,
}"
@click="navigateToIntegrations"
>
<div
class="flex items-center gap-2"
:class="{
'font-semibold': isIntegrationsPageOpened,
}"
>
<GeneralIcon icon="integration" class="!h-4" />
<div>{{ $t('general.integrations') }}</div>
</div>
</NcButton>
<WorkspaceCreateProjectBtn
v-model:is-open="isCreateProjectOpen"
modal

20
packages/nc-gui/components/dashboard/TreeView/ProjectNode.vue

@ -29,7 +29,7 @@ const { isMobileMode } = useGlobal()
const { api } = useApi()
const { auditLogsQuery, auditCurrentPage } = storeToRefs(useWorkspace())
const { auditLogsQuery, auditPaginationData } = storeToRefs(useWorkspace())
const { createProject: _createProject, updateProject, getProjectMetaInfo, loadProject } = basesStore
@ -454,7 +454,7 @@ const getSource = (sourceId: string) => {
async function openAudit(source: SourceType) {
$e('c:project:audit')
auditCurrentPage.value = 1
auditPaginationData.value.page = 1
auditLogsQuery.value = {
...auditLogsQuery.value,
@ -739,7 +739,7 @@ async function openAudit(source: SourceType) {
v-e="['c:source:toggle-expand']"
class="!mx-0 !px-0 nc-sidebar-source-node"
:class="[{ hidden: searchActive && !!filterQuery }]"
expand-icon-position="left"
expand-icon-position="right"
:bordered="false"
ghost
>
@ -771,7 +771,7 @@ async function openAudit(source: SourceType) {
</div>
<div
v-else
class="source-context flex flex-grow items-center gap-1.75 text-gray-800 min-w-1/20 max-w-full"
class="source-context flex flex-grow items-center gap-1 text-gray-800 min-w-1/20 max-w-full"
@contextmenu="setMenuContext('source', source)"
>
<NcTooltip
@ -785,10 +785,12 @@ async function openAudit(source: SourceType) {
<template #title>
<component :is="getSourceTooltip(source)" />
</template>
<GeneralBaseLogo
:color="getSourceIconColor(source)"
class="flex-none min-w-4 !xs:(min-w-4.25 w-4.25 text-sm)"
/>
<div class="flex-none w-6 flex items-center justify-center">
<GeneralBaseLogo
:color="getSourceIconColor(source)"
class="flex-none min-w-4 !xs:(min-w-4.25 w-4.25 text-sm)"
/>
</div>
</NcTooltip>
<input
v-if="source.id && sourceRenameHelpers[source.id]?.editMode"
@ -991,7 +993,7 @@ async function openAudit(source: SourceType) {
<style lang="scss" scoped>
:deep(.ant-collapse-header) {
@apply !mx-0 !pl-8.75 h-7 !xs:(pl-7 h-[3rem]) !pr-0.5 !py-0 hover:bg-gray-200 xs:(hover:bg-gray-50) !rounded-md;
@apply !mx-0 !pl-7.5 h-7 !xs:(pl-6 h-[3rem]) !pr-0.5 !py-0 hover:bg-gray-200 xs:(hover:bg-gray-50) !rounded-md;
.ant-collapse-arrow {
@apply !right-1 !xs:(flex-none border-1 border-gray-200 w-6.5 h-6.5 mr-1);

63
packages/nc-gui/components/dashboard/TreeView/TableNode.vue

@ -1,5 +1,5 @@
<script lang="ts" setup>
import type { BaseType, TableType } from 'nocodb-sdk'
import { type BaseType, type TableType, type ViewType, ViewTypes } from 'nocodb-sdk'
import { toRef } from '@vue/reactivity'
import { message } from 'ant-design-vue'
import { storeToRefs } from 'pinia'
@ -47,10 +47,12 @@ provide(SidebarTableInj, table)
const { setMenuContext, openRenameTableDialog: _openRenameTableDialog, duplicateTable: _duplicateTable } = inject(TreeViewInj)!
const { loadViews: _loadViews } = useViewsStore()
const { loadViews: _loadViews, navigateToView } = useViewsStore()
const { activeView, activeViewTitleOrId, viewsByTable } = storeToRefs(useViewsStore())
const { isLeftSidebarOpen } = storeToRefs(useSidebarStore())
const { refreshCommandPalette } = useCommandPalette()
// todo: temp
const { baseTables } = storeToRefs(useTablesStore())
const tables = computed(() => baseTables.value.get(base.value.id!) ?? [])
@ -207,6 +209,53 @@ const deleteTable = () => {
isTableDeleteDialogVisible.value = true
}
function onDuplicate() {
isOptionsOpen.value = false
const views = viewsByTable.value.get(table.value.id as string)
const defaultView = views?.find((v) => v.is_default) || views?.[0]
const isOpen = ref(true)
const { close } = useDialog(resolveComponent('DlgViewCreate'), {
'modelValue': isOpen,
'title': defaultView!.title,
'type': defaultView!.type as ViewTypes,
'tableId': table.value!.id,
'selectedViewId': defaultView!.id,
'groupingFieldColumnId': defaultView!.view!.fk_grp_col_id,
'views': views,
'calendarRange': defaultView!.view!.calendar_range,
'coverImageColumnId': defaultView!.view!.fk_cover_image_col_id,
'onUpdate:modelValue': closeDialog,
'onCreated': async (view: ViewType) => {
closeDialog()
refreshCommandPalette()
await _loadViews({
force: true,
tableId: table.value!.id!,
})
navigateToView({
view,
tableId: table.value!.id!,
baseId: base.value.id!,
hardReload: view.type === ViewTypes.FORM,
})
$e('a:view:create', { view: view.type, sidebar: true })
},
})
function closeDialog() {
isOpen.value = false
close(1000)
}
}
// TODO: Should find a way to render the components without using the `nextTick` function
const refreshViews = async () => {
isExpanded.value = false
@ -368,6 +417,16 @@ const source = computed(() => {
{{ $t('general.duplicate') }} {{ $t('objects.table').toLowerCase() }}
</div>
</NcMenuItem>
<NcDivider />
<NcMenuItem class="!text-gray-700" @click="onDuplicate">
<GeneralIcon class="nc-view-copy-icon" icon="duplicate" />
{{
$t('general.duplicateEntity', {
entity: $t('title.defaultView').toLowerCase(),
})
}}
</NcMenuItem>
<NcDivider />
<NcMenuItem

53
packages/nc-gui/components/dashboard/TreeView/ViewsList.vue

@ -32,6 +32,8 @@ const { isUIAllowed } = useRoles()
const { isMobileMode } = useGlobal()
const { isSharedBase } = storeToRefs(useBase())
const { $e } = useNuxtApp()
const { t } = useI18n()
@ -400,36 +402,37 @@ function onOpenModal({
:selected-keys="selected"
class="nc-views-menu flex flex-col w-full !border-r-0 !bg-inherit"
>
<DashboardTreeViewCreateViewBtn
v-if="isUIAllowed('viewCreateOrEdit')"
:align-left-level="isDefaultSource ? 1 : 2"
:class="{
'!pl-13.3 !xs:(pl-13.5)': isDefaultSource,
'!pl-18.6 !xs:(pl-20)': !isDefaultSource,
}"
:source="source"
>
<div
<template v-if="!isSharedBase">
<DashboardTreeViewCreateViewBtn
v-if="isUIAllowed('viewCreateOrEdit')"
:align-left-level="isDefaultSource ? 1 : 2"
:class="{
'text-brand-500 hover:text-brand-600': activeTableId === table.id,
'text-gray-500 hover:text-brand-500': activeTableId !== table.id,
'!pl-13.3 !xs:(pl-13.5)': isDefaultSource,
'!pl-18.6 !xs:(pl-20)': !isDefaultSource,
}"
class="nc-create-view-btn flex flex-row items-center cursor-pointer rounded-md w-full"
role="button"
:source="source"
>
<div class="flex flex-row items-center pl-1.25 !py-1.5 text-inherit">
<GeneralIcon icon="plus" />
<div class="pl-1.75">
{{
$t('general.createEntity', {
entity: $t('objects.view'),
})
}}
<div
:class="{
'text-brand-500 hover:text-brand-600': activeTableId === table.id,
'text-gray-500 hover:text-brand-500': activeTableId !== table.id,
}"
class="nc-create-view-btn flex flex-row items-center cursor-pointer rounded-md w-full"
role="button"
>
<div class="flex flex-row items-center pl-1.25 !py-1.5 text-inherit">
<GeneralIcon icon="plus" />
<div class="pl-1.75">
{{
$t('general.createEntity', {
entity: $t('objects.view'),
})
}}
</div>
</div>
</div>
</div>
</DashboardTreeViewCreateViewBtn>
</DashboardTreeViewCreateViewBtn>
</template>
<template v-if="views.length">
<DashboardTreeViewViewsNode
v-for="view of views"

10
packages/nc-gui/components/dashboard/View.vue

@ -47,6 +47,11 @@ watch(currentSidebarSize, () => {
const sidebarWidth = computed(() => (isMobileMode.value ? viewportWidth.value : sideBarSize.value.old))
const remToPx = (rem: number) => {
const fontSize = parseFloat(getComputedStyle(document.documentElement).fontSize)
return rem * fontSize
}
const normalizedWidth = computed(() => {
const maxSize = remToPx(viewportWidth.value <= 1560 ? 20 : 35)
const minSize = remToPx(16)
@ -147,11 +152,6 @@ onMounted(() => {
handleSidebarOpenOnMobileForNonViews()
})
function remToPx(rem: number) {
const fontSize = parseFloat(getComputedStyle(document.documentElement).fontSize)
return rem * fontSize
}
function onResize(widthPercent: any) {
if (isMobileMode.value) return

383
packages/nc-gui/components/dashboard/settings/DataSources.vue

@ -42,6 +42,8 @@ const isReloading = ref(false)
const isDeleteBaseModalOpen = ref(false)
const toBeDeletedBase = ref<SourceType | undefined>()
const searchQuery = ref<string>('')
async function updateIfSourceOrderIsNullOrDuplicate() {
const sourceOrderSet = new Set()
let hasNullOrDuplicates = false
@ -263,24 +265,51 @@ const isNewBaseModalOpen = computed({
},
})
const activeSource = ref<SourceType>(null)
const activeSource = ref<SourceType | null>(null)
const openedTab = ref('erd')
const isSearchResultAvailable = () => {
return (
sources.value.filter((s) => s?.alias?.toLowerCase()?.includes(searchQuery.value?.toLowerCase())).length ||
'default'.includes(searchQuery.value?.toLowerCase())
)
}
const isOpenModal = computed({
get: () => !!activeSource.value,
set: (value) => {
if (!value) {
activeSource.value = null
}
},
})
const handleClickRow = (source: SourceType, tab?: string) => {
if (tab && tab !== openedTab.value) {
openedTab.value = tab
}
activeSource.value = source
}
</script>
<template>
<div class="flex flex-col h-full" data-testid="nc-settings-datasources-tab">
<div class="px-4 py-2 flex justify-between">
<a-breadcrumb separator=">" class="w-full cursor-pointer font-weight-bold">
<a-breadcrumb-item @click="activeSource = null">
<a class="!no-underline">Data Sources</a>
</a-breadcrumb-item>
<a-breadcrumb-item v-if="activeSource">
<span class="capitalize">{{ activeSource.alias || 'Default Source' }}</span>
</a-breadcrumb-item>
</a-breadcrumb>
<div class="px-1 pt-3 mb-6 flex items-center justify-between gap-3">
<a-input
v-model:value="searchQuery"
type="text"
class="nc-search-data-source-input !max-w-90 nc-input-sm"
placeholder="Search data source"
allow-clear
>
<template #prefix>
<GeneralIcon icon="search" class="mr-2 h-4 w-4 text-gray-500" />
</template>
</a-input>
<NcButton
v-if="!isDataSourceLimitReached && !activeSource && isUIAllowed('sourceCreate')"
v-if="!isDataSourceLimitReached && isUIAllowed('sourceCreate')"
size="large"
class="z-10 !px-2"
type="primary"
@ -292,96 +321,136 @@ const openedTab = ref('erd')
</div>
</NcButton>
</div>
<div data-testid="nc-settings-datasources" class="flex flex-row w-full nc-data-sources-view flex-grow min-h-0">
<template v-if="activeSource">
<NcTabs v-model:activeKey="openedTab" class="nc-source-tab w-full">
<a-tab-pane key="erd">
<template #tab>
<div class="tab" data-testid="nc-erd-tab">
<div>{{ $t('title.erdView') }}</div>
<div
data-testid="nc-settings-datasources"
class="flex flex-row w-full nc-data-sources-view flex-grow min-h-0"
:style="{
maxHeight: isNewBaseModalOpen ? '100%' : activeSource ? 'calc(100% - 46px)' : 'calc(100% - 66px)',
}"
>
<NcModal
v-model:visible="isOpenModal"
centered
size="large"
wrap-class-name="nc-active-data-sources-view"
@keydown.esc="activeSource = null"
>
<div v-if="activeSource" class="h-full">
<div class="px-4 pt-4 pb-2 flex items-center justify-between gap-3">
<a-breadcrumb separator=">" class="flex-1 cursor-pointer font-weight-bold !ml-1">
<a-breadcrumb-item @click="activeSource = null">
<a class="!no-underline text-base">Data Sources</a>
</a-breadcrumb-item>
<a-breadcrumb-item v-if="activeSource">
<span class="capitalize text-base">{{ activeSource.alias || 'Default Source' }}</span>
</a-breadcrumb-item>
</a-breadcrumb>
<NcButton size="small" type="text" class="nc-close-btn" @click="isOpenModal = false">
<GeneralIcon icon="close" class="text-gray-600" />
</NcButton>
</div>
<NcTabs v-model:activeKey="openedTab" class="nc-source-tab w-full h-[calc(100%_-_58px)] max-h-[calc(100%_-_58px)]">
<a-tab-pane v-if="!activeSource.is_meta && !activeSource.is_local" key="edit">
<template #tab>
<div class="tab" data-testid="nc-connection-tab">
<div>{{ $t('labels.connectionDetails') }}</div>
</div>
</template>
<div class="h-full">
<LazyDashboardSettingsDataSourcesEditBase
:source-id="activeSource.id"
@source-updated="loadBases(true)"
@close="activeSource = null"
/>
</div>
</template>
<div class="h-full pt-4">
<LazyDashboardSettingsErd
class="h-full overflow-auto"
:base-id="baseId"
:source-id="activeSource.id"
:show-all-columns="false"
/>
</div>
</a-tab-pane>
<a-tab-pane v-if="sources && activeSource === sources[0]" key="audit">
<template #tab>
<div class="tab" data-testid="nc-audit-tab">
<div>{{ $t('title.auditLogs') }}</div>
</a-tab-pane>
<a-tab-pane key="erd">
<template #tab>
<div class="tab" data-testid="nc-erd-tab">
<div>{{ $t('title.erdView') }}</div>
</div>
</template>
<div class="h-full p-6">
<LazyDashboardSettingsErd
class="h-full overflow-auto"
:base-id="base.id"
:source-id="activeSource.id"
:show-all-columns="false"
/>
</div>
</template>
<div class="p-4 h-full">
<LazyDashboardSettingsBaseAudit :source-id="activeSource.id" />
</div>
</a-tab-pane>
<a-tab-pane v-if="!activeSource.is_meta && !activeSource.is_local" key="edit">
<template #tab>
<div class="tab" data-testid="nc-connection-tab">
<div>{{ $t('labels.connectionDetails') }}</div>
</a-tab-pane>
<a-tab-pane v-if="sources && activeSource === sources[0]" key="audit">
<template #tab>
<div class="tab" data-testid="nc-audit-tab">
<div>{{ $t('title.auditLogs') }}</div>
</div>
</template>
<div class="p-6 h-full">
<LazyDashboardSettingsBaseAudit :source-id="activeSource.id" />
</div>
</template>
<div class="p-6 mt-4 h-full overflow-auto">
<LazyDashboardSettingsDataSourcesEditBase
class="w-760px pr-5"
:source-id="activeSource.id"
@source-updated="loadBases(true)"
@close="activeSource = null"
/>
</div>
</a-tab-pane>
</a-tab-pane>
<a-tab-pane key="acl">
<template #tab>
<div class="tab" data-testid="nc-acl-tab">
<div>{{ $t('labels.uiAcl') }}</div>
</div>
</template>
<a-tab-pane key="acl">
<template #tab>
<div class="tab" data-testid="nc-acl-tab">
<div>{{ $t('labels.uiAcl') }}</div>
<div class="p-6 h-full">
<LazyDashboardSettingsUIAcl :source-id="activeSource.id" />
</div>
</template>
<div class="pt-4 h-full">
<LazyDashboardSettingsUIAcl :source-id="activeSource.id" />
</div>
</a-tab-pane>
<a-tab-pane v-if="!activeSource.is_meta && !activeSource.is_local" key="meta-sync">
<template #tab>
<div class="tab" data-testid="nc-meta-sync-tab">
<div>{{ $t('labels.metaSync') }}</div>
</a-tab-pane>
<a-tab-pane v-if="!activeSource.is_meta && !activeSource.is_local" key="meta-sync">
<template #tab>
<div class="tab" data-testid="nc-meta-sync-tab">
<div>{{ $t('labels.metaSync') }}</div>
</div>
</template>
<div class="p-6 h-full">
<LazyDashboardSettingsMetadata :source-id="activeSource.id" @source-synced="loadBases(true)" />
</div>
</template>
<div class="pt-4 h-full">
<LazyDashboardSettingsMetadata :source-id="activeSource.id" @source-synced="loadBases(true)" />
</div>
</a-tab-pane>
</NcTabs>
</template>
<div v-else class="flex flex-col w-full overflow-auto mt-1">
<div
class="overflow-y-auto nc-scrollbar-md"
:style="{
maxHeight: 'calc(100vh - 200px)',
}"
>
<div class="ds-table-head">
<div class="ds-table-row">
</a-tab-pane>
</NcTabs>
</div>
</NcModal>
<div
class="flex flex-col w-full"
:class="{
'overflow-auto': !isNewBaseModalOpen,
}"
>
<template v-if="isNewBaseModalOpen">
<DashboardSettingsDataSourcesCreateBase
v-model:open="isNewBaseModalOpen"
:connection-type="clientType"
is-modal
@source-created="loadBases(true)"
/>
</template>
<div v-else class="ds-table overflow-y-auto nc-scrollbar-thin relative max-h-full mx-1 mb-4">
<div class="ds-table-head sticky top-0 bg-white z-10">
<div class="ds-table-row !border-0">
<div class="ds-table-col ds-table-enabled cursor-pointer">{{ $t('general.visibility') }}</div>
<div class="ds-table-col ds-table-name">{{ $t('general.name') }}</div>
<div class="ds-table-col ds-table-integration-name">{{ $t('general.connection') }} {{ $t('general.name') }}</div>
<div class="ds-table-col ds-table-type">{{ $t('general.type') }}</div>
<div class="ds-table-col ds-table-actions">{{ $t('labels.actions') }}</div>
</div>
</div>
<div class="ds-table-body">
<div class="ds-table-body relative">
<Draggable :list="sources" item-key="id" handle=".ds-table-handle" @end="moveBase">
<template #header>
<div v-if="sources[0]" class="ds-table-row border-gray-200 cursor-pointer" @click="activeSource = sources[0]">
<template v-if="'default'.includes(searchQuery.toLowerCase())" #header>
<div
v-if="sources[0]"
class="ds-table-row border-gray-200 cursor-pointer"
@click="handleClickRow(sources[0], 'erd')"
>
<div class="ds-table-col ds-table-enabled">
<div class="flex items-center gap-1" @click.stop>
<div v-if="sources.length > 2" class="ds-table-handle" />
<a-tooltip>
<NcTooltip>
<template #title>
<template v-if="sources[0].enabled">{{ $t('activity.hideInUI') }}</template>
<template v-else>{{ $t('activity.showInUI') }}</template>
@ -392,7 +461,7 @@ const openedTab = ref('erd')
size="small"
@change="toggleBase(sources[0], $event)"
/>
</a-tooltip>
</NcTooltip>
</div>
</div>
<div class="ds-table-col ds-table-name font-medium">
@ -402,6 +471,9 @@ const openedTab = ref('erd')
</div>
</div>
<div class="ds-table-col ds-table-integration-name">
<div class="flex items-center gap-1">-</div>
</div>
<div class="ds-table-col ds-table-type">
<div class="flex items-center gap-1">-</div>
</div>
@ -420,11 +492,18 @@ const openedTab = ref('erd')
</div>
</template>
<template #item="{ element: source, index }">
<div v-if="index !== 0" class="ds-table-row border-gray-200 cursor-pointer" @click="activeSource = source">
<div
v-if="index !== 0"
class="ds-table-row border-gray-200 cursor-pointer"
:class="{
'!hidden': !source?.alias?.toLowerCase()?.includes(searchQuery.toLowerCase()),
}"
@click="handleClickRow(source, 'edit')"
>
<div class="ds-table-col ds-table-enabled">
<div class="flex items-center gap-1" @click.stop>
<GeneralIcon v-if="sources.length > 2" icon="dragVertical" small class="ds-table-handle" />
<a-tooltip>
<NcTooltip>
<template #title>
<template v-if="source.enabled">{{ $t('activity.hideInUI') }}</template>
<template v-else>{{ $t('activity.showInUI') }}</template>
@ -435,48 +514,91 @@ const openedTab = ref('erd')
size="small"
@change="toggleBase(source, $event)"
/>
</a-tooltip>
</NcTooltip>
</div>
</div>
<div class="ds-table-col ds-table-name font-medium w-full">
<div v-if="source.is_meta || source.is_local" class="h-8 w-1">-</div>
<span v-else class="truncate">
{{ source.is_meta || source.is_local ? $t('general.base') : source.alias }}
</span>
</div>
<div class="ds-table-col ds-table-type">
<div class="flex items-center gap-2">
<GeneralBaseLogo :source-type="source.type" />
<span class="text-gray-700 capitalize">{{ source.type }}</span>
</div>
<NcTooltip v-else class="truncate" show-on-truncate-only>
<template #title>
{{ source.is_meta || source.is_local ? $t('general.base') : source.alias }}
</template>
{{ source.is_meta || source.is_local ? $t('general.base') : source.alias }}
</NcTooltip>
</div>
<div class="ds-table-col justify-end gap-x-1 ds-table-actions">
<NcTooltip>
<div class="ds-table-col ds-table-integration-name w-full">
<NcTooltip class="truncate" show-on-truncate-only>
<template #title>
{{ $t('general.remove') }}
{{ source?.integration_title || '-' }}
</template>
<NcButton
v-if="!source.is_meta && !source.is_local"
size="small"
class="nc-action-btn nc-delete-base cursor-pointer outline-0 !w-8 !px-1 !rounded-lg"
type="text"
@click.stop="openDeleteBase(source)"
>
<GeneralIcon icon="delete" class="text-red-500" />
</NcButton>
{{ source?.integration_title || '-' }}
</NcTooltip>
</div>
<div class="ds-table-col ds-table-type">
<NcBadge rounded="lg" class="flex items-center gap-2 px-0 py-1 !h-7 truncate !border-transparent">
<GeneralBaseLogo :source-type="source.type" class="flex-none !w-4 !h-4" />
<NcTooltip placement="bottom" show-on-truncate-only class="text-sm truncate">
<template #title> {{ clientTypesMap[source.type]?.text || source.type }}</template>
{{ source.type && clientTypesMap[source.type] ? clientTypesMap[source.type]?.text : source.type }}
</NcTooltip>
</NcBadge>
</div>
<div class="ds-table-col justify-end gap-x-1 ds-table-actions" @click.stop>
<div class="flex justify-end">
<NcDropdown v-if="!source.is_meta && !source.is_local" placement="bottomRight">
<NcButton size="small" type="secondary">
<GeneralIcon icon="threeDotVertical" />
</NcButton>
<template #overlay>
<NcMenu>
<NcMenuItem @click="handleClickRow(source, 'edit')">
<GeneralIcon class="text-gray-800" icon="edit" />
<span>{{ $t('general.edit') }}</span>
</NcMenuItem>
<NcDivider />
<NcMenuItem class="!text-red-500 !hover:bg-red-50" @click.stop="openDeleteBase(source)">
<GeneralIcon icon="delete" />
{{ $t('general.remove') }}
</NcMenuItem>
</NcMenu>
</template>
</NcDropdown>
</div>
</div>
</div>
</template>
</Draggable>
<div
v-if="!isReloading && sources?.length && !isSearchResultAvailable()"
class="flex-none integration-table-empty flex items-center justify-center py-8 px-6"
>
<div class="px-2 py-6 text-gray-500 flex flex-col items-center gap-6 text-center">
<img
src="~assets/img/placeholder/no-search-result-found.png"
class="!w-[164px] flex-none"
alt="No search results found"
/>
{{ $t('title.noResultsMatchedYourSearch') }}
</div>
</div>
</div>
<div
v-show="isReloading"
class="flex items-center justify-center absolute left-0 top-0 w-full h-[calc(100%_-_45px)] z-10 pb-10 pointer-events-none"
>
<div class="flex flex-col justify-center items-center gap-2">
<GeneralLoader size="xlarge" />
<span class="text-center">{{ $t('general.loading') }}</span>
</div>
</div>
</div>
<LazyDashboardSettingsDataSourcesCreateBase
v-model:open="isNewBaseModalOpen"
:connection-type="clientType"
@source-created="loadBases(true)"
/>
<GeneralDeleteModal
v-model:visible="isDeleteBaseModalOpen"
:entity-name="$t('general.datasource')"
@ -501,8 +623,11 @@ const openedTab = ref('erd')
</template>
<style scoped lang="scss">
.ds-table {
@apply border-1 border-gray-200 rounded-lg h-full;
}
.ds-table-head {
@apply flex items-center border-0 text-gray-500;
@apply flex items-center border-b-1 text-gray-500 bg-gray-50 text-sm font-weight-500;
}
.ds-table-body {
@ -522,15 +647,19 @@ const openedTab = ref('erd')
}
.ds-table-name {
@apply col-span-9 items-center capitalize;
@apply col-span-6 items-center capitalize;
}
.ds-table-integration-name {
@apply col-span-5 items-center capitalize;
}
.ds-table-type {
@apply col-span-2 items-center;
@apply col-span-3 items-center;
}
.ds-table-actions {
@apply col-span-5 flex w-full justify-center;
@apply col-span-2 flex w-full justify-center;
}
.ds-table-col:last-child {
@ -552,3 +681,19 @@ const openedTab = ref('erd')
@apply !min-h-0 !flex-shrink;
}
</style>
<style lang="scss">
.nc-active-data-sources-view {
.ant-modal-content {
@apply overflow-hidden;
}
.nc-modal {
@apply !p-0;
height: min(calc(100vh - 100px), 1024px);
max-height: min(calc(100vh - 100px), 1024px) !important;
}
.ant-tabs-nav {
@apply pl-3;
}
}
</style>

85
packages/nc-gui/components/dashboard/settings/Metadata.vue

@ -87,24 +87,28 @@ onMounted(async () => {
}
})
const tableHeaderRenderer = (label: string) => () => h('div', { class: 'text-gray-500' }, label)
const columns = [
{
// Models
title: tableHeaderRenderer(t('labels.models')),
title: t('labels.models'),
key: 'table_name',
name: 'table_name',
minWidth: 200,
padding: '0px 12px',
},
{
// Sync state
title: tableHeaderRenderer(t('labels.syncState')),
title: t('labels.syncState'),
dataIndex: 'syncState',
key: 'syncState',
// No change identified
customRender: (value: { text: string }) =>
h('div', { style: { color: value.text ? 'red' : 'gray' } }, value.text || t('msg.info.metaNoChange')),
minWidth: 200,
padding: '0px 12px',
},
]
const customRow = (record: Record<string, any>) => ({
class: `nc-metasync-row nc-metasync-row-${record.table_name}`,
})
</script>
<template>
@ -124,7 +128,7 @@ const columns = [
<div v-else>
<!-- Tables metadata is in sync -->
<span>
<a-alert :message="$t('msg.info.tablesMetadataInSync')" type="success" show-icon />
<a-alert :message="$t('msg.info.tablesMetadataInSync')" type="success" show-icon class="!rounded-md" />
</span>
</div>
</div>
@ -140,38 +144,45 @@ const columns = [
</div>
</a-button>
</div>
<div class="h-auto max-h-[calc(100%_-_72px)] overflow-y-auto nc-scrollbar-thin">
<a-table
class="nc-metasync-table w-full"
size="small"
:custom-row="
(record) => ({
class: `nc-metasync-row nc-metasync-row-${record.table_name}`,
})
"
:data-source="metadiff ?? []"
:columns="columns"
:pagination="false"
:loading="isLoading"
sticky
bordered
>
<template #emptyText>
<a-empty :image="Empty.PRESENTED_IMAGE_SIMPLE" :description="$t('labels.noData')" />
</template>
<template #bodyCell="{ record, column }">
<div v-if="column.key === 'table_name'">
<div class="flex items-center gap-1">
<div class="min-w-5 flex items-center justify-center">
<GeneralTableIcon :meta="record" class="text-gray-500" />
</div>
<span class="overflow-ellipsis min-w-0 shrink-1">{{ record.title || record.table_name }}</span>
<NcTable
:columns="columns"
:data="metadiff ?? []"
row-height="44px"
header-row-height="44px"
:is-data-loading="isLoading"
:custom-row="customRow"
class="nc-metasync-table h-[calc(100%_-_58px)] w-full"
>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'table_name'">
<div class="flex items-center gap-2 max-w-full">
<div class="min-w-5 flex items-center justify-center">
<GeneralTableIcon :meta="record" class="text-gray-500" />
</div>
<NcTooltip class="truncate" show-on-truncate-only>
<template #title>{{ record.title || record.table_name }}</template>
{{ record.title || record.table_name }}
</NcTooltip>
</div>
</template>
</a-table>
</div>
<template v-if="column.key === 'syncState'">
<div class="flex items-center gap-2 max-w-full">
<NcTooltip class="truncate" show-on-truncate-only>
<template #title> {{ record?.syncState || $t('msg.info.metaNoChange') }} </template>
<span
:class="{
'text-red-500': record?.syncState,
'text-gray-500': !record?.syncState,
}"
>
{{ record?.syncState || $t('msg.info.metaNoChange') }}
</span>
</NcTooltip>
</div>
</template>
</template>
</NcTable>
</div>
<div class="flex place-content-center item-center">

202
packages/nc-gui/components/dashboard/settings/Modal.vue

@ -1,7 +1,7 @@
<script setup lang="ts">
import type { FunctionalComponent, SVGAttributes } from 'vue'
import Misc from './Misc.vue'
import DataSources from '~/components/dashboard/settings/DataSources.vue'
// import DataSources from '~/components/dashboard/settings/DataSources.vue'
interface Props {
modelValue?: boolean
@ -110,21 +110,21 @@ const tabsInfo: TabGroup = {
},
},
dataSources: {
// Data Sources
title: 'Data Sources',
icon: iconMap.database,
subTabs: {
dataSources: {
title: 'Data Sources',
body: DataSources,
},
},
onClick: () => {
vDataState.value = ''
$e('c:settings:data-sources')
},
},
// dataSources: {
// // Data Sources
// title: 'Data Sources',
// icon: iconMap.database,
// subTabs: {
// dataSources: {
// title: 'Data Sources',
// body: DataSources,
// },
// },
// onClick: () => {
// vDataState.value = ''
// $e('c:settings:data-sources')
// },
// },
}
const firstKeyOfObject = (obj: object) => Object.keys(obj)[0]
@ -160,94 +160,110 @@ watch(
wrap-class-name="nc-modal-settings"
@cancel="emits('update:modelValue', false)"
>
<!-- Settings -->
<div class="flex flex-row justify-between w-full items-center mb-1">
<a-typography-title class="ml-4 select-none" type="secondary" :level="5">
{{ $t('activity.settings') }}
</a-typography-title>
<a-button
type="text"
class="!rounded-md border-none !px-1.5"
data-testid="settings-modal-close-button"
@click="vModel = false"
>
<component :is="iconMap.close" class="cursor-pointer nc-modal-close w-4" />
</a-button>
</div>
<div class="nc-modal-settings-content">
<!-- Settings -->
<div class="flex flex-row justify-between w-full items-center p-4 border-b-1 border-gray-200">
<h5 class="!my-0 text-2xl font-bold">{{ $t('objects.project') }} {{ $t('activity.settings') }}</h5>
<NcButton type="text" size="small" data-testid="settings-modal-close-button" @click="vModel = false">
<component :is="iconMap.close" class="cursor-pointer nc-modal-close w-4" />
</NcButton>
</div>
<a-layout class="overflow-y-auto flex !h-[calc(100%_-_66px)]">
<!-- Side tabs -->
<a-layout-sider class="!bg-white">
<a-menu v-model:selected-keys="selectedTabKeys" class="tabs-menu h-full" :open-keys="[]">
<template v-for="(tab, key) of tabsInfo" :key="key">
<a-menu-item
v-if="key !== 'dataSources' || isUIAllowed('sourceCreate')"
:key="key"
class="active:(!ring-0) hover:(!bg-[#F0F3FF])"
>
<div class="flex items-center space-x-3 min-h-10" @click="tab.onClick">
<component :is="tab.icon" class="flex-none" />
<a-layout class="mt-3 overflow-y-auto flex">
<!-- Side tabs -->
<a-layout-sider>
<a-menu v-model:selected-keys="selectedTabKeys" class="tabs-menu h-full" :open-keys="[]">
<template v-for="(tab, key) of tabsInfo" :key="key">
<div class="select-none text-sm">
{{ tab.title }}
</div>
</div>
</a-menu-item>
</template>
</a-menu>
</a-layout-sider>
<!-- Sub Tabs -->
<a-layout-content class="h-full scrollbar-thumb-gray-500">
<a-menu
v-if="selectedTabKeys[0] !== 'dataSources'"
v-model:selectedKeys="selectedSubTabKeys"
:open-keys="[]"
mode="horizontal"
class="px-4"
>
<a-menu-item
v-if="key !== 'dataSources' || isUIAllowed('sourceCreate')"
v-for="(tab, key) of selectedTab.subTabs"
:key="key"
class="active:(!ring-0) hover:(!bg-primary !bg-opacity-25)"
class="active:(!ring-0) select-none"
@click="tab.onClick"
>
<div class="flex items-center space-x-2" @click="tab.onClick">
<component :is="tab.icon" />
<div class="select-none">
{{ tab.title }}
</div>
</div>
{{ tab.title }}
</a-menu-item>
</template>
</a-menu>
</a-layout-sider>
<!-- Sub Tabs -->
<a-layout-content class="h-auto h-80vh px-4 scrollbar-thumb-gray-500">
<a-menu
v-if="selectedTabKeys[0] !== 'dataSources'"
v-model:selectedKeys="selectedSubTabKeys"
:open-keys="[]"
mode="horizontal"
>
<a-menu-item
v-for="(tab, key) of selectedTab.subTabs"
:key="key"
class="active:(!ring-0) select-none"
@click="tab.onClick"
</a-menu>
<div
class="overflow-auto"
:class="{
'h-full': selectedSubTabKeys[0] === 'dataSources',
'px-4': selectedTabKeys[0] !== 'dataSources',
}"
>
{{ tab.title }}
</a-menu-item>
</a-menu>
<div
class="overflow-auto"
:class="{
'h-full': selectedSubTabKeys[0] === 'dataSources',
}"
>
<component
:is="selectedSubTab?.body"
v-if="selectedSubTabKeys[0] === 'dataSources'"
v-model:state="vDataState"
v-model:reload="dataSourcesReload"
class="px-2 pb-2 h-full"
:data-testid="`nc-settings-subtab-${selectedSubTab.key}`"
:base-id="baseId"
/>
<component
:is="selectedSubTab?.body"
v-else
class="px-2 py-6"
:base-id="baseId"
:data-testid="`nc-settings-subtab-${selectedSubTab.key}`"
/>
</div>
</a-layout-content>
</a-layout>
<component
:is="selectedSubTab?.body"
v-if="selectedSubTabKeys[0] === 'dataSources'"
v-model:state="vDataState"
v-model:reload="dataSourcesReload"
class="h-full"
:data-testid="`nc-settings-subtab-${selectedSubTab.key}`"
:base-id="baseId"
/>
<component
:is="selectedSubTab?.body"
v-else
class="px-2 py-6"
:base-id="baseId"
:data-testid="`nc-settings-subtab-${selectedSubTab.key}`"
/>
</div>
</a-layout-content>
</a-layout>
</div>
</a-modal>
</template>
<style lang="scss" scoped>
.tabs-menu {
:deep(.ant-menu-item-selected) {
@apply border-r-3 border-primary bg-primary !bg-opacity-25;
@apply !p-3;
:deep(.ant-menu-item) {
@apply rounded-lg first:!mt-0 !mb-1 font-weight-500;
&.ant-menu-item-selected {
@apply bg-[#F0F3FF] font-weight-600;
}
}
}
</style>
<style lang="scss">
.nc-modal-settings {
.ant-modal-content {
@apply !p-0 overflow-hidden;
}
.nc-modal-settings-content {
height: min(calc(100vh - 100px), 1124px);
max-height: min(calc(100vh - 100px), 1124px) !important;
}
}
</style>

217
packages/nc-gui/components/dashboard/settings/UIAcl.vue

@ -15,7 +15,7 @@ const { base: activeBase } = storeToRefs(useBase())
const _projectId = inject(ProjectIdInj, ref())
const baseId = computed(() => _projectId.value ?? activeBase.value?.id!)
const baseId = computed(() => _projectId.value ?? (activeBase.value?.id as string))
const { bases } = storeToRefs(useBases())
@ -103,29 +103,46 @@ onMounted(async () => {
const columns = [
{
key: 'name',
title: t('labels.tableName'),
name: 'Table Name',
minWidth: 220,
padding: '0px 12px',
dataIndex: '_ptn',
},
{
key: 'name',
title: t('labels.viewName'),
name: 'View Name',
minWidth: 220,
padding: '0px 12px',
dataIndex: 'title',
},
{
key: 'action',
title: t('objects.roleType.editor'),
name: 'editor',
width: 120,
minWidth: 120,
padding: '0px 12px',
},
{
key: 'action',
title: t('objects.roleType.commenter'),
name: 'commenter',
width: 120,
width: 135,
minWidth: 135,
padding: '0px 12px',
},
{
key: 'action',
title: t('objects.roleType.viewer'),
name: 'viewer',
width: 120,
minWidth: 120,
padding: '0px 12px',
},
]
] as NcTableColumnProps[]
</script>
<template>
@ -136,9 +153,14 @@ const columns = [
<span> UI ACL : {{ base.title }} </span>
</NcTooltip>
<div class="flex flex-row items-center w-full mb-4 gap-2 justify-between">
<a-input v-model:value="searchInput" :placeholder="$t('placeholder.searchModels')" class="nc-acl-search !w-[400px]">
<a-input
v-model:value="searchInput"
:placeholder="$t('placeholder.searchModels')"
allow-clear
class="nc-acl-search nc-input-border-on-value !w-[400px] nc-input-sm"
>
<template #prefix>
<component :is="iconMap.search" />
<component :is="iconMap.search" class="text-gray-600" />
</template>
</a-input>
<div class="flex">
@ -158,122 +180,87 @@ const columns = [
</div>
</div>
<div class="h-auto max-h-[calc(100%_-_102px)] overflow-y-auto nc-scrollbar-thin">
<div class="w-full" size="small">
<div class="table-header">
<template v-for="column in columns" :key="column.name">
<template v-if="['editor', 'commenter', 'viewer'].includes(column.name)">
<div class="table-header-col" :style="`width: ${column.width}px`">
<div class="flex flex-row gap-x-1">
<NcCheckbox
v-model:checked="allSelected[column.name as Role]"
@change="toggleSelectAll(column.name as Role)"
/>
<div class="flex capitalize">
{{ column.name }}
</div>
</div>
</div>
</template>
<template v-else>
<div class="table-header-col flex-1">
<div class="flex capitalize">{{ column.title }}</div>
</div>
</template>
</template>
</div>
<template v-if="filteredTables.length === 0">
<a-empty :image="Empty.PRESENTED_IMAGE_SIMPLE" :description="$t('labels.noData')" />
<NcTable
:columns="columns"
:data="filteredTables"
row-height="44px"
header-row-height="44px"
class="h-[calc(100%_-_88px)] w-full"
>
<template #headerCell="{ column }">
<template v-if="column.key === 'name'">
{{ column.title }}
</template>
<template v-if="column.key === 'action'">
<div class="flex flex-row gap-x-2">
<NcCheckbox
v-model:checked="allSelected[column.name as Role]"
:disabled="!filteredTables.length"
class="!m-0 !top-0"
@change="toggleSelectAll(column.name as Role)"
/>
<div class="flex">
{{ column.title }}
</div>
</div>
</template>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.name === 'Table Name'">
<div class="flex items-center gap-2 max-w-full">
<div class="min-w-5 flex items-center justify-center">
<GeneralTableIcon :meta="{ meta: record.table_meta, type: record.ptype }" class="text-gray-500" />
</div>
<NcTooltip class="truncate" show-on-truncate-only>
<template #title>{{ record._ptn }}</template>
{{ record._ptn }}
</NcTooltip>
</div>
</template>
<template v-else-if="column.name === 'View Name'">
<div class="flex items-center gap-2 max-w-full">
<div class="min-w-5 flex items-center justify-center">
<GeneralTableIcon
v-if="record?.meta?.icon"
:meta="{ meta: record.meta, type: 'view' }"
class="text-gray-500 !text-sm children:(!w-5 !h-5)"
/>
<GeneralViewIcon v-else :meta="record" class="text-gray-500"></GeneralViewIcon>
</div>
<NcTooltip class="truncate" show-on-truncate-only>
<template #title>{{ record.is_default ? $t('title.defaultView') : record.title }}</template>
{{ record.is_default ? $t('title.defaultView') : record.title }}
</NcTooltip>
</div>
</template>
<template v-else>
<div
v-for="record in filteredTables"
:key="record.id"
:class="`table-body-row nc-acl-table-row nc-acl-table-row-${record.title}`"
>
<template v-for="column in columns" :key="column.name">
<template v-if="column.name === 'Table Name'">
<div class="table-body-row-col flex-1">
<div class="min-w-5 flex items-center justify-center">
<GeneralTableIcon :meta="{ meta: record.table_meta, type: record.ptype }" class="text-gray-500" />
</div>
<NcTooltip class="overflow-ellipsis min-w-0 shrink-1 truncate" show-on-truncate-only>
<template #title>{{ record._ptn }}</template>
<span>{{ record._ptn }}</span>
</NcTooltip>
</div>
</template>
<template v-else-if="column.name === 'View Name'">
<div class="table-body-row-col flex-1">
<div class="min-w-5 flex items-center justify-center">
<GeneralTableIcon
v-if="record?.meta?.icon"
:meta="{ meta: record.meta, type: 'view' }"
class="text-gray-500 !text-sm children:(!w-5 !h-5)"
/>
<GeneralViewIcon v-else :meta="record" class="text-gray-500"></GeneralViewIcon>
</div>
<NcTooltip class="overflow-ellipsis min-w-0 shrink-1 truncate" show-on-truncate-only>
<template #title>{{ record.is_default ? $t('title.defaultView') : record.title }}</template>
<span>{{ record.is_default ? $t('title.defaultView') : record.title }}</span>
</NcTooltip>
</div>
<div>
<NcTooltip>
<template #title>
<span v-if="record.disabled[column.name]">
{{ $t('labels.clickToMake') }} '{{ record.title }}' {{ $t('labels.visibleForRole') }} {{ column.name }}
{{ $t('labels.inUI') }} dashboard</span
>
<span v-else
>{{ $t('labels.clickToHide') }} '{{ record.title }}' {{ $t('labels.forRole') }}:{{ column.name }}
{{ $t('labels.inUI') }}</span
>
</template>
<template v-else>
<div class="table-body-row-col" :style="`width: ${column.width}px`">
<NcTooltip>
<template #title>
<span v-if="record.disabled[column.name]">
{{ $t('labels.clickToMake') }} '{{ record.title }}' {{ $t('labels.visibleForRole') }} {{ column.name }}
{{ $t('labels.inUI') }} dashboard</span
>
<span v-else
>{{ $t('labels.clickToHide') }} '{{ record.title }}' {{ $t('labels.forRole') }}:{{ column.name }}
{{ $t('labels.inUI') }}</span
>
</template>
<NcCheckbox
:checked="!record.disabled[column.name]"
:class="`nc-acl-${record.title}-${column.name}-chkbox !ml-0.25`"
@change="onRoleCheck(record, column.name as Role)"
/>
</NcTooltip>
</div>
</template>
</template>
<NcCheckbox
:checked="!record.disabled[column.name]"
:class="`nc-acl-${record.title}-${column.name}-chkbox !ml-0.25`"
@change="onRoleCheck(record, column.name as Role)"
/>
</NcTooltip>
</div>
</template>
</div>
</div>
</template>
</NcTable>
</div>
</div>
</template>
<style scoped lang="scss">
.table-header {
@apply flex items-center bg-gray-100 border-1 border-gray-200;
}
.table-header-col {
@apply flex items-center p-2 border-r-1 border-gray-200;
}
.table-header-col:last-child {
@apply border-r-0;
}
.table-body-row {
@apply flex items-center bg-white border-r-1 border-l-1 border-b-1 border-gray-200;
}
.table-body-row-col {
@apply flex items-center p-2 border-r-1 border-gray-200;
}
.table-body-row-col:last-child {
@apply border-r-0;
}
</style>
<style scoped lang="scss"></style>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save