From 900bb5e845c3ad44defbd427cae3d44a4a43321f Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Sat, 25 Feb 2023 13:15:44 +0100 Subject: feat: Initial commit --- code/app/src/actions/pwKey.ts | 7 + code/app/src/app.d.ts | 9 + code/app/src/app.html | 14 + code/app/src/app.pcss | 34 ++ code/app/src/components/alert.svelte | 268 ++++++++++++ code/app/src/components/badge.svelte | 76 ++++ code/app/src/components/button.svelte | 116 ++++++ code/app/src/components/checkbox.svelte | 29 ++ code/app/src/components/combobox.svelte | 451 ++++++++++++++++++++ code/app/src/components/icons/adjustments.svelte | 14 + .../src/components/icons/bars-3-center-left.svelte | 15 + code/app/src/components/icons/calendar.svelte | 14 + code/app/src/components/icons/check-circle.svelte | 13 + code/app/src/components/icons/chevron-down.svelte | 7 + .../src/components/icons/chevron-up-down.svelte | 13 + code/app/src/components/icons/chevron-up.svelte | 7 + code/app/src/components/icons/database.svelte | 14 + .../src/components/icons/exclamation-circle.svelte | 13 + .../components/icons/exclamation-triangle.svelte | 13 + code/app/src/components/icons/folder-open.svelte | 14 + code/app/src/components/icons/funnel.svelte | 7 + code/app/src/components/icons/home.svelte | 14 + code/app/src/components/icons/index.ts | 47 +++ .../src/components/icons/information-circle.svelte | 13 + .../src/components/icons/magnifying-glass.svelte | 13 + code/app/src/components/icons/megaphone.svelte | 14 + code/app/src/components/icons/menu.svelte | 14 + code/app/src/components/icons/queue-list.svelte | 14 + code/app/src/components/icons/spinner.svelte | 20 + code/app/src/components/icons/x-circle.svelte | 13 + code/app/src/components/icons/x-mark.svelte | 11 + code/app/src/components/icons/x.svelte | 14 + code/app/src/components/index.ts | 25 ++ code/app/src/components/input.svelte | 112 +++++ code/app/src/components/locale-switcher.svelte | 56 +++ code/app/src/components/notification.svelte | 119 ++++++ .../app/src/components/project-status-badge.svelte | 25 ++ code/app/src/components/switch.svelte | 125 ++++++ code/app/src/components/textarea.svelte | 81 ++++ code/app/src/configuration/index.ts | 64 +++ code/app/src/global.d.ts | 11 + code/app/src/hooks.server.ts | 49 +++ code/app/src/i18n/en/app/index.ts | 7 + code/app/src/i18n/en/index.ts | 63 +++ code/app/src/i18n/formatters.ts | 13 + code/app/src/i18n/i18n-svelte.ts | 12 + code/app/src/i18n/i18n-types.ts | 461 +++++++++++++++++++++ code/app/src/i18n/i18n-util.async.ts | 42 ++ code/app/src/i18n/i18n-util.sync.ts | 35 ++ code/app/src/i18n/i18n-util.ts | 45 ++ code/app/src/i18n/nb/app/index.ts | 7 + code/app/src/i18n/nb/index.ts | 51 +++ code/app/src/models/base/Customer.ts | 21 + code/app/src/models/base/CustomerContact.ts | 8 + code/app/src/models/base/CustomerEvent.ts | 6 + code/app/src/models/base/SessionData.ts | 5 + code/app/src/models/base/Tenant.ts | 8 + code/app/src/models/base/User.ts | 13 + code/app/src/models/base/UserRole.ts | 5 + code/app/src/models/internal/FormError.ts | 24 ++ code/app/src/models/internal/IForm.ts | 15 + code/app/src/models/internal/KnownProblem.ts | 10 + code/app/src/models/projects/Project.ts | 13 + code/app/src/models/projects/ProjectLabel.ts | 5 + code/app/src/models/projects/ProjectMember.ts | 10 + code/app/src/models/projects/ProjectMeta.ts | 7 + code/app/src/models/projects/ProjectRole.ts | 7 + code/app/src/models/projects/ProjectStatus.ts | 5 + code/app/src/models/work/WorkCategory.ts | 5 + code/app/src/models/work/WorkEntry.ts | 13 + code/app/src/models/work/WorkEntryQueryResponse.ts | 27 ++ code/app/src/models/work/WorkLabel.ts | 5 + code/app/src/models/work/WorkQuery.ts | 17 + code/app/src/routes/(api)/delete-cookie/+server.ts | 8 + code/app/src/routes/(main)/(app)/+layout.svelte | 379 +++++++++++++++++ code/app/src/routes/(main)/(app)/home/+page.svelte | 1 + code/app/src/routes/(main)/(app)/org/+page.svelte | 4 + .../src/routes/(main)/(app)/profile/+page.svelte | 4 + .../src/routes/(main)/(app)/projects/+page.svelte | 118 ++++++ .../routes/(main)/(app)/projects/[id]/+page.svelte | 5 + .../(main)/(app)/projects/create/+page.svelte | 59 +++ .../src/routes/(main)/(app)/settings/+page.svelte | 205 +++++++++ .../src/routes/(main)/(app)/tickets/+page.svelte | 4 + code/app/src/routes/(main)/(app)/todo/+page.svelte | 4 + code/app/src/routes/(main)/(app)/wiki/+page.svelte | 4 + code/app/src/routes/(main)/(public)/+layout.svelte | 18 + .../src/routes/(main)/(public)/portal/+page.svelte | 26 ++ .../app/src/routes/(main)/(public)/portal/+page.ts | 9 + .../(main)/(public)/reset-password/+page.svelte | 81 ++++ .../routes/(main)/(public)/reset-password/+page.ts | 11 + .../(public)/reset-password/[id]/+page.server.ts | 11 + .../(public)/reset-password/[id]/+page.svelte | 82 ++++ .../(main)/(public)/reset-password/[id]/+page.ts | 11 + .../routes/(main)/(public)/sign-in/+page.svelte | 155 +++++++ .../src/routes/(main)/(public)/sign-in/+page.ts | 11 + .../routes/(main)/(public)/sign-in/index.spec.js | 12 + .../src/routes/(main)/(public)/sign-in/index.ts | 20 + .../routes/(main)/(public)/sign-up/+page.svelte | 106 +++++ .../src/routes/(main)/(public)/sign-up/+page.ts | 11 + code/app/src/routes/(main)/+layout.server.ts | 45 ++ code/app/src/routes/(main)/+layout.svelte | 31 ++ code/app/src/routes/(main)/+layout.ts | 10 + code/app/src/routes/(main)/+page.svelte | 1 + code/app/src/routes/book/+layout.svelte | 46 ++ code/app/src/routes/book/+layout.ts | 3 + code/app/src/routes/book/+page.svelte | 1 + code/app/src/routes/book/alerts/+page.svelte | 70 ++++ code/app/src/routes/book/badges/+page.svelte | 19 + code/app/src/routes/book/buttons/+page.svelte | 23 + code/app/src/routes/book/inputs/+page.svelte | 75 ++++ .../app/src/routes/book/notifications/+page.svelte | 50 +++ code/app/src/routes/book/toggles/+page.svelte | 27 ++ .../src/services/abstractions/IAccountService.ts | 54 +++ .../src/services/abstractions/IApiTokenService.ts | 34 ++ .../services/abstractions/IPasswordResetService.ts | 21 + .../src/services/abstractions/ISettingsService.ts | 3 + code/app/src/services/account-service.ts | 124 ++++++ code/app/src/services/api-tokens-service.ts | 22 + code/app/src/services/password-reset-service.ts | 48 +++ code/app/src/services/settings-service.ts | 10 + code/app/src/utilities/_fetch.ts | 94 +++++ code/app/src/utilities/cache.ts | 38 ++ code/app/src/utilities/colors.ts | 47 +++ code/app/src/utilities/crypto-helpers.ts | 48 +++ code/app/src/utilities/dom-helpers.ts | 105 +++++ code/app/src/utilities/global-state.ts | 22 + code/app/src/utilities/logger.ts | 118 ++++++ code/app/src/utilities/misc-helpers.ts | 77 ++++ code/app/src/utilities/persistent-store.ts | 111 +++++ code/app/src/utilities/storage-helpers.ts | 26 ++ code/app/src/utilities/testing-helpers.ts | 7 + code/app/src/utilities/validators.ts | 34 ++ 132 files changed, 5770 insertions(+) create mode 100644 code/app/src/actions/pwKey.ts create mode 100644 code/app/src/app.d.ts create mode 100644 code/app/src/app.html create mode 100644 code/app/src/app.pcss create mode 100644 code/app/src/components/alert.svelte create mode 100644 code/app/src/components/badge.svelte create mode 100644 code/app/src/components/button.svelte create mode 100644 code/app/src/components/checkbox.svelte create mode 100644 code/app/src/components/combobox.svelte create mode 100644 code/app/src/components/icons/adjustments.svelte create mode 100644 code/app/src/components/icons/bars-3-center-left.svelte create mode 100644 code/app/src/components/icons/calendar.svelte create mode 100644 code/app/src/components/icons/check-circle.svelte create mode 100644 code/app/src/components/icons/chevron-down.svelte create mode 100644 code/app/src/components/icons/chevron-up-down.svelte create mode 100644 code/app/src/components/icons/chevron-up.svelte create mode 100644 code/app/src/components/icons/database.svelte create mode 100644 code/app/src/components/icons/exclamation-circle.svelte create mode 100644 code/app/src/components/icons/exclamation-triangle.svelte create mode 100644 code/app/src/components/icons/folder-open.svelte create mode 100644 code/app/src/components/icons/funnel.svelte create mode 100644 code/app/src/components/icons/home.svelte create mode 100644 code/app/src/components/icons/index.ts create mode 100644 code/app/src/components/icons/information-circle.svelte create mode 100644 code/app/src/components/icons/magnifying-glass.svelte create mode 100644 code/app/src/components/icons/megaphone.svelte create mode 100644 code/app/src/components/icons/menu.svelte create mode 100644 code/app/src/components/icons/queue-list.svelte create mode 100644 code/app/src/components/icons/spinner.svelte create mode 100644 code/app/src/components/icons/x-circle.svelte create mode 100644 code/app/src/components/icons/x-mark.svelte create mode 100644 code/app/src/components/icons/x.svelte create mode 100644 code/app/src/components/index.ts create mode 100644 code/app/src/components/input.svelte create mode 100644 code/app/src/components/locale-switcher.svelte create mode 100644 code/app/src/components/notification.svelte create mode 100644 code/app/src/components/project-status-badge.svelte create mode 100644 code/app/src/components/switch.svelte create mode 100644 code/app/src/components/textarea.svelte create mode 100644 code/app/src/configuration/index.ts create mode 100644 code/app/src/global.d.ts create mode 100644 code/app/src/hooks.server.ts create mode 100644 code/app/src/i18n/en/app/index.ts create mode 100644 code/app/src/i18n/en/index.ts create mode 100644 code/app/src/i18n/formatters.ts create mode 100644 code/app/src/i18n/i18n-svelte.ts create mode 100644 code/app/src/i18n/i18n-types.ts create mode 100644 code/app/src/i18n/i18n-util.async.ts create mode 100644 code/app/src/i18n/i18n-util.sync.ts create mode 100644 code/app/src/i18n/i18n-util.ts create mode 100644 code/app/src/i18n/nb/app/index.ts create mode 100644 code/app/src/i18n/nb/index.ts create mode 100644 code/app/src/models/base/Customer.ts create mode 100644 code/app/src/models/base/CustomerContact.ts create mode 100644 code/app/src/models/base/CustomerEvent.ts create mode 100644 code/app/src/models/base/SessionData.ts create mode 100644 code/app/src/models/base/Tenant.ts create mode 100644 code/app/src/models/base/User.ts create mode 100644 code/app/src/models/base/UserRole.ts create mode 100644 code/app/src/models/internal/FormError.ts create mode 100644 code/app/src/models/internal/IForm.ts create mode 100644 code/app/src/models/internal/KnownProblem.ts create mode 100644 code/app/src/models/projects/Project.ts create mode 100644 code/app/src/models/projects/ProjectLabel.ts create mode 100644 code/app/src/models/projects/ProjectMember.ts create mode 100644 code/app/src/models/projects/ProjectMeta.ts create mode 100644 code/app/src/models/projects/ProjectRole.ts create mode 100644 code/app/src/models/projects/ProjectStatus.ts create mode 100644 code/app/src/models/work/WorkCategory.ts create mode 100644 code/app/src/models/work/WorkEntry.ts create mode 100644 code/app/src/models/work/WorkEntryQueryResponse.ts create mode 100644 code/app/src/models/work/WorkLabel.ts create mode 100644 code/app/src/models/work/WorkQuery.ts create mode 100644 code/app/src/routes/(api)/delete-cookie/+server.ts create mode 100644 code/app/src/routes/(main)/(app)/+layout.svelte create mode 100644 code/app/src/routes/(main)/(app)/home/+page.svelte create mode 100644 code/app/src/routes/(main)/(app)/org/+page.svelte create mode 100644 code/app/src/routes/(main)/(app)/profile/+page.svelte create mode 100644 code/app/src/routes/(main)/(app)/projects/+page.svelte create mode 100644 code/app/src/routes/(main)/(app)/projects/[id]/+page.svelte create mode 100644 code/app/src/routes/(main)/(app)/projects/create/+page.svelte create mode 100644 code/app/src/routes/(main)/(app)/settings/+page.svelte create mode 100644 code/app/src/routes/(main)/(app)/tickets/+page.svelte create mode 100644 code/app/src/routes/(main)/(app)/todo/+page.svelte create mode 100644 code/app/src/routes/(main)/(app)/wiki/+page.svelte create mode 100644 code/app/src/routes/(main)/(public)/+layout.svelte create mode 100644 code/app/src/routes/(main)/(public)/portal/+page.svelte create mode 100644 code/app/src/routes/(main)/(public)/portal/+page.ts create mode 100644 code/app/src/routes/(main)/(public)/reset-password/+page.svelte create mode 100644 code/app/src/routes/(main)/(public)/reset-password/+page.ts create mode 100644 code/app/src/routes/(main)/(public)/reset-password/[id]/+page.server.ts create mode 100644 code/app/src/routes/(main)/(public)/reset-password/[id]/+page.svelte create mode 100644 code/app/src/routes/(main)/(public)/reset-password/[id]/+page.ts create mode 100644 code/app/src/routes/(main)/(public)/sign-in/+page.svelte create mode 100644 code/app/src/routes/(main)/(public)/sign-in/+page.ts create mode 100644 code/app/src/routes/(main)/(public)/sign-in/index.spec.js create mode 100644 code/app/src/routes/(main)/(public)/sign-in/index.ts create mode 100644 code/app/src/routes/(main)/(public)/sign-up/+page.svelte create mode 100644 code/app/src/routes/(main)/(public)/sign-up/+page.ts create mode 100644 code/app/src/routes/(main)/+layout.server.ts create mode 100644 code/app/src/routes/(main)/+layout.svelte create mode 100644 code/app/src/routes/(main)/+layout.ts create mode 100644 code/app/src/routes/(main)/+page.svelte create mode 100644 code/app/src/routes/book/+layout.svelte create mode 100644 code/app/src/routes/book/+layout.ts create mode 100644 code/app/src/routes/book/+page.svelte create mode 100644 code/app/src/routes/book/alerts/+page.svelte create mode 100644 code/app/src/routes/book/badges/+page.svelte create mode 100644 code/app/src/routes/book/buttons/+page.svelte create mode 100644 code/app/src/routes/book/inputs/+page.svelte create mode 100644 code/app/src/routes/book/notifications/+page.svelte create mode 100644 code/app/src/routes/book/toggles/+page.svelte create mode 100644 code/app/src/services/abstractions/IAccountService.ts create mode 100644 code/app/src/services/abstractions/IApiTokenService.ts create mode 100644 code/app/src/services/abstractions/IPasswordResetService.ts create mode 100644 code/app/src/services/abstractions/ISettingsService.ts create mode 100644 code/app/src/services/account-service.ts create mode 100644 code/app/src/services/api-tokens-service.ts create mode 100644 code/app/src/services/password-reset-service.ts create mode 100644 code/app/src/services/settings-service.ts create mode 100644 code/app/src/utilities/_fetch.ts create mode 100644 code/app/src/utilities/cache.ts create mode 100644 code/app/src/utilities/colors.ts create mode 100644 code/app/src/utilities/crypto-helpers.ts create mode 100644 code/app/src/utilities/dom-helpers.ts create mode 100644 code/app/src/utilities/global-state.ts create mode 100644 code/app/src/utilities/logger.ts create mode 100644 code/app/src/utilities/misc-helpers.ts create mode 100644 code/app/src/utilities/persistent-store.ts create mode 100644 code/app/src/utilities/storage-helpers.ts create mode 100644 code/app/src/utilities/testing-helpers.ts create mode 100644 code/app/src/utilities/validators.ts (limited to 'code/app/src') diff --git a/code/app/src/actions/pwKey.ts b/code/app/src/actions/pwKey.ts new file mode 100644 index 0000000..cf85685 --- /dev/null +++ b/code/app/src/actions/pwKey.ts @@ -0,0 +1,7 @@ +import { is_testing } from "$configuration"; + +export default function pwKey(node: HTMLElement, value: string | undefined) { + if (!value) return; + if (!is_testing()) return; + node.setAttribute("pw-key", value); +} \ No newline at end of file diff --git a/code/app/src/app.d.ts b/code/app/src/app.d.ts new file mode 100644 index 0000000..31b276e --- /dev/null +++ b/code/app/src/app.d.ts @@ -0,0 +1,9 @@ +// See https://kit.svelte.dev/docs/types#app +// for information about these interfaces +// and what to do when importing types +declare namespace App { + interface Locals { } + interface Platform { } + interface PrivateEnv { } + interface PublicEnv { } +} \ No newline at end of file diff --git a/code/app/src/app.html b/code/app/src/app.html new file mode 100644 index 0000000..308b223 --- /dev/null +++ b/code/app/src/app.html @@ -0,0 +1,14 @@ + + + + + + + %sveltekit.head% + + + +
%sveltekit.body%
+ + + \ No newline at end of file diff --git a/code/app/src/app.pcss b/code/app/src/app.pcss new file mode 100644 index 0000000..5450db4 --- /dev/null +++ b/code/app/src/app.pcss @@ -0,0 +1,34 @@ +/* Write your global styles here, in PostCSS syntax */ +@tailwind base; +@tailwind components; +@tailwind utilities; + +pre { + font-family: monospace !important; +} + +*:focus-visible { + outline: 1px auto; +} + +.c-disabled { + cursor: not-allowed !important; + filter: opacity(.45); + pointer-events: none !important; +} + +.c-disabled.loading { + cursor: wait !important; +} + +.link { + @apply text-blue-600 hover:text-blue-700 transition duration-300 ease-in-out mb-4 cursor-pointer; + + &.danger { + @apply text-red-600 hover:text-red-700; + } + + &.active { + @apply underline + } +} diff --git a/code/app/src/components/alert.svelte b/code/app/src/components/alert.svelte new file mode 100644 index 0000000..16d8340 --- /dev/null +++ b/code/app/src/components/alert.svelte @@ -0,0 +1,268 @@ + + +{#if visible} +
+
+
+ +
+
+ {#if !rightLinkText} + {#if title} +

+ {title} +

+ {/if} + {#if message} +
+

+ {@html message} +

+
+ {/if} + {#if listItems?.length ?? 0} +
    + {#each listItems as listItem} +
  • {listItem}
  • + {/each} +
+ {/if} + {:else} +
+
+ {#if title} +

+ {title} +

+ {/if} + {#if message} +
+

+ {@html message} +

+
+ {/if} + {#if listItems?.length ?? 0} +
    + {#each listItems as listItem} +
  • {listItem}
  • + {/each} +
+ {/if} +
+

+ rightLinkClicked()} + class="whitespace-nowrap font-medium text-{colorClassPart}-700 hover:text-{colorClassPart}-600" + > + {rightLinkText} + + +

+
+ {/if} + {#if actions?.length ?? 0} +
+
+ {#each actions as action} + {@const color = action?.color ?? colorClassPart} + + {/each} +
+
+ {/if} +
+ {#if closeable} +
+
+ +
+
+ {/if} +
+
+{/if} diff --git a/code/app/src/components/badge.svelte b/code/app/src/components/badge.svelte new file mode 100644 index 0000000..f967c2d --- /dev/null +++ b/code/app/src/components/badge.svelte @@ -0,0 +1,76 @@ + + + + {#if withDot} + + + + {/if} + {text} + {#if removable} + + {/if} + diff --git a/code/app/src/components/button.svelte b/code/app/src/components/button.svelte new file mode 100644 index 0000000..1d6ac4b --- /dev/null +++ b/code/app/src/components/button.svelte @@ -0,0 +1,116 @@ + + + + +{#if href} + + {#if loading} + + {/if} + {text} + +{:else} + +{/if} + + diff --git a/code/app/src/components/checkbox.svelte b/code/app/src/components/checkbox.svelte new file mode 100644 index 0000000..db72bee --- /dev/null +++ b/code/app/src/components/checkbox.svelte @@ -0,0 +1,29 @@ + + +
+ + +
diff --git a/code/app/src/components/combobox.svelte b/code/app/src/components/combobox.svelte new file mode 100644 index 0000000..396c18a --- /dev/null +++ b/code/app/src/components/combobox.svelte @@ -0,0 +1,451 @@ + + + + + + +
+ {#if label} + + {/if} +
+
+ {#if multiple === true && hasSelection} +
+ {#each options.filter((c) => c.selected === true) as option} + methods.deselect_entry(e.detail.id)} + text={option.name} + /> + {/each} +
+ {/if} +
+ search.do()} + on:click={search.on_input_click} + on:focus={search.on_input_focus} + on:blur={search.on_input_focusout} + autocomplete="off" + /> + {#if hasSelection} + + {:else} + + + + {/if} +
+
+ {#if errorText} +

+ {errorText} +

+ {/if} +
+
    + {#if searchResults.length > 0} + {#each searchResults.filter((c) => !c.selected) as result} +
  • + {@html highlight(result, '', "")} +
  • + {/each} + {:else if options.length > 0} + {#each options as option} + +
  • + {option.name} + {#if option.selected} + + + + {/if} +
  • + {/each} + {:else} + +

    {noResultsText}

    + {#if createable && !searchValue} +

    {$LL.combobox.createRecordHelpText()}

    + {/if} +
    + {/if} +
+ {#if showCreationHint} +
+
+ {/if} +
+
+
+ + diff --git a/code/app/src/components/icons/adjustments.svelte b/code/app/src/components/icons/adjustments.svelte new file mode 100644 index 0000000..83bda27 --- /dev/null +++ b/code/app/src/components/icons/adjustments.svelte @@ -0,0 +1,14 @@ + + + diff --git a/code/app/src/components/icons/bars-3-center-left.svelte b/code/app/src/components/icons/bars-3-center-left.svelte new file mode 100644 index 0000000..785ece3 --- /dev/null +++ b/code/app/src/components/icons/bars-3-center-left.svelte @@ -0,0 +1,15 @@ + diff --git a/code/app/src/components/icons/calendar.svelte b/code/app/src/components/icons/calendar.svelte new file mode 100644 index 0000000..e0053ee --- /dev/null +++ b/code/app/src/components/icons/calendar.svelte @@ -0,0 +1,14 @@ + + + diff --git a/code/app/src/components/icons/check-circle.svelte b/code/app/src/components/icons/check-circle.svelte new file mode 100644 index 0000000..e30778e --- /dev/null +++ b/code/app/src/components/icons/check-circle.svelte @@ -0,0 +1,13 @@ + diff --git a/code/app/src/components/icons/chevron-down.svelte b/code/app/src/components/icons/chevron-down.svelte new file mode 100644 index 0000000..5b29ece --- /dev/null +++ b/code/app/src/components/icons/chevron-down.svelte @@ -0,0 +1,7 @@ + + + diff --git a/code/app/src/components/icons/chevron-up-down.svelte b/code/app/src/components/icons/chevron-up-down.svelte new file mode 100644 index 0000000..c07aed5 --- /dev/null +++ b/code/app/src/components/icons/chevron-up-down.svelte @@ -0,0 +1,13 @@ + diff --git a/code/app/src/components/icons/chevron-up.svelte b/code/app/src/components/icons/chevron-up.svelte new file mode 100644 index 0000000..289e71d --- /dev/null +++ b/code/app/src/components/icons/chevron-up.svelte @@ -0,0 +1,7 @@ + + + diff --git a/code/app/src/components/icons/database.svelte b/code/app/src/components/icons/database.svelte new file mode 100644 index 0000000..6ffdadb --- /dev/null +++ b/code/app/src/components/icons/database.svelte @@ -0,0 +1,14 @@ + + + diff --git a/code/app/src/components/icons/exclamation-circle.svelte b/code/app/src/components/icons/exclamation-circle.svelte new file mode 100644 index 0000000..2ce79b1 --- /dev/null +++ b/code/app/src/components/icons/exclamation-circle.svelte @@ -0,0 +1,13 @@ + diff --git a/code/app/src/components/icons/exclamation-triangle.svelte b/code/app/src/components/icons/exclamation-triangle.svelte new file mode 100644 index 0000000..8d807db --- /dev/null +++ b/code/app/src/components/icons/exclamation-triangle.svelte @@ -0,0 +1,13 @@ + diff --git a/code/app/src/components/icons/folder-open.svelte b/code/app/src/components/icons/folder-open.svelte new file mode 100644 index 0000000..409c8e2 --- /dev/null +++ b/code/app/src/components/icons/folder-open.svelte @@ -0,0 +1,14 @@ + + + diff --git a/code/app/src/components/icons/funnel.svelte b/code/app/src/components/icons/funnel.svelte new file mode 100644 index 0000000..7e9daeb --- /dev/null +++ b/code/app/src/components/icons/funnel.svelte @@ -0,0 +1,7 @@ + + + diff --git a/code/app/src/components/icons/home.svelte b/code/app/src/components/icons/home.svelte new file mode 100644 index 0000000..ee8305d --- /dev/null +++ b/code/app/src/components/icons/home.svelte @@ -0,0 +1,14 @@ + + + diff --git a/code/app/src/components/icons/index.ts b/code/app/src/components/icons/index.ts new file mode 100644 index 0000000..eb5b439 --- /dev/null +++ b/code/app/src/components/icons/index.ts @@ -0,0 +1,47 @@ +import XIcon from "./x.svelte"; +import MenuIcon from "./menu.svelte"; +import AdjustmentsIcon from "./adjustments.svelte"; +import DatabaseIcon from "./database.svelte"; +import HomeIcon from "./home.svelte"; +import InformationCircleIcon from "./information-circle.svelte"; +import ExclamationTriangleIcon from "./exclamation-triangle.svelte"; +import XCircleIcon from "./x-circle.svelte"; +import CheckCircleIcon from "./check-circle.svelte"; +import XMarkIcon from "./x-mark.svelte"; +import SpinnerIcon from "./spinner.svelte"; +import ExclamationCircleIcon from "./exclamation-circle.svelte"; +import ChevronUpDownIcon from "./chevron-up-down.svelte"; +import MagnifyingGlassIcon from "./magnifying-glass.svelte"; +import Bars3CenterLeftIcon from "./bars-3-center-left.svelte"; +import CalendarIcon from "./calendar.svelte"; +import FolderOpenIcon from "./folder-open.svelte"; +import MegaphoneIcon from "./megaphone.svelte"; +import QueueListIcon from "./queue-list.svelte"; +import ChevronDownIcon from "./chevron-down.svelte"; +import ChevronUpIcon from "./chevron-up.svelte"; +import FunnelIcon from "./funnel.svelte"; + +export { + FunnelIcon, + ChevronDownIcon, + ChevronUpIcon, + QueueListIcon, + FolderOpenIcon, + MegaphoneIcon, + CalendarIcon, + Bars3CenterLeftIcon, + MagnifyingGlassIcon, + ChevronUpDownIcon, + XIcon, + MenuIcon, + HomeIcon, + DatabaseIcon, + AdjustmentsIcon, + InformationCircleIcon, + ExclamationTriangleIcon, + ExclamationCircleIcon, + XCircleIcon, + CheckCircleIcon, + XMarkIcon, + SpinnerIcon +} \ No newline at end of file diff --git a/code/app/src/components/icons/information-circle.svelte b/code/app/src/components/icons/information-circle.svelte new file mode 100644 index 0000000..68dbc60 --- /dev/null +++ b/code/app/src/components/icons/information-circle.svelte @@ -0,0 +1,13 @@ + diff --git a/code/app/src/components/icons/magnifying-glass.svelte b/code/app/src/components/icons/magnifying-glass.svelte new file mode 100644 index 0000000..f8fdb6e --- /dev/null +++ b/code/app/src/components/icons/magnifying-glass.svelte @@ -0,0 +1,13 @@ + diff --git a/code/app/src/components/icons/megaphone.svelte b/code/app/src/components/icons/megaphone.svelte new file mode 100644 index 0000000..7ada5f3 --- /dev/null +++ b/code/app/src/components/icons/megaphone.svelte @@ -0,0 +1,14 @@ + + + diff --git a/code/app/src/components/icons/menu.svelte b/code/app/src/components/icons/menu.svelte new file mode 100644 index 0000000..471d85f --- /dev/null +++ b/code/app/src/components/icons/menu.svelte @@ -0,0 +1,14 @@ + + + diff --git a/code/app/src/components/icons/queue-list.svelte b/code/app/src/components/icons/queue-list.svelte new file mode 100644 index 0000000..6148394 --- /dev/null +++ b/code/app/src/components/icons/queue-list.svelte @@ -0,0 +1,14 @@ + + + diff --git a/code/app/src/components/icons/spinner.svelte b/code/app/src/components/icons/spinner.svelte new file mode 100644 index 0000000..80cc57c --- /dev/null +++ b/code/app/src/components/icons/spinner.svelte @@ -0,0 +1,20 @@ + + + + diff --git a/code/app/src/components/icons/x-circle.svelte b/code/app/src/components/icons/x-circle.svelte new file mode 100644 index 0000000..3793b5a --- /dev/null +++ b/code/app/src/components/icons/x-circle.svelte @@ -0,0 +1,13 @@ + diff --git a/code/app/src/components/icons/x-mark.svelte b/code/app/src/components/icons/x-mark.svelte new file mode 100644 index 0000000..fd1c6a1 --- /dev/null +++ b/code/app/src/components/icons/x-mark.svelte @@ -0,0 +1,11 @@ + diff --git a/code/app/src/components/icons/x.svelte b/code/app/src/components/icons/x.svelte new file mode 100644 index 0000000..6125ab8 --- /dev/null +++ b/code/app/src/components/icons/x.svelte @@ -0,0 +1,14 @@ + + + diff --git a/code/app/src/components/index.ts b/code/app/src/components/index.ts new file mode 100644 index 0000000..494bc0c --- /dev/null +++ b/code/app/src/components/index.ts @@ -0,0 +1,25 @@ +import Alert from "./alert.svelte"; +import Button from "./button.svelte"; +import Checkbox from "./checkbox.svelte"; +import Input from "./input.svelte"; +import LocaleSwitcher from "./locale-switcher.svelte"; +import Switch from "./switch.svelte"; +import Badge from "./badge.svelte"; +import ProjectStatusBadge from "./project-status-badge.svelte"; +import TextArea from "./textarea.svelte"; +import Combobox from "./combobox.svelte"; +import Notification from "./notification.svelte"; + +export { + Badge, + Combobox, + TextArea, + ProjectStatusBadge, + Alert, + Button, + Checkbox, + Input, + LocaleSwitcher, + Switch, + Notification, +}; \ No newline at end of file diff --git a/code/app/src/components/input.svelte b/code/app/src/components/input.svelte new file mode 100644 index 0000000..f97c1f1 --- /dev/null +++ b/code/app/src/components/input.svelte @@ -0,0 +1,112 @@ + + +
+ {#if label && !cornerHint && !hideLabel} + + {:else if cornerHint && !hideLabel} +
+ {#if label} + + {/if} + + {cornerHint} + +
+ {/if} +
+ {#if icon} +
+ +
+ {:else if addon} +
+ {addon} +
+ {/if} + + {#if errorText} +
+ +
+ {/if} +
+ {#if helpText && !errorText} +

+ {helpText} +

+ {/if} + {#if errorText || errors?.length === 1} +

+ {errorText ?? errors[0]} +

+ {:else if errors && errors.length} +
    + {#each errors as error} +
  • {error}
  • + {/each} +
+ {/if} +
diff --git a/code/app/src/components/locale-switcher.svelte b/code/app/src/components/locale-switcher.svelte new file mode 100644 index 0000000..fc03f39 --- /dev/null +++ b/code/app/src/components/locale-switcher.svelte @@ -0,0 +1,56 @@ + + + diff --git a/code/app/src/components/notification.svelte b/code/app/src/components/notification.svelte new file mode 100644 index 0000000..d78b3d3 --- /dev/null +++ b/code/app/src/components/notification.svelte @@ -0,0 +1,119 @@ + + + + +
+
+ +
+
+
+ {#if icon} +
+ +
+ {/if} +
+

{title}

+ {#if subtitle} +

{subtitle}

+ {/if} +
+ {#if !nonClosable} +
+ +
+ {/if} +
+
+
+
+
+
diff --git a/code/app/src/components/project-status-badge.svelte b/code/app/src/components/project-status-badge.svelte new file mode 100644 index 0000000..3e93935 --- /dev/null +++ b/code/app/src/components/project-status-badge.svelte @@ -0,0 +1,25 @@ + + + diff --git a/code/app/src/components/switch.svelte b/code/app/src/components/switch.svelte new file mode 100644 index 0000000..1b67f80 --- /dev/null +++ b/code/app/src/components/switch.svelte @@ -0,0 +1,125 @@ + + + + +
+ {#if hasLabelOrDescription && !rightAlignedLabelDescription} + + {#if label} + {label} + {/if} + {#if description} + {description} + {/if} + + {/if} + {#if type === "short"} + + {:else if type === "icon"} + + {:else if type === "default"} + + {/if} + {#if hasLabelOrDescription && rightAlignedLabelDescription} + + {#if label} + {label} + {/if} + {#if description} + {description} + {/if} + + {/if} +
diff --git a/code/app/src/components/textarea.svelte b/code/app/src/components/textarea.svelte new file mode 100644 index 0000000..223a265 --- /dev/null +++ b/code/app/src/components/textarea.svelte @@ -0,0 +1,81 @@ + + +
+ {#if label} + + {/if} +
+