poe-svelte-ui-lib 1.22.0 → 1.22.1

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.
@@ -12,12 +12,14 @@
12
12
  import RestartIcon from "./RestartIcon.svelte"
13
13
  import WidgetHeader from "../WidgetHeader.svelte"
14
14
  import { widgetAccentStyle } from "../widgetAccent"
15
+ import { readPersistedCollapsed, writePersistedCollapsed } from "../widgetCollapse"
15
16
 
16
17
  let {
17
18
  wrapperClass = "",
18
19
  componentClass = "",
19
20
  label = { name: "Информация об устройстве" },
20
21
  value = $bindable(),
22
+ persistKey,
21
23
  onSave = () => {},
22
24
  onRestart = () => {},
23
25
  }: IWidgetDeviceInfoProps = $props()
@@ -37,8 +39,10 @@
37
39
  },
38
40
  )
39
41
 
40
- /* Сворачивание тела виджета по клику на значок/заголовок (как аккордеон) */
41
- let collapsed = $state(false)
42
+ /* Сворачивание тела виджета по клику на значок/заголовок (как аккордеон), но в отличие от
43
+ Accordion переживает перезагрузку страницы через localStorage, если передан persistKey */
44
+ let collapsed = $state(readPersistedCollapsed(persistKey))
45
+ $effect(() => writePersistedCollapsed(persistKey, collapsed))
42
46
 
43
47
  /* Поля редактируются локально (как Argument: NoSend в реальной GUI) — отправка одним пакетом по кнопке */
44
48
  let savedSnapshot = $state(JSON.stringify(info))
@@ -15,6 +15,7 @@
15
15
  import WarningIcon from "./WarningIcon.svelte"
16
16
  import WidgetHeader from "../WidgetHeader.svelte"
17
17
  import { widgetAccentStyle } from "../widgetAccent"
18
+ import { readPersistedCollapsed, writePersistedCollapsed } from "../widgetCollapse"
18
19
 
19
20
  let {
20
21
  wrapperClass = "",
@@ -23,6 +24,7 @@
23
24
  value = $bindable(),
24
25
  allowedModes = [1, 2, 3],
25
26
  confirmOnAP = true,
27
+ persistKey,
26
28
  onScan,
27
29
  onSave = () => {},
28
30
  }: IWidgetWiFiProps = $props()
@@ -85,8 +87,11 @@
85
87
  }
86
88
 
87
89
  /* Сворачивание тела виджета по клику на значок/заголовок (как аккордеон) — переключатель режима
88
- в шапке кликом не триггерит, только сама кнопка значок+заголовок (см. WidgetHeader.svelte) */
89
- let collapsed = $state(false)
90
+ в шапке кликом не триггерит, только сама кнопка значок+заголовок (см. WidgetHeader.svelte).
91
+ В отличие от Accordion (только начальное значение из GUI) — переживает перезагрузку страницы
92
+ через localStorage, если передан persistKey. */
93
+ let collapsed = $state(readPersistedCollapsed(persistKey))
94
+ $effect(() => writePersistedCollapsed(persistKey, collapsed))
90
95
 
91
96
  /* Поля редактируются локально (как Argument: NoSend в реальной GUI) — отправка одним пакетом по кнопке */
92
97
  let savedSnapshot = $state(JSON.stringify(cfg))
package/dist/types.d.ts CHANGED
@@ -516,6 +516,7 @@ export interface IWidgetWiFiProps {
516
516
  value?: IWidgetWiFiConfig;
517
517
  allowedModes?: number[];
518
518
  confirmOnAP?: boolean;
519
+ persistKey?: string;
519
520
  onScan?: () => Promise<{
520
521
  id: string;
521
522
  name: string;
@@ -541,6 +542,7 @@ export interface IWidgetDeviceInfoProps {
541
542
  name?: string;
542
543
  };
543
544
  value?: IWidgetDeviceInfoConfig;
545
+ persistKey?: string;
544
546
  onSave?: (info: IWidgetDeviceInfoConfig) => void;
545
547
  onRestart?: () => void;
546
548
  }
@@ -0,0 +1,2 @@
1
+ export declare const readPersistedCollapsed: (persistKey?: string) => boolean;
2
+ export declare const writePersistedCollapsed: (persistKey: string | undefined, collapsed: boolean) => void;
@@ -0,0 +1,25 @@
1
+ /* $lib/widgetCollapse.ts — запоминание свёрнутости смарт-виджетов в localStorage браузера
2
+ (Accordion этого не делает — isOpen у него только начальное значение из сохранённого GUI,
3
+ без переживания перезагрузки; виджеты сделаны надёжнее). typeof window-проверка вместо
4
+ $app/environment — библиотека не должна знать про SvelteKit. */
5
+ const STORAGE_PREFIX = "widget-collapsed:";
6
+ export const readPersistedCollapsed = (persistKey) => {
7
+ if (!persistKey || typeof window === "undefined")
8
+ return false;
9
+ try {
10
+ return window.localStorage.getItem(STORAGE_PREFIX + persistKey) === "1";
11
+ }
12
+ catch {
13
+ return false;
14
+ }
15
+ };
16
+ export const writePersistedCollapsed = (persistKey, collapsed) => {
17
+ if (!persistKey || typeof window === "undefined")
18
+ return;
19
+ try {
20
+ window.localStorage.setItem(STORAGE_PREFIX + persistKey, collapsed ? "1" : "0");
21
+ }
22
+ catch {
23
+ /* приватный режим/заблокировано — молча игнорируем, просто не запомнится */
24
+ }
25
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "poe-svelte-ui-lib",
3
- "version": "1.22.0",
3
+ "version": "1.22.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "scripts": {