astro-tractstack 2.0.41 → 2.0.43

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 (48) hide show
  1. package/dist/index.js +8 -2
  2. package/package.json +1 -1
  3. package/templates/src/components/compositor/Node.tsx +4 -1
  4. package/templates/src/components/compositor/preview/PanesPreviewGenerator.tsx +5 -1
  5. package/templates/src/components/edit/SettingsPanel.tsx +1 -3
  6. package/templates/src/components/edit/pane/AddPanePanel_new.tsx +6 -10
  7. package/templates/src/components/edit/pane/AddPanePanel_reuse.tsx +6 -2
  8. package/templates/src/components/edit/pane/PanePanel_path.tsx +4 -3
  9. package/templates/src/components/edit/panels/StyleParentPanel.tsx +0 -2
  10. package/templates/src/components/edit/state/SaveModal.tsx +250 -79
  11. package/templates/src/components/edit/storyfragment/StoryFragmentConfigPanel.tsx +27 -16
  12. package/templates/src/components/edit/storyfragment/StoryFragmentPanel_menu.tsx +5 -7
  13. package/templates/src/components/edit/widgets/BeliefWidget.tsx +4 -1
  14. package/templates/src/components/edit/widgets/IdentifyAsWidget.tsx +5 -1
  15. package/templates/src/components/edit/widgets/InteractiveDisclosureWidget.tsx +5 -1
  16. package/templates/src/components/edit/widgets/ToggleWidget.tsx +4 -1
  17. package/templates/src/components/fields/BackgroundImage.tsx +4 -1
  18. package/templates/src/components/fields/ImageUpload.tsx +4 -1
  19. package/templates/src/components/form/ActionBuilderField.tsx +5 -1
  20. package/templates/src/components/storykeep/Dashboard_Analytics.tsx +4 -2
  21. package/templates/src/components/storykeep/state/BrandingWrapper.tsx +13 -1
  22. package/templates/src/components/storykeep/widgets/HydrateWizard.tsx +84 -0
  23. package/templates/src/components/storykeep/widgets/{SetupWizard.tsx → InitWizard.tsx} +4 -3
  24. package/templates/src/components/widgets/Impression.tsx +3 -1
  25. package/templates/src/hooks/useSearch.ts +5 -3
  26. package/templates/src/layouts/Layout.astro +1 -23
  27. package/templates/src/pages/[...slug]/edit.astro +0 -1
  28. package/templates/src/pages/api/auth/decode.ts +2 -4
  29. package/templates/src/pages/api/auth/login.ts +4 -5
  30. package/templates/src/pages/api/auth/logout.ts +22 -7
  31. package/templates/src/pages/api/auth/profile.ts +4 -2
  32. package/templates/src/pages/api/sandbox.ts +3 -5
  33. package/templates/src/pages/api/tailwind.ts +6 -9
  34. package/templates/src/pages/storykeep/branding.astro +18 -1
  35. package/templates/src/pages/storykeep/init.astro +25 -23
  36. package/templates/src/stores/analytics.ts +5 -14
  37. package/templates/src/stores/nodes.ts +1 -6
  38. package/templates/src/stores/orphanAnalysis.ts +5 -40
  39. package/templates/src/types/compositorTypes.ts +1 -1
  40. package/templates/src/types/tractstack.ts +2 -0
  41. package/templates/src/utils/actions/actionButton.ts +3 -1
  42. package/templates/src/utils/api/brandHelpers.ts +1 -0
  43. package/templates/src/utils/api/setupHelpers.ts +177 -20
  44. package/templates/src/utils/api.ts +14 -26
  45. package/templates/src/utils/compositor/nodesHelper.ts +5 -1
  46. package/templates/src/utils/layout.ts +85 -75
  47. package/templates/src/utils/tenantResolver.ts +1 -1
  48. package/utils/inject-files.ts +8 -2
@@ -21,16 +21,18 @@ function cleanupLayoutObservers() {
21
21
  settingsPanelSubscription();
22
22
  settingsPanelSubscription = null;
23
23
  }
24
- if (debouncedUpdateListener) {
24
+ if (debouncedUpdateListener && typeof window !== `undefined`) {
25
25
  window.removeEventListener('scroll', debouncedUpdateListener);
26
26
  window.removeEventListener('resize', debouncedUpdateListener);
27
27
  debouncedUpdateListener = null;
28
28
  }
29
- const storykeepHeader = document.getElementById('storykeepHeader');
30
- if (storykeepHeader) {
31
- document.body.style.paddingTop = '';
32
- storykeepHeader.style.position = '';
33
- storykeepHeader.style.top = '';
29
+ if (typeof document !== `undefined`) {
30
+ const storykeepHeader = document.getElementById('storykeepHeader');
31
+ if (storykeepHeader) {
32
+ document.body.style.paddingTop = '';
33
+ storykeepHeader.style.position = '';
34
+ storykeepHeader.style.top = '';
35
+ }
34
36
  }
35
37
  }
36
38
 
@@ -45,7 +47,7 @@ function setupPaneObserver() {
45
47
  currentPaneObserver = null;
46
48
  }
47
49
 
48
- if (signalValue && signalValue.nodeId) {
50
+ if (signalValue && signalValue.nodeId && typeof document !== `undefined`) {
49
51
  setTimeout(() => {
50
52
  const { nodeId } = signalValue;
51
53
 
@@ -77,84 +79,92 @@ function setupPaneObserver() {
77
79
  export function setupLayoutObservers(): void {
78
80
  cleanupLayoutObservers();
79
81
 
80
- const storykeepHeader = document.getElementById('storykeepHeader');
81
- const settingsControls = document.getElementById('settingsControls');
82
- const standardHeader = document.querySelector('header');
83
-
84
- if (!storykeepHeader || !settingsControls || !standardHeader) return;
85
-
86
- let standardHeaderHeight = 0;
87
- const updateStandardHeaderHeight = () => {
88
- standardHeaderHeight = standardHeader.offsetHeight;
89
- };
90
-
91
- const updatePanelPosition = () => {
92
- const headerRect = storykeepHeader.getBoundingClientRect();
93
- const panelTop = headerRect.bottom;
94
- settingsControls.style.top = `${panelTop}px`;
95
- };
96
-
97
- const handleScroll = () => {
98
- const scrollY = window.scrollY;
99
- const shouldBeSticky = scrollY > standardHeaderHeight;
100
- const currentPosition = headerPositionStore.get();
101
- const newPosition = shouldBeSticky ? 'sticky' : 'normal';
102
-
103
- if (currentPosition !== newPosition) {
104
- setHeaderPosition(newPosition);
105
- if (shouldBeSticky) {
106
- document.body.style.paddingTop = `${storykeepHeader.offsetHeight}px`;
107
- storykeepHeader.style.position = 'fixed';
108
- storykeepHeader.style.top = '0';
109
- } else {
110
- document.body.style.paddingTop = '';
111
- storykeepHeader.style.position = '';
112
- storykeepHeader.style.top = '';
82
+ if (typeof document !== `undefined` || typeof window !== `undefined`) {
83
+ const storykeepHeader = document.getElementById('storykeepHeader');
84
+ const settingsControls = document.getElementById('settingsControls');
85
+ const standardHeader = document.querySelector('header');
86
+
87
+ if (!storykeepHeader || !settingsControls || !standardHeader) return;
88
+
89
+ let standardHeaderHeight = 0;
90
+ const updateStandardHeaderHeight = () => {
91
+ standardHeaderHeight = standardHeader.offsetHeight;
92
+ };
93
+
94
+ const updatePanelPosition = () => {
95
+ const headerRect = storykeepHeader.getBoundingClientRect();
96
+ const panelTop = headerRect.bottom;
97
+ settingsControls.style.top = `${panelTop}px`;
98
+ };
99
+
100
+ const handleScroll = () => {
101
+ const scrollY = window.scrollY;
102
+ const shouldBeSticky = scrollY > standardHeaderHeight;
103
+ const currentPosition = headerPositionStore.get();
104
+ const newPosition = shouldBeSticky ? 'sticky' : 'normal';
105
+
106
+ if (currentPosition !== newPosition) {
107
+ setHeaderPosition(newPosition);
108
+ if (shouldBeSticky) {
109
+ document.body.style.paddingTop = `${storykeepHeader.offsetHeight}px`;
110
+ storykeepHeader.style.position = 'fixed';
111
+ storykeepHeader.style.top = '0';
112
+ } else {
113
+ document.body.style.paddingTop = '';
114
+ storykeepHeader.style.position = '';
115
+ storykeepHeader.style.top = '';
116
+ }
113
117
  }
114
- }
115
- };
118
+ };
116
119
 
117
- debouncedUpdateListener = debounce(() => {
118
- updateStandardHeaderHeight();
119
- handleScroll();
120
- updatePanelPosition();
121
- }, 50);
120
+ debouncedUpdateListener = debounce(() => {
121
+ updateStandardHeaderHeight();
122
+ handleScroll();
123
+ updatePanelPosition();
124
+ }, 50);
122
125
 
123
- const handleSettingsPanelChange = () => {
124
- if (!settingsPanelOpenStore.get()) {
125
- hasScrolledForSettingsPanel = false;
126
- }
127
- };
126
+ const handleSettingsPanelChange = () => {
127
+ if (!settingsPanelOpenStore.get()) {
128
+ hasScrolledForSettingsPanel = false;
129
+ }
130
+ };
128
131
 
129
- window.addEventListener('scroll', debouncedUpdateListener, { passive: true });
130
- window.addEventListener('resize', debouncedUpdateListener);
131
- settingsPanelOpenStore.subscribe(handleSettingsPanelChange);
132
+ window.addEventListener('scroll', debouncedUpdateListener, {
133
+ passive: true,
134
+ });
135
+ window.addEventListener('resize', debouncedUpdateListener);
136
+ settingsPanelOpenStore.subscribe(handleSettingsPanelChange);
132
137
 
133
- setupPaneObserver();
138
+ setupPaneObserver();
134
139
 
135
- updateStandardHeaderHeight();
136
- handleScroll();
137
- updatePanelPosition();
140
+ updateStandardHeaderHeight();
141
+ handleScroll();
142
+ updatePanelPosition();
143
+ }
138
144
  }
139
145
 
140
146
  export function handleSettingsPanelMobile(isOpen: boolean): void {
141
- const isMobile = window.innerWidth < 801;
142
- if (!isMobile) return;
143
-
144
- if (isOpen) {
145
- const header = document.querySelector('header');
146
- const headerHeight = header?.offsetHeight || 0;
147
- const currentScrollY = window.scrollY;
148
-
149
- if (currentScrollY <= headerHeight && !hasScrolledForSettingsPanel) {
150
- window.scrollTo({ top: headerHeight + 10, behavior: 'smooth' });
151
- hasScrolledForSettingsPanel = true;
147
+ if (typeof window !== `undefined` && typeof document !== `undefined`) {
148
+ const isMobile = window.innerWidth < 801;
149
+ if (!isMobile) return;
150
+
151
+ if (isOpen) {
152
+ const header = document.querySelector('header');
153
+ const headerHeight = header?.offsetHeight || 0;
154
+ const currentScrollY = window.scrollY;
155
+
156
+ if (currentScrollY <= headerHeight && !hasScrolledForSettingsPanel) {
157
+ window.scrollTo({ top: headerHeight + 10, behavior: 'smooth' });
158
+ hasScrolledForSettingsPanel = true;
159
+ }
160
+ setMobileHeaderFaded(true);
161
+ } else {
162
+ setMobileHeaderFaded(false);
163
+ hasScrolledForSettingsPanel = false;
152
164
  }
153
- setMobileHeaderFaded(true);
154
- } else {
155
- setMobileHeaderFaded(false);
156
- hasScrolledForSettingsPanel = false;
157
165
  }
158
166
  }
159
167
 
160
- document.addEventListener('astro:before-swap', cleanupLayoutObservers);
168
+ if (typeof document !== `undefined`) {
169
+ document.addEventListener('astro:before-swap', cleanupLayoutObservers);
170
+ }
@@ -1,4 +1,4 @@
1
- const VERBOSE = true;
1
+ const VERBOSE = false;
2
2
 
3
3
  interface TenantResolution {
4
4
  id: string;
@@ -2105,9 +2105,15 @@ export async function injectTemplateFiles(
2105
2105
  },
2106
2106
  {
2107
2107
  src: resolve(
2108
- '../templates/src/components/storykeep/widgets/SetupWizard.tsx'
2108
+ '../templates/src/components/storykeep/widgets/HydrateWizard.tsx'
2109
2109
  ),
2110
- dest: 'src/components/storykeep/widgets/SetupWizard.tsx',
2110
+ dest: 'src/components/storykeep/widgets/HydrateWizard.tsx',
2111
+ },
2112
+ {
2113
+ src: resolve(
2114
+ '../templates/src/components/storykeep/widgets/InitWizard.tsx'
2115
+ ),
2116
+ dest: 'src/components/storykeep/widgets/InitWizard.tsx',
2111
2117
  },
2112
2118
  {
2113
2119
  src: resolve('../templates/src/pages/storykeep/init.astro'),