astro-tractstack 2.0.0-rc.3 → 2.0.0-rc.31
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.
- package/LICENSE +0 -0
- package/README.md +227 -98
- package/astro.d.ts +0 -0
- package/bin/create-tractstack.js +125 -45
- package/dist/index.js +21 -1
- package/package.json +10 -5
- package/templates/artpacks/kCz/captainBreakfast_1080px.webp +0 -0
- package/templates/artpacks/kCz/captainBreakfast_1920px.webp +0 -0
- package/templates/artpacks/kCz/captainBreakfast_600px.webp +0 -0
- package/templates/artpacks/kCz/cleanDrips_1080px.webp +0 -0
- package/templates/artpacks/kCz/cleanDrips_1920px.webp +0 -0
- package/templates/artpacks/kCz/cleanDrips_600px.webp +0 -0
- package/templates/artpacks/kCz/crispwaves_1080px.webp +0 -0
- package/templates/artpacks/kCz/crispwaves_1920px.webp +0 -0
- package/templates/artpacks/kCz/crispwaves_600px.webp +0 -0
- package/templates/artpacks/kCz/dragonSkin_1080px.webp +0 -0
- package/templates/artpacks/kCz/dragonSkin_1920px.webp +0 -0
- package/templates/artpacks/kCz/dragonSkin_600px.webp +0 -0
- package/templates/artpacks/kCz/dragon_1080px.webp +0 -0
- package/templates/artpacks/kCz/dragon_1920px.webp +0 -0
- package/templates/artpacks/kCz/dragon_600px.webp +0 -0
- package/templates/artpacks/kCz/nightcity_1080px.webp +0 -0
- package/templates/artpacks/kCz/nightcity_1920px.webp +0 -0
- package/templates/artpacks/kCz/nightcity_600px.webp +0 -0
- package/templates/artpacks/kCz/pattern1_1080px.webp +0 -0
- package/templates/artpacks/kCz/pattern1_1920px.webp +0 -0
- package/templates/artpacks/kCz/pattern1_600px.webp +0 -0
- package/templates/artpacks/kCz/pattern2_1080px.webp +0 -0
- package/templates/artpacks/kCz/pattern2_1920px.webp +0 -0
- package/templates/artpacks/kCz/pattern2_600px.webp +0 -0
- package/templates/artpacks/kCz/skindrips_1080px.webp +0 -0
- package/templates/artpacks/kCz/skindrips_1920px.webp +0 -0
- package/templates/artpacks/kCz/skindrips_600px.webp +0 -0
- package/templates/artpacks/kCz/slimetime_1080px.webp +0 -0
- package/templates/artpacks/kCz/slimetime_1920px.webp +0 -0
- package/templates/artpacks/kCz/slimetime_600px.webp +0 -0
- package/templates/artpacks/kCz/snake_1080px.webp +0 -0
- package/templates/artpacks/kCz/snake_1920px.webp +0 -0
- package/templates/artpacks/kCz/snake_600px.webp +0 -0
- package/templates/artpacks/kCz/toxicshock_1080px.webp +0 -0
- package/templates/artpacks/kCz/toxicshock_1920px.webp +0 -0
- package/templates/artpacks/kCz/toxicshock_600px.webp +0 -0
- package/templates/artpacks/kCz/tractstack_1080px.webp +0 -0
- package/templates/artpacks/kCz/tractstack_1920px.webp +0 -0
- package/templates/artpacks/kCz/tractstack_600px.webp +0 -0
- package/templates/artpacks/kCz/tripdrips_1080px.webp +0 -0
- package/templates/artpacks/kCz/tripdrips_1920px.webp +0 -0
- package/templates/artpacks/kCz/tripdrips_600px.webp +0 -0
- package/templates/artpacks/kCz/wavedrips_1080px.webp +0 -0
- package/templates/artpacks/kCz/wavedrips_1920px.webp +0 -0
- package/templates/artpacks/kCz/wavedrips_600px.webp +0 -0
- package/templates/artpacks/t8k/beach_1080px.webp +0 -0
- package/templates/artpacks/t8k/beach_1920px.webp +0 -0
- package/templates/artpacks/t8k/beach_600px.webp +0 -0
- package/templates/artpacks/t8k/blast_1080px.webp +0 -0
- package/templates/artpacks/t8k/blast_1920px.webp +0 -0
- package/templates/artpacks/t8k/blast_600px.webp +0 -0
- package/templates/artpacks/t8k/bokeh_1080px.webp +0 -0
- package/templates/artpacks/t8k/bokeh_1920px.webp +0 -0
- package/templates/artpacks/t8k/bokeh_600px.webp +0 -0
- package/templates/artpacks/t8k/cartoon_1080px.webp +0 -0
- package/templates/artpacks/t8k/cartoon_1920px.webp +0 -0
- package/templates/artpacks/t8k/cartoon_600px.webp +0 -0
- package/templates/artpacks/t8k/darkeggshell_1080px.webp +0 -0
- package/templates/artpacks/t8k/darkeggshell_1920px.webp +0 -0
- package/templates/artpacks/t8k/darkeggshell_600px.webp +0 -0
- package/templates/artpacks/t8k/explosion_1080px.webp +0 -0
- package/templates/artpacks/t8k/explosion_1920px.webp +0 -0
- package/templates/artpacks/t8k/explosion_600px.webp +0 -0
- package/templates/artpacks/t8k/floral_1080px.webp +0 -0
- package/templates/artpacks/t8k/floral_1920px.webp +0 -0
- package/templates/artpacks/t8k/floral_600px.webp +0 -0
- package/templates/artpacks/t8k/flower_1080px.webp +0 -0
- package/templates/artpacks/t8k/flower_1920px.webp +0 -0
- package/templates/artpacks/t8k/flower_600px.webp +0 -0
- package/templates/artpacks/t8k/foliage_1080px.webp +0 -0
- package/templates/artpacks/t8k/foliage_1920px.webp +0 -0
- package/templates/artpacks/t8k/foliage_600px.webp +0 -0
- package/templates/artpacks/t8k/mist_1080px.webp +0 -0
- package/templates/artpacks/t8k/mist_1920px.webp +0 -0
- package/templates/artpacks/t8k/mist_600px.webp +0 -0
- package/templates/artpacks/t8k/portal_1080px.webp +0 -0
- package/templates/artpacks/t8k/portal_1920px.webp +0 -0
- package/templates/artpacks/t8k/portal_600px.webp +0 -0
- package/templates/artpacks/t8k/storytime_1080px.webp +0 -0
- package/templates/artpacks/t8k/storytime_1920px.webp +0 -0
- package/templates/artpacks/t8k/storytime_600px.webp +0 -0
- package/templates/artpacks/t8k/tacky_1080px.webp +0 -0
- package/templates/artpacks/t8k/tacky_1920px.webp +0 -0
- package/templates/artpacks/t8k/tacky_600px.webp +0 -0
- package/templates/artpacks/t8k/wallpaper_1080px.webp +0 -0
- package/templates/artpacks/t8k/wallpaper_1920px.webp +0 -0
- package/templates/artpacks/t8k/wallpaper_600px.webp +0 -0
- package/templates/brand/favicon.ico +0 -0
- package/templates/brand/logo.svg +0 -0
- package/templates/brand/og.png +0 -0
- package/templates/brand/oglogo.png +0 -0
- package/templates/brand/static.jpg +0 -0
- package/templates/brand/wordmark.svg +0 -0
- package/templates/css/custom.css +0 -0
- package/templates/css/frontend.css +1 -3519
- package/templates/css/storykeep.css +0 -0
- package/templates/custom/minimal/CodeHook.astro +7 -6
- package/templates/custom/minimal/CustomRoutes.astro +25 -31
- package/templates/custom/with-examples/CodeHook.astro +7 -6
- package/templates/custom/with-examples/CustomHero.astro +0 -0
- package/templates/custom/with-examples/CustomRoutes.astro +4 -8
- package/templates/custom/with-examples/pages/Collections.astro +58 -98
- package/templates/env.example +0 -0
- package/templates/fonts/Inter-Black.woff2 +0 -0
- package/templates/fonts/Inter-Bold.woff2 +0 -0
- package/templates/fonts/Inter-Regular.woff2 +0 -0
- package/templates/gitignore +42 -0
- package/templates/icons/h2.svg +0 -0
- package/templates/icons/h3.svg +0 -0
- package/templates/icons/h4.svg +0 -0
- package/templates/icons/h5.svg +0 -0
- package/templates/icons/image.svg +0 -0
- package/templates/icons/text.svg +0 -0
- package/templates/prettierignore +5 -0
- package/templates/prettierrc +19 -0
- package/templates/socials/codepen.svg +0 -0
- package/templates/socials/discord.svg +0 -0
- package/templates/socials/facebook.svg +0 -0
- package/templates/socials/github.svg +0 -0
- package/templates/socials/instagram.svg +0 -0
- package/templates/socials/linkedin.svg +0 -0
- package/templates/socials/mail.svg +0 -0
- package/templates/socials/rumble.svg +0 -0
- package/templates/socials/tiktok.svg +0 -0
- package/templates/socials/twitch.svg +0 -0
- package/templates/socials/twitter.svg +0 -0
- package/templates/socials/x.svg +0 -0
- package/templates/socials/youtube.svg +0 -0
- package/templates/src/client/htmx.min.js +3519 -0
- package/templates/src/components/Footer.astro +1 -1
- package/templates/src/components/Fragment.astro +0 -0
- package/templates/src/components/Header.astro +55 -52
- package/templates/src/components/Menu.tsx +0 -0
- package/templates/src/components/codehooks/BunnyVideoSetup.tsx +0 -0
- package/templates/src/components/codehooks/BunnyVideoWrapper.astro +0 -0
- package/templates/src/components/codehooks/EpinetDurationSelector.tsx +9 -13
- package/templates/src/components/codehooks/EpinetTableView.tsx +11 -7
- package/templates/src/components/codehooks/EpinetWrapper.tsx +0 -0
- package/templates/src/components/codehooks/FeaturedContent.astro +0 -0
- package/templates/src/components/codehooks/FeaturedContentSetup.tsx +0 -0
- package/templates/src/components/codehooks/ListContent.astro +0 -0
- package/templates/src/components/codehooks/ListContentSetup.tsx +0 -0
- package/templates/src/components/codehooks/SankeyDiagram.tsx +4 -3
- package/templates/src/components/compositor/Compositor.tsx +0 -0
- package/templates/src/components/compositor/Node.tsx +1 -1
- package/templates/src/components/compositor/NodeWithGuid.tsx +0 -0
- package/templates/src/components/compositor/PanelVisibilityWrapper.tsx +25 -11
- package/templates/src/components/compositor/elements/Belief.tsx +0 -0
- package/templates/src/components/compositor/elements/BgImage.tsx +0 -0
- package/templates/src/components/compositor/elements/BgVisualBreak.tsx +0 -0
- package/templates/src/components/compositor/elements/BunnyVideo.tsx +0 -0
- package/templates/src/components/compositor/elements/IdentifyAs.tsx +0 -0
- package/templates/src/components/compositor/elements/PlayButton.tsx +0 -0
- package/templates/src/components/compositor/elements/SignUp.tsx +0 -0
- package/templates/src/components/compositor/elements/Svg.tsx +0 -0
- package/templates/src/components/compositor/elements/ToggleBelief.tsx +0 -0
- package/templates/src/components/compositor/elements/YouTubeWrapper.tsx +0 -0
- package/templates/src/components/compositor/nodes/BgPaneWrapper.tsx +0 -0
- package/templates/src/components/compositor/nodes/GhostInsertBlock.tsx +0 -0
- package/templates/src/components/compositor/nodes/Markdown.tsx +0 -0
- package/templates/src/components/compositor/nodes/Pane.tsx +13 -6
- package/templates/src/components/compositor/nodes/Pane_eraser.tsx +0 -0
- package/templates/src/components/compositor/nodes/Pane_layout.tsx +0 -0
- package/templates/src/components/compositor/nodes/RenderChildren.tsx +0 -0
- package/templates/src/components/compositor/nodes/StoryFragment.tsx +0 -0
- package/templates/src/components/compositor/nodes/TagElement.tsx +0 -0
- package/templates/src/components/compositor/nodes/Widget.tsx +0 -0
- package/templates/src/components/compositor/nodes/tagElements/NodeA.tsx +0 -0
- package/templates/src/components/compositor/nodes/tagElements/NodeA_eraser.tsx +0 -0
- package/templates/src/components/compositor/nodes/tagElements/NodeAnchorComponent.tsx +0 -0
- package/templates/src/components/compositor/nodes/tagElements/NodeBasicTag.tsx +0 -0
- package/templates/src/components/compositor/nodes/tagElements/NodeBasicTag_eraser.tsx +0 -0
- package/templates/src/components/compositor/nodes/tagElements/NodeBasicTag_insert.tsx +0 -0
- package/templates/src/components/compositor/nodes/tagElements/NodeBasicTag_settings.tsx +0 -0
- package/templates/src/components/compositor/nodes/tagElements/NodeButton.tsx +0 -0
- package/templates/src/components/compositor/nodes/tagElements/NodeButton_eraser.tsx +0 -0
- package/templates/src/components/compositor/nodes/tagElements/NodeImg.tsx +0 -0
- package/templates/src/components/compositor/nodes/tagElements/NodeText.tsx +0 -0
- package/templates/src/components/compositor/nodes/tagElements/TabIndicator.tsx +0 -0
- package/templates/src/components/compositor/preview/FeaturedContentPreview.tsx +0 -0
- package/templates/src/components/compositor/preview/ListContentPreview.tsx +0 -0
- package/templates/src/components/compositor/preview/OgImagePreview.tsx +0 -0
- package/templates/src/components/compositor/preview/PaneSnapshotGenerator.tsx +0 -0
- package/templates/src/components/compositor/preview/PanesPreviewGenerator.tsx +0 -0
- package/templates/src/components/compositor/preview/VisualBreakPreview.tsx +0 -0
- package/templates/src/components/edit/Header.tsx +9 -3
- package/templates/src/components/edit/PanelSwitch.tsx +4 -8
- package/templates/src/components/edit/SettingsPanel.tsx +24 -17
- package/templates/src/components/edit/ToolBar.tsx +0 -0
- package/templates/src/components/edit/ToolMode.tsx +93 -33
- package/templates/src/components/edit/context/ContextPaneConfig.tsx +0 -0
- package/templates/src/components/edit/context/ContextPaneConfig_slug.tsx +0 -0
- package/templates/src/components/edit/context/ContextPaneConfig_title.tsx +0 -0
- package/templates/src/components/edit/pane/AddPanePanel.tsx +0 -0
- package/templates/src/components/edit/pane/AddPanePanel_break.tsx +0 -0
- package/templates/src/components/edit/pane/AddPanePanel_codehook.tsx +2 -1
- package/templates/src/components/edit/pane/AddPanePanel_new.tsx +1 -1
- package/templates/src/components/edit/pane/AddPanePanel_newAICopy.tsx +0 -0
- package/templates/src/components/edit/pane/AddPanePanel_newAICopy_modal.tsx +1 -1
- package/templates/src/components/edit/pane/AddPanePanel_newCopyMode.tsx +0 -0
- package/templates/src/components/edit/pane/AddPanePanel_newCustomCopy.tsx +0 -0
- package/templates/src/components/edit/pane/AddPanePanel_reuse.tsx +0 -0
- package/templates/src/components/edit/pane/ConfigPanePanel.tsx +1 -0
- package/templates/src/components/edit/pane/PageGen.tsx +0 -0
- package/templates/src/components/edit/pane/PageGenSelector.tsx +0 -0
- package/templates/src/components/edit/pane/PageGenSpecial.tsx +0 -0
- package/templates/src/components/edit/pane/PageGen_preview.tsx +0 -0
- package/templates/src/components/edit/pane/PanePanel_impression.tsx +0 -0
- package/templates/src/components/edit/pane/PanePanel_path.tsx +2 -2
- package/templates/src/components/edit/pane/PanePanel_slug.tsx +0 -0
- package/templates/src/components/edit/pane/PanePanel_title.tsx +0 -0
- package/templates/src/components/edit/panels/StyleBreakPanel.tsx +0 -0
- package/templates/src/components/edit/panels/StyleCodeHookPanel.tsx +0 -0
- package/templates/src/components/edit/panels/StyleElementPanel.tsx +0 -0
- package/templates/src/components/edit/panels/StyleElementPanel_add.tsx +1 -1
- package/templates/src/components/edit/panels/StyleElementPanel_remove.tsx +0 -0
- package/templates/src/components/edit/panels/StyleElementPanel_update.tsx +0 -0
- package/templates/src/components/edit/panels/StyleImagePanel.tsx +0 -0
- package/templates/src/components/edit/panels/StyleImagePanel_add.tsx +1 -1
- package/templates/src/components/edit/panels/StyleImagePanel_remove.tsx +0 -0
- package/templates/src/components/edit/panels/StyleImagePanel_update.tsx +0 -0
- package/templates/src/components/edit/panels/StyleLiElementPanel.tsx +0 -0
- package/templates/src/components/edit/panels/StyleLiElementPanel_add.tsx +1 -1
- package/templates/src/components/edit/panels/StyleLiElementPanel_remove.tsx +0 -0
- package/templates/src/components/edit/panels/StyleLiElementPanel_update.tsx +0 -0
- package/templates/src/components/edit/panels/StyleLinkPanel.tsx +0 -0
- package/templates/src/components/edit/panels/StyleLinkPanel_add.tsx +1 -1
- package/templates/src/components/edit/panels/StyleLinkPanel_config.tsx +1 -1
- package/templates/src/components/edit/panels/StyleLinkPanel_remove.tsx +0 -0
- package/templates/src/components/edit/panels/StyleLinkPanel_update.tsx +0 -0
- package/templates/src/components/edit/panels/StyleParentPanel.tsx +0 -0
- package/templates/src/components/edit/panels/StyleParentPanel_add.tsx +1 -1
- package/templates/src/components/edit/panels/StyleParentPanel_deleteLayer.tsx +0 -0
- package/templates/src/components/edit/panels/StyleParentPanel_remove.tsx +0 -0
- package/templates/src/components/edit/panels/StyleParentPanel_update.tsx +0 -0
- package/templates/src/components/edit/panels/StyleWidgetPanel.tsx +2 -0
- package/templates/src/components/edit/panels/StyleWidgetPanel_add.tsx +1 -1
- package/templates/src/components/edit/panels/StyleWidgetPanel_config.tsx +0 -0
- package/templates/src/components/edit/panels/StyleWidgetPanel_remove.tsx +0 -0
- package/templates/src/components/edit/panels/StyleWidgetPanel_update.tsx +0 -0
- package/templates/src/components/edit/state/SaveModal.tsx +156 -48
- package/templates/src/components/edit/state/StylesMemory.tsx +0 -0
- package/templates/src/components/edit/storyfragment/StoryFragmentConfigPanel.tsx +0 -0
- package/templates/src/components/edit/storyfragment/StoryFragmentPanel_menu.tsx +0 -0
- package/templates/src/components/edit/storyfragment/StoryFragmentPanel_og.tsx +0 -0
- package/templates/src/components/edit/storyfragment/StoryFragmentPanel_slug.tsx +56 -55
- package/templates/src/components/edit/storyfragment/StoryFragmentPanel_title.tsx +0 -0
- package/templates/src/components/edit/widgets/BeliefWidget.tsx +0 -0
- package/templates/src/components/edit/widgets/BunnyWidget.tsx +0 -0
- package/templates/src/components/edit/widgets/IdentifyAsWidget.tsx +0 -0
- package/templates/src/components/edit/widgets/SignupWidget.tsx +0 -0
- package/templates/src/components/edit/widgets/ToggleWidget.tsx +0 -0
- package/templates/src/components/edit/widgets/YouTubeWidget.tsx +0 -0
- package/templates/src/components/fields/ActionBuilderTimeSelector.tsx +0 -0
- package/templates/src/components/fields/ArtpackImage.tsx +0 -0
- package/templates/src/components/fields/BackgroundImage.tsx +0 -0
- package/templates/src/components/fields/BackgroundImageWrapper.tsx +1 -1
- package/templates/src/components/fields/BooleanParam.tsx +0 -0
- package/templates/src/components/fields/BunnyMomentSelector.tsx +0 -0
- package/templates/src/components/fields/ColorPickerCombo.tsx +0 -0
- package/templates/src/components/fields/ImageUpload.tsx +0 -0
- package/templates/src/components/fields/MultiParam.tsx +0 -0
- package/templates/src/components/fields/PaneBreakCollectionSelector.tsx +0 -0
- package/templates/src/components/fields/PaneBreakShapeSelector.tsx +0 -0
- package/templates/src/components/fields/SelectedTailwindClass.tsx +0 -0
- package/templates/src/components/fields/SingleParam.tsx +0 -0
- package/templates/src/components/fields/ViewportComboBox.tsx +10 -3
- package/templates/src/components/form/ActionBuilderField.tsx +0 -0
- package/templates/src/components/form/ActionBuilderSlugSelector.tsx +0 -0
- package/templates/src/components/form/BooleanToggle.tsx +0 -0
- package/templates/src/components/form/ColorPicker.tsx +0 -0
- package/templates/src/components/form/DateTimeInput.tsx +0 -0
- package/templates/src/components/form/EnumSelect.tsx +0 -0
- package/templates/src/components/form/FileUpload.tsx +0 -0
- package/templates/src/components/form/MagicPathBuilder.tsx +0 -0
- package/templates/src/components/form/NumberInput.tsx +0 -0
- package/templates/src/components/form/ParagraphArrayInput.tsx +0 -0
- package/templates/src/components/form/StringArrayInput.tsx +0 -0
- package/templates/src/components/form/StringInput.tsx +0 -0
- package/templates/src/components/form/UnsavedChangesBar.tsx +0 -0
- package/templates/src/components/form/advanced/APIConfigSection.tsx +0 -0
- package/templates/src/components/form/advanced/AuthConfigSection.tsx +0 -0
- package/templates/src/components/form/brand/BrandAssetsSection.tsx +0 -0
- package/templates/src/components/form/brand/BrandColorsSection.tsx +0 -0
- package/templates/src/components/form/brand/SEOSection.tsx +0 -0
- package/templates/src/components/form/brand/SiteConfigSection.tsx +0 -0
- package/templates/src/components/form/brand/SocialLinksSection.tsx +0 -0
- package/templates/src/components/profile/ProfileConsent.tsx +0 -0
- package/templates/src/components/profile/ProfileCreate.tsx +0 -0
- package/templates/src/components/profile/ProfileEdit.tsx +0 -0
- package/templates/src/components/profile/ProfileSwitch.tsx +0 -0
- package/templates/src/components/profile/ProfileUnlock.tsx +0 -0
- package/templates/src/components/storykeep/Dashboard.tsx +0 -0
- package/templates/src/components/storykeep/Dashboard_Activity.tsx +0 -0
- package/templates/src/components/storykeep/Dashboard_Advanced.tsx +1 -1
- package/templates/src/components/storykeep/Dashboard_Analytics.tsx +34 -8
- package/templates/src/components/storykeep/Dashboard_Branding.tsx +0 -0
- package/templates/src/components/storykeep/Dashboard_Content.tsx +6 -0
- package/templates/src/components/storykeep/controls/UsageCell.tsx +0 -0
- package/templates/src/components/storykeep/controls/content/BeliefForm.tsx +0 -0
- package/templates/src/components/storykeep/controls/content/BeliefTable.tsx +0 -0
- package/templates/src/components/storykeep/controls/content/ContentBrowser.tsx +0 -0
- package/templates/src/components/storykeep/controls/content/ContentSummary.tsx +0 -0
- package/templates/src/components/storykeep/controls/content/KnownResourceForm.tsx +0 -0
- package/templates/src/components/storykeep/controls/content/KnownResourceTable.tsx +0 -0
- package/templates/src/components/storykeep/controls/content/ManageContent.tsx +0 -0
- package/templates/src/components/storykeep/controls/content/MenuForm.tsx +0 -0
- package/templates/src/components/storykeep/controls/content/MenuTable.tsx +0 -0
- package/templates/src/components/storykeep/controls/content/ResourceBulkIngest.tsx +0 -0
- package/templates/src/components/storykeep/controls/content/ResourceForm.tsx +0 -0
- package/templates/src/components/storykeep/controls/content/ResourceTable.tsx +0 -0
- package/templates/src/components/storykeep/controls/content/StoryFragmentTable.tsx +5 -8
- package/templates/src/components/storykeep/state/BrandingWrapper.tsx +0 -0
- package/templates/src/components/storykeep/state/FetchAnalytics.tsx +274 -228
- package/templates/src/components/storykeep/widgets/ResponsiveLine.tsx +0 -0
- package/templates/src/components/storykeep/widgets/Wizard.tsx +13 -6
- package/templates/src/components/tenant/RegistrationForm.tsx +5 -3
- package/templates/src/components/widgets/BunnyVideoHero.astro +0 -0
- package/templates/src/components/widgets/Impression.tsx +0 -0
- package/templates/src/components/widgets/ImpressionWrapper.tsx +0 -0
- package/templates/src/constants/beliefs.ts +0 -0
- package/templates/src/constants/brandThemes.ts +0 -0
- package/templates/src/constants/prompts.json +0 -0
- package/templates/src/constants/shapes.ts +0 -0
- package/templates/src/constants/stopWords.ts +0 -0
- package/templates/src/constants/tailwindColors.json +0 -0
- package/templates/src/constants.ts +0 -0
- package/templates/src/hooks/useFormState.ts +0 -0
- package/templates/src/layouts/Layout.astro +129 -20
- package/templates/src/lib/session.ts +0 -0
- package/templates/src/lib/storyData.ts +2 -1
- package/templates/src/middleware.ts +0 -0
- package/templates/src/pages/404.astro +0 -0
- package/templates/src/pages/[...slug]/edit.astro +18 -5
- package/templates/src/pages/[...slug].astro +10 -3
- package/templates/src/pages/api/auth/decode.ts +0 -0
- package/templates/src/pages/api/auth/login.ts +0 -0
- package/templates/src/pages/api/auth/logout.ts +0 -0
- package/templates/src/pages/api/auth/profile.ts +0 -0
- package/templates/src/pages/api/orphan-analysis.ts +0 -1
- package/templates/src/pages/api/tailwind.ts +23 -21
- package/templates/src/pages/collections/[param1].astro +0 -0
- package/templates/src/pages/context/[...contextSlug]/edit.astro +18 -5
- package/templates/src/pages/context/[...contextSlug].astro +7 -2
- package/templates/src/pages/llms.txt.ts +0 -0
- package/templates/src/pages/maint.astro +0 -0
- package/templates/src/pages/media/[...slug].astro +0 -0
- package/templates/src/pages/robots.txt.ts +0 -0
- package/templates/src/pages/sandbox/activate.astro +0 -0
- package/templates/src/pages/sandbox/register.astro +0 -0
- package/templates/src/pages/sandbox/success.astro +0 -0
- package/templates/src/pages/sitemap.xml.ts +0 -0
- package/templates/src/pages/storykeep/advanced.astro +2 -3
- package/templates/src/pages/storykeep/branding.astro +2 -3
- package/templates/src/pages/storykeep/content.astro +2 -3
- package/templates/src/pages/storykeep/init.astro +40 -1
- package/templates/src/pages/storykeep/login.astro +0 -0
- package/templates/src/pages/storykeep/logout.astro +0 -0
- package/templates/src/pages/storykeep/profile.astro +0 -0
- package/templates/src/pages/storykeep.astro +2 -3
- package/templates/src/stores/analytics.ts +0 -0
- package/templates/src/stores/backend.ts +0 -0
- package/templates/src/stores/navigation.ts +0 -0
- package/templates/src/stores/nodes.ts +32 -1
- package/templates/src/stores/nodesHistory.ts +0 -0
- package/templates/src/stores/notificationSystem.ts +0 -0
- package/templates/src/stores/orphanAnalysis.ts +19 -21
- package/templates/src/stores/storykeep.ts +7 -0
- package/templates/src/types/astro.ts +0 -0
- package/templates/src/types/compositorTypes.ts +0 -0
- package/templates/src/types/formTypes.ts +0 -0
- package/templates/src/types/multiTenant.ts +0 -0
- package/templates/src/types/nodeProps.ts +0 -0
- package/templates/src/types/tractstack.ts +0 -0
- package/templates/src/utils/aai/getTitleSlug.ts +0 -0
- package/templates/src/utils/actions/actionButton.ts +0 -0
- package/templates/src/utils/actions/lispLexer.ts +0 -0
- package/templates/src/utils/actions/preParse_Action.ts +0 -0
- package/templates/src/utils/actions/preParse_Bunny.ts +0 -0
- package/templates/src/utils/actions/preParse_Clicked.ts +0 -0
- package/templates/src/utils/actions/preParse_Impression.ts +0 -0
- package/templates/src/utils/api/advancedConfig.ts +0 -0
- package/templates/src/utils/api/advancedHelpers.ts +0 -0
- package/templates/src/utils/api/beliefConfig.ts +0 -0
- package/templates/src/utils/api/beliefHelpers.ts +0 -0
- package/templates/src/utils/api/brandConfig.ts +0 -0
- package/templates/src/utils/api/brandHelpers.ts +0 -0
- package/templates/src/utils/api/fileHelpers.ts +0 -0
- package/templates/src/utils/api/menuConfig.ts +0 -0
- package/templates/src/utils/api/menuHelpers.ts +0 -0
- package/templates/src/utils/api/resourceConfig.ts +0 -0
- package/templates/src/utils/api/resourceHelpers.ts +0 -0
- package/templates/src/utils/api/tenantConfig.ts +0 -0
- package/templates/src/utils/api/tenantHelpers.ts +0 -0
- package/templates/src/utils/api.ts +0 -0
- package/templates/src/utils/auth.ts +0 -0
- package/templates/src/utils/backend.ts +0 -0
- package/templates/src/utils/compositor/TemplateMarkdowns.ts +0 -0
- package/templates/src/utils/compositor/TemplateNodes.ts +0 -0
- package/templates/src/utils/compositor/TemplatePanes.ts +0 -0
- package/templates/src/utils/compositor/allowInsert.ts +0 -0
- package/templates/src/utils/compositor/domHelpers.ts +0 -0
- package/templates/src/utils/compositor/handleClickEvent.ts +0 -0
- package/templates/src/utils/compositor/nodesHelper.ts +0 -0
- package/templates/src/utils/compositor/nodesMarkdownGenerator.ts +0 -0
- package/templates/src/utils/compositor/processMarkdown.ts +0 -0
- package/templates/src/utils/compositor/reduceNodesClassNames.ts +0 -0
- package/templates/src/utils/compositor/tailwindClasses.ts +0 -0
- package/templates/src/utils/compositor/tailwindColors.ts +0 -0
- package/templates/src/utils/compositor/templateMarkdownStyles.ts +8 -0
- package/templates/src/utils/compositor/typeGuards.ts +0 -0
- package/templates/src/utils/etl/extractor.ts +0 -0
- package/templates/src/utils/etl/index.ts +0 -0
- package/templates/src/utils/etl/loader.ts +0 -0
- package/templates/src/utils/etl/transformer.ts +0 -0
- package/templates/src/utils/helpers.ts +1 -0
- package/templates/src/utils/layout.ts +66 -121
- package/templates/src/utils/profileStorage.ts +0 -0
- package/templates/src/utils/useInterval.ts +0 -0
- package/templates/tailwind.config.cjs +0 -0
- package/utils/create-resolver.ts +0 -0
- package/utils/inject-files.ts +21 -1
- package/utils/validate-config.ts +0 -0
|
@@ -11,12 +11,15 @@ import {
|
|
|
11
11
|
fullContentMapStore,
|
|
12
12
|
getPendingImageOperation,
|
|
13
13
|
clearPendingImageOperation,
|
|
14
|
+
pendingHomePageSlugStore,
|
|
14
15
|
} from '@/stores/storykeep';
|
|
15
16
|
import { startLoadingAnimation } from '@/utils/helpers';
|
|
16
17
|
import type {
|
|
18
|
+
FlatNode,
|
|
17
19
|
BaseNode,
|
|
18
20
|
PaneNode,
|
|
19
21
|
StoryFragmentNode,
|
|
22
|
+
MarkdownPaneFragmentNode,
|
|
20
23
|
} from '@/types/compositorTypes';
|
|
21
24
|
|
|
22
25
|
type SaveStage =
|
|
@@ -27,6 +30,7 @@ type SaveStage =
|
|
|
27
30
|
| 'SAVING_STORY_FRAGMENTS'
|
|
28
31
|
| 'LINKING_FILES'
|
|
29
32
|
| 'PROCESSING_STYLES'
|
|
33
|
+
| 'UPDATING_HOME_PAGE'
|
|
30
34
|
| 'COMPLETED'
|
|
31
35
|
| 'ERROR';
|
|
32
36
|
|
|
@@ -59,13 +63,9 @@ export default function SaveModal({
|
|
|
59
63
|
const [debugMessages, setDebugMessages] = useState<string[]>([]);
|
|
60
64
|
const isSaving = useRef(false);
|
|
61
65
|
const [isNavigating, setIsNavigating] = useState(false);
|
|
62
|
-
|
|
63
|
-
// Determine if we're in create mode
|
|
64
66
|
const isCreateMode = slug === 'create';
|
|
65
|
-
|
|
66
67
|
const contentMap = fullContentMapStore.get();
|
|
67
|
-
|
|
68
|
-
// Get backend URL
|
|
68
|
+
const pendingHomePageSlug = pendingHomePageSlugStore.get();
|
|
69
69
|
const goBackend =
|
|
70
70
|
import.meta.env.PUBLIC_GO_BACKEND || 'http://localhost:8080';
|
|
71
71
|
const tenantId = import.meta.env.PUBLIC_TENANTID || 'default';
|
|
@@ -143,7 +143,8 @@ export default function SaveModal({
|
|
|
143
143
|
if (
|
|
144
144
|
relevantNodeCount === 0 &&
|
|
145
145
|
nodesWithPendingFiles.length === 0 &&
|
|
146
|
-
storyFragmentsWithPendingImages.length === 0
|
|
146
|
+
storyFragmentsWithPendingImages.length === 0 &&
|
|
147
|
+
!pendingHomePageSlug
|
|
147
148
|
) {
|
|
148
149
|
addDebugMessage('No changes to save');
|
|
149
150
|
setStage('COMPLETED');
|
|
@@ -317,6 +318,56 @@ export default function SaveModal({
|
|
|
317
318
|
isContext
|
|
318
319
|
);
|
|
319
320
|
|
|
321
|
+
// This ensures css generation in the next phase uses fresh values
|
|
322
|
+
payload.optionsPayload.nodes.forEach((transformedNode) => {
|
|
323
|
+
const liveNode = ctx.allNodes.get().get(transformedNode.id);
|
|
324
|
+
if (!liveNode) return;
|
|
325
|
+
|
|
326
|
+
let needsUpdate = false;
|
|
327
|
+
let updatedNode: BaseNode = { ...liveNode };
|
|
328
|
+
|
|
329
|
+
// Update elementCss for TagElement nodes (FlatNode)
|
|
330
|
+
if (
|
|
331
|
+
transformedNode.nodeType === 'TagElement' &&
|
|
332
|
+
transformedNode.elementCss
|
|
333
|
+
) {
|
|
334
|
+
const flatNode = liveNode as FlatNode;
|
|
335
|
+
if (flatNode.elementCss !== transformedNode.elementCss) {
|
|
336
|
+
(updatedNode as FlatNode).elementCss =
|
|
337
|
+
transformedNode.elementCss;
|
|
338
|
+
needsUpdate = true;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// Update parentCss for Markdown nodes (MarkdownPaneFragmentNode)
|
|
343
|
+
if (
|
|
344
|
+
transformedNode.nodeType === 'Markdown' &&
|
|
345
|
+
transformedNode.parentCss
|
|
346
|
+
) {
|
|
347
|
+
const markdownNode = liveNode as MarkdownPaneFragmentNode;
|
|
348
|
+
const currentParentCss = markdownNode.parentCss;
|
|
349
|
+
const newParentCss = transformedNode.parentCss as string[];
|
|
350
|
+
|
|
351
|
+
const isDifferent =
|
|
352
|
+
!currentParentCss ||
|
|
353
|
+
currentParentCss.length !== newParentCss.length ||
|
|
354
|
+
currentParentCss.some(
|
|
355
|
+
(css, index) => css !== newParentCss[index]
|
|
356
|
+
);
|
|
357
|
+
|
|
358
|
+
if (isDifferent) {
|
|
359
|
+
(updatedNode as MarkdownPaneFragmentNode).parentCss =
|
|
360
|
+
newParentCss;
|
|
361
|
+
needsUpdate = true;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// Only update the live node if there are actual changes
|
|
366
|
+
if (needsUpdate) {
|
|
367
|
+
ctx.allNodes.get().set(transformedNode.id, updatedNode);
|
|
368
|
+
}
|
|
369
|
+
});
|
|
370
|
+
|
|
320
371
|
// Check if this pane exists or is new
|
|
321
372
|
const paneExistsInBackend = contentMap.some(
|
|
322
373
|
(item) => item.type === 'Pane' && item.id === paneNode.id
|
|
@@ -505,67 +556,122 @@ export default function SaveModal({
|
|
|
505
556
|
const { dirtyPaneIds, classes: dirtyClasses } =
|
|
506
557
|
ctx.getDirtyNodesClassData();
|
|
507
558
|
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
559
|
+
// STEP 1: Generate CSS using Astro API
|
|
560
|
+
const astroEndpoint = `/api/tailwind`;
|
|
561
|
+
const astroPayload = { dirtyPaneIds, dirtyClasses };
|
|
562
|
+
const astroResponse = await fetch(astroEndpoint, {
|
|
563
|
+
method: 'POST',
|
|
564
|
+
headers: {
|
|
565
|
+
'Content-Type': 'application/json',
|
|
566
|
+
'X-Tenant-ID': tenantId,
|
|
567
|
+
},
|
|
568
|
+
credentials: 'include',
|
|
569
|
+
body: JSON.stringify(astroPayload),
|
|
570
|
+
});
|
|
571
|
+
|
|
572
|
+
if (!astroResponse.ok) {
|
|
573
|
+
throw new Error(
|
|
574
|
+
`CSS generation failed! status: ${astroResponse.status}`
|
|
511
575
|
);
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
const astroResult = await astroResponse.json();
|
|
579
|
+
|
|
580
|
+
if (!astroResult.success || !astroResult.generatedCss) {
|
|
581
|
+
throw new Error('CSS generation failed: no CSS returned');
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
addDebugMessage(
|
|
585
|
+
`CSS generated: ${astroResult.generatedCss.length} bytes for ${dirtyClasses.length} classes`
|
|
586
|
+
);
|
|
587
|
+
|
|
588
|
+
// STEP 2: Save CSS to Go backend
|
|
589
|
+
const goEndpoint = `${goBackend}/api/v1/tailwind/update`;
|
|
590
|
+
const goPayload = { frontendCss: astroResult.generatedCss };
|
|
591
|
+
const goResponse = await fetch(goEndpoint, {
|
|
592
|
+
method: 'POST',
|
|
593
|
+
headers: {
|
|
594
|
+
'Content-Type': 'application/json',
|
|
595
|
+
'X-Tenant-ID': tenantId,
|
|
596
|
+
},
|
|
597
|
+
credentials: 'include',
|
|
598
|
+
body: JSON.stringify(goPayload),
|
|
599
|
+
});
|
|
600
|
+
|
|
601
|
+
if (!goResponse.ok) {
|
|
602
|
+
throw new Error(`CSS save failed! status: ${goResponse.status}`);
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
const goResult = await goResponse.json();
|
|
606
|
+
addDebugMessage(
|
|
607
|
+
`CSS saved successfully: stylesVer ${goResult.stylesVer}`
|
|
608
|
+
);
|
|
609
|
+
} catch (error) {
|
|
610
|
+
const errorMsg =
|
|
611
|
+
error instanceof Error ? error.message : 'Unknown error';
|
|
612
|
+
addDebugMessage(`Styles processing failed: ${errorMsg}`);
|
|
613
|
+
throw new Error(`Failed to process styles: ${errorMsg}`);
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
// Check if we need to update home page
|
|
617
|
+
if (pendingHomePageSlug) {
|
|
618
|
+
setStage('UPDATING_HOME_PAGE');
|
|
619
|
+
setProgress(98);
|
|
620
|
+
addDebugMessage(`Updating home page to: ${pendingHomePageSlug}`);
|
|
621
|
+
|
|
622
|
+
try {
|
|
623
|
+
// First get current brand config
|
|
624
|
+
const response = await fetch(`${goBackend}/api/v1/config/brand`, {
|
|
625
|
+
method: 'GET',
|
|
518
626
|
headers: {
|
|
519
627
|
'Content-Type': 'application/json',
|
|
520
628
|
'X-Tenant-ID': tenantId,
|
|
521
629
|
},
|
|
522
630
|
credentials: 'include',
|
|
523
|
-
body: JSON.stringify(astroPayload),
|
|
524
631
|
});
|
|
525
632
|
|
|
526
|
-
if (!
|
|
633
|
+
if (!response.ok) {
|
|
527
634
|
throw new Error(
|
|
528
|
-
`
|
|
635
|
+
`Failed to get current brand config: ${response.status}`
|
|
529
636
|
);
|
|
530
637
|
}
|
|
531
638
|
|
|
532
|
-
const
|
|
639
|
+
const currentBrandConfig = await response.json();
|
|
533
640
|
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
641
|
+
// Update HOME_SLUG
|
|
642
|
+
const updatedBrandConfig = {
|
|
643
|
+
...currentBrandConfig,
|
|
644
|
+
HOME_SLUG: pendingHomePageSlug,
|
|
645
|
+
};
|
|
537
646
|
|
|
538
|
-
|
|
539
|
-
|
|
647
|
+
const updateResponse = await fetch(
|
|
648
|
+
`${goBackend}/api/v1/config/brand`,
|
|
649
|
+
{
|
|
650
|
+
method: 'PUT',
|
|
651
|
+
headers: {
|
|
652
|
+
'Content-Type': 'application/json',
|
|
653
|
+
'X-Tenant-ID': tenantId,
|
|
654
|
+
},
|
|
655
|
+
credentials: 'include',
|
|
656
|
+
body: JSON.stringify(updatedBrandConfig),
|
|
657
|
+
}
|
|
540
658
|
);
|
|
541
659
|
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
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
|
-
});
|
|
554
|
-
|
|
555
|
-
if (!goResponse.ok) {
|
|
556
|
-
throw new Error(`CSS save failed! status: ${goResponse.status}`);
|
|
660
|
+
if (!updateResponse.ok) {
|
|
661
|
+
throw new Error(
|
|
662
|
+
`Failed to update home page: ${updateResponse.status}`
|
|
663
|
+
);
|
|
557
664
|
}
|
|
558
665
|
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
666
|
+
// Clear the pending operation
|
|
667
|
+
pendingHomePageSlugStore.set(null);
|
|
668
|
+
addDebugMessage('Home page updated successfully');
|
|
669
|
+
} catch (error) {
|
|
670
|
+
const errorMsg =
|
|
671
|
+
error instanceof Error ? error.message : 'Unknown error';
|
|
672
|
+
addDebugMessage(`Home page update failed: ${errorMsg}`);
|
|
673
|
+
throw new Error(`Failed to update home page: ${errorMsg}`);
|
|
563
674
|
}
|
|
564
|
-
} catch (error) {
|
|
565
|
-
const errorMsg =
|
|
566
|
-
error instanceof Error ? error.message : 'Unknown error';
|
|
567
|
-
addDebugMessage(`Styles processing failed: ${errorMsg}`);
|
|
568
|
-
throw new Error(`Failed to process styles: ${errorMsg}`);
|
|
569
675
|
}
|
|
570
676
|
|
|
571
677
|
// Success!
|
|
@@ -612,6 +718,8 @@ export default function SaveModal({
|
|
|
612
718
|
return 'Linking file relationships...';
|
|
613
719
|
case 'PROCESSING_STYLES':
|
|
614
720
|
return 'Processing styles...';
|
|
721
|
+
case 'UPDATING_HOME_PAGE':
|
|
722
|
+
return 'Updating home page...';
|
|
615
723
|
case 'COMPLETED':
|
|
616
724
|
return `${actionText} ${modeText.toLowerCase()} completed successfully!`;
|
|
617
725
|
case 'ERROR':
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -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-
|
|
205
|
-
<
|
|
206
|
-
|
|
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-medium 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
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
{
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
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>
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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-
|
|
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">
|