Tina is an open source editor that brings visual editing into React websites. Tina empowers developers to give their teams a contextual and intuitive editing experience without sacrificing code quality.

Overview

GitHub license npm version Status Lerna All Contributors

TINA CMS

Tina is an open-source toolkit for building content management directly into your website.

Tina Demo

Getting Started

Checkout the tutorial to get started with TinaCMS.

Documentation

Visit https://tinacms.org/docs/ to view the full documentation.

Development Process

See our ROADMAP.md to learn how the maintainers work.

Questions?

Tweet Forum

Visit the community forum to ask questions or look us up on on Twitter at @tina_cms.

Changelog

Check the CHANGELOG for the latest updates to TinaCMS.

Contributing

Please see our CONTRIBUTING.md

Maintainers

All Contributors ✨

Thanks goes to these wonderful people (emoji key):


Forestry.io

πŸ’΅

NCPhillips

πŸ“† πŸ’» πŸ“ πŸ› πŸ“– πŸ€” πŸš‡ 🚧 πŸ‘€ ⚠️

DJ

πŸ“† πŸ’» πŸ“ πŸ› πŸ“– πŸ€” 🚧 πŸ‘€ ⚠️

Scott Byrne

🎨 πŸ’» πŸ‘€ 🚧 πŸ“– πŸ“

James O'Halloran

πŸ“† πŸ› πŸ€” 🚧 πŸ‘€ ⚠️ πŸ’» πŸ“

Kendall Strautman

🎨 πŸ“† πŸ› πŸ€” 🚧 πŸ“’ πŸ‘€ πŸ’» πŸ“

Nichlas Wærnes Andersen

πŸ’» 🎨 πŸ€”

Jordan

πŸ“† πŸ“’ πŸ€” πŸ› πŸš‡ πŸ“– πŸ’»

Frank Taillandier

πŸ‘€ πŸ“– πŸ“† πŸ““ πŸ› πŸ’»

Scott Gallant

πŸ“– πŸ“’ πŸ” πŸ“

Mitch MacKenzie

πŸ““ πŸ“

zacchg

πŸ““

Lyle Underwood

πŸ› πŸ’»

Laura1111999

πŸ“–

Thom Krupa

πŸ““

Michael Gauthier

πŸ““ πŸ“–

dcgoodwin2112

πŸ“–

akshayknz

πŸ“–

Adam Silverstein

πŸ“–

Brad McGonigle

πŸ’»

Jake Coxon

πŸ’»

Ladislav Prskavec

πŸ’»

Bolarinwa Balogun

πŸš‡

Mason Medeiros

πŸ““

ironsean

πŸ““ πŸ“– πŸ’»

kyp

πŸ›

Vladislav Shkodin

πŸ›

maciek_grzybek

πŸ€” πŸ’» πŸš‡

weibenfalk

πŸ“Ή πŸ“ πŸ’»

David Bergeron

πŸ›

Kellan Martin

πŸ’»

Jon Miller

πŸ€”

Paul

πŸ›

Chris Flannery

πŸ’» πŸ“–

Jefferson Bledsoe

⚠️

Kenia

πŸ’»

Andrew James

πŸ’»

Zach B

πŸ“’

Jyoti Puri

πŸ’» πŸ‘€ ⚠️ 🚧 πŸ›

nibtime

πŸ’» πŸ›

Johan Soulet

πŸ’» πŸ›

Cleiton Pereira

πŸ› πŸ€”

chrisdmacrae

πŸš‡ πŸ’¬ πŸ€”

jhuggett

πŸ’»

Nicolas Cisco

πŸ’» ⚠️

Hungry Bear Studio

πŸ’»

Alex Barbato

πŸ’»

Dani Tulp

πŸ’» πŸ€” πŸ“–

PaulBunker

πŸ’»

JavaScript Joe

πŸ’»

Madelyn Eriksen

πŸ“

Marc Mintel

πŸš‡ πŸ’» πŸ›

Jeff See

πŸš‡ πŸ’» 🚧 ⚠️ πŸ‘€

Brandon Landfried

πŸ›

Chad Johnson

πŸ›

David Arnold

πŸ€”

Gavin McFarland

πŸ›

blandfried

πŸ› πŸ’»

Mark Lawlor

πŸ€”

Ben Scott

πŸ‘€

Brent Mitton

πŸ’» πŸ“–

Colin McGraw

πŸ“–

Brandon Shackelford

πŸ’» πŸ›

Amy Kapernick

πŸ›

Sam Ullman

πŸ›

Andreas Adam

πŸ€” πŸ“– πŸ’»

Stephen Sugden

πŸ“–

Logan Anderson

πŸ’»

Isabella Brookes

πŸ’»

Lukas Strassel

πŸ’» πŸ“–

Lauren Clark

πŸ“–

Ar Nazeh

πŸ“–

David Royer

πŸ“–

Tulsi Prasad

πŸ“–

Jan Vlnas

πŸ“–

Omar Costa Hamido

πŸ“– πŸ›

Kelsey Edelstein

πŸ“–

CodeItQuick

πŸ›

Justin Menga

πŸ’»

Luke Digby

πŸ“–

Erwann Mest

πŸ“–

Frank Noirot

πŸ“–

Matthias

πŸ“–

crouton

πŸ›

Alexandre Boucher

πŸ’»

Can Rozanes

πŸ’» πŸ€”

Yann Vanhalewyn

πŸ›

Artem Artemyev

πŸ›

Lachlan McKay

πŸ’» πŸ›

Matthew Francis Brunetti

πŸ’» πŸ›

Joe Innes

πŸ“– πŸ’»

Austin Condiff

πŸ’» πŸ€”

pristas-peter

πŸ› πŸ’»

Dan Beaven

πŸ’»

Hirvin Faria

πŸ“–

Travis Miller

πŸ’»

Chris Davis

πŸ’» 🚧 ⚠️ πŸ‘€

SaintMalik

πŸ“–

This project follows the all-contributors specification. Contributions of any kind welcome!

Comments
  • Exclude TinaCMS + dependencies from production build

    Exclude TinaCMS + dependencies from production build

    Summary

    I've been busy with getting a Gatsby site into production and I observed that the app bundle size became unusually large (1.7MB uncompressed), so I installed webpack bundle analyzer and generated a report. And it turned out, that TinaCMS is the main culprit, accounting for around 800-900KB of the size, including dependencies, which are irrelevant to the production build (but are needed for the development server with Tina of course).

    I take guidance from the excellent articles The Cost of JavaScript 2018 and The Cost of JavaScript 2019. The overhead that stems from TinaCMS is almost as large as the median uncompressed bundle size. This is a huge obstacle for using Tina with production sites.

    Basic example

    TinaCMS + its dependencies should not be present in production build. I have no idea though how this can be achieved, since Tina is integrated with code of the site. First thing that comes to mind is Webpack hacking. Maybe you already know that this is a problem and already have an idea how to fix this? If so, this should be part of the docs, since out-of-the-box this blow-up happens.

    Here is the report of bundle analyzer of my production build

    And this is a regex to filter for dependencies, that are exclusively needed by Tina (@tinacms|prosemirror|codemirror|react-datetime|react-beautiful-dnd|markdown-it|final-form|styled-components|react-dropzone|react-color|tinycolor2|stylis).*.js

    Motivation

    Obviously faster page loads and less production traffic. Tina should not be that expensive.

    enhancement 
    opened by nibtime 30
  • Add a

    Add a "number" field plugin

    Summary

    tinacms should provide a number plugin by default.

    The base input would be added to @tinacms/fields.

    The plugin will be define din tinacms

    Basic example

    {
       name: "temp",
       label: "Temp",
       component: "number",
       description: "The temperature in Celsius",
    }
    
    
    enhancement good first issue tina-plugin 
    opened by ncphillips 27
  • Inline ref fields

    Inline ref fields

    • [x] add inlineComponent typedef
    • [x] fix type errors
    • [x] refine FieldTarget styles
    • [x] update react-tinacms-inline package docs
    • [x] recalculate FieldOverlay position on resize
    enhancement 
    opened by dwalkr 22
  • Add gatsby mdx plugin

    Add gatsby mdx plugin

    Copied from original PR by @jsjoeio

    This is an active WIP. @ncphillips helped me a little bit but we figured it might be better to start with a draft PR to get some help asynchronously. (I've been too busy with a new job to coordinate outside work. I think this might be easiest.)

    Summary

    The goal of this PR is to add a new package called gatsby-tinacms-mdx to the tinaCMS/Gatsby package family so that users can use tinaCMS with their Gatsby/MDX sites similar to how they can use it with Markdown.

    I struggled to get my local dev env working well to develop this plugin so I ended up developing it in isolation here.

    Approach

    I essentially copied the exact same approach in gatsby-tinacms-remark but for mdx specifically. That seemed to work for the most part but this isn't 100% complete and is not a fully-functioning state.

    What I Need Help With

    • Guidance on testing this locally in the monorepo and in a Gatsby demo site (I haven't had much luck following the instructions in the README/CONTRIBUTING hence why I broke it into a separate repo)
    • Feedback on what might be missing to get this fully-functioning
    • Any other support that can help us get this ready for the community

    Many thanks in advance ❀️

    Unresolved reviews from original PR

    • [x] Lets remove the the .d.ts files and add them to the .gitignore
    • [x] Nolan's notes on naming mdxinstead of _mdx

    Nolan: The whole component would look like this:

    interface MdxFormProps extends Partial<FormOptions<any>> {
      mdx: MdxNode
      render(renderProps: { form: Form; mdx: any }): JSX.Element
      timeout?: number
    }
    
    export function MdxForm({ mdx: _mdx, render, ...options }: MdxFormProps) {
      const [mdx, form] = useLocalMdx(_mdx, options)
    
      return render({ form: form as Form, mdx })
    }
    

    The mdx: _mdx lets you pass it in as mdx and then use it as _mdx

    • [x] Note for @ncphillips - maybe DeleteAction should be part of the gatsby-tinacms-git plugin. This action could work for Json, Markdown, Mdx, anything stored in git.
    • [x] tinacms needs to be a peerDep
    • [x] @paulbunker noted: I was having trouble getting this branch to build untill I added "@tinacms/form-builder": "0.2.13" as a dependency
    enhancement 
    opened by kendallstrautman 22
  • Fixed sticky menu on inline editing

    Fixed sticky menu on inline editing

    Hey.

    This may seem a little much for this functionality. But check it out. I think it's necessary as the structure on things are now. It isn't possible to just set the positioning to "sticky"

    Thomas

    opened by weibenfalk 21
  • Typescript Bug – TS2742: The inferred type of 'ModalHeader' cannot be named without a reference to ...

    Typescript Bug – TS2742: The inferred type of 'ModalHeader' cannot be named without a reference to ...

    lerna notice cli v3.16.4
    lerna info versioning independent
    lerna info filter [ '@tinacms/tinacms' ]
    lerna info Executing command in 1 package: "npm run build"
    lerna ERR! npm run build exited 1 in '@tinacms/tinacms'
    lerna ERR! npm run build stdout:
    
    > @tinacms/[email protected] build /Users/ncphillips/Code/tinacms/tinacms/packages/tinacms
    > cms-scripts build
    
    Building Package: @tinacms/[email protected]
    
    lerna ERR! npm run build stderr:
    /Users/ncphillips/Code/tinacms/tinacms/packages/@tinacms/scripts/bin/cms-scripts.js:33
      throw err
      ^
    
    Error: /Users/ncphillips/Code/tinacms/tinacms/packages/tinacms/src/components/modals/ModalProvider.tsx(113,14): semantic error TS2742: The inferred type of 'ModalHeader' cannot be named without a reference to '@tinacms/fields/node_modules/@tinacms/styles'. This is likely not portable. A type annotation is necessary.
        at error (/Users/ncphillips/Code/tinacms/tinacms/node_modules/rollup/dist/rollup.js:10151:30)
        at throwPluginError (/Users/ncphillips/Code/tinacms/tinacms/node_modules/rollup/dist/rollup.js:16454:12)
        at Object.error (/Users/ncphillips/Code/tinacms/tinacms/node_modules/rollup/dist/rollup.js:16509:24)
        at Object.error (/Users/ncphillips/Code/tinacms/tinacms/node_modules/rollup/dist/rollup.js:16901:38)
        at RollupContext.error (/Users/ncphillips/Code/tinacms/tinacms/node_modules/rollup-plugin-typescript2/dist/rollup-plugin-typescript2.cjs.js:17192:30)
        at lodash_3 (/Users/ncphillips/Code/tinacms/tinacms/node_modules/rollup-plugin-typescript2/dist/rollup-plugin-typescript2.cjs.js:24953:23)
        at arrayEach (/Users/ncphillips/Code/tinacms/tinacms/node_modules/rollup-plugin-typescript2/dist/rollup-plugin-typescript2.cjs.js:532:11)
        at forEach (/Users/ncphillips/Code/tinacms/tinacms/node_modules/rollup-plugin-typescript2/dist/rollup-plugin-typescript2.cjs.js:9358:14)
        at printDiagnostics (/Users/ncphillips/Code/tinacms/tinacms/node_modules/rollup-plugin-typescript2/dist/rollup-plugin-typescript2.cjs.js:24926:5)
        at cache.getCompiled (/Users/ncphillips/Code/tinacms/tinacms/node_modules/rollup-plugin-typescript2/dist/rollup-plugin-typescript2.cjs.js:26820:21)
    npm ERR! code ELIFECYCLE
    npm ERR! errno 1
    npm ERR! @tinacms/[email protected] build: `cms-scripts build`
    npm ERR! Exit status 1
    npm ERR!
    npm ERR! Failed at the @tinacms/[email protected] build script.
    npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /Users/ncphillips/.npm/_logs/2019-10-09T19_02_43_357Z-debug.log
    

    Related Issue:

    • https://github.com/Microsoft/TypeScript/issues/30858

    Putting this in a bunch of files fixes the issue:

    image

    Which makes no sense because that file doesn't reference @tinacms/fields

    bug builds 
    opened by ncphillips 21
  • Allow commit+push to be configured

    Allow commit+push to be configured

    Right now every commit is paired with a push. This is required for production use, but it is not always wanted when editing files locally. The developer should be able to configure the git-api, or the git-client, to decide when to push.

    enhancement 
    opened by ncphillips 21
  • getStaticPropsForTina complicates setup

    getStaticPropsForTina complicates setup

    getStaticPropsForTina to me feels a bit unnecessary. Its role seems to be to make a request to the local API, as well as returning some of the arguments that were passed in.

    Our current starter code:

    export const getStaticProps = async ({ params }) => {
      const tinaProps = (await getStaticPropsForTina({
        query: `#graphql
          query BlogPostQuery($relativePath: String!) {
              // ...
          }
        `,
        variables: { relativePath: `${params.filename}.md` },
      })) as { data: { getPostsDocument: PostsDocument } };
    
      return {
        props: {
          ...tinaProps,
        },
      };
    };
    

    This to me feels a bit more clear about what getStaticProps is actually doing/returning:

    export const getStaticProps = async ({ params }) => {
    
      const postRequestArgs = {
        query: `#graphql
          query BlogPostQuery($relativePath: String!) {
             // ...
          }
        `,
        variables: { relativePath: `${params.filename}.md` }
      }
    
      const post = new LocalClient().request(postRequestArgs)
    
      return {
        props: {
          post, // use this on your production page
          tinaArgs: postRequestArgs // needed for the Tina wrapper to re-request draft content client-side
        },
      };
    })
    

    The proposed solution also wraps all the tina stuff that gets sent to the frontend in a "tinaArgs" object, so it's clear what's for the production site, and what's for the frontend TinaCMScomponent.

    Thoughts?

    enhancement 
    opened by jamespohalloran 20
  • Add

    Add "raw mode" toggle for WYSIWYG

    Summary

    The WYSIWYG editor should have a button in its toolbar to toggle between editing the raw content and editing in WYSIWYM mode

    Motivation

    There are still some kinks with the WYSIWYG, and we should track them down and fix them, but in the meantime having a raw mode will allow editors to fix formatting gone awry from the CMS instead of having to open a text editor.

    enhancement wysiwym has-pull-request ux 
    opened by dwalkr 20
  • feat: resize sidebar

    feat: resize sidebar

    Hey. Here's a working version of the resize function that we discussed. Haven't gone through the code in detail so probably can use some optimization. Added a min width now also. Think it would also be a good idea to have an option to turn resizing on and off when setting up the sidebar.

    needs-rebase 
    opened by weibenfalk 20
  • How should `defaultValue` behave?

    How should `defaultValue` behave?

    A few statements about default behavior that we may want to pin down so we know how we'd like to proceed as the extending Tina work progresses.

    When in edit-mode, null values are replaced with their default items*

    *not working yet, but will - would like to get an idea for expectations before implementing.

    This is currently considered a feature, but I'm not sure it's what we want. As an editor, you may land on a page and see exactly what you want (because the developer set up good default values. So you don't save anything or really do anything, and you never exit edit-mode. At that point, when your work goes to production there will be a missing value.

    Outermost defaultValue wins

    defineSchema({
      collections: [
        {
          label: 'Block Page',
          name: 'blockPage',
          format: 'mdx',
          path: 'content/block-pages',
          fields: [
            {
              label: 'Blocks',
              name: 'blocks',
              type: 'object',
              list: true,
              ui: {
                defaultValue: [{
                  _template: 'hero',
                  title: "hello #1"
                }]
              },
              templates: [
                {
                  name: 'hero',
                  label: 'Hero',
                  ui: {
                    defaultValue: {
                      title: 'hello #2',
                    },
                  },
                  fields: [
                    {
                      label: 'Title',
                      name: 'title',
                      type: 'string',
                    },
                    {
                      label: 'Description',
                      name: 'description',
                      type: 'string',
                    },
                  ],
                },
              ],
            },
          ],
        },
      ],
    })
    

    The value will be:

    [{
      _template: 'hero',
      title: "hello #1"
    }]
    

    Instead of

    [{
      _template: 'hero',
      title: "hello #2"
    }]
    

    What should the behavior be is open for interpretation, though some have mentioned this feels wrong and the most-specific property should win.

    Similarly, defaultItem on a list object ignores child default values

    What is the expected behavior here?

    defaultValue is not used if an adjacent field is present

    AKA - we don't merge real/default values.

    If I have a title field and a description field.

    {
      label: 'Title',
      name: 'title',
      type: 'string',
      ui: {
        defaultValue: 'Some title',
      },
    },
    {
      label: 'Description',
      name: 'description',
      type: 'string',
      ui: {
        defaultValue: 'Some description',
      },
    },
    

    And a document with only the title:

    ---
    title: "Hello, World"
    ---
    

    The form.values will be {title: "Hello, World"}

    question 
    opened by jeffsee55 18
  • CMD/CTRL+S to save forms

    CMD/CTRL+S to save forms

    To make the editing experience more seamless, keybindings for saving the form were added. Now, Command+s or Control+s will trigger a submit on the form, just clicking the save button. Each action follows the states of the save button; if it's disabled/busy/etc., the key bindings will no-op.

    opened by Maxobat 3
  • Markdown lists and blockquotes should be allowed inside blockquotes

    Markdown lists and blockquotes should be allowed inside blockquotes

    Describe the issue that you're seeing. Any Loom videos or screenshots usually help a lot!

    The Tina Markdown editor is not able to parse this:

    Paragraph
    
    > Quoted paragraph
    >
    > * Quoted list
    > * Quoted list
    >
    > > Nested quoted paragraph
    
    Paragraph
    

    The above is valid Markdown (by every standard I'm aware of). There may be other elements that don't work inside blockquotes, but those were the only two I encountered so far.

    This bug may be related to #3118, although this specific issue is a bigger problem for my content.

    Reproduction

    https://github.com/johnridesabike/tina-bug-report

    Steps to reproduce

    1. Add a markdown page with the above content. (Or view content/page/quotedlists.mdx in the example repo)
    2. Try to edit it in the Tina editor.
    3. The editor will fail to work due to this error:
    Error parsing markdown
      
    UnwrapBlock: Unknown block content of type list
    

    System Info

    System:
        OS: macOS 13.1
        CPU: (6) x64 Intel(R) Core(TM) i5-8500B CPU @ 3.00GHz
        Memory: 93.80 MB / 8.00 GB
        Shell: 5.8.1 - /bin/zsh
      Binaries:
        Node: 19.3.0 - /usr/local/bin/node
        Yarn: 1.22.19 - ~/code/tina-bug-report/my-tina-app/node_modules/.bin/yarn
        npm: 9.2.0 - /usr/local/bin/npm
      Browsers:
        Chrome: 108.0.5359.124
        Firefox: 108.0.1
        Safari: 16.2
      npmPackages:
        @tinacms/cli: ^1.0.0 => 1.0.0
        tinacms: ^1.0.0 => 1.0.0
    

    Validations

    bug 
    opened by johnridesabike 0
  • Markdown editor fails to parse valid HTML

    Markdown editor fails to parse valid HTML

    Describe the issue that you're seeing. Any Loom videos or screenshots usually help a lot!

    The markdown editor seems to expect HTML tags to use XML-style closing tags, even when they aren't necessary. I encountered this after copy/pasting Twitter embed HTML code, which uses <br> (instead of <br />).

    Personally, I wonder if the HTML parsing is even necessary. AFAIK, Markdown parsers all just scan for the beginning and end of an HTML block and then output its content as-is. Validation may be a useful optional feature in the editor, but I don't think the editor should completely stop working when it finds an error.

    Reproduction

    https://github.com/johnridesabike/tina-bug-report

    Steps to reproduce

    1. Open a markdown file (format: "md").
    2. Switch to markdown plain-text mode.
    3. Paste some HTML.
    4. The editor raises an error message similar to: 1:324-1:328: Unexpected closing tag `</p>`, expected corresponding closing tag for `<br>` (1:158-1:162) at line: 1, column: 324

    Here's the example HTML I used:

    <blockquote class="twitter-tweet"><p lang="en" dir="ltr">We have no lack of space.<br>Just a lack of imagination!<br><br>&#39;Every street can be a park&#39;<br>~<a href="https://twitter.com/zeeger?ref_src=twsrc%5Etfw">@zeeger</a> (about Plantage Middenlaan) <a href="https://t.co/830QCIka0X">pic.twitter.com/830QCIka0X</a></p>&mdash; Cycling Professor 🚲 (@fietsprofessor) <a href="https://twitter.com/fietsprofessor/status/1399698366288760835?ref_src=twsrc%5Etfw">June 1, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
    

    System Info

    System:
        OS: macOS 13.1
        CPU: (6) x64 Intel(R) Core(TM) i5-8500B CPU @ 3.00GHz
        Memory: 133.57 MB / 8.00 GB
        Shell: 5.8.1 - /bin/zsh
      Binaries:
        Node: 19.3.0 - /usr/local/bin/node
        Yarn: 1.22.19 - ~/code/tina-bug-report/my-tina-app/node_modules/.bin/yarn
        npm: 9.2.0 - /usr/local/bin/npm
      Browsers:
        Chrome: 108.0.5359.124
        Firefox: 108.0.1
        Safari: 16.2
      npmPackages:
        @tinacms/cli: ^1.0.0 => 1.0.0
        tinacms: ^1.0.0 => 1.0.0
    

    Validations

    bug 
    opened by johnridesabike 0
  • init command duplicates node_modules gitignore entry

    init command duplicates node_modules gitignore entry

    Describe the issue that you're seeing. Any Loom videos or screenshots usually help a lot!

    checkGitignoreForNodeModules is not properly accounting for scenarios in which the node_modules gitignore entry is prefixed and/or suffixed with a forward slash.

    Reproduction

    https://github.com/namoscato/todaypgh

    Steps to reproduce

    1. given an existing repository with .gitignore, i.e.

      /node_modules/
      
    2. run npx @tinacms/cli@latest init

    3. see that node_modules entry is incorrectly added

    System Info

    System:
        OS: macOS 13.1
        CPU: (8) arm64 Apple M1 Pro
        Memory: 159.88 MB / 16.00 GB
        Shell: 3.2.57 - /bin/bash
      Binaries:
        Node: 16.17.0 - ~/.nvm/versions/node/v16.17.0/bin/node
        Yarn: 1.22.19 - ~/dev/git/todaypgh/node_modules/.bin/yarn
        npm: 8.15.0 - ~/.nvm/versions/node/v16.17.0/bin/npm
      Browsers:
        Chrome: 108.0.5359.124
        Chrome Canary: 111.0.5508.0
        Firefox: 104.0.2
        Safari: 16.2
      npmPackages:
        @tinacms/cli: ^1.0.5 => 1.0.5 
        tinacms: ^1.1.2 => 1.1.2
    

    Validations

    bug 
    opened by namoscato 0
  • Dev server compilation error

    Dev server compilation error

    Describe the issue that you're seeing. Any Loom videos or screenshots usually help a lot!

    I started a Discord thread but haven't heard back, so I'm opening this issue.

    After running the init CLI command, I'm unable to start the dev server, presumably due to conflicting graphql package versions across @tinacms/cli, tinacms, and their indirect dependencies:

    $ npm run dev
    
    > [email protected] dev
    > tinacms dev -c "hugo server -D"
    
     TinaCMS  - Build Started
    
    Compilation failed with errors. Server has not been restarted. see error below 
     Cannot use GraphQLScalarType "Reference" from another module or realm.
    
    npm ls graphql
    [email protected] /Users/nick/dev/git/todaypgh
    β”œβ”€β”¬ @tinacms/[email protected]
    β”‚ β”œβ”€β”¬ @graphql-codegen/[email protected]
    β”‚ β”‚ β”œβ”€β”¬ @graphql-tools/[email protected]
    β”‚ β”‚ β”‚ β”œβ”€β”¬ @graphql-tools/[email protected]
    β”‚ β”‚ β”‚ β”‚ └── [email protected] deduped
    β”‚ β”‚ β”‚ └── [email protected] deduped
    β”‚ β”‚ β”œβ”€β”¬ @graphql-tools/[email protected]
    β”‚ β”‚ β”‚ └── [email protected] deduped
    β”‚ β”‚ └── [email protected]
    β”‚ β”œβ”€β”¬ @graphql-codegen/[email protected]
    β”‚ β”‚ └── [email protected] deduped
    β”‚ β”œβ”€β”¬ @graphql-codegen/[email protected]
    β”‚ β”‚ β”œβ”€β”¬ @graphql-codegen/[email protected]
    β”‚ β”‚ β”‚ β”œβ”€β”¬ @graphql-tools/[email protected]
    β”‚ β”‚ β”‚ β”‚ └── [email protected] deduped
    β”‚ β”‚ β”‚ └── [email protected] deduped
    β”‚ β”‚ β”œβ”€β”¬ @graphql-codegen/[email protected]
    β”‚ β”‚ β”‚ └── [email protected] deduped
    β”‚ β”‚ └── [email protected] deduped
    β”‚ β”œβ”€β”¬ @graphql-codegen/[email protected]
    β”‚ β”‚ └── [email protected] deduped
    β”‚ β”œβ”€β”¬ @graphql-codegen/[email protected]
    β”‚ β”‚ β”œβ”€β”¬ @graphql-codegen/[email protected]
    β”‚ β”‚ β”‚ └── [email protected] deduped
    β”‚ β”‚ └── [email protected] deduped
    β”‚ β”œβ”€β”¬ @graphql-codegen/[email protected]
    β”‚ β”‚ β”œβ”€β”¬ @graphql-tools/[email protected]
    β”‚ β”‚ β”‚ └── [email protected] deduped
    β”‚ β”‚ └── [email protected] deduped
    β”‚ β”œβ”€β”¬ @graphql-tools/[email protected]
    β”‚ β”‚ β”œβ”€β”¬ @graphql-tools/[email protected]
    β”‚ β”‚ β”‚ └── [email protected] deduped
    β”‚ β”‚ └── [email protected] deduped
    β”‚ β”œβ”€β”¬ @graphql-tools/[email protected]
    β”‚ β”‚ └── [email protected] deduped
    β”‚ β”œβ”€β”¬ @tinacms/[email protected]
    β”‚ β”‚ └── [email protected]
    β”‚ β”œβ”€β”¬ @tinacms/[email protected]
    β”‚ β”‚ └── [email protected]
    β”‚ β”œβ”€β”¬ @tinacms/[email protected]
    β”‚ β”‚ β”œβ”€β”¬ [email protected]
    β”‚ β”‚ β”‚ └── [email protected] deduped
    β”‚ β”‚ └── [email protected]
    β”‚ └── [email protected]
    β”œβ”€β”¬ [email protected]
    β”‚ └─┬ [email protected]
    β”‚   └── [email protected] deduped
    └─┬ [email protected]
      β”œβ”€β”¬ @graphql-tools/[email protected]
      β”‚ β”œβ”€β”¬ @ardatan/[email protected]
      β”‚ β”‚ └── [email protected] deduped
      β”‚ └── [email protected] deduped
      β”œβ”€β”¬ [email protected]
      β”‚ └── [email protected] deduped
      └── [email protected]
    

    Reproduction

    https://github.com/namoscato/todaypgh/pull/123

    Steps to reproduce

    1. checkout https://github.com/namoscato/todaypgh/pull/123
    2. use Node.js v16: nvm use
    3. install dependencies: npm i
    4. npm run dev

    System Info

    System:
        OS: macOS 13.1
        CPU: (8) arm64 Apple M1 Pro
        Memory: 159.88 MB / 16.00 GB
        Shell: 3.2.57 - /bin/bash
      Binaries:
        Node: 16.17.0 - ~/.nvm/versions/node/v16.17.0/bin/node
        Yarn: 1.22.19 - ~/dev/git/todaypgh/node_modules/.bin/yarn
        npm: 8.15.0 - ~/.nvm/versions/node/v16.17.0/bin/npm
      Browsers:
        Chrome: 108.0.5359.124
        Chrome Canary: 111.0.5508.0
        Firefox: 104.0.2
        Safari: 16.2
      npmPackages:
        @tinacms/cli: ^1.0.5 => 1.0.5 
        tinacms: ^1.1.2 => 1.1.2
    

    Validations

    bug 
    opened by namoscato 0
  • Preview Deployments on Vercel Fail

    Preview Deployments on Vercel Fail

    Describe the issue that you're seeing. Any Loom videos or screenshots usually help a lot!

    PRs to the main branch fail with the following error:

    Error when checking client information. You provided
    --
    08:35:22.787 | Β 
    08:35:22.787 | {
    08:35:22.787 | "branch": "dependabot/npm_and_yarn/typeit-8.7.1",
    08:35:22.787 | "clientId": "<clientid>",
    08:35:22.787 | "token": "<token>"
    08:35:22.787 | }
    08:35:22.787 | Β 
    08:35:22.787 | Please check you have the correct "clientId", "branch" and "token" configured. For more information see https://tina.io/docs/tina-cloud/connecting-site/
    08:35:22.787 | Error: Server responded with status code 404, Not Found.
    08:35:22.787 | Β 
    08:35:22.787 | Message from server: Unable to find record '.tina/__generated__/_graphql.json' in Github Repository: 'mAAdhaTTah/frontend[/]', Ref: 'master' [NOTE: The specified branch, 'dependabot/npm_and_yarn/typeit-8.7.1', has not been indexed by Tina Cloud. See https://tina.io/docs/tina-cloud/faq/#how-do-i-resolve-errors-caused-by-unindexed-branches] Please see our FAQ for more information: https://tina.io/docs/errors/faq/
    08:35:22.788 | Error: Server responded with status code 404, Not Found.
    08:35:22.788 | Β 
    08:35:22.788 | Message from server: Unable to find record '.tina/__generated__/_graphql.json' in Github Repository: 'mAAdhaTTah/frontend[/]', Ref: 'master' [NOTE: The specified branch, 'dependabot/npm_and_yarn/typeit-8.7.1', has not been indexed by Tina Cloud. See https://tina.io/docs/tina-cloud/faq/#how-do-i-resolve-errors-caused-by-unindexed-branches] Please see our FAQ for more information: https://tina.io/docs/errors/faq/
    08:35:22.788 | at request (/vercel/path0/node_modules/@tinacms/cli/dist/index.js:2781:11)
    08:35:22.788 | at processTicksAndRejections (node:internal/process/task_queues:96:5)
    08:35:22.788 | at async Array.checkClientInfo (/vercel/path0/node_modules/@tinacms/cli/dist/index.js:2801:5)
    08:35:22.788 | at async next (/vercel/path0/node_modules/@tinacms/cli/dist/index.js:535:7)
    08:35:22.907 | Error: Command "npm run build" exited with 1
    

    Deployments on main work correctly. Note that I recently renamed master -> main, in case that has something to do with it. I did reset the repository cache, to no avail.

    Reproduction

    https://github.com/mAAdhaTTah/frontend/pull/771

    Steps to reproduce

    No response

    System Info

    System:
        OS: macOS High Sierra 10.13.6
        CPU: (4) x64 Intel(R) Core(TM) i5-4690K CPU @ 3.50GHz
        Memory: 2.31 GB / 32.00 GB
        Shell: 5.1.16 - /usr/local/bin/bash
      Binaries:
        Node: 17.6.0 - /usr/local/bin/node
        Yarn: 1.22.19 - ~/Code/Infra/domain/frontend/node_modules/.bin/yarn
        npm: 8.5.1 - /usr/local/bin/npm
      Browsers:
        Chrome: 108.0.5359.124
        Firefox: 99.0.1
        Firefox Developer Edition: 77.0
        Safari: 13.1.2
      npmPackages:
        @tinacms/cli: ^1.0.4 => 1.0.4
        @tinacms/mdx: ^1.0.3 => 1.0.3
        tinacms: ^1.1.1 => 1.1.1
    

    Validations

    bug 
    opened by mAAdhaTTah 2
Releases(v0.43.3)
  • v0.43.3(Jul 23, 2021)

  • v0.43.2(Jul 20, 2021)

  • v0.43.1(Jul 13, 2021)

  • v0.43.0(Jul 12, 2021)

  • v0.42.1(Jun 28, 2021)

    0.42.1 (2021-06-28)

    Features

    • Unifies FormOptions across all useForm(...) variations (ff3c058)
    • @tinacms/form-builder,@tinacms/react-forms: Combines FormView and FormBuilder (8b1e194)
    • @tinacms/git-client: Migrate GitMediaStore to cursor-based pagination (8d2146c)
    • react-tinacms-github: Migrate GithubMediaStore to cursor-based pagination (5163fad)
    • react-tinacms-strapi: Migrate StrapiMediaStore to cursor-based pagination (646151f)
    • tinacms: configure media mgr page size via mediaOptions.pageSize (5d7890f)
    • tinacms: remove pluggable pagination (846b516)
    • tinacms: use cursor-based pagination in media manager (7a94b97)

    Changes to MediaStore API

    This release includes some changes to the MediaStore API that could cause existing implementations to generate errors. If you're using one of our first-party implementations (such as GithubMediaStore or StrapiMediaStore), you shouldn't need to do anything other than upgrade those respective packages to the latest release. If you created your own MediaStore implementation, you will need to make some small changes.

    Cursor-Based Pagination

    The media library is switching to a different pagination format. The previous version used numbered pages, and had the list method pass a numerical limit and offset back-and-forth to the UI. This style of pagination is not compatible with certain Digital Asset Managers and other API-based data storage providers, which instead return a batch of results along with a "cursor" value that can be used to retrieve the next batch of results in sequence. This is a less-opinionated style of pagination, and any existing setups using the old approach should be easy to migrate by making some changes to their list method. Take a look at the GithubMediaStore commit that migrates it to the new API, and continue reading below for details on the how and why.

    1. MediaStore#list should only return items and nextOffset

    The only metadata (data in addition to the list of media items) that your list method needs to return is nextOffset. This will represent the cursor position that the next set of records should be retrieved from, and will be passed back into your list method as its offset value when a user clicks Next in the UI to browse further in. Assuming your current list method is API-accurate, you will have a few return values to remove:

    return {
        items: items.map(contentToMedia).slice(offset, offset + limit),
    -   offset,
    -   limit,
        nextOffset: nextOffset(offset, limit, items.length),
    -   totalCount: items.length,
    }
    

    2. TypeScript: Coerce MediaListOptions.offset to number

    The offset value sent to your list function via the options object is now typed as string | number, as some APIs may use alphanumeric keys to represent your browsing position in the collection. If you're using TypeScript and performing arithmetic with the offset value, you should expect to see an error here. Because the offset value passed to your list method is going to be a value that was returned by your list method at some point, it is safe to coerce the offset value to number as long as your nextOffset return value is also a number.

    - const offset = options?.offset ?? 0
    + const offset = (options?.offset as number) ?? 0
    

    We could also solve this with generics, but felt that would be heavy-handed for this case. Let us know if you feel differently!

    Source code(tar.gz)
    Source code(zip)
  • v0.41.1(Jun 11, 2021)

  • v0.41.0(May 17, 2021)

  • v0.40.1(May 5, 2021)

  • v0.40.0(Apr 19, 2021)

  • v0.39.0(Mar 30, 2021)

    0.39.0 (2021-03-30)

    Bug Fixes

    • close on click outside (462e09f)
    • dangerfile: Updates dangerfile (7badcb5)
    • copyright (e4323c2), closes #1778
    • copyright (c916b63), closes #1778
    • @tinacms/fields: Fix Radio Final Form Warning (03cf71b)
    • modal x button cancels changes (258d190)
    • @tinacms/react-sidebar: Allows initialValues for ContentCreator Plugins (7562809)
    • next-tinacms-markdown: Fixes fileRelativePath for useMarkdownForm (6ce43fc)
    • react-tinacms-github: fix missing unique "key" prop in modal actions (475bafa)
    • tinacms: Fixes pagination for MediaStore (5e51cbe)
    • inline group click event bug (15c8675)

    Features

    • inline block search (3080eac)
    • react-tinacms-github: Add WatchableFormValues argument to useGithubFileForm, useGithubJsonForm, useGithubMarkdownForm (51ce6f3)
    • tinacms: export independent components for CMS provider and UI (c8bd31e)
    Source code(tar.gz)
    Source code(zip)
  • v0.38.0(Mar 8, 2021)

  • v0.37.0(Feb 8, 2021)

  • v0.36.1(Feb 1, 2021)

  • v0.36.0(Jan 25, 2021)

    0.36.0 (2021-01-25)

    Bug Fixes

    • @tinacms/react-sidebar: fixed site elements relative to SiteWrapper (2f5c75c)
    • @tinacms/react-sidebar: fixed site elements relative to SiteWrapper (de2e1f7)
    • react-tinacms-github: Fix reversed error messages for 404 errors (7e3ba86)

    Features

    • react-tinacms-github: GithubFile: Support committing newly created files (d13eb76)
    • react-tinacms-inline: inline block duplicate action (0b79ecf)
    Source code(tar.gz)
    Source code(zip)
  • v0.35.1(Jan 19, 2021)

  • v0.35.0(Dec 15, 2020)

    • fix(react-tinacms-inline): support defaultItem as a function in add-block-menu.tsx (85acb9d493a0ea4f7d7df839f69ab0fbb2deecad)\
    • fix(react-tinacms-github): restore original functionality for github:branch:checkout (806007583c7d5ed2aa3ac3fc65f15776c6cefadc)
    • feat: Use custom actions in BlocksControls (d01e14a56db03ad2484527fdbb14ec58a5de52f3)
    • feat: add inline block label (af24e52754082354fe9297d7b5204f6dcc5f2647)
    Source code(tar.gz)
    Source code(zip)
  • v0.34.0(Nov 23, 2020)

    0.34.0 (2020-11-23)

    Bug Fixes

    • @tinacms/fields: input doesn't unset all styles (8386e4f)
    • @tinacms/react-core: useForm refreshes data on github branch change (d16ef76)
    • react-tinacms-github: only send branchchange event when branch actually changes (6580c8a)

    Features

    • @tinacms/react-core: useForm returns its loading state (f287275)
    • tinacms: media manager dropzone accepts multiple files (179eec6)
    Source code(tar.gz)
    Source code(zip)
  • v0.33.0(Nov 16, 2020)

    0.33.0 (2020-11-16)

    Bug Fixes

    • @tinacms/core: unsubscribe from events when replacing api (5ad8dee)
    • @tinacms/fields: onClear function clears the input (73cd850)
    • react-tinacms-inline: better control InlineBlocks rerenders (611fc70)
    • react-tinacms-inline: stop focus event bubble before returning early (698e0b5)
    • tinacms: remove yarn.lock (d304dd5)

    Features

    • @tinacms/fields/toggle: add optional true/false labels (850d875)
    • react-tinacms-editor: InlineWysiwyg only renders ProseMirror for focused editor (24a3372)
    • react-tinacms-inline: Export SettingsModal (ba5e03e)
    • react-tinacms-inline: FocusRing accepts render-child (e1cc04c)
    • react-tinacms-inline: InlineGroup field names are relative (57bcb3d)
    • tinacms: expose plugin handle for media pagination (4b4345b)

    Performance Improvements

    • react-tinacms-inline: don't render block menu when block not active (2b26b8a)
    Source code(tar.gz)
    Source code(zip)
  • v0.32.1(Oct 29, 2020)

  • v0.32.0(Oct 20, 2020)

    0.32.0 (2020-10-20)

    Bug Fixes

    • @tinacms/core: cms.media.open accepts the allowDelete prop (9364732)
    • @tinacms/fields: image field allows media to be deleted from media manager (7dfbb5e)
    • gatsby-tinacms-json: JsonCreator commits files after writing (a252c13)
    • gatsby-tinacms-remark: RemarkCreator commits files after writing (2b8780c)
    • react-tinacms-github: dispatch event on delete failurecloses #1493 (12d92dc)
    • react-tinacms-inline: empty inline img to click/drag (c879441)
    • react-tinacms-inline: field focus is not lost when editing settings (8a078b4)
    • react-tinacms-inline: inline image field allows media to be deleted from media manager (352284f)
    • react-tinacms-inline: some fields were mis-handling focus (5d7318c), closes #1516
    • react-tinacms-inline: uploadDir passes formValues (99de78a)
    • tinacms: media manager upload button is busy while uploading (3ab978c)

    Features

    • @tinacms/react-core: useCMSEvent makes subscribing to events easier (2a276bf)
    • react-tinacms-editor: image directory prop --> uploadDir func (67fc8d9)
    • react-tinacms-editor: markdown & html fields accept image props (06d92e1)
    • react-tinacms-editor: media mgr opens from uploadDir (7e1b133)
    • react-tinacms-editor: parse accepts media object (f6cf123)
    • react-tinacms-editor: wysiwyg menu opens media mgr (026e633)
    • react-tinacms-inline: block components are given their name (8d42e9a), closes #1536

    Reverts

    • Revert "chore(react-tinacms-editor): mediaDir not optional" (af20d84)
    Source code(tar.gz)
    Source code(zip)
  • v0.31.0(Oct 5, 2020)

    The Media Manager 0.31.0 (2020-10-05)

    For more information on this release please checkout our Introducing the TinaCMS Media Manager blog post.

    Bug Fixes

    • @tinacms/forms: catch errors after submit (2550a81)
    • missing key names (798ed84)
    • svg attribute names (7e06179)
    • @tinacms/forms: the Form#fields array is now optional (e3d71bf)
    • @tinacms/media: deprecated since these interfaces were graduated to core (39f1a72)
    • @tinacms/react-alerts: increase z-index (94d67bb), closes #1503 #1055
    • @tinacms/react-screens: ModalBody is padded (3df3c55)

    Features

    • @tinacms/alerts: events can be mapped to alerts automatically (b96e8b9)
    • @tinacms/api-git: GET /:relPath returns content list for directories (c613b20)
    • @tinacms/api-git: the GET /:relPath endpoint returns contents of directories (9fa7bf8)
    • @tinacms/core: add cms.media.open top make showing the media manager easier (eea3081)
    • @tinacms/core: cms.media async methods dispatch events (9196bdf)
    • @tinacms/core: MediaStore#previewSrc accepts fieldPath and formValues (e2bf27b)
    • @tinacms/core: promoted @tinacms/media classes to core (5288dc1)
    • @tinacms/core: the MediaStore interface has a delete method (4c1cf5a)
    • @tinacms/events: EventBus#subscribe can accept an array of event names (63ef4db)
    • @tinacms/fields: clicking on ImageField opens the media picker ui (7bb8fdb)
    • @tinacms/fields: ImageFieldPlugin matches new MediaStore#previewSrc api (76e5b04)
    • @tinacms/fields: ImageUpload parse returns the whole media object (94ee917), closes #1453
    • @tinacms/fields: the uploadDir function is now optional for image fields (6095caf)
    • @tinacms/git-client: GitMediaStore implements delete (6b6efdb)
    • @tinacms/git-client: the GitMediaStore implements list (26ceadd)
    • @tinacms/icons: adds media mgr folder & file icons (81f1191)
    • @tinacms/media: add optional previewSrc to Media interface (664701e)
    • @tinacms/media: added id property to Media interface (95ce72c)
    • @tinacms/media: cms.media has all of the MediaStore methods (97b080b), closes #1458
    • @tinacms/media: cms.media has all of the MediaStore methods (6109f74), closes #1458
    • @tinacms/media: The media in the store can be listed (8704c29), closes #1451
    • @tinacms/media: the Media interface now has a 'type' prop that can be 'file' or 'dir' (1a867cf)
    • next-tinacms-github: Add NextGithubMediaStore (357dcd8)
    • react-tinacms-github: add GithubClient#commit(branch, repo?) (d62bc3b)
    • react-tinacms-github: GithubMediaStore implements MediaStore#delete (1c5ded9)
    • react-tinacms-github: GithubMediaStore implements MediaStore#list (a963189)
    • react-tinacms-inline: adds inline image style extension (f4348e5)
    • react-tinacms-inline: image children only receive src (9b48aa6)
    • react-tinacms-inline: inline img accepts alt (e576838)
    • react-tinacms-inline: InlineField accepts parse and format functions (8d62b8e)
    • react-tinacms-inline: InlineImage parse accepts a Media rather then a string (3be3e16)
    • react-tinacms-inline: InlineImageField#previewSrc matches MediaStore API (aeb0cd5)
    • react-tinacms-inline: uploadDir on InlineImageField is now optional (4259804)
    • react-tinacms-strapi: the StrapiMediaStore implements MediaStore#delete (157d1fc)
    • react-tinacms-strapi: the StrapiMediaStore now implements MediaStore#list (d851296)
    • tinacms: add media manager UI (4f0cf96)
    • tinacms: added a default MediaManager screen (dc33594)
    • tinacms: an alerts map can be provided to TinaCMS constructor (fcee016)
    • tinacms: apis can define their own event-to-alerts map (24a9305)

    Contributors

    Thanks to everyone who contributed!

    | # Commits | Name | | --------- | ----------------- | | 124 | Nolan Phillips | | 54 | Kendall Strautman | | 25 | DJ | | 2 | Justin Menga | | 1 | Andreas Adam |

    Source code(tar.gz)
    Source code(zip)
  • v0.30.0(Sep 10, 2020)

  • v0.29.0(Aug 25, 2020)

  • v0.28.0(Aug 17, 2020)

    Bug Fixes

    • multiple instances of components not accepting multiple child elements (cbbb03d)
    • react-tinacms-editor: prosemirror image plugin is only added if imageProps was was defined (c29cc4c)
    • react-tinacms-editor: renamed previewUrl to previewSrc to make it consistent with InlineImage component and ImageFieldPlugin (db55a85)
    • react-tinacms-editor: seevral UX issues addressed for tables, headings, and the link modal (#1393) (28cfaec)
    • react-tinacms-editor: when InlineWysiwyg is not given imageProps then images are disabled (ebefdf1)
    • react-tinacms-github: an authorized user trying access a deleted branch will be prompted to switch back to the base branch (137b5ee)
    • react-tinacms-github: improved error modals on 404s (4a998fc)

    Features

    • @tinacms/core: events from APIs are dispatched to the entire CMS (1a47d0b)
    • @tinacms/fields: ImageFieldPlugin will default to useing cms.media.store for previewSrc (a4f377c)
    • @tinacms/media: MediaStore's can have an optional previewSrc method (e4024d2)
    • react-tinacms-editor: by default InlineWysiwyg will use cms.media.store for the previewUrl (d7dbda7)
    • react-tinacms-editor: InlineWysiwyg expects imageProps.parse to modify the filename before inserting the img tag (1738671)
    • react-tinacms-github: GithubMediaStore implements previewSrc (325fdb4)
    • react-tinacms-inline: InlineImage defaults to using cms.media.store.previewSrc (d050e63)
    • react-tinacms-inline: InlineImage now works with an async previewSrc (91b8995)
    • react-tinacms-inline: InlineText and InlineTextarea will render children instead of input.value when cms.disabled (1ee29ab)
    • react-tinacms-inline: InlineTextarea now accepts placeholder (1be2566)
    • react-tinacms-strapi: StrapiMediaStore implements previewSrc (fe5df7d)
    Source code(tar.gz)
    Source code(zip)
  • v0.27.3(Aug 10, 2020)

  • v0.27.1(Aug 10, 2020)

  • v0.27.0(Aug 10, 2020)

    Bug Fixes

    • @tinacms/react-sidebar: adds aria label to sidebar toggle button (fc2957a)
    • @tinacms/react-sidebar: sidebar doesn't render when cms is disabled (c24556d)
    • next-tinacms-github: auth handler sends 500 error when missing signing key (90b5916)
    • next-tinacms-github: preview handler responds with 500 if signing key is missing (31273f7)
    • next-tinacms-github: sends 500 with message if signing key is missing (002ce35)
    • tinacms: enabling cms with sidebar doesn't remount children (1188dbf)

    Features

    • react-tinacms-editor: InlineWysiwyg imageProps.upload now defaults to using the cms.media.store to upload images (166f380)
    • react-tinacms-editor: InlineWysiwyg now accepts imageProps.directory (f75d130)
    • react-tinacms-editor: previewUrl is now optionally async (3aaead3)
    • react-tinacms-inline: InlineText now accepts a placeholder prop (319d29f)
    Source code(tar.gz)
    Source code(zip)
  • v0.26.0(Aug 3, 2020)

    Bug Fixes

    • gatsby-tinacms-git: useGitForm#loadInitialValues does not run in production (a42d50c)
    • gatsby-tinacms-mdx: useMdxForm#loadInitialValues does not run in production (e0c2275)
    • next-tinacms-json: useJsonForm#loadInitialValues does not run when cms is disabled (9fbd8e8)
    • next-tinacms-markdown: useMarkdownForm#loadInitialValues does not run when cms is disabled (3292bf4)

    Features

    • @tinacms/forms: useForm always runs loadInitialValues (a624087)
    • @tinacms/react-core: a new CMS is disabled by default (ef3ac08)
    • add focus ring to inline wysiwyg (2768afd)
    • tooltips for menubar options (bd06f11)

    Upgrading from v0.25.0

    The CMS object is no longer enabled by default

    If you were creating the CMS like this:

    const cms = new TinaCMS()
    

    Then the CMS would have been enabled (i.e. the eidting UI would be available).

    This is no longer the case so you will have to switch to:

    const cms = new TinaCMS({ enabled: true })
    
    Source code(tar.gz)
    Source code(zip)
  • v0.25.0(Aug 3, 2020)

    Bug Fixes

    • react-tinacms-editor: table delete icon should be visible only if whole table is selected (dd3313b)
    • react-tinacms-editor: table row add delete icons overlapping (cfa9949)
    • react-tinacms-editor: UX improvements hide title input from link modal (6e5ab20)

    Features

    • react-tinacms-github: added github delete action docs to readme (dc58e59)
    • next-tinacms-github: getGithubFile let's you fetch and parse a file without the entire preview props (17cb428)

    New Packages

    Source code(tar.gz)
    Source code(zip)
  • @tinacms/[email protected](Oct 3, 2019)

Owner
Tina
An open-source content editing toolkit
Tina
Free Open Source High Quality Dashboard based on Bootstrap 4 & React 16: http://dashboards.webkom.co/react/airframe

Airframe React High Quality Dashboard / Admin / Analytics template that works great on any smartphone, tablet or desktop. Available as Open Source as

Mustafa Nabavi 6 Jun 5, 2022
A full-stack application for junior developers to find jobs that match their skill-level, find gigs in order to boost their resume, and showcase a portfolio.

Junior is a full-stack web application that was created to facilitate junior developers in finding jobs that match their skill-level, boosting their resume through finding and completing gigs, and providing a way to easily showcase a portfolio

Karolina 5 Oct 25, 2022
React tooltip is a React.JS Component that brings usefull UX and UI information in selected elements of your website.

React Tooltip βœ… React tooltip is a React.JS Component that brings usefull UX and UI information in elements of your website. Installation ⌨️ React Too

Marc Ramos 1 Dec 22, 2021
a more intuitive way of defining private, public and common routes for react applications using react-router-dom v6

auth-react-router is a wrapper over react-router-dom v6 that provides a simple API for configuring public, private and common routes (React suspense r

Pasecinic Nichita 12 Dec 3, 2022
Easy to maintain open source documentation websites.

Docusaurus We are working hard on Docusaurus v2. If you are new to Docusaurus, try using the new version instead of v1. See the Docusaurus v2 website

Facebook 40.8k Jan 2, 2023
Visual layout editor for matplotlib and any plotting library built upon matplotlib like seaborn.

Matplotlib Layout Generator Before you start: You must have experience with using matplotlib. It needs to be use on desktop. Not designed for mobile.

null 4 Dec 1, 2022
Airbnb-React - In this project, An Airbnb experience page clone is created to learn and implement React props concepts.

Create React Airbnb App In this project An airbnb experience page clone is created to learn and implement React props concepts. Objectives Learn about

Yogesh Gurjar 4 Jun 28, 2022
Finished code and notes from EFA bonus class on building a React project without create-react-app

React From Scratch Completed Code This is the completed code for the EFA bonus class on building a React project from scratch. Included are also markd

Conor Broaders 3 Oct 11, 2021
USA Covid-19 Tracker is a mobile-first application built with React and Redux to give precise information about the virus behavior in the United States. Great transitions and user feedback made with plain CSS.

React.js USA Covid-19 Tracker This application allows the public to keep track of the stadistics of the Covid-19 Pandemic in the United Stated. You wi

Rafael Echart 14 Oct 25, 2022
A reusable react hook that preserves a components semantic accessibility to create a visual block link.

useAccessibleBlockLink is a reusable react hook that preserves a components semantic accessibility to create a visual block link. This hook supports multiple links within the same block.

Wayfair Tech – Incubator 4 Nov 28, 2022
Build blazing fast, modern apps and websites with React

Gatsby v3 βš›οΈ ?? ?? Fast in every way that matters Gatsby is a free and open source framework based on React that helps developers build blazing fast w

Gatsby 54k Jan 9, 2023
Vue-hero-icons - A set of free MIT-licensed high-quality SVG icons, sourced from @tailwindlabs/heroicons, as Vue 2 functional components.

vue-hero-icons For Vue3, install the official package @heroicons/vue A set of free MIT-licensed high-quality SVG icons, sourced from @tailwindlabs/her

Mathieu Schimmerling 97 Dec 16, 2022
An open source application to create, manage and embed contact forms on static/dynamic sites with no code

Formify is an open source application that lets you create, manage and embed contact forms on any site without writing code. This project is done as a

Basharath 37 Dec 26, 2022
Quizzical is a WebApp that access trivia questions from the Open Trivia Database API and score players based on their answers

Quizzical is a WebApp that access trivia questions from the Open Trivia Database API and score players based on their answers

Anshul Verma 1 Jan 22, 2022
Open source, production-ready animation and gesture library for React

An open source and production-ready motion library for React on the web. Framer Motion is an open source, production-ready library that's designed for

Framer 17.2k Jan 9, 2023
πŸ’» Build your own code editor that compiles and runs 40+ programming languages.

CodeRush - Compile and Execute code in 40+ languages ⚑️ A code editor that compiles and runs your code on the web. Blog: FreeCodeCamp - Build A Code I

Manu Arora 133 Jan 1, 2023
:fire: A highly scalable, offline-first foundation with the best developer experience and a focus on performance and best practices.

Start your next react project in seconds A highly scalable, offline-first foundation with the best DX and a focus on performance and best practices Cr

react-boilerplate 28.9k Jan 6, 2023
Source code for my tutorial on how to build customizable table component with React Table and Tailwind CSS.

React Table + Tailwind CSS = ❀️ Source code for my tutorial on how to build customizable table component with React Table and Tailwind CSS. Both parts

Samuel Liedtke 147 Jan 7, 2023
A npm package to increase the developer experience and consistency by providing a set of hooks that can be opted-in the development lifecycle.

@jeliasson/husky-hooks This npm package aims to increase the developer experience and consistency by providing a set of hooks that can be opted-in the

Johan Eliasson 8 Dec 6, 2022