@shellui/core 0.0.11 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/README.md +0 -11
  2. package/dist/ContentView-CZG-ro_B.js +146 -0
  3. package/dist/ContentView-CZG-ro_B.js.map +1 -0
  4. package/dist/CookiePreferencesView-CIXBJWNt.js +213 -0
  5. package/dist/CookiePreferencesView-CIXBJWNt.js.map +1 -0
  6. package/dist/DefaultLayout-Bztmv2c_.js +406 -0
  7. package/dist/DefaultLayout-Bztmv2c_.js.map +1 -0
  8. package/dist/FullscreenLayout-DiX6dbkf.js +30 -0
  9. package/dist/FullscreenLayout-DiX6dbkf.js.map +1 -0
  10. package/dist/HomeView-C610YU6V.js +21 -0
  11. package/dist/HomeView-C610YU6V.js.map +1 -0
  12. package/dist/NotFoundView-D00gYlq-.js +52 -0
  13. package/dist/NotFoundView-D00gYlq-.js.map +1 -0
  14. package/dist/OverlayShell-CGjN4rTu.js +642 -0
  15. package/dist/OverlayShell-CGjN4rTu.js.map +1 -0
  16. package/dist/SettingsView-2QMtfS71.js +2207 -0
  17. package/dist/SettingsView-2QMtfS71.js.map +1 -0
  18. package/dist/ViewRoute-ChSPabOy.js +32 -0
  19. package/dist/ViewRoute-ChSPabOy.js.map +1 -0
  20. package/dist/WindowsLayout-DkSNQDSb.js +633 -0
  21. package/dist/WindowsLayout-DkSNQDSb.js.map +1 -0
  22. package/dist/app.d.ts +3 -0
  23. package/dist/app.d.ts.map +1 -0
  24. package/dist/components/ContentView.d.ts +10 -0
  25. package/dist/components/ContentView.d.ts.map +1 -0
  26. package/dist/components/HomeView.d.ts +2 -0
  27. package/dist/components/HomeView.d.ts.map +1 -0
  28. package/dist/components/LoadingOverlay.d.ts +2 -0
  29. package/dist/components/LoadingOverlay.d.ts.map +1 -0
  30. package/dist/components/NotFoundView.d.ts +2 -0
  31. package/dist/components/NotFoundView.d.ts.map +1 -0
  32. package/dist/components/RouteErrorBoundary.d.ts +2 -0
  33. package/dist/components/RouteErrorBoundary.d.ts.map +1 -0
  34. package/dist/components/ViewRoute.d.ts +7 -0
  35. package/dist/components/ViewRoute.d.ts.map +1 -0
  36. package/dist/components/ui/alert-dialog.d.ts +32 -0
  37. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  38. package/dist/components/ui/breadcrumb.d.ts +20 -0
  39. package/dist/components/ui/breadcrumb.d.ts.map +1 -0
  40. package/dist/components/ui/button-group.d.ts +7 -0
  41. package/dist/components/ui/button-group.d.ts.map +1 -0
  42. package/dist/components/ui/button.d.ts +12 -0
  43. package/dist/components/ui/button.d.ts.map +1 -0
  44. package/dist/components/ui/dialog.d.ts +24 -0
  45. package/dist/components/ui/dialog.d.ts.map +1 -0
  46. package/dist/components/ui/drawer.d.ts +38 -0
  47. package/dist/components/ui/drawer.d.ts.map +1 -0
  48. package/dist/components/ui/select.d.ts +5 -0
  49. package/dist/components/ui/select.d.ts.map +1 -0
  50. package/dist/components/ui/sidebar.d.ts +46 -0
  51. package/dist/components/ui/sidebar.d.ts.map +1 -0
  52. package/dist/components/ui/sonner.d.ts +6 -0
  53. package/dist/components/ui/sonner.d.ts.map +1 -0
  54. package/dist/components/ui/switch.d.ts +8 -0
  55. package/dist/components/ui/switch.d.ts.map +1 -0
  56. package/dist/constants/urls.d.ts +6 -0
  57. package/dist/constants/urls.d.ts.map +1 -0
  58. package/dist/constants/urls.js +8 -0
  59. package/dist/constants/urls.js.map +1 -0
  60. package/dist/features/alertDialog/DialogContext.d.ts +12 -0
  61. package/dist/features/alertDialog/DialogContext.d.ts.map +1 -0
  62. package/dist/features/config/ConfigProvider.d.ts +15 -0
  63. package/dist/features/config/ConfigProvider.d.ts.map +1 -0
  64. package/dist/features/config/types.d.ts +177 -0
  65. package/dist/features/config/types.d.ts.map +1 -0
  66. package/dist/features/config/useConfig.d.ts +8 -0
  67. package/dist/features/config/useConfig.d.ts.map +1 -0
  68. package/dist/features/cookieConsent/CookieConsentModal.d.ts +6 -0
  69. package/dist/features/cookieConsent/CookieConsentModal.d.ts.map +1 -0
  70. package/dist/features/cookieConsent/CookiePreferencesView.d.ts +2 -0
  71. package/dist/features/cookieConsent/CookiePreferencesView.d.ts.map +1 -0
  72. package/dist/features/cookieConsent/cookieConsent.d.ts +22 -0
  73. package/dist/features/cookieConsent/cookieConsent.d.ts.map +1 -0
  74. package/dist/features/cookieConsent/useCookieConsent.d.ts +15 -0
  75. package/dist/features/cookieConsent/useCookieConsent.d.ts.map +1 -0
  76. package/dist/features/drawer/DrawerContext.d.ts +24 -0
  77. package/dist/features/drawer/DrawerContext.d.ts.map +1 -0
  78. package/dist/features/layouts/AppLayout.d.ts +12 -0
  79. package/dist/features/layouts/AppLayout.d.ts.map +1 -0
  80. package/dist/features/layouts/DefaultLayout.d.ts +10 -0
  81. package/dist/features/layouts/DefaultLayout.d.ts.map +1 -0
  82. package/dist/features/layouts/FullscreenLayout.d.ts +9 -0
  83. package/dist/features/layouts/FullscreenLayout.d.ts.map +1 -0
  84. package/dist/features/layouts/LayoutProviders.d.ts +9 -0
  85. package/dist/features/layouts/LayoutProviders.d.ts.map +1 -0
  86. package/dist/features/layouts/OverlayShell.d.ts +10 -0
  87. package/dist/features/layouts/OverlayShell.d.ts.map +1 -0
  88. package/dist/features/layouts/WindowsLayout.d.ts +24 -0
  89. package/dist/features/layouts/WindowsLayout.d.ts.map +1 -0
  90. package/dist/features/layouts/utils.d.ts +16 -0
  91. package/dist/features/layouts/utils.d.ts.map +1 -0
  92. package/dist/features/modal/ModalContext.d.ts +20 -0
  93. package/dist/features/modal/ModalContext.d.ts.map +1 -0
  94. package/dist/features/sentry/initSentry.d.ts +14 -0
  95. package/dist/features/sentry/initSentry.d.ts.map +1 -0
  96. package/dist/features/settings/SettingsContext.d.ts +10 -0
  97. package/dist/features/settings/SettingsContext.d.ts.map +1 -0
  98. package/dist/features/settings/SettingsIcons.d.ts +22 -0
  99. package/dist/features/settings/SettingsIcons.d.ts.map +1 -0
  100. package/dist/features/settings/SettingsProvider.d.ts +5 -0
  101. package/dist/features/settings/SettingsProvider.d.ts.map +1 -0
  102. package/dist/features/settings/SettingsRoutes.d.ts +7 -0
  103. package/dist/features/settings/SettingsRoutes.d.ts.map +1 -0
  104. package/dist/features/settings/SettingsView.d.ts +2 -0
  105. package/dist/features/settings/SettingsView.d.ts.map +1 -0
  106. package/dist/features/settings/components/Advanced.d.ts +2 -0
  107. package/dist/features/settings/components/Advanced.d.ts.map +1 -0
  108. package/dist/features/settings/components/Appearance.d.ts +2 -0
  109. package/dist/features/settings/components/Appearance.d.ts.map +1 -0
  110. package/dist/features/settings/components/DataPrivacy.d.ts +2 -0
  111. package/dist/features/settings/components/DataPrivacy.d.ts.map +1 -0
  112. package/dist/features/settings/components/Develop.d.ts +2 -0
  113. package/dist/features/settings/components/Develop.d.ts.map +1 -0
  114. package/dist/features/settings/components/LanguageAndRegion.d.ts +2 -0
  115. package/dist/features/settings/components/LanguageAndRegion.d.ts.map +1 -0
  116. package/dist/features/settings/components/ServiceWorker.d.ts +2 -0
  117. package/dist/features/settings/components/ServiceWorker.d.ts.map +1 -0
  118. package/dist/features/settings/components/UpdateApp.d.ts +2 -0
  119. package/dist/features/settings/components/UpdateApp.d.ts.map +1 -0
  120. package/dist/features/settings/components/develop/DialogTestButtons.d.ts +2 -0
  121. package/dist/features/settings/components/develop/DialogTestButtons.d.ts.map +1 -0
  122. package/dist/features/settings/components/develop/DrawerTestButtons.d.ts +2 -0
  123. package/dist/features/settings/components/develop/DrawerTestButtons.d.ts.map +1 -0
  124. package/dist/features/settings/components/develop/ModalTestButtons.d.ts +2 -0
  125. package/dist/features/settings/components/develop/ModalTestButtons.d.ts.map +1 -0
  126. package/dist/features/settings/components/develop/ToastTestButtons.d.ts +2 -0
  127. package/dist/features/settings/components/develop/ToastTestButtons.d.ts.map +1 -0
  128. package/dist/features/settings/hooks/useSettings.d.ts +2 -0
  129. package/dist/features/settings/hooks/useSettings.d.ts.map +1 -0
  130. package/dist/features/sonner/SonnerContext.d.ts +29 -0
  131. package/dist/features/sonner/SonnerContext.d.ts.map +1 -0
  132. package/dist/features/theme/ThemeProvider.d.ts +11 -0
  133. package/dist/features/theme/ThemeProvider.d.ts.map +1 -0
  134. package/dist/features/theme/themes.d.ts +114 -0
  135. package/dist/features/theme/themes.d.ts.map +1 -0
  136. package/dist/features/theme/useTheme.d.ts +10 -0
  137. package/dist/features/theme/useTheme.d.ts.map +1 -0
  138. package/dist/i18n/I18nProvider.d.ts +9 -0
  139. package/dist/i18n/I18nProvider.d.ts.map +1 -0
  140. package/dist/i18n/config.d.ts +23 -0
  141. package/dist/i18n/config.d.ts.map +1 -0
  142. package/dist/i18n/translations/en/common.json.d.ts +19 -0
  143. package/dist/i18n/translations/en/cookieConsent.json.d.ts +53 -0
  144. package/dist/i18n/translations/en/settings.json.d.ts +358 -0
  145. package/dist/i18n/translations/fr/common.json.d.ts +19 -0
  146. package/dist/i18n/translations/fr/cookieConsent.json.d.ts +53 -0
  147. package/dist/i18n/translations/fr/settings.json.d.ts +358 -0
  148. package/dist/index-PsePV0Ng.js +2160 -0
  149. package/dist/index-PsePV0Ng.js.map +1 -0
  150. package/dist/index.d.ts +7 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/index.js +12 -0
  153. package/dist/index.js.map +1 -0
  154. package/dist/lib/utils.d.ts +3 -0
  155. package/dist/lib/utils.d.ts.map +1 -0
  156. package/dist/lib/z-index.d.ts +29 -0
  157. package/dist/lib/z-index.d.ts.map +1 -0
  158. package/dist/router/router.d.ts +3 -0
  159. package/dist/router/router.d.ts.map +1 -0
  160. package/dist/router/routes.d.ts +4 -0
  161. package/dist/router/routes.d.ts.map +1 -0
  162. package/dist/sidebar-Cvm_uv4l.js +336 -0
  163. package/dist/sidebar-Cvm_uv4l.js.map +1 -0
  164. package/dist/style.css +1 -0
  165. package/dist/switch-BjkiJBIa.js +44 -0
  166. package/dist/switch-BjkiJBIa.js.map +1 -0
  167. package/dist/types.js +2 -0
  168. package/dist/types.js.map +1 -0
  169. package/package.json +16 -14
  170. package/src/index.ts +2 -2
@@ -0,0 +1,2207 @@
1
+ import { jsx as e, jsxs as n, Fragment as W } from "react/jsx-runtime";
2
+ import { forwardRef as D, Children as _, isValidElement as ae, cloneElement as ie, useState as w, useEffect as E, useMemo as R, useCallback as H } from "react";
3
+ import { Slot as se } from "@radix-ui/react-slot";
4
+ import { c as N, a as S, u as I, e as oe, g as le, B as p, h as re, i as B, j as q, k as Q, l as M, m as ce, n as de, o as me, b as ge, r as ue, p as V, q as pe } from "./index-PsePV0Ng.js";
5
+ import { S as he, a as fe, c as ve, e as be, f as ye, g as xe, h as ke, i as Ne, j as we } from "./sidebar-Cvm_uv4l.js";
6
+ import { useLocation as Ce, useNavigate as Te, Routes as G, Route as j, Navigate as Ae } from "react-router";
7
+ import { useTranslation as C } from "react-i18next";
8
+ import L from "./constants/urls.js";
9
+ import { shellui as m, getLogger as Le } from "@shellui/sdk";
10
+ import { S as z } from "./switch-BjkiJBIa.js";
11
+ const Y = D(({ ...t }, a) => /* @__PURE__ */ e(
12
+ "nav",
13
+ {
14
+ ref: a,
15
+ "aria-label": "breadcrumb",
16
+ ...t
17
+ }
18
+ ));
19
+ Y.displayName = "Breadcrumb";
20
+ const J = D(
21
+ ({ className: t, ...a }, s) => /* @__PURE__ */ e(
22
+ "ol",
23
+ {
24
+ ref: s,
25
+ className: N(
26
+ "flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5",
27
+ t
28
+ ),
29
+ ...a
30
+ }
31
+ )
32
+ );
33
+ J.displayName = "BreadcrumbList";
34
+ const U = D(
35
+ ({ className: t, ...a }, s) => /* @__PURE__ */ e(
36
+ "li",
37
+ {
38
+ ref: s,
39
+ className: N("inline-flex items-center gap-1.5", t),
40
+ ...a
41
+ }
42
+ )
43
+ );
44
+ U.displayName = "BreadcrumbItem";
45
+ const Se = D(({ asChild: t, className: a, ...s }, l) => /* @__PURE__ */ e(
46
+ t ? se : "a",
47
+ {
48
+ ref: l,
49
+ className: N("transition-colors hover:text-foreground", a),
50
+ ...s
51
+ }
52
+ ));
53
+ Se.displayName = "BreadcrumbLink";
54
+ const X = D(
55
+ ({ className: t, ...a }, s) => /* @__PURE__ */ e(
56
+ "span",
57
+ {
58
+ ref: s,
59
+ role: "link",
60
+ "aria-disabled": "true",
61
+ "aria-current": "page",
62
+ className: N("font-normal text-foreground", t),
63
+ ...a
64
+ }
65
+ )
66
+ );
67
+ X.displayName = "BreadcrumbPage";
68
+ const ee = ({ children: t, className: a, ...s }) => /* @__PURE__ */ e(
69
+ "li",
70
+ {
71
+ role: "presentation",
72
+ "aria-hidden": "true",
73
+ className: N("[&>svg]:size-3.5", a),
74
+ ...s,
75
+ children: t ?? /* @__PURE__ */ e(
76
+ "svg",
77
+ {
78
+ xmlns: "http://www.w3.org/2000/svg",
79
+ width: "24",
80
+ height: "24",
81
+ viewBox: "0 0 24 24",
82
+ fill: "none",
83
+ stroke: "currentColor",
84
+ strokeWidth: "2",
85
+ strokeLinecap: "round",
86
+ strokeLinejoin: "round",
87
+ children: /* @__PURE__ */ e("polyline", { points: "9 18 15 12 9 6" })
88
+ }
89
+ )
90
+ }
91
+ );
92
+ ee.displayName = "BreadcrumbSeparator";
93
+ const Fe = () => /* @__PURE__ */ e(
94
+ "svg",
95
+ {
96
+ xmlns: "http://www.w3.org/2000/svg",
97
+ width: "16",
98
+ height: "16",
99
+ viewBox: "0 0 24 24",
100
+ fill: "none",
101
+ stroke: "currentColor",
102
+ strokeWidth: "2",
103
+ strokeLinecap: "round",
104
+ strokeLinejoin: "round",
105
+ children: /* @__PURE__ */ e(
106
+ "path",
107
+ {
108
+ fill: "none",
109
+ d: "m14.622 17.897l-10.68-2.913M18.376 2.622a1 1 0 1 1 3.002 3.002L17.36 9.643a.5.5 0 0 0 0 .707l.944.944a2.41 2.41 0 0 1 0 3.408l-.944.944a.5.5 0 0 1-.707 0L8.354 7.348a.5.5 0 0 1 0-.707l.944-.944a2.41 2.41 0 0 1 3.408 0l.944.944a.5.5 0 0 0 .707 0zM9 8c-1.804 2.71-3.97 3.46-6.583 3.948a.507.507 0 0 0-.302.819l7.32 8.883a1 1 0 0 0 1.185.204C12.735 20.405 16 16.792 16 15"
110
+ }
111
+ )
112
+ }
113
+ ), Be = () => /* @__PURE__ */ n(
114
+ "svg",
115
+ {
116
+ xmlns: "http://www.w3.org/2000/svg",
117
+ width: "16",
118
+ height: "16",
119
+ viewBox: "0 0 24 24",
120
+ fill: "none",
121
+ stroke: "currentColor",
122
+ strokeWidth: "2",
123
+ strokeLinecap: "round",
124
+ strokeLinejoin: "round",
125
+ children: [
126
+ /* @__PURE__ */ e(
127
+ "circle",
128
+ {
129
+ cx: "12",
130
+ cy: "12",
131
+ r: "10"
132
+ }
133
+ ),
134
+ /* @__PURE__ */ e(
135
+ "line",
136
+ {
137
+ x1: "2",
138
+ x2: "22",
139
+ y1: "12",
140
+ y2: "12"
141
+ }
142
+ ),
143
+ /* @__PURE__ */ e("path", { d: "M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" })
144
+ ]
145
+ }
146
+ ), Ee = () => /* @__PURE__ */ e(
147
+ "svg",
148
+ {
149
+ xmlns: "http://www.w3.org/2000/svg",
150
+ width: "16",
151
+ height: "16",
152
+ viewBox: "0 0 24 24",
153
+ fill: "none",
154
+ stroke: "currentColor",
155
+ strokeWidth: "2",
156
+ strokeLinecap: "round",
157
+ strokeLinejoin: "round",
158
+ children: /* @__PURE__ */ e("polyline", { points: "20 6 9 17 4 12" })
159
+ }
160
+ ), De = () => /* @__PURE__ */ n(
161
+ "svg",
162
+ {
163
+ xmlns: "http://www.w3.org/2000/svg",
164
+ width: "16",
165
+ height: "16",
166
+ viewBox: "0 0 24 24",
167
+ fill: "none",
168
+ stroke: "currentColor",
169
+ strokeWidth: "2",
170
+ strokeLinecap: "round",
171
+ strokeLinejoin: "round",
172
+ children: [
173
+ /* @__PURE__ */ e("path", { d: "M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z" }),
174
+ /* @__PURE__ */ e(
175
+ "circle",
176
+ {
177
+ cx: "12",
178
+ cy: "12",
179
+ r: "3"
180
+ }
181
+ )
182
+ ]
183
+ }
184
+ ), Ie = () => /* @__PURE__ */ n(
185
+ "svg",
186
+ {
187
+ xmlns: "http://www.w3.org/2000/svg",
188
+ width: "16",
189
+ height: "16",
190
+ viewBox: "0 0 24 24",
191
+ fill: "none",
192
+ stroke: "currentColor",
193
+ strokeWidth: "2",
194
+ strokeLinecap: "round",
195
+ strokeLinejoin: "round",
196
+ children: [
197
+ /* @__PURE__ */ e("polyline", { points: "16 18 22 12 16 6" }),
198
+ /* @__PURE__ */ e("polyline", { points: "8 6 2 12 8 18" })
199
+ ]
200
+ }
201
+ ), Pe = () => /* @__PURE__ */ e(
202
+ "svg",
203
+ {
204
+ xmlns: "http://www.w3.org/2000/svg",
205
+ width: "16",
206
+ height: "16",
207
+ viewBox: "0 0 24 24",
208
+ fill: "none",
209
+ stroke: "currentColor",
210
+ strokeWidth: "2",
211
+ strokeLinecap: "round",
212
+ strokeLinejoin: "round",
213
+ children: /* @__PURE__ */ e("polyline", { points: "9 18 15 12 9 6" })
214
+ }
215
+ ), Re = () => /* @__PURE__ */ e(
216
+ "svg",
217
+ {
218
+ xmlns: "http://www.w3.org/2000/svg",
219
+ width: "16",
220
+ height: "16",
221
+ viewBox: "0 0 24 24",
222
+ fill: "none",
223
+ stroke: "currentColor",
224
+ strokeWidth: "2",
225
+ strokeLinecap: "round",
226
+ strokeLinejoin: "round",
227
+ children: /* @__PURE__ */ e("polyline", { points: "15 18 9 12 15 6" })
228
+ }
229
+ ), We = () => /* @__PURE__ */ e(
230
+ "svg",
231
+ {
232
+ xmlns: "http://www.w3.org/2000/svg",
233
+ width: "16",
234
+ height: "16",
235
+ viewBox: "0 0 24 24",
236
+ fill: "none",
237
+ stroke: "currentColor",
238
+ strokeWidth: "2",
239
+ strokeLinecap: "round",
240
+ strokeLinejoin: "round",
241
+ children: /* @__PURE__ */ e("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" })
242
+ }
243
+ ), Me = () => /* @__PURE__ */ n(
244
+ "svg",
245
+ {
246
+ xmlns: "http://www.w3.org/2000/svg",
247
+ viewBox: "0 0 24 24",
248
+ width: "16",
249
+ height: "16",
250
+ fill: "none",
251
+ stroke: "currentColor",
252
+ strokeWidth: "2",
253
+ strokeLinecap: "round",
254
+ strokeLinejoin: "round",
255
+ children: [
256
+ /* @__PURE__ */ e("path", { d: "M21 12a9 9 0 0 0-9-9a9.75 9.75 0 0 0-6.74 2.74L3 8" }),
257
+ /* @__PURE__ */ e("path", { d: "M3 3v5h5m-5 4a9 9 0 0 0 9 9a9.75 9.75 0 0 0 6.74-2.74L21 16" }),
258
+ /* @__PURE__ */ e("path", { d: "M16 16h5v5" })
259
+ ]
260
+ }
261
+ ), ze = () => /* @__PURE__ */ n(
262
+ "svg",
263
+ {
264
+ xmlns: "http://www.w3.org/2000/svg",
265
+ width: "16",
266
+ height: "16",
267
+ viewBox: "0 0 24 24",
268
+ fill: "none",
269
+ stroke: "currentColor",
270
+ strokeWidth: "2",
271
+ strokeLinecap: "round",
272
+ strokeLinejoin: "round",
273
+ children: [
274
+ /* @__PURE__ */ e("path", { d: "m7.5 4.27 9 5.15" }),
275
+ /* @__PURE__ */ e("path", { d: "M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z" }),
276
+ /* @__PURE__ */ e("path", { d: "m3.3 7 8.7 5 8.7-5" }),
277
+ /* @__PURE__ */ e("path", { d: "M12 22V12" })
278
+ ]
279
+ }
280
+ ), Z = D(
281
+ ({ className: t, children: a, ...s }, l) => /* @__PURE__ */ e(
282
+ "div",
283
+ {
284
+ ref: l,
285
+ className: N("inline-flex rounded-md", t),
286
+ role: "group",
287
+ ...s,
288
+ children: _.map(a, (i, f) => {
289
+ if (ae(i)) {
290
+ const r = f === 0, c = f === _.count(a) - 1;
291
+ return ie(i, {
292
+ className: N(
293
+ // Remove rounded corners from all buttons
294
+ "rounded-none",
295
+ // First button: rounded left only (uses theme radius)
296
+ r && "rounded-l-md",
297
+ // Last button: rounded right only (uses theme radius)
298
+ c && "rounded-r-md",
299
+ // Remove left border from all except first, using theme border color
300
+ !r && "border-l-0 -ml-px",
301
+ i.props.className
302
+ )
303
+ });
304
+ }
305
+ return i;
306
+ })
307
+ }
308
+ )
309
+ );
310
+ Z.displayName = "ButtonGroup";
311
+ const je = () => /* @__PURE__ */ n(
312
+ "svg",
313
+ {
314
+ xmlns: "http://www.w3.org/2000/svg",
315
+ width: "16",
316
+ height: "16",
317
+ viewBox: "0 0 24 24",
318
+ fill: "none",
319
+ stroke: "currentColor",
320
+ strokeWidth: "2",
321
+ strokeLinecap: "round",
322
+ strokeLinejoin: "round",
323
+ children: [
324
+ /* @__PURE__ */ e(
325
+ "circle",
326
+ {
327
+ cx: "12",
328
+ cy: "12",
329
+ r: "4"
330
+ }
331
+ ),
332
+ /* @__PURE__ */ e("path", { d: "M12 2v2" }),
333
+ /* @__PURE__ */ e("path", { d: "M12 20v2" }),
334
+ /* @__PURE__ */ e("path", { d: "m4.93 4.93 1.41 1.41" }),
335
+ /* @__PURE__ */ e("path", { d: "m17.66 17.66 1.41 1.41" }),
336
+ /* @__PURE__ */ e("path", { d: "M2 12h2" }),
337
+ /* @__PURE__ */ e("path", { d: "M20 12h2" }),
338
+ /* @__PURE__ */ e("path", { d: "m6.34 17.66-1.41 1.41" }),
339
+ /* @__PURE__ */ e("path", { d: "m19.07 4.93-1.41 1.41" })
340
+ ]
341
+ }
342
+ ), Ue = () => /* @__PURE__ */ e(
343
+ "svg",
344
+ {
345
+ xmlns: "http://www.w3.org/2000/svg",
346
+ width: "16",
347
+ height: "16",
348
+ viewBox: "0 0 24 24",
349
+ fill: "none",
350
+ stroke: "currentColor",
351
+ strokeWidth: "2",
352
+ strokeLinecap: "round",
353
+ strokeLinejoin: "round",
354
+ children: /* @__PURE__ */ e("path", { d: "M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z" })
355
+ }
356
+ ), Ze = () => /* @__PURE__ */ n(
357
+ "svg",
358
+ {
359
+ xmlns: "http://www.w3.org/2000/svg",
360
+ width: "16",
361
+ height: "16",
362
+ viewBox: "0 0 24 24",
363
+ fill: "none",
364
+ stroke: "currentColor",
365
+ strokeWidth: "2",
366
+ strokeLinecap: "round",
367
+ strokeLinejoin: "round",
368
+ children: [
369
+ /* @__PURE__ */ e(
370
+ "rect",
371
+ {
372
+ width: "20",
373
+ height: "14",
374
+ x: "2",
375
+ y: "3",
376
+ rx: "2"
377
+ }
378
+ ),
379
+ /* @__PURE__ */ e(
380
+ "line",
381
+ {
382
+ x1: "8",
383
+ x2: "16",
384
+ y1: "21",
385
+ y2: "21"
386
+ }
387
+ ),
388
+ /* @__PURE__ */ e(
389
+ "line",
390
+ {
391
+ x1: "12",
392
+ x2: "12",
393
+ y1: "17",
394
+ y2: "21"
395
+ }
396
+ )
397
+ ]
398
+ }
399
+ ), $e = ({
400
+ theme: t,
401
+ isSelected: a,
402
+ isDark: s
403
+ }) => {
404
+ const l = s ? t.colors.dark : t.colors.light;
405
+ return /* @__PURE__ */ n(
406
+ "div",
407
+ {
408
+ className: N(
409
+ "relative overflow-hidden rounded-lg border-2 transition-all",
410
+ a ? "border-primary shadow-lg" : "border-border"
411
+ ),
412
+ style: { backgroundColor: l.background },
413
+ children: [
414
+ /* @__PURE__ */ n("div", { className: "p-3 space-y-2", children: [
415
+ /* @__PURE__ */ e(
416
+ "div",
417
+ {
418
+ className: "h-8 rounded-md",
419
+ style: { backgroundColor: l.primary }
420
+ }
421
+ ),
422
+ /* @__PURE__ */ n("div", { className: "flex gap-1", children: [
423
+ /* @__PURE__ */ e(
424
+ "div",
425
+ {
426
+ className: "h-6 flex-1 rounded",
427
+ style: { backgroundColor: l.background }
428
+ }
429
+ ),
430
+ /* @__PURE__ */ e(
431
+ "div",
432
+ {
433
+ className: "h-6 flex-1 rounded",
434
+ style: { backgroundColor: l.secondary }
435
+ }
436
+ ),
437
+ /* @__PURE__ */ e(
438
+ "div",
439
+ {
440
+ className: "h-6 flex-1 rounded",
441
+ style: { backgroundColor: l.accent }
442
+ }
443
+ )
444
+ ] }),
445
+ /* @__PURE__ */ n("div", { className: "flex gap-1", children: [
446
+ /* @__PURE__ */ e(
447
+ "div",
448
+ {
449
+ className: "h-4 flex-1 rounded",
450
+ style: { backgroundColor: l.muted }
451
+ }
452
+ ),
453
+ /* @__PURE__ */ e(
454
+ "div",
455
+ {
456
+ className: "h-4 flex-1 rounded",
457
+ style: { backgroundColor: l.border }
458
+ }
459
+ )
460
+ ] })
461
+ ] }),
462
+ /* @__PURE__ */ e(
463
+ "div",
464
+ {
465
+ className: "absolute bottom-0 left-0 right-0 bg-background/90 backdrop-blur-sm px-2 py-1",
466
+ style: { backgroundColor: l.background },
467
+ children: /* @__PURE__ */ e(
468
+ "p",
469
+ {
470
+ className: "text-xs font-medium text-center",
471
+ style: t.fontFamily ? {
472
+ fontFamily: t.fontFamily,
473
+ letterSpacing: t.letterSpacing || "normal",
474
+ textShadow: t.textShadow || "none"
475
+ } : {},
476
+ children: t.displayName
477
+ }
478
+ )
479
+ }
480
+ )
481
+ ]
482
+ }
483
+ );
484
+ }, _e = () => {
485
+ const { t } = C("settings"), { settings: a, updateSetting: s } = S(), { config: l } = I(), i = a.appearance?.theme || "system", f = a.appearance?.themeName || "default", [r, c] = w([]);
486
+ E(() => {
487
+ l?.themes && l.themes.forEach((g) => {
488
+ oe(g);
489
+ }), c(le());
490
+ }, [l]);
491
+ const [u, v] = w(() => typeof window > "u" ? !1 : i === "dark" || i === "system" && window.matchMedia("(prefers-color-scheme: dark)").matches);
492
+ E(() => {
493
+ if (typeof window > "u") return;
494
+ const g = () => {
495
+ v(
496
+ i === "dark" || i === "system" && window.matchMedia("(prefers-color-scheme: dark)").matches
497
+ );
498
+ };
499
+ if (g(), i === "system") {
500
+ const d = window.matchMedia("(prefers-color-scheme: dark)"), h = () => g();
501
+ if (d.addEventListener)
502
+ return d.addEventListener("change", h), () => d.removeEventListener("change", h);
503
+ if (d.addListener)
504
+ return d.addListener(h), () => d.removeListener(h);
505
+ }
506
+ }, [i]);
507
+ const x = [
508
+ { value: "light", label: t("appearance.themes.light"), icon: je },
509
+ { value: "dark", label: t("appearance.themes.dark"), icon: Ue },
510
+ { value: "system", label: t("appearance.themes.system"), icon: Ze }
511
+ ];
512
+ return /* @__PURE__ */ n("div", { className: "space-y-6", children: [
513
+ /* @__PURE__ */ n("div", { className: "space-y-2", children: [
514
+ /* @__PURE__ */ n("div", { className: "space-y-0.5", children: [
515
+ /* @__PURE__ */ e(
516
+ "label",
517
+ {
518
+ className: "text-sm font-medium leading-none",
519
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
520
+ children: t("appearance.mode")
521
+ }
522
+ ),
523
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: t("appearance.modeDescription") })
524
+ ] }),
525
+ /* @__PURE__ */ e("div", { className: "mt-2", children: /* @__PURE__ */ e(Z, { children: x.map((g) => {
526
+ const d = g.icon, h = i === g.value;
527
+ return /* @__PURE__ */ n(
528
+ p,
529
+ {
530
+ variant: h ? "default" : "outline",
531
+ onClick: () => {
532
+ s("appearance", { theme: g.value });
533
+ },
534
+ className: N(
535
+ "h-10 px-4 transition-all flex items-center gap-2 cursor-pointer",
536
+ h && ["font-semibold"],
537
+ !h && ["bg-background hover:bg-accent/50", "text-muted-foreground"]
538
+ ),
539
+ "aria-label": g.label,
540
+ title: g.label,
541
+ children: [
542
+ /* @__PURE__ */ e(d, {}),
543
+ /* @__PURE__ */ e("span", { className: "text-sm font-medium", children: g.label })
544
+ ]
545
+ },
546
+ g.value
547
+ );
548
+ }) }) })
549
+ ] }),
550
+ /* @__PURE__ */ n("div", { className: "space-y-2", children: [
551
+ /* @__PURE__ */ n("div", { className: "space-y-0.5", children: [
552
+ /* @__PURE__ */ e(
553
+ "label",
554
+ {
555
+ className: "text-sm font-medium leading-none",
556
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
557
+ children: t("appearance.colorTheme")
558
+ }
559
+ ),
560
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: t("appearance.colorThemeDescription") })
561
+ ] }),
562
+ /* @__PURE__ */ e("div", { className: "mt-2 grid grid-cols-2 md:grid-cols-3 gap-4", children: r.map((g) => {
563
+ const d = f === g.name;
564
+ return /* @__PURE__ */ e(
565
+ "button",
566
+ {
567
+ onClick: () => {
568
+ s("appearance", { themeName: g.name });
569
+ },
570
+ className: N(
571
+ "text-left transition-all cursor-pointer",
572
+ d && "ring-2 ring-primary ring-offset-2 rounded-lg"
573
+ ),
574
+ "aria-label": g.displayName,
575
+ children: /* @__PURE__ */ e(
576
+ $e,
577
+ {
578
+ theme: g,
579
+ isSelected: d,
580
+ isDark: u
581
+ }
582
+ )
583
+ },
584
+ g.name
585
+ );
586
+ }) })
587
+ ] })
588
+ ] });
589
+ }, $ = D(
590
+ ({ className: t, children: a, ...s }, l) => /* @__PURE__ */ e(
591
+ "select",
592
+ {
593
+ className: N(
594
+ "select-field flex h-10 w-full rounded-md border border-input bg-background pl-3 pr-10 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 cursor-pointer disabled:cursor-not-allowed disabled:opacity-50",
595
+ t
596
+ ),
597
+ ref: l,
598
+ ...s,
599
+ children: a
600
+ }
601
+ )
602
+ );
603
+ $.displayName = "Select";
604
+ const He = () => /* @__PURE__ */ n(
605
+ "svg",
606
+ {
607
+ xmlns: "http://www.w3.org/2000/svg",
608
+ width: "16",
609
+ height: "16",
610
+ viewBox: "0 0 24 24",
611
+ fill: "none",
612
+ stroke: "currentColor",
613
+ strokeWidth: "2",
614
+ strokeLinecap: "round",
615
+ strokeLinejoin: "round",
616
+ children: [
617
+ /* @__PURE__ */ e(
618
+ "circle",
619
+ {
620
+ cx: "12",
621
+ cy: "12",
622
+ r: "10"
623
+ }
624
+ ),
625
+ /* @__PURE__ */ e(
626
+ "line",
627
+ {
628
+ x1: "2",
629
+ x2: "22",
630
+ y1: "12",
631
+ y2: "12"
632
+ }
633
+ ),
634
+ /* @__PURE__ */ e("path", { d: "M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" })
635
+ ]
636
+ }
637
+ ), Ve = () => /* @__PURE__ */ n(
638
+ "svg",
639
+ {
640
+ xmlns: "http://www.w3.org/2000/svg",
641
+ width: "16",
642
+ height: "16",
643
+ viewBox: "0 0 24 24",
644
+ fill: "none",
645
+ stroke: "currentColor",
646
+ strokeWidth: "2",
647
+ strokeLinecap: "round",
648
+ strokeLinejoin: "round",
649
+ children: [
650
+ /* @__PURE__ */ e(
651
+ "circle",
652
+ {
653
+ cx: "12",
654
+ cy: "12",
655
+ r: "10"
656
+ }
657
+ ),
658
+ /* @__PURE__ */ e("polyline", { points: "12 6 12 12 16 14" })
659
+ ]
660
+ }
661
+ ), Ge = [
662
+ {
663
+ label: "UTC",
664
+ timezones: [{ value: "UTC", label: "UTC (Coordinated Universal Time)" }]
665
+ },
666
+ {
667
+ label: "North America",
668
+ timezones: [
669
+ { value: "America/New_York", label: "Eastern Time (US & Canada)" },
670
+ { value: "America/Chicago", label: "Central Time (US & Canada)" },
671
+ { value: "America/Denver", label: "Mountain Time (US & Canada)" },
672
+ { value: "America/Los_Angeles", label: "Pacific Time (US & Canada)" },
673
+ { value: "America/Toronto", label: "Toronto" },
674
+ { value: "America/Vancouver", label: "Vancouver" },
675
+ { value: "America/Mexico_City", label: "Mexico City" }
676
+ ]
677
+ },
678
+ {
679
+ label: "South America",
680
+ timezones: [
681
+ { value: "America/Sao_Paulo", label: "São Paulo" },
682
+ { value: "America/Buenos_Aires", label: "Buenos Aires" }
683
+ ]
684
+ },
685
+ {
686
+ label: "Europe",
687
+ timezones: [
688
+ { value: "Europe/London", label: "London" },
689
+ { value: "Europe/Paris", label: "Paris" },
690
+ { value: "Europe/Berlin", label: "Berlin" },
691
+ { value: "Europe/Rome", label: "Rome" },
692
+ { value: "Europe/Madrid", label: "Madrid" },
693
+ { value: "Europe/Amsterdam", label: "Amsterdam" },
694
+ { value: "Europe/Stockholm", label: "Stockholm" },
695
+ { value: "Europe/Zurich", label: "Zurich" }
696
+ ]
697
+ },
698
+ {
699
+ label: "Asia",
700
+ timezones: [
701
+ { value: "Asia/Tokyo", label: "Tokyo" },
702
+ { value: "Asia/Shanghai", label: "Shanghai" },
703
+ { value: "Asia/Hong_Kong", label: "Hong Kong" },
704
+ { value: "Asia/Singapore", label: "Singapore" },
705
+ { value: "Asia/Dubai", label: "Dubai" },
706
+ { value: "Asia/Kolkata", label: "Mumbai, New Delhi" },
707
+ { value: "Asia/Bangkok", label: "Bangkok" }
708
+ ]
709
+ },
710
+ {
711
+ label: "Australia & Pacific",
712
+ timezones: [
713
+ { value: "Australia/Sydney", label: "Sydney" },
714
+ { value: "Australia/Melbourne", label: "Melbourne" },
715
+ { value: "Pacific/Auckland", label: "Auckland" }
716
+ ]
717
+ }
718
+ ], O = (t, a, s) => {
719
+ try {
720
+ return new Intl.DateTimeFormat(s, {
721
+ timeZone: a,
722
+ weekday: "long",
723
+ year: "numeric",
724
+ month: "long",
725
+ day: "numeric"
726
+ }).format(t);
727
+ } catch {
728
+ return t.toLocaleDateString(s);
729
+ }
730
+ }, K = (t, a, s) => {
731
+ try {
732
+ return new Intl.DateTimeFormat(s, {
733
+ timeZone: a,
734
+ hour: "2-digit",
735
+ minute: "2-digit",
736
+ second: "2-digit",
737
+ hour12: !1
738
+ }).format(t);
739
+ } catch {
740
+ return t.toLocaleTimeString(s);
741
+ }
742
+ }, Oe = () => typeof Intl < "u" ? Intl.DateTimeFormat().resolvedOptions().timeZone : "UTC", Ke = (t, a = "en") => {
743
+ try {
744
+ const i = new Intl.DateTimeFormat(a, {
745
+ timeZone: t,
746
+ timeZoneName: "long"
747
+ }).formatToParts(/* @__PURE__ */ new Date()).find((r) => r.type === "timeZoneName")?.value;
748
+ return i || t.split("/").pop()?.replace(/_/g, " ") || t;
749
+ } catch {
750
+ return t;
751
+ }
752
+ }, qe = () => {
753
+ const { t } = C("settings"), { settings: a, updateSetting: s } = S(), { config: l } = I(), i = a.language?.code || "en", f = Oe(), r = a.region?.timezone || f, c = r === f, u = re(l?.language), v = () => {
754
+ s("region", { timezone: f });
755
+ }, [x, g] = w(() => {
756
+ const d = /* @__PURE__ */ new Date();
757
+ return {
758
+ date: O(d, r, i),
759
+ time: K(d, r, i)
760
+ };
761
+ });
762
+ return E(() => {
763
+ const d = () => {
764
+ const y = /* @__PURE__ */ new Date();
765
+ g({
766
+ date: O(y, r, i),
767
+ time: K(y, r, i)
768
+ });
769
+ };
770
+ d();
771
+ const h = setInterval(d, 1e3);
772
+ return () => clearInterval(h);
773
+ }, [r, i]), /* @__PURE__ */ n("div", { className: "space-y-6", children: [
774
+ /* @__PURE__ */ n("div", { className: "space-y-2", children: [
775
+ /* @__PURE__ */ e(
776
+ "label",
777
+ {
778
+ className: "text-sm font-medium leading-none",
779
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
780
+ children: t("languageAndRegion.language")
781
+ }
782
+ ),
783
+ /* @__PURE__ */ e("div", { className: "mt-2", children: /* @__PURE__ */ e(Z, { children: u.map((d) => {
784
+ const h = i === d.code;
785
+ return /* @__PURE__ */ n(
786
+ p,
787
+ {
788
+ variant: h ? "default" : "outline",
789
+ onClick: () => {
790
+ s("language", { code: d.code });
791
+ },
792
+ className: N(
793
+ "h-10 px-4 transition-all flex items-center gap-2",
794
+ h && ["shadow-md", "font-semibold"],
795
+ !h && ["bg-background hover:bg-accent/50", "text-muted-foreground"]
796
+ ),
797
+ "aria-label": d.nativeName,
798
+ title: d.nativeName,
799
+ children: [
800
+ /* @__PURE__ */ e(He, {}),
801
+ /* @__PURE__ */ e("span", { className: "text-sm font-medium", children: d.nativeName })
802
+ ]
803
+ },
804
+ d.code
805
+ );
806
+ }) }) })
807
+ ] }),
808
+ /* @__PURE__ */ n("div", { className: "space-y-2", children: [
809
+ /* @__PURE__ */ n("div", { className: "flex items-center justify-between", children: [
810
+ /* @__PURE__ */ e(
811
+ "label",
812
+ {
813
+ className: "text-sm font-medium leading-none",
814
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
815
+ children: t("languageAndRegion.region")
816
+ }
817
+ ),
818
+ !c && /* @__PURE__ */ e(
819
+ p,
820
+ {
821
+ variant: "ghost",
822
+ size: "sm",
823
+ onClick: v,
824
+ className: "h-8 text-xs",
825
+ children: t("languageAndRegion.resetToBrowser")
826
+ }
827
+ )
828
+ ] }),
829
+ /* @__PURE__ */ n("div", { className: "mt-2 space-y-3", children: [
830
+ /* @__PURE__ */ e(
831
+ $,
832
+ {
833
+ value: r,
834
+ onChange: (d) => {
835
+ s("region", { timezone: d.target.value });
836
+ },
837
+ className: "w-full",
838
+ children: Ge.map((d) => /* @__PURE__ */ e(
839
+ "optgroup",
840
+ {
841
+ label: d.label,
842
+ children: d.timezones.map((h) => {
843
+ const y = h.value === f;
844
+ return /* @__PURE__ */ n(
845
+ "option",
846
+ {
847
+ value: h.value,
848
+ children: [
849
+ h.label,
850
+ y ? ` (${t("languageAndRegion.defaultBrowser")})` : ""
851
+ ]
852
+ },
853
+ h.value
854
+ );
855
+ })
856
+ },
857
+ d.label
858
+ ))
859
+ }
860
+ ),
861
+ /* @__PURE__ */ n("div", { className: "flex items-center gap-2 px-3 py-2 rounded-md bg-muted/60 border border-border/50", children: [
862
+ /* @__PURE__ */ e(Ve, {}),
863
+ /* @__PURE__ */ n("div", { className: "flex items-baseline gap-2", children: [
864
+ /* @__PURE__ */ e("span", { className: "text-lg font-semibold tabular-nums", children: x.time }),
865
+ /* @__PURE__ */ e("span", { className: "text-xs text-muted-foreground", children: x.date })
866
+ ] })
867
+ ] }),
868
+ /* @__PURE__ */ n("div", { className: "text-xs text-muted-foreground flex items-center gap-1", children: [
869
+ /* @__PURE__ */ n("span", { children: [
870
+ t("languageAndRegion.timezoneLabel"),
871
+ ":"
872
+ ] }),
873
+ /* @__PURE__ */ e("span", { className: "font-medium", children: Ke(r, i) }),
874
+ c && /* @__PURE__ */ n("span", { className: "ml-1", children: [
875
+ "(",
876
+ t("languageAndRegion.defaultBrowser"),
877
+ ")"
878
+ ] })
879
+ ] })
880
+ ] })
881
+ ] })
882
+ ] });
883
+ }, Qe = Le("shellcore"), Ye = () => {
884
+ const { t } = C("settings"), { config: a } = I(), { settings: s } = S(), [l, i] = w(!1), [f, r] = w(!1), [c, u] = w(!1), [v, x] = w(!1), g = s?.serviceWorker?.enabled ?? !0;
885
+ E(() => B() ? void 0 : ((async () => {
886
+ const b = await M();
887
+ i(b.updateAvailable);
888
+ })(), q((b) => {
889
+ i(b.updateAvailable), b.updateAvailable && (u(!1), x(!1));
890
+ })), []);
891
+ const d = async () => {
892
+ if (!B()) {
893
+ u(!1), x(!1), r(!0);
894
+ try {
895
+ if ((await M()).updateAvailable)
896
+ return;
897
+ await ce(), await new Promise((o) => setTimeout(o, 1e3)), l || (await M()).updateAvailable || (u(!0), window.setTimeout(() => u(!1), 3e3));
898
+ } catch (y) {
899
+ x(!0), Qe.error("Failed to check for service worker update:", { error: y });
900
+ } finally {
901
+ r(!1);
902
+ }
903
+ }
904
+ }, h = a?.version ?? t("updateApp.versionUnknown");
905
+ return B() ? /* @__PURE__ */ e("div", { className: "space-y-6", children: /* @__PURE__ */ n("div", { className: "space-y-2", children: [
906
+ /* @__PURE__ */ n("div", { className: "space-y-0.5", children: [
907
+ /* @__PURE__ */ e(
908
+ "label",
909
+ {
910
+ className: "text-sm font-medium leading-none",
911
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
912
+ children: t("updateApp.currentVersion")
913
+ }
914
+ ),
915
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: h })
916
+ ] }),
917
+ /* @__PURE__ */ e("div", { className: "rounded-lg border border-border bg-muted/30 p-4", children: /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: t("updateApp.tauriComingSoon") }) })
918
+ ] }) }) : /* @__PURE__ */ e("div", { className: "space-y-6", children: /* @__PURE__ */ n("div", { className: "space-y-4", children: [
919
+ /* @__PURE__ */ n("div", { className: "space-y-0.5", children: [
920
+ /* @__PURE__ */ e(
921
+ "label",
922
+ {
923
+ className: "text-sm font-medium leading-none",
924
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
925
+ children: t("updateApp.currentVersion")
926
+ }
927
+ ),
928
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: h })
929
+ ] }),
930
+ g ? /* @__PURE__ */ n(W, { children: [
931
+ /* @__PURE__ */ n("div", { className: "space-y-2", children: [
932
+ /* @__PURE__ */ e(
933
+ "label",
934
+ {
935
+ className: "text-sm font-medium leading-none",
936
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
937
+ children: t("updateApp.status")
938
+ }
939
+ ),
940
+ /* @__PURE__ */ e("div", { className: "flex items-center gap-2 text-sm mt-2", children: l ? /* @__PURE__ */ n("span", { className: "text-blue-600 dark:text-blue-400", children: [
941
+ "● ",
942
+ t("updateApp.statusUpdateAvailable")
943
+ ] }) : /* @__PURE__ */ n("span", { className: "text-green-600 dark:text-green-400", children: [
944
+ "● ",
945
+ t("updateApp.statusUpToDate")
946
+ ] }) })
947
+ ] }),
948
+ /* @__PURE__ */ n("div", { className: "flex items-center gap-2 flex-wrap", children: [
949
+ l && /* @__PURE__ */ e(
950
+ p,
951
+ {
952
+ variant: "default",
953
+ onClick: async () => {
954
+ await Q();
955
+ },
956
+ className: "w-full sm:w-auto",
957
+ children: t("updateApp.installNow")
958
+ }
959
+ ),
960
+ /* @__PURE__ */ e(
961
+ p,
962
+ {
963
+ variant: "outline",
964
+ onClick: d,
965
+ disabled: f || l,
966
+ className: "w-full sm:w-auto",
967
+ children: f ? /* @__PURE__ */ n(W, { children: [
968
+ /* @__PURE__ */ e(
969
+ "span",
970
+ {
971
+ className: "inline-block h-4 w-4 shrink-0 animate-spin rounded-full border-2 border-current border-t-transparent mr-2",
972
+ "aria-hidden": !0
973
+ }
974
+ ),
975
+ t("updateApp.checking")
976
+ ] }) : v ? /* @__PURE__ */ e("span", { className: "inline-flex items-center gap-2 text-red-600 dark:text-red-400", children: t("updateApp.checkError") }) : c && !l ? /* @__PURE__ */ n("span", { className: "inline-flex items-center gap-2 text-green-600 dark:text-green-400", children: [
977
+ /* @__PURE__ */ e(Ee, {}),
978
+ t("updateApp.youAreUpToDate")
979
+ ] }) : t("updateApp.checkForUpdate")
980
+ }
981
+ )
982
+ ] })
983
+ ] }) : /* @__PURE__ */ n("div", { className: "space-y-3", children: [
984
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: t("updateApp.swDisabledMessage") }),
985
+ /* @__PURE__ */ e(
986
+ p,
987
+ {
988
+ variant: "outline",
989
+ onClick: () => {
990
+ m.sendMessageToParent({
991
+ type: "SHELLUI_REFRESH_PAGE",
992
+ payload: {}
993
+ }) || window.location.reload();
994
+ },
995
+ className: "w-full sm:w-auto",
996
+ children: t("updateApp.refreshApp")
997
+ }
998
+ )
999
+ ] })
1000
+ ] }) });
1001
+ }, Je = () => {
1002
+ const { t } = C("settings"), { config: a } = I(), { settings: s, updateSetting: l, resetAllData: i } = S(), f = !!a?.sentry?.dsn, r = (u) => {
1003
+ l("errorReporting", { enabled: u }), u ? de() : me();
1004
+ }, c = () => {
1005
+ m.dialog({
1006
+ title: t("advanced.dangerZone.reset.toast.title"),
1007
+ description: t("advanced.dangerZone.reset.toast.description"),
1008
+ mode: "delete",
1009
+ size: "sm",
1010
+ okLabel: t("advanced.dangerZone.reset.toast.confirm"),
1011
+ cancelLabel: t("advanced.dangerZone.reset.toast.cancel"),
1012
+ onOk: () => {
1013
+ i(), m.toast({
1014
+ title: t("advanced.dangerZone.reset.toast.success.title"),
1015
+ description: t("advanced.dangerZone.reset.toast.success.description"),
1016
+ type: "success"
1017
+ }), m.navigate("/");
1018
+ },
1019
+ onCancel: () => {
1020
+ }
1021
+ });
1022
+ };
1023
+ return /* @__PURE__ */ n("div", { className: "space-y-4", children: [
1024
+ /* @__PURE__ */ n("div", { className: "flex items-center justify-between", children: [
1025
+ /* @__PURE__ */ n("div", { className: "space-y-0.5", children: [
1026
+ /* @__PURE__ */ e(
1027
+ "span",
1028
+ {
1029
+ className: "text-sm font-medium leading-none",
1030
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1031
+ children: t("advanced.errorReporting.label")
1032
+ }
1033
+ ),
1034
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: t(f ? "advanced.errorReporting.statusConfigured" : "advanced.errorReporting.statusNotConfigured") })
1035
+ ] }),
1036
+ f && /* @__PURE__ */ e(
1037
+ z,
1038
+ {
1039
+ id: "error-reporting",
1040
+ checked: s.errorReporting.enabled,
1041
+ onCheckedChange: r
1042
+ }
1043
+ )
1044
+ ] }),
1045
+ /* @__PURE__ */ n("div", { className: "flex items-center justify-between", children: [
1046
+ /* @__PURE__ */ n("div", { className: "space-y-0.5", children: [
1047
+ /* @__PURE__ */ e(
1048
+ "label",
1049
+ {
1050
+ htmlFor: "developer-features",
1051
+ className: "text-sm font-medium leading-none",
1052
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1053
+ children: t("advanced.developerFeatures.label")
1054
+ }
1055
+ ),
1056
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: t("advanced.developerFeatures.description") })
1057
+ ] }),
1058
+ /* @__PURE__ */ e(
1059
+ z,
1060
+ {
1061
+ id: "developer-features",
1062
+ checked: s.developerFeatures.enabled,
1063
+ onCheckedChange: (u) => l("developerFeatures", { enabled: u })
1064
+ }
1065
+ )
1066
+ ] }),
1067
+ /* @__PURE__ */ e("div", { className: "border-t pt-6 mt-6", children: /* @__PURE__ */ n("div", { className: "space-y-4", children: [
1068
+ /* @__PURE__ */ n("div", { className: "space-y-0.5", children: [
1069
+ /* @__PURE__ */ e(
1070
+ "h3",
1071
+ {
1072
+ className: "text-sm font-semibold leading-none text-destructive",
1073
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1074
+ children: t("advanced.dangerZone.title")
1075
+ }
1076
+ ),
1077
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: t("advanced.dangerZone.description") })
1078
+ ] }),
1079
+ /* @__PURE__ */ n("div", { className: "space-y-2", children: [
1080
+ /* @__PURE__ */ n("div", { className: "space-y-0.5", children: [
1081
+ /* @__PURE__ */ e(
1082
+ "label",
1083
+ {
1084
+ className: "text-sm font-medium leading-none",
1085
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1086
+ children: t("advanced.dangerZone.reset.title")
1087
+ }
1088
+ ),
1089
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: t("advanced.dangerZone.reset.warning") })
1090
+ ] }),
1091
+ /* @__PURE__ */ e(
1092
+ p,
1093
+ {
1094
+ variant: "destructive",
1095
+ onClick: c,
1096
+ className: "w-full sm:w-auto",
1097
+ children: t("advanced.dangerZone.reset.button")
1098
+ }
1099
+ )
1100
+ ] })
1101
+ ] }) })
1102
+ ] });
1103
+ }, Xe = () => {
1104
+ const { t } = C("settings");
1105
+ return /* @__PURE__ */ n("div", { children: [
1106
+ /* @__PURE__ */ e(
1107
+ "h4",
1108
+ {
1109
+ className: "text-sm font-medium mb-2",
1110
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1111
+ children: t("develop.testing.toastNotifications.title")
1112
+ }
1113
+ ),
1114
+ /* @__PURE__ */ n("div", { className: "flex flex-wrap gap-2", children: [
1115
+ /* @__PURE__ */ e(
1116
+ p,
1117
+ {
1118
+ onClick: () => {
1119
+ m.toast({
1120
+ title: t("develop.testing.toastNotifications.messages.success.title"),
1121
+ description: t("develop.testing.toastNotifications.messages.success.description"),
1122
+ type: "success"
1123
+ });
1124
+ },
1125
+ variant: "outline",
1126
+ children: t("develop.testing.toastNotifications.buttons.success")
1127
+ }
1128
+ ),
1129
+ /* @__PURE__ */ e(
1130
+ p,
1131
+ {
1132
+ onClick: () => {
1133
+ m.toast({
1134
+ title: t("develop.testing.toastNotifications.messages.error.title"),
1135
+ description: t("develop.testing.toastNotifications.messages.error.description"),
1136
+ type: "error"
1137
+ });
1138
+ },
1139
+ variant: "outline",
1140
+ children: t("develop.testing.toastNotifications.buttons.error")
1141
+ }
1142
+ ),
1143
+ /* @__PURE__ */ e(
1144
+ p,
1145
+ {
1146
+ onClick: () => {
1147
+ m.toast({
1148
+ title: t("develop.testing.toastNotifications.messages.warning.title"),
1149
+ description: t("develop.testing.toastNotifications.messages.warning.description"),
1150
+ type: "warning"
1151
+ });
1152
+ },
1153
+ variant: "outline",
1154
+ children: t("develop.testing.toastNotifications.buttons.warning")
1155
+ }
1156
+ ),
1157
+ /* @__PURE__ */ e(
1158
+ p,
1159
+ {
1160
+ onClick: () => {
1161
+ m.toast({
1162
+ title: t("develop.testing.toastNotifications.messages.info.title"),
1163
+ description: t("develop.testing.toastNotifications.messages.info.description"),
1164
+ type: "info"
1165
+ });
1166
+ },
1167
+ variant: "outline",
1168
+ children: t("develop.testing.toastNotifications.buttons.info")
1169
+ }
1170
+ ),
1171
+ /* @__PURE__ */ e(
1172
+ p,
1173
+ {
1174
+ onClick: () => {
1175
+ m.toast({
1176
+ title: t("develop.testing.toastNotifications.messages.default.title"),
1177
+ description: t("develop.testing.toastNotifications.messages.default.description"),
1178
+ type: "default"
1179
+ });
1180
+ },
1181
+ variant: "outline",
1182
+ children: t("develop.testing.toastNotifications.buttons.default")
1183
+ }
1184
+ ),
1185
+ /* @__PURE__ */ e(
1186
+ p,
1187
+ {
1188
+ onClick: () => {
1189
+ const a = m.toast({
1190
+ title: t("develop.testing.toastNotifications.messages.processing.title"),
1191
+ description: t("develop.testing.toastNotifications.messages.processing.description"),
1192
+ type: "loading"
1193
+ });
1194
+ typeof a == "string" && setTimeout(() => {
1195
+ m.toast({
1196
+ id: a,
1197
+ type: "success",
1198
+ title: t("develop.testing.toastNotifications.messages.uploadComplete.title"),
1199
+ description: t(
1200
+ "develop.testing.toastNotifications.messages.uploadComplete.description"
1201
+ )
1202
+ });
1203
+ }, 2e3);
1204
+ },
1205
+ variant: "outline",
1206
+ children: t("develop.testing.toastNotifications.buttons.loadingSuccess")
1207
+ }
1208
+ ),
1209
+ /* @__PURE__ */ e(
1210
+ p,
1211
+ {
1212
+ onClick: () => {
1213
+ m.toast({
1214
+ title: t("develop.testing.toastNotifications.messages.withAction.title"),
1215
+ description: t("develop.testing.toastNotifications.messages.withAction.description"),
1216
+ type: "success",
1217
+ action: {
1218
+ label: t("develop.testing.toastNotifications.messages.actionLabels.undo"),
1219
+ onClick: () => {
1220
+ m.toast({
1221
+ title: t("develop.testing.toastNotifications.messages.undone.title"),
1222
+ description: t(
1223
+ "develop.testing.toastNotifications.messages.undone.description"
1224
+ ),
1225
+ type: "info"
1226
+ });
1227
+ }
1228
+ }
1229
+ });
1230
+ },
1231
+ variant: "outline",
1232
+ children: t("develop.testing.toastNotifications.buttons.withAction")
1233
+ }
1234
+ ),
1235
+ /* @__PURE__ */ e(
1236
+ p,
1237
+ {
1238
+ onClick: () => {
1239
+ m.toast({
1240
+ title: t("develop.testing.toastNotifications.messages.withAction.title"),
1241
+ description: t("develop.testing.toastNotifications.messages.withAction.description"),
1242
+ type: "success",
1243
+ action: {
1244
+ label: t("develop.testing.toastNotifications.messages.actionLabels.undo"),
1245
+ onClick: () => {
1246
+ m.toast({
1247
+ title: t("develop.testing.toastNotifications.messages.undone.title"),
1248
+ description: t(
1249
+ "develop.testing.toastNotifications.messages.undone.description"
1250
+ ),
1251
+ type: "info"
1252
+ });
1253
+ }
1254
+ },
1255
+ cancel: {
1256
+ label: t("develop.testing.toastNotifications.messages.actionLabels.cancel"),
1257
+ onClick: () => {
1258
+ m.toast({
1259
+ title: t("develop.testing.toastNotifications.messages.cancelled.title"),
1260
+ description: t(
1261
+ "develop.testing.toastNotifications.messages.cancelled.description"
1262
+ ),
1263
+ type: "info"
1264
+ });
1265
+ }
1266
+ }
1267
+ });
1268
+ },
1269
+ variant: "outline",
1270
+ children: t("develop.testing.toastNotifications.buttons.withActionAndCancel")
1271
+ }
1272
+ ),
1273
+ /* @__PURE__ */ e(
1274
+ p,
1275
+ {
1276
+ onClick: () => {
1277
+ m.toast({
1278
+ title: t("develop.testing.toastNotifications.messages.persistent.title"),
1279
+ description: t("develop.testing.toastNotifications.messages.persistent.description"),
1280
+ type: "info",
1281
+ duration: 1e4
1282
+ });
1283
+ },
1284
+ variant: "outline",
1285
+ children: t("develop.testing.toastNotifications.buttons.longDuration")
1286
+ }
1287
+ )
1288
+ ] })
1289
+ ] });
1290
+ }, et = () => {
1291
+ const { t } = C("settings");
1292
+ return /* @__PURE__ */ n("div", { children: [
1293
+ /* @__PURE__ */ e(
1294
+ "h4",
1295
+ {
1296
+ className: "text-sm font-medium mb-2",
1297
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1298
+ children: t("develop.testing.dialogTesting.title")
1299
+ }
1300
+ ),
1301
+ /* @__PURE__ */ n("div", { className: "flex flex-wrap gap-2", children: [
1302
+ /* @__PURE__ */ e(
1303
+ p,
1304
+ {
1305
+ onClick: () => {
1306
+ m.dialog({
1307
+ title: t("develop.testing.dialogTesting.dialogs.ok.title"),
1308
+ description: t("develop.testing.dialogTesting.dialogs.ok.description"),
1309
+ mode: "ok",
1310
+ onOk: () => {
1311
+ m.toast({
1312
+ title: t("develop.testing.dialogTesting.toasts.okClicked"),
1313
+ type: "success"
1314
+ });
1315
+ }
1316
+ });
1317
+ },
1318
+ variant: "outline",
1319
+ children: t("develop.testing.dialogTesting.buttons.okDialog")
1320
+ }
1321
+ ),
1322
+ /* @__PURE__ */ e(
1323
+ p,
1324
+ {
1325
+ onClick: () => {
1326
+ m.dialog({
1327
+ title: t("develop.testing.dialogTesting.dialogs.okCancel.title"),
1328
+ description: t("develop.testing.dialogTesting.dialogs.okCancel.description"),
1329
+ mode: "okCancel",
1330
+ size: "sm",
1331
+ onOk: () => {
1332
+ m.toast({
1333
+ title: t("develop.testing.dialogTesting.toasts.okClicked"),
1334
+ type: "success"
1335
+ });
1336
+ },
1337
+ onCancel: () => {
1338
+ m.toast({
1339
+ title: t("develop.testing.dialogTesting.toasts.cancelClicked"),
1340
+ type: "info"
1341
+ });
1342
+ }
1343
+ });
1344
+ },
1345
+ variant: "outline",
1346
+ children: t("develop.testing.dialogTesting.buttons.okCancelDialog")
1347
+ }
1348
+ ),
1349
+ /* @__PURE__ */ e(
1350
+ p,
1351
+ {
1352
+ onClick: () => {
1353
+ m.dialog({
1354
+ title: t("develop.testing.dialogTesting.dialogs.delete.title"),
1355
+ description: t("develop.testing.dialogTesting.dialogs.delete.description"),
1356
+ mode: "delete",
1357
+ okLabel: t("develop.testing.dialogTesting.dialogs.delete.okLabel"),
1358
+ cancelLabel: t("develop.testing.dialogTesting.dialogs.delete.cancelLabel"),
1359
+ size: "sm",
1360
+ onOk: () => {
1361
+ m.toast({
1362
+ title: t("develop.testing.dialogTesting.toasts.itemDeleted"),
1363
+ type: "success"
1364
+ });
1365
+ },
1366
+ onCancel: () => {
1367
+ m.toast({
1368
+ title: t("develop.testing.dialogTesting.toasts.deletionCancelled"),
1369
+ type: "info"
1370
+ });
1371
+ }
1372
+ });
1373
+ },
1374
+ variant: "outline",
1375
+ children: t("develop.testing.dialogTesting.buttons.deleteDialog")
1376
+ }
1377
+ ),
1378
+ /* @__PURE__ */ e(
1379
+ p,
1380
+ {
1381
+ onClick: () => {
1382
+ m.dialog({
1383
+ title: t("develop.testing.dialogTesting.dialogs.confirm.title"),
1384
+ description: t("develop.testing.dialogTesting.dialogs.confirm.description"),
1385
+ mode: "confirm",
1386
+ okLabel: t("develop.testing.dialogTesting.dialogs.confirm.okLabel"),
1387
+ cancelLabel: t("develop.testing.dialogTesting.dialogs.confirm.cancelLabel"),
1388
+ size: "sm",
1389
+ onOk: () => {
1390
+ m.toast({
1391
+ title: t("develop.testing.dialogTesting.toasts.actionConfirmed"),
1392
+ type: "success"
1393
+ });
1394
+ },
1395
+ onCancel: () => {
1396
+ m.toast({
1397
+ title: t("develop.testing.dialogTesting.toasts.actionCancelled"),
1398
+ type: "info"
1399
+ });
1400
+ }
1401
+ });
1402
+ },
1403
+ variant: "outline",
1404
+ children: t("develop.testing.dialogTesting.buttons.confirmDialog")
1405
+ }
1406
+ ),
1407
+ /* @__PURE__ */ e(
1408
+ p,
1409
+ {
1410
+ onClick: () => {
1411
+ m.dialog({
1412
+ title: t("develop.testing.dialogTesting.dialogs.onlyCancel.title"),
1413
+ description: t("develop.testing.dialogTesting.dialogs.onlyCancel.description"),
1414
+ mode: "onlyCancel",
1415
+ cancelLabel: t("develop.testing.dialogTesting.dialogs.onlyCancel.cancelLabel"),
1416
+ size: "sm",
1417
+ onCancel: () => {
1418
+ m.toast({
1419
+ title: t("develop.testing.dialogTesting.toasts.dialogClosed"),
1420
+ type: "info"
1421
+ });
1422
+ }
1423
+ });
1424
+ },
1425
+ variant: "outline",
1426
+ children: t("develop.testing.dialogTesting.buttons.onlyCancelDialog")
1427
+ }
1428
+ )
1429
+ ] })
1430
+ ] });
1431
+ }, tt = () => {
1432
+ const { t } = C("settings");
1433
+ return /* @__PURE__ */ n("div", { children: [
1434
+ /* @__PURE__ */ e(
1435
+ "h4",
1436
+ {
1437
+ className: "text-sm font-medium mb-2",
1438
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1439
+ children: t("develop.testing.modalTesting.title")
1440
+ }
1441
+ ),
1442
+ /* @__PURE__ */ e("div", { className: "flex flex-wrap gap-2", children: /* @__PURE__ */ e(
1443
+ p,
1444
+ {
1445
+ onClick: () => m.openModal(L.settings),
1446
+ variant: "outline",
1447
+ children: t("develop.testing.modalTesting.buttons.openModal")
1448
+ }
1449
+ ) }),
1450
+ /* @__PURE__ */ e("p", { className: "text-xs text-muted-foreground mt-2", children: t("develop.testing.modalTesting.description") })
1451
+ ] });
1452
+ }, nt = () => {
1453
+ const { t } = C("settings"), a = (s) => {
1454
+ m.openDrawer({ url: L.settings, ...s });
1455
+ };
1456
+ return /* @__PURE__ */ n("div", { children: [
1457
+ /* @__PURE__ */ e(
1458
+ "h4",
1459
+ {
1460
+ className: "text-sm font-medium mb-2",
1461
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1462
+ children: t("develop.testing.drawerTesting.title")
1463
+ }
1464
+ ),
1465
+ /* @__PURE__ */ n("div", { className: "flex flex-wrap gap-2", children: [
1466
+ /* @__PURE__ */ e(
1467
+ p,
1468
+ {
1469
+ onClick: () => a({ position: "right" }),
1470
+ variant: "outline",
1471
+ children: t("develop.testing.drawerTesting.buttons.drawerRight")
1472
+ }
1473
+ ),
1474
+ /* @__PURE__ */ e(
1475
+ p,
1476
+ {
1477
+ onClick: () => a({ position: "left" }),
1478
+ variant: "outline",
1479
+ children: t("develop.testing.drawerTesting.buttons.drawerLeft")
1480
+ }
1481
+ ),
1482
+ /* @__PURE__ */ e(
1483
+ p,
1484
+ {
1485
+ onClick: () => a({ position: "top" }),
1486
+ variant: "outline",
1487
+ children: t("develop.testing.drawerTesting.buttons.drawerTop")
1488
+ }
1489
+ ),
1490
+ /* @__PURE__ */ e(
1491
+ p,
1492
+ {
1493
+ onClick: () => a({ position: "bottom" }),
1494
+ variant: "outline",
1495
+ children: t("develop.testing.drawerTesting.buttons.drawerBottom")
1496
+ }
1497
+ ),
1498
+ /* @__PURE__ */ e(
1499
+ p,
1500
+ {
1501
+ onClick: () => a({ position: "right", size: "400px" }),
1502
+ variant: "outline",
1503
+ children: t("develop.testing.drawerTesting.buttons.drawerRightNarrow")
1504
+ }
1505
+ ),
1506
+ /* @__PURE__ */ e(
1507
+ p,
1508
+ {
1509
+ onClick: () => a({ position: "bottom", size: "60vh" }),
1510
+ variant: "outline",
1511
+ children: t("develop.testing.drawerTesting.buttons.drawerBottomHalf")
1512
+ }
1513
+ ),
1514
+ /* @__PURE__ */ e(
1515
+ p,
1516
+ {
1517
+ onClick: () => m.closeDrawer(),
1518
+ variant: "outline",
1519
+ children: t("develop.testing.drawerTesting.buttons.closeDrawer")
1520
+ }
1521
+ )
1522
+ ] })
1523
+ ] });
1524
+ }, at = () => {
1525
+ const { t } = C("settings"), { settings: a, updateSetting: s } = S(), { config: l } = I(), i = a.language?.code || "en", f = a.layout ?? l?.layout ?? "sidebar", r = l?.navigation?.length ? ge(l?.navigation ?? []).filter(
1526
+ (c, u, v) => u === v.findIndex((x) => x.path === c.path)
1527
+ ) : [];
1528
+ return /* @__PURE__ */ n("div", { className: "space-y-6", children: [
1529
+ /* @__PURE__ */ n("div", { children: [
1530
+ /* @__PURE__ */ e(
1531
+ "h3",
1532
+ {
1533
+ className: "text-lg font-semibold mb-2",
1534
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1535
+ children: t("develop.logging.title")
1536
+ }
1537
+ ),
1538
+ /* @__PURE__ */ n("div", { className: "space-y-4", children: [
1539
+ /* @__PURE__ */ n("div", { className: "flex items-center justify-between", children: [
1540
+ /* @__PURE__ */ n("div", { className: "space-y-0.5", children: [
1541
+ /* @__PURE__ */ e(
1542
+ "label",
1543
+ {
1544
+ htmlFor: "log-shellsdk",
1545
+ className: "text-sm font-medium leading-none",
1546
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1547
+ children: t("develop.logging.shellsdk.label")
1548
+ }
1549
+ ),
1550
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: t("develop.logging.shellsdk.description") })
1551
+ ] }),
1552
+ /* @__PURE__ */ e(
1553
+ z,
1554
+ {
1555
+ id: "log-shellsdk",
1556
+ checked: a.logging?.namespaces?.shellsdk || !1,
1557
+ onCheckedChange: (c) => s("logging", {
1558
+ namespaces: {
1559
+ ...a.logging?.namespaces,
1560
+ shellsdk: c
1561
+ }
1562
+ })
1563
+ }
1564
+ )
1565
+ ] }),
1566
+ /* @__PURE__ */ n("div", { className: "flex items-center justify-between", children: [
1567
+ /* @__PURE__ */ n("div", { className: "space-y-0.5", children: [
1568
+ /* @__PURE__ */ e(
1569
+ "label",
1570
+ {
1571
+ htmlFor: "log-shellcore",
1572
+ className: "text-sm font-medium leading-none",
1573
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1574
+ children: t("develop.logging.shellcore.label")
1575
+ }
1576
+ ),
1577
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: t("develop.logging.shellcore.description") })
1578
+ ] }),
1579
+ /* @__PURE__ */ e(
1580
+ z,
1581
+ {
1582
+ id: "log-shellcore",
1583
+ checked: a.logging?.namespaces?.shellcore || !1,
1584
+ onCheckedChange: (c) => s("logging", {
1585
+ namespaces: {
1586
+ ...a.logging?.namespaces,
1587
+ shellcore: c
1588
+ }
1589
+ })
1590
+ }
1591
+ )
1592
+ ] })
1593
+ ] })
1594
+ ] }),
1595
+ /* @__PURE__ */ n("div", { children: [
1596
+ /* @__PURE__ */ e(
1597
+ "h3",
1598
+ {
1599
+ className: "text-lg font-semibold mb-2",
1600
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1601
+ children: t("develop.navigation.title")
1602
+ }
1603
+ ),
1604
+ r.length ? /* @__PURE__ */ n("div", { className: "space-y-2", children: [
1605
+ /* @__PURE__ */ e(
1606
+ "label",
1607
+ {
1608
+ htmlFor: "develop-nav-select",
1609
+ className: "text-sm font-medium leading-none",
1610
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1611
+ children: t("develop.navigation.selectLabel")
1612
+ }
1613
+ ),
1614
+ /* @__PURE__ */ e("div", { className: "mt-2", children: /* @__PURE__ */ n(
1615
+ $,
1616
+ {
1617
+ id: "develop-nav-select",
1618
+ defaultValue: "",
1619
+ onChange: (c) => {
1620
+ const u = c.target.value;
1621
+ u && m.navigate(u.startsWith("/") ? u : `/${u}`);
1622
+ },
1623
+ children: [
1624
+ /* @__PURE__ */ e("option", { value: "", children: t("develop.navigation.placeholder") }),
1625
+ r.map((c) => /* @__PURE__ */ e(
1626
+ "option",
1627
+ {
1628
+ value: `/${c.path}`,
1629
+ children: ue(c.label, i) || c.path
1630
+ },
1631
+ c.path
1632
+ ))
1633
+ ]
1634
+ }
1635
+ ) })
1636
+ ] }) : /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: t("develop.navigation.empty") })
1637
+ ] }),
1638
+ /* @__PURE__ */ n("div", { children: [
1639
+ /* @__PURE__ */ e(
1640
+ "h3",
1641
+ {
1642
+ className: "text-lg font-semibold mb-2",
1643
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1644
+ children: t("develop.layout.title")
1645
+ }
1646
+ ),
1647
+ /* @__PURE__ */ e("div", { className: "flex flex-wrap gap-2", children: ["sidebar", "windows"].map((c) => /* @__PURE__ */ e(
1648
+ p,
1649
+ {
1650
+ variant: f === c ? "default" : "outline",
1651
+ size: "sm",
1652
+ onClick: () => s("layout", c),
1653
+ children: t(`develop.layout.${c}`)
1654
+ },
1655
+ c
1656
+ )) })
1657
+ ] }),
1658
+ /* @__PURE__ */ n("div", { children: [
1659
+ /* @__PURE__ */ e(
1660
+ "h3",
1661
+ {
1662
+ className: "text-lg font-semibold mb-2",
1663
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1664
+ children: t("develop.testing.title")
1665
+ }
1666
+ ),
1667
+ /* @__PURE__ */ n("div", { className: "space-y-4", children: [
1668
+ /* @__PURE__ */ e(Xe, {}),
1669
+ /* @__PURE__ */ e(et, {}),
1670
+ /* @__PURE__ */ e(tt, {}),
1671
+ /* @__PURE__ */ e(nt, {})
1672
+ ] })
1673
+ ] })
1674
+ ] });
1675
+ }, it = () => {
1676
+ const { t } = C("settings"), { config: a } = I(), { settings: s, updateSetting: l } = S(), i = a?.cookieConsent?.cookies ?? [], f = i.length > 0, r = !!s?.cookieConsent?.consentedCookieHosts?.length, c = s?.cookieConsent?.acceptedHosts ?? [], u = i.map((y) => y.host), v = i.filter((y) => y.category === "strict_necessary").map((y) => y.host), x = r && c.length === u.length && u.every((y) => c.includes(y)), g = r && c.length === v.length && v.every((y) => c.includes(y)) && !c.some((y) => !v.includes(y)), d = r && !x && !g, h = () => {
1677
+ l("cookieConsent", {
1678
+ acceptedHosts: [],
1679
+ consentedCookieHosts: []
1680
+ });
1681
+ };
1682
+ return /* @__PURE__ */ e("div", { className: "space-y-6", children: f ? /* @__PURE__ */ n("div", { className: "space-y-2", children: [
1683
+ /* @__PURE__ */ e(
1684
+ "label",
1685
+ {
1686
+ className: "text-sm font-medium leading-none",
1687
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1688
+ children: t("dataPrivacy.cookieConsent.title")
1689
+ }
1690
+ ),
1691
+ /* @__PURE__ */ n("div", { className: "mt-2 space-y-3", children: [
1692
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: t(r ? x ? "dataPrivacy.cookieConsent.statusAcceptedAll" : g ? "dataPrivacy.cookieConsent.statusRejectedAll" : "dataPrivacy.cookieConsent.statusCustom" : "dataPrivacy.cookieConsent.descriptionNotConsented") }),
1693
+ r && /* @__PURE__ */ n("div", { className: "flex items-center gap-2 text-sm mt-2", children: [
1694
+ /* @__PURE__ */ e(
1695
+ "span",
1696
+ {
1697
+ className: N(
1698
+ "px-2 py-1 rounded-md text-xs font-medium transition-colors",
1699
+ x ? "bg-primary/10 text-primary border border-primary/20" : "text-muted-foreground"
1700
+ ),
1701
+ children: t("dataPrivacy.cookieConsent.labelAcceptedAll")
1702
+ }
1703
+ ),
1704
+ /* @__PURE__ */ e("span", { className: "text-muted-foreground/30", children: "|" }),
1705
+ /* @__PURE__ */ e(
1706
+ "span",
1707
+ {
1708
+ className: N(
1709
+ "px-2 py-1 rounded-md text-xs font-medium transition-colors",
1710
+ d ? "bg-muted text-muted-foreground border border-border" : "text-muted-foreground"
1711
+ ),
1712
+ children: t("dataPrivacy.cookieConsent.labelCustom")
1713
+ }
1714
+ ),
1715
+ /* @__PURE__ */ e("span", { className: "text-muted-foreground/30", children: "|" }),
1716
+ /* @__PURE__ */ e(
1717
+ "span",
1718
+ {
1719
+ className: N(
1720
+ "px-2 py-1 rounded-md text-xs font-medium transition-colors",
1721
+ g ? "bg-muted text-muted-foreground border border-border" : "text-muted-foreground"
1722
+ ),
1723
+ children: t("dataPrivacy.cookieConsent.labelRejectedAll")
1724
+ }
1725
+ )
1726
+ ] }),
1727
+ /* @__PURE__ */ n("div", { className: "flex flex-wrap gap-2", children: [
1728
+ /* @__PURE__ */ e(
1729
+ p,
1730
+ {
1731
+ variant: "outline",
1732
+ onClick: () => m.openDrawer({ url: L.cookiePreferences, size: "420px" }),
1733
+ className: "w-full sm:w-auto",
1734
+ children: t("dataPrivacy.cookieConsent.manageButton")
1735
+ }
1736
+ ),
1737
+ /* @__PURE__ */ e(
1738
+ p,
1739
+ {
1740
+ variant: "ghost",
1741
+ onClick: h,
1742
+ disabled: !r,
1743
+ className: "w-full sm:w-auto",
1744
+ children: t("dataPrivacy.cookieConsent.button")
1745
+ }
1746
+ )
1747
+ ] })
1748
+ ] })
1749
+ ] }) : /* @__PURE__ */ n("div", { className: "rounded-lg border bg-card p-4 space-y-3", children: [
1750
+ /* @__PURE__ */ n("div", { className: "space-y-1", children: [
1751
+ /* @__PURE__ */ e(
1752
+ "h3",
1753
+ {
1754
+ className: "text-sm font-medium leading-none",
1755
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1756
+ children: t("dataPrivacy.noCookiesConfigured.title")
1757
+ }
1758
+ ),
1759
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: t("dataPrivacy.noCookiesConfigured.description") })
1760
+ ] }),
1761
+ /* @__PURE__ */ n("div", { className: "flex items-start gap-2 text-sm", children: [
1762
+ /* @__PURE__ */ e("span", { className: "text-green-600 dark:text-green-400 mt-0.5", children: "✓" }),
1763
+ /* @__PURE__ */ e("span", { className: "text-muted-foreground", children: t("dataPrivacy.noCookiesConfigured.info") })
1764
+ ] })
1765
+ ] }) });
1766
+ }, st = () => {
1767
+ const { t } = C("settings"), { settings: a, updateSetting: s } = S(), [l, i] = w(!1), [f, r] = w(!1), [c, u] = w(!0), [v, x] = w(!0), g = a?.serviceWorker?.enabled ?? !0;
1768
+ E(() => {
1769
+ if (!g) {
1770
+ i(!1), r(!1), u(!1), x(!0);
1771
+ return;
1772
+ }
1773
+ const o = async () => {
1774
+ if (!(a?.serviceWorker?.enabled ?? !0)) {
1775
+ u(!1);
1776
+ return;
1777
+ }
1778
+ u(!0);
1779
+ const P = await V();
1780
+ if (!(a?.serviceWorker?.enabled ?? !0)) {
1781
+ u(!1);
1782
+ return;
1783
+ }
1784
+ if (x(P), P) {
1785
+ const F = await M();
1786
+ (a?.serviceWorker?.enabled ?? !0) && (i(F.registered), r(F.updateAvailable));
1787
+ } else
1788
+ (a?.serviceWorker?.enabled ?? !0) && (i(!1), r(!1));
1789
+ u(!1);
1790
+ }, b = async () => {
1791
+ if (!(a?.serviceWorker?.enabled ?? !0))
1792
+ return;
1793
+ const P = await V();
1794
+ if (a?.serviceWorker?.enabled ?? !0)
1795
+ if (x(P), P) {
1796
+ const F = await M();
1797
+ (a?.serviceWorker?.enabled ?? !0) && (i(F.registered), r(F.updateAvailable));
1798
+ } else
1799
+ (a?.serviceWorker?.enabled ?? !0) && (i(!1), r(!1));
1800
+ };
1801
+ o();
1802
+ const k = q((T) => {
1803
+ (a?.serviceWorker?.enabled ?? !0) && (i(T.registered), r(T.updateAvailable), u(!1));
1804
+ }), A = setInterval(b, 3e4);
1805
+ return () => {
1806
+ k(), clearInterval(A);
1807
+ };
1808
+ }, [g]);
1809
+ const d = async (o) => {
1810
+ o || (i(!1), r(!1), x(!0), u(!1)), s("serviceWorker", { enabled: o }), o && setTimeout(async () => {
1811
+ const b = a?.serviceWorker?.enabled ?? !0;
1812
+ if (o && b) {
1813
+ const k = await pe();
1814
+ i(k);
1815
+ }
1816
+ }, 1e3);
1817
+ }, h = async () => {
1818
+ try {
1819
+ await Q();
1820
+ } catch {
1821
+ m.toast({
1822
+ title: t("caching.updateError.title"),
1823
+ description: t("caching.updateError.description"),
1824
+ type: "error"
1825
+ });
1826
+ }
1827
+ }, y = async () => {
1828
+ try {
1829
+ if ("caches" in window) {
1830
+ const o = await caches.keys();
1831
+ await Promise.all(o.map((b) => caches.delete(b)));
1832
+ }
1833
+ m.toast({
1834
+ title: t("caching.resetSuccess.title"),
1835
+ description: t("caching.resetSuccess.description"),
1836
+ type: "success"
1837
+ }), setTimeout(() => {
1838
+ m.sendMessageToParent({
1839
+ type: "SHELLUI_REFRESH_PAGE",
1840
+ payload: {}
1841
+ }) || window.location.reload();
1842
+ }, 1e3);
1843
+ } catch {
1844
+ m.toast({
1845
+ title: t("caching.resetError.title"),
1846
+ description: t("caching.resetError.description"),
1847
+ type: "error"
1848
+ });
1849
+ }
1850
+ };
1851
+ return /* @__PURE__ */ n("div", { className: "space-y-6", children: [
1852
+ c ? /* @__PURE__ */ e("div", { className: "text-sm text-muted-foreground", children: t("caching.loading") }) : null,
1853
+ !c && /* @__PURE__ */ n("div", { className: "space-y-6", children: [
1854
+ /* @__PURE__ */ e("div", { className: "space-y-2", children: /* @__PURE__ */ n("div", { className: "flex items-center justify-between", children: [
1855
+ /* @__PURE__ */ n("div", { className: "space-y-0.5", children: [
1856
+ /* @__PURE__ */ e(
1857
+ "label",
1858
+ {
1859
+ className: "text-sm font-medium leading-none",
1860
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1861
+ children: t("caching.enabled.title")
1862
+ }
1863
+ ),
1864
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: t(g ? "caching.enabled.descriptionEnabled" : "caching.enabled.descriptionDisabled") })
1865
+ ] }),
1866
+ /* @__PURE__ */ e(
1867
+ z,
1868
+ {
1869
+ checked: g,
1870
+ onCheckedChange: d
1871
+ }
1872
+ )
1873
+ ] }) }),
1874
+ /* @__PURE__ */ n("div", { className: "space-y-2", children: [
1875
+ /* @__PURE__ */ e(
1876
+ "label",
1877
+ {
1878
+ className: "text-sm font-medium leading-none",
1879
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1880
+ children: t("caching.status.title")
1881
+ }
1882
+ ),
1883
+ /* @__PURE__ */ e("div", { className: "flex items-center gap-2 text-sm mt-2", children: g ? v ? /* @__PURE__ */ n(W, { children: [
1884
+ /* @__PURE__ */ n(
1885
+ "span",
1886
+ {
1887
+ className: l ? "text-green-600 dark:text-green-400" : "text-orange-600 dark:text-orange-400",
1888
+ children: [
1889
+ l ? "●" : "○",
1890
+ " ",
1891
+ t(l ? "caching.status.registered" : "caching.status.notRunning")
1892
+ ]
1893
+ }
1894
+ ),
1895
+ f && /* @__PURE__ */ n(W, { children: [
1896
+ /* @__PURE__ */ e("span", { className: "text-muted-foreground/50", children: "|" }),
1897
+ /* @__PURE__ */ n("span", { className: "text-blue-600 dark:text-blue-400", children: [
1898
+ "● ",
1899
+ t("caching.status.updateAvailable")
1900
+ ] })
1901
+ ] })
1902
+ ] }) : /* @__PURE__ */ n("span", { className: "text-red-600 dark:text-red-400", children: [
1903
+ "✗ ",
1904
+ t("caching.status.fileNotFound")
1905
+ ] }) : /* @__PURE__ */ n("span", { className: "text-muted-foreground", children: [
1906
+ "○ ",
1907
+ t("caching.status.disabled")
1908
+ ] }) })
1909
+ ] }),
1910
+ g && /* @__PURE__ */ n(W, { children: [
1911
+ !v && /* @__PURE__ */ e("div", { className: "rounded-lg border border-red-200 dark:border-red-800 bg-red-50 dark:bg-red-950/30 p-4 space-y-3", children: /* @__PURE__ */ n("div", { className: "space-y-1", children: [
1912
+ /* @__PURE__ */ e(
1913
+ "h3",
1914
+ {
1915
+ className: "text-sm font-medium leading-none text-red-600 dark:text-red-400",
1916
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1917
+ children: t("caching.status.fileNotFound")
1918
+ }
1919
+ ),
1920
+ /* @__PURE__ */ e("p", { className: "text-sm text-red-700 dark:text-red-300", children: t("caching.status.fileNotFoundDescription") })
1921
+ ] }) }),
1922
+ f && /* @__PURE__ */ n("div", { className: "space-y-2", children: [
1923
+ /* @__PURE__ */ n("div", { className: "space-y-0.5", children: [
1924
+ /* @__PURE__ */ e(
1925
+ "label",
1926
+ {
1927
+ className: "text-sm font-medium leading-none",
1928
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1929
+ children: t("caching.update.title")
1930
+ }
1931
+ ),
1932
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: t("caching.update.description") })
1933
+ ] }),
1934
+ /* @__PURE__ */ e("div", { className: "mt-2", children: /* @__PURE__ */ e(
1935
+ p,
1936
+ {
1937
+ variant: "outline",
1938
+ onClick: h,
1939
+ className: "w-full sm:w-auto",
1940
+ children: t("caching.update.button")
1941
+ }
1942
+ ) })
1943
+ ] }),
1944
+ /* @__PURE__ */ n("div", { className: "space-y-2", children: [
1945
+ /* @__PURE__ */ n("div", { className: "space-y-0.5", children: [
1946
+ /* @__PURE__ */ e(
1947
+ "label",
1948
+ {
1949
+ className: "text-sm font-medium leading-none",
1950
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
1951
+ children: t("caching.reset.title")
1952
+ }
1953
+ ),
1954
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: t("caching.reset.description") })
1955
+ ] }),
1956
+ /* @__PURE__ */ e("div", { className: "mt-2", children: /* @__PURE__ */ e(
1957
+ p,
1958
+ {
1959
+ variant: "outline",
1960
+ onClick: y,
1961
+ className: "w-full sm:w-auto",
1962
+ children: t("caching.reset.button")
1963
+ }
1964
+ ) })
1965
+ ] })
1966
+ ] })
1967
+ ] })
1968
+ ] });
1969
+ }, ot = (t) => [
1970
+ {
1971
+ name: t("routes.appearance"),
1972
+ icon: Fe,
1973
+ path: "appearance",
1974
+ element: /* @__PURE__ */ e(_e, {})
1975
+ },
1976
+ {
1977
+ name: t("routes.languageAndRegion"),
1978
+ icon: Be,
1979
+ path: "language-and-region",
1980
+ element: /* @__PURE__ */ e(qe, {})
1981
+ },
1982
+ {
1983
+ name: t("routes.updateApp"),
1984
+ icon: Me,
1985
+ path: "update-app",
1986
+ element: /* @__PURE__ */ e(Ye, {})
1987
+ },
1988
+ {
1989
+ name: t("routes.advanced"),
1990
+ icon: De,
1991
+ path: "advanced",
1992
+ element: /* @__PURE__ */ e(Je, {})
1993
+ },
1994
+ {
1995
+ name: t("routes.dataPrivacy"),
1996
+ icon: We,
1997
+ path: "data-privacy",
1998
+ element: /* @__PURE__ */ e(it, {})
1999
+ },
2000
+ {
2001
+ name: t("routes.develop"),
2002
+ icon: Ie,
2003
+ path: "developpers",
2004
+ element: /* @__PURE__ */ e(at, {})
2005
+ },
2006
+ ...B() ? [] : [
2007
+ {
2008
+ name: t("routes.serviceWorker"),
2009
+ icon: ze,
2010
+ path: "service-worker",
2011
+ element: /* @__PURE__ */ e(st, {})
2012
+ }
2013
+ ]
2014
+ ], vt = () => {
2015
+ const t = Ce(), a = Te(), { settings: s } = S(), { config: l } = I(), { t: i } = C("settings"), [f, r] = w(() => B());
2016
+ E(() => {
2017
+ r(B());
2018
+ const o = window.setTimeout(() => r(B()), 200);
2019
+ return () => window.clearTimeout(o);
2020
+ }, []), E(() => {
2021
+ if (l?.title) {
2022
+ const o = i("settings", { ns: "common" });
2023
+ document.title = `${o} | ${l.title}`;
2024
+ }
2025
+ }, [l?.title, i]);
2026
+ const c = R(() => ot(i), [i]), u = R(() => f ? c.filter((o) => o.path !== "service-worker") : c, [c, f]), v = R(() => s.developerFeatures.enabled ? u : u.filter(
2027
+ (o) => o.path !== "developpers" && o.path !== "service-worker"
2028
+ ), [s.developerFeatures.enabled, u]), x = R(() => {
2029
+ const o = ["developpers", "service-worker"];
2030
+ return [
2031
+ {
2032
+ title: i("categories.preferences"),
2033
+ routes: v.filter(
2034
+ (k) => ["appearance", "language-and-region", "data-privacy"].includes(k.path)
2035
+ )
2036
+ },
2037
+ {
2038
+ title: i("categories.system"),
2039
+ routes: v.filter((k) => ["update-app", "advanced"].includes(k.path))
2040
+ },
2041
+ {
2042
+ title: i("categories.developer"),
2043
+ routes: v.filter((k) => o.includes(k.path))
2044
+ }
2045
+ ].filter((k) => k.routes.length > 0);
2046
+ }, [v, i]), g = H(() => {
2047
+ const o = t.pathname;
2048
+ return v.find((k) => {
2049
+ const A = o.replace(/^\/+|\/+$/g, ""), T = k.path.replace(/^\/+|\/+$/g, "");
2050
+ return A === T || A.endsWith(`/${T}`) || A.includes(`/${T}/`);
2051
+ });
2052
+ }, [t.pathname, v]), d = R(() => g(), [g]), h = R(() => {
2053
+ const o = t.pathname, b = L.settings.replace(/^\/+|\/+$/g, ""), k = o.replace(/^\/+|\/+$/g, "");
2054
+ if (k === b)
2055
+ return !0;
2056
+ const A = `${b}/`;
2057
+ return k.startsWith(A), !1;
2058
+ }, [t.pathname, v]), y = H(() => {
2059
+ a(L.settings, { replace: !0 });
2060
+ }, [a]);
2061
+ return /* @__PURE__ */ e(he, { children: /* @__PURE__ */ n("div", { className: "flex h-full w-full overflow-hidden items-start", children: [
2062
+ /* @__PURE__ */ e(fe, { className: "hidden md:flex", children: /* @__PURE__ */ e(ve, { children: x.map((o) => /* @__PURE__ */ n(be, { children: [
2063
+ /* @__PURE__ */ e(ye, { children: o.title }),
2064
+ /* @__PURE__ */ e(xe, { children: /* @__PURE__ */ e(ke, { children: o.routes.map((b) => /* @__PURE__ */ e(Ne, { children: /* @__PURE__ */ e(
2065
+ we,
2066
+ {
2067
+ asChild: !0,
2068
+ isActive: b.name === d?.name,
2069
+ children: /* @__PURE__ */ n(
2070
+ "button",
2071
+ {
2072
+ onClick: () => a(`${L.settings}/${b.path}`),
2073
+ className: "cursor-pointer",
2074
+ children: [
2075
+ /* @__PURE__ */ e(b.icon, {}),
2076
+ /* @__PURE__ */ e("span", { children: b.name })
2077
+ ]
2078
+ }
2079
+ )
2080
+ }
2081
+ ) }, b.name)) }) })
2082
+ ] }, o.title)) }) }),
2083
+ /* @__PURE__ */ e("div", { className: "md:hidden flex h-full w-full flex-col overflow-hidden", children: h ? (
2084
+ // Show list of settings pages
2085
+ /* @__PURE__ */ n("div", { className: "flex flex-1 flex-col overflow-y-auto bg-background", children: [
2086
+ /* @__PURE__ */ e("header", { className: "flex h-16 shrink-0 items-center justify-center px-4 border-b", children: /* @__PURE__ */ e("h1", { className: "text-lg font-semibold", children: i("title") }) }),
2087
+ /* @__PURE__ */ e("div", { className: "flex flex-1 flex-col p-4 gap-6", children: x.map((o) => /* @__PURE__ */ n(
2088
+ "div",
2089
+ {
2090
+ className: "flex flex-col gap-2",
2091
+ children: [
2092
+ /* @__PURE__ */ e(
2093
+ "h2",
2094
+ {
2095
+ className: "text-xs font-semibold text-foreground/60 uppercase tracking-wider px-2",
2096
+ style: { fontFamily: "var(--heading-font-family, inherit)" },
2097
+ children: o.title
2098
+ }
2099
+ ),
2100
+ /* @__PURE__ */ e("div", { className: "flex flex-col bg-card rounded-lg overflow-hidden border border-border", children: o.routes.map((b, k) => {
2101
+ const A = b.icon, T = k === o.routes.length - 1;
2102
+ return /* @__PURE__ */ n(
2103
+ "div",
2104
+ {
2105
+ className: "relative",
2106
+ children: [
2107
+ !T && /* @__PURE__ */ e("div", { className: "absolute left-0 right-0 bottom-0 h-[1px] bg-border" }),
2108
+ /* @__PURE__ */ n(
2109
+ "button",
2110
+ {
2111
+ onClick: () => a(`${L.settings}/${b.path}`),
2112
+ className: "w-full flex items-center justify-between px-4 py-3 bg-transparent hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground transition-colors cursor-pointer rounded-none",
2113
+ children: [
2114
+ /* @__PURE__ */ n("div", { className: "flex items-center gap-2 flex-1 min-w-0", children: [
2115
+ /* @__PURE__ */ e("div", { className: "flex-shrink-0 text-foreground/70", children: /* @__PURE__ */ e(A, {}) }),
2116
+ /* @__PURE__ */ e("span", { className: "text-sm font-normal text-foreground", children: b.name })
2117
+ ] }),
2118
+ /* @__PURE__ */ e("div", { className: "flex-shrink-0 ml-2 text-foreground/40", children: /* @__PURE__ */ e(Pe, {}) })
2119
+ ]
2120
+ }
2121
+ )
2122
+ ]
2123
+ },
2124
+ b.name
2125
+ );
2126
+ }) })
2127
+ ]
2128
+ },
2129
+ o.title
2130
+ )) })
2131
+ ] })
2132
+ ) : (
2133
+ // Show selected settings page with back button
2134
+ /* @__PURE__ */ n("div", { className: "flex h-full flex-1 flex-col overflow-hidden", children: [
2135
+ /* @__PURE__ */ n("header", { className: "flex h-16 shrink-0 items-center gap-2 px-4 border-b", children: [
2136
+ /* @__PURE__ */ e(
2137
+ p,
2138
+ {
2139
+ variant: "ghost",
2140
+ size: "icon",
2141
+ onClick: y,
2142
+ className: "mr-2",
2143
+ children: /* @__PURE__ */ e(Re, {})
2144
+ }
2145
+ ),
2146
+ /* @__PURE__ */ e("h1", { className: "text-lg font-semibold", children: d?.name })
2147
+ ] }),
2148
+ /* @__PURE__ */ e("div", { className: "flex flex-1 flex-col gap-4 overflow-y-auto p-4 pt-4", children: /* @__PURE__ */ n(G, { children: [
2149
+ /* @__PURE__ */ e(
2150
+ j,
2151
+ {
2152
+ index: !0,
2153
+ element: v.length > 0 ? /* @__PURE__ */ e(
2154
+ Ae,
2155
+ {
2156
+ to: `${L.settings}/${v[0].path}`,
2157
+ replace: !0
2158
+ }
2159
+ ) : null
2160
+ }
2161
+ ),
2162
+ v.map((o) => /* @__PURE__ */ e(
2163
+ j,
2164
+ {
2165
+ path: o.path,
2166
+ element: o.element
2167
+ },
2168
+ o.path
2169
+ ))
2170
+ ] }) })
2171
+ ] })
2172
+ ) }),
2173
+ /* @__PURE__ */ n("main", { className: "hidden md:flex h-full flex-1 flex-col overflow-hidden", children: [
2174
+ d && /* @__PURE__ */ e("header", { className: "flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear", children: /* @__PURE__ */ e("div", { className: "flex items-center gap-2 px-4", children: /* @__PURE__ */ e(Y, { children: /* @__PURE__ */ n(J, { children: [
2175
+ /* @__PURE__ */ e(U, { children: i("title") }),
2176
+ /* @__PURE__ */ e(ee, {}),
2177
+ /* @__PURE__ */ e(U, { children: /* @__PURE__ */ e(X, { children: d.name }) })
2178
+ ] }) }) }) }),
2179
+ /* @__PURE__ */ e("div", { className: "flex flex-1 flex-col gap-4 overflow-y-auto p-4 pt-0", children: /* @__PURE__ */ n(G, { children: [
2180
+ /* @__PURE__ */ e(
2181
+ j,
2182
+ {
2183
+ index: !0,
2184
+ element: /* @__PURE__ */ e("div", { className: "flex flex-1 flex-col items-center justify-center p-8 text-center", children: /* @__PURE__ */ n("div", { className: "max-w-md", children: [
2185
+ /* @__PURE__ */ e("h2", { className: "text-lg font-semibold mb-2", children: i("title") }),
2186
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: i("selectCategory", {
2187
+ defaultValue: "Select a category from the sidebar to get started."
2188
+ }) })
2189
+ ] }) })
2190
+ }
2191
+ ),
2192
+ v.map((o) => /* @__PURE__ */ e(
2193
+ j,
2194
+ {
2195
+ path: o.path,
2196
+ element: o.element
2197
+ },
2198
+ o.path
2199
+ ))
2200
+ ] }) })
2201
+ ] })
2202
+ ] }) });
2203
+ };
2204
+ export {
2205
+ vt as SettingsView
2206
+ };
2207
+ //# sourceMappingURL=SettingsView-2QMtfS71.js.map