1
1
import { useI18n } from '@codeimage/locale' ;
2
2
import { getTerminalState } from '@codeimage/store/editor/terminal' ;
3
+ import { VersionStore } from '@codeimage/store/version/version.store' ;
3
4
import { createSelectOptions , Select } from '@codeui/kit' ;
4
5
import { shadowsLabel } from '@core/configuration/shadow' ;
5
6
import { getUmami } from '@core/constants/umami' ;
6
7
import { SegmentedField } from '@ui/SegmentedField/SegmentedField' ;
7
8
import { SkeletonLine } from '@ui/Skeleton/Skeleton' ;
8
9
import { createMemo , ParentComponent , Show } from 'solid-js' ;
10
+ import { provideState } from 'statebuilder' ;
9
11
import { AppLocaleEntries } from '../../i18n' ;
10
12
import { TerminalControlField } from './controls/TerminalControlField/TerminalControlField' ;
11
13
import { PanelHeader } from './PanelHeader' ;
@@ -14,6 +16,7 @@ import {SuspenseEditorItem} from './SuspenseEditorItem';
14
16
15
17
export const WindowStyleForm : ParentComponent = ( ) => {
16
18
const terminal = getTerminalState ( ) ;
19
+ const versionStore = provideState ( VersionStore ) ;
17
20
const [ t ] = useI18n < AppLocaleEntries > ( ) ;
18
21
19
22
const terminalShadows = createMemo (
@@ -25,6 +28,17 @@ export const WindowStyleForm: ParentComponent = () => {
25
28
valueKey : 'value' ,
26
29
} ) ;
27
30
31
+ const borderTypeSelect = createSelectOptions (
32
+ [
33
+ { label : 'None' , value : 'none' } ,
34
+ { label : 'Glass' , value : 'glass' } ,
35
+ ] ,
36
+ {
37
+ key : 'label' ,
38
+ valueKey : 'value' ,
39
+ } ,
40
+ ) ;
41
+
28
42
return (
29
43
< >
30
44
< PanelHeader label = { t ( 'frame.terminal' ) } />
@@ -151,6 +165,36 @@ export const WindowStyleForm: ParentComponent = () => {
151
165
</ SuspenseEditorItem >
152
166
</ TwoColumnPanelRow >
153
167
</ PanelRow >
168
+ < PanelRow
169
+ for = { 'frameSelectShadow' }
170
+ feature = { 'borderType' }
171
+ label = { t ( 'frame.border' ) }
172
+ >
173
+ < TwoColumnPanelRow >
174
+ < SuspenseEditorItem
175
+ fallback = { < SkeletonLine width = { '100%' } height = { '24px' } /> }
176
+ >
177
+ < Select
178
+ options = { borderTypeSelect . options ( ) }
179
+ { ...borderTypeSelect . props ( ) }
180
+ { ...borderTypeSelect . controlled (
181
+ ( ) => terminal . state . borderType ?? 'none' ,
182
+ border => {
183
+ const isNone = border === 'none' ;
184
+ versionStore . see ( 'borderType' , false ) ;
185
+ getUmami ( ) . track ( 'change-border' , {
186
+ border : border ?? 'none' ,
187
+ } ) ;
188
+ terminal . setBorder ( isNone ? null : border ?? null ) ;
189
+ } ,
190
+ ) }
191
+ aria-label = { 'Border' }
192
+ size = { 'xs' }
193
+ id = { 'frameSelectBorder' }
194
+ />
195
+ </ SuspenseEditorItem >
196
+ </ TwoColumnPanelRow >
197
+ </ PanelRow >
154
198
</ >
155
199
) ;
156
200
} ;
0 commit comments