From da18c9375213440bb8e564f27a131d30c6e02d32 Mon Sep 17 00:00:00 2001 From: Blake Niemyjski Date: Sun, 21 Jan 2024 14:36:34 -0600 Subject: [PATCH 01/50] Added radio group component --- .../lib/components/ui/radio-group/index.ts | 15 ++++++++++ .../ui/radio-group/radio-group-item.svelte | 29 +++++++++++++++++++ .../ui/radio-group/radio-group.svelte | 14 +++++++++ 3 files changed, 58 insertions(+) create mode 100644 src/Exceptionless.Web/ClientApp/src/lib/components/ui/radio-group/index.ts create mode 100644 src/Exceptionless.Web/ClientApp/src/lib/components/ui/radio-group/radio-group-item.svelte create mode 100644 src/Exceptionless.Web/ClientApp/src/lib/components/ui/radio-group/radio-group.svelte diff --git a/src/Exceptionless.Web/ClientApp/src/lib/components/ui/radio-group/index.ts b/src/Exceptionless.Web/ClientApp/src/lib/components/ui/radio-group/index.ts new file mode 100644 index 0000000000..7d71e24844 --- /dev/null +++ b/src/Exceptionless.Web/ClientApp/src/lib/components/ui/radio-group/index.ts @@ -0,0 +1,15 @@ +import { RadioGroup as RadioGroupPrimitive } from 'bits-ui'; + +import Root from './radio-group.svelte'; +import Item from './radio-group-item.svelte'; +const Input = RadioGroupPrimitive.Input; + +export { + Root, + Input, + Item, + // + Root as RadioGroup, + Input as RadioGroupInput, + Item as RadioGroupItem +}; diff --git a/src/Exceptionless.Web/ClientApp/src/lib/components/ui/radio-group/radio-group-item.svelte b/src/Exceptionless.Web/ClientApp/src/lib/components/ui/radio-group/radio-group-item.svelte new file mode 100644 index 0000000000..8a5b151a19 --- /dev/null +++ b/src/Exceptionless.Web/ClientApp/src/lib/components/ui/radio-group/radio-group-item.svelte @@ -0,0 +1,29 @@ + + + +
+ + + +
+
diff --git a/src/Exceptionless.Web/ClientApp/src/lib/components/ui/radio-group/radio-group.svelte b/src/Exceptionless.Web/ClientApp/src/lib/components/ui/radio-group/radio-group.svelte new file mode 100644 index 0000000000..f4ec346719 --- /dev/null +++ b/src/Exceptionless.Web/ClientApp/src/lib/components/ui/radio-group/radio-group.svelte @@ -0,0 +1,14 @@ + + + + + From d54b02be7f80774642523a02cd77ee2266662e06 Mon Sep 17 00:00:00 2001 From: Blake Niemyjski Date: Sun, 21 Jan 2024 14:37:15 -0600 Subject: [PATCH 02/50] Early WIP of what my account page could look like (missing external logins and password forms and more) --- src/Exceptionless.Web/ClientApp/src/app.css | 1 + .../manage/(components)/sidebar-nav.svelte | 44 +++++++++++ .../(app)/account/manage/+layout.svelte | 44 +++++++++++ .../routes/(app)/account/manage/+page.svelte | 79 +++++++++++++++++++ .../(components)/ThemePreview.svelte | 50 ++++++++++++ .../account/manage/appearance/+page.svelte | 51 ++++++++++++ .../account/manage/notifications/+page.svelte | 63 +++++++++++++++ 7 files changed, 332 insertions(+) create mode 100644 src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/(components)/sidebar-nav.svelte create mode 100644 src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/+layout.svelte create mode 100644 src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/+page.svelte create mode 100644 src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/appearance/(components)/ThemePreview.svelte create mode 100644 src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/appearance/+page.svelte create mode 100644 src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/notifications/+page.svelte diff --git a/src/Exceptionless.Web/ClientApp/src/app.css b/src/Exceptionless.Web/ClientApp/src/app.css index 4c5b9afbd6..0a92078daa 100644 --- a/src/Exceptionless.Web/ClientApp/src/app.css +++ b/src/Exceptionless.Web/ClientApp/src/app.css @@ -2,6 +2,7 @@ @tailwind components; @tailwind utilities; +/* These hsl values are also present in the ThemePreview component */ @layer base { :root { --background: 0 0% 100%; diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/(components)/sidebar-nav.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/(components)/sidebar-nav.svelte new file mode 100644 index 0000000000..d5630416d8 --- /dev/null +++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/(components)/sidebar-nav.svelte @@ -0,0 +1,44 @@ + + + diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/+layout.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/+layout.svelte new file mode 100644 index 0000000000..0e2edd8794 --- /dev/null +++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/+layout.svelte @@ -0,0 +1,44 @@ + + + + My Account - Exceptionless + + + + Settings + Manage your account settings and set e-mail preferences. + + + + +
+ +
+ +
+
+
+
diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/+page.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/+page.svelte new file mode 100644 index 0000000000..96b06d5e77 --- /dev/null +++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/+page.svelte @@ -0,0 +1,79 @@ + + +
+
+

Account

+ Manage your account settings and set e-mail preferences. +
+ + + + + TODO + + Your avatar is generated by requesting a Gravatar image with the email address below. + +
+ + + +
+ +
+
+
diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/appearance/(components)/ThemePreview.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/appearance/(components)/ThemePreview.svelte new file mode 100644 index 0000000000..92d72ef3a1 --- /dev/null +++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/appearance/(components)/ThemePreview.svelte @@ -0,0 +1,50 @@ + + +{#if resolvedMode === 'light'} +
+
+ +
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+
+{:else} +
+
+ +
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+
+{/if} diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/appearance/+page.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/appearance/+page.svelte new file mode 100644 index 0000000000..e5998f6a1a --- /dev/null +++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/appearance/+page.svelte @@ -0,0 +1,51 @@ + + +
+
+

Appearance

+ Customize the appearance of the app. Automatically switch between day and night themes. +
+ + +
+ + + + + + +
+ +
+
+
diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/notifications/+page.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/notifications/+page.svelte new file mode 100644 index 0000000000..39ccbfb504 --- /dev/null +++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/notifications/+page.svelte @@ -0,0 +1,63 @@ + + +
+
+

Notifications

+ Configure how you receive notifications. +
+ + +
+ + +

Email Notifications

+
+
+

Communication emails

+ Receive emails about your account activity. +
+ +
+ +
+ +
+
+
From 610a71c945dc3123e4bcd31a5f5d4be48703ad04 Mon Sep 17 00:00:00 2001 From: Blake Niemyjski Date: Fri, 26 Jan 2024 08:05:08 -0600 Subject: [PATCH 03/50] Added security and sessions pages --- .../(components)/sidebar-nav.svelte | 0 .../(app)/account/{manage => }/+layout.svelte | 14 +- .../(components)/ThemePreview.svelte | 0 .../{manage => }/appearance/+page.svelte | 2 +- .../routes/(app)/account/manage/+page.svelte | 6 +- .../{manage => }/notifications/+page.svelte | 4 +- .../(app)/account/security/+page.svelte | 231 ++++++++++++++++++ .../(app)/account/sessions/+page.svelte | 50 ++++ .../src/routes/(auth)/login/+page.svelte | 13 +- .../src/routes/(auth)/logout/+page.svelte | 4 +- 10 files changed, 308 insertions(+), 16 deletions(-) rename src/Exceptionless.Web/ClientApp/src/routes/(app)/account/{manage => }/(components)/sidebar-nav.svelte (100%) rename src/Exceptionless.Web/ClientApp/src/routes/(app)/account/{manage => }/+layout.svelte (76%) rename src/Exceptionless.Web/ClientApp/src/routes/(app)/account/{manage => }/appearance/(components)/ThemePreview.svelte (100%) rename src/Exceptionless.Web/ClientApp/src/routes/(app)/account/{manage => }/appearance/+page.svelte (98%) rename src/Exceptionless.Web/ClientApp/src/routes/(app)/account/{manage => }/notifications/+page.svelte (95%) create mode 100644 src/Exceptionless.Web/ClientApp/src/routes/(app)/account/security/+page.svelte create mode 100644 src/Exceptionless.Web/ClientApp/src/routes/(app)/account/sessions/+page.svelte diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/(components)/sidebar-nav.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/(components)/sidebar-nav.svelte similarity index 100% rename from src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/(components)/sidebar-nav.svelte rename to src/Exceptionless.Web/ClientApp/src/routes/(app)/account/(components)/sidebar-nav.svelte diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/+layout.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/+layout.svelte similarity index 76% rename from src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/+layout.svelte rename to src/Exceptionless.Web/ClientApp/src/routes/(app)/account/+layout.svelte index 0e2edd8794..2347b80be1 100644 --- a/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/+layout.svelte +++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/+layout.svelte @@ -10,11 +10,19 @@ }, { title: 'Appearance', - href: '/next/account/manage/appearance' + href: '/next/account/appearance' }, { title: 'Notifications', - href: '/next/account/manage/notifications' + href: '/next/account/notifications' + }, + { + title: 'Password and authentication', + href: '/next/account/security' + }, + { + title: 'Sessions', + href: '/next/account/sessions' } ]; @@ -29,7 +37,7 @@ >Manage your account settings and set e-mail preferences. - +
diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/appearance/(components)/ThemePreview.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/appearance/(components)/ThemePreview.svelte similarity index 100% rename from src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/appearance/(components)/ThemePreview.svelte rename to src/Exceptionless.Web/ClientApp/src/routes/(app)/account/appearance/(components)/ThemePreview.svelte diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/appearance/+page.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/appearance/+page.svelte similarity index 98% rename from src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/appearance/+page.svelte rename to src/Exceptionless.Web/ClientApp/src/routes/(app)/account/appearance/+page.svelte index e5998f6a1a..b6bc7fcf8d 100644 --- a/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/appearance/+page.svelte +++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/appearance/+page.svelte @@ -44,7 +44,7 @@ -
+
diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/+page.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/+page.svelte index 96b06d5e77..f669ef2f48 100644 --- a/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/+page.svelte +++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/+page.svelte @@ -37,7 +37,7 @@
- + Your avatar is generated by requesting a Gravatar image with the email address below. -
+ -
+
- +

Email Notifications

@@ -50,7 +50,7 @@ >
-
+
+
+ + + {#if !enableOAuthLogin} +
+

Connected accounts

+ These are the social accounts you connected to your Exceptionless account to log + in. You can disable access here. +
+ + +
    + {#if !liveClientId} +
  • +
    + +
    Microsoft account
    +
    + {#if true} + + {:else} + + {/if} +
    +
    +
  • + {/if} + {#if !googleClientId} +
  • +
    + +
    Google account
    +
    + {#if false} + + {:else} + + {/if} +
    +
    +
  • + {/if} + {#if !facebookClientId} +
  • +
    + +
    Facebook account
    +
    + {#if false} + + {:else} + + {/if} +
    +
    +
  • + {/if} + {#if !gitHubClientId} +
  • +
    + +
    GitHub account
    +
    + {#if true} + + {:else} + + {/if} +
    +
    +
  • + {/if} +
+
+ +
+ {/if} +
diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/sessions/+page.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/sessions/+page.svelte new file mode 100644 index 0000000000..77baf16ee4 --- /dev/null +++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/account/sessions/+page.svelte @@ -0,0 +1,50 @@ + + +
+
+

Web sessions

+ This is a list of devices that have logged into your account. Revoke any sessions that + you do not recognize. +
+ + +
    +
  • +
    + +
    +

    Wisconsin

    + Signed in on +
    +
    + +
    +
    +
  • +
  • +
    + +
    +

    Texas

    + Signed in on +
    +
    + +
    +
    +
  • +
+
diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(auth)/login/+page.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(auth)/login/+page.svelte index 7ae5de3b71..22bab11f40 100644 --- a/src/Exceptionless.Web/ClientApp/src/routes/(auth)/login/+page.svelte +++ b/src/Exceptionless.Web/ClientApp/src/routes/(auth)/login/+page.svelte @@ -1,12 +1,12 @@ {#if status} diff --git a/src/Exceptionless.Web/ClientApp/src/lib/components/filters/filters.ts b/src/Exceptionless.Web/ClientApp/src/lib/components/filters/filters.ts index 44298fb55f..d1a0b22219 100644 --- a/src/Exceptionless.Web/ClientApp/src/lib/components/filters/filters.ts +++ b/src/Exceptionless.Web/ClientApp/src/lib/components/filters/filters.ts @@ -1,3 +1,4 @@ +import type { PersistentEventKnownTypes } from '$lib/models/api'; import type { StackStatus } from '$lib/models/api.generated'; import type { Serializer } from 'svelte-local-storage-store'; @@ -108,10 +109,10 @@ export class StatusFilter implements IFacetedFilter { } if (this.values.length == 1) { - return `status:${this.values[0]}`; + return `${this.term}:${this.values[0]}`; } - return `(${this.values.map((val) => `status:${val}`).join(' OR ')})`; + return `(${this.values.map((val) => `${this.term}:${val}`).join(' OR ')})`; } } @@ -132,6 +133,26 @@ export class StringFilter implements IFilter { } } +export class TypeFilter implements IFacetedFilter { + constructor(public values: PersistentEventKnownTypes[]) {} + + public term: string = 'type'; + public type: string = 'type'; + public faceted: boolean = true; + + public toFilter(): string { + if (this.values.length == 0) { + return ''; + } + + if (this.values.length == 1) { + return `${this.term}:${this.values[0]}`; + } + + return `(${this.values.map((val) => `${this.term}:${val}`).join(' OR ')})`; + } +} + export class VersionFilter implements IFilter { constructor( public term: string, @@ -292,6 +313,8 @@ export function getFilter(filter: Record): IFilter | undefined return new StatusFilter(filter.values as StackStatus[]); case 'string': return new StringFilter(filter.term as string, filter.value as string); + case 'type': + return new TypeFilter(filter.values as PersistentEventKnownTypes[]); case 'version': return new VersionFilter(filter.term as string, filter.value as string); } @@ -301,7 +324,7 @@ function isFaceted(filter: IFilter): filter is IFacetedFilter { return 'faceted' in filter; } -const FACETED_FILTER_TYPES = ['status']; +const FACETED_FILTER_TYPES = ['status', 'type']; export function toFacetedValues(filters: IFilter[]): Record { const values: Record = {}; for (const filterType of FACETED_FILTER_TYPES) { diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/+page.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/+page.svelte index e749a9b122..852120109d 100644 --- a/src/Exceptionless.Web/ClientApp/src/routes/(app)/+page.svelte +++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/+page.svelte @@ -8,7 +8,7 @@ import EventsDataTable from '$comp/events/table/EventsDataTable.svelte'; import EventsDrawer from '$comp/events/EventsDrawer.svelte'; import type { SummaryModel, SummaryTemplateKeys } from '$lib/models/api'; - import { statuses } from '$comp/events/stack'; + import { eventTypes, stackStatuses } from '$comp/events/options'; import CustomEventMessage from '$comp/messaging/CustomEventMessage.svelte'; import { filter, @@ -51,7 +51,15 @@ title="Status" key="status" values={$filterValues.status} - options={statuses} + options={stackStatuses} + onValueChange={onFacetValuesChanged} + > + + From 270782f37fca6e8d4a0066a3e0d80c2b4b2429e2 Mon Sep 17 00:00:00 2001 From: Blake Niemyjski Date: Sat, 27 Jan 2024 17:42:10 -0600 Subject: [PATCH 10/50] Updated date range width --- .../ClientApp/src/lib/components/DateRangeDropdown.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Exceptionless.Web/ClientApp/src/lib/components/DateRangeDropdown.svelte b/src/Exceptionless.Web/ClientApp/src/lib/components/DateRangeDropdown.svelte index 5bf0b19b51..7da854169f 100644 --- a/src/Exceptionless.Web/ClientApp/src/lib/components/DateRangeDropdown.svelte +++ b/src/Exceptionless.Web/ClientApp/src/lib/components/DateRangeDropdown.svelte @@ -23,7 +23,7 @@ - + From aadb5e91c3a61ee1d695d6f586b343228bcb8c75 Mon Sep 17 00:00:00 2001 From: Blake Niemyjski Date: Sun, 28 Jan 2024 10:34:02 -0600 Subject: [PATCH 11/50] WIP: Added To-do List, need to figure out page filters and stack summary grid clicks --- .../events/table/EventsDataTable.svelte | 13 +++- .../src/lib/components/filters/filters.ts | 4 +- .../(app)/(components)}/layouts/Footer.svelte | 0 .../(app)/(components)}/layouts/Navbar.svelte | 0 .../(components)}/layouts/Sidebar.svelte | 9 +++ .../layouts/SidebarMenuItem.svelte | 0 .../ClientApp/src/routes/(app)/+layout.svelte | 6 +- .../src/routes/(app)/to-do-list/+page.svelte | 65 +++++++++++++++++++ 8 files changed, 90 insertions(+), 7 deletions(-) rename src/Exceptionless.Web/ClientApp/src/{lib => routes/(app)/(components)}/layouts/Footer.svelte (100%) rename src/Exceptionless.Web/ClientApp/src/{lib => routes/(app)/(components)}/layouts/Navbar.svelte (100%) rename src/Exceptionless.Web/ClientApp/src/{lib => routes/(app)/(components)}/layouts/Sidebar.svelte (83%) rename src/Exceptionless.Web/ClientApp/src/{lib => routes/(app)/(components)}/layouts/SidebarMenuItem.svelte (100%) create mode 100644 src/Exceptionless.Web/ClientApp/src/routes/(app)/to-do-list/+page.svelte diff --git a/src/Exceptionless.Web/ClientApp/src/lib/components/events/table/EventsDataTable.svelte b/src/Exceptionless.Web/ClientApp/src/lib/components/events/table/EventsDataTable.svelte index c483dab68c..36ba59a5c0 100644 --- a/src/Exceptionless.Web/ClientApp/src/lib/components/events/table/EventsDataTable.svelte +++ b/src/Exceptionless.Web/ClientApp/src/lib/components/events/table/EventsDataTable.svelte @@ -3,7 +3,12 @@ import { createEventDispatcher } from 'svelte'; import { writable, type Readable } from 'svelte/store'; - import type { EventSummaryModel, IGetEventsParams, SummaryTemplateKeys } from '$lib/models/api'; + import type { + EventSummaryModel, + GetEventsMode, + IGetEventsParams, + SummaryTemplateKeys + } from '$lib/models/api'; import { type FetchClientResponse, globalFetchClient as api, @@ -18,9 +23,11 @@ import { limit, onFilterInputChanged } from '$lib/stores/events'; export let filter: Readable; + export let pageFilter: string | undefined = undefined; export let time: Readable; + export let mode: GetEventsMode = 'summary'; - const parameters = writable({ mode: 'summary', limit: $limit }); + const parameters = writable({ mode, limit: $limit }); const options = getOptions>(parameters); const table = createSvelteTable(options); @@ -37,7 +44,7 @@ response = await api.getJSON[]>('events', { params: { ...$parameters, - filter: $filter, + filter: [pageFilter, $filter].filter(Boolean).join(' '), time: $time } }); diff --git a/src/Exceptionless.Web/ClientApp/src/lib/components/filters/filters.ts b/src/Exceptionless.Web/ClientApp/src/lib/components/filters/filters.ts index d1a0b22219..96a33858d1 100644 --- a/src/Exceptionless.Web/ClientApp/src/lib/components/filters/filters.ts +++ b/src/Exceptionless.Web/ClientApp/src/lib/components/filters/filters.ts @@ -275,7 +275,9 @@ export function parseFilter(filters: IFilter[], input: string): IFilter[] { const part = filter.toFilter(); if (part) { // Check for whole word / phrase match - const regex = new RegExp(`(^|\\s)${part}(\\s|$)`); + const regex = new RegExp( + `(^|\\s)${part.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}(\\s|$)` + ); if (regex.test(input)) { input = input.replace(regex, ''); if (filter instanceof KeywordFilter) { diff --git a/src/Exceptionless.Web/ClientApp/src/lib/layouts/Footer.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/Footer.svelte similarity index 100% rename from src/Exceptionless.Web/ClientApp/src/lib/layouts/Footer.svelte rename to src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/Footer.svelte diff --git a/src/Exceptionless.Web/ClientApp/src/lib/layouts/Navbar.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/Navbar.svelte similarity index 100% rename from src/Exceptionless.Web/ClientApp/src/lib/layouts/Navbar.svelte rename to src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/Navbar.svelte diff --git a/src/Exceptionless.Web/ClientApp/src/lib/layouts/Sidebar.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/Sidebar.svelte similarity index 83% rename from src/Exceptionless.Web/ClientApp/src/lib/layouts/Sidebar.svelte rename to src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/Sidebar.svelte index c1135734c9..43391c9ca2 100644 --- a/src/Exceptionless.Web/ClientApp/src/lib/layouts/Sidebar.svelte +++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/Sidebar.svelte @@ -1,5 +1,6 @@ + + + To-do List - Exceptionless + + + + +
+ + To-do List + + + + + + + + + + +
+ + selectedStackId.set(null)}> + + + Event Details + + + + From e4b789714e50175ba716c7f9bf956197093ac1d2 Mon Sep 17 00:00:00 2001 From: "Eric J. Smith" Date: Sun, 28 Jan 2024 16:19:12 -0600 Subject: [PATCH 12/50] Some UI updates --- src/Exceptionless.Web/ClientApp/src/app.css | 4 +- .../lib/components/events/EventsDrawer.svelte | 3 - .../components/events/views/Request.svelte | 4 +- .../(app)/(components)/layouts/Footer.svelte | 138 +++++++++--------- .../(app)/(components)/layouts/Sidebar.svelte | 13 +- .../ClientApp/src/routes/(app)/+layout.svelte | 4 +- .../ClientApp/src/routes/(app)/+page.svelte | 11 +- 7 files changed, 87 insertions(+), 90 deletions(-) diff --git a/src/Exceptionless.Web/ClientApp/src/app.css b/src/Exceptionless.Web/ClientApp/src/app.css index 0a92078daa..cb8fd4e317 100644 --- a/src/Exceptionless.Web/ClientApp/src/app.css +++ b/src/Exceptionless.Web/ClientApp/src/app.css @@ -47,7 +47,7 @@ --popover: 222 17% 11%; --popover-foreground: 0 0% 100%; - --card: 222 17% 11%; + --card: 216 28% 7%; --card-foreground: 0 0% 100%; --border: 216 13% 15%; @@ -75,6 +75,6 @@ } body { - @apply bg-secondary text-foreground; + @apply bg-background text-foreground; } } diff --git a/src/Exceptionless.Web/ClientApp/src/lib/components/events/EventsDrawer.svelte b/src/Exceptionless.Web/ClientApp/src/lib/components/events/EventsDrawer.svelte index 6697ae1557..da9b5073b4 100644 --- a/src/Exceptionless.Web/ClientApp/src/lib/components/events/EventsDrawer.svelte +++ b/src/Exceptionless.Web/ClientApp/src/lib/components/events/EventsDrawer.svelte @@ -18,7 +18,6 @@ import { getStackByIdQuery } from '$api/queries/stacks'; import ClickableStringFilter from '$comp/filters/ClickableStringFilter.svelte'; import PromotedExtendedData from './views/PromotedExtendedData.svelte'; - import { Button } from '$comp/ui/button'; import * as Table from '$comp/ui/table'; import * as Tabs from '$comp/ui/tabs'; import P from '$comp/typography/P.svelte'; @@ -200,8 +199,6 @@ {/each} - - {:else} {/if} diff --git a/src/Exceptionless.Web/ClientApp/src/lib/components/events/views/Request.svelte b/src/Exceptionless.Web/ClientApp/src/lib/components/events/views/Request.svelte index 17daf615cf..3b1ca4496b 100644 --- a/src/Exceptionless.Web/ClientApp/src/lib/components/events/views/Request.svelte +++ b/src/Exceptionless.Web/ClientApp/src/lib/components/events/views/Request.svelte @@ -65,8 +65,8 @@ - - - - - - +
+ + +
diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/Sidebar.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/Sidebar.svelte index 43391c9ca2..b281539d67 100644 --- a/src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/Sidebar.svelte +++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/Sidebar.svelte @@ -1,7 +1,7 @@
-
- Exceptionless +
+ +
diff --git a/src/Exceptionless.Web/ClientApp/vite.config.ts b/src/Exceptionless.Web/ClientApp/vite.config.ts index 88b814257f..74b16201c1 100644 --- a/src/Exceptionless.Web/ClientApp/vite.config.ts +++ b/src/Exceptionless.Web/ClientApp/vite.config.ts @@ -1,5 +1,6 @@ import { sveltekit } from '@sveltejs/kit/vite'; import Icons from 'unplugin-icons/vite'; +import { FileSystemIconLoader } from 'unplugin-icons/loaders'; import { defineConfig } from 'vitest/config'; const aspNetConfig = getAspNetConfig(); @@ -8,7 +9,10 @@ export default defineConfig({ plugins: [ sveltekit(), Icons({ - compiler: 'svelte' + compiler: 'svelte', + customCollections: { + exceptionless: FileSystemIconLoader('./src/lib/assets/icons') + } }) ], test: { From 14a1f9dbf6ff07af1c15c16b3f91647e7d201b75 Mon Sep 17 00:00:00 2001 From: "Eric J. Smith" Date: Wed, 31 Jan 2024 23:33:41 -0600 Subject: [PATCH 16/50] Fix logos --- .../src/lib/assets/{icons => }/logo-dark.svg | 0 .../src/lib/assets/{icons => }/logo.svg | 0 .../(app)/(components)/layouts/Navbar.svelte | 30 ++++++++++++------- .../(app)/(components)/layouts/Sidebar.svelte | 6 ++-- .../src/routes/(auth)/+layout.svelte | 10 +++---- 5 files changed, 27 insertions(+), 19 deletions(-) rename src/Exceptionless.Web/ClientApp/src/lib/assets/{icons => }/logo-dark.svg (100%) rename src/Exceptionless.Web/ClientApp/src/lib/assets/{icons => }/logo.svg (100%) diff --git a/src/Exceptionless.Web/ClientApp/src/lib/assets/icons/logo-dark.svg b/src/Exceptionless.Web/ClientApp/src/lib/assets/logo-dark.svg similarity index 100% rename from src/Exceptionless.Web/ClientApp/src/lib/assets/icons/logo-dark.svg rename to src/Exceptionless.Web/ClientApp/src/lib/assets/logo-dark.svg diff --git a/src/Exceptionless.Web/ClientApp/src/lib/assets/icons/logo.svg b/src/Exceptionless.Web/ClientApp/src/lib/assets/logo.svg similarity index 100% rename from src/Exceptionless.Web/ClientApp/src/lib/assets/icons/logo.svg rename to src/Exceptionless.Web/ClientApp/src/lib/assets/logo.svg diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/Navbar.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/Navbar.svelte index 95be8a5d1d..825a021ae3 100644 --- a/src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/Navbar.svelte +++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/Navbar.svelte @@ -2,9 +2,9 @@ import IconClose from '~icons/mdi/close'; import IconMenu from '~icons/mdi/menu'; import IconSearch from '~icons/mdi/search'; - import IconExceptionlessLogo from '~icons/exceptionless/logo'; - import IconExceptionlessLogoDark from '~icons/exceptionless/logo-dark'; + import logo from '$lib/assets/logo.svg'; + import logoDark from '$lib/assets/logo-dark.svg'; import logoSmall from '$lib/assets/exceptionless-48.png'; import { isLargeScreen, isSidebarOpen } from '$lib/stores/sidebar'; import * as Avatar from '$comp/ui/avatar'; @@ -28,10 +28,10 @@ on:click={onHamburgerClick} variant="outline" size="icon" - class="hidden p-1 mr-3 lg:block" + class="mr-3 hidden p-1 lg:block" aria-controls="sidebar" > - + - + {#if $isLargeScreen} - -