From 1b3d941b7bebf56e2baa2616c700966096a53102 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Mon, 30 Sep 2024 09:24:28 +0545 Subject: [PATCH 01/34] fix(page): prettier code indentation fix --- .../src/routes/[projectId]/+page.svelte | 200 +++++++++--------- 1 file changed, 95 insertions(+), 105 deletions(-) diff --git a/src/mapper/src/routes/[projectId]/+page.svelte b/src/mapper/src/routes/[projectId]/+page.svelte index 55ed0b00dc..a1b2c23710 100644 --- a/src/mapper/src/routes/[projectId]/+page.svelte +++ b/src/mapper/src/routes/[projectId]/+page.svelte @@ -1,33 +1,29 @@ {#if $latestEvent} {/if} @@ -227,94 +223,87 @@ zoom={2} attributionControl={false} on:click={(e) => { - featureClicked.subscribe(fClicked => { - if (!fClicked) { - selectedTaskId.set(null); - } - featureClicked.set(false); + featureClicked.subscribe((fClicked) => { + if (!fClicked) { + selectedTaskId.set(null); + } + featureClicked.set(false); }); }} > - { - featureClicked.set(true); - const clickedTask = e.detail.features?.[0]?.properties?.uid; - selectedTaskId.set(clickedTask); - }} - /> - + { + featureClicked.set(true); + const clickedTask = e.detail.features?.[0]?.properties?.uid; + selectedTaskId.set(clickedTask); + }} + /> + selectedTab = e.detail.name} + on:sl-tab-show={(e) => (selectedTab = e.detail.name)} style="--panel-display: {panelDisplay};" bind:this={tabGroup} > - + {#if $taskEventArray.length > 0} {#each $taskEventArray as record} - zoomToTask(e)} + zoomToTask(e)} > {/each} {/if} - + - - TODO stuff here - - + TODO stuff here +
-
- Scan this QR Code in ODK Collect -
+
Scan this QR Code in ODK Collect
-
@@ -323,15 +312,16 @@ Download + on:click={downloadQrCode(data.project.project_info.name, qrCodeData)}>Download
Open ODK + >Open ODK
@@ -375,7 +365,7 @@ overflow: auto; border-top-left-radius: 1rem; border-top-right-radius: 1rem; - z-index: 100; /* Map is using z-index 10 */ + z-index: 100; /* Map is using z-index 10 */ } /* The tab selector */ From 09b4e56758a5afd650dd027747d347af55b3d831 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Fri, 4 Oct 2024 09:41:24 +0545 Subject: [PATCH 02/34] fix(bottomSheet): improve user experience --- .../src/components/common/BottomSheet.tsx | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/frontend/src/components/common/BottomSheet.tsx b/src/frontend/src/components/common/BottomSheet.tsx index 997730cd0d..ed10382092 100644 --- a/src/frontend/src/components/common/BottomSheet.tsx +++ b/src/frontend/src/components/common/BottomSheet.tsx @@ -46,6 +46,7 @@ const BottomSheet = ({ body, onClose }: bottomSheetType) => { }; const dragStart = (e) => { + e.preventDefault(); const pagesY = e.pageY || e.changedTouches[0].screenY; setStartY(pagesY); setStartHeight(parseInt(sheetContentRef.current.style.height)); @@ -54,6 +55,7 @@ const BottomSheet = ({ body, onClose }: bottomSheetType) => { }; const dragging = (e) => { + if (!isDragging) return; const delta = startY - (e.pageY || e.changedTouches[0].screenY); const newHeight = startHeight + (delta / window.innerHeight) * 100; bottomSheetRef.current.style.height = `100vh`; @@ -88,22 +90,21 @@ const BottomSheet = ({ body, onClose }: bottomSheetType) => {
-
-
- -
+
+
{body}
From a95002fdc087d40f03768f58742a4215d266a437 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Fri, 4 Oct 2024 10:22:52 +0545 Subject: [PATCH 03/34] fix(bottom-sheet): bottom sheet component add --- .../lib/components/common/bottom-sheet.svelte | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 src/mapper/src/lib/components/common/bottom-sheet.svelte diff --git a/src/mapper/src/lib/components/common/bottom-sheet.svelte b/src/mapper/src/lib/components/common/bottom-sheet.svelte new file mode 100644 index 0000000000..69b2e06709 --- /dev/null +++ b/src/mapper/src/lib/components/common/bottom-sheet.svelte @@ -0,0 +1,109 @@ + + +
+ +
+ +
+
+ +
+ + + +
+ +
+
+
+
From e34ec0dc778142021e6548f6828ee019250b0416 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Fri, 4 Oct 2024 10:24:03 +0545 Subject: [PATCH 04/34] fix(+page): integrate bottom sheet --- .../src/routes/[projectId]/+page.svelte | 262 +++++++++--------- 1 file changed, 137 insertions(+), 125 deletions(-) diff --git a/src/mapper/src/routes/[projectId]/+page.svelte b/src/mapper/src/routes/[projectId]/+page.svelte index a1b2c23710..d5f8d769c2 100644 --- a/src/mapper/src/routes/[projectId]/+page.svelte +++ b/src/mapper/src/routes/[projectId]/+page.svelte @@ -24,7 +24,9 @@ // import { createLiveQuery } from '$lib/live-query'; import { generateQrCode, downloadQrCode } from '$lib/qrcode'; import EventCard from '$lib/components/event-card.svelte'; + import BottomSheet from '$lib/components/common/bottom-sheet.svelte'; import Error from './+error.svelte'; + import '../../styles/page.css'; export let data: PageData; @@ -213,132 +215,141 @@ {/if} {/if} - { - featureClicked.subscribe((fClicked) => { - if (!fClicked) { - selectedTaskId.set(null); - } - featureClicked.set(false); - }); - }} -> - - { - featureClicked.set(true); - const clickedTask = e.detail.features?.[0]?.properties?.uid; - selectedTaskId.set(clickedTask); +
+ { + featureClicked.subscribe((fClicked) => { + if (!fClicked) { + selectedTaskId.set(null); + } + featureClicked.set(false); + }); + }} + > + + { + featureClicked.set(true); + const clickedTask = e.detail.features?.[0]?.properties?.uid; + selectedTaskId.set(clickedTask); + }} + /> + + + + + {#if selectedTab !== 'map'} + { + tabGroup.show('map'); }} - /> - - - - - (selectedTab = e.detail.name)} - style="--panel-display: {panelDisplay};" - bind:this={tabGroup} -> - - - - - - {#if $taskEventArray.length > 0} - {#each $taskEventArray as record} - zoomToTask(e)} - > - {/each} - {/if} - - - - TODO stuff here - - - -
- -
-
Scan this QR Code in ODK Collect
-
- - -
- -
- - -
- Download -
- - -
- Open ODK -
-
-
- - - - - - - - - - - - - -
+ > + {#if selectedTab === 'events'} + {#if $taskEventArray.length > 0} + {#each $taskEventArray as record} + zoomToTask(e)} + > + {/each} + {/if} + {/if} + {#if selectedTab === 'offline'} +
TODO stuff here
+ {/if} + {#if selectedTab === 'qrcode'} +
+ +
+
Scan this QR Code in ODK Collect
+
+ + +
+ +
+ + +
+ Download +
+ + +
+ Open ODK +
+
+ {/if} +
+ {/if} + + { + selectedTab = e.detail.name; + }} + style="--panel-display: none" + bind:this={tabGroup} + > + + + + + + + + + + + + + +
+ + From 5d2523a7a8c4b9e9b8dd1a429aafce85e3f899de Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Mon, 7 Oct 2024 11:45:07 +0545 Subject: [PATCH 09/34] feat(images): lock icons add --- src/mapper/src/assets/images/black-lock.png | Bin 0 -> 320 bytes src/mapper/src/assets/images/red-lock.png | Bin 0 -> 423 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/mapper/src/assets/images/black-lock.png create mode 100644 src/mapper/src/assets/images/red-lock.png diff --git a/src/mapper/src/assets/images/black-lock.png b/src/mapper/src/assets/images/black-lock.png new file mode 100644 index 0000000000000000000000000000000000000000..e503a93757732351f4618b3d6be5ef5fd329cdf6 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^f9gP2NC6e?^>lFz zvFLq!!O)A@QR3*w`HDFmt~$!MT%%7i7IEYjvA$ojUBL1Eggb{Ev~+!LxJX}5N`IKV zdG&&%sqBYs?)`pt{>+6n#dne#%WWRArR#pS-sRM{DDmlzKYRwq%w&EYFnSxh?cmYy z3BL{gG$fwt|0uC*x7mS(pZ>DWGhFf2y~6Xa^sms1oX*QnOq!n@+Po)eT8;kM_YRvL zT-V*+Te+U|Q*vqH+&`Wt+!e!5Yx^2DGCy_y>s9}0j%^D6PxBM%kGQqsRPV3!1$u#|sC)!_AHWI=0)Yncr!q<`uryj2BPN1i?%3RoE36g9iqp-RGhfaqB6Q>X>z2qK zunjCKcoHZ(wtbkcRy(74HEP`Y{*Dqk2D}LVyRxj^jau#GSIAvHzp1r817?gRz$35} z%JvZ1$}}3+!JQR`Xst^DK%o5TILn!OJ*kyS0;eW6i&CY?CYRZ)7f&Q!fEe)X^!uyn zR;wHAJB7mBU^u)77J!e$U@*VZZ1#RM@#6860RUWt0RU^2$}4bgMz`y_sj+v&wqv22 zH=_0JE9H(sCXs6Aaz#TD%E8r+1Uj(uye}KqC0Fg~{bF002ovPDHLkV1jjPtZ)DT literal 0 HcmV?d00001 From a78b82d02397d1611311959c49b114ada256ff63 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Mon, 7 Oct 2024 11:47:46 +0545 Subject: [PATCH 10/34] feat(+page): symbolLayer add to display lockIcons, more layer color add --- .../src/routes/[projectId]/+page.svelte | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/mapper/src/routes/[projectId]/+page.svelte b/src/mapper/src/routes/[projectId]/+page.svelte index d5f8d769c2..d323d71567 100644 --- a/src/mapper/src/routes/[projectId]/+page.svelte +++ b/src/mapper/src/routes/[projectId]/+page.svelte @@ -5,7 +5,7 @@ import { onMount, onDestroy } from 'svelte'; import { writable } from 'svelte/store'; import { Shape, ShapeStream } from '@electric-sql/client'; - import { MapLibre, GeoJSON, FillLayer, LineLayer, hoverStateFilter } from 'svelte-maplibre'; + import { MapLibre, GeoJSON, FillLayer, LineLayer, hoverStateFilter, SymbolLayer } from 'svelte-maplibre'; import type { FeatureCollection } from 'geojson'; import { polygon } from '@turf/helpers'; import { buffer } from '@turf/buffer'; @@ -27,6 +27,8 @@ import BottomSheet from '$lib/components/common/bottom-sheet.svelte'; import Error from './+error.svelte'; import '../../styles/page.css'; + import BlackLockImg from '../../assets/images/black-lock.png'; + import RedLockImg from '../../assets/images/red-lock.png'; export let data: PageData; @@ -233,6 +235,10 @@ featureClicked.set(false); }); }} + images={[ + { id: '1', url: BlackLockImg }, + { id: '3', url: RedLockImg }, + ]} > +
@@ -289,6 +307,7 @@ {/if} {#if selectedTab === 'offline'}
TODO stuff here
+ Lock Icon {/if} {#if selectedTab === 'qrcode'}
From d6f2c68d5b1dcb498b7f0943a81ad9876f1c493d Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Mon, 7 Oct 2024 17:58:57 +0545 Subject: [PATCH 11/34] feat(icons): layer, legend icon add --- src/mapper/static/assets/icons/layer.svg | 3 +++ src/mapper/static/assets/icons/legend-toggle.svg | 1 + 2 files changed, 4 insertions(+) create mode 100644 src/mapper/static/assets/icons/layer.svg create mode 100644 src/mapper/static/assets/icons/legend-toggle.svg diff --git a/src/mapper/static/assets/icons/layer.svg b/src/mapper/static/assets/icons/layer.svg new file mode 100644 index 0000000000..52dbe792f0 --- /dev/null +++ b/src/mapper/static/assets/icons/layer.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/mapper/static/assets/icons/legend-toggle.svg b/src/mapper/static/assets/icons/legend-toggle.svg new file mode 100644 index 0000000000..a2fb09e7fd --- /dev/null +++ b/src/mapper/static/assets/icons/legend-toggle.svg @@ -0,0 +1 @@ + \ No newline at end of file From b37da3882436f0c3ad2fab00d70a171fbe5fe4f4 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Mon, 7 Oct 2024 17:59:30 +0545 Subject: [PATCH 12/34] feat(clickOutside): handle outside click function add --- src/mapper/src/utilFunctions/clickOutside.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/mapper/src/utilFunctions/clickOutside.ts diff --git a/src/mapper/src/utilFunctions/clickOutside.ts b/src/mapper/src/utilFunctions/clickOutside.ts new file mode 100644 index 0000000000..a47eabbcfc --- /dev/null +++ b/src/mapper/src/utilFunctions/clickOutside.ts @@ -0,0 +1,16 @@ +/** Dispatch event on click outside of node */ +export function clickOutside(node: HTMLElement) { + const handleClick = (event: MouseEvent) => { + if (node && !node.contains(event.target as Node) && !event.defaultPrevented) { + node.dispatchEvent(new CustomEvent('click_outside', { detail: node })); + } + }; + + document.addEventListener('click', handleClick, true); + + return { + destroy() { + document.removeEventListener('click', handleClick, true); + }, + }; +} From f9e6d690a4b7de67c30addc1f60fd30a54660964 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Mon, 7 Oct 2024 18:01:02 +0545 Subject: [PATCH 13/34] fix(+page): integrate legend and layer-switcher --- src/mapper/src/routes/[projectId]/+page.svelte | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/mapper/src/routes/[projectId]/+page.svelte b/src/mapper/src/routes/[projectId]/+page.svelte index d323d71567..d2c4169b70 100644 --- a/src/mapper/src/routes/[projectId]/+page.svelte +++ b/src/mapper/src/routes/[projectId]/+page.svelte @@ -24,6 +24,8 @@ // import { createLiveQuery } from '$lib/live-query'; import { generateQrCode, downloadQrCode } from '$lib/qrcode'; import EventCard from '$lib/components/event-card.svelte'; + import Legend from '$lib/components/page/legend.svelte'; + import LayerSwitcher from '$lib/components/page/layer-switcher.svelte'; import BottomSheet from '$lib/components/common/bottom-sheet.svelte'; import Error from './+error.svelte'; import '../../styles/page.css'; @@ -289,6 +291,10 @@ }} /> +
+ + +
{#if selectedTab !== 'map'} @@ -307,7 +313,6 @@ {/if} {#if selectedTab === 'offline'}
TODO stuff here
- Lock Icon {/if} {#if selectedTab === 'qrcode'}
From ab3664a9eb9522f3f2d0f2ccaaa39e2a00f92256 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Mon, 7 Oct 2024 18:01:50 +0545 Subject: [PATCH 14/34] feat(legend): legend UI slice --- .../src/lib/components/page/legend.svelte | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/mapper/src/lib/components/page/legend.svelte diff --git a/src/mapper/src/lib/components/page/legend.svelte b/src/mapper/src/lib/components/page/legend.svelte new file mode 100644 index 0000000000..91ca4a2357 --- /dev/null +++ b/src/mapper/src/lib/components/page/legend.svelte @@ -0,0 +1,48 @@ + + +
(isOpen = false)} class="relative"> +
(isOpen = !isOpen)}> + +
+
+

Legend

+ {#each taskStatuses as taskStatus} +
+ {#if !taskStatus.color} +
+ +
+ {:else} +
+ {/if} +

{taskStatus?.status}

+
+ {/each} +
+
+ + From fb83e32a7a3675402d2a9b05272473108411a222 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Tue, 8 Oct 2024 14:10:07 +0545 Subject: [PATCH 15/34] feat(layer-switcher): component for layer switcher --- .../lib/components/page/layer-switcher.svelte | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/mapper/src/lib/components/page/layer-switcher.svelte diff --git a/src/mapper/src/lib/components/page/layer-switcher.svelte b/src/mapper/src/lib/components/page/layer-switcher.svelte new file mode 100644 index 0000000000..22a15c4124 --- /dev/null +++ b/src/mapper/src/lib/components/page/layer-switcher.svelte @@ -0,0 +1,22 @@ + + +
(isOpen = false)} class="relative"> +
(isOpen = !isOpen)}> + +
+
+ Layer Switcher +
+
+ + From 03c1d25da1cc7fcc85afaba35a416beb2646ac1f Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Wed, 9 Oct 2024 12:10:18 +0545 Subject: [PATCH 16/34] feat(close): icon add --- src/mapper/static/assets/icons/close.svg | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/mapper/static/assets/icons/close.svg diff --git a/src/mapper/static/assets/icons/close.svg b/src/mapper/static/assets/icons/close.svg new file mode 100644 index 0000000000..fdcc4e8243 --- /dev/null +++ b/src/mapper/static/assets/icons/close.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file From 1d998c5435da4a2e1996f7118fed478dadbfd86f Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Wed, 9 Oct 2024 12:16:43 +0545 Subject: [PATCH 17/34] fix(+page): task actions modal add --- .../src/routes/[projectId]/+page.svelte | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/mapper/src/routes/[projectId]/+page.svelte b/src/mapper/src/routes/[projectId]/+page.svelte index d2c4169b70..bd9263554b 100644 --- a/src/mapper/src/routes/[projectId]/+page.svelte +++ b/src/mapper/src/routes/[projectId]/+page.svelte @@ -42,6 +42,7 @@ let selectedTab: string = 'map'; let panelDisplay: string = 'none'; $: panelDisplay = selectedTab === 'map' ? 'none' : 'block'; + let toggleTaskActionModal = false; // *** Task history sync *** // const taskFeatcolStore = writable({ type: 'FeatureCollection', features: [] }); @@ -235,6 +236,7 @@ selectedTaskId.set(null); } featureClicked.set(false); + toggleTaskActionModal = false; }); }} images={[ @@ -271,6 +273,7 @@ featureClicked.set(true); const clickedTask = e.detail.features?.[0]?.properties?.uid; selectedTaskId.set(clickedTask); + toggleTaskActionModal = true; }} /> + {#if $selectedTaskId && selectedTab === 'map' && toggleTaskActionModal} +
+
+
+

Task #{$selectedTaskId}

+ (toggleTaskActionModal = false)} + > +
+ + {#if $selectedTaskStatus == 'RELEASED_FOR_MAPPING'} +

Do you want to start mapping task #{$selectedTaskId}?

+
+ CANCEL + START MAPPING +
+ {:else if $selectedTaskStatus == 'LOCKED_FOR_MAPPING'} +

Task #{$selectedTaskId} has been locked, Is the task completely mapped?

+
+ CANCEL MAPPING + COMPLETE MAPPING + GO TO ODK +
+
+ {/if} +
+
+ {/if} + {#if selectedTab !== 'map'} { From 90d8073f2604bdc664462f4f4f711e1b2883552c Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Wed, 9 Oct 2024 12:22:35 +0545 Subject: [PATCH 18/34] fix(+page): only show modal if status ready or locked for mapping --- src/mapper/src/routes/[projectId]/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mapper/src/routes/[projectId]/+page.svelte b/src/mapper/src/routes/[projectId]/+page.svelte index bd9263554b..d794d8eca6 100644 --- a/src/mapper/src/routes/[projectId]/+page.svelte +++ b/src/mapper/src/routes/[projectId]/+page.svelte @@ -300,7 +300,7 @@
- {#if $selectedTaskId && selectedTab === 'map' && toggleTaskActionModal} + {#if $selectedTaskId && selectedTab === 'map' && toggleTaskActionModal && ($selectedTaskStatus === 'RELEASED_FOR_MAPPING' || $selectedTaskStatus === 'LOCKED_FOR_MAPPING')}
Date: Tue, 15 Oct 2024 17:02:14 +0545 Subject: [PATCH 19/34] feat(icons): icon add --- src/mapper/static/assets/icons/bold.svg | 3 +++ src/mapper/static/assets/icons/code.svg | 3 +++ src/mapper/static/assets/icons/h1.svg | 3 +++ src/mapper/static/assets/icons/h2.svg | 3 +++ src/mapper/static/assets/icons/h3.svg | 3 +++ src/mapper/static/assets/icons/hr.svg | 3 +++ src/mapper/static/assets/icons/italic.svg | 3 +++ src/mapper/static/assets/icons/list-ol.svg | 4 ++++ src/mapper/static/assets/icons/quote.svg | 3 +++ src/mapper/static/assets/icons/redo.svg | 4 ++++ src/mapper/static/assets/icons/strike.svg | 3 +++ src/mapper/static/assets/icons/undo.svg | 4 ++++ 12 files changed, 39 insertions(+) create mode 100644 src/mapper/static/assets/icons/bold.svg create mode 100644 src/mapper/static/assets/icons/code.svg create mode 100644 src/mapper/static/assets/icons/h1.svg create mode 100644 src/mapper/static/assets/icons/h2.svg create mode 100644 src/mapper/static/assets/icons/h3.svg create mode 100644 src/mapper/static/assets/icons/hr.svg create mode 100644 src/mapper/static/assets/icons/italic.svg create mode 100644 src/mapper/static/assets/icons/list-ol.svg create mode 100644 src/mapper/static/assets/icons/quote.svg create mode 100644 src/mapper/static/assets/icons/redo.svg create mode 100644 src/mapper/static/assets/icons/strike.svg create mode 100644 src/mapper/static/assets/icons/undo.svg diff --git a/src/mapper/static/assets/icons/bold.svg b/src/mapper/static/assets/icons/bold.svg new file mode 100644 index 0000000000..0814a2e4a0 --- /dev/null +++ b/src/mapper/static/assets/icons/bold.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/mapper/static/assets/icons/code.svg b/src/mapper/static/assets/icons/code.svg new file mode 100644 index 0000000000..c0760e979c --- /dev/null +++ b/src/mapper/static/assets/icons/code.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/mapper/static/assets/icons/h1.svg b/src/mapper/static/assets/icons/h1.svg new file mode 100644 index 0000000000..0df41f6cf0 --- /dev/null +++ b/src/mapper/static/assets/icons/h1.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/mapper/static/assets/icons/h2.svg b/src/mapper/static/assets/icons/h2.svg new file mode 100644 index 0000000000..03379edb3f --- /dev/null +++ b/src/mapper/static/assets/icons/h2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/mapper/static/assets/icons/h3.svg b/src/mapper/static/assets/icons/h3.svg new file mode 100644 index 0000000000..97de531258 --- /dev/null +++ b/src/mapper/static/assets/icons/h3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/mapper/static/assets/icons/hr.svg b/src/mapper/static/assets/icons/hr.svg new file mode 100644 index 0000000000..6e9fbd8c58 --- /dev/null +++ b/src/mapper/static/assets/icons/hr.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/mapper/static/assets/icons/italic.svg b/src/mapper/static/assets/icons/italic.svg new file mode 100644 index 0000000000..3ac6b09f02 --- /dev/null +++ b/src/mapper/static/assets/icons/italic.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/mapper/static/assets/icons/list-ol.svg b/src/mapper/static/assets/icons/list-ol.svg new file mode 100644 index 0000000000..d111f73012 --- /dev/null +++ b/src/mapper/static/assets/icons/list-ol.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/mapper/static/assets/icons/quote.svg b/src/mapper/static/assets/icons/quote.svg new file mode 100644 index 0000000000..0aa0e175a1 --- /dev/null +++ b/src/mapper/static/assets/icons/quote.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/mapper/static/assets/icons/redo.svg b/src/mapper/static/assets/icons/redo.svg new file mode 100644 index 0000000000..324d5af1a8 --- /dev/null +++ b/src/mapper/static/assets/icons/redo.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/mapper/static/assets/icons/strike.svg b/src/mapper/static/assets/icons/strike.svg new file mode 100644 index 0000000000..c64eba34a7 --- /dev/null +++ b/src/mapper/static/assets/icons/strike.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/mapper/static/assets/icons/undo.svg b/src/mapper/static/assets/icons/undo.svg new file mode 100644 index 0000000000..3d9ff62ef6 --- /dev/null +++ b/src/mapper/static/assets/icons/undo.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file From 29857b2d776c3f82126e378098eb27a91e466ae0 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Tue, 15 Oct 2024 17:03:35 +0545 Subject: [PATCH 20/34] feat(tiptap): tiptap rich text editor package add --- src/mapper/package.json | 3 + src/mapper/pnpm-lock.yaml | 505 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 508 insertions(+) diff --git a/src/mapper/package.json b/src/mapper/package.json index ae3bf58a60..280f998fab 100644 --- a/src/mapper/package.json +++ b/src/mapper/package.json @@ -46,6 +46,9 @@ "@electric-sql/pglite": "^0.2.4", "@hotosm/ui": "0.2.0-b5", "@prisma/client": "4.8.1", + "@tiptap/core": "^2.8.0", + "@tiptap/pm": "^2.8.0", + "@tiptap/starter-kit": "^2.8.0", "@turf/bbox": "^7.0.0", "@turf/buffer": "^7.0.0", "@turf/helpers": "^7.0.0", diff --git a/src/mapper/pnpm-lock.yaml b/src/mapper/pnpm-lock.yaml index 3d558642dd..d91154848f 100644 --- a/src/mapper/pnpm-lock.yaml +++ b/src/mapper/pnpm-lock.yaml @@ -23,6 +23,15 @@ importers: '@shoelace-style/shoelace': specifier: ^2.15.1 version: 2.15.1(@types/react@18.3.3) + '@tiptap/core': + specifier: ^2.8.0 + version: 2.8.0(@tiptap/pm@2.8.0) + '@tiptap/pm': + specifier: ^2.8.0 + version: 2.8.0 + '@tiptap/starter-kit': + specifier: ^2.8.0 + version: 2.8.0(@tiptap/extension-text-style@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))) '@turf/bbox': specifier: ^7.0.0 version: 7.0.0 @@ -573,6 +582,9 @@ packages: '@prisma/engines@4.8.1': resolution: {integrity: sha512-93tctjNXcIS+i/e552IO6tqw17sX8liivv8WX9lDMCpEEe3ci+nT9F+1oHtAafqruXLepKF80i/D20Mm+ESlOw==} + '@remirror/core-constants@3.0.0': + resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==} + '@rollup/pluginutils@5.1.0': resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} @@ -713,6 +725,121 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 + '@tiptap/core@2.8.0': + resolution: {integrity: sha512-xsqDI4BNzYRWRtBq7+/38ThhqEr7uG9Njip1x+9/wgR3vWPBFnBkYJTz6jSxS35NRE6BSnERm4/B/vrLuY1Hdw==} + peerDependencies: + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-blockquote@2.8.0': + resolution: {integrity: sha512-m3CKrOIvV7fY1Ak2gYf5LkKiz6AHxHpg6wxfVaJvdBqXgLyVtHo552N+A4oSHOSRbB4AG9EBQ2NeBM8cdEQ4MA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-bold@2.8.0': + resolution: {integrity: sha512-U1YkZBxDkSLNvPNiqxB5g42IeJHr27C7zDb/yGQN2xL4UBeg4O9xVhCFfe32f6tLwivSL0dar4ScElpaCJuqow==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-bullet-list@2.8.0': + resolution: {integrity: sha512-H4O2X0ozbc/ce9/XF1H98sqWVUdtt7jzy7hMBunwmY8ZxI4dHtcRkeg81CZbpKTqOqRrMCLWjE3M2tgiDXrDkA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/extension-list-item': ^2.7.0 + '@tiptap/extension-text-style': ^2.7.0 + + '@tiptap/extension-code-block@2.8.0': + resolution: {integrity: sha512-POuA5Igx+Dto0DTazoBFAQTj/M/FCdkqRVD9Uhsxhv49swPyANTJRr05vgbgtHB+NDDsZfCawVh7pI0IAD/O0w==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-code@2.8.0': + resolution: {integrity: sha512-VSFn3sFF6qPpOGkXFhik8oYRH5iByVJpFEFd/duIEftmS0MdPzkbSItOpN3mc9xsJ5dCX80LYaResSj5hr5zkA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-document@2.8.0': + resolution: {integrity: sha512-mp7Isx1sVc/ifeW4uW/PexGQ9exN3NRUOebSpnLfqXeWYk4y1RS1PA/3+IHkOPVetbnapgPjFx/DswlCP3XLjA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-dropcursor@2.8.0': + resolution: {integrity: sha512-rAFvx44YuT6dtS1c+ALw0ROAGI16l5L1HxquL4hR1gtxDcTieST5xhw5bkshXlmrlfotZXPrhokzqA7qjhZtJw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-gapcursor@2.8.0': + resolution: {integrity: sha512-Be1LWCmvteQInOnNVN+HTqc1XWsj1bCl+Q7et8qqNjtGtTaCbdCp8ppcH1SKJxNTM/RLUtPyJ8FDgOTj51ixCA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-hard-break@2.8.0': + resolution: {integrity: sha512-vqiIfviNiCmy/pJTHuDSCAGL2O4QDEdDmAvGJu8oRmElUrnlg8DbJUfKvn6DWQHNSQwRb+LDrwWlzAYj1K9u6A==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-heading@2.8.0': + resolution: {integrity: sha512-4inWgrTPiqlivPmEHFOM5ck2UsmOsbKKPtqga6bALvWPmCv24S6/EBwFp8Jz4YABabXDnkviihmGu0LpP9D69w==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-history@2.8.0': + resolution: {integrity: sha512-u5YS0J5Egsxt8TUWMMAC3QhPZaak+IzQeyHch4gtqxftx96tprItY7AD/A3pGDF2uCSnN+SZrk6yVexm6EncDw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-horizontal-rule@2.8.0': + resolution: {integrity: sha512-Sn/MI8WVFBoIYSIHA9NJryJIyCEzZdRysau8pC5TFnfifre0QV1ksPz2bgF+DyCD69ozQiRdBBHDEwKe47ZbfQ==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-italic@2.8.0': + resolution: {integrity: sha512-PwwSE2LTYiHI47NJnsfhBmPiLE8IXZYqaSoNPU6flPrk1KxEzqvRI1joKZBmD9wuqzmHJ93VFIeZcC+kfwi8ZA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-list-item@2.8.0': + resolution: {integrity: sha512-o7OGymGxB0B9x3x2prp3KBDYFuBYGc5sW69O672jk8G52DqhzzndgPnkk0qUn8nXAUKuDGbJmpmHVA2kagqnRg==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-ordered-list@2.8.0': + resolution: {integrity: sha512-sCvNbcTS1+5QTTXwUPFa10vf5I1pr8sGcOTIh0G+a5ZkS5+6FxT12k7VLzPt39QyNbOi+77U2o4Xr4XyaEkfSg==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/extension-list-item': ^2.7.0 + '@tiptap/extension-text-style': ^2.7.0 + + '@tiptap/extension-paragraph@2.8.0': + resolution: {integrity: sha512-XgxxNNbuBF48rAGwv7/s6as92/xjm/lTZIGTq9aG13ClUKFtgdel7C33SpUCcxg3cO2WkEyllXVyKUiauFZw/A==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-strike@2.8.0': + resolution: {integrity: sha512-ezkDiXxQ3ME/dDMMM7tAMkKRi6UWw7tIu+Mx7Os0z8HCGpVBk1gFhLlhEd8I5rJaPZr4tK1wtSehMA9bscFGQw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-text-style@2.8.0': + resolution: {integrity: sha512-jJp0vcZ2Ty7RvIL0VU6dm1y+fTfXq1lN2GwtYzYM0ueFuESa+Qo8ticYOImyWZ3wGJGVrjn7OV9r0ReW0/NYkQ==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-text@2.8.0': + resolution: {integrity: sha512-EDAdFFzWOvQfVy7j3qkKhBpOeE5thkJaBemSWfXI93/gMVc0ZCdLi24mDvNNgUHlT+RjlIoQq908jZaaxLKN2A==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/pm@2.8.0': + resolution: {integrity: sha512-eMGpRooUMvKz/vOpnKKppApMSoNM325HxTdAJvTlVAmuHp5bOY5kyY1kfUlePRiVx1t1UlFcXs3kecFwkkBD3Q==} + + '@tiptap/starter-kit@2.8.0': + resolution: {integrity: sha512-r7UwaTrECkQoheWVZKFDqtL5tBx07x7IFT+prfgnsVlYFutGWskVVqzCDvD3BDmrg5PzeCWYZrQGlPaLib7tjg==} + '@turf/bbox@7.0.0': resolution: {integrity: sha512-IyXG5HAsn6IZLdAtQo7aWYccjU5WsV+uzIzhGaXrh/qTVylSYmRiWgLdiekHZVED9nv9r7D/EJUMOT4zyA6POA==} @@ -761,12 +888,21 @@ packages: '@types/leaflet@1.9.12': resolution: {integrity: sha512-BK7XS+NyRI291HIo0HCfE18Lp8oA30H1gpi1tf0mF3TgiCEzanQjOqNZ4x126SXzzi2oNSZhZ5axJp1k0iM6jg==} + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + '@types/mapbox__point-geometry@0.1.4': resolution: {integrity: sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==} '@types/mapbox__vector-tile@1.3.4': resolution: {integrity: sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==} + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + '@types/node@20.14.8': resolution: {integrity: sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==} @@ -1134,6 +1270,9 @@ packages: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} + crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -1323,6 +1462,10 @@ packages: electron-to-chromium@1.4.827: resolution: {integrity: sha512-VY+J0e4SFcNfQy19MEoMdaIcZLmDCprqvBtkii1WTCTQHpRvf5N8+3kTYCgL/PcntvwQvmMJWTuDPsq+IlhWKQ==} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -1830,6 +1973,9 @@ packages: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + lit-element@4.0.6: resolution: {integrity: sha512-U4sdJ3CSQip7sLGZ/uJskO5hGiqtlpxndsLr6mt3IQIjheg93UKYeGQjWMRql1s/cXNOaRrCzC2FQwjIwSUqkg==} @@ -1875,9 +2021,16 @@ packages: resolution: {integrity: sha512-qOS1hn4d/pn2i0uva4S5Oz+fACzTkgBKq+NpwT/Tqzi4MSyzcWNtDELzLUSgWqHfNIkGCl5CZ/w7dtis+t4RCw==} engines: {node: '>=16.14.0', npm: '>=8.1.0'} + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -1992,6 +2145,9 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + orderedmap@2.1.1: + resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -2133,9 +2289,71 @@ packages: engines: {node: '>=14.17'} hasBin: true + prosemirror-changeset@2.2.1: + resolution: {integrity: sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ==} + + prosemirror-collab@1.3.1: + resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==} + + prosemirror-commands@1.6.0: + resolution: {integrity: sha512-xn1U/g36OqXn2tn5nGmvnnimAj/g1pUx2ypJJIe8WkVX83WyJVC5LTARaxZa2AtQRwntu9Jc5zXs9gL9svp/mg==} + + prosemirror-dropcursor@1.8.1: + resolution: {integrity: sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw==} + + prosemirror-gapcursor@1.3.2: + resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} + + prosemirror-history@1.4.1: + resolution: {integrity: sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==} + + prosemirror-inputrules@1.4.0: + resolution: {integrity: sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==} + + prosemirror-keymap@1.2.2: + resolution: {integrity: sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==} + + prosemirror-markdown@1.13.1: + resolution: {integrity: sha512-Sl+oMfMtAjWtlcZoj/5L/Q39MpEnVZ840Xo330WJWUvgyhNmLBLN7MsHn07s53nG/KImevWHSE6fEj4q/GihHw==} + + prosemirror-menu@1.2.4: + resolution: {integrity: sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA==} + + prosemirror-model@1.23.0: + resolution: {integrity: sha512-Q/fgsgl/dlOAW9ILu4OOhYWQbc7TQd4BwKH/RwmUjyVf8682Be4zj3rOYdLnYEcGzyg8LL9Q5IWYKD8tdToreQ==} + + prosemirror-schema-basic@1.2.3: + resolution: {integrity: sha512-h+H0OQwZVqMon1PNn0AG9cTfx513zgIG2DY00eJ00Yvgb3UD+GQ/VlWW5rcaxacpCGT1Yx8nuhwXk4+QbXUfJA==} + + prosemirror-schema-list@1.4.1: + resolution: {integrity: sha512-jbDyaP/6AFfDfu70VzySsD75Om2t3sXTOdl5+31Wlxlg62td1haUpty/ybajSfJ1pkGadlOfwQq9kgW5IMo1Rg==} + + prosemirror-state@1.4.3: + resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} + + prosemirror-tables@1.5.0: + resolution: {integrity: sha512-VMx4zlYWm7aBlZ5xtfJHpqa3Xgu3b7srV54fXYnXgsAcIGRqKSrhiK3f89omzzgaAgAtDOV4ImXnLKhVfheVNQ==} + + prosemirror-trailing-node@3.0.0: + resolution: {integrity: sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==} + peerDependencies: + prosemirror-model: ^1.22.1 + prosemirror-state: ^1.4.2 + prosemirror-view: ^1.33.8 + + prosemirror-transform@1.10.0: + resolution: {integrity: sha512-9UOgFSgN6Gj2ekQH5CTDJ8Rp/fnKR2IkYfGdzzp5zQMFsS4zDllLVx/+jGcX86YlACpG7UR5fwAXiWzxqWtBTg==} + + prosemirror-view@1.34.3: + resolution: {integrity: sha512-mKZ54PrX19sSaQye+sef+YjBbNu2voNwLS1ivb6aD2IRmxRGW64HU9B644+7OfJStGLyxvOreKqEgfvXa91WIA==} + protocol-buffers-schema@3.6.0: resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -2186,6 +2404,9 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rope-sequence@1.3.4: + resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -2462,6 +2683,9 @@ packages: typewise@1.0.3: resolution: {integrity: sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ==} + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + ufo@1.5.3: resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} @@ -2572,6 +2796,9 @@ packages: vt-pbf@3.1.3: resolution: {integrity: sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==} + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -3091,6 +3318,8 @@ snapshots: '@prisma/engines@4.8.1': {} + '@remirror/core-constants@3.0.0': {} + '@rollup/pluginutils@5.1.0(rollup@4.18.0)': dependencies: '@types/estree': 1.0.5 @@ -3228,6 +3457,141 @@ snapshots: transitivePeerDependencies: - supports-color + '@tiptap/core@2.8.0(@tiptap/pm@2.8.0)': + dependencies: + '@tiptap/pm': 2.8.0 + + '@tiptap/extension-blockquote@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + + '@tiptap/extension-bold@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + + '@tiptap/extension-bullet-list@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))(@tiptap/extension-list-item@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)))(@tiptap/extension-text-style@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)))': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + '@tiptap/extension-list-item': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)) + '@tiptap/extension-text-style': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)) + + '@tiptap/extension-code-block@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))(@tiptap/pm@2.8.0)': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + '@tiptap/pm': 2.8.0 + + '@tiptap/extension-code@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + + '@tiptap/extension-document@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + + '@tiptap/extension-dropcursor@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))(@tiptap/pm@2.8.0)': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + '@tiptap/pm': 2.8.0 + + '@tiptap/extension-gapcursor@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))(@tiptap/pm@2.8.0)': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + '@tiptap/pm': 2.8.0 + + '@tiptap/extension-hard-break@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + + '@tiptap/extension-heading@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + + '@tiptap/extension-history@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))(@tiptap/pm@2.8.0)': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + '@tiptap/pm': 2.8.0 + + '@tiptap/extension-horizontal-rule@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))(@tiptap/pm@2.8.0)': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + '@tiptap/pm': 2.8.0 + + '@tiptap/extension-italic@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + + '@tiptap/extension-list-item@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + + '@tiptap/extension-ordered-list@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))(@tiptap/extension-list-item@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)))(@tiptap/extension-text-style@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)))': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + '@tiptap/extension-list-item': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)) + '@tiptap/extension-text-style': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)) + + '@tiptap/extension-paragraph@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + + '@tiptap/extension-strike@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + + '@tiptap/extension-text-style@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + + '@tiptap/extension-text@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + + '@tiptap/pm@2.8.0': + dependencies: + prosemirror-changeset: 2.2.1 + prosemirror-collab: 1.3.1 + prosemirror-commands: 1.6.0 + prosemirror-dropcursor: 1.8.1 + prosemirror-gapcursor: 1.3.2 + prosemirror-history: 1.4.1 + prosemirror-inputrules: 1.4.0 + prosemirror-keymap: 1.2.2 + prosemirror-markdown: 1.13.1 + prosemirror-menu: 1.2.4 + prosemirror-model: 1.23.0 + prosemirror-schema-basic: 1.2.3 + prosemirror-schema-list: 1.4.1 + prosemirror-state: 1.4.3 + prosemirror-tables: 1.5.0 + prosemirror-trailing-node: 3.0.0(prosemirror-model@1.23.0)(prosemirror-state@1.4.3)(prosemirror-view@1.34.3) + prosemirror-transform: 1.10.0 + prosemirror-view: 1.34.3 + + '@tiptap/starter-kit@2.8.0(@tiptap/extension-text-style@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)))': + dependencies: + '@tiptap/core': 2.8.0(@tiptap/pm@2.8.0) + '@tiptap/extension-blockquote': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)) + '@tiptap/extension-bold': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)) + '@tiptap/extension-bullet-list': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))(@tiptap/extension-list-item@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)))(@tiptap/extension-text-style@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))) + '@tiptap/extension-code': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)) + '@tiptap/extension-code-block': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))(@tiptap/pm@2.8.0) + '@tiptap/extension-document': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)) + '@tiptap/extension-dropcursor': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))(@tiptap/pm@2.8.0) + '@tiptap/extension-gapcursor': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))(@tiptap/pm@2.8.0) + '@tiptap/extension-hard-break': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)) + '@tiptap/extension-heading': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)) + '@tiptap/extension-history': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))(@tiptap/pm@2.8.0) + '@tiptap/extension-horizontal-rule': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))(@tiptap/pm@2.8.0) + '@tiptap/extension-italic': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)) + '@tiptap/extension-list-item': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)) + '@tiptap/extension-ordered-list': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))(@tiptap/extension-list-item@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)))(@tiptap/extension-text-style@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))) + '@tiptap/extension-paragraph': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)) + '@tiptap/extension-strike': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)) + '@tiptap/extension-text': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)) + '@tiptap/pm': 2.8.0 + transitivePeerDependencies: + - '@tiptap/extension-text-style' + '@turf/bbox@7.0.0': dependencies: '@turf/helpers': 7.0.0 @@ -3298,6 +3662,8 @@ snapshots: dependencies: '@types/geojson': 7946.0.14 + '@types/linkify-it@5.0.0': {} + '@types/mapbox__point-geometry@0.1.4': {} '@types/mapbox__vector-tile@1.3.4': @@ -3306,6 +3672,13 @@ snapshots: '@types/mapbox__point-geometry': 0.1.4 '@types/pbf': 3.0.5 + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + + '@types/mdurl@2.0.0': {} + '@types/node@20.14.8': dependencies: undici-types: 5.26.5 @@ -3781,6 +4154,8 @@ snapshots: cookie@0.6.0: {} + crelt@1.0.6: {} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 @@ -3888,6 +4263,8 @@ snapshots: electron-to-chromium@1.4.827: {} + entities@4.5.0: {} + es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 @@ -4410,6 +4787,10 @@ snapshots: lilconfig@2.1.0: {} + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + lit-element@4.0.6: dependencies: '@lit-labs/ssr-dom-shim': 1.2.0 @@ -4497,8 +4878,19 @@ snapshots: tinyqueue: 2.0.3 vt-pbf: 3.1.3 + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + mdn-data@2.0.30: {} + mdurl@2.0.0: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -4604,6 +4996,8 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + orderedmap@2.1.1: {} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -4721,8 +5115,113 @@ snapshots: dependencies: '@prisma/engines': 4.8.1 + prosemirror-changeset@2.2.1: + dependencies: + prosemirror-transform: 1.10.0 + + prosemirror-collab@1.3.1: + dependencies: + prosemirror-state: 1.4.3 + + prosemirror-commands@1.6.0: + dependencies: + prosemirror-model: 1.23.0 + prosemirror-state: 1.4.3 + prosemirror-transform: 1.10.0 + + prosemirror-dropcursor@1.8.1: + dependencies: + prosemirror-state: 1.4.3 + prosemirror-transform: 1.10.0 + prosemirror-view: 1.34.3 + + prosemirror-gapcursor@1.3.2: + dependencies: + prosemirror-keymap: 1.2.2 + prosemirror-model: 1.23.0 + prosemirror-state: 1.4.3 + prosemirror-view: 1.34.3 + + prosemirror-history@1.4.1: + dependencies: + prosemirror-state: 1.4.3 + prosemirror-transform: 1.10.0 + prosemirror-view: 1.34.3 + rope-sequence: 1.3.4 + + prosemirror-inputrules@1.4.0: + dependencies: + prosemirror-state: 1.4.3 + prosemirror-transform: 1.10.0 + + prosemirror-keymap@1.2.2: + dependencies: + prosemirror-state: 1.4.3 + w3c-keyname: 2.2.8 + + prosemirror-markdown@1.13.1: + dependencies: + '@types/markdown-it': 14.1.2 + markdown-it: 14.1.0 + prosemirror-model: 1.23.0 + + prosemirror-menu@1.2.4: + dependencies: + crelt: 1.0.6 + prosemirror-commands: 1.6.0 + prosemirror-history: 1.4.1 + prosemirror-state: 1.4.3 + + prosemirror-model@1.23.0: + dependencies: + orderedmap: 2.1.1 + + prosemirror-schema-basic@1.2.3: + dependencies: + prosemirror-model: 1.23.0 + + prosemirror-schema-list@1.4.1: + dependencies: + prosemirror-model: 1.23.0 + prosemirror-state: 1.4.3 + prosemirror-transform: 1.10.0 + + prosemirror-state@1.4.3: + dependencies: + prosemirror-model: 1.23.0 + prosemirror-transform: 1.10.0 + prosemirror-view: 1.34.3 + + prosemirror-tables@1.5.0: + dependencies: + prosemirror-keymap: 1.2.2 + prosemirror-model: 1.23.0 + prosemirror-state: 1.4.3 + prosemirror-transform: 1.10.0 + prosemirror-view: 1.34.3 + + prosemirror-trailing-node@3.0.0(prosemirror-model@1.23.0)(prosemirror-state@1.4.3)(prosemirror-view@1.34.3): + dependencies: + '@remirror/core-constants': 3.0.0 + escape-string-regexp: 4.0.0 + prosemirror-model: 1.23.0 + prosemirror-state: 1.4.3 + prosemirror-view: 1.34.3 + + prosemirror-transform@1.10.0: + dependencies: + prosemirror-model: 1.23.0 + + prosemirror-view@1.34.3: + dependencies: + prosemirror-model: 1.23.0 + prosemirror-state: 1.4.3 + prosemirror-transform: 1.10.0 + protocol-buffers-schema@3.6.0: {} + punycode.js@2.3.1: {} + punycode@2.3.1: {} qr-creator@1.0.0: {} @@ -4782,6 +5281,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.18.0 fsevents: 2.3.3 + rope-sequence@1.3.4: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -5039,6 +5540,8 @@ snapshots: dependencies: typewise-core: 1.2.0 + uc.micro@2.1.0: {} + ufo@1.5.3: {} unconfig@0.3.13: @@ -5168,6 +5671,8 @@ snapshots: '@mapbox/vector-tile': 1.3.1 pbf: 3.2.1 + w3c-keyname@2.2.8: {} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 From 4e6697c61e251c73664fcca52289441e04299134 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Tue, 15 Oct 2024 17:17:14 +0545 Subject: [PATCH 21/34] feat(editor): tiptap rich text editor add --- .../lib/components/common/Editor/editor.css | 74 ++++++++++++ .../components/common/Editor/editor.svelte | 51 ++++++++ .../components/common/Editor/toolbar.svelte | 109 ++++++++++++++++++ 3 files changed, 234 insertions(+) create mode 100644 src/mapper/src/lib/components/common/Editor/editor.css create mode 100644 src/mapper/src/lib/components/common/Editor/editor.svelte create mode 100644 src/mapper/src/lib/components/common/Editor/toolbar.svelte diff --git a/src/mapper/src/lib/components/common/Editor/editor.css b/src/mapper/src/lib/components/common/Editor/editor.css new file mode 100644 index 0000000000..f482a7d7ac --- /dev/null +++ b/src/mapper/src/lib/components/common/Editor/editor.css @@ -0,0 +1,74 @@ +.tiptap { + outline: none !important; + padding-left: 1rem; + padding-right: 1rem; + height: 100px; + overflow-y: scroll; +} + +@media screen and (max-width: 500px) { + .tiptap { + height: 80px; + overflow-y: scroll; + } +} + +.tiptap code { + background-color: rgba(#616161, 0.1); + color: #616161; +} + +.tiptap pre { + background: #0d0d0d; + color: #fff; + font-family: 'JetBrainsMono', monospace; + padding: 0.75rem 1rem; + border-radius: 0.5rem; +} +.tiptap pre code { + color: inherit; + padding: 0; + background: none; + font-size: 0.8rem; +} + +.tiptap img { + max-width: 100%; + height: auto; +} + +.tiptap blockquote { + padding-left: 1rem; + border-left: 2px solid #c2c2c2; +} + +.tiptap hr { + border: none; + border-top: 1px solid #c2c2c2; + margin: 1.5rem 0; +} + +.tiptap a { + color: #0092d1; + text-decoration: underline; + cursor: pointer; +} + +.tiptap iframe { + border: 8px solid #000; + border-radius: 4px; + min-width: 200px; + min-height: 200px; + display: block; + outline: 0px solid transparent; +} + +.tiptap div[data-youtube-video] { + cursor: move; + padding-right: 24px; +} + +.tiptap .ProseMirror-selectednode iframe { + transition: outline 0.15s; + outline: 6px solid #ece111; +} diff --git a/src/mapper/src/lib/components/common/Editor/editor.svelte b/src/mapper/src/lib/components/common/Editor/editor.svelte new file mode 100644 index 0000000000..f5feb8ad25 --- /dev/null +++ b/src/mapper/src/lib/components/common/Editor/editor.svelte @@ -0,0 +1,51 @@ + + +
+
+ {#if editor} + + {/if} + +
+
+
+ CLEAR + COMMENT +
+
+ + diff --git a/src/mapper/src/lib/components/common/Editor/toolbar.svelte b/src/mapper/src/lib/components/common/Editor/toolbar.svelte new file mode 100644 index 0000000000..2615be65f1 --- /dev/null +++ b/src/mapper/src/lib/components/common/Editor/toolbar.svelte @@ -0,0 +1,109 @@ + + +
+ + editor?.chain()?.focus()?.toggleBold().run()} + > + + + editor?.chain()?.focus()?.toggleItalic().run()} + > + + + editor?.chain()?.focus()?.toggleStrike().run()} + > + + + editor?.chain()?.focus()?.toggleHeading({ level: 1 }).run()} + > + + + editor?.chain()?.focus()?.toggleHeading({ level: 2 }).run()} + > + + + editor?.chain()?.focus()?.toggleHeading({ level: 3 }).run()} + > + + + editor?.chain()?.focus()?.toggleBulletList().run()} + > + + + editor?.chain()?.focus()?.toggleOrderedList().run()} + > + + + editor?.chain()?.focus()?.toggleCodeBlock().run()} + > + + + editor?.chain()?.focus()?.toggleBlockquote().run()} + > + + + editor?.chain()?.focus()?.setHorizontalRule().run()} + > + + + editor?.chain()?.focus()?.undo().run()}> + + + editor?.chain()?.focus()?.redo().run()}> + +
+ + From 54f5158e4d37bc05fe09fc378613df0e5c0b4bc2 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Tue, 15 Oct 2024 17:18:01 +0545 Subject: [PATCH 22/34] fix(bottom-sheet): fix css --- src/mapper/src/lib/components/common/bottom-sheet.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mapper/src/lib/components/common/bottom-sheet.svelte b/src/mapper/src/lib/components/common/bottom-sheet.svelte index c806f95842..4d0c7804bf 100644 --- a/src/mapper/src/lib/components/common/bottom-sheet.svelte +++ b/src/mapper/src/lib/components/common/bottom-sheet.svelte @@ -96,12 +96,12 @@ on:mouseup={dragStop} on:mouseout={dragStop} > - +
-
+
From 84e7e9aeb83ae8f1c3aae298f3049f11c540228e Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Tue, 15 Oct 2024 17:19:02 +0545 Subject: [PATCH 23/34] feat(more): implement text editor on comment section --- .../src/lib/components/page/more/index.svelte | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/mapper/src/lib/components/page/more/index.svelte b/src/mapper/src/lib/components/page/more/index.svelte index 8d51d94c28..c42a184a6f 100644 --- a/src/mapper/src/lib/components/page/more/index.svelte +++ b/src/mapper/src/lib/components/page/more/index.svelte @@ -1,4 +1,6 @@ -
+
{#if activeStack === ''} {#each stackGroup as stack}
{#if activeStack !== ''} -
+
{#if activeStack === 'Comment'} -
-

Comment

+
+
+ +
+ +
{/if} {#if activeStack === 'Instructions'} -
+

Instructions

{/if} From f76d3fc84b6a5cfe56107507971d1bde45579890 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Tue, 15 Oct 2024 17:21:30 +0545 Subject: [PATCH 24/34] fix(+page): more section add --- src/mapper/src/routes/[projectId]/+page.svelte | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/mapper/src/routes/[projectId]/+page.svelte b/src/mapper/src/routes/[projectId]/+page.svelte index d794d8eca6..a126c32b6f 100644 --- a/src/mapper/src/routes/[projectId]/+page.svelte +++ b/src/mapper/src/routes/[projectId]/+page.svelte @@ -31,6 +31,7 @@ import '../../styles/page.css'; import BlackLockImg from '../../assets/images/black-lock.png'; import RedLockImg from '../../assets/images/red-lock.png'; + import More from '../../lib/components/page/more/index.svelte'; export let data: PageData; @@ -360,6 +361,9 @@ > {/each} {/if} + + + {/if} {#if selectedTab === 'offline'}
TODO stuff here
From f3c7a572d7680753ea6c78622321bdada58aedc2 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Wed, 16 Oct 2024 10:56:28 +0545 Subject: [PATCH 25/34] feat(button): button css define --- src/mapper/src/styles/button.css | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/mapper/src/styles/button.css diff --git a/src/mapper/src/styles/button.css b/src/mapper/src/styles/button.css new file mode 100644 index 0000000000..fd7b7e18d5 --- /dev/null +++ b/src/mapper/src/styles/button.css @@ -0,0 +1,28 @@ +sl-button.primary::part(base) { + background-color: #d73f37; + color: white; + border: 0px; +} +sl-button.primary::part(base):hover { + background-color: #b91c1c; +} + +sl-button.secondary::part(base) { + background-color: white; + color: #d73f37; + border-width: 1px; + border-color: #d73f37; +} +sl-button.secondary::part(base):hover { + color: #b91c1c; + border-color: #b91c1c; +} + +sl-button.gray::part(base) { + background-color: #4c4c4c; + color: white; + border-width: 0px; +} +sl-button.gray::part(base):hover { + background-color: #5f5f5f; +} From a9410a61d1d1f0112d76b455036785f83c367587 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Wed, 16 Oct 2024 10:57:23 +0545 Subject: [PATCH 26/34] fix(button): btn classes add for styling --- .../components/common/Editor/editor.svelte | 7 ++-- .../src/routes/[projectId]/+page.svelte | 39 ++++++++++++------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/mapper/src/lib/components/common/Editor/editor.svelte b/src/mapper/src/lib/components/common/Editor/editor.svelte index f5feb8ad25..5f24cb9dd6 100644 --- a/src/mapper/src/lib/components/common/Editor/editor.svelte +++ b/src/mapper/src/lib/components/common/Editor/editor.svelte @@ -4,6 +4,7 @@ import StarterKit from '@tiptap/starter-kit'; import Toolbar from './toolbar.svelte'; import './editor.css'; + import '../../../../styles/button.css'; let element; let editor; @@ -39,10 +40,10 @@ on:click={editor?.commands.clearContent(true)} variant="default" size="small" - class="col-span-2 sm:col-span-1">CLEARCLEAR - COMMENTCOMMENT
diff --git a/src/mapper/src/routes/[projectId]/+page.svelte b/src/mapper/src/routes/[projectId]/+page.svelte index a126c32b6f..30ab932a4c 100644 --- a/src/mapper/src/routes/[projectId]/+page.svelte +++ b/src/mapper/src/routes/[projectId]/+page.svelte @@ -32,6 +32,7 @@ import BlackLockImg from '../../assets/images/black-lock.png'; import RedLockImg from '../../assets/images/red-lock.png'; import More from '../../lib/components/page/more/index.svelte'; + import '../../styles/button.css'; export let data: PageData; @@ -322,24 +323,31 @@ on:click={mapTask(data.projectId, $selectedTaskId)} size="small" variant="default" - class="font-barlow-semibold" - outline>CANCELCANCEL - START MAPPINGSTART MAPPING
{:else if $selectedTaskStatus == 'LOCKED_FOR_MAPPING'}

Task #{$selectedTaskId} has been locked, Is the task completely mapped?

- CANCEL MAPPINGCANCEL MAPPING - COMPLETE MAPPINGCOMPLETE MAPPING - GO TO ODKGO TO ODK
@@ -355,21 +363,21 @@ }} > {#if selectedTab === 'events'} - {#if $taskEventArray.length > 0} + - + {/if} {#if selectedTab === 'offline'}
TODO stuff here
{/if} {#if selectedTab === 'qrcode'} -
+
Scan this QR Code in ODK Collect
@@ -393,8 +401,9 @@
Open ODKOpen ODK
From 6de04dc0bb0c134763addfd6cfdb0f76d3da88ba Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Wed, 16 Oct 2024 11:53:53 +0545 Subject: [PATCH 27/34] feat(icons): icons add --- src/mapper/static/assets/icons/check.svg | 4 ++++ src/mapper/static/assets/icons/location.svg | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 src/mapper/static/assets/icons/check.svg create mode 100644 src/mapper/static/assets/icons/location.svg diff --git a/src/mapper/static/assets/icons/check.svg b/src/mapper/static/assets/icons/check.svg new file mode 100644 index 0000000000..166e6612d7 --- /dev/null +++ b/src/mapper/static/assets/icons/check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/mapper/static/assets/icons/location.svg b/src/mapper/static/assets/icons/location.svg new file mode 100644 index 0000000000..20e18ba1f8 --- /dev/null +++ b/src/mapper/static/assets/icons/location.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file From e06e21650e81bb20bab6afd35ffe52f0c1b1b6c4 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Wed, 16 Oct 2024 11:54:38 +0545 Subject: [PATCH 28/34] fix(+page): icon add to task action btns --- .../src/routes/[projectId]/+page.svelte | 41 +++++++++++++++---- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/src/mapper/src/routes/[projectId]/+page.svelte b/src/mapper/src/routes/[projectId]/+page.svelte index 30ab932a4c..f106e478c9 100644 --- a/src/mapper/src/routes/[projectId]/+page.svelte +++ b/src/mapper/src/routes/[projectId]/+page.svelte @@ -320,15 +320,23 @@

Do you want to start mapping task #{$selectedTaskId}?

(toggleTaskActionModal = false)} outline>CANCEL - START MAPPING +
+ +

START MAPPING

+
+
{:else if $selectedTaskStatus == 'LOCKED_FOR_MAPPING'}

Task #{$selectedTaskId} has been locked, Is the task completely mapped?

@@ -338,17 +346,34 @@ variant="default" outline size="small" - class="secondary">CANCEL MAPPING +
+ (toggleTaskActionModal = false)} + > +

CANCEL MAPPING

+
COMPLETE MAPPING - GO TO ODK
+ (toggleTaskActionModal = false)} + > +

COMPLETE MAPPING

+
+ +

GO TO ODK

+
{/if} From 8cc82d4fe19608acc0f072f911e33e23293e7abb Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Thu, 17 Oct 2024 09:05:51 +0545 Subject: [PATCH 29/34] fix(+page): change selected task boundary color on task select --- src/mapper/src/routes/[projectId]/+page.svelte | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mapper/src/routes/[projectId]/+page.svelte b/src/mapper/src/routes/[projectId]/+page.svelte index f106e478c9..fd36ce0854 100644 --- a/src/mapper/src/routes/[projectId]/+page.svelte +++ b/src/mapper/src/routes/[projectId]/+page.svelte @@ -281,8 +281,9 @@ Date: Thu, 17 Oct 2024 15:14:42 +0545 Subject: [PATCH 30/34] feat(asset): location image add --- src/mapper/src/assets/images/locationArc.png | Bin 0 -> 13047 bytes src/mapper/src/assets/images/locationDot.png | Bin 0 -> 11651 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/mapper/src/assets/images/locationArc.png create mode 100644 src/mapper/src/assets/images/locationDot.png diff --git a/src/mapper/src/assets/images/locationArc.png b/src/mapper/src/assets/images/locationArc.png new file mode 100644 index 0000000000000000000000000000000000000000..ded68ceec2a8b72815c00c12fe907ee6fe0da2d2 GIT binary patch literal 13047 zcmVCyP)tvBY^dj@`S!K3MSaSmPxGi_OCi{E%cDBTKR+OO_>%G|!&ys>kFM^n%3uAz@5?VUYXb2+En4f~RE`gVK#S*LIi*TiPQ?Or=U={# zg}3O(z(S<}%WB>4U_y->Xy+lb zeT)FEv!6L8j|OYS8eSg_j(OLzde--cCq{#Oc%?3{x0hqZ+Dg5e-+u<*rdp8Q4Zz?J zwp72d-Gt}MMb$kAY{5o2m;Lnef%-6=Qb&W5FC^aGI$@lQ}~7rBEOY(-53P9=s{U>z_$?C8`$y^ z3u|@()`waKDhcQb(SqqioC?|jhg0^N2E3h8x#4KEev`|g0Uq5Omz_* zIwX>gP(76bs#9kHb4s+Sw%%sCTk5S7ZLx@@MpWIpZ>DR752k%|cjdYT-0d%53#0C` zveQ&3GTnfji8EZzC}1>ssEt~w)kJuVz(yA87%6pR#Q0L*>;ftSrHYfJ&Q35L$g=O9 zk+ZKQoC)T2eR);SQd3olj=tD|FGDZPHz^#jeRDokQg%kiBQjsN4lOUyJdmgpB37meSM+@v_UZY zYG#S;WB zon3$eCg5S6{kNru1->IrOogUR^V#Yg=j`D7p96s6b5-L<-387)1cXQ9a$=Zq#{nK(C-uAc0U~Jq}X=wedr8)2BsSdY{7Qs9LmnM0gd;ZsteF1 zMZ4%5pbtK@a{8*PPCv>%ZNR&B?MiC3vugl)QpE;jhU-?X7AiiEU7@u9lC#qdM9lzN z6PlKJ3h=UksxpAAP;_j8W(1TfxlYHSuA4Ko9}*1#6~|brw3g99SWQk5bkkO2MAWj( z-84;tO)BQbOoP|yo)Y~8Hg7Zo`XvLFmENEphD1+k<3D57(3y0~u8WZ5oHqiU0<;u5 zRCRgtJS*s> zi-=v|1h~!&Bl?vMqh@>$)C!0&z0Pl9n?ce>0hD&4f}vo?D)ZX8c`2yMGo#`{#@&pZ z`!XxvFpArJaM)(5jaqSJ%|egt@$9>;X?L)(&zbSUgcB_1ubugBGu?%cp463Ep8{-W zwwp(%8r!$8pBATBP8l$iJ0`|!eu4t#xH(go4lMj@=z-;c$@*5`uL7(ju<)ZTmAdwE z8aQwcrVlb_Git!(vJ7}(H*OfU2U#$ke3LZsUJJGZ@1V2Fc{|oFP=mVRzm)~e`z&nd zt9{T2#ws4@q*_zuKx~B=s-JUCa7s!(rHa@`zdvBI*44Hp@wQNSJbSwqUX zz~))g91E~EFv=Ko8iXFyGSFP6T|weTOL<=wgi)li#Qu1WYfA0XeFjT>#_u)+c>I>T z0ig6ywFCEIt1@WbH$Tu(#Wb5>?GcFi5qGtZ0EgXirL#on1!c741 ze4GXAs~!8Cd3Uh$Lgn36-3c`9Q)RR5s~M1wW~0+rZQ3+1$n&ZMbn}UW;{y(EGYn+e z*JiY@@Us9-s%?5c*1-i>nC0m%YIREO1T=P)P2bCEC5UbxSFVMciiH)Y_T0jD+lsc` z?*Mu?;32_uro5Y~eMRHFS`;gLjOwK3cHc~9Jg1()7&P;&y_LFd!= z=)?+2EKAp>g>pNp)-%VQd@K~}eCu3L9Z;uE2eaWRGY_)1^H+K2>rq|QEIX*y>@WFZ z9TnRZ`V0fMpOxB~?MTlByBp~Fsu@alCVQr;@|{P9CjQO#;H3BSN!!6U-E@XWD{sfTjU7aL`2C zd#)%4J)8R~Rnxm6>@kw6-oH_B6DV>h4*E2mYskmYwbFZ(PYeKC(ZwL@Wo1);U`}b7 zP#Mtp93MyR-$-S8Mglm2rm6$zJZ|bVGoVw9{Gga5k(8KDt1_gF7~0P>@Xb{BfLy0L zp*ADKi>l*;^zq{-%Uz#T!T0YwKCH7S_WdnElqXYdodPK7Db@u}PO-U7A~?l5sLE5S z1LqW4hRF~!14XG|UMik%DXUkyU@9{3%`sNJ_Sn$d?x(Lp!s(n8ld5VUQtwo7C znVPxXjL4eu*~o$g(Lj3XMlse6a@We(^^6{9j!o8_zeSYnOfrF#euSKI_KAY1In1$d ziVL+0qgH@*00DLu)Z8BHHHmzf-ORB2T(=^_sEe6ynQtFD1MdQR7HE>AjM_oFfUK+8 z_JS};hN7Fvjx&m~$uB45las~(Qkoq{o^`zV9h8DxkxdTH1(%>nKZu&iq-537PPBvP z16IOpm%th*v4P{Mw3As@o*#y&ajYMB&9}JEAWevEXVn!|dsKjKS1uo$wQdr;?}LWF zMu1lK)15%09gM^YKvyH`St|MF{uo)U?vMvJ4~(DRA*DIXJMGv(*VCLBXvR{)EEC)S zZCf1@INP?JLW{@xTI7kLs-`lkr3ND%OTPrLjh2rkHnb#w@O!Z_#qi1St4g)N8K~rj zX+yzZrzO)&rKwvGDd9WoCY_NTRGWEMoXx&+^vy{{ZDDt_+5L2qJkcQhXe=`w)??ZSvrV0Hd8RXJSk2I_!@gOOZ>H}+ zq>Va{lLlFZig12eRFnv3>RME5;^1Qw@W)xXo3V76I*3+{4aRX4x?svBE+$i~P_w8h zi$KaZ$uoH>0j#Ck)T*_mT5jG*(}YUtQ)uBD#X7LY1gq2oZUZaaK*G)l)w#((D`h_8 z;AuB>Cl6XNR=LA1FD;|iBF6^-Rk!>uAq=!KKw)VDRxx!eNREI5W2&tMrwc@b9oGcV z4cafm3}I6MOCWhdj^?B}j|j(o5YerZ*#;TKV-X3&1!2`lsEFi`x&~yExoyZv>aiGz zD++8}@KqzockUb;qH{T6e#G9O{0x=7iFOZ6!IKnf{K+}vf=(%md!+ENOv@f*1Z7m9TOQ?ZZUZ(4t=-3_3O zxph!+Gh`iL>QeOFr1zb9>eg%Szn@sBMa7h&X+UR))<-+oQnf$}{vHFh6X;Gp+JQ!= zVc9nWbU6SEZIs;=GW9^!kF9;y4HhU&bpC>gp%dfMq!WF!jQ-n6lXK=_`5s*OTeNEp zT=v7#`C6(jGTSCH?gW?CjHZC!kRg#4krAx4^QLfC?cX@&Opn5 zzk!g?(hdMo6*CzLDjK{wxrLk?z1Sb)hCt(0l8**#sxQE{-5&w`wKLzQ&75oBM+0<& z95T{ud8%9U2RfSZR+snTx#7I0JPo8*+FGmgx?s<5G6w z0h^Q<3Z?vJo`EE-ThK9qRvu{hXhjzo<)Pv_0O$axOC21EQX!HhVWd!(3_7Lw8h)87 z6m`yinYy+(&z&Z?2_yy>^kc9A4=j)ZN^XodlKX-|3{#vAZn;H=FWmmj>hY!wxoJZ% zW-Hg4< zl~^Pn+%nJ3G&|tDRL&fS);yczacp9nPR2J!x|5G)v#pGpeY5SFRefQ^Bk(%;Wtqop zqGgy6Zr$dSBMQ7CBtqb`NnN9ltUVUo@%ZQpo#y>6^*HG%m%H{zxePW#M??2uDkZpi z$s}h@QgFmwghs)Lel2VUOU7PPQ>uVX2Xun!fTpT5%#1#a05$LM-a^2J#kSPt_fTR7 z*1@Eu4;!EzR0gctK}XQ1u>RSC1{m_DI`{l?QuyUo2F&^8Dp`7lo40&2MvWl4j?f`N z?c^X1r=k=+6hW&u2=YXBibQ47j>`4`wZUx#Q}k65LvB(H@n*=s2AS_`({^)=b}NHr z9~_7#0A>cPGrs{6LeauBzXA-#LTbu1v!rjfsm92SMRM9V*)Z-=E}L|7 zBqT=;LSXcf3y)Jlepyxp`DKN^bz`onEvPQL2Vr{YGVuRjkP z(!!Ow%_%$OGT7Wi%5A|^V4FkAs@8{VP4X<&vRP&yU6^9PO`Td*ORYZGyluOckm%%d z&HM8cGQL||^P4$4VBv*)^N64@&-8{-xHPejg&m8KeRnD`_9~}$Lrf_Q8nlR6(cH{K zl0^9aITG;4K@bIq9!$eqpzTc203cILBbrfUd~%km2J8p@9^HuwY|vH~nSo3huK?}j zMx&wzhok!C8-^xKWzoI$_4}S!m*>^0OJcZanSHLOT!!lhQ+yv}^nOdJFv)(ir|`4E z9AJe3>qFI?1?vn{d#dIAdXd_}fdN}=TezI3@XWK>hDnxopMmM#hoXJc9b40lsN4DH zq|}6p$Oe|%%oM~a*IrI|-S}h#Th)+!vTY|L8G^KC7|zVRb=$d57g03o{f1j^dFJ}{ z+c!{57$cf?smCH(ZdkJ{77n-R`B?{+^LciEdJ?c%8`NMH(6VC9`)YnBI*@HZ$u<{? z=J!>|aN#Nft8h}D-PX`xV0^UX*dgZikfVAuzcAPiibmue&@z$SzDLZ zjo`~yauIluiW9oC&`}Xk)Xl?!beJA^)w(Bd^5z}Sy2Jl!$G&P^>vJ__v^2~z#vLmH zY~gahZPNr)P;Q2Os?@f%%FVTTk9&Ditmnm$S#3?VW}q#_W)Oo1)>mo^vG&S!Cw0*@@_`phx3HZlFZ?sNquWh)*=)0#0iC0510CNL#$=kY-2rmV zLWZ05qw9oP#)zx~q%qSxkHhnxe9u+w1M)hWu+M+zmqQ{+HUO}Li)gvwQjl1;%^+X7 z0NV7LKX@JHs9;OB2wpNP;@q&ibGF04PSxLnh zP2zWwEflnc7P&^XECIFZ=54Rd9FS~%^W6g7Znk~MIF?#7Xuz|z2qRiA1z(7ros!*p zwWMSral0Hp_{VR)_;|-l5+^C2_}ar~QD5UaYIIQtgh^tgq-ZQNm|xEmf}DVN)} zFtcQqi*{`XxD3<_o-$9dZD6fZb*hTaPQMN81LgO1ut31NE!c9vQQCmI{Wfud8^Nib zfd(yzkp=3jIf+c71Adv)oKP{DXymVhN@pdz=sG5|jAa$=Y4W|)(fIU7uG{o<*Gm#} zl#hRH@3{@BRwJ+MfckKaS*A7}1!E4b?{ED;$_MM3I~~FLCRli|ol@;~8K!GKEp%dS zD}&|rEcwvU`|FwNr~_!-?2Zv?(8Q{c1=>uQL>$z z4y00yg??|47cH~T1+=`S+-`97N#Fuv0hf~<-adfEetLtlaP$iJ1-SU0%)b2n3wgQE zyYDkDM#;Q*Pw_cqIc{g+opWH%xwX%~HeGyQP{bRklhp3xnU~I;$yP$B=~^VYb%k~v zEW$iK{wLR-_2gXq=A1ry(@lY*4vBsDizgEmObsbJ4b*iY;23j4Ewh}?!z8ocE#L-$ z?_;R~?J=V0F7nlC_FJ85Z-~tz1zCdgQ1&|m&Ha7QcO-+>zKlnd*~9I#%{X0U#{}>^ zSnSKac64sr&p3wPL5TL_0IA+uOuk9Mlrf zOa+SqIFjuH;zQ3DJCp6qco^7Y0~0m3ne8sVx$KwA5jL7k+%u(2bd7D7@v6mgYGx#O z~=U zLa|Q4^d3KIU3tR>weZ$e;4&AyZ$8Z?Uzwo|vRwAVfi$(`<)Up~+I`kjv;)m5_SDQ4 z!ETp>uc(8P%aD=f3Uh+IV$Jxq0U~GYxgV?{}LSB|GK`mrb+_tZZa_Qm{T$F&pS*y!&$kw)yR2qF#%C%ZUnxDaB_ zh`CdlvmJc0@{$j3-KU!Q)4J4Y&=syMDOY%Ki?*mLBJA9%b{1UMF6DL8HilfNgq4tb zPALmtNkUqvm|s!AuS!V!>E*T)YWeW{aTxPw=(G3^^q=x?`H{RI;1%t09MkI7%sbt% z0%OO_HJcVgtG(P-N6NLCO&vlosM{^$TlR_t!bLf4lXk-mI-GjhPq*tJTA5je!WW;C zay^sG6~L9IY*dWN0_{yEzg--MfqAkXI%Cif)n)*o#I*8Odoq|EO>?KLP;6QQ^Pm)^ z4OYd2EqIJmn)9t&_*E>NGD8=Pv5HOf9eE~umXf{TtDBOcU^dk{82!$F*mk!Nr}tRH z(^4?Xt+xhw|G5Y5rS$itYyZ0U9LPegL1*Rq{B2=>q|A>HSAY7!{w$lhoZ83z+D|{) zB!(X?cULanJBezwnTL!DC#{B&RV~y@A2w+PTEhQwD@1ZW9|Oqvk$Oc?2ER+Dga=)) zRWyT20?k9dlsxwvJo#3V{9anjCAX;iRP)# z>{%2qVX}!j9-*O}*)B|WBt57GT*%R~XRcjz?V3Lf+#h?6meHN?BF-O=%jB~*)n`EbEnByqqJOPEr z7)7i()TQ(pqFpx4nAf9Wnpwek5~SuTWCaJU|3VsA=*oM(vQx<~nliWap3Z zrZhe{%Yz3W{%^0?BhElMV}MaE{^(CG%XE5Pu1p6+-Ub&SP2j`Pvaj3{+$g{^15`vu zu!5xnOZjm2xmLlLOTbVSMsTu=EdsQTC&*v}QT#6>p2q3@YS4j6m8p$UfK7(*k&M4qpZw&GqZn@>2`|e&dKzvs7 ze{IAYY_vqn@A5vIPNdq2jGraAiZe?AS{9^O1qEv~c$y)3!qE8L%m8MPS(rn;0Lm(c zuQ%3Lt9BF35HA0WSc0XWnrBijR2txc8QQ8g&oJSVR7^_@tj9VYx1BRs4ujEfJ!?f@ zb+|vNRFcR%1eKKe?0CI#y@!Cr_UVz6<+_!&ReDtfo5I_9IanS(KxyAtC zpQ_Lu^;!b`7w@`IY*}yqpXm=DI`G*0zi|6qQ!}b5Bd9lG#fC7^A*KKl)Y_12(VRS)>#{ zh!qMBNWB`*f`duU^C-_!%$N>U){KV9w|@8IZ-4XpHG``fsSp%AO@1B@WXB=eeWzL{v?I7BczbtWM^d z$JEOFffHZ4`T@~{a@yU63oXZ2@7Nvcj8J+nf6n znJBUr@bfqaG|hC89?kh&rKVT_OTqtQ2st-NcP+W=aQBHXzVSiPqY{ca>zW<+H_R_wpNX&R1drnBUa5p7xKI2MoEJcQsA9(5TKduqa z@HL7amY)4MQj2@`?4f*QD6ii-GV?nZM|V=jB1PsO)6CJh;6#QNw$niI1g#Ig<+7Ko z8SWo^^zfAUi|_7VT;-MvefMX`CqHyxLJSX7`ak}!uDpceCblG+^WVDFHOc2qaD`6a zy-nVE-6gd~rBXrtN?q>BTEf!HyDO+xt8#pNT+YnQ$ScnklfSiD-xUj__>GxHLIV$k zHfhOR4%MRM>TMg($3Tofrl!#81XS}a_>G&sz6Up?xbmWNUNnej?kn33sjP)Tp9P(B zta9~+bJL%^?!4M0t|_AKlKuPlbAP|+QRyXM6K>M0(P;4cE7wdOzjXEVeR$LS3rEd8 zu*&udUGviO&RRP>F!<1cN%6g%r##4i!R2=Pt(^xa1uVyPbPk;V)~2`0jL^y@1`)h$ zZS$V1H|5W!Y0B3#F)D{x$FZE6nv%_ClR8(8pMBGYsl&gqYWhKCO&=;# z*txoIe);+5!4Ted|1)AbJ)@m4ZDqQt#NR)3j0eu+94LDh@HyfCi<+k?hzkd&cD~`< z>8JU@Qgki2X-7szf+I(cu$dM;Dn0w*-Me@5T}?iiRZNfrTRFj1!$+PtyE3`YAB}-d zgbOx|ti|TtkDpjtP0(-s=oh2Bdcip>*WkH^qNQMQRx-K&jW0O1pQ3C&e`lE{CntI7 zuC*7XXMneC*@BoP7#tkrZ8B>`#o+bEk;9LSM3YbPSQ*M^CUGcN4fgdT&wTfuMH_TD z?}FdNZ?7Dv_9w`>p*xcHua;v6uUT_=H~cb(&_OHellFfi<63(aX!Q&*MbN>C6DI;P z(eS}RrPBJJ>>R{U8u!Zn$94|M$)ixphLr;~{DZE;Ua!znmI>-XcxJpQV#=7WC(1ad zVL5&DSlGkgs8Y`Gbu;s0p5tIqi zTjk!}NiaP&*q6lkr-&z}GSSSJK6gMJ2;%s3%K!7YzZS(+Ju~(ja?kEqrDi&E-u|4- zzP>);tP`%aSEbj9jycN!Y3C*Bt_P{Nt&XNj9QGzCl|1^u{B9ED^)2dw2XJm;nU`Lg zXfZlEI_Ghi0y-E>H`Y(@x)0OCRt>}=kxLIaq4d;HU&Qm%&YF4nfj)99?)>a>R#;EX zBwpfLdsTXAqV@3buH9D+tWU$0Pe6Ihti@1Atc#C1R<|s{TZ*quj*!pH;Rh$#WC*ulO*9Kt_=m(Dtc6U*-R48KKpEOms6XVD~$ZHh8oI{@xL3V zr>Bo1NWJ3xVX@TZ^35wa8%crF5zXUhgSKebogcVo3{Odc|gQQyo5h_)*-5I42)6&e@*3qWAI7 z2lc?ffVPm;nH>9kveGla+qP}f)IQ{jpqw<+s{oroDpx7C;;`h`op;{(Q~WQe>n>d_ zMygBKm5txJe)~Eo66f#}0OnB%bZ*WZ<0f_BvF)w{*CbA3hW_c6UPjUC;K74>!-frt zGCo`>)U;5pvY-e+M@3``_Pl{P^)FH?8Rt?|AuHVyVhIuQ*F=TwN2?ZhzvA zJMP#+=aXBY{KC0m`U{|2xJ5j1_St9id~ngD(o4V$m+tTaAen5eV=_I!q7rjdAe4e_ zdOzK@YuAtP;g7!MMWQb{^QYezOYvuKKcCkheDJ{^;HeHyz4qqIaqd`m`*9tsSFh%! zFmQkM09&7gIo6tz9LlOzS%1rlK*d?e?v;J+bDz5%Dn4grReb(mzU0hS9ewv_-gTi^ zGnfea&3!lDeDe=*4!GIq+;RsO=Z5p8AWM-IVs+E;YQ>5b0NgYGi_+^vhXPzw4DNOc zN($xDzMO#bI_=Bce*BN0Z++`qe+xCg_sR|8ZQIt0GgaQUZJl`Ut2ZEztiJipZ+?{` z=sM1W&Mk9*agI1wsFz}iLe11f;%gJ)S9{0~nm$}XR>8cEN`xY?jdiF36^e>QrBY?@ z{Q1v+{&z?$efeK+71v+3cF~pm7W&S=`TdJ2_Z;YZ?z!h{-}uHi9&qP|bHO=b?h>E^ zE&Hg zTyP!)8J30j*+@U9{4?Im)0A`6JvGlL%OMw?ldnPm#l8%x#S@EAiB`3_GtW-N^h)Wt z=7&D?q0bS3JF9W1|M&YZCMa9QP-WrGCw%sA-hYw!KmYa;9{9e0|NftS_`@Im68(0Q zZnhLR9Ia>8ZSc9_oUl%c&2a7n7p^8>w{BfA4Z4@5XWdwSAs-hXIdUW+B`373U`hTi zA@dz$NiSYf*30dSv8>nYcqJeC$VaZd;)*NYfiZ6r^-O&Hn~#gH+;vExYjLhYd3bmI za7Dc9inGOsuH7isP&$%sw#MCe-+k++KmF9T^{sDx>y6Yrc`?58=tNU|@1bMj?#IW(Pxqb>hfXxa6#9{=x?y@Ztg4DvQ$}q2 zrWN9KTUK$NnLl^*=wsjh_P4)!+ikZ!47ji)fD3aBm<}|V;wHUP0L5|iYOYzcrb)lw zq;62aZ5EG)=wVqFfKj00haP$;p$dz~$Hx;Wlaw4&aslfxB}4E^2quFiHOKTmuLC+D zlZmgs^PTV9PHKKV`SkP2WEP3xdQ*uRo|{c=+e##ouyyIw7H`mv^f(1mJHGtoFW+es z88Elb?*k~S7$zDn0;?8Fyf*_dBKV3WHWjO)H$cKa~3@VMGU<;B> zG(l(64A>4bz(UEiFCy3>wt4me_1;k`bp2~y^P26OHf_3)D*lB8q00ZjUNBHi$4}FD z9-u(&ksUjB+)pMM(>ikp*ZO)6q-;P{z=dh18wh4OgOc$cfWtJ?d8ZUOHhXQFU0F7O zQM8#99|JU{`QURID3%r|Lxyt6e8W^TWI86K?GT_bWR-jM9|heXY^eu9m}d785x0zMikuySYiKFqgW&hD=DYcNT_3aSsq#7wl#AR; zN=|Jw52fN?Jwv(Jhkqdq$mx0Ko#*`SvVn_oMxU~?z`_rsA=OCgnkz`b&P7KSs|G0ZguFcDNriToIIg(<3r zA4cyw{4G@L%rws?z(_}BW&;LpXsav!NDMokN?HG#+l(5UYk)?A1FE(etBlNa_FRCA zvK&n`7pG*bQ$->$;{IZS7EuLj^36~xcTOOJ#x?=q$NHmP4Y=^d7<}%AwEB=8ST_;_ zmcaF5xlEPIR?*>5EN81IsAI@5)5{$$%Cc3kD^|&ft|Ll9L^iR(ffYgJW)ZizF^!)wrtvgWuLPlW&r z{+$%-^58JjIc3|hp8+qoXt`Ti_6qikQ!{k}M5Ht}%K!@HVj?-_j4>l*XtGH|DN+)f{U{3O?0PXllU0! z1G9;=q&#%!Pzb=3=nwGJ0IU-*{BtaBOJgD!sgXag?f+`9W?$GLt}w|wgothosMU?e z$d^N>!9vS(Qo-e7O}Cq9&Fcgl&;KxwD7GfrP3?4moq|cFZg8Bx?0IMXVwC3vV82+{ z{!4UN>JCeOJs+U@<#`9VQ|UJO`uPU)*X7sc*X8+E{s|4_3q~0v2S)$^002ovPDHLk FV1lA3kR|{C literal 0 HcmV?d00001 diff --git a/src/mapper/src/assets/images/locationDot.png b/src/mapper/src/assets/images/locationDot.png new file mode 100644 index 0000000000000000000000000000000000000000..4d09764b94cf345e1bd1b0a79dcc4766900b96f9 GIT binary patch literal 11651 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 N002ovPDHLkV1kXH0BryO literal 0 HcmV?d00001 From 0348b030d1d3f063102def37af4798973e0572dc Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Fri, 18 Oct 2024 13:31:56 +0545 Subject: [PATCH 31/34] feat(image): replace locationDot image --- src/mapper/src/assets/images/locationDot.png | Bin 11651 -> 5224 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/mapper/src/assets/images/locationDot.png b/src/mapper/src/assets/images/locationDot.png index 4d09764b94cf345e1bd1b0a79dcc4766900b96f9..2ad443fa05c798bcb598fea9a98a5af9653d0495 100644 GIT binary patch delta 5221 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 literal 11651 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 N002ovPDHLkV1kXH0BryO From b14a4e53ff961d45a650a961c8be3f4ba66afb75 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Fri, 18 Oct 2024 13:32:34 +0545 Subject: [PATCH 32/34] feat(geolocate): icon add --- src/mapper/static/assets/icons/geolocate.svg | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/mapper/static/assets/icons/geolocate.svg diff --git a/src/mapper/static/assets/icons/geolocate.svg b/src/mapper/static/assets/icons/geolocate.svg new file mode 100644 index 0000000000..13bed746f6 --- /dev/null +++ b/src/mapper/static/assets/icons/geolocate.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file From 7c6b922022fe4126967294a0b0b2259ea4197274 Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Fri, 18 Oct 2024 14:55:20 +0545 Subject: [PATCH 33/34] feat(getDeviceRotation): device orientation track function --- .../src/utilFunctions/getDeviceRotation.ts | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/mapper/src/utilFunctions/getDeviceRotation.ts diff --git a/src/mapper/src/utilFunctions/getDeviceRotation.ts b/src/mapper/src/utilFunctions/getDeviceRotation.ts new file mode 100644 index 0000000000..66dfda2cce --- /dev/null +++ b/src/mapper/src/utilFunctions/getDeviceRotation.ts @@ -0,0 +1,42 @@ +export function GetDeviceRotation(quaternion) { + // https://w3c.github.io/orientation-sensor/#model explains the order of + // the 4 elements in the sensor.quaternion array. + let [qx, qy, qz, qw] = quaternion; + + // When the phone is lying flat, we want to treat the direction toward the + // top of the phone as the "forward" direction; when the phone is held + // upright, we want to treat the direction out the back of the phone as the + // "forward" direction. So, let's determine the compass heading of the + // phone based on the vector between these directions, i.e. at a 45-degree + // angle between the positive Y-axis and the negative Z-axis in this figure: + // https://w3c.github.io/orientation-sensor/#absoluteorientationsensor-model + + // To find the current "forward" direction of the phone, we want to take this + // vector, (0, 1, -1), and apply the same rotation as the phone's rotation. + const y = 1; + const z = -1; + + // From experimentation, it looks like the quaternion from the sensor is + // the inverse rotation, so we need to flip the fourth component. + qw = -qw; + + // This section explains how to convert the quaternion to a rotation matrix: + // https://w3c.github.io/orientation-sensor/#convert-quaternion-to-rotation-matrix + // Now let's multiply the forward vector by the rotation matrix. + const rx = y * (2 * qx * qy + 2 * qw * qz) + z * (2 * qx * qz - 2 * qw * qy); + const ry = y * (1 - 2 * qx * qx - 2 * qz * qz) + z * (2 * qy * qz + 2 * qw * qx); + const rz = y * (2 * qy * qz + 2 * qw * qx) + z * (1 - 2 * qx * qx - 2 * qy * qy); + + // This gives us a rotated vector indicating the "forward" direction of the + // phone with respect to the earth. We only care about the orientation of + // this vector in the XY plane (the plane tangential to the ground), i.e. + // the heading of the (rx, ry) vector, where (0, 1) is north. + + const radians = Math.atan2(ry, rx); + const degrees = (radians * 180) / Math.PI; // counterclockwise from +X axis + let heading = 90 - degrees; + if (heading < 0) heading += 360; + + // return rotation degree to rotate icon + return Math.round(heading); +} From ade1db2d1e0e135726a32414f4bed576640db52f Mon Sep 17 00:00:00 2001 From: NSUWAL123 Date: Fri, 18 Oct 2024 14:56:24 +0545 Subject: [PATCH 34/34] feat(+page): geolocation with device orientation functionality add --- .../src/routes/[projectId]/+page.svelte | 137 +++++++++++++++++- 1 file changed, 135 insertions(+), 2 deletions(-) diff --git a/src/mapper/src/routes/[projectId]/+page.svelte b/src/mapper/src/routes/[projectId]/+page.svelte index fd36ce0854..14ff1a7672 100644 --- a/src/mapper/src/routes/[projectId]/+page.svelte +++ b/src/mapper/src/routes/[projectId]/+page.svelte @@ -5,7 +5,19 @@ import { onMount, onDestroy } from 'svelte'; import { writable } from 'svelte/store'; import { Shape, ShapeStream } from '@electric-sql/client'; - import { MapLibre, GeoJSON, FillLayer, LineLayer, hoverStateFilter, SymbolLayer } from 'svelte-maplibre'; + import { + MapLibre, + GeoJSON, + FillLayer, + LineLayer, + hoverStateFilter, + SymbolLayer, + NavigationControl, + ScaleControl, + Control, + ControlGroup, + ControlButton, + } from 'svelte-maplibre'; import type { FeatureCollection } from 'geojson'; import { polygon } from '@turf/helpers'; import { buffer } from '@turf/buffer'; @@ -33,6 +45,9 @@ import RedLockImg from '../../assets/images/red-lock.png'; import More from '../../lib/components/page/more/index.svelte'; import '../../styles/button.css'; + import { GetDeviceRotation } from '../../utilFunctions/getDeviceRotation'; + import LocationArcImg from '../../assets/images/locationArc.png'; + import LocationDotImg from '../../assets/images/locationDot.png'; export let data: PageData; @@ -180,6 +195,92 @@ await updateTaskFeatures(); }); + // geolocation + let coords: [number, number]; + let rotationDeg: number | undefined; + let toggleGeolocationStatus = false; + let watchId; + + $: if (map && toggleGeolocationStatus) { + // zoom to user's current location + navigator.geolocation.getCurrentPosition((position) => { + const currentCoordinate = [position.coords.longitude, position.coords.latitude]; + map.flyTo({ + center: currentCoordinate, + essential: true, + zoom: 18, + }); + }); + + // track users location + watchId = navigator.geolocation.watchPosition( + function (pos) { + coords = [pos.coords.longitude, pos.coords.latitude]; + }, + function (error) { + alert(`ERROR: ${error.message}`); + }, + { + enableHighAccuracy: true, + }, + ); + } else { + // stop tracking user's location on location toggle off + navigator.geolocation.clearWatch(watchId); + } + const isFirefox = typeof InstallTrigger !== 'undefined'; + const isSafari = + /constructor/i.test(window.HTMLElement) || + (function (p) { + return p.toString() === '[object SafariRemoteNotification]'; + // @ts-ignore + })(!window['safari'] || (typeof safari !== 'undefined' && window['safari'].pushNotification)); + + // locationGeojson: to display point on the map + let locationGeojson: FeatureCollection; + $: locationGeojson = { + type: 'FeatureCollection', + features: [ + { + type: 'Feature', + geometry: { + type: 'Point', + coordinates: coords, + }, + // firefox & safari doesn't support device orientation sensor, so if the browser any of the two set orientation to false + properties: { orientation: !(isFirefox || isSafari) }, + }, + ], + }; + + $: if (map && toggleGeolocationStatus) { + if (isFirefox || isSafari) { + // firefox & safari doesn't support device orientation sensor + } else { + // See the API specification at: https://w3c.github.io/orientation-sensor + // We use referenceFrame: 'screen' because the web page will rotate when + // the phone switches from portrait to landscape. + const sensor = new AbsoluteOrientationSensor({ + frequency: 60, + referenceFrame: 'screen', + }); + sensor.addEventListener('reading', (event) => { + rotationDeg = GetDeviceRotation(sensor.quaternion); + }); + + Promise.all([ + navigator.permissions.query({ name: 'accelerometer' }), + navigator.permissions.query({ name: 'magnetometer' }), + navigator.permissions.query({ name: 'gyroscope' }), + ]).then((results) => { + if (results.every((result) => result.state === 'granted')) { + sensor.start(); + } else { + } + }); + } + } + onDestroy(() => { taskHistoryStream.unsubscribeAll(); }); @@ -228,7 +329,6 @@ bind:loaded style="https://basemaps.cartocdn.com/gl/positron-gl-style/style.json" class="flex-auto w-full sm:aspect-video h-[calc(100%-4rem)]" - standardControls center={[0, 0]} zoom={2} attributionControl={false} @@ -244,8 +344,41 @@ images={[ { id: '1', url: BlackLockImg }, { id: '3', url: RedLockImg }, + { id: 'locationArc', url: LocationArcImg }, + { id: 'locationDot', url: LocationDotImg }, ]} > + + + + + (toggleGeolocationStatus = !toggleGeolocationStatus)} + > + + {#if toggleGeolocationStatus} + + + + {/if}