gov-layout 1.1.3 → 1.1.5

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.
package/dist/index.d.mts CHANGED
@@ -1,4 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React$1 from 'react';
2
3
 
3
4
  interface User {
4
5
  id?: string | number;
@@ -110,4 +111,46 @@ interface UserSidebarProps {
110
111
  }
111
112
  declare function UserSidebar({ user, roleLabel, menuItems, onNavigate, onLogout, isOpen, onClose, roleColor, }: UserSidebarProps): react_jsx_runtime.JSX.Element;
112
113
 
113
- export { type MenuItem, type NotificationItem, SidebarHeader, SidebarMenu, SidebarUserProfile, StaffSidebar, type StaffSidebarProps, type User, UserHeader, UserSidebar };
114
+ type Theme = 'light' | 'dark';
115
+ type FontSizeKey = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';
116
+ interface FontSizeOption {
117
+ key: FontSizeKey;
118
+ label: string;
119
+ scale: number;
120
+ }
121
+ declare const FONT_SIZE_OPTIONS: FontSizeOption[];
122
+ interface SettingsContextType {
123
+ theme: Theme;
124
+ setTheme: (theme: Theme) => void;
125
+ toggleTheme: () => void;
126
+ fontSize: FontSizeKey;
127
+ setFontSize: (size: FontSizeKey) => void;
128
+ fontSizeOption: FontSizeOption;
129
+ }
130
+ declare function SettingsProvider({ children, defaultTheme, defaultFontSize, themeStorageKey, fontSizeStorageKey, }: {
131
+ children: React$1.ReactNode;
132
+ defaultTheme?: Theme;
133
+ defaultFontSize?: FontSizeKey;
134
+ themeStorageKey?: string;
135
+ fontSizeStorageKey?: string;
136
+ }): react_jsx_runtime.JSX.Element;
137
+ declare function useSettings(): SettingsContextType;
138
+
139
+ interface SettingsPanelProps {
140
+ className?: string;
141
+ /** แสดงตัวเลือกโหมดสว่าง/มืด (default: true) — ซ่อนสำหรับเจ้าหน้าที่ */
142
+ showTheme?: boolean;
143
+ }
144
+ declare function SettingsPanel({ className, showTheme }: SettingsPanelProps): react_jsx_runtime.JSX.Element;
145
+
146
+ interface ThemeSettingsProps {
147
+ onBack?: () => void;
148
+ }
149
+ declare function ThemeSettings({ onBack }: ThemeSettingsProps): react_jsx_runtime.JSX.Element;
150
+
151
+ interface FontSizeSettingsProps {
152
+ onBack?: () => void;
153
+ }
154
+ declare function FontSizeSettings({ onBack }: FontSizeSettingsProps): react_jsx_runtime.JSX.Element;
155
+
156
+ export { FONT_SIZE_OPTIONS, type FontSizeKey, type FontSizeOption, FontSizeSettings, type MenuItem, type NotificationItem, SettingsPanel, SettingsProvider, SidebarHeader, SidebarMenu, SidebarUserProfile, StaffSidebar, type StaffSidebarProps, type Theme, ThemeSettings, type User, UserHeader, UserSidebar, useSettings };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React$1 from 'react';
2
3
 
3
4
  interface User {
4
5
  id?: string | number;
@@ -110,4 +111,46 @@ interface UserSidebarProps {
110
111
  }
111
112
  declare function UserSidebar({ user, roleLabel, menuItems, onNavigate, onLogout, isOpen, onClose, roleColor, }: UserSidebarProps): react_jsx_runtime.JSX.Element;
112
113
 
113
- export { type MenuItem, type NotificationItem, SidebarHeader, SidebarMenu, SidebarUserProfile, StaffSidebar, type StaffSidebarProps, type User, UserHeader, UserSidebar };
114
+ type Theme = 'light' | 'dark';
115
+ type FontSizeKey = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';
116
+ interface FontSizeOption {
117
+ key: FontSizeKey;
118
+ label: string;
119
+ scale: number;
120
+ }
121
+ declare const FONT_SIZE_OPTIONS: FontSizeOption[];
122
+ interface SettingsContextType {
123
+ theme: Theme;
124
+ setTheme: (theme: Theme) => void;
125
+ toggleTheme: () => void;
126
+ fontSize: FontSizeKey;
127
+ setFontSize: (size: FontSizeKey) => void;
128
+ fontSizeOption: FontSizeOption;
129
+ }
130
+ declare function SettingsProvider({ children, defaultTheme, defaultFontSize, themeStorageKey, fontSizeStorageKey, }: {
131
+ children: React$1.ReactNode;
132
+ defaultTheme?: Theme;
133
+ defaultFontSize?: FontSizeKey;
134
+ themeStorageKey?: string;
135
+ fontSizeStorageKey?: string;
136
+ }): react_jsx_runtime.JSX.Element;
137
+ declare function useSettings(): SettingsContextType;
138
+
139
+ interface SettingsPanelProps {
140
+ className?: string;
141
+ /** แสดงตัวเลือกโหมดสว่าง/มืด (default: true) — ซ่อนสำหรับเจ้าหน้าที่ */
142
+ showTheme?: boolean;
143
+ }
144
+ declare function SettingsPanel({ className, showTheme }: SettingsPanelProps): react_jsx_runtime.JSX.Element;
145
+
146
+ interface ThemeSettingsProps {
147
+ onBack?: () => void;
148
+ }
149
+ declare function ThemeSettings({ onBack }: ThemeSettingsProps): react_jsx_runtime.JSX.Element;
150
+
151
+ interface FontSizeSettingsProps {
152
+ onBack?: () => void;
153
+ }
154
+ declare function FontSizeSettings({ onBack }: FontSizeSettingsProps): react_jsx_runtime.JSX.Element;
155
+
156
+ export { FONT_SIZE_OPTIONS, type FontSizeKey, type FontSizeOption, FontSizeSettings, type MenuItem, type NotificationItem, SettingsPanel, SettingsProvider, SidebarHeader, SidebarMenu, SidebarUserProfile, StaffSidebar, type StaffSidebarProps, type Theme, ThemeSettings, type User, UserHeader, UserSidebar, useSettings };
package/dist/index.js CHANGED
@@ -742,40 +742,41 @@ function UserHeader({
742
742
  {
743
743
  onClick: () => setIsNotifOpen(!isNotifOpen),
744
744
  style: {
745
- padding: "4px 10px",
745
+ padding: "10px",
746
746
  borderRadius: "8px",
747
747
  border: "none",
748
748
  background: "transparent",
749
749
  cursor: "pointer",
750
+ position: "relative",
750
751
  display: "flex",
751
- flexDirection: "column",
752
752
  alignItems: "center",
753
- justifyContent: "center",
754
- gap: "0px"
753
+ justifyContent: "center"
755
754
  },
756
755
  children: [
756
+ /* @__PURE__ */ jsxRuntime.jsx(BellIcon, {}),
757
757
  unreadCount > 0 && /* @__PURE__ */ jsxRuntime.jsx(
758
758
  "span",
759
759
  {
760
760
  style: {
761
- minWidth: "20px",
761
+ position: "absolute",
762
+ top: "2px",
763
+ right: "2px",
764
+ minWidth: "16px",
762
765
  height: "16px",
763
766
  background: "var(--color-alias-semantic-critical, #f21515)",
764
767
  borderRadius: "8px",
765
768
  display: "flex",
766
769
  alignItems: "center",
767
770
  justifyContent: "center",
768
- fontSize: "10px",
771
+ fontSize: unreadCount > 99 ? "7px" : "9px",
769
772
  fontWeight: 700,
770
773
  color: "#fff",
771
- padding: "0 5px",
772
- lineHeight: 1,
773
- marginBottom: "-6px"
774
+ padding: "0 3px",
775
+ lineHeight: 1
774
776
  },
775
777
  children: unreadCount > 99 ? "99+" : unreadCount
776
778
  }
777
- ),
778
- /* @__PURE__ */ jsxRuntime.jsx(BellIcon, {})
779
+ )
779
780
  ]
780
781
  }
781
782
  ),
@@ -1210,12 +1211,389 @@ function UserSidebar({
1210
1211
  )
1211
1212
  ] });
1212
1213
  }
1214
+ var FONT_SIZE_OPTIONS = [
1215
+ { key: "xsmall", label: "\u0E40\u0E25\u0E47\u0E01\u0E21\u0E32\u0E01", scale: 0.8 },
1216
+ { key: "small", label: "\u0E40\u0E25\u0E47\u0E01", scale: 0.9 },
1217
+ { key: "medium", label: "\u0E01\u0E25\u0E32\u0E07", scale: 1 },
1218
+ { key: "large", label: "\u0E43\u0E2B\u0E0D\u0E48", scale: 1.2 },
1219
+ { key: "xlarge", label: "\u0E43\u0E2B\u0E0D\u0E48\u0E21\u0E32\u0E01", scale: 1.4 }
1220
+ ];
1221
+ var BASE_FONT_SIZES = {
1222
+ "--font-alias-mobile-body-fontsize": 16,
1223
+ "--font-alias-mobile-h1-fontsize": 28,
1224
+ "--font-alias-mobile-h2-fontsize": 24,
1225
+ "--font-alias-mobile-h3-fontsize": 20,
1226
+ "--font-alias-mobile-sub-fontsize": 14,
1227
+ "--font-alias-mobile-button-fontsize": 16
1228
+ };
1229
+ var SettingsContext = react.createContext(void 0);
1230
+ function SettingsProvider({
1231
+ children,
1232
+ defaultTheme = "light",
1233
+ defaultFontSize = "medium",
1234
+ themeStorageKey = "app-theme",
1235
+ fontSizeStorageKey = "app-font-size"
1236
+ }) {
1237
+ const [theme, setThemeState] = react.useState(defaultTheme);
1238
+ const [fontSize, setFontSizeState] = react.useState(defaultFontSize);
1239
+ react.useEffect(() => {
1240
+ try {
1241
+ const savedTheme = localStorage.getItem(themeStorageKey);
1242
+ if (savedTheme === "light" || savedTheme === "dark") {
1243
+ setThemeState(savedTheme);
1244
+ }
1245
+ const savedFontSize = localStorage.getItem(fontSizeStorageKey);
1246
+ if (savedFontSize && FONT_SIZE_OPTIONS.some((o) => o.key === savedFontSize)) {
1247
+ setFontSizeState(savedFontSize);
1248
+ }
1249
+ } catch {
1250
+ }
1251
+ }, [themeStorageKey, fontSizeStorageKey]);
1252
+ react.useEffect(() => {
1253
+ const root = document.documentElement;
1254
+ if (theme === "dark") {
1255
+ root.classList.add("dark");
1256
+ } else {
1257
+ root.classList.remove("dark");
1258
+ }
1259
+ try {
1260
+ localStorage.setItem(themeStorageKey, theme);
1261
+ } catch {
1262
+ }
1263
+ }, [theme, themeStorageKey]);
1264
+ react.useEffect(() => {
1265
+ const option = FONT_SIZE_OPTIONS.find((o) => o.key === fontSize) || FONT_SIZE_OPTIONS[2];
1266
+ const root = document.documentElement;
1267
+ Object.entries(BASE_FONT_SIZES).forEach(([varName, baseValue]) => {
1268
+ root.style.setProperty(varName, `${baseValue * option.scale}px`);
1269
+ });
1270
+ root.style.fontSize = `${16 * option.scale}px`;
1271
+ root.style.setProperty("--global-font-scale", option.scale.toString());
1272
+ try {
1273
+ localStorage.setItem(fontSizeStorageKey, fontSize);
1274
+ } catch {
1275
+ }
1276
+ }, [fontSize, fontSizeStorageKey]);
1277
+ const setTheme = react.useCallback((t) => {
1278
+ setThemeState(t);
1279
+ }, []);
1280
+ const toggleTheme = react.useCallback(() => {
1281
+ setThemeState((prev) => prev === "light" ? "dark" : "light");
1282
+ }, []);
1283
+ const setFontSize = react.useCallback((s) => {
1284
+ setFontSizeState(s);
1285
+ }, []);
1286
+ const fontSizeOption = FONT_SIZE_OPTIONS.find((o) => o.key === fontSize) || FONT_SIZE_OPTIONS[2];
1287
+ return /* @__PURE__ */ jsxRuntime.jsx(
1288
+ SettingsContext.Provider,
1289
+ {
1290
+ value: { theme, setTheme, toggleTheme, fontSize, setFontSize, fontSizeOption },
1291
+ children
1292
+ }
1293
+ );
1294
+ }
1295
+ function useSettings() {
1296
+ const context = react.useContext(SettingsContext);
1297
+ if (!context) {
1298
+ throw new Error("useSettings must be used within <SettingsProvider>");
1299
+ }
1300
+ return context;
1301
+ }
1302
+ function SunIcon() {
1303
+ return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
1304
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "5" }),
1305
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", y1: "1", x2: "12", y2: "3" }),
1306
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", y1: "21", x2: "12", y2: "23" }),
1307
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "4.22", y1: "4.22", x2: "5.64", y2: "5.64" }),
1308
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "18.36", y1: "18.36", x2: "19.78", y2: "19.78" }),
1309
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "1", y1: "12", x2: "3", y2: "12" }),
1310
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "21", y1: "12", x2: "23", y2: "12" }),
1311
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "4.22", y1: "19.78", x2: "5.64", y2: "18.36" }),
1312
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "18.36", y1: "5.64", x2: "19.78", y2: "4.22" })
1313
+ ] });
1314
+ }
1315
+ function MoonIcon() {
1316
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" }) });
1317
+ }
1318
+ function ThemeSettings({ onBack }) {
1319
+ const { theme, setTheme } = useSettings();
1320
+ const options = [
1321
+ { key: "light", label: "\u0E2A\u0E27\u0E48\u0E32\u0E07", icon: /* @__PURE__ */ jsxRuntime.jsx(SunIcon, {}), bg: "#fff", text: "#111" },
1322
+ { key: "dark", label: "\u0E21\u0E37\u0E14", icon: /* @__PURE__ */ jsxRuntime.jsx(MoonIcon, {}), bg: "#1f2937", text: "#f9fafb" }
1323
+ ];
1324
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1325
+ onBack && /* @__PURE__ */ jsxRuntime.jsxs(
1326
+ "button",
1327
+ {
1328
+ onClick: onBack,
1329
+ style: {
1330
+ display: "flex",
1331
+ alignItems: "center",
1332
+ gap: 8,
1333
+ padding: "12px 16px",
1334
+ width: "100%",
1335
+ border: "none",
1336
+ background: "transparent",
1337
+ cursor: "pointer",
1338
+ fontSize: 15,
1339
+ fontWeight: 600,
1340
+ color: "var(--color-alias-text-colors-primary, #060d26)"
1341
+ },
1342
+ children: [
1343
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19 12H5M12 19l-7-7 7-7" }) }),
1344
+ "\u0E42\u0E2B\u0E21\u0E14\u0E2A\u0E27\u0E48\u0E32\u0E07/\u0E21\u0E37\u0E14"
1345
+ ]
1346
+ }
1347
+ ),
1348
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "12px 16px", display: "flex", gap: 12 }, children: options.map((opt) => {
1349
+ const isSelected = theme === opt.key;
1350
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1351
+ "button",
1352
+ {
1353
+ onClick: () => setTheme(opt.key),
1354
+ style: {
1355
+ flex: 1,
1356
+ padding: "20px 12px",
1357
+ borderRadius: 12,
1358
+ border: isSelected ? "2px solid var(--color-alias-color-brand-primary, #1e7d55)" : "2px solid var(--color-border-colors-neutral, #c8cedd)",
1359
+ background: opt.bg,
1360
+ cursor: "pointer",
1361
+ display: "flex",
1362
+ flexDirection: "column",
1363
+ alignItems: "center",
1364
+ gap: 8,
1365
+ transition: "all 0.2s ease"
1366
+ },
1367
+ children: [
1368
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: opt.text }, children: opt.icon }),
1369
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: {
1370
+ fontSize: 13,
1371
+ fontWeight: isSelected ? 700 : 500,
1372
+ color: opt.text
1373
+ }, children: opt.label }),
1374
+ isSelected && /* @__PURE__ */ jsxRuntime.jsx("span", { style: {
1375
+ width: 20,
1376
+ height: 20,
1377
+ borderRadius: "50%",
1378
+ background: "var(--color-alias-color-brand-primary, #1e7d55)",
1379
+ display: "flex",
1380
+ alignItems: "center",
1381
+ justifyContent: "center"
1382
+ }, children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "#fff", strokeWidth: "3", children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "20 6 9 17 4 12" }) }) })
1383
+ ]
1384
+ },
1385
+ opt.key
1386
+ );
1387
+ }) })
1388
+ ] });
1389
+ }
1390
+ function FontSizeSettings({ onBack }) {
1391
+ const { fontSize, setFontSize, fontSizeOption } = useSettings();
1392
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1393
+ onBack && /* @__PURE__ */ jsxRuntime.jsxs(
1394
+ "button",
1395
+ {
1396
+ onClick: onBack,
1397
+ style: {
1398
+ display: "flex",
1399
+ alignItems: "center",
1400
+ gap: 8,
1401
+ padding: "12px 16px",
1402
+ width: "100%",
1403
+ border: "none",
1404
+ background: "transparent",
1405
+ cursor: "pointer",
1406
+ fontSize: 15,
1407
+ fontWeight: 600,
1408
+ color: "var(--color-alias-text-colors-primary, #060d26)"
1409
+ },
1410
+ children: [
1411
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19 12H5M12 19l-7-7 7-7" }) }),
1412
+ "\u0E02\u0E19\u0E32\u0E14\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23"
1413
+ ]
1414
+ }
1415
+ ),
1416
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: {
1417
+ margin: "8px 16px",
1418
+ padding: "16px",
1419
+ borderRadius: 10,
1420
+ background: "var(--color-foundations-fuji-pallet-light, #f5f6fa)",
1421
+ textAlign: "center"
1422
+ }, children: [
1423
+ /* @__PURE__ */ jsxRuntime.jsx("p", { style: {
1424
+ fontSize: `${16 * fontSizeOption.scale}px`,
1425
+ fontWeight: 500,
1426
+ color: "var(--color-alias-text-colors-primary, #060d26)",
1427
+ margin: 0
1428
+ }, children: "\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21" }),
1429
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { style: {
1430
+ fontSize: `${12 * fontSizeOption.scale}px`,
1431
+ color: "var(--color-alias-text-colors-tertiary, #475272)",
1432
+ margin: "4px 0 0"
1433
+ }, children: [
1434
+ "\xD7",
1435
+ fontSizeOption.scale
1436
+ ] })
1437
+ ] }),
1438
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "8px 16px", display: "flex", flexDirection: "column", gap: 4 }, children: FONT_SIZE_OPTIONS.map((opt) => {
1439
+ const isSelected = fontSize === opt.key;
1440
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1441
+ "button",
1442
+ {
1443
+ onClick: () => setFontSize(opt.key),
1444
+ onMouseEnter: (e) => {
1445
+ if (!isSelected) e.currentTarget.style.backgroundColor = "#f9fafb";
1446
+ },
1447
+ onMouseLeave: (e) => {
1448
+ if (!isSelected) e.currentTarget.style.backgroundColor = "transparent";
1449
+ },
1450
+ style: {
1451
+ display: "flex",
1452
+ alignItems: "center",
1453
+ justifyContent: "space-between",
1454
+ padding: "12px 14px",
1455
+ borderRadius: 8,
1456
+ border: isSelected ? "2px solid var(--color-alias-color-brand-primary, #1e7d55)" : "1px solid transparent",
1457
+ background: isSelected ? "color-mix(in srgb, var(--color-alias-color-brand-primary, #1e7d55) 8%, transparent)" : "transparent",
1458
+ cursor: "pointer",
1459
+ transition: "all 0.15s ease"
1460
+ },
1461
+ children: [
1462
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: {
1463
+ fontSize: `${14 * opt.scale}px`,
1464
+ fontWeight: isSelected ? 600 : 400,
1465
+ color: isSelected ? "var(--color-alias-color-brand-primary, #1e7d55)" : "var(--color-alias-text-colors-primary, #060d26)"
1466
+ }, children: opt.label }),
1467
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { style: {
1468
+ fontSize: 12,
1469
+ color: "var(--color-alias-text-colors-tertiary, #475272)"
1470
+ }, children: [
1471
+ "\xD7",
1472
+ opt.scale
1473
+ ] })
1474
+ ]
1475
+ },
1476
+ opt.key
1477
+ );
1478
+ }) })
1479
+ ] });
1480
+ }
1481
+ function FontSizeIcon() {
1482
+ return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
1483
+ /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "4 7 4 4 20 4 20 7" }),
1484
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "9", y1: "20", x2: "15", y2: "20" }),
1485
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", y1: "4", x2: "12", y2: "20" })
1486
+ ] });
1487
+ }
1488
+ function PaletteIcon() {
1489
+ return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
1490
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
1491
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "8", r: "1.5", fill: "currentColor" }),
1492
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8", cy: "14", r: "1.5", fill: "currentColor" }),
1493
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "16", cy: "14", r: "1.5", fill: "currentColor" })
1494
+ ] });
1495
+ }
1496
+ function SettingsPanel({ className, showTheme = true }) {
1497
+ const [view, setView] = react.useState("menu");
1498
+ if (view === "theme" && showTheme) {
1499
+ return /* @__PURE__ */ jsxRuntime.jsx(ThemeSettings, { onBack: () => setView("menu") });
1500
+ }
1501
+ if (view === "fontSize") {
1502
+ return /* @__PURE__ */ jsxRuntime.jsx(FontSizeSettings, { onBack: () => setView("menu") });
1503
+ }
1504
+ const allMenuItems = [
1505
+ {
1506
+ id: "fontSize",
1507
+ icon: /* @__PURE__ */ jsxRuntime.jsx(FontSizeIcon, {}),
1508
+ label: "\u0E02\u0E19\u0E32\u0E14\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23",
1509
+ description: "\u0E40\u0E25\u0E47\u0E01\u0E21\u0E32\u0E01 / \u0E40\u0E25\u0E47\u0E01 / \u0E01\u0E25\u0E32\u0E07 / \u0E43\u0E2B\u0E0D\u0E48 / \u0E43\u0E2B\u0E0D\u0E48\u0E21\u0E32\u0E01",
1510
+ onClick: () => setView("fontSize")
1511
+ },
1512
+ ...showTheme ? [{
1513
+ id: "theme",
1514
+ icon: /* @__PURE__ */ jsxRuntime.jsx(PaletteIcon, {}),
1515
+ label: "\u0E42\u0E2B\u0E21\u0E14\u0E2A\u0E27\u0E48\u0E32\u0E07/\u0E21\u0E37\u0E14",
1516
+ description: "\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E18\u0E35\u0E21\u0E41\u0E2D\u0E1B\u0E1E\u0E25\u0E34\u0E40\u0E04\u0E0A\u0E31\u0E19",
1517
+ onClick: () => setView("theme")
1518
+ }] : []
1519
+ ];
1520
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className, children: [
1521
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: {
1522
+ padding: "16px",
1523
+ borderBottom: "1px solid var(--color-border-colors-neutral, #e5e7eb)"
1524
+ }, children: /* @__PURE__ */ jsxRuntime.jsx("h3", { style: {
1525
+ fontSize: 16,
1526
+ fontWeight: 700,
1527
+ margin: 0,
1528
+ color: "var(--color-alias-text-colors-primary, #060d26)"
1529
+ }, children: "\u0E15\u0E31\u0E49\u0E07\u0E04\u0E48\u0E32\u0E23\u0E30\u0E1A\u0E1A" }) }),
1530
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "8px", display: "flex", flexDirection: "column", gap: 2 }, children: allMenuItems.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(
1531
+ "button",
1532
+ {
1533
+ onClick: item.onClick,
1534
+ onMouseEnter: (e) => {
1535
+ e.currentTarget.style.backgroundColor = "#f9fafb";
1536
+ },
1537
+ onMouseLeave: (e) => {
1538
+ e.currentTarget.style.backgroundColor = "transparent";
1539
+ },
1540
+ style: {
1541
+ display: "flex",
1542
+ alignItems: "center",
1543
+ gap: 14,
1544
+ padding: "14px 12px",
1545
+ borderRadius: 10,
1546
+ border: "none",
1547
+ background: "transparent",
1548
+ cursor: "pointer",
1549
+ width: "100%",
1550
+ textAlign: "left",
1551
+ transition: "background-color 0.15s ease"
1552
+ },
1553
+ children: [
1554
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: {
1555
+ width: 40,
1556
+ height: 40,
1557
+ borderRadius: 10,
1558
+ background: "var(--color-foundations-fuji-pallet-light, #ebedf5)",
1559
+ display: "flex",
1560
+ alignItems: "center",
1561
+ justifyContent: "center",
1562
+ color: "var(--color-alias-color-brand-primary, #1e7d55)",
1563
+ flexShrink: 0
1564
+ }, children: item.icon }),
1565
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [
1566
+ /* @__PURE__ */ jsxRuntime.jsx("p", { style: {
1567
+ fontSize: 15,
1568
+ fontWeight: 600,
1569
+ margin: 0,
1570
+ color: "var(--color-alias-text-colors-primary, #060d26)"
1571
+ }, children: item.label }),
1572
+ /* @__PURE__ */ jsxRuntime.jsx("p", { style: {
1573
+ fontSize: 12,
1574
+ margin: "2px 0 0",
1575
+ color: "var(--color-alias-text-colors-tertiary, #475272)"
1576
+ }, children: item.description })
1577
+ ] }),
1578
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 18l6-6-6-6" }) })
1579
+ ]
1580
+ },
1581
+ item.id
1582
+ )) })
1583
+ ] });
1584
+ }
1213
1585
 
1586
+ exports.FONT_SIZE_OPTIONS = FONT_SIZE_OPTIONS;
1587
+ exports.FontSizeSettings = FontSizeSettings;
1588
+ exports.SettingsPanel = SettingsPanel;
1589
+ exports.SettingsProvider = SettingsProvider;
1214
1590
  exports.SidebarHeader = SidebarHeader;
1215
1591
  exports.SidebarMenu = SidebarMenu;
1216
1592
  exports.SidebarUserProfile = SidebarUserProfile;
1217
1593
  exports.StaffSidebar = StaffSidebar;
1594
+ exports.ThemeSettings = ThemeSettings;
1218
1595
  exports.UserHeader = UserHeader;
1219
1596
  exports.UserSidebar = UserSidebar;
1597
+ exports.useSettings = useSettings;
1220
1598
  //# sourceMappingURL=index.js.map
1221
1599
  //# sourceMappingURL=index.js.map