astro-tractstack 2.0.0-rc.2 → 2.0.0-rc.21

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 (428) hide show
  1. package/LICENSE +0 -0
  2. package/README.md +227 -98
  3. package/astro.d.ts +0 -0
  4. package/bin/create-tractstack.js +103 -45
  5. package/dist/index.js +17 -1
  6. package/package.json +8 -3
  7. package/templates/artpacks/kCz/captainBreakfast_1080px.webp +0 -0
  8. package/templates/artpacks/kCz/captainBreakfast_1920px.webp +0 -0
  9. package/templates/artpacks/kCz/captainBreakfast_600px.webp +0 -0
  10. package/templates/artpacks/kCz/cleanDrips_1080px.webp +0 -0
  11. package/templates/artpacks/kCz/cleanDrips_1920px.webp +0 -0
  12. package/templates/artpacks/kCz/cleanDrips_600px.webp +0 -0
  13. package/templates/artpacks/kCz/crispwaves_1080px.webp +0 -0
  14. package/templates/artpacks/kCz/crispwaves_1920px.webp +0 -0
  15. package/templates/artpacks/kCz/crispwaves_600px.webp +0 -0
  16. package/templates/artpacks/kCz/dragonSkin_1080px.webp +0 -0
  17. package/templates/artpacks/kCz/dragonSkin_1920px.webp +0 -0
  18. package/templates/artpacks/kCz/dragonSkin_600px.webp +0 -0
  19. package/templates/artpacks/kCz/dragon_1080px.webp +0 -0
  20. package/templates/artpacks/kCz/dragon_1920px.webp +0 -0
  21. package/templates/artpacks/kCz/dragon_600px.webp +0 -0
  22. package/templates/artpacks/kCz/nightcity_1080px.webp +0 -0
  23. package/templates/artpacks/kCz/nightcity_1920px.webp +0 -0
  24. package/templates/artpacks/kCz/nightcity_600px.webp +0 -0
  25. package/templates/artpacks/kCz/pattern1_1080px.webp +0 -0
  26. package/templates/artpacks/kCz/pattern1_1920px.webp +0 -0
  27. package/templates/artpacks/kCz/pattern1_600px.webp +0 -0
  28. package/templates/artpacks/kCz/pattern2_1080px.webp +0 -0
  29. package/templates/artpacks/kCz/pattern2_1920px.webp +0 -0
  30. package/templates/artpacks/kCz/pattern2_600px.webp +0 -0
  31. package/templates/artpacks/kCz/skindrips_1080px.webp +0 -0
  32. package/templates/artpacks/kCz/skindrips_1920px.webp +0 -0
  33. package/templates/artpacks/kCz/skindrips_600px.webp +0 -0
  34. package/templates/artpacks/kCz/slimetime_1080px.webp +0 -0
  35. package/templates/artpacks/kCz/slimetime_1920px.webp +0 -0
  36. package/templates/artpacks/kCz/slimetime_600px.webp +0 -0
  37. package/templates/artpacks/kCz/snake_1080px.webp +0 -0
  38. package/templates/artpacks/kCz/snake_1920px.webp +0 -0
  39. package/templates/artpacks/kCz/snake_600px.webp +0 -0
  40. package/templates/artpacks/kCz/toxicshock_1080px.webp +0 -0
  41. package/templates/artpacks/kCz/toxicshock_1920px.webp +0 -0
  42. package/templates/artpacks/kCz/toxicshock_600px.webp +0 -0
  43. package/templates/artpacks/kCz/tractstack_1080px.webp +0 -0
  44. package/templates/artpacks/kCz/tractstack_1920px.webp +0 -0
  45. package/templates/artpacks/kCz/tractstack_600px.webp +0 -0
  46. package/templates/artpacks/kCz/tripdrips_1080px.webp +0 -0
  47. package/templates/artpacks/kCz/tripdrips_1920px.webp +0 -0
  48. package/templates/artpacks/kCz/tripdrips_600px.webp +0 -0
  49. package/templates/artpacks/kCz/wavedrips_1080px.webp +0 -0
  50. package/templates/artpacks/kCz/wavedrips_1920px.webp +0 -0
  51. package/templates/artpacks/kCz/wavedrips_600px.webp +0 -0
  52. package/templates/artpacks/t8k/beach_1080px.webp +0 -0
  53. package/templates/artpacks/t8k/beach_1920px.webp +0 -0
  54. package/templates/artpacks/t8k/beach_600px.webp +0 -0
  55. package/templates/artpacks/t8k/blast_1080px.webp +0 -0
  56. package/templates/artpacks/t8k/blast_1920px.webp +0 -0
  57. package/templates/artpacks/t8k/blast_600px.webp +0 -0
  58. package/templates/artpacks/t8k/bokeh_1080px.webp +0 -0
  59. package/templates/artpacks/t8k/bokeh_1920px.webp +0 -0
  60. package/templates/artpacks/t8k/bokeh_600px.webp +0 -0
  61. package/templates/artpacks/t8k/cartoon_1080px.webp +0 -0
  62. package/templates/artpacks/t8k/cartoon_1920px.webp +0 -0
  63. package/templates/artpacks/t8k/cartoon_600px.webp +0 -0
  64. package/templates/artpacks/t8k/darkeggshell_1080px.webp +0 -0
  65. package/templates/artpacks/t8k/darkeggshell_1920px.webp +0 -0
  66. package/templates/artpacks/t8k/darkeggshell_600px.webp +0 -0
  67. package/templates/artpacks/t8k/explosion_1080px.webp +0 -0
  68. package/templates/artpacks/t8k/explosion_1920px.webp +0 -0
  69. package/templates/artpacks/t8k/explosion_600px.webp +0 -0
  70. package/templates/artpacks/t8k/floral_1080px.webp +0 -0
  71. package/templates/artpacks/t8k/floral_1920px.webp +0 -0
  72. package/templates/artpacks/t8k/floral_600px.webp +0 -0
  73. package/templates/artpacks/t8k/flower_1080px.webp +0 -0
  74. package/templates/artpacks/t8k/flower_1920px.webp +0 -0
  75. package/templates/artpacks/t8k/flower_600px.webp +0 -0
  76. package/templates/artpacks/t8k/foliage_1080px.webp +0 -0
  77. package/templates/artpacks/t8k/foliage_1920px.webp +0 -0
  78. package/templates/artpacks/t8k/foliage_600px.webp +0 -0
  79. package/templates/artpacks/t8k/mist_1080px.webp +0 -0
  80. package/templates/artpacks/t8k/mist_1920px.webp +0 -0
  81. package/templates/artpacks/t8k/mist_600px.webp +0 -0
  82. package/templates/artpacks/t8k/portal_1080px.webp +0 -0
  83. package/templates/artpacks/t8k/portal_1920px.webp +0 -0
  84. package/templates/artpacks/t8k/portal_600px.webp +0 -0
  85. package/templates/artpacks/t8k/storytime_1080px.webp +0 -0
  86. package/templates/artpacks/t8k/storytime_1920px.webp +0 -0
  87. package/templates/artpacks/t8k/storytime_600px.webp +0 -0
  88. package/templates/artpacks/t8k/tacky_1080px.webp +0 -0
  89. package/templates/artpacks/t8k/tacky_1920px.webp +0 -0
  90. package/templates/artpacks/t8k/tacky_600px.webp +0 -0
  91. package/templates/artpacks/t8k/wallpaper_1080px.webp +0 -0
  92. package/templates/artpacks/t8k/wallpaper_1920px.webp +0 -0
  93. package/templates/artpacks/t8k/wallpaper_600px.webp +0 -0
  94. package/templates/brand/favicon.ico +0 -0
  95. package/templates/brand/logo.svg +0 -0
  96. package/templates/brand/og.png +0 -0
  97. package/templates/brand/oglogo.png +0 -0
  98. package/templates/brand/static.jpg +0 -0
  99. package/templates/brand/wordmark.svg +0 -0
  100. package/templates/css/custom.css +0 -0
  101. package/templates/css/frontend.css +1 -3519
  102. package/templates/css/storykeep.css +0 -0
  103. package/templates/custom/minimal/CodeHook.astro +3 -4
  104. package/templates/custom/minimal/CustomRoutes.astro +25 -31
  105. package/templates/custom/with-examples/CodeHook.astro +3 -4
  106. package/templates/custom/with-examples/CustomHero.astro +0 -0
  107. package/templates/custom/with-examples/CustomRoutes.astro +4 -8
  108. package/templates/custom/with-examples/pages/Collections.astro +58 -98
  109. package/templates/env.example +0 -0
  110. package/templates/fonts/Inter-Black.woff2 +0 -0
  111. package/templates/fonts/Inter-Bold.woff2 +0 -0
  112. package/templates/fonts/Inter-Regular.woff2 +0 -0
  113. package/templates/gitignore +42 -0
  114. package/templates/icons/h2.svg +0 -0
  115. package/templates/icons/h3.svg +0 -0
  116. package/templates/icons/h4.svg +0 -0
  117. package/templates/icons/h5.svg +0 -0
  118. package/templates/icons/image.svg +0 -0
  119. package/templates/icons/text.svg +0 -0
  120. package/templates/prettierignore +5 -0
  121. package/templates/prettierrc +19 -0
  122. package/templates/socials/codepen.svg +0 -0
  123. package/templates/socials/discord.svg +0 -0
  124. package/templates/socials/facebook.svg +0 -0
  125. package/templates/socials/github.svg +0 -0
  126. package/templates/socials/instagram.svg +0 -0
  127. package/templates/socials/linkedin.svg +0 -0
  128. package/templates/socials/mail.svg +0 -0
  129. package/templates/socials/rumble.svg +0 -0
  130. package/templates/socials/tiktok.svg +0 -0
  131. package/templates/socials/twitch.svg +0 -0
  132. package/templates/socials/twitter.svg +0 -0
  133. package/templates/socials/x.svg +0 -0
  134. package/templates/socials/youtube.svg +0 -0
  135. package/templates/src/components/Footer.astro +1 -1
  136. package/templates/src/components/Fragment.astro +0 -0
  137. package/templates/src/components/Header.astro +55 -52
  138. package/templates/src/components/Menu.tsx +0 -0
  139. package/templates/src/components/codehooks/BunnyVideoSetup.tsx +0 -0
  140. package/templates/src/components/codehooks/BunnyVideoWrapper.astro +0 -0
  141. package/templates/src/components/codehooks/EpinetDurationSelector.tsx +6 -3
  142. package/templates/src/components/codehooks/EpinetTableView.tsx +0 -0
  143. package/templates/src/components/codehooks/EpinetWrapper.tsx +0 -0
  144. package/templates/src/components/codehooks/FeaturedContent.astro +0 -0
  145. package/templates/src/components/codehooks/FeaturedContentSetup.tsx +0 -0
  146. package/templates/src/components/codehooks/ListContent.astro +0 -0
  147. package/templates/src/components/codehooks/ListContentSetup.tsx +0 -0
  148. package/templates/src/components/codehooks/SankeyDiagram.tsx +4 -3
  149. package/templates/src/components/compositor/Compositor.tsx +0 -0
  150. package/templates/src/components/compositor/Node.tsx +0 -0
  151. package/templates/src/components/compositor/NodeWithGuid.tsx +0 -0
  152. package/templates/src/components/compositor/PanelVisibilityWrapper.tsx +25 -11
  153. package/templates/src/components/compositor/elements/Belief.tsx +0 -0
  154. package/templates/src/components/compositor/elements/BgImage.tsx +0 -0
  155. package/templates/src/components/compositor/elements/BgVisualBreak.tsx +0 -0
  156. package/templates/src/components/compositor/elements/BunnyVideo.tsx +0 -0
  157. package/templates/src/components/compositor/elements/IdentifyAs.tsx +0 -0
  158. package/templates/src/components/compositor/elements/PlayButton.tsx +0 -0
  159. package/templates/src/components/compositor/elements/SignUp.tsx +0 -0
  160. package/templates/src/components/compositor/elements/Svg.tsx +0 -0
  161. package/templates/src/components/compositor/elements/ToggleBelief.tsx +0 -0
  162. package/templates/src/components/compositor/elements/YouTubeWrapper.tsx +0 -0
  163. package/templates/src/components/compositor/nodes/BgPaneWrapper.tsx +0 -0
  164. package/templates/src/components/compositor/nodes/GhostInsertBlock.tsx +0 -0
  165. package/templates/src/components/compositor/nodes/Markdown.tsx +0 -0
  166. package/templates/src/components/compositor/nodes/Pane.tsx +12 -5
  167. package/templates/src/components/compositor/nodes/Pane_eraser.tsx +0 -0
  168. package/templates/src/components/compositor/nodes/Pane_layout.tsx +0 -0
  169. package/templates/src/components/compositor/nodes/RenderChildren.tsx +0 -0
  170. package/templates/src/components/compositor/nodes/StoryFragment.tsx +0 -0
  171. package/templates/src/components/compositor/nodes/TagElement.tsx +0 -0
  172. package/templates/src/components/compositor/nodes/Widget.tsx +0 -0
  173. package/templates/src/components/compositor/nodes/tagElements/NodeA.tsx +0 -0
  174. package/templates/src/components/compositor/nodes/tagElements/NodeA_eraser.tsx +0 -0
  175. package/templates/src/components/compositor/nodes/tagElements/NodeAnchorComponent.tsx +0 -0
  176. package/templates/src/components/compositor/nodes/tagElements/NodeBasicTag.tsx +0 -0
  177. package/templates/src/components/compositor/nodes/tagElements/NodeBasicTag_eraser.tsx +0 -0
  178. package/templates/src/components/compositor/nodes/tagElements/NodeBasicTag_insert.tsx +0 -0
  179. package/templates/src/components/compositor/nodes/tagElements/NodeBasicTag_settings.tsx +0 -0
  180. package/templates/src/components/compositor/nodes/tagElements/NodeButton.tsx +0 -0
  181. package/templates/src/components/compositor/nodes/tagElements/NodeButton_eraser.tsx +0 -0
  182. package/templates/src/components/compositor/nodes/tagElements/NodeImg.tsx +0 -0
  183. package/templates/src/components/compositor/nodes/tagElements/NodeText.tsx +0 -0
  184. package/templates/src/components/compositor/nodes/tagElements/TabIndicator.tsx +0 -0
  185. package/templates/src/components/compositor/preview/FeaturedContentPreview.tsx +0 -0
  186. package/templates/src/components/compositor/preview/ListContentPreview.tsx +0 -0
  187. package/templates/src/components/compositor/preview/OgImagePreview.tsx +0 -0
  188. package/templates/src/components/compositor/preview/PaneSnapshotGenerator.tsx +0 -0
  189. package/templates/src/components/compositor/preview/PanesPreviewGenerator.tsx +0 -0
  190. package/templates/src/components/compositor/preview/VisualBreakPreview.tsx +0 -0
  191. package/templates/src/components/edit/Header.tsx +0 -0
  192. package/templates/src/components/edit/PanelSwitch.tsx +4 -8
  193. package/templates/src/components/edit/SettingsPanel.tsx +4 -1
  194. package/templates/src/components/edit/ToolBar.tsx +0 -0
  195. package/templates/src/components/edit/ToolMode.tsx +0 -0
  196. package/templates/src/components/edit/context/ContextPaneConfig.tsx +0 -0
  197. package/templates/src/components/edit/context/ContextPaneConfig_slug.tsx +0 -0
  198. package/templates/src/components/edit/context/ContextPaneConfig_title.tsx +0 -0
  199. package/templates/src/components/edit/pane/AddPanePanel.tsx +0 -0
  200. package/templates/src/components/edit/pane/AddPanePanel_break.tsx +0 -0
  201. package/templates/src/components/edit/pane/AddPanePanel_codehook.tsx +2 -1
  202. package/templates/src/components/edit/pane/AddPanePanel_new.tsx +1 -1
  203. package/templates/src/components/edit/pane/AddPanePanel_newAICopy.tsx +0 -0
  204. package/templates/src/components/edit/pane/AddPanePanel_newAICopy_modal.tsx +1 -1
  205. package/templates/src/components/edit/pane/AddPanePanel_newCopyMode.tsx +0 -0
  206. package/templates/src/components/edit/pane/AddPanePanel_newCustomCopy.tsx +0 -0
  207. package/templates/src/components/edit/pane/AddPanePanel_reuse.tsx +0 -0
  208. package/templates/src/components/edit/pane/ConfigPanePanel.tsx +1 -0
  209. package/templates/src/components/edit/pane/PageGen.tsx +0 -0
  210. package/templates/src/components/edit/pane/PageGenSelector.tsx +0 -0
  211. package/templates/src/components/edit/pane/PageGenSpecial.tsx +0 -0
  212. package/templates/src/components/edit/pane/PageGen_preview.tsx +0 -0
  213. package/templates/src/components/edit/pane/PanePanel_impression.tsx +0 -0
  214. package/templates/src/components/edit/pane/PanePanel_path.tsx +2 -2
  215. package/templates/src/components/edit/pane/PanePanel_slug.tsx +0 -0
  216. package/templates/src/components/edit/pane/PanePanel_title.tsx +0 -0
  217. package/templates/src/components/edit/panels/StyleBreakPanel.tsx +0 -0
  218. package/templates/src/components/edit/panels/StyleCodeHookPanel.tsx +0 -0
  219. package/templates/src/components/edit/panels/StyleElementPanel.tsx +0 -0
  220. package/templates/src/components/edit/panels/StyleElementPanel_add.tsx +1 -1
  221. package/templates/src/components/edit/panels/StyleElementPanel_remove.tsx +0 -0
  222. package/templates/src/components/edit/panels/StyleElementPanel_update.tsx +0 -0
  223. package/templates/src/components/edit/panels/StyleImagePanel.tsx +0 -0
  224. package/templates/src/components/edit/panels/StyleImagePanel_add.tsx +1 -1
  225. package/templates/src/components/edit/panels/StyleImagePanel_remove.tsx +0 -0
  226. package/templates/src/components/edit/panels/StyleImagePanel_update.tsx +0 -0
  227. package/templates/src/components/edit/panels/StyleLiElementPanel.tsx +0 -0
  228. package/templates/src/components/edit/panels/StyleLiElementPanel_add.tsx +1 -1
  229. package/templates/src/components/edit/panels/StyleLiElementPanel_remove.tsx +0 -0
  230. package/templates/src/components/edit/panels/StyleLiElementPanel_update.tsx +0 -0
  231. package/templates/src/components/edit/panels/StyleLinkPanel.tsx +0 -0
  232. package/templates/src/components/edit/panels/StyleLinkPanel_add.tsx +1 -1
  233. package/templates/src/components/edit/panels/StyleLinkPanel_config.tsx +1 -1
  234. package/templates/src/components/edit/panels/StyleLinkPanel_remove.tsx +0 -0
  235. package/templates/src/components/edit/panels/StyleLinkPanel_update.tsx +0 -0
  236. package/templates/src/components/edit/panels/StyleParentPanel.tsx +0 -0
  237. package/templates/src/components/edit/panels/StyleParentPanel_add.tsx +1 -1
  238. package/templates/src/components/edit/panels/StyleParentPanel_deleteLayer.tsx +0 -0
  239. package/templates/src/components/edit/panels/StyleParentPanel_remove.tsx +0 -0
  240. package/templates/src/components/edit/panels/StyleParentPanel_update.tsx +0 -0
  241. package/templates/src/components/edit/panels/StyleWidgetPanel.tsx +2 -0
  242. package/templates/src/components/edit/panels/StyleWidgetPanel_add.tsx +1 -1
  243. package/templates/src/components/edit/panels/StyleWidgetPanel_config.tsx +0 -0
  244. package/templates/src/components/edit/panels/StyleWidgetPanel_remove.tsx +0 -0
  245. package/templates/src/components/edit/panels/StyleWidgetPanel_update.tsx +0 -0
  246. package/templates/src/components/edit/state/SaveModal.tsx +43 -49
  247. package/templates/src/components/edit/state/StylesMemory.tsx +0 -0
  248. package/templates/src/components/edit/storyfragment/StoryFragmentConfigPanel.tsx +0 -0
  249. package/templates/src/components/edit/storyfragment/StoryFragmentPanel_menu.tsx +0 -0
  250. package/templates/src/components/edit/storyfragment/StoryFragmentPanel_og.tsx +0 -0
  251. package/templates/src/components/edit/storyfragment/StoryFragmentPanel_slug.tsx +0 -0
  252. package/templates/src/components/edit/storyfragment/StoryFragmentPanel_title.tsx +0 -0
  253. package/templates/src/components/edit/widgets/BeliefWidget.tsx +0 -0
  254. package/templates/src/components/edit/widgets/BunnyWidget.tsx +0 -0
  255. package/templates/src/components/edit/widgets/IdentifyAsWidget.tsx +0 -0
  256. package/templates/src/components/edit/widgets/SignupWidget.tsx +0 -0
  257. package/templates/src/components/edit/widgets/ToggleWidget.tsx +0 -0
  258. package/templates/src/components/edit/widgets/YouTubeWidget.tsx +0 -0
  259. package/templates/src/components/fields/ActionBuilderTimeSelector.tsx +0 -0
  260. package/templates/src/components/fields/ArtpackImage.tsx +0 -0
  261. package/templates/src/components/fields/BackgroundImage.tsx +0 -0
  262. package/templates/src/components/fields/BackgroundImageWrapper.tsx +1 -1
  263. package/templates/src/components/fields/BooleanParam.tsx +0 -0
  264. package/templates/src/components/fields/BunnyMomentSelector.tsx +0 -0
  265. package/templates/src/components/fields/ColorPickerCombo.tsx +0 -0
  266. package/templates/src/components/fields/ImageUpload.tsx +0 -0
  267. package/templates/src/components/fields/MultiParam.tsx +0 -0
  268. package/templates/src/components/fields/PaneBreakCollectionSelector.tsx +0 -0
  269. package/templates/src/components/fields/PaneBreakShapeSelector.tsx +0 -0
  270. package/templates/src/components/fields/SelectedTailwindClass.tsx +0 -0
  271. package/templates/src/components/fields/SingleParam.tsx +0 -0
  272. package/templates/src/components/fields/ViewportComboBox.tsx +10 -3
  273. package/templates/src/components/form/ActionBuilderField.tsx +0 -0
  274. package/templates/src/components/form/ActionBuilderSlugSelector.tsx +0 -0
  275. package/templates/src/components/form/BooleanToggle.tsx +0 -0
  276. package/templates/src/components/form/ColorPicker.tsx +0 -0
  277. package/templates/src/components/form/DateTimeInput.tsx +0 -0
  278. package/templates/src/components/form/EnumSelect.tsx +0 -0
  279. package/templates/src/components/form/FileUpload.tsx +0 -0
  280. package/templates/src/components/form/MagicPathBuilder.tsx +0 -0
  281. package/templates/src/components/form/NumberInput.tsx +0 -0
  282. package/templates/src/components/form/ParagraphArrayInput.tsx +0 -0
  283. package/templates/src/components/form/StringArrayInput.tsx +0 -0
  284. package/templates/src/components/form/StringInput.tsx +0 -0
  285. package/templates/src/components/form/UnsavedChangesBar.tsx +0 -0
  286. package/templates/src/components/form/advanced/APIConfigSection.tsx +0 -0
  287. package/templates/src/components/form/advanced/AuthConfigSection.tsx +0 -0
  288. package/templates/src/components/form/brand/BrandAssetsSection.tsx +0 -0
  289. package/templates/src/components/form/brand/BrandColorsSection.tsx +0 -0
  290. package/templates/src/components/form/brand/SEOSection.tsx +0 -0
  291. package/templates/src/components/form/brand/SiteConfigSection.tsx +0 -0
  292. package/templates/src/components/form/brand/SocialLinksSection.tsx +0 -0
  293. package/templates/src/components/profile/ProfileConsent.tsx +0 -0
  294. package/templates/src/components/profile/ProfileCreate.tsx +0 -0
  295. package/templates/src/components/profile/ProfileEdit.tsx +0 -0
  296. package/templates/src/components/profile/ProfileSwitch.tsx +0 -0
  297. package/templates/src/components/profile/ProfileUnlock.tsx +0 -0
  298. package/templates/src/components/storykeep/Dashboard.tsx +0 -0
  299. package/templates/src/components/storykeep/Dashboard_Activity.tsx +0 -0
  300. package/templates/src/components/storykeep/Dashboard_Advanced.tsx +1 -1
  301. package/templates/src/components/storykeep/Dashboard_Analytics.tsx +30 -7
  302. package/templates/src/components/storykeep/Dashboard_Branding.tsx +0 -0
  303. package/templates/src/components/storykeep/Dashboard_Content.tsx +6 -0
  304. package/templates/src/components/storykeep/controls/UsageCell.tsx +0 -0
  305. package/templates/src/components/storykeep/controls/content/BeliefForm.tsx +0 -0
  306. package/templates/src/components/storykeep/controls/content/BeliefTable.tsx +0 -0
  307. package/templates/src/components/storykeep/controls/content/ContentBrowser.tsx +0 -0
  308. package/templates/src/components/storykeep/controls/content/ContentSummary.tsx +0 -0
  309. package/templates/src/components/storykeep/controls/content/KnownResourceForm.tsx +0 -0
  310. package/templates/src/components/storykeep/controls/content/KnownResourceTable.tsx +0 -0
  311. package/templates/src/components/storykeep/controls/content/ManageContent.tsx +0 -0
  312. package/templates/src/components/storykeep/controls/content/MenuForm.tsx +0 -0
  313. package/templates/src/components/storykeep/controls/content/MenuTable.tsx +0 -0
  314. package/templates/src/components/storykeep/controls/content/ResourceBulkIngest.tsx +0 -0
  315. package/templates/src/components/storykeep/controls/content/ResourceForm.tsx +0 -0
  316. package/templates/src/components/storykeep/controls/content/ResourceTable.tsx +0 -0
  317. package/templates/src/components/storykeep/controls/content/StoryFragmentTable.tsx +0 -0
  318. package/templates/src/components/storykeep/state/BrandingWrapper.tsx +0 -0
  319. package/templates/src/components/storykeep/state/FetchAnalytics.tsx +0 -0
  320. package/templates/src/components/storykeep/widgets/ResponsiveLine.tsx +0 -0
  321. package/templates/src/components/storykeep/widgets/Wizard.tsx +13 -6
  322. package/templates/src/components/tenant/RegistrationForm.tsx +5 -3
  323. package/templates/src/components/widgets/BunnyVideoHero.astro +0 -0
  324. package/templates/src/components/widgets/Impression.tsx +0 -0
  325. package/templates/src/components/widgets/ImpressionWrapper.tsx +0 -0
  326. package/templates/src/constants/beliefs.ts +0 -0
  327. package/templates/src/constants/brandThemes.ts +0 -0
  328. package/templates/src/constants/prompts.json +0 -0
  329. package/templates/src/constants/shapes.ts +0 -0
  330. package/templates/src/constants/stopWords.ts +0 -0
  331. package/templates/src/constants/tailwindColors.json +0 -0
  332. package/templates/src/constants.ts +0 -0
  333. package/templates/src/hooks/useFormState.ts +0 -0
  334. package/templates/src/layouts/Layout.astro +120 -11
  335. package/templates/src/lib/session.ts +0 -0
  336. package/templates/src/lib/storyData.ts +2 -1
  337. package/templates/src/middleware.ts +0 -0
  338. package/templates/src/pages/404.astro +0 -0
  339. package/templates/src/pages/[...slug]/edit.astro +9 -3
  340. package/templates/src/pages/[...slug].astro +3 -1
  341. package/templates/src/pages/api/auth/decode.ts +0 -0
  342. package/templates/src/pages/api/auth/login.ts +0 -0
  343. package/templates/src/pages/api/auth/logout.ts +0 -0
  344. package/templates/src/pages/api/auth/profile.ts +0 -0
  345. package/templates/src/pages/api/orphan-analysis.ts +0 -0
  346. package/templates/src/pages/api/tailwind.ts +10 -1
  347. package/templates/src/pages/collections/[param1].astro +0 -0
  348. package/templates/src/pages/context/[...contextSlug]/edit.astro +8 -2
  349. package/templates/src/pages/context/[...contextSlug].astro +7 -2
  350. package/templates/src/pages/llms.txt.ts +0 -0
  351. package/templates/src/pages/maint.astro +0 -0
  352. package/templates/src/pages/media/[...slug].astro +0 -0
  353. package/templates/src/pages/robots.txt.ts +0 -0
  354. package/templates/src/pages/sandbox/activate.astro +0 -0
  355. package/templates/src/pages/sandbox/register.astro +0 -0
  356. package/templates/src/pages/sandbox/success.astro +0 -0
  357. package/templates/src/pages/sitemap.xml.ts +0 -0
  358. package/templates/src/pages/storykeep/advanced.astro +1 -1
  359. package/templates/src/pages/storykeep/branding.astro +1 -1
  360. package/templates/src/pages/storykeep/content.astro +1 -1
  361. package/templates/src/pages/storykeep/init.astro +40 -1
  362. package/templates/src/pages/storykeep/login.astro +0 -0
  363. package/templates/src/pages/storykeep/logout.astro +0 -0
  364. package/templates/src/pages/storykeep/profile.astro +0 -0
  365. package/templates/src/pages/storykeep.astro +1 -1
  366. package/templates/src/stores/analytics.ts +0 -0
  367. package/templates/src/stores/backend.ts +0 -0
  368. package/templates/src/stores/navigation.ts +0 -0
  369. package/templates/src/stores/nodes.ts +32 -1
  370. package/templates/src/stores/nodesHistory.ts +0 -0
  371. package/templates/src/stores/notificationSystem.ts +0 -0
  372. package/templates/src/stores/orphanAnalysis.ts +0 -0
  373. package/templates/src/stores/storykeep.ts +5 -0
  374. package/templates/src/types/astro.ts +0 -0
  375. package/templates/src/types/compositorTypes.ts +0 -0
  376. package/templates/src/types/formTypes.ts +0 -0
  377. package/templates/src/types/multiTenant.ts +0 -0
  378. package/templates/src/types/nodeProps.ts +0 -0
  379. package/templates/src/types/tractstack.ts +0 -0
  380. package/templates/src/utils/aai/getTitleSlug.ts +0 -0
  381. package/templates/src/utils/actions/actionButton.ts +0 -0
  382. package/templates/src/utils/actions/lispLexer.ts +0 -0
  383. package/templates/src/utils/actions/preParse_Action.ts +0 -0
  384. package/templates/src/utils/actions/preParse_Bunny.ts +0 -0
  385. package/templates/src/utils/actions/preParse_Clicked.ts +0 -0
  386. package/templates/src/utils/actions/preParse_Impression.ts +0 -0
  387. package/templates/src/utils/api/advancedConfig.ts +0 -0
  388. package/templates/src/utils/api/advancedHelpers.ts +0 -0
  389. package/templates/src/utils/api/beliefConfig.ts +0 -0
  390. package/templates/src/utils/api/beliefHelpers.ts +0 -0
  391. package/templates/src/utils/api/brandConfig.ts +0 -0
  392. package/templates/src/utils/api/brandHelpers.ts +0 -0
  393. package/templates/src/utils/api/fileHelpers.ts +0 -0
  394. package/templates/src/utils/api/menuConfig.ts +0 -0
  395. package/templates/src/utils/api/menuHelpers.ts +0 -0
  396. package/templates/src/utils/api/resourceConfig.ts +0 -0
  397. package/templates/src/utils/api/resourceHelpers.ts +0 -0
  398. package/templates/src/utils/api/tenantConfig.ts +0 -0
  399. package/templates/src/utils/api/tenantHelpers.ts +0 -0
  400. package/templates/src/utils/api.ts +0 -0
  401. package/templates/src/utils/auth.ts +0 -0
  402. package/templates/src/utils/backend.ts +0 -0
  403. package/templates/src/utils/compositor/TemplateMarkdowns.ts +0 -0
  404. package/templates/src/utils/compositor/TemplateNodes.ts +0 -0
  405. package/templates/src/utils/compositor/TemplatePanes.ts +0 -0
  406. package/templates/src/utils/compositor/allowInsert.ts +0 -0
  407. package/templates/src/utils/compositor/domHelpers.ts +0 -0
  408. package/templates/src/utils/compositor/handleClickEvent.ts +0 -0
  409. package/templates/src/utils/compositor/nodesHelper.ts +0 -0
  410. package/templates/src/utils/compositor/nodesMarkdownGenerator.ts +0 -0
  411. package/templates/src/utils/compositor/processMarkdown.ts +0 -0
  412. package/templates/src/utils/compositor/reduceNodesClassNames.ts +0 -0
  413. package/templates/src/utils/compositor/tailwindClasses.ts +0 -0
  414. package/templates/src/utils/compositor/tailwindColors.ts +0 -0
  415. package/templates/src/utils/compositor/templateMarkdownStyles.ts +8 -0
  416. package/templates/src/utils/compositor/typeGuards.ts +0 -0
  417. package/templates/src/utils/etl/extractor.ts +0 -0
  418. package/templates/src/utils/etl/index.ts +0 -0
  419. package/templates/src/utils/etl/loader.ts +0 -0
  420. package/templates/src/utils/etl/transformer.ts +0 -0
  421. package/templates/src/utils/helpers.ts +1 -0
  422. package/templates/src/utils/layout.ts +6 -6
  423. package/templates/src/utils/profileStorage.ts +0 -0
  424. package/templates/src/utils/useInterval.ts +0 -0
  425. package/templates/tailwind.config.cjs +0 -0
  426. package/utils/create-resolver.ts +0 -0
  427. package/utils/inject-files.ts +17 -1
  428. package/utils/validate-config.ts +0 -0
@@ -505,62 +505,56 @@ export default function SaveModal({
505
505
  const { dirtyPaneIds, classes: dirtyClasses } =
506
506
  ctx.getDirtyNodesClassData();
507
507
 
508
- if (dirtyClasses.length === 0) {
509
- addDebugMessage(
510
- 'No dirty classes to process, skipping Tailwind update'
511
- );
512
- } else {
513
- // STEP 1: Generate CSS using Astro API
514
- const astroEndpoint = `/api/tailwind`;
515
- const astroPayload = { dirtyPaneIds, dirtyClasses };
516
- const astroResponse = await fetch(astroEndpoint, {
517
- method: 'POST',
518
- headers: {
519
- 'Content-Type': 'application/json',
520
- 'X-Tenant-ID': tenantId,
521
- },
522
- credentials: 'include',
523
- body: JSON.stringify(astroPayload),
524
- });
525
-
526
- if (!astroResponse.ok) {
527
- throw new Error(
528
- `CSS generation failed! status: ${astroResponse.status}`
529
- );
530
- }
508
+ // STEP 1: Generate CSS using Astro API
509
+ const astroEndpoint = `/api/tailwind`;
510
+ const astroPayload = { dirtyPaneIds, dirtyClasses };
511
+ const astroResponse = await fetch(astroEndpoint, {
512
+ method: 'POST',
513
+ headers: {
514
+ 'Content-Type': 'application/json',
515
+ 'X-Tenant-ID': tenantId,
516
+ },
517
+ credentials: 'include',
518
+ body: JSON.stringify(astroPayload),
519
+ });
531
520
 
532
- const astroResult = await astroResponse.json();
521
+ if (!astroResponse.ok) {
522
+ throw new Error(
523
+ `CSS generation failed! status: ${astroResponse.status}`
524
+ );
525
+ }
533
526
 
534
- if (!astroResult.success || !astroResult.generatedCss) {
535
- throw new Error('CSS generation failed: no CSS returned');
536
- }
527
+ const astroResult = await astroResponse.json();
537
528
 
538
- addDebugMessage(
539
- `CSS generated: ${astroResult.generatedCss.length} bytes for ${dirtyClasses.length} classes`
540
- );
529
+ if (!astroResult.success || !astroResult.generatedCss) {
530
+ throw new Error('CSS generation failed: no CSS returned');
531
+ }
541
532
 
542
- // STEP 2: Save CSS to Go backend
543
- const goEndpoint = `${goBackend}/api/v1/tailwind/update`;
544
- const goPayload = { frontendCss: astroResult.generatedCss };
545
- const goResponse = await fetch(goEndpoint, {
546
- method: 'POST',
547
- headers: {
548
- 'Content-Type': 'application/json',
549
- 'X-Tenant-ID': tenantId,
550
- },
551
- credentials: 'include',
552
- body: JSON.stringify(goPayload),
553
- });
533
+ addDebugMessage(
534
+ `CSS generated: ${astroResult.generatedCss.length} bytes for ${dirtyClasses.length} classes`
535
+ );
554
536
 
555
- if (!goResponse.ok) {
556
- throw new Error(`CSS save failed! status: ${goResponse.status}`);
557
- }
537
+ // STEP 2: Save CSS to Go backend
538
+ const goEndpoint = `${goBackend}/api/v1/tailwind/update`;
539
+ const goPayload = { frontendCss: astroResult.generatedCss };
540
+ const goResponse = await fetch(goEndpoint, {
541
+ method: 'POST',
542
+ headers: {
543
+ 'Content-Type': 'application/json',
544
+ 'X-Tenant-ID': tenantId,
545
+ },
546
+ credentials: 'include',
547
+ body: JSON.stringify(goPayload),
548
+ });
558
549
 
559
- const goResult = await goResponse.json();
560
- addDebugMessage(
561
- `CSS saved successfully: stylesVer ${goResult.stylesVer}`
562
- );
550
+ if (!goResponse.ok) {
551
+ throw new Error(`CSS save failed! status: ${goResponse.status}`);
563
552
  }
553
+
554
+ const goResult = await goResponse.json();
555
+ addDebugMessage(
556
+ `CSS saved successfully: stylesVer ${goResult.stylesVer}`
557
+ );
564
558
  } catch (error) {
565
559
  const errorMsg =
566
560
  error instanceof Error ? error.message : 'Unknown error';
File without changes
@@ -120,7 +120,7 @@ const BackgroundImageWrapper = ({
120
120
  <label className="block text-sm font-bold text-gray-700">
121
121
  Position
122
122
  </label>
123
- <div className="flex space-x-4">
123
+ <div className="flex flex-wrap space-x-4">
124
124
  {(
125
125
  [
126
126
  'background',
File without changes
File without changes
File without changes
File without changes
@@ -13,7 +13,7 @@ import CheckIcon from '@heroicons/react/24/outline/CheckIcon';
13
13
  import DevicePhoneMobileIcon from '@heroicons/react/24/outline/DevicePhoneMobileIcon';
14
14
  import DeviceTabletIcon from '@heroicons/react/24/outline/DeviceTabletIcon';
15
15
  import ComputerDesktopIcon from '@heroicons/react/24/outline/ComputerDesktopIcon';
16
- import { classNames } from '@/utils/helpers';
16
+ import { classNames, useDropdownDirection } from '@/utils/helpers';
17
17
  import { tailwindToHex, colorValues } from '@/utils/compositor/tailwindColors';
18
18
  import type { BrandConfig } from '@/types/tractstack';
19
19
 
@@ -46,6 +46,8 @@ const ViewportComboBox = ({
46
46
  const [query, setQuery] = useState('');
47
47
  const [isNowNegative, setIsNowNegative] = useState(isNegative);
48
48
  const inputRef = useRef<HTMLInputElement>(null);
49
+ const comboboxRef = useRef<HTMLDivElement>(null);
50
+ const { openAbove, maxHeight } = useDropdownDirection(comboboxRef);
49
51
 
50
52
  const Icon =
51
53
  viewport === 'mobile'
@@ -155,7 +157,7 @@ const ViewportComboBox = ({
155
157
  openOnKeyPress={true}
156
158
  composite={true}
157
159
  >
158
- <div className="relative">
160
+ <div ref={comboboxRef} className="relative">
159
161
  <div className="relative flex items-center">
160
162
  {isColorValue && (
161
163
  <div
@@ -187,7 +189,12 @@ const ViewportComboBox = ({
187
189
  </Combobox.Trigger>
188
190
  </div>
189
191
  </div>
190
- <Combobox.Content className="absolute z-50 mt-1 max-h-32 w-full overflow-auto rounded-md bg-white py-1 text-xl shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none">
192
+ <Combobox.Content
193
+ className={`absolute z-50 mt-1 w-full overflow-auto rounded-md bg-white py-1 text-xl shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none ${
194
+ openAbove ? 'bottom-full mb-1' : 'top-full'
195
+ }`}
196
+ style={{ maxHeight: `${maxHeight}px` }}
197
+ >
191
198
  {collection.items.length === 0 ? (
192
199
  <div className="text-mydarkgrey relative cursor-default select-none px-4 py-2">
193
200
  Nothing found.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -131,7 +131,7 @@ export default function StoryKeepDashboard_Advanced({
131
131
  };
132
132
 
133
133
  return (
134
- <div className="space-y-6">
134
+ <div className="space-y-8">
135
135
  {initialize && (
136
136
  <div className="rounded-md border border-blue-200 bg-blue-50 p-4">
137
137
  <div className="flex">
@@ -238,7 +238,7 @@ export default function StoryKeepDashboard_Analytics({
238
238
  )}
239
239
 
240
240
  {/* Stats Cards Grid */}
241
- <div className="mb-6 grid grid-cols-1 gap-4 md:grid-cols-3">
241
+ <div className="mb-6 grid grid-cols-3 gap-4">
242
242
  {stats.map((item) => {
243
243
  const period = item.period;
244
244
  let firstTimeValue = 0,
@@ -261,11 +261,11 @@ export default function StoryKeepDashboard_Analytics({
261
261
  return (
262
262
  <div
263
263
  key={item.period}
264
- className="rounded-lg border border-gray-100 bg-white px-4 py-3 shadow-sm transition-colors hover:border-cyan-100"
264
+ className="rounded-lg border border-gray-100 bg-white px-2 py-2.5 shadow-sm transition-colors hover:border-cyan-100 md:px-4 md:py-3"
265
265
  >
266
266
  <dt className="text-sm font-bold text-gray-800">{item.name}</dt>
267
267
 
268
- <dd className="mt-2">
268
+ <dd className="mt-1 md:mt-2">
269
269
  <div className="flex items-end justify-between">
270
270
  <div className="flex-1">
271
271
  <div className="text-sm text-gray-600">Events</div>
@@ -276,10 +276,11 @@ export default function StoryKeepDashboard_Analytics({
276
276
  </div>
277
277
  </dd>
278
278
 
279
- <hr className="my-3.5 border-gray-100" />
279
+ <hr className="my-1.5 border-gray-100 md:my-3.5" />
280
280
 
281
281
  <dd>
282
- <div className="flex items-end justify-between">
282
+ {/* Desktop: side-by-side layout */}
283
+ <div className="hidden items-end justify-between md:flex">
283
284
  <div className="flex-1">
284
285
  <div className="text-sm text-gray-600">
285
286
  Anonymous Visitors
@@ -299,13 +300,35 @@ export default function StoryKeepDashboard_Analytics({
299
300
  </div>
300
301
  </div>
301
302
  </div>
303
+
304
+ {/* Mobile: stacked layout */}
305
+ <div className="md:hidden">
306
+ <div className="mb-1.5">
307
+ <div className="text-sm text-gray-600">
308
+ Anonymous Visitors
309
+ </div>
310
+ <div className="text-2xl font-bold tracking-tight text-cyan-700">
311
+ {firstTimeValue === 0
312
+ ? '-'
313
+ : formatNumber(firstTimeValue)}
314
+ </div>
315
+ </div>
316
+ <div>
317
+ <div className="text-sm text-gray-600">Known Leads</div>
318
+ <div className="text-2xl font-bold tracking-tight text-cyan-700">
319
+ {returningValue === 0
320
+ ? '-'
321
+ : formatNumber(returningValue)}
322
+ </div>
323
+ </div>
324
+ </div>
302
325
  </dd>
303
326
  </div>
304
327
  );
305
328
  })}
306
329
 
307
330
  {/* Total Leads Card */}
308
- <div className="rounded-lg border border-gray-100 bg-white px-4 py-3 shadow-sm transition-colors hover:border-cyan-100 md:col-span-3">
331
+ <div className="col-span-3 rounded-lg border border-gray-100 bg-white px-4 py-3 shadow-sm transition-colors hover:border-cyan-100">
309
332
  <div className="flex items-center justify-between">
310
333
  <dt className="text-sm font-bold text-gray-800">Total Leads</dt>
311
334
  <div className="flex items-center gap-2">
@@ -369,7 +392,7 @@ export default function StoryKeepDashboard_Analytics({
369
392
  </div>
370
393
 
371
394
  {/* User Journey Section */}
372
- <div className="mb-6 overflow-hidden">
395
+ <div className="mb-6 overflow-visible">
373
396
  <h3 className="mb-4 text-lg font-bold text-gray-900">
374
397
  User Journey Analytics
375
398
  </h3>
@@ -64,6 +64,12 @@ const StoryKeepDashboard_Content = ({
64
64
  handleContentSubtabChange(tabId as any, setActiveContentTab);
65
65
  };
66
66
 
67
+ useEffect(() => {
68
+ if (createMenu) {
69
+ setActiveContentTab('manage');
70
+ }
71
+ }, [createMenu]);
72
+
67
73
  // Lightweight content summary fetch with retry logic
68
74
  useEffect(() => {
69
75
  let retryCount = 0;
@@ -1,12 +1,13 @@
1
1
  import { useState, useEffect } from 'react';
2
2
  import { useStore } from '@nanostores/react';
3
3
  import { skipWizard } from '@/stores/navigation';
4
+ import { fullContentMapStore } from '@/stores/analytics';
4
5
  import type { FullContentMapItem, BrandConfig } from '@/types/tractstack';
5
6
 
6
7
  interface StoryKeepWizardProps {
7
8
  fullContentMap: FullContentMapItem[];
8
9
  homeSlug: string;
9
- brandConfig: BrandConfig; // Now received as prop instead of fetched
10
+ brandConfig: BrandConfig;
10
11
  }
11
12
 
12
13
  interface WizardData {
@@ -50,7 +51,7 @@ const wizardSteps: WizardStep[] = [
50
51
  key: 'hasAnyMenu',
51
52
  message: "A menu helps visitors navigate. Let's create one now.",
52
53
  buttonText: 'Create a Menu',
53
- href: '/storykeep/content/menus/create',
54
+ href: '/storykeep/content?create-menu',
54
55
  },
55
56
  {
56
57
  key: 'hasMenu',
@@ -128,11 +129,18 @@ export default function Wizard({
128
129
  const [wizardData, setWizardData] = useState<WizardData | null>(null);
129
130
  const [loading, setLoading] = useState(true);
130
131
  const $skipWizard = useStore(skipWizard);
132
+ const $clientContentMap = useStore(fullContentMapStore);
133
+ const activeContentMap =
134
+ $clientContentMap?.data?.length > 0
135
+ ? $clientContentMap.data
136
+ : fullContentMap;
131
137
 
132
138
  useEffect(() => {
133
139
  const buildWizardData = async () => {
134
140
  try {
135
- const homePage = fullContentMap.find((item) => item.slug === homeSlug);
141
+ const homePage = activeContentMap.find(
142
+ (item) => item.slug === homeSlug
143
+ );
136
144
 
137
145
  let homeData = null;
138
146
  if (homePage) {
@@ -165,7 +173,7 @@ export default function Wizard({
165
173
  hasPanes: !!homePage?.panes?.length,
166
174
  hasSeo: !!homePage?.description,
167
175
  hasMenu: !!homeData?.menuId,
168
- hasAnyMenu: fullContentMap.some((item) => item.type === 'Menu'),
176
+ hasAnyMenu: activeContentMap.some((item) => item.type === 'Menu'),
169
177
  };
170
178
 
171
179
  setWizardData(data);
@@ -176,11 +184,10 @@ export default function Wizard({
176
184
  }
177
185
  };
178
186
 
179
- // Only build wizard data if we have brandConfig
180
187
  if (brandConfig) {
181
188
  buildWizardData();
182
189
  }
183
- }, [fullContentMap, homeSlug, brandConfig]); // Added brandConfig to dependencies
190
+ }, [activeContentMap, homeSlug, brandConfig]);
184
191
 
185
192
  if (loading || !wizardData || !brandConfig || $skipWizard) {
186
193
  return null;
@@ -175,7 +175,7 @@ export default function RegistrationForm({
175
175
 
176
176
  return (
177
177
  <>
178
- <div className="mx-auto max-w-2xl p-6">
178
+ <div className="mx-auto max-w-2xl p-6" style={{ paddingBottom: '112px' }}>
179
179
  <div className="rounded-lg bg-white p-8 shadow-lg">
180
180
  <div className="mb-8">
181
181
  <div className="h-16">
@@ -291,11 +291,13 @@ export default function RegistrationForm({
291
291
  value={state.email}
292
292
  onChange={(value) => updateField('email', value)}
293
293
  type="email"
294
- placeholder="john@example.com"
294
+ placeholder="susie@amazing.com"
295
295
  error={errors.email}
296
296
  />
297
297
  <p className="mt-1 text-sm text-gray-500">
298
- You'll receive an activation email at this address
298
+ {isInitMode
299
+ ? `Used for password reset, etc.`
300
+ : `You'll receive an activation email at this address`}
299
301
  </p>
300
302
  </div>
301
303
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes