@treasuryspatial/viewer-react 0.1.44 → 0.1.47

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 (58) hide show
  1. package/dist/AccessAssetsMenu.d.ts.map +1 -1
  2. package/dist/AccessAssetsMenu.js +53 -45
  3. package/dist/AssetUploadCard.d.ts +2 -1
  4. package/dist/AssetUploadCard.d.ts.map +1 -1
  5. package/dist/AssetUploadCard.js +3 -2
  6. package/dist/ViewControls.d.ts +19 -2
  7. package/dist/ViewControls.d.ts.map +1 -1
  8. package/dist/ViewControls.js +65 -16
  9. package/dist/ViewerCanvas.d.ts.map +1 -1
  10. package/dist/ViewerCanvas.js +15 -40
  11. package/dist/composerRouting.d.ts +6 -0
  12. package/dist/composerRouting.d.ts.map +1 -1
  13. package/dist/composerRouting.js +18 -9
  14. package/dist/index.d.ts +13 -6
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +6 -4
  17. package/dist/tsconfig.tsbuildinfo +1 -1
  18. package/dist/useAdminGallery.d.ts +2 -30
  19. package/dist/useAdminGallery.d.ts.map +1 -1
  20. package/dist/useAdminGallery.js +15 -6
  21. package/dist/useAdminImageStream.d.ts +3 -31
  22. package/dist/useAdminImageStream.d.ts.map +1 -1
  23. package/dist/useAdminImageStream.js +22 -10
  24. package/dist/useComposerAccessGate.js +4 -4
  25. package/dist/useComposerAuthState.d.ts +1 -0
  26. package/dist/useComposerAuthState.d.ts.map +1 -1
  27. package/dist/useComposerAuthState.js +4 -1
  28. package/dist/useComposerModeDraftState.d.ts +21 -0
  29. package/dist/useComposerModeDraftState.d.ts.map +1 -0
  30. package/dist/useComposerModeDraftState.js +89 -0
  31. package/dist/useComposerUiState.d.ts +11 -4
  32. package/dist/useComposerUiState.d.ts.map +1 -1
  33. package/dist/useComposerUiState.js +103 -79
  34. package/dist/useComposerWorkspaceSession.d.ts +21 -0
  35. package/dist/useComposerWorkspaceSession.d.ts.map +1 -0
  36. package/dist/useComposerWorkspaceSession.js +291 -0
  37. package/dist/useGrasshopperSession.d.ts.map +1 -1
  38. package/dist/useGrasshopperSession.js +10 -4
  39. package/dist/useModeShellState.d.ts.map +1 -1
  40. package/dist/useModeShellState.js +52 -6
  41. package/dist/usePromptPackSelection.d.ts +20 -0
  42. package/dist/usePromptPackSelection.d.ts.map +1 -0
  43. package/dist/usePromptPackSelection.js +81 -0
  44. package/dist/usePromptPackSelectionByMode.d.ts +2 -1
  45. package/dist/usePromptPackSelectionByMode.d.ts.map +1 -1
  46. package/dist/usePromptPackSelectionByMode.js +35 -22
  47. package/dist/useRightRailTabs.js +1 -1
  48. package/dist/useSessionLogout.d.ts.map +1 -1
  49. package/dist/useSessionLogout.js +12 -1
  50. package/dist/useSessionRevocationPing.d.ts.map +1 -1
  51. package/dist/useSessionRevocationPing.js +15 -2
  52. package/dist/useShellPanelToggle.d.ts +7 -1
  53. package/dist/useShellPanelToggle.d.ts.map +1 -1
  54. package/dist/useShellPanelToggle.js +14 -6
  55. package/dist/workspaceSession.d.ts +36 -0
  56. package/dist/workspaceSession.d.ts.map +1 -0
  57. package/dist/workspaceSession.js +141 -0
  58. package/package.json +8 -8
@@ -0,0 +1,141 @@
1
+ export const WORKSPACE_SESSION_SCHEMA_VERSION = "2026-05-08";
2
+ const asRecord = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : null;
3
+ const normalizeStringRecord = (value) => {
4
+ const record = asRecord(value);
5
+ if (!record)
6
+ return {};
7
+ return Object.fromEntries(Object.entries(record).filter(([, entry]) => typeof entry === "string" && entry.length > 0));
8
+ };
9
+ const normalizeBooleanRecord = (value) => {
10
+ const record = asRecord(value);
11
+ if (!record)
12
+ return {};
13
+ return Object.fromEntries(Object.entries(record).filter(([, entry]) => typeof entry === "boolean"));
14
+ };
15
+ const normalizeNullableStringRecord = (value) => {
16
+ const record = asRecord(value);
17
+ if (!record)
18
+ return {};
19
+ return Object.fromEntries(Object.entries(record).filter(([, entry]) => typeof entry === "string" || entry === null));
20
+ };
21
+ const normalizeUnknownRecord = (value) => {
22
+ const record = asRecord(value);
23
+ if (!record)
24
+ return {};
25
+ return Object.fromEntries(Object.entries(record));
26
+ };
27
+ const isInlineDataUrl = (value) => typeof value === "string" && /^data:[^;]+;base64,/i.test(value);
28
+ const stripInlineDataUrls = (value) => {
29
+ if (isInlineDataUrl(value))
30
+ return null;
31
+ if (Array.isArray(value))
32
+ return value.map(stripInlineDataUrls);
33
+ const record = asRecord(value);
34
+ if (!record)
35
+ return value;
36
+ return Object.fromEntries(Object.entries(record).map(([key, entry]) => [key, stripInlineDataUrls(entry)]));
37
+ };
38
+ const normalizeRenderStateRecord = (value) => {
39
+ const record = normalizeUnknownRecord(value);
40
+ return Object.fromEntries(Object.entries(record).map(([modeId, entry]) => [modeId, stripInlineDataUrls(entry)]));
41
+ };
42
+ const trimOptional = (value) => {
43
+ const trimmed = value?.trim();
44
+ return trimmed ? trimmed : undefined;
45
+ };
46
+ const normalizePromptPackRef = (value) => {
47
+ if (!value || typeof value !== "object" || Array.isArray(value))
48
+ return null;
49
+ const id = trimOptional(value.id);
50
+ const version = trimOptional(value.version);
51
+ if (!id && !version)
52
+ return null;
53
+ return {
54
+ ...(id ? { id } : {}),
55
+ ...(version ? { version } : {}),
56
+ };
57
+ };
58
+ const normalizePromptPackRecord = (value) => {
59
+ const record = asRecord(value);
60
+ if (!record)
61
+ return {};
62
+ return Object.fromEntries(Object.entries(record)
63
+ .map(([modeId, entry]) => [modeId, normalizePromptPackRef(entry)])
64
+ .filter(([, entry]) => entry !== null));
65
+ };
66
+ export const createEmptyComposerWorkspaceUiState = () => ({
67
+ primaryTabByMode: {},
68
+ promptKitOpenByMode: {},
69
+ moduleKitOpenByMode: {},
70
+ activeImaginePresetIdByMode: {},
71
+ autoGenerateEnabledByMode: {},
72
+ controlPanelOpenByMode: {},
73
+ rightPanelOpenByMode: {},
74
+ rightPanelTabByMode: {},
75
+ });
76
+ export const createEmptyComposerWorkspaceSession = (createDraft, options = {}) => {
77
+ const activeMode = options.activeMode || "imagine";
78
+ const normalizedModeIds = Array.from(new Set([activeMode, ...(options.modeIds ?? [])])).filter(Boolean);
79
+ const modeDraftState = normalizedModeIds.reduce((acc, modeId) => {
80
+ acc[modeId] = createDraft();
81
+ return acc;
82
+ }, {});
83
+ return {
84
+ schemaVersion: WORKSPACE_SESSION_SCHEMA_VERSION,
85
+ activeMode,
86
+ uiState: createEmptyComposerWorkspaceUiState(),
87
+ modeDraftState,
88
+ promptPackSelectionByMode: {},
89
+ renderStateByMode: {},
90
+ };
91
+ };
92
+ export const restoreComposerWorkspaceSession = (raw, options) => {
93
+ const fallback = createEmptyComposerWorkspaceSession(options.createDraft, {
94
+ activeMode: options.activeMode,
95
+ modeIds: options.modeIds,
96
+ });
97
+ const record = asRecord(raw);
98
+ if (!record)
99
+ return fallback;
100
+ const rawUiState = asRecord(record.uiState);
101
+ const rawDraftState = asRecord(record.modeDraftState);
102
+ const rawPromptPackState = asRecord(record.promptPackSelectionByMode);
103
+ const rawRenderState = asRecord(record.renderStateByMode);
104
+ const normalizedModeIds = Array.from(new Set([
105
+ fallback.activeMode,
106
+ ...(options.modeIds ?? []),
107
+ ...Object.keys(rawDraftState ?? {}),
108
+ ...Object.keys(rawPromptPackState ?? {}),
109
+ ...Object.keys(rawRenderState ?? {}),
110
+ ])).filter(Boolean);
111
+ const modeDraftState = normalizedModeIds.reduce((acc, modeId) => {
112
+ acc[modeId] = options.restoreDraft(rawDraftState?.[modeId]);
113
+ return acc;
114
+ }, {});
115
+ return {
116
+ schemaVersion: typeof record.schemaVersion === "string" && record.schemaVersion.trim().length > 0
117
+ ? record.schemaVersion
118
+ : fallback.schemaVersion,
119
+ workspaceSessionId: typeof record.workspaceSessionId === "string" && record.workspaceSessionId.trim().length > 0
120
+ ? record.workspaceSessionId
121
+ : undefined,
122
+ label: typeof record.label === "string" && record.label.trim().length > 0 ? record.label : undefined,
123
+ activeMode: typeof record.activeMode === "string" && record.activeMode.trim().length > 0
124
+ ? record.activeMode
125
+ : fallback.activeMode,
126
+ uiState: {
127
+ primaryTabByMode: normalizeStringRecord(rawUiState?.primaryTabByMode),
128
+ promptKitOpenByMode: normalizeBooleanRecord(rawUiState?.promptKitOpenByMode),
129
+ moduleKitOpenByMode: normalizeBooleanRecord(rawUiState?.moduleKitOpenByMode),
130
+ activeImaginePresetIdByMode: normalizeNullableStringRecord(rawUiState?.activeImaginePresetIdByMode),
131
+ autoGenerateEnabledByMode: normalizeBooleanRecord(rawUiState?.autoGenerateEnabledByMode),
132
+ controlPanelOpenByMode: normalizeBooleanRecord(rawUiState?.controlPanelOpenByMode),
133
+ rightPanelOpenByMode: normalizeBooleanRecord(rawUiState?.rightPanelOpenByMode),
134
+ rightPanelTabByMode: normalizeStringRecord(rawUiState?.rightPanelTabByMode),
135
+ },
136
+ modeDraftState,
137
+ promptPackSelectionByMode: normalizePromptPackRecord(rawPromptPackState),
138
+ renderStateByMode: normalizeRenderStateRecord(rawRenderState),
139
+ updatedAt: typeof record.updatedAt === "string" && record.updatedAt.trim().length > 0 ? record.updatedAt : undefined,
140
+ };
141
+ };
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@treasuryspatial/viewer-react",
3
- "version": "0.1.44",
3
+ "version": "0.1.47",
4
4
  "type": "module",
5
- "license": "UNLICENSED",
5
+ "license": "MIT",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
8
  "exports": {
@@ -18,12 +18,12 @@
18
18
  "access": "public"
19
19
  },
20
20
  "dependencies": {
21
- "@treasuryspatial/mode-policy": "^0.1.5",
22
- "@treasuryspatial/panel-core": "^0.1.5",
23
- "@treasuryspatial/plugin-manifest": "^0.1.3",
24
- "@treasuryspatial/render-kit": "^0.1.17",
25
- "@treasuryspatial/surface-kit": "^0.1.6",
26
- "@treasuryspatial/viewer-kit": "^0.2.31"
21
+ "@treasuryspatial/mode-policy": "^0.1.7",
22
+ "@treasuryspatial/panel-core": "^0.1.14",
23
+ "@treasuryspatial/plugin-manifest": "^0.1.13",
24
+ "@treasuryspatial/render-kit": "^0.1.23",
25
+ "@treasuryspatial/surface-kit": "^0.1.16",
26
+ "@treasuryspatial/viewer-kit": "^0.2.50"
27
27
  },
28
28
  "peerDependencies": {
29
29
  "react": ">=18"