{"version":3,"sources":["webpack:///./src/pages/docs/contributing-page.mdx"],"names":["_frontmatter","layoutProps","MDXLayout","DefaultLayout","MDXContent","components","props","mdxType","isMDXComponent"],"mappings":"wPAMaA,G,UAAe,S,sNAE5B,IAKMC,EAAc,CAClBD,gBAEIE,EAAYC,IACH,SAASC,EAAT,GAGZ,IAFDC,EAEC,EAFDA,WACGC,EACF,8BACD,OAAO,YAACJ,EAAD,eAAeD,EAAiBK,EAAhC,CAAuCD,WAAYA,EAAYE,QAAQ,cAC5E,iBAAQ,CACN,GAAM,4BADR,4BAGA,kEAEE,gBAAO,CACL,KAAQ,iDACR,WAAc,KAFhB,kCAFF,sIASA,sBAEE,iBAAQ,CACN,WAAc,MACb,gBAAO,CACN,KAAQ,6DACR,WAAc,MAFf,iBAMH,iBAAQ,CACN,WAAc,MACb,gBAAO,CACN,KAAQ,4FACR,WAAc,MAFf,oCAMH,iBAAQ,CACN,WAAc,MACb,gBAAO,CACN,KAAQ,sDACR,WAAc,MAFf,4BAML,qHAEE,gBAAO,CACL,KAAQ,2EACR,WAAc,KAFhB,gCAFF,iEAQA,sBAEE,iBAAQ,CACN,WAAc,MACb,gBAAO,CACN,KAAQ,kGACR,WAAc,MAFf,uCAMH,iBAAQ,CACN,WAAc,MACb,gBAAO,CACN,KAAQ,mGACR,WAAc,MAFf,4BAMH,iBAAQ,CACN,WAAc,MACb,gBAAO,CACN,KAAQ,mGACR,WAAc,MAFf,6BAMH,iBAAQ,CACN,WAAc,MACb,gBAAO,CACN,KAAQ,mHACR,WAAc,MAFf,wD,oNAUTH,EAAWI,gBAAiB","file":"component---src-pages-docs-contributing-page-mdx-6544ddc9117f9942dcb5.js","sourcesContent":["import * as React from 'react'\n  /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsx mdx */\n\nimport DefaultLayout from \"/Users/max/code/superset/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\n\nconst makeShortcode = name => function MDXDefaultShortcode(props) {\n  console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n  return <div {...props} />;\n};\n\nconst layoutProps = {\n  _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n  components,\n  ...props\n}) {\n  return <MDXLayout {...layoutProps} {...props} components={components} mdxType=\"MDXLayout\">\n    <h2 {...{\n      \"id\": \"contributing-to-superset\"\n    }}>{`Contributing to Superset`}</h2>\n    <p>{`Superset is currently being incubated at\n`}\n      <a {...{\n        \"href\": \"https://www.apache.org/theapacheway/index.html\",\n        \"parentName\": \"p\"\n      }}>{`the Apache Software Foundation`}</a>\n      {`. The core\ncontributors (or committers) to Superset communicate primarily in the following channels (all of\nwhich you can join):`}</p>\n    <ul>\n\n      <li {...{\n        \"parentName\": \"ul\"\n      }}><a {...{\n          \"href\": \"https://lists.apache.org/list.html?dev@superset.apache.org\",\n          \"parentName\": \"li\"\n        }}>{`mailing list`}</a></li>\n\n\n      <li {...{\n        \"parentName\": \"ul\"\n      }}><a {...{\n          \"href\": \"https://apache-superset.slack.com/join/shared_invite/zt-g8lpruog-HeqpgYrwdfrD5OYhlU7hPQ#/\",\n          \"parentName\": \"li\"\n        }}>{`Apache Superset Slack community`}</a></li>\n\n\n      <li {...{\n        \"parentName\": \"ul\"\n      }}><a {...{\n          \"href\": \"https://github.com/apache/incubator-superset/issues\",\n          \"parentName\": \"li\"\n        }}>{`Github issues and PR's`}</a></li>\n\n    </ul>\n    <p>{`If you're interested in contributing, we recommend reading the Community Contribution Guide\n`}\n      <a {...{\n        \"href\": \"https://github.com/apache/incubator-superset/blob/master/CONTRIBUTING.md\",\n        \"parentName\": \"p\"\n      }}>{`described in CONTRIBUTING.MD`}</a>\n      {`\nto get started. Here are some helpful links from that page:`}</p>\n    <ul>\n\n      <li {...{\n        \"parentName\": \"ul\"\n      }}><a {...{\n          \"href\": \"https://github.com/apache/incubator-superset/blob/master/CONTRIBUTING.md#types-of-contributions\",\n          \"parentName\": \"li\"\n        }}>{`Overview of types of contributions`}</a></li>\n\n\n      <li {...{\n        \"parentName\": \"ul\"\n      }}><a {...{\n          \"href\": \"https://github.com/apache/incubator-superset/blob/master/CONTRIBUTING.md#pull-request-guidelines\",\n          \"parentName\": \"li\"\n        }}>{`Pull request guidelines`}</a></li>\n\n\n      <li {...{\n        \"parentName\": \"ul\"\n      }}><a {...{\n          \"href\": \"https://github.com/apache/incubator-superset/blob/master/CONTRIBUTING.md#managing-issues-and-prs\",\n          \"parentName\": \"li\"\n        }}>{`Managing Issues and PR's`}</a></li>\n\n\n      <li {...{\n        \"parentName\": \"ul\"\n      }}><a {...{\n          \"href\": \"https://github.com/apache/incubator-superset/blob/master/CONTRIBUTING.md#setup-local-environment-for-development\",\n          \"parentName\": \"li\"\n        }}>{`Setting up local environment for development`}</a></li>\n\n    </ul>\n\n  </MDXLayout>;\n}\n;\nMDXContent.isMDXComponent = true;\n      "],"sourceRoot":""}