11<script >
2- import { createEventDispatcher , onMount } from ' svelte'
2+ import { createEventDispatcher , onMount } from ' svelte' ;
33
4- export let value, required = true
4+ /** @type {string} */
5+ export let value = ' ' ;
6+
7+ /** @type {boolean} */
8+ export let required = true ;
9+
10+ /** @type {number} */
11+ export let maxLength = 30 ;
12+
13+ /** @type {string} */
14+ export let placeholder = ' Please edit here...' ;
515
6- const dispatch = createEventDispatcher ()
7- let editing = false , original
16+ const dispatch = createEventDispatcher ();
17+ let editing = false ;
18+ let original = ' ' ;
819
920 onMount (() => {
10- original = value
21+ original = value;
1122 })
1223
1324 function edit () {
14- editing = true
25+ editing = true ;
1526 }
1627
1728 function submit () {
18- if (value != original) {
19- dispatch (' submit' , value)
20- }
29+ if (value != original) {
30+ dispatch (' submit' , value);
31+ }
2132
22- editing = false
33+ editing = false ;
2334 }
2435
36+ /** @param {any} event */
2537 function keydown (event ) {
26- if (event .key == ' Escape' ) {
27- event .preventDefault ()
28- value = original
29- editing = false
30- }
38+ if (event .key == ' Escape' ) {
39+ event .preventDefault ()
40+ value = original;
41+ editing = false
42+ }
3143 }
3244
45+ /** @param {HTMLInputElement} element */
3346 function focus (element ) {
34- element .focus ()
47+ element .focus ();
3548 }
3649 </script >
3750
3851{#if editing }
39- <form on:submit |preventDefault ={submit } on:keydown ={keydown }>
40- <input class ="form-control" bind:value on:blur ={submit } {required } use:focus />
41- </form >
52+ <!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
53+ <form on:submit |preventDefault ={() => submit ()} on:keydown ={e => keydown (e )}>
54+ <input
55+ class =" form-control"
56+ bind:value ={value }
57+ {required }
58+ maxlength ={maxLength }
59+ use:focus
60+ on:blur ={() => submit ()}
61+ />
62+ </form >
4263{:else }
43- <div on:click ={edit }>
44- {value }
45- </div >
64+ <!-- svelte-ignore a11y-click-events-have-key-events -->
65+ <!-- svelte-ignore a11y-no-static-element-interactions -->
66+ <div style ="width: fit-content; min-width: 30%;" on:click ={() => edit ()}>
67+ {#if !! value ?.trim ()}
68+ <span >{value }</span >
69+ {:else }
70+ <span class ="text-secondary fw-light" >{placeholder }</span >
71+ {/if }
72+ </div >
4673{/if }
0 commit comments