main
html 168 lines 5.48 KB
Raw
1 <html>
2 <head>
3 <title>Interface</title>
4 </head>
5
6 <body>
7 <div x-data>
8 <template x-if="$store.settings.uiVisibility">
9 <div>
10 <div class="section-title">Interface controls</div>
11 <div class="section-description">
12 Choose where each control appears. Bright devices are shown; dim devices are hidden.
13 </div>
14
15 <div class="ui-visibility-list">
16 <template x-for="control in $store.settings.uiControls" :key="control.id">
17 <div class="ui-visibility-row">
18 <div class="ui-visibility-control">
19 <x-icon aria-hidden="true" :name="control.icon"></x-icon>
20 <div>
21 <div class="field-title" x-text="control.label"></div>
22 <div class="ui-visibility-state" x-text="$store.settings.uiControlVisibilityLabel(control.id)"></div>
23 </div>
24 </div>
25
26 <div class="ui-device-selector" :aria-label="`${control.label} visibility`">
27 <button
28 type="button"
29 class="ui-device-button"
30 :class="{ 'is-visible': $store.settings.isUiControlVisible(control.id, 'mobile') }"
31 :aria-label="`Show ${control.label.toLowerCase()} on mobile`"
32 :aria-pressed="$store.settings.isUiControlVisible(control.id, 'mobile').toString()"
33 :title="$store.settings.isUiControlVisible(control.id, 'mobile') ? 'Shown on mobile' : 'Hidden on mobile'"
34 @click="$store.settings.toggleUiControl(control.id, 'mobile')"
35 >
36 <x-icon aria-hidden="true" name="smartphone"></x-icon>
37 <span>Mobile</span>
38 </button>
39 <button
40 type="button"
41 class="ui-device-button"
42 :class="{ 'is-visible': $store.settings.isUiControlVisible(control.id, 'desktop') }"
43 :aria-label="`Show ${control.label.toLowerCase()} on desktop`"
44 :aria-pressed="$store.settings.isUiControlVisible(control.id, 'desktop').toString()"
45 :title="$store.settings.isUiControlVisible(control.id, 'desktop') ? 'Shown on desktop' : 'Hidden on desktop'"
46 @click="$store.settings.toggleUiControl(control.id, 'desktop')"
47 >
48 <x-icon aria-hidden="true" name="desktop_windows"></x-icon>
49 <span>Desktop</span>
50 </button>
51 </div>
52 </div>
53 </template>
54 <x-extension id="interface-controls-end"></x-extension>
55 </div>
56 </div>
57 </template>
58 </div>
59 </body>
60
61 <style>
62 .ui-visibility-list {
63 margin-top: 1rem;
64 overflow: hidden;
65 border: 1px solid color-mix(in srgb, var(--color-border) 72%, transparent);
66 border-radius: 10px;
67 background: color-mix(in srgb, var(--color-panel) 48%, transparent);
68 }
69
70 .ui-visibility-row {
71 display: grid;
72 grid-template-columns: minmax(0, 1fr) auto;
73 align-items: center;
74 gap: 1rem;
75 min-height: 78px;
76 padding: 0.8rem 0.9rem;
77 border-bottom: 1px solid color-mix(in srgb, var(--color-border) 55%, transparent);
78 }
79
80 .ui-visibility-row:last-child {
81 border-bottom: 0;
82 }
83
84 .ui-visibility-list > x-extension,
85 .ui-visibility-list > x-extension > x-component,
86 .ui-visibility-list > x-extension > x-component > div[x-data] {
87 display: contents;
88 }
89
90 .ui-visibility-control {
91 display: flex;
92 align-items: center;
93 gap: 0.75rem;
94 min-width: 0;
95 }
96
97 .ui-visibility-control > .material-symbols-outlined {
98 display: grid;
99 flex: 0 0 38px;
100 width: 38px;
101 height: 38px;
102 place-items: center;
103 border-radius: 9px;
104 background: color-mix(in srgb, var(--color-text) 8%, transparent);
105 color: var(--color-text);
106 font-size: 21px;
107 }
108
109 .ui-visibility-state {
110 margin-top: 0.18rem;
111 color: var(--color-text-muted);
112 font-size: 0.78rem;
113 }
114
115 .ui-device-selector {
116 display: grid;
117 grid-template-columns: repeat(2, 78px);
118 gap: 0.45rem;
119 }
120
121 .ui-device-button {
122 display: flex;
123 min-height: 54px;
124 align-items: center;
125 justify-content: center;
126 flex-direction: column;
127 gap: 0.15rem;
128 padding: 0.4rem;
129 border: 1px solid transparent;
130 border-radius: 8px;
131 background: transparent;
132 color: var(--color-text-muted);
133 cursor: pointer;
134 font: inherit;
135 font-size: 0.72rem;
136 opacity: 0.35;
137 transition: opacity 0.16s ease, color 0.16s ease, border-color 0.16s ease, background-color 0.16s ease;
138 }
139
140 .ui-device-button:hover,
141 .ui-device-button:focus-visible {
142 opacity: 0.72;
143 outline: none;
144 border-color: color-mix(in srgb, var(--color-border) 80%, transparent);
145 }
146
147 .ui-device-button.is-visible {
148 opacity: 1;
149 color: var(--color-text);
150 border-color: color-mix(in srgb, var(--color-primary) 34%, var(--color-border));
151 background: color-mix(in srgb, var(--color-primary) 10%, transparent);
152 }
153
154 .ui-device-button .material-symbols-outlined {
155 font-size: 22px;
156 }
157
158 @media (max-width: 640px) {
159 .ui-visibility-row {
160 grid-template-columns: 1fr;
161 }
162
163 .ui-device-selector {
164 grid-template-columns: repeat(2, minmax(0, 1fr));
165 }
166 }
167 </style>
168 </html>