1- <script >
2- import SettingItem from " ./setting-item.svelte" ;
3- import { showMessage } from " siyuan" ;
4- import { onMount , onDestroy } from ' svelte' ;
5- onMount (() => {
6- showMessage (" Setting panel opened" );
7- });
8- onDestroy (() => {
9- showMessage (" Setting panel closed" );
10- });
11- </script >
12-
131<!--
14- You can use this template to quickly create a setting panel,
15- with the same UI style in SiYuan
2+ Copyright (c) 2023 by frostime All Rights Reserved.
3+ Author : frostime
4+ Date : 2023-07-01 19:23:50
5+ FilePath : /src/libs/setting-panel.svelte
6+ LastEditTime : 2023-11-28 21:23:56
7+ Description :
168-->
9+ <script lang =" ts" >
10+ import { createEventDispatcher } from " svelte" ;
11+ import SettingItem from " ./setting-item.svelte" ;
12+
13+ export let group: string ;
14+ export let settingItems: ISettingItem [];
15+ export let display: boolean = true ;
16+
17+ const dispatch = createEventDispatcher ();
18+
19+ function onClick( {detail }) {
20+ dispatch (" click" , { key: detail .key });
21+ }
22+ function onChanged( {detail }) {
23+ dispatch (" changed" , {group: group , ... detail });
24+ }
25+
26+ $ : fn__none = display ? " " : " fn__none" ;
27+
28+ </script >
1729
18- <div class =" config__tab-container" >
19- <div data-type =" Header" class =" fn__flex b3-label" >
20- <div class =" fn_flex-1" >
21- <h4 >This setting panel is provided by a svelte component</h4 >
22- <div class =" b3-label__text" >
23- <span class =" fn__flex-1" >
24- See:
25- <pre style =" display: inline" >/lib/setting-pannel.svelte</pre >
26- </span >
27- </div >
28- </div >
29- </div >
30- <SettingItem
31- type =" checkbox"
32- title =" Checkbox"
33- text =" This is a checkbox"
34- settingKey =" Checkbox"
35- settingValue ={true }
36- on:changed ={(event ) => {
37- showMessage (
38- ` Checkbox changed: ${event .detail .key } = ${event .detail .value } `
39- );
40- }}
41- />
42- <SettingItem
43- type =" input"
44- title =" Input"
45- text =" This is an input"
46- settingKey =" Input"
47- settingValue =" "
48- placeholder =" Input something"
49- on:changed ={(event ) => {
50- showMessage (
51- ` Input changed: ${event .detail .key } = ${event .detail .value } `
52- );
53- }}
54- />
55- <SettingItem
56- type =" button"
57- title =" Button"
58- text =" This is a button"
59- settingKey =" Button"
60- settingValue =" Click me"
61- on:clicked ={() => {
62- showMessage (" Button clicked" );
63- }}
64- />
65- <SettingItem
66- type =" select"
67- title =" Select"
68- text =" This is a select"
69- settingKey =" Select"
70- settingValue =" left"
71- options ={{
72- left : " Left" ,
73- center : " Center" ,
74- right : " Right" ,
75- }}
76- on:changed ={(event ) => {
77- showMessage (
78- ` Select changed: ${event .detail .key } = ${event .detail .value } `
79- );
80- }}
81- />
82- <SettingItem
83- type =" slider"
84- title =" Slide"
85- text =" This is a slide"
86- settingKey =" Slide"
87- settingValue ={50 }
88- slider ={{
89- min : 0 ,
90- max : 100 ,
91- step : 1 ,
92- }}
93- on:changed ={(event ) => {
94- showMessage (
95- ` Slide changed: ${event .detail .key } = ${event .detail .value } `
96- );
97- }}
98- />
99- </div >
30+ <div class ="config__tab-container {fn__none }" data-name ={group }>
31+ <slot />
32+ {#each settingItems as item (item .key )}
33+ <SettingItem
34+ type ={item .type }
35+ title ={item .title }
36+ description ={item .description }
37+ settingKey ={item .key }
38+ settingValue ={item .value }
39+ placeholder ={item ?.text .placeholder }
40+ options ={item ?.select .options }
41+ slider ={item ?.slider }
42+ on:click ={onClick }
43+ on:changed ={onChanged }
44+ />
45+ {/each }
46+ </div >
0 commit comments