pne-ui 3.0.26 → 3.0.28

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 +3 -1
  8. package/cjs/component/widget-board/index.js +3 -1
  9. package/cjs/component/widget-board/index.js.map +1 -1
  10. package/cjs/component/widget-board/layoutPersistence.d.ts +2 -0
  11. package/cjs/component/widget-board/layoutPersistence.js +63 -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 +3 -1
  26. package/esm/component/widget-board/index.js +3 -1
  27. package/esm/component/widget-board/index.js.map +1 -1
  28. package/esm/component/widget-board/layoutPersistence.d.ts +2 -0
  29. package/esm/component/widget-board/layoutPersistence.js +59 -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,6 @@
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 './widgetLayoutsPanelStore';
4
6
  //# 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"}
@@ -0,0 +1,2 @@
1
+ import type { BreakpointLayoutConfig, WidgetBoardState } from './types';
2
+ export declare const buildPresetFromState: (state: WidgetBoardState | null, baseLayoutByBreakpoint: Record<number | string, BreakpointLayoutConfig>, breakpoints?: readonly number[]) => Record<number | string, BreakpointLayoutConfig>;
@@ -0,0 +1,59 @@
1
+ import { DEFAULT_BREAKPOINTS } from '../../common/responsive/breakpoints';
2
+ const cloneLayoutConfig = (config) => ({
3
+ columns: config.columns,
4
+ widgets: Object.fromEntries(Object.entries(config.widgets).map(([id, widget]) => [
5
+ id,
6
+ {
7
+ defaultSize: { ...widget.defaultSize },
8
+ limits: widget.limits ? { ...widget.limits } : undefined,
9
+ initialState: widget.initialState ? { ...widget.initialState } : undefined,
10
+ },
11
+ ])),
12
+ });
13
+ export const buildPresetFromState = (state, baseLayoutByBreakpoint, breakpoints = DEFAULT_BREAKPOINTS) => {
14
+ if (!state) {
15
+ return Object.fromEntries(Object.entries(baseLayoutByBreakpoint).map(([breakpoint, config]) => [breakpoint, cloneLayoutConfig(config)]));
16
+ }
17
+ const layoutByBreakpoint = {};
18
+ const hiddenSet = new Set(state.hidden);
19
+ const collapsedSet = new Set(state.collapsed);
20
+ const sizeMemory = state.sizeMemory ?? {};
21
+ const layoutMemory = state.layoutMemory ?? {};
22
+ const itemMap = new Map(state.items.map(item => [item.id, item]));
23
+ breakpoints.forEach(breakpoint => {
24
+ const base = baseLayoutByBreakpoint[breakpoint] ??
25
+ baseLayoutByBreakpoint[String(breakpoint)] ??
26
+ Object.values(baseLayoutByBreakpoint)[0];
27
+ if (!base)
28
+ return;
29
+ const widgets = {};
30
+ const memoryForBreakpoint = layoutMemory[String(breakpoint)] ?? {};
31
+ Object.keys(base.widgets).forEach(id => {
32
+ const baseConfig = base.widgets[id];
33
+ const item = itemMap.get(id);
34
+ const rememberedSnapshot = memoryForBreakpoint[id];
35
+ const isHidden = hiddenSet.has(id) || !item;
36
+ const isCollapsed = collapsedSet.has(id);
37
+ const rememberedSize = sizeMemory[id] ?? item?.rowSpan ?? rememberedSnapshot?.rowSpan ?? baseConfig.defaultSize.rowSpan;
38
+ widgets[id] = {
39
+ defaultSize: {
40
+ columnSpan: item?.columnSpan ?? rememberedSnapshot?.columnSpan ?? baseConfig.defaultSize.columnSpan,
41
+ rowSpan: rememberedSize,
42
+ columnOffset: item?.columnOffset ?? rememberedSnapshot?.columnOffset ?? baseConfig.defaultSize.columnOffset,
43
+ },
44
+ limits: baseConfig.limits,
45
+ initialState: {
46
+ ...baseConfig.initialState,
47
+ isHidden,
48
+ isCollapsed,
49
+ },
50
+ };
51
+ });
52
+ layoutByBreakpoint[breakpoint] = {
53
+ columns: base.columns,
54
+ widgets,
55
+ };
56
+ });
57
+ return layoutByBreakpoint;
58
+ };
59
+ //# 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":"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"}
@@ -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.28",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",