Selaa lähdekoodia

refac/fix: user message toolbar display

Timothy Jaeryang Baek 2 kuukautta sitten
vanhempi
commit
e13f1738d4
1 muutettua tiedostoa jossa 247 lisäystä ja 249 poistoa
  1. 247 249
      src/lib/components/chat/Messages/UserMessage.svelte

+ 247 - 249
src/lib/components/chat/Messages/UserMessage.svelte

@@ -323,283 +323,281 @@
 								{/if}
 							</div>
 						</div>
+					</div>
+				{/if}
+			{/if}
 
-						<div
-							class=" flex {($settings?.chatBubble ?? true)
-								? 'justify-end'
-								: ''}  text-gray-600 dark:text-gray-500"
-						>
-							{#if !($settings?.chatBubble ?? true)}
-								{#if siblings.length > 1}
-									<div class="flex self-center" dir="ltr">
-										<button
-											class="self-center p-1 hover:bg-black/5 dark:hover:bg-white/5 dark:hover:text-white hover:text-black rounded-md transition"
-											on:click={() => {
-												showPreviousMessage(message);
-											}}
-										>
-											<svg
-												xmlns="http://www.w3.org/2000/svg"
-												fill="none"
-												viewBox="0 0 24 24"
-												stroke="currentColor"
-												stroke-width="2.5"
-												class="size-3.5"
-											>
-												<path
-													stroke-linecap="round"
-													stroke-linejoin="round"
-													d="M15.75 19.5 8.25 12l7.5-7.5"
-												/>
-											</svg>
-										</button>
-
-										{#if messageIndexEdit}
-											<div
-												class="text-sm flex justify-center font-semibold self-center dark:text-gray-100 min-w-fit"
-											>
-												<input
-													id="message-index-input-{message.id}"
-													type="number"
-													value={siblings.indexOf(message.id) + 1}
-													min="1"
-													max={siblings.length}
-													on:focus={(e) => {
-														e.target.select();
-													}}
-													on:blur={(e) => {
-														gotoMessage(message, e.target.value - 1);
-														messageIndexEdit = false;
-													}}
-													on:keydown={(e) => {
-														if (e.key === 'Enter') {
-															gotoMessage(message, e.target.value - 1);
-															messageIndexEdit = false;
-														}
-													}}
-													class="bg-transparent font-semibold self-center dark:text-gray-100 min-w-fit outline-hidden"
-												/>/{siblings.length}
-											</div>
-										{:else}
-											<!-- svelte-ignore a11y-no-static-element-interactions -->
-											<div
-												class="text-sm tracking-widest font-semibold self-center dark:text-gray-100 min-w-fit"
-												on:dblclick={async () => {
-													messageIndexEdit = true;
-
-													await tick();
-													const input = document.getElementById(
-														`message-index-input-${message.id}`
-													);
-													if (input) {
-														input.focus();
-														input.select();
-													}
-												}}
-											>
-												{siblings.indexOf(message.id) + 1}/{siblings.length}
-											</div>
-										{/if}
+			{#if edit !== true}
+				<div
+					class=" flex {($settings?.chatBubble ?? true)
+						? 'justify-end'
+						: ''}  text-gray-600 dark:text-gray-500"
+				>
+					{#if !($settings?.chatBubble ?? true)}
+						{#if siblings.length > 1}
+							<div class="flex self-center" dir="ltr">
+								<button
+									class="self-center p-1 hover:bg-black/5 dark:hover:bg-white/5 dark:hover:text-white hover:text-black rounded-md transition"
+									on:click={() => {
+										showPreviousMessage(message);
+									}}
+								>
+									<svg
+										xmlns="http://www.w3.org/2000/svg"
+										fill="none"
+										viewBox="0 0 24 24"
+										stroke="currentColor"
+										stroke-width="2.5"
+										class="size-3.5"
+									>
+										<path
+											stroke-linecap="round"
+											stroke-linejoin="round"
+											d="M15.75 19.5 8.25 12l7.5-7.5"
+										/>
+									</svg>
+								</button>
 
-										<button
-											class="self-center p-1 hover:bg-black/5 dark:hover:bg-white/5 dark:hover:text-white hover:text-black rounded-md transition"
-											on:click={() => {
-												showNextMessage(message);
+								{#if messageIndexEdit}
+									<div
+										class="text-sm flex justify-center font-semibold self-center dark:text-gray-100 min-w-fit"
+									>
+										<input
+											id="message-index-input-{message.id}"
+											type="number"
+											value={siblings.indexOf(message.id) + 1}
+											min="1"
+											max={siblings.length}
+											on:focus={(e) => {
+												e.target.select();
 											}}
-										>
-											<svg
-												xmlns="http://www.w3.org/2000/svg"
-												fill="none"
-												viewBox="0 0 24 24"
-												stroke="currentColor"
-												stroke-width="2.5"
-												class="size-3.5"
-											>
-												<path
-													stroke-linecap="round"
-													stroke-linejoin="round"
-													d="m8.25 4.5 7.5 7.5-7.5 7.5"
-												/>
-											</svg>
-										</button>
+											on:blur={(e) => {
+												gotoMessage(message, e.target.value - 1);
+												messageIndexEdit = false;
+											}}
+											on:keydown={(e) => {
+												if (e.key === 'Enter') {
+													gotoMessage(message, e.target.value - 1);
+													messageIndexEdit = false;
+												}
+											}}
+											class="bg-transparent font-semibold self-center dark:text-gray-100 min-w-fit outline-hidden"
+										/>/{siblings.length}
 									</div>
-								{/if}
-							{/if}
-							{#if !readOnly}
-								<Tooltip content={$i18n.t('Edit')} placement="bottom">
-									<button
-										class="invisible group-hover:visible p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition edit-user-message-button"
-										on:click={() => {
-											editMessageHandler();
+								{:else}
+									<!-- svelte-ignore a11y-no-static-element-interactions -->
+									<div
+										class="text-sm tracking-widest font-semibold self-center dark:text-gray-100 min-w-fit"
+										on:dblclick={async () => {
+											messageIndexEdit = true;
+
+											await tick();
+											const input = document.getElementById(`message-index-input-${message.id}`);
+											if (input) {
+												input.focus();
+												input.select();
+											}
 										}}
 									>
-										<svg
-											xmlns="http://www.w3.org/2000/svg"
-											fill="none"
-											viewBox="0 0 24 24"
-											stroke-width="2.3"
-											stroke="currentColor"
-											class="w-4 h-4"
-										>
-											<path
-												stroke-linecap="round"
-												stroke-linejoin="round"
-												d="M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L6.832 19.82a4.5 4.5 0 01-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 011.13-1.897L16.863 4.487zm0 0L19.5 7.125"
-											/>
-										</svg>
-									</button>
-								</Tooltip>
-							{/if}
-
-							<Tooltip content={$i18n.t('Copy')} placement="bottom">
+										{siblings.indexOf(message.id) + 1}/{siblings.length}
+									</div>
+								{/if}
+
 								<button
-									class="invisible group-hover:visible p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
+									class="self-center p-1 hover:bg-black/5 dark:hover:bg-white/5 dark:hover:text-white hover:text-black rounded-md transition"
 									on:click={() => {
-										copyToClipboard(message.content);
+										showNextMessage(message);
 									}}
 								>
 									<svg
 										xmlns="http://www.w3.org/2000/svg"
 										fill="none"
 										viewBox="0 0 24 24"
-										stroke-width="2.3"
 										stroke="currentColor"
-										class="w-4 h-4"
+										stroke-width="2.5"
+										class="size-3.5"
 									>
 										<path
 											stroke-linecap="round"
 											stroke-linejoin="round"
-											d="M15.666 3.888A2.25 2.25 0 0013.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 01-.75.75H9a.75.75 0 01-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 01-2.25 2.25H6.75A2.25 2.25 0 014.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 011.927-.184"
+											d="m8.25 4.5 7.5 7.5-7.5 7.5"
 										/>
 									</svg>
 								</button>
-							</Tooltip>
+							</div>
+						{/if}
+					{/if}
+					{#if !readOnly}
+						<Tooltip content={$i18n.t('Edit')} placement="bottom">
+							<button
+								class="invisible group-hover:visible p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition edit-user-message-button"
+								on:click={() => {
+									editMessageHandler();
+								}}
+							>
+								<svg
+									xmlns="http://www.w3.org/2000/svg"
+									fill="none"
+									viewBox="0 0 24 24"
+									stroke-width="2.3"
+									stroke="currentColor"
+									class="w-4 h-4"
+								>
+									<path
+										stroke-linecap="round"
+										stroke-linejoin="round"
+										d="M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L6.832 19.82a4.5 4.5 0 01-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 011.13-1.897L16.863 4.487zm0 0L19.5 7.125"
+									/>
+								</svg>
+							</button>
+						</Tooltip>
+					{/if}
 
-							{#if !readOnly && (!isFirstMessage || siblings.length > 1)}
-								<Tooltip content={$i18n.t('Delete')} placement="bottom">
-									<button
-										class="invisible group-hover:visible p-1 rounded-sm dark:hover:text-white hover:text-black transition"
-										on:click={() => {
-											showDeleteConfirm = true;
-										}}
+					<Tooltip content={$i18n.t('Copy')} placement="bottom">
+						<button
+							class="invisible group-hover:visible p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
+							on:click={() => {
+								copyToClipboard(message.content);
+							}}
+						>
+							<svg
+								xmlns="http://www.w3.org/2000/svg"
+								fill="none"
+								viewBox="0 0 24 24"
+								stroke-width="2.3"
+								stroke="currentColor"
+								class="w-4 h-4"
+							>
+								<path
+									stroke-linecap="round"
+									stroke-linejoin="round"
+									d="M15.666 3.888A2.25 2.25 0 0013.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 01-.75.75H9a.75.75 0 01-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 01-2.25 2.25H6.75A2.25 2.25 0 014.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 011.927-.184"
+								/>
+							</svg>
+						</button>
+					</Tooltip>
+
+					{#if !readOnly && (!isFirstMessage || siblings.length > 1)}
+						<Tooltip content={$i18n.t('Delete')} placement="bottom">
+							<button
+								class="invisible group-hover:visible p-1 rounded-sm dark:hover:text-white hover:text-black transition"
+								on:click={() => {
+									showDeleteConfirm = true;
+								}}
+							>
+								<svg
+									xmlns="http://www.w3.org/2000/svg"
+									fill="none"
+									viewBox="0 0 24 24"
+									stroke-width="2"
+									stroke="currentColor"
+									class="w-4 h-4"
+								>
+									<path
+										stroke-linecap="round"
+										stroke-linejoin="round"
+										d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0"
+									/>
+								</svg>
+							</button>
+						</Tooltip>
+					{/if}
+
+					{#if $settings?.chatBubble ?? true}
+						{#if siblings.length > 1}
+							<div class="flex self-center" dir="ltr">
+								<button
+									class="self-center p-1 hover:bg-black/5 dark:hover:bg-white/5 dark:hover:text-white hover:text-black rounded-md transition"
+									on:click={() => {
+										showPreviousMessage(message);
+									}}
+								>
+									<svg
+										xmlns="http://www.w3.org/2000/svg"
+										fill="none"
+										viewBox="0 0 24 24"
+										stroke="currentColor"
+										stroke-width="2.5"
+										class="size-3.5"
 									>
-										<svg
-											xmlns="http://www.w3.org/2000/svg"
-											fill="none"
-											viewBox="0 0 24 24"
-											stroke-width="2"
-											stroke="currentColor"
-											class="w-4 h-4"
-										>
-											<path
-												stroke-linecap="round"
-												stroke-linejoin="round"
-												d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0"
-											/>
-										</svg>
-									</button>
-								</Tooltip>
-							{/if}
-
-							{#if $settings?.chatBubble ?? true}
-								{#if siblings.length > 1}
-									<div class="flex self-center" dir="ltr">
-										<button
-											class="self-center p-1 hover:bg-black/5 dark:hover:bg-white/5 dark:hover:text-white hover:text-black rounded-md transition"
-											on:click={() => {
-												showPreviousMessage(message);
-											}}
-										>
-											<svg
-												xmlns="http://www.w3.org/2000/svg"
-												fill="none"
-												viewBox="0 0 24 24"
-												stroke="currentColor"
-												stroke-width="2.5"
-												class="size-3.5"
-											>
-												<path
-													stroke-linecap="round"
-													stroke-linejoin="round"
-													d="M15.75 19.5 8.25 12l7.5-7.5"
-												/>
-											</svg>
-										</button>
-
-										{#if messageIndexEdit}
-											<div
-												class="text-sm flex justify-center font-semibold self-center dark:text-gray-100 min-w-fit"
-											>
-												<input
-													id="message-index-input-{message.id}"
-													type="number"
-													value={siblings.indexOf(message.id) + 1}
-													min="1"
-													max={siblings.length}
-													on:focus={(e) => {
-														e.target.select();
-													}}
-													on:blur={(e) => {
-														gotoMessage(message, e.target.value - 1);
-														messageIndexEdit = false;
-													}}
-													on:keydown={(e) => {
-														if (e.key === 'Enter') {
-															gotoMessage(message, e.target.value - 1);
-															messageIndexEdit = false;
-														}
-													}}
-													class="bg-transparent font-semibold self-center dark:text-gray-100 min-w-fit outline-hidden"
-												/>/{siblings.length}
-											</div>
-										{:else}
-											<!-- svelte-ignore a11y-no-static-element-interactions -->
-											<div
-												class="text-sm tracking-widest font-semibold self-center dark:text-gray-100 min-w-fit"
-												on:dblclick={async () => {
-													messageIndexEdit = true;
-
-													await tick();
-													const input = document.getElementById(
-														`message-index-input-${message.id}`
-													);
-													if (input) {
-														input.focus();
-														input.select();
-													}
-												}}
-											>
-												{siblings.indexOf(message.id) + 1}/{siblings.length}
-											</div>
-										{/if}
+										<path
+											stroke-linecap="round"
+											stroke-linejoin="round"
+											d="M15.75 19.5 8.25 12l7.5-7.5"
+										/>
+									</svg>
+								</button>
 
-										<button
-											class="self-center p-1 hover:bg-black/5 dark:hover:bg-white/5 dark:hover:text-white hover:text-black rounded-md transition"
-											on:click={() => {
-												showNextMessage(message);
+								{#if messageIndexEdit}
+									<div
+										class="text-sm flex justify-center font-semibold self-center dark:text-gray-100 min-w-fit"
+									>
+										<input
+											id="message-index-input-{message.id}"
+											type="number"
+											value={siblings.indexOf(message.id) + 1}
+											min="1"
+											max={siblings.length}
+											on:focus={(e) => {
+												e.target.select();
 											}}
-										>
-											<svg
-												xmlns="http://www.w3.org/2000/svg"
-												fill="none"
-												viewBox="0 0 24 24"
-												stroke="currentColor"
-												stroke-width="2.5"
-												class="size-3.5"
-											>
-												<path
-													stroke-linecap="round"
-													stroke-linejoin="round"
-													d="m8.25 4.5 7.5 7.5-7.5 7.5"
-												/>
-											</svg>
-										</button>
+											on:blur={(e) => {
+												gotoMessage(message, e.target.value - 1);
+												messageIndexEdit = false;
+											}}
+											on:keydown={(e) => {
+												if (e.key === 'Enter') {
+													gotoMessage(message, e.target.value - 1);
+													messageIndexEdit = false;
+												}
+											}}
+											class="bg-transparent font-semibold self-center dark:text-gray-100 min-w-fit outline-hidden"
+										/>/{siblings.length}
+									</div>
+								{:else}
+									<!-- svelte-ignore a11y-no-static-element-interactions -->
+									<div
+										class="text-sm tracking-widest font-semibold self-center dark:text-gray-100 min-w-fit"
+										on:dblclick={async () => {
+											messageIndexEdit = true;
+
+											await tick();
+											const input = document.getElementById(`message-index-input-${message.id}`);
+											if (input) {
+												input.focus();
+												input.select();
+											}
+										}}
+									>
+										{siblings.indexOf(message.id) + 1}/{siblings.length}
 									</div>
 								{/if}
-							{/if}
-						</div>
-					</div>
-				{/if}
+
+								<button
+									class="self-center p-1 hover:bg-black/5 dark:hover:bg-white/5 dark:hover:text-white hover:text-black rounded-md transition"
+									on:click={() => {
+										showNextMessage(message);
+									}}
+								>
+									<svg
+										xmlns="http://www.w3.org/2000/svg"
+										fill="none"
+										viewBox="0 0 24 24"
+										stroke="currentColor"
+										stroke-width="2.5"
+										class="size-3.5"
+									>
+										<path
+											stroke-linecap="round"
+											stroke-linejoin="round"
+											d="m8.25 4.5 7.5 7.5-7.5 7.5"
+										/>
+									</svg>
+								</button>
+							</div>
+						{/if}
+					{/if}
+				</div>
 			{/if}
 		</div>
 	</div>