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
  • Object with list: true does not display the error message when its invalid.

    Object with list: true does not display the error message when its invalid.

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

    See video: https://www.loom.com/share/5f592b30174241fd94503d1d4caa801d

    Here is a link to the playground. where you can see the issue.

    Reproduction

    link to the playground.

    Steps to reproduce

    No response

    System Info

    Monorepo
    

    Validations

    bug 
    opened by logan-anderson 0
  • 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 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 2
  • 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 1
  • 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 4
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
ApostropheCMS is a full-featured, open-source CMS built with Node.js that seeks to empower organizations by combining in-context editing and headless architecture in a full-stack JS environment.

ApostropheCMS ApostropheCMS is a full-featured, open source CMS built with Node.js that seeks to empower organizations by combining in-context editing

Apostrophe Technologies 3.9k Jan 4, 2023
πŸŽ‰ Next Generation API-first CMS for developers. Generate an API-first CMS from a GraphQL schema with offline prototyping and an inline editor

Tipe Next Generation API-first CMS Design your content Shape and design content for any project you and your team are working on. Create your content

Tipe 2.2k Oct 22, 2021
πŸš€ Open source Node.js Headless CMS to easily build customisable APIs

API creation made simple, secure and fast. The most advanced open-source headless CMS to build powerful APIs with no effort. Try live demo Strapi is a

strapi 50.8k Dec 27, 2022
Drag and drop page builder and CMS for React, Vue, Angular, and more

Drag and drop page builder and CMS for React, Vue, Angular, and more Use your code components and the stack of your choice. No more being pestered for

Builder.io 4.3k Jan 9, 2023
The most powerful headless CMS for Node.js β€” built with GraphQL and React

A scalable platform and CMS to build Node.js applications. schema => ({ GraphQL, AdminUI }) Keystone Next is a preview of the next major release of Ke

KeystoneJS 7.3k Dec 31, 2022
Reaction is an API-first, headless commerce platform built using Node.js, React, GraphQL. Deployed via Docker and Kubernetes.

Reaction Commerce Reaction is a headless commerce platform built using Node.js, React, and GraphQL. It plays nicely with npm, Docker and Kubernetes. G

Reaction Commerce 11.9k Jan 3, 2023
FOSS app for the Diatum self-hosting network, supporting messaging and media sharing.

FOSS app for the Diatum self-hosting network, supporting messaging and media sharing.

Roland Osborne 23 Dec 23, 2022
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.

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.

Tina 8.3k Jan 9, 2023
A jquery plugin that makes images truly responsive, without sacrificing anyone's face. Give it more stars!

Responsify.js A jquery plugin that makes images truly responsive, without sacrificing anyone's face :D When images are used in a responsive container

Wenting Zhang 1.3k Dec 14, 2022
The jQuery plugin that brings select elements into the 21st century with intuitive multiselection, searching, and much more. Now with Bootstrap 5 support.

bootstrap-select The jQuery plugin that brings select elements into the 21st century with intuitive multiselection, searching, and much more. Now with

SnapAppointments 9.7k Dec 30, 2022
The jQuery plugin that brings select elements into the 21st century with intuitive multiselection, searching, and much more. Now with Bootstrap 5 support

bootstrap-select The jQuery plugin that brings select elements into the 21st century with intuitive multiselection, searching, and much more. Now with

SnapAppointments 9.7k Dec 30, 2022
ToolJet an open-source low-code framework to build and deploy internal tools quickly without much effort from the engineering teams

ToolJet is an open-source low-code framework to build and deploy internal tools quickly without much effort from the engineering teams. You can connect to your data sources, such as databases (like PostgreSQL, MongoDB, Elasticsearch, etc), API endpoints (ToolJet supports importing OpenAPI spec & OAuth2 authorization), and external services (like Stripe, Slack, Google Sheets, Airtable) and use our pre-built UI widgets to build internal tools.

ToolJet 15.6k Jan 3, 2023
Teams is a web app implementation of Microsoft Teams. The project of Microsoft Engage 2021.

Teams Teams is a web app implementation of Microsoft Teams, the video conferencing and collaboration platform by Microsoft. Features Mandatory Feature

Ananya Lohani 34 Sep 30, 2022
microregex is an open source and highly curated catalog of regular expression patterns. It offers programmers RegEx snippets that can be quickly exported into a variety of programming languages and distributed around teams.

microregex - A catalog of RegEx patterns View Demo · Report Bug · Request Feature Loved the tool? Please consider contributing ✍️ to help it improve!

Sunit Shirke 4 Oct 25, 2022
At Arctic Desert we set out to create an intuitive app that aids developer teams

At Arctic Desert we set out to create an intuitive app that aids developer teams. We aimed to create a service that integrates git workflow, task management and real-time communication. This is integrated into a single workspace, allowing you to seamlessly switch between teams, projects and branches.

Artic Desert 7 Jul 14, 2022
Shikhar 4 Oct 9, 2022
Shows how React components and Redux to build a friendly user experience with instant visual updates and scaleable code in ecommerce applications

This simple shopping cart prototype shows how React components and Redux can be used to build a friendly user experience with instant visual updates and scaleable code in ecommerce applications.

Alan Vieyra 4 Feb 1, 2022
Simple shopping cart prototype which shows how React components and Redux can be used to build a friendly user experience with instant visual updates and scalable code in e-commerce applications.

This simple shopping cart prototype shows how React components and Redux can be used to build a friendly user experience with instant visual updates a

Ivan Kuznietsov 3 Feb 8, 2022