astro-tractstack 2.0.0-rc.8 → 2.0.0

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 (141) hide show
  1. package/LICENSE +8 -97
  2. package/README.md +7 -5
  3. package/bin/create-tractstack.js +35 -11
  4. package/dist/index.js +106 -29
  5. package/package.json +10 -5
  6. package/templates/css/frontend.css +1 -1
  7. package/templates/custom/minimal/CodeHook.astro +13 -12
  8. package/templates/custom/minimal/CustomRoutes.astro +25 -31
  9. package/templates/custom/with-examples/CodeHook.astro +22 -11
  10. package/templates/custom/with-examples/CustomRoutes.astro +4 -8
  11. package/templates/custom/with-examples/ProductCard.astro +29 -0
  12. package/templates/custom/with-examples/ProductCardWrapper.astro +43 -0
  13. package/templates/custom/with-examples/ProductGrid.astro +64 -0
  14. package/templates/custom/with-examples/pages/Collections.astro +58 -98
  15. package/templates/gitignore +42 -0
  16. package/templates/prettierignore +5 -0
  17. package/templates/prettierrc +19 -0
  18. package/templates/src/client/app.js +127 -0
  19. package/templates/src/client/htmx.min.js +3519 -0
  20. package/templates/src/client/view.js +429 -0
  21. package/templates/src/components/Footer.astro +4 -9
  22. package/templates/src/components/Header.astro +67 -60
  23. package/templates/src/components/Menu.tsx +188 -52
  24. package/templates/src/components/codehooks/BunnyVideoSetup.tsx +2 -2
  25. package/templates/src/components/codehooks/EpinetDurationSelector.tsx +9 -13
  26. package/templates/src/components/codehooks/EpinetTableView.tsx +11 -7
  27. package/templates/src/components/codehooks/EpinetWrapper.tsx +1 -0
  28. package/templates/src/components/codehooks/FeaturedArticle.astro +105 -0
  29. package/templates/src/components/codehooks/FeaturedArticleSetup.tsx +318 -0
  30. package/templates/src/components/codehooks/ListContent.astro +32 -162
  31. package/templates/src/components/codehooks/ListContentSetup.tsx +43 -138
  32. package/templates/src/components/codehooks/ProductCardSetup.tsx +152 -0
  33. package/templates/src/components/codehooks/ProductGridSetup.tsx +274 -0
  34. package/templates/src/components/codehooks/SearchWidget.tsx +453 -0
  35. package/templates/src/components/compositor/Node.tsx +3 -6
  36. package/templates/src/components/compositor/PanelVisibilityWrapper.tsx +21 -11
  37. package/templates/src/components/compositor/elements/BunnyVideo.tsx +21 -20
  38. package/templates/src/components/compositor/nodes/Pane.tsx +51 -21
  39. package/templates/src/components/compositor/nodes/RenderChildren.tsx +6 -1
  40. package/templates/src/components/compositor/nodes/Widget.tsx +16 -2
  41. package/templates/src/components/compositor/preview/FeaturedArticlePreview.tsx +155 -0
  42. package/templates/src/components/compositor/preview/PaneSnapshotGenerator.tsx +20 -1
  43. package/templates/src/components/edit/Header.tsx +10 -4
  44. package/templates/src/components/edit/PanelSwitch.tsx +11 -7
  45. package/templates/src/components/edit/SettingsPanel.tsx +29 -18
  46. package/templates/src/components/edit/ToolBar.tsx +1 -28
  47. package/templates/src/components/edit/ToolMode.tsx +45 -32
  48. package/templates/src/components/edit/pane/AddPanePanel_break.tsx +12 -2
  49. package/templates/src/components/edit/pane/AddPanePanel_codehook.tsx +8 -2
  50. package/templates/src/components/edit/pane/AddPanePanel_newAICopy_modal.tsx +1 -1
  51. package/templates/src/components/edit/pane/ConfigPanePanel.tsx +17 -27
  52. package/templates/src/components/edit/pane/PageGenSelector.tsx +16 -16
  53. package/templates/src/components/edit/pane/PageGenSpecial.tsx +26 -49
  54. package/templates/src/components/edit/pane/PageGen_preview.tsx +17 -2
  55. package/templates/src/components/edit/pane/PanePanel_path.tsx +2 -4
  56. package/templates/src/components/edit/pane/PanePanel_title.tsx +243 -76
  57. package/templates/src/components/edit/panels/StyleBreakPanel.tsx +17 -19
  58. package/templates/src/components/edit/panels/StyleCodeHookPanel.tsx +48 -37
  59. package/templates/src/components/edit/panels/StyleElementPanel_add.tsx +60 -55
  60. package/templates/src/components/edit/panels/StyleImagePanel_add.tsx +56 -50
  61. package/templates/src/components/edit/panels/StyleLiElementPanel_add.tsx +54 -47
  62. package/templates/src/components/edit/panels/StyleLinkPanel_add.tsx +54 -44
  63. package/templates/src/components/edit/panels/StyleLinkPanel_config.tsx +113 -138
  64. package/templates/src/components/edit/panels/StyleParentPanel_add.tsx +54 -40
  65. package/templates/src/components/edit/panels/StyleWidgetPanel.tsx +3 -3
  66. package/templates/src/components/edit/panels/StyleWidgetPanel_add.tsx +56 -49
  67. package/templates/src/components/edit/panels/StyleWidgetPanel_config.tsx +14 -5
  68. package/templates/src/components/edit/state/SaveModal.tsx +316 -169
  69. package/templates/src/components/edit/storyfragment/StoryFragmentPanel_og.tsx +1 -1
  70. package/templates/src/components/edit/storyfragment/StoryFragmentPanel_slug.tsx +56 -55
  71. package/templates/src/components/edit/widgets/BunnyWidget.tsx +538 -59
  72. package/templates/src/components/edit/widgets/InteractiveDisclosureWidget.tsx +656 -0
  73. package/templates/src/components/edit/widgets/ToggleWidget.tsx +9 -16
  74. package/templates/src/components/fields/ArtpackImage.tsx +4 -1
  75. package/templates/src/components/fields/BackgroundImage.tsx +1 -1
  76. package/templates/src/components/fields/BackgroundImageWrapper.tsx +127 -35
  77. package/templates/src/components/fields/ColorPickerCombo.tsx +66 -62
  78. package/templates/src/components/fields/ImageUpload.tsx +1 -1
  79. package/templates/src/components/fields/ViewportComboBox.tsx +59 -42
  80. package/templates/src/components/form/ActionBuilderBeliefSelector.tsx +117 -0
  81. package/templates/src/components/form/ActionBuilderField.tsx +306 -87
  82. package/templates/src/components/search/SearchModal.tsx +420 -0
  83. package/templates/src/components/search/SearchResults.tsx +367 -0
  84. package/templates/src/components/search/SearchWrapper.tsx +46 -0
  85. package/templates/src/components/storykeep/Dashboard_Advanced.tsx +1 -1
  86. package/templates/src/components/storykeep/Dashboard_Analytics.tsx +34 -8
  87. package/templates/src/components/storykeep/Dashboard_Content.tsx +6 -0
  88. package/templates/src/components/storykeep/StoryKeepBackdrop.astro +87 -0
  89. package/templates/src/components/storykeep/controls/content/BeliefForm.tsx +37 -33
  90. package/templates/src/components/storykeep/controls/content/MenuForm.tsx +55 -7
  91. package/templates/src/components/storykeep/controls/content/ResourceForm.tsx +17 -2
  92. package/templates/src/components/storykeep/controls/content/StoryFragmentTable.tsx +5 -8
  93. package/templates/src/components/storykeep/state/FetchAnalytics.tsx +274 -228
  94. package/templates/src/components/storykeep/widgets/Wizard.tsx +14 -7
  95. package/templates/src/components/tenant/RegistrationForm.tsx +1 -1
  96. package/templates/src/components/widgets/ImpressionWrapper.tsx +0 -1
  97. package/templates/src/constants/shapes.ts +9 -0
  98. package/templates/src/constants.ts +2121 -16
  99. package/templates/src/hooks/useSearch.ts +228 -0
  100. package/templates/src/layouts/Layout.astro +213 -104
  101. package/templates/src/lib/storyData.ts +4 -1
  102. package/templates/src/pages/[...slug]/edit.astro +14 -14
  103. package/templates/src/pages/[...slug].astro +82 -21
  104. package/templates/src/pages/api/orphan-analysis.ts +0 -1
  105. package/templates/src/pages/api/tailwind.ts +23 -21
  106. package/templates/src/pages/context/[...contextSlug]/edit.astro +14 -14
  107. package/templates/src/pages/context/[...contextSlug].astro +7 -2
  108. package/templates/src/pages/storykeep/advanced.astro +5 -4
  109. package/templates/src/pages/storykeep/branding.astro +5 -4
  110. package/templates/src/pages/storykeep/content.astro +5 -4
  111. package/templates/src/pages/storykeep/init.astro +40 -1
  112. package/templates/src/pages/storykeep/login.astro +1 -1
  113. package/templates/src/pages/storykeep.astro +5 -4
  114. package/templates/src/stores/nodes.ts +59 -88
  115. package/templates/src/stores/orphanAnalysis.ts +19 -21
  116. package/templates/src/stores/storykeep.ts +7 -0
  117. package/templates/src/types/compositorTypes.ts +6 -0
  118. package/templates/src/types/tractstack.ts +17 -0
  119. package/templates/src/utils/actions/lispLexer.ts +2 -2
  120. package/templates/src/utils/actions/preParse_Action.ts +3 -0
  121. package/templates/src/utils/api/beliefHelpers.ts +12 -36
  122. package/templates/src/utils/api/menuHelpers.ts +2 -2
  123. package/templates/src/utils/api.ts +26 -0
  124. package/templates/src/utils/compositor/TemplateNodes.ts +7 -0
  125. package/templates/src/utils/compositor/allowInsert.ts +5 -3
  126. package/templates/src/utils/compositor/nodesHelper.ts +4 -0
  127. package/templates/src/utils/compositor/processMarkdown.ts +16 -2
  128. package/templates/src/utils/compositor/reduceNodesClassNames.ts +4 -0
  129. package/templates/src/utils/compositor/templateMarkdownStyles.ts +13 -13
  130. package/templates/src/utils/compositor/typeGuards.ts +1 -0
  131. package/templates/src/utils/customHelpers.ts +38 -0
  132. package/templates/src/utils/helpers.ts +2 -2
  133. package/templates/src/utils/layout.ts +65 -144
  134. package/utils/inject-files.ts +95 -18
  135. package/templates/src/client/analytics-events.js +0 -207
  136. package/templates/src/client/belief-events.js +0 -191
  137. package/templates/src/client/sse.js +0 -613
  138. package/templates/src/components/codehooks/FeaturedContent.astro +0 -273
  139. package/templates/src/components/codehooks/FeaturedContentSetup.tsx +0 -738
  140. package/templates/src/components/compositor/preview/FeaturedContentPreview.tsx +0 -128
  141. package/templates/src/components/edit/pane/PanePanel_slug.tsx +0 -219
@@ -780,7 +780,7 @@ const StoryFragmentOpenGraphPanel = ({
780
780
  <div className="mb-3 flex space-x-1">
781
781
  <input
782
782
  type="text"
783
- className="flex-grow rounded-l-md border border-gray-300 p-2 shadow-sm focus:border-cyan-600 focus:ring-cyan-600"
783
+ className="w-full flex-grow rounded-l-md border border-gray-300 p-2 shadow-sm focus:border-cyan-600 focus:ring-cyan-600"
784
784
  placeholder="Add a new tag..."
785
785
  value={newTopicTitle}
786
786
  onChange={(e) => setNewTopicTitle(e.target.value)}
@@ -1,8 +1,11 @@
1
1
  import { useState, useEffect, type ChangeEvent } from 'react';
2
+ import { useStore } from '@nanostores/react';
2
3
  import ExclamationTriangleIcon from '@heroicons/react/24/outline/ExclamationTriangleIcon';
3
4
  import CheckIcon from '@heroicons/react/24/outline/CheckIcon';
4
5
  import LockClosedIcon from '@heroicons/react/24/outline/LockClosedIcon';
6
+ import { Switch } from '@ark-ui/react/switch';
5
7
  import { getCtx } from '@/stores/nodes';
8
+ import { pendingHomePageSlugStore } from '@/stores/storykeep';
6
9
  import { cloneDeep } from '@/utils/helpers';
7
10
  import type { BrandConfig } from '@/types/tractstack';
8
11
  import {
@@ -28,6 +31,8 @@ const StoryFragmentSlugPanel = ({
28
31
  const [validationError, setValidationError] = useState<string | null>(null);
29
32
  const [canSave, setCanSave] = useState(false);
30
33
  const isHomeSlug = slug === config.HOME_SLUG;
34
+ const pendingHomePageSlug = useStore(pendingHomePageSlugStore);
35
+ const isSetAsHomePage = pendingHomePageSlug === slug;
31
36
 
32
37
  const ctx = getCtx();
33
38
  const allNodes = ctx.allNodes.get();
@@ -129,6 +134,14 @@ const StoryFragmentSlugPanel = ({
129
134
  }
130
135
  };
131
136
 
137
+ const handleSetAsHomePageChange = (details: { checked: boolean }) => {
138
+ if (details.checked) {
139
+ pendingHomePageSlugStore.set(slug);
140
+ } else {
141
+ pendingHomePageSlugStore.set(null);
142
+ }
143
+ };
144
+
132
145
  return (
133
146
  <div className="group mb-4 w-full rounded-b-md bg-white px-1.5 py-6">
134
147
  <div className="px-3.5">
@@ -194,72 +207,60 @@ const StoryFragmentSlugPanel = ({
194
207
  </span>
195
208
  </div>
196
209
  </div>
210
+
197
211
  {validationError && (
198
212
  <div className="mt-2 text-sm text-red-600">
199
213
  <ExclamationTriangleIcon className="mr-1 inline h-4 w-4" />
200
214
  {validationError}
201
215
  </div>
202
216
  )}
217
+
203
218
  {isHomeSlug && (
204
- <div className="mt-2 text-sm text-gray-600">
205
- <LockClosedIcon className="mr-1 inline h-4 w-4" />
206
- This is your home page slug and cannot be modified
219
+ <div className="mt-4">
220
+ <div className="inline-flex items-center rounded-full bg-blue-100 px-3 py-1.5 text-sm font-bold text-blue-800">
221
+ <LockClosedIcon className="mr-1.5 h-4 w-4" />
222
+ Home Page
223
+ </div>
224
+ <div className="mt-2 text-sm text-gray-600">
225
+ This is your current home page
226
+ </div>
207
227
  </div>
208
228
  )}
209
- <div className="mt-4 text-lg">
210
- <div className="text-gray-600">
211
- Create a clean, descriptive URL slug that helps users and search
212
- engines understand the page content.
213
- <ul className="ml-4 mt-1">
214
- <li>
215
- <CheckIcon className="inline h-4 w-4" /> Use hyphens to separate
216
- words
217
- </li>
218
- <li>
219
- <CheckIcon className="inline h-4 w-4" /> Keep it short and
220
- descriptive
221
- </li>
222
- <li>
223
- <CheckIcon className="inline h-4 w-4" /> Use only lowercase
224
- letters, numbers, and hyphens
225
- </li>
226
- <li>
227
- <CheckIcon className="inline h-4 w-4" /> Must start and end with
228
- a letter or number
229
- </li>
230
- </ul>
231
- </div>
232
- <div className="py-4">
233
- {!isHomeSlug && (
234
- <>
235
- {charCount < 3 && (
236
- <span className="text-red-500">
237
- Slug must be at least 3 characters
238
- </span>
239
- )}
240
- {charCount >= 3 && charCount < 5 && !validationError && (
241
- <span className="text-gray-500">
242
- Consider adding more characters for better description
243
- </span>
244
- )}
245
- {warning && !validationError && (
246
- <span className="text-yellow-500">
247
- Slug is getting long - consider shortening it
248
- </span>
249
- )}
250
- {isValid && canSave && charCount >= 5 && !validationError && (
251
- <span className="text-green-500">
252
- Good URL length and format!
253
- </span>
254
- )}
255
- {isValid && !canSave && !validationError && (
256
- <span className="text-gray-500">
257
- Valid characters but needs proper formatting to save
258
- </span>
259
- )}
260
- </>
229
+
230
+ {!isHomeSlug && isValid && canSave && (
231
+ <div className="mt-4">
232
+ <div className="flex items-center space-x-3">
233
+ <Switch.Root
234
+ checked={isSetAsHomePage}
235
+ onCheckedChange={handleSetAsHomePageChange}
236
+ className="flex items-center"
237
+ >
238
+ <Switch.Control
239
+ className={`relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none ${
240
+ isSetAsHomePage ? 'bg-cyan-600' : 'bg-gray-200'
241
+ }`}
242
+ >
243
+ <Switch.Thumb
244
+ className={`pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow-lg ring-0 transition duration-200 ease-in-out ${
245
+ isSetAsHomePage ? 'translate-x-5' : 'translate-x-0'
246
+ }`}
247
+ />
248
+ </Switch.Control>
249
+ <Switch.HiddenInput />
250
+ </Switch.Root>
251
+ <span className="text-sm text-gray-700">Set as Home Page</span>
252
+ </div>
253
+ {isSetAsHomePage && (
254
+ <div className="mt-2 text-sm text-cyan-600">
255
+ Will be set as home page when saved
256
+ </div>
261
257
  )}
262
258
  </div>
259
+ )}
260
+
261
+ <div className="mt-4 text-sm text-gray-600">
262
+ Create a clean, descriptive URL slug that helps users and search
263
+ engines understand the page content.
263
264
  </div>
264
265
  </div>
265
266
  </div>