pne-ui 3.0.26 → 3.0.27

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 (38) hide show
  1. package/README.md +115 -0
  2. package/cjs/component/widget-board/WidgetBoard.js +117 -190
  3. package/cjs/component/widget-board/WidgetBoard.js.map +1 -1
  4. package/cjs/component/widget-board/WidgetLayoutsPanel.d.ts +18 -0
  5. package/cjs/component/widget-board/WidgetLayoutsPanel.js +98 -0
  6. package/cjs/component/widget-board/WidgetLayoutsPanel.js.map +1 -0
  7. package/cjs/component/widget-board/index.d.ts +4 -1
  8. package/cjs/component/widget-board/index.js +4 -1
  9. package/cjs/component/widget-board/index.js.map +1 -1
  10. package/cjs/component/widget-board/layoutPersistence.d.ts +38 -0
  11. package/cjs/component/widget-board/layoutPersistence.js +188 -0
  12. package/cjs/component/widget-board/layoutPersistence.js.map +1 -0
  13. package/cjs/component/widget-board/types.d.ts +5 -24
  14. package/cjs/component/widget-board/useWidgetLayoutsManager.d.ts +24 -0
  15. package/cjs/component/widget-board/useWidgetLayoutsManager.js +91 -0
  16. package/cjs/component/widget-board/useWidgetLayoutsManager.js.map +1 -0
  17. package/cjs/component/widget-board/widgetLayoutsPanelStore.d.ts +14 -0
  18. package/cjs/component/widget-board/widgetLayoutsPanelStore.js +22 -0
  19. package/cjs/component/widget-board/widgetLayoutsPanelStore.js.map +1 -0
  20. package/esm/component/widget-board/WidgetBoard.js +117 -190
  21. package/esm/component/widget-board/WidgetBoard.js.map +1 -1
  22. package/esm/component/widget-board/WidgetLayoutsPanel.d.ts +18 -0
  23. package/esm/component/widget-board/WidgetLayoutsPanel.js +93 -0
  24. package/esm/component/widget-board/WidgetLayoutsPanel.js.map +1 -0
  25. package/esm/component/widget-board/index.d.ts +4 -1
  26. package/esm/component/widget-board/index.js +4 -1
  27. package/esm/component/widget-board/index.js.map +1 -1
  28. package/esm/component/widget-board/layoutPersistence.d.ts +38 -0
  29. package/esm/component/widget-board/layoutPersistence.js +181 -0
  30. package/esm/component/widget-board/layoutPersistence.js.map +1 -0
  31. package/esm/component/widget-board/types.d.ts +5 -24
  32. package/esm/component/widget-board/useWidgetLayoutsManager.d.ts +24 -0
  33. package/esm/component/widget-board/useWidgetLayoutsManager.js +87 -0
  34. package/esm/component/widget-board/useWidgetLayoutsManager.js.map +1 -0
  35. package/esm/component/widget-board/widgetLayoutsPanelStore.d.ts +14 -0
  36. package/esm/component/widget-board/widgetLayoutsPanelStore.js +16 -0
  37. package/esm/component/widget-board/widgetLayoutsPanelStore.js.map +1 -0
  38. package/package.json +1 -1
@@ -1,4 +1,7 @@
1
1
  export * from './WidgetBoard';
2
2
  export * from './types';
3
- export * from './PneLayoutsPanel';
3
+ export * from './WidgetLayoutsPanel';
4
+ export * from './layoutPersistence';
5
+ export * from './useWidgetLayoutsManager';
6
+ export * from './widgetLayoutsPanelStore';
4
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/component/widget-board/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/component/widget-board/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA"}
@@ -0,0 +1,38 @@
1
+ import type { BreakpointLayoutConfig, WidgetBoardLayoutOption, WidgetBoardLoadLayoutsResult, WidgetBoardState, WidgetLayoutConfig } from './types';
2
+ export type WidgetLayoutPlacement = {
3
+ columnSpan?: number;
4
+ rowSpan?: number;
5
+ columnOffset?: WidgetLayoutConfig['defaultSize']['columnOffset'];
6
+ isHidden?: boolean;
7
+ isCollapsed?: boolean;
8
+ };
9
+ export type WidgetLayoutSettingsBreakpoint = {
10
+ columns?: number;
11
+ widgets?: Record<string, WidgetLayoutPlacement>;
12
+ };
13
+ export type WidgetLayoutSettingsLayout = {
14
+ id: string;
15
+ name?: string;
16
+ layoutByBreakpoint?: Record<number | string, WidgetLayoutSettingsBreakpoint>;
17
+ version?: string;
18
+ updatedAt?: string;
19
+ };
20
+ export type WidgetLayoutSettings = {
21
+ layouts?: WidgetLayoutSettingsLayout[];
22
+ selectedLayoutId?: string;
23
+ };
24
+ export declare const normalizeWidgetLayoutSettings: (settings: WidgetLayoutSettings | null | undefined, defaultOption: WidgetBoardLayoutOption, breakpoints?: readonly number[]) => WidgetBoardLoadLayoutsResult;
25
+ export declare const buildLayoutSettingsPayload: (options: WidgetBoardLayoutOption[], selectedId?: string) => WidgetLayoutSettings;
26
+ export declare const buildPresetFromState: (state: WidgetBoardState | null, baseLayoutByBreakpoint: Record<number | string, BreakpointLayoutConfig>, breakpoints?: readonly number[]) => Record<number | string, BreakpointLayoutConfig>;
27
+ type RemoteHandlersParams = {
28
+ defaultOption: WidgetBoardLayoutOption;
29
+ breakpoints?: readonly number[];
30
+ loadSettings?: () => Promise<WidgetLayoutSettings | null | undefined>;
31
+ saveSettings?: (settings: WidgetLayoutSettings) => Promise<void>;
32
+ skipWhenStorybook?: boolean;
33
+ };
34
+ export declare const createWidgetLayoutsRemoteHandlers: ({ defaultOption, breakpoints, loadSettings, saveSettings, skipWhenStorybook, }: RemoteHandlersParams) => {
35
+ loadLayouts: () => Promise<WidgetBoardLoadLayoutsResult>;
36
+ saveLayouts: (options: WidgetBoardLayoutOption[], selectedId?: string) => Promise<void>;
37
+ };
38
+ export {};
@@ -0,0 +1,181 @@
1
+ import { DEFAULT_BREAKPOINTS } from '../../common/responsive/breakpoints';
2
+ const isStorybookRuntime = () => typeof window !== 'undefined' &&
3
+ (Boolean(window.__STORYBOOK_CLIENT_API__) || Boolean(window.__STORYBOOK_ADDONS_CHANNEL__));
4
+ const cloneLayoutConfig = (config) => ({
5
+ columns: config.columns,
6
+ widgets: Object.fromEntries(Object.entries(config.widgets).map(([id, widget]) => [
7
+ id,
8
+ {
9
+ defaultSize: { ...widget.defaultSize },
10
+ limits: widget.limits ? { ...widget.limits } : undefined,
11
+ initialState: widget.initialState ? { ...widget.initialState } : undefined,
12
+ },
13
+ ])),
14
+ });
15
+ const mergeWidgetPlacement = (base, remote) => {
16
+ if (!remote)
17
+ return base;
18
+ return {
19
+ defaultSize: {
20
+ ...base.defaultSize,
21
+ columnSpan: remote.columnSpan ?? base.defaultSize.columnSpan,
22
+ rowSpan: remote.rowSpan ?? base.defaultSize.rowSpan,
23
+ columnOffset: remote.columnOffset ?? base.defaultSize.columnOffset,
24
+ },
25
+ limits: base.limits,
26
+ initialState: {
27
+ ...base.initialState,
28
+ isHidden: remote.isHidden ?? base.initialState?.isHidden,
29
+ isCollapsed: remote.isCollapsed ?? base.initialState?.isCollapsed,
30
+ },
31
+ };
32
+ };
33
+ const normalizeLayoutMap = (layoutByBreakpoint, baseLayoutByBreakpoint, breakpoints) => {
34
+ if (!layoutByBreakpoint)
35
+ return null;
36
+ const normalized = {};
37
+ breakpoints.forEach(breakpoint => {
38
+ const base = baseLayoutByBreakpoint[breakpoint] ?? baseLayoutByBreakpoint[String(breakpoint)];
39
+ if (!base)
40
+ return;
41
+ const candidate = layoutByBreakpoint[breakpoint] ?? layoutByBreakpoint[String(breakpoint)];
42
+ if (!candidate)
43
+ return;
44
+ const widgets = {};
45
+ Object.keys(base.widgets).forEach(id => {
46
+ widgets[id] = mergeWidgetPlacement(base.widgets[id], candidate.widgets?.[id]);
47
+ });
48
+ normalized[breakpoint] = {
49
+ columns: candidate.columns ?? base.columns,
50
+ widgets,
51
+ };
52
+ });
53
+ if (Object.keys(normalized).length === 0) {
54
+ return null;
55
+ }
56
+ return normalized;
57
+ };
58
+ const normalizeLayoutOption = (layout, baseLayoutByBreakpoint, breakpoints) => {
59
+ const layoutByBreakpoint = normalizeLayoutMap(layout.layoutByBreakpoint, baseLayoutByBreakpoint, breakpoints);
60
+ if (!layoutByBreakpoint)
61
+ return null;
62
+ return {
63
+ id: layout.id,
64
+ name: layout.name || 'Layout',
65
+ layoutByBreakpoint,
66
+ };
67
+ };
68
+ export const normalizeWidgetLayoutSettings = (settings, defaultOption, breakpoints = DEFAULT_BREAKPOINTS) => {
69
+ const baseLayout = defaultOption.layoutByBreakpoint;
70
+ const layouts = settings?.layouts ?? [];
71
+ const options = layouts
72
+ .map(layout => normalizeLayoutOption(layout, baseLayout, breakpoints))
73
+ .filter((option) => Boolean(option));
74
+ const optionsWithDefault = options.some(option => option.id === defaultOption.id) ? options : [...options, defaultOption];
75
+ const selectedFromServer = settings?.selectedLayoutId && optionsWithDefault.some(option => option.id === settings.selectedLayoutId)
76
+ ? settings.selectedLayoutId
77
+ : optionsWithDefault[0]?.id ?? defaultOption.id;
78
+ return { options: optionsWithDefault, selectedId: selectedFromServer };
79
+ };
80
+ const mapOptionToSettingsLayout = (option) => ({
81
+ id: option.id,
82
+ name: option.name,
83
+ layoutByBreakpoint: Object.fromEntries(Object.entries(option.layoutByBreakpoint).map(([breakpoint, config]) => [
84
+ breakpoint,
85
+ {
86
+ columns: config.columns,
87
+ widgets: Object.fromEntries(Object.entries(config.widgets).map(([id, widget]) => [
88
+ id,
89
+ {
90
+ columnSpan: widget.defaultSize.columnSpan,
91
+ rowSpan: widget.defaultSize.rowSpan,
92
+ columnOffset: widget.defaultSize.columnOffset,
93
+ isHidden: widget.initialState?.isHidden,
94
+ isCollapsed: widget.initialState?.isCollapsed,
95
+ },
96
+ ])),
97
+ },
98
+ ])),
99
+ });
100
+ export const buildLayoutSettingsPayload = (options, selectedId) => ({
101
+ layouts: options.map(mapOptionToSettingsLayout),
102
+ selectedLayoutId: selectedId && options.some(option => option.id === selectedId) ? selectedId : options[0]?.id,
103
+ });
104
+ export const buildPresetFromState = (state, baseLayoutByBreakpoint, breakpoints = DEFAULT_BREAKPOINTS) => {
105
+ if (!state) {
106
+ return Object.fromEntries(Object.entries(baseLayoutByBreakpoint).map(([breakpoint, config]) => [breakpoint, cloneLayoutConfig(config)]));
107
+ }
108
+ const layoutByBreakpoint = {};
109
+ const hiddenSet = new Set(state.hidden);
110
+ const collapsedSet = new Set(state.collapsed);
111
+ const sizeMemory = state.sizeMemory ?? {};
112
+ const layoutMemory = state.layoutMemory ?? {};
113
+ const itemMap = new Map(state.items.map(item => [item.id, item]));
114
+ breakpoints.forEach(breakpoint => {
115
+ const base = baseLayoutByBreakpoint[breakpoint] ??
116
+ baseLayoutByBreakpoint[String(breakpoint)] ??
117
+ Object.values(baseLayoutByBreakpoint)[0];
118
+ if (!base)
119
+ return;
120
+ const widgets = {};
121
+ const memoryForBreakpoint = layoutMemory[String(breakpoint)] ?? {};
122
+ Object.keys(base.widgets).forEach(id => {
123
+ const baseConfig = base.widgets[id];
124
+ const item = itemMap.get(id);
125
+ const rememberedSnapshot = memoryForBreakpoint[id];
126
+ const isHidden = hiddenSet.has(id) || !item;
127
+ const isCollapsed = collapsedSet.has(id);
128
+ const rememberedSize = sizeMemory[id] ?? item?.rowSpan ?? rememberedSnapshot?.rowSpan ?? baseConfig.defaultSize.rowSpan;
129
+ widgets[id] = {
130
+ defaultSize: {
131
+ columnSpan: item?.columnSpan ?? rememberedSnapshot?.columnSpan ?? baseConfig.defaultSize.columnSpan,
132
+ rowSpan: rememberedSize,
133
+ columnOffset: item?.columnOffset ?? rememberedSnapshot?.columnOffset ?? baseConfig.defaultSize.columnOffset,
134
+ },
135
+ limits: baseConfig.limits,
136
+ initialState: {
137
+ ...baseConfig.initialState,
138
+ isHidden,
139
+ isCollapsed,
140
+ },
141
+ };
142
+ });
143
+ layoutByBreakpoint[breakpoint] = {
144
+ columns: base.columns,
145
+ widgets,
146
+ };
147
+ });
148
+ return layoutByBreakpoint;
149
+ };
150
+ export const createWidgetLayoutsRemoteHandlers = ({ defaultOption, breakpoints = DEFAULT_BREAKPOINTS, loadSettings, saveSettings, skipWhenStorybook = true, }) => {
151
+ const shouldSkipRemote = skipWhenStorybook && isStorybookRuntime();
152
+ const loadLayouts = async () => {
153
+ if (!loadSettings || shouldSkipRemote) {
154
+ return { options: [defaultOption], selectedId: defaultOption.id };
155
+ }
156
+ try {
157
+ const response = await loadSettings();
158
+ const normalized = normalizeWidgetLayoutSettings(response, defaultOption, breakpoints);
159
+ return normalized ?? { options: [defaultOption], selectedId: defaultOption.id };
160
+ }
161
+ catch (error) {
162
+ console.warn('Failed to load widget layouts', error);
163
+ return { options: [defaultOption], selectedId: defaultOption.id };
164
+ }
165
+ };
166
+ const saveLayouts = async (options, selectedId) => {
167
+ if (!saveSettings || shouldSkipRemote)
168
+ return;
169
+ const safeOptions = options.length ? options : [defaultOption];
170
+ const resolvedSelected = selectedId && safeOptions.some(option => option.id === selectedId) ? selectedId : safeOptions[0]?.id ?? defaultOption.id;
171
+ const payload = buildLayoutSettingsPayload(safeOptions, resolvedSelected);
172
+ try {
173
+ await saveSettings(payload);
174
+ }
175
+ catch (error) {
176
+ console.warn('Failed to save widget layouts', error);
177
+ }
178
+ };
179
+ return { loadLayouts, saveLayouts };
180
+ };
181
+ //# sourceMappingURL=layoutPersistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutPersistence.js","sourceRoot":"","sources":["../../../src/component/widget-board/layoutPersistence.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import type { BoardProps } from '@cloudscape-design/board-components/board';
3
- import type { PneLayoutOption } from './PneLayoutsPanel';
3
+ import type { WidgetLayoutOption } from './WidgetLayoutsPanel';
4
4
  export type WidgetId = string;
5
5
  export type WidgetLayoutSnapshot = {
6
6
  columnSpan?: number;
@@ -31,12 +31,6 @@ export type BreakpointLayoutConfig = {
31
31
  columns: number;
32
32
  widgets: Record<WidgetId, WidgetLayoutConfig>;
33
33
  };
34
- export type WidgetLayoutPresetSource = 'static' | 'remote-live' | 'remote-cache';
35
- export type WidgetLayoutPreset = {
36
- layoutByBreakpoint: Record<number | string, BreakpointLayoutConfig>;
37
- source: WidgetLayoutPresetSource;
38
- version?: string;
39
- };
40
34
  export type WidgetDefinition = {
41
35
  id: WidgetId;
42
36
  title: string;
@@ -53,14 +47,8 @@ export type WidgetBoardState = {
53
47
  sizeMemory: Partial<Record<WidgetId, number>>;
54
48
  layoutMemory: WidgetLayoutMemory;
55
49
  };
56
- export type WidgetBoardLayoutOption = PneLayoutOption & {
57
- preset: WidgetLayoutPreset;
58
- };
59
- export type WidgetBoardLayouts = {
60
- options?: WidgetBoardLayoutOption[];
61
- selectedId?: string;
62
- initialSelectedId?: string;
63
- onSelect?: (id: string) => void;
50
+ export type WidgetBoardLayoutOption = WidgetLayoutOption & {
51
+ layoutByBreakpoint: Record<number | string, BreakpointLayoutConfig>;
64
52
  };
65
53
  export type WidgetBoardLoadLayoutsResult = {
66
54
  options: WidgetBoardLayoutOption[];
@@ -69,13 +57,6 @@ export type WidgetBoardLoadLayoutsResult = {
69
57
  export type WidgetBoardProps = {
70
58
  widgets: WidgetDefinition[];
71
59
  layoutByBreakpoint: Record<number | string, BreakpointLayoutConfig>;
72
- breakpoints?: readonly number[];
73
- storageKey?: string;
74
- loadLayouts?: () => Promise<WidgetBoardLoadLayoutsResult | null>;
75
- layouts?: WidgetBoardLayouts;
76
- empty?: React.ReactNode;
77
- hideNavigationArrows?: boolean;
78
- onLayoutPersist?: (state: WidgetBoardState) => void;
79
- isWidgetEnabled?: (definition: WidgetDefinition) => boolean;
80
- className?: string;
60
+ loadLayouts: () => Promise<WidgetBoardLoadLayoutsResult | null>;
61
+ saveLayouts: (options: WidgetBoardLayoutOption[], selectedId?: string) => Promise<void>;
81
62
  };
@@ -0,0 +1,24 @@
1
+ import type { WidgetBoardLayoutOption, WidgetBoardLoadLayoutsResult, WidgetBoardState } from './types';
2
+ import type { WidgetLayoutSettings } from './layoutPersistence';
3
+ type UseWidgetLayoutsManagerParams = {
4
+ defaultOption: WidgetBoardLayoutOption;
5
+ breakpoints?: readonly number[];
6
+ loadSettings?: () => Promise<WidgetLayoutSettings | null | undefined>;
7
+ saveSettings?: (settings: WidgetLayoutSettings) => Promise<void>;
8
+ lockedLayoutIds?: string[];
9
+ skipRemoteInStorybook?: boolean;
10
+ };
11
+ export type WidgetLayoutsManager = {
12
+ layoutOptions: WidgetBoardLayoutOption[];
13
+ selectedLayoutId?: string;
14
+ layoutState: WidgetBoardState | null;
15
+ hiddenCount: number;
16
+ loadLayouts: () => Promise<WidgetBoardLoadLayoutsResult>;
17
+ handleLayoutPersist: (state: WidgetBoardState) => void;
18
+ selectLayout: (id: string) => Promise<void>;
19
+ addLayout: (name: string) => Promise<void>;
20
+ updateLayout: (id: string) => Promise<void>;
21
+ deleteLayout: (id: string) => Promise<void>;
22
+ };
23
+ export declare const useWidgetLayoutsManager: ({ defaultOption, breakpoints, loadSettings, saveSettings, lockedLayoutIds, skipRemoteInStorybook, }: UseWidgetLayoutsManagerParams) => WidgetLayoutsManager;
24
+ export {};
@@ -0,0 +1,87 @@
1
+ import { useCallback, useMemo, useState } from 'react';
2
+ import { DEFAULT_BREAKPOINTS } from '../../common/responsive/breakpoints';
3
+ import { buildPresetFromState, createWidgetLayoutsRemoteHandlers } from './layoutPersistence';
4
+ const createLayoutId = () => {
5
+ if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
6
+ return crypto.randomUUID();
7
+ }
8
+ return `layout-${Date.now()}`;
9
+ };
10
+ export const useWidgetLayoutsManager = ({ defaultOption, breakpoints = DEFAULT_BREAKPOINTS, loadSettings, saveSettings, lockedLayoutIds, skipRemoteInStorybook = true, }) => {
11
+ const lockedIdsSet = useMemo(() => new Set(lockedLayoutIds ?? [defaultOption.id]), [defaultOption.id, lockedLayoutIds]);
12
+ const [layoutOptions, setLayoutOptions] = useState([defaultOption]);
13
+ const [selectedLayoutId, setSelectedLayoutId] = useState(defaultOption.id);
14
+ const [layoutState, setLayoutState] = useState(null);
15
+ const { loadLayouts: loadRemoteLayouts, saveLayouts: saveRemoteLayouts } = useMemo(() => createWidgetLayoutsRemoteHandlers({
16
+ defaultOption,
17
+ breakpoints,
18
+ loadSettings,
19
+ saveSettings,
20
+ skipWhenStorybook: skipRemoteInStorybook,
21
+ }), [breakpoints, defaultOption, loadSettings, saveSettings, skipRemoteInStorybook]);
22
+ const handleLayoutPersist = useCallback((state) => {
23
+ setLayoutState(state);
24
+ }, []);
25
+ const ensureSelected = useCallback((options, candidate) => {
26
+ if (candidate && options.some(option => option.id === candidate))
27
+ return candidate;
28
+ return options[0]?.id;
29
+ }, []);
30
+ const loadLayouts = useCallback(async () => {
31
+ const loaded = await loadRemoteLayouts();
32
+ const options = loaded.options?.length ? loaded.options : [defaultOption];
33
+ const selected = loaded.selectedId && options.some(option => option.id === loaded.selectedId) ? loaded.selectedId : options[0]?.id;
34
+ setLayoutOptions(options);
35
+ setSelectedLayoutId(selected);
36
+ return { options, selectedId: selected };
37
+ }, [defaultOption, loadRemoteLayouts]);
38
+ const persistLayouts = useCallback(async (options, selectedId) => {
39
+ const nextOptions = options.length ? options : [defaultOption];
40
+ const resolvedSelected = ensureSelected(nextOptions, selectedId);
41
+ setLayoutOptions(nextOptions);
42
+ setSelectedLayoutId(resolvedSelected);
43
+ await saveRemoteLayouts(nextOptions, resolvedSelected);
44
+ }, [defaultOption, ensureSelected, saveRemoteLayouts]);
45
+ const selectLayout = useCallback(async (id) => {
46
+ if (!id || id === selectedLayoutId)
47
+ return;
48
+ await persistLayouts(layoutOptions, id);
49
+ }, [layoutOptions, persistLayouts, selectedLayoutId]);
50
+ const addLayout = useCallback(async (name) => {
51
+ const layoutByBreakpoint = buildPresetFromState(layoutState, defaultOption.layoutByBreakpoint, breakpoints);
52
+ const option = {
53
+ id: createLayoutId(),
54
+ name: name.trim() || 'Custom layout',
55
+ layoutByBreakpoint,
56
+ };
57
+ await persistLayouts([...layoutOptions, option], option.id);
58
+ }, [breakpoints, defaultOption.layoutByBreakpoint, layoutOptions, layoutState, persistLayouts]);
59
+ const updateLayout = useCallback(async (id) => {
60
+ if (!id || lockedIdsSet.has(id))
61
+ return;
62
+ const layoutByBreakpoint = buildPresetFromState(layoutState, defaultOption.layoutByBreakpoint, breakpoints);
63
+ const nextOptions = layoutOptions.map(option => (option.id === id ? { ...option, layoutByBreakpoint } : option));
64
+ await persistLayouts(nextOptions, selectedLayoutId);
65
+ }, [breakpoints, defaultOption.layoutByBreakpoint, layoutOptions, layoutState, lockedIdsSet, persistLayouts, selectedLayoutId]);
66
+ const deleteLayout = useCallback(async (id) => {
67
+ if (!id || lockedIdsSet.has(id))
68
+ return;
69
+ const nextOptions = layoutOptions.filter(option => option.id !== id);
70
+ const nextSelected = id === selectedLayoutId ? ensureSelected(nextOptions) : selectedLayoutId;
71
+ await persistLayouts(nextOptions, nextSelected);
72
+ }, [ensureSelected, layoutOptions, lockedIdsSet, persistLayouts, selectedLayoutId]);
73
+ const hiddenCount = layoutState?.hidden.length ?? 0;
74
+ return {
75
+ layoutOptions,
76
+ selectedLayoutId,
77
+ layoutState,
78
+ hiddenCount,
79
+ loadLayouts,
80
+ handleLayoutPersist,
81
+ selectLayout,
82
+ addLayout,
83
+ updateLayout,
84
+ deleteLayout,
85
+ };
86
+ };
87
+ //# sourceMappingURL=useWidgetLayoutsManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWidgetLayoutsManager.js","sourceRoot":"","sources":["../../../src/component/widget-board/useWidgetLayoutsManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AAGzE,OAAO,EAAE,oBAAoB,EAAE,iCAAiC,EAAE,MAAM,qBAAqB,CAAA;AAwB7F,MAAM,cAAc,GAAG,GAAG,EAAE;IACxB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC3E,OAAO,MAAM,CAAC,UAAU,EAAE,CAAA;IAC9B,CAAC;IACD,OAAO,UAAU,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;AACjC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,EACpC,aAAa,EACb,WAAW,GAAG,mBAAmB,EACjC,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,qBAAqB,GAAG,IAAI,GACA,EAAwB,EAAE;IACtD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,eAAe,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC,CAAA;IAEvH,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAA4B,CAAC,aAAa,CAAC,CAAC,CAAA;IAC9F,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAqB,aAAa,CAAC,EAAE,CAAC,CAAA;IAC9F,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAA0B,IAAI,CAAC,CAAA;IAE7E,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAC9E,GAAG,EAAE,CACD,iCAAiC,CAAC;QAC9B,aAAa;QACb,WAAW;QACX,YAAY;QACZ,YAAY;QACZ,iBAAiB,EAAE,qBAAqB;KAC3C,CAAC,EACN,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,qBAAqB,CAAC,CAClF,CAAA;IAED,MAAM,mBAAmB,GAAG,WAAW,CAAC,CAAC,KAAuB,EAAE,EAAE;QAChE,cAAc,CAAC,KAAK,CAAC,CAAA;IACzB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,cAAc,GAAG,WAAW,CAC9B,CAAC,OAAkC,EAAE,SAAkB,EAAE,EAAE;QACvD,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC;YAAE,OAAO,SAAS,CAAA;QAClF,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;IACzB,CAAC,EACD,EAAE,CACL,CAAA;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,IAA2C,EAAE;QAC9E,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAA;QACxC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAA;QACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;QAClI,gBAAgB,CAAC,OAAO,CAAC,CAAA;QACzB,mBAAmB,CAAC,QAAQ,CAAC,CAAA;QAC7B,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAA;IAC5C,CAAC,EAAE,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC,CAAA;IAEtC,MAAM,cAAc,GAAG,WAAW,CAC9B,KAAK,EAAE,OAAkC,EAAE,UAAmB,EAAE,EAAE;QAC9D,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAA;QAC9D,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;QAEhE,gBAAgB,CAAC,WAAW,CAAC,CAAA;QAC7B,mBAAmB,CAAC,gBAAgB,CAAC,CAAA;QAErC,MAAM,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAA;IAC1D,CAAC,EACD,CAAC,aAAa,EAAE,cAAc,EAAE,iBAAiB,CAAC,CACrD,CAAA;IAED,MAAM,YAAY,GAAG,WAAW,CAC5B,KAAK,EAAE,EAAU,EAAE,EAAE;QACjB,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,gBAAgB;YAAE,OAAM;QAC1C,MAAM,cAAc,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IAC3C,CAAC,EACD,CAAC,aAAa,EAAE,cAAc,EAAE,gBAAgB,CAAC,CACpD,CAAA;IAED,MAAM,SAAS,GAAG,WAAW,CACzB,KAAK,EAAE,IAAY,EAAE,EAAE;QACnB,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,WAAW,EAAE,aAAa,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAA;QAC3G,MAAM,MAAM,GAA4B;YACpC,EAAE,EAAE,cAAc,EAAE;YACpB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,eAAe;YACpC,kBAAkB;SACrB,CAAA;QACD,MAAM,cAAc,CAAC,CAAC,GAAG,aAAa,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;IAC/D,CAAC,EACD,CAAC,WAAW,EAAE,aAAa,CAAC,kBAAkB,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,CAAC,CAC9F,CAAA;IAED,MAAM,YAAY,GAAG,WAAW,CAC5B,KAAK,EAAE,EAAU,EAAE,EAAE;QACjB,IAAI,CAAC,EAAE,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAM;QACvC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,WAAW,EAAE,aAAa,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAA;QAC3G,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;QAChH,MAAM,cAAc,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAA;IACvD,CAAC,EACD,CAAC,WAAW,EAAE,aAAa,CAAC,kBAAkB,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAC9H,CAAA;IAED,MAAM,YAAY,GAAG,WAAW,CAC5B,KAAK,EAAE,EAAU,EAAE,EAAE;QACjB,IAAI,CAAC,EAAE,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAM;QACvC,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QACpE,MAAM,YAAY,GAAG,EAAE,KAAK,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAA;QAC7F,MAAM,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;IACnD,CAAC,EACD,CAAC,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAClF,CAAA;IAED,MAAM,WAAW,GAAG,WAAW,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,CAAA;IAEnD,OAAO;QACH,aAAa;QACb,gBAAgB;QAChB,WAAW;QACX,WAAW;QACX,WAAW;QACX,mBAAmB;QACnB,YAAY;QACZ,SAAS;QACT,YAAY;QACZ,YAAY;KACf,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,14 @@
1
+ type PanelBridge = {
2
+ items: import('./WidgetLayoutsPanel').WidgetLayoutOption[];
3
+ selectedId?: string;
4
+ onSelect?: (id: string) => void;
5
+ onDelete?: (id: string) => void;
6
+ onUpdate?: (id: string) => void;
7
+ onAdd?: (name: string) => void;
8
+ lockedIds?: string[];
9
+ };
10
+ type Listener = (state: PanelBridge | null) => void;
11
+ export declare const setWidgetLayoutsPanelBridge: (panel: PanelBridge | null) => void;
12
+ export declare const subscribeWidgetLayoutsPanelBridge: (listener: Listener) => () => boolean;
13
+ export declare const getWidgetLayoutsPanelBridge: () => PanelBridge | null;
14
+ export {};
@@ -0,0 +1,16 @@
1
+ let state = null;
2
+ const listeners = new Set();
3
+ const emit = () => {
4
+ listeners.forEach(listener => listener(state));
5
+ };
6
+ export const setWidgetLayoutsPanelBridge = (panel) => {
7
+ state = panel;
8
+ emit();
9
+ };
10
+ export const subscribeWidgetLayoutsPanelBridge = (listener) => {
11
+ listeners.add(listener);
12
+ listener(state);
13
+ return () => listeners.delete(listener);
14
+ };
15
+ export const getWidgetLayoutsPanelBridge = () => state;
16
+ //# sourceMappingURL=widgetLayoutsPanelStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widgetLayoutsPanelStore.js","sourceRoot":"","sources":["../../../src/component/widget-board/widgetLayoutsPanelStore.ts"],"names":[],"mappings":"AAYA,IAAI,KAAK,GAAuB,IAAI,CAAA;AACpC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAY,CAAA;AAErC,MAAM,IAAI,GAAG,GAAG,EAAE;IACd,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AAClD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,KAAyB,EAAE,EAAE;IACrE,KAAK,GAAG,KAAK,CAAA;IACb,IAAI,EAAE,CAAA;AACV,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,QAAkB,EAAE,EAAE;IACpE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,CAAA;IACf,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;AAC3C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,EAAE,CAAC,KAAK,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pne-ui",
3
- "version": "3.0.26",
3
+ "version": "3.0.27",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",