@genesislcap/foundation-workspace 14.406.0-workspaces.7

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 (185) hide show
  1. package/api-extractor.json +5 -0
  2. package/dist/dts/index.d.ts +4 -0
  3. package/dist/dts/index.d.ts.map +1 -0
  4. package/dist/dts/tsdoc-metadata.json +11 -0
  5. package/dist/dts/workspace/filter-registry.d.ts +34 -0
  6. package/dist/dts/workspace/filter-registry.d.ts.map +1 -0
  7. package/dist/dts/workspace/grid-register/grid-register.d.ts +23 -0
  8. package/dist/dts/workspace/grid-register/grid-register.d.ts.map +1 -0
  9. package/dist/dts/workspace/grid-register/grid-register.template.d.ts +4 -0
  10. package/dist/dts/workspace/grid-register/grid-register.template.d.ts.map +1 -0
  11. package/dist/dts/workspace/grid-register/index.d.ts +2 -0
  12. package/dist/dts/workspace/grid-register/index.d.ts.map +1 -0
  13. package/dist/dts/workspace/grid-registry.d.ts +47 -0
  14. package/dist/dts/workspace/grid-registry.d.ts.map +1 -0
  15. package/dist/dts/workspace/index.d.ts +9 -0
  16. package/dist/dts/workspace/index.d.ts.map +1 -0
  17. package/dist/dts/workspace/layout-registry.d.ts +27 -0
  18. package/dist/dts/workspace/layout-registry.d.ts.map +1 -0
  19. package/dist/dts/workspace/layout-wrapper/index.d.ts +2 -0
  20. package/dist/dts/workspace/layout-wrapper/index.d.ts.map +1 -0
  21. package/dist/dts/workspace/layout-wrapper/layout-wrapper.d.ts +14 -0
  22. package/dist/dts/workspace/layout-wrapper/layout-wrapper.d.ts.map +1 -0
  23. package/dist/dts/workspace/layout-wrapper/layout-wrapper.template.d.ts +4 -0
  24. package/dist/dts/workspace/layout-wrapper/layout-wrapper.template.d.ts.map +1 -0
  25. package/dist/dts/workspace/workspace-state.d.ts +45 -0
  26. package/dist/dts/workspace/workspace-state.d.ts.map +1 -0
  27. package/dist/dts/workspace/workspace-state.types.d.ts +26 -0
  28. package/dist/dts/workspace/workspace-state.types.d.ts.map +1 -0
  29. package/dist/dts/workspace/workspace.types.d.ts +25 -0
  30. package/dist/dts/workspace/workspace.types.d.ts.map +1 -0
  31. package/dist/dts/workspace-components.d.ts +22 -0
  32. package/dist/dts/workspace-components.d.ts.map +1 -0
  33. package/dist/dts/workspace-manager/index.d.ts +2 -0
  34. package/dist/dts/workspace-manager/index.d.ts.map +1 -0
  35. package/dist/dts/workspace-manager/workspace-manager.d.ts +70 -0
  36. package/dist/dts/workspace-manager/workspace-manager.d.ts.map +1 -0
  37. package/dist/dts/workspace-manager/workspace-manager.styles.d.ts +2 -0
  38. package/dist/dts/workspace-manager/workspace-manager.styles.d.ts.map +1 -0
  39. package/dist/dts/workspace-manager/workspace-manager.template.d.ts +4 -0
  40. package/dist/dts/workspace-manager/workspace-manager.template.d.ts.map +1 -0
  41. package/dist/esm/index.js +3 -0
  42. package/dist/esm/workspace/filter-registry.js +47 -0
  43. package/dist/esm/workspace/grid-register/grid-register.js +136 -0
  44. package/dist/esm/workspace/grid-register/grid-register.template.js +4 -0
  45. package/dist/esm/workspace/grid-register/index.js +1 -0
  46. package/dist/esm/workspace/grid-registry.js +109 -0
  47. package/dist/esm/workspace/index.js +8 -0
  48. package/dist/esm/workspace/layout-registry.js +45 -0
  49. package/dist/esm/workspace/layout-wrapper/index.js +1 -0
  50. package/dist/esm/workspace/layout-wrapper/layout-wrapper.js +64 -0
  51. package/dist/esm/workspace/layout-wrapper/layout-wrapper.template.js +4 -0
  52. package/dist/esm/workspace/workspace-state.js +193 -0
  53. package/dist/esm/workspace/workspace-state.types.js +1 -0
  54. package/dist/esm/workspace/workspace.types.js +1 -0
  55. package/dist/esm/workspace-components.js +43 -0
  56. package/dist/esm/workspace-manager/index.js +1 -0
  57. package/dist/esm/workspace-manager/workspace-manager.js +436 -0
  58. package/dist/esm/workspace-manager/workspace-manager.styles.js +138 -0
  59. package/dist/esm/workspace-manager/workspace-manager.template.js +259 -0
  60. package/dist/foundation-workspace.api.json +3614 -0
  61. package/dist/foundation-workspace.d.ts +343 -0
  62. package/dist/tsconfig.tsbuildinfo +1 -0
  63. package/docs/.gitkeep +1 -0
  64. package/docs/api/foundation-workspace.defaultfilterregistry.md +17 -0
  65. package/docs/api/foundation-workspace.defaultgridregistry.md +17 -0
  66. package/docs/api/foundation-workspace.defaultlayoutregistry.md +18 -0
  67. package/docs/api/foundation-workspace.defaultworkspacestate._constructor_.md +65 -0
  68. package/docs/api/foundation-workspace.defaultworkspacestate.auth.md +14 -0
  69. package/docs/api/foundation-workspace.defaultworkspacestate.kvstorage.md +14 -0
  70. package/docs/api/foundation-workspace.defaultworkspacestate.md +115 -0
  71. package/docs/api/foundation-workspace.filterregistration.filterkey.md +14 -0
  72. package/docs/api/foundation-workspace.filterregistration.getfiltervalue.md +14 -0
  73. package/docs/api/foundation-workspace.filterregistration.md +98 -0
  74. package/docs/api/foundation-workspace.filterregistration.setfiltervalue.md +14 -0
  75. package/docs/api/foundation-workspace.filterregistry.applyfiltersvalues.md +53 -0
  76. package/docs/api/foundation-workspace.filterregistry.getallfiltersvalues.md +18 -0
  77. package/docs/api/foundation-workspace.filterregistry.md +16 -0
  78. package/docs/api/foundation-workspace.filterregistry.registerfilter.md +81 -0
  79. package/docs/api/foundation-workspace.filterregistry.unregisterfilter.md +53 -0
  80. package/docs/api/foundation-workspace.gridregister.gridkey.md +14 -0
  81. package/docs/api/foundation-workspace.gridregister.gridregistry.md +14 -0
  82. package/docs/api/foundation-workspace.gridregister.md +100 -0
  83. package/docs/api/foundation-workspace.gridregister.workspacestate.md +14 -0
  84. package/docs/api/foundation-workspace.gridregistration.columnapi.md +14 -0
  85. package/docs/api/foundation-workspace.gridregistration.gridapi.md +14 -0
  86. package/docs/api/foundation-workspace.gridregistration.gridkey.md +14 -0
  87. package/docs/api/foundation-workspace.gridregistration.md +98 -0
  88. package/docs/api/foundation-workspace.gridregistry.applyallgridssettings.md +53 -0
  89. package/docs/api/foundation-workspace.gridregistry.applygridsettings.md +72 -0
  90. package/docs/api/foundation-workspace.gridregistry.getallgridssettings.md +18 -0
  91. package/docs/api/foundation-workspace.gridregistry.getgrid.md +53 -0
  92. package/docs/api/foundation-workspace.gridregistry.md +16 -0
  93. package/docs/api/foundation-workspace.gridregistry.registergrid.md +81 -0
  94. package/docs/api/foundation-workspace.gridregistry.unregistergrid.md +53 -0
  95. package/docs/api/foundation-workspace.layoutregistry.applysavedlayouts.md +53 -0
  96. package/docs/api/foundation-workspace.layoutregistry.getlayoutsconfigs.md +18 -0
  97. package/docs/api/foundation-workspace.layoutregistry.md +16 -0
  98. package/docs/api/foundation-workspace.layoutregistry.registerlayout.md +67 -0
  99. package/docs/api/foundation-workspace.layoutregistry.unregisterlayout.md +53 -0
  100. package/docs/api/foundation-workspace.layoutwrapper.layoutkey.md +14 -0
  101. package/docs/api/foundation-workspace.layoutwrapper.layoutregistry.md +14 -0
  102. package/docs/api/foundation-workspace.layoutwrapper.md +81 -0
  103. package/docs/api/foundation-workspace.loadmode.md +16 -0
  104. package/docs/api/foundation-workspace.md +332 -0
  105. package/docs/api/foundation-workspace.savedfiltervalue.filterkey.md +14 -0
  106. package/docs/api/foundation-workspace.savedfiltervalue.md +79 -0
  107. package/docs/api/foundation-workspace.savedfiltervalue.value.md +14 -0
  108. package/docs/api/foundation-workspace.savedgridsettings.columnstate.md +14 -0
  109. package/docs/api/foundation-workspace.savedgridsettings.gridkey.md +14 -0
  110. package/docs/api/foundation-workspace.savedgridsettings.md +99 -0
  111. package/docs/api/foundation-workspace.savedgridsettings.savedat.md +14 -0
  112. package/docs/api/foundation-workspace.savedlayout.layout.md +14 -0
  113. package/docs/api/foundation-workspace.savedlayout.layoutkey.md +14 -0
  114. package/docs/api/foundation-workspace.savedlayout.md +79 -0
  115. package/docs/api/foundation-workspace.savedworkspace.description.md +14 -0
  116. package/docs/api/foundation-workspace.savedworkspace.filters.md +14 -0
  117. package/docs/api/foundation-workspace.savedworkspace.grids.md +14 -0
  118. package/docs/api/foundation-workspace.savedworkspace.layouts.md +14 -0
  119. package/docs/api/foundation-workspace.savedworkspace.md +174 -0
  120. package/docs/api/foundation-workspace.savedworkspace.name.md +14 -0
  121. package/docs/api/foundation-workspace.savedworkspace.savedat.md +14 -0
  122. package/docs/api/foundation-workspace.savedworkspace.username.md +14 -0
  123. package/docs/api/foundation-workspace.sharedworkspace.createdon.md +14 -0
  124. package/docs/api/foundation-workspace.sharedworkspace.data.md +14 -0
  125. package/docs/api/foundation-workspace.sharedworkspace.description.md +14 -0
  126. package/docs/api/foundation-workspace.sharedworkspace.id.md +14 -0
  127. package/docs/api/foundation-workspace.sharedworkspace.md +174 -0
  128. package/docs/api/foundation-workspace.sharedworkspace.modifiedon.md +14 -0
  129. package/docs/api/foundation-workspace.sharedworkspace.name.md +14 -0
  130. package/docs/api/foundation-workspace.sharedworkspace.username.md +14 -0
  131. package/docs/api/foundation-workspace.workspacecomponents.md +29 -0
  132. package/docs/api/foundation-workspace.workspacemanager.applyingworkspace.md +14 -0
  133. package/docs/api/foundation-workspace.workspacemanager.auth.md +14 -0
  134. package/docs/api/foundation-workspace.workspacemanager.canshareworkspace.md +14 -0
  135. package/docs/api/foundation-workspace.workspacemanager.connect.md +14 -0
  136. package/docs/api/foundation-workspace.workspacemanager.dialogboundary.md +14 -0
  137. package/docs/api/foundation-workspace.workspacemanager.filterregistry.md +14 -0
  138. package/docs/api/foundation-workspace.workspacemanager.gridregistry.md +14 -0
  139. package/docs/api/foundation-workspace.workspacemanager.isloading.md +14 -0
  140. package/docs/api/foundation-workspace.workspacemanager.layoutregistry.md +14 -0
  141. package/docs/api/foundation-workspace.workspacemanager.loadmodal.md +14 -0
  142. package/docs/api/foundation-workspace.workspacemanager.loadmode.md +14 -0
  143. package/docs/api/foundation-workspace.workspacemanager.md +442 -0
  144. package/docs/api/foundation-workspace.workspacemanager.savedworkspaces.md +14 -0
  145. package/docs/api/foundation-workspace.workspacemanager.savemodal.md +14 -0
  146. package/docs/api/foundation-workspace.workspacemanager.savemode.md +14 -0
  147. package/docs/api/foundation-workspace.workspacemanager.selectedworkspacetooverwrite.md +14 -0
  148. package/docs/api/foundation-workspace.workspacemanager.sharedworkspacedialogboundary.md +14 -0
  149. package/docs/api/foundation-workspace.workspacemanager.sharedworkspaces.md +14 -0
  150. package/docs/api/foundation-workspace.workspacemanager.workspacedescription.md +14 -0
  151. package/docs/api/foundation-workspace.workspacemanager.workspacename.md +14 -0
  152. package/docs/api/foundation-workspace.workspacemanager.workspacestate.md +14 -0
  153. package/docs/api/foundation-workspace.workspacemanager.workspacetoshare.md +14 -0
  154. package/docs/api/foundation-workspace.workspacestate.deleteworkspace.md +53 -0
  155. package/docs/api/foundation-workspace.workspacestate.getcurrentworkspace.md +18 -0
  156. package/docs/api/foundation-workspace.workspacestate.getsavedworkspaces.md +18 -0
  157. package/docs/api/foundation-workspace.workspacestate.loadworkspace.md +53 -0
  158. package/docs/api/foundation-workspace.workspacestate.md +16 -0
  159. package/docs/api/foundation-workspace.workspacestate.saveworkspace.md +111 -0
  160. package/docs/api/foundation-workspace.workspacestate.setcurrentworkspace.md +53 -0
  161. package/docs/api/index.md +30 -0
  162. package/docs/api-report.md.api.md +372 -0
  163. package/license.txt +46 -0
  164. package/package.json +69 -0
  165. package/src/index.ts +3 -0
  166. package/src/workspace/filter-registry.ts +80 -0
  167. package/src/workspace/grid-register/grid-register.template.ts +7 -0
  168. package/src/workspace/grid-register/grid-register.ts +142 -0
  169. package/src/workspace/grid-register/index.ts +1 -0
  170. package/src/workspace/grid-registry.ts +157 -0
  171. package/src/workspace/index.ts +8 -0
  172. package/src/workspace/layout-registry.ts +58 -0
  173. package/src/workspace/layout-wrapper/index.ts +1 -0
  174. package/src/workspace/layout-wrapper/layout-wrapper.template.ts +7 -0
  175. package/src/workspace/layout-wrapper/layout-wrapper.ts +66 -0
  176. package/src/workspace/workspace-state.ts +234 -0
  177. package/src/workspace/workspace-state.types.ts +27 -0
  178. package/src/workspace/workspace.types.ts +26 -0
  179. package/src/workspace-components.ts +51 -0
  180. package/src/workspace-manager/index.ts +1 -0
  181. package/src/workspace-manager/workspace-manager.styles.ts +139 -0
  182. package/src/workspace-manager/workspace-manager.template.ts +352 -0
  183. package/src/workspace-manager/workspace-manager.ts +420 -0
  184. package/temp/api-report.md.api.md +372 -0
  185. package/tsconfig.json +11 -0
@@ -0,0 +1,136 @@
1
+ import { __awaiter, __decorate } from "tslib";
2
+ import { attr, customElement } from '@microsoft/fast-element';
3
+ import { GridRegistry, WorkspaceState } from '..';
4
+ import { GridRegisterTemplate as template } from './grid-register.template';
5
+ const name = 'grid-register';
6
+ /**
7
+ * Registers an AG Grid instance so workspace state can apply/load it.
8
+ * @alpha
9
+ */
10
+ let GridRegister = class GridRegister extends HTMLElement {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.gridElement = null;
14
+ this.gridApi = null;
15
+ this.columnApi = null;
16
+ this.workspaceSettingsApplied = false;
17
+ this.handleGridReady = () => {
18
+ this.attachToGridApis();
19
+ };
20
+ }
21
+ connectedCallback() {
22
+ this.findAndRegisterGrid();
23
+ }
24
+ disconnectedCallback() {
25
+ if (this.gridKey) {
26
+ this.gridRegistry.unregisterGrid(this.gridKey);
27
+ }
28
+ this.detachFromGridApis();
29
+ }
30
+ findAndRegisterGrid() {
31
+ this.gridElement = this.querySelector('rapid-grid-pro');
32
+ if (this.gridElement) {
33
+ this.gridElement.addEventListener('gridReady', this.handleGridReady);
34
+ this.attachToGridApis();
35
+ }
36
+ else {
37
+ setTimeout(() => {
38
+ this.gridElement = this.querySelector('rapid-grid-pro');
39
+ if (this.gridElement) {
40
+ this.gridElement.addEventListener('gridReady', this.handleGridReady);
41
+ this.attachToGridApis();
42
+ }
43
+ else {
44
+ console.warn(`grid-register: rapid-grid-pro element not found`);
45
+ }
46
+ }, 100);
47
+ }
48
+ }
49
+ attachToGridApis() {
50
+ var _a;
51
+ if (!this.gridElement) {
52
+ return;
53
+ }
54
+ const anyGrid = this.gridElement;
55
+ const gridApi = anyGrid.gridApi || null;
56
+ const columnApi = anyGrid.columnApi || null;
57
+ const persistKey = ((_a = anyGrid === null || anyGrid === void 0 ? void 0 : anyGrid.getAttribute) === null || _a === void 0 ? void 0 : _a.call(anyGrid, 'persist-column-state-key')) || this.gridKey;
58
+ if (!gridApi || this.gridApi === gridApi) {
59
+ return;
60
+ }
61
+ this.gridApi = gridApi;
62
+ this.columnApi = columnApi;
63
+ const effectiveGridKey = persistKey;
64
+ if (!effectiveGridKey) {
65
+ console.warn('grid-register: missing persist-column-state-key; grid state will not be saved');
66
+ }
67
+ else {
68
+ this.gridRegistry.registerGrid(effectiveGridKey, gridApi, columnApi);
69
+ this.gridKey = effectiveGridKey;
70
+ }
71
+ if (!this.workspaceSettingsApplied && this.gridApi) {
72
+ this.loadWorkspaceColumnState().catch((error) => {
73
+ console.warn(`Failed to apply column state for ${this.gridKey} on gridReady:`, error);
74
+ });
75
+ }
76
+ }
77
+ detachFromGridApis() {
78
+ if (this.gridElement && this.handleGridReady) {
79
+ this.gridElement.removeEventListener('gridReady', this.handleGridReady);
80
+ }
81
+ this.gridElement = null;
82
+ this.gridApi = null;
83
+ this.columnApi = null;
84
+ }
85
+ loadWorkspaceSettings(options) {
86
+ return __awaiter(this, void 0, void 0, function* () {
87
+ if (!this.gridKey || !this.columnApi || !this.gridApi) {
88
+ return;
89
+ }
90
+ try {
91
+ const currentWorkspace = this.workspaceState.getCurrentWorkspace();
92
+ if (currentWorkspace && currentWorkspace.grids) {
93
+ const gridSetting = currentWorkspace.grids.find((g) => g.gridKey === this.gridKey);
94
+ if (gridSetting) {
95
+ const currentColumnState = this.columnApi.getColumnState() || [];
96
+ const targetColumnState = gridSetting.columnState || [];
97
+ const columnsEqual = JSON.stringify(currentColumnState) === JSON.stringify(targetColumnState);
98
+ const applyColumns = !options || options.applyColumns !== false;
99
+ const columnsOk = !applyColumns || columnsEqual;
100
+ if (columnsOk) {
101
+ return;
102
+ }
103
+ const applied = yield this.gridRegistry.applyGridSettings(gridSetting, options);
104
+ if (!applied) {
105
+ console.warn(`Failed to apply grid settings for ${this.gridKey}`);
106
+ }
107
+ }
108
+ }
109
+ }
110
+ catch (error) {
111
+ console.warn(`Failed to load workspace settings for grid ${this.gridKey}:`, error);
112
+ }
113
+ });
114
+ }
115
+ loadWorkspaceColumnState() {
116
+ return __awaiter(this, void 0, void 0, function* () {
117
+ return this.loadWorkspaceSettings({ applyColumns: true });
118
+ });
119
+ }
120
+ };
121
+ __decorate([
122
+ attr({ attribute: 'grid-key' })
123
+ ], GridRegister.prototype, "gridKey", void 0);
124
+ __decorate([
125
+ GridRegistry
126
+ ], GridRegister.prototype, "gridRegistry", void 0);
127
+ __decorate([
128
+ WorkspaceState
129
+ ], GridRegister.prototype, "workspaceState", void 0);
130
+ GridRegister = __decorate([
131
+ customElement({
132
+ name,
133
+ template,
134
+ })
135
+ ], GridRegister);
136
+ export { GridRegister };
@@ -0,0 +1,4 @@
1
+ import { html } from '@microsoft/fast-element';
2
+ export const GridRegisterTemplate = html `
3
+ <slot></slot>
4
+ `;
@@ -0,0 +1 @@
1
+ export * from './grid-register';
@@ -0,0 +1,109 @@
1
+ import { __awaiter } from "tslib";
2
+ import { DI } from '@microsoft/fast-foundation';
3
+ /**
4
+ * @alpha
5
+ */
6
+ export class DefaultGridRegistry {
7
+ constructor() {
8
+ this.grids = new Map();
9
+ this.cachedSettings = new Map();
10
+ }
11
+ // Note: StatePersistence is not wired here to avoid a hard dependency on grid-pro.
12
+ registerGrid(gridKey, gridApi, columnApi) {
13
+ this.grids.set(gridKey, {
14
+ gridKey,
15
+ gridApi: gridApi,
16
+ columnApi: columnApi,
17
+ });
18
+ }
19
+ getGrid(gridKey) {
20
+ return this.grids.get(gridKey) || null;
21
+ }
22
+ unregisterGrid(gridKey) {
23
+ const grid = this.grids.get(gridKey);
24
+ if (grid) {
25
+ const settings = this.getGridSettings(gridKey, grid);
26
+ if (settings) {
27
+ this.cachedSettings.set(gridKey, settings);
28
+ }
29
+ }
30
+ this.grids.delete(gridKey);
31
+ }
32
+ getAllGridsSettings() {
33
+ Array.from(this.grids).forEach(([key, grid]) => {
34
+ const settings = this.getGridSettings(key, grid);
35
+ if (settings) {
36
+ this.cachedSettings.set(key, settings);
37
+ }
38
+ });
39
+ return Array.from(this.cachedSettings.values()).filter((s) => !!s);
40
+ }
41
+ applyGridSettings(gridSetting, options) {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ const gridRegistration = this.grids.get(gridSetting.gridKey);
44
+ if (!gridRegistration || !gridRegistration.columnApi || !gridRegistration.gridApi) {
45
+ return false;
46
+ }
47
+ const hasColumnState = gridSetting.columnState && gridSetting.columnState.length > 0;
48
+ const applyColumns = !options || options.applyColumns !== false;
49
+ const shouldApplyColumns = applyColumns && !!hasColumnState;
50
+ if (!shouldApplyColumns) {
51
+ // No column state to apply; treat as a no-op.
52
+ return false;
53
+ }
54
+ try {
55
+ if (shouldApplyColumns) {
56
+ gridRegistration.columnApi.applyColumnState({
57
+ state: gridSetting.columnState,
58
+ applyOrder: true,
59
+ });
60
+ }
61
+ return true;
62
+ }
63
+ catch (error) {
64
+ console.warn(`Failed to apply settings for grid ${gridSetting.gridKey}:`, error);
65
+ return false;
66
+ }
67
+ });
68
+ }
69
+ applyAllGridsSettings(gridsSettings_1) {
70
+ return __awaiter(this, arguments, void 0, function* (gridsSettings, maxRetries = 3, delayMs = 200) {
71
+ // eslint-disable-next-line no-plusplus
72
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
73
+ const remainingSettings = [];
74
+ for (const gridSetting of gridsSettings) {
75
+ // eslint-disable-next-line no-await-in-loop
76
+ const applied = yield this.applyGridSettings(gridSetting);
77
+ if (!applied) {
78
+ remainingSettings.push(gridSetting);
79
+ }
80
+ }
81
+ if (remainingSettings.length === 0 || attempt >= maxRetries - 1) {
82
+ break;
83
+ }
84
+ // await new Promise((resolve) => setTimeout(resolve, delayMs));
85
+ gridsSettings = remainingSettings;
86
+ }
87
+ });
88
+ }
89
+ getGridSettings(gridKey, grid) {
90
+ var _a;
91
+ if (grid) {
92
+ const columnState = (_a = grid.columnApi) === null || _a === void 0 ? void 0 : _a.getColumnState();
93
+ const columnCount = (columnState === null || columnState === void 0 ? void 0 : columnState.length) || 0;
94
+ console.log(`Saved grid settings for ${gridKey}: ${columnCount} columns`);
95
+ return {
96
+ gridKey: grid.gridKey,
97
+ columnState: columnState || [],
98
+ savedAt: new Date().toISOString(),
99
+ };
100
+ }
101
+ console.warn(`No grid found for ${gridKey}`);
102
+ return null;
103
+ }
104
+ }
105
+ /**
106
+ * DI token for grid registry.
107
+ * @alpha
108
+ */
109
+ export const GridRegistry = DI.createInterface((x) => x.singleton(DefaultGridRegistry));
@@ -0,0 +1,8 @@
1
+ export * from './workspace.types';
2
+ export * from './workspace-state.types';
3
+ export * from './workspace-state';
4
+ export * from './layout-registry';
5
+ export * from './grid-registry';
6
+ export * from './filter-registry';
7
+ export * from './grid-register';
8
+ export * from './layout-wrapper';
@@ -0,0 +1,45 @@
1
+ import { __awaiter } from "tslib";
2
+ import { DI } from '@microsoft/fast-foundation';
3
+ /**
4
+ * Default layout registry implementation.
5
+ * @alpha
6
+ */
7
+ export class DefaultLayoutRegistry {
8
+ constructor() {
9
+ this.layouts = new Map();
10
+ }
11
+ registerLayout(layoutKey, layout) {
12
+ if (!layoutKey) {
13
+ return;
14
+ }
15
+ this.layouts.set(layoutKey, layout);
16
+ }
17
+ unregisterLayout(layoutKey) {
18
+ this.layouts.delete(layoutKey);
19
+ }
20
+ getLayoutsConfigs() {
21
+ return Array.from(this.layouts).map(([key, layout]) => ({
22
+ layoutKey: key,
23
+ layout: layout.getLayout(),
24
+ }));
25
+ }
26
+ applySavedLayouts(savedLayouts) {
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ savedLayouts.forEach((s) => {
29
+ const layout = this.layouts.get(s.layoutKey);
30
+ if (layout) {
31
+ layout.loadLayout(s.layout, 'placeholder', true);
32
+ }
33
+ else {
34
+ console.warn(`layout for ${s.layoutKey} not found`);
35
+ }
36
+ });
37
+ // await new Promise((resolve) => setTimeout(resolve, 300));
38
+ });
39
+ }
40
+ }
41
+ /**
42
+ * DI token for layout registry.
43
+ * @alpha
44
+ */
45
+ export const LayoutRegistry = DI.createInterface((x) => x.singleton(DefaultLayoutRegistry));
@@ -0,0 +1 @@
1
+ export * from './layout-wrapper';
@@ -0,0 +1,64 @@
1
+ import { __decorate } from "tslib";
2
+ import { attr, customElement } from '@microsoft/fast-element';
3
+ import { LayoutRegistry } from '..';
4
+ import { LayoutWrapperTemplate as template } from './layout-wrapper.template';
5
+ const name = 'layout-register';
6
+ /**
7
+ * Registers a layout instance so workspace state can apply/load it.
8
+ * @alpha
9
+ */
10
+ let LayoutWrapper = class LayoutWrapper extends HTMLElement {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.layoutElement = null;
14
+ }
15
+ connectedCallback() {
16
+ this.findAndRegisterLayout();
17
+ }
18
+ disconnectedCallback() {
19
+ var _a, _b, _c, _d, _e;
20
+ const layoutKey = (_e = (_b = (_a = this.layoutElement) === null || _a === void 0 ? void 0 : _a.autoSaveKey) !== null && _b !== void 0 ? _b : (_d = (_c = this.layoutElement) === null || _c === void 0 ? void 0 : _c.getAttribute) === null || _d === void 0 ? void 0 : _d.call(_c, 'auto-save-key')) !== null && _e !== void 0 ? _e : this.layoutKey;
21
+ if (layoutKey) {
22
+ this.layoutRegistry.unregisterLayout(layoutKey);
23
+ }
24
+ }
25
+ findAndRegisterLayout() {
26
+ let layoutElement = this.querySelector('rapid-layout');
27
+ const registerLayout = (layout) => {
28
+ var _a, _b, _c;
29
+ if (!layout) {
30
+ console.warn(`layout-register: rapid-layout element not found`);
31
+ return;
32
+ }
33
+ this.layoutElement = layout;
34
+ const layoutKeyFromLayout = (_c = (_a = layout.autoSaveKey) !== null && _a !== void 0 ? _a : (_b = layout.getAttribute) === null || _b === void 0 ? void 0 : _b.call(layout, 'auto-save-key')) !== null && _c !== void 0 ? _c : this.layoutKey;
35
+ if (!layoutKeyFromLayout) {
36
+ console.warn('layout-register: missing layout key (auto-save-key/layout-key)');
37
+ return;
38
+ }
39
+ this.layoutRegistry.registerLayout(layoutKeyFromLayout, layout);
40
+ };
41
+ if (layoutElement) {
42
+ registerLayout(layoutElement);
43
+ }
44
+ else {
45
+ setTimeout(() => {
46
+ layoutElement = this.querySelector('rapid-layout');
47
+ registerLayout(layoutElement);
48
+ }, 100);
49
+ }
50
+ }
51
+ };
52
+ __decorate([
53
+ attr({ attribute: 'layout-key' })
54
+ ], LayoutWrapper.prototype, "layoutKey", void 0);
55
+ __decorate([
56
+ LayoutRegistry
57
+ ], LayoutWrapper.prototype, "layoutRegistry", void 0);
58
+ LayoutWrapper = __decorate([
59
+ customElement({
60
+ name,
61
+ template,
62
+ })
63
+ ], LayoutWrapper);
64
+ export { LayoutWrapper };
@@ -0,0 +1,4 @@
1
+ import { html } from '@microsoft/fast-element';
2
+ export const LayoutWrapperTemplate = html `
3
+ <slot></slot>
4
+ `;
@@ -0,0 +1,193 @@
1
+ import { __awaiter, __decorate, __param } from "tslib";
2
+ import { Auth, KVStorage, } from '@genesislcap/foundation-comms';
3
+ import { DI } from '@microsoft/fast-foundation';
4
+ /**
5
+ * Default workspace persistence implementation backed by KVStorage.
6
+ *
7
+ * @alpha
8
+ */
9
+ let DefaultWorkspaceState = class DefaultWorkspaceState {
10
+ constructor(kvStorage, auth) {
11
+ this.kvStorage = kvStorage;
12
+ this.auth = auth;
13
+ this.STORAGE_PREFIX = 'workspace_';
14
+ this.WORKSPACES_LIST_KEY = 'workspaces_list';
15
+ this.currentWorkspace = null;
16
+ }
17
+ getCurrentUsername() {
18
+ var _a, _b;
19
+ return ((_b = (_a = this.auth) === null || _a === void 0 ? void 0 : _a.loggedUserResult) === null || _b === void 0 ? void 0 : _b.username) || 'anonymous';
20
+ }
21
+ getWorkspaceStorageKey(workspaceName) {
22
+ const username = this.getCurrentUsername();
23
+ return `${this.STORAGE_PREFIX}${username}_${workspaceName}`;
24
+ }
25
+ getWorkspacesListKey() {
26
+ const username = this.getCurrentUsername();
27
+ return `${this.STORAGE_PREFIX}${username}_${this.WORKSPACES_LIST_KEY}`;
28
+ }
29
+ saveWorkspace(workspaceName, layouts, grids, filters, description) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ const storageKey = this.getWorkspaceStorageKey(workspaceName);
32
+ const username = this.getCurrentUsername();
33
+ const workspace = {
34
+ name: workspaceName,
35
+ username,
36
+ description: (description === null || description === void 0 ? void 0 : description.trim()) || undefined,
37
+ layouts,
38
+ grids,
39
+ filters,
40
+ savedAt: new Date().toISOString(),
41
+ };
42
+ yield this.kvStorage.put([
43
+ {
44
+ key: storageKey,
45
+ value: JSON.stringify(workspace),
46
+ },
47
+ ]);
48
+ yield this.updateWorkspacesList(workspaceName);
49
+ });
50
+ }
51
+ loadWorkspace(workspaceName) {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ const workspace = yield this.getWorkspace(workspaceName);
54
+ this.currentWorkspace = workspace !== null && workspace !== void 0 ? workspace : null;
55
+ return this.currentWorkspace;
56
+ });
57
+ }
58
+ getWorkspace(workspaceName) {
59
+ return __awaiter(this, void 0, void 0, function* () {
60
+ var _a;
61
+ const storageKey = this.getWorkspaceStorageKey(workspaceName);
62
+ const existing = yield this.kvStorage.get(storageKey);
63
+ if (!((_a = existing === null || existing === void 0 ? void 0 : existing.kv) === null || _a === void 0 ? void 0 : _a.value)) {
64
+ return null;
65
+ }
66
+ try {
67
+ const workspace = typeof existing.kv.value === 'string' ? JSON.parse(existing.kv.value) : existing.kv.value;
68
+ const currentUsername = this.getCurrentUsername();
69
+ if (workspace.username && workspace.username !== currentUsername) {
70
+ console.warn(`Workspace ${workspaceName} does not belong to current user`);
71
+ return null;
72
+ }
73
+ if (!workspace.username) {
74
+ workspace.username = currentUsername;
75
+ }
76
+ return workspace || null;
77
+ }
78
+ catch (e) {
79
+ console.warn('Failed to parse saved workspace', e);
80
+ return null;
81
+ }
82
+ });
83
+ }
84
+ getCurrentWorkspace() {
85
+ return this.currentWorkspace;
86
+ }
87
+ setCurrentWorkspace(workspace) {
88
+ this.currentWorkspace = workspace;
89
+ }
90
+ getSavedWorkspaces() {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ var _a;
93
+ const listKey = this.getWorkspaceStorageKey(this.WORKSPACES_LIST_KEY);
94
+ const existing = yield this.kvStorage.get(listKey);
95
+ if (!((_a = existing === null || existing === void 0 ? void 0 : existing.kv) === null || _a === void 0 ? void 0 : _a.value)) {
96
+ return [];
97
+ }
98
+ try {
99
+ const workspaceNames = typeof existing.kv.value === 'string' ? JSON.parse(existing.kv.value) : existing.kv.value;
100
+ if (!Array.isArray(workspaceNames)) {
101
+ return [];
102
+ }
103
+ const workspaces = [];
104
+ const currentUsername = this.getCurrentUsername();
105
+ for (const name of workspaceNames) {
106
+ // eslint-disable-next-line no-await-in-loop
107
+ const workspace = yield this.getWorkspace(name);
108
+ if (workspace && (!workspace.username || workspace.username === currentUsername)) {
109
+ workspaces.push(workspace);
110
+ }
111
+ }
112
+ return workspaces;
113
+ }
114
+ catch (e) {
115
+ console.warn('Failed to parse saved workspaces list', e);
116
+ return [];
117
+ }
118
+ });
119
+ }
120
+ deleteWorkspace(workspaceName) {
121
+ return __awaiter(this, void 0, void 0, function* () {
122
+ const storageKey = this.getWorkspaceStorageKey(workspaceName);
123
+ yield this.kvStorage.delete([storageKey]);
124
+ yield this.removeFromWorkspacesList(workspaceName);
125
+ });
126
+ }
127
+ updateWorkspacesList(workspaceName) {
128
+ return __awaiter(this, void 0, void 0, function* () {
129
+ var _a;
130
+ const listKey = this.getWorkspacesListKey();
131
+ const existing = yield this.kvStorage.get(listKey);
132
+ let workspaceNames = [];
133
+ if ((_a = existing === null || existing === void 0 ? void 0 : existing.kv) === null || _a === void 0 ? void 0 : _a.value) {
134
+ try {
135
+ workspaceNames =
136
+ typeof existing.kv.value === 'string' ? JSON.parse(existing.kv.value) : existing.kv.value;
137
+ }
138
+ catch (e) {
139
+ console.warn('Failed to parse workspaces list', e);
140
+ }
141
+ }
142
+ workspaceNames = workspaceNames.filter((name) => name !== workspaceName);
143
+ workspaceNames.push(workspaceName);
144
+ yield this.kvStorage.put([
145
+ {
146
+ key: listKey,
147
+ value: JSON.stringify(workspaceNames),
148
+ },
149
+ ]);
150
+ });
151
+ }
152
+ removeFromWorkspacesList(workspaceName) {
153
+ return __awaiter(this, void 0, void 0, function* () {
154
+ var _a;
155
+ const listKey = this.getWorkspacesListKey();
156
+ const existing = yield this.kvStorage.get(listKey);
157
+ if (!((_a = existing === null || existing === void 0 ? void 0 : existing.kv) === null || _a === void 0 ? void 0 : _a.value)) {
158
+ return;
159
+ }
160
+ let workspaceNames = [];
161
+ try {
162
+ workspaceNames =
163
+ typeof existing.kv.value === 'string' ? JSON.parse(existing.kv.value) : existing.kv.value;
164
+ }
165
+ catch (e) {
166
+ console.warn('Failed to parse workspaces list for deletion', e);
167
+ return;
168
+ }
169
+ workspaceNames = workspaceNames.filter((name) => name !== workspaceName);
170
+ if (workspaceNames.length === 0) {
171
+ yield this.kvStorage.delete([listKey]);
172
+ }
173
+ else {
174
+ yield this.kvStorage.put([
175
+ {
176
+ key: listKey,
177
+ value: JSON.stringify(workspaceNames),
178
+ },
179
+ ]);
180
+ }
181
+ });
182
+ }
183
+ };
184
+ DefaultWorkspaceState = __decorate([
185
+ __param(0, KVStorage),
186
+ __param(1, Auth)
187
+ ], DefaultWorkspaceState);
188
+ export { DefaultWorkspaceState };
189
+ /**
190
+ * DI token for workspace state.
191
+ * @alpha
192
+ */
193
+ export const WorkspaceState = DI.createInterface((x) => x.singleton(DefaultWorkspaceState));
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,43 @@
1
+ // Import the custom elements so their `@customElement` decorators run and define tags.
2
+ import { LayoutWrapper, GridRegister } from './workspace';
3
+ import { WorkspaceManager } from './workspace-manager';
4
+ /**
5
+ * Registration object for workspace-related components.
6
+ *
7
+ * Mirrors the shape of `rapidGridComponents` so it can be passed into
8
+ * `provideDesignSystem().register(...)` without additional glue code.
9
+ *
10
+ * @alpha
11
+ */
12
+ export const workspaceComponents = {
13
+ workspaceManager: () => ({
14
+ register(_container, ..._rest) {
15
+ // Custom elements are defined by decorators at module import time.
16
+ void WorkspaceManager;
17
+ },
18
+ }),
19
+ layoutWrapper: () => ({
20
+ register(_container, ..._rest) {
21
+ void LayoutWrapper;
22
+ },
23
+ }),
24
+ gridRegister: () => ({
25
+ register(_container, ..._rest) {
26
+ void GridRegister;
27
+ },
28
+ }),
29
+ register(container, ...rest) {
30
+ if (!container) {
31
+ // Preserve backward compatibility with callers that iterate keys.
32
+ return;
33
+ }
34
+ for (const key in this) {
35
+ if (key === 'register') {
36
+ continue;
37
+ }
38
+ // The values of this object are functions that return a component
39
+ // registration object with a `.register(...)` method.
40
+ this[key]().register(container, ...rest);
41
+ }
42
+ },
43
+ };
@@ -0,0 +1 @@
1
+ export * from './workspace-manager';