diff --git a/.circleci/config.yml b/.circleci/config.yml index 95869ec9..02c612fa 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,96 +1,33 @@ -# Ruby CircleCI 2.0 configuration file -# -# Check https://circleci.com/docs/2.0/language-ruby/ for more details -# -version: 2 +version: 2.1 jobs: - build: + build_website: docker: - # specify the version you desire here - - image: cimg/ruby:2.5 - environment: - BUNDLE_PATH: ~/vendor/bundle - - working_directory: ~/repo - + - image: cimg/node:lts steps: - checkout - run: - name: a merge PR - command: | - if [[ -n "${CIRCLE_PR_NUMBER}" ]]; then - git fetch origin +refs/pull/$CIRCLE_PR_NUMBER/merge:pr/$CIRCLE_PR_NUMBER/merge - git checkout -qf pr/$CIRCLE_PR_NUMBER/merge - fi - - - run: - name: fetch submodules - command: git submodule init && git submodule update - - # Download and cache dependencies - - restore_cache: - keys: - - rubygems-v1-latest - - - run: - name: install dependencies - command: bundle check || bundle install --jobs=4 --retry=3 - - - run: - name: Jekyll build - command: bundle exec jekyll build -d html 2> std.err - - - run: - name: Check Jekyll build - command: | - cat std.err - exit $(wc -l std.err | awk '{print $1}') - - - run: - name: HTMLProofer tests - command: | - bundle exec htmlproofer ./html \ - --allow-hash-href \ - --check-html \ - --disable-external \ - --file-ignore "/.+\/gsoc\/display\/partials.+/" - # Ignores the path for the angular magic - + name: Install dependencies + command: npm ci - run: - name: HTMLProofer with external - command: | - if [ "${CIRCLE_BRANCH}" = "main" ]; then - bundle exec htmlproofer ./html \ - --allow-hash-href \ - --check-html \ - --file-ignore "/.+\/gsoc\/display\/partials.+/","/.+\/gsoc\/gsoc201[5-9].+/","/.+\/html/projects/201[5-9].+/","/.+\/gsoc\/gsoc202[0-2].+/","/.+\/html/projects/202[0-2].+/" \ - --http-status-ignore 302 - # Ignore old ideas pages and ssl certificates that error. - fi - - + name: Build site + command: npm run build - run: - name: Jekyll re-build for local + name: Patch asset paths for artifact viewer + # Astro emits processed assets at absolute /_astro/ paths. In CircleCI's + # artifact viewer these must be prefixed with the full artifact URL path. + # Navigation links and CSS use relative paths (fromSiteRoot) so they + # already resolve correctly and need no changes. command: | - echo "url: https://output.circle-artifacts.com" > circle.yml - bundle exec jekyll build -d html -b "/output/job/${CIRCLE_WORKFLOW_JOB_ID}/artifacts/0/html" --config _config.yml,circle.yml - find ./html/ -type f -iname '*html' | xargs -I{} sed -i \ - -e 's|href="\(\.\/.*\/\)"|href="\1index.html"|g' \ - -e '/0\/html/ s|href="\(\/.*\/\)"|href="\1index.html"|g' {} - # Replace pages ending on `/` from our site to direct to index.html - - - - run: - name: "Built documentation is available at:" - command: DOCS_URL="${CIRCLE_BUILD_URL}/artifacts/${CIRCLE_NODE_INDEX}/html/index.html"; echo $DOCS_URL - - - - save_cache: - paths: - - ~/vendor/bundle - key: rubygems-v1-latest - - # collect reports + node scripts/circleci-preview.mjs \ + "/output/job/${CIRCLE_WORKFLOW_JOB_ID}/artifacts/${CIRCLE_NODE_INDEX}/html" - store_artifacts: - path: ~/repo/html + path: html destination: html + - run: + name: "Preview URL" + command: echo "https://output.circle-artifacts.com/output/job/${CIRCLE_WORKFLOW_JOB_ID}/artifacts/${CIRCLE_NODE_INDEX}/html/index.html" + +workflows: + preview_website: + jobs: + - build_website diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..3a626c3a --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + schedule: + interval: monthly diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..80c994ce --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,118 @@ +name: CI + +on: + pull_request: + push: + +permissions: + contents: read + +concurrency: + group: ci-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + # --- parallel quality checks --- + + format: + name: Formatting + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: lts/* + cache: npm + - run: npm ci + - name: Check formatting + run: npm run format:check + + lint: + name: Lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: lts/* + cache: npm + - run: npm ci + - name: Lint source + run: npm run lint -- --max-warnings=0 + - name: Lint Markdown + run: npm run lint:md + + typecheck: + name: Type check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: lts/* + cache: npm + - run: npm ci + - name: Astro type check + run: npm run astro:check + + test: + name: Unit tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: lts/* + cache: npm + - run: npm ci + - name: Run unit tests + run: npm test + + # --- build (runs after all quality checks pass) --- + + build: + name: Build + runs-on: ubuntu-latest + needs: [format, lint, typecheck, test] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: lts/* + cache: npm + - run: npm ci + - name: Build site + run: npm run build + - name: Upload site artifact + uses: actions/upload-artifact@v4 + with: + name: site + path: html/ + retention-days: 1 + + # --- link checks (share the single build artifact) --- + + linkcheck: + name: Link check (${{ matrix.mode }}) + runs-on: ubuntu-latest + needs: build + strategy: + fail-fast: false + matrix: + mode: + - internal + - external + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: lts/* + cache: npm + - run: npm ci + - name: Download site artifact + uses: actions/download-artifact@v4 + with: + name: site + path: html/ + - name: Run link checks + run: npm run linkcheck:${{ matrix.mode }} diff --git a/.gitignore b/.gitignore index b2db9248..13f4b674 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,10 @@ -*~ _site/ -.sass-cache/ -Gemfile.lock -vendor/ +.astro/ .bundle .history +.sass-cache/ +*~ +dist/ +html/ +node_modules/ +vendor/ \ No newline at end of file diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index c4c4ea9c..00000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "_sass/bootstrap-sass-3.3.7"] - path = _sass/bootstrap-sass-3.3.7 - url = https://github.com/twbs/bootstrap-sass.git diff --git a/.markdownlint-cli2.jsonc b/.markdownlint-cli2.jsonc new file mode 100644 index 00000000..fd81fe83 --- /dev/null +++ b/.markdownlint-cli2.jsonc @@ -0,0 +1,4 @@ +{ + "globs": ["**/*.{md,mdx}"], + "ignores": ["**/node_modules/**", "**/html/**", "**/.history/**"], +} diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 00000000..6bb69e89 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,11 @@ +{ + "MD013": false, + "MD033": false, + "MD041": false, + "MD024": { + "siblings_only": true + }, + "MD025": { + "front_matter_title": "" + } +} diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..5ccff1a6 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +html/ diff --git a/.prettierrc.cjs b/.prettierrc.cjs new file mode 100644 index 00000000..db37c613 --- /dev/null +++ b/.prettierrc.cjs @@ -0,0 +1,11 @@ +module.exports = { + plugins: ["prettier-plugin-astro"], + overrides: [ + { + files: "*.astro", + options: { + parser: "astro", + }, + }, + ], +}; diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..7f3ddb4d --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,174 @@ +# Contributing to openastronomy.github.io + +This document captures the conventions used in this codebase. When adding or reviewing code, use these rules as the benchmark. + +--- + +## Code style + +### Naming + +| Context | Convention | Example | +| --------------------------------------------- | ----------------------------------------------------------- | --------------------------------------- | +| JavaScript/TypeScript variables and functions | camelCase | `getPostSlug`, `seasonKey` | +| TypeScript types and interfaces | PascalCase | `ProjectData`, `MemberLink` | +| Astro component files | PascalCase | `MemberCard.astro`, `ProjectCard.astro` | +| CSS class names | kebab-case | `project-card`, `member-logo` | +| Constants that are never reassigned | UPPER_SNAKE_CASE only when a regex or truly global constant | `PROTOCOL_RE` | + +### Function length + +- Aim for **≤ 40 lines** per function. +- If a function grows beyond that, look for a named helper to extract. +- Long functions in `scripts/` are acceptable when they represent a single sequential workflow (e.g., the link-check crawl loop). + +--- + +## Documentation + +### `src/lib/` (`.ts` and `.js` files) + +Every **exported** symbol must have a JSDoc block: + +```js +/** + * Strips the YYYY-MM-DD date prefix from a content collection entry ID. + * + * @param {import("astro:content").CollectionEntry<"posts">} entry + * @returns {string} The slug without the date prefix, e.g. "my-post-title" + */ +export function getPostSlug(entry) { … } +``` + +Internal helpers (not exported) should have at least a brief inline comment if their purpose is not immediately obvious from the name. + +### `src/components/` and `src/layouts/` (`.astro` files) + +Add a block comment at the top of the frontmatter section explaining: + +1. What the component renders +2. Any non-obvious prop relationships or assumptions + +```astro +--- +/* + * ProjectCard - renders a single GSoC project summary button. + * Clicking opens the matching ProjectDetail panel via the shared detailId. + * Must be paired with a in the same page. + */ +--- +``` + +Short, self-evident page components (e.g. a page with only a title and a list) are exempt if the frontmatter is trivially readable. + +### `scripts/` (`.mjs` files) + +Every top-level function must have a JSDoc block. The module itself should have a `@fileoverview` comment at the top. + +### Tests (`src/lib/__tests__/`) + +No JSDoc is required in test files — test descriptions serve as documentation. + +Add a brief inline comment when test setup is non-obvious (e.g. a mock helper or a tricky fixture). + +--- + +## TypeScript vs JavaScript + +- New files in `src/lib/` should be **TypeScript** (`.ts`). +- Existing `.js` files in `src/lib/` stay as-is unless being rewritten from scratch. +- Astro component frontmatter uses TypeScript types inline where needed; avoid importing from Astro runtime packages inside `src/lib/` files (keeps them unit-testable without Astro's runtime). + +--- + +## Tests + +- Use **Vitest** (`npm test`). +- Test files live in `src/lib/__tests__/` and mirror the lib filename (e.g. `gsoc.ts` → `gsoc.test.ts`). +- One `describe` block per exported function. +- Each `describe` should cover: + - The happy path + - At least one edge case or boundary value + - Null / undefined inputs where the function accepts optional parameters +- Astro components are not unit-tested; test the logic extracted into `src/lib/` instead. + +--- + +## Astro components + +- Keep frontmatter focused on **data fetching and transformation**. Move reusable logic into `src/lib/`. +- All internal links must use `fromSiteRoot(Astro.url.pathname, "/target/")` from `src/lib/relative-paths.js`. Hardcoded absolute paths (`/foo/`) break on preview deployments. +- Format with Prettier and lint with ESLint before committing. Run locally before pushing: + + ```sh + npm run format + npm run lint:fix + npm run lint:md:fix + ``` + +--- + +## CI + +GitHub Actions (`.github/workflows/ci.yml`) runs on every push and pull request. Jobs run in parallel where possible: + +| Job | What it checks | +| ---------------- | ------------------------------------------------------------ | +| `format` | Prettier format | +| `lint` | ESLint (warnings treated as errors) + Markdownlint | +| `typecheck` | Astro type/content checks (`astro:check`) | +| `test` | Unit tests (`npm test`) | +| `build` | Production build; output uploaded as a shared artifact | +| `linkcheck` (×2) | Internal and external links, using the shared build artifact | + +All jobs must pass before merging. The `linkcheck` jobs wait for `build` and all quality jobs. + +--- + +## Syncing content from upstream + +This fork rewrote the site from Jekyll (the upstream) to Astro. The two branches have permanently diverged — **never run `git merge upstream/main`**, it would restore all the old Jekyll files. + +When upstream adds or updates GSoC project files, port them manually: + +```bash +# Fetch the latest upstream changes +git fetch upstream + +# See which _projects/ files changed in upstream since the last sync +git log upstream/main ^main --oneline --name-status | grep "_projects" +``` + +For each new or updated `_projects///.md` in upstream: + +1. Find the corresponding Astro file at `src/content/pages/gsoc///.md` +2. Apply the content changes (keep the Astro YAML indentation style) +3. If the file is brand new, create it — the frontmatter schema is defined in `src/content/config.ts` and the template is at `src/content/pages/gsoc/_project_template.md` + +Other upstream changes (e.g. to `gsoc/display/resources/js/app.js`, `_layouts/`, `_sass/`) belong to the old Jekyll site and can be safely ignored. + +--- + +## Updating dependencies + +This is a static site — npm packages only affect developers and CI, not end users. **Update once per GSoC cycle** (roughly every February before the season begins) rather than continuously. + +GitHub Actions versions are kept up to date automatically via Dependabot (monthly). npm packages are updated manually: + +```bash +# See what has newer versions available +npx npm-check-updates + +# Bump all versions in package.json (still respects semver) +npx npm-check-updates -u + +# Install the new versions and update the lock file +npm install + +# Verify nothing broke +npm run build && npm test +``` + +Commit both `package.json` and `package-lock.json` together. If `npm run build` or `npm test` fails after the update, check the changelog for the offending package and either fix the issue or pin that package back to the previous version. + +**Security alerts**: if GitHub raises a Dependabot security alert for a specific npm package, fix that immediately regardless of the regular update schedule. diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 1facff24..00000000 --- a/Gemfile +++ /dev/null @@ -1,8 +0,0 @@ -source 'https://rubygems.org' - -require 'json' -require 'open-uri' -versions = JSON.parse(open('https://pages.github.com/versions.json').read) - -gem 'github-pages', group: :jekyll_plugins -gem 'html-proofer' diff --git a/LICENSE b/LICENSE index 391dce8a..23091268 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2015, OpenAstronomy +Copyright (c) 2015-2026, OpenAstronomy All rights reserved. Redistribution and use in source and binary forms, with or without @@ -21,4 +21,3 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - diff --git a/README.md b/README.md index bed34284..cf3d4b1c 100644 --- a/README.md +++ b/README.md @@ -1,62 +1,120 @@ -### About +# openastronomy.github.io -This is the source for the openastronomy.github.io website. +This is the source code for the openastronomy.org website. -### Building +## Building -To build the site locally, you will need [jekyll](https://jekyllrb.com) to be installed. -Clone this repository locally, then inside it, type: +Requirements: + +- [Node.js](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) + +Install dependencies ```shell -gem install bundler -bundler install +npm install ``` -Depending on your Ruby setup this may require superuser privileges to install to the default location, so you may want to instead use: + +Build the website and output to a `html` folder ```shell +npm run build +``` -gem install -i vendor/bundle bundler -bundle config --local path 'vendor/bundle' -bundle install +Run the dev server +```shell +npm run dev ``` -to install the dependencies locally at `vendor/bundle`. +Preview the production build -You can then build the website with: +```shell +npm run preview +``` + +### Tests + +Run the unit test suite (Vitest): ```shell -bundle exec jekyll build +npm test ``` -To view the site locally, you will then need to run: +Watch mode (re-runs on file changes): ```shell -bundle exec jekyll serve +npm run test:watch ``` -this will track the changes and rebuild automatically. However, it won't reflect changes on `_config.yaml` +### Formatting and linting +Format the codebase -### Building using a Jekyll container +```shell +npm run format +``` -```bash -mkdir -p ../vendor/bundle # so it's available for other projects -export JEKYLL_VERSION=3.8 -# only needs to run it once to download the dependencies -docker run --rm -e BUNDLE_APP_CONFIG="/srv/vendor/bundle" -e BUNDLE_HOME="/srv/vendor/bundle" -e BUNDLE_PATH="/srv/vendor/bundle" --volume="$PWD:/srv/jekyll" --volume="$PWD/../vendor:/srv/vendor" -it jekyll/jekyll:$JEKYLL_VERSION bundle install -# build -docker run --rm -e BUNDLE_APP_CONFIG="/srv/vendor/bundle" -e BUNDLE_HOME="/srv/vendor/bundle" -e BUNDLE_PATH="/srv/vendor/bundle" --volume="$PWD:/srv/jekyll" --volume="$PWD/../vendor:/srv/vendor" -it jekyll/jekyll:$JEKYLL_VERSION bundle exec jekyll build -# serve from python -python -m http.server -d _site +Run ESLint + +```shell +npm run lint +``` + +Auto-fix ESLint issues (where supported) + +```shell +npm run lint:fix ``` -### Submodule +Auto-fix Markdown formatting issues (where supported) -Note that this uses a submodule to complete the build process of the site. So you may need to do: +```shell +npm run lint:md:fix +``` + +Run Astro's type/content checks ```shell -git submodule init -git submodule update +npm run astro:check ``` -in a fresh clone, or just the second line to update the submodule. + +### CI + +- GitHub Actions (`.github/workflows/ci.yml`) runs formatting, linting, Markdown lint, type checks, unit tests, build, and link checks as parallel jobs. +- CircleCI (`.circleci/config.yml`) is kept for website build artifacts (`html/`) preview. + +### Link checks + +We can check both internal links + anchors and external links using a script. + +However, this first requires the website to be built + +```shell +npm run build +``` + +Then for internal links + +```shell +npm run linkcheck:internal +``` + +Then for external links + +```shell +npm run linkcheck:external +``` + +If there are sites you need to skip, you can add regex patterns (one per line) in `linkcheck.skip.txt` + +There are also three environment variables: + +- `LINKCHECK_ROOT=...` to point at a different build folder +- `LINKCHECK_TIMEOUT=...` in ms for external checks +- `LINKCHECK_CONCURRENCY=...` number of parallel workers for external checks (default: 20) + +### Structure + +- `public/` contains static assets (CSS, images, CNAME, etc) +- `src/content/` contains posts and Markdown page content (`pages/`), including GSoC pages and projects +- `src/pages/` contains route handlers/components (Astro files) diff --git a/_config.yml b/_config.yml deleted file mode 100644 index a7050613..00000000 --- a/_config.yml +++ /dev/null @@ -1,49 +0,0 @@ -# Site settings -title: OpenAstronomy -email: openastronomy@googlegroups.com -description: > # this means to ignore newlines until "baseurl:" - Where all about the combined force of different open source projects - in astronomy and astrophysics takes place. -baseurl: "" # the subpath of your site, e.g. /blog/ -url: "https://openastronomy.org" # the base hostname & protocol for your site -#url: "http://localhost:4000" # the base hostname & protocol for your site -twitter_username: Open_Astronomy -github_username: openastronomy -irc_channel: openastronomy -discussiongroup_url: "https://groups.google.com/forum/#!forum/openastronomy" -include: [".well-known"] - -# Extra Nav Links -nav_links: - Contributor Blogs: http://openastronomy.org/Universe_OA - PyAstro Conference: http://openastronomy.org/pyastro - Events Calendar: https://calendar.google.com/calendar/b/1?cid=YmxoZzd0MG9zbjhscm50ZDcwOXFoZzFtaXNAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ - -# Build settings -markdown: kramdown - -kramdown: - hard_wrap: false - input: GFM - -irc_freenode: irc://irc.freenode.net/ - -collections: - projects: - output: true -defaults: - - scope: - path: "" - type: projects - values: - layout: -exclude: - - Gemfile - - Gemfile.lock - - node_modules - - vendor/bundle/ - - vendor/cache/ - - vendor/gems/ - - vendor/ruby/ - - _projects/_template.md - - _projects/README.md diff --git a/_data/icons.yaml b/_data/icons.yaml deleted file mode 100644 index 4c28dc9f..00000000 --- a/_data/icons.yaml +++ /dev/null @@ -1,34 +0,0 @@ -gh_logo: >- - M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 - c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 - c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 - c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 - C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 - c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 - c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 - c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 - c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z - -bb_logo: >- - M29.208,3.519c-0.203-0.285-0.451-0.525-0.729-0.738c-0.61-0.475-1.297-0.814-2.01-1.102c-1.516-0.611-3.097-0.971-4.701-1.229C19.81,0.137,17.836,0.012,15.762,0c-1.854,0.016-3.797,0.133-5.725,0.434C8.668,0.649,7.316,0.94,6.002,1.385c-0.869,0.297-1.71,0.649-2.477,1.164C3.16,2.793,2.824,3.07,2.549,3.418C2.205,3.856,2.058,4.344,2.147,4.897C2.32,5.989,2.48,7.082,2.66,8.169c0.264,1.611,0.537,3.222,0.811,4.828c0.306,1.787,0.62,3.573,0.918,5.36c0.07,0.416,0.246,0.769,0.526,1.07c0.179,0.193,0.37,0.377,0.574,0.543c0.73,0.59,1.562,1.01,2.432,1.354c2.082,0.83,4.259,1.205,6.485,1.328c1.616,0.09,3.23,0.033,4.838-0.187c1.369-0.185,2.709-0.479,4.011-0.948c0.965-0.349,1.891-0.775,2.725-1.382c0.355-0.26,0.683-0.547,0.945-0.901c0.181-0.238,0.305-0.504,0.354-0.805c0.397-2.341,0.809-4.679,1.196-7.021c0.362-2.172,0.701-4.346,1.058-6.518C29.617,4.388,29.502,3.935,29.208,3.519z - M15.82,19.64c-2.4-0.008-4.341-1.971-4.333-4.383c0.006-2.41,1.958-4.347,4.369-4.338c2.425,0.008,4.359,1.961,4.35,4.387C20.195,17.704,18.227,19.648,15.82,19.64z - M24.522,4.394c-0.124,0.139-0.274,0.262-0.436,0.357c-0.45,0.268-0.951,0.409-1.454,0.541c-0.952,0.243-1.923,0.383-2.896,0.485c-1.281,0.136-2.565,0.183-3.791,0.188c-1.49-0.008-2.914-0.068-4.332-0.238c-1.064-0.129-2.124-0.291-3.146-0.633C8.164,4.99,7.869,4.858,7.584,4.713C7.438,4.641,7.309,4.528,7.198,4.409c-0.197-0.215-0.196-0.45,0.005-0.663C7.32,3.621,7.463,3.514,7.61,3.43C8.034,3.184,8.5,3.041,8.969,2.918c0.983-0.256,1.985-0.402,2.994-0.509c1.652-0.17,3.308-0.221,4.967-0.172c1.524,0.045,3.045,0.158,4.55,0.431c0.706,0.127,1.407,0.274,2.075,0.545c0.236,0.096,0.463,0.217,0.683,0.346c0.109,0.064,0.208,0.164,0.288,0.266C24.668,4.007,24.674,4.222,24.522,4.394z - M26.186,22.761c0.009,0.088-0.004,0.183-0.021,0.271c-0.305,1.604-0.614,3.205-0.911,4.811c-0.101,0.539-0.344,0.99-0.724,1.377c-0.422,0.432-0.918,0.752-1.448,1.023c-0.979,0.498-2.018,0.811-3.085,1.031c-1.377,0.286-2.771,0.414-3.563,0.407c-2.41-0.006-4.184-0.198-5.917-0.698c-0.802-0.23-1.577-0.529-2.3-0.953c-0.379-0.222-0.732-0.478-1.042-0.789c-0.388-0.392-0.64-0.846-0.741-1.396c-0.296-1.604-0.609-3.207-0.915-4.81c-0.016-0.081-0.021-0.163-0.019-0.245c0.019-0.394,0.37-0.597,0.724-0.423c0.036,0.021,0.072,0.041,0.105,0.063c1.174,0.853,2.484,1.423,3.858,1.856c1.262,0.4,2.556,0.641,3.873,0.758c1.52,0.138,3.031,0.104,4.54-0.11c2-0.28,3.91-0.851,5.687-1.827c0.354-0.194,0.686-0.43,1.025-0.646c0.056-0.035,0.108-0.076,0.167-0.104C25.819,22.206,26.153,22.395,26.186,22.761z - M18.027,15.284c-0.005,1.203-0.992,2.184-2.197,2.178c-1.205-0.004-2.178-0.987-2.172-2.196c0.004-1.212,0.98-2.181,2.192-2.175C17.059,13.097,18.03,14.073,18.027,15.284z - -sf_logo: >- - m0.10973,10.304c-0.063715-0.064-0.10973-0.3695-0.10973-0.7287,0-0.518,0.028754-0.6339,0.17686-0.7132,0.10645-0.056966,0.97285-0.094654,2.1762-0.094654,1.4331,0,2.0304-0.031075,2.109-0.10973,0.14226-0.14226,0.14226-0.9184,0-1.0607-0.077134-0.077135-0.59397-0.10973-1.7402-0.10973-1.7693,0-2.0378-0.054672-2.4475-0.49821-0.22016-0.2382-0.22973-0.2998-0.25796-1.6592-0.027012-1.3006-0.014301-1.4361,0.16145-1.7204,0.37101-0.6003,0.58673-0.6448,3.2814-0.6767,2.9042-0.034316,2.8498-0.050242,2.8498,0.83519,0,0.32448-0.047689,0.62163-0.10972,0.68366-0.078762,0.078762-0.69147,0.11012-2.1716,0.11112-1.134,0.0007216-2.1155,0.035443-2.1812,0.077064-0.081755,0.051857-0.11052,0.24557-0.091435,0.61579l0.027855,0.54013,1.7373,0.045718c1.9027,0.0502,2.1341,0.1109,2.5506,0.6697,0.1761,0.2362,0.1924,0.3777,0.1924,1.662,0,1.5713-0.052879,1.7306-0.68728,2.0709-0.28534,0.15303-0.55769,0.16929-2.8361,0.16929-1.8385,0-2.5502-0.02969-2.6302-0.10973zm9.1862-1.0489c-0.0335-0.0335-0.0609-1.1033-0.0609-2.3773v-2.3164h-0.66748c-0.39724,0-0.7119-0.044425-0.7772-0.10973-0.061907-0.061907-0.10973-0.35849-0.10973-0.68058,0-0.72446,0.15021-0.85554,0.98042-0.85554h0.57399v-0.8472c0-1.0337,0.14644-1.3641,0.77936-1.7587,0.43617-0.27191,0.45323-0.27457,1.9562-0.30408,0.915-0.017969,1.6159,0.008315,1.7676,0.066314,0.24036,0.091851,0.25145,0.12361,0.25145,0.72011,0,0.36344-0.04582,0.66984-0.10972,0.73375-0.07578,0.075781-0.54252,0.10973-1.5087,0.10973h-1.399v0.64005,0.64005h1.3318c0.7432,0,1.41,0.041832,1.5087,0.094655,0.1481,0.079261,0.17686,0.19524,0.17686,0.7132,0,0.35918-0.04601,0.66455-0.10972,0.72827-0.07578,0.075781-0.54252,0.10973-1.5087,0.10973h-1.399v1.8998c0,2.1681,0.0081,2.1405-0.76082,2.5815-0.457,0.2624-0.7882,0.3393-0.9151,0.2124z - -irc_logo: >- - M30,12V8h-5.004l1-8h-4l-1,8h-7.998l1-8h-4l-1,8H2v4h6.498L7.5,20H2v4h5l-1,8h4l1-8h8l-1.002,8H22l1-8h7v-4h-6.5l0.996-8H30z - M19.5,20h-8l0.998-8h7.998L19.5,20z - -mastodon_logo: >- - M11.19 12.195c2.016-.24 3.77-1.475 3.99-2.603.348-1.778.32-4.339.32-4.339 0-3.47-2.286-4.488-2.286-4.488C12.062.238 10.083.017 8.027 0h-.05C5.92.017 3.942.238 2.79.765c0 0-2.285 1.017-2.285 4.488l-.002.662c-.004.64-.007 1.35.011 2.091.083 3.394.626 6.74 3.78 7.57 1.454.383 2.703.463 3.709.408 1.823-.1 2.847-.647 2.847-.647l-.06-1.317s-1.303.41-2.767.36c-1.45-.05-2.98-.156-3.215-1.928a3.614 3.614 0 0 1-.033-.496s1.424.346 3.228.428c1.103.05 2.137-.064 3.188-.189zm1.613-2.47H11.13v-4.08c0-.859-.364-1.295-1.091-1.295-.804 0-1.207.517-1.207 1.541v2.233H7.168V5.89c0-1.024-.403-1.541-1.207-1.541-.727 0-1.091.436-1.091 1.296v4.079H3.197V5.522c0-.859.22-1.541.66-2.046.456-.505 1.052-.764 1.793-.764.856 0 1.504.328 1.933.983L8 4.39l.417-.695c.429-.655 1.077-.983 1.934-.983.74 0 1.336.259 1.791.764.442.505.661 1.187.661 2.046v4.203z - -twitter_logo: >- - M5.026 15c6.038 0 9.341-5.003 9.341-9.334 0-.14 0-.282-.006-.422A6.685 6.685 0 0 0 16 3.542a6.658 6.658 0 0 1-1.889.518 3.301 3.301 0 0 0 1.447-1.817 6.533 6.533 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.325 9.325 0 0 1-6.767-3.429 3.289 3.289 0 0 0 1.018 4.382A3.323 3.323 0 0 1 .64 6.575v.045a3.288 3.288 0 0 0 2.632 3.218 3.203 3.203 0 0 1-.865.115 3.23 3.23 0 0 1-.614-.057 3.283 3.283 0 0 0 3.067 2.277A6.588 6.588 0 0 1 .78 13.58a6.32 6.32 0 0 1-.78-.045A9.344 9.344 0 0 0 5.026 15z - -rss_logo: >- - M14 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h12zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z - M5.5 12a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm-3-8.5a1 1 0 0 1 1-1c5.523 0 10 4.477 10 10a1 1 0 1 1-2 0 8 8 0 0 0-8-8 1 1 0 0 1-1-1zm0 4a1 1 0 0 1 1-1 6 6 0 0 1 6 6 1 1 0 1 1-2 0 4 4 0 0 0-4-4 1 1 0 0 1-1-1z diff --git a/_data/members.yaml b/_data/members.yaml deleted file mode 100644 index 4288665c..00000000 --- a/_data/members.yaml +++ /dev/null @@ -1,365 +0,0 @@ -astropy: - name: Astropy - logo: astropy.png - url: http://www.astropy.org/ - repositories: - github: astropy/astropy - mailinglist: - users: http://mail.python.org/mailman/listinfo/astropy - devs: http://groups.google.com/group/astropy-dev - chat: - slack: http://joinslack.astropy.org/ - microblogging: - twitter: astropy - description: >- - is a community-driven package intended to contain much of the core - functionality and some common tools needed for performing - astronomy and astrophysics with Python. - -astronomy-commons: - name: Astronomy Data Commons - logo: astronomy-commons.png - url: https://dirac.astro.washington.edu/data-engineering/ - repositories: - github: astronomy-commons/ - mailinglist: - devs: https://groups.google.com/forum/#!forum/astronomy-commons - chat: - matrix: https://app.element.io/#/room/#astronomy-commons:matrix.org - description: >- - is an initiative for software infrastructure for science platforms and - scalable astronomy on cloud resources. Astronomy Data Commons is lead by - researchers at the DiRAC Institute at the University of Washington. - -ctlearn: - name: CTLearn - logo: ctlearn.png - url: https://github.com/ctlearn-project - repositories: - github: ctlearn-project/ctlearn - chat: - matrix: https://app.element.io/#/room/#ctlearn:matrix.org - description: >- - is a package under active development that pursues the - application of deep-learning based methods to the analysis of - data from imaging atmospheric Cherenkov telescopes (IACTs). CTLearn includes - modules for loading and manipulating IACT data and for running - machine learning models using pixel-wise camera data as - input. Its high-level interface provides a - configuration-file-based workflow to drive reproducible training - and prediction. - -einsteinpy: - name: EinsteinPy - logo: einsteinpy.png - url: https://einsteinpy.org - repositories: - github: einsteinpy/einsteinpy - mailinglist: - devs: https://groups.io/g/einsteinpy-dev - chat: - matrix: https://app.element.io/#/room/#einsteinpy:matrix.org - microblogging: - twitter: EinsteinPy - description: >- - is a python package for solving problems in general relativity. Computations - can be done for Schwarzschild, Kerr and Kerr-Newman geometries. Visualising - relativistic orbits, advancement of perihelion can be simulated in seconds. - See documentation for more - information. - -glue: - name: Glue - logo: glue.png - url: http://www.glueviz.org/ - repositories: - github: glue-viz/glue - mailinglist: - users: https://groups.google.com/group/glue-viz - devs: https://groups.google.com/group/glue-viz-dev - microblogging: - twitter: glueviz - description: >- - is a data visualization application and library to explore relationships - within and among related datasets. Its main features include linked - statistical graphs, flexible linking across data, and full Python scripting - capability. - -juliaastro: - name: JuliaAstro - logo: juliaastro.svg - url: https://juliaastro.github.io/ - repositories: - github: JuliaAstro - mailinglist: - users: https://discourse.julialang.org/c/domain/astro - chat: - slack: https://app.slack.com/client/T68168MUP/CMXU6SD7V - zulip: https://julialang.zulipchat.com/#narrow/channel/astronomy - description: >- - is an organization that shepherds the development of community astronomy and - astrophysics packages for Julia. These include packages for widely used - functionality such as FITS file I/O, world coordinate systems and - cosmological distance calculations. - -poliastro: - name: poliastro - logo: poliastro.png - url: https://poliastro.readthedocs.io/ - repositories: - github: poliastro/poliastro - mailinglist: - devs: https://groups.io/g/poliastro-dev - chat: - matrix: https://app.element.io/#/room/#poliastro:matrix.org - microblogging: - twitter: poliastro_py - mastodon: "@poliastro@fosstodon.org" - description: >- - is a python package for Astrodynamics and Orbital Mechanics problems, such - as orbital elements conversion, orbital propagation, plotting, planetary - ephemerides computation, and more. - -sunpy: - name: SunPy - logo: sunpy.png - url: http://sunpy.org - repositories: - github: sunpy/sunpy - mailinglist: - users: http://groups.google.com/group/sunpy - devs: http://groups.google.com/group/sunpy-dev - chat: - matrix: https://app.element.io/#/room/#sunpy:openastronomy.org - microblogging: - twitter: SunPyProject - description: >- - is a community-developed free and open-source software package for solar - physics. SunPy is meant to be a free alternative to the - SolarSoft - and its aim is to provide the software tools necessary so that anyone can - analyze solar data. - -stingray: - name: Stingray - logo: stingray_logo.png - url: http://stingray.science - repositories: - github: StingraySoftware - chat: - slack: https://join.slack.com/t/stingraysoftware/shared_invite/zt-49kv4kba-mD1Y~s~rlrOOmvqM7mZugQ - description: >- - : we are a team of astrophysicists and software developers working together - to build a variability analysis software to study black holes and - fundamental physics under extreme conditions. - -casacore: - name: Casacore - logo: casacore.svg - url: https://www.github.com/casacore/casacore/ - repositories: - github: casacore - description: >- - is a suite of C++ libraries for radio astronomy data processing. Casacore - underlies CASA, the Common Astronomy - Software Applications developed by an international consortium of scientists - at various institutes. Python bindings exist in Python-casacore. - Casacore also underlies other radio astronomy software such as WSClean, and LOFAR - tools. Casacore is developed by the radio astro organizations around the - world. It is open source and will happily merge any (good) pull requests. - -chiantipy: - name: ChiantiPy - logo: chiantipy.png - url: http://chiantipy.sourceforge.net/welcome.html - repositories: - github: chianti-atomic/ChiantiPy - mailinglist: - users: https://lists.sourceforge.net/lists/listinfo/chiantipy-users - description: >- - is a Python interface to the CHIANTI atomic database for astrophysical - spectroscopy. CHIANTI consists of a database of atomic data that can be used - to interpret spectral lines and continua emitted from high-temperature, - optically-thin astrophysical sources. - -coin: - name: COIN - logo: coin.png - url: https://cosmostatistics-initiative.org/ - repositories: - github: COINtoolbox - mailinglist: - admin (Rafael S. de Souza): mailto:rafael.2706@gmail.com - description: >- - (COsmostatistics INitiative) is an international working group built under - the auspices of the International Astrostatistics Association (IAA). It - aims to create an interdisciplinary environment where collaborations between - astronomers, statisticians and machine learning experts can flourish. COIN - is designed to promote the development of a new family of tools for data - exploration in astrophysics and cosmology. - -gnuastro: - name: GNU Astronomy Utilities - logo: gnuastro.svg - url: https://www.gnu.org/software/gnuastro/ - repositories: - savannah: https://git.savannah.gnu.org/cgit/gnuastro.git - mailinglist: - users: https://lists.gnu.org/mailman/listinfo/help-gnuastro - devs: https://lists.gnu.org/mailman/listinfo/gnuastro-devel - description: >- - (Gnuastro) is an official GNU package consisting of many - command-line programs and - library functions for the manipulation and analysis of - astronomical data. All the programs share the same basic and familiar (GNU - style) command-line user interface for the comfort of both the users and - developers. Gnuastro is written to comply fully with the GNU coding - standards so it blends nicely with all Unix-like operating systems. This - also enables astronomers to expect a fully familiar experience in the - source code, building, installing and command-line user interaction. - Gnuastro also has a very complete - book/manual, the - tutorials is the best place to start using it. - -ims: - name: The Italian Mars Society - logo: ims.png - url: http://www.marssociety.it/?lang=en - repositories: - bitbucket: italianmarssociety/ - mailinglist: - admin: mailto:gsoc@marssociety.it - microblogging: - twitter: marssociety - description: >- - (IMS) is a non-profit organization, existing from 2004, as Italian branch of - the International Mars Society, created in the USA by Robert Zubrin. IMS is - a member of the Mars Society European network. The foundation scope of the - Italian Mars Society is to promote research projects devoted to Mars - Exploration and the involvement of SMEs and large enterprises in the new - economy related to space exploration.
IMS is currently spearheading - the MARS CITY - project. The project aims to address the major issues that could jeopardize - a crewed mission to Mars and are not adequately being addressed at existing - terrestrial Mars analogs. - -plasmapy: - name: PlasmaPy - logo: plasmapy.png - url: http://www.plasmapy.org - repositories: - github: plasmapy/plasmapy - mailinglist: - users: https://groups.google.com/group/plasmapy - chat: - matrix: https://app.element.io/#/room/#plasmapy:matrix.org - microblogging: - twitter: plasmapy - description: >- - aims to be a collection of functionality commonly used and shared between - plasma physicists and researchers globally, running within and leveraging - the open source scientific Python ecosystem. - -radis: - name: radis - logo: radis_ico.png # name of the logo as saved on img/members - url: https://radis.readthedocs.io/ - repositories: - github: radis/radis - mailinglist: - users: https://groups.google.com/forum/#!forum/radis-radiation - chat: - gitter: https://gitter.im/radis-radiation/community - microblogging: - twitter: radis_radiation - description: >- - A fast line-by-line code for high-resolution infrared molecular spectra. - RADIS can compute spectra of millions of lines within seconds. Also - includes a post-processing tools to compare experimental spectra with - spectra calculated in RADIS or other spectral codes. - -sherpa: - name: Sherpa - logo: sherpa_logo.gif - url: http://cxc.cfa.harvard.edu/contrib/sherpa/ - repositories: - github: sherpa/sherpa/ - description: >- - is a modeling and fitting application for Python. It contains a powerful - language for combining simple models into complex expressions that can be - fit to the data using a variety of statistics and optimization methods. It - is easily extensible to include user models, statistics and optimization - methods. - -yt: - name: yt - logo: yt.png - url: https://yt-project.org/ - repositories: - github: yt-project/yt - mailinglist: - users: https://mail.python.org/archives/list/yt-users@python.org/ - devs: https://mail.python.org/archives/list/yt-dev@python.org/ - chat: - slack: https://yt-project.slack.com/ - microblogging: - twitter: yt_astro - description: >- - is a python package for analyzing and visualizing volumetric, - multi-resolution data from astrophysical simulations, - radio telescopes, and a burgeoning interdisciplinary community. - -lincc-frameworks: - name: LINCC Frameworks - logo: lincc-frameworks.png - url: https://lsstdiscoveryalliance.org/lsst-discovery-alliance-programs/lincc-frameworks/ - repositories: - github: lincc-frameworks - chat: - slack: https://join.slack.com/t/gsoc26arrowforastro/shared_invite/zt-3qpirqhkg-qTHUg4R0iMewhIprewR1eg - description: >- - builds open-source tools scalable data analysis in astronomy, aimed at - enabling scientific discovery with large datasets. - -reltrans: - name: Reltrans - logo: reltrans_logo.png - url: https://reltrans.github.io/reltrans_website/Home.html - repositories: - github: reltrans - chat: - slack: https://join.slack.com/t/reltrans-workspace/shared_invite/zt-3p234fciq-lD12LDPTCCPf0DTT1ZocmQ - description: >- - Reltrans (Relativistic transfer functions) is a publicly available, semi-analytical model for X-ray reverberation mapping of accreting black holes in both AGN and X-ray binaries. It can be used to compute both time-averaged spectra and energy-dependent, Fourier domain cross spectra - -# Are you a new org? copy the fragment below above this line and fill it up -# with your organisation details. Don't forget to add your logo to the img/members -# directory. -# example: -# name: OrgName -# logo: logo.png # name of the logo as saved on img/members -# url: http://url.mainOrgpage.is -# repositories: -# github: org/repo -# bitbucket: org/repo -# somethingelse: http://full.url # In this case it will print the name for the repo -# mailinglist: -# users: http://url.for.group -# devs: http://url.for.group -# otherstuff: http://url.for.group -# chat: -# slack: http://slackurl.com -# matrix: http://riot.url -# irc: http://irc.freenode/#channel -# description: >- -# Multiline description that will start with name org. html links are -# allowed as normal links. diff --git a/_includes/footer.html b/_includes/footer.html deleted file mode 100644 index 8a14c2df..00000000 --- a/_includes/footer.html +++ /dev/null @@ -1,39 +0,0 @@ - diff --git a/_includes/head.html b/_includes/head.html deleted file mode 100644 index ffe6962c..00000000 --- a/_includes/head.html +++ /dev/null @@ -1,71 +0,0 @@ - - - {% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %} - - - - - - - - - - - - - - - - - {% include style.html %} - - - - - - {% if include.project == "true" %} - - - - - - - - - - - - - - - - {% endif %} - - diff --git a/_includes/header.html b/_includes/header.html deleted file mode 100644 index be4ee4fe..00000000 --- a/_includes/header.html +++ /dev/null @@ -1,36 +0,0 @@ - diff --git a/_includes/member.html b/_includes/member.html deleted file mode 100644 index 68b8cbbf..00000000 --- a/_includes/member.html +++ /dev/null @@ -1,88 +0,0 @@ -{% assign details = member[1] %} -
- - {{member[0]}} - -
- {{ details.name }} - {{ details.description }} -
- - {% for repo in details.repositories %} - {% if repo[0] == 'github' %} - {% assign name = repo[1] %} - - - - - - - {% elsif repo[0] == "bitbucket" %} - {% assign name = repo[1] %} - - - - - - - {% elsif repo[0] == "sourceforge" %} - {% assign name = repo[1] %} - - - - - - - {% else %} - {% assign name = member[0] %} - - - Cgit logo - - {% endif %} - {{ name }} - {% endfor %} -
- - {% if details.mailinglist %} - - {% for list in details.mailinglist %} - {{ list[0] }}{% unless forloop.last %},{% endunless %} - {% endfor %} -
- {% endif %} - - {% if details.chat %} - - - - - - {% for chat in details.chat %} - {{ chat[0] }}{% unless forloop.last %},{% endunless %} - {% endfor %} -
- {% endif %} - - {% for mb in details.microblogging %} - {% if mb[0] == 'twitter' %} - {% assign name = '@' | append: mb[1] %} - {% assign url = 'https://twitter.com/' | append: mb[1] %} - {% assign icon = site.data.icons.twitter_logo %} - {% elsif mb[0] == "mastodon" %} - {% assign mastodon_parts = mb[1] | split: "@" %} - {% assign name = mb[1] %} - {% assign url = 'https://' | append: mastodon_parts[2] | append: '/@' | append: mastodon_parts[1] %} - {% assign icon = site.data.icons.mastodon_logo %} - {% endif %} - - - - - - - {{ name }} - {% endfor %} -
-
-
diff --git a/_includes/style.html b/_includes/style.html deleted file mode 100644 index eeca68f8..00000000 --- a/_includes/style.html +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/_layouts/default.html b/_layouts/default.html deleted file mode 100644 index cae818ed..00000000 --- a/_layouts/default.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - {% include head.html %} - - - - {% include header.html %} - -
-
-
- {{ content }} -
-
-
- - {% include footer.html %} - - - - diff --git a/_layouts/display.html b/_layouts/display.html deleted file mode 100644 index 13e055b4..00000000 --- a/_layouts/display.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - {% include head.html %} - - - - {% include header.html %} - -
-
- {{ content }} -
-
- - {% include footer.html %} - - - - diff --git a/_layouts/mission.html b/_layouts/mission.html deleted file mode 100644 index a2b4e52f..00000000 --- a/_layouts/mission.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: default ---- -
- -
-

{{ page.title }}

- -
- -
- {{ content }} -
- -
diff --git a/_layouts/page.html b/_layouts/page.html deleted file mode 100644 index 74c1a118..00000000 --- a/_layouts/page.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -layout: default ---- -
- -
-

{{ page.title }}

-
- -
- {{ content }} -
- -
diff --git a/_layouts/post.html b/_layouts/post.html deleted file mode 100644 index a2b4e52f..00000000 --- a/_layouts/post.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: default ---- -
- -
-

{{ page.title }}

- -
- -
- {{ content }} -
- -
diff --git a/_layouts/projects.html b/_layouts/projects.html deleted file mode 100644 index 742f7815..00000000 --- a/_layouts/projects.html +++ /dev/null @@ -1,40 +0,0 @@ - - - {% include head.html project="true" %} - - - {% include header.html %} - -
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
- - {% include footer.html %} - - - - - diff --git a/_plugins/shuffle.rb b/_plugins/shuffle.rb deleted file mode 100644 index 26b09966..00000000 --- a/_plugins/shuffle.rb +++ /dev/null @@ -1,9 +0,0 @@ -module Jekyll - module ShuffleFilter - def shuffle(array) - array.shuffle - end - end -end - -Liquid::Template.register_filter(Jekyll::ShuffleFilter) diff --git a/_posts/2018-08-14-GSoC.md b/_posts/2018-08-14-GSoC.md deleted file mode 100644 index aeb7f3fb..00000000 --- a/_posts/2018-08-14-GSoC.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: post -title: "2018 August 14: GSoC - End of Coding" -date: 2018-08-14 ---- - -Students submit their final work product and their final mentor evaluation. diff --git a/_projects/2017/casacore/testing.md b/_projects/2017/casacore/testing.md deleted file mode 100644 index be30bf4f..00000000 --- a/_projects/2017/casacore/testing.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -name: Casacore testing -desc: Improve the test coverage of the python wrappers around casacore, and possibly add some python functionality -# add a description of your project -requirements: - - Proficiency in Python -difficulty: intermediate -issues: - - https://github.com/casacore/python-casacore/issues/6 - - https://github.com/casacore/python-casacore/issues/60 -mentors: - - tammojan - - gijzelaerr -initiatives: - - GSOC -tags: - - python casacore testing -collaborating_projects: - - casacore ---- -#### Description - -Python-casacore is a set of Python bindings for [casacore] (https://github.com/casacore/casacore), a c++ library used in radio astronomy. This python binding to casacore is now python 3 compatible, contains some unit tests, etc. But some work remains to be done: - - - Remove all compile warnings - - Modernise code, add missing features, maybe more ‘pythonic’. - - Improve test coverage (24% at the moment) - -This is a typical project to learn making good code. - diff --git a/_projects/2018/astropy/astropy-learn-website.md b/_projects/2018/astropy/astropy-learn-website.md deleted file mode 100644 index 78a398d1..00000000 --- a/_projects/2018/astropy/astropy-learn-website.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -name: Astropy Learn Website -desc: Design and Implement landing page for Astropy Learn ecosystem. -# add a short one line description of your project -requirements: -# Student requirements: - - Web development knowledge - - User interface design and user experience - - Knowledge of the Sphinx documentation tool is a plus -difficulty: moderate -issues: -# Related issues (if any) to this project. -mentors: -# First person in contact; mentors may change before project starts. - - kelle - - eblur - - adrn - - eteq -initiatives: - - GSOC -tags: -# Different technologies needed - - Web design - - javascript - - python -collaborating_projects: -# suborganisation(s) to which this project belongs. - - astropy ---- -Design and Implement landing page for Astropy Learn ecosystem. - -#### Description -This project is for the creation of a landing web page for the Astropy Learn ecosystem. The Learn ecosystems includes the Astropy documentation and associated examples, the Astropy tutorials, and guides (e.g., worked out science use cases). Implementing this likely also requires harmonizing the existing tutorials web site with the astropy documentation (which is generated by Sphinx). This project may also include indexing/tagging of the materials and searching for content (this is already possible to some extent, but the current capabilities are inadequate). - -#### Possible Milestones - -##### At start of coding for GSOC 2018 - -* Have a big-picture plan for how the learn landing page, astropy web site, astropy docs, and astropy tutorials link together. -* Have a general sense of what actual web page javascript code and sphinx extension changes might be necessary. - -##### GSOC 2018 Midterm - -* Have a draft design for the new web pages ready to get comment from the community. -* Have Pull Requests open for any changes necessary to the astropy documentation or tutorials page templates. - -##### GSOC 2018 Final - -* Have the completed landing page launched. -* (Stretch goal) Include in the landing page a search that works across all of the learn resources. diff --git a/_projects/2018/astropy/sphinx-example-index.md b/_projects/2018/astropy/sphinx-example-index.md deleted file mode 100644 index d66b1a6b..00000000 --- a/_projects/2018/astropy/sphinx-example-index.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -name: Indexing examples in Astropy Sphinx documentation -desc: Write a Sphinx plugin to identify examples in the Astropy documentation, tag/index them, and build an example gallery from them -# add a short one line description of your project -requirements: -# Student requirements: - - Knowledge of [sphinx](http://www.sphinx-doc.org/en/stable/) - - Interest in user training -difficulty: moderate -issues: -# Related issues (if any) to this project. - - https://github.com/astropy/astropy/issues/6589 - - https://github.com/astropy/astropy-helpers/issues/371 -mentors: -# First person in contact; mentors may change before project starts. - - eteq - - adrn - - bsipocz -initiatives: - - GSOC -tags: -# Different technologies needed - - python - - sphinx -collaborating_projects: -# suborganisation(s) to which this project belongs. - - astropy ---- -Write a Sphinx plugin to identify examples in the Astropy documentation, tag/index them, and build an example gallery from them - -#### Description - -The [current astropy example gallery](http://docs.astropy.org/en/stable/generated/examples/) is problematic because it duplicates content from the astropy documentation and it is not clear which examples are "worthy" of the example gallery. It also overlaps with the [astropy tutorials](http://tutorials.astropy.org). Hence, this project is focused on developing the infrastructure to auto-generate the example gallery from examples *in* the documentation. This will require building a Sphinx plugin to find tagged examples and generating links. It will also require coordinating moving of existing gallery examples to the documentation and tagging them appropriately. - -#### Possible Milestones - -##### At start of coding for GSOC 2018 - -* Identify what labeling technique is best for tagging the examples. -* Solicit authors of gallery examples to determine where they should be moved. Some may belong in the documentations, whil others might be better places as Astropy Tutorials. -* Determine where the plugin will go (either a standalone small package, in the astropy-helpers, or in astropy itself), in consultation with the Astropy documentation maintainers. - -##### GSOC 2018 Midterm - -* Have examples identified and ready to be moved out of the gallery and into their relevant locations in the astropy docs or tutorials. -* Have a first-draft working plugin ready for review by Astropy documentation maintainers. -* Determine how difficult it will be to have an example *gallery* (as opposed to simply an index/list of the examples). - -##### GSOC 2018 Final - -* Release the plugin, with minimum functionality of generating the example list (or have it merged if it ends up as part of another project). -* (Stretch Goal) have the plugin generate an example gallery instead of a list. -* Complete a Pull Request to activate the (finished) plugin in the Astropy repository. -* Have a Pull Request to tag all the relevant examples which sucessfully generates the example *list*. diff --git a/_projects/2018/astropy/table-optimize.md b/_projects/2018/astropy/table-optimize.md deleted file mode 100644 index 2cbcb293..00000000 --- a/_projects/2018/astropy/table-optimize.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -name: Improving astropy Table performance -desc: Improve the speed of common Table operations like slicing -# add a short one line description of your project -requirements: -# Student requirements: - - Familiar with Cython and Python code profiling - - Familiar with Python speed optimization strategies -difficulty: medium -issues: -# Related issues (if any) to this project. -mentors: -# First person in contact; mentors may change before project starts. - - taldcroft -initiatives: - - GSOC -tags: -# Different technologies needed - - python - - Cython -collaborating_projects: -# suborganisation(s) to which this project belongs. - - astropy ---- - -Improving astropy Table performance - -#### Description - -The astropy table sub-package defines a core Table class that is -used to store and manipulate tabular data within astropy. This class -was written with an emphasis on functionality, convenience for astronomers, -and code clarity. With the astropy table package now fairly mature -and with a strong set of regression tests in place, it is time to focus -on performance for basic operations like table creation and slicing. -For a simple operation like slicing, astropy Table is currently about -a factor of 10 slower than Pandas. This project will focus on identifying -performance bottlenecks, writing performance tests for astropy-benchmarks, -and then developing code to improve the performance. It is possible that -some fixes - -#### Milestones (if any) - -##### GSOC 2018 CODING STARTS - -* Perform developer install of `astropy`. -* Install Python profiling tools. -* Study astropy and the table package capabilities. - -##### GSOC 2018 MIDTERM - -* Install and run `asv`. -* Examine existing `asv` benchmarks and identify areas for improved benchmarking. -* Profile key parts of table code and identify performance bottlenecks. -* Identify strategies for improved speed performance. -* Implement initial performance improvements. - -##### GSOC 2018 FINAL - -* Continue and finalize implementation of performance improvements. -* Contine and finalize additional `asv` benchmark tests. diff --git a/_projects/2019/astropy/table-optimize.md b/_projects/2019/astropy/table-optimize.md deleted file mode 100644 index e1dbb183..00000000 --- a/_projects/2019/astropy/table-optimize.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -name: Improving astropy Table performance -desc: Improve the speed of common Table operations like slicing -# add a short one line description of your project -requirements: -# Student requirements: - - Familiar with Cython and Python code profiling - - Familiar with Python speed optimization strategies -difficulty: medium -issues: -# Related issues (if any) to this project. -mentors: -# First person in contact; mentors may change before project starts. - - taldcroft - - mhvk -initiatives: - - GSOC -tags: -# Different technologies needed - - python - - Cython -collaborating_projects: -# suborganisation(s) to which this project belongs. - - astropy ---- - -Improving astropy Table performance - -#### Description - -The astropy table sub-package defines a core Table class that is -used to store and manipulate tabular data within astropy. This class -was written with an emphasis on functionality, convenience for astronomers, -and code clarity. With the astropy table package now fairly mature -and with a strong set of regression tests in place, it is time to focus -on performance for basic operations like table creation and slicing. -For a simple operation like slicing, astropy Table is currently about -a factor of 10 slower than Pandas. This project will focus on identifying -performance bottlenecks, writing performance tests for astropy-benchmarks, -and then developing code to improve the performance. It is possible that -some fixes will require the use of Cython so previous experience is -desirable though not absolutely required. - -#### Milestones (if any) - -##### GSOC 2019 CODING STARTS - -* Perform developer install of `astropy`. -* Install Python profiling tools. -* Study astropy and the table package capabilities. - -##### GSOC 2019 MIDTERM - -* Install and run `asv`. -* Examine existing `asv` benchmarks and identify areas for improved benchmarking. -* Profile key parts of table code and identify performance bottlenecks. -* Identify strategies for improved speed performance. -* Implement initial performance improvements. - -##### GSOC 2019 FINAL - -* Continue and finalize implementation of performance improvements. -* Contine and finalize additional `asv` benchmark tests. diff --git a/_projects/2019/astropy/telescopy.md b/_projects/2019/astropy/telescopy.md deleted file mode 100644 index 720ac513..00000000 --- a/_projects/2019/astropy/telescopy.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -name: telescopy -desc: A generic API for telescope S/N calculations. -requirements: -# Student requirements: - - Observational astronomy -difficulty: medium -mentors: -# First person in contact; mentors may change before project starts. - - bmorris3 - - eteq -initiatives: - - GSOC -tags: -# Different technologies needed - - python -collaborating_projects: -# suborganisation(s) to which this project belongs. - - astropy ---- - -Specify some telescope, filter, imager, and target properties, and estimate the photons or counts you’d measure - -#### Description - -The goal of this project is to create a simple API for performing signal-to-noise calculations -for telescopic observations using astropy. Users will specify an input source spectrum (e.g. a blackbody), -properties of the source (e.g. magnitude in one band, or a distance), properties of the telescope -(e.g. aperture, throughput), and properties of the imager (e.g. quantum efficiency, gain) in order to calculate -the expected photon flux and count rate. If time allows, the applicant will also develop a submodule for -signal-to-noise calculations of spectroscopic observations. - -#### Milestones (if any) - -##### GSOC CODING STARTS - -* Get to know the existing API, design strawman API -* Generalize the input spectrum object for objects other than blackbodies -* Work out scaling of magnitudes from one band to another - -##### GSOC MIDTERM - -* Write tests which will validate predictions against real data -* Write documentation which explains how to construct your own S/N calculations - -##### GSOC FINAL - -* Have _passing_ tests which validate the API for real observations -* Handle spectroscopic observations at arbitrary spectral resolution -* Write extensive documentation with examples for widely-used telescopes diff --git a/_projects/2019/sunpy/featuresevents.md b/_projects/2019/sunpy/featuresevents.md deleted file mode 100644 index 2d56b276..00000000 --- a/_projects/2019/sunpy/featuresevents.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -name: Feature and Event Objects in SunPy -desc: Implements a feature/event object in SunPy. -requirements: - - Familiar with methods for creating classes, objects and subclasses. -difficulty: medium -issues: - - https://github.com/sunpy/sunpy/pull/2759 - - https://github.com/sunpy/sunpy/issues/1792 - - https://github.com/sunpy/sunpy/issues/1398 - - https://github.com/sunpy/sunpy/issues/164 -mentors: - - wafels - - Cadair - - dpshelio -initiatives: - - GSOC -tags: - - Python -collaborating_projects: - - SunPy ---- - -#### Description - -The Sun displays many different features and events (FEs). These are -detected and described either automatically by algorithm, or by visual -inspection by human, or by a combination of both. There are many -different repositories of these FEs online. SunPy provides access to -two large FE repositories, the Heliophysics Event Knowledgebase (HEK) and -the Helio Event Catalogue (HEC). - -The aim of this project is to create a SunPy object that normalizes -input from both the HEK and HEC and creates a SunPy FE object. The -SunPy FE object should take advantage of existing SunPy capabilities -such as SunPy spatial co-ordinates and SunPy time. This will make FE -data much more useful to SunPy users. - -The SunPy FE object should interact intuitively with existing SunPy -objects such as the SunPy maps and timeseries. For example, it should -be simple for a FE with a spatial extent property to be overplotted -on SunPy map; similarly, it should be simple for a FE with a temporal -duration to be overplotted on a SunPy timeseries. - - -#### Milestones - -##### Coding Starts - -* Engaged with the community and understand the motivation and - challenges of the project. - -##### Evaluation 1 - -* Have understood what a FE is in the context of solar physics - research and why their interaction with existing SunPy objects is - important. -* Have evaluated and chosen an approach to the design of a SunPy FE - object. -* Have implemented a basic SunPy FE object. - -##### Evaluation 2 - -* Have worked with your mentors and the community to design a simple - and functional API. -* Have a working prototype of the SunPy FE object that normalizes -input from both the HEK and HEC. -* Have tests for the working prototype. - -##### Final - -* Have finished implementation, testing and documentation. -* Have written examples for the gallery of how to use the functionality. -* Have written developer documentation. -* Have the Pull Request merged after review and feedback. diff --git a/_projects/2020/.gitkeep b/_projects/2020/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2020/einsteinpy/Null-geodesics-for-Schwarzschild-and-Kerr-Geometries..md b/_projects/2020/einsteinpy/Null-geodesics-for-Schwarzschild-and-Kerr-Geometries..md deleted file mode 100644 index f9411a28..00000000 --- a/_projects/2020/einsteinpy/Null-geodesics-for-Schwarzschild-and-Kerr-Geometries..md +++ /dev/null @@ -1,96 +0,0 @@ ---- -name: Null geodesics for Schwarzschild and Kerr Geometries -desc: The project aims at adding functionality of ray-tracing to EinsteinPy -# add a short one line description of your project -requirements: -# Student requirements: - - Knowledge on ODEs, basic mathematics - - Some Familiarity with General Relativity, or the will to read about it. - - Basic knowledge of differential geometry -difficulty: medium -issues: -# Related issues (if any) to this project. - - https://github.com/einsteinpy/einsteinpy/issues/105 - - https://github.com/einsteinpy/einsteinpy/issues/106 - - https://github.com/einsteinpy/einsteinpy/issues/275 - - https://github.com/einsteinpy/einsteinpy/issues/144 - - https://github.com/einsteinpy/einsteinpy/issues/145 -mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - ritzvik - - OVSofia - - rishi-s8 -initiatives: - - GSOC - - SOCIS -tags: -# Different technologies needed - - python - - C++ -collaborating_projects: -# suborganisation(s) to which this project belongs. - - einsteinpy ---- - -#### Description - -Null-geodesics is the path traced by light rays in 4-D space-time. We aim to calculate null geodesics around non-rotating (Schwarzschild) and rotating (Kerr) massive bodies given the initial conditions. - -The project has roughly the following objectives : - - Calculating null trajectories around a rotating/non-rotating black hole. - - Use those trajectories to raytrace a bundle of photon rays, to visualize how space-time gets distorted in presence of black holes. - - Calculate redshifts in photon rays due to space-time curvature. - - Visualization of Keplerian disc/shell in around it. - - In short, we aim to replicate one of the few papers available with proper coding paradigms like OOPs, good documentation and unit tests. - - If required due to performance issues, python wrappers over native C/C++ have to be written. - -This project also aims at fixing the problem of natural units introduced due to the research papers and books and to give native support to MKS units. - -##### Papers we intend to replicate : - - Odyssey: https://arxiv.org/abs/1601.02063 - - YNOGK: https://arxiv.org/abs/1305.1250 - -##### Links to other relevant papers : - - https://www.aanda.org/articles/aa/abs/2004/36/aa0814/aa0814.html - - http://www.math.mcgill.ca/gantumur/math599w17/project-kerr.pdf - - https://iopscience.iop.org/article/10.1088/0004-637X/696/2/1616 - -#### Milestones (if any) - -##### Coding starts - -* Engaged with the community and understand the motivation and challenges of - the project. -* Have set up a development environment and get familiar with einsteinpy dependencies. -* Have read relevant literature/codes required for the project. - - -##### 1st evaluation - -* Null geodesic in Kerr space-time -* Null geodesic in Schwarzschild space-time (It can be implemented by creating a class inheriting from Kerr null geodesics and setting a=0. However, it would lead to unnecessary calculation and therefore, seperate Schwarzschild-Null class is necessary.) -* If possible, basic raytracing using the newly created classes. -* Have all code, tests and documentation in GitHub. - -##### 2nd evaluation - -* Plotting class for both Kerr and Schwarzschild null geodesics. -* Improvement in raytracing, along with simulation of a photon sheet around a black hole. -* Calculation of redshifts along the null trajectory. -* Have all code, tests and documentation in GitHub. - -##### Final - -* Good-enough implementation of any of the relavent papers. -* Complete any chores left out during the 1st and 2nd phase. -* Fix the Natural Units Problem in Kerr-Newman time-like geodesics. -* Fix the Natural Units Problem in Hypersurface Module. -* Have all code, tests and documentation in GitHub. - -#### Secondary goals - -* Fix any bugs that might appear regarding visualization, symbolic module and so forth. -* Review pull requests from other einsteinpy contributors, including the mentor. -* Give a talk about the work at some Python event. -* EinsteinPy is nothing without its community. Therefore, getting integrated deeply within the community and oversee future development of EinsteinPy. diff --git a/_projects/2020/radis/radis_atmosphere_calculation_interface.md b/_projects/2020/radis/radis_atmosphere_calculation_interface.md deleted file mode 100644 index d1235e1c..00000000 --- a/_projects/2020/radis/radis_atmosphere_calculation_interface.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -name: RADIS Atmosphere Calculation Interface -desc: Adapt a spectroscopy open-source code to characterize exoplanet atmospheres. -requirements: - - Basic notions of spectroscopy -difficulty: easy -mentors: -# GitHub handles - - erwanp - - minouHub - - dcmvdbekerom -initiatives: - - GSOC -tags: -# Different technologies needed - - python - - CUDA -collaborating_projects: - - radis -issues: -# Related issues (if any) to this project. - - https://github.com/radis/radis/issues/74 ---- - -#### Description - -The presence and concentration of molecules in exoplanet atmospheres are measured by comparing absorption and emission spectra to synthetic spectra. However, under high-temperature conditions, the synthetic spectra contain dozens of millions of lines, which require long computational times . - -The RADIS code was recently developed for the characterization of plasmas and flames. It uses a new approach to quickly calculate high-temperature infrared spectra. New developments are in progress (see our [other project](https://openastronomy.org/gsoc/gsoc2020/#/projects?project=accelerate_synthetic_spectra_calculations) on further accelerating the code), but it is already one of the fastest spectral codes in the world. This performance would be beneficial for exoplanet characterization, and this is the goal of this project: adapt the RADIS code to the calculation of exoplanet atmospheres! - - -#### Milestones - -##### Coding starts - -* Engage with the community and understand the motivation of spectroscopy users -* Training on emission & absorption spectroscopy -* Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) -* Get used with RADIS architecture: review the interface change to calculate multiple molecules at the same time ([#74](https://github.com/radis/radis/pull/74#issuecomment-585773087)) - - -##### 1st evaluation - -* Indirect integration of databases from the Exoplanet atmosphere community (ExoMol), using a converter to the HITRAN format supported by RADIS -* 1st calculation of an atmosphere line-of-sight spectrum with Python hardcoded inputs - -##### 2nd evaluation - -* Direct integration of ExoMol, and memory optimization -* Calculation of atmosphere with standard atmosphere input files (mole fractions, temperature profile, pressure profile) - -##### Final - -* Write an iPython notebook to document the atmosphere module on [radis-examples](https://github.com/radis/radis-examples) -* Have all code, tests and documentation in GitHub. - -#### Secondary goals - -* Document architecture and developer guide when facing unclear points that may appear. -* Review pull requests from other RADIS contributors -* Optimized calculation of atmospheres in optically thin configurations (merge results with project [Accelerate Synthetic Spectra Calculations](https://openastronomy.org/gsoc/gsoc2020/#/projects?project=accelerate_synthetic_spectra_calculations) ) - ) \ No newline at end of file diff --git a/_projects/2021/.gitkeep b/_projects/2021/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2021/astropy/astropyCDS.md b/_projects/2021/astropy/astropyCDS.md deleted file mode 100644 index 2b63ce5d..00000000 --- a/_projects/2021/astropy/astropyCDS.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -name: Add a CDS-ASCII writer to astropy -desc: Allow writing an astropy Table to CDS format -requirements: -# Student requirements: - - Python - - Some familiarity with ASCII files is preferred -difficulty: low -issues: -# Related issues (if any) to this project. - - https://github.com/astropy/astropy/issues/11257 - - https://github.com/astropy/astropy/issues/11239 - - https://github.com/astropy/astropy/issues/9291 -mentors: -# GitHub handles - - hamogu - - aaryapatil -initiatives: - - GSOC -tags: -# Different technologies needed - - python - - astropy core -collaborating_projects: -# suborganisation(s) to which this project belongs. - - astropy ---- - -#### Description - -Astropy is a core python package for astronomy that provides several modules for the analysis of observational data. A common problem is storing and retrieving tabular data in standard formats which include metadata to fully describe the contents of a table. One such ASCII format is CDS (http://vizier.u-strasbg.fr/doc/catstd.htx) that is used for publishing catalogues accompanying papers to astronomical databases like Vizier. Astropy has the capability of reading a CDS file to an astropy Table but not writing a Table to CDS. In this project, the student will create a CDS writer in astropy.io.ascii. A python module from CDS (https://github.com/cds-astro/cds.pyreadme/) uses astropy to write CDS files, and the astropy writer can be based on that. - -#### Milestones (if any) - -##### Coding starts - -* Understand the CDS format, and write an example astropy Table to this format using python -* Get familiar with the astropy.io.ascii framework - -##### 1st evaluation - -* Add the writer to astropy.io.ascii (PR open and tests pass) -* Add documentation for the writer - -##### Final - -* Finish testing and documentation -* Fix any bugs (if found or reported) diff --git a/_projects/2022/.gitkeep b/_projects/2022/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2022/astropy/.gitkeep b/_projects/2022/astropy/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2022/gnuastro/.gitkeep b/_projects/2022/gnuastro/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2022/juliaastro/.gitkeep b/_projects/2022/juliaastro/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2022/radis/.gitkeep b/_projects/2022/radis/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2022/radis/performance_tweaks.md b/_projects/2022/radis/performance_tweaks.md deleted file mode 100644 index 3fb7ada3..00000000 --- a/_projects/2022/radis/performance_tweaks.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -name: Performance Tweaks for RADIS -desc: Reduce Memory usage and improve performance in RADIS to be able to compute terabyte-scale databases -# add a short one line description of your project -requirements: -# Student requirements: - - Knowledge of Pandas or other DataFrame libraries - - Prior working knowledge with big data handling databases like Vaex -difficulty: medium -issues: -# Related issues (if any) to this project. - - https://github.com/radis/radis/issues/118 - - https://github.com/radis/radis/issues/176 -mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - gagan-aryan - - anandxkumar - - erwanp -initiatives: - - GSOC -project_size: - - 175 h -tags: -# Different technologies needed - - Python - - Vaex - - Pandas - - Git -collaborating_projects: -# suborganisation(s) to which this project belongs. - - radis ---- - - -#### Description - -The RADIS code was developed to characterize the radiation of plasmas, flames and atmospheres. It calculates high-temperature infrared spectra from databases of tens of millions of lines, with a new algorithm that already makes it one of the fastest line-by-line spectral codes available. - -However, although the algorithm is very CPU/GPU efficient, the RADIS code is still memory-hungry. The first goal of the current project is to reduce the memory usage of current calculations. Then, it is to replace the current core with libraries better suited to process larger-than-memory-data, which would make it possible to compute spectral databases of up to billions of lines (hundred of GB or terabyte-scale). - - -#### Milestones - -##### Coding starts - -* Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) - -* Training on emission & absorption spectroscopy - -* Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) - -##### 1st Evaluation - -* Work on the existing [memory bottlenecks](https://github.com/radis/radis/issues/118) - -* Work on [crunching datatypes](https://github.com/radis/radis-benchmark/pull/11) of various columns to optimise dataframe memory usage - -* Setup [memory-performance benchmark](https://github.com/radis/radis-benchmark/tree/master/manual_benchmarks) to track the changes - -* Automatically [cache non equilibrium parameters](https://github.com/radis/radis/issues/176) to line database cache - -* Merge the changes - - -##### Final evaluation - -* Write the Proof-Of-Concept to do out of the core calculations i.e., use Vaex for computations instead of pandas. - -* Merge the idea of the Proof-Of-Concept to the codebase. - -* Add [automatic linestrength cutoff](https://github.com/radis/radis/issues/268) - -* Add [.h5 loading benchmark](https://github.com/radis/radis-benchmark/issues/4) - -* Have all code, tests and documentation in GitHub diff --git a/_projects/2022/stingray/.gitkeep b/_projects/2022/stingray/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2022/stingray/type_hints_stingray.md b/_projects/2022/stingray/type_hints_stingray.md deleted file mode 100644 index ed81337d..00000000 --- a/_projects/2022/stingray/type_hints_stingray.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -name: Type hints in Stingray -desc: Using type hints throughout the Stingray library -# add a short one line description of your project -requirements: -# Student requirements: - - Knowledge of Python -difficulty: easy -issues: -# Related issues (if any) to this project. - - https://github.com/StingraySoftware/stingray/issues/544 -mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - matteobachetti - - dhuppenkothen -initiatives: -# The programme under this project wish to run. - - GSOC -project_size: - - 175 h -tags: -# Different technologies needed - - python -collaborating_projects: -# suborganisation(s) to which this project belongs. - - stingray ---- -Implementing type hints in the Stingray library - -#### Description - -Despite being and remaining a dynamically-typed language, Python has -now a [working infrastructure for type hints](https://www.python.org/dev/peps/pep-0484/). -For a data analysis library, type hinting can be very useful to avoid explicit testing -for data types and to facilitate debugging. - - -#### Milestones (if any) - -##### Coding starts - -* Take confidence with the Stingray infrastructure. -* Start implementing type hints in the core modules of Stingray - -##### 1st evaluation - -* Create tests to enforce type checking in selected methods -* Extend the type hints infrastructure to most of the code base - -##### Final evaluation - -* Finish up, polish, and document properly diff --git a/_projects/2022/sunpy/.gitkeep b/_projects/2022/sunpy/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2023/.gitkeep b/_projects/2023/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2023/radis/out_of_core_calculations.md b/_projects/2023/radis/out_of_core_calculations.md deleted file mode 100644 index d7eb4916..00000000 --- a/_projects/2023/radis/out_of_core_calculations.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -name: Out-of-core calculations to reduce memory usage -desc: The project aims at reducing RADIS memory usage, and make it possible to compute very-large spectral databases of tens of gigabytes that do not fit in RAM memory. - -# add a short one line description of your project -requirements: -# Student requirements: - - Knowledge of Pandas or other DataFrame libraries - - Prior working knowledge with big data handling databases like Vaex -difficulty: medium -issues: - -mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - minouHub - - anandxkumar - - erwanp -initiatives: - - GSOC -project_size: - - 350 h -tags: -# Different technologies needed - - Python - - Vaex - - Pandas - - Git -collaborating_projects: -# suborganisation(s) to which this project belongs. - - radis ---- - - -#### Description - -The RADIS code was developed for the characterization of plasmas, flames and atmospheres. High-temperature spectral calculations require to resolve the shape of tens of millions of lines, which is the usual performance bottleneck. RADIS implements a new algorithm to compute these lineshapes, and is already one of the fastest line-by-line spectral codes available. It can also compute many different types of spectra (absorption / emission / equilibrium / nonequilibrium). - -However, although the algorithm is very CPU/GPU efficient, the RADIS code is still memory-hungry. Databases are currently loaded in RADIS using the VAEX package, but the operations to calculate the spectra are performed using the PANDAS library. VAEX is a similar table management tool than PANDAS but uses memory mapping, a zero memory copy policy, and lazy computations for the best performance. **The main goal of the current project is to refactor RADIS so that dataframes are only manipulated via the VAEX format**. Potentially, this work would make it possible to compute spectral databases of up to billions of lines (hundred of GB or terabyte-scale databases). - - -#### Milestones - -##### Coding starts - -* Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) - -* Training on emission & absorption spectroscopy - -* Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) - -* Get familiar with RADIS architecture - -##### 1st Evaluation - -* Create a standalone spectroscopy code working with Out-of-core Vaex calculations (with minimum features: absorption code under equilibrium) - -##### 2nd Evaluation - -* Create a standalone spectroscopy code working with Out-of-core Vaex calculations (with minimum features: absorption code under equilibrium) - -* Implement VAEX out-of-core calculations directly in a single RADIS calculation path (e.g. equilibrium, one lineshape calculation routine), replacing PANDAS - -* Implement tests to verify that the implementation of VAEX will not have different output than the current PANDAS implementation - -##### Final evaluation - -* Implement VAEX out-of-core calculations directly in all othe other RADIS calculation paths (nonequilibrium, all lineshape calculations routine), replacing PANDAS - -* Have all code, tests, and documentation in GitHub. - - -#### Secondary Goals - -* Document architecture and developer guide when facing unclear points that may appear. - -* Review pull requests from other RADIS contributors, especially parallel GSoC mentee - -* List and explore consequences for GPU calculations already implemented in RADIS - - diff --git a/_projects/2023/sunpy/.gitkeep b/_projects/2023/sunpy/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2024/.gitkeep b/_projects/2024/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2024/sunpy/.gitkeep b/_projects/2024/sunpy/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2025/.gitkeep b/_projects/2025/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2025/sunpy/.gitkeep b/_projects/2025/sunpy/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2026/.gitkeep b/_projects/2026/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2026/juliaastro/.gitkeep b/_projects/2026/juliaastro/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2026/radis/.gitkeep b/_projects/2026/radis/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2026/stingray/.gitkeep b/_projects/2026/stingray/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/2026/sunpy/.gitkeep b/_projects/2026/sunpy/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/_projects/README.md b/_projects/README.md deleted file mode 100644 index 63f80639..00000000 --- a/_projects/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# How to add project ideas for OpenAstronomy - -This short tutorial will guide you on how to add a GSoC project idea in the -OpenAstronomy website. - -In case you face any issues with this tutorial do contact your org admins via email, -thorough the [mailing list](https://groups.google.com/forum/#!forum/openastronomy). - -*tl;dr: are you an expert?* Fork the repo and modify -the [template file](./_template.md) according to your idea, save it under -`_projects/YYYY/sub-org/` with a meaningful filename and open a pull-request. - -## What do I need for my project idea? - -Everything you need is a title and description of the project idea, a set of requirements -for potential contributors (_e.g._, proficiency with `astropy.tables` and `astropy.units`), -and a list of potential mentors. In addition, please link any related issues or tickets -to the project idea, if any. Lastly, make sure to indicate the level of difficulty of -the project. - -In case your project idea already has specific milestones, please add them -so as to make contributors aware when they start writing their applications. -If the project milestones are open ended and you would like to hear input from -other members of the community, that is fine too! - -## Required format - -Given that you have the above items, all you need now is to put them in a plain text file following -the [template file](./_template.md) (you may click on `Code` to see how it looks). - -The file is composed in two parts (separated by a `---`). -Change the text in the template keeping special care of the structure of the `yaml` -file and the headings on the markdown part (_e.g._, the top level starts with a 4 level title: `####`). - -## How to include my project idea on the website? - -If you are familiar with git/GitHub: for this repo and add your project idea -to the directory of your sub-organisation. Otherwise, we've got you covered! -Contact us via [email](openastronomy.organization@gmail.com) and attach the above file. diff --git a/_sass/_base.scss b/_sass/_base.scss deleted file mode 100644 index 24ff3dd2..00000000 --- a/_sass/_base.scss +++ /dev/null @@ -1,227 +0,0 @@ -/** - * Reset some basic elements - */ -body, h1, h2, h3, h4, h5, h6, -p, blockquote, pre, hr, -dl, dd, ol, ul, figure { - margin: 0; - padding: 0; -} - - -html { - height:100%; -} - -/** - * Basic styling - */ -body { - font-family: $base-font-family; - font-size: $base-font-size; - font-weight: 400; - color: $text-color; - background-color: $background-color; - -webkit-text-size-adjust: 100%; - height:100%; - - @include media-query($on-laptop) { - background-size: 200%; - } - - @include media-query($on-palm) { - background-size: 300%; - } -} - - - -/** - * Set `margin-bottom` to maintain vertical rhythm - */ -h1, h2, h3, h4, h5, h6, -p, blockquote, pre, -ul, ol, dl, figure, -%vertical-rhythm { - margin-bottom: $spacing-unit / 2; -} - - - -/** - * Images - */ -img { - max-width: 100%; - vertical-align: middle; -} - - - -/** - * Figures - */ -figure > img { - display: block; -} - -figcaption { - font-size: $small-font-size; -} - - - -/** - * Lists - */ -ul, ol { - margin-left: $spacing-unit; -} - -li { - > ul, - > ol { - margin-bottom: 0; - } -} - - - -/** - * Headings - */ -h1, h2, h3, h4, h5, h6 { - font-weight: 300; -} - - - -/** - * Links - */ -a { - color: $brand-color; - text-decoration: none; - - &:visited { - color: darken($brand-color, 15%); - } - - &:hover { - color: $text-color; - text-decoration: underline; - } -} - - - -/** - * Blockquotes - */ -blockquote { - color: $grey-color; - border-left: 4px solid $grey-color-light; - padding-left: $spacing-unit / 2; - font-size: 18px; - letter-spacing: -1px; - font-style: italic; - - > :last-child { - margin-bottom: 0; - } -} - - - -/** - * Code formatting - */ -pre, -code { - font-size: 15px; - border: 1px solid $grey-color-light; - border-radius: 3px; - background-color: #eef; -} - -code { - padding: 1px 5px; -} - -pre { - padding: 8px 12px; - overflow-x: scroll; - - > code { - border: 0; - padding-right: 0; - padding-left: 0; - } -} - - - -/** - * Wrapper - */ -.wrapper { - height: 100%; - max-width: -webkit-calc(1100px - (#{$spacing-unit} * 2)); - max-width: calc(1100px - (#{$spacing-unit} * 2)); - margin-right: auto; - margin-left: auto; - padding-right: $spacing-unit; - padding-left: $spacing-unit; - @extend %clearfix; - - @include media-query($on-laptop) { - max-width: -webkit-calc(1100px - (#{$spacing-unit})); - max-width: calc(1100px - (#{$spacing-unit})); - padding-right: $spacing-unit / 2; - padding-left: $spacing-unit / 2; - } -} - -.page-content > .wrapper { - padding-top: 10px; -} - - - -/** - * Clearfix - */ -%clearfix { - - &:after { - content: ""; - display: table; - clear: both; - } -} - - - -/** - * Icons - */ -.icon { - - > svg { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: middle; - - path { - fill: $grey-color; - } - } -} - - -iframe { - height: 100%; - width: 100%; - border: none; -} diff --git a/_sass/_layout.scss b/_sass/_layout.scss deleted file mode 100644 index 684b8cde..00000000 --- a/_sass/_layout.scss +++ /dev/null @@ -1,343 +0,0 @@ -/** - * Site header - */ -.site-header { - min-height: 80px; - height: 80px; - - // Positioning context for the mobile navigation icon - position: relative; - z-index: 100; -} - -.site-title { - font-size: 26px; - line-height: 36px; - letter-spacing: -1px; - margin-bottom: -1px; - float: left; - - &, - &:visited { - color: $grey-color-dark; - } -} - -.site-nav { - float: right; - line-height: 56px; - - .menu-icon { - display: none; - } - - .page-link { - color: $text-color; - line-height: $base-line-height; - - // Gaps between nav items, but not on the first one - &:not(:first-child) { - margin-left: 20px; - } - } - - @include media-query($on-desktop) { - position: absolute; - top: 20px; - right: 30px; - background-color: $menu-color; - border: 1px solid $grey-color-light; - border-radius: 5px; - text-align: right; - - .menu-icon { - display: block; - float: right; - width: 36px; - height: 26px; - line-height: 0; - padding-top: 10px; - text-align: center; - - > svg { - width: 18px; - height: 15px; - - path { - fill: white; - } - } - } - - .trigger { - clear: both; - display: none; - } - - &:hover .trigger { - display: block; - padding-bottom: 5px; - } - - .page-link { - display: block; - padding: 5px 10px; - } - } -} - - - -/** - * Site footer - */ -.site-footer { - border-top: 1px solid $grey-color-light; - padding: $spacing-unit / 2 0; - - @include media-query($on-palm) { - .wrapper { - display: block; /* Ensure all elements stack properly */ - } - - .footer-col { - float: none; - width: 100%; /* Ensure columns stack on mobile */ - } - } -} - -.footer-heading { - font-size: 18px; - margin-bottom: $spacing-unit / 2; -} - -.contact-list, -.social-media-list { - list-style: none; - margin-left: 0; -} - -.footer-col-wrapper { - font-size: 15px; - color: $grey-color; - margin-left: -$spacing-unit / 2; - @extend %clearfix; -} - -.footer-col { - float: left; - margin-bottom: $spacing-unit / 2; - padding-left: $spacing-unit / 2; -} - -.footer-col-1 { - width: -webkit-calc(35% - (#{$spacing-unit} / 2)); - width: calc(35% - (#{$spacing-unit} / 2)); -} - -.footer-col-2 { - width: -webkit-calc(20% - (#{$spacing-unit} / 2)); - width: calc(20% - (#{$spacing-unit} / 2)); -} - -.footer-col-3 { - width: -webkit-calc(45% - (#{$spacing-unit} / 2)); - width: calc(45% - (#{$spacing-unit} / 2)); -} - -@include media-query($on-laptop) { - .footer-col-1, - .footer-col-2 { - width: -webkit-calc(50% - (#{$spacing-unit} / 2)); - width: calc(50% - (#{$spacing-unit} / 2)); - } - - .footer-col-3 { - width: -webkit-calc(100% - (#{$spacing-unit} / 2)); - width: calc(100% - (#{$spacing-unit} / 2)); - } -} - -@include media-query($on-palm) { - .footer-col { - float: none; - width: -webkit-calc(100% - (#{$spacing-unit} / 2)); - width: calc(100% - (#{$spacing-unit} / 2)); - } -} - - -.fixed-wrap { - position: static; - top: auto; - left: auto; - bottom: auto; - width: 100%; -} - -/** - * Page content - */ -.page-content { - height: 100%; - overflow-y:auto; -} - -.page-heading { - font-size: 20px; -} - -.post-list { - margin-left: 0; - list-style: none; - - > li { - margin-bottom: $spacing-unit; - } -} - -.post-meta { - font-size: $small-font-size; - color: $grey-color; -} - -.post-link { - display: block; - font-size: 24px; -} - - - -/** - * Posts - */ -.post-header { - margin-bottom: $spacing-unit; -} - -.post-title { - font-size: 42px; - letter-spacing: -1px; - line-height: 1; - - @include media-query($on-laptop) { - font-size: 36px; - } -} - -.post-content { - margin-bottom: 75px; - - h2 { - font-size: 32px; - - @include media-query($on-laptop) { - font-size: 28px; - } - } - - h3 { - font-size: 26px; - - @include media-query($on-laptop) { - font-size: 22px; - } - } - - h4 { - font-size: 20px; - - @include media-query($on-laptop) { - font-size: 18px; - } - } -} - -// materialize modal stuff - so it works outside #projects (because modal put it out!) -.modal { - @extend .z-depth-4; - - display: none; - position: fixed; - left: 0; - right: 0; - background-color: #fafafa; - padding: 0; - max-height: 70%; - width: 55%; - margin: auto; - overflow-y: auto; - - border-radius: 2px; - will-change: top, opacity; - - h1,h2,h3,h4 { - margin-top: 0; - } - - .modal-content { - padding: 24px; - } - .modal-close { - cursor: pointer; - } - - .modal-footer { - border-radius: 0 0 2px 2px; - background-color: #fafafa; - padding: 4px 6px; - height: 56px; - width: 100%; - text-align: right; - - .btn, .btn-flat { - margin: 6px 0; - } - } -} -.modal-overlay { - position: fixed; - z-index: 999; - top: -25%; - left: 0; - bottom: 0; - right: 0; - height: 125%; - width: 100%; - background: #000; - display: none; - - will-change: opacity; -} - -// Modal with fixed action footer -.modal.modal-fixed-footer { - padding: 0; - height: 70%; - - .modal-content { - position: absolute; - height: calc(100% - 56px); - max-height: 100%; - width: 100%; - overflow-y: auto; - } - - .modal-footer { - border-top: 1px solid rgba(0,0,0,.1); - position: absolute; - bottom: 0; - } -} - -// Modal Bottom Sheet Style -.modal.bottom-sheet { - top: auto; - bottom: -100%; - margin: 0; - width: 100%; - max-height: 45%; - border-radius: 0; - will-change: bottom, opacity; -} diff --git a/_sass/_syntax-highlighting.scss b/_sass/_syntax-highlighting.scss deleted file mode 100644 index e36627da..00000000 --- a/_sass/_syntax-highlighting.scss +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Syntax highlighting styles - */ -.highlight { - background: #fff; - @extend %vertical-rhythm; - - .c { color: #998; font-style: italic } // Comment - .err { color: #a61717; background-color: #e3d2d2 } // Error - .k { font-weight: bold } // Keyword - .o { font-weight: bold } // Operator - .cm { color: #998; font-style: italic } // Comment.Multiline - .cp { color: #999; font-weight: bold } // Comment.Preproc - .c1 { color: #998; font-style: italic } // Comment.Single - .cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special - .gd { color: #000; background-color: #fdd } // Generic.Deleted - .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific - .ge { font-style: italic } // Generic.Emph - .gr { color: #a00 } // Generic.Error - .gh { color: #999 } // Generic.Heading - .gi { color: #000; background-color: #dfd } // Generic.Inserted - .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific - .go { color: #888 } // Generic.Output - .gp { color: #555 } // Generic.Prompt - .gs { font-weight: bold } // Generic.Strong - .gu { color: #aaa } // Generic.Subheading - .gt { color: #a00 } // Generic.Traceback - .kc { font-weight: bold } // Keyword.Constant - .kd { font-weight: bold } // Keyword.Declaration - .kp { font-weight: bold } // Keyword.Pseudo - .kr { font-weight: bold } // Keyword.Reserved - .kt { color: #458; font-weight: bold } // Keyword.Type - .m { color: #099 } // Literal.Number - .s { color: #d14 } // Literal.String - .na { color: #008080 } // Name.Attribute - .nb { color: #0086B3 } // Name.Builtin - .nc { color: #458; font-weight: bold } // Name.Class - .no { color: #008080 } // Name.Constant - .ni { color: #800080 } // Name.Entity - .ne { color: #900; font-weight: bold } // Name.Exception - .nf { color: #900; font-weight: bold } // Name.Function - .nn { color: #555 } // Name.Namespace - .nt { color: #000080 } // Name.Tag - .nv { color: #008080 } // Name.Variable - .ow { font-weight: bold } // Operator.Word - .w { color: #bbb } // Text.Whitespace - .mf { color: #099 } // Literal.Number.Float - .mh { color: #099 } // Literal.Number.Hex - .mi { color: #099 } // Literal.Number.Integer - .mo { color: #099 } // Literal.Number.Oct - .sb { color: #d14 } // Literal.String.Backtick - .sc { color: #d14 } // Literal.String.Char - .sd { color: #d14 } // Literal.String.Doc - .s2 { color: #d14 } // Literal.String.Double - .se { color: #d14 } // Literal.String.Escape - .sh { color: #d14 } // Literal.String.Heredoc - .si { color: #d14 } // Literal.String.Interpol - .sx { color: #d14 } // Literal.String.Other - .sr { color: #009926 } // Literal.String.Regex - .s1 { color: #d14 } // Literal.String.Single - .ss { color: #990073 } // Literal.String.Symbol - .bp { color: #999 } // Name.Builtin.Pseudo - .vc { color: #008080 } // Name.Variable.Class - .vg { color: #008080 } // Name.Variable.Global - .vi { color: #008080 } // Name.Variable.Instance - .il { color: #099 } // Literal.Number.Integer.Long -} diff --git a/_sass/bootstrap-sass-3.3.7 b/_sass/bootstrap-sass-3.3.7 deleted file mode 160000 index 5d6b2ebb..00000000 --- a/_sass/bootstrap-sass-3.3.7 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5d6b2ebba0c2a5885ce2f0e01e9218db3d3b5e47 diff --git a/_sass/materialize-src/LICENSE b/_sass/materialize-src/LICENSE deleted file mode 100644 index 30b9ff6d..00000000 --- a/_sass/materialize-src/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2017 Materialize - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/_sass/materialize-src/README.md b/_sass/materialize-src/README.md deleted file mode 100644 index b1e31c80..00000000 --- a/_sass/materialize-src/README.md +++ /dev/null @@ -1,90 +0,0 @@ -

- - - - -

MaterializeCSS

- -

- Materialize, a CSS Framework based on material design. -
- -- Browse the docs -- -
-
- - Travis CI badge - - - npm version badge - - - CDNJS version badge - - - dependencies Status badge - - - devDependency Status badge - - - Gitter badge - -

- -## Table of Contents -- [Quickstart](#quickstart) -- [Documentation](#documentation) -- [Supported Browsers](#supported-browsers) -- [Changelog](#changelog) -- [Testing](#testing) -- [Contributing](#contributing) -- [Copyright and license](#copyright-and-license) - -## Quickstart: -Read the [getting started guide](http://materializecss.com/getting-started.html) for more information on how to use materialize. - -- [Download the latest release](https://github.com/Dogfalo/materialize/releases/latest) of materialize directly from GitHub. -- Clone the repo: `git clone https://github.com/Dogfalo/materialize.git` -- Include the files via [cdnjs](https://cdnjs.com/libraries/materialize). More [here](http://materializecss.com/getting-started.html). -- Install with [npm](https://www.npmjs.com): `npm install materialize-css` -- Install with [Bower](https://bower.io): `bower install materialize` -- Install with [Atmosphere](https://atmospherejs.com): `meteor add materialize:materialize` - -## Documentation -The documentation can be found at . To run the documentation locally on your machine, you need [Node.js](https://nodejs.org/en/) installed on your computer. - -### Running documentation locally -Run these commands to set up the documentation: - -```bash -git clone https://github.com/Dogfalo/materialize -cd materialize -npm install -``` - -Then run `grunt monitor` to compile the documentation. When it finishes, open a new browser window and navigate to `localhost:8000`. We use [BrowserSync](https://www.browsersync.io/) to display the documentation. - -### Documentation for previous releases -Previous releases and their documentation are available for [download](https://github.com/Dogfalo/materialize/releases). - -## Supported Browsers: -Materialize is compatible with: - -- Chrome 35+ -- Firefox 31+ -- Safari 7+ -- Opera -- Edge -- IE 10+ - -## Changelog -For changelogs, check out [the Releases section of materialize](https://github.com/Dogfalo/materialize/releases) or the [CHANGELOG.md](CHANGELOG.md). - -## Testing -We use Jasmine as our testing framework and we're trying to write a robust test suite for our components. If you want to help, [here's a starting guide on how to write tests in Jasmine](CONTRIBUTING.md#jasmine-testing-guide). - -## Contributing -Check out the [CONTRIBUTING document](CONTRIBUTING.md) in the root of the repository to learn how you can contribute. You can also browse the [help-wanted](https://github.com/Dogfalo/materialize/labels/help-wanted) tag in our issue tracker to find things to do. - -## Copyright and license -Code copyright 2017 Materialize. Code released under the MIT license. diff --git a/_sass/materialize-src/sass/components/_badges.scss b/_sass/materialize-src/sass/components/_badges.scss deleted file mode 100644 index ed8f1857..00000000 --- a/_sass/materialize-src/sass/components/_badges.scss +++ /dev/null @@ -1,47 +0,0 @@ -// Badges -span.badge { - min-width: 3rem; - padding: 0 6px; - margin-left: 14px; - text-align: center; - font-size: 1rem; - line-height: $badge-height; - height: $badge-height; - color: color('grey', 'darken-1'); - float: right; - box-sizing: border-box; - - &.new { - font-weight: 300; - font-size: 0.8rem; - color: #fff; - background-color: $badge-bg-color; - border-radius: 2px; - } - &.new:after { - content: " new"; - } - - &[data-badge-caption]::after { - content: " " attr(data-badge-caption); - } -} -nav ul a span.badge { - display: inline-block; - float: none; - margin-left: 4px; - line-height: $badge-height; - height: $badge-height; - -webkit-font-smoothing: auto; -} - -// Line height centering -.collection-item span.badge { - margin-top: calc(#{$collection-line-height / 2} - #{$badge-height / 2}); -} -.collapsible span.badge { - margin-left: auto; -} -.side-nav span.badge { - margin-top: calc(#{$sidenav-line-height / 2} - #{$badge-height / 2}); -} diff --git a/_sass/materialize-src/sass/components/_buttons.scss b/_sass/materialize-src/sass/components/_buttons.scss deleted file mode 100644 index 42730dd8..00000000 --- a/_sass/materialize-src/sass/components/_buttons.scss +++ /dev/null @@ -1,291 +0,0 @@ -// shared styles -.btn, -.btn-flat { - border: $button-border; - border-radius: $button-radius; - display: inline-block; - height: $button-height; - line-height: $button-height; - padding: $button-padding; - text-transform: uppercase; - vertical-align: middle; - // Gets rid of tap active state - -webkit-tap-highlight-color: transparent; -} - -// Disabled shared style -.btn.disabled, -.btn-floating.disabled, -.btn-large.disabled, -.btn-flat.disabled, -.btn:disabled, -.btn-floating:disabled, -.btn-large:disabled, -.btn-flat:disabled, -.btn[disabled], -.btn-floating[disabled], -.btn-large[disabled], -.btn-flat[disabled] { - pointer-events: none; - background-color: $button-disabled-background !important; - box-shadow: none; - color: $button-disabled-color !important; - cursor: default; - - &:hover { - background-color: $button-disabled-background !important; - color: $button-disabled-color !important; - } -} - -// Shared icon styles -.btn, -.btn-floating, -.btn-large, -.btn-flat { - font-size: $button-font-size; - outline: 0; - - i { - font-size: $button-icon-font-size; - line-height: inherit; - } -} - -// Shared focus button style -.btn, -.btn-floating { - &:focus { - background-color: darken($button-raised-background, 10%); - } -} - -// Raised Button -.btn { - text-decoration: none; - color: $button-raised-color; - background-color: $button-raised-background; - text-align: center; - letter-spacing: .5px; - @extend .z-depth-1; - transition: .2s ease-out; - cursor: pointer; - - &:hover { - background-color: $button-raised-background-hover; - @extend .z-depth-1-half; - } -} - -// Floating button -.btn-floating { - &:hover { - background-color: $button-floating-background-hover; - @extend .z-depth-1-half; - } - - &:before { - border-radius: 0; - } - - &.btn-large { - &.halfway-fab { - bottom: -$button-floating-large-size / 2; - } - - width: $button-floating-large-size; - height: $button-floating-large-size; - i { - line-height: $button-floating-large-size; - } - } - - &.halfway-fab { - &.left { - right: auto; - left: 24px; - } - - position: absolute; - right: 24px; - bottom: -$button-floating-size / 2; - } - - display: inline-block; - color: $button-floating-color; - position: relative; - overflow: hidden; - z-index: 1; - width: $button-floating-size; - height: $button-floating-size; - line-height: $button-floating-size; - padding: 0; - background-color: $button-floating-background; - border-radius: $button-floating-radius; - @extend .z-depth-1; - transition: .3s; - cursor: pointer; - vertical-align: middle; - - i { - width: inherit; - display: inline-block; - text-align: center; - color: $button-floating-color; - font-size: $button-large-icon-font-size; - line-height: $button-floating-size; - } -} - -// button fix -button.btn-floating { - border: $button-border; -} - -// Fixed Action Button -.fixed-action-btn { - &.active { - ul { - visibility: visible; - } - } - - &.horizontal { - padding: 0 0 0 15px; - - ul { - text-align: right; - right: 64px; - top: 50%; - transform: translateY(-50%); - height: 100%; - left: auto; - width: 500px; /*width 100% only goes to width of button container */ - - li { - display: inline-block; - margin: 15px 15px 0 0; - } - } - } - - &.toolbar { - &.active { - & > a i { - opacity: 0; - } - } - - padding: 0; - height: $button-floating-large-size; - - ul { - display: flex; - top: 0; - bottom: 0; - z-index: 1; - - li { - flex: 1; - display: inline-block; - margin: 0; - height: 100%; - transition: none; - - a { - display: block; - overflow: hidden; - position: relative; - width: 100%; - height: 100%; - background-color: transparent; - box-shadow: none; - color: #fff; - line-height: $button-floating-large-size; - z-index: 1; - - i { - line-height: inherit; - } - } - } - } - } - - position: fixed; - right: 23px; - bottom: 23px; - padding-top: 15px; - margin-bottom: 0; - z-index: 997; - - ul { - left: 0; - right: 0; - text-align: center; - position: absolute; - bottom: 64px; - margin: 0; - visibility: hidden; - - li { - margin-bottom: 15px; - } - - a.btn-floating { - opacity: 0; - } - } - - .fab-backdrop { - position: absolute; - top: 0; - left: 0; - z-index: -1; - width: $button-floating-size; - height: $button-floating-size; - background-color: $button-floating-background; - border-radius: $button-floating-radius; - transform: scale(0); - } -} - -// Flat button -.btn-flat { - box-shadow: none; - background-color: transparent; - color: $button-flat-color; - cursor: pointer; - transition: background-color .2s; - - &:focus, - &:hover { - box-shadow: none; - } - - &:focus { - background-color: rgba(0,0,0,.1); - } - - &.disabled { - background-color: transparent !important; - color: $button-flat-disabled-color !important; - cursor: default; - } -} - -// Large button -.btn-large { - @extend .btn; - height: $button-large-height; - line-height: $button-large-height; - - i { - font-size: $button-large-icon-font-size; - } -} - -// Block button -.btn-block { - display: block; -} diff --git a/_sass/materialize-src/sass/components/_cards.scss b/_sass/materialize-src/sass/components/_cards.scss deleted file mode 100644 index c9b02163..00000000 --- a/_sass/materialize-src/sass/components/_cards.scss +++ /dev/null @@ -1,196 +0,0 @@ - - -.card-panel { - transition: box-shadow .25s; - padding: $card-padding; - margin: $element-top-margin 0 $element-bottom-margin 0; - border-radius: 2px; - @extend .z-depth-1; - background-color: $card-bg-color; -} - -.card { - position: relative; - margin: $element-top-margin 0 $element-bottom-margin 0; - background-color: $card-bg-color; - transition: box-shadow .25s; - border-radius: 2px; - @extend .z-depth-1; - - - .card-title { - font-size: 24px; - font-weight: 300; - &.activator { - cursor: pointer; - } - } - - // Card Sizes - &.small, &.medium, &.large { - position: relative; - - .card-image { - max-height: 60%; - overflow: hidden; - } - .card-image + .card-content { - max-height: 40%; - } - .card-content { - max-height: 100%; - overflow: hidden; - } - .card-action { - position: absolute; - bottom: 0; - left: 0; - right: 0; - } - } - - &.small { - height: 300px; - } - - &.medium { - height: 400px; - } - - &.large { - height: 500px; - } - - // Horizontal Cards - &.horizontal { - &.small, &.medium, &.large { - .card-image { - height: 100%; - max-height: none; - overflow: visible; - - img { - height: 100%; - } - } - } - - display: flex; - - .card-image { - max-width: 50%; - img { - border-radius: 2px 0 0 2px; - max-width: 100%; - width: auto; - } - } - - .card-stacked { - display: flex; - flex-direction: column; - flex: 1; - position: relative; - - .card-content { - flex-grow: 1; - } - } - } - - // Sticky Action Section - &.sticky-action { - .card-action { - z-index: 2; - } - - .card-reveal { - z-index: 1; - padding-bottom: 64px; - } - } - - - - - .card-image { - position: relative; - - // Image background for content - img { - display: block; - border-radius: 2px 2px 0 0; - position: relative; - left: 0; - right: 0; - top: 0; - bottom: 0; - width: 100%; - } - - .card-title { - color: $card-bg-color; - position: absolute; - bottom: 0; - left: 0; - max-width: 100%; - padding: $card-padding; - } - } - - .card-content { - padding: $card-padding; - border-radius: 0 0 2px 2px; - - p { - margin: 0; - color: inherit; - } - .card-title { - display: block; - line-height: 32px; - margin-bottom: 8px; - - i { - line-height: 32px; - } - } - } - - .card-action { - &:last-child { - border-radius: 0 0 2px 2px; - } - position: relative; - background-color: inherit; - border-top: 1px solid rgba(160,160,160,.2); - padding: 16px $card-padding; - - a:not(.btn):not(.btn-large):not(.btn-floating) { - color: $card-link-color; - margin-right: $card-padding; - transition: color .3s ease; - text-transform: uppercase; - - &:hover { color: $card-link-color-light; } - } - } - - .card-reveal { - padding: $card-padding; - position: absolute; - background-color: $card-bg-color; - width: 100%; - overflow-y: auto; - left: 0; - top: 100%; - height: 100%; - z-index: 3; - display: none; - - .card-title { - cursor: pointer; - display: block; - } - } -} diff --git a/_sass/materialize-src/sass/components/_carousel.scss b/_sass/materialize-src/sass/components/_carousel.scss deleted file mode 100644 index fccdc826..00000000 --- a/_sass/materialize-src/sass/components/_carousel.scss +++ /dev/null @@ -1,90 +0,0 @@ -.carousel { - &.carousel-slider { - top: 0; - left: 0; - - .carousel-fixed-item { - &.with-indicators { - bottom: 68px; - } - - position: absolute; - left: 0; - right: 0; - bottom: 20px; - z-index: 1; - } - - .carousel-item { - width: 100%; - height: 100%; - min-height: $carousel-height; - position: absolute; - top: 0; - left: 0; - - h2 { - font-size: 24px; - font-weight: 500; - line-height: 32px; - } - - p { - font-size: 15px; - } - } - } - - overflow: hidden; - position: relative; - width: 100%; - height: $carousel-height; - perspective: 500px; - transform-style: preserve-3d; - transform-origin: 0% 50%; - - .carousel-item { - display: none; - width: $carousel-item-width; - height: $carousel-item-height; - position: absolute; - top: 0; - left: 0; - - & > img { - width: 100%; - } - } - - .indicators { - position: absolute; - text-align: center; - left: 0; - right: 0; - bottom: 0; - margin: 0; - - .indicator-item { - &.active { - background-color: #fff; - } - - display: inline-block; - position: relative; - cursor: pointer; - height: 8px; - width: 8px; - margin: 24px 4px; - background-color: rgba(255,255,255,.5); - - transition: background-color .3s; - border-radius: 50%; - } - } - - // Materialbox compatibility - &.scrolling .carousel-item .materialboxed, - .carousel-item:not(.active) .materialboxed { - pointer-events: none; - } -} diff --git a/_sass/materialize-src/sass/components/_chips.scss b/_sass/materialize-src/sass/components/_chips.scss deleted file mode 100644 index c291578d..00000000 --- a/_sass/materialize-src/sass/components/_chips.scss +++ /dev/null @@ -1,89 +0,0 @@ -.chip { - display: inline-block; - height: 32px; - font-size: 13px; - font-weight: 500; - color: rgba(0,0,0,.6); - line-height: 32px; - padding: 0 12px; - border-radius: 16px; - background-color: $chip-bg-color; - margin-bottom: $chip-margin; - margin-right: $chip-margin; - - > img { - float: left; - margin: 0 8px 0 -12px; - height: 32px; - width: 32px; - border-radius: 50%; - } - - .close { - cursor: pointer; - float: right; - font-size: 16px; - line-height: 32px; - padding-left: 8px; - } -} - -.chips { - border: none; - border-bottom: 1px solid $chip-border-color; - box-shadow: none; - margin: $input-margin; - min-height: 45px; - outline: none; - transition: all .3s; - - &.focus { - border-bottom: 1px solid $chip-selected-color; - box-shadow: 0 1px 0 0 $chip-selected-color; - } - - &:hover { - cursor: text; - } - - .chip.selected { - background-color: $chip-selected-color; - color: #fff; - } - - .input { - background: none; - border: 0; - color: rgba(0,0,0,.6); - display: inline-block; - font-size: $input-font-size; - height: $input-height; - line-height: 32px; - outline: 0; - margin: 0; - padding: 0 !important; - width: 120px !important; - } - - .input:focus { - border: 0 !important; - box-shadow: none !important; - } - - // Autocomplete - .autocomplete-content { - margin-top: 0; - margin-bottom: 0; - } -} - -// Form prefix -.prefix ~ .chips { - margin-left: 3rem; - width: 92%; - width: calc(100% - 3rem); -} -.chips:empty ~ label { - font-size: 0.8rem; - transform: translateY(-140%); -} diff --git a/_sass/materialize-src/sass/components/_collapsible.scss b/_sass/materialize-src/sass/components/_collapsible.scss deleted file mode 100644 index ef59d968..00000000 --- a/_sass/materialize-src/sass/components/_collapsible.scss +++ /dev/null @@ -1,84 +0,0 @@ -.collapsible { - border-top: 1px solid $collapsible-border-color; - border-right: 1px solid $collapsible-border-color; - border-left: 1px solid $collapsible-border-color; - margin: $element-top-margin 0 $element-bottom-margin 0; - @extend .z-depth-1; -} - -.collapsible-header { - display: flex; - cursor: pointer; - -webkit-tap-highlight-color: transparent; - line-height: 1.5; - padding: 1rem; - background-color: $collapsible-header-color; - border-bottom: 1px solid $collapsible-border-color; - - i { - width: 2rem; - font-size: 1.6rem; - display: inline-block; - text-align: center; - margin-right: 1rem; - } -} - -.collapsible-body { - display: none; - border-bottom: 1px solid $collapsible-border-color; - box-sizing: border-box; - padding: 2rem; -} - -// sideNav collapsible styling -.side-nav, -.side-nav.fixed { - - .collapsible { - border: none; - box-shadow: none; - - li { padding: 0; } - } - - .collapsible-header { - background-color: transparent; - border: none; - line-height: inherit; - height: inherit; - padding: 0 $sidenav-padding; - - &:hover { background-color: rgba(0,0,0,.05); } - i { line-height: inherit; } - } - - .collapsible-body { - border: 0; - background-color: $collapsible-header-color; - - li a { - padding: 0 (7.5px + $sidenav-padding) - 0 (15px + $sidenav-padding); - } - } - -} - -// Popout Collapsible - -.collapsible.popout { - border: none; - box-shadow: none; - > li { - box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); - // transform: scaleX(.92); - margin: 0 24px; - transition: margin .35s cubic-bezier(0.250, 0.460, 0.450, 0.940); - } - > li.active { - box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); - margin: 16px 0; - // transform: scaleX(1); - } -} diff --git a/_sass/materialize-src/sass/components/_color.scss b/_sass/materialize-src/sass/components/_color.scss deleted file mode 100644 index bf4b1237..00000000 --- a/_sass/materialize-src/sass/components/_color.scss +++ /dev/null @@ -1,412 +0,0 @@ -// Utility Color Classes - -//.success { -// -//} - -// Google Color Palette defined: http://www.google.com/design/spec/style/color.html - - -$materialize-red: ( - "base": #e51c23, - "lighten-5": #fdeaeb, - "lighten-4": #f8c1c3, - "lighten-3": #f3989b, - "lighten-2": #ee6e73, - "lighten-1": #ea454b, - "darken-1": #d0181e, - "darken-2": #b9151b, - "darken-3": #a21318, - "darken-4": #8b1014, -); - -$red: ( - "base": #F44336, - "lighten-5": #FFEBEE, - "lighten-4": #FFCDD2, - "lighten-3": #EF9A9A, - "lighten-2": #E57373, - "lighten-1": #EF5350, - "darken-1": #E53935, - "darken-2": #D32F2F, - "darken-3": #C62828, - "darken-4": #B71C1C, - "accent-1": #FF8A80, - "accent-2": #FF5252, - "accent-3": #FF1744, - "accent-4": #D50000 -); - -$pink: ( - "base": #e91e63, - "lighten-5": #fce4ec, - "lighten-4": #f8bbd0, - "lighten-3": #f48fb1, - "lighten-2": #f06292, - "lighten-1": #ec407a, - "darken-1": #d81b60, - "darken-2": #c2185b, - "darken-3": #ad1457, - "darken-4": #880e4f, - "accent-1": #ff80ab, - "accent-2": #ff4081, - "accent-3": #f50057, - "accent-4": #c51162 -); - -$purple: ( - "base": #9c27b0, - "lighten-5": #f3e5f5, - "lighten-4": #e1bee7, - "lighten-3": #ce93d8, - "lighten-2": #ba68c8, - "lighten-1": #ab47bc, - "darken-1": #8e24aa, - "darken-2": #7b1fa2, - "darken-3": #6a1b9a, - "darken-4": #4a148c, - "accent-1": #ea80fc, - "accent-2": #e040fb, - "accent-3": #d500f9, - "accent-4": #aa00ff -); - -$deep-purple: ( - "base": #673ab7, - "lighten-5": #ede7f6, - "lighten-4": #d1c4e9, - "lighten-3": #b39ddb, - "lighten-2": #9575cd, - "lighten-1": #7e57c2, - "darken-1": #5e35b1, - "darken-2": #512da8, - "darken-3": #4527a0, - "darken-4": #311b92, - "accent-1": #b388ff, - "accent-2": #7c4dff, - "accent-3": #651fff, - "accent-4": #6200ea -); - -$indigo: ( - "base": #3f51b5, - "lighten-5": #e8eaf6, - "lighten-4": #c5cae9, - "lighten-3": #9fa8da, - "lighten-2": #7986cb, - "lighten-1": #5c6bc0, - "darken-1": #3949ab, - "darken-2": #303f9f, - "darken-3": #283593, - "darken-4": #1a237e, - "accent-1": #8c9eff, - "accent-2": #536dfe, - "accent-3": #3d5afe, - "accent-4": #304ffe -); - -$blue: ( - "base": #2196F3, - "lighten-5": #E3F2FD, - "lighten-4": #BBDEFB, - "lighten-3": #90CAF9, - "lighten-2": #64B5F6, - "lighten-1": #42A5F5, - "darken-1": #1E88E5, - "darken-2": #1976D2, - "darken-3": #1565C0, - "darken-4": #0D47A1, - "accent-1": #82B1FF, - "accent-2": #448AFF, - "accent-3": #2979FF, - "accent-4": #2962FF -); - -$light-blue: ( - "base": #03a9f4, - "lighten-5": #e1f5fe, - "lighten-4": #b3e5fc, - "lighten-3": #81d4fa, - "lighten-2": #4fc3f7, - "lighten-1": #29b6f6, - "darken-1": #039be5, - "darken-2": #0288d1, - "darken-3": #0277bd, - "darken-4": #01579b, - "accent-1": #80d8ff, - "accent-2": #40c4ff, - "accent-3": #00b0ff, - "accent-4": #0091ea -); - -$cyan: ( - "base": #00bcd4, - "lighten-5": #e0f7fa, - "lighten-4": #b2ebf2, - "lighten-3": #80deea, - "lighten-2": #4dd0e1, - "lighten-1": #26c6da, - "darken-1": #00acc1, - "darken-2": #0097a7, - "darken-3": #00838f, - "darken-4": #006064, - "accent-1": #84ffff, - "accent-2": #18ffff, - "accent-3": #00e5ff, - "accent-4": #00b8d4 -); - -$teal: ( - "base": #009688, - "lighten-5": #e0f2f1, - "lighten-4": #b2dfdb, - "lighten-3": #80cbc4, - "lighten-2": #4db6ac, - "lighten-1": #26a69a, - "darken-1": #00897b, - "darken-2": #00796b, - "darken-3": #00695c, - "darken-4": #004d40, - "accent-1": #a7ffeb, - "accent-2": #64ffda, - "accent-3": #1de9b6, - "accent-4": #00bfa5 -); - -$green: ( - "base": #4CAF50, - "lighten-5": #E8F5E9, - "lighten-4": #C8E6C9, - "lighten-3": #A5D6A7, - "lighten-2": #81C784, - "lighten-1": #66BB6A, - "darken-1": #43A047, - "darken-2": #388E3C, - "darken-3": #2E7D32, - "darken-4": #1B5E20, - "accent-1": #B9F6CA, - "accent-2": #69F0AE, - "accent-3": #00E676, - "accent-4": #00C853 -); - -$light-green: ( - "base": #8bc34a, - "lighten-5": #f1f8e9, - "lighten-4": #dcedc8, - "lighten-3": #c5e1a5, - "lighten-2": #aed581, - "lighten-1": #9ccc65, - "darken-1": #7cb342, - "darken-2": #689f38, - "darken-3": #558b2f, - "darken-4": #33691e, - "accent-1": #ccff90, - "accent-2": #b2ff59, - "accent-3": #76ff03, - "accent-4": #64dd17 -); - -$lime: ( - "base": #cddc39, - "lighten-5": #f9fbe7, - "lighten-4": #f0f4c3, - "lighten-3": #e6ee9c, - "lighten-2": #dce775, - "lighten-1": #d4e157, - "darken-1": #c0ca33, - "darken-2": #afb42b, - "darken-3": #9e9d24, - "darken-4": #827717, - "accent-1": #f4ff81, - "accent-2": #eeff41, - "accent-3": #c6ff00, - "accent-4": #aeea00 -); - -$yellow: ( - "base": #ffeb3b, - "lighten-5": #fffde7, - "lighten-4": #fff9c4, - "lighten-3": #fff59d, - "lighten-2": #fff176, - "lighten-1": #ffee58, - "darken-1": #fdd835, - "darken-2": #fbc02d, - "darken-3": #f9a825, - "darken-4": #f57f17, - "accent-1": #ffff8d, - "accent-2": #ffff00, - "accent-3": #ffea00, - "accent-4": #ffd600 -); - -$amber: ( - "base": #ffc107, - "lighten-5": #fff8e1, - "lighten-4": #ffecb3, - "lighten-3": #ffe082, - "lighten-2": #ffd54f, - "lighten-1": #ffca28, - "darken-1": #ffb300, - "darken-2": #ffa000, - "darken-3": #ff8f00, - "darken-4": #ff6f00, - "accent-1": #ffe57f, - "accent-2": #ffd740, - "accent-3": #ffc400, - "accent-4": #ffab00 -); - -$orange: ( - "base": #ff9800, - "lighten-5": #fff3e0, - "lighten-4": #ffe0b2, - "lighten-3": #ffcc80, - "lighten-2": #ffb74d, - "lighten-1": #ffa726, - "darken-1": #fb8c00, - "darken-2": #f57c00, - "darken-3": #ef6c00, - "darken-4": #e65100, - "accent-1": #ffd180, - "accent-2": #ffab40, - "accent-3": #ff9100, - "accent-4": #ff6d00 -); - -$deep-orange: ( - "base": #ff5722, - "lighten-5": #fbe9e7, - "lighten-4": #ffccbc, - "lighten-3": #ffab91, - "lighten-2": #ff8a65, - "lighten-1": #ff7043, - "darken-1": #f4511e, - "darken-2": #e64a19, - "darken-3": #d84315, - "darken-4": #bf360c, - "accent-1": #ff9e80, - "accent-2": #ff6e40, - "accent-3": #ff3d00, - "accent-4": #dd2c00 -); - -$brown: ( - "base": #795548, - "lighten-5": #efebe9, - "lighten-4": #d7ccc8, - "lighten-3": #bcaaa4, - "lighten-2": #a1887f, - "lighten-1": #8d6e63, - "darken-1": #6d4c41, - "darken-2": #5d4037, - "darken-3": #4e342e, - "darken-4": #3e2723 -); - -$blue-grey: ( - "base": #607d8b, - "lighten-5": #eceff1, - "lighten-4": #cfd8dc, - "lighten-3": #b0bec5, - "lighten-2": #90a4ae, - "lighten-1": #78909c, - "darken-1": #546e7a, - "darken-2": #455a64, - "darken-3": #37474f, - "darken-4": #263238 -); - -$grey: ( - "base": #9e9e9e, - "lighten-5": #fafafa, - "lighten-4": #f5f5f5, - "lighten-3": #eeeeee, - "lighten-2": #e0e0e0, - "lighten-1": #bdbdbd, - "darken-1": #757575, - "darken-2": #616161, - "darken-3": #424242, - "darken-4": #212121 -); - -$shades: ( - "black": #000000, - "white": #FFFFFF, - "transparent": transparent -); - -$colors: ( - "materialize-red": $materialize-red, - "red": $red, - "pink": $pink, - "purple": $purple, - "deep-purple": $deep-purple, - "indigo": $indigo, - "blue": $blue, - "light-blue": $light-blue, - "cyan": $cyan, - "teal": $teal, - "green": $green, - "light-green": $light-green, - "lime": $lime, - "yellow": $yellow, - "amber": $amber, - "orange": $orange, - "deep-orange": $deep-orange, - "brown": $brown, - "blue-grey": $blue-grey, - "grey": $grey, - "shades": $shades -) !default; - - -// Color Classes - -@each $color_name, $color in $colors { - @each $color_type, $color_value in $color { - @if $color_type == "base" { - .#{$color_name} { - background-color: $color_value !important; - } - .#{$color_name}-text { - color: $color_value !important; - } - } - @else if $color_name != "shades" { - .#{$color_name}.#{$color_type} { - background-color: $color_value !important; - } - .#{$color_name}-text.text-#{$color_type} { - color: $color_value !important; - } - } - } -} - -// Shade classes -@each $color, $color_value in $shades { - .#{$color} { - background-color: $color_value !important; - } - .#{$color}-text { - color: $color_value !important; - } -} - - -// usage: color("name_of_color", "type_of_color") -// to avoid to repeating map-get($colors, ...) - -@function color($color, $type) { - @if map-has-key($colors, $color) { - $curr_color: map-get($colors, $color); - @if map-has-key($curr_color, $type) { - @return map-get($curr_color, $type); - } - } - @warn "Unknown `#{$color}` - `#{$type}` in $colors."; - @return null; -} - diff --git a/_sass/materialize-src/sass/components/_dropdown.scss b/_sass/materialize-src/sass/components/_dropdown.scss deleted file mode 100644 index 27131b5f..00000000 --- a/_sass/materialize-src/sass/components/_dropdown.scss +++ /dev/null @@ -1,68 +0,0 @@ -.dropdown-content { - @extend .z-depth-1; - background-color: $dropdown-bg-color; - margin: 0; - display: none; - min-width: 100px; - max-height: 650px; - overflow-y: auto; - opacity: 0; - position: absolute; - z-index: 999; - will-change: width, height; - - li { - clear: both; - color: $off-black; - cursor: pointer; - min-height: $dropdown-item-height; - line-height: 1.5rem; - width: 100%; - text-align: left; - text-transform: none; - - &:hover, &.active, &.selected { - background-color: $dropdown-hover-bg-color; - } - - &.active.selected { - background-color: darken($dropdown-hover-bg-color, 5%); - } - - &.divider { - min-height: 0; - height: 1px; - } - - & > a, & > span { - font-size: 16px; - color: $dropdown-color; - display: block; - line-height: 22px; - padding: (($dropdown-item-height - 22) / 2) 16px; - } - - & > span > label { - top: 1px; - left: 0; - height: 18px; - } - - // Icon alignment override - & > a > i { - height: inherit; - line-height: inherit; - float: left; - margin: 0 24px 0 0; - width: 24px; - } - } -} - -// Input field specificity bugfix -.input-field.col .dropdown-content [type="checkbox"] + label { - top: 1px; - left: 0; - height: 18px; -} - diff --git a/_sass/materialize-src/sass/components/_global.scss b/_sass/materialize-src/sass/components/_global.scss deleted file mode 100644 index 5a7709f7..00000000 --- a/_sass/materialize-src/sass/components/_global.scss +++ /dev/null @@ -1,734 +0,0 @@ -//Default styles - -html { - box-sizing: border-box; -} -*, *:before, *:after { - box-sizing: inherit; -} - -body { - // display: flex; - // min-height: 100vh; - // flex-direction: column; -} - -main { - // flex: 1 0 auto; -} - -ul { - &:not(.browser-default) { - padding-left: 0; - list-style-type: none; - - & > li { - list-style-type: none; - } - } -} - -a { - color: $link-color; - text-decoration: none; - - // Gets rid of tap active state - -webkit-tap-highlight-color: transparent; -} - - -// Positioning -.valign-wrapper { - display: flex; - align-items: center; -} - - -// classic clearfix -.clearfix { - clear: both; -} - - -// Z-levels -.z-depth-0 { - box-shadow: none !important; -} -.z-depth-1 { - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); -} -.z-depth-1-half { - box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 7px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -1px rgba(0, 0, 0, 0.2); -} -.z-depth-2 { - box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3); -} -.z-depth-3 { - box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.3); -} -.z-depth-4 { - box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.3); -} -.z-depth-5 { - box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.3); -} - -.hoverable { - transition: box-shadow .25s; - - &:hover { - box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); - } -} - -// Dividers - -.divider { - height: 1px; - overflow: hidden; - background-color: color("grey", "lighten-2"); -} - - -// Blockquote - -blockquote { - margin: 20px 0; - padding-left: 1.5rem; - border-left: 5px solid $primary-color; -} - -// Icon Styles - -i { - line-height: inherit; - - &.left { - float: left; - margin-right: 15px; - } - &.right { - float: right; - margin-left: 15px; - } - &.tiny { - font-size: 1rem; - } - &.small { - font-size: 2rem; - } - &.medium { - font-size: 4rem; - } - &.large { - font-size: 6rem; - } -} - -// Images -img.responsive-img, -video.responsive-video { - max-width: 100%; - height: auto; -} - - -// Pagination - -.pagination { - - li { - display: inline-block; - border-radius: 2px; - text-align: center; - vertical-align: top; - height: 30px; - - a { - color: #444; - display: inline-block; - font-size: 1.2rem; - padding: 0 10px; - line-height: 30px; - } - - &.active a { color: #fff; } - - &.active { background-color: $primary-color; } - - &.disabled a { - cursor: default; - color: #999; - } - - i { - font-size: 2rem; - } - } - - - li.pages ul li { - display: inline-block; - float: none; - } -} -@media #{$medium-and-down} { - .pagination { - width: 100%; - - li.prev, - li.next { - width: 10%; - } - - li.pages { - width: 80%; - overflow: hidden; - white-space: nowrap; - } - } -} - -// Breadcrumbs -.breadcrumb { - font-size: 18px; - color: rgba(255,255,255, .7); - - i, - [class^="mdi-"], [class*="mdi-"], - i.material-icons { - display: inline-block; - float: left; - font-size: 24px; - } - - &:before { - content: '\E5CC'; - color: rgba(255,255,255, .7); - vertical-align: top; - display: inline-block; - font-family: 'Material Icons'; - font-weight: normal; - font-style: normal; - font-size: 25px; - margin: 0 10px 0 8px; - -webkit-font-smoothing: antialiased; - } - - &:first-child:before { - display: none; - } - - &:last-child { - color: #fff; - } -} - -// Parallax -.parallax-container { - position: relative; - overflow: hidden; - height: 500px; - - .parallax { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: -1; - - img { - display: none; - position: absolute; - left: 50%; - bottom: 0; - min-width: 100%; - min-height: 100%; - transform: translate3d(0,0,0); - transform: translateX(-50%); - } - } -} - -// Pushpin -.pin-top, .pin-bottom { - position: relative; -} -.pinned { - position: fixed !important; -} - -/********************* - Transition Classes -**********************/ - -ul.staggered-list li { - opacity: 0; -} - -.fade-in { - opacity: 0; - transform-origin: 0 50%; -} - - -/********************* - Media Query Classes -**********************/ -.hide-on-small-only, .hide-on-small-and-down { - @media #{$small-and-down} { - display: none !important; - } -} -.hide-on-med-and-down { - @media #{$medium-and-down} { - display: none !important; - } -} -.hide-on-med-and-up { - @media #{$medium-and-up} { - display: none !important; - } -} -.hide-on-med-only { - @media only screen and (min-width: $small-screen) and (max-width: $medium-screen) { - display: none !important; - } -} -.hide-on-large-only { - @media #{$large-and-up} { - display: none !important; - } -} -.show-on-large { - @media #{$large-and-up} { - display: block !important; - } -} -.show-on-medium { - @media only screen and (min-width: $small-screen) and (max-width: $medium-screen) { - display: block !important; - } -} -.show-on-small { - @media #{$small-and-down} { - display: block !important; - } -} -.show-on-medium-and-up { - @media #{$medium-and-up} { - display: block !important; - } -} -.show-on-medium-and-down { - @media #{$medium-and-down} { - display: block !important; - } -} - - -// Center text on mobile -.center-on-small-only { - @media #{$small-and-down} { - text-align: center; - } -} - -// Footer -.page-footer { - padding-top: 20px; - color: $footer-font-color; - background-color: $footer-bg-color; - - .footer-copyright { - overflow: hidden; - min-height: 50px; - display: flex; - align-items: center; - padding: 10px 0px; - color: $footer-copyright-font-color; - background-color: $footer-copyright-bg-color; - @extend .light; - } -} - -// Tables -table, th, td { - border: none; -} - -table { - width:100%; - display: table; - - &.bordered > thead > tr, - &.bordered > tbody > tr { - border-bottom: 1px solid $table-border-color; - } - - &.striped > tbody { - > tr:nth-child(odd) { - background-color: $table-striped-color; - } - - > tr > td { - border-radius: 0; - } - } - - &.highlight > tbody > tr { - transition: background-color .25s ease; - &:hover { - background-color: $table-striped-color; - } - } - - &.centered { - thead tr th, tbody tr td { - text-align: center; - } - } - -} - -thead { - border-bottom: 1px solid $table-border-color; -} - -td, th{ - padding: 15px 5px; - display: table-cell; - text-align: left; - vertical-align: middle; - border-radius: 2px; -} - -// Responsive Table -@media #{$medium-and-down} { - - table.responsive-table { - width: 100%; - border-collapse: collapse; - border-spacing: 0; - display: block; - position: relative; - - td:empty:before { - content: '\00a0'; - } - - th, - td { - margin: 0; - vertical-align: top; - } - - th { text-align: left; } - thead { - display: block; - float: left; - - tr { - display: block; - padding: 0 10px 0 0; - - th::before { - content: "\00a0"; - } - } - } - tbody { - display: block; - width: auto; - position: relative; - overflow-x: auto; - white-space: nowrap; - - tr { - display: inline-block; - vertical-align: top; - } - } - th { - display: block; - text-align: right; - } - td { - display: block; - min-height: 1.25em; - text-align: left; - } - tr { padding: 0 10px; } - - /* sort out borders */ - thead { - border: 0; - border-right: 1px solid $table-border-color; - } - - &.bordered { - th { border-bottom: 0; border-left: 0; } - td { border-left: 0; border-right: 0; border-bottom: 0; } - tr { border: 0; } - tbody tr { border-right: 1px solid $table-border-color; } - } - - } - -} - - -// Collections -.collection { - margin: $element-top-margin 0 $element-bottom-margin 0; - border: 1px solid $collection-border-color; - border-radius: 2px; - overflow: hidden; - position: relative; - - .collection-item { - background-color: $collection-bg-color; - line-height: $collection-line-height; - padding: 10px 20px; - margin: 0; - border-bottom: 1px solid $collection-border-color; - - // Avatar Collection - &.avatar { - min-height: 84px; - padding-left: 72px; - position: relative; - - // Don't style circles inside preloader classes. - &:not(.circle-clipper) > .circle, - :not(.circle-clipper) > .circle { - position: absolute; - width: 42px; - height: 42px; - overflow: hidden; - left: 15px; - display: inline-block; - vertical-align: middle; - } - i.circle { - font-size: 18px; - line-height: 42px; - color: #fff; - background-color: #999; - text-align: center; - } - - - .title { - font-size: 16px; - } - - p { - margin: 0; - } - - .secondary-content { - position: absolute; - top: 16px; - right: 16px; - } - - } - - - &:last-child { - border-bottom: none; - } - - &.active { - background-color: $collection-active-bg-color; - color: $collection-active-color; - - .secondary-content { - color: #fff; - } - } - } - a.collection-item{ - display: block; - transition: .25s; - color: $collection-link-color; - &:not(.active) { - &:hover { - background-color: $collection-hover-bg-color; - } - } - } - - &.with-header { - .collection-header { - background-color: $collection-bg-color; - border-bottom: 1px solid $collection-border-color; - padding: 10px 20px; - } - .collection-item { - padding-left: 30px; - } - .collection-item.avatar { - padding-left: 72px; - } - } - -} -// Made less specific to allow easier overriding -.secondary-content { - float: right; - color: $secondary-color; -} -.collapsible .collection { - margin: 0; - border: none; -} - - - -// Responsive Videos -.video-container { - position: relative; - padding-bottom: 56.25%; - height: 0; - overflow: hidden; - - iframe, object, embed { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - } -} - -// Progress Bar -.progress { - position: relative; - height: 4px; - display: block; - width: 100%; - background-color: lighten($progress-bar-color, 40%); - border-radius: 2px; - margin: $element-top-margin 0 $element-bottom-margin 0; - overflow: hidden; - .determinate { - position: absolute; - top: 0; - left: 0; - bottom: 0; - background-color: $progress-bar-color; - transition: width .3s linear; - } - .indeterminate { - background-color: $progress-bar-color; - &:before { - content: ''; - position: absolute; - background-color: inherit; - top: 0; - left:0; - bottom: 0; - will-change: left, right; - // Custom bezier - animation: indeterminate 2.1s cubic-bezier(0.650, 0.815, 0.735, 0.395) infinite; - - } - &:after { - content: ''; - position: absolute; - background-color: inherit; - top: 0; - left:0; - bottom: 0; - will-change: left, right; - // Custom bezier - animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.840, 0.440, 1.000) infinite; - animation-delay: 1.15s; - } - } -} -@keyframes indeterminate { - 0% { - left: -35%; - right:100%; - } - 60% { - left: 100%; - right: -90%; - } - 100% { - left: 100%; - right: -90%; - } -} - -@keyframes indeterminate-short { - 0% { - left: -200%; - right: 100%; - } - 60% { - left: 107%; - right: -8%; - } - 100% { - left: 107%; - right: -8%; - } -} - - -/******************* - Utility Classes -*******************/ - -.hide { - display: none !important; -} - -// Text Align -.left-align { - text-align: left; -} -.right-align { - text-align: right -} -.center, .center-align { - text-align: center; -} - -.left { - float: left !important; -} -.right { - float: right !important; -} - -// No Text Select -.no-select { - user-select: none; -} - -.circle { - border-radius: 50%; -} - -.center-block { - display: block; - margin-left: auto; - margin-right: auto; -} - -.truncate { - display: block; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.no-padding { - padding: 0 !important; -} diff --git a/_sass/materialize-src/sass/components/_grid.scss b/_sass/materialize-src/sass/components/_grid.scss deleted file mode 100644 index 7aa9e8fd..00000000 --- a/_sass/materialize-src/sass/components/_grid.scss +++ /dev/null @@ -1,156 +0,0 @@ -.container { - margin: 0 auto; - max-width: 1280px; - width: 90%; -} -@media #{$medium-and-up} { - .container { - width: 85%; - } -} -@media #{$large-and-up} { - .container { - width: 70%; - } -} -.container .row { - margin-left: (-1 * $gutter-width / 2); - margin-right: (-1 * $gutter-width / 2); -} - -.section { - padding-top: 1rem; - padding-bottom: 1rem; - - &.no-pad { - padding: 0; - } - &.no-pad-bot { - padding-bottom: 0; - } - &.no-pad-top { - padding-top: 0; - } -} - - -// Mixins to eliminate code repitition -@mixin reset-offset { - margin-left: auto; - left: auto; - right: auto; -} -@mixin grid-classes($size, $i, $perc) { - &.offset-#{$size}#{$i} { - margin-left: $perc; - } - &.pull-#{$size}#{$i} { - right: $perc; - } - &.push-#{$size}#{$i} { - left: $perc; - } -} - - -.row { - margin-left: auto; - margin-right: auto; - margin-bottom: 20px; - - // Clear floating children - &:after { - content: ""; - display: table; - clear: both; - } - - .col { - float: left; - box-sizing: border-box; - padding: 0 $gutter-width / 2; - min-height: 1px; - - &[class*="push-"], - &[class*="pull-"] { - position: relative; - } - - $i: 1; - @while $i <= $num-cols { - $perc: unquote((100 / ($num-cols / $i)) + "%"); - &.s#{$i} { - width: $perc; - @include reset-offset; - } - $i: $i + 1; - } - - $i: 1; - @while $i <= $num-cols { - $perc: unquote((100 / ($num-cols / $i)) + "%"); - @include grid-classes("s", $i, $perc); - $i: $i + 1; - } - - @media #{$medium-and-up} { - - $i: 1; - @while $i <= $num-cols { - $perc: unquote((100 / ($num-cols / $i)) + "%"); - &.m#{$i} { - width: $perc; - @include reset-offset; - } - $i: $i + 1 - } - - $i: 1; - @while $i <= $num-cols { - $perc: unquote((100 / ($num-cols / $i)) + "%"); - @include grid-classes("m", $i, $perc); - $i: $i + 1; - } - } - - @media #{$large-and-up} { - - $i: 1; - @while $i <= $num-cols { - $perc: unquote((100 / ($num-cols / $i)) + "%"); - &.l#{$i} { - width: $perc; - @include reset-offset; - } - $i: $i + 1; - } - - $i: 1; - @while $i <= $num-cols { - $perc: unquote((100 / ($num-cols / $i)) + "%"); - @include grid-classes("l", $i, $perc); - $i: $i + 1; - } - } - - @media #{$extra-large-and-up} { - - $i: 1; - @while $i <= $num-cols { - $perc: unquote((100 / ($num-cols / $i)) + "%"); - &.xl#{$i} { - width: $perc; - @include reset-offset; - } - $i: $i + 1; - } - - $i: 1; - @while $i <= $num-cols { - $perc: unquote((100 / ($num-cols / $i)) + "%"); - @include grid-classes("xl", $i, $perc); - $i: $i + 1; - } - } - } -} diff --git a/_sass/materialize-src/sass/components/_icons-material-design.scss b/_sass/materialize-src/sass/components/_icons-material-design.scss deleted file mode 100644 index 2aa6a4ae..00000000 --- a/_sass/materialize-src/sass/components/_icons-material-design.scss +++ /dev/null @@ -1,5 +0,0 @@ -/* This is needed for some mobile phones to display the Google Icon font properly */ -.material-icons { - text-rendering: optimizeLegibility; - font-feature-settings: 'liga'; -} diff --git a/_sass/materialize-src/sass/components/_materialbox.scss b/_sass/materialize-src/sass/components/_materialbox.scss deleted file mode 100644 index 30276672..00000000 --- a/_sass/materialize-src/sass/components/_materialbox.scss +++ /dev/null @@ -1,43 +0,0 @@ -.materialboxed { - &:hover { - &:not(.active) { - opacity: .8; - } - } - - display: block; - cursor: zoom-in; - position: relative; - transition: opacity .4s; - -webkit-backface-visibility: hidden; - - &.active { - cursor: zoom-out; - } -} - -#materialbox-overlay { - position:fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - background-color: #292929; - z-index: 1000; - will-change: opacity; -} - -.materialbox-caption { - position: fixed; - display: none; - color: #fff; - line-height: 50px; - bottom: 0; - left: 0; - width: 100%; - text-align: center; - padding: 0% 15%; - height: 50px; - z-index: 1000; - -webkit-font-smoothing: antialiased; -} \ No newline at end of file diff --git a/_sass/materialize-src/sass/components/_modal.scss b/_sass/materialize-src/sass/components/_modal.scss deleted file mode 100644 index 82445b40..00000000 --- a/_sass/materialize-src/sass/components/_modal.scss +++ /dev/null @@ -1,90 +0,0 @@ -.modal { - @extend .z-depth-4; - - display: none; - position: fixed; - left: 0; - right: 0; - background-color: #fafafa; - padding: 0; - max-height: 70%; - width: 55%; - margin: auto; - overflow-y: auto; - - border-radius: 2px; - will-change: top, opacity; - - @media #{$medium-and-down} { - width: 80%; - } - - h1,h2,h3,h4 { - margin-top: 0; - } - - .modal-content { - padding: 24px; - } - .modal-close { - cursor: pointer; - } - - .modal-footer { - border-radius: 0 0 2px 2px; - background-color: #fafafa; - padding: 4px 6px; - height: 56px; - width: 100%; - text-align: right; - - .btn, .btn-flat { - margin: 6px 0; - } - } -} -.modal-overlay { - position: fixed; - z-index: 999; - top: -25%; - left: 0; - bottom: 0; - right: 0; - height: 125%; - width: 100%; - background: #000; - display: none; - - will-change: opacity; -} - -// Modal with fixed action footer -.modal.modal-fixed-footer { - padding: 0; - height: 70%; - - .modal-content { - position: absolute; - height: calc(100% - 56px); - max-height: 100%; - width: 100%; - overflow-y: auto; - } - - .modal-footer { - border-top: 1px solid rgba(0,0,0,.1); - position: absolute; - bottom: 0; - } -} - -// Modal Bottom Sheet Style -.modal.bottom-sheet { - top: auto; - bottom: -100%; - margin: 0; - width: 100%; - max-height: 45%; - border-radius: 0; - will-change: bottom, opacity; -} diff --git a/_sass/materialize-src/sass/components/_navbar.scss b/_sass/materialize-src/sass/components/_navbar.scss deleted file mode 100644 index d6fb2f11..00000000 --- a/_sass/materialize-src/sass/components/_navbar.scss +++ /dev/null @@ -1,208 +0,0 @@ -nav { - &.nav-extended { - height: auto; - - .nav-wrapper { - min-height: $navbar-height-mobile; - height: auto; - } - - .nav-content { - position: relative; - line-height: normal; - } - } - - color: $navbar-font-color; - @extend .z-depth-1; - background-color: $primary-color; - width: 100%; - height: $navbar-height-mobile; - line-height: $navbar-line-height-mobile; - - a { color: $navbar-font-color; } - - i, - [class^="mdi-"], [class*="mdi-"], - i.material-icons { - display: block; - font-size: 24px; - height: $navbar-height-mobile; - line-height: $navbar-line-height-mobile; - } - - .nav-wrapper { - position: relative; - height: 100%; - } - - @media #{$large-and-up} { - a.button-collapse { display: none; } - } - - - // Collapse button - .button-collapse { - float: left; - position: relative; - z-index: 1; - height: $navbar-height-mobile; - margin: 0 18px; - - i { - height: $navbar-height-mobile; - line-height: $navbar-line-height-mobile; - } - } - - - // Logo - .brand-logo { - position: absolute; - color: $navbar-font-color; - display: inline-block; - font-size: $navbar-brand-font-size; - padding: 0; - - &.center { - left: 50%; - transform: translateX(-50%); - } - - @media #{$medium-and-down} { - left: 50%; - transform: translateX(-50%); - - &.left, &.right { - padding: 0; - transform: none; - } - - &.left { left: 0.5rem; } - &.right { - right: 0.5rem; - left: auto; - } - } - - &.right { - right: 0.5rem; - padding: 0; - } - - i, - [class^="mdi-"], [class*="mdi-"], - i.material-icons { - float: left; - margin-right: 15px; - } - } - - - // Title - .nav-title { - display: inline-block; - font-size: 32px; - padding: 28px 0; - } - - - // Navbar Links - ul { - margin: 0; - - li { - transition: background-color .3s; - float: left; - padding: 0; - - &.active { - background-color: rgba(0,0,0,.1); - } - } - a { - transition: background-color .3s; - font-size: $navbar-font-size; - color: $navbar-font-color; - display: block; - padding: 0 15px; - cursor: pointer; - - &.btn, &.btn-large, &.btn-flat, &.btn-floating { - margin-top: -2px; - margin-left: 15px; - margin-right: 15px; - - & > .material-icons { - height: inherit; - line-height: inherit; - } - } - - &:hover { - background-color: rgba(0,0,0,.1); - } - } - - &.left { - float: left; - } - } - - // Navbar Search Form - form { - height: 100%; - } - - .input-field { - margin: 0; - height: 100%; - - input { - height: 100%; - font-size: 1.2rem; - border: none; - padding-left: 2rem; - - &:focus, &[type=text]:valid, &[type=password]:valid, - &[type=email]:valid, &[type=url]:valid, &[type=date]:valid { - border: none; - box-shadow: none; - } - } - - label { - top: 0; - left: 0; - - i { - color: rgba(255,255,255,.7); - transition: color .3s; - } - &.active i { color: $navbar-font-color; } - } - } -} - -// Fixed Navbar -.navbar-fixed { - position: relative; - height: $navbar-height-mobile; - z-index: 997; - - nav { - position: fixed; - } -} -@media #{$medium-and-up} { - nav.nav-extended .nav-wrapper { - min-height: $navbar-height; - } - nav, nav .nav-wrapper i, nav a.button-collapse, nav a.button-collapse i { - height: $navbar-height; - line-height: $navbar-line-height; - } - .navbar-fixed { - height: $navbar-height; - } -} diff --git a/_sass/materialize-src/sass/components/_normalize.scss b/_sass/materialize-src/sass/components/_normalize.scss deleted file mode 100644 index d6d3c198..00000000 --- a/_sass/materialize-src/sass/components/_normalize.scss +++ /dev/null @@ -1,424 +0,0 @@ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ - -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS and IE text size adjust after device orientation change, - * without disabling user zoom. - */ - -html { - font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/** - * Remove default margin. - */ - -body { - margin: 0; -} - -/* HTML5 display definitions - ========================================================================== */ - -/** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 - * and Firefox. - * Correct `block` display not defined for `main` in IE 11. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} - -/** - * 1. Correct `inline-block` display not defined in IE 8/9. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. - */ - -audio, -canvas, -progress, -video { - display: inline-block; /* 1 */ - vertical-align: baseline; /* 2 */ -} - -/** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. - */ - -[hidden], -template { - display: none; -} - -/* Links - ========================================================================== */ - -/** - * Remove the gray background color from active links in IE 10. - */ - -a { - background-color: transparent; -} - -/** - * Improve readability of focused elements when they are also in an - * active/hover state. - */ - -a:active, -a:hover { - outline: 0; -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. - */ - -b, -strong { - font-weight: bold; -} - -/** - * Address styling not present in Safari and Chrome. - */ - -dfn { - font-style: italic; -} - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/** - * Address styling not present in IE 8/9. - */ - -mark { - background: #ff0; - color: #000; -} - -/** - * Address inconsistent and variable font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -/* Embedded content - ========================================================================== */ - -/** - * Remove border when inside `a` element in IE 8/9/10. - */ - -img { - border: 0; -} - -/** - * Correct overflow not hidden in IE 9/10/11. - */ - -svg:not(:root) { - overflow: hidden; -} - -/* Grouping content - ========================================================================== */ - -/** - * Address margin not present in IE 8/9 and Safari. - */ - -figure { - margin: 1em 40px; -} - -/** - * Address differences between Firefox and other browsers. - */ - -hr { - box-sizing: content-box; - height: 0; -} - -/** - * Contain overflow in all browsers. - */ - -pre { - overflow: auto; -} - -/** - * Address odd `em`-unit font size rendering in all browsers. - */ - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} - -/* Forms - ========================================================================== */ - -/** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. - */ - -/** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. - */ - -button, -input, -optgroup, -select, -textarea { - color: inherit; /* 1 */ - font: inherit; /* 2 */ - margin: 0; /* 3 */ -} - -/** - * Address `overflow` set to `hidden` in IE 8/9/10/11. - */ - -button { - overflow: visible; -} - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. - */ - -button, -select { - text-transform: none; -} - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - */ - -button, -html input[type="button"], /* 1 */ -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* 2 */ - cursor: pointer; /* 3 */ -} - -/** - * Re-set default cursor for disabled elements. - */ - -button[disabled], -html input[disabled] { - cursor: default; -} - -/** - * Remove inner padding and border in Firefox 4+. - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ - -input { - line-height: normal; -} - -/** - * It's recommended that you don't attempt to style these elements. - * Firefox's implementation doesn't respect box-sizing, padding, or width. - * - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - */ - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. - */ - -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome. - */ - -input[type="search"] { - -webkit-appearance: textfield; /* 1 */ - box-sizing: content-box; /* 2 */ -} - -/** - * Remove inner padding and search cancel button in Safari and Chrome on OS X. - * Safari (but not Chrome) clips the cancel button when the search input has - * padding (and `textfield` appearance). - */ - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * Define consistent border, margin, and padding. - */ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - */ - -legend { - border: 0; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Remove default vertical scrollbar in IE 8/9/10/11. - */ - -textarea { - overflow: auto; -} - -/** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. - */ - -optgroup { - font-weight: bold; -} - -/* Tables - ========================================================================== */ - -/** - * Remove most spacing between table cells. - */ - -table { - border-collapse: collapse; - border-spacing: 0; -} - -td, -th { - padding: 0; -} diff --git a/_sass/materialize-src/sass/components/_preloader.scss b/_sass/materialize-src/sass/components/_preloader.scss deleted file mode 100644 index cfe29939..00000000 --- a/_sass/materialize-src/sass/components/_preloader.scss +++ /dev/null @@ -1,334 +0,0 @@ -/* - @license - Copyright (c) 2014 The Polymer Project Authors. All rights reserved. - This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt - The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt - The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt - Code distributed by Google as part of the polymer project is also - subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt - */ - -/**************************/ -/* STYLES FOR THE SPINNER */ -/**************************/ - -/* - * Constants: - * STROKEWIDTH = 3px - * ARCSIZE = 270 degrees (amount of circle the arc takes up) - * ARCTIME = 1333ms (time it takes to expand and contract arc) - * ARCSTARTROT = 216 degrees (how much the start location of the arc - * should rotate each time, 216 gives us a - * 5 pointed star shape (it's 360/5 * 3). - * For a 7 pointed star, we might do - * 360/7 * 3 = 154.286) - * CONTAINERWIDTH = 28px - * SHRINK_TIME = 400ms - */ - - -.preloader-wrapper { - display: inline-block; - position: relative; - width: 50px; - height: 50px; - - &.small { - width: 36px; - height: 36px; - } - - &.big { - width: 64px; - height: 64px; - } - - &.active { - /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */ - -webkit-animation: container-rotate 1568ms linear infinite; - animation: container-rotate 1568ms linear infinite; - } -} - -@-webkit-keyframes container-rotate { - to { -webkit-transform: rotate(360deg) } -} - -@keyframes container-rotate { - to { transform: rotate(360deg) } -} - -.spinner-layer { - position: absolute; - width: 100%; - height: 100%; - opacity: 0; - border-color: $spinner-default-color; -} - -.spinner-blue, -.spinner-blue-only { - border-color: #4285f4; -} - -.spinner-red, -.spinner-red-only { - border-color: #db4437; -} - -.spinner-yellow, -.spinner-yellow-only { - border-color: #f4b400; -} - -.spinner-green, -.spinner-green-only { - border-color: #0f9d58; -} - -/** - * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee): - * - * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't - * guarantee that the animation will start _exactly_ after that value. So we avoid using - * animation-delay and instead set custom keyframes for each color (as redundant as it - * seems). - * - * We write out each animation in full (instead of separating animation-name, - * animation-duration, etc.) because under the polyfill, Safari does not recognize those - * specific properties properly, treats them as -webkit-animation, and overrides the - * other animation rules. See https://github.com/Polymer/platform/issues/53. - */ -.active .spinner-layer.spinner-blue { - /* durations: 4 * ARCTIME */ - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; -} - -.active .spinner-layer.spinner-red { - /* durations: 4 * ARCTIME */ - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; -} - -.active .spinner-layer.spinner-yellow { - /* durations: 4 * ARCTIME */ - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; -} - -.active .spinner-layer.spinner-green { - /* durations: 4 * ARCTIME */ - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; -} - -.active .spinner-layer, -.active .spinner-layer.spinner-blue-only, -.active .spinner-layer.spinner-red-only, -.active .spinner-layer.spinner-yellow-only, -.active .spinner-layer.spinner-green-only { - /* durations: 4 * ARCTIME */ - opacity: 1; - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; -} - -@-webkit-keyframes fill-unfill-rotate { - 12.5% { -webkit-transform: rotate(135deg); } /* 0.5 * ARCSIZE */ - 25% { -webkit-transform: rotate(270deg); } /* 1 * ARCSIZE */ - 37.5% { -webkit-transform: rotate(405deg); } /* 1.5 * ARCSIZE */ - 50% { -webkit-transform: rotate(540deg); } /* 2 * ARCSIZE */ - 62.5% { -webkit-transform: rotate(675deg); } /* 2.5 * ARCSIZE */ - 75% { -webkit-transform: rotate(810deg); } /* 3 * ARCSIZE */ - 87.5% { -webkit-transform: rotate(945deg); } /* 3.5 * ARCSIZE */ - to { -webkit-transform: rotate(1080deg); } /* 4 * ARCSIZE */ -} - -@keyframes fill-unfill-rotate { - 12.5% { transform: rotate(135deg); } /* 0.5 * ARCSIZE */ - 25% { transform: rotate(270deg); } /* 1 * ARCSIZE */ - 37.5% { transform: rotate(405deg); } /* 1.5 * ARCSIZE */ - 50% { transform: rotate(540deg); } /* 2 * ARCSIZE */ - 62.5% { transform: rotate(675deg); } /* 2.5 * ARCSIZE */ - 75% { transform: rotate(810deg); } /* 3 * ARCSIZE */ - 87.5% { transform: rotate(945deg); } /* 3.5 * ARCSIZE */ - to { transform: rotate(1080deg); } /* 4 * ARCSIZE */ -} - -@-webkit-keyframes blue-fade-in-out { - from { opacity: 1; } - 25% { opacity: 1; } - 26% { opacity: 0; } - 89% { opacity: 0; } - 90% { opacity: 1; } - 100% { opacity: 1; } -} - -@keyframes blue-fade-in-out { - from { opacity: 1; } - 25% { opacity: 1; } - 26% { opacity: 0; } - 89% { opacity: 0; } - 90% { opacity: 1; } - 100% { opacity: 1; } -} - -@-webkit-keyframes red-fade-in-out { - from { opacity: 0; } - 15% { opacity: 0; } - 25% { opacity: 1; } - 50% { opacity: 1; } - 51% { opacity: 0; } -} - -@keyframes red-fade-in-out { - from { opacity: 0; } - 15% { opacity: 0; } - 25% { opacity: 1; } - 50% { opacity: 1; } - 51% { opacity: 0; } -} - -@-webkit-keyframes yellow-fade-in-out { - from { opacity: 0; } - 40% { opacity: 0; } - 50% { opacity: 1; } - 75% { opacity: 1; } - 76% { opacity: 0; } -} - -@keyframes yellow-fade-in-out { - from { opacity: 0; } - 40% { opacity: 0; } - 50% { opacity: 1; } - 75% { opacity: 1; } - 76% { opacity: 0; } -} - -@-webkit-keyframes green-fade-in-out { - from { opacity: 0; } - 65% { opacity: 0; } - 75% { opacity: 1; } - 90% { opacity: 1; } - 100% { opacity: 0; } -} - -@keyframes green-fade-in-out { - from { opacity: 0; } - 65% { opacity: 0; } - 75% { opacity: 1; } - 90% { opacity: 1; } - 100% { opacity: 0; } -} - -/** - * Patch the gap that appear between the two adjacent div.circle-clipper while the - * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11). - */ -.gap-patch { - position: absolute; - top: 0; - left: 45%; - width: 10%; - height: 100%; - overflow: hidden; - border-color: inherit; -} - -.gap-patch .circle { - width: 1000%; - left: -450%; -} - -.circle-clipper { - display: inline-block; - position: relative; - width: 50%; - height: 100%; - overflow: hidden; - border-color: inherit; - - .circle { - width: 200%; - height: 100%; - border-width: 3px; /* STROKEWIDTH */ - border-style: solid; - border-color: inherit; - border-bottom-color: transparent !important; - border-radius: 50%; - -webkit-animation: none; - animation: none; - position: absolute; - top: 0; - right: 0; - bottom: 0; - } - - &.left .circle { - left: 0; - border-right-color: transparent !important; - -webkit-transform: rotate(129deg); - transform: rotate(129deg); - } - &.right .circle { - left: -100%; - border-left-color: transparent !important; - -webkit-transform: rotate(-129deg); - transform: rotate(-129deg); - } -} - - - -.active .circle-clipper.left .circle { - /* duration: ARCTIME */ - -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; - animation: left-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; -} - -.active .circle-clipper.right .circle { - /* duration: ARCTIME */ - -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; - animation: right-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; -} - -@-webkit-keyframes left-spin { - from { -webkit-transform: rotate(130deg); } - 50% { -webkit-transform: rotate(-5deg); } - to { -webkit-transform: rotate(130deg); } -} - -@keyframes left-spin { - from { transform: rotate(130deg); } - 50% { transform: rotate(-5deg); } - to { transform: rotate(130deg); } -} - -@-webkit-keyframes right-spin { - from { -webkit-transform: rotate(-130deg); } - 50% { -webkit-transform: rotate(5deg); } - to { -webkit-transform: rotate(-130deg); } -} - -@keyframes right-spin { - from { transform: rotate(-130deg); } - 50% { transform: rotate(5deg); } - to { transform: rotate(-130deg); } -} - -#spinnerContainer.cooldown { - /* duration: SHRINK_TIME */ - -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0.0, 0.2, 1); - animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0.0, 0.2, 1); -} - -@-webkit-keyframes fade-out { - from { opacity: 1; } - to { opacity: 0; } -} - -@keyframes fade-out { - from { opacity: 1; } - to { opacity: 0; } -} diff --git a/_sass/materialize-src/sass/components/_pulse.scss b/_sass/materialize-src/sass/components/_pulse.scss deleted file mode 100644 index a3b7d9f2..00000000 --- a/_sass/materialize-src/sass/components/_pulse.scss +++ /dev/null @@ -1,34 +0,0 @@ -.pulse { - &::before { - content: ''; - display: block; - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - background-color: inherit; - border-radius: inherit; - transition: opacity .3s, transform .3s; - animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; - z-index: -1; - } - - overflow: initial; - position: relative; -} - -@keyframes pulse-animation { - 0% { - opacity: 1; - transform: scale(1); - } - 50% { - opacity: 0; - transform: scale(1.5); - } - 100% { - opacity: 0; - transform: scale(1.5); - } -} diff --git a/_sass/materialize-src/sass/components/_roboto.scss b/_sass/materialize-src/sass/components/_roboto.scss deleted file mode 100644 index a4ec3cb9..00000000 --- a/_sass/materialize-src/sass/components/_roboto.scss +++ /dev/null @@ -1,39 +0,0 @@ -@font-face { - font-family: "Roboto"; - src: local(Roboto Thin), - url("#{$roboto-font-path}Roboto-Thin.woff2") format("woff2"), - url("#{$roboto-font-path}Roboto-Thin.woff") format("woff"); - - font-weight: 100; -} -@font-face { - font-family: "Roboto"; - src: local(Roboto Light), - url("#{$roboto-font-path}Roboto-Light.woff2") format("woff2"), - url("#{$roboto-font-path}Roboto-Light.woff") format("woff"); - font-weight: 300; -} - -@font-face { - font-family: "Roboto"; - src: local(Roboto Regular), - url("#{$roboto-font-path}Roboto-Regular.woff2") format("woff2"), - url("#{$roboto-font-path}Roboto-Regular.woff") format("woff"); - font-weight: 400; -} - -@font-face { - font-family: "Roboto"; - src: local(Roboto Medium), - url("#{$roboto-font-path}Roboto-Medium.woff2") format("woff2"), - url("#{$roboto-font-path}Roboto-Medium.woff") format("woff"); - font-weight: 500; -} - -@font-face { - font-family: "Roboto"; - src: local(Roboto Bold), - url("#{$roboto-font-path}Roboto-Bold.woff2") format("woff2"), - url("#{$roboto-font-path}Roboto-Bold.woff") format("woff"); - font-weight: 700; -} diff --git a/_sass/materialize-src/sass/components/_sideNav.scss b/_sass/materialize-src/sass/components/_sideNav.scss deleted file mode 100644 index 051e1f37..00000000 --- a/_sass/materialize-src/sass/components/_sideNav.scss +++ /dev/null @@ -1,214 +0,0 @@ -.side-nav { - position: fixed; - width: 300px; - left: 0; - top: 0; - margin: 0; - transform: translateX(-100%); - height: 100%; - height: calc(100% + 60px); - height: -moz-calc(100%); //Temporary Firefox Fix - padding-bottom: 60px; - background-color: $sidenav-bg-color; - z-index: 999; - overflow-y: auto; - will-change: transform; - backface-visibility: hidden; - transform: translateX(-105%); - - @extend .z-depth-1; - - // Right Align - &.right-aligned { - right: 0; - transform: translateX(105%); - left: auto; - transform: translateX(100%); - } - - .collapsible { - margin: 0; - } - - - li { - float: none; - line-height: $sidenav-line-height; - - &.active { background-color: rgba(0,0,0,.05); } - } - - li > a { - color: $sidenav-font-color; - display: block; - font-size: $sidenav-font-size; - font-weight: 500; - height: $sidenav-item-height; - line-height: $sidenav-line-height; - padding: 0 ($sidenav-padding * 2); - - &:hover { background-color: rgba(0,0,0,.05);} - - &.btn, &.btn-large, &.btn-flat, &.btn-floating { - margin: 10px 15px; - } - - &.btn, - &.btn-large, - &.btn-floating { color: $button-raised-color; } - &.btn-flat { color: $button-flat-color; } - - &.btn:hover, - &.btn-large:hover { background-color: lighten($button-raised-background, 5%); } - &.btn-floating:hover { background-color: $button-raised-background; } - - & > i, - & > [class^="mdi-"], li > a > [class*="mdi-"], - & > i.material-icons { - float: left; - height: $sidenav-item-height; - line-height: $sidenav-line-height; - margin: 0 ($sidenav-padding * 2) 0 0; - width: $sidenav-item-height / 2; - color: rgba(0,0,0,.54); - } - } - - - .divider { - margin: ($sidenav-padding / 2) 0 0 0; - } - - .subheader { - &:hover { - background-color: transparent; - } - - cursor: initial; - pointer-events: none; - color: rgba(0,0,0,.54); - font-size: $sidenav-font-size; - font-weight: 500; - line-height: $sidenav-line-height; - } - - .user-view, - .userView { - position: relative; - padding: ($sidenav-padding * 2) ($sidenav-padding * 2) 0; - margin-bottom: $sidenav-padding / 2; - - & > a { - &:hover { background-color: transparent; } - height: auto; - padding: 0; - } - - .background { - overflow: hidden; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: -1; - } - - .circle, .name, .email { - display: block; - } - - .circle { - height: 64px; - width: 64px; - } - - .name, - .email { - font-size: $sidenav-font-size; - line-height: $sidenav-line-height / 2; - } - - .name { - margin-top: 16px; - font-weight: 500; - } - - .email { - padding-bottom: 16px; - font-weight: 400; - } - } -} - - -// Touch interaction -.drag-target { - height: 100%; - width: 10px; - position: fixed; - top: 0; - z-index: 998; -} - - -// Fixed side-nav shown -.side-nav.fixed { - left: 0; - transform: translateX(0); - position: fixed; - - // Right Align - &.right-aligned { - right: 0; - left: auto; - } -} - -// Fixed sideNav hide on smaller -@media #{$medium-and-down} { - .side-nav { - &.fixed { - transform: translateX(-105%); - - &.right-aligned { - transform: translateX(105%); - } - } - - a { - padding: 0 $sidenav-padding; - } - - .user-view, - .userView { - padding: $sidenav-padding $sidenav-padding 0; - } - } -} - - -.side-nav .collapsible-body > ul:not(.collapsible) > li.active, -.side-nav.fixed .collapsible-body > ul:not(.collapsible) > li.active { - background-color: $primary-color; - a { - color: $sidenav-bg-color; - } -} -.side-nav .collapsible-body { - padding: 0; -} - - -#sidenav-overlay { - position: fixed; - top: 0; - left: 0; - right: 0; - - height: 120vh; - background-color: rgba(0,0,0,.5); - z-index: 997; - - will-change: opacity; -} diff --git a/_sass/materialize-src/sass/components/_slider.scss b/_sass/materialize-src/sass/components/_slider.scss deleted file mode 100644 index 5d7c27ed..00000000 --- a/_sass/materialize-src/sass/components/_slider.scss +++ /dev/null @@ -1,92 +0,0 @@ -.slider { - position: relative; - height: 400px; - width: 100%; - - // Fullscreen slider - &.fullscreen { - height: 100%; - width: 100%; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - - ul.slides { - height: 100%; - } - - ul.indicators { - z-index: 2; - bottom: 30px; - } - } - - .slides { - background-color: $slider-bg-color; - margin: 0; - height: 400px; - - li { - opacity: 0; - position: absolute; - top: 0; - left: 0; - z-index: 1; - width: 100%; - height: inherit; - overflow: hidden; - - img { - height: 100%; - width: 100%; - background-size: cover; - background-position: center; - } - - .caption { - color: #fff; - position: absolute; - top: 15%; - left: 15%; - width: 70%; - opacity: 0; - - p { color: $slider-bg-color-light; } - } - - &.active { - z-index: 2; - } - } - } - - - .indicators { - position: absolute; - text-align: center; - left: 0; - right: 0; - bottom: 0; - margin: 0; - - .indicator-item { - display: inline-block; - position: relative; - cursor: pointer; - height: 16px; - width: 16px; - margin: 0 12px; - background-color: $slider-bg-color-light; - - transition: background-color .3s; - border-radius: 50%; - - &.active { - background-color: $slider-indicator-color; - } - } - } - -} \ No newline at end of file diff --git a/_sass/materialize-src/sass/components/_table_of_contents.scss b/_sass/materialize-src/sass/components/_table_of_contents.scss deleted file mode 100644 index dde6090b..00000000 --- a/_sass/materialize-src/sass/components/_table_of_contents.scss +++ /dev/null @@ -1,33 +0,0 @@ -/*************** - Nav List -***************/ -.table-of-contents { - &.fixed { - position: fixed; - } - - li { - padding: 2px 0; - } - a { - display: inline-block; - font-weight: 300; - color: #757575; - padding-left: 20px; - height: 1.5rem; - line-height: 1.5rem; - letter-spacing: .4; - display: inline-block; - - &:hover { - color: lighten(#757575, 20%); - padding-left: 19px; - border-left: 1px solid $primary-color; - } - &.active { - font-weight: 500; - padding-left: 18px; - border-left: 2px solid $primary-color; - } - } -} diff --git a/_sass/materialize-src/sass/components/_tabs.scss b/_sass/materialize-src/sass/components/_tabs.scss deleted file mode 100644 index 5a1a459a..00000000 --- a/_sass/materialize-src/sass/components/_tabs.scss +++ /dev/null @@ -1,93 +0,0 @@ -.tabs { - &.tabs-transparent { - background-color: transparent; - - .tab a, - .tab.disabled a, - .tab.disabled a:hover { - color: rgba(255,255,255,0.7); - } - - .tab a:hover, - .tab a.active { - color: #fff; - } - - .indicator { - background-color: #fff; - } - } - - &.tabs-fixed-width { - display: flex; - - .tab { - flex-grow: 1; - } - } - - position: relative; - overflow-x: auto; - overflow-y: hidden; - height: 48px; - width: 100%; - background-color: $tabs-bg-color; - margin: 0 auto; - white-space: nowrap; - - .tab { - display: inline-block; - text-align: center; - line-height: 48px; - height: 48px; - padding: 0; - margin: 0; - text-transform: uppercase; - - a { - &:hover, - &.active { - background-color: transparent; - color: $tabs-text-color; - } - - color: rgba($tabs-text-color, .7); - display: block; - width: 100%; - height: 100%; - padding: 0 24px; - font-size: 14px; - text-overflow: ellipsis; - overflow: hidden; - transition: color .28s ease; - } - - &.disabled a, - &.disabled a:hover { - color: rgba($tabs-text-color, .7); - cursor: default; - } - } - .indicator { - position: absolute; - bottom: 0; - height: 2px; - background-color: $tabs-underline-color; - will-change: left, right; - } -} - -// Fixed sideNav hide on smaller -@media #{$medium-and-down} { - .tabs { - display: flex; - - .tab { - flex-grow: 1; - - a { - padding: 0 12px; - } - } - } -} diff --git a/_sass/materialize-src/sass/components/_tapTarget.scss b/_sass/materialize-src/sass/components/_tapTarget.scss deleted file mode 100644 index 49aecd56..00000000 --- a/_sass/materialize-src/sass/components/_tapTarget.scss +++ /dev/null @@ -1,103 +0,0 @@ -.tap-target-wrapper { - width: 800px; - height: 800px; - position: fixed; - z-index: 1000; - visibility: hidden; - transition: visibility 0s .3s; -} - -.tap-target-wrapper.open { - visibility: visible; - transition: visibility 0s; - - .tap-target { - transform: scale(1); - opacity: .95; - transition: - transform .3s cubic-bezier(.42,0,.58,1), - opacity .3s cubic-bezier(.42,0,.58,1); - } - - .tap-target-wave::before { - transform: scale(1); - } - .tap-target-wave::after { - visibility: visible; - animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; - transition: - opacity .3s, - transform .3s, - visibility 0s 1s; - } -} - -.tap-target { - position: absolute; - font-size: 1rem; - border-radius: 50%; - background-color: $primary-color; - box-shadow: 0 20px 20px 0 rgba(0,0,0,0.14), 0 10px 50px 0 rgba(0,0,0,0.12), 0 30px 10px -20px rgba(0,0,0,0.2); - width: 100%; - height: 100%; - opacity: 0; - transform: scale(0); - transition: - transform .3s cubic-bezier(.42,0,.58,1), - opacity .3s cubic-bezier(.42,0,.58,1); -} - -.tap-target-content { - position: relative; - display: table-cell; -} - -.tap-target-wave { - &::before, - &::after { - content: ''; - display: block; - position: absolute; - width: 100%; - height: 100%; - border-radius: 50%; - background-color: #ffffff; - } - &::before { - transform: scale(0); - transition: transform .3s; - } - &::after { - visibility: hidden; - transition: - opacity .3s, - transform .3s, - visibility 0s; - z-index: -1; - } - - position: absolute; - border-radius: 50%; - z-index: 10001; -} - -.tap-target-origin { - &:not(.btn), - &:not(.btn):hover { - background: none; - } - - top: 50%; - left: 50%; - transform: translate(-50%,-50%); - - z-index: 10002; - position: absolute !important; -} - -@media only screen and (max-width: 600px) { - .tap-target, .tap-target-wrapper { - width: 600px; - height: 600px; - } -} diff --git a/_sass/materialize-src/sass/components/_toast.scss b/_sass/materialize-src/sass/components/_toast.scss deleted file mode 100644 index 3772d442..00000000 --- a/_sass/materialize-src/sass/components/_toast.scss +++ /dev/null @@ -1,59 +0,0 @@ -#toast-container { - display:block; - position: fixed; - z-index: 10000; - - @media #{$small-and-down} { - min-width: 100%; - bottom: 0%; - } - @media #{$medium-only} { - left: 5%; - bottom: 7%; - max-width: 90%; - } - @media #{$large-and-up} { - top: 10%; - right: 7%; - max-width: 86%; - } -} - -.toast { - @extend .z-depth-1; - border-radius: 2px; - top: 35px; - width: auto; - margin-top: 10px; - position: relative; - max-width:100%; - height: auto; - min-height: $toast-height; - line-height: 1.5em; - word-break: break-all; - background-color: $toast-color; - padding: 10px 25px; - font-size: 1.1rem; - font-weight: 300; - color: $toast-text-color; - display: flex; - align-items: center; - justify-content: space-between; - cursor: default; - - .toast-action { - color: $toast-action-color; - font-weight: 500; - margin-right: -25px; - margin-left: 3rem; - } - - &.rounded{ - border-radius: 24px; - } - - @media #{$small-and-down} { - width: 100%; - border-radius: 0; - } -} diff --git a/_sass/materialize-src/sass/components/_tooltip.scss b/_sass/materialize-src/sass/components/_tooltip.scss deleted file mode 100644 index 21ea6a75..00000000 --- a/_sass/materialize-src/sass/components/_tooltip.scss +++ /dev/null @@ -1,31 +0,0 @@ -.material-tooltip { - padding: 10px 8px; - font-size: 1rem; - z-index: 2000; - background-color: transparent; - border-radius: 2px; - color: #fff; - min-height: 36px; - line-height: 120%; - opacity: 0; - position: absolute; - text-align: center; - max-width: calc(100% - 4px); - overflow: hidden; - left: 0; - top: 0; - pointer-events: none; - visibility: hidden; -} - -.backdrop { - position: absolute; - opacity: 0; - height: 7px; - width: 14px; - border-radius: 0 0 50% 50%; - background-color: #323232; - z-index: -1; - transform-origin: 50% 0%; - visibility: hidden; -} diff --git a/_sass/materialize-src/sass/components/_transitions.scss b/_sass/materialize-src/sass/components/_transitions.scss deleted file mode 100644 index cb9f60db..00000000 --- a/_sass/materialize-src/sass/components/_transitions.scss +++ /dev/null @@ -1,13 +0,0 @@ -// Scale transition -.scale-transition { - &.scale-out { - transform: scale(0); - transition: transform .2s !important; - } - - &.scale-in { - transform: scale(1); - } - - transition: transform .3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important; -} \ No newline at end of file diff --git a/_sass/materialize-src/sass/components/_typography.scss b/_sass/materialize-src/sass/components/_typography.scss deleted file mode 100644 index a773afd4..00000000 --- a/_sass/materialize-src/sass/components/_typography.scss +++ /dev/null @@ -1,61 +0,0 @@ - -a { - text-decoration: none; -} - -html{ - line-height: 1.5; - - @media only screen and (min-width: 0) { - font-size: 14px; - } - - @media only screen and (min-width: $medium-screen) { - font-size: 14.5px; - } - - @media only screen and (min-width: $large-screen) { - font-size: 15px; - } - - font-family: "Roboto", sans-serif; - font-weight: normal; - color: $off-black; -} -h1, h2, h3, h4, h5, h6 { - font-weight: 400; - line-height: 1.1; -} - -// Header Styles -h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { font-weight: inherit; } -h1 { font-size: $h1-fontsize; line-height: 110%; margin: ($h1-fontsize / 2) 0 ($h1-fontsize / 2.5) 0;} -h2 { font-size: $h2-fontsize; line-height: 110%; margin: ($h2-fontsize / 2) 0 ($h2-fontsize / 2.5) 0;} -h3 { font-size: $h3-fontsize; line-height: 110%; margin: ($h3-fontsize / 2) 0 ($h3-fontsize / 2.5) 0;} -h4 { font-size: $h4-fontsize; line-height: 110%; margin: ($h4-fontsize / 2) 0 ($h4-fontsize / 2.5) 0;} -h5 { font-size: $h5-fontsize; line-height: 110%; margin: ($h5-fontsize / 2) 0 ($h5-fontsize / 2.5) 0;} -h6 { font-size: $h6-fontsize; line-height: 110%; margin: ($h6-fontsize / 2) 0 ($h6-fontsize / 2.5) 0;} - -// Text Styles -em { font-style: italic; } -strong { font-weight: 500; } -small { font-size: 75%; } -.light { font-weight: 300; } -.thin { font-weight: 200; } - - -.flow-text{ - font-weight: 300; - $i: 0; - @while $i <= $intervals { - @media only screen and (min-width : 360 + ($i * $interval-size)) { - font-size: 1.2rem * (1 + (.02 * $i)); - } - $i: $i + 1; - } - - // Handle below 360px screen - @media only screen and (max-width: 360px) { - font-size: 1.2rem; - } -} \ No newline at end of file diff --git a/_sass/materialize-src/sass/components/_variables.scss b/_sass/materialize-src/sass/components/_variables.scss deleted file mode 100644 index acfc6c3b..00000000 --- a/_sass/materialize-src/sass/components/_variables.scss +++ /dev/null @@ -1,343 +0,0 @@ -// ========================================================================== -// Materialize variables -// ========================================================================== -// -// Table of Contents: -// -// 1. Colors -// 2. Badges -// 3. Buttons -// 4. Cards -// 5. Carousel -// 6. Collapsible -// 7. Chips -// 8. Date + Time Picker -// 9. Dropdown -// 10. Fonts -// 11. Forms -// 12. Global -// 13. Grid -// 14. Navigation Bar -// 15. Side Navigation -// 16. Photo Slider -// 17. Spinners | Loaders -// 18. Tabs -// 19. Tables -// 20. Toasts -// 21. Typography -// 22. Footer -// 23. Flow Text -// 24. Collections -// 25. Progress Bar - - - -// 1. Colors -// ========================================================================== - -$primary-color: color("materialize-red", "lighten-2") !default; -$primary-color-light: lighten($primary-color, 15%) !default; -$primary-color-dark: darken($primary-color, 15%) !default; - -$secondary-color: color("teal", "lighten-1") !default; -$success-color: color("green", "base") !default; -$error-color: color("red", "base") !default; -$link-color: color("light-blue", "darken-1") !default; - - -// 2. Badges -// ========================================================================== - -$badge-bg-color: $secondary-color !default; -$badge-height: 22px !default; - - -// 3. Buttons -// ========================================================================== - -// Shared styles -$button-border: none !default; -$button-background-focus: lighten($secondary-color, 4%) !default; -$button-font-size: 1rem !default; -$button-icon-font-size: 1.3rem !default; -$button-height: 36px !default; -$button-padding: 0 2rem !default; -$button-radius: 2px !default; - -// Disabled styles -$button-disabled-background: #DFDFDF !default; -$button-disabled-color: #9F9F9F !default; - -// Raised buttons -$button-raised-background: $secondary-color !default; -$button-raised-background-hover: lighten($button-raised-background, 5%) !default; -$button-raised-color: #fff !default; - -// Large buttons -$button-large-icon-font-size: 1.6rem !default; -$button-large-height: $button-height * 1.5 !default; - -// Flat buttons -$button-flat-color: #343434 !default; -$button-flat-disabled-color: lighten(#999, 10%) !default; - -// Floating buttons -$button-floating-background: $secondary-color !default; -$button-floating-background-hover: $button-floating-background !default; -$button-floating-color: #fff !default; -$button-floating-size: 40px !default; -$button-floating-large-size: 56px !default; -$button-floating-radius: 50% !default; - - -// 4. Cards -// ========================================================================== - -$card-padding: 24px !default; -$card-bg-color: #fff !default; -$card-link-color: color("orange", "accent-2") !default; -$card-link-color-light: lighten($card-link-color, 20%) !default; - - -// 5. Carousel -// ========================================================================== - -$carousel-height: 400px !default; -$carousel-item-height: $carousel-height / 2 !default; -$carousel-item-width: $carousel-item-height !default; - - -// 6. Collapsible -// ========================================================================== - -$collapsible-height: 3rem !default; -$collapsible-line-height: $collapsible-height !default; -$collapsible-header-color: #fff !default; -$collapsible-border-color: #ddd !default; - - -// 7. Chips -// ========================================================================== - -$chip-bg-color: #e4e4e4 !default; -$chip-border-color: #9e9e9e !default; -$chip-selected-color: #26a69a !default; -$chip-margin: 5px !default; - - -// 8. Date + Time Picker -// ========================================================================== - -$datepicker-display-font-size: 2.8rem; -$datepicker-weekday-color: rgba(0, 0, 0, .87) !default; -$datepicker-weekday-bg: darken($secondary-color, 7%) !default; -$datepicker-date-bg: $secondary-color !default; -$datepicker-year: rgba(255, 255, 255, .7) !default; -$datepicker-focus: rgba(0,0,0, .05) !default; -$datepicker-selected: $secondary-color !default; -$datepicker-selected-outfocus: desaturate(lighten($secondary-color, 35%), 15%) !default; - -$timepicker-clock-color: rgba(0, 0, 0, .87) !default; -$timepicker-clock-plate-bg: #eee; - - -// 9. Dropdown -// ========================================================================== - -$dropdown-bg-color: #fff !default; -$dropdown-hover-bg-color: #eee !default; -$dropdown-color: $secondary-color !default; -$dropdown-item-height: 50px !default; - - -// 10. Fonts -// ========================================================================== - -$roboto-font-path: "../fonts/roboto/" !default; - - -// 11. Forms -// ========================================================================== - -// Text Inputs + Textarea -$input-height: 3rem !default; -$input-border-color: color("grey", "base") !default; -$input-border: 1px solid $input-border-color !default; -$input-background: #fff !default; -$input-error-color: $error-color !default; -$input-success-color: $success-color !default; -$input-focus-color: $secondary-color !default; -$input-font-size: 1rem !default; -$input-margin-bottom: 20px; -$input-margin: 0 0 $input-margin-bottom 0 !default; -$input-padding: 0 !default; -$input-transition: all .3s !default; -$label-font-size: .8rem !default; -$input-disabled-color: rgba(0,0,0, .42) !default; -$input-disabled-solid-color: #949494 !default; -$input-disabled-border: 1px dotted $input-disabled-color !default; -$input-invalid-border: 1px solid $input-error-color !default; -$placeholder-text-color: lighten($input-border-color, 20%) !default; - -// Radio Buttons -$radio-fill-color: $secondary-color !default; -$radio-empty-color: #5a5a5a !default; -$radio-border: 2px solid $radio-fill-color !default; - -// Range -$range-height: 14px !default; -$range-width: 14px !default; -$track-height: 3px !default; - -// Select -$select-border: 1px solid #f2f2f2 !default; -$select-background: rgba(255, 255, 255, 0.90) !default; -$select-focus: 1px solid lighten($secondary-color, 47%) !default; -$select-option-hover: rgba(0,0,0,.06) !default; -$select-option-focus: rgba(0,0,0,.03) !default; -$select-padding: 5px !default; -$select-radius: 2px !default; -$select-disabled-color: rgba(0,0,0,.3) !default; - -// Switches -$switch-bg-color: $secondary-color !default; -$switch-checked-lever-bg: desaturate(lighten($switch-bg-color, 25%), 25%) !default; -$switch-unchecked-bg: #F1F1F1 !default; -$switch-unchecked-lever-bg: rgba(0,0,0,.38) !default; -$switch-radius: 15px !default; - - -// 12. Global -// ========================================================================== - -// Media Query Ranges -$small-screen-up: 601px !default; -$medium-screen-up: 993px !default; -$large-screen-up: 1201px !default; -$small-screen: 600px !default; -$medium-screen: 992px !default; -$large-screen: 1200px !default; - -$medium-and-up: "only screen and (min-width : #{$small-screen-up})" !default; -$large-and-up: "only screen and (min-width : #{$medium-screen-up})" !default; -$extra-large-and-up: "only screen and (min-width : #{$large-screen-up})" !default; -$small-and-down: "only screen and (max-width : #{$small-screen})" !default; -$medium-and-down: "only screen and (max-width : #{$medium-screen})" !default; -$medium-only: "only screen and (min-width : #{$small-screen-up}) and (max-width : #{$medium-screen})" !default; - - -// 13. Grid -// ========================================================================== - -$num-cols: 12 !default; -$gutter-width: 1.5rem !default; -$element-top-margin: $gutter-width/3 !default; -$element-bottom-margin: ($gutter-width*2)/3 !default; - - -// 14. Navigation Bar -// ========================================================================== - -$navbar-height: 64px !default; -$navbar-line-height: $navbar-height !default; -$navbar-height-mobile: 56px !default; -$navbar-line-height-mobile: $navbar-height-mobile !default; -$navbar-font-size: 1rem !default; -$navbar-font-color: #fff !default; -$navbar-brand-font-size: 2.1rem !default; - -// 15. Side Navigation -// ========================================================================== - -$sidenav-font-size: 14px !default; -$sidenav-font-color: rgba(0,0,0,.87) !default; -$sidenav-bg-color: #fff !default; -$sidenav-padding: 16px !default; -$sidenav-item-height: 48px !default; -$sidenav-line-height: $sidenav-item-height !default; - - -// 16. Photo Slider -// ========================================================================== - -$slider-bg-color: color('grey', 'base') !default; -$slider-bg-color-light: color('grey', 'lighten-2') !default; -$slider-indicator-color: color('green', 'base') !default; - - -// 17. Spinners | Loaders -// ========================================================================== - -$spinner-default-color: $secondary-color !default; - - -// 18. Tabs -// ========================================================================== - -$tabs-underline-color: $primary-color-light !default; -$tabs-text-color: $primary-color !default; -$tabs-bg-color: #fff !default; - - -// 19. Tables -// ========================================================================== - -$table-border-color: #d0d0d0 !default; -$table-striped-color: #f2f2f2 !default; - - -// 20. Toasts -// ========================================================================== - -$toast-height: 48px !default; -$toast-color: #323232 !default; -$toast-text-color: #fff !default; -$toast-action-color: #eeff41; - - -// 21. Typography -// ========================================================================== - -$off-black: rgba(0, 0, 0, 0.87) !default; -// Header Styles -$h1-fontsize: 4.2rem !default; -$h2-fontsize: 3.56rem !default; -$h3-fontsize: 2.92rem !default; -$h4-fontsize: 2.28rem !default; -$h5-fontsize: 1.64rem !default; -$h6-fontsize: 1rem !default; - - -// 22. Footer -// ========================================================================== - -$footer-font-color: #fff !default; -$footer-bg-color: $primary-color !default; -$footer-copyright-font-color: rgba(255,255,255,.8) !default; -$footer-copyright-bg-color: rgba(51,51,51,.08) !default; - - -// 23. Flow Text -// ========================================================================== - -$range : $large-screen - $small-screen !default; -$intervals: 20 !default; -$interval-size: $range / $intervals !default; - - -// 24. Collections -// ========================================================================== - -$collection-border-color: #e0e0e0 !default; -$collection-bg-color: #fff !default; -$collection-active-bg-color: $secondary-color !default; -$collection-active-color: lighten($secondary-color, 55%) !default; -$collection-hover-bg-color: #ddd !default; -$collection-link-color: $secondary-color !default; -$collection-line-height: 1.5rem !default; - - -// 25. Progress Bar -// ========================================================================== - -$progress-bar-color: $secondary-color !default; diff --git a/_sass/materialize-src/sass/components/_waves.scss b/_sass/materialize-src/sass/components/_waves.scss deleted file mode 100644 index b36c7181..00000000 --- a/_sass/materialize-src/sass/components/_waves.scss +++ /dev/null @@ -1,114 +0,0 @@ - -/*! - * Waves v0.6.0 - * http://fian.my.id/Waves - * - * Copyright 2014 Alfiana E. Sibuea and other contributors - * Released under the MIT license - * https://github.com/fians/Waves/blob/master/LICENSE - */ - - -.waves-effect { - position: relative; - cursor: pointer; - display: inline-block; - overflow: hidden; - user-select: none; - -webkit-tap-highlight-color: transparent; - vertical-align: middle; - z-index: 1; - transition: .3s ease-out; - - .waves-ripple { - position: absolute; - border-radius: 50%; - width: 20px; - height: 20px; - margin-top:-10px; - margin-left:-10px; - opacity: 0; - - background: rgba(0,0,0,0.2); - transition: all 0.7s ease-out; - transition-property: transform, opacity; - transform: scale(0); - pointer-events: none; - } - - // Waves Colors - &.waves-light .waves-ripple { - background-color: rgba(255, 255, 255, 0.45); - } - &.waves-red .waves-ripple { - background-color: rgba(244, 67, 54, .70); - } - &.waves-yellow .waves-ripple { - background-color: rgba(255, 235, 59, .70); - } - &.waves-orange .waves-ripple { - background-color: rgba(255, 152, 0, .70); - } - &.waves-purple .waves-ripple { - background-color: rgba(156, 39, 176, 0.70); - } - &.waves-green .waves-ripple { - background-color: rgba(76, 175, 80, 0.70); - } - &.waves-teal .waves-ripple { - background-color: rgba(0, 150, 136, 0.70); - } - - // Style input button bug. - input[type="button"], input[type="reset"], input[type="submit"] { - border: 0; - font-style: normal; - font-size: inherit; - text-transform: inherit; - background: none; - } - - img { - position: relative; - z-index: -1; - } -} - -.waves-notransition { - transition: none #{"!important"}; -} - -.waves-circle { - transform: translateZ(0); - -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%); -} - -.waves-input-wrapper { - border-radius: 0.2em; - vertical-align: bottom; - - .waves-button-input { - position: relative; - top: 0; - left: 0; - z-index: 1; - } -} - -.waves-circle { - text-align: center; - width: 2.5em; - height: 2.5em; - line-height: 2.5em; - border-radius: 50%; - -webkit-mask-image: none; -} - -.waves-block { - display: block; -} - -/* Firefox Bug: link not triggered */ -.waves-effect .waves-ripple { - z-index: -1; -} \ No newline at end of file diff --git a/_sass/materialize-src/sass/components/date_picker/_default.date.scss b/_sass/materialize-src/sass/components/date_picker/_default.date.scss deleted file mode 100644 index 39ca1f2d..00000000 --- a/_sass/materialize-src/sass/components/date_picker/_default.date.scss +++ /dev/null @@ -1,456 +0,0 @@ -/* ========================================================================== - $BASE-DATE-PICKER - ========================================================================== */ -/** - * The picker box. - */ -.picker__box { - padding: 0; - border-radius: 2px; - overflow: hidden; -} -/** - * The header containing the month and year stuff. - */ -.picker__header { - text-align: center; - position: relative; - margin-top: .75em; -} -/** - * The month and year labels. - */ -.picker__month, -.picker__year { -// font-weight: 500; - display: inline-block; - margin-left: .25em; - margin-right: .25em; -} -/** - * The month and year selectors. - */ -.picker__select--month, -.picker__select--year { - - height: 2em; - padding: 0; - margin-left: .25em; - margin-right: .25em; -} - -// Modified -.picker__select--month.browser-default { - display: inline; - background-color: #FFFFFF; - width: 40%; -} -.picker__select--year.browser-default { - display: inline; - background-color: #FFFFFF; - width: 26%; -} -.picker__select--month:focus, -.picker__select--year:focus { - border-color: $datepicker-focus; -} -/** - * The month navigation buttons. - */ -.picker__nav--prev, -.picker__nav--next { - position: absolute; - padding: .5em 1.25em; - width: 1em; - height: 1em; - box-sizing: content-box; - top: -0.25em; -} -//@media (min-width: 24.5em) { -// .picker__nav--prev, -// .picker__nav--next { -// top: -0.33em; -// } -//} -.picker__nav--prev { - left: -1em; - padding-right: 1.25em; -} -//@media (min-width: 24.5em) { -// .picker__nav--prev { -// padding-right: 1.5em; -// } -//} -.picker__nav--next { - right: -1em; - padding-left: 1.25em; -} -//@media (min-width: 24.5em) { -// .picker__nav--next { -// padding-left: 1.5em; -// } -//} - -.picker__nav--disabled, -.picker__nav--disabled:hover, -.picker__nav--disabled:before, -.picker__nav--disabled:before:hover { - cursor: default; - background: none; - border-right-color: #f5f5f5; - border-left-color: #f5f5f5; -} -/** - * The calendar table of dates - */ -.picker__table { - text-align: center; - border-collapse: collapse; - border-spacing: 0; - table-layout: fixed; - font-size: 1rem; - width: 100%; - margin-top: .75em; - margin-bottom: .5em; -} - - - -.picker__table th, .picker__table td { - text-align: center; -} - - - - - - -.picker__table td { - margin: 0; - padding: 0; -} -/** - * The weekday labels - */ -.picker__weekday { - width: 14.285714286%; - font-size: .75em; - padding-bottom: .25em; - color: #999999; - font-weight: 500; - /* Increase the spacing a tad */ -} -@media (min-height: 33.875em) { - .picker__weekday { - padding-bottom: .5em; - } -} -/** - * The days on the calendar - */ - -.picker__day--today { - position: relative; - color: #595959; - letter-spacing: -.3; - padding: .75rem 0; - font-weight: 400; - border: 1px solid transparent; - -} - -//.picker__day--today:before { -// content: " "; -// position: absolute; -// top: 2px; -// right: 2px; -// width: 0; -// height: 0; -// border-top: 0.5em solid #0059bc; -// border-left: .5em solid transparent; -//} -.picker__day--disabled:before { - border-top-color: #aaaaaa; -} - - -.picker__day--infocus:hover{ - cursor: pointer; - color: #000; - font-weight: 500; -} - -.picker__day--outfocus { - display: none; - padding: .75rem 0; - color: #fff; - -} -.picker__day--outfocus:hover { - cursor: pointer; - color: #dddddd; -// background: #b1dcfb; - font-weight: 500; -} - - -.picker__day--highlighted { -// border-color: #0089ec; -} -.picker__day--highlighted:hover, -.picker--focused .picker__day--highlighted { - cursor: pointer; -// color: #000000; -// background: #b1dcfb; -// font-weight: 500; -} -.picker__day--selected, -.picker__day--selected:hover, -.picker--focused .picker__day--selected { - - -// Circle background - border-radius: 50%; - transform: scale(.75); - background: #0089ec; - color: #ffffff; -} -.picker__day--disabled, -.picker__day--disabled:hover, -.picker--focused .picker__day--disabled { - background: #f5f5f5; - border-color: #f5f5f5; - color: #dddddd; - cursor: default; -} -.picker__day--highlighted.picker__day--disabled, -.picker__day--highlighted.picker__day--disabled:hover { - background: #bbbbbb; -} -/** - * The footer containing the "today", "clear", and "close" buttons. - */ -.picker__footer { - text-align: right; -} -.picker__button--today, -.picker__button--clear, -.picker__button--close { - border: 1px solid #ffffff; - background: #ffffff; - font-size: .8em; - padding: .66em 0; - font-weight: bold; - width: 33%; - display: inline-block; - vertical-align: bottom; -} -.picker__button--today:hover, -.picker__button--clear:hover, -.picker__button--close:hover { - cursor: pointer; - color: #000000; - background: #b1dcfb; - border-bottom-color: #b1dcfb; -} -.picker__button--today:focus, -.picker__button--clear:focus, -.picker__button--close:focus { - background: #b1dcfb; - border-color: $datepicker-focus; - outline: none; -} -.picker__button--today:before, -.picker__button--clear:before, -.picker__button--close:before { - position: relative; - display: inline-block; - height: 0; -} -.picker__button--today:before, -.picker__button--clear:before { - content: " "; - margin-right: .45em; -} -.picker__button--today:before { - top: -0.05em; - width: 0; - border-top: 0.66em solid #0059bc; - border-left: .66em solid transparent; -} -.picker__button--clear:before { - top: -0.25em; - width: .66em; - border-top: 3px solid #ee2200; -} -.picker__button--close:before { - content: "\D7"; - top: -0.1em; - vertical-align: top; - font-size: 1.1em; - margin-right: .35em; - color: #777777; -} -.picker__button--today[disabled], -.picker__button--today[disabled]:hover { - background: #f5f5f5; - border-color: #f5f5f5; - color: #dddddd; - cursor: default; -} -.picker__button--today[disabled]:before { - border-top-color: #aaaaaa; -} - -/* ========================================================================== - CUSTOM MATERIALIZE STYLES - ========================================================================== */ -/*.picker__box { - border-radius: 2px; - overflow: hidden; -}*/ - -.picker__date-display { - text-align: left; - background-color: $datepicker-date-bg; - color: #fff; - padding: 18px; - font-weight: 300; -} - -@media only screen and (min-width: 601px) { - .picker__date-display { - flex:1; - } - .picker__weekday-display { - display:block; - } - .picker__container__wrapper { - flex:2 - } -} - -.picker__nav--prev:hover, -.picker__nav--next:hover { - cursor: pointer; - color: #000000; - background: $datepicker-selected-outfocus; -} - -.picker__weekday-display { - font-weight: 500; - font-size: $datepicker-display-font-size; - margin-right: 5px; - margin-top: 4px; -} - -.picker__month-display { - //text-transform: uppercase; - font-size: $datepicker-display-font-size; - font-weight: 500; -} -.picker__day-display { - font-size: $datepicker-display-font-size; - font-weight: 500; - margin-right: 5px; -} -.picker__year-display { - font-size: 1.5rem; - font-weight: 500; - color: $datepicker-year; -} - -/*.picker__box { - padding: 0; -}*/ -.picker__calendar-container { - padding: 0 1rem; - - thead { - border: none; - } -} - -// Calendar -.picker__table { - margin-top: 0; - margin-bottom: .5em; -} - -.picker__day--infocus { - color: $datepicker-weekday-color; - letter-spacing: -.3px; - padding: 0.75rem 0; - font-weight: 400; - border: 1px solid transparent; -} -@media only screen and (min-width: 601px) { - .picker__day--infocus { - padding: 1.1rem 0; - } -} - - -//Today style -.picker__day.picker__day--today { - color: $datepicker-selected; -} - -.picker__day.picker__day--today.picker__day--selected { - color: #fff; -} - -// Table Header -.picker__weekday { - font-size: .9rem; -} - - -.picker__day--selected, -.picker__day--selected:hover, -.picker--focused .picker__day--selected { - // Circle background - border-radius: 50%; - transform: scale(.9); - background-color: $datepicker-selected; - &.picker__day--outfocus { - background-color: $datepicker-selected-outfocus; - } - color: #ffffff; -} - -.picker__footer { - text-align: right; - padding: 5px 10px; -} - -// Materialize modified -.picker__close, .picker__today, .picker__clear { - font-size: 1.1rem; - padding: 0 1rem; - color: $datepicker-selected; -} -.picker__clear { - color:#f44336; - float:left; -} - -//month nav buttons -.picker__nav--prev:before, -.picker__nav--next:before { - content: " "; - border-top: .5em solid transparent; - border-bottom: .5em solid transparent; - border-right: 0.75em solid #676767; - width: 0; - height: 0; - display: block; - margin: 0 auto; -} -.picker__nav--next:before { - border-right: 0; - border-left: 0.75em solid #676767; -} -button.picker__today:focus, button.picker__clear:focus, button.picker__close:focus { - background-color: $datepicker-selected-outfocus; -} diff --git a/_sass/materialize-src/sass/components/date_picker/_default.scss b/_sass/materialize-src/sass/components/date_picker/_default.scss deleted file mode 100644 index b091e55d..00000000 --- a/_sass/materialize-src/sass/components/date_picker/_default.scss +++ /dev/null @@ -1,212 +0,0 @@ -/* ========================================================================== - $BASE-PICKER - ========================================================================== */ -/** - * Note: the root picker element should *NOT* be styled more than what's here. - */ -.picker { - font-size: 16px; - text-align: left; - line-height: 1.2; - color: #000000; - position: absolute; - z-index: 10000; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - outline: none; -} -/** - * The picker input element. - */ -.picker__input { - cursor: default; -} -/** - * When the picker is opened, the input element is "activated". - */ -.picker__input.picker__input--active { - border-color: #0089ec; -} -/** - * The holder is the only "scrollable" top-level container element. - */ -.picker__holder { - width: 100%; - overflow-y: auto; - -webkit-overflow-scrolling: touch; -} - -/*! - * Default mobile-first, responsive styling for pickadate.js - * Demo: http://amsul.github.io/pickadate.js - */ -/** - * Note: the root picker element should *NOT* be styled more than what's here. - */ -/** - * Make the holder and frame fullscreen. - */ -.picker__holder, -.picker__frame { - bottom: 0; - left: 0; - right: 0; - top: 100%; -} -/** - * The holder should overlay the entire screen. - */ -.picker__holder { - position: fixed; - -webkit-transition: background 0.15s ease-out, top 0s 0.15s; - -moz-transition: background 0.15s ease-out, top 0s 0.15s; - transition: background 0.15s ease-out, top 0s 0.15s; - -webkit-backface-visibility: hidden; -} -/** - * The frame that bounds the box contents of the picker. - */ -.picker__frame { - position: absolute; - margin: 0 auto; - min-width: 256px; - -// picker width - width: 300px; - max-height: 350px; - - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; - filter: alpha(opacity=0); - -moz-opacity: 0; - opacity: 0; - -webkit-transition: all 0.15s ease-out; - -moz-transition: all 0.15s ease-out; - transition: all 0.15s ease-out; -} -@media (min-height: 28.875em) { - .picker__frame { - overflow: visible; - top: auto; - bottom: -100%; - max-height: 80%; - } -} -@media (min-height: 40.125em) { - .picker__frame { - margin-bottom: 7.5%; - } -} -/** - * The wrapper sets the stage to vertically align the box contents. - */ -.picker__wrap { - display: table; - width: 100%; - height: 100%; -} -@media (min-height: 28.875em) { - .picker__wrap { - display: block; - } -} -/** - * The box contains all the picker contents. - */ -.picker__box { - background: #ffffff; - display: table-cell; - vertical-align: middle; -} -//@media (min-height: 26.5em) { -// .picker__box { -//// font-size: 1.25em; -// } -//} -@media (min-height: 28.875em) { - .picker__box { - display: block; - -// picker header font-size -// font-size: 1rem; - - border: 1px solid #777777; - border-top-color: #898989; - border-bottom-width: 0; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; - -webkit-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); - -moz-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); - box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); - } -} -//@media (min-height: 40.125em) { -// .picker__box { -// font-size: 1.1rem; -// border-bottom-width: 1px; -// -webkit-border-radius: 5px; -// -moz-border-radius: 5px; -// border-radius: 5px; -// } -//} -/** - * When the picker opens... - */ -.picker--opened .picker__holder { - top: 0; - background: transparent; - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#1E000000,endColorstr=#1E000000)"; - zoom: 1; - background: rgba(0, 0, 0, 0.32); - -webkit-transition: background 0.15s ease-out; - -moz-transition: background 0.15s ease-out; - transition: background 0.15s ease-out; -} -.picker--opened .picker__frame { - top: 0; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); - -moz-opacity: 1; - opacity: 1; -} -@media (min-height: 35.875em) { - .picker--opened .picker__frame { - top: 10%; - bottom: auto; - } -} -/** - * For `large` screens, transform into an inline picker. - */ - -/* ========================================================================== - CUSTOM MATERIALIZE STYLES - ========================================================================== */ - -.picker__input.picker__input--active { - border-color: color("blue", "lighten-5"); -} - -.picker__frame { - margin: 0 auto; - max-width: 325px; -} - -@media (min-height: 38.875em) { - .picker--opened .picker__frame { - top: 10%; - bottom: auto; - } -} - -@media only screen and (min-width: 601px) { - .picker__box { - display:flex; - } - .picker__frame { - width: 80%; - max-width:600px; - } -} diff --git a/_sass/materialize-src/sass/components/date_picker/_default.time.scss b/_sass/materialize-src/sass/components/date_picker/_default.time.scss deleted file mode 100644 index ae0b778f..00000000 --- a/_sass/materialize-src/sass/components/date_picker/_default.time.scss +++ /dev/null @@ -1,267 +0,0 @@ -/* ========================================================================== - $BASE-TIME-PICKER - ========================================================================== */ -/** - * The list of times. - */ -.picker__list { - list-style: none; - padding: 0.75em 0 4.2em; - margin: 0; -} -/** - * The times on the clock. - */ -.picker__list-item { - border-bottom: 1px solid #ddd; - border-top: 1px solid #ddd; - margin-bottom: -1px; - position: relative; - background: #fff; - padding: .75em 1.25em; -} -@media (min-height: 46.75em) { - .picker__list-item { - padding: .5em 1em; - } -} -/* Hovered time */ -.picker__list-item:hover { - cursor: pointer; - color: #000; - background: #b1dcfb; - border-color: #0089ec; - z-index: 10; -} -/* Highlighted and hovered/focused time */ -.picker__list-item--highlighted { - border-color: #0089ec; - z-index: 10; -} -.picker__list-item--highlighted:hover, -.picker--focused .picker__list-item--highlighted { - cursor: pointer; - color: #000; - background: #b1dcfb; -} -/* Selected and hovered/focused time */ -.picker__list-item--selected, -.picker__list-item--selected:hover, -.picker--focused .picker__list-item--selected { - background: #0089ec; - color: #fff; - z-index: 10; -} -/* Disabled time */ -.picker__list-item--disabled, -.picker__list-item--disabled:hover, -.picker--focused .picker__list-item--disabled { - background: #f5f5f5; - border-color: #f5f5f5; - color: #ddd; - cursor: default; - border-color: #ddd; - z-index: auto; -} -/** - * The clear button - */ -.picker--time .picker__button--clear { - display: block; - width: 80%; - margin: 1em auto 0; - padding: 1em 1.25em; - background: none; - border: 0; - font-weight: 500; - font-size: .67em; - text-align: center; - text-transform: uppercase; - color: $timepicker-clock-color; -} -.picker--time .picker__button--clear:hover, -.picker--time .picker__button--clear:focus { - color: #000; - background: #b1dcfb; - background: #ee2200; - border-color: #ee2200; - cursor: pointer; - color: #fff; - outline: none; -} -.picker--time .picker__button--clear:before { - top: -0.25em; - color: $timepicker-clock-color; - font-size: 1.25em; - font-weight: bold; -} -.picker--time .picker__button--clear:hover:before, -.picker--time .picker__button--clear:focus:before { - color: #fff; -} - -/* ========================================================================== - $DEFAULT-TIME-PICKER - ========================================================================== */ -/** - * The frame the bounds the time picker. - */ -.picker--time .picker__frame { - min-width: 256px; - max-width: 320px; -} -/** - * The picker box. - */ -.picker--time .picker__box { - font-size: 1em; - background: #f2f2f2; - padding: 0; -} -@media (min-height: 40.125em) { - .picker--time .picker__box { - margin-bottom: 5em; - } -} - -/* ========================================================================== - $DEFAULT-TIME-PICKER - ========================================================================== */ -.clockpicker-display { - font-size: 4rem; - font-weight: bold; - text-align: center; - color: rgba(255, 255, 255, 0.6); - font-weight: 400; - clear: both; - position: relative; -} - -.clockpicker-span-am-pm { - font-size: 1.3rem; - position: absolute; - right: 1rem; - bottom: 0.3rem; - line-height: 2rem; - font-weight: 500; -} -@media only screen and (min-width: 601px) { - .clockpicker-display { - top: 32%; - } - .clockpicker-span-am-pm { - position: relative; - right: auto; - bottom: auto; - text-align: center; - margin-top: 1.2rem; - } -} - - -.text-primary{ - color: rgba(255, 255, 255, 1) -} -.clockpicker-span-hours { - margin-right: 3px; -} -.clockpicker-span-minutes { - margin-left: 3px; -} - -.clockpicker-span-hours, -.clockpicker-span-minutes, -.clockpicker-span-am-pm div { - cursor: pointer; -} -.clockpicker-moving { - cursor: move; -} -.clockpicker-plate { - background-color: $timepicker-clock-plate-bg; - border-radius: 50%; - width: 270px; - height: 270px; - overflow: visible; - position: relative; - margin: auto; - margin-top: 25px; - margin-bottom: 5px; - user-select: none; -} -.clockpicker-canvas, -.clockpicker-dial { - width: 270px; - height: 270px; - position: absolute; - left: -1px; - top: -1px; -} -.clockpicker-minutes { - visibility: hidden; -} -.clockpicker-tick { - border-radius: 50%; - color: $timepicker-clock-color; - line-height: 40px; - text-align: center; - width: 40px; - height: 40px; - position: absolute; - cursor: pointer; -} -.clockpicker-tick.active, -.clockpicker-tick:hover { - background-color: transparentize($secondary-color, .75); -} -.clockpicker-dial { - -webkit-transition: -webkit-transform 350ms, opacity 350ms; - -moz-transition: -moz-transform 350ms, opacity 350ms; - -ms-transition: -ms-transform 350ms, opacity 350ms; - -o-transition: -o-transform 350ms, opacity 350ms; - transition: transform 350ms, opacity 350ms; -} -.clockpicker-dial-out { - opacity: 0; -} -.clockpicker-hours.clockpicker-dial-out { - -webkit-transform: scale(1.2, 1.2); - -moz-transform: scale(1.2, 1.2); - -ms-transform: scale(1.2, 1.2); - -o-transform: scale(1.2, 1.2); - transform: scale(1.2, 1.2); -} -.clockpicker-minutes.clockpicker-dial-out { - -webkit-transform: scale(.8, .8); - -moz-transform: scale(.8, .8); - -ms-transform: scale(.8, .8); - -o-transform: scale(.8, .8); - transform: scale(.8, .8); -} -.clockpicker-canvas { - -webkit-transition: opacity 175ms; - -moz-transition: opacity 175ms; - -ms-transition: opacity 175ms; - -o-transition: opacity 175ms; - transition: opacity 175ms; -} -.clockpicker-canvas-out { - opacity: 0.25; -} -.clockpicker-canvas-bearing { - stroke: none; - fill: $secondary-color; -} -.clockpicker-canvas-bg { - stroke: none; - fill: $secondary-color; -} -.clockpicker-canvas-bg-trans { - fill: $secondary-color; -} -.clockpicker-canvas line { - stroke: $secondary-color; - stroke-width: 4; - stroke-linecap: round; - /*shape-rendering: crispEdges;*/ -} diff --git a/_sass/materialize-src/sass/components/forms/_checkboxes.scss b/_sass/materialize-src/sass/components/forms/_checkboxes.scss deleted file mode 100644 index 60334b28..00000000 --- a/_sass/materialize-src/sass/components/forms/_checkboxes.scss +++ /dev/null @@ -1,210 +0,0 @@ -/* Checkboxes - ========================================================================== */ - -/* CUSTOM CSS CHECKBOXES */ -form p { - margin-bottom: 10px; - text-align: left; -} - -form p:last-child { - margin-bottom: 0; -} - -/* Remove default checkbox */ -[type="checkbox"]:not(:checked), -[type="checkbox"]:checked { - position: absolute; - opacity: 0; - pointer-events: none; -} - -// Checkbox Styles -[type="checkbox"] { - // Text Label Style - + label { - position: relative; - padding-left: 35px; - cursor: pointer; - display: inline-block; - height: 25px; - line-height: 25px; - font-size: 1rem; - user-select: none; - } - - /* checkbox aspect */ - + label:before, - &:not(.filled-in) + label:after { - content: ''; - position: absolute; - top: 0; - left: 0; - width: 18px; - height: 18px; - z-index: 0; - border: 2px solid $radio-empty-color; - border-radius: 1px; - margin-top: 2px; - transition: .2s; - } - - &:not(.filled-in) + label:after { - border: 0; - transform: scale(0); - } - - &:not(:checked):disabled + label:before { - border: none; - background-color: $input-disabled-color; - } - - // Focused styles - &.tabbed:focus + label:after { - transform: scale(1); - border: 0; - border-radius: 50%; - box-shadow: 0 0 0 10px rgba(0,0,0,.1); - background-color: rgba(0,0,0,.1); - } -} - -[type="checkbox"]:checked { - + label:before { - top: -4px; - left: -5px; - width: 12px; - height: 22px; - border-top: 2px solid transparent; - border-left: 2px solid transparent; - border-right: $radio-border; - border-bottom: $radio-border; - transform: rotate(40deg); - backface-visibility: hidden; - transform-origin: 100% 100%; - } - - &:disabled + label:before { - border-right: 2px solid $input-disabled-color; - border-bottom: 2px solid $input-disabled-color; - } -} - -/* Indeterminate checkbox */ -[type="checkbox"]:indeterminate { - +label:before { - top: -11px; - left: -12px; - width: 10px; - height: 22px; - border-top: none; - border-left: none; - border-right: $radio-border; - border-bottom: none; - transform: rotate(90deg); - backface-visibility: hidden; - transform-origin: 100% 100%; - } - - // Disabled indeterminate - &:disabled + label:before { - border-right: 2px solid $input-disabled-color; - background-color: transparent; - } -} - -// Filled in Style -[type="checkbox"].filled-in { - // General - + label:after { - border-radius: 2px; - } - - + label:before, - + label:after { - content: ''; - left: 0; - position: absolute; - /* .1s delay is for check animation */ - transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s; - z-index: 1; - } - - // Unchecked style - &:not(:checked) + label:before { - width: 0; - height: 0; - border: 3px solid transparent; - left: 6px; - top: 10px; - transform: rotateZ(37deg); - transform-origin: 100% 100%; - } - - &:not(:checked) + label:after { - height: 20px; - width: 20px; - background-color: transparent; - border: 2px solid $radio-empty-color; - top: 0px; - z-index: 0; - } - - // Checked style - &:checked { - + label:before { - top: 0; - left: 1px; - width: 8px; - height: 13px; - border-top: 2px solid transparent; - border-left: 2px solid transparent; - border-right: 2px solid $input-background; - border-bottom: 2px solid $input-background; - transform: rotateZ(37deg); - transform-origin: 100% 100%; - } - - + label:after { - top: 0; - width: 20px; - height: 20px; - border: 2px solid $secondary-color; - background-color: $secondary-color; - z-index: 0; - } - } - - // Focused styles - &.tabbed:focus + label:after { - border-radius: 2px; - border-color: $radio-empty-color; - background-color: rgba(0,0,0,.1); - } - - &.tabbed:checked:focus + label:after { - border-radius: 2px; - background-color: $secondary-color; - border-color: $secondary-color; - } - - // Disabled style - &:disabled:not(:checked) + label:before { - background-color: transparent; - border: 2px solid transparent; - } - - &:disabled:not(:checked) + label:after { - border-color: transparent; - background-color: $input-disabled-solid-color; - } - - &:disabled:checked + label:before { - background-color: transparent; - } - - &:disabled:checked + label:after { - background-color: $input-disabled-solid-color; - border-color: $input-disabled-solid-color; - } -} diff --git a/_sass/materialize-src/sass/components/forms/_file-input.scss b/_sass/materialize-src/sass/components/forms/_file-input.scss deleted file mode 100644 index e0f7ef73..00000000 --- a/_sass/materialize-src/sass/components/forms/_file-input.scss +++ /dev/null @@ -1,44 +0,0 @@ -/* File Input - ========================================================================== */ - -.file-field { - position: relative; - - .file-path-wrapper { - overflow: hidden; - padding-left: 10px; - } - - input.file-path { width: 100%; } - - .btn { - float: left; - height: $input-height; - line-height: $input-height; - } - - span { - cursor: pointer; - } - - input[type=file] { - - // Needed to override webkit button - &::-webkit-file-upload-button { - display: none; - } - - position: absolute; - top: 0; - right: 0; - left: 0; - bottom: 0; - width: 100%; - margin: 0; - padding: 0; - font-size: 20px; - cursor: pointer; - opacity: 0; - filter: alpha(opacity=0); - } -} diff --git a/_sass/materialize-src/sass/components/forms/_forms.scss b/_sass/materialize-src/sass/components/forms/_forms.scss deleted file mode 100644 index 4c19f4c8..00000000 --- a/_sass/materialize-src/sass/components/forms/_forms.scss +++ /dev/null @@ -1,22 +0,0 @@ -// Remove Focus Boxes -select:focus { - outline: $select-focus; -} - -button:focus { - outline: none; - background-color: $button-background-focus; -} - -label { - font-size: $label-font-size; - color: $input-border-color; -} - -@import 'input-fields'; -@import 'radio-buttons'; -@import 'checkboxes'; -@import 'switches'; -@import 'select'; -@import 'file-input'; -@import 'range'; diff --git a/_sass/materialize-src/sass/components/forms/_input-fields.scss b/_sass/materialize-src/sass/components/forms/_input-fields.scss deleted file mode 100644 index ffdf5222..00000000 --- a/_sass/materialize-src/sass/components/forms/_input-fields.scss +++ /dev/null @@ -1,333 +0,0 @@ -/* Text Inputs + Textarea - ========================================================================== */ - -/* Style Placeholders */ - -::placeholder { - color: $placeholder-text-color; -} - -/* Text inputs */ - -input:not([type]), -input[type=text]:not(.browser-default), -input[type=password]:not(.browser-default), -input[type=email]:not(.browser-default), -input[type=url]:not(.browser-default), -input[type=time]:not(.browser-default), -input[type=date]:not(.browser-default), -input[type=datetime]:not(.browser-default), -input[type=datetime-local]:not(.browser-default), -input[type=tel]:not(.browser-default), -input[type=number]:not(.browser-default), -input[type=search]:not(.browser-default), -textarea.materialize-textarea { - - // General Styles - background-color: transparent; - border: none; - border-bottom: $input-border; - border-radius: 0; - outline: none; - height: $input-height; - width: 100%; - font-size: $input-font-size; - margin: $input-margin; - padding: $input-padding; - box-shadow: none; - box-sizing: content-box; - transition: $input-transition; - - // Disabled input style - &:disabled, - &[readonly="readonly"] { - color: $input-disabled-color; - border-bottom: $input-disabled-border; - } - - // Disabled label style - &:disabled+label, - &[readonly="readonly"]+label { - color: $input-disabled-color; - } - - // Focused input style - &:focus:not([readonly]) { - border-bottom: 1px solid $input-focus-color; - box-shadow: 0 1px 0 0 $input-focus-color; - } - - // Focused label style - &:focus:not([readonly])+label { - color: $input-focus-color; - } - - // Valid Input Style - &.valid, - &:focus.valid { - @extend %valid-input-style; - } - - // Custom Success Message - &.valid + label:after, - &:focus.valid + label:after { - @extend %custom-success-message; - } - - // Invalid Input Style - &.invalid, - &:focus.invalid { - @extend %invalid-input-style; - } - - // Custom Error message - &.invalid + label:after, - &:focus.invalid + label:after { - @extend %custom-error-message; - } - - // Full width label when using validate for error messages - &.validate + label { - width: 100%; - } - - // Form Message Shared Styles - & + label:after { - @extend %input-after-style; - } - - // TODO: Remove once input fields are reworked to support validation messages better - &.invalid + label:after, - &.valid + label:after{ - display: none; - } - - &.invalid + label.active:after, - &.valid + label.active:after{ - display: block; - } -} - - -/* Validation Sass Placeholders */ -%valid-input-style { - border-bottom: 1px solid $input-success-color; - box-shadow: 0 1px 0 0 $input-success-color; -} -%invalid-input-style { - border-bottom: $input-invalid-border; - box-shadow: 0 1px 0 0 $input-error-color; -} -%custom-success-message { - content: attr(data-success); - color: $input-success-color; - opacity: 1; - transform: translateY(9px); -} -%custom-error-message { - content: attr(data-error); - color: $input-error-color; - opacity: 1; - transform: translateY(9px); -} -%input-after-style { - display: block; - content: ""; - position: absolute; - top: 100%; - left: 0; - opacity: 0; - transition: .2s opacity ease-out, .2s color ease-out; -} - - -// Styling for input field wrapper -.input-field { - // Inline styles - &.inline { - display: inline-block; - vertical-align: middle; - margin-left: 5px; - - input, - .select-dropdown { - margin-bottom: 1rem; - } - } - - // Gutter spacing - &.col { - label { - left: $gutter-width / 2; - } - - .prefix ~ label, - .prefix ~ .validate ~ label { - width: calc(100% - 3rem - #{$gutter-width}); - } - } - - position: relative; - margin-top: 1rem; - - label { - color: $input-border-color; - position: absolute; - top: 0; - left: 0; - height: 100%; - font-size: 1rem; - cursor: text; - transition: transform .2s ease-out; - transform-origin: 0% 100%; - text-align: initial; - transform: translateY(12px); - pointer-events: none; - - &:not(.label-icon).active { - transform: translateY(-14px) scale(.8); - transform-origin: 0 0; - } - } - - // Prefix Icons - .prefix { - position: absolute; - width: $input-height; - font-size: 2rem; - transition: color .2s; - - &.active { color: $input-focus-color; } - } - - .prefix ~ input, - .prefix ~ textarea, - .prefix ~ label, - .prefix ~ .validate ~ label, - .prefix ~ .autocomplete-content { - margin-left: 3rem; - width: 92%; - width: calc(100% - 3rem); - } - - .prefix ~ label { margin-left: 3rem; } - - @media #{$medium-and-down} { - .prefix ~ input { - width: 86%; - width: calc(100% - 3rem); - } - } - - @media #{$small-and-down} { - .prefix ~ input { - width: 80%; - width: calc(100% - 3rem); - } - } -} - - -/* Search Field */ - -.input-field input[type=search] { - display: block; - line-height: inherit; - - .nav-wrapper & { - height: inherit; - padding-left: 4rem; - width: calc(100% - 4rem); - border: 0; - box-shadow: none; - } - - &:focus { - background-color: $input-background; - border: 0; - box-shadow: none; - color: #444; - - & + label i, - & ~ .mdi-navigation-close, - & ~ .material-icons { - color: #444; - } - } - - & + label { - left: 1rem; - } - - & ~ .mdi-navigation-close, - & ~ .material-icons { - position: absolute; - top: 0; - right: 1rem; - color: transparent; - cursor: pointer; - font-size: 2rem; - transition: .3s color; - } -} - - -/* Textarea */ - -// Default textarea -textarea { - width: 100%; - height: $input-height; - background-color: transparent; - - &.materialize-textarea { - // Fixes validation messages for dynamic textareas - &.validate + label { - &::after { - top: calc(100% - 12px); - } - &:not(.label-icon).active { - transform: translateY(-25px); - } - height: 100%; - } - - overflow-y: hidden; /* prevents scroll bar flash */ - padding: .8rem 0 1.6rem 0; /* prevents text jump on Enter keypress */ - resize: none; - min-height: $input-height; - } -} - -// For textarea autoresize -.hiddendiv { - display: none; - white-space: pre-wrap; - word-wrap: break-word; - overflow-wrap: break-word; /* future version of deprecated 'word-wrap' */ - padding-top: 1.2rem; /* prevents text jump on Enter keypress */ - - // Reduces repaints - position: absolute; - top: 0; -} - - -/* Autocomplete */ -.autocomplete-content { - margin-top: -1 * $input-margin-bottom; - margin-bottom: $input-margin-bottom; - display: block; - opacity: 1; - position: static; - - li { - .highlight { color: #444; } - - img { - height: $dropdown-item-height - 10; - width: $dropdown-item-height - 10; - margin: 5px 15px; - } - } -} diff --git a/_sass/materialize-src/sass/components/forms/_radio-buttons.scss b/_sass/materialize-src/sass/components/forms/_radio-buttons.scss deleted file mode 100644 index ca82a960..00000000 --- a/_sass/materialize-src/sass/components/forms/_radio-buttons.scss +++ /dev/null @@ -1,115 +0,0 @@ -/* Radio Buttons - ========================================================================== */ - -// Remove default Radio Buttons -[type="radio"]:not(:checked), -[type="radio"]:checked { - position: absolute; - opacity: 0; - pointer-events: none; -} - -[type="radio"]:not(:checked) + label, -[type="radio"]:checked + label { - position: relative; - padding-left: 35px; - cursor: pointer; - display: inline-block; - height: 25px; - line-height: 25px; - font-size: 1rem; - transition: .28s ease; - user-select: none; -} - -[type="radio"] + label:before, -[type="radio"] + label:after { - content: ''; - position: absolute; - left: 0; - top: 0; - margin: 4px; - width: 16px; - height: 16px; - z-index: 0; - transition: .28s ease; -} - -/* Unchecked styles */ -[type="radio"]:not(:checked) + label:before, -[type="radio"]:not(:checked) + label:after, -[type="radio"]:checked + label:before, -[type="radio"]:checked + label:after, -[type="radio"].with-gap:checked + label:before, -[type="radio"].with-gap:checked + label:after { - border-radius: 50%; -} - -[type="radio"]:not(:checked) + label:before, -[type="radio"]:not(:checked) + label:after { - border: 2px solid $radio-empty-color; -} - -[type="radio"]:not(:checked) + label:after { - transform: scale(0); -} - -/* Checked styles */ -[type="radio"]:checked + label:before { - border: 2px solid transparent; -} - -[type="radio"]:checked + label:after, -[type="radio"].with-gap:checked + label:before, -[type="radio"].with-gap:checked + label:after { - border: $radio-border; -} - -[type="radio"]:checked + label:after, -[type="radio"].with-gap:checked + label:after { - background-color: $radio-fill-color; -} - -[type="radio"]:checked + label:after { - transform: scale(1.02); -} - -/* Radio With gap */ -[type="radio"].with-gap:checked + label:after { - transform: scale(.5); -} - -/* Focused styles */ -[type="radio"].tabbed:focus + label:before { - box-shadow: 0 0 0 10px rgba(0,0,0,.1); -} - -/* Disabled Radio With gap */ -[type="radio"].with-gap:disabled:checked + label:before { - border: 2px solid $input-disabled-color; -} - -[type="radio"].with-gap:disabled:checked + label:after { - border: none; - background-color: $input-disabled-color; -} - -/* Disabled style */ -[type="radio"]:disabled:not(:checked) + label:before, -[type="radio"]:disabled:checked + label:before { - background-color: transparent; - border-color: $input-disabled-color; -} - -[type="radio"]:disabled + label { - color: $input-disabled-color; -} - -[type="radio"]:disabled:not(:checked) + label:before { - border-color: $input-disabled-color; -} - -[type="radio"]:disabled:checked + label:after { - background-color: $input-disabled-color; - border-color: $input-disabled-solid-color; -} diff --git a/_sass/materialize-src/sass/components/forms/_range.scss b/_sass/materialize-src/sass/components/forms/_range.scss deleted file mode 100644 index d37ff7ed..00000000 --- a/_sass/materialize-src/sass/components/forms/_range.scss +++ /dev/null @@ -1,160 +0,0 @@ -/* Range - ========================================================================== */ - -.range-field { - position: relative; -} - -input[type=range], -input[type=range] + .thumb { - @extend .no-select; - cursor: pointer; -} - -input[type=range] { - position: relative; - background-color: transparent; - border: none; - outline: none; - width: 100%; - margin: 15px 0; - padding: 0; - - &:focus { - outline: none; - } -} - -input[type=range] + .thumb { - position: absolute; - top: 10px; - left: 0; - border: none; - height: 0; - width: 0; - border-radius: 50%; - background-color: $radio-fill-color; - margin-left: 7px; - - transform-origin: 50% 50%; - transform: rotate(-45deg); - - .value { - display: block; - width: 30px; - text-align: center; - color: $radio-fill-color; - font-size: 0; - transform: rotate(45deg); - } - - &.active { - border-radius: 50% 50% 50% 0; - - .value { - color: $input-background; - margin-left: -1px; - margin-top: 8px; - font-size: 10px; - } - } -} - -// WebKit -input[type=range] { - -webkit-appearance: none; -} - -input[type=range]::-webkit-slider-runnable-track { - height: $track-height; - background: #c2c0c2; - border: none; -} - -input[type=range]::-webkit-slider-thumb { - -webkit-appearance: none; - border: none; - height: $range-height; - width: $range-width; - border-radius: 50%; - background-color: $radio-fill-color; - transform-origin: 50% 50%; - margin: -5px 0 0 0; - transition: .3s; -} - -input[type=range]:focus::-webkit-slider-runnable-track { - background: #ccc; -} - -// FireFox -input[type=range] { - /* fix for FF unable to apply focus style bug */ - border: 1px solid white; - - /*required for proper track sizing in FF*/ -} - -input[type=range]::-moz-range-track { - height: $track-height; - background: #ddd; - border: none; -} - -input[type=range]::-moz-range-thumb { - border: none; - height: $range-height; - width: $range-width; - border-radius: 50%; - background: $radio-fill-color; - margin-top: -5px; -} - -// hide the outline behind the border -input[type=range]:-moz-focusring { - outline: 1px solid #fff; - outline-offset: -1px; -} - -input[type=range]:focus::-moz-range-track { - background: #ccc; -} - -// IE 10+ -input[type=range]::-ms-track { - height: $track-height; - - // remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead - background: transparent; - - // leave room for the larger thumb to overflow with a transparent border */ - border-color: transparent; - border-width: 6px 0; - - /*remove default tick marks*/ - color: transparent; -} - -input[type=range]::-ms-fill-lower { - background: #777; -} - -input[type=range]::-ms-fill-upper { - background: #ddd; -} - -input[type=range]::-ms-thumb { - border: none; - height: $range-height; - width: $range-width; - border-radius: 50%; - background: $radio-fill-color; -} - -input[type=range]:focus::-ms-fill-lower { - background: #888; -} - -input[type=range]:focus::-ms-fill-upper { - background: #ccc; -} diff --git a/_sass/materialize-src/sass/components/forms/_select.scss b/_sass/materialize-src/sass/components/forms/_select.scss deleted file mode 100644 index bc7208e8..00000000 --- a/_sass/materialize-src/sass/components/forms/_select.scss +++ /dev/null @@ -1,182 +0,0 @@ -/* Select Field - ========================================================================== */ - -select { display: none; } -select.browser-default { display: block; } - -select { - background-color: $select-background; - width: 100%; - padding: $select-padding; - border: $select-border; - border-radius: $select-radius; - height: $input-height; -} - - -.input-field { - & > select { - display: block; - position: absolute; - width: 0; - pointer-events: none; - height: 0; - top: 0; - left: 0; - opacity: 0; - } -} - -.select-label { - position: absolute; -} - -.select-wrapper { - &.valid { - & > input.select-dropdown { - @extend %valid-input-style; - } - - & + label:after { - @extend %custom-success-message; - } - } - - &.invalid { - & > input.select-dropdown { - @extend %invalid-input-style; - } - - & + label:after { - @extend %custom-error-message; - } - } - - &.valid + label, - &.invalid + label { - width: 100%; - pointer-events: none; - } - - & + label:after { - @extend %input-after-style; - } - - position: relative; - - input.select-dropdown { - position: relative; - cursor: pointer; - background-color: transparent; - border: none; - border-bottom: $input-border; - outline: none; - height: $input-height; - line-height: $input-height; - width: 100%; - font-size: $input-font-size; - margin: $input-margin; - padding: 0; - display: block; - user-select:none; - } - - span.caret { - color: initial; - position: absolute; - right: 0; - top: 0; - bottom: 0; - height: 10px; - margin: auto 0; - font-size: 10px; - line-height: 10px; - } - - & + label { - position: absolute; - top: -26px; - font-size: $label-font-size; - } -} - -// Disabled styles -select:disabled { - color: $input-disabled-color; -} - -.select-wrapper.disabled { - span.caret, - & + label { - color: $input-disabled-color; - } -} - -.select-wrapper input.select-dropdown:disabled { - color: $input-disabled-color; - cursor: default; - user-select: none; -} - -.select-wrapper i { - color: $select-disabled-color; -} - -.select-dropdown li.disabled, -.select-dropdown li.disabled > span, -.select-dropdown li.optgroup { - color: $select-disabled-color; - background-color: transparent; -} - -.select-dropdown.dropdown-content { - li { - &.active { - background-color: transparent; - } - - &:hover { - background-color: $select-option-hover; - } - - &.selected { - background-color: $select-option-focus; - } - } -} - -// Prefix Icons -.prefix ~ .select-wrapper { - margin-left: 3rem; - width: 92%; - width: calc(100% - 3rem); -} - -.prefix ~ label { margin-left: 3rem; } - -// Icons -.select-dropdown li { - img { - height: $dropdown-item-height - 10; - width: $dropdown-item-height - 10; - margin: 5px 15px; - float: right; - } -} - -// Optgroup styles -.select-dropdown li.optgroup { - border-top: 1px solid $dropdown-hover-bg-color; - - &.selected > span { - color: rgba(0, 0, 0, .7); - } - - & > span { - color: rgba(0, 0, 0, .4); - } - - & ~ li.optgroup-option { - padding-left: 1rem; - } -} diff --git a/_sass/materialize-src/sass/components/forms/_switches.scss b/_sass/materialize-src/sass/components/forms/_switches.scss deleted file mode 100644 index 3296b12c..00000000 --- a/_sass/materialize-src/sass/components/forms/_switches.scss +++ /dev/null @@ -1,89 +0,0 @@ -/* Switch - ========================================================================== */ - -.switch, -.switch * { - -webkit-tap-highlight-color: transparent; - user-select: none; -} - -.switch label { - cursor: pointer; -} - -.switch label input[type=checkbox] { - opacity: 0; - width: 0; - height: 0; - - &:checked + .lever { - background-color: $switch-checked-lever-bg; - - &:before, &:after { - left: 18px; - } - - &:after { - background-color: $switch-bg-color; - } - } -} - -.switch label .lever { - content: ""; - display: inline-block; - position: relative; - width: 36px; - height: 14px; - background-color: $switch-unchecked-lever-bg; - border-radius: $switch-radius; - margin-right: 10px; - transition: background 0.3s ease; - vertical-align: middle; - margin: 0 16px; - - &:before, &:after { - content: ""; - position: absolute; - display: inline-block; - width: 20px; - height: 20px; - border-radius: 50%; - left: 0; - top: -3px; - transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease; - } - - &:before { - background-color: transparentize($switch-bg-color, .85); - } - - &:after { - background-color: $switch-unchecked-bg; - box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12); - } -} - -// Switch active style -input[type=checkbox]:checked:not(:disabled) ~ .lever:active::before, -input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::before { - transform: scale(2.4); - background-color: transparentize($switch-bg-color, .85); -} - -input[type=checkbox]:not(:disabled) ~ .lever:active:before, -input[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::before { - transform: scale(2.4); - background-color: rgba(0,0,0,.08); -} - -// Disabled Styles -.switch input[type=checkbox][disabled] + .lever { - cursor: default; - background-color: rgba(0,0,0,.12); -} - -.switch label input[type=checkbox][disabled] + .lever:after, -.switch label input[type=checkbox][disabled]:checked + .lever:after { - background-color: $input-disabled-solid-color; -} diff --git a/_sass/materialize-src/sass/materialize.scss b/_sass/materialize-src/sass/materialize.scss deleted file mode 100644 index 7ce0b572..00000000 --- a/_sass/materialize-src/sass/materialize.scss +++ /dev/null @@ -1,42 +0,0 @@ -//@charset "UTF-8"; - -// Colors -@import "components/color"; - -// Variables; -@import "components/variables"; - -// Reset -@import "components/normalize"; - -// components -@import "components/global"; -@import "components/badges"; -@import "components/icons-material-design"; -@import "components/grid"; -@import "components/navbar"; -@import "components/roboto"; -@import "components/typography"; -@import "components/transitions"; -@import "components/cards"; -@import "components/toast"; -@import "components/tabs"; -@import "components/tooltip"; -@import "components/buttons"; -@import "components/dropdown"; -@import "components/waves"; -@import "components/modal"; -@import "components/collapsible"; -@import "components/chips"; -@import "components/materialbox"; -@import "components/forms/forms"; -@import "components/table_of_contents"; -@import "components/sideNav"; -@import "components/preloader"; -@import "components/slider"; -@import "components/carousel"; -@import "components/tapTarget"; -@import "components/pulse"; -@import "components/date_picker/default"; -@import "components/date_picker/default.date"; -@import "components/date_picker/default.time"; diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 00000000..5cac030d --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,10 @@ +import { defineConfig } from "astro/config"; + +export default defineConfig({ + site: "https://openastronomy.org", + trailingSlash: "always", + outDir: "html", + build: { + format: "directory", + }, +}); diff --git a/css/bootstrap/bootstrap-responsive.css b/css/bootstrap/bootstrap-responsive.css deleted file mode 100644 index a3352d77..00000000 --- a/css/bootstrap/bootstrap-responsive.css +++ /dev/null @@ -1,1092 +0,0 @@ -/*! - * Bootstrap Responsive v2.2.2 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ - -@-ms-viewport { - width: device-width; -} - -.clearfix { - *zoom: 1; -} - -.clearfix:before, -.clearfix:after { - display: table; - line-height: 0; - content: ""; -} - -.clearfix:after { - clear: both; -} - -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.input-block-level { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.hidden { - display: none; - visibility: hidden; -} - -.visible-phone { - display: none !important; -} - -.visible-tablet { - display: none !important; -} - -.hidden-desktop { - display: none !important; -} - -.visible-desktop { - display: inherit !important; -} - -@media (min-width: 768px) and (max-width: 979px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important ; - } - .visible-tablet { - display: inherit !important; - } - .hidden-tablet { - display: none !important; - } -} - -@media (max-width: 767px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important; - } - .visible-phone { - display: inherit !important; - } - .hidden-phone { - display: none !important; - } -} - -@media (min-width: 1200px) { - .row { - margin-left: -30px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - line-height: 0; - content: ""; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 30px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 1170px; - } - .span12 { - width: 1170px; - } - .span11 { - width: 1070px; - } - .span10 { - width: 970px; - } - .span9 { - width: 870px; - } - .span8 { - width: 770px; - } - .span7 { - width: 670px; - } - .span6 { - width: 570px; - } - .span5 { - width: 470px; - } - .span4 { - width: 370px; - } - .span3 { - width: 270px; - } - .span2 { - width: 170px; - } - .span1 { - width: 70px; - } - .offset12 { - margin-left: 1230px; - } - .offset11 { - margin-left: 1130px; - } - .offset10 { - margin-left: 1030px; - } - .offset9 { - margin-left: 930px; - } - .offset8 { - margin-left: 830px; - } - .offset7 { - margin-left: 730px; - } - .offset6 { - margin-left: 630px; - } - .offset5 { - margin-left: 530px; - } - .offset4 { - margin-left: 430px; - } - .offset3 { - margin-left: 330px; - } - .offset2 { - margin-left: 230px; - } - .offset1 { - margin-left: 130px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - line-height: 0; - content: ""; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - float: left; - width: 100%; - min-height: 30px; - margin-left: 2.564102564102564%; - *margin-left: 2.5109110747408616%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.564102564102564%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.45299145299145%; - *width: 91.39979996362975%; - } - .row-fluid .span10 { - width: 82.90598290598291%; - *width: 82.8527914166212%; - } - .row-fluid .span9 { - width: 74.35897435897436%; - *width: 74.30578286961266%; - } - .row-fluid .span8 { - width: 65.81196581196582%; - *width: 65.75877432260411%; - } - .row-fluid .span7 { - width: 57.26495726495726%; - *width: 57.21176577559556%; - } - .row-fluid .span6 { - width: 48.717948717948715%; - *width: 48.664757228587014%; - } - .row-fluid .span5 { - width: 40.17094017094017%; - *width: 40.11774868157847%; - } - .row-fluid .span4 { - width: 31.623931623931625%; - *width: 31.570740134569924%; - } - .row-fluid .span3 { - width: 23.076923076923077%; - *width: 23.023731587561375%; - } - .row-fluid .span2 { - width: 14.52991452991453%; - *width: 14.476723040552828%; - } - .row-fluid .span1 { - width: 5.982905982905983%; - *width: 5.929714493544281%; - } - .row-fluid .offset12 { - margin-left: 105.12820512820512%; - *margin-left: 105.02182214948171%; - } - .row-fluid .offset12:first-child { - margin-left: 102.56410256410257%; - *margin-left: 102.45771958537915%; - } - .row-fluid .offset11 { - margin-left: 96.58119658119658%; - *margin-left: 96.47481360247316%; - } - .row-fluid .offset11:first-child { - margin-left: 94.01709401709402%; - *margin-left: 93.91071103837061%; - } - .row-fluid .offset10 { - margin-left: 88.03418803418803%; - *margin-left: 87.92780505546462%; - } - .row-fluid .offset10:first-child { - margin-left: 85.47008547008548%; - *margin-left: 85.36370249136206%; - } - .row-fluid .offset9 { - margin-left: 79.48717948717949%; - *margin-left: 79.38079650845607%; - } - .row-fluid .offset9:first-child { - margin-left: 76.92307692307693%; - *margin-left: 76.81669394435352%; - } - .row-fluid .offset8 { - margin-left: 70.94017094017094%; - *margin-left: 70.83378796144753%; - } - .row-fluid .offset8:first-child { - margin-left: 68.37606837606839%; - *margin-left: 68.26968539734497%; - } - .row-fluid .offset7 { - margin-left: 62.393162393162385%; - *margin-left: 62.28677941443899%; - } - .row-fluid .offset7:first-child { - margin-left: 59.82905982905982%; - *margin-left: 59.72267685033642%; - } - .row-fluid .offset6 { - margin-left: 53.84615384615384%; - *margin-left: 53.739770867430444%; - } - .row-fluid .offset6:first-child { - margin-left: 51.28205128205128%; - *margin-left: 51.175668303327875%; - } - .row-fluid .offset5 { - margin-left: 45.299145299145295%; - *margin-left: 45.1927623204219%; - } - .row-fluid .offset5:first-child { - margin-left: 42.73504273504273%; - *margin-left: 42.62865975631933%; - } - .row-fluid .offset4 { - margin-left: 36.75213675213675%; - *margin-left: 36.645753773413354%; - } - .row-fluid .offset4:first-child { - margin-left: 34.18803418803419%; - *margin-left: 34.081651209310785%; - } - .row-fluid .offset3 { - margin-left: 28.205128205128204%; - *margin-left: 28.0987452264048%; - } - .row-fluid .offset3:first-child { - margin-left: 25.641025641025642%; - *margin-left: 25.53464266230224%; - } - .row-fluid .offset2 { - margin-left: 19.65811965811966%; - *margin-left: 19.551736679396257%; - } - .row-fluid .offset2:first-child { - margin-left: 17.094017094017094%; - *margin-left: 16.98763411529369%; - } - .row-fluid .offset1 { - margin-left: 11.11111111111111%; - *margin-left: 11.004728132387708%; - } - .row-fluid .offset1:first-child { - margin-left: 8.547008547008547%; - *margin-left: 8.440625568285142%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 30px; - } - input.span12, - textarea.span12, - .uneditable-input.span12 { - width: 1156px; - } - input.span11, - textarea.span11, - .uneditable-input.span11 { - width: 1056px; - } - input.span10, - textarea.span10, - .uneditable-input.span10 { - width: 956px; - } - input.span9, - textarea.span9, - .uneditable-input.span9 { - width: 856px; - } - input.span8, - textarea.span8, - .uneditable-input.span8 { - width: 756px; - } - input.span7, - textarea.span7, - .uneditable-input.span7 { - width: 656px; - } - input.span6, - textarea.span6, - .uneditable-input.span6 { - width: 556px; - } - input.span5, - textarea.span5, - .uneditable-input.span5 { - width: 456px; - } - input.span4, - textarea.span4, - .uneditable-input.span4 { - width: 356px; - } - input.span3, - textarea.span3, - .uneditable-input.span3 { - width: 256px; - } - input.span2, - textarea.span2, - .uneditable-input.span2 { - width: 156px; - } - input.span1, - textarea.span1, - .uneditable-input.span1 { - width: 56px; - } - .thumbnails { - margin-left: -30px; - } - .thumbnails > li { - margin-left: 30px; - } - .row-fluid .thumbnails { - margin-left: 0; - } -} - -@media (min-width: 768px) and (max-width: 979px) { - .row { - margin-left: -20px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - line-height: 0; - content: ""; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 724px; - } - .span12 { - width: 724px; - } - .span11 { - width: 662px; - } - .span10 { - width: 600px; - } - .span9 { - width: 538px; - } - .span8 { - width: 476px; - } - .span7 { - width: 414px; - } - .span6 { - width: 352px; - } - .span5 { - width: 290px; - } - .span4 { - width: 228px; - } - .span3 { - width: 166px; - } - .span2 { - width: 104px; - } - .span1 { - width: 42px; - } - .offset12 { - margin-left: 764px; - } - .offset11 { - margin-left: 702px; - } - .offset10 { - margin-left: 640px; - } - .offset9 { - margin-left: 578px; - } - .offset8 { - margin-left: 516px; - } - .offset7 { - margin-left: 454px; - } - .offset6 { - margin-left: 392px; - } - .offset5 { - margin-left: 330px; - } - .offset4 { - margin-left: 268px; - } - .offset3 { - margin-left: 206px; - } - .offset2 { - margin-left: 144px; - } - .offset1 { - margin-left: 82px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - line-height: 0; - content: ""; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - float: left; - width: 100%; - min-height: 30px; - margin-left: 2.7624309392265194%; - *margin-left: 2.709239449864817%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.7624309392265194%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.43646408839778%; - *width: 91.38327259903608%; - } - .row-fluid .span10 { - width: 82.87292817679558%; - *width: 82.81973668743387%; - } - .row-fluid .span9 { - width: 74.30939226519337%; - *width: 74.25620077583166%; - } - .row-fluid .span8 { - width: 65.74585635359117%; - *width: 65.69266486422946%; - } - .row-fluid .span7 { - width: 57.18232044198895%; - *width: 57.12912895262725%; - } - .row-fluid .span6 { - width: 48.61878453038674%; - *width: 48.56559304102504%; - } - .row-fluid .span5 { - width: 40.05524861878453%; - *width: 40.00205712942283%; - } - .row-fluid .span4 { - width: 31.491712707182323%; - *width: 31.43852121782062%; - } - .row-fluid .span3 { - width: 22.92817679558011%; - *width: 22.87498530621841%; - } - .row-fluid .span2 { - width: 14.3646408839779%; - *width: 14.311449394616199%; - } - .row-fluid .span1 { - width: 5.801104972375691%; - *width: 5.747913483013988%; - } - .row-fluid .offset12 { - margin-left: 105.52486187845304%; - *margin-left: 105.41847889972962%; - } - .row-fluid .offset12:first-child { - margin-left: 102.76243093922652%; - *margin-left: 102.6560479605031%; - } - .row-fluid .offset11 { - margin-left: 96.96132596685082%; - *margin-left: 96.8549429881274%; - } - .row-fluid .offset11:first-child { - margin-left: 94.1988950276243%; - *margin-left: 94.09251204890089%; - } - .row-fluid .offset10 { - margin-left: 88.39779005524862%; - *margin-left: 88.2914070765252%; - } - .row-fluid .offset10:first-child { - margin-left: 85.6353591160221%; - *margin-left: 85.52897613729868%; - } - .row-fluid .offset9 { - margin-left: 79.8342541436464%; - *margin-left: 79.72787116492299%; - } - .row-fluid .offset9:first-child { - margin-left: 77.07182320441989%; - *margin-left: 76.96544022569647%; - } - .row-fluid .offset8 { - margin-left: 71.2707182320442%; - *margin-left: 71.16433525332079%; - } - .row-fluid .offset8:first-child { - margin-left: 68.50828729281768%; - *margin-left: 68.40190431409427%; - } - .row-fluid .offset7 { - margin-left: 62.70718232044199%; - *margin-left: 62.600799341718584%; - } - .row-fluid .offset7:first-child { - margin-left: 59.94475138121547%; - *margin-left: 59.838368402492065%; - } - .row-fluid .offset6 { - margin-left: 54.14364640883978%; - *margin-left: 54.037263430116376%; - } - .row-fluid .offset6:first-child { - margin-left: 51.38121546961326%; - *margin-left: 51.27483249088986%; - } - .row-fluid .offset5 { - margin-left: 45.58011049723757%; - *margin-left: 45.47372751851417%; - } - .row-fluid .offset5:first-child { - margin-left: 42.81767955801105%; - *margin-left: 42.71129657928765%; - } - .row-fluid .offset4 { - margin-left: 37.01657458563536%; - *margin-left: 36.91019160691196%; - } - .row-fluid .offset4:first-child { - margin-left: 34.25414364640884%; - *margin-left: 34.14776066768544%; - } - .row-fluid .offset3 { - margin-left: 28.45303867403315%; - *margin-left: 28.346655695309746%; - } - .row-fluid .offset3:first-child { - margin-left: 25.69060773480663%; - *margin-left: 25.584224756083227%; - } - .row-fluid .offset2 { - margin-left: 19.88950276243094%; - *margin-left: 19.783119783707537%; - } - .row-fluid .offset2:first-child { - margin-left: 17.12707182320442%; - *margin-left: 17.02068884448102%; - } - .row-fluid .offset1 { - margin-left: 11.32596685082873%; - *margin-left: 11.219583872105325%; - } - .row-fluid .offset1:first-child { - margin-left: 8.56353591160221%; - *margin-left: 8.457152932878806%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; - } - input.span12, - textarea.span12, - .uneditable-input.span12 { - width: 710px; - } - input.span11, - textarea.span11, - .uneditable-input.span11 { - width: 648px; - } - input.span10, - textarea.span10, - .uneditable-input.span10 { - width: 586px; - } - input.span9, - textarea.span9, - .uneditable-input.span9 { - width: 524px; - } - input.span8, - textarea.span8, - .uneditable-input.span8 { - width: 462px; - } - input.span7, - textarea.span7, - .uneditable-input.span7 { - width: 400px; - } - input.span6, - textarea.span6, - .uneditable-input.span6 { - width: 338px; - } - input.span5, - textarea.span5, - .uneditable-input.span5 { - width: 276px; - } - input.span4, - textarea.span4, - .uneditable-input.span4 { - width: 214px; - } - input.span3, - textarea.span3, - .uneditable-input.span3 { - width: 152px; - } - input.span2, - textarea.span2, - .uneditable-input.span2 { - width: 90px; - } - input.span1, - textarea.span1, - .uneditable-input.span1 { - width: 28px; - } -} - -@media (max-width: 767px) { - body { - padding-right: 20px; - padding-left: 20px; - } - .navbar-fixed-top, - .navbar-fixed-bottom, - .navbar-static-top { - margin-right: -20px; - margin-left: -20px; - } - .container-fluid { - padding: 0; - } - .dl-horizontal dt { - float: none; - width: auto; - clear: none; - text-align: left; - } - .dl-horizontal dd { - margin-left: 0; - } - .container { - width: auto; - } - .row-fluid { - width: 100%; - } - .row, - .thumbnails { - margin-left: 0; - } - .thumbnails > li { - float: none; - margin-left: 0; - } - [class*="span"], - .uneditable-input[class*="span"], - .row-fluid [class*="span"] { - display: block; - float: none; - width: 100%; - margin-left: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .span12, - .row-fluid .span12 { - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="offset"]:first-child { - margin-left: 0; - } - .input-large, - .input-xlarge, - .input-xxlarge, - input[class*="span"], - select[class*="span"], - textarea[class*="span"], - .uneditable-input { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .input-prepend input, - .input-append input, - .input-prepend input[class*="span"], - .input-append input[class*="span"] { - display: inline-block; - width: auto; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 0; - } - .modal { - position: fixed; - top: 20px; - right: 20px; - left: 20px; - width: auto; - margin: 0; - } - .modal.fade { - top: -100px; - } - .modal.fade.in { - top: 20px; - } -} - -@media (max-width: 480px) { - .nav-collapse { - -webkit-transform: translate3d(0, 0, 0); - } - .page-header h1 small { - display: block; - line-height: 20px; - } - input[type="checkbox"], - input[type="radio"] { - border: 1px solid #ccc; - } - .form-horizontal .control-label { - float: none; - width: auto; - padding-top: 0; - text-align: left; - } - .form-horizontal .controls { - margin-left: 0; - } - .form-horizontal .control-list { - padding-top: 0; - } - .form-horizontal .form-actions { - padding-right: 10px; - padding-left: 10px; - } - .media .pull-left, - .media .pull-right { - display: block; - float: none; - margin-bottom: 10px; - } - .media-object { - margin-right: 0; - margin-left: 0; - } - .modal { - top: 10px; - right: 10px; - left: 10px; - } - .modal-header .close { - padding: 10px; - margin: -10px; - } - .carousel-caption { - position: static; - } -} - -@media (max-width: 979px) { - body { - padding-top: 0; - } - .navbar-fixed-top, - .navbar-fixed-bottom { - position: static; - } - .navbar-fixed-top { - margin-bottom: 20px; - } - .navbar-fixed-bottom { - margin-top: 20px; - } - .navbar-fixed-top .navbar-inner, - .navbar-fixed-bottom .navbar-inner { - padding: 5px; - } - .navbar .container { - width: auto; - padding: 0; - } - .navbar .brand { - padding-right: 10px; - padding-left: 10px; - margin: 0 0 0 -5px; - } - .nav-collapse { - clear: both; - } - .nav-collapse .nav { - float: none; - margin: 0 0 10px; - } - .nav-collapse .nav > li { - float: none; - } - .nav-collapse .nav > li > a { - margin-bottom: 2px; - } - .nav-collapse .nav > .divider-vertical { - display: none; - } - .nav-collapse .nav .nav-header { - color: #777777; - text-shadow: none; - } - .nav-collapse .nav > li > a, - .nav-collapse .dropdown-menu a { - padding: 9px 15px; - font-weight: bold; - color: #777777; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - } - .nav-collapse .btn { - padding: 4px 10px 4px; - font-weight: normal; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - } - .nav-collapse .dropdown-menu li + li a { - margin-bottom: 2px; - } - .nav-collapse .nav > li > a:hover, - .nav-collapse .dropdown-menu a:hover { - background-color: #f2f2f2; - } - .navbar-inverse .nav-collapse .nav > li > a, - .navbar-inverse .nav-collapse .dropdown-menu a { - color: #999999; - } - .navbar-inverse .nav-collapse .nav > li > a:hover, - .navbar-inverse .nav-collapse .dropdown-menu a:hover { - background-color: #111111; - } - .nav-collapse.in .btn-group { - padding: 0; - margin-top: 5px; - } - .nav-collapse .dropdown-menu { - position: static; - top: auto; - left: auto; - display: none; - float: none; - max-width: none; - padding: 0; - margin: 0 15px; - background-color: transparent; - border: none; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - } - .nav-collapse .open > .dropdown-menu { - display: block; - } - .nav-collapse .dropdown-menu:before, - .nav-collapse .dropdown-menu:after { - display: none; - } - .nav-collapse .dropdown-menu .divider { - display: none; - } - .nav-collapse .nav > li > .dropdown-menu:before, - .nav-collapse .nav > li > .dropdown-menu:after { - display: none; - } - .nav-collapse .navbar-form, - .nav-collapse .navbar-search { - float: none; - padding: 10px 15px; - margin: 10px 0; - border-top: 1px solid #f2f2f2; - border-bottom: 1px solid #f2f2f2; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - } - .navbar-inverse .nav-collapse .navbar-form, - .navbar-inverse .nav-collapse .navbar-search { - border-top-color: #111111; - border-bottom-color: #111111; - } - .navbar .nav-collapse .nav.pull-right { - float: none; - margin-left: 0; - } - .nav-collapse, - .nav-collapse.collapse { - height: 0; - overflow: hidden; - } - .navbar .btn-navbar { - display: block; - } - .navbar-static .navbar-inner { - padding-right: 10px; - padding-left: 10px; - } -} - -@media (min-width: 980px) { - .nav-collapse.collapse { - height: auto !important; - overflow: visible !important; - } -} diff --git a/css/bootstrap/bootstrap.css b/css/bootstrap/bootstrap.css deleted file mode 100644 index d2dc7108..00000000 --- a/css/bootstrap/bootstrap.css +++ /dev/null @@ -1,6047 +0,0 @@ -/*! - * Bootstrap v2.2.2 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} - -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} - -audio:not([controls]) { - display: none; -} - -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -a:hover, -a:active { - outline: 0; -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -img { - width: auto\9; - height: auto; - max-width: 100%; - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; -} - -#map_canvas img, -.google-maps img { - max-width: none; -} - -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} - -button, -input { - *overflow: visible; - line-height: normal; -} - -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} - -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - cursor: pointer; - -webkit-appearance: button; -} - -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; -} - -input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} - -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; -} - -textarea { - overflow: auto; - vertical-align: top; -} - -@media print { - * { - color: #000 !important; - text-shadow: none !important; - background: transparent !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - @page { - margin: 0.5cm; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } -} - -.clearfix { - *zoom: 1; -} - -.clearfix:before, -.clearfix:after { - display: table; - line-height: 0; - content: ""; -} - -.clearfix:after { - clear: both; -} - -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.input-block-level { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -body { - margin: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 20px; - color: #333333; - background-color: #ffffff; -} - -a { - color: #0088cc; - text-decoration: none; -} - -a:hover { - color: #005580; - text-decoration: underline; -} - -.img-rounded { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} - -.img-circle { - -webkit-border-radius: 500px; - -moz-border-radius: 500px; - border-radius: 500px; -} - -.row { - margin-left: -20px; - *zoom: 1; -} - -.row:before, -.row:after { - display: table; - line-height: 0; - content: ""; -} - -.row:after { - clear: both; -} - -[class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; -} - -.container, -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} - -.span12 { - width: 940px; -} - -.span11 { - width: 860px; -} - -.span10 { - width: 780px; -} - -.span9 { - width: 700px; -} - -.span8 { - width: 620px; -} - -.span7 { - width: 540px; -} - -.span6 { - width: 460px; -} - -.span5 { - width: 380px; -} - -.span4 { - width: 300px; -} - -.span3 { - width: 220px; -} - -.span2 { - width: 140px; -} - -.span1 { - width: 60px; -} - -.offset12 { - margin-left: 980px; -} - -.offset11 { - margin-left: 900px; -} - -.offset10 { - margin-left: 820px; -} - -.offset9 { - margin-left: 740px; -} - -.offset8 { - margin-left: 660px; -} - -.offset7 { - margin-left: 580px; -} - -.offset6 { - margin-left: 500px; -} - -.offset5 { - margin-left: 420px; -} - -.offset4 { - margin-left: 340px; -} - -.offset3 { - margin-left: 260px; -} - -.offset2 { - margin-left: 180px; -} - -.offset1 { - margin-left: 100px; -} - -.row-fluid { - width: 100%; - *zoom: 1; -} - -.row-fluid:before, -.row-fluid:after { - display: table; - line-height: 0; - content: ""; -} - -.row-fluid:after { - clear: both; -} - -.row-fluid [class*="span"] { - display: block; - float: left; - width: 100%; - min-height: 30px; - margin-left: 2.127659574468085%; - *margin-left: 2.074468085106383%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.row-fluid [class*="span"]:first-child { - margin-left: 0; -} - -.row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.127659574468085%; -} - -.row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; -} - -.row-fluid .span11 { - width: 91.48936170212765%; - *width: 91.43617021276594%; -} - -.row-fluid .span10 { - width: 82.97872340425532%; - *width: 82.92553191489361%; -} - -.row-fluid .span9 { - width: 74.46808510638297%; - *width: 74.41489361702126%; -} - -.row-fluid .span8 { - width: 65.95744680851064%; - *width: 65.90425531914893%; -} - -.row-fluid .span7 { - width: 57.44680851063829%; - *width: 57.39361702127659%; -} - -.row-fluid .span6 { - width: 48.93617021276595%; - *width: 48.88297872340425%; -} - -.row-fluid .span5 { - width: 40.42553191489362%; - *width: 40.37234042553192%; -} - -.row-fluid .span4 { - width: 31.914893617021278%; - *width: 31.861702127659576%; -} - -.row-fluid .span3 { - width: 23.404255319148934%; - *width: 23.351063829787233%; -} - -.row-fluid .span2 { - width: 14.893617021276595%; - *width: 14.840425531914894%; -} - -.row-fluid .span1 { - width: 6.382978723404255%; - *width: 6.329787234042553%; -} - -.row-fluid .offset12 { - margin-left: 104.25531914893617%; - *margin-left: 104.14893617021275%; -} - -.row-fluid .offset12:first-child { - margin-left: 102.12765957446808%; - *margin-left: 102.02127659574467%; -} - -.row-fluid .offset11 { - margin-left: 95.74468085106382%; - *margin-left: 95.6382978723404%; -} - -.row-fluid .offset11:first-child { - margin-left: 93.61702127659574%; - *margin-left: 93.51063829787232%; -} - -.row-fluid .offset10 { - margin-left: 87.23404255319149%; - *margin-left: 87.12765957446807%; -} - -.row-fluid .offset10:first-child { - margin-left: 85.1063829787234%; - *margin-left: 84.99999999999999%; -} - -.row-fluid .offset9 { - margin-left: 78.72340425531914%; - *margin-left: 78.61702127659572%; -} - -.row-fluid .offset9:first-child { - margin-left: 76.59574468085106%; - *margin-left: 76.48936170212764%; -} - -.row-fluid .offset8 { - margin-left: 70.2127659574468%; - *margin-left: 70.10638297872339%; -} - -.row-fluid .offset8:first-child { - margin-left: 68.08510638297872%; - *margin-left: 67.9787234042553%; -} - -.row-fluid .offset7 { - margin-left: 61.70212765957446%; - *margin-left: 61.59574468085106%; -} - -.row-fluid .offset7:first-child { - margin-left: 59.574468085106375%; - *margin-left: 59.46808510638297%; -} - -.row-fluid .offset6 { - margin-left: 53.191489361702125%; - *margin-left: 53.085106382978715%; -} - -.row-fluid .offset6:first-child { - margin-left: 51.063829787234035%; - *margin-left: 50.95744680851063%; -} - -.row-fluid .offset5 { - margin-left: 44.68085106382979%; - *margin-left: 44.57446808510638%; -} - -.row-fluid .offset5:first-child { - margin-left: 42.5531914893617%; - *margin-left: 42.4468085106383%; -} - -.row-fluid .offset4 { - margin-left: 36.170212765957444%; - *margin-left: 36.06382978723405%; -} - -.row-fluid .offset4:first-child { - margin-left: 34.04255319148936%; - *margin-left: 33.93617021276596%; -} - -.row-fluid .offset3 { - margin-left: 27.659574468085104%; - *margin-left: 27.5531914893617%; -} - -.row-fluid .offset3:first-child { - margin-left: 25.53191489361702%; - *margin-left: 25.425531914893618%; -} - -.row-fluid .offset2 { - margin-left: 19.148936170212764%; - *margin-left: 19.04255319148936%; -} - -.row-fluid .offset2:first-child { - margin-left: 17.02127659574468%; - *margin-left: 16.914893617021278%; -} - -.row-fluid .offset1 { - margin-left: 10.638297872340425%; - *margin-left: 10.53191489361702%; -} - -.row-fluid .offset1:first-child { - margin-left: 8.51063829787234%; - *margin-left: 8.404255319148938%; -} - -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; -} - -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; -} - -.container { - margin-right: auto; - margin-left: auto; - *zoom: 1; -} - -.container:before, -.container:after { - display: table; - line-height: 0; - content: ""; -} - -.container:after { - clear: both; -} - -.container-fluid { - padding-right: 20px; - padding-left: 20px; - *zoom: 1; -} - -.container-fluid:before, -.container-fluid:after { - display: table; - line-height: 0; - content: ""; -} - -.container-fluid:after { - clear: both; -} - -p { - margin: 0 0 10px; -} - -.lead { - margin-bottom: 20px; - font-size: 21px; - font-weight: 200; - line-height: 30px; -} - -small { - font-size: 85%; -} - -strong { - font-weight: bold; -} - -em { - font-style: italic; -} - -cite { - font-style: normal; -} - -.muted { - color: #999999; -} - -a.muted:hover { - color: #808080; -} - -.text-warning { - color: #c09853; -} - -a.text-warning:hover { - color: #a47e3c; -} - -.text-error { - color: #b94a48; -} - -a.text-error:hover { - color: #953b39; -} - -.text-info { - color: #3a87ad; -} - -a.text-info:hover { - color: #2d6987; -} - -.text-success { - color: #468847; -} - -a.text-success:hover { - color: #356635; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 10px 0; - font-family: inherit; - font-weight: bold; - line-height: 20px; - color: inherit; - text-rendering: optimizelegibility; -} - -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - font-weight: normal; - line-height: 1; - color: #999999; -} - -h1, -h2, -h3 { - line-height: 40px; -} - -h1 { - font-size: 38.5px; -} - -h2 { - font-size: 31.5px; -} - -h3 { - font-size: 24.5px; -} - -h4 { - font-size: 17.5px; -} - -h5 { - font-size: 14px; -} - -h6 { - font-size: 11.9px; -} - -h1 small { - font-size: 24.5px; -} - -h2 small { - font-size: 17.5px; -} - -h3 small { - font-size: 14px; -} - -h4 small { - font-size: 14px; -} - -.page-header { - padding-bottom: 9px; - margin: 20px 0 30px; - border-bottom: 1px solid #eeeeee; -} - -ul, -ol { - padding: 0; - margin: 0 0 10px 25px; -} - -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} - -li { - line-height: 20px; -} - -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} - -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; -} - -ul.inline > li, -ol.inline > li { - display: inline-block; - padding-right: 5px; - padding-left: 5px; -} - -dl { - margin-bottom: 20px; -} - -dt, -dd { - line-height: 20px; -} - -dt { - font-weight: bold; -} - -dd { - margin-left: 10px; -} - -.dl-horizontal { - *zoom: 1; -} - -.dl-horizontal:before, -.dl-horizontal:after { - display: table; - line-height: 0; - content: ""; -} - -.dl-horizontal:after { - clear: both; -} - -.dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; -} - -.dl-horizontal dd { - margin-left: 180px; -} - -hr { - margin: 20px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; -} - -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; -} - -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} - -blockquote { - padding: 0 0 0 15px; - margin: 0 0 20px; - border-left: 5px solid #eeeeee; -} - -blockquote p { - margin-bottom: 0; - font-size: 16px; - font-weight: 300; - line-height: 25px; -} - -blockquote small { - display: block; - line-height: 20px; - color: #999999; -} - -blockquote small:before { - content: '\2014 \00A0'; -} - -blockquote.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; -} - -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} - -blockquote.pull-right small:before { - content: ''; -} - -blockquote.pull-right small:after { - content: '\00A0 \2014'; -} - -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} - -address { - display: block; - margin-bottom: 20px; - font-style: normal; - line-height: 20px; -} - -code, -pre { - padding: 0 3px 2px; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; - font-size: 12px; - color: #333333; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -code { - padding: 2px 4px; - color: #d14; - white-space: nowrap; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; -} - -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 20px; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -pre.prettyprint { - margin-bottom: 20px; -} - -pre code { - padding: 0; - color: inherit; - white-space: pre; - white-space: pre-wrap; - background-color: transparent; - border: 0; -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} - -form { - margin: 0 0 20px; -} - -fieldset { - padding: 0; - margin: 0; - border: 0; -} - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: 40px; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} - -legend small { - font-size: 15px; - color: #999999; -} - -label, -input, -button, -select, -textarea { - font-size: 14px; - font-weight: normal; - line-height: 20px; -} - -input, -button, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} - -label { - display: block; - margin-bottom: 5px; -} - -select, -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - display: inline-block; - height: 20px; - padding: 4px 6px; - margin-bottom: 10px; - font-size: 14px; - line-height: 20px; - color: #555555; - vertical-align: middle; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -input, -textarea, -.uneditable-input { - width: 206px; -} - -textarea { - height: auto; -} - -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - background-color: #ffffff; - border: 1px solid #cccccc; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; - -moz-transition: border linear 0.2s, box-shadow linear 0.2s; - -o-transition: border linear 0.2s, box-shadow linear 0.2s; - transition: border linear 0.2s, box-shadow linear 0.2s; -} - -textarea:focus, -input[type="text"]:focus, -input[type="password"]:focus, -input[type="datetime"]:focus, -input[type="datetime-local"]:focus, -input[type="date"]:focus, -input[type="month"]:focus, -input[type="time"]:focus, -input[type="week"]:focus, -input[type="number"]:focus, -input[type="email"]:focus, -input[type="url"]:focus, -input[type="search"]:focus, -input[type="tel"]:focus, -input[type="color"]:focus, -.uneditable-input:focus { - border-color: rgba(82, 168, 236, 0.8); - outline: 0; - outline: thin dotted \9; - /* IE6-9 */ - - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); -} - -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - *margin-top: 0; - line-height: normal; -} - -input[type="file"], -input[type="image"], -input[type="submit"], -input[type="reset"], -input[type="button"], -input[type="radio"], -input[type="checkbox"] { - width: auto; -} - -select, -input[type="file"] { - height: 30px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - - line-height: 30px; -} - -select { - width: 220px; - background-color: #ffffff; - border: 1px solid #cccccc; -} - -select[multiple], -select[size] { - height: auto; -} - -select:focus, -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -.uneditable-input, -.uneditable-textarea { - color: #999999; - cursor: not-allowed; - background-color: #fcfcfc; - border-color: #cccccc; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); -} - -.uneditable-input { - overflow: hidden; - white-space: nowrap; -} - -.uneditable-textarea { - width: auto; - height: auto; -} - -input:-moz-placeholder, -textarea:-moz-placeholder { - color: #999999; -} - -input:-ms-input-placeholder, -textarea:-ms-input-placeholder { - color: #999999; -} - -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #999999; -} - -.radio, -.checkbox { - min-height: 20px; - padding-left: 20px; -} - -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -20px; -} - -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; -} - -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} - -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} - -.input-mini { - width: 60px; -} - -.input-small { - width: 90px; -} - -.input-medium { - width: 150px; -} - -.input-large { - width: 210px; -} - -.input-xlarge { - width: 270px; -} - -.input-xxlarge { - width: 530px; -} - -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} - -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} - -input, -textarea, -.uneditable-input { - margin-left: 0; -} - -.controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; -} - -input.span12, -textarea.span12, -.uneditable-input.span12 { - width: 926px; -} - -input.span11, -textarea.span11, -.uneditable-input.span11 { - width: 846px; -} - -input.span10, -textarea.span10, -.uneditable-input.span10 { - width: 766px; -} - -input.span9, -textarea.span9, -.uneditable-input.span9 { - width: 686px; -} - -input.span8, -textarea.span8, -.uneditable-input.span8 { - width: 606px; -} - -input.span7, -textarea.span7, -.uneditable-input.span7 { - width: 526px; -} - -input.span6, -textarea.span6, -.uneditable-input.span6 { - width: 446px; -} - -input.span5, -textarea.span5, -.uneditable-input.span5 { - width: 366px; -} - -input.span4, -textarea.span4, -.uneditable-input.span4 { - width: 286px; -} - -input.span3, -textarea.span3, -.uneditable-input.span3 { - width: 206px; -} - -input.span2, -textarea.span2, -.uneditable-input.span2 { - width: 126px; -} - -input.span1, -textarea.span1, -.uneditable-input.span1 { - width: 46px; -} - -.controls-row { - *zoom: 1; -} - -.controls-row:before, -.controls-row:after { - display: table; - line-height: 0; - content: ""; -} - -.controls-row:after { - clear: both; -} - -.controls-row [class*="span"], -.row-fluid .controls-row [class*="span"] { - float: left; -} - -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} - -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: #eeeeee; -} - -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} - -.control-group.warning .control-label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} - -.control-group.warning .checkbox, -.control-group.warning .radio, -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - color: #c09853; -} - -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; -} - -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} - -.control-group.error .control-label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} - -.control-group.error .checkbox, -.control-group.error .radio, -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - color: #b94a48; -} - -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; -} - -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} - -.control-group.success .control-label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} - -.control-group.success .checkbox, -.control-group.success .radio, -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - color: #468847; -} - -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; -} - -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} - -.control-group.info .control-label, -.control-group.info .help-block, -.control-group.info .help-inline { - color: #3a87ad; -} - -.control-group.info .checkbox, -.control-group.info .radio, -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - color: #3a87ad; -} - -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - border-color: #3a87ad; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.info input:focus, -.control-group.info select:focus, -.control-group.info textarea:focus { - border-color: #2d6987; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; -} - -.control-group.info .input-prepend .add-on, -.control-group.info .input-append .add-on { - color: #3a87ad; - background-color: #d9edf7; - border-color: #3a87ad; -} - -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; -} - -input:focus:invalid:focus, -textarea:focus:invalid:focus, -select:focus:invalid:focus { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; -} - -.form-actions { - padding: 19px 20px 20px; - margin-top: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-top: 1px solid #e5e5e5; - *zoom: 1; -} - -.form-actions:before, -.form-actions:after { - display: table; - line-height: 0; - content: ""; -} - -.form-actions:after { - clear: both; -} - -.help-block, -.help-inline { - color: #595959; -} - -.help-block { - display: block; - margin-bottom: 10px; -} - -.help-inline { - display: inline-block; - *display: inline; - padding-left: 5px; - vertical-align: middle; - *zoom: 1; -} - -.input-append, -.input-prepend { - margin-bottom: 5px; - font-size: 0; - white-space: nowrap; -} - -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input, -.input-append .dropdown-menu, -.input-prepend .dropdown-menu { - font-size: 14px; -} - -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input { - position: relative; - margin-bottom: 0; - *margin-left: 0; - vertical-align: top; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-append input:focus, -.input-prepend input:focus, -.input-append select:focus, -.input-prepend select:focus, -.input-append .uneditable-input:focus, -.input-prepend .uneditable-input:focus { - z-index: 2; -} - -.input-append .add-on, -.input-prepend .add-on { - display: inline-block; - width: auto; - height: 20px; - min-width: 16px; - padding: 4px 5px; - font-size: 14px; - font-weight: normal; - line-height: 20px; - text-align: center; - text-shadow: 0 1px 0 #ffffff; - background-color: #eeeeee; - border: 1px solid #ccc; -} - -.input-append .add-on, -.input-prepend .add-on, -.input-append .btn, -.input-prepend .btn, -.input-append .btn-group > .dropdown-toggle, -.input-prepend .btn-group > .dropdown-toggle { - vertical-align: top; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.input-append .active, -.input-prepend .active { - background-color: #a9dba9; - border-color: #46a546; -} - -.input-prepend .add-on, -.input-prepend .btn { - margin-right: -1px; -} - -.input-prepend .add-on:first-child, -.input-prepend .btn:first-child { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-append input, -.input-append select, -.input-append .uneditable-input { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-append input + .btn-group .btn:last-child, -.input-append select + .btn-group .btn:last-child, -.input-append .uneditable-input + .btn-group .btn:last-child { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-append .add-on, -.input-append .btn, -.input-append .btn-group { - margin-left: -1px; -} - -.input-append .add-on:last-child, -.input-append .btn:last-child, -.input-append .btn-group:last-child > .dropdown-toggle { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append input, -.input-prepend.input-append select, -.input-prepend.input-append .uneditable-input { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.input-prepend.input-append input + .btn-group .btn, -.input-prepend.input-append select + .btn-group .btn, -.input-prepend.input-append .uneditable-input + .btn-group .btn { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append .add-on:first-child, -.input-prepend.input-append .btn:first-child { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-prepend.input-append .add-on:last-child, -.input-prepend.input-append .btn:last-child { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append .btn-group:first-child { - margin-left: 0; -} - -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; - /* IE7-8 doesn't have border-radius, so don't indent the padding */ - - margin-bottom: 0; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -/* Allow for input prepend/append in search forms */ - -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.form-search .input-append .search-query { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} - -.form-search .input-append .btn { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} - -.form-search .input-prepend .search-query { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} - -.form-search .input-prepend .btn { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} - -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input, -.form-search .input-prepend, -.form-inline .input-prepend, -.form-horizontal .input-prepend, -.form-search .input-append, -.form-inline .input-append, -.form-horizontal .input-append { - display: inline-block; - *display: inline; - margin-bottom: 0; - vertical-align: middle; - *zoom: 1; -} - -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { - display: none; -} - -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} - -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} - -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} - -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} - -.control-group { - margin-bottom: 10px; -} - -legend + .control-group { - margin-top: 20px; - -webkit-margin-top-collapse: separate; -} - -.form-horizontal .control-group { - margin-bottom: 20px; - *zoom: 1; -} - -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - line-height: 0; - content: ""; -} - -.form-horizontal .control-group:after { - clear: both; -} - -.form-horizontal .control-label { - float: left; - width: 160px; - padding-top: 5px; - text-align: right; -} - -.form-horizontal .controls { - *display: inline-block; - *padding-left: 20px; - margin-left: 180px; - *margin-left: 0; -} - -.form-horizontal .controls:first-child { - *padding-left: 180px; -} - -.form-horizontal .help-block { - margin-bottom: 0; -} - -.form-horizontal input + .help-block, -.form-horizontal select + .help-block, -.form-horizontal textarea + .help-block, -.form-horizontal .uneditable-input + .help-block, -.form-horizontal .input-prepend + .help-block, -.form-horizontal .input-append + .help-block { - margin-top: 10px; -} - -.form-horizontal .form-actions { - padding-left: 180px; -} - -table { - max-width: 100%; - background-color: transparent; - border-collapse: collapse; - border-spacing: 0; -} - -.table { - width: 100%; - margin-bottom: 20px; -} - -.table th, -.table td { - padding: 8px; - line-height: 20px; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; -} - -.table th { - font-weight: bold; -} - -.table thead th { - vertical-align: bottom; -} - -.table caption + thead tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child th, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child th, -.table thead:first-child tr:first-child td { - border-top: 0; -} - -.table tbody + tbody { - border-top: 2px solid #dddddd; -} - -.table .table { - background-color: #ffffff; -} - -.table-condensed th, -.table-condensed td { - padding: 4px 5px; -} - -.table-bordered { - border: 1px solid #dddddd; - border-collapse: separate; - *border-collapse: collapse; - border-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.table-bordered th, -.table-bordered td { - border-left: 1px solid #dddddd; -} - -.table-bordered caption + thead tr:first-child th, -.table-bordered caption + tbody tr:first-child th, -.table-bordered caption + tbody tr:first-child td, -.table-bordered colgroup + thead tr:first-child th, -.table-bordered colgroup + tbody tr:first-child th, -.table-bordered colgroup + tbody tr:first-child td, -.table-bordered thead:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child td { - border-top: 0; -} - -.table-bordered thead:first-child tr:first-child > th:first-child, -.table-bordered tbody:first-child tr:first-child > td:first-child { - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; -} - -.table-bordered thead:first-child tr:first-child > th:last-child, -.table-bordered tbody:first-child tr:first-child > td:last-child { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; -} - -.table-bordered thead:last-child tr:last-child > th:first-child, -.table-bordered tbody:last-child tr:last-child > td:first-child, -.table-bordered tfoot:last-child tr:last-child > td:first-child { - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; -} - -.table-bordered thead:last-child tr:last-child > th:last-child, -.table-bordered tbody:last-child tr:last-child > td:last-child, -.table-bordered tfoot:last-child tr:last-child > td:last-child { - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; -} - -.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { - -webkit-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - -moz-border-radius-bottomleft: 0; -} - -.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; - -moz-border-radius-bottomright: 0; -} - -.table-bordered caption + thead tr:first-child th:first-child, -.table-bordered caption + tbody tr:first-child td:first-child, -.table-bordered colgroup + thead tr:first-child th:first-child, -.table-bordered colgroup + tbody tr:first-child td:first-child { - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; -} - -.table-bordered caption + thead tr:first-child th:last-child, -.table-bordered caption + tbody tr:first-child td:last-child, -.table-bordered colgroup + thead tr:first-child th:last-child, -.table-bordered colgroup + tbody tr:first-child td:last-child { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; -} - -.table-striped tbody > tr:nth-child(odd) > td, -.table-striped tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; -} - -.table-hover tbody tr:hover td, -.table-hover tbody tr:hover th { - background-color: #f5f5f5; -} - -table td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; - margin-left: 0; -} - -.table td.span1, -.table th.span1 { - float: none; - width: 44px; - margin-left: 0; -} - -.table td.span2, -.table th.span2 { - float: none; - width: 124px; - margin-left: 0; -} - -.table td.span3, -.table th.span3 { - float: none; - width: 204px; - margin-left: 0; -} - -.table td.span4, -.table th.span4 { - float: none; - width: 284px; - margin-left: 0; -} - -.table td.span5, -.table th.span5 { - float: none; - width: 364px; - margin-left: 0; -} - -.table td.span6, -.table th.span6 { - float: none; - width: 444px; - margin-left: 0; -} - -.table td.span7, -.table th.span7 { - float: none; - width: 524px; - margin-left: 0; -} - -.table td.span8, -.table th.span8 { - float: none; - width: 604px; - margin-left: 0; -} - -.table td.span9, -.table th.span9 { - float: none; - width: 684px; - margin-left: 0; -} - -.table td.span10, -.table th.span10 { - float: none; - width: 764px; - margin-left: 0; -} - -.table td.span11, -.table th.span11 { - float: none; - width: 844px; - margin-left: 0; -} - -.table td.span12, -.table th.span12 { - float: none; - width: 924px; - margin-left: 0; -} - -.table tbody tr.success td { - background-color: #dff0d8; -} - -.table tbody tr.error td { - background-color: #f2dede; -} - -.table tbody tr.warning td { - background-color: #fcf8e3; -} - -.table tbody tr.info td { - background-color: #d9edf7; -} - -.table-hover tbody tr.success:hover td { - background-color: #d0e9c6; -} - -.table-hover tbody tr.error:hover td { - background-color: #ebcccc; -} - -.table-hover tbody tr.warning:hover td { - background-color: #faf2cc; -} - -.table-hover tbody tr.info:hover td { - background-color: #c4e3f3; -} - -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - margin-top: 1px; - *margin-right: .3em; - line-height: 14px; - vertical-align: text-top; - background-image: url("./img/glyphicons-halflings.png"); - background-position: 14px 14px; - background-repeat: no-repeat; -} - -/* White icons with optional class, or on hover/active states of certain elements */ - -.icon-white, -.nav-pills > .active > a > [class^="icon-"], -.nav-pills > .active > a > [class*=" icon-"], -.nav-list > .active > a > [class^="icon-"], -.nav-list > .active > a > [class*=" icon-"], -.navbar-inverse .nav > .active > a > [class^="icon-"], -.navbar-inverse .nav > .active > a > [class*=" icon-"], -.dropdown-menu > li > a:hover > [class^="icon-"], -.dropdown-menu > li > a:hover > [class*=" icon-"], -.dropdown-menu > .active > a > [class^="icon-"], -.dropdown-menu > .active > a > [class*=" icon-"], -.dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"] { - background-image: url("./img/glyphicons-halflings-white.png"); -} - -.icon-glass { - background-position: 0 0; -} - -.icon-music { - background-position: -24px 0; -} - -.icon-search { - background-position: -48px 0; -} - -.icon-envelope { - background-position: -72px 0; -} - -.icon-heart { - background-position: -96px 0; -} - -.icon-star { - background-position: -120px 0; -} - -.icon-star-empty { - background-position: -144px 0; -} - -.icon-user { - background-position: -168px 0; -} - -.icon-film { - background-position: -192px 0; -} - -.icon-th-large { - background-position: -216px 0; -} - -.icon-th { - background-position: -240px 0; -} - -.icon-th-list { - background-position: -264px 0; -} - -.icon-ok { - background-position: -288px 0; -} - -.icon-remove { - background-position: -312px 0; -} - -.icon-zoom-in { - background-position: -336px 0; -} - -.icon-zoom-out { - background-position: -360px 0; -} - -.icon-off { - background-position: -384px 0; -} - -.icon-signal { - background-position: -408px 0; -} - -.icon-cog { - background-position: -432px 0; -} - -.icon-trash { - background-position: -456px 0; -} - -.icon-home { - background-position: 0 -24px; -} - -.icon-file { - background-position: -24px -24px; -} - -.icon-time { - background-position: -48px -24px; -} - -.icon-road { - background-position: -72px -24px; -} - -.icon-download-alt { - background-position: -96px -24px; -} - -.icon-download { - background-position: -120px -24px; -} - -.icon-upload { - background-position: -144px -24px; -} - -.icon-inbox { - background-position: -168px -24px; -} - -.icon-play-circle { - background-position: -192px -24px; -} - -.icon-repeat { - background-position: -216px -24px; -} - -.icon-refresh { - background-position: -240px -24px; -} - -.icon-list-alt { - background-position: -264px -24px; -} - -.icon-lock { - background-position: -287px -24px; -} - -.icon-flag { - background-position: -312px -24px; -} - -.icon-headphones { - background-position: -336px -24px; -} - -.icon-volume-off { - background-position: -360px -24px; -} - -.icon-volume-down { - background-position: -384px -24px; -} - -.icon-volume-up { - background-position: -408px -24px; -} - -.icon-qrcode { - background-position: -432px -24px; -} - -.icon-barcode { - background-position: -456px -24px; -} - -.icon-tag { - background-position: 0 -48px; -} - -.icon-tags { - background-position: -25px -48px; -} - -.icon-book { - background-position: -48px -48px; -} - -.icon-bookmark { - background-position: -72px -48px; -} - -.icon-print { - background-position: -96px -48px; -} - -.icon-camera { - background-position: -120px -48px; -} - -.icon-font { - background-position: -144px -48px; -} - -.icon-bold { - background-position: -167px -48px; -} - -.icon-italic { - background-position: -192px -48px; -} - -.icon-text-height { - background-position: -216px -48px; -} - -.icon-text-width { - background-position: -240px -48px; -} - -.icon-align-left { - background-position: -264px -48px; -} - -.icon-align-center { - background-position: -288px -48px; -} - -.icon-align-right { - background-position: -312px -48px; -} - -.icon-align-justify { - background-position: -336px -48px; -} - -.icon-list { - background-position: -360px -48px; -} - -.icon-indent-left { - background-position: -384px -48px; -} - -.icon-indent-right { - background-position: -408px -48px; -} - -.icon-facetime-video { - background-position: -432px -48px; -} - -.icon-picture { - background-position: -456px -48px; -} - -.icon-pencil { - background-position: 0 -72px; -} - -.icon-map-marker { - background-position: -24px -72px; -} - -.icon-adjust { - background-position: -48px -72px; -} - -.icon-tint { - background-position: -72px -72px; -} - -.icon-edit { - background-position: -96px -72px; -} - -.icon-share { - background-position: -120px -72px; -} - -.icon-check { - background-position: -144px -72px; -} - -.icon-move { - background-position: -168px -72px; -} - -.icon-step-backward { - background-position: -192px -72px; -} - -.icon-fast-backward { - background-position: -216px -72px; -} - -.icon-backward { - background-position: -240px -72px; -} - -.icon-play { - background-position: -264px -72px; -} - -.icon-pause { - background-position: -288px -72px; -} - -.icon-stop { - background-position: -312px -72px; -} - -.icon-forward { - background-position: -336px -72px; -} - -.icon-fast-forward { - background-position: -360px -72px; -} - -.icon-step-forward { - background-position: -384px -72px; -} - -.icon-eject { - background-position: -408px -72px; -} - -.icon-chevron-left { - background-position: -432px -72px; -} - -.icon-chevron-right { - background-position: -456px -72px; -} - -.icon-plus-sign { - background-position: 0 -96px; -} - -.icon-minus-sign { - background-position: -24px -96px; -} - -.icon-remove-sign { - background-position: -48px -96px; -} - -.icon-ok-sign { - background-position: -72px -96px; -} - -.icon-question-sign { - background-position: -96px -96px; -} - -.icon-info-sign { - background-position: -120px -96px; -} - -.icon-screenshot { - background-position: -144px -96px; -} - -.icon-remove-circle { - background-position: -168px -96px; -} - -.icon-ok-circle { - background-position: -192px -96px; -} - -.icon-ban-circle { - background-position: -216px -96px; -} - -.icon-arrow-left { - background-position: -240px -96px; -} - -.icon-arrow-right { - background-position: -264px -96px; -} - -.icon-arrow-up { - background-position: -289px -96px; -} - -.icon-arrow-down { - background-position: -312px -96px; -} - -.icon-share-alt { - background-position: -336px -96px; -} - -.icon-resize-full { - background-position: -360px -96px; -} - -.icon-resize-small { - background-position: -384px -96px; -} - -.icon-plus { - background-position: -408px -96px; -} - -.icon-minus { - background-position: -433px -96px; -} - -.icon-asterisk { - background-position: -456px -96px; -} - -.icon-exclamation-sign { - background-position: 0 -120px; -} - -.icon-gift { - background-position: -24px -120px; -} - -.icon-leaf { - background-position: -48px -120px; -} - -.icon-fire { - background-position: -72px -120px; -} - -.icon-eye-open { - background-position: -96px -120px; -} - -.icon-eye-close { - background-position: -120px -120px; -} - -.icon-warning-sign { - background-position: -144px -120px; -} - -.icon-plane { - background-position: -168px -120px; -} - -.icon-calendar { - background-position: -192px -120px; -} - -.icon-random { - width: 16px; - background-position: -216px -120px; -} - -.icon-comment { - background-position: -240px -120px; -} - -.icon-magnet { - background-position: -264px -120px; -} - -.icon-chevron-up { - background-position: -288px -120px; -} - -.icon-chevron-down { - background-position: -313px -119px; -} - -.icon-retweet { - background-position: -336px -120px; -} - -.icon-shopping-cart { - background-position: -360px -120px; -} - -.icon-folder-close { - background-position: -384px -120px; -} - -.icon-folder-open { - width: 16px; - background-position: -408px -120px; -} - -.icon-resize-vertical { - background-position: -432px -119px; -} - -.icon-resize-horizontal { - background-position: -456px -118px; -} - -.icon-hdd { - background-position: 0 -144px; -} - -.icon-bullhorn { - background-position: -24px -144px; -} - -.icon-bell { - background-position: -48px -144px; -} - -.icon-certificate { - background-position: -72px -144px; -} - -.icon-thumbs-up { - background-position: -96px -144px; -} - -.icon-thumbs-down { - background-position: -120px -144px; -} - -.icon-hand-right { - background-position: -144px -144px; -} - -.icon-hand-left { - background-position: -168px -144px; -} - -.icon-hand-up { - background-position: -192px -144px; -} - -.icon-hand-down { - background-position: -216px -144px; -} - -.icon-circle-arrow-right { - background-position: -240px -144px; -} - -.icon-circle-arrow-left { - background-position: -264px -144px; -} - -.icon-circle-arrow-up { - background-position: -288px -144px; -} - -.icon-circle-arrow-down { - background-position: -312px -144px; -} - -.icon-globe { - background-position: -336px -144px; -} - -.icon-wrench { - background-position: -360px -144px; -} - -.icon-tasks { - background-position: -384px -144px; -} - -.icon-filter { - background-position: -408px -144px; -} - -.icon-briefcase { - background-position: -432px -144px; -} - -.icon-fullscreen { - background-position: -456px -144px; -} - -.dropup, -.dropdown { - position: relative; -} - -.dropdown-toggle { - *margin-bottom: -3px; -} - -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} - -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; -} - -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - *border-right-width: 2px; - *border-bottom-width: 2px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} - -.dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.dropdown-menu .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} - -.dropdown-menu li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 20px; - color: #333333; - white-space: nowrap; -} - -.dropdown-menu li > a:hover, -.dropdown-menu li > a:focus, -.dropdown-submenu:hover > a { - color: #ffffff; - text-decoration: none; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} - -.dropdown-menu .active > a, -.dropdown-menu .active > a:hover { - color: #ffffff; - text-decoration: none; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - outline: 0; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} - -.dropdown-menu .disabled > a, -.dropdown-menu .disabled > a:hover { - color: #999999; -} - -.dropdown-menu .disabled > a:hover { - text-decoration: none; - cursor: default; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.open { - *z-index: 1000; -} - -.open > .dropdown-menu { - display: block; -} - -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} - -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: ""; -} - -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} - -.dropdown-submenu { - position: relative; -} - -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - -webkit-border-radius: 0 6px 6px 6px; - -moz-border-radius: 0 6px 6px 6px; - border-radius: 0 6px 6px 6px; -} - -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} - -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; - -webkit-border-radius: 5px 5px 5px 0; - -moz-border-radius: 5px 5px 5px 0; - border-radius: 5px 5px 5px 0; -} - -.dropdown-submenu > a:after { - display: block; - float: right; - width: 0; - height: 0; - margin-top: 5px; - margin-right: -10px; - border-color: transparent; - border-left-color: #cccccc; - border-style: solid; - border-width: 5px 0 5px 5px; - content: " "; -} - -.dropdown-submenu:hover > a:after { - border-left-color: #ffffff; -} - -.dropdown-submenu.pull-left { - float: none; -} - -.dropdown-submenu.pull-left > .dropdown-menu { - left: -100%; - margin-left: 10px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} - -.dropdown .dropdown-menu .nav-header { - padding-right: 20px; - padding-left: 20px; -} - -.typeahead { - z-index: 1051; - margin-top: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} - -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} - -.well-large { - padding: 24px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.well-small { - padding: 9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} - -.fade.in { - opacity: 1; -} - -.collapse { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; -} - -.collapse.in { - height: auto; -} - -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 20px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} - -.close:hover { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.4; - filter: alpha(opacity=40); -} - -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} - -.btn { - display: inline-block; - *display: inline; - padding: 4px 12px; - margin-bottom: 0; - *margin-left: .3em; - font-size: 14px; - line-height: 20px; - color: #333333; - text-align: center; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - vertical-align: middle; - cursor: pointer; - background-color: #f5f5f5; - *background-color: #e6e6e6; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); - background-repeat: repeat-x; - border: 1px solid #bbbbbb; - *border: 0; - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - border-bottom-color: #a2a2a2; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - *zoom: 1; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn:hover, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; -} - -.btn:active, -.btn.active { - background-color: #cccccc \9; -} - -.btn:first-child { - *margin-left: 0; -} - -.btn:hover { - color: #333333; - text-decoration: none; - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; -} - -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -.btn.active, -.btn:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn.disabled, -.btn[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - -.btn-large { - padding: 11px 19px; - font-size: 17.5px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; -} - -.btn-small { - padding: 2px 10px; - font-size: 11.9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; -} - -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; -} - -.btn-mini { - padding: 0 6px; - font-size: 10.5px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.btn-block { - display: block; - width: 100%; - padding-right: 0; - padding-left: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.btn-block + .btn-block { - margin-top: 5px; -} - -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} - -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255, 255, 255, 0.75); -} - -.btn { - border-color: #c5c5c5; - border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25); -} - -.btn-primary { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #006dcc; - *background-color: #0044cc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); - background-repeat: repeat-x; - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-primary:hover, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - color: #ffffff; - background-color: #0044cc; - *background-color: #003bb3; -} - -.btn-primary:active, -.btn-primary.active { - background-color: #003399 \9; -} - -.btn-warning { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #faa732; - *background-color: #f89406; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-warning:hover, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - color: #ffffff; - background-color: #f89406; - *background-color: #df8505; -} - -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; -} - -.btn-danger { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #da4f49; - *background-color: #bd362f; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); - background-repeat: repeat-x; - border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-danger:hover, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - color: #ffffff; - background-color: #bd362f; - *background-color: #a9302a; -} - -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; -} - -.btn-success { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #5bb75b; - *background-color: #51a351; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(to bottom, #62c462, #51a351); - background-repeat: repeat-x; - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-success:hover, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - color: #ffffff; - background-color: #51a351; - *background-color: #499249; -} - -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; -} - -.btn-info { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #49afcd; - *background-color: #2f96b4; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); - background-repeat: repeat-x; - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-info:hover, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; -} - -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; -} - -.btn-inverse { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #363636; - *background-color: #222222; - background-image: -moz-linear-gradient(top, #444444, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); - background-image: -webkit-linear-gradient(top, #444444, #222222); - background-image: -o-linear-gradient(top, #444444, #222222); - background-image: linear-gradient(to bottom, #444444, #222222); - background-repeat: repeat-x; - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-inverse:hover, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - color: #ffffff; - background-color: #222222; - *background-color: #151515; -} - -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; -} - -button.btn, -input[type="submit"].btn { - *padding-top: 3px; - *padding-bottom: 3px; -} - -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; -} - -button.btn.btn-large, -input[type="submit"].btn.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; -} - -button.btn.btn-small, -input[type="submit"].btn.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; -} - -button.btn.btn-mini, -input[type="submit"].btn.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; -} - -.btn-link, -.btn-link:active, -.btn-link[disabled] { - background-color: transparent; - background-image: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - -.btn-link { - color: #0088cc; - cursor: pointer; - border-color: transparent; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-link:hover { - color: #005580; - text-decoration: underline; - background-color: transparent; -} - -.btn-link[disabled]:hover { - color: #333333; - text-decoration: none; -} - -.btn-group { - position: relative; - display: inline-block; - *display: inline; - *margin-left: .3em; - font-size: 0; - white-space: nowrap; - vertical-align: middle; - *zoom: 1; -} - -.btn-group:first-child { - *margin-left: 0; -} - -.btn-group + .btn-group { - margin-left: 5px; -} - -.btn-toolbar { - margin-top: 10px; - margin-bottom: 10px; - font-size: 0; -} - -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group { - margin-left: 5px; -} - -.btn-group > .btn { - position: relative; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-group > .btn + .btn { - margin-left: -1px; -} - -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: 14px; -} - -.btn-group > .btn-mini { - font-size: 10.5px; -} - -.btn-group > .btn-small { - font-size: 11.9px; -} - -.btn-group > .btn-large { - font-size: 17.5px; -} - -.btn-group > .btn:first-child { - margin-left: 0; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-topleft: 4px; -} - -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-bottomright: 4px; -} - -.btn-group > .btn.large:first-child { - margin-left: 0; - -webkit-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -webkit-border-top-left-radius: 6px; - border-top-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-topleft: 6px; -} - -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 6px; -} - -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; -} - -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} - -.btn-group > .btn + .dropdown-toggle { - *padding-top: 5px; - padding-right: 8px; - *padding-bottom: 5px; - padding-left: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn-group > .btn-mini + .dropdown-toggle { - *padding-top: 2px; - padding-right: 5px; - *padding-bottom: 2px; - padding-left: 5px; -} - -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; -} - -.btn-group > .btn-large + .dropdown-toggle { - *padding-top: 7px; - padding-right: 12px; - *padding-bottom: 7px; - padding-left: 12px; -} - -.btn-group.open .dropdown-toggle { - background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn-group.open .btn.dropdown-toggle { - background-color: #e6e6e6; -} - -.btn-group.open .btn-primary.dropdown-toggle { - background-color: #0044cc; -} - -.btn-group.open .btn-warning.dropdown-toggle { - background-color: #f89406; -} - -.btn-group.open .btn-danger.dropdown-toggle { - background-color: #bd362f; -} - -.btn-group.open .btn-success.dropdown-toggle { - background-color: #51a351; -} - -.btn-group.open .btn-info.dropdown-toggle { - background-color: #2f96b4; -} - -.btn-group.open .btn-inverse.dropdown-toggle { - background-color: #222222; -} - -.btn .caret { - margin-top: 8px; - margin-left: 0; -} - -.btn-mini .caret, -.btn-small .caret, -.btn-large .caret { - margin-top: 6px; -} - -.btn-large .caret { - border-top-width: 5px; - border-right-width: 5px; - border-left-width: 5px; -} - -.dropup .btn-large .caret { - border-bottom-width: 5px; -} - -.btn-primary .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret, -.btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.btn-group-vertical { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; -} - -.btn-group-vertical > .btn { - display: block; - float: none; - max-width: 100%; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-group-vertical > .btn + .btn { - margin-top: -1px; - margin-left: 0; -} - -.btn-group-vertical > .btn:first-child { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} - -.btn-group-vertical > .btn:last-child { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} - -.btn-group-vertical > .btn-large:first-child { - -webkit-border-radius: 6px 6px 0 0; - -moz-border-radius: 6px 6px 0 0; - border-radius: 6px 6px 0 0; -} - -.btn-group-vertical > .btn-large:last-child { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} - -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 20px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - background-color: #fcf8e3; - border: 1px solid #fbeed5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.alert, -.alert h4 { - color: #c09853; -} - -.alert h4 { - margin: 0; -} - -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 20px; -} - -.alert-success { - color: #468847; - background-color: #dff0d8; - border-color: #d6e9c6; -} - -.alert-success h4 { - color: #468847; -} - -.alert-danger, -.alert-error { - color: #b94a48; - background-color: #f2dede; - border-color: #eed3d7; -} - -.alert-danger h4, -.alert-error h4 { - color: #b94a48; -} - -.alert-info { - color: #3a87ad; - background-color: #d9edf7; - border-color: #bce8f1; -} - -.alert-info h4 { - color: #3a87ad; -} - -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} - -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} - -.alert-block p + p { - margin-top: 5px; -} - -.nav { - margin-bottom: 20px; - margin-left: 0; - list-style: none; -} - -.nav > li > a { - display: block; -} - -.nav > li > a:hover { - text-decoration: none; - background-color: #eeeeee; -} - -.nav > li > a > img { - max-width: none; -} - -.nav > .pull-right { - float: right; -} - -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: 20px; - color: #999999; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - text-transform: uppercase; -} - -.nav li + .nav-header { - margin-top: 9px; -} - -.nav-list { - padding-right: 15px; - padding-left: 15px; - margin-bottom: 0; -} - -.nav-list > li > a, -.nav-list .nav-header { - margin-right: -15px; - margin-left: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} - -.nav-list > li > a { - padding: 3px 15px; -} - -.nav-list > .active > a, -.nav-list > .active > a:hover { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - background-color: #0088cc; -} - -.nav-list [class^="icon-"], -.nav-list [class*=" icon-"] { - margin-right: 2px; -} - -.nav-list .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} - -.nav-tabs, -.nav-pills { - *zoom: 1; -} - -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - line-height: 0; - content: ""; -} - -.nav-tabs:after, -.nav-pills:after { - clear: both; -} - -.nav-tabs > li, -.nav-pills > li { - float: left; -} - -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; -} - -.nav-tabs { - border-bottom: 1px solid #ddd; -} - -.nav-tabs > li { - margin-bottom: -1px; -} - -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: 20px; - border: 1px solid transparent; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} - -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} - -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover { - color: #555555; - cursor: default; - background-color: #ffffff; - border: 1px solid #ddd; - border-bottom-color: transparent; -} - -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} - -.nav-pills > .active > a, -.nav-pills > .active > a:hover { - color: #ffffff; - background-color: #0088cc; -} - -.nav-stacked > li { - float: none; -} - -.nav-stacked > li > a { - margin-right: 0; -} - -.nav-tabs.nav-stacked { - border-bottom: 0; -} - -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.nav-tabs.nav-stacked > li:first-child > a { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-topleft: 4px; -} - -.nav-tabs.nav-stacked > li:last-child > a { - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -moz-border-radius-bottomright: 4px; - -moz-border-radius-bottomleft: 4px; -} - -.nav-tabs.nav-stacked > li > a:hover { - z-index: 2; - border-color: #ddd; -} - -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} - -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; -} - -.nav-tabs .dropdown-menu { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} - -.nav-pills .dropdown-menu { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.nav .dropdown-toggle .caret { - margin-top: 6px; - border-top-color: #0088cc; - border-bottom-color: #0088cc; -} - -.nav .dropdown-toggle:hover .caret { - border-top-color: #005580; - border-bottom-color: #005580; -} - -/* move down carets for tabs */ - -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; -} - -.nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; -} - -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.nav > .dropdown.active > a:hover { - cursor: pointer; -} - -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover { - color: #ffffff; - background-color: #999999; - border-color: #999999; -} - -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); -} - -.tabs-stacked .open > a:hover { - border-color: #999999; -} - -.tabbable { - *zoom: 1; -} - -.tabbable:before, -.tabbable:after { - display: table; - line-height: 0; - content: ""; -} - -.tabbable:after { - clear: both; -} - -.tab-content { - overflow: auto; -} - -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; -} - -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} - -.tab-content > .active, -.pill-content > .active { - display: block; -} - -.tabs-below > .nav-tabs { - border-top: 1px solid #ddd; -} - -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} - -.tabs-below > .nav-tabs > li > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} - -.tabs-below > .nav-tabs > li > a:hover { - border-top-color: #ddd; - border-bottom-color: transparent; -} - -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover { - border-color: transparent #ddd #ddd #ddd; -} - -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; -} - -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} - -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} - -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.tabs-left > .nav-tabs > li > a:hover { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; -} - -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: #ffffff; -} - -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} - -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.tabs-right > .nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; -} - -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: #ffffff; -} - -.nav > .disabled > a { - color: #999999; -} - -.nav > .disabled > a:hover { - text-decoration: none; - cursor: default; - background-color: transparent; -} - -.navbar { - *position: relative; - *z-index: 2; - margin-bottom: 20px; - overflow: visible; -} - -.navbar-inner { - min-height: 40px; - padding-right: 20px; - padding-left: 20px; - background-color: #fafafa; - background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); - background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); - background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); - background-repeat: repeat-x; - border: 1px solid #d4d4d4; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); - *zoom: 1; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); -} - -.navbar-inner:before, -.navbar-inner:after { - display: table; - line-height: 0; - content: ""; -} - -.navbar-inner:after { - clear: both; -} - -.navbar .container { - width: auto; -} - -.nav-collapse.collapse { - height: auto; - overflow: visible; -} - -.navbar .brand { - display: block; - float: left; - padding: 10px 20px 10px; - margin-left: -20px; - font-size: 20px; - font-weight: 200; - color: #777777; - text-shadow: 0 1px 0 #ffffff; -} - -.navbar .brand:hover { - text-decoration: none; -} - -.navbar-text { - margin-bottom: 0; - line-height: 40px; - color: #777777; -} - -.navbar-link { - color: #777777; -} - -.navbar-link:hover { - color: #333333; -} - -.navbar .divider-vertical { - height: 40px; - margin: 0 9px; - border-right: 1px solid #ffffff; - border-left: 1px solid #f2f2f2; -} - -.navbar .btn, -.navbar .btn-group { - margin-top: 5px; -} - -.navbar .btn-group .btn, -.navbar .input-prepend .btn, -.navbar .input-append .btn { - margin-top: 0; -} - -.navbar-form { - margin-bottom: 0; - *zoom: 1; -} - -.navbar-form:before, -.navbar-form:after { - display: table; - line-height: 0; - content: ""; -} - -.navbar-form:after { - clear: both; -} - -.navbar-form input, -.navbar-form select, -.navbar-form .radio, -.navbar-form .checkbox { - margin-top: 5px; -} - -.navbar-form input, -.navbar-form select, -.navbar-form .btn { - display: inline-block; - margin-bottom: 0; -} - -.navbar-form input[type="image"], -.navbar-form input[type="checkbox"], -.navbar-form input[type="radio"] { - margin-top: 3px; -} - -.navbar-form .input-append, -.navbar-form .input-prepend { - margin-top: 5px; - white-space: nowrap; -} - -.navbar-form .input-append input, -.navbar-form .input-prepend input { - margin-top: 0; -} - -.navbar-search { - position: relative; - float: left; - margin-top: 5px; - margin-bottom: 0; -} - -.navbar-search .search-query { - padding: 4px 14px; - margin-bottom: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 1; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -.navbar-static-top { - position: static; - margin-bottom: 0; -} - -.navbar-static-top .navbar-inner { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - margin-bottom: 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - border-width: 0 0 1px; -} - -.navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-right: 0; - padding-left: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} - -.navbar-fixed-top { - top: 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -} - -.navbar-fixed-bottom { - bottom: 0; -} - -.navbar-fixed-bottom .navbar-inner { - -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); - box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); -} - -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} - -.navbar .nav.pull-right { - float: right; - margin-right: 0; -} - -.navbar .nav > li { - float: left; -} - -.navbar .nav > li > a { - float: none; - padding: 10px 15px 10px; - color: #777777; - text-decoration: none; - text-shadow: 0 1px 0 #ffffff; -} - -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; -} - -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - color: #333333; - text-decoration: none; - background-color: transparent; -} - -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - color: #555555; - text-decoration: none; - background-color: #e5e5e5; - -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); -} - -.navbar .btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-right: 5px; - margin-left: 5px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #ededed; - *background-color: #e5e5e5; - background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); - background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); - background-repeat: repeat-x; - border-color: #e5e5e5 #e5e5e5 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); -} - -.navbar .btn-navbar:hover, -.navbar .btn-navbar:active, -.navbar .btn-navbar.active, -.navbar .btn-navbar.disabled, -.navbar .btn-navbar[disabled] { - color: #ffffff; - background-color: #e5e5e5; - *background-color: #d9d9d9; -} - -.navbar .btn-navbar:active, -.navbar .btn-navbar.active { - background-color: #cccccc \9; -} - -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); -} - -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} - -.navbar .nav > li > .dropdown-menu:before { - position: absolute; - top: -7px; - left: 9px; - display: inline-block; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-left: 7px solid transparent; - border-bottom-color: rgba(0, 0, 0, 0.2); - content: ''; -} - -.navbar .nav > li > .dropdown-menu:after { - position: absolute; - top: -6px; - left: 10px; - display: inline-block; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - border-left: 6px solid transparent; - content: ''; -} - -.navbar-fixed-bottom .nav > li > .dropdown-menu:before { - top: auto; - bottom: -7px; - border-top: 7px solid #ccc; - border-bottom: 0; - border-top-color: rgba(0, 0, 0, 0.2); -} - -.navbar-fixed-bottom .nav > li > .dropdown-menu:after { - top: auto; - bottom: -6px; - border-top: 6px solid #ffffff; - border-bottom: 0; -} - -.navbar .nav li.dropdown > a:hover .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - color: #555555; - background-color: #e5e5e5; -} - -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #777777; - border-bottom-color: #777777; -} - -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu:before, -.navbar .nav > li > .dropdown-menu.pull-right:before { - right: 12px; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu:after, -.navbar .nav > li > .dropdown-menu.pull-right:after { - right: 13px; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { - right: 100%; - left: auto; - margin-right: -1px; - margin-left: 0; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} - -.navbar-inverse .navbar-inner { - background-color: #1b1b1b; - background-image: -moz-linear-gradient(top, #222222, #111111); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); - background-image: -webkit-linear-gradient(top, #222222, #111111); - background-image: -o-linear-gradient(top, #222222, #111111); - background-image: linear-gradient(to bottom, #222222, #111111); - background-repeat: repeat-x; - border-color: #252525; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); -} - -.navbar-inverse .brand, -.navbar-inverse .nav > li > a { - color: #999999; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} - -.navbar-inverse .brand:hover, -.navbar-inverse .nav > li > a:hover { - color: #ffffff; -} - -.navbar-inverse .brand { - color: #999999; -} - -.navbar-inverse .navbar-text { - color: #999999; -} - -.navbar-inverse .nav > li > a:focus, -.navbar-inverse .nav > li > a:hover { - color: #ffffff; - background-color: transparent; -} - -.navbar-inverse .nav .active > a, -.navbar-inverse .nav .active > a:hover, -.navbar-inverse .nav .active > a:focus { - color: #ffffff; - background-color: #111111; -} - -.navbar-inverse .navbar-link { - color: #999999; -} - -.navbar-inverse .navbar-link:hover { - color: #ffffff; -} - -.navbar-inverse .divider-vertical { - border-right-color: #222222; - border-left-color: #111111; -} - -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { - color: #ffffff; - background-color: #111111; -} - -.navbar-inverse .nav li.dropdown > a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} - -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.navbar-inverse .navbar-search .search-query { - color: #ffffff; - background-color: #515151; - border-color: #111111; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; -} - -.navbar-inverse .navbar-search .search-query:-moz-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query:focus, -.navbar-inverse .navbar-search .search-query.focused { - padding: 5px 15px; - color: #333333; - text-shadow: 0 1px 0 #ffffff; - background-color: #ffffff; - border: 0; - outline: 0; - -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); -} - -.navbar-inverse .btn-navbar { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e0e0e; - *background-color: #040404; - background-image: -moz-linear-gradient(top, #151515, #040404); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); - background-image: -webkit-linear-gradient(top, #151515, #040404); - background-image: -o-linear-gradient(top, #151515, #040404); - background-image: linear-gradient(to bottom, #151515, #040404); - background-repeat: repeat-x; - border-color: #040404 #040404 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.navbar-inverse .btn-navbar:hover, -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active, -.navbar-inverse .btn-navbar.disabled, -.navbar-inverse .btn-navbar[disabled] { - color: #ffffff; - background-color: #040404; - *background-color: #000000; -} - -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active { - background-color: #000000 \9; -} - -.breadcrumb { - padding: 8px 15px; - margin: 0 0 20px; - list-style: none; - background-color: #f5f5f5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.breadcrumb > li { - display: inline-block; - *display: inline; - text-shadow: 0 1px 0 #ffffff; - *zoom: 1; -} - -.breadcrumb > li > .divider { - padding: 0 5px; - color: #ccc; -} - -.breadcrumb > .active { - color: #999999; -} - -.pagination { - margin: 20px 0; -} - -.pagination ul { - display: inline-block; - *display: inline; - margin-bottom: 0; - margin-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - *zoom: 1; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.pagination ul > li { - display: inline; -} - -.pagination ul > li > a, -.pagination ul > li > span { - float: left; - padding: 4px 12px; - line-height: 20px; - text-decoration: none; - background-color: #ffffff; - border: 1px solid #dddddd; - border-left-width: 0; -} - -.pagination ul > li > a:hover, -.pagination ul > .active > a, -.pagination ul > .active > span { - background-color: #f5f5f5; -} - -.pagination ul > .active > a, -.pagination ul > .active > span { - color: #999999; - cursor: default; -} - -.pagination ul > .disabled > span, -.pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover { - color: #999999; - cursor: default; - background-color: transparent; -} - -.pagination ul > li:first-child > a, -.pagination ul > li:first-child > span { - border-left-width: 1px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-topleft: 4px; -} - -.pagination ul > li:last-child > a, -.pagination ul > li:last-child > span { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-bottomright: 4px; -} - -.pagination-centered { - text-align: center; -} - -.pagination-right { - text-align: right; -} - -.pagination-large ul > li > a, -.pagination-large ul > li > span { - padding: 11px 19px; - font-size: 17.5px; -} - -.pagination-large ul > li:first-child > a, -.pagination-large ul > li:first-child > span { - -webkit-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -webkit-border-top-left-radius: 6px; - border-top-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-topleft: 6px; -} - -.pagination-large ul > li:last-child > a, -.pagination-large ul > li:last-child > span { - -webkit-border-top-right-radius: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 6px; -} - -.pagination-mini ul > li:first-child > a, -.pagination-small ul > li:first-child > a, -.pagination-mini ul > li:first-child > span, -.pagination-small ul > li:first-child > span { - -webkit-border-bottom-left-radius: 3px; - border-bottom-left-radius: 3px; - -webkit-border-top-left-radius: 3px; - border-top-left-radius: 3px; - -moz-border-radius-bottomleft: 3px; - -moz-border-radius-topleft: 3px; -} - -.pagination-mini ul > li:last-child > a, -.pagination-small ul > li:last-child > a, -.pagination-mini ul > li:last-child > span, -.pagination-small ul > li:last-child > span { - -webkit-border-top-right-radius: 3px; - border-top-right-radius: 3px; - -webkit-border-bottom-right-radius: 3px; - border-bottom-right-radius: 3px; - -moz-border-radius-topright: 3px; - -moz-border-radius-bottomright: 3px; -} - -.pagination-small ul > li > a, -.pagination-small ul > li > span { - padding: 2px 10px; - font-size: 11.9px; -} - -.pagination-mini ul > li > a, -.pagination-mini ul > li > span { - padding: 0 6px; - font-size: 10.5px; -} - -.pager { - margin: 20px 0; - text-align: center; - list-style: none; - *zoom: 1; -} - -.pager:before, -.pager:after { - display: table; - line-height: 0; - content: ""; -} - -.pager:after { - clear: both; -} - -.pager li { - display: inline; -} - -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -.pager li > a:hover { - text-decoration: none; - background-color: #f5f5f5; -} - -.pager .next > a, -.pager .next > span { - float: right; -} - -.pager .previous > a, -.pager .previous > span { - float: left; -} - -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > span { - color: #999999; - cursor: default; - background-color: #fff; -} - -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} - -.modal-backdrop.fade { - opacity: 0; -} - -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); -} - -.modal { - position: fixed; - top: 10%; - left: 50%; - z-index: 1050; - width: 560px; - margin-left: -280px; - background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - outline: none; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} - -.modal.fade { - top: -25%; - -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; - -moz-transition: opacity 0.3s linear, top 0.3s ease-out; - -o-transition: opacity 0.3s linear, top 0.3s ease-out; - transition: opacity 0.3s linear, top 0.3s ease-out; -} - -.modal.fade.in { - top: 10%; -} - -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; -} - -.modal-header .close { - margin-top: 2px; -} - -.modal-header h3 { - margin: 0; - line-height: 30px; -} - -.modal-body { - position: relative; - max-height: 400px; - padding: 15px; - overflow-y: auto; -} - -.modal-form { - margin-bottom: 0; -} - -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - *zoom: 1; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; -} - -.modal-footer:before, -.modal-footer:after { - display: table; - line-height: 0; - content: ""; -} - -.modal-footer:after { - clear: both; -} - -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} - -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} - -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} - -.tooltip { - position: absolute; - z-index: 1030; - display: block; - padding: 5px; - font-size: 11px; - opacity: 0; - filter: alpha(opacity=0); - visibility: visible; -} - -.tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} - -.tooltip.top { - margin-top: -3px; -} - -.tooltip.right { - margin-left: 3px; -} - -.tooltip.bottom { - margin-top: 3px; -} - -.tooltip.left { - margin-left: -3px; -} - -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-top-color: #000000; - border-width: 5px 5px 0; -} - -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-right-color: #000000; - border-width: 5px 5px 5px 0; -} - -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-left-color: #000000; - border-width: 5px 0 5px 5px; -} - -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - width: 236px; - padding: 1px; - text-align: left; - white-space: normal; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} - -.popover.top { - margin-top: -10px; -} - -.popover.right { - margin-left: 10px; -} - -.popover.bottom { - margin-top: 10px; -} - -.popover.left { - margin-left: -10px; -} - -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} - -.popover-content { - padding: 9px 14px; -} - -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.popover .arrow { - border-width: 11px; -} - -.popover .arrow:after { - border-width: 10px; - content: ""; -} - -.popover.top .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, 0.25); - border-bottom-width: 0; -} - -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-top-color: #ffffff; - border-bottom-width: 0; -} - -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, 0.25); - border-left-width: 0; -} - -.popover.right .arrow:after { - bottom: -10px; - left: 1px; - border-right-color: #ffffff; - border-left-width: 0; -} - -.popover.bottom .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, 0.25); - border-top-width: 0; -} - -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-bottom-color: #ffffff; - border-top-width: 0; -} - -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, 0.25); - border-right-width: 0; -} - -.popover.left .arrow:after { - right: 1px; - bottom: -10px; - border-left-color: #ffffff; - border-right-width: 0; -} - -.thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; -} - -.thumbnails:before, -.thumbnails:after { - display: table; - line-height: 0; - content: ""; -} - -.thumbnails:after { - clear: both; -} - -.row-fluid .thumbnails { - margin-left: 0; -} - -.thumbnails > li { - float: left; - margin-bottom: 20px; - margin-left: 20px; -} - -.thumbnail { - display: block; - padding: 4px; - line-height: 20px; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} - -a.thumbnail:hover { - border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); -} - -.thumbnail > img { - display: block; - max-width: 100%; - margin-right: auto; - margin-left: auto; -} - -.thumbnail .caption { - padding: 9px; - color: #555555; -} - -.media, -.media-body { - overflow: hidden; - *overflow: visible; - zoom: 1; -} - -.media, -.media .media { - margin-top: 15px; -} - -.media:first-child { - margin-top: 0; -} - -.media-object { - display: block; -} - -.media-heading { - margin: 0 0 5px; -} - -.media .pull-left { - margin-right: 10px; -} - -.media .pull-right { - margin-left: 10px; -} - -.media-object.logo { - margin-top: 20px; - margin-bottom: -40px; - width: 48%; - margin-left: 0px; - vertical-align: bottom; -} - -.media-list { - margin-left: 0; - list-style: none; -} - -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: 11.844px; - font-weight: bold; - line-height: 14px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - white-space: nowrap; - vertical-align: baseline; - background-color: #999999; -} - -.label { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.badge { - padding-right: 9px; - padding-left: 9px; - -webkit-border-radius: 9px; - -moz-border-radius: 9px; - border-radius: 9px; -} - -.label:empty, -.badge:empty { - display: none; -} - -a.label:hover, -a.badge:hover { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} - -.label-important, -.badge-important { - background-color: #b94a48; -} - -.label-important[href], -.badge-important[href] { - background-color: #953b39; -} - -.label-warning, -.badge-warning { - background-color: #f89406; -} - -.label-warning[href], -.badge-warning[href] { - background-color: #c67605; -} - -.label-success, -.badge-success { - background-color: #468847; -} - -.label-success[href], -.badge-success[href] { - background-color: #356635; -} - -.label-info, -.badge-info { - background-color: #3a87ad; -} - -.label-info[href], -.badge-info[href] { - background-color: #2d6987; -} - -.label-inverse, -.badge-inverse { - background-color: #333333; -} - -.label-inverse[href], -.badge-inverse[href] { - background-color: #1a1a1a; -} - -.btn .label, -.btn .badge { - position: relative; - top: -1px; -} - -.btn-mini .label, -.btn-mini .badge { - top: 0; -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-moz-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-ms-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} - -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -.progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} - -.progress .bar { - float: left; - width: 0; - height: 100%; - font-size: 12px; - color: #ffffff; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(to bottom, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} - -.progress .bar + .bar { - -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); -} - -.progress-striped .bar { - background-color: #149bdf; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} - -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} - -.progress-danger .bar, -.progress .bar-danger { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); -} - -.progress-danger.progress-striped .bar, -.progress-striped .bar-danger { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-success .bar, -.progress .bar-success { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(to bottom, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); -} - -.progress-success.progress-striped .bar, -.progress-striped .bar-success { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-info .bar, -.progress .bar-info { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); -} - -.progress-info.progress-striped .bar, -.progress-striped .bar-info { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-warning .bar, -.progress .bar-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); -} - -.progress-warning.progress-striped .bar, -.progress-striped .bar-warning { - background-color: #fbb450; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.accordion { - margin-bottom: 20px; -} - -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.accordion-heading { - border-bottom: 0; -} - -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} - -.accordion-toggle { - cursor: pointer; -} - -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} - -.carousel { - position: relative; - margin-bottom: 20px; - line-height: 1; -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} - -.carousel-inner > .item { - position: relative; - display: none; - -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} - -.carousel-inner > .item > img { - display: block; - line-height: 1; -} - -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} - -.carousel-inner > .active { - left: 0; -} - -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} - -.carousel-inner > .next { - left: 100%; -} - -.carousel-inner > .prev { - left: -100%; -} - -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} - -.carousel-inner > .active.left { - left: -100%; -} - -.carousel-inner > .active.right { - left: 100%; -} - -.carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; - text-align: center; - background: #222222; - border: 3px solid #ffffff; - -webkit-border-radius: 23px; - -moz-border-radius: 23px; - border-radius: 23px; - opacity: 0.5; - filter: alpha(opacity=50); -} - -.carousel-control.right { - right: 15px; - left: auto; -} - -.carousel-control:hover { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} - -.carousel-caption { - position: absolute; - right: 0; - bottom: 0; - left: 0; - padding: 15px; - background: #333333; - background: rgba(0, 0, 0, 0.75); -} - -.carousel-caption h4, -.carousel-caption p { - line-height: 20px; - color: #ffffff; -} - -.carousel-caption h4 { - margin: 0 0 5px; -} - -.carousel-caption p { - margin-bottom: 0; -} - -.hero-unit { - padding: 60px; - margin-bottom: 30px; - font-size: 18px; - font-weight: 200; - line-height: 30px; - color: inherit; - background-color: #eeeeee; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.hero-unit h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - letter-spacing: -1px; - color: inherit; -} - -.hero-unit li { - line-height: 30px; -} - -.pull-right { - float: right; -} - -.pull-left { - float: left; -} - -.hide { - display: none; -} - -.show { - display: block; -} - -.invisible { - visibility: hidden; -} - -.affix { - position: fixed; -} diff --git a/css/bootstrap/img/glyphicons-halflings-white.png b/css/bootstrap/img/glyphicons-halflings-white.png deleted file mode 100644 index 3bf6484a..00000000 Binary files a/css/bootstrap/img/glyphicons-halflings-white.png and /dev/null differ diff --git a/css/bootstrap/img/glyphicons-halflings.png b/css/bootstrap/img/glyphicons-halflings.png deleted file mode 100644 index a9969993..00000000 Binary files a/css/bootstrap/img/glyphicons-halflings.png and /dev/null differ diff --git a/css/main.scss b/css/main.scss deleted file mode 100755 index 3446cc83..00000000 --- a/css/main.scss +++ /dev/null @@ -1,70 +0,0 @@ ---- -# Only the main Sass file needs front matter (the dashes are enough) ---- -@charset "utf-8"; - - - -// Our variables -$base-font-family: Helvetica,Arial,sans-serif; -$base-font-size: 16px; -$small-font-size: $base-font-size * 0.875; -$base-line-height: 1.5; - -$spacing-unit: 30px; - -$text-color: #111; -$background-color: #ffffff; -$brand-color: #2a7ae2; -$menu-color: #292929; - -$grey-color: #333333; -$grey-color-light: lighten($grey-color, 40%); -$grey-color-dark: darken($grey-color, 25%); - -$on-palm: 600px; -$on-laptop: 800px; -$on-desktop: 1060px; - - - -// Using media queries with like this: -// @include media-query($palm) { -// .wrapper { -// padding-right: $spacing-unit / 2; -// padding-left: $spacing-unit / 2; -// } -// } -@mixin media-query($device) { - @media screen and (max-width: $device) { - @content; - } -} - - - -// Import partials from `sass_dir` (defaults to `_sass`) -@import - "base", - "layout", - "syntax-highlighting" -; - -.projects { - @import "../_sass/bootstrap-sass-3.3.7/assets/stylesheets/_bootstrap.scss"; - @import "../gsoc/display/resources/css/style.scss"; - @import "../_sass/materialize-src/sass/materialize.scss"; - .container { - width: 95%; - } - code { - padding: 2px 4px; - font-size: 0.9em; - color: #ffffff; - background-color: #194242; - border-radius: 11px; - } - li { - line-height:1.5; - } -} diff --git a/css/swc-bootstrap.css b/css/swc-bootstrap.css deleted file mode 100644 index 923db6b5..00000000 --- a/css/swc-bootstrap.css +++ /dev/null @@ -1,263 +0,0 @@ -/* Customizations to Bootstrap's default styles */ - -/* readability: darken the alert colour for contrast with background */ -.alert { - color: rgb(0,0,0); -} - -.navbar .brand { - padding-top: 0px; /* align the logo */ - text-shadow:none; -} - -.navbar { - margin:0; - border-top:5px solid #2b3990; - border-bottom:1px solid #CCC; -} - -.navbar .container { - background-color: inherit; - font-size:11pt; - padding:27px 10px 0px 10px; - background:url('../img/software-carpentry-banner.png') no-repeat; - background-size: 250px; - background-position: 10px 10px; - height:50px; -} - -.navbar-inner { - min-height: 40px; -} - -.navbar .nav > li > a { - padding: 10px; -} - -.navbar-inverse .nav > li > a { - color: #f0f0f0; - text-shadow:none; -} - -.navbar-inverse .navbar-inner { - background:#D6D6D6; -} - -.navbar-inverse .nav .active > a, -.navbar-inverse .nav .active > a:hover, -.navbar-inverse .nav .active > a:focus { - color: #2b3990; -} - -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { - color: #ffffff; - background-color: #B9B9C4; -} - -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} - -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.navbar-inverse .navbar-search .search-query { - background-color: #ffffff; - color: #666666; - border-color:#2b3990; - width:150px; -} - -.navbar-inverse .navbar-search { - border: none; -} - -.navbar-inverse .nav-collapse .nav > li > a:hover, -.navbar-inverse .nav-collapse .dropdown-menu a:hover { - background-color: transparent; -} - -.navbar-inverse .nav-collapse .nav > li > a, .navbar-inverse .nav-collapse .dropdown-menu a { - color: #2b3990; - text-align: center; -} - -.navbar-inverse .nav-collapse .nav > li:hover > a { - color: #935212; -} - -.navbar.transparent.navbar-inverse .navbar-inner { - border-width: 0px; - -webkit-box-shadow: 0px 0px; - box-shadow: 0px 0px; - border-radius:0; - -webkit-border-radius:0; - background-image: -webkit-gradient(linear, 50.00% 0.00%, 50.00% 100.00%, color-stop( 0% , rgba(0,0,0,0.00)),color-stop( 100% , rgba(0,0,0,0.00))); - background-image: -webkit-linear-gradient(270deg,rgba(0,0,0,0.00) 0%,rgba(0,0,0,0.00) 100%); - background-image: linear-gradient(180deg,rgba(0,0,0,0.00) 0%,rgba(0,0,0,0.00) 100%); -} - -code { - color: #333333; -} - -.container { - max-width:920px; -} - -blockquote p { - font-size:14px; -} - -/* GitHub Ribbon */ - -#github-ribbon a { - background:#000; - color:#fff; - text-decoration:none; - font-family:arial, sans-serif; - text-align:center; - font-weight:bold; - padding:5px 40%; - font-size:0.8rem; - line-height:1.6rem; - position:relative; - transition:0.5s; - width:100%; - margin: 0 auto; - white-space: nowrap; - z-index:10; -} - -#github-ribbon a:hover { - background:#600; - color:#fff; -} - -#github-ribbon a::before, #github-ribbon a::after { - content:""; - width:100%; - display:block; - position:absolute; - top:1px; - left:0; - height:1px; - background:#fff; -} - -#github-ribbon a::after{ - bottom:1px; - top:auto; -} - -/* Media Queries */ - -@media (max-width: 979px){ - .navbar-inverse .nav-collapse ul{ - margin:20px 0 0; - } - - .navbar-inverse .nav-collapse .nav > li > a { - font-size: 12pt; - } - - .navbar-inverse .nav-collapse .navbar-search { - text-align: center; - border-top:1px solid #AAA; - margin:0; - } - - .navbar-inverse .nav-collapse .navbar-search .search-query { - margin:10px 0; - } - - .navbar-inverse .nav-collapse .nav > li { - border-top:1px solid #AAA; - padding:10px 0; - } - -} - -@media (max-width: 767px) { - .container { - padding:0 40px; - } - - body { - padding:0; - } - - .navbar-fixed-top, .navbar-fixed-bottom, .navbar-static-top { - margin-left: 0; - margin-right: 0; - margin-bottom:0; - } -} - -@media (max-width: 979px) and (min-width: 768px) { - .container { - max-width: 700px; - } - -} - -@media (max-width: 400px) { - .header h1 { - font-size: 24pt; - } - - #header-text { - font-size:16pt; - } - - .navbar .container { - background-size: 200px; - background-position: 10px 20px; - } - - #nav-logo { - width:190px; - height:40px; - } -} - -/* github ribbon breaking point */ -@media screen and (min-width:600px){ - #github-ribbon{ - position:absolute; - display:block; - top:0; - right:0; - width:150px; - overflow:hidden; - height:150px; - } - #github-ribbon a{ - width:200px; - position:absolute; - padding:5px 40px; - top:40px; - right:-80px; - transform:rotate(45deg); - -webkit-transform:rotate(45deg); - box-shadow:1px 1px 10px rgba(0,0,0,0.8); - } - .navbar .btn-navbar { - margin-right: 150px; - } -} - -@media (max-width: 319px) { - .header h1 { - font-size: 20pt; - } - - #header-text { - font-size:16pt; - } -} \ No newline at end of file diff --git a/css/swc.css b/css/swc.css deleted file mode 100644 index fdea490b..00000000 --- a/css/swc.css +++ /dev/null @@ -1,560 +0,0 @@ - -/* Headings */ -h1, h2, h3, h4, h5, h6 { - color: rgb(03,03,03); - font-family: "Montserrat", "Helvetica", "Arial"; -} - -h1, h2 { - margin-top: 40px; - margin-bottom: 10px; -} - -h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { - color: inherit; -} - -/* Things to fix. */ -.fixme { - text-decoration: underline; - color: darkred; - background-color: lightgray; -} - -/* Putting shadows around things. */ -.shadow { - -moz-box-shadow: 0 0 30px 5px #999; - -webkit-box-shadow: 0 0 30px 5px #999; - box-shadow: 0 0 30px 5px #999; -} - -/* Things to understand (lead-in to sections in book). */ -.understand { - background-color: lightyellow; -} - -/* Block quotations. */ -blockquote { - margin: 1em; - padding: 1em 1em .5em 1em; - width: 90%; -} - -/* Citation for testimonial quote. */ -blockquote.testimonial cite { - font-style: italic; -} - -/* Main body of pages. */ -body { - font-family: "Open Sans", Helvetica, Arial, sans-serif; - color: rgb(03, 03, 03); - /* background-image: set by the javascript on head.html */ - background-size: 100%; - background-repeat: no-repeat; - background-colur: white -} - -/* Styling for editorial stylesheet */ -body.stylesheet { - background: #ffffff; - width: 60em; - margin: 20 auto; -} - -/* Explanatory call-out boxes. */ -div.box { - width: 54em; - background-color: mistyrose; - display: block; - margin-left: auto; - margin-right: auto; - padding-top: 1px; - padding-bottom: 1px; - padding-left: 10px; - padding-right: 10px; - outline-color: gray; - outline-width: 1px; - outline-style: solid; -} - -/* Level 2 headings inside pages. */ -div.content div h3 { - border-bottom: 1px solid #CCCCCC; - display: block; - font-family: Verdana,"BitStream vera Sans"; - margin-top: 10px; - padding: 0 5px 3px; -} - -/* PDF and slide files referenced from lectures. */ -div.files { - padding: 10px; -} - -.swc-blue-bg { - /*background-color: #20267D;*/ - /* svg colour is slightly different? */ - background: #2b3990; -} - -/* Main menu at the top of every page. */ -div.mainmenu { - clear: both; - background-color: #F4F4F4; - margin: 0px; - padding: 3px 0px 3px 25px; - border-bottom: 1px solid #A6A6A6; - height: 30px -} - -#menubar { - float: left; - margin-top: 4px; -} - -#searchbar { - float: right; - margin-right: 20px; -} - -/* Narration for audio-only lectures. */ -div.narration { - text-align: center; - font-size: 2em; -} - -/* Table of contents. */ -div.toc { - /* No special styling yet. */ -} - -.transcript { - display: table; -} - -.transcript .media img { - border: 1px solid grey; -} - -/* YouTube video embed. */ -div.youtube { - text-align: center; - padding: 10px; -} - -/* Glossary description lists. */ -dl.gloss { - /* Empty for now. */ -} - -/* Displaying YouTube videos. */ -iframe.youtube_player { - border: 0; - text-align: center; - width: 640px; - height: 500px; -} - -/* Sections in book chapters. */ -section { - clear: both; -} - -/* Person's name in team.html. */ -.person { - font-weight: bold; - font-style: italic; -} - -/* Short review of book in bibliography. */ -span.review { - font-style: italic; -} - -/* Bibliography book covers. */ -img.book-cover { - width: 80px; -} - -/* Blog calendar table in blog/index.html. */ -table.blogcalendar th { - text-align : right; - font-weight : bold; -} - -/* See above. */ -table.blogcalendar th.left { - text-align : left; -} - -/* See above. */ -table.blogcalendar tr td { - text-align : right; -} - -/* Blog index tables in blog/index.html. */ -table.blogindex td.date { - text-align: left ; - width:10em; -} - -/* Tables used for displaying choices in challenges. */ -table.choices tr td { - vertical-align : top; -} - -/* Database tables do _not_ have double borders */ -table.outlined { - border-collapse: collapse; -} - -/* Link items (to workshop pages) in the workshops tables */ -table.workshops td.link { - width: 50%; - text-align: left; -} - -/* Spacer items (i.e. ellipsis) on the workshops tables */ -table.workshops td.spacer { - max-width: 100%; - text-align: center; -} - -/* Date columns on the workshops tables */ -table.workshops td.date { - width: 50%; - text-align: right; -} - -/* Badge modal dialog */ -#assertion-modal { - width:700px; - margin-left:-350px; -} -#assertion-modal iframe { - background-color: transparent; - border: 0px none transparent; - padding: 0px; - width: 100%; - height: 20em; -} - -#assertion-model img.badge { - position: absolute; - right: 15px; - bottom: 35px; - opacity: 0.5; -} - -/* list with checkbox as bullet */ -ul.checklist { - list-style-image: url('../img/checkbox.png'); -} - -/* FAQ */ -dl.faq dt { - font-style: italic; - font-weight: bold; -} - -section.content { - width:100%; - background: white; -} - -.header.home { - background: url(../img/header.png) no-repeat center center; - background-attachment: fixed; - -webkit-background-size: cover; - -moz-background-size: cover; - -o-background-size: cover; - background-size: cover; -} - -.header { - background:#2b3990; -} - -.header h1 { - line-height: 1.1; - margin: 60px 0px 80px; - font-size: 40pt; -} - -#header-text { - font-size:20pt; - margin:0; -} - -#nav-logo { - width:270px; - height:40px; - top:5; - left:10; - position:absolute; - z-index: 10; -} - -#home-options { - background:#F6F6F6; - border-top:1px solid #DDDDDD; - border-bottom:1px solid #DDDDDD; - padding:20px 0; - margin-bottom:20px; -} - -#title { - background:#F6F6F6; - border-top:1px solid #DDDDDD; - border-bottom:1px solid #DDDDDD; - padding:0 0 20px; - margin-bottom:20px; -} - -h5 a:link, h5 a:visited, -h4 a:link, h4 a:visited, -h3 a:link, h3 a:visited { - color:#2b3990; -} - -h5 a:hover, -h4 a:hover, -h3 a:hover { - color:#C26D17; - text-decoration: none; -} - -a { - color:#3E51CF; - -webkit-transition: all 0.2s ease; - -moz-transition: all 0.2s ease; - -o-transition: all 0.2s ease; - transition: all 0.2s ease; -} - -a:hover { - color:#965412; -} - -footer { - /* background: #2b3990; */ - background-color: #292929; - padding: 20px 0; - font-size: 10pt; - margin-top: 10px; - width: 100%; - bottom: 0; - position: static; -} - -footer a, footer a:hover{ - color:#FFF; - padding-left: 10px; -} - -footer .container .links{ - background:url('../img/software-carpentry-banner-white.png') no-repeat; - background-size: 200px; - background-position: 0; - height:40px; - padding:40px 0 0 200px; - text-align: right; -} - - -/* For the Request a Workshop form */ -#ss-form .ss-q-title { - display: block; - font-weight: bold; - padding-bottom: 0.5em; -} -#ss-form .ss-required-asterisk { - color: #c43b1d; -} -#ss-form label { - display:inline; - cursor: default; -} -#ss-form .ss-secondary-text { - color: #666; -} -#ss-form .ss-form-entry { - margin-bottom: 1.5em; -} -#ss-form ul { - margin:0; - padding:0; - list-style: none; -} -#ss-form ol { - margin:0; -} -#ss-form .ss-choice-item { - line-height: 1.3em; - padding-bottom: .5em; -} -#ss-form .ss-q-long { - resize: vertical; - width: 70%; -} -#ss-form .error-message, .required-message { - display: none; -} -#ss-form .ss-form-entry input { - vertical-align: middle; - margin: 0; - padding:0 4px; -} -#ss-form .ss-choice-item-control { - padding-right: 4px; -} - - - - - - - - - - - - - -div.page-content div.wrapper div.home img.large-logo { - padding-top: 20px; - padding-bottom: 30px; - width: 80%; - padding-left: 50px; -} - - - - - -body { - padding-bottom: 100px; -} - -body a:hover { - text-decoration: none; -} - -header.site-header { - style="background-color: #292929;" -} - -header.site-header div.wrapper .logo { - margin-top: 10px; - margin-bottom: 10px; - width: 125px; -} - -header.site-header div.wrapper a.site-title, header.site-header div.wrapper nav.site-nav div.trigger a{ - color: white; - background-color: #292929; -} - -header.site-header div.wrapper nav.site-nav div.trigger{ - margin-top: 12px; -} - -header.site-header div.wrapper nav.site-nav nav.site-nav a.menu-icon{ - margin-top: 120px; - padding-top: 100px; - -} - - -header.site-header div.wrapper a.site-title:hover, header.site-header div.wrapper nav.site-nav div.trigger a:hover{ - transition: all 0.5s ease; - color: red; - text-decoration: none; -} - -footer.site-footer { -padding-top: 10px; -padding-bottom: 10px; -text-align: center; -} - -footer.site-footer div.wrapper { - color: white; -} - -footer.site-footer div.wrapper a { - color: white; - text-decoration: none; - padding-left: 0; - padding-right: 8px; - display: inline-block; -} - -footer.site-footer div.wrapper a:hover { - text-decoration: none; - transition: all 0.5s ease; - color: gray; -} - -footer.site-footer div.wrapper a img { - height: 16px; - width: 16px; -} - - -div.page-content div.wrapper div.post article.post-content img.media-object{ - width: 120px; -} - - -footer.site-footer div.wrapper p.tagline { - color: white; -} - - - @media screen and (max-width: 670px) { - footer.site-footer div.wrapper p.tagline { - display: none; -} - - - - - -/* Remove comments to enable icon-only mobile footer. - - footer.site-footer div.wrapper a img { - height: 60px; - width: 60px; - padding-right: 20px; -} - footer.site-footer div.wrapper a span { - display: none; -} -*/ -} - - - - -/* hoping these override */ - @media screen and (max-width: 600px) { - .site-nav { - position: absolute; - top: 15px;} - .site-nav .menu-icon { - width: 46px; - height: 36px;} - .site-nav .menu-icon > svg { - width: 28px; - height: 25px; } - .site-nav .menu-icon > svg path { - fill: #f9f9f9; } - - div.page-content div.wrapper div.home img.large-logo { - display: none; -} - - -} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..43e24874 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,63 @@ +import js from "@eslint/js"; +import astroPlugin from "eslint-plugin-astro"; +import astroParser from "astro-eslint-parser"; +import tsParser from "@typescript-eslint/parser"; +import tsPlugin from "@typescript-eslint/eslint-plugin"; +import prettier from "eslint-config-prettier"; +import globals from "globals"; + +export default [ + { + ignores: ["html/**", "node_modules/**"], + }, + js.configs.recommended, + { + files: ["**/*.{js,mjs,cjs}"], + languageOptions: { + ecmaVersion: "latest", + sourceType: "module", + globals: globals.node, + }, + }, + { + files: ["**/*.ts"], + languageOptions: { + parser: tsParser, + ecmaVersion: "latest", + sourceType: "module", + globals: globals.node, + }, + plugins: { + "@typescript-eslint": tsPlugin, + }, + rules: { + ...tsPlugin.configs.recommended.rules, + }, + }, + { + files: ["**/*.astro"], + languageOptions: { + parser: astroParser, + parserOptions: { + parser: tsParser, + extraFileExtensions: [".astro"], + sourceType: "module", + }, + globals: { + Astro: "readonly", + Fragment: "readonly", + ...globals.browser, + ...globals.node, + }, + }, + plugins: { + astro: astroPlugin, + "@typescript-eslint": tsPlugin, + }, + rules: { + ...astroPlugin.configs.recommended.rules, + ...tsPlugin.configs.recommended.rules, + }, + }, + prettier, +]; diff --git a/feed.xml b/feed.xml deleted file mode 100644 index 022378be..00000000 --- a/feed.xml +++ /dev/null @@ -1,30 +0,0 @@ ---- -layout: null ---- - - - - {{ site.title | xml_escape }} - {{ site.description | xml_escape }} - {{ site.url }}{{ site.baseurl }}/ - - {{ site.time | date_to_rfc822 }} - {{ site.time | date_to_rfc822 }} - Jekyll v{{ jekyll.version }} - {% for post in site.posts limit:10 %} - - {{ post.title | xml_escape }} - {{ post.content | xml_escape }} - {{ post.date | date_to_rfc822 }} - {{ post.url | prepend: site.baseurl | prepend: site.url }} - {{ post.url | prepend: site.baseurl | prepend: site.url }} - {% for tag in post.tags %} - {{ tag | xml_escape }} - {% endfor %} - {% for cat in post.categories %} - {{ cat | xml_escape }} - {% endfor %} - - {% endfor %} - - diff --git a/gsoc/background.md b/gsoc/background.md deleted file mode 100644 index 0df559e4..00000000 --- a/gsoc/background.md +++ /dev/null @@ -1,108 +0,0 @@ ---- -layout: default -title: "Background on GSoC: start here!" -show_main: false ---- - -# Background: Start Here! - -### What is GSoC? - -Google Summer of Code is a remote summer coding program funded by -Google. Google distributes funds to open software development organizations to -recruit new developers and mentors for summer mentorships. You get paid to write -software at home (or wherever you like), with guidance from expert mentors -distributed around the globe. - -To apply to be a GSoC contributor, you must write an application to [GSoC] for one or -more OpenAstronomy project ideas. Each summer, [several projects][oa projects] are offered by -[OpenAstronomy mentors][oa mentors], with well-defined scope and pre-requisite -experience. If you are selected by OpenAstronomy, you will be a GSoC contributor. - -### What is OpenAstronomy? - -OpenAstronomy is an umbrella organization which acts as an interface between -the Google Summer of Code and several open source, open development projects -in the astronomical community, including [astropy], [sunpy], and [several -other astronomy projects][oa members]. It coordinates mentors and projects -for Google Summer of Code mentorships related to astronomy. - -### What is the application process? - -You must submit your application to the [Google Summer of Code][GSoC], but -it's preferable that you also share it well before the deadline with your -potential project mentors or the rest of the community. Then they will be -able to give you feedback before officially submitting it. Check the -[application template][application]. You can also find applications from -previous years in the GitHub wiki pages of some of the OpenAstronomy -members. - -The complete details on applying are in the [GSoC Contributor Guide]. - -### Who is eligible to apply to GSoC? - -Until 2021, GSoC was a programme eligible exclusively to university students. -The ultimate goal of GSoC has always been to attract and retain new open source -contributors. Hence, as of its 2022 edition, the student status is no longer required, -and one is eligible to take part in GSoC as long as they are an "open source beginner". - -On the OpenAstronomy side, we actively seek self-motivated applicants -with _some_ experience developing software in -Python and other languages. We are especially looking -for individuals who are genuinely interested in developing open source software. -You don't need to be a Python guru or an astronomical coordinate system expert to be -eligible -- projects are available that cover a range of previous experience -in Python and astronomy. Individuals from any background from anywhere around -the world are encouraged to apply. - -### Testimonials - -> In the summer after my second year of graudate school, I didn't have funding -> to work on any projects in my home department. I applied and was selected for -> GSoC 2015, and I worked with another student and several encouraging mentors on -> developing a new astropy affliated package, called -> [astroplan](http://astroplan.readthedocs.io/). The program greatly improved -> my coding style, taught me loads about managing large projects, version control, -> testing, and packaging. Do you have a summer without research funding? Apply! - -[Brett Morris][bmorris3], Astro PhD student, GSoC 2015 - -> After spending the summer of 2015 as an intern at NIST, I got really -> fascinated by how much Python aided scientists get the best out their data. -> Then, while looking for Python projects to perform data fitting and modeling, -> I found AstroPy. I got really surprised by how easy and intuitive data fitting -> can be done with the astropy API. That motivated me to start learning git and -> later contributing code and documentation for the project. Then in the summer -> of 2016 I applied to the GSoC to work on PSF photometry for -> [photutils](https://www.github.com/astropy/photutils) and got selected! :) -> One of the best parts of the GSoC was the amount of learning I got by being -> mentored by experts in software development and astronomy! If you want to know -> more about my journey during the GSoC 2016 see my -> [blog posts](https://openastronomy.org/Universe_OA/authors/ze-vinicius/). - -[Zé Vinícius][mirca], EE undergraduate student, GSoC 2016 - -### Apply! - -Now that you know you're a good candidate, check out the [GSoC Contributor Guide] -to learn how to apply. - -{% assign year = 2015 %} -{% for pro in site.projects %} - {% assign path_project = pro.path | split: '/' %} - {% assign year_project = path_project[1] | abs %} - {% if year_project > year %} - {% assign year = year_project %} - {% endif %} -{% endfor %} - -[GSoC]: https://summerofcode.withgoogle.com/ -[oa projects]: /gsoc/gsoc{{ year }}/ -[oa mentors]: /gsoc/gsoc{{ year }}/#/mentors -[astropy]: http://www.astropy.org -[sunpy]: http://sunpy.org -[oa members]: /members/ -[application]: https://github.com/OpenAstronomy/gsoc-proposals/blob/main/template.md -[GSoC Contributor Guide]: https://google.github.io/gsocguides/student/ -[bmorris3]: https://github.com/bmorris3 -[mirca]: https://github.com/mirca diff --git a/gsoc/contributor_guidelines.md b/gsoc/contributor_guidelines.md deleted file mode 100644 index 02aa15ad..00000000 --- a/gsoc/contributor_guidelines.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -layout: default -title: "GSoC Contributor Application Guidelines" -show_main: false ---- - -# GSoC Contributor Application Guidelines - -**Communication Channels** - -OpenAstronomy is a collaboration between open source astronomy and astrophysics projects and as such, to get help you need to find the specific project you are interested in: - -1. Browse the **[Project Ideas Page](/gsoc/)** to find a project that interests you. -2. Check the **[Members Page](/members)** to find the chat links for that specific organization. -3. Join *that* organization's chat to talk to the mentors! - ---- - -If you want to apply to OpenAstronomy to participate in GSoC -there are many things you can do to improve your application. -Many of OpenAstronomy's admins and mentors have participated in -previous editions of GSoC with their projects, so will be able to -answer any questions you might have, come talk to us on the -mailing list. - -There are many guidelines on writing a good application and how to -increase your chances, this guide covers the most important things -to OpenAstronomy, however, you should also checkout the [GSoC Contributor -Guide], the [Python Software Foundation] guide, the [Astropy GSoC guidelines] and the [SymPy -Guidelines] to name but a few. - -Some general pointers to follow are: - - -1. **The better we know you, the better we can judge your application.** -There are many ways to get yourself known by the community, you can introduce yourself through the -OpenAstronomy mailing list ([how to use Google Groups](https://support.google.com/groups/answer/1046523?hl=en)), chat with us in the Matrix channel ([how to connect to matrix](https://element.io/user-guide)) and if required contact the mentors to know -more about certain project. However, contacting mentors through email or direct messages is discouraged, and contacting them in public channels is the preferred way to provide answers to multiple people at once. Also, when you have a particular idea in -mind, get in touch with that project and introduce yourself. -For `astropy` projects you can do this by sending an e-mail to the -[astropy-gsoc-applications]() mailing list -(please do not send to the `astropy-dev` list). - -2. **Become a user!** -Download one or more of the OpenAstronomy projects and start experimenting with the code. -Look at the [latest pictures of the million degree Sun] with [SunPy](http://sunpy.org/), -[volume render a simulation of the galaxy] with [yt](http://yt-project.org/), or -[plan some astronomical observations] with [Astropy](http://www.astropy.org) - There -are loads of things to do with all the projects involved with OpenAstronomy, -get involved! - -3. **Set yourself up as a developer.** -Create an account on [GitHub](http://github.com) or the forge the organisation is using. -Don't know how to use [git](http://www.git-scm.com/) or [Mercurial](http://mercurial.selenic.com/)? -Don't worry, there are lots of git [tutorials](http://try.github.com) [online](http://gitimmersion.com/) -and many [Mercurial](https://www.mercurial-scm.org/wiki/Tutorial) [ones](http://hgbook.red-bean.com/read/) -[as well](http://mercurial.selenic.com/) that will help you to get quite confident with it in a short time. -Also both the [Astropy](https://docs.astropy.org/en/stable/index_dev.html) -and [yt](http://yt-project.org/docs/dev/developing/developing.html) -developer guides are great reads no matter what project you are thinking of working on. -Have you got stuck? ask on the forum or chat rooms for help and volunteers will support you. - -4. **Start to be a developer.** -Checkout the issue lists of the projects to see if there is something that you could do. -**You will be expected to submit a pull request to one of the OpenAstronomy projects before -you submit your application (it does not have to be accepted, but it has to be something -that shows your code abilities!).** This requirement is to show that you know how git, github, -pull requests and reviews work and allows mentors to eveluate all applications based on a real code -contribution, instead of e.g. the name of a specific school. -GSOC is a short program and we want to make sure you are -ready to start immediately. If you have previously contributed to OpenAstronomy projects, -you can point to those pull requests, too. - -5. **Plan your application.** -Think which is your favourite project from the [ideas page](/gsoc/). -Prepare a plan on how you will tackle that project and the time it will take you to solve it. -Do not worry much in providing exact dates, but plan it as best as you can -(if you are planing to have some holidays during the GSoC programme, then you should mention it too). -Use [our application template][gsoc-proposal-template] to describe how you plan to do the work during the programme. -Add your draft to the [gsoc-proposals](https://github.com/OpenAstronomy/gsoc-proposals) repository. This will be place where to receive any feedback. Follow the indications mentioned in that repository to submit your proposal. -Also, don't be afraid to ask your potential mentors for help. -Don't be shy when describing yourself! - -6. **Submit your application.** -Besides adding your proposal to the gsoc-proposals repository, you also need to [submit your application](https://summerofcode.withgoogle.com/) before the deadline. Please, include the sub-org name at the start of your proposal title as: `[] `, where `` should be the name of the sub-org in lower case (e.g., `sunpy`, `stingray`, `radis`), or the combination of two if it's the case (e.g., `astropy|sunpy`). -Only the proposals present on both, the gsoc-proposals repository and GSoC platform, will be considered. - -7. **Respect the AI policies.** -Much of the [Open Source ecosystem is suffering due to AI Slop][ai-slop-summary]. Don't be one adding more pain to this, doing so will result on being banned of the whole organisation. This is not to say that you can't use AI tools to support your learning, you can, but keeping in mind the policies and rules that each suborg may have. As a starting point, if you don't find an AI contribution policy or rules related the use of LLMs, assume they are forbidden. - -[SymPy Guidelines]: https://github.com/sympy/sympy/wiki/GSoC-2017-Application-Template -[Python Software Foundation]: http://python-gsoc.org/ -[GSoC Contributor Guide]: https://google.github.io/gsocguides/student/ -[Astropy GSoC guidelines]: https://github.com/astropy/astropy/wiki/GSoC-Guidelines -[latest pictures of the million degree Sun]: http://docs.sunpy.org/en/stable/generated/gallery/plotting/aia_example.html -[volume render a simulation of the galaxy]: http://yt-project.org/docs/dev/quickstart/volume_rendering.html -[plan some astronomical observations]: http://www.astropy.org/astropy-tutorials/Coordinates.html -[gsoc-proposal-template]: https://github.com/OpenAstronomy/gsoc-proposals/blob/main/template.md -[plan some astronomical observations]: https://learn.astropy.org/tutorials/1-Coordinates-Intro.html -[ai-slop-summary]: https://redmonk.com/kholterhoff/2026/02/03/ai-slopageddon-and-the-oss-maintainers/ diff --git a/gsoc/display/LICENSE b/gsoc/display/LICENSE deleted file mode 100644 index 4ec8c3f7..00000000 --- a/gsoc/display/LICENSE +++ /dev/null @@ -1,619 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS diff --git a/gsoc/display/data/admins.js b/gsoc/display/data/admins.js deleted file mode 100644 index 14a563ab..00000000 --- a/gsoc/display/data/admins.js +++ /dev/null @@ -1,11 +0,0 @@ -admins = {2017: ["dpshelio", "Cadair", "taldcroft", "eteq"], - 2018: ["dpshelio", "bsipocz"], - 2019: ["dpshelio", "bsipocz", "mirca"], - 2020: ["dpshelio", "bsipocz", "mirca"], - 2021: ["dpshelio", "bsipocz", "mirca"], - 2022: ["dpshelio", "bsipocz", "mirca"], - 2023: ["dpshelio", "bsipocz", "mirca"], - 2024: ["dpshelio", "bsipocz", "mirca"], - 2025: ["dpshelio", "bsipocz", "mirca", "nabobalis"], - 2026: ["dpshelio", "bsipocz", "mirca", "nabobalis"], - }; diff --git a/gsoc/display/data/faq.js b/gsoc/display/data/faq.js deleted file mode 100644 index 3e1f228d..00000000 --- a/gsoc/display/data/faq.js +++ /dev/null @@ -1,15 +0,0 @@ -faq = { - -"I want to do a GSoC with OpenAstronomy!" : "i_want_to_do_a_gsoc.md", - -"What are the requirements to be accepted for GSoC?" : "gsoc_requirements.md", - -"I have an own project idea! (Mentors and contributors!)" : "own_project_idea.md", - -"How do I work out a great proposal?" : "writing_a_great_proposal.md", - -"When should I start working out the proposal?" : "working_out_the_proposal.md", - -"What are my obligations as a contributor during the GSoC?" : "contributor_obligations.md" - -} diff --git a/gsoc/display/data/faq/contributor_obligations.md b/gsoc/display/data/faq/contributor_obligations.md deleted file mode 100644 index 570ad60d..00000000 --- a/gsoc/display/data/faq/contributor_obligations.md +++ /dev/null @@ -1,8 +0,0 @@ -We expect you to: - -* Be online and active during your working hours in your sub-organisation chat system. -* Blog at least once every two weeks (this will be aggregated on -[Universe Open Astronomy](http://openastronomy.org/Universe_OA/)). -* Participate in weekly meetings with your mentor. -* Get in contact with your mentors or the admins if any even remotely -potential problems arise. diff --git a/gsoc/display/data/faq/gsoc_requirements.md b/gsoc/display/data/faq/gsoc_requirements.md deleted file mode 100644 index 4ea72098..00000000 --- a/gsoc/display/data/faq/gsoc_requirements.md +++ /dev/null @@ -1,9 +0,0 @@ -Other than the [requirements from Google](https://developers.google.com/open-source/gsoc/faq#what_are_the_eligibility_requirements_for_participation) you will have to meet the following: - -* You have to read carefully and follow [our contributor guide ](/gsoc/contributor_guidelines.html) -* You have submitted some code sample via pull-request to the sub-organisation -you are applying. (Read the developer guides to do it properly and look for -issues labelled `package-novice` for an easier start). -* You will need to create a blog to keep it up to date during the programme. You can start -writing about how you found us, the issue you are working on and how you find the community. -* Respect the AI contribution policies. If there's not one, then assume you can't use AI to contribute on it. diff --git a/gsoc/display/data/faq/i_want_to_do_a_gsoc.md b/gsoc/display/data/faq/i_want_to_do_a_gsoc.md deleted file mode 100644 index 81464a05..00000000 --- a/gsoc/display/data/faq/i_want_to_do_a_gsoc.md +++ /dev/null @@ -1,3 +0,0 @@ -Great! You are in the right place. However, notice that OpenAstronomy is an -umbrella organisation. Therefore you have to look for the projects offered by -the sub-orgs (all listed in the projects tab). diff --git a/gsoc/display/data/faq/own_project_idea.md b/gsoc/display/data/faq/own_project_idea.md deleted file mode 100644 index d1df222d..00000000 --- a/gsoc/display/data/faq/own_project_idea.md +++ /dev/null @@ -1,2 +0,0 @@ -Awesome! Submit your idea to [our projects list](https://github.com/OpenAstronomy/openastronomy.github.io/tree/master/_projects) -as a pull request. diff --git a/gsoc/display/data/faq/working_out_the_proposal.md b/gsoc/display/data/faq/working_out_the_proposal.md deleted file mode 100644 index 1e5f05f8..00000000 --- a/gsoc/display/data/faq/working_out_the_proposal.md +++ /dev/null @@ -1,2 +0,0 @@ -You can start right now! Ping any mentor and start discussing. -The earlier you start, the better! \ No newline at end of file diff --git a/gsoc/display/data/faq/writing_a_great_proposal.md b/gsoc/display/data/faq/writing_a_great_proposal.md deleted file mode 100644 index a5851b17..00000000 --- a/gsoc/display/data/faq/writing_a_great_proposal.md +++ /dev/null @@ -1,18 +0,0 @@ -Having a very good proposal is not that difficult, but you will have to -invest time on writing it. - -You need start by understanding how the sub-organisation you want to work with works, -read all their user and developers guide. Look then at the project idea you like the -most and find all the issues related to that particular project. - -What's the final goal of that project? Can you break it in sub-projects? Can -you estimate how long these sub-projects are going to take you? The best applications -we've had contains a list of problems to solve on a weekly basis. -But... _The best laid plans of mice and men gang oft astray_, sure! you will encounter -problems on the way, but having a plan will help you to prioritise when stuck. And of -course, your mentors will help you too. - -Don't forget that a submission of new code is not only code, but its documentation and -tests! - -Use the [gsoc-proposals repository](https://github.com/OpenAstronomy/gsoc-proposals/) to "draft" your proposal early on, here you can get comments and feedback from the mentors and the rest of the community. Then remember to upload it to the [GSoC platform](https://summerofcode.withgoogle.com/). diff --git a/gsoc/display/partials/tabs/faq.html b/gsoc/display/partials/tabs/faq.html deleted file mode 100644 index 6e049641..00000000 --- a/gsoc/display/partials/tabs/faq.html +++ /dev/null @@ -1,17 +0,0 @@ ---- ---- -
-
    -
  • -

    -

    -
    -
  • -
-
- - diff --git a/gsoc/display/partials/tabs/mentors.html b/gsoc/display/partials/tabs/mentors.html deleted file mode 100644 index a53fe1cc..00000000 --- a/gsoc/display/partials/tabs/mentors.html +++ /dev/null @@ -1,73 +0,0 @@ -
-
-
-
Hello there!
-
-
- We are the mentors for OpenAstronomy in GSoC {{ gic.year }} -
-
-
-
- -
-
-
-
-
- -
-
-
-
- -
-
-
-
Admins
-
-
- We are the admins for OpenAstronomy. -
-
-
-
- -
-
-
-
-
- -
-
-
-
diff --git a/gsoc/display/partials/tabs/projects.html b/gsoc/display/partials/tabs/projects.html deleted file mode 100644 index cdc3f989..00000000 --- a/gsoc/display/partials/tabs/projects.html +++ /dev/null @@ -1,136 +0,0 @@ -
-
- -
-
- -
-
-
- -
-
-
-
-
-
-
-
-
-
{{ project.name }}
-
-
- - - -
- {{ initiative }} - {{ p_size }} -
- -
- {{ project }}
-
- -
-
-
-



-
- - -
- - diff --git a/gsoc/display/resources/css/style.scss b/gsoc/display/resources/css/style.scss deleted file mode 100644 index 7891008e..00000000 --- a/gsoc/display/resources/css/style.scss +++ /dev/null @@ -1,532 +0,0 @@ -// File generated from style.css using: http://sebastianpontow.de/css2compass/ -@import url(https://fonts.googleapis.com/css?family=Roboto+Mono:300,300i,400,400i,700,700i|Roboto:100,200,300,400,500,600,700,800,900|Ubuntu+Mono|Overpass+Mono|Inconsolata); -@import url(https://fonts.googleapis.com/icon?family=Material+Icons); - -//colors -$black: black; -$color_waterloo__approx: lightslategrey; -$color_froly_70_approx: rgba(238, 110, 115, 0.7); -$color_quill_gray_approx: lightgrey; -$white: #fff; -$color_cape_cod_approx: #424242; -$color_star_dust_approx: #9e9e9e; -$color_celeste_approx: #d1d1d1; -$color_plantation_approx: darkslategrey; -$color_half_dutch_white_approx: cornsilk; -$color_twilight_blue_approx: azure; -$color_mimosa_approx: lightgoldenrodyellow; -$wheat: wheat; -$color_athens_gray_approx: #eceff1; -$color_outer_space_approx: #263238; -$color_blue_chill_approx: darkcyan; -$color_tradewind_approx: mediumaquamarine; - -//fonts -$font_0: Roboto; -$font_1: Roboto !important; -$font_2: Roboto Mono; -$font_3: menlo; -$font_4: monospace; -$font_5: -apple-system, BlinkMacSystemFont, $font_0, sans-serif; - -.tabs { - font-family: $font_0; - font-size: 1em; - text-transform: uppercase; - letter-spacing: 0.1em; - .tab { - display: inline-block; - text-align: center; - line-height: 48px; - height: 48px; - padding: 0; - margin: 0; - cursor: pointer; - text-transform: uppercase; - a { - color: $color_waterloo__approx !important; - display: block; - width: 100%; - height: 100%; - padding: 0 24px; - font-size: 14px; - text-overflow: ellipsis; - overflow: hidden; - //Instead of the line below you could use @include transition($transition-1, $transition-2, $transition-3, $transition-4, $transition-5, $transition-6, $transition-7, $transition-8, $transition-9, $transition-10) - transition: color .28s ease; - &:hover { - background-color: transparent; - color: $black !important; - } - &.active { - background-color: transparent; - color: $black !important; - } - } - &.disabled a { - color: $color_froly_70_approx; - cursor: default; - &:hover { - color: $color_froly_70_approx; - cursor: default; - } - } - } - .indicator { - position: absolute; - bottom: 0; - height: 2px; - background-color: $black !important; - will-change: left, right; - margin-left: 3em; - margin-right: 3em; - } - .col-md-4 { - position: initial !important; - } -} -.title { - font-family: $font_5; - font-size: 14em; - font-weight: 100; - text-align: center; -} -.title-get-involved { - font-family: $font_5; - font-size: 5em; - font-weight: 100; - text-align: center; -} -.main-content { - margin-top: 2em; -} -.logo2 { - height: 15em; - margin-top: 4em; -} -.description { - font-family: $font_0; - font-size: 1.6em; - text-align: center; - font-weight: 300; - text-transform: none !important; -} -pre { - padding: 0; -} -.tip { - font-size: 1.2em; -} -.tip-small { - font-size: 1em; -} -.terminal-install { - margin-top: 1em; -} -.dev-row { - border-top: 1px solid $color_quill_gray_approx; - padding-left: 0; - padding-right: 0; - margin-bottom: 0 !important; - padding-top: 1em; - padding-bottom: 1em; -} -.no-border { - border-top: 0 !important; -} -.example-card { - padding: 2em; -} -.example-select { - padding: 2em; -} -.footer-text { - text-align: center; - color: $color_waterloo__approx; - font-family: $font_0; - padding: 1em; -} -.ft-span { - text-transform: uppercase; - letter-spacing: 0.1em; -} -.container-title { - font-size: 3em; - font-weight: 100; -} -body { - display: flex !important; - min-height: 100vh !important; - flex-direction: column !important; - font-family: $font_0; -} -.page-content { - display: flex !important; - min-height: 100vh !important; - flex-direction: column !important; - font-family: $font_0; - line-height: 1.5; -} -main { - flex: 1 0 auto; -} -#search { - font-size: 24px !important; - border: none !important; - font-family: $font_1; - font-weight: 500; - color: $black !important; - //Instead of the line below you could use @include box-shadow($shadow-1, $shadow-2, $shadow-3, $shadow-4, $shadow-5, $shadow-6, $shadow-7, $shadow-8, $shadow-9, $shadow-10) - box-shadow: none !important; -} -.btn { - background-color: $black !important; - &:hover { - background-color: $color_cape_cod_approx !important; - } -} -.btn-large { - background-color: $black !important; - &:hover { - background-color: $color_cape_cod_approx !important; - } -} -::-webkit-input-placeholder { - font-weight: 200; - color: $color_star_dust_approx; -} -:-moz-placeholder { - font-weight: 200; - color: $color_celeste_approx; -} -::-moz-placeholder { - font-weight: 200; - color: $color_celeste_approx; -} -:-ms-input-placeholder { - font-weight: 200; - color: $color_celeste_approx; -} -.card-title { - overflow-wrap: break-word !important; - padding: 0.5em; - text-align: center; -} -.footer-coala { - font-size: 42px; - font-weight: 100; - vertical-align: text-bottom; -} -.footer-coala-row { - margin: 0 !important; -} -.snippet-card { - white-space: pre-line !important; -} -.showcase { - display: flex; - justify-content: center; - flex-wrap: wrap; - margin-top: 4em; -} -.showcase-card { - width: 300px; - margin-left: 0.5em; - margin-right: 0.5em; -} -.name-bear { - font-size: 22px !important; -} -.markdown { - p { - display: block !important; - } - a { - color: $color_twilight_blue_approx; - &:hover { - opacity: 0.7; - } - } - h4 { - font-size: 1.1em; - letter-spacing: 0.1em; - color: $wheat; - text-transform: uppercase; - } - h5 { - font-size: 1em; - letter-spacing: 0.1em; - color: $wheat; - } - li { - list-style-type: disc !important; - } - ul li { - margin-left: 1em; - } -} -a { - > .card { - color: $black !important; - } - &:hover > .card { - color: $black !important; - } -} -.modal { - width: 90% !important; - max-height: 90% !important; - //Instead of the line below you could use @include border-radius($radius, $vertical-radius) - border-radius: 0 !important; - top: 10% !important; - bottom: 10%; - background-color: $black !important; -} -.profile { - background-color: $black; - color: $white; -} -.dashboard { - background-color: $color_plantation_approx; -} -.modal-content-bear { - display: flex; -} -.project-name { - font-size: 2em; - text-align: center; - padding-right: 1em; - padding-top: 1em; - padding-bottom: 0.1em; - font-weight: 100; - overflow-wrap: break-word; -} -.project-description { - color: $color_quill_gray_approx; - text-align: justify; - font-size: 1.1em; - font-family: $font_0; - font-weight: 300; - padding: 1em; - > p > a { - color: $color_half_dutch_white_approx; - &:hover { - opacity: 0.7; - } - } -} -.project-card-detail { - cursor: pointer; - height: 200px; -} -.pr-element-detail { - font-size: 1em; -} -.small-heading { - font-size: 0.9em; - padding: 0.5em; - font-weight: 400; - color: $color_mimosa_approx; - letter-spacing: 0.1em; - text-transform: uppercase; -} -.authors { - font-size: 14px; - color: $wheat; - font-weight: 400; -} -.author-row { - padding-top: 20%; -} -.showcase-gi { - display: flex; - justify-content: center; - flex-wrap: wrap; - margin-top: 1em; - .card .card-action a:not(.btn):not(.btn-large):not(.btn-floating) { - margin-right: 0 !important; - } -} -.showcase-card-gi { - width: 220px; - margin-left: 0.5em; - margin-right: 0.5em; -} -.profile-img { - margin-top: -5em; - width: 100px; - //Instead of the line below you could use @include border-radius($radius, $vertical-radius) - border-radius: 100%; -} -.empty { - background-color: $color_athens_gray_approx !important; - height: 5em; -} -.profile-data { - background-color: $color_outer_space_approx !important; - color: $white; -} -.person-name { - font-size: 1.1em; - font-weight: 300; - text-align: center; -} -.small-heading-light { - font-size: 12px; - letter-spacing: 0.1em; - text-align: center; - color: $color_quill_gray_approx; - font-weight: 500; - opacity: 0.2; -} -.person-contributions { - margin-top: 2em; - text-align: center; - letter-spacing: 0.1em; -} -.person-github-id { - font-size: 1.2em; - text-align: center; - padding: 0.5em; - text-transform: none !important; - font-family: $font_2, $font_3, $font_4; -} -.person-github-bio { - font-size: 0.8em; - text-align: center; - padding-top: 0.5em; -} -.person-github-id-div { - padding: 0.5em; - text-align: center !important; -} -.github-link { - bottom: 0; - margin-top: 1em; -} -.gi-container-title { - font-size: 5em; - font-weight: 100; - text-align: center; -} -.main-content-faq { - padding: 4em; -} -.gi-container-title-header { - font-size: 6em; - font-weight: 200; - text-align: center; -} -.contributions-row { - margin-bottom: 0 !important; - position: absolute; - text-align: center; - width: 180px; - bottom: 0; - padding-bottom: 1em; -} -.medium-heading { - font-size: 1.3em; - padding: 0.5em; - font-weight: 400; - color: $color_mimosa_approx; - letter-spacing: 0.1em; -} -.mentors-github-id { - font-size: 1.2em; - color: $color_blue_chill_approx !important; - text-transform: none !important; - font-family: $font_2, $font_3, $font_4; - display: inline-block; - &:hover { - color: $black !important; - } -} -input { - background-color: $color_quill_gray_approx !important; - padding-left: 0.5em !important; -} -@media only screen and(max-width: 500px) { - .tabs .indicator { - position: absolute; - bottom: 0; - height: 2px; - background-color: $black !important; - will-change: left, right; - margin-left: 0.5em; - margin-right: 0.5em; - } -} -.explore { - text-transform: uppercase; -} -.markdown-reqs { - p { - display: initial !important; - } - a { - color: $color_tradewind_approx; - &:hover { - opacity: 0.7; - } - } -} -.project-overview-element { - padding: 10px !important; -} -.collapsible-body { - p { - margin: 0; - padding: 0.5em !important; - } - li { - list-style-type: disc !important; - } -} -.clickable { - cursor: pointer; -} -span.caret { - color: initial; - position: absolute; - right: 0; - top: 16px; - font-size: 10px; - padding-left: 10px; -} -footer.page-footer { - margin-top: 20px; - padding-top: 20px; - background-color: $white !important; - .footer-copyright { - overflow: hidden; - height: 50px; - line-height: 50px; - color: $color_waterloo__approx !important; - background-color: $white !important; - } -} -.reqs-proj > .chip { - //Instead of the line below you could use @include border-radius($radius, $vertical-radius) - border-radius: 0 !important; -} -div.mentors { - text-align: center; -} -input:not([type]) { - background-color: $color_quill_gray_approx; - padding-left: 0.5em !important; -} -textarea.materialize-textarea { - background-color: $color_quill_gray_approx; - padding-left: 0.5em !important; -} -ul:not(.browser-default) { - margin-left: 1em !important; - li { - margin-left: 1em; - } -} -.req-ul li { - list-style-type: disc !important; -} diff --git a/gsoc/display/resources/js/app.js b/gsoc/display/resources/js/app.js deleted file mode 100644 index 6e703039..00000000 --- a/gsoc/display/resources/js/app.js +++ /dev/null @@ -1,186 +0,0 @@ ---- ---- -(function(){ - var app = angular.module('coala', ['ngSanitize','btford.markdown', 'ngRoute']); - - app.config(['$routeProvider', - function($routeProvider) { - $routeProvider. - when('/projects', { - template: '', - reloadOnSearch: false - }). - when('/mentors', { - template: '' - }). - when('/faq', { - template: '' - }). - otherwise({ - redirectTo: '/projects' - }); - }]); - - app.controller('TabController', function ($location) { - this.tab = $location.path(); - this.setTab = function (stab) { - this.tab = stab; - $location.path(stab); - }; - this.isSet = function (stab) { - return $location.path() == stab; - }; - }); - - app.directive('projects', ['$http', '$timeout', '$location', function ($http, $timeout, $location) { - return { - restrict: 'E', - templateUrl: "{{ '/gsoc/display/partials/tabs/projects.html' | prepend: site.baseurl }}", - controller: function ($scope, $location) { - self = this; - $scope.projectList = projects; - - self.showProject = function (project) { - $scope.currentProject = project; - $(document).ready(function () { - $('.modal').modal('open'); - }); - mval = encodeURIComponent(project["name"].split(' ').join('_').toLowerCase()); - $location.url('?project=' + mval); - }; - - $scope.search = function (arg) { - $scope.searchText = arg; - }; - - $scope.redirect = function (arg) { - window.open(arg, '_blank'); - }; - - $scope.updateLink = function () { - $scope.currentProject = null; - $location.url($location.path()); - }; - - $scope.projects_url_dict = {}; - angular.forEach($scope.projectList, function(value, key){ - // Create a new key as RESTURL so it can follow the name of the project. - value["resturl"] = encodeURIComponent(value["name"].split(' ').join('_').toLowerCase()); - $scope.projects_url_dict[value["resturl"]] = key; - }); - - // Find whether there's a project name in the URL and try to load it. - var project_requested = encodeURIComponent($location.search().project); - if(project_requested){ - if(Object.keys($scope.projects_url_dict).indexOf(project_requested) > -1){ - self.showProject($scope.projectList[$scope.projects_url_dict[project_requested]]); - } - } - - var search_requested = $location.search().q; - if(search_requested){ - $scope.searchText = search_requested; - } - }, - controllerAs: 'lc' - }; - }]); - - app.directive('faq',[ '$http', function ($http) { - return { - restrict: 'E', - templateUrl: "{{ '/gsoc/display/partials/tabs/faq.html' | prepend: site.baseurl }}", - controller: function () { - self = this - self.faqs = faq - }, - controllerAs: 'toc' - }; - }]); - - - app.filter('format_desc', function () { - return function (value) { - if (!value) return ''; - var lastspace = value.search(/\.\s/); - if (lastspace != -1) { - if (value.charAt(lastspace-1) == ',') { - lastspace = lastspace - 1; - } - value = value.substr(0, lastspace+1); - } - return value; - }; - }); - - app.filter('format_issue', function () { - return function (value) { - if (!value) return ''; - res = value.split('/'); - res = res[3] + '/' + res[4] + '#' + res[6]; - return res; - }; - }); - - app.filter('format_project', function () { - return function (value) { - if (!value) return ''; - var all = {{ site.data.members | jsonify }}; - if (value in all) { - var data = all[value]; - if ('chat' in data){ - if ('matrix' in data.chat) { - return data.chat['matrix']; - } else if ('slack' in data.chat) { - return data.chat['slack']; - } else if ('gitter' in data.chat) { - return data.chat['gitter']; - } - }; - if ('mailinglist' in data){ - if ('devs' in data.mailinglist) { - return data.mailintlist['devs']; - } else if ('users' in data.mailinglist) { - return data.mailinglist['users']; - }; - }; - }; - return 'https://app.element.io/#/room/#openastronomy:matrix.org'; - }; - }); - - - - - app.directive('mentors', ['$http', function ($http) { - return { - restrict: 'E', - templateUrl: "{{ '/gsoc/display/partials/tabs/mentors.html' | prepend: site.baseurl }}", - controller: function ($scope) { - self = this; - self.mentorsList = {}; - self.adminsList = {}; - self.year = year.toString(); - angular.forEach(projects, function(value, key){ - angular.forEach(value.mentors, function(value, key){ - self.mentorsList[value] = { - "github_handle" : value, - "github_avatar_url": "https://avatars.githubusercontent.com/" +value - }; - - }); - }); - - angular.forEach(admins[year], function(value, key){ - self.adminsList[value] = { - "github_handle" : value, - "github_avatar_url": "https://avatars.githubusercontent.com/" +value - - }; - }); - }, - controllerAs: "gic" - }; - }]); - -})(); diff --git a/gsoc/display/vendors/angular-sanitize/angular-sanitize.js b/gsoc/display/vendors/angular-sanitize/angular-sanitize.js deleted file mode 100644 index 696bc70f..00000000 --- a/gsoc/display/vendors/angular-sanitize/angular-sanitize.js +++ /dev/null @@ -1,739 +0,0 @@ -/** - * @license AngularJS v1.6.1 - * (c) 2010-2016 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular) {'use strict'; - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Any commits to this file should be reviewed with security in mind. * - * Changes to this file can potentially create security vulnerabilities. * - * An approval from 2 Core members with history of modifying * - * this file is required. * - * * - * Does the change somehow allow for arbitrary javascript to be executed? * - * Or allows for someone to change the prototype of built-in objects? * - * Or gives undesired access to variables likes document or window? * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -var $sanitizeMinErr = angular.$$minErr('$sanitize'); -var bind; -var extend; -var forEach; -var isDefined; -var lowercase; -var noop; -var htmlParser; -var htmlSanitizeWriter; - -/** - * @ngdoc module - * @name ngSanitize - * @description - * - * # ngSanitize - * - * The `ngSanitize` module provides functionality to sanitize HTML. - * - * - *
- * - * See {@link ngSanitize.$sanitize `$sanitize`} for usage. - */ - -/** - * @ngdoc service - * @name $sanitize - * @kind function - * - * @description - * Sanitizes an html string by stripping all potentially dangerous tokens. - * - * The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are - * then serialized back to properly escaped html string. This means that no unsafe input can make - * it into the returned string. - * - * The whitelist for URL sanitization of attribute values is configured using the functions - * `aHrefSanitizationWhitelist` and `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider - * `$compileProvider`}. - * - * The input may also contain SVG markup if this is enabled via {@link $sanitizeProvider}. - * - * @param {string} html HTML input. - * @returns {string} Sanitized HTML. - * - * @example - - - -
- Snippet: - - - - - - - - - - - - - - - - - - - - - - - - - -
DirectiveHowSourceRendered
ng-bind-htmlAutomatically uses $sanitize
<div ng-bind-html="snippet">
</div>
ng-bind-htmlBypass $sanitize by explicitly trusting the dangerous value -
<div ng-bind-html="deliberatelyTrustDangerousSnippet()">
-</div>
-
ng-bindAutomatically escapes
<div ng-bind="snippet">
</div>
-
-
- - it('should sanitize the html snippet by default', function() { - expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')). - toBe('

an html\nclick here\nsnippet

'); - }); - - it('should inline raw snippet if bound to a trusted value', function() { - expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')). - toBe("

an html\n" + - "click here\n" + - "snippet

"); - }); - - it('should escape snippet without any filter', function() { - expect(element(by.css('#bind-default div')).getAttribute('innerHTML')). - toBe("<p style=\"color:blue\">an html\n" + - "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" + - "snippet</p>"); - }); - - it('should update', function() { - element(by.model('snippet')).clear(); - element(by.model('snippet')).sendKeys('new text'); - expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')). - toBe('new text'); - expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).toBe( - 'new text'); - expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).toBe( - "new <b onclick=\"alert(1)\">text</b>"); - }); -
-
- */ - - -/** - * @ngdoc provider - * @name $sanitizeProvider - * @this - * - * @description - * Creates and configures {@link $sanitize} instance. - */ -function $SanitizeProvider() { - var svgEnabled = false; - - this.$get = ['$$sanitizeUri', function($$sanitizeUri) { - if (svgEnabled) { - extend(validElements, svgElements); - } - return function(html) { - var buf = []; - htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) { - return !/^unsafe:/.test($$sanitizeUri(uri, isImage)); - })); - return buf.join(''); - }; - }]; - - - /** - * @ngdoc method - * @name $sanitizeProvider#enableSvg - * @kind function - * - * @description - * Enables a subset of svg to be supported by the sanitizer. - * - *
- *

By enabling this setting without taking other precautions, you might expose your - * application to click-hijacking attacks. In these attacks, sanitized svg elements could be positioned - * outside of the containing element and be rendered over other elements on the page (e.g. a login - * link). Such behavior can then result in phishing incidents.

- * - *

To protect against these, explicitly setup `overflow: hidden` css rule for all potential svg - * tags within the sanitized content:

- * - *
- * - *

-   *   .rootOfTheIncludedContent svg {
-   *     overflow: hidden !important;
-   *   }
-   *   
- *
- * - * @param {boolean=} flag Enable or disable SVG support in the sanitizer. - * @returns {boolean|ng.$sanitizeProvider} Returns the currently configured value if called - * without an argument or self for chaining otherwise. - */ - this.enableSvg = function(enableSvg) { - if (isDefined(enableSvg)) { - svgEnabled = enableSvg; - return this; - } else { - return svgEnabled; - } - }; - - ////////////////////////////////////////////////////////////////////////////////////////////////// - // Private stuff - ////////////////////////////////////////////////////////////////////////////////////////////////// - - bind = angular.bind; - extend = angular.extend; - forEach = angular.forEach; - isDefined = angular.isDefined; - lowercase = angular.lowercase; - noop = angular.noop; - - htmlParser = htmlParserImpl; - htmlSanitizeWriter = htmlSanitizeWriterImpl; - - // Regular Expressions for parsing tags and attributes - var SURROGATE_PAIR_REGEXP = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g, - // Match everything outside of normal chars and " (quote character) - NON_ALPHANUMERIC_REGEXP = /([^#-~ |!])/g; - - - // Good source of info about elements and attributes - // http://dev.w3.org/html5/spec/Overview.html#semantics - // http://simon.html5.org/html-elements - - // Safe Void Elements - HTML5 - // http://dev.w3.org/html5/spec/Overview.html#void-elements - var voidElements = toMap('area,br,col,hr,img,wbr'); - - // Elements that you can, intentionally, leave open (and which close themselves) - // http://dev.w3.org/html5/spec/Overview.html#optional-tags - var optionalEndTagBlockElements = toMap('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr'), - optionalEndTagInlineElements = toMap('rp,rt'), - optionalEndTagElements = extend({}, - optionalEndTagInlineElements, - optionalEndTagBlockElements); - - // Safe Block Elements - HTML5 - var blockElements = extend({}, optionalEndTagBlockElements, toMap('address,article,' + - 'aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' + - 'h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul')); - - // Inline Elements - HTML5 - var inlineElements = extend({}, optionalEndTagInlineElements, toMap('a,abbr,acronym,b,' + - 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,' + - 'samp,small,span,strike,strong,sub,sup,time,tt,u,var')); - - // SVG Elements - // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements - // Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted. - // They can potentially allow for arbitrary javascript to be executed. See #11290 - var svgElements = toMap('circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,' + - 'hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,' + - 'radialGradient,rect,stop,svg,switch,text,title,tspan'); - - // Blocked Elements (will be stripped) - var blockedElements = toMap('script,style'); - - var validElements = extend({}, - voidElements, - blockElements, - inlineElements, - optionalEndTagElements); - - //Attributes that have href and hence need to be sanitized - var uriAttrs = toMap('background,cite,href,longdesc,src,xlink:href'); - - var htmlAttrs = toMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' + - 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' + - 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' + - 'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' + - 'valign,value,vspace,width'); - - // SVG attributes (without "id" and "name" attributes) - // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes - var svgAttrs = toMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' + - 'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' + - 'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' + - 'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' + - 'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' + - 'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' + - 'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' + - 'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' + - 'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' + - 'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' + - 'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' + - 'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' + - 'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' + - 'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' + - 'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true); - - var validAttrs = extend({}, - uriAttrs, - svgAttrs, - htmlAttrs); - - function toMap(str, lowercaseKeys) { - var obj = {}, items = str.split(','), i; - for (i = 0; i < items.length; i++) { - obj[lowercaseKeys ? lowercase(items[i]) : items[i]] = true; - } - return obj; - } - - var inertBodyElement; - (function(window) { - var doc; - if (window.document && window.document.implementation) { - doc = window.document.implementation.createHTMLDocument('inert'); - } else { - throw $sanitizeMinErr('noinert', 'Can\'t create an inert html document'); - } - var docElement = doc.documentElement || doc.getDocumentElement(); - var bodyElements = docElement.getElementsByTagName('body'); - - // usually there should be only one body element in the document, but IE doesn't have any, so we need to create one - if (bodyElements.length === 1) { - inertBodyElement = bodyElements[0]; - } else { - var html = doc.createElement('html'); - inertBodyElement = doc.createElement('body'); - html.appendChild(inertBodyElement); - doc.appendChild(html); - } - })(window); - - /** - * @example - * htmlParser(htmlString, { - * start: function(tag, attrs) {}, - * end: function(tag) {}, - * chars: function(text) {}, - * comment: function(text) {} - * }); - * - * @param {string} html string - * @param {object} handler - */ - function htmlParserImpl(html, handler) { - if (html === null || html === undefined) { - html = ''; - } else if (typeof html !== 'string') { - html = '' + html; - } - inertBodyElement.innerHTML = html; - - //mXSS protection - var mXSSAttempts = 5; - do { - if (mXSSAttempts === 0) { - throw $sanitizeMinErr('uinput', 'Failed to sanitize html because the input is unstable'); - } - mXSSAttempts--; - - // strip custom-namespaced attributes on IE<=11 - if (window.document.documentMode) { - stripCustomNsAttrs(inertBodyElement); - } - html = inertBodyElement.innerHTML; //trigger mXSS - inertBodyElement.innerHTML = html; - } while (html !== inertBodyElement.innerHTML); - - var node = inertBodyElement.firstChild; - while (node) { - switch (node.nodeType) { - case 1: // ELEMENT_NODE - handler.start(node.nodeName.toLowerCase(), attrToMap(node.attributes)); - break; - case 3: // TEXT NODE - handler.chars(node.textContent); - break; - } - - var nextNode; - if (!(nextNode = node.firstChild)) { - if (node.nodeType === 1) { - handler.end(node.nodeName.toLowerCase()); - } - nextNode = node.nextSibling; - if (!nextNode) { - while (nextNode == null) { - node = node.parentNode; - if (node === inertBodyElement) break; - nextNode = node.nextSibling; - if (node.nodeType === 1) { - handler.end(node.nodeName.toLowerCase()); - } - } - } - } - node = nextNode; - } - - while ((node = inertBodyElement.firstChild)) { - inertBodyElement.removeChild(node); - } - } - - function attrToMap(attrs) { - var map = {}; - for (var i = 0, ii = attrs.length; i < ii; i++) { - var attr = attrs[i]; - map[attr.name] = attr.value; - } - return map; - } - - - /** - * Escapes all potentially dangerous characters, so that the - * resulting string can be safely inserted into attribute or - * element text. - * @param value - * @returns {string} escaped text - */ - function encodeEntities(value) { - return value. - replace(/&/g, '&'). - replace(SURROGATE_PAIR_REGEXP, function(value) { - var hi = value.charCodeAt(0); - var low = value.charCodeAt(1); - return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';'; - }). - replace(NON_ALPHANUMERIC_REGEXP, function(value) { - return '&#' + value.charCodeAt(0) + ';'; - }). - replace(//g, '>'); - } - - /** - * create an HTML/XML writer which writes to buffer - * @param {Array} buf use buf.join('') to get out sanitized html string - * @returns {object} in the form of { - * start: function(tag, attrs) {}, - * end: function(tag) {}, - * chars: function(text) {}, - * comment: function(text) {} - * } - */ - function htmlSanitizeWriterImpl(buf, uriValidator) { - var ignoreCurrentElement = false; - var out = bind(buf, buf.push); - return { - start: function(tag, attrs) { - tag = lowercase(tag); - if (!ignoreCurrentElement && blockedElements[tag]) { - ignoreCurrentElement = tag; - } - if (!ignoreCurrentElement && validElements[tag] === true) { - out('<'); - out(tag); - forEach(attrs, function(value, key) { - var lkey = lowercase(key); - var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background'); - if (validAttrs[lkey] === true && - (uriAttrs[lkey] !== true || uriValidator(value, isImage))) { - out(' '); - out(key); - out('="'); - out(encodeEntities(value)); - out('"'); - } - }); - out('>'); - } - }, - end: function(tag) { - tag = lowercase(tag); - if (!ignoreCurrentElement && validElements[tag] === true && voidElements[tag] !== true) { - out(''); - } - // eslint-disable-next-line eqeqeq - if (tag == ignoreCurrentElement) { - ignoreCurrentElement = false; - } - }, - chars: function(chars) { - if (!ignoreCurrentElement) { - out(encodeEntities(chars)); - } - } - }; - } - - - /** - * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1' attribute to declare - * ns1 namespace and prefixes the attribute with 'ns1' (e.g. 'ns1:xlink:foo'). This is undesirable since we don't want - * to allow any of these custom attributes. This method strips them all. - * - * @param node Root element to process - */ - function stripCustomNsAttrs(node) { - while (node) { - if (node.nodeType === window.Node.ELEMENT_NODE) { - var attrs = node.attributes; - for (var i = 0, l = attrs.length; i < l; i++) { - var attrNode = attrs[i]; - var attrName = attrNode.name.toLowerCase(); - if (attrName === 'xmlns:ns1' || attrName.lastIndexOf('ns1:', 0) === 0) { - node.removeAttributeNode(attrNode); - i--; - l--; - } - } - } - - var nextNode = node.firstChild; - if (nextNode) { - stripCustomNsAttrs(nextNode); - } - - node = node.nextSibling; - } - } -} - -function sanitizeText(chars) { - var buf = []; - var writer = htmlSanitizeWriter(buf, noop); - writer.chars(chars); - return buf.join(''); -} - - -// define ngSanitize module and register $sanitize service -angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider); - -/** - * @ngdoc filter - * @name linky - * @kind function - * - * @description - * Finds links in text input and turns them into html links. Supports `http/https/ftp/mailto` and - * plain email address links. - * - * Requires the {@link ngSanitize `ngSanitize`} module to be installed. - * - * @param {string} text Input text. - * @param {string} target Window (`_blank|_self|_parent|_top`) or named frame to open links in. - * @param {object|function(url)} [attributes] Add custom attributes to the link element. - * - * Can be one of: - * - * - `object`: A map of attributes - * - `function`: Takes the url as a parameter and returns a map of attributes - * - * If the map of attributes contains a value for `target`, it overrides the value of - * the target parameter. - * - * - * @returns {string} Html-linkified and {@link $sanitize sanitized} text. - * - * @usage - - * - * @example - - -
- Snippet: - - - - - - - - - - - - - - - - - - - - - - - - - - -
FilterSourceRendered
linky filter -
<div ng-bind-html="snippet | linky">
</div>
-
-
-
linky target -
<div ng-bind-html="snippetWithSingleURL | linky:'_blank'">
</div>
-
-
-
linky custom attributes -
<div ng-bind-html="snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}">
</div>
-
-
-
no filter
<div ng-bind="snippet">
</div>
- - - angular.module('linkyExample', ['ngSanitize']) - .controller('ExampleController', ['$scope', function($scope) { - $scope.snippet = - 'Pretty text with some links:\n' + - 'http://angularjs.org/,\n' + - 'mailto:us@somewhere.org,\n' + - 'another@somewhere.org,\n' + - 'and one more: ftp://127.0.0.1/.'; - $scope.snippetWithSingleURL = 'http://angularjs.org/'; - }]); - - - it('should linkify the snippet with urls', function() { - expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()). - toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' + - 'another@somewhere.org, and one more: ftp://127.0.0.1/.'); - expect(element.all(by.css('#linky-filter a')).count()).toEqual(4); - }); - - it('should not linkify snippet without the linky filter', function() { - expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()). - toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' + - 'another@somewhere.org, and one more: ftp://127.0.0.1/.'); - expect(element.all(by.css('#escaped-html a')).count()).toEqual(0); - }); - - it('should update', function() { - element(by.model('snippet')).clear(); - element(by.model('snippet')).sendKeys('new http://link.'); - expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()). - toBe('new http://link.'); - expect(element.all(by.css('#linky-filter a')).count()).toEqual(1); - expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()) - .toBe('new http://link.'); - }); - - it('should work with the target property', function() { - expect(element(by.id('linky-target')). - element(by.binding("snippetWithSingleURL | linky:'_blank'")).getText()). - toBe('http://angularjs.org/'); - expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank'); - }); - - it('should optionally add custom attributes', function() { - expect(element(by.id('linky-custom-attributes')). - element(by.binding("snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}")).getText()). - toBe('http://angularjs.org/'); - expect(element(by.css('#linky-custom-attributes a')).getAttribute('rel')).toEqual('nofollow'); - }); - - - */ -angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) { - var LINKY_URL_REGEXP = - /((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i, - MAILTO_REGEXP = /^mailto:/i; - - var linkyMinErr = angular.$$minErr('linky'); - var isDefined = angular.isDefined; - var isFunction = angular.isFunction; - var isObject = angular.isObject; - var isString = angular.isString; - - return function(text, target, attributes) { - if (text == null || text === '') return text; - if (!isString(text)) throw linkyMinErr('notstring', 'Expected string but received: {0}', text); - - var attributesFn = - isFunction(attributes) ? attributes : - isObject(attributes) ? function getAttributesObject() {return attributes;} : - function getEmptyAttributesObject() {return {};}; - - var match; - var raw = text; - var html = []; - var url; - var i; - while ((match = raw.match(LINKY_URL_REGEXP))) { - // We can not end in these as they are sometimes found at the end of the sentence - url = match[0]; - // if we did not match ftp/http/www/mailto then assume mailto - if (!match[2] && !match[4]) { - url = (match[3] ? 'http://' : 'mailto:') + url; - } - i = match.index; - addText(raw.substr(0, i)); - addLink(url, match[0].replace(MAILTO_REGEXP, '')); - raw = raw.substring(i + match[0].length); - } - addText(raw); - return $sanitize(html.join('')); - - function addText(text) { - if (!text) { - return; - } - html.push(sanitizeText(text)); - } - - function addLink(url, text) { - var key, linkAttributes = attributesFn(url); - html.push(''); - addText(text); - html.push(''); - } - }; -}]); - - -})(window, window.angular); diff --git a/gsoc/display/vendors/markdown/markdown.js b/gsoc/display/vendors/markdown/markdown.js deleted file mode 100644 index 989a6bec..00000000 --- a/gsoc/display/vendors/markdown/markdown.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * angular-markdown-directive v0.3.1 - * (c) 2013-2014 Brian Ford http://briantford.com - * License: MIT - */ - -'use strict'; - -angular.module('btford.markdown', ['ngSanitize']). - provider('markdownConverter', function () { - var opts = {}; - return { - config: function (newOpts) { - opts = newOpts; - }, - $get: function () { - return new Showdown.converter(opts); - } - }; - }). - directive('btfMarkdown', ['$sanitize', 'markdownConverter', function ($sanitize, markdownConverter) { - return { - restrict: 'AE', - link: function (scope, element, attrs) { - if (attrs.btfMarkdown) { - scope.$watch(attrs.btfMarkdown, function (newVal) { - var html = newVal ? $sanitize(markdownConverter.makeHtml(newVal)) : ''; - element.html(html); - }); - } else { - var html = $sanitize(markdownConverter.makeHtml(element.text())); - element.html(html); - } - } - }; - }]); diff --git a/gsoc/display/vendors/showdown/showdown.js b/gsoc/display/vendors/showdown/showdown.js deleted file mode 100644 index 25bed634..00000000 --- a/gsoc/display/vendors/showdown/showdown.js +++ /dev/null @@ -1,1454 +0,0 @@ -// -// showdown.js -- A javascript port of Markdown. -// -// Copyright (c) 2007 John Fraser. -// -// Original Markdown Copyright (c) 2004-2005 John Gruber -// -// -// Redistributable under a BSD-style open source license. -// See license.txt for more information. -// -// The full source distribution is at: -// -// A A L -// T C A -// T K B -// -// -// - -// -// Wherever possible, Showdown is a straight, line-by-line port -// of the Perl version of Markdown. -// -// This is not a normal parser design; it's basically just a -// series of string substitutions. It's hard to read and -// maintain this way, but keeping Showdown close to the original -// design makes it easier to port new features. -// -// More importantly, Showdown behaves like markdown.pl in most -// edge cases. So web applications can do client-side preview -// in Javascript, and then build identical HTML on the server. -// -// This port needs the new RegExp functionality of ECMA 262, -// 3rd Edition (i.e. Javascript 1.5). Most modern web browsers -// should do fine. Even with the new regular expression features, -// We do a lot of work to emulate Perl's regex functionality. -// The tricky changes in this file mostly have the "attacklab:" -// label. Major or self-explanatory changes don't. -// -// Smart diff tools like Araxis Merge will be able to match up -// this file with markdown.pl in a useful way. A little tweaking -// helps: in a copy of markdown.pl, replace "#" with "//" and -// replace "$text" with "text". Be sure to ignore whitespace -// and line endings. -// - - -// -// Showdown usage: -// -// var text = "Markdown *rocks*."; -// -// var converter = new Showdown.converter(); -// var html = converter.makeHtml(text); -// -// alert(html); -// -// Note: move the sample code to the bottom of this -// file before uncommenting it. -// - - -// -// Showdown namespace -// -var Showdown = {extensions: {}}; - -// -// forEach -// -var forEach = Showdown.forEach = function (obj, callback) { - if (typeof obj.forEach === 'function') { - obj.forEach(callback); - } else { - var i, len = obj.length; - for (i = 0; i < len; i++) { - callback(obj[i], i, obj); - } - } -}; - -// -// Standard extension naming -// -var stdExtName = function (s) { - return s.replace(/[_-]||\s/g, '').toLowerCase(); -}; - -// -// converter -// -// Wraps all "globals" so that the only thing -// exposed is makeHtml(). -// -Showdown.converter = function (converter_options) { - -// -// Globals: -// - -// Global hashes, used by various utility routines - var g_urls; - var g_titles; - var g_html_blocks; - -// Used to track when we're inside an ordered or unordered list -// (see _ProcessListItems() for details): - var g_list_level = 0; - -// Global extensions - var g_lang_extensions = []; - var g_output_modifiers = []; - - -// -// Automatic Extension Loading (node only): -// - if (typeof module !== 'undefined' && typeof exports !== 'undefined' && typeof require !== 'undefined') { - var fs = require('fs'); - - if (fs) { - // Search extensions folder - var extensions = fs.readdirSync((__dirname || '.') + '/extensions').filter(function (file) { - return ~file.indexOf('.js'); - }).map(function (file) { - return file.replace(/\.js$/, ''); - }); - // Load extensions into Showdown namespace - Showdown.forEach(extensions, function (ext) { - var name = stdExtName(ext); - Showdown.extensions[name] = require('./extensions/' + ext); - }); - } - } - - this.makeHtml = function (text) { -// -// Main function. The order in which other subs are called here is -// essential. Link and image substitutions need to happen before -// _EscapeSpecialCharsWithinTagAttributes(), so that any *'s or _'s in the -// and tags get encoded. -// - - // Clear the global hashes. If we don't clear these, you get conflicts - // from other articles when generating a page which contains more than - // one article (e.g. an index page that shows the N most recent - // articles): - g_urls = {}; - g_titles = {}; - g_html_blocks = []; - - // attacklab: Replace ~ with ~T - // This lets us use tilde as an escape char to avoid md5 hashes - // The choice of character is arbitray; anything that isn't - // magic in Markdown will work. - text = text.replace(/~/g, "~T"); - - // attacklab: Replace $ with ~D - // RegExp interprets $ as a special character - // when it's in a replacement string - text = text.replace(/\$/g, "~D"); - - // Standardize line endings - text = text.replace(/\r\n/g, "\n"); // DOS to Unix - text = text.replace(/\r/g, "\n"); // Mac to Unix - - // Make sure text begins and ends with a couple of newlines: - text = "\n\n" + text + "\n\n"; - - // Convert all tabs to spaces. - text = _Detab(text); - - // Strip any lines consisting only of spaces and tabs. - // This makes subsequent regexen easier to write, because we can - // match consecutive blank lines with /\n+/ instead of something - // contorted like /[ \t]*\n+/ . - text = text.replace(/^[ \t]+$/mg, ""); - - // Run language extensions - Showdown.forEach(g_lang_extensions, function (x) { - text = _ExecuteExtension(x, text); - }); - - // Handle github codeblocks prior to running HashHTML so that - // HTML contained within the codeblock gets escaped propertly - text = _DoGithubCodeBlocks(text); - - // Turn block-level HTML blocks into hash entries - text = _HashHTMLBlocks(text); - - // Strip link definitions, store in hashes. - text = _StripLinkDefinitions(text); - - text = _RunBlockGamut(text); - - text = _UnescapeSpecialChars(text); - - // attacklab: Restore dollar signs - text = text.replace(/~D/g, "$$"); - - // attacklab: Restore tildes - text = text.replace(/~T/g, "~"); - - // Run output modifiers - Showdown.forEach(g_output_modifiers, function (x) { - text = _ExecuteExtension(x, text); - }); - - return text; - }; - - -// -// Options: -// - -// Parse extensions options into separate arrays - if (converter_options && converter_options.extensions) { - - var self = this; - - // Iterate over each plugin - Showdown.forEach(converter_options.extensions, function (plugin) { - - // Assume it's a bundled plugin if a string is given - if (typeof plugin === 'string') { - plugin = Showdown.extensions[stdExtName(plugin)]; - } - - if (typeof plugin === 'function') { - // Iterate over each extension within that plugin - Showdown.forEach(plugin(self), function (ext) { - // Sort extensions by type - if (ext.type) { - if (ext.type === 'language' || ext.type === 'lang') { - g_lang_extensions.push(ext); - } else if (ext.type === 'output' || ext.type === 'html') { - g_output_modifiers.push(ext); - } - } else { - // Assume language extension - g_output_modifiers.push(ext); - } - }); - } else { - throw "Extension '" + plugin + "' could not be loaded. It was either not found or is not a valid extension."; - } - }); - } - - - var _ExecuteExtension = function (ext, text) { - if (ext.regex) { - var re = new RegExp(ext.regex, 'g'); - return text.replace(re, ext.replace); - } else if (ext.filter) { - return ext.filter(text); - } - }; - - var _StripLinkDefinitions = function (text) { -// -// Strips link definitions from text, stores the URLs and titles in -// hash references. -// - - // Link defs are in the form: ^[id]: url "optional title" - - /* - var text = text.replace(/ - ^[ ]{0,3}\[(.+)\]: // id = $1 attacklab: g_tab_width - 1 - [ \t]* - \n? // maybe *one* newline - [ \t]* - ? // url = $2 - [ \t]* - \n? // maybe one newline - [ \t]* - (?: - (\n*) // any lines skipped = $3 attacklab: lookbehind removed - ["(] - (.+?) // title = $4 - [")] - [ \t]* - )? // title is optional - (?:\n+|$) - /gm, - function(){...}); - */ - - // attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug - text += "~0"; - - text = text.replace(/^[ ]{0,3}\[(.+)\]:[ \t]*\n?[ \t]*?[ \t]*\n?[ \t]*(?:(\n*)["(](.+?)[")][ \t]*)?(?:\n+|(?=~0))/gm, - function (wholeMatch, m1, m2, m3, m4) { - m1 = m1.toLowerCase(); - g_urls[m1] = _EncodeAmpsAndAngles(m2); // Link IDs are case-insensitive - if (m3) { - // Oops, found blank lines, so it's not a title. - // Put back the parenthetical statement we stole. - return m3 + m4; - } else if (m4) { - g_titles[m1] = m4.replace(/"/g, """); - } - - // Completely remove the definition from the text - return ""; - } - ); - - // attacklab: strip sentinel - text = text.replace(/~0/, ""); - - return text; - } - - var _HashHTMLBlocks = function (text) { - // attacklab: Double up blank lines to reduce lookaround - text = text.replace(/\n/g, "\n\n"); - - // Hashify HTML blocks: - // We only want to do this for block-level HTML tags, such as headers, - // lists, and tables. That's because we still want to wrap

s around - // "paragraphs" that are wrapped in non-block-level tags, such as anchors, - // phrase emphasis, and spans. The list of tags we're looking for is - // hard-coded: - var block_tags_a = "p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del|style|section|header|footer|nav|article|aside"; - var block_tags_b = "p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|style|section|header|footer|nav|article|aside"; - - // First, look for nested blocks, e.g.: - //

- //
- // tags for inner block must be indented. - //
- //
- // - // The outermost tags must start at the left margin for this to match, and - // the inner nested divs must be indented. - // We need to do this before the next, more liberal match, because the next - // match will start at the first `
` and stop at the first `
`. - - // attacklab: This regex can be expensive when it fails. - /* - var text = text.replace(/ - ( // save in $1 - ^ // start of line (with /m) - <($block_tags_a) // start tag = $2 - \b // word break - // attacklab: hack around khtml/pcre bug... - [^\r]*?\n // any number of lines, minimally matching - // the matching end tag - [ \t]* // trailing spaces/tabs - (?=\n+) // followed by a newline - ) // attacklab: there are sentinel newlines at end of document - /gm,function(){...}}; - */ - text = text.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b[^\r]*?\n<\/\2>[ \t]*(?=\n+))/gm, hashElement); - - // - // Now match more liberally, simply from `\n` to `\n` - // - - /* - var text = text.replace(/ - ( // save in $1 - ^ // start of line (with /m) - <($block_tags_b) // start tag = $2 - \b // word break - // attacklab: hack around khtml/pcre bug... - [^\r]*? // any number of lines, minimally matching - // the matching end tag - [ \t]* // trailing spaces/tabs - (?=\n+) // followed by a newline - ) // attacklab: there are sentinel newlines at end of document - /gm,function(){...}}; - */ - text = text.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|style|section|header|footer|nav|article|aside)\b[^\r]*?<\/\2>[ \t]*(?=\n+)\n)/gm, hashElement); - - // Special case just for
. It was easier to make a special case than - // to make the other regex more complicated. - - /* - text = text.replace(/ - ( // save in $1 - \n\n // Starting after a blank line - [ ]{0,3} - (<(hr) // start tag = $2 - \b // word break - ([^<>])*? // - \/?>) // the matching end tag - [ \t]* - (?=\n{2,}) // followed by a blank line - ) - /g,hashElement); - */ - text = text.replace(/(\n[ ]{0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g, hashElement); - - // Special case for standalone HTML comments: - - /* - text = text.replace(/ - ( // save in $1 - \n\n // Starting after a blank line - [ ]{0,3} // attacklab: g_tab_width - 1 - - [ \t]* - (?=\n{2,}) // followed by a blank line - ) - /g,hashElement); - */ - text = text.replace(/(\n\n[ ]{0,3}[ \t]*(?=\n{2,}))/g, hashElement); - - // PHP and ASP-style processor instructions ( and <%...%>) - - /* - text = text.replace(/ - (?: - \n\n // Starting after a blank line - ) - ( // save in $1 - [ ]{0,3} // attacklab: g_tab_width - 1 - (?: - <([?%]) // $2 - [^\r]*? - \2> - ) - [ \t]* - (?=\n{2,}) // followed by a blank line - ) - /g,hashElement); - */ - text = text.replace(/(?:\n\n)([ ]{0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g, hashElement); - - // attacklab: Undo double lines (see comment at top of this function) - text = text.replace(/\n\n/g, "\n"); - return text; - } - - var hashElement = function (wholeMatch, m1) { - var blockText = m1; - - // Undo double lines - blockText = blockText.replace(/\n\n/g, "\n"); - blockText = blockText.replace(/^\n/, ""); - - // strip trailing blank lines - blockText = blockText.replace(/\n+$/g, ""); - - // Replace the element text with a marker ("~KxK" where x is its key) - blockText = "\n\n~K" + (g_html_blocks.push(blockText) - 1) + "K\n\n"; - - return blockText; - }; - - var _RunBlockGamut = function (text) { -// -// These are all the transformations that form block-level -// tags like paragraphs, headers, and list items. -// - text = _DoHeaders(text); - - // Do Horizontal Rules: - var key = hashBlock("
"); - text = text.replace(/^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$/gm, key); - text = text.replace(/^[ ]{0,2}([ ]?\-[ ]?){3,}[ \t]*$/gm, key); - text = text.replace(/^[ ]{0,2}([ ]?\_[ ]?){3,}[ \t]*$/gm, key); - - text = _DoLists(text); - text = _DoCodeBlocks(text); - text = _DoBlockQuotes(text); - - // We already ran _HashHTMLBlocks() before, in Markdown(), but that - // was to escape raw HTML in the original Markdown source. This time, - // we're escaping the markup we've just created, so that we don't wrap - //

tags around block-level tags. - text = _HashHTMLBlocks(text); - text = _FormParagraphs(text); - - return text; - }; - - var _RunSpanGamut = function (text) { -// -// These are all the transformations that occur *within* block-level -// tags like paragraphs, headers, and list items. -// - - text = _DoCodeSpans(text); - text = _EscapeSpecialCharsWithinTagAttributes(text); - text = _EncodeBackslashEscapes(text); - - // Process anchor and image tags. Images must come first, - // because ![foo][f] looks like an anchor. - text = _DoImages(text); - text = _DoAnchors(text); - - // Make links out of things like `` - // Must come after _DoAnchors(), because you can use < and > - // delimiters in inline links like [this](). - text = _DoAutoLinks(text); - text = _EncodeAmpsAndAngles(text); - text = _DoItalicsAndBold(text); - - // Do hard breaks: - text = text.replace(/ +\n/g, "
\n"); - - return text; - } - - var _EscapeSpecialCharsWithinTagAttributes = function (text) { -// -// Within tags -- meaning between < and > -- encode [\ ` * _] so they -// don't conflict with their use in Markdown for code, italics and strong. -// - - // Build a regex to find HTML tags and comments. See Friedl's - // "Mastering Regular Expressions", 2nd Ed., pp. 200-201. - var regex = /(<[a-z\/!$]("[^"]*"|'[^']*'|[^'">])*>|)/gi; - - text = text.replace(regex, function (wholeMatch) { - var tag = wholeMatch.replace(/(.)<\/?code>(?=.)/g, "$1`"); - tag = escapeCharacters(tag, "\\`*_"); - return tag; - }); - - return text; - } - - var _DoAnchors = function (text) { -// -// Turn Markdown link shortcuts into XHTML
tags. -// - // - // First, handle reference-style links: [link text] [id] - // - - /* - text = text.replace(/ - ( // wrap whole match in $1 - \[ - ( - (?: - \[[^\]]*\] // allow brackets nested one level - | - [^\[] // or anything else - )* - ) - \] - - [ ]? // one optional space - (?:\n[ ]*)? // one optional newline followed by spaces - - \[ - (.*?) // id = $3 - \] - )()()()() // pad remaining backreferences - /g,_DoAnchors_callback); - */ - text = text.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g, writeAnchorTag); - - // - // Next, inline-style links: [link text](url "optional title") - // - - /* - text = text.replace(/ - ( // wrap whole match in $1 - \[ - ( - (?: - \[[^\]]*\] // allow brackets nested one level - | - [^\[\]] // or anything else - ) - ) - \] - \( // literal paren - [ \t]* - () // no id, so leave $3 empty - ? // href = $4 - [ \t]* - ( // $5 - (['"]) // quote char = $6 - (.*?) // Title = $7 - \6 // matching quote - [ \t]* // ignore any spaces/tabs between closing quote and ) - )? // title is optional - \) - ) - /g,writeAnchorTag); - */ - text = text.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\]\([ \t]*()?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g, writeAnchorTag); - - // - // Last, handle reference-style shortcuts: [link text] - // These must come last in case you've also got [link test][1] - // or [link test](/foo) - // - - /* - text = text.replace(/ - ( // wrap whole match in $1 - \[ - ([^\[\]]+) // link text = $2; can't contain '[' or ']' - \] - )()()()()() // pad rest of backreferences - /g, writeAnchorTag); - */ - text = text.replace(/(\[([^\[\]]+)\])()()()()()/g, writeAnchorTag); - - return text; - } - - var writeAnchorTag = function (wholeMatch, m1, m2, m3, m4, m5, m6, m7) { - if (m7 == undefined) m7 = ""; - var whole_match = m1; - var link_text = m2; - var link_id = m3.toLowerCase(); - var url = m4; - var title = m7; - - if (url == "") { - if (link_id == "") { - // lower-case and turn embedded newlines into spaces - link_id = link_text.toLowerCase().replace(/ ?\n/g, " "); - } - url = "#" + link_id; - - if (g_urls[link_id] != undefined) { - url = g_urls[link_id]; - if (g_titles[link_id] != undefined) { - title = g_titles[link_id]; - } - } - else { - if (whole_match.search(/\(\s*\)$/m) > -1) { - // Special case for explicit empty url - url = ""; - } else { - return whole_match; - } - } - } - - url = escapeCharacters(url, "*_"); - var result = ""; - - return result; - } - - var _DoImages = function (text) { -// -// Turn Markdown image shortcuts into tags. -// - - // - // First, handle reference-style labeled images: ![alt text][id] - // - - /* - text = text.replace(/ - ( // wrap whole match in $1 - !\[ - (.*?) // alt text = $2 - \] - - [ ]? // one optional space - (?:\n[ ]*)? // one optional newline followed by spaces - - \[ - (.*?) // id = $3 - \] - )()()()() // pad rest of backreferences - /g,writeImageTag); - */ - text = text.replace(/(!\[(.*?)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g, writeImageTag); - - // - // Next, handle inline images: ![alt text](url "optional title") - // Don't forget: encode * and _ - - /* - text = text.replace(/ - ( // wrap whole match in $1 - !\[ - (.*?) // alt text = $2 - \] - \s? // One optional whitespace character - \( // literal paren - [ \t]* - () // no id, so leave $3 empty - ? // src url = $4 - [ \t]* - ( // $5 - (['"]) // quote char = $6 - (.*?) // title = $7 - \6 // matching quote - [ \t]* - )? // title is optional - \) - ) - /g,writeImageTag); - */ - text = text.replace(/(!\[(.*?)\]\s?\([ \t]*()?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g, writeImageTag); - - return text; - } - - var writeImageTag = function (wholeMatch, m1, m2, m3, m4, m5, m6, m7) { - var whole_match = m1; - var alt_text = m2; - var link_id = m3.toLowerCase(); - var url = m4; - var title = m7; - - if (!title) title = ""; - - if (url == "") { - if (link_id == "") { - // lower-case and turn embedded newlines into spaces - link_id = alt_text.toLowerCase().replace(/ ?\n/g, " "); - } - url = "#" + link_id; - - if (g_urls[link_id] != undefined) { - url = g_urls[link_id]; - if (g_titles[link_id] != undefined) { - title = g_titles[link_id]; - } - } - else { - return whole_match; - } - } - - alt_text = alt_text.replace(/"/g, """); - url = escapeCharacters(url, "*_"); - var result = "\""' + _RunSpanGamut(m1) + ""); - }); - - text = text.replace(/^(.+)[ \t]*\n-+[ \t]*\n+/gm, - function (matchFound, m1) { - return hashBlock('

' + _RunSpanGamut(m1) + "

"); - }); - - // atx-style headers: - // # Header 1 - // ## Header 2 - // ## Header 2 with closing hashes ## - // ... - // ###### Header 6 - // - - /* - text = text.replace(/ - ^(\#{1,6}) // $1 = string of #'s - [ \t]* - (.+?) // $2 = Header text - [ \t]* - \#* // optional closing #'s (not counted) - \n+ - /gm, function() {...}); - */ - - text = text.replace(/^(\#{1,6})[ \t]*(.+?)[ \t]*\#*\n+/gm, - function (wholeMatch, m1, m2) { - var h_level = m1.length; - return hashBlock("' + _RunSpanGamut(m2) + ""); - }); - - function headerId(m) { - return m.replace(/[^\w]/g, '').toLowerCase(); - } - - return text; - } - -// This declaration keeps Dojo compressor from outputting garbage: - var _ProcessListItems; - - var _DoLists = function (text) { -// -// Form HTML ordered (numbered) and unordered (bulleted) lists. -// - - // attacklab: add sentinel to hack around khtml/safari bug: - // http://bugs.webkit.org/show_bug.cgi?id=11231 - text += "~0"; - - // Re-usable pattern to match any entirel ul or ol list: - - /* - var whole_list = / - ( // $1 = whole list - ( // $2 - [ ]{0,3} // attacklab: g_tab_width - 1 - ([*+-]|\d+[.]) // $3 = first list item marker - [ \t]+ - ) - [^\r]+? - ( // $4 - ~0 // sentinel for workaround; should be $ - | - \n{2,} - (?=\S) - (?! // Negative lookahead for another list item marker - [ \t]* - (?:[*+-]|\d+[.])[ \t]+ - ) - ) - )/g - */ - var whole_list = /^(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm; - - if (g_list_level) { - text = text.replace(whole_list, function (wholeMatch, m1, m2) { - var list = m1; - var list_type = (m2.search(/[*+-]/g) > -1) ? "ul" : "ol"; - - // Turn double returns into triple returns, so that we can make a - // paragraph for the last item in a list, if necessary: - list = list.replace(/\n{2,}/g, "\n\n\n"); - ; - var result = _ProcessListItems(list); - - // Trim any trailing whitespace, to put the closing `` - // up on the preceding line, to get it past the current stupid - // HTML block parser. This is a hack to work around the terrible - // hack that is the HTML block parser. - result = result.replace(/\s+$/, ""); - result = "<" + list_type + ">" + result + "\n"; - return result; - }); - } else { - whole_list = /(\n\n|^\n?)(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/g; - text = text.replace(whole_list, function (wholeMatch, m1, m2, m3) { - var runup = m1; - var list = m2; - - var list_type = (m3.search(/[*+-]/g) > -1) ? "ul" : "ol"; - // Turn double returns into triple returns, so that we can make a - // paragraph for the last item in a list, if necessary: - var list = list.replace(/\n{2,}/g, "\n\n\n"); - ; - var result = _ProcessListItems(list); - result = runup + "<" + list_type + ">\n" + result + "\n"; - return result; - }); - } - - // attacklab: strip sentinel - text = text.replace(/~0/, ""); - - return text; - } - - _ProcessListItems = function (list_str) { -// -// Process the contents of a single ordered or unordered list, splitting it -// into individual list items. -// - // The $g_list_level global keeps track of when we're inside a list. - // Each time we enter a list, we increment it; when we leave a list, - // we decrement. If it's zero, we're not in a list anymore. - // - // We do this because when we're not inside a list, we want to treat - // something like this: - // - // I recommend upgrading to version - // 8. Oops, now this line is treated - // as a sub-list. - // - // As a single paragraph, despite the fact that the second line starts - // with a digit-period-space sequence. - // - // Whereas when we're inside a list (or sub-list), that line will be - // treated as the start of a sub-list. What a kludge, huh? This is - // an aspect of Markdown's syntax that's hard to parse perfectly - // without resorting to mind-reading. Perhaps the solution is to - // change the syntax rules such that sub-lists must start with a - // starting cardinal number; e.g. "1." or "a.". - - g_list_level++; - - // trim trailing blank lines: - list_str = list_str.replace(/\n{2,}$/, "\n"); - - // attacklab: add sentinel to emulate \z - list_str += "~0"; - - /* - list_str = list_str.replace(/ - (\n)? // leading line = $1 - (^[ \t]*) // leading whitespace = $2 - ([*+-]|\d+[.]) [ \t]+ // list marker = $3 - ([^\r]+? // list item text = $4 - (\n{1,2})) - (?= \n* (~0 | \2 ([*+-]|\d+[.]) [ \t]+)) - /gm, function(){...}); - */ - list_str = list_str.replace(/(\n)?(^[ \t]*)([*+-]|\d+[.])[ \t]+([^\r]+?(\n{1,2}))(?=\n*(~0|\2([*+-]|\d+[.])[ \t]+))/gm, - function (wholeMatch, m1, m2, m3, m4) { - var item = m4; - var leading_line = m1; - var leading_space = m2; - - if (leading_line || (item.search(/\n{2,}/) > -1)) { - item = _RunBlockGamut(_Outdent(item)); - } - else { - // Recursion for sub-lists: - item = _DoLists(_Outdent(item)); - item = item.replace(/\n$/, ""); // chomp(item) - item = _RunSpanGamut(item); - } - - return "
  • " + item + "
  • \n"; - } - ); - - // attacklab: strip sentinel - list_str = list_str.replace(/~0/g, ""); - - g_list_level--; - return list_str; - } - - var _DoCodeBlocks = function (text) { -// -// Process Markdown `
    ` blocks.
    -//
    -
    -        /*
    -         text = text.replace(text,
    -         /(?:\n\n|^)
    -         (								// $1 = the code block -- one or more lines, starting with a space/tab
    -         (?:
    -         (?:[ ]{4}|\t)			// Lines must start with a tab or a tab-width of spaces - attacklab: g_tab_width
    -         .*\n+
    -         )+
    -         )
    -         (\n*[ ]{0,3}[^ \t\n]|(?=~0))	// attacklab: g_tab_width
    -         /g,function(){...});
    -         */
    -
    -        // attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug
    -        text += "~0";
    -
    -        text = text.replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g,
    -            function (wholeMatch, m1, m2) {
    -                var codeblock = m1;
    -                var nextChar = m2;
    -
    -                codeblock = _EncodeCode(_Outdent(codeblock));
    -                codeblock = _Detab(codeblock);
    -                codeblock = codeblock.replace(/^\n+/g, ""); // trim leading newlines
    -                codeblock = codeblock.replace(/\n+$/g, ""); // trim trailing whitespace
    -
    -                codeblock = "
    " + codeblock + "\n
    "; - - return hashBlock(codeblock) + nextChar; - } - ); - - // attacklab: strip sentinel - text = text.replace(/~0/, ""); - - return text; - }; - - var _DoGithubCodeBlocks = function (text) { -// -// Process Github-style code blocks -// Example: -// ```ruby -// def hello_world(x) -// puts "Hello, #{x}" -// end -// ``` -// - - - // attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug - text += "~0"; - - text = text.replace(/(?:^|\n)```(.*)\n([\s\S]*?)\n```/g, - function (wholeMatch, m1, m2) { - var language = m1; - var codeblock = m2; - - codeblock = _EncodeCode(codeblock); - codeblock = _Detab(codeblock); - codeblock = codeblock.replace(/^\n+/g, ""); // trim leading newlines - codeblock = codeblock.replace(/\n+$/g, ""); // trim trailing whitespace - - codeblock = "
    " + codeblock + "\n
    "; - - return hashBlock(codeblock); - } - ); - - // attacklab: strip sentinel - text = text.replace(/~0/, ""); - - return text; - } - - var hashBlock = function (text) { - text = text.replace(/(^\n+|\n+$)/g, ""); - return "\n\n~K" + (g_html_blocks.push(text) - 1) + "K\n\n"; - } - - var _DoCodeSpans = function (text) { -// -// * Backtick quotes are used for spans. -// -// * You can use multiple backticks as the delimiters if you want to -// include literal backticks in the code span. So, this input: -// -// Just type ``foo `bar` baz`` at the prompt. -// -// Will translate to: -// -//

    Just type foo `bar` baz at the prompt.

    -// -// There's no arbitrary limit to the number of backticks you -// can use as delimters. If you need three consecutive backticks -// in your code, use four for delimiters, etc. -// -// * You can use spaces to get literal backticks at the edges: -// -// ... type `` `bar` `` ... -// -// Turns to: -// -// ... type `bar` ... -// - - /* - text = text.replace(/ - (^|[^\\]) // Character before opening ` can't be a backslash - (`+) // $2 = Opening run of ` - ( // $3 = The code block - [^\r]*? - [^`] // attacklab: work around lack of lookbehind - ) - \2 // Matching closer - (?!`) - /gm, function(){...}); - */ - - text = text.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm, - function (wholeMatch, m1, m2, m3, m4) { - var c = m3; - c = c.replace(/^([ \t]*)/g, ""); // leading whitespace - c = c.replace(/[ \t]*$/g, ""); // trailing whitespace - c = _EncodeCode(c); - return m1 + "" + c + ""; - }); - - return text; - } - - var _EncodeCode = function (text) { -// -// Encode/escape certain characters inside Markdown code runs. -// The point is that in code, these characters are literals, -// and lose their special Markdown meanings. -// - // Encode all ampersands; HTML entities are not - // entities within a Markdown code span. - text = text.replace(/&/g, "&"); - - // Do the angle bracket song and dance: - text = text.replace(//g, ">"); - - // Now, escape characters that are magic in Markdown: - text = escapeCharacters(text, "\*_{}[]\\", false); - -// jj the line above breaks this: -//--- - -//* Item - -// 1. Subitem - -// special char: * -//--- - - return text; - } - - var _DoItalicsAndBold = function (text) { - - // must go first: - text = text.replace(/(\*\*|__)(?=\S)([^\r]*?\S[*_]*)\1/g, - "$2"); - - text = text.replace(/(\*|_)(?=\S)([^\r]*?\S)\1/g, - "$2"); - - return text; - } - - var _DoBlockQuotes = function (text) { - - /* - text = text.replace(/ - ( // Wrap whole match in $1 - ( - ^[ \t]*>[ \t]? // '>' at the start of a line - .+\n // rest of the first line - (.+\n)* // subsequent consecutive lines - \n* // blanks - )+ - ) - /gm, function(){...}); - */ - - text = text.replace(/((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)/gm, - function (wholeMatch, m1) { - var bq = m1; - - // attacklab: hack around Konqueror 3.5.4 bug: - // "----------bug".replace(/^-/g,"") == "bug" - - bq = bq.replace(/^[ \t]*>[ \t]?/gm, "~0"); // trim one level of quoting - - // attacklab: clean up hack - bq = bq.replace(/~0/g, ""); - - bq = bq.replace(/^[ \t]+$/gm, ""); // trim whitespace-only lines - bq = _RunBlockGamut(bq); // recurse - - bq = bq.replace(/(^|\n)/g, "$1 "); - // These leading spaces screw with
     content, so we need to fix that:
    -                bq = bq.replace(
    -                    /(\s*
    [^\r]+?<\/pre>)/gm,
    -                    function (wholeMatch, m1) {
    -                        var pre = m1;
    -                        // attacklab: hack around Konqueror 3.5.4 bug:
    -                        pre = pre.replace(/^  /mg, "~0");
    -                        pre = pre.replace(/~0/g, "");
    -                        return pre;
    -                    });
    -
    -                return hashBlock("
    \n" + bq + "\n
    "); - }); - return text; - } - - var _FormParagraphs = function (text) { -// -// Params: -// $text - string to process with html

    tags -// - - // Strip leading and trailing lines: - text = text.replace(/^\n+/g, ""); - text = text.replace(/\n+$/g, ""); - - var grafs = text.split(/\n{2,}/g); - var grafsOut = []; - - // - // Wrap

    tags. - // - var end = grafs.length; - for (var i = 0; i < end; i++) { - var str = grafs[i]; - - // if this is an HTML marker, copy it - if (str.search(/~K(\d+)K/g) >= 0) { - grafsOut.push(str); - } - else if (str.search(/\S/) >= 0) { - str = _RunSpanGamut(str); - str = str.replace(/^([ \t]*)/g, "

    "); - str += "

    " - grafsOut.push(str); - } - - } - - // - // Unhashify HTML blocks - // - end = grafsOut.length; - for (var i = 0; i < end; i++) { - // if this is a marker for an html block... - while (grafsOut[i].search(/~K(\d+)K/) >= 0) { - var blockText = g_html_blocks[RegExp.$1]; - blockText = blockText.replace(/\$/g, "$$$$"); // Escape any dollar signs - grafsOut[i] = grafsOut[i].replace(/~K\d+K/, blockText); - } - } - - return grafsOut.join("\n\n"); - } - - var _EncodeAmpsAndAngles = function (text) { -// Smart processing for ampersands and angle brackets that need to be encoded. - - // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin: - // http://bumppo.net/projects/amputator/ - text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g, "&"); - - // Encode naked <'s - text = text.replace(/<(?![a-z\/?\$!])/gi, "<"); - - return text; - } - - var _EncodeBackslashEscapes = function (text) { -// -// Parameter: String. -// Returns: The string, with after processing the following backslash -// escape sequences. -// - - // attacklab: The polite way to do this is with the new - // escapeCharacters() function: - // - // text = escapeCharacters(text,"\\",true); - // text = escapeCharacters(text,"`*_{}[]()>#+-.!",true); - // - // ...but we're sidestepping its use of the (slow) RegExp constructor - // as an optimization for Firefox. This function gets called a LOT. - - text = text.replace(/\\(\\)/g, escapeCharacters_callback); - text = text.replace(/\\([`*_{}\[\]()>#+-.!])/g, escapeCharacters_callback); - return text; - } - - var _DoAutoLinks = function (text) { - - text = text.replace(/<((https?|ftp|dict):[^'">\s]+)>/gi, "
    $1"); - - // Email addresses: - - /* - text = text.replace(/ - < - (?:mailto:)? - ( - [-.\w]+ - \@ - [-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+ - ) - > - /gi, _DoAutoLinks_callback()); - */ - text = text.replace(/<(?:mailto:)?([-.\w]+\@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi, - function (wholeMatch, m1) { - return _EncodeEmailAddress(_UnescapeSpecialChars(m1)); - } - ); - - return text; - } - - var _EncodeEmailAddress = function (addr) { -// -// Input: an email address, e.g. "foo@example.com" -// -// Output: the email address as a mailto link, with each character -// of the address encoded as either a decimal or hex entity, in -// the hopes of foiling most address harvesting spam bots. E.g.: -// -// foo -// @example.com -// -// Based on a filter by Matthew Wickline, posted to the BBEdit-Talk -// mailing list: -// - - var encode = [ - function (ch) { - return "&#" + ch.charCodeAt(0) + ";"; - }, - function (ch) { - return "&#x" + ch.charCodeAt(0).toString(16) + ";"; - }, - function (ch) { - return ch; - } - ]; - - addr = "mailto:" + addr; - - addr = addr.replace(/./g, function (ch) { - if (ch == "@") { - // this *must* be encoded. I insist. - ch = encode[Math.floor(Math.random() * 2)](ch); - } else if (ch != ":") { - // leave ':' alone (to spot mailto: later) - var r = Math.random(); - // roughly 10% raw, 45% hex, 45% dec - ch = ( - r > .9 ? encode[2](ch) : - r > .45 ? encode[1](ch) : - encode[0](ch) - ); - } - return ch; - }); - - addr = "" + addr + ""; - addr = addr.replace(/">.+:/g, "\">"); // strip the mailto: from the visible part - - return addr; - } - - var _UnescapeSpecialChars = function (text) { -// -// Swap back in all the special characters we've hidden. -// - text = text.replace(/~E(\d+)E/g, - function (wholeMatch, m1) { - var charCodeToReplace = parseInt(m1); - return String.fromCharCode(charCodeToReplace); - } - ); - return text; - } - - var _Outdent = function (text) { -// -// Remove one level of line-leading tabs or spaces -// - - // attacklab: hack around Konqueror 3.5.4 bug: - // "----------bug".replace(/^-/g,"") == "bug" - - text = text.replace(/^(\t|[ ]{1,4})/gm, "~0"); // attacklab: g_tab_width - - // attacklab: clean up hack - text = text.replace(/~0/g, "") - - return text; - } - - var _Detab = function (text) { -// attacklab: Detab's completely rewritten for speed. -// In perl we could fix it by anchoring the regexp with \G. -// In javascript we're less fortunate. - - // expand first n-1 tabs - text = text.replace(/\t(?=\t)/g, " "); // attacklab: g_tab_width - - // replace the nth with two sentinels - text = text.replace(/\t/g, "~A~B"); - - // use the sentinel to anchor our regex so it doesn't explode - text = text.replace(/~B(.+?)~A/g, - function (wholeMatch, m1, m2) { - var leadingText = m1; - var numSpaces = 4 - leadingText.length % 4; // attacklab: g_tab_width - - // there *must* be a better way to do this: - for (var i = 0; i < numSpaces; i++) leadingText += " "; - - return leadingText; - } - ); - - // clean up sentinels - text = text.replace(/~A/g, " "); // attacklab: g_tab_width - text = text.replace(/~B/g, ""); - - return text; - } - - -// -// attacklab: Utility functions -// - - - var escapeCharacters = function (text, charsToEscape, afterBackslash) { - // First we have to escape the escape characters so that - // we can build a character class out of them - var regexString = "([" + charsToEscape.replace(/([\[\]\\])/g, "\\$1") + "])"; - - if (afterBackslash) { - regexString = "\\\\" + regexString; - } - - var regex = new RegExp(regexString, "g"); - text = text.replace(regex, escapeCharacters_callback); - - return text; - } - - - var escapeCharacters_callback = function (wholeMatch, m1) { - var charCodeToEscape = m1.charCodeAt(0); - return "~E" + charCodeToEscape + "E"; - } - -} // end of Showdown.converter - - -// export -if (typeof module !== 'undefined') module.exports = Showdown; - -// stolen from AMD branch of underscore -// AMD define happens at the end for compatibility with AMD loaders -// that don't enforce next-turn semantics on modules. -if (typeof define === 'function' && define.amd) { - define('showdown', function () { - return Showdown; - }); -} diff --git a/gsoc/gsoc2015/ideas.md b/gsoc/gsoc2015/ideas.md deleted file mode 100644 index a22a49e6..00000000 --- a/gsoc/gsoc2015/ideas.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -layout: default -title: "Ideas page for Google Summer of Code 2015" -show_main: false ---- - -# Ideas page for GSoC 2015 - - -Browse ideas for the following projects: - -{% for page in site.pages %} -{% if page.ideas_team and page.path contains 'gsoc2015' %} -* [{{ page.ideas_team }}](#{{ page.ideas_team | slugify }}) -{% endif %} -{% endfor %} - -For each participating project, the ideas are organized from easiest to hardest. - -{% for page in site.pages %} -{% if page.ideas_team and page.path contains 'gsoc2015' %} - - -# {{ page.ideas_team }} - -{{ page.content }} - -{% endif %} -{% endfor %} diff --git a/gsoc/gsoc2016/ideas.md b/gsoc/gsoc2016/ideas.md deleted file mode 100644 index eb6c87e2..00000000 --- a/gsoc/gsoc2016/ideas.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -layout: default -title: "Ideas page for Google Summer of Code 2016" -show_main: false ---- - -# Ideas page for GSoC 2016 - - -Browse ideas for the following projects: - -{% for page in site.pages %} -{% if page.ideas_team and page.path contains 'gsoc2016' %} -* [{{ page.ideas_team }}](#{{ page.ideas_team | slugify }}) -{% endif %} -{% endfor %} - -For each participating project, the ideas are organized from easiest to hardest. - -{% for page in site.pages %} -{% if page.ideas_team and page.path contains 'gsoc2016' %} - - -# {{ page.ideas_team }} - -{{ page.content }} - -{% endif %} -{% endfor %} diff --git a/gsoc/gsoc2017/index.md b/gsoc/gsoc2017/index.md deleted file mode 100644 index ee5988b1..00000000 --- a/gsoc/gsoc2017/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: projects -title: "Ideas page for Google Summer of Code 2017" -show_main: false -season: 2017 ---- diff --git a/gsoc/gsoc2018/index.md b/gsoc/gsoc2018/index.md deleted file mode 100644 index 732d0439..00000000 --- a/gsoc/gsoc2018/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: projects -title: "Ideas page for Google Summer of Code 2018" -show_main: false -season: 2018 ---- diff --git a/gsoc/gsoc2019/index.md b/gsoc/gsoc2019/index.md deleted file mode 100644 index 550d851b..00000000 --- a/gsoc/gsoc2019/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: projects -title: "Ideas page for Google Summer of Code 2019" -show_main: false -season: 2019 ---- diff --git a/gsoc/gsoc2020/index.md b/gsoc/gsoc2020/index.md deleted file mode 100644 index d23da5c5..00000000 --- a/gsoc/gsoc2020/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: projects -title: "Ideas page for Google Summer of Code 2020" -show_main: false -season: 2020 ---- diff --git a/gsoc/gsoc2021/index.md b/gsoc/gsoc2021/index.md deleted file mode 100644 index f4ff6b35..00000000 --- a/gsoc/gsoc2021/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: projects -title: "Ideas page for Google Summer of Code 2021" -show_main: false -season: 2021 ---- diff --git a/gsoc/gsoc2022/index.md b/gsoc/gsoc2022/index.md deleted file mode 100644 index 49fc305a..00000000 --- a/gsoc/gsoc2022/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: projects -title: "Ideas page for Google Summer of Code 2022" -show_main: false -season: 2022 ---- diff --git a/gsoc/gsoc2023/index.md b/gsoc/gsoc2023/index.md deleted file mode 100644 index 251b92e2..00000000 --- a/gsoc/gsoc2023/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: projects -title: "Ideas page for Google Summer of Code 2023" -show_main: false -season: 2023 ---- diff --git a/gsoc/gsoc2024/index.md b/gsoc/gsoc2024/index.md deleted file mode 100644 index 8376707c..00000000 --- a/gsoc/gsoc2024/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: projects -title: "Ideas page for Google Summer of Code 2024" -show_main: false -season: 2024 ---- diff --git a/gsoc/gsoc2025/index.md b/gsoc/gsoc2025/index.md deleted file mode 100644 index 3e921359..00000000 --- a/gsoc/gsoc2025/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: projects -title: "Ideas page for Google Summer of Code 2025" -show_main: false -season: 2025 ---- diff --git a/gsoc/gsoc2026/index.md b/gsoc/gsoc2026/index.md deleted file mode 100644 index 52a139b1..00000000 --- a/gsoc/gsoc2026/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: projects -title: "Ideas page for Google Summer of Code 2026" -show_main: false -season: 2026 ---- diff --git a/gsoc/index.md b/gsoc/index.md deleted file mode 100644 index c0a5743c..00000000 --- a/gsoc/index.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -layout: page -title: Google Summer of Code -permalink: /gsoc/ ---- - -## New to GSoC? - -[Background on GSoC: Start Here!](./background.html) - -## GSoC & Open Astronomy 2026 - -OpenAstronomy is an umbrella organisation which collects project ideas from any of its members. -OpenAstronomy has been a GSOC mentoring organisation since 2016 and it's applying to participate in 2026. - -Contributors applications to OpenAstronomy projects follows the same rules as the [Python Software Foundation] and the [GSoC Contributor Guide]. -We have [also our own guide to a good application for OpenAstronomy][OpenAstronomy Contributor Guide]. - -All contributors blogs are collected on the [OpenAstronomy Universe] site. - -## Quick Links - -* [OpenAstronomy Contributor Guide] -* [GSoC Contributor Guide] -* [Now You Know It!: Getting selected in Outreachy by Kriti Singh] - -## Current Project ideas offered by mentors {#current-projects} - -* [2026](./gsoc2026/) - - -
    Previous editions - -* [2025](./gsoc2025/) -* [2024](./gsoc2024/) -* [2023](./gsoc2023/) -* [2022](./gsoc2022/) -* [2021](./gsoc2021/) -* [2020](./gsoc2020/) -* [2019](./gsoc2019/) -* [2018](./gsoc2018/) -* [2017](./gsoc2017/) -* [2016](./gsoc2016/ideas.html) -* [2015](./gsoc2015/ideas.html) - -
    - -## Info for sub-organisations' admins - -Whether you have been participating for years or this is your first time read our guide for [sub-org admins](./suborg_guidelines.html). - -[OpenAstronomy Contributor Guide]: ./contributor_guidelines.html -[Python Software Foundation]: http://python-gsoc.org/ -[GSoC Contributor Guide]: https://google.github.io/gsocguides/student/ -[OpenAstronomy Universe]: http://openastronomy.org/Universe_OA/ -[Now You Know It!: Getting selected in Outreachy by Kriti Singh]: https://github.com/kritisingh1/numpy/wiki/Now-You-Know-It!-:-Getting-selected-in-Outreachy - -## Related Organizations - -OpenAstronomy is closely related to other organizations that support open-source scientific computing: - -- [NumFOCUS](https://numfocus.org/) - Supports open-source scientific computing projects, including many under OpenAstronomy [and also participates in GSoC.](https://numfocus.org/community/google-summer-of-code) -- [Python Software Foundation](https://www.python.org/) - Oversees GSoC projects for the broader Python ecosystem [and also participates in GSoC.](http://python-gsoc.org/) -- [TARDIS](https://tardis-sn.github.io/) - A radiative transfer code for supernovae, [also participating in GSoC](https://tardis-sn.github.io/summer_of_code/gsoc_start/) - -These organizations collaborate on various scientific computing initiatives and GSoC at times. diff --git a/gsoc/suborg_guidelines.md b/gsoc/suborg_guidelines.md deleted file mode 100644 index 5ab1ac23..00000000 --- a/gsoc/suborg_guidelines.md +++ /dev/null @@ -1,186 +0,0 @@ ---- -layout: default -title: "GSoC SubOrg Guidelines" -show_main: false ---- - -# GSoC SubOrg Guidelines - -OpenAstronomy has been accepted as an umbrella organisation since -2016. We will keep applying every year, but that doesn't mean we -will always be selected. If selected, we don't know the number of -slots we will get till the contributor selection process ends. However, -it's our intention to keep the process fair for the suborganisations -and contributors. - -## I want to propose a new sub-org, what do I do? - -First, we recommend you to carefully read [Google's notes for first year organizations][Google-notes] and -[the PSF guidelines for sub orgs][PSF-sub-orgs], which provide a general idea about the goals -and concepts underpinning the Google Summer of Code program. -Then, you need to be a member of the OpenAstronomy team. That process -is simple (and free!). You need to be an open-development organisation -and be related with astronomy. Then make a pull-request to [our repository][OA repository] -adding a logo, a short description, etc. -Follow the instructions in the example at the bottom of [the `memembers.yaml` file][members PR]. -The steering council will review your application and give you feedback. - -Once a member, you can start the path to participate on GSoC! -First you should get familiarised with the program, [Google's mentor guide] is -a wonderful resource with detailed information of every aspect of it. -You need the following: -- time! How much? a fair bit. -- ideas! How many? One is enough. How good? more about this below. -- helpers! You need mentors, at least two mentors per idea. - -Let's look into that in more detail: - -### Time - -The program has a few deadlines, and Google won't extend them even if -their system is down closer to the end. They always allow a fair amount -of time to submit whatever is needed. To be on the safe side of this, -OpenAstronomy imposes a deadline of one day before Google's. You (and the contributors) -will receive a reminder from the OpenAstronomy admins before such deadline. -If you fail to meet these deadlines, your sub-org and contributors may be affected. - -Besides these deadlines, as a sub-org admin, you will have to keep track of -all your contributors and mentors, following how they are doing with their projects -and making sure they communicate regularly. - -### Ideas - -Normally organisations provide a list of ideas that can be done by a contributor -in approximately three months (working full-time). Take a look at what [Google -says on how to define a project](https://google.github.io/gsocguides/mentor/defining-a-project-ideas-list), -then look at [other ideas OpenAstronomy's members have proposed this or previous years.](./#current-projects). - -To add your own, you will have to create a pull-request to [our repository][OA repository] -following the [template](https://github.com/OpenAstronomy/openastronomy.github.io/blob/master/_projects/_template.md). -Take a look at [how others have done it before](https://github.com/OpenAstronomy/openastronomy.github.io/pull/182). -The admins and other members will review your ideas and provide feedback. Once -done, they will be merged and displayed on our website. - -It's also possible that a contributor comes up with their own ideas! That's OK, the -only limitation is that either the contributor or the admin will have to find a -mentor for that idea who is familiar with the programming language, the repository, -and the idea in itself. - -### Mentors - -For each project idea you need to have at least **two** mentors that are committed to participate -in the programme. The mentors need most importantly be familiar with the repository, -normally they are real core-contributors, they need to be familiar with the idea and -have some idea on how that could be implemented. - -The mentors also need to have time for the project. We expect around -10 hours per week (not only to mentoring, but to the organisation in itself). That -time varies depending from project to project. But a minimum they should -have a hour per week to discuss with the contributor their progress. This can be done -as a 10 minutes per day, or as 1 hour video-call. Additionally, they will need -to review the contributor code, discuss with other core-members to tell how the project -is evolving, etc. - -Why two mentors? Mentors do also need a break. They may have a conference to attend -or simply they could disappear from the project. Having two mentors will help to -keep continuity to the contributor project and brings more knowledge to the table. - -Though we are not too strict about the availability of the mentors, we suggest -they are at least one hour per day - in a non-crazy hour for contributor and mentor - -at the chat room of the organisation. So the contributor can ask the questions needed -on the organisation room. This can also be done via e-mail, but we believe the -contributors need to familiarise with the rest of the community. (Plus others can -help if the mentors are unavailable). - -Oh, and yes! you as an admin can also be a mentor. And don't forget to tell -them to read [Google's mentor guide]. - -## GSoC starts - -If we are accepted... what happens next? -First, have you read the [mentor guide][Google's mentor guide]? If so, take a -look at it again as a refresher! - -The application period for contributors is open just for two weeks. However, they -will know for more than a month which organisations are participating. Even -some contributors start to show interest from way before that!! The main purpose -of the programme is to bring new contributors to the organisation, so the more they -engage the better for your organisation. The dream contributor is that one that becomes -mentor in the following years. - - -### Contributor application - -Contributors will apply via the [GSoC portal][GSOC]. If it's not there, their -application doesn't count. OpenAstronomy offers [a template for the contributors to -apply][template-application-wiki]. Some suborgs require they post publicly their application on their wiki -(see for example [SunPy's](https://github.com/sunpy/sunpy/wiki/GSoC)), others -don't. In any case, it's good to encourage the contributors to share the draft of -their applications with the mentors, so they can improve it before the deadline. - -OpenAstronomy has [certain rules for an application to be considered][contributor -guidelines]. Familiarise with them to be able to inform your mentors and -candidates. - -### Applications evaluation - -Each sub-org will have to evaluate the contributor application using a shared -document within all the mentors. The OpenAstronomy administrators will -share them with you. There you will grade the application, the engagement -of the contributor shown so far, the quality of the pull request to the organisation, -any notes from an interview you may do, etc. - -### Slots allocation - -Based on the numbers of mentors and outstanding applications your sub-org -has, you will ask for a number of slots to the Open Astronomy administrators. -They will collect these numbers from all the other sub-org and request them -to Google. - -Google will then, after a few days, tell us how many slots we get. Nobody -knows them *a priori*, and they vary considerably year after year. - -If the number of slots obtained is smaller than the requested, then the steering -council will decide the distribution of the slots using the following points as guidelines: - -- The quality of the contributor proposal. A well-structured and described project will be favored, -not simply a copy/paste from the ideas page. -- What's the likelihood of that candidate contributor to become a long-term -contributor? How has the contributor engaged till now? -- Commitment of the mentors for the project. The mentors need to show they have -committed to the sub-org and OpenAstronomy, and evidence of this will make the -slot more likely to be allocated. -For example, it is best to have mentors that have contributed to the organisation's -code base and are familiar with the language and topic. -- A project that enables cooperation with other sub-organisations of OpenAstronomy -will generally be favored over those that do not. - -The process will be as open as possible including only the admins and mentors -involved in the selection. Remember, we cannot disclose any information on contributor -selection to the contributors before Google announces the selected contributors - -Note that OpenAstronomy usually assigns one slot for first year sub-orgs. -That may change in a case-by-case basis, e.g., the sub-organisation already participated -in previous editions of the GSoC (either by itself or with another umbrella organization), -or has experience with similar coding outreach programmes, such as [ESA-SOCIS][ESA-SOCIS]. - -### Evaluations - -Once the programme starts each contributor has to pass an evaluation per month. -If one of them is failed (or not provided on time), the contributor cannot -continue in the programme and therefore, not get paid. - -OpenAstronomy has also set a set of obligations for the contributors to do -during the programme (e.g., a blog post every two weeks describing their progress, telecommuting with mentors weekly). -If they are not followed the administrators will fail the contributors. - - -[OA repository]: https://github.com/OpenAstronomy/openastronomy.github.io -[contributor guidelines]: ./contributor_guidelines.html -[Google's mentor guide]: https://google.github.io/gsocguides/mentor/ -[GSOC]: https://summerofcode.withgoogle.com/ -[members PR]: https://github.com/OpenAstronomy/openastronomy.github.io/blob/master/_data/members.yaml -[ESA-SOCIS]: https://www.esa.int/Enabling_Support/Space_Engineering_Technology/SOCIS_The_ESA_Summer_of_Code_in_Space -[Google-notes]: https://google.github.io/gsocguides/mentor/notes-for-first-year-organizations -[PSF-sub-orgs]: https://python-gsoc.org/mentors.html#sub-orgs -[template-application-wiki]: https://github.com/OpenAstronomy/openastronomy.github.io/wiki/Contributor-Application-template diff --git a/img/icons/cgit.png b/img/icons/cgit.png deleted file mode 100644 index 40b57860..00000000 Binary files a/img/icons/cgit.png and /dev/null differ diff --git a/img/logo/logoOA.png b/img/logo/logoOA.png deleted file mode 100644 index 3dc2f989..00000000 Binary files a/img/logo/logoOA.png and /dev/null differ diff --git a/img/logo/logoOA.svg b/img/logo/logoOA.svg deleted file mode 100644 index 20af1e3d..00000000 --- a/img/logo/logoOA.svg +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - Open - Astronomy - - - - diff --git a/img/logo/logoOA.xcf b/img/logo/logoOA.xcf deleted file mode 100644 index 955a6b24..00000000 Binary files a/img/logo/logoOA.xcf and /dev/null differ diff --git a/img/logo/logoOA_embed.svg b/img/logo/logoOA_embed.svg deleted file mode 100644 index 96efd7ca..00000000 --- a/img/logo/logoOA_embed.svg +++ /dev/null @@ -1,5546 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - Open - Astronomy -   - - - diff --git a/img/members/casacore.svg b/img/members/casacore.svg deleted file mode 100644 index 8ed708e4..00000000 --- a/img/members/casacore.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/img/members/gnuastro.svg b/img/members/gnuastro.svg deleted file mode 100644 index d5a39600..00000000 --- a/img/members/gnuastro.svg +++ /dev/null @@ -1,982 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/img/members/heliopy.png b/img/members/heliopy.png deleted file mode 100644 index e4a5a025..00000000 Binary files a/img/members/heliopy.png and /dev/null differ diff --git a/img/members/juliaastro.svg b/img/members/juliaastro.svg deleted file mode 100644 index fcd05e1d..00000000 --- a/img/members/juliaastro.svg +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/img/members/sherpa_logo.gif b/img/members/sherpa_logo.gif deleted file mode 100644 index 9f5421b5..00000000 Binary files a/img/members/sherpa_logo.gif and /dev/null differ diff --git a/index.md b/index.md deleted file mode 100644 index aafdf072..00000000 --- a/index.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -layout: default ---- - - - -OpenAstronomy is a collaboration between open source astronomy and astrophysics -projects to share resources, ideas, and to improve code. - -## Principles of OpenAstronomy - -The core principles of OpenAstronomy (OA) include: - -1. Open Source: OA projects are committed to their software being Open Source[1]. This promotes accessibility, reliability, and scientific reproducibility. -2. Open Development: OA projects support the principle of Open Development[2], a model where the software is both *by* and *for* the community. More concretely, these projects try to work in publicly-visible spaces, encouraging discussion and participation from their public user community on both code and project-level decisions. -3. Open Science: OA projects support reproducible science through the use of open and accessible data both through good data management practices and effective open software. - -[1] https://opensource.org/docs/osd -[2] Tollerud, E., “Sustaining Community-Driven Software for Astronomy in the 2020s”, vol. 51, no. 7, 2019. - -## Get involved with OpenAstronomy - -The [OpenAstronomy discourse](https://community.openastronomy.org) is a great place to get involved with the community. -You can freely browse the channels but posting and other interaction requires you to sign up. - -If you want to get involved with OpenAstronomy or maybe you have a project that -would like to join the collaboration, please feel free to get in touch. The -OpenAstronomy organisation has a mailing list (openastronomy@googlegroups.com) -which is good place to introduce yourself. - -## Contact the OpenAstronomy Members - -See our [members](/members/) page for contact details of all the individual organisations. diff --git a/linkcheck.skip.txt b/linkcheck.skip.txt new file mode 100644 index 00000000..b827cd22 --- /dev/null +++ b/linkcheck.skip.txt @@ -0,0 +1,118 @@ +# One regex pattern per line. Lines starting with # are ignored. +# Example: +# https://example.com/skip-this + +# CircleCI artifact URLs — generated by the preview rebuild step and should +# not be treated as external links to validate. +output\.circle-artifacts\.com + +# OpenAstronomy production domain — canonical tags point here before +# deployment and will 404 until the Astro site goes live. +openastronomy\.org + +# X (Twitter) — blocks all automated/headless requests with HTTP 403. +x\.com + +# GNU project website — returns HTTP 403 for headless fetch (WAF false positive). +www\.gnu\.org + +# --- Dead domains from historical GSoC proposals (2015-2022) --- +# These links were valid when the proposals were written but the projects/domains +# are no longer active. Skipped so archival content remains unchanged. + +# EinsteinPy — project appears inactive; domain no longer resolves. +einsteinpy\.org + +# poliastro documentation and blog — domains defunct (project moved to poliastro.space). +docs\.poliastro\.space +blog\.poliastro\.space + +# heliopy — project archived; documentation domain no longer resolves. +docs\.heliopy\.org + +# IDL Astronomy Library — NASA server no longer accessible. +idlastro\.gsfc\.nasa\.gov + +# HelioML textbook — GitHub Pages site is offline. +helioml\.github\.io + +# ADS mirror at Strasbourg — server no longer operational. +cdsads\.u-strasbg\.fr + +# TaQL Jupyter kernel site — server offline. +taql\.astron\.nl + +# Fermi LAT Science Support Center — server unreachable. +fermi\.gsfc\.nasa\.gov + +# Norwegian university server — offline. +folk\.uio\.no + +# US Naval Observatory publications server — offline. +aa\.usno\.navy\.mil + +# IAUSOFA library site — old URL, no longer accessible. +www\.iausofa\.org + +# astropython.org community site — defunct. +www\.astropython\.org + +# Canadian Space Weather — server offline. +www\.spaceweather\.gc\.ca + +# SILSO/SIDC solar data — server offline or restructured. +sidc\.oma\.be + +# AGI engineering tools page — commercial redirect broken. +agi\.com/products/engineering-tools + +# ERAS project on readthedocs — used .org instead of .io; project inactive. +eras\.readthedocs\.org + +# Deleted GitHub gist (JuanLu001). +gist\.github\.com/Juanlu001 + +# CDS Vizier documentation — URL no longer accessible. +vizier\.u-strasbg\.fr + +# Bitbucket repositories that no longer exist. +bitbucket\.org/aldebran +bitbucket\.org/OPersian +bitbucket\.com/italianmarssociety +bitbucket\.org/yt_analysis + +# JuliaAstro AstroTime GitHub Pages — site offline. +juliaastro\.github\.io/AstroTime + +# Old Julia docs used /en/latest/ — now versioned as /en/v1/. +docs\.julialang\.org/en/latest + +# Old sunpy docs — pages moved or removed during docs restructuring. +docs\.sunpy\.org/en/stable/code_ref +docs\.sunpy\.org/en/stable/guide/acquiring_data/database +docs\.sunpy\.org/en/stable/guide/tour +docs\.sunpy\.org/en/stable/guide/units-coordinates +docs\.sunpy\.org/en/stable/generated/gallery/plotting +docs\.sunpy\.org/en/latest/guide/acquiring_data/hek +docs\.sunpy\.org/en/latest/guide/acquiring_data/fido +http://docs\.sunpy\.org + +# Old astropy docs — specific pages moved during restructuring. +docs\.astropy\.org/en/stable/coordinates/observing-example +http://docs\.astropy\.org + +# RADIS docs — hitran-spectra example page removed/moved. +radis\.readthedocs\.io/en/latest/examples/hitran-spectra + +# GitHub refs that no longer exist (deleted branches, moved repos, removed files). +github\.com/sunpy/sunpy/tree/unidown +github\.com/sunpy/sunpy/blob/master/sunpy/net/helioviewer\.py +github\.com/sunpy/ndcube/projects/ +github\.com/sunpy/irispy/issues/27 +github\.com/Hypnus1803/flow_maps +github\.com/gagan-aryan$ +github\.com/arunavabasu-03$ +github\.com/at88mph/opencadc_stc +github\.com/kbg/drms/issues/3 +github\.com/astropy/astropy/issue/5626 +github\.com/suzil/radis-app/issues diff --git a/members.md b/members.md deleted file mode 100644 index 9c83779f..00000000 --- a/members.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: page -title: Members -permalink: /members/ ---- - -## Who is part of OpenAstronomy? - -
    -{% assign sorted_members = site.data.members | sort %} -{% for member in sorted_members %} -
    {% include member.html member=member%}
    - {% cycle '', '
    ' %} - {% cycle '', '
    ' %} -{% endfor %} -
    - diff --git a/news.md b/news.md deleted file mode 100644 index 6596d304..00000000 --- a/news.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: page -title: News and Events ---- -
    - {% for post in site.posts %} -

    {{ post.title }}

    - {{ post.excerpt }} - {% endfor %} -
    diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..03df1f99 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,9175 @@ +{ + "name": "openastronomy-site", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "openastronomy-site", + "dependencies": { + "astro": "^5.16.15" + }, + "devDependencies": { + "@astrojs/check": "^0.9.2", + "@eslint/js": "^9.39.2", + "@typescript-eslint/eslint-plugin": "^8.53.1", + "@typescript-eslint/parser": "^8.53.1", + "astro-eslint-parser": "^1.2.2", + "eslint": "^9.39.2", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-astro": "^1.5.0", + "globals": "^17.1.0", + "linkinator": "^7.5.3", + "markdownlint-cli2": "^0.21.0", + "prettier": "^3.8.1", + "prettier-plugin-astro": "^0.14.1", + "typescript": "^5.9.3", + "vitest": "^4.1.3" + } + }, + "node_modules/@astrojs/check": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.9.2.tgz", + "integrity": "sha512-6rWxtJTbd/ctdAlmla0CAvloGaai5IUTG0K21kctJHHGKJKnGH6Xana7m0zNOtHpVPEJi1SgC/TcsN+ltYt0Cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@astrojs/language-server": "^2.13.2", + "chokidar": "^3.5.3", + "fast-glob": "^3.3.1", + "kleur": "^4.1.5", + "yargs": "^17.7.2" + }, + "bin": { + "astro-check": "dist/bin.js" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } + }, + "node_modules/@astrojs/check/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/@astrojs/check/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@astrojs/check/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@astrojs/check/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@astrojs/check/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/@astrojs/compiler": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.1.tgz", + "integrity": "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==", + "license": "MIT" + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.6.tgz", + "integrity": "sha512-GOle7smBWKfMSP8osUIGOlB5kaHdQLV3foCsf+5Q9Wsuu+C6Fs3Ez/ttXmhjZ1HkSgsogcM1RXSjjOVieHq16Q==", + "license": "MIT" + }, + "node_modules/@astrojs/language-server": { + "version": "2.16.6", + "resolved": "https://registry.npmjs.org/@astrojs/language-server/-/language-server-2.16.6.tgz", + "integrity": "sha512-N990lu+HSFiG57owR0XBkr02BYMgiLCshLf+4QG4v6jjSWkBeQGnzqi+E1L08xFPPJ7eEeXnxPXGLaVv5pa4Ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.13.1", + "@astrojs/yaml2ts": "^0.2.3", + "@jridgewell/sourcemap-codec": "^1.5.5", + "@volar/kit": "~2.4.28", + "@volar/language-core": "~2.4.28", + "@volar/language-server": "~2.4.28", + "@volar/language-service": "~2.4.28", + "muggle-string": "^0.4.1", + "tinyglobby": "^0.2.15", + "volar-service-css": "0.0.70", + "volar-service-emmet": "0.0.70", + "volar-service-html": "0.0.70", + "volar-service-prettier": "0.0.70", + "volar-service-typescript": "0.0.70", + "volar-service-typescript-twoslash-queries": "0.0.70", + "volar-service-yaml": "0.0.70", + "vscode-html-languageservice": "^5.6.2", + "vscode-uri": "^3.1.0" + }, + "bin": { + "astro-ls": "bin/nodeServer.js" + }, + "peerDependencies": { + "prettier": "^3.0.0", + "prettier-plugin-astro": ">=0.11.0" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + }, + "prettier-plugin-astro": { + "optional": true + } + } + }, + "node_modules/@astrojs/markdown-remark": { + "version": "6.3.11", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.11.tgz", + "integrity": "sha512-hcaxX/5aC6lQgHeGh1i+aauvSwIT6cfyFjKWvExYSxUhZZBBdvCliOtu06gbQyhbe0pGJNoNmqNlQZ5zYUuIyQ==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.7.6", + "@astrojs/prism": "3.3.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "shiki": "^3.21.0", + "smol-toml": "^1.6.0", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.2", + "vfile": "^6.0.3" + } + }, + "node_modules/@astrojs/prism": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz", + "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", + "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^4.2.0", + "debug": "^4.4.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "is-docker": "^3.0.0", + "is-wsl": "^3.1.0", + "which-pm-runs": "^1.1.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/yaml2ts": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@astrojs/yaml2ts/-/yaml2ts-0.2.3.tgz", + "integrity": "sha512-PJzRmgQzUxI2uwpdX2lXSHtP4G8ocp24/t+bZyf5Fy0SZLSF9f9KXZoMlFM/XCGue+B0nH/2IZ7FpBYQATBsCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "yaml": "^2.8.2" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.0.tgz", + "integrity": "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@emmetio/abbreviation": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz", + "integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/css-abbreviation": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz", + "integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/css-parser": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@emmetio/css-parser/-/css-parser-0.4.1.tgz", + "integrity": "sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emmetio/stream-reader": "^2.2.0", + "@emmetio/stream-reader-utils": "^0.1.0" + } + }, + "node_modules/@emmetio/html-matcher": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@emmetio/html-matcher/-/html-matcher-1.3.0.tgz", + "integrity": "sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@emmetio/scanner": "^1.0.0" + } + }, + "node_modules/@emmetio/scanner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.4.tgz", + "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@emmetio/stream-reader": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@emmetio/stream-reader/-/stream-reader-2.2.0.tgz", + "integrity": "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@emmetio/stream-reader-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@emmetio/stream-reader-utils/-/stream-reader-utils-0.1.0.tgz", + "integrity": "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@emnapi/runtime": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz", + "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.23.0.tgz", + "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", + "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", + "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", + "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@shikijs/types": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", + "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/katex": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.8.tgz", + "integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.1.tgz", + "integrity": "sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.53.1", + "@typescript-eslint/type-utils": "8.53.1", + "@typescript-eslint/utils": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.53.1", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.53.1.tgz", + "integrity": "sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.53.1", + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.1.tgz", + "integrity": "sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.53.1", + "@typescript-eslint/types": "^8.53.1", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.1.tgz", + "integrity": "sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.1.tgz", + "integrity": "sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.53.1.tgz", + "integrity": "sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1", + "@typescript-eslint/utils": "8.53.1", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.53.1.tgz", + "integrity": "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.1.tgz", + "integrity": "sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.53.1", + "@typescript-eslint/tsconfig-utils": "8.53.1", + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.53.1.tgz", + "integrity": "sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.53.1", + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.1.tgz", + "integrity": "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.1", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@vitest/expect": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.3.tgz", + "integrity": "sha512-CW8Q9KMtXDGHj0vCsqui0M5KqRsu0zm0GNDW7Gd3U7nZ2RFpPKSCpeCXoT+/+5zr1TNlsoQRDEz+LzZUyq6gnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.3", + "@vitest/utils": "4.1.3", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.3.tgz", + "integrity": "sha512-XN3TrycitDQSzGRnec/YWgoofkYRhouyVQj4YNsJ5r/STCUFqMrP4+oxEv3e7ZbLi4og5kIHrZwekDJgw6hcjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.3", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.3.tgz", + "integrity": "sha512-hYqqwuMbpkkBodpRh4k4cQSOELxXky1NfMmQvOfKvV8zQHz8x8Dla+2wzElkMkBvSAJX5TRGHJAQvK0TcOafwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.3.tgz", + "integrity": "sha512-VwgOz5MmT0KhlUj40h02LWDpUBVpflZ/b7xZFA25F29AJzIrE+SMuwzFf0b7t4EXdwRNX61C3B6auIXQTR3ttA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.3", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.3.tgz", + "integrity": "sha512-9l+k/J9KG5wPJDX9BcFFzhhwNjwkRb8RsnYhaT1vPY7OufxmQFc9sZzScRCPTiETzl37mrIWVY9zxzmdVeJwDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.3", + "@vitest/utils": "4.1.3", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.3.tgz", + "integrity": "sha512-ujj5Uwxagg4XUIfAUyRQxAg631BP6e9joRiN99mr48Bg9fRs+5mdUElhOoZ6rP5mBr8Bs3lmrREnkrQWkrsTCw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.3.tgz", + "integrity": "sha512-Pc/Oexse/khOWsGB+w3q4yzA4te7W4gpZZAvk+fr8qXfTURZUMj5i7kuxsNK5mP/dEB6ao3jfr0rs17fHhbHdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.3", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@volar/kit": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/kit/-/kit-2.4.28.tgz", + "integrity": "sha512-cKX4vK9dtZvDRaAzeoUdaAJEew6IdxHNCRrdp5Kvcl6zZOqb6jTOfk3kXkIkG3T7oTFXguEMt5+9ptyqYR84Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-service": "2.4.28", + "@volar/typescript": "2.4.28", + "typesafe-path": "^0.2.2", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.28" + } + }, + "node_modules/@volar/language-server": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-server/-/language-server-2.4.28.tgz", + "integrity": "sha512-NqcLnE5gERKuS4PUFwlhMxf6vqYo7hXtbMFbViXcbVkbZ905AIVWhnSo0ZNBC2V127H1/2zP7RvVOVnyITFfBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "@volar/language-service": "2.4.28", + "@volar/typescript": "2.4.28", + "path-browserify": "^1.0.1", + "request-light": "^0.7.0", + "vscode-languageserver": "^9.0.1", + "vscode-languageserver-protocol": "^3.17.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@volar/language-service": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-service/-/language-service-2.4.28.tgz", + "integrity": "sha512-Rh/wYCZJrI5vCwMk9xyw/Z+MsWxlJY1rmMZPsxUoJKfzIRjS/NF1NmnuEcrMbEVGja00aVpCsInJfixQTMdvLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "vscode-languageserver-protocol": "^3.17.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.28.tgz", + "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vscode/emmet-helper": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.11.0.tgz", + "integrity": "sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "emmet": "^2.4.3", + "jsonc-parser": "^2.3.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.15.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vscode/l10n": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz", + "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/astro": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.18.1.tgz", + "integrity": "sha512-m4VWilWZ+Xt6NPoYzC4CgGZim/zQUO7WFL0RHCH0AiEavF1153iC3+me2atDvXpf/yX4PyGUeD8wZLq1cirT3g==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.13.0", + "@astrojs/internal-helpers": "0.7.6", + "@astrojs/markdown-remark": "6.3.11", + "@astrojs/telemetry": "3.3.0", + "@capsizecss/unpack": "^4.0.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.3.0", + "acorn": "^8.15.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "boxen": "8.0.1", + "ci-info": "^4.3.1", + "clsx": "^2.1.1", + "common-ancestor-path": "^1.0.1", + "cookie": "^1.1.1", + "cssesc": "^3.0.0", + "debug": "^4.4.3", + "deterministic-object-hash": "^2.0.2", + "devalue": "^5.6.2", + "diff": "^8.0.3", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "es-module-lexer": "^1.7.0", + "esbuild": "^0.27.3", + "estree-walker": "^3.0.3", + "flattie": "^1.1.1", + "fontace": "~0.4.0", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "magic-string": "^0.30.21", + "magicast": "^0.5.1", + "mrmime": "^2.0.1", + "neotraverse": "^0.6.18", + "p-limit": "^6.2.0", + "p-queue": "^8.1.1", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.3", + "prompts": "^2.4.2", + "rehype": "^13.0.2", + "semver": "^7.7.3", + "shiki": "^3.21.0", + "smol-toml": "^1.6.0", + "svgo": "^4.0.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tsconfck": "^3.1.6", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.3", + "unist-util-visit": "^5.0.0", + "unstorage": "^1.17.4", + "vfile": "^6.0.3", + "vite": "^6.4.1", + "vitefu": "^1.1.1", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^21.1.1", + "yocto-spinner": "^0.2.3", + "zod": "^3.25.76", + "zod-to-json-schema": "^3.25.1", + "zod-to-ts": "^1.2.0" + }, + "bin": { + "astro": "astro.js" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.34.0" + } + }, + "node_modules/astro-eslint-parser": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/astro-eslint-parser/-/astro-eslint-parser-1.2.2.tgz", + "integrity": "sha512-JepyLROIad6f44uyqMF6HKE2QbunNzp3mYKRcPoDGt0QkxXmH222FAFC64WTyQu2Kg8NNEXHTN/sWuUId9sSxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.0.0", + "@typescript-eslint/scope-manager": "^7.0.0 || ^8.0.0", + "@typescript-eslint/types": "^7.0.0 || ^8.0.0", + "astrojs-compiler-sync": "^1.0.0", + "debug": "^4.3.4", + "entities": "^6.0.0", + "eslint-scope": "^8.0.1", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.0.0", + "fast-glob": "^3.3.3", + "is-glob": "^4.0.3", + "semver": "^7.3.8" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/astro-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/astro/node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, + "node_modules/astrojs-compiler-sync": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/astrojs-compiler-sync/-/astrojs-compiler-sync-1.1.1.tgz", + "integrity": "sha512-0mKvB9sDQRIZPsEJadw6OaFbGJ92cJPPR++ICca9XEyiUAZqgVuk25jNmzHPT0KF80rI94trSZrUR5iHFXGGOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "synckit": "^0.11.0" + }, + "engines": { + "node": "^18.18.0 || >=20.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "@astrojs/compiler": ">=0.27.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "license": "ISC" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie-es": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.3.tgz", + "integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==", + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/defu": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/deterministic-object-hash": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", + "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", + "license": "MIT", + "dependencies": { + "base-64": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/devalue": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.7.1.tgz", + "integrity": "sha512-MUbZ586EgQqdRnC4yDrlod3BEdyvE4TapGYHMW2CiaW+KkkFmWEFqBUaLltEZCGi0iFXCEjRF0OjF0DV2QHjOA==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/emmet": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.11.tgz", + "integrity": "sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==", + "dev": true, + "license": "MIT", + "workspaces": [ + "./packages/scanner", + "./packages/abbreviation", + "./packages/css-abbreviation", + "./" + ], + "dependencies": { + "@emmetio/abbreviation": "^2.3.3", + "@emmetio/css-abbreviation": "^2.1.8" + } + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-compat-utils": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.5.tgz", + "integrity": "sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-astro": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-astro/-/eslint-plugin-astro-1.5.0.tgz", + "integrity": "sha512-IWy4kY3DKTJxd7g652zIWpBGFuxw7NIIt16kyqc8BlhnIKvI8yGJj+Maua0DiNYED3F/D8AmzoTTTA6A95WX9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@jridgewell/sourcemap-codec": "^1.4.14", + "@typescript-eslint/types": "^7.7.1 || ^8", + "astro-eslint-parser": "^1.0.2", + "eslint-compat-utils": "^0.6.0", + "globals": "^16.0.0", + "postcss": "^8.4.14", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=8.57.0" + } + }, + "node_modules/eslint-plugin-astro/node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fontace": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.0.tgz", + "integrity": "sha512-moThBCItUe2bjZip5PF/iZClpKHGLwMvR79Kp8XpGRBrvoRSnySN4VcILdv3/MJzbhvUA5WeiUXF5o538m5fvg==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.0" + } + }, + "node_modules/fontkitten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.2.tgz", + "integrity": "sha512-piJxbLnkD9Xcyi7dWJRnqszEURixe7CrF/efBfbffe2DPyabmuIuqraruY8cXTs19QoM8VJzx47BDRVNXETM7Q==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, + "node_modules/glob": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.1.0.tgz", + "integrity": "sha512-8HoIcWI5fCvG5NADj4bDav+er9B9JMj2vyL2pI8D0eismKyUvPLTSs+Ln3wqhwcp306i73iyVnEKx3F6T47TGw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-16.1.0.tgz", + "integrity": "sha512-+A4Hq7m7Ze592k9gZRy4gJ27DrXRNnC1vPjxTt1qQxEY8RxagBkBxivkCwg7FxSTG0iLLEMaUx13oOr0R2/qcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.5", + "is-path-inside": "^4.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/h3": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz", + "integrity": "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.3", + "crossws": "^0.3.5", + "defu": "^6.1.6", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonc-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", + "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==", + "dev": true, + "license": "MIT" + }, + "node_modules/katex": { + "version": "0.16.28", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.28.tgz", + "integrity": "sha512-YHzO7721WbmAL6Ov1uzN/l5mY5WWWhJBSW+jq4tkfZfsxmo1hu6frS0EOswvjBUnWE6NtjEs48SFn5CQESRLZg==", + "dev": true, + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/linkinator": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/linkinator/-/linkinator-7.5.3.tgz", + "integrity": "sha512-EiJvQkU+sVvmFMwt/4geFlZUe33E89ViZFRLfms/c3FomDEZHnR28ZMR5mWLfZ6DO1tUUtpkpG8fYfP2nbu/Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.0.0", + "escape-html": "^1.0.3", + "glob": "^13.0.0", + "htmlparser2": "^10.0.0", + "marked": "^17.0.0", + "marked-gfm-heading-id": "^4.1.3", + "meow": "^14.0.0", + "mime": "^4.0.0", + "server-destroy": "^1.0.1", + "srcset": "^5.0.0", + "undici": "^7.16.0" + }, + "bin": { + "linkinator": "build/src/cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.1.tgz", + "integrity": "sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "source-map-js": "^1.2.1" + } + }, + "node_modules/markdown-it": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/markdownlint": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.40.0.tgz", + "integrity": "sha512-UKybllYNheWac61Ia7T6fzuQNDZimFIpCg2w6hHjgV1Qu0w1TV0LlSgryUGzM0bkKQCBhy2FDhEELB73Kb0kAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark": "4.0.2", + "micromark-core-commonmark": "2.0.3", + "micromark-extension-directive": "4.0.0", + "micromark-extension-gfm-autolink-literal": "2.1.0", + "micromark-extension-gfm-footnote": "2.1.0", + "micromark-extension-gfm-table": "2.1.1", + "micromark-extension-math": "3.1.0", + "micromark-util-types": "2.0.2", + "string-width": "8.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, + "node_modules/markdownlint-cli2": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.21.0.tgz", + "integrity": "sha512-DzzmbqfMW3EzHsunP66x556oZDzjcdjjlL2bHG4PubwnL58ZPAfz07px4GqteZkoCGnBYi779Y2mg7+vgNCwbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "globby": "16.1.0", + "js-yaml": "4.1.1", + "jsonc-parser": "3.3.1", + "markdown-it": "14.1.1", + "markdownlint": "0.40.0", + "markdownlint-cli2-formatter-default": "0.0.6", + "micromatch": "4.0.8" + }, + "bin": { + "markdownlint-cli2": "markdownlint-cli2-bin.mjs" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, + "node_modules/markdownlint-cli2-formatter-default": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/markdownlint-cli2-formatter-default/-/markdownlint-cli2-formatter-default-0.0.6.tgz", + "integrity": "sha512-VVDGKsq9sgzu378swJ0fcHfSicUnMxnL8gnLm/Q4J/xsNJ4e5bA6lvAz7PCzIl0/No0lHyaWdqVD2jotxOSFMQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + }, + "peerDependencies": { + "markdownlint-cli2": ">=0.0.4" + } + }, + "node_modules/markdownlint-cli2/node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/markdownlint/node_modules/string-width": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", + "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/marked": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/marked/-/marked-17.0.1.tgz", + "integrity": "sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/marked-gfm-heading-id": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/marked-gfm-heading-id/-/marked-gfm-heading-id-4.1.3.tgz", + "integrity": "sha512-aR0i63LmFbuxU/gAgrgz1Ir+8HK6zAIFXMlckeKHpV+qKbYaOP95L4Ux5Gi+sKmCZU5qnN2rdKpvpb7PnUBIWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "github-slugger": "^2.0.0" + }, + "peerDependencies": { + "marked": ">=13 <18" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "license": "CC0-1.0" + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/meow": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-14.0.0.tgz", + "integrity": "sha512-JhC3R1f6dbspVtmF3vKjAWz1EVIvwFrGGPLSdU6rK79xBwHWTuHoLnRX/t1/zHS1Ch1Y2UtIrih7DAHuH9JFJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-4.0.0.tgz", + "integrity": "sha512-/C2nqVmXXmiseSSuCdItCMho7ybwwop6RrrRPk0KbOHW21JKoCldC+8rFOaundDoRBUWBnJJcxeA/Kvi34WQXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-math": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", + "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", + "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa" + ], + "license": "MIT", + "bin": { + "mime": "bin/cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/oniguruma-parser": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", + "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.5.tgz", + "integrity": "sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.1", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", + "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "license": "MIT" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-astro": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-astro/-/prettier-plugin-astro-0.14.1.tgz", + "integrity": "sha512-RiBETaaP9veVstE4vUwSIcdATj6dKmXljouXc/DDNwBSPTp8FRkLGDSGFClKsAFeeg+13SB0Z1JZvbD76bigJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.9.1", + "prettier": "^3.0.0", + "sass-formatter": "^0.7.6" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-smartypants": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "license": "MIT", + "dependencies": { + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/request-light": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.7.0.tgz", + "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/s.color": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/s.color/-/s.color-0.0.15.tgz", + "integrity": "sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass-formatter": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/sass-formatter/-/sass-formatter-0.7.9.tgz", + "integrity": "sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "suf-log": "^2.5.3" + } + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.23.0.tgz", + "integrity": "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.23.0", + "@shikijs/engine-javascript": "3.23.0", + "@shikijs/engine-oniguruma": "3.23.0", + "@shikijs/langs": "3.23.0", + "@shikijs/themes": "3.23.0", + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smol-toml": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.1.tgz", + "integrity": "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/srcset": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-5.0.3.tgz", + "integrity": "sha512-AZswtOXIsu0LeHdo6YY7d0r2pCH2Rl1D8ae1utvXUX4GxG3RggsVUAOFX1r8RI4YHFMYb4g89+UBPBv3mNUU2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.0.0.tgz", + "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/suf-log": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/suf-log/-/suf-log-2.5.3.tgz", + "integrity": "sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==", + "dev": true, + "license": "MIT", + "dependencies": { + "s.color": "0.0.15" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svgo": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz", + "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.5.0" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/synckit": { + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-api-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tsconfck": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typesafe-path": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/typesafe-path/-/typesafe-path-0.2.2.tgz", + "integrity": "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-auto-import-cache": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.6.tgz", + "integrity": "sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.8" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/undici": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.7.tgz", + "integrity": "sha512-H/nlJ/h0ggGC+uRL3ovD+G0i4bqhvsDOpbDv7At5eFLlj2b41L8QliGbnl2H7SnDiYhENphh1tQFJZf+MyfLsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/unicorn-magic": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", + "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.3.tgz", + "integrity": "sha512-b0GtQzKCyuSHGsfj5vyN8st7muZ6VCI4XD4vFlr7Uy1rlWVYxC3npnfk8MyreHxJYrz1ooLDqDzFe9XqQTlAhA==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.1.0", + "ofetch": "^1.5.1", + "ohash": "^2.0.11" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unstorage": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.4.tgz", + "integrity": "sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.5", + "lru-cache": "^11.2.0", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.2.tgz", + "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.3.tgz", + "integrity": "sha512-DBc4Tx0MPNsqb9isoyOq00lHftVx/KIU44QOm2q59npZyLUkENn8TMFsuzuO+4U2FUa9rgbbPt3udrP25GcjXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.3", + "@vitest/mocker": "4.1.3", + "@vitest/pretty-format": "4.1.3", + "@vitest/runner": "4.1.3", + "@vitest/snapshot": "4.1.3", + "@vitest/spy": "4.1.3", + "@vitest/utils": "4.1.3", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.3", + "@vitest/browser-preview": "4.1.3", + "@vitest/browser-webdriverio": "4.1.3", + "@vitest/coverage-istanbul": "4.1.3", + "@vitest/coverage-v8": "4.1.3", + "@vitest/ui": "4.1.3", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, + "node_modules/vitest/node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "dev": true, + "license": "MIT" + }, + "node_modules/volar-service-css": { + "version": "0.0.70", + "resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.70.tgz", + "integrity": "sha512-K1qyOvBpE3rzdAv3e4/6Rv5yizrYPy5R/ne3IWCAzLBuMO4qBMV3kSqWzj6KUVe6S0AnN6wxF7cRkiaKfYMYJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "vscode-css-languageservice": "^6.3.0", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-emmet": { + "version": "0.0.70", + "resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.70.tgz", + "integrity": "sha512-xi5bC4m/VyE3zy/n2CXspKeDZs3qA41tHLTw275/7dNWM/RqE2z3BnDICQybHIVp/6G1iOQj5c1qXMgQC08TNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emmetio/css-parser": "^0.4.1", + "@emmetio/html-matcher": "^1.3.0", + "@vscode/emmet-helper": "^2.9.3", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-html": { + "version": "0.0.70", + "resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.70.tgz", + "integrity": "sha512-eR6vCgMdmYAo4n+gcT7DSyBQbwB8S3HZZvSagTf0sxNaD4WppMCFfpqWnkrlGStPKMZvMiejRRVmqsX9dYcTvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "vscode-html-languageservice": "^5.3.0", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-prettier": { + "version": "0.0.70", + "resolved": "https://registry.npmjs.org/volar-service-prettier/-/volar-service-prettier-0.0.70.tgz", + "integrity": "sha512-Z6BCFSpGVCd8BPAsZ785Kce1BGlWd5ODqmqZGVuB14MJvrR4+CYz6cDy4F+igmE1gMifqfvMhdgT8Aud4M5ngg==", + "dev": true, + "license": "MIT", + "dependencies": { + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0", + "prettier": "^2.2 || ^3.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + }, + "prettier": { + "optional": true + } + } + }, + "node_modules/volar-service-typescript": { + "version": "0.0.70", + "resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.70.tgz", + "integrity": "sha512-l46Bx4cokkUedTd74ojO5H/zqHZJ8SUuyZ0IB8JN4jfRqUM3bQFBHoOwlZCyZmOeO0A3RQNkMnFclxO4c++gsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-browserify": "^1.0.1", + "semver": "^7.6.2", + "typescript-auto-import-cache": "^0.3.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-nls": "^5.2.0", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-typescript-twoslash-queries": { + "version": "0.0.70", + "resolved": "https://registry.npmjs.org/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.70.tgz", + "integrity": "sha512-IdD13Z9N2Bu8EM6CM0fDV1E69olEYGHDU25X51YXmq8Y0CmJ2LNj6gOiBJgpS5JGUqFzECVhMNBW7R0sPdRTMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-yaml": { + "version": "0.0.70", + "resolved": "https://registry.npmjs.org/volar-service-yaml/-/volar-service-yaml-0.0.70.tgz", + "integrity": "sha512-0c8bXDBeoATF9F6iPIlOuYTuZAC4c+yi0siQo920u7eiBJk8oQmUmg9cDUbR4+Gl++bvGP4plj3fErbJuPqdcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "vscode-uri": "^3.0.8", + "yaml-language-server": "~1.20.0" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/vscode-css-languageservice": { + "version": "6.3.10", + "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.10.tgz", + "integrity": "sha512-eq5N9Er3fC4vA9zd9EFhyBG90wtCCuXgRSpAndaOgXMh1Wgep5lBgRIeDgjZBW9pa+332yC9+49cZMW8jcL3MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vscode/l10n": "^0.0.18", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-languageserver-types": "3.17.5", + "vscode-uri": "^3.1.0" + } + }, + "node_modules/vscode-html-languageservice": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.6.2.tgz", + "integrity": "sha512-ulCrSnFnfQ16YzvwnYUgEbUEl/ZG7u2eV27YhvLObSHKkb8fw1Z9cgsnUwjTEeDIdJDoTDTDpxuhQwoenoLNMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vscode/l10n": "^0.0.18", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-languageserver-types": "^3.17.5", + "vscode-uri": "^3.1.0" + } + }, + "node_modules/vscode-json-languageservice": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.8.tgz", + "integrity": "sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.2" + }, + "engines": { + "npm": ">=7.0.0" + } + }, + "node_modules/vscode-json-languageservice/node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "vscode-languageserver-protocol": "3.17.5" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "dev": true, + "license": "MIT", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-nls": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", + "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/widest-line": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "license": "MIT", + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", + "devOptional": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yaml-language-server": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/yaml-language-server/-/yaml-language-server-1.20.0.tgz", + "integrity": "sha512-qhjK/bzSRZ6HtTvgeFvjNPJGWdZ0+x5NREV/9XZWFjIGezew2b4r5JPy66IfOhd5OA7KeFwk1JfmEbnTvev0cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vscode/l10n": "^0.0.18", + "ajv": "^8.17.1", + "ajv-draft-04": "^1.0.0", + "prettier": "^3.5.0", + "request-light": "^0.5.7", + "vscode-json-languageservice": "4.1.8", + "vscode-languageserver": "^9.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.16.0", + "vscode-uri": "^3.0.2", + "yaml": "2.7.1" + }, + "bin": { + "yaml-language-server": "bin/yaml-language-server" + } + }, + "node_modules/yaml-language-server/node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/yaml-language-server/node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/yaml-language-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/yaml-language-server/node_modules/request-light": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.8.tgz", + "integrity": "sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==", + "dev": true, + "license": "MIT" + }, + "node_modules/yaml-language-server/node_modules/yaml": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", + "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yocto-spinner": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.3.tgz", + "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==", + "license": "MIT", + "dependencies": { + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18.19" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + }, + "node_modules/zod-to-ts": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz", + "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==", + "peerDependencies": { + "typescript": "^4.9.4 || ^5.0.2", + "zod": "^3" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..e6661461 --- /dev/null +++ b/package.json @@ -0,0 +1,42 @@ +{ + "name": "openastronomy-site", + "private": true, + "type": "module", + "scripts": { + "test": "vitest run", + "test:watch": "vitest", + "dev": "astro dev", + "build": "astro build", + "preview": "astro preview", + "lint": "eslint \"src/**/*.{astro,js,ts}\" \"scripts/**/*.{js,mjs}\"", + "lint:fix": "eslint \"src/**/*.{astro,js,ts}\" \"scripts/**/*.{js,mjs}\" --fix", + "lint:md": "markdownlint-cli2", + "lint:md:fix": "markdownlint-cli2 --fix", + "format": "prettier . --write", + "format:check": "prettier . --check", + "astro:check": "astro check", + "check": "npm run lint && npm run astro:check", + "linkcheck:internal": "node scripts/linkcheck.mjs internal", + "linkcheck:external": "node scripts/linkcheck.mjs external" + }, + "dependencies": { + "astro": "^5.16.15" + }, + "devDependencies": { + "@astrojs/check": "^0.9.2", + "@eslint/js": "^9.39.2", + "@typescript-eslint/eslint-plugin": "^8.53.1", + "@typescript-eslint/parser": "^8.53.1", + "astro-eslint-parser": "^1.2.2", + "eslint": "^9.39.2", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-astro": "^1.5.0", + "globals": "^17.1.0", + "linkinator": "^7.5.3", + "markdownlint-cli2": "^0.21.0", + "prettier": "^3.8.1", + "prettier-plugin-astro": "^0.14.1", + "typescript": "^5.9.3", + "vitest": "^4.1.3" + } +} diff --git a/CNAME b/public/CNAME similarity index 100% rename from CNAME rename to public/CNAME diff --git a/public/css/astro-overrides.css b/public/css/astro-overrides.css new file mode 100644 index 00000000..053be8ef --- /dev/null +++ b/public/css/astro-overrides.css @@ -0,0 +1,445 @@ +:root { + --site-content-max-width: 1012px; +} + +body { + font-family: "Open Sans", Helvetica, Arial, sans-serif; + font-size: 1.05rem; + color: rgb(3 3 3); + padding-bottom: 0; + background-size: 100%; + background-repeat: no-repeat; +} + +/* Shared inline icon styles */ +.icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 16px; + height: 16px; + margin-right: 4px; + vertical-align: middle; +} + +.icon svg { + width: 100%; + height: 100%; +} + +.icon-envelope::before { + content: "✉"; + font-size: 0.9rem; + line-height: 1; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + color: rgb(3 3 3); + font-family: "Montserrat", "Helvetica", "Arial"; +} + +h1, +h2 { + margin-top: 40px; + margin-bottom: 10px; +} + +h1 a, +h2 a, +h3 a, +h4 a, +h5 a, +h6 a { + color: inherit; +} + +a { + color: #3e51cf; + transition: color 0.2s ease; +} + +a:hover { + color: #965412; +} + +h5 a:link, +h5 a:visited, +h4 a:link, +h4 a:visited, +h3 a:link, +h3 a:visited { + color: #2b3990; +} + +h5 a:hover, +h4 a:hover, +h3 a:hover { + color: #c26d17; + text-decoration: none; +} + +blockquote { + margin: 1em; + padding: 1em 1em 0.5em; + width: 90%; +} + +blockquote.testimonial cite { + font-style: italic; +} + +header.site-header .wrapper, +.page-content .wrapper, +footer.site-footer .wrapper, +.container { + width: min(var(--site-content-max-width), 100%); + max-width: var(--site-content-max-width); + margin: 0 auto; +} + +header.site-header { + background-color: #292929; +} + +header.site-header .wrapper { + display: flex; + align-items: center; + justify-content: center; + gap: 32px; + padding: 0 32px; + box-sizing: border-box; +} + +header.site-header .site-title { + display: block; +} + +header.site-header .logo { + margin-top: 10px; + margin-bottom: 10px; + width: 125px; + height: auto; + display: block; +} + +header.site-header .site-nav { + display: flex; + align-items: center; + justify-content: center; + gap: 16px; + position: relative; +} + +header.site-header .site-nav .trigger { + display: flex; + align-items: center; + justify-content: center; + gap: 16px; +} + +header.site-header .site-title, +header.site-header .site-nav .trigger a { + color: #ffffff; + background-color: #292929; +} + +header.site-header .site-nav .trigger a { + margin: 0; + font-size: 1.05rem; + line-height: 1.2; +} + +header.site-header .site-title:hover, +header.site-header .site-nav .trigger a:hover { + text-decoration: none; + color: #e15f5f; +} + +header.site-header .menu-icon { + display: none; + padding: 0; + border: 0; + background: transparent; + cursor: pointer; +} + +.page-content .wrapper { + padding: 0 32px; + box-sizing: border-box; +} + +.fixed-wrap > .page-content { + padding-bottom: 5px; +} + +.page-content img.large-logo { + width: min(52%, 480px); + max-width: 100%; + height: auto; + display: block; + margin: 20px auto 30px; +} + +.member-logo { + width: 120px; + height: auto; + display: block; +} + +footer.site-footer { + background-color: #292929; + margin-top: 10px; + width: 100%; + padding-top: 10px; + padding-bottom: 10px; + text-align: center; +} + +footer.site-footer .wrapper { + color: #ffffff; +} + +footer.site-footer .wrapper a { + color: #ffffff; + text-decoration: none; + padding-right: 8px; + display: inline-block; +} + +footer.site-footer .wrapper a:hover { + text-decoration: none; + transition: color 0.5s ease; + color: #808080; +} + +footer.site-footer .wrapper a img, +footer.site-footer .wrapper .icon-image svg { + width: 16px; + height: 16px; +} + +footer.site-footer .wrapper .tagline { + color: #ffffff; +} + +.gsoc-tabs { + display: flex; + justify-content: center; + gap: 16px; + margin: 20px 0 30px; +} + +.gsoc-section-link { + color: inherit; + text-decoration: none; +} + +.gsoc-section-link:hover, +.gsoc-section-link:focus { + text-decoration: underline; +} + +.gsoc-project-card { + background: #ffffff; + border-radius: 14px; + padding: 18px 20px; + box-shadow: 0 8px 22px rgba(0, 0, 0, 0.12); + transition: + transform 180ms ease, + box-shadow 180ms ease; + border: 0; + width: 100%; + text-align: left; + cursor: pointer; +} + +.gsoc-project-body { + margin-top: 12px; +} + +.gsoc-projects-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: 24px; + margin-bottom: 32px; +} + +.gsoc-project-card:hover { + transform: translateY(-4px); + box-shadow: 0 16px 34px rgba(0, 0, 0, 0.18); +} + +.gsoc-project-card h3 { + margin-top: 0; +} + +.gsoc-project-desc { + margin: 0 0 8px; + font-size: 0.9em; + line-height: 1.4; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; +} + +.gsoc-card-row { + font-size: 0.85em; + line-height: 1.4; + margin-top: 6px; + display: flex; + gap: 6px; + flex-wrap: wrap; +} + +.gsoc-card-label { + font-weight: 600; +} + +.gsoc-project-detail[hidden] { + display: none; +} + +.gsoc-project-detail-link { + margin: 0 0 8px; + font-size: 0.85em; + line-height: 1.3; + text-align: left; +} + +.gsoc-project-detail-link a { + color: #2b3990; + word-break: break-all; +} + +.gsoc-modal { + position: fixed; + inset: 0; + display: flex; + align-items: center; + justify-content: center; + padding: 24px; + z-index: 999; +} + +.gsoc-modal[hidden] { + display: none; +} + +.gsoc-modal-backdrop { + position: absolute; + inset: 0; + background: rgba(0, 0, 0, 0.55); +} + +.gsoc-modal-panel { + position: relative; + background: #ffffff; + border-radius: 16px; + padding: 32px 24px 24px; + width: min(900px, 100%); + max-height: 80vh; + overflow: auto; + box-shadow: 0 18px 40px rgba(0, 0, 0, 0.25); + z-index: 1; +} + +.gsoc-modal-close { + position: absolute; + top: 12px; + right: 12px; + border: 0; + border-radius: 999px; + background: #292929; + color: #ffffff; + padding: 6px 12px; + cursor: pointer; +} + +.gsoc-people-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); + gap: 16px; + margin-top: 16px; +} + +@media (max-width: 900px) { + header.site-header .wrapper { + justify-content: space-between; + width: 100%; + padding: 0 22px; + } + + header.site-header .site-nav { + position: relative; + gap: 8px; + margin-left: auto; + } + + header.site-header .site-title { + margin-right: auto; + } + + header.site-header .site-nav .trigger { + display: none; + flex-direction: column; + align-items: stretch; + text-align: center; + justify-content: flex-start; + gap: 8px; + position: absolute; + right: 0; + top: calc(100% + 6px); + padding: 10px 12px; + background: #292929; + border-radius: 8px; + z-index: 1; + } + + header.site-header .site-nav .trigger a { + display: block; + } + + header.site-header .menu-icon { + display: inline-flex !important; + align-items: center; + justify-content: center; + width: 46px; + height: 36px; + margin: 0; + padding: 0; + z-index: 2; + } + + header.site-header .menu-icon > svg { + width: 28px; + height: 25px; + } + + header.site-header .site-nav.is-open .trigger { + display: flex; + } +} + +@media (max-width: 700px) { + .page-content .wrapper { + padding: 0 22px; + } +} + +@media (max-width: 670px) { + footer.site-footer .wrapper .tagline { + display: none; + } +} + +@media (max-width: 600px) { + .page-content img.large-logo { + display: none; + } +} diff --git a/img/IMG_20160111_094506.jpg b/public/img/IMG_20160111_094506.jpg similarity index 100% rename from img/IMG_20160111_094506.jpg rename to public/img/IMG_20160111_094506.jpg diff --git a/public/og/openastronomy-og.jpg b/public/og/openastronomy-og.jpg new file mode 100644 index 00000000..01ced1ee Binary files /dev/null and b/public/og/openastronomy-og.jpg differ diff --git a/pyproject.toml b/pyproject.toml index 365dd467..2d10a1db 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,4 +1,4 @@ [ tool.gilesbot ] - [ tool.gilesbot.circleci_artifacts.website ] + [ tool.gilesbot.circleci_artifacts.preview_website ] url = "html/index.html" message = "Preview the website build." diff --git a/scripts/circleci-preview.mjs b/scripts/circleci-preview.mjs new file mode 100644 index 00000000..757b8b35 --- /dev/null +++ b/scripts/circleci-preview.mjs @@ -0,0 +1,59 @@ +/** + * Post-processes the Astro build output for display in the CircleCI artifact viewer. + * + * Astro emits processed assets (images, JS bundles) at absolute paths like `/_astro/...`. + * In the artifact viewer these resolve to the domain root rather than the artifact + * directory, so every reference must be prefixed with the full artifact base path. + * + * Navigation links and CSS references use relative paths (generated by fromSiteRoot), + * so they already resolve correctly inside the artifact tree and need no changes. + * + * Usage: + * node scripts/circleci-preview.mjs + * + * Example (CircleCI): + * node scripts/circleci-preview.mjs \ + * "/output/job/${CIRCLE_WORKFLOW_JOB_ID}/artifacts/0/html" + */ + +import { readFileSync, writeFileSync, readdirSync } from "fs"; +import { join } from "path"; + +const artifactBase = process.argv[2]; +if (!artifactBase) { + console.error( + "Usage: node scripts/circleci-preview.mjs ", + ); + process.exit(1); +} + +/** @param {string} dir */ +function walk(dir) { + for (const entry of readdirSync(dir, { withFileTypes: true })) { + const full = join(dir, entry.name); + if (entry.isDirectory()) { + walk(full); + } else if (entry.isFile() && full.endsWith(".html")) { + patch(full); + } + } +} + +/** + * Rewrites every `/_astro/` reference in an HTML file to use the artifact base. + * Handles double-quoted, single-quoted, and unquoted CSS url() contexts. + * @param {string} file + */ +function patch(file) { + let content = readFileSync(file, "utf8"); + + // `/_astro/` appears in src="", href="", srcset="", url(), and inline + diff --git a/src/components/Header.astro b/src/components/Header.astro new file mode 100644 index 00000000..9fc8c77b --- /dev/null +++ b/src/components/Header.astro @@ -0,0 +1,108 @@ +--- +/* + * Header - site-wide navigation bar. + * + * Merges page_links (internal, localised with localizeHref) and nav_links + * (external, used as-is) from site.json into a single nav list. + * + * Includes an inline diff --git a/src/components/MemberCard.astro b/src/components/MemberCard.astro new file mode 100644 index 00000000..f0b398e9 --- /dev/null +++ b/src/components/MemberCard.astro @@ -0,0 +1,128 @@ +--- +/* + * MemberCard - renders a card for a single OpenAstronomy member organisation. + * + * Displays the member's logo, name, a link to their website, and lists of + * repository and social links built by src/lib/members.ts. + * + * Props: member (MemberDetails object from members.json) and memberKey + * (the JSON key, used to resolve repository provider icons and links). + */ +import { Image } from "astro:assets"; +import type { ImageMetadata } from "astro"; +import icons from "../data/icons.json"; +import { buildRepositoryLinks, buildSocialLinks } from "../lib/members.ts"; + +type MemberDetails = { + name: string; + url: string; + logo: string; + description?: string; + repositories?: Record; + mailinglist?: Record; + chat?: Record; + microblogging?: Record; +}; + +const { memberKey, details } = Astro.props as { + memberKey: string; + details: MemberDetails; +}; + +const mailingLists = details.mailinglist + ? Object.entries(details.mailinglist) + : []; +const chats = details.chat ? Object.entries(details.chat) : []; +const repositoryLinks = buildRepositoryLinks(details.repositories, memberKey); +const socialLinks = buildSocialLinks(details.microblogging); + +const memberLogoModules = import.meta.glob<{ default: ImageMetadata }>( + "../assets/members/*.{png,jpg,jpeg,webp,avif}", + { eager: true }, +); +const memberLogos = Object.fromEntries( + Object.entries(memberLogoModules).map(([path, mod]) => { + const filename = path.split("/").pop() ?? ""; + return [filename, mod.default]; + }), +) as Record; +const logoAsset = memberLogos[details.logo]; +if (!logoAsset) { + throw new Error(`Missing member logo asset: ${details.logo}`); +} +--- + +
    + + + +
    + {details.name} + +
    + { + repositoryLinks.map((repository) => ( + + + + + + + {repository.label} + + )) + } +
    + { + mailingLists.length > 0 ? ( + <> + + {mailingLists.map(([label, url], index) => ( + <> + {label} + {index < mailingLists.length - 1 ? "," : ""} + + ))} +
    + + ) : null + } + { + chats.length > 0 ? ( + <> + + + + + + {chats.map(([label, url], index) => ( + <> + {label} + {index < chats.length - 1 ? "," : ""} + + ))} +
    + + ) : null + } + { + socialLinks.map((socialLink) => ( + + + + + + + {socialLink.label} + + )) + } +
    +
    +
    diff --git a/src/components/gsoc/Modal.astro b/src/components/gsoc/Modal.astro new file mode 100644 index 00000000..a6e81882 --- /dev/null +++ b/src/components/gsoc/Modal.astro @@ -0,0 +1,66 @@ +--- +/** + * Modal overlay for displaying a GSoC project's detail panel. + * + * The modal is initially `hidden`. When a ProjectCard button is clicked, the + * corresponding ProjectDetail element's inner HTML is copied into the modal + * content area and the modal is shown. Closing can be done via: + * - The "Close" button + * - Clicking the backdrop + * - Pressing Escape + */ +--- + + + + diff --git a/src/components/gsoc/PeopleSection.astro b/src/components/gsoc/PeopleSection.astro new file mode 100644 index 00000000..8c35b3b5 --- /dev/null +++ b/src/components/gsoc/PeopleSection.astro @@ -0,0 +1,45 @@ +--- +/** + * Renders a people grid section (mentors or admins) for a GSoC season page. + * Each person is shown with their GitHub avatar and a link to their profile. + */ + +type Props = { + id: string; + heading: string; + intro: string; + handles: string[]; +}; + +const { id, heading, intro, handles } = Astro.props; +--- + +
    +

    + + {heading} + +

    +

    {intro}

    +
    + { + handles.map((handle) => ( +
    + {`@${handle} + +
    + )) + } +
    +
    diff --git a/src/components/gsoc/ProjectCard.astro b/src/components/gsoc/ProjectCard.astro new file mode 100644 index 00000000..161f436c --- /dev/null +++ b/src/components/gsoc/ProjectCard.astro @@ -0,0 +1,42 @@ +--- +/** + * Summary card for a single GSoC project idea, shown in the season grid. + * Clicking the card opens the detail modal via the data-project-detail attribute. + */ +import type { GsocProject } from "../../lib/gsoc.ts"; + +const { project } = Astro.props as { project: GsocProject }; +const detailId = `detail-${project.anchor}`; +--- + + diff --git a/src/components/gsoc/ProjectDetail.astro b/src/components/gsoc/ProjectDetail.astro new file mode 100644 index 00000000..00db74c3 --- /dev/null +++ b/src/components/gsoc/ProjectDetail.astro @@ -0,0 +1,97 @@ +--- +/** + * Expanded detail panel for a GSoC project. + * + * This element is rendered `hidden` in the page and its content is copied into + * the modal overlay when the user clicks the corresponding ProjectCard. It must + * have an `id` that matches the `data-project-detail` attribute of the card. + */ +import type { GsocProject } from "../../lib/gsoc.ts"; + +const { project } = Astro.props as { project: GsocProject }; +const ProjectContent = project.Content; +--- + + diff --git a/src/content/config.ts b/src/content/config.ts new file mode 100644 index 00000000..2cc00450 --- /dev/null +++ b/src/content/config.ts @@ -0,0 +1,23 @@ +import { defineCollection, z } from "astro:content"; + +const posts = defineCollection({ + type: "content", + schema: z + .object({ + title: z.string(), + date: z.date(), + author: z.string().optional(), + meta: z.string().optional(), + }) + .passthrough(), +}); + +const pages = defineCollection({ + type: "content", + schema: z.object({}).passthrough(), +}); + +export const collections = { + posts, + pages, +}; diff --git a/src/content/pages/gsoc/2015/ideas.md b/src/content/pages/gsoc/2015/ideas.md new file mode 100644 index 00000000..6b17d432 --- /dev/null +++ b/src/content/pages/gsoc/2015/ideas.md @@ -0,0 +1,18 @@ +--- +title: "Ideas page for Google Summer of Code 2015" +show_main: false +--- + +# Ideas page for Google Summer of Code 2015 + +## Ideas page for GSoC 2015 + +Browse ideas for the following projects: + +- [Astropy core package](../ideas_astropy/) +- [Packages affiliated with Astropy](../ideas_astropy_affiliated/) +- [ChiantiPy](../ideas_chiantipy/) +- [SunPy](../ideas_sunpy/) +- [yt](../ideas_yt/) + +For each participating project, the ideas are organized from easiest to hardest. diff --git a/gsoc/gsoc2015/ideas_astropy.md b/src/content/pages/gsoc/2015/ideas_astropy.md similarity index 68% rename from gsoc/gsoc2015/ideas_astropy.md rename to src/content/pages/gsoc/2015/ideas_astropy.md index 1c10e206..1100b47b 100644 --- a/gsoc/gsoc2015/ideas_astropy.md +++ b/src/content/pages/gsoc/2015/ideas_astropy.md @@ -1,21 +1,22 @@ --- -layout: default -title: "Ideas for Astropy" +title: "Ideas for Astropy" show_main: false ideas_team: Astropy core package --- -### Implement Distribution Support for Quantity +# Ideas for Astropy -*Suggested Mentor(s):* [Erik Tollerud](http://github.com/eteq) +## Implement Distribution Support for Quantity -*Difficulty:* Beginner to Intermediate +_Suggested Mentor(s):_ [Erik Tollerud](http://github.com/eteq) -*Astronomy knowledge needed:* none, but statistics knowledge/background useful +_Difficulty:_ Beginner to Intermediate -*Programming skills:* Python +_Astronomy knowledge needed:_ none, but statistics knowledge/background useful -#### Description +_Programming skills:_ Python + +### Description The [Quantity](http://docs.astropy.org/en/stable/units/index.html) class is powerful but doesn’t have particularly useful support for uncertainties on @@ -29,22 +30,21 @@ distributions. If there is time, this could also involve expanding this system to support common analytically-representable distributions such as Gaussian and Poisson distributions. +## Implement image rasterization methods for models -### Implement image rasterization methods for models - -*Suggested Mentor(s):* [Christoph Deil](http://github.com/cdeil) +_Suggested Mentor(s):_ [Christoph Deil](http://github.com/cdeil) -*Difficulty:* Intermediate +_Difficulty:_ Intermediate -*Astronomy knowledge needed:* Basic +_Astronomy knowledge needed:_ Basic -*Programming skills:* Python, Cython +_Programming skills:_ Python, Cython -#### Description +### Description When fitting models to binned data, evaluating the model at the bin centers leads to incorrect results if the model changes significantly within a bin. E.g. think of an image where the point spread function (PSF) only has a width slightly above the pixel size and you want to distinguish small Galaxies from stars. -Currently Astropy models have an ``evaluate`` method that can be used to +Currently Astropy models have an `evaluate` method that can be used to evaluate them on a grid of pixel centers, there’s also an oversampling function to get a better representation of the expected flux in pixels. It would be useful to add methods that allow fast and precise rasterization of models, @@ -62,25 +62,25 @@ should be interested in model fitting and image rasterisation as well as profiling and extensive testing of a given method to make it “just work” for the end user. -### Add indexing capability to Table object +## Add indexing capability to Table object -*Suggested Mentor(s):* Tom Aldcroft (Astropy), Stuart Mumford (SunPy) +_Suggested Mentor(s):_ Tom Aldcroft (Astropy), Stuart Mumford (SunPy) -*Difficulty:* Intermediate +_Difficulty:_ Intermediate -*Astronomy knowledge needed:* none +_Astronomy knowledge needed:_ none -*Programming skills:* Python, Cython, familiarity with database algorithms +_Programming skills:_ Python, Cython, familiarity with database algorithms -#### Description +### Description The [Table](http://docs.astropy.org/en/stable/table/index.html) class is the -core astropy class for storing and manipulating tabular data. Currently it +core astropy class for storing and manipulating tabular data. Currently it supports a limited set of database-like capabilities including table joins and -grouping. A natural extension of this is to provide the ability to create and -maintain an index on one or more columns as well as a table primary key. With +grouping. A natural extension of this is to provide the ability to create and +maintain an index on one or more columns as well as a table primary key. With these indexed columns available then certain selection and query operations -could be highly optimized. The challenge is to maintain the integrity of the +could be highly optimized. The challenge is to maintain the integrity of the indexes as column or table properties change, using state of the art algorithms for high performance. @@ -101,17 +101,17 @@ To summarize: - Optimize existing table operations to use indexes where possible - Add new methods to select table rows based on column values -### Unify and improve file handling +## Unify and improve file handling -*Suggested Mentor(s):* [Michael Droettboom](http://github.com/mdboom) +_Suggested Mentor(s):_ [Michael Droettboom](http://github.com/mdboom) -*Difficulty:* Intermediate to Expert +_Difficulty:_ Intermediate to Expert -*Astronomy knowledge needed:* none +_Astronomy knowledge needed:_ none -*Programming skills:* Python, Unix features +_Programming skills:_ Python, Unix features -#### Description +### Description We have a number of packages that read and write data to files and file-like objects. While there was some initial effort to unify this code in @@ -126,40 +126,40 @@ fetching (see [astropy/#3446](https://github.com/astropy/astropy/issues/3446), and OS-level file locking to make multiprocessing applications that write to files more robust. -### Implement missing astropy.modeling functionality +## Implement missing astropy.modeling functionality -*Suggested Mentor(s):* [Christoph Deil](http://github.com/cdeil) +_Suggested Mentor(s):_ [Christoph Deil](http://github.com/cdeil) -*Difficulty:* Intermediate to expert +_Difficulty:_ Intermediate to expert -*Astronomy knowledge needed:* Basic +_Astronomy knowledge needed:_ Basic -*Programming skills:* Python +_Programming skills:_ Python -#### Description +### Description Implement some basic features are still missing in the astropy.modeling package: -* Fit parameter errors (symmetric and profile likelihood) -* Poisson fit statistic -* PSF-convolved models -* model parameter and fit result serialisation, e.g. to YAML or JSON or XML (e.g. some astronomers use [XML](http://fermi.gsfc.nasa.gov/ssc/data/analysis/scitools/source_models.html)) +- Fit parameter errors (symmetric and profile likelihood) +- Poisson fit statistic +- PSF-convolved models +- model parameter and fit result serialisation, e.g. to YAML or JSON or XML (e.g. some astronomers use [XML](http://fermi.gsfc.nasa.gov/ssc/data/analysis/scitools/source_models.html)) For the parameter error and Poisson fit statistic part some statistics background is needed, as well as interest in discussing and finding a good API for these things. An optional fun application at the end of this project (if model and fit result serialisation is implemented) could be to develop an interactive image fitting GUI (e.g. with IPython widgets in the web browser) for common 2D Astropy models, showing data, model and residual images and letting the user adjust model parameters and display fit statistics and results interactively. -### Implement framework for handling velocities and velocity transforms in astropy.coordinates +## Implement framework for handling velocities and velocity transforms in astropy.coordinates -*Suggested Mentor(s):* [Adrian Price-Whelan](http://github.com/adrn) & [Erik Tollerud](http://github.com/eteq) +_Suggested Mentor(s):_ [Adrian Price-Whelan](http://github.com/adrn) & [Erik Tollerud](http://github.com/eteq) -*Difficulty:* Intermediate to Expert +_Difficulty:_ Intermediate to Expert -*Astronomy knowledge needed:* understanding of coordinate transformations, some knowledge of astronomical coordinate systems would be useful +_Astronomy knowledge needed:_ understanding of coordinate transformations, some knowledge of astronomical coordinate systems would be useful -*Programming skills:* Python +_Programming skills:_ Python -#### Description +### Description The coordinates subpackage currently only supports transforming positional coordinates, but it would be useful to develop a consistent framework for also @@ -169,29 +169,28 @@ motion. This project could be: 1. working with us to develop a consistent API for handling velocities within coordinates, 2. developing a trial implementation of an API, -3. actually doing core development to implement the new features, or -4. some combination of all of the above. +3. actually doing core development to implement the new features, or +4. some combination of all of the above. -### Implement Public API for ERFA +## Implement Public API for ERFA -*Suggested Mentor(s):* [Erik Tollerud](http://github.com/eteq) +_Suggested Mentor(s):_ [Erik Tollerud](http://github.com/eteq) -*Difficulty:* Intermediate to Expert +_Difficulty:_ Intermediate to Expert -*Astronomy knowledge needed:* None required, but may be helpful for understanding ERFA functionality +_Astronomy knowledge needed:_ None required, but may be helpful for understanding ERFA functionality -*Programming skills:* Python, Cython, C +_Programming skills:_ Python, Cython, C -#### Description +### Description Some of the major functionality for Astropy uses the ERFA C library (adapted from the IAU SOFA library) as the back-end for -computational "heavy-lifting". Members of the community have expressed a desire to use this lower-level python wrapper -around ERFA for other purposes that may not be directly relevant for Astropy. So this project would involve making the -necessary changes to make the ERFA python API public. This includes: +computational "heavy-lifting". Members of the community have expressed a desire to use this lower-level python wrapper +around ERFA for other purposes that may not be directly relevant for Astropy. So this project would involve making the +necessary changes to make the ERFA python API public. This includes: -* Getting the documentation up to the astropy standard (currently it is mostly auto-generated verbatim from the C comments). -* Implementing a more complete test suite for the python side of the code. -* Possibly moving it to a separate package as part of the liberfa GitHub organization. This would also include making the necessary +- Getting the documentation up to the astropy standard (currently it is mostly auto-generated verbatim from the C comments). +- Implementing a more complete test suite for the python side of the code. +- Possibly moving it to a separate package as part of the liberfa GitHub organization. This would also include making the necessary changes to ensure everything continues to work in Astropy. -* Any other steps necessary to ensure the resulting package (or sub-package of Astropy) is stable and relatively easy to use. - +- Any other steps necessary to ensure the resulting package (or sub-package of Astropy) is stable and relatively easy to use. diff --git a/gsoc/gsoc2015/ideas_astropy_affiliated.md b/src/content/pages/gsoc/2015/ideas_astropy_affiliated.md similarity index 65% rename from gsoc/gsoc2015/ideas_astropy_affiliated.md rename to src/content/pages/gsoc/2015/ideas_astropy_affiliated.md index fbc2cd25..0dbb8e22 100644 --- a/gsoc/gsoc2015/ideas_astropy_affiliated.md +++ b/src/content/pages/gsoc/2015/ideas_astropy_affiliated.md @@ -1,67 +1,66 @@ --- -layout: default -title: "Ideas for Astropy-affiliated packages" +title: "Ideas for Astropy-affiliated packages" show_main: false ideas_team: Packages affiliated with Astropy --- -### Develop an affiliated package for observation planning / scheduling +# Ideas for Astropy-affiliated packages -*Suggested Mentor(s):* [Christoph Deil](http://github.com/cdeil) +## Develop an affiliated package for observation planning / scheduling -*Difficulty:* Beginner +_Suggested Mentor(s):_ [Christoph Deil](http://github.com/cdeil) -*Astronomy knowledge needed:* Intermediate +_Difficulty:_ Beginner -*Programming skills:* Python +_Astronomy knowledge needed:_ Intermediate -#### Description +_Programming skills:_ Python + +### Description Now that Astropy can transform from horizontal (altitude/azimuth) to sky coordinates it’s possible to develop tools for observation planning / scheduling (see -[here](http://docs.astropy.org/en/stable/coordinates/observing-example.html) +[the observing example](http://docs.astropy.org/en/stable/coordinates/observing-example.html) for an example). It would be nice to start developing an affiliated package that can be used by observers and observatories to plan and schedule observations. This project could go in a few different directions, including: -* creating typical tables and plots for observation planning -* optimising scheduling of observations for given target lists and telescope slew speed / exposure lengths for a given night or even month / year -* contribute sun / moon rise / set functionality to astropy coordinates -* a desktop or web GUI +- creating typical tables and plots for observation planning +- optimising scheduling of observations for given target lists and telescope slew speed / exposure lengths for a given night or even month / year +- contribute sun / moon rise / set functionality to astropy coordinates +- a desktop or web GUI The project could start with a look at the functionality of existing tools and then gather some input on the astropy mailing list what the community wants. The student should have an interest in coordinates, observations planning / scheduling and plotting / GUIs. +## Contribute gamma-ray data analysis methods to Gammapy -### Contribute gamma-ray data analysis methods to Gammapy - -*Suggested Mentor(s):* [Christoph Deil](http://github.com/cdeil), [Axel Donath](http://github.com/adonath) +_Suggested Mentor(s):_ [Christoph Deil](http://github.com/cdeil), [Axel Donath](http://github.com/adonath) -*Difficulty:* Beginner to intermediate +_Difficulty:_ Beginner to intermediate -*Astronomy knowledge needed:* Basic +_Astronomy knowledge needed:_ Basic -*Programming skills:* Python +_Programming skills:_ Python -#### Description +### Description [Gammapy](https://docs.gammapy.org/) is an Astropy-affiliated package to simulate and analyse data from gamma-ray telescopes such as Fermi, H.E.S.S. and CTA. A lot of basic functionality is still missing, specifically we think that contributing to one of the sub-packages gammapy.background (background modeling), gammapy.detect (source detection methods) or gammapy.spectrum (spectral analysis methods) would be a good GSoC project if you are interested in implementing specific established data analysis algorithms (e.g. adaptive-ring or reflected region or template background estimation, or spectrum forward-folding or unfolding methods) used in gamma-ray astronomy (but no prior gamma-ray data experience / knowledge needed). +## Astropy Acknowledgement/Citation Generator -### Astropy Acknowledgement/Citation Generator - -*Suggested Mentor(s):* [Erik Tollerud](http://github.com/eteq) +_Suggested Mentor(s):_ [Erik Tollerud](http://github.com/eteq) -*Difficulty:* Beginner to Intermediate +_Difficulty:_ Beginner to Intermediate -*Astronomy knowledge needed:* none, although some experience with astronomy citation practices might be useful +_Astronomy knowledge needed:_ none, although some experience with astronomy citation practices might be useful -*Programming skills:* Python and LaTeX/BibTeX +_Programming skills:_ Python and LaTeX/BibTeX -#### Description +### Description Some parts of Astropy and affiliated packages use algorithms or tools that have been published in the scientific literature (this includes Astropy itself). To @@ -72,31 +71,31 @@ have it print or write a file that tells them what papers to cite. Bonus points if this actually can show BibTeX or LaTeX bibliography entries that can be just dropped into papers with minimal effort on the part of the user. -### Adding further spectral standards to specutils +## Adding further spectral standards to specutils -*Suggested Mentor(s)*: Adam Ginsburg & Wolfgang Kerzendorf +_Suggested Mentor(s)_: Adam Ginsburg & Wolfgang Kerzendorf -*Difficulty*: Intermediate +_Difficulty_: Intermediate -*Programming skills*: Python +_Programming skills_: Python -#### Description +### Description -Specutils is a package within the astropy collection that deals with operations with spectra. Apart from imaging, spectra are the second main data product in astronomy. While imaging data is collected by hooking a giant DSLR at the end of telescope and sticking coloured glass between telescope and DSLR (a filter), spectra are obtained by breaking light up into its components and then observing the resulting distribution. These data are saved in a variety of formats. +Specutils is a package within the astropy collection that deals with operations with spectra. Apart from imaging, spectra are the second main data product in astronomy. While imaging data is collected by hooking a giant DSLR at the end of telescope and sticking coloured glass between telescope and DSLR (a filter), spectra are obtained by breaking light up into its components and then observing the resulting distribution. These data are saved in a variety of formats. -Currently, we are able to read and write a subset of standards that are out there. As a project, we suggest to implement the remaining unsupported standards. All of the code is in Python and a good understanding of classes is needed for this project. +Currently, we are able to read and write a subset of standards that are out there. As a project, we suggest to implement the remaining unsupported standards. All of the code is in Python and a good understanding of classes is needed for this project. -### Improve pyregion and pyds9 +## Improve pyregion and pyds9 -*Suggested Mentor(s):* [Christoph Deil](http://github.com/cdeil) +_Suggested Mentor(s):_ [Christoph Deil](http://github.com/cdeil) -*Difficulty:* Intermediate +_Difficulty:_ Intermediate -*Astronomy knowledge needed:* Basic +_Astronomy knowledge needed:_ Basic -*Programming skills:* Python +_Programming skills:_ Python -#### Description +### Description The pyregion package is very useful to work with ds9 and CIAO region files. It is now at @@ -115,29 +114,26 @@ interested in sky coordinates and regions, parsing, visualisation, writing tests and docs, and for the ds9 interfaces some Cython coding is probably needed. -### Revamp astropython.org web site +## Revamp astropython.org web site -*Suggested Mentor(s):* Tom Aldcroft +_Suggested Mentor(s):_ Tom Aldcroft -*Difficulty:* Intermediate +_Difficulty:_ Intermediate -*Astronomy knowledge needed:* Basic / none +_Astronomy knowledge needed:_ Basic / none -*Programming skills:* Python, web development (javascript etc) +_Programming skills:_ Python, web development (javascript etc) -#### Description +### Description The [http://www.astropython.org](http://www.astropython.org) site is one of the top two generic informational / resource sites about Python in astronomy. This site uses Google App Engine and is basically all custom code built around the bloggart engine. Currently it is getting a bit stale for a few reasons: -* There is no good mechanism for guest posting to expand the community of people contributing. -* It is painful to add content because of the antiquated entry interface which now seems to work only on firefox. -* The comment system is lacking (no feedback to comment authors etc). -* The website code itself is convoluted and difficult to maintain / improve - -The proposal is to start over with all modern tools to bring fresh energy and involvement into this project. All details of how to do this to be determined, but one requirement is to migrate all the current content. Part of this would be re-evaluating current resources as well as digging around to freshen up the resource list. - - +- There is no good mechanism for guest posting to expand the community of people contributing. +- It is painful to add content because of the antiquated entry interface which now seems to work only on firefox. +- The comment system is lacking (no feedback to comment authors etc). +- The website code itself is convoluted and difficult to maintain / improve +The proposal is to start over with all modern tools to bring fresh energy and involvement into this project. All details of how to do this to be determined, but one requirement is to migrate all the current content. Part of this would be re-evaluating current resources as well as digging around to freshen up the resource list. diff --git a/gsoc/gsoc2015/ideas_chiantipy.md b/src/content/pages/gsoc/2015/ideas_chiantipy.md similarity index 50% rename from gsoc/gsoc2015/ideas_chiantipy.md rename to src/content/pages/gsoc/2015/ideas_chiantipy.md index 364f90d4..2d348e3b 100644 --- a/gsoc/gsoc2015/ideas_chiantipy.md +++ b/src/content/pages/gsoc/2015/ideas_chiantipy.md @@ -1,44 +1,45 @@ --- -layout: default -title: "Ideas for ChiantiPy" +title: "Ideas for ChiantiPy" show_main: false ideas_team: ChiantiPy --- -### GUI Spectral Explorer +# Ideas for ChiantiPy -*Suggested Mentor(s):* [Ken Dere](http://sourceforge.net/u/kdere/profile/) +## GUI Spectral Explorer -*Difficulty:* Intermediate +_Suggested Mentor(s):_ [Ken Dere](http://sourceforge.net/u/kdere/profile/) -*Astronomy knowledge needed:* A basic understand of astrophysical spectroscopy +_Difficulty:_ Intermediate -*Programming skills:* Python +_Astronomy knowledge needed:_ A basic understand of astrophysical spectroscopy -#### Description +_Programming skills:_ Python + +### Description The goal of this project is to provide a graphical user interface to enable a user to explore observed spectra and compare it with -theoretical spectra. The basis for the theoretical spectra is the +theoretical spectra. The basis for the theoretical spectra is the CHIANTI atomic database for astrophysical spectroscopy that was -first released in 1997. Programmatic access to the database, which +first released in 1997. Programmatic access to the database, which is freely available, is provided by the ChiantiPy package -- a pure -python package. It is highly object oriented with each ion, such as -Fe XVII, being the basic object. Higher level objects are often +python package. It is highly object oriented with each ion, such as +Fe XVII, being the basic object. Higher level objects are often assembled from a collection of ions, such as when calculating a -spectrum. ChiantiPy uses the CHIANTI database to calculate line and +spectrum. ChiantiPy uses the CHIANTI database to calculate line and continuum intensities as a function of temperature, electron density. This can be done for a set of elemental abundances in -CHIANTI or for a user provided set of elemental abundances. At +CHIANTI or for a user provided set of elemental abundances. At present, if a user wants to compare CHIANTI theoretical spectra it -must be done on a case-by-case basis. A GUI explorer, written in +must be done on a case-by-case basis. A GUI explorer, written in Python and preferably PyQt or Wx based, will provide an integrated tool to import observed spectra and plot them alongside theoretical -spectra. It will further allow the user to understand what spectra +spectra. It will further allow the user to understand what spectra lines contribute to various spectral line profile, how the predicted spectra vary as a function of temperature and density. It will be necessary to develop techniques to import observed -spectra from a variety sources. Typical sources are in FITS files, -HDF5 files, or csv files. It will also be important to allow users +spectra from a variety sources. Typical sources are in FITS files, +HDF5 files, or csv files. It will also be important to allow users import their data through modules of their own. diff --git a/gsoc/gsoc2015/ideas_sunpy.md b/src/content/pages/gsoc/2015/ideas_sunpy.md similarity index 79% rename from gsoc/gsoc2015/ideas_sunpy.md rename to src/content/pages/gsoc/2015/ideas_sunpy.md index 40a23ca0..30b39fff 100644 --- a/gsoc/gsoc2015/ideas_sunpy.md +++ b/src/content/pages/gsoc/2015/ideas_sunpy.md @@ -1,21 +1,23 @@ --- -layout: default -title: "Ideas for sunpy" +title: "Ideas for sunpy" show_main: false ideas_team: SunPy --- -### Improvements to the SunPy Database +# Ideas for sunpy -*Suggested Mentor(s):* [Stuart Mumford](http://github.com/Cadair), [Steven Christe](http://github.com/ehsteve) +## Improvements to the SunPy Database -*Difficulty:* Beginner +_Suggested Mentor(s):_ [Stuart Mumford](http://github.com/Cadair), [Steven Christe](http://github.com/ehsteve) -*Astronomy knowledge needed:* None +_Difficulty:_ Beginner -*Programming skills:* Python, some database knowledge would be helpful, but not required. +_Astronomy knowledge needed:_ None + +_Programming skills:_ Python, some database knowledge would be helpful, but not required. + +### Description -#### Description The `database` module provides functionality to users to manage collections of files on disk in a way not reliant upon folder structure and file name. The database allows users to find files on disk by either physical parameters, such as wavelength and time or properties of the instrument such as name and spacecraft. It also allows more complex queries by enabling searches of the raw meta data associated with the files. @@ -26,21 +28,19 @@ The improvements to the database functionality that would be implemented by this 1. Support for relative paths in the database module [#783](https://github.com/sunpy/sunpy/issues/783) to allow a centralised database with multiple users, all referencing a central file store mounted with different absolute paths on each client. 1. Supporting all data supported by the `sunpy.lightcurve` module in the database. The major hurdle here is the lack of standardisation in the file used by this data. -There are various other maintenance tasks which need undertaking (https://github.com/sunpy/sunpy/labels/Database) which would be a good way for someone interested in this project to familiarise themselves with the codebase. - +There are various other maintenance tasks which need undertaking () which would be a good way for someone interested in this project to familiarise themselves with the codebase. +## Integrating ChiantiPy and SunPy -### Integrating ChiantiPy and SunPy +_Suggested Mentor(s):_ [Dan Ryan](https://github.com/DanRyanIrish), [Ken Dere](http://sourceforge.net/u/kdere/profile/) -*Suggested Mentor(s):* [Dan Ryan](https://github.com/DanRyanIrish), [Ken Dere](http://sourceforge.net/u/kdere/profile/) +_Difficulty:_ Beginner -*Difficulty:* Beginner +_Astronomy knowledge needed:_ Some knowledge of spectra. -*Astronomy knowledge needed:* Some knowledge of spectra. +_Programming skills:_ Python. -*Programming skills:* Python. - -#### Description +### Description The [CHIANTI](http://www.chiantidatabase.org/) atomic physics database is a valuable resource for solar physics. The CHIANTI database holds a large amount of information on the physical properties of different elements in different ionisation states and enabled the calculation of various parameters from this information. Using CHIANTI it is possible to calculate the spectra of various types of solar plasma (e.g., flare, quiet sun, etc.) from the observed elemental abundances and ionisation states. These synthetic spectra are essential for comparing to the data observed by various instruments to calculate the response functions of the instruments and to compare to the properties of observed plasma to allow the calculation of physical parameters such as temperature. @@ -53,21 +53,21 @@ Other potential application of ChiantiPy in SunPy include: 1. Calculation of AIA temperature response functions from ChiantiPy contribution functions. -**Expected Outcomes**: This project would facilitate SunPy becoming independent from Solar SoftWare (SSW) in producing and maintaining files required by the sunpy.instr.goes module for determining the thermodynamic properties of the emitting plasma observed by GOES. It would also allow SunPy users to calculate spectra and exclusively through Python without relying on SSW. - +### Expected Outcomes +This project would facilitate SunPy becoming independent from Solar SoftWare (SSW) in producing and maintaining files required by the sunpy.instr.goes module for determining the thermodynamic properties of the emitting plasma observed by GOES. It would also allow SunPy users to calculate spectra and exclusively through Python without relying on SSW. -### Support for analysis of Solar Energetic Particles +## Support for analysis of Solar Energetic Particles -*Suggested Mentor(s):* [David Pérez-Suárez](http://github.com/dpshelio) +_Suggested Mentor(s):_ [David Pérez-Suárez](http://github.com/dpshelio) -*Difficulty:* Beginner +_Difficulty:_ Beginner -*Astronomy knowledge needed:* None +_Astronomy knowledge needed:_ None -*Programming skills:* Python. +_Programming skills:_ Python. -#### Description +### Description SunPy is able to read a lightcurve from different sources (GOES x-ray, Lyra, Norh,...), however these are not all. SoHO/ERNE (Energetic and Relativistic Nuclei and Electron experiment on board SoHO) measures @@ -78,19 +78,18 @@ able to read these files in as a lightcurve object and allow to perform the basic operations used when such data is analysed: eg. energy ranges binning, visualisation, ... +## Lightcurve Refactor +_Suggested Mentor(s):_ [Stuart Mumford](http://github.com/Cadair), [Dan Ryan](https://github.com/DanRyanIrish), [Andrew Inglis](https://github.com/aringlis) -### Lightcurve Refactor +_Difficulty:_ Intermediate -*Suggested Mentor(s):* [Stuart Mumford](http://github.com/Cadair), [Dan Ryan](https://github.com/DanRyanIrish), [Andrew Inglis](https://github.com/aringlis) +_Astronomy knowledge needed:_ None -*Difficulty:* Intermediate +_Programming skills:_ Python -*Astronomy knowledge needed:* None +### Description -*Programming skills:* Python - -#### Description The `Lightcurve` class is one of the three core datatypes in SunPy, along with Map and Spectra. `Lightcurve` is designed to read in, process and store meta data related to solar physics time series data. Currently, `Lightcurve` uses the pandas library as its underlying data structure, however, this is subject to change in the future. @@ -108,29 +107,26 @@ This leaves `lightcurve` in a similar position to `map` where the data acquisiti Therefore, enabling the implementation of a factory class like `Map` for the lightcurve module. -**Expected Outcomes** +### Expected Outcomes Someone under taking this project will complete the following tasks: 1. Become familiar with the `UnifiedDownloader` code, if it has not been accepted into the SunPy codebase, complete the remaining tasks for this to be achieved. 1. Re-write any new lightcurve sources that were not included in the `UnifiedDownloader` code as sources for `UnifiedDownloader`. -1. Write a factory class for `lightcurve` similar to the `sunpy.map.Map` class. This class will be a generic constructor for `lightcurve` allowing the user to instantiate any one of the many subclasses of `GenericLightcurve` present in `sunpy.lightcurve.sources`. The API design for the factory class is here: https://github.com/sunpy/sunpy-SEP/pull/6 +1. Write a factory class for `lightcurve` similar to the `sunpy.map.Map` class. This class will be a generic constructor for `lightcurve` allowing the user to instantiate any one of the many subclasses of `GenericLightcurve` present in `sunpy.lightcurve.sources`. The API design for the factory class is here: 1. Design and develop a robust method of dealing with lightcurve meta data, which can handle joining different parts of timeseries from different files, each with their own meta data. (See [#1122](https://github.com/sunpy/sunpy/issues/1122)) +## IRIS, 4D Cubes and GUI +_Suggested Mentors:_ [Steven Christe](http://github.com/ehsteve) (NASA GSFC, SunPy), [Nabil Freij](https://github.com/nabobalis) (Sheffield University) -### IRIS, 4D Cubes and GUI - -*Suggested Mentors:* [Steven Christe](http://github.com/ehsteve) (NASA GSFC, SunPy), [Nabil Freij](https://github.com/nabobalis) (Sheffield University) - -*Difficulty:* Intermediate to Expert +_Difficulty:_ Intermediate to Expert -*Astronomy knowledge needed:* None +_Astronomy knowledge needed:_ None -*Programming skills:* Python and basic knowledge of GUI design. +_Programming skills:_ Python and basic knowledge of GUI design. - -#### Description: +### Description Recently, a new Sun observing satellite was launched, called [IRIS](http://iris.lmsal.com). It performs high-resolution, multi-wavelength observations of the solar atmosphere. @@ -142,15 +138,15 @@ Using this language, a GUI was created called [CRISPEX](http://folk.uio.no/grega This project aims to create a smaller scale version that uses [Ginga](http://ejeschke.github.io/ginga/) as a backend. Ginga is a file viewer that was created with astrophysics in mind. -It allows basic manipulation of FIT files, which are the standard data container in astrophysics. +It allows basic manipulation of FIT files, which are the standard data container in astrophysics. A Python plugin will be created and integrated into Ginga, allowing the user to open 3D/4D datasets and perform basic analysis, such as, slit extraction. To achieve this, a previous ESA summer project created a cube class. While it was finished, it was never integrated into SunPy. -The code was created to hold and manipulate complex datatypes. +The code was created to hold and manipulate complex datatypes. It is similar in style to the SunPy Map Class and follows that convention. -It however, has extra features enabling specific data formats to be extracted that the user requires, for example, a spectrum. -The student will need to become familiar with this code, as small tweaks need to occur before it is added to SunPy. +It however, has extra features enabling specific data formats to be extracted that the user requires, for example, a spectrum. +The student will need to become familiar with this code, as small tweaks need to occur before it is added to SunPy. Finally, the plugin will be created using Python. However, a background in QT would ideally be needed but it is not necessary. @@ -165,4 +161,3 @@ Plugin Features: Sunpy Feature: 1. Full IRIS support. - diff --git a/gsoc/gsoc2015/ideas_yt.md b/src/content/pages/gsoc/2015/ideas_yt.md similarity index 56% rename from gsoc/gsoc2015/ideas_yt.md rename to src/content/pages/gsoc/2015/ideas_yt.md index 3773fd99..e9f04816 100644 --- a/gsoc/gsoc2015/ideas_yt.md +++ b/src/content/pages/gsoc/2015/ideas_yt.md @@ -1,23 +1,24 @@ --- -layout: default -title: "Ideas for yt" +title: "Ideas for yt" show_main: false ideas_team: yt --- -### Enable volume rendering of octree datasets +# Ideas for yt -*Suggested Mentor(s):* Matthew Turk, Sam Skillman +## Enable volume rendering of octree datasets -*Difficulty:* Intermediate +_Suggested Mentor(s):_ Matthew Turk, Sam Skillman -*Astronomy knowledge needed:* None +_Difficulty:_ Intermediate -*Programming skills:* Familiarity with Python and Cython, and a familiarity with data structures such as octrees and B-trees. +_Astronomy knowledge needed:_ None -#### Description +_Programming skills:_ Familiarity with Python and Cython, and a familiarity with data structures such as octrees and B-trees. -At present, volume rendering in yt works best with patch-based AMR datasets. Extending this to support octree datasets will enable a much greater diversity of data types and formats to be visualized in this way. +### Description + +At present, volume rendering in yt works best with patch-based AMR datasets. Extending this to support octree datasets will enable a much greater diversity of data types and formats to be visualized in this way. This would include several specific, concrete actions: @@ -25,17 +26,17 @@ This would include several specific, concrete actions: 1. Refactoring grid traversal methods to travel along the octree data structure without explicit parentage links (i.e., using built-in neighbor-finding functions) 1. Optimizing for parallel decomposition of octrees in this way -### Implementation of deep image format +## Implementation of deep image format -*Suggested Mentor(s):* Matthew Turk, Kacper Kowalik +_Suggested Mentor(s):_ Matthew Turk, Kacper Kowalik -*Difficulty:* Advanced +_Difficulty:_ Advanced -*Astronomy knowledge needed:* None +_Astronomy knowledge needed:_ None -*Programming skills:* Familiarity with Python and Cython, and a familiarity with z-buffering. +_Programming skills:_ Familiarity with Python and Cython, and a familiarity with z-buffering. -#### Description +### Description Deep image compositing can be used to create a notion of depth. This could be utilized for multi-level rendering, rendering of semi-transparent streamlines inside volumes. @@ -44,17 +45,17 @@ This would require: 1. Developing a sparse image format data container 1. Utilizing aforementioned container for multi-level rendering -### Volume Traversal +## Volume Traversal -*Suggested Mentor(s):* Matthew Turk, Sam Skillman +_Suggested Mentor(s):_ Matthew Turk, Sam Skillman -*Difficulty:* Advanced +_Difficulty:_ Advanced -*Astronomy knowledge needed:* None +_Astronomy knowledge needed:_ None -*Programming skills:* Familiarity with Python and Cython, and a familiarity with data structures such as octrees and B-trees. +_Programming skills:_ Familiarity with Python and Cython, and a familiarity with data structures such as octrees and B-trees. -#### Description +### Description Currently yt uses several objects that utilize brick decomposition, i.e. a process by which overlapping grids are broken apart until a full tessellation of the domain (or data source) is created with no overlaps. This is done by the kD-tree decomposition. This project aims to enhance current capabilities by providing easy mechanisms for creating volume traversal mechanisms. There are two components to this: handling tiles of data, and creating fast methods for passing through the data and moving between tiles. @@ -62,11 +63,14 @@ This would require: 1. Creating flexible (in terms of ordering) iterator over the "tiles" that compose a given data object 1. Designing and implementing object for storing values returned by aforementioned iterator, that would: - * Cache a slice of the grid or data object that it operates on - * Filter particles from the data object it operates on - * Provide a mechanism for identifying neighbor objects from a given face index. - * Provide mechanisms for generating vertex-centered data or cell-centered data quickly + +- Cache a slice of the grid or data object that it operates on +- Filter particles from the data object it operates on +- Provide a mechanism for identifying neighbor objects from a given face index. +- Provide mechanisms for generating vertex-centered data or cell-centered data quickly + 1. Implement a mechanism for integrating paths through tiles, that would: - * define a method for determining when a ray has left an object - * define a method for selecting the next brick to traverse or connect to - * update the value of a ray's direction + +- define a method for determining when a ray has left an object +- define a method for selecting the next brick to traverse or connect to +- update the value of a ray's direction diff --git a/src/content/pages/gsoc/2016/ideas.md b/src/content/pages/gsoc/2016/ideas.md new file mode 100644 index 00000000..fcfe4492 --- /dev/null +++ b/src/content/pages/gsoc/2016/ideas.md @@ -0,0 +1,19 @@ +--- +title: "Ideas page for Google Summer of Code 2016" +show_main: false +--- + +# Ideas page for Google Summer of Code 2016 + +## Ideas page for GSoC 2016 + +Browse ideas for the following projects: + +- [IMS](../ideas_eras/) +- [CasaCore](../ideas_casacore/) +- [JuliaAstro](../ideas_juliaastro/) +- [yt](../ideas_yt/) +- [Astropy](../ideas_astropy/) +- [SunPy](../ideas_sunpy/) + +For each participating project, the ideas are organized from easiest to hardest. diff --git a/gsoc/gsoc2016/ideas_astropy.md b/src/content/pages/gsoc/2016/ideas_astropy.md similarity index 63% rename from gsoc/gsoc2016/ideas_astropy.md rename to src/content/pages/gsoc/2016/ideas_astropy.md index f02d4d2e..71e433ee 100644 --- a/gsoc/gsoc2016/ideas_astropy.md +++ b/src/content/pages/gsoc/2016/ideas_astropy.md @@ -1,82 +1,80 @@ --- -layout: default -title: "Ideas for Astropy" +title: "Ideas for Astropy" show_main: false ideas_team: Astropy --- +# Ideas for Astropy + If you are interested in one of the following Astropy Project ideas please see the [Astropy GSoC 2016 Guidelines](https://github.com/astropy/astropy/wiki/GSoC-2016-Guidelines) for additional information that is specific to Astropy. -### Implement Scheduling capabilities for Astroplan +## Implement Scheduling capabilities for Astroplan -*Suggested Mentor(s):* [Erik Tollerud](http://github.com/eteq), [Eric Jeschke](https://github.com/ejeschke), [Josh Walawender](https://github.com/joshwalawender) +_Suggested Mentor(s):_ [Erik Tollerud](http://github.com/eteq), [Eric Jeschke](https://github.com/ejeschke), [Josh Walawender](https://github.com/joshwalawender) -*Difficulty:* Beginner to Intermediate +_Difficulty:_ Beginner to Intermediate -*Astronomy knowledge needed:* Basic understanding of how astronomy observations work, practical experience a plus +_Astronomy knowledge needed:_ Basic understanding of how astronomy observations work, practical experience a plus -*Programming skills:* Python +_Programming skills:_ Python -#### Description +### Description The [astroplan](http://astroplan.readthedocs.org/en/latest/) affiliated package is an Astropy affiliated package that provides tools for planning observations. One valuable feature that astroplan could provide is basic scheduling capabilities for an observing run. Many large observatories have their own schedulers, but this package would be targeted at the needs of the typical individual or small-collaboration observing run. While some initial efforts have occurred, this project would involve expanding those efforts into a full-fledged API and implementing both the interface and the actual scheduler(s). +## Ephemerides for Solar System objects in Astropy -### Ephemerides for Solar System objects in Astropy - -*Suggested Mentor(s):* [Marten van Kerkwijk](http://github.com/mhvk), [Erik Tollerud](http://github.com/eteq) - -*Difficulty:* Beginner to Intermediate +_Suggested Mentor(s):_ [Marten van Kerkwijk](http://github.com/mhvk), [Erik Tollerud](http://github.com/eteq) -*Astronomy knowledge needed:* Some understanding of astronomical coordinate systems, basic knowledge of solar system dynamics (or ability to learn as-needed to implement the specific algorithms required) +_Difficulty:_ Beginner to Intermediate -*Programming skills:* Python, some knowledge of C might be helpful +_Astronomy knowledge needed:_ Some understanding of astronomical coordinate systems, basic knowledge of solar system dynamics (or ability to learn as-needed to implement the specific algorithms required) -#### Description +_Programming skills:_ Python, some knowledge of C might be helpful -An often-requested missing feature in Astropy is the ability to compute ephemerides: the on-sky location of Solar System objects like the planets, asteroids, or artificial satellites. This project would involve implementing just this feature. This will likely *start* with implementing a `get_moon` function similar to the existing `get_sun` to familiarize the student with the important concepts in the `astropy.coordinates` subpackage. The larger part of the project will likely involve using the orbital elements that the JPL Solar System dynamics group has already complied (there is already a package to read these files: [JPLEphem](https://pypi.python.org/pypi/jplephem)), and translate those into the Astropy coordinates framework. The student will implement these algorithms and also collaborate with the mentors and Astropy community to develop an API to access this machinery. +### Description +An often-requested missing feature in Astropy is the ability to compute ephemerides: the on-sky location of Solar System objects like the planets, asteroids, or artificial satellites. This project would involve implementing just this feature. This will likely _start_ with implementing a `get_moon` function similar to the existing `get_sun` to familiarize the student with the important concepts in the `astropy.coordinates` subpackage. The larger part of the project will likely involve using the orbital elements that the JPL Solar System dynamics group has already complied (there is already a package to read these files: [JPLEphem](https://pypi.python.org/pypi/jplephem)), and translate those into the Astropy coordinates framework. The student will implement these algorithms and also collaborate with the mentors and Astropy community to develop an API to access this machinery. -### Implement Public API for ERFA +## Implement Public API for ERFA -*Suggested Mentor(s):* [Erik Tollerud](http://github.com/eteq), [Tom Aldcroft](http://github.com/taldcroft) +_Suggested Mentor(s):_ [Erik Tollerud](http://github.com/eteq), [Tom Aldcroft](http://github.com/taldcroft) -*Difficulty:* Intermediate to Expert +_Difficulty:_ Intermediate to Expert -*Astronomy knowledge needed:* None required, but may be helpful for understanding ERFA functionality +_Astronomy knowledge needed:_ None required, but may be helpful for understanding ERFA functionality -*Programming skills:* Python, Cython, C +_Programming skills:_ Python, Cython, C -#### Description +### Description Some of the major functionality for Astropy uses the ERFA C library (adapted from the IAU SOFA library) as the back-end for -computational "heavy-lifting". Members of the community have expressed a desire to use this lower-level python wrapper -around ERFA for other purposes that may not be directly relevant for Astropy. So this project would involve making the -necessary changes to make the ERFA python API public. This includes: +computational "heavy-lifting". Members of the community have expressed a desire to use this lower-level python wrapper +around ERFA for other purposes that may not be directly relevant for Astropy. So this project would involve making the +necessary changes to make the ERFA python API public. This includes: -* Getting the documentation up to the astropy standard (currently it is mostly auto-generated verbatim from the C comments). -* Implementing a more complete test suite for the python side of the code. -* Possibly moving it to a separate package as part of the liberfa GitHub organization. This would also include making the necessary +- Getting the documentation up to the astropy standard (currently it is mostly auto-generated verbatim from the C comments). +- Implementing a more complete test suite for the python side of the code. +- Possibly moving it to a separate package as part of the liberfa GitHub organization. This would also include making the necessary changes to ensure everything continues to work in Astropy. -* Any other steps necessary to ensure the resulting package (or sub-package of Astropy) is stable and relatively easy to use. +- Any other steps necessary to ensure the resulting package (or sub-package of Astropy) is stable and relatively easy to use. +## Web development for Gammapy -### Web development for Gammapy +_Suggested Mentor(s):_ [Christoph Deil](https://github.com/cdeil), [Johannes King](https://github.com/joleroi) -*Suggested Mentor(s):* [Christoph Deil](https://github.com/cdeil), [Johannes King](https://github.com/joleroi) +_Difficulty:_ Intermediate to Expert -*Difficulty:* Intermediate to Expert +_Astronomy knowledge needed:_ None. -*Astronomy knowledge needed:* None. +_Programming skills:_ Scientific python (Numpy, Scipy, Astropy), Web development (Python backend, Javascript frontend) -*Programming skills:* Scientific python (Numpy, Scipy, Astropy), Web development (Python backend, Javascript frontend) - -#### Description +### Description [Gammapy](https://docs.gammapy.org/) is a Python package for professional gamma-ray astronomers. We are looking for a web developer with good @@ -94,21 +92,20 @@ or Python web apps that let us browse the gamma-ray data and analysis results, basically a web GUI for Gammapy. That project would mostly be Python web app development, and you have to learn a bit more about Gammapy before GSoC starts. +## Data analysis for Gammapy -### Data analysis for Gammapy - -*Suggested Mentor(s):* [Christoph Deil](https://github.com/cdeil), [Johannes King](https://github.com/joleroi) +_Suggested Mentor(s):_ [Christoph Deil](https://github.com/cdeil), [Johannes King](https://github.com/joleroi) -*Difficulty:* Intermediate to Expert +_Difficulty:_ Intermediate to Expert -*Astronomy knowledge needed:* Some, e.g. sky coordinates and projections. +_Astronomy knowledge needed:_ Some, e.g. sky coordinates and projections. Experience with X-ray or gamma-ray data analysis (e.g. Fermi-LAT) is a plus, but not a requirement. -*Method knowledge needed:* Some experience in data analysis (e.g. images, regions) and statistics (e.g. Poisson noise). +_Method knowledge needed:_ Some experience in data analysis (e.g. images, regions) and statistics (e.g. Poisson noise). -*Programming skills:* Python (including pytest and Sphinx) and scientific python (Numpy, Scipy, Astropy) +_Programming skills:_ Python (including pytest and Sphinx) and scientific python (Numpy, Scipy, Astropy) -#### Description +### Description [Gammapy](https://docs.gammapy.org/) is a Python package for professional gamma-ray astronomers. We are looking for someone that's interested @@ -121,21 +118,21 @@ and docs) as well as grunt work that's needed to go towards production quality and a Gammapy 1.0 release this fall (e.g. set up continuous integration for example IPython notebooks or adding more tests). To get an idea of what is going on in Gammapy and what still needs to be done, please check out the project on -Github (https://github.com/gammapy/gammapy) and browse the documentation a bit +Github () and browse the documentation a bit (or try out the examples) and if this looks interesting to you, send us an email and let us know what your skills and interests are. -### Implement PSF photometry for fitting several overlapping objects at once +## Implement PSF photometry for fitting several overlapping objects at once -*Suggested Mentor(s):* [Moritz Guenther](https://github.com/hamogu), [Brigitta Sipocz](https://github.com/bsipocz) +_Suggested Mentor(s):_ [Moritz Guenther](https://github.com/hamogu), [Brigitta Sipocz](https://github.com/bsipocz) -*Difficulty:* Intermediate to Expert +_Difficulty:_ Intermediate to Expert -*Astronomy knowledge needed:* basic understanding of what photometry is +_Astronomy knowledge needed:_ basic understanding of what photometry is -*Programming skills:* Python +_Programming skills:_ Python -#### Description +### Description The [photutils](http://photutils.readthedocs.org/en/latest/) package is an Astropy affiliated package that provides tools for photometry (measuring how bright a source is). @@ -143,23 +140,21 @@ There are several ways to do photometry and the package currently implements ape This project includes looking at other astronomy codes to see how they tackle the problem; select, modify and improve an algorithm that fits into the astropy modelling framework; implement this in python; and, if it turns out that speed is a problem, move speed-critical parts to Cython. To verify that the new code works, we will compare it to the solutions of established PSF photometry codes. -See https://github.com/OpenAstronomy/openastronomy.github.io/pull/27 for a discussion of some problems and possible solutions that will be addressed in this project. - +See for a discussion of some problems and possible solutions that will be addressed in this project. -### Bridge sherpa and astropy fitting +## Bridge sherpa and astropy fitting -*Suggested Mentor(s):* D. Burke, T. Aldcroft, H. M. Guenther +_Suggested Mentor(s):_ D. Burke, T. Aldcroft, H. M. Guenther -*Difficulty:* Expert or better +_Difficulty:_ Expert or better -*Astronomy knowledge needed:* fitting functions and statistics +_Astronomy knowledge needed:_ fitting functions and statistics -*Programming skills:* Python, C, Cython +_Programming skills:_ Python, C, Cython -#### Description +### Description - -Both astropy and Sherpa (https://github.com/sherpa/sherpa/) provide modelling and fitting capabilities; however, Sherpa's features are way +Both astropy and Sherpa () provide modelling and fitting capabilities; however, Sherpa's features are way more advanced. Sherpa provides far more build-in models, a larger choice of optimizers and a real variety of fit statistics. Unfortunately Sherpa is less well known and for historical reasons the object-oriented user interface is less polished than the functional state-based interface. @@ -173,43 +168,45 @@ This project requires the student to get proficient in two major packages (Not a just a few weeks of GSoC it will give astropy users access to fitting capabilites that required many years of developer time and that are unfeasable redevelop from scratch. +## Enhancements to Ginga, a Toolkit for Building Scientific Image Viewers -### Enhancements to Ginga, a Toolkit for Building Scientific Image Viewers - -*Suggested Mentor(s):* [Eric Jeschke](https://github.com/ejeschke), [Pey-Lian Lim](https://github.com/pllim), [Nabil Freij](https://github.com/nabobalis) +_Suggested Mentor(s):_ [Eric Jeschke](https://github.com/ejeschke), [Pey-Lian Lim](https://github.com/pllim), [Nabil Freij](https://github.com/nabobalis) -*Difficulty:* Beginning to Advanced, depending on project choices +_Difficulty:_ Beginning to Advanced, depending on project choices -*Astronomy knowledge needed:* Some, depending on project choices +_Astronomy knowledge needed:_ Some, depending on project choices -*Programming skills:* Python and scientific python (Numpy, Scipy, Astropy), git version control +_Programming skills:_ Python and scientific python (Numpy, Scipy, Astropy), git version control -*Desirable:* OpenCL, Javascript/web sockets, C/C++ programming, experience in image or array processing, concurrent programming, experience in using GUI toolkits, github-based workflow +_Desirable:_ OpenCL, Javascript/web sockets, C/C++ programming, experience in image or array processing, concurrent programming, experience in using GUI toolkits, github-based workflow -#### Description +### Description [Ginga](https://ejeschke.github.io/ginga/) is a toolkit for constructing scientific image viewers in Python, with an emphasis toward astronomy. Ginga is being used at a number of observatories and institutes for observation and instrument control, quick look, custom data reduction and analysis tasks. The general aim is to build upon this toolkit improving its current features and to expand this toolkit in order for scientists to be able to easily accomplish preliminary data analysis. We are looking for an individual to work on a few select project areas, depending on skill level and interest. Each project area itself would form a small part of the overall GSOC project. Essentially it would be a large pick and mix but do not let this put you off. This method would allow a range of different contributions to be made the Ginga toolkit that are for your choosing. Beginning-level: -* Improve and expand Ginga's unit test suite and coverage -* Improve documentation and tutorials, including via Jupyter notebooks and video voice-overs -* Improve our "native app" packaging for Mac, Unix and Windows -* Improving LineProfile and Slit plugins -* Enhance existing plugins by adding GUIs for some common tasks like configuring catalog sources, which are currently done by editing config files -* Add support for loading broken FITS files by ["fingerprinting" them] (https://github.com/ejeschke/ginga/issues/205) + +- Improve and expand Ginga's unit test suite and coverage +- Improve documentation and tutorials, including via Jupyter notebooks and video voice-overs +- Improve our "native app" packaging for Mac, Unix and Windows +- Improving LineProfile and Slit plugins +- Enhance existing plugins by adding GUIs for some common tasks like configuring catalog sources, which are currently done by editing config files +- Add support for loading broken FITS files by ["fingerprinting" them] () Intermediate-level: -* Improve Ginga backends for web browsers (native javascript/web sockets and/or Jupyter notebooks and/or Bokeh server) -* Enhancements to "traditional" GUI backends (e.g. add support for gtk3, AGG support for python 3, improvements to Qt-based widgets) -* Graft the astropy-helpers package into Ginga -* Adding support for calculating approximate line-of-sight velocities -* Enhance existing plugins for data analysis tasks, usually featuring astropy or affiliated packages + +- Improve Ginga backends for web browsers (native javascript/web sockets and/or Jupyter notebooks and/or Bokeh server) +- Enhancements to "traditional" GUI backends (e.g. add support for gtk3, AGG support for python 3, improvements to Qt-based widgets) +- Graft the astropy-helpers package into Ginga +- Adding support for calculating approximate line-of-sight velocities +- Enhance existing plugins for data analysis tasks, usually featuring astropy or affiliated packages Advanced-level: -* Implement an OpenCL module that leverages CPU and GPU resources for accelerating some common image processing operations (scaling, transformations, rotations) on numpy image arrays. Benchmark against current CPU based solutions. -* Improving IO speeds by optimizing use of astropy.fits.io/cfitsio/numpy, lazy reads, file caching hints, optimizing concurrency, etc. -* Adding support for a binary file format used by a very popular ground-based solar telescope and extending it to support Stokes data products + +- Implement an OpenCL module that leverages CPU and GPU resources for accelerating some common image processing operations (scaling, transformations, rotations) on numpy image arrays. Benchmark against current CPU based solutions. +- Improving IO speeds by optimizing use of astropy.fits.io/cfitsio/numpy, lazy reads, file caching hints, optimizing concurrency, etc. +- Adding support for a binary file format used by a very popular ground-based solar telescope and extending it to support Stokes data products If you are interested in working on any of these aspects, or want to propose some other work on Ginga, please sign in to Github and comment on [Assist the Ginga Project](https://github.com/ejeschke/ginga/issues/287). diff --git a/gsoc/gsoc2016/ideas_casacore.md b/src/content/pages/gsoc/2016/ideas_casacore.md similarity index 62% rename from gsoc/gsoc2016/ideas_casacore.md rename to src/content/pages/gsoc/2016/ideas_casacore.md index 1640edd8..dc42d2f7 100644 --- a/gsoc/gsoc2016/ideas_casacore.md +++ b/src/content/pages/gsoc/2016/ideas_casacore.md @@ -1,74 +1,75 @@ --- -layout: default -title: "Ideas for CasaCore" +title: "Ideas for CasaCore" show_main: false ideas_team: CasaCore --- -### Improve Python bindings to CasaCore measures +# Ideas for CasaCore -*Suggested Mentor(s):* [Ger van Diepen](http://github.com/gervandiepen), [Tammo Jan Dijkema](https://github.com/tammojan) +## Improve Python bindings to CasaCore measures -*Difficulty:* Intermediate +_Suggested Mentor(s):_ [Ger van Diepen](http://github.com/gervandiepen), [Tammo Jan Dijkema](https://github.com/tammojan) -*Astronomy knowledge needed:* Some understanding of astronomical coordinate systems and transformations +_Difficulty:_ Intermediate -*Programming skills:* Python, some C++ +_Astronomy knowledge needed:_ Some understanding of astronomical coordinate systems and transformations -#### Description +_Programming skills:_ Python, some C++ -CasaCore contains many features to perform astronomical coordinate transformations, for example from B1950 to J2000, or from J2000 to Azimuth-Elevation. Moreover, it can compute ephemerides, which may make it useful for many other projects. See http://casacore.github.io/casacore-notes/233 +### Description + +CasaCore contains many features to perform astronomical coordinate transformations, for example from B1950 to J2000, or from J2000 to Azimuth-Elevation. Moreover, it can compute ephemerides, which may make it useful for many other projects. See The current python binding [python-casacore](http://casacore.github.io/python-casacore/) contains a python binding to the measures library, but this is not a very programmer friendly binding, and thus not much used. An interface to measures exists within CasaCore that makes converting coordinates much easier. This interface was written with TaQL in mind. This project concerns modifying the TaQL measures interface to a python measures interface, thus making casacore measures easily accessible from Python +## Frequency conversions for TaQL / python-casacore -### Frequency conversions for TaQL / python-casacore - -*Suggested Mentor(s):* [Ger van Diepen](http://github.com/gervandiepen), [Tammo Jan Dijkema](http://github.com/tammojan) +_Suggested Mentor(s):_ [Ger van Diepen](http://github.com/gervandiepen), [Tammo Jan Dijkema](http://github.com/tammojan) -*Difficulty:* Beginner / Intermediate +_Difficulty:_ Beginner / Intermediate -*Astronomy knowledge needed:* Some understanding of use of astronomical frequencies (regarding Doppler shifts etc.) +_Astronomy knowledge needed:_ Some understanding of use of astronomical frequencies (regarding Doppler shifts etc.) -*Programming skills:* C++ +_Programming skills:_ C++ -#### Description +### Description -The casacore measures module contains code for converting frequencies between various reference frames (e.g. Rest frequency, Geocentric, Topocentric, Galacto centric). Having this module available in TaQL would make it much more convenient to perform these kind of conversions. Example code exists for other conversions, see e.g. http://casacore.github.io/casacore/group__MeasUDF__module.html +The casacore measures module contains code for converting frequencies between various reference frames (e.g. Rest frequency, Geocentric, Topocentric, Galacto centric). Having this module available in TaQL would make it much more convenient to perform these kind of conversions. Example code exists for other conversions, see e.g. This project concerns writing such a converter for the Doppler and Frequency conversions. It will require tweaking in boost-python, but since the example code is available for other measures, it should not be too hard. -### General python-casacore cleanup +## General python-casacore cleanup -*Suggested Mentor(s):* [Gijs Molenaar](http://github.com/gijzelaerr), [Ger van Diepen](http://github.com/gervandiepen) +_Suggested Mentor(s):_ [Gijs Molenaar](http://github.com/gijzelaerr), [Ger van Diepen](http://github.com/gervandiepen) -*Difficulty:* Intermediate +_Difficulty:_ Intermediate -*Astronomy knowledge needed:* none +_Astronomy knowledge needed:_ none -*Programming skills:* python +_Programming skills:_ python -#### Description +### Description The current [python-casacore](http://github.com/casacore/python-casacore) code is already much improved over the previous "pyrap" implementaion. This python binding to casacore is now python 3 compatible, contains some unit tests, etc. But some work remains to be done: - * Remove all compile warnings - * Modernise code, add missing features, maybe more 'pythonic'. - * Improve test coverage (24% at the moment) + +- Remove all compile warnings +- Modernise code, add missing features, maybe more 'pythonic'. +- Improve test coverage (24% at the moment) This is a typical project to learn making good code. -### Table plotting for python-casacore +## Table plotting for python-casacore -*Suggested Mentor(s):* [Ger van Diepen](http://github.com/gervandiepen), [Tammo Jan Dijkema](https://github.com/tammojan) +_Suggested Mentor(s):_ [Ger van Diepen](http://github.com/gervandiepen), [Tammo Jan Dijkema](https://github.com/tammojan) -*Difficulty:* Beginner +_Difficulty:_ Beginner -*Astronomy knowledge needed:* Some idea about astronomical units +_Astronomy knowledge needed:_ Some idea about astronomical units -*Programming skills:* Python +_Programming skills:_ Python -Radio interferometric data sets are almost always stored in casacore "Measurement Sets". These can be queried through TaQL, see e.g. http://casacore.github.io/casacore-notes/199 +Radio interferometric data sets are almost always stored in casacore "Measurement Sets". These can be queried through TaQL, see e.g. It would be nice to have a plotting routine in [python-casacore](http://github.com/casacore/python-casacore) to easily plot two columns against each other, which nicely formatted axes etc (possibly using wcsaxes). -This would, at the very least, make a nice extension to the taql jupyter kernel underneath http://taql.astron.nl +This would, at the very least, make a nice extension to the taql jupyter kernel underneath diff --git a/gsoc/gsoc2016/ideas_eras.md b/src/content/pages/gsoc/2016/ideas_eras.md similarity index 69% rename from gsoc/gsoc2016/ideas_eras.md rename to src/content/pages/gsoc/2016/ideas_eras.md index be6e8bf1..87fc60fd 100644 --- a/gsoc/gsoc2016/ideas_eras.md +++ b/src/content/pages/gsoc/2016/ideas_eras.md @@ -1,21 +1,22 @@ --- -layout: default -title: "Ideas for IMS - ERAS" +title: "Ideas for IMS - ERAS" show_main: false ideas_team: IMS --- -### Solar Storms forecasting server +# Ideas for IMS - ERAS -*Suggested Mentors:* [Antonio del Mastro](https://bitbucket.org/aldebran/) , [Olena Persianova](https://bitbucket.org/OPersian/) +## Solar Storms forecasting server -*Difficulty:* Intermediate to Hard +_Suggested Mentors:_ [Antonio del Mastro](https://bitbucket.org/aldebran/) , [Olena Persianova](https://bitbucket.org/OPersian/) -*Astronomy knowledge needed:* None beforehand, the student will be required to research relevant publications. +_Difficulty:_ Intermediate to Hard -*Programming skills:* advanced Python; basic Theano or TensorFlow; basic Django or Flask; experience with some ANN library, such as Keras, theanets or Lasagne. +_Astronomy knowledge needed:_ None beforehand, the student will be required to research relevant publications. -#### Description: +_Programming skills:_ advanced Python; basic Theano or TensorFlow; basic Django or Flask; experience with some ANN library, such as Keras, theanets or Lasagne. + +### Description Solar storms are responsible for disruption of satellite communication, and damage to space electronical equipments. The storms have to be taken into account also for EVA and habitat maintenance activities, as the higher levels of radiation brought by them have a detrimental effect on the crew member's health. @@ -23,17 +24,17 @@ Prediction of these storms are essential to prevent said damage. A lot of astron In this project, the student will be required to: -* Using a machine learning approach, predict the *duration* and *intensity* solar storms: - * The student should use preferably an artificial neural networks approach (although alternatives, such as random forests, SVM, bayesian models or HMMs, can be considered). - * The predictions should be given with 24-48 hs in advance of a storm (depending on viability). - * The student should evaluate training and test data provided by IMS, or find a suitable datasaet, if the data provided is unsuitable. - * The student should evaluate an approach suggested by the IMS to test the model's performance, or propose a testing procedure of his/her own. -* Provide information on a dynamically updated web page, using preferably Django or Flask, which should at least include: - * The real-time and historical sensor's values; as plots, when appropriate. - * Useful statistics about the sensors (TBD). - * The model's predictions. - * Useful statistics about the predictions (e.g. RMSE) -* Incorporate the prediciton model and the web page into the [ERAS ecosystem](https://eras.readthedocs.org/en/latest/), which means building [Tango](http://www.tango-controls.org/) device servers (at least one for the predictor, more if necessary). +- Using a machine learning approach, predict the _duration_ and _intensity_ solar storms: + - The student should use preferably an artificial neural networks approach (although alternatives, such as random forests, SVM, bayesian models or HMMs, can be considered). + - The predictions should be given with 24-48 hs in advance of a storm (depending on viability). + - The student should evaluate training and test data provided by IMS, or find a suitable datasaet, if the data provided is unsuitable. + - The student should evaluate an approach suggested by the IMS to test the model's performance, or propose a testing procedure of his/her own. +- Provide information on a dynamically updated web page, using preferably Django or Flask, which should at least include: + - The real-time and historical sensor's values; as plots, when appropriate. + - Useful statistics about the sensors (TBD). + - The model's predictions. + - Useful statistics about the predictions (e.g. RMSE) +- Incorporate the prediciton model and the web page into the [ERAS ecosystem](https://eras.readthedocs.org/en/latest/), which means building [Tango](http://www.tango-controls.org/) device servers (at least one for the predictor, more if necessary). Currently, a few features are being used for the prediction of solar storms, among others: diff --git a/gsoc/gsoc2016/ideas_juliaastro.md b/src/content/pages/gsoc/2016/ideas_juliaastro.md similarity index 81% rename from gsoc/gsoc2016/ideas_juliaastro.md rename to src/content/pages/gsoc/2016/ideas_juliaastro.md index ee705121..28b3fb2c 100644 --- a/gsoc/gsoc2016/ideas_juliaastro.md +++ b/src/content/pages/gsoc/2016/ideas_juliaastro.md @@ -1,21 +1,22 @@ --- -layout: default -title: "Ideas for Julia Astro" +title: "Ideas for Julia Astro" show_main: false ideas_team: JuliaAstro --- -### Image compression and efficient table reading in FITSIO.jl +# Ideas for Julia Astro -*Suggested Mentor(s):* [Kyle Barbary](http://github.com/kbarbary), [Ryan Giordan](https://github.com/rgiordan) +## Image compression and efficient table reading in FITSIO.jl -*Difficulty:* Intermediate to Expert +_Suggested Mentor(s):_ [Kyle Barbary](http://github.com/kbarbary), [Ryan Giordan](https://github.com/rgiordan) -*Astronomy knowledge needed:* none +_Difficulty:_ Intermediate to Expert -*Programming skills:* Julia, some C +_Astronomy knowledge needed:_ none -#### Description +_Programming skills:_ Julia, some C + +### Description FITS (Flexible Image Transport System) format files are the standard containers for imaging and tabular data in astronomy. The diff --git a/gsoc/gsoc2016/ideas_sunpy.md b/src/content/pages/gsoc/2016/ideas_sunpy.md similarity index 87% rename from gsoc/gsoc2016/ideas_sunpy.md rename to src/content/pages/gsoc/2016/ideas_sunpy.md index 21a62ccf..02e73c75 100644 --- a/gsoc/gsoc2016/ideas_sunpy.md +++ b/src/content/pages/gsoc/2016/ideas_sunpy.md @@ -1,21 +1,23 @@ --- -layout: default -title: "Ideas for SunPy" +title: "Ideas for SunPy" show_main: false ideas_team: SunPy --- -### Lightcurve Refactor +# Ideas for SunPy -*Suggested Mentor(s):* [Stuart Mumford](http://github.com/Cadair), [Dan Ryan](https://github.com/DanRyanIrish), [Andrew Inglis](https://github.com/aringlis), [Jack Ireland](https://github.com/wafels) +## Lightcurve Refactor -*Difficulty:* Beginner +_Suggested Mentor(s):_ [Stuart Mumford](http://github.com/Cadair), [Dan Ryan](https://github.com/DanRyanIrish), [Andrew Inglis](https://github.com/aringlis), [Jack Ireland](https://github.com/wafels) -*Astronomy knowledge needed:* None +_Difficulty:_ Beginner -*Programming skills:* Python +_Astronomy knowledge needed:_ None + +_Programming skills:_ Python + +### Description -#### Description The `Lightcurve` class is one of the three core datatypes in SunPy, along with Map and Spectra. `Lightcurve` is designed to read in, process and store meta data related to solar physics time series data. Currently, `Lightcurve` uses the pandas library as its underlying data structure, however, this is subject to change in the future. @@ -33,7 +35,7 @@ This leaves `lightcurve` in a similar position to `map` where the data acquisiti The objective of this project is to re-implement the core of the lightcurve submodule, such that it no longer contains the code to download data from the internet. The lightcurve module should be able to open file from disk that have been downloaded using the new UnifiedDownloader submodule. The lightcurve factory must be able to read files from multiple sources some of which will be able to be auto-detcted and some which will not. The lightcurve module must also be able to combine multiple files into a single timeseries. -**Expected Outcomes** +### Expected Outcomes Someone under taking this project will complete the following tasks: @@ -41,21 +43,19 @@ Someone under taking this project will complete the following tasks: 1. Write a factory class for `lightcurve` similar to the `sunpy.map.Map` class. This class will be a generic constructor for `lightcurve` allowing the user to instantiate any one of the many subclasses of `GenericLightcurve` present in `sunpy.lightcurve.sources`. The API design for the factory class is in [SEP 7](https://github.com/sunpy/sunpy-SEP/blob/master/SEP-0007.md). 1. Design and develop a robust method of dealing with lightcurve meta data, which can handle joining different parts of timeseries from different files, each with their own meta data. (See [#1122](https://github.com/sunpy/sunpy/issues/1122)) - A successful proposal for this project will demonstrate that the applicant has understood the mechanism behind the `Map` factory as already implemented in SunPy and presents a timeline of what things need to change in Lightcurve to mirror the design of `Map` and follow the design for Lightcurve in [SEP 7](https://github.com/sunpy/sunpy-SEP/blob/master/SEP-0007.md). +## Implementing AIA response functions in SunPy -### Implementing AIA response functions in SunPy +_Suggested Mentor(s):_ [Drew Leonard](https://github.com/SolarDrew), [Will Barnes](https://github.com/wtbarnes) -*Suggested Mentor(s):* [Drew Leonard](https://github.com/SolarDrew), [Will Barnes](https://github.com/wtbarnes) +_Difficulty:_ Beginner -*Difficulty:* Beginner +_Astronomy knowledge needed:_ Some knowledge of coronal emission processes would be beneficial. -*Astronomy knowledge needed:* Some knowledge of coronal emission processes would be beneficial. +_Programming skills:_ Python. -*Programming skills:* Python. - -#### Description +### Description The [CHIANTI](http://www.chiantidatabase.org/) atomic physics database is a valuable resource for solar physics. The CHIANTI database holds a large amount of information on the physical properties of different elements in different ionisation states and enables the calculation of various parameters from this information. @@ -76,23 +76,24 @@ Other potential applications of ChiantiPy in SunPy include: 1. Calculation of reponse functions for other instruments. 1. Conversion of ChiantiPy spectra objects to SunPy Spectra objects. -**Expected Outcomes**: This project would facilitate SunPy becoming independent from Solar SoftWare (SSW) for analysing AIA data, particularly with respect to inferring plasma properties such as temperature and density. +### Expected Outcomes + +This project would facilitate SunPy becoming independent from Solar SoftWare (SSW) for analysing AIA data, particularly with respect to inferring plasma properties such as temperature and density. A successful proposal will outline a schedule for implementing at least a single set of temperature and wavelength response functions for AIA, and the response functions for arbitrary plasma conditions would be a bonus. Familiarity with CHIANTI, ChiantiPy and SSW's implementation of the response functions will help to properly assess how long will be required to recreate them in SunPy. +## Real time data access and visualisation tools -### Real time data access and visualisation tools +_Suggested Mentor(s):_ [David Perez-Suarez](http://github.com/dpshelio), [Jack Ireland](https://github.com/wafels) -*Suggested Mentor(s):* [David Perez-Suarez](http://github.com/dpshelio), [Jack Ireland](https://github.com/wafels) +_Difficulty:_ Beginner-Intermediate -*Difficulty:* Beginner-Intermediate +_Astronomy knowledge needed:_ none -*Astronomy knowledge needed:* none +_Programming skills:_ Python -*Programming skills:* Python - -#### Description +### Description Real time data is very useful for [spaceweather operations](https://en.wikipedia.org/wiki/Space_weather), SunPy @@ -123,18 +124,17 @@ Familiarisation with the timeline on how much time will take to implement, test and document each part of the project. +## Improvements to the SunPy Database -### Improvements to the SunPy Database - -*Suggested Mentor(s):* [Stuart Mumford](http://github.com/Cadair), [Simon Liedtke](http://github.com/derdon), [Steven Christe](http://github.com/ehsteve) +_Suggested Mentor(s):_ [Stuart Mumford](http://github.com/Cadair), [Simon Liedtke](http://github.com/derdon), [Steven Christe](http://github.com/ehsteve) -*Difficulty:* Intermediate +_Difficulty:_ Intermediate -*Astronomy knowledge needed:* None +_Astronomy knowledge needed:_ None -*Programming skills:* Python, some database design knowledge would be helpful. +_Programming skills:_ Python, some database design knowledge would be helpful. -#### Description +### Description The `database` module provides functionality to users to manage collections of files on disk in a way not reliant upon folder structure and file name. The database allows users to find files on disk by either physical parameters, such as wavelength and time or properties of the instrument such as name and spacecraft. @@ -158,19 +158,22 @@ This project aims to achieve the following things: A successful proposal will schedule updates to the database package in small sections, rather than in one large pull request. The work should be understood and broken down into individual sections. -There are various other maintenance tasks which need undertaking (https://github.com/sunpy/sunpy/labels/Database) which would be a good way for someone interested in this project to familiarise themselves with the codebase. +There are various other maintenance tasks which need undertaking () which would be a good way for someone interested in this project to familiarise themselves with the codebase. + +## GUI to use LCT tools + +_Suggested Mentor(s):_ [Jose Iván Campos Rozo](https://github.com/Hypnus1803) (National Astronomical Observatory, National University of Colombia), Santiago Vargas Domínguez (National Astronomical Observatory, National University of Colombia), [David Pérez Suárez](https://github.com/dpshelio). +_Difficulty:_ Intermediate -### GUI to use LCT tools -*Suggested Mentor(s):* [Jose Iván Campos Rozo](https://github.com/Hypnus1803) (National Astronomical Observatory, National University of Colombia), Santiago Vargas Domínguez (National Astronomical Observatory, National University of Colombia), [David Pérez Suárez](https://github.com/dpshelio). +_Astronomy knowledge needed:_ None -*Difficulty:* Intermediate +_Programming skills:_ Python, basic knowledge of qt4, pyqt4, qt designer -*Astronomy knowledge needed:* None +### Description -*Programming skills:* Python, basic knowledge of qt4, pyqt4, qt designer +The Local Correlation Tracking (LCT, November & Simon, 1988) technique is a robust method used to study the dynamics of structures in a time series of images. By tracking pixel displacements, using a correlation window, LCT can determine proper motions and generate flow maps of horizontal velocities. This procedure is used to study the dynamics of plasma in the solar photosphere at different spatial scales, e.g the analysis of granular and supergranular convective cells, meridional flows, etc. A widget implemented in Python was developed. It generates a user-friendly graphical user interface (GUI) to control various parameters for the process of calculating flow maps of proper motions for a series of filtergrams (data cube). Our purpose is to implement this tool in Sunpy using its structure and to improve it with some more options, i.e. masks, statistics, histograms, contours and multi-plots. Although an initial version is already developed, our proposal is to focus on the efficient integration of the code in the SunPy libraries. The code (without widget files yet) is -#### Description: -The Local Correlation Tracking (LCT, November & Simon, 1988) technique is a robust method used to study the dynamics of structures in a time series of images. By tracking pixel displacements, using a correlation window, LCT can determine proper motions and generate flow maps of horizontal velocities. This procedure is used to study the dynamics of plasma in the solar photosphere at different spatial scales, e.g the analysis of granular and supergranular convective cells, meridional flows, etc. A widget implemented in Python was developed. It generates a user-friendly graphical user interface (GUI) to control various parameters for the process of calculating flow maps of proper motions for a series of filtergrams (data cube). Our purpose is to implement this tool in Sunpy using its structure and to improve it with some more options, i.e. masks, statistics, histograms, contours and multi-plots. Although an initial version is already developed, our proposal is to focus on the efficient integration of the code in the SunPy libraries. The code (without widget files yet) is https://github.com/Hypnus1803/flow_maps +### Expected Outcomes -*Expected Outcomes:* To integate efficiently the code in SunPy libraries. +To integate efficiently the code in SunPy libraries. diff --git a/gsoc/gsoc2016/ideas_yt.md b/src/content/pages/gsoc/2016/ideas_yt.md similarity index 72% rename from gsoc/gsoc2016/ideas_yt.md rename to src/content/pages/gsoc/2016/ideas_yt.md index 3c685daa..16b07afa 100644 --- a/gsoc/gsoc2016/ideas_yt.md +++ b/src/content/pages/gsoc/2016/ideas_yt.md @@ -1,10 +1,11 @@ --- -layout: default -title: "Ideas for yt" +title: "Ideas for yt" show_main: false ideas_team: yt --- +# Ideas for yt + If you are interested in one of the yt ideas, please see the [GSoC 2016 Guidelines](https://bitbucket.org/yt_analysis/yt/wiki/Google%20Summer%20of%20Code%202016%20Guidelines) on the yt bitbucket wiki. @@ -32,19 +33,19 @@ For more information about contributing to yt, take a look at our discussions about past yt projects, take a look at the yt enhancement proposal (YTEP) [listing](https://ytep.readthedocs.org). -### Integrate yt plots with interactive matplotlib backends +## Integrate yt plots with interactive matplotlib backends -*Suggested Mentor(s):* [Nathan Goldbaum](https://bitbucket.org/ngoldbaum), - [Matthew Turk](https://bitbucket.org/MatthewTurk/) +_Suggested Mentor(s):_ [Nathan Goldbaum](https://bitbucket.org/ngoldbaum), +[Matthew Turk](https://bitbucket.org/MatthewTurk/) -*Difficulty:* Intermediate +_Difficulty:_ Intermediate -*Knowledge needed:* Familiarity with matplotlib. Knowledge of matplotlib's - object oriented API a plus. +_Knowledge needed:_ Familiarity with matplotlib. Knowledge of matplotlib's +object oriented API a plus. -*Programming skills:* Python. GUI programming. +_Programming skills:_ Python. GUI programming. -#### Description +### Description Currently, all yt plotting objects have a `show()` method that displays [a version of the plot in Jupyter notebooks](https://gist.github.com/f36b29c340e8516eeae2). This works for the most @@ -66,43 +67,43 @@ This is constrained by maintaining backward compatibility: by default yt should not fail when generating plots on headless devices (e.g. when connecting over SSH to a supercomputer). -*Deliverables:* +_Deliverables:_ -* A proof of concept demonstrating how to hook into matplotlib's interactive +- A proof of concept demonstrating how to hook into matplotlib's interactive backends using the matplotlib object-oriented API, or a way to show how to gracefully fall back to using pyplot instead of the object oriented API. -* A [YTEP](https://ytep.readthedocs.org) describing the proposed approach for +- A [YTEP](https://ytep.readthedocs.org) describing the proposed approach for modifying yt's plotting infrastructure to support matplotlib's interactive plotting backends. -* The implementation for the YTEP submitted as a bitbucket pull request to the +- The implementation for the YTEP submitted as a bitbucket pull request to the main yt repository. -### Improve test coverage and test performance +## Improve test coverage and test performance -*Suggested Mentor(s):* [Kacper Kowalik](https://bitbucket.org/xarthisius), - [Nathan Goldbaum](https://bitbucket.org/ngoldbaum) +_Suggested Mentor(s):_ [Kacper Kowalik](https://bitbucket.org/xarthisius), +[Nathan Goldbaum](https://bitbucket.org/ngoldbaum) -*Difficulty:* Beginner to Advanced, depending on where the student takes the - project +_Difficulty:_ Beginner to Advanced, depending on where the student takes the +project -*Knowledge needed*: Familiarity with the `nose` testing package. +_Knowledge needed_: Familiarity with the `nose` testing package. -*Programming skills:* Python, Cython +_Programming skills:_ Python, Cython -#### Description +### Description Currently yt's test suite is split between unit tests (which take about 45 minutes to run) and answer tests, which are normally only run on a continuous integration server. Altogether the tests only cover about a third of the yt -codebase, so much of the code in yt needs test coverage. Additionally, the +codebase, so much of the code in yt needs test coverage. Additionally, the tests take a long time to run, and we would like to reduce the test runtime while simultaneously increasing code coverage. This project could go in a number of directions: -* Implement a way to retrofit the current tests for different geometries +- Implement a way to retrofit the current tests for different geometries (e.g. cartesian, cylindrical, and spherical coordinates) and data styles (e.g. particle data, as well as various kind of mesh data, including uniform resolution, octree, patch AMR, and unstructured meshes). Ideally this would @@ -110,79 +111,79 @@ This project could go in a number of directions: require learning and improving the "Stream" frontend, which allows the injestion of in-memory data into yt. -* Identify areas of the code that are not well tested and devise tests for +- Identify areas of the code that are not well tested and devise tests for them. This will require measuring the test coverage of yt's Python and Cython components. The student working on this will need to gain familiarity with untested or undertested parts of the codebase and add new tests. Optimally the new tests will make use of new reusable infrastructure that will be helpful for tests across the yt codebase. -* Improve volume rendering and visualization unit tests. Right now visualization +- Improve volume rendering and visualization unit tests. Right now visualization tests rely heavily on answer testing and image comparison. It would be more flexible and easier to understand when things go wrong if the tests instead compared with a predicted answer using some sort of simplified geometry or via introspection. -*Deliverables*: +_Deliverables_: -* Develop a framework for measuring test covering in yt's python and cython +- Develop a framework for measuring test covering in yt's python and cython components. Triage the reports to look for areas that are user facing and have poor test coverage. -* Make a number of pull requests adding tests across the yt codebase. +- Make a number of pull requests adding tests across the yt codebase. -* Modify existing testing infrastructure or develop new test infrastructure to +- Modify existing testing infrastructure or develop new test infrastructure to improve testing of yt functionality on different data types. -### Domain contexts and domain-specific fields +## Domain contexts and domain-specific fields -*Suggested Mentor(s):* [Britton Smith](https://bitbucket.org/brittonsmith), - [Matthew Turk](https://bitbucket.org/matthewturk) +_Suggested Mentor(s):_ [Britton Smith](https://bitbucket.org/brittonsmith), +[Matthew Turk](https://bitbucket.org/matthewturk) -*Difficulty:* Beginner to Intermediate +_Difficulty:_ Beginner to Intermediate -*Knowledge needed*: Undergrad level Physics knowledge. More specific - domain-specific knowledge of astronomy, hydrodynamics, finite-element methods, - GIS, meteorology, geophysics, oceanography a plus +_Knowledge needed_: Undergrad level Physics knowledge. More specific +domain-specific knowledge of astronomy, hydrodynamics, finite-element methods, +GIS, meteorology, geophysics, oceanography a plus -*Programming skills:* Python +_Programming skills:_ Python The original focus of yt was to analyze datasets from astrophysical -simulations. However, use of yt has been expanding to other +simulations. However, use of yt has been expanding to other scientific domains, such as nuclear physics, meteorology, and -geophysics. Still, much of the infrastructure within yt is built upon +geophysics. Still, much of the infrastructure within yt is built upon the assumption that the datasets being loaded are astrophysical and -hydrodynamic in nature. This assumption informs the choice of derived +hydrodynamic in nature. This assumption informs the choice of derived fields made available to the user as well as the default unit system. For example, fields such as "Jeans mass" and "X-ray emissivity" in CGS units are of little use to an earthquake simulation. The goal of this project is to develop a system for domain contexts, sets of fields and unit systems associated with specific scientific -domains. Rather than having all fields be made available to all +domains. Rather than having all fields be made available to all datasets, each dataset is given a domain context, which specifies the -relevant fields and most meaningful unit system. Domain contexts +relevant fields and most meaningful unit system. Domain contexts could also be subclassed to provide further specificity, for example, cosmology as a subclass of astrophysics. -*Deliverables:* +_Deliverables:_ -* For each of the existing frontends, identify the relevant field +- For each of the existing frontends, identify the relevant field plugins. Create a data structure to associate with each frontend that lists only the relevant plugins. Take the field plugin loading machinery, which currently just loops over all plugins, and have it only load plugins relevant to the loaded frontend. -* With the above as an example, identify and document all of the places in the +- With the above as an example, identify and document all of the places in the code where the domain is assumed to be astronomy. Use this to come up with a set of attributes that minimally describe a scientific domain, i.e., list of field plugins, unit system, etc. -* Write up a [YTEP](https://ytep.readthedocs.org) describing the proposed design +- Write up a [YTEP](https://ytep.readthedocs.org) describing the proposed design and ideas for implementation. Should identify an initial set of domain contexts, sort fields into domain contexts, and sketch how frontends should declare needed domain contexts. -* Create a domain context class with the identified attributes. Implement an +- Create a domain context class with the identified attributes. Implement an Base, astronomy, and possibly a nuclear engineering domain context and associate it with the existing frontends. diff --git a/_projects/2017/astropy/astroplan-speed.md b/src/content/pages/gsoc/2017/astropy/astroplan-speed.md similarity index 69% rename from _projects/2017/astropy/astroplan-speed.md rename to src/content/pages/gsoc/2017/astropy/astroplan-speed.md index c1544eeb..2fcbbd16 100644 --- a/_projects/2017/astropy/astroplan-speed.md +++ b/src/content/pages/gsoc/2017/astropy/astroplan-speed.md @@ -2,30 +2,30 @@ name: Pedal to the metal for astroplan desc: Profiling and speeding up observation scheduling with astroplan and astropy requirements: - - Python - - Observational astronomy experience may be helpful, but not required + - Python + - Observational astronomy experience may be helpful, but not required difficulty: Intermediate -mentors: - - bmorris3 - - stuartlittlefair - - eteq +mentors: + - bmorris3 + - stuartlittlefair + - eteq initiatives: - - GSOC + - GSOC tags: - - python - - astroplan + - python + - astroplan collaborating_projects: - - astropy - - astroplan + - astropy + - astroplan --- #### Description You want to schedule observations of one thousand targets over the next month. You are given one hour. Can you help us make astroplan the tool that's up to the task? -Last summer's astroplan GSoC student began implementing a module for [scheduling astronomical observations](http://astroplan.readthedocs.io/en/latest/tutorials/scheduling.html). These scheduling operations require many calls to basic coordinate calculations – e.g. when does this target rise/set? – which can be optimized at several places within astropy core in the [`SkyCoord`](http://docs.astropy.org/en/stable/api/astropy.coordinates.SkyCoord.html) object and within the astroplan package to speed up astroplan's schedulers. Some goals of this project are to: +Last summer's astroplan GSoC student began implementing a module for [scheduling astronomical observations](http://astroplan.readthedocs.io/en/latest/tutorials/scheduling.html). These scheduling operations require many calls to basic coordinate calculations - e.g. when does this target rise/set? - which can be optimized at several places within astropy core in the [`SkyCoord`](http://docs.astropy.org/en/stable/api/astropy.coordinates.SkyCoord.html) object and within the astroplan package to speed up astroplan's schedulers. Some goals of this project are to: 1. Profile astroplan's rise/set functions and identify inefficiencies in the `SkyCoord` object 2. Make efficiency improvements wherever possible with the findings of Step 1 3. Design/implement an API for accessing simple trigonometric rise/set calculations within astroplan's schedulers (this is where some observational astronomy experience would be handy) -4. Test improved astroplan against some target use cases. We'd like to generate schedules for thousands of targets in a reasonable amounts of time, like those required by the [LCOGT](https://lco.global) operators. +4. Test improved astroplan against some target use cases. We'd like to generate schedules for thousands of targets in a reasonable amounts of time, like those required by the [LCOGT](https://lco.global) operators. diff --git a/_projects/2017/astropy/astroquery.md b/src/content/pages/gsoc/2017/astropy/astroquery.md similarity index 80% rename from _projects/2017/astropy/astroquery.md rename to src/content/pages/gsoc/2017/astropy/astroquery.md index 95f70a50..51e56291 100644 --- a/_projects/2017/astropy/astroquery.md +++ b/src/content/pages/gsoc/2017/astropy/astroquery.md @@ -2,24 +2,24 @@ name: Add additional archives to astroquery desc: Implement module(s) to access currently unsupported astronomical archives using astroquery. requirements: - - Python - - Basic understanding of web queries and APIs + - Python + - Basic understanding of web queries and APIs difficulty: low issues: - - https://github.com/astropy/astroquery/issues/226 -mentors: - - keflavich - - eteq - - bsipocz - - pllim + - https://github.com/astropy/astroquery/issues/226 +mentors: + - keflavich + - eteq + - bsipocz + - pllim initiatives: - - GSOC + - GSOC tags: - - python - - astropquery + - python + - astropquery collaborating_projects: - - astropy - - astroquery + - astropy + - astroquery --- #### Description @@ -32,12 +32,10 @@ A list of new services that have been suggested by our users [can be found here](https://github.com/astropy/astroquery/issues?q=is%3Aissue+is%3Aopen+label%3A%22New+Service%22) and in [this summary issue](https://github.com/astropy/astroquery/issues/226). - -A *possible* set of milestones for any particular one of these modules might be: +A _possible_ set of milestones for any particular one of these modules might be: 1. Research the web API for the archive sufficiently to determine what exactly astroquery should expose. 2. Determine the best interface to access the simplest subset of that archive that would be useful. 3. Create an astroquery module to actually implement that interface. 4. Add tests to ensure the module works correctly. 5. Generalize that architecture to extend to other data products from the archive - e.g. repeat 1-4 until all useful functionality in the module is complete. - diff --git a/_projects/2017/astropy/astrowidgets.md b/src/content/pages/gsoc/2017/astropy/astrowidgets.md similarity index 71% rename from _projects/2017/astropy/astrowidgets.md rename to src/content/pages/gsoc/2017/astropy/astrowidgets.md index e82a2351..34c6ef67 100644 --- a/_projects/2017/astropy/astrowidgets.md +++ b/src/content/pages/gsoc/2017/astropy/astrowidgets.md @@ -2,20 +2,20 @@ name: Jupyter widgets for Astropy desc: Create "astrowidgets" - Jupyter widgets for Astropy. requirements: - - Python - - Very basic knowledge of CSS. - - Basic understanding of javascript. + - Python + - Very basic knowledge of CSS. + - Basic understanding of javascript. difficulty: low to intermediate -mentors: - - mwcraig +mentors: + - mwcraig initiatives: - - GSOC + - GSOC tags: - - python - - javascript + - python + - javascript collaborating_projects: - - astropy - - astrowidgets + - astropy + - astrowidgets --- #### Description @@ -26,15 +26,15 @@ The final deliverable for the project will be a new package ready for applicatio Some of the deliverables for this project would be widget interfaces for: -+ A FITS image viewer utilizing the affiliated package [ginga](https://github.com/ejeschke/ginga) to handle the image display. This widget should allow for overlays of sources from catalogs (using [astroquery](https://github.com/astropy/astroquery)), selection of sources in the image using a mouse, and user-configurable key bindings. -+ Point source detection and photometry using either [photutils](https://github.com/astropy/photutils) or [sep](https://github.com/kbarbary/sep). -+ Observation planning using [astroplan](https://github.com/astropy/astroplan). +- A FITS image viewer utilizing the affiliated package [ginga](https://github.com/ejeschke/ginga) to handle the image display. This widget should allow for overlays of sources from catalogs (using [astroquery](https://github.com/astropy/astroquery)), selection of sources in the image using a mouse, and user-configurable key bindings. +- Point source detection and photometry using either [photutils](https://github.com/astropy/photutils) or [sep](https://github.com/kbarbary/sep). +- Observation planning using [astroplan](https://github.com/astropy/astroplan). In addition, these Jupyter notebooks will be developed: -+ Sample notebooks demonstrating how to compose the widgets into applications. -+ An image reduction notebook, similar to [reducer](https://github.com/mwcraig/reducer). -+ A photometry notebook for source detection and photometry. -+ A notebook for performing differential photometry on a time series of measurements. +- Sample notebooks demonstrating how to compose the widgets into applications. +- An image reduction notebook, similar to [reducer](https://github.com/mwcraig/reducer). +- A photometry notebook for source detection and photometry. +- A notebook for performing differential photometry on a time series of measurements. Preliminary development of this project is already underway, so some of the specific deliverables might have changed by the beginning of the summer of code. diff --git a/_projects/2017/astropy/coord-velocities.md b/src/content/pages/gsoc/2017/astropy/coord-velocities.md similarity index 75% rename from _projects/2017/astropy/coord-velocities.md rename to src/content/pages/gsoc/2017/astropy/coord-velocities.md index 9f640a8a..86be7df0 100644 --- a/_projects/2017/astropy/coord-velocities.md +++ b/src/content/pages/gsoc/2017/astropy/coord-velocities.md @@ -2,21 +2,21 @@ name: Velocities in Astropy coordinates desc: Implement framework for handling velocities and velocity transforms in astropy.coordinates. requirements: - - Python - - Some knowledge of coordinate transformations. - - Background in astronomical velocity frames and how they are used (helpful but not necessarily a strict requirement). + - Python + - Some knowledge of coordinate transformations. + - Background in astronomical velocity frames and how they are used (helpful but not necessarily a strict requirement). difficulty: Expert -mentors: - - mhvk - - eteq - - adrn +mentors: + - mhvk + - eteq + - adrn initiatives: - - GSOC + - GSOC tags: - - python - - astropy core + - python + - astropy core collaborating_projects: - - astropy + - astropy --- #### Description diff --git a/_projects/2017/astropy/ds9-regions.md b/src/content/pages/gsoc/2017/astropy/ds9-regions.md similarity index 90% rename from _projects/2017/astropy/ds9-regions.md rename to src/content/pages/gsoc/2017/astropy/ds9-regions.md index 485d632c..e4314b0a 100644 --- a/_projects/2017/astropy/ds9-regions.md +++ b/src/content/pages/gsoc/2017/astropy/ds9-regions.md @@ -3,18 +3,18 @@ name: Complete the ds9 region file reader/writer desc: Implement a reader and writer for the ds9 regions file format. # add a description of your project requirements: - - Python + - Python difficulty: low to intermediate -mentors: - - keflavich - - cdeil +mentors: + - keflavich + - cdeil initiatives: - - GSOC + - GSOC tags: - - python - - regions + - python + - regions collaborating_projects: - - astropy + - astropy --- #### Description diff --git a/_projects/2017/astropy/fits-table-wcs.md b/src/content/pages/gsoc/2017/astropy/fits-table-wcs.md similarity index 73% rename from _projects/2017/astropy/fits-table-wcs.md rename to src/content/pages/gsoc/2017/astropy/fits-table-wcs.md index 7f6c7bd7..adbb730c 100644 --- a/_projects/2017/astropy/fits-table-wcs.md +++ b/src/content/pages/gsoc/2017/astropy/fits-table-wcs.md @@ -1,28 +1,28 @@ --- name: Seamless Combination of SkyCoord, Table, WCS, and FITS -desc: +desc: requirements: - - Python - - Some familiarity with FITS files + - Python + - Some familiarity with FITS files difficulty: intermediate issues: - - https://github.com/astropy/astropy/issue/5626 -mentors: - - hamogu - - taldcroft - - eteq + - https://github.com/astropy/astropy/issue/5626 +mentors: + - hamogu + - taldcroft + - eteq initiatives: - - GSOC + - GSOC tags: - - python - - astropy core + - python + - astropy core collaborating_projects: - - astropy + - astropy --- #### Description -Here is a common astronomical problem: I have a table with objects on the sky, each of which has a flux and an observation time. I match them with some other photometric catalog and them compute certain values (e.g. the mass, the age and the accretion rate). I store all that in the table. Astropy offers a lot of classes to make this easier, for example coordinates that know how to transform between different coordinate systems. +Here is a common astronomical problem: I have a table with objects on the sky, each of which has a flux and an observation time. I match them with some other photometric catalog and them compute certain values (e.g. the mass, the age and the accretion rate). I store all that in the table. Astropy offers a lot of classes to make this easier, for example coordinates that know how to transform between different coordinate systems. Once I write my publication, I need to store that table as a fits file and print it out to LaTeX. This is where the problem comes: Each of the special objects (coordinates, times, units) has metadata that does not easily fit into the data column. Astropy grew out of several independent pacakges (pyfits, asciitable) that each did one thing well, but were not very easy to interoperate. Astropy has (mostly) unified the interface, but functionally components still work separately. In this project, you will makes things interoperable. For the example above, you need to develop a protocol that allows storage of coordinates and times in fits and ascii tables. @@ -33,6 +33,6 @@ This project the following stages: - Find breaks in the workflow as described in the example above. - Define protocols for meta data that make it work between different packages. - Solicit feedback from the community on those protocols. -- Implement code and test cases. +- Implement code and test cases. - Test and document the steps above. - Add an [astropy tutorials](http://tutorials.astropy.org) and update Astropy core package documentation to show the new capabilities. diff --git a/_projects/2017/astropy/hips.md b/src/content/pages/gsoc/2017/astropy/hips.md similarity index 86% rename from _projects/2017/astropy/hips.md rename to src/content/pages/gsoc/2017/astropy/hips.md index 6485caba..80396a35 100644 --- a/_projects/2017/astropy/hips.md +++ b/src/content/pages/gsoc/2017/astropy/hips.md @@ -2,24 +2,24 @@ name: HIPS to Py desc: Write a Python client for Hierarchical Progressive Surveys (HIPS) requirements: - - Have Python / Numpy / Astropy skills - - Know how to write tests with pytest and docs with Sphinx - - Some open source experience - - Some image processing experience - - Interest in spherical geometry and HEALPIX / HIPS + - Have Python / Numpy / Astropy skills + - Know how to write tests with pytest and docs with Sphinx + - Some open source experience + - Some image processing experience + - Interest in spherical geometry and HEALPIX / HIPS difficulty: Intermediate to high -mentors: - - cdeil - - tboch +mentors: + - cdeil + - tboch initiatives: - - GSOC + - GSOC tags: - - python - - regions - - web - - math + - python + - regions + - web + - math collaborating_projects: - - astropy + - astropy --- #### Description diff --git a/_projects/2017/astropy/performance.md b/src/content/pages/gsoc/2017/astropy/performance.md similarity index 78% rename from _projects/2017/astropy/performance.md rename to src/content/pages/gsoc/2017/astropy/performance.md index 9d88646f..26362b6c 100644 --- a/_projects/2017/astropy/performance.md +++ b/src/content/pages/gsoc/2017/astropy/performance.md @@ -2,33 +2,34 @@ name: Improve astropy performance in a sustainable way desc: Increase the air speed velocity of Astropy core. requirements: - - Python - - Cython - - C - - web + - Python + - Cython + - C + - web difficulty: Intermediate -mentors: - - taldcroft +mentors: + - taldcroft initiatives: - - GSOC + - GSOC tags: - - python - - astropy core + - python + - astropy core collaborating_projects: - - astropy + - astropy --- + #### Description The Astropy core package was designed and implemented with priority placed on -good code structure, long-term maintainability, and code correctness. Currently +good code structure, long-term maintainability, and code correctness. Currently the package is nearly six years old and this strategy has proved its merit. Nevertheless, development decisions along the way often sacrificed performance -in favor of clean or simple implementation. At this point as a relatively +in favor of clean or simple implementation. At this point as a relatively mature project with wide community adoption it makes sense to profile both the astronomical user community and the code to find areas where -performance issues need to be addressed. In many cases there is "low-hanging +performance issues need to be addressed. In many cases there is "low-hanging fruit" where simple solutions like caching or initialization fixes can -yield factors-of-many improvement. In other areas there may be need for +yield factors-of-many improvement. In other areas there may be need for more substantial changes and even reimplementation using Cython or C. One of the key available technologies for performance evaluation is the asv (Air @@ -41,8 +42,8 @@ prevent performance regressions from getting into the code base. This GSoC project thus has the following high-level steps: - Poll the astropy user community for their perspectives on performance - bottlenecks in astropy. Engage in discussion and develop a prioritized - list of areas to improve. A minimal list of known issues right now + bottlenecks in astropy. Engage in discussion and develop a prioritized + list of areas to improve. A minimal list of known issues right now includes coordinate initialization, iteration, and table / column creation. - Work on asv (performance testing suite) to make it easy to run relevant tests diff --git a/_projects/2017/astropy/test-helper.md b/src/content/pages/gsoc/2017/astropy/test-helper.md similarity index 82% rename from _projects/2017/astropy/test-helper.md rename to src/content/pages/gsoc/2017/astropy/test-helper.md index c702cc5e..3dc3d482 100644 --- a/_projects/2017/astropy/test-helper.md +++ b/src/content/pages/gsoc/2017/astropy/test-helper.md @@ -2,23 +2,23 @@ name: Astropy Test Helper as a Separate Package desc: Re-implement Astropy Test Helper as Separate Installable Package requirements: - - Python packaging experience. - - familiarity with pytest + - Python packaging experience. + - familiarity with pytest difficulty: Intermediate to Advanced issues: - - https://github.com/astropy/astropy/pull/5770 -mentors: - - pllim - - bsipocz - - Cadair + - https://github.com/astropy/astropy/pull/5770 +mentors: + - pllim + - bsipocz + - Cadair initiatives: - - GSOC + - GSOC tags: - - python - - astropy - - pytest + - python + - astropy + - pytest collaborating_projects: - - astropy + - astropy --- #### Description diff --git a/src/content/pages/gsoc/2017/casacore/testing.md b/src/content/pages/gsoc/2017/casacore/testing.md new file mode 100644 index 00000000..3d1347f9 --- /dev/null +++ b/src/content/pages/gsoc/2017/casacore/testing.md @@ -0,0 +1,30 @@ +--- +name: Casacore testing +desc: Improve the test coverage of the python wrappers around casacore, and possibly add some python functionality +# add a description of your project +requirements: + - Proficiency in Python +difficulty: intermediate +issues: + - https://github.com/casacore/python-casacore/issues/6 + - https://github.com/casacore/python-casacore/issues/60 +mentors: + - tammojan + - gijzelaerr +initiatives: + - GSOC +tags: + - python casacore testing +collaborating_projects: + - casacore +--- + +#### Description + +Python-casacore is a set of Python bindings for [casacore] (), a c++ library used in radio astronomy. This python binding to casacore is now python 3 compatible, contains some unit tests, etc. But some work remains to be done: + +- Remove all compile warnings +- Modernise code, add missing features, maybe more ‘pythonic’. +- Improve test coverage (24% at the moment) + +This is a typical project to learn making good code. diff --git a/_projects/2017/glue/notebook.md b/src/content/pages/gsoc/2017/glue/notebook.md similarity index 87% rename from _projects/2017/glue/notebook.md rename to src/content/pages/gsoc/2017/glue/notebook.md index c12e5480..1448e4b6 100644 --- a/_projects/2017/glue/notebook.md +++ b/src/content/pages/gsoc/2017/glue/notebook.md @@ -3,21 +3,22 @@ name: Glue notebook viewers desc: Make it possible to use glue from the Jupyter notebook by developing notebook-based data viewers. This will make it possible to also use glue remotely, and will be a widely used feature! # add a description of your project requirements: - - Proficiency in Python - - Familiarity with the Jupyter notebook + - Proficiency in Python + - Familiarity with the Jupyter notebook difficulty: high issues: - - https://github.com/glue-viz/glue/issues/1226 + - https://github.com/glue-viz/glue/issues/1226 mentors: - - astrofrog - - eteq + - astrofrog + - eteq initiatives: - - GSOC + - GSOC tags: - - python + - python collaborating_projects: - - glue + - glue --- + #### Description At the moment, the main way users use glue is via the Qt-based application. diff --git a/_projects/2017/glue/widgets.md b/src/content/pages/gsoc/2017/glue/widgets.md similarity index 54% rename from _projects/2017/glue/widgets.md rename to src/content/pages/gsoc/2017/glue/widgets.md index 51ed412c..779f9da5 100644 --- a/_projects/2017/glue/widgets.md +++ b/src/content/pages/gsoc/2017/glue/widgets.md @@ -3,34 +3,35 @@ name: New glue widgets desc: Expand the functionality of glue by developing a range of new widgets, including to better read in and edit data. # add a description of your project requirements: - - Proficiency in Python - - Familiarity with GUI programming, ideally Qt + - Proficiency in Python + - Familiarity with GUI programming, ideally Qt difficulty: medium issues: - - https://github.com/glue-viz/glue/issues/836 - - https://github.com/glue-viz/glue/issues/981 - - https://github.com/glue-viz/glue/issues/1073 + - https://github.com/glue-viz/glue/issues/836 + - https://github.com/glue-viz/glue/issues/981 + - https://github.com/glue-viz/glue/issues/1073 mentors: - - astrofrog + - astrofrog initiatives: - - GSOC + - GSOC tags: - - python + - python collaborating_projects: - - glue + - glue --- + #### Description This project is to develop new widgets/dialogs inside glue. Examples include: -* A dialog that would be useful beyond this project is a dialog for importing +- A dialog that would be useful beyond this project is a dialog for importing ASCII tables into glue, similar to the CSV import functionality in e.g. OpenOffice/LibreOffice or Excel. -* A dialog that allows the user to edit components of a datasets, including +- A dialog that allows the user to edit components of a datasets, including renaming them, sorting them, and changing datatypes. -* A dialog that can be used to re-order categorical components +- A dialog that can be used to re-order categorical components -* A dialog to visually create simple selections (for example that a specific +- A dialog to visually create simple selections (for example that a specific component should be in a certain range) diff --git a/src/content/pages/gsoc/2017/index.md b/src/content/pages/gsoc/2017/index.md new file mode 100644 index 00000000..51e590dc --- /dev/null +++ b/src/content/pages/gsoc/2017/index.md @@ -0,0 +1,5 @@ +--- +title: "Ideas page for Google Summer of Code 2017" +show_main: false +season: 2017 +--- diff --git a/_projects/2017/juliaastro/astrolib.md b/src/content/pages/gsoc/2017/juliaastro/astrolib.md similarity index 74% rename from _projects/2017/juliaastro/astrolib.md rename to src/content/pages/gsoc/2017/juliaastro/astrolib.md index 1a95bf1e..e63a5242 100644 --- a/_projects/2017/juliaastro/astrolib.md +++ b/src/content/pages/gsoc/2017/juliaastro/astrolib.md @@ -2,26 +2,26 @@ name: Porting the IDL Astronomy User's Library to Julia desc: Expand the ecosystem of astronomical routines in Julia language. requirements: - - Julia - - IDL - - Knowledge of astronomy is beneficial, but not required + - Julia + - IDL + - Knowledge of astronomy is beneficial, but not required difficulty: low to intermediate mentors: - - giordano - - kbarbary + - giordano + - kbarbary initiatives: - - GSOC + - GSOC tags: - - julia + - julia collaborating_projects: - - JuliaAstro + - JuliaAstro --- #### Description [Julia](http://julialang.org/) is a programming language designed for technical computing that combines ease-of-use of dynamical languages and high-performance -of statically-compiled languages like C. Its most notable feature +of statically-compiled languages like C. Its most notable feature is [multiple dispatch](http://en.wikipedia.org/wiki/Multiple_dispatch), which greatly simplifies the definition of complex functions whose behavior depends on the type of the arguments. @@ -35,24 +35,24 @@ The goal of this project is to expand the [AstroLib.jl](https://github.com/JuliaAstro/AstroLib.jl) package, which bundles generic astronomical and astrophysical functions, mainly ported from the [IDL Astronomy User's Library](https://idlastro.gsfc.nasa.gov/homepage.html) -(a.k.a. AstroLib). You should focus on porting the astronomical utilities -first. If you don't know where to start from, have a look at: +(a.k.a. AstroLib). You should focus on porting the astronomical utilities +first. If you don't know where to start from, have a look at: -* the +- the [AstroLib.jl manual](https://juliaastro.github.io/AstroLib.jl/latest/index.html) -* the [TODO list](https://github.com/JuliaAstro/AstroLib.jl/blob/master/TODO.md) - of the project, with the list of *all* functions in IDL AstroLib not yet +- the [TODO list](https://github.com/JuliaAstro/AstroLib.jl/blob/master/TODO.md) + of the project, with the list of _all_ functions in IDL AstroLib not yet ported -* the list +- the list of [Astronomical Utilities](https://idlastro.gsfc.nasa.gov/contents.html) in IDL AstroLib While an experience with programming in Julia would be helpful, this is not necessary, but you should get acquainted with the language before the coding -period. If you are a Julia newbie, check out +period. If you are a Julia newbie, check out the [Manual](http://docs.julialang.org/en/latest/index.html), in particular the [performance tips](https://docs.julialang.org/en/latest/manual/performance-tips/) and the [style guide](https://docs.julialang.org/en/latest/manual/style-guide/). -[Here](http://julialang.org/learning/) you may find other useful resources. +[Other Julia learning resources](http://julialang.org/learning/) are available as well. diff --git a/_projects/2017/sunpy/drms.md b/src/content/pages/gsoc/2017/sunpy/drms.md similarity index 69% rename from _projects/2017/sunpy/drms.md rename to src/content/pages/gsoc/2017/sunpy/drms.md index be257810..70e04d6b 100644 --- a/_projects/2017/sunpy/drms.md +++ b/src/content/pages/gsoc/2017/sunpy/drms.md @@ -2,24 +2,24 @@ name: DRMS Module for JSOC Downloads desc: Improve the drms package and the SunPy JSOC client, requirements: - - Familiarity with Python class development. + - Familiarity with Python class development. difficulty: medium issues: - - https://github.com/kbg/drms/issues/3 - - https://github.com/sunpy/sunpy/issues/1909 -mentors: - - Cadair - - kbg - - mbobra + - https://github.com/kbg/drms/issues/3 + - https://github.com/sunpy/sunpy/issues/1909 +mentors: + - Cadair + - kbg + - mbobra initiatives: - - GSOC - - SoCiS + - GSOC + - SoCiS tags: -- sunpy -- python + - sunpy + - python collaborating_projects: - - sunpy - - drms + - sunpy + - drms --- #### Description @@ -40,7 +40,7 @@ the majority of the drms functionality through the unified search API of SunPy. While the SunPy implementation would not need to provide all the features of the drms library, it would strive to provide a simple API for most queries supported by drms. One high-priority feature that should be availble in SunPy is the -ability to query drms series for which the prime key is not ``T_REC``, also it +ability to query drms series for which the prime key is not `T_REC`, also it should be possible to download only the metadata from drms without downloading the associated image data. @@ -48,26 +48,24 @@ Finally, documentation in SunPy should be improved to detail much more of the JSOC functionality. This should include API documentation, narrative documentation in the guide and examples in the gallery. - #### Milestones ##### GSOC 2017 CODING STARTS -* Have familiarised yourself with the drms module, the `sunpy.net.jsoc` and `sunpy.net.Fido` submodules. -* Become comfortable with writing tests in pytest, and using mock. +- Have familiarised yourself with the drms module, the `sunpy.net.jsoc` and `sunpy.net.Fido` submodules. +- Become comfortable with writing tests in pytest, and using mock. ##### GSOC 2017 MIDTERM -* Have developed a test suite for drms. -* Have worked with the mentors to enable CI testing and build a conda package for the drms library. - -##### GSOC 2017 FINAL +- Have developed a test suite for drms. +- Have worked with the mentors to enable CI testing and build a conda package for the drms library. -* Have completed a rework of the `sunpy.net.jsoc` module to use the features of drms. +##### GSOC 2017 FINAL +- Have completed a rework of the `sunpy.net.jsoc` module to use the features of drms. ##### Additional Resources -* [drms Tutorial](https://drms.readthedocs.io/en/stable/tutorial.html) -* [SHARP Example](https://nbviewer.jupyter.org/github/kbg/ipynbs/blob/master/hminuggets/sharp_imgdata.ipynb) -* [Metadata example](https://nbviewer.jupyter.org/github/mbobra/calculating-spaceweather-keywords/blob/master/plot_swx_d3.ipynb) +- [drms Tutorial](https://drms.readthedocs.io/en/stable/tutorial.html) +- [SHARP Example](https://nbviewer.jupyter.org/github/kbg/ipynbs/blob/master/hminuggets/sharp_imgdata.ipynb) +- [Metadata example](https://nbviewer.jupyter.org/github/mbobra/calculating-spaceweather-keywords/blob/master/plot_swx_d3.ipynb) diff --git a/_projects/2017/sunpy/iris.md b/src/content/pages/gsoc/2017/sunpy/iris.md similarity index 53% rename from _projects/2017/sunpy/iris.md rename to src/content/pages/gsoc/2017/sunpy/iris.md index 82f6d5e9..b8203d7e 100644 --- a/_projects/2017/sunpy/iris.md +++ b/src/content/pages/gsoc/2017/sunpy/iris.md @@ -2,21 +2,21 @@ name: SunPy IRIS Data class desc: Develop tools to read in and analyze IRIS image and spectral data using SunPy. requirements: - - Familiarity with Python class development. - - (Optional) A knowledge of the Interactive Data Language (IDL) would be useful, but not requried. + - Familiarity with Python class development. + - (Optional) A knowledge of the Interactive Data Language (IDL) would be useful, but not requried. difficulty: medium issues: -mentors: - - ehsteve - - DanRyanIrish +mentors: + - ehsteve + - DanRyanIrish initiatives: - - GSOC - - SoCiS + - GSOC + - SoCiS tags: -- sunpy -- python + - sunpy + - python collaborating_projects: - - sunpy + - sunpy --- #### Description @@ -39,28 +39,28 @@ using SunPy. This includes the following tasks: and analyzed in a convenient way. 2. Develop and test an IRISRaster class to read in, combine and -analyze IRIS spectra from different raster positions. + analyze IRIS spectra from different raster positions. 3. Using the two classes developed above, build an IRISObservation container class to allow users to easily associate co-temporal slit-jaw images and spectra. -*Optional:* Although the IRIS instrument team has calibrated the - publicly available IRIS data, finer tuning of this calibration can be - helpful for advanced data analysis. Tools to do this have been - developed by the IRIS team in the Interactive Data Language (IDL), - but no such tools exist in Python. Depending on the progress and - preference of the student, these tools can be developed in Python as - part of this project. This would include the following tasks: +_Optional:_ Although the IRIS instrument team has calibrated the +publicly available IRIS data, finer tuning of this calibration can be +helpful for advanced data analysis. Tools to do this have been +developed by the IRIS team in the Interactive Data Language (IDL), +but no such tools exist in Python. Depending on the progress and +preference of the student, these tools can be developed in Python as +part of this project. This would include the following tasks: 1. Develop and test a function for residual wavelength calibration. -This already exists in IDL. + This already exists in IDL. 2. Develop and test a function to calculate the IRIS response -function. This already exists in IDL but not Python. + function. This already exists in IDL but not Python. 3. Using the IRIS response function code, develop a function to - convert IRIS data into physical units. This already exists in IDL + convert IRIS data into physical units. This already exists in IDL but not Python. A good proposal would demonstrate that the student is familiar with @@ -68,35 +68,34 @@ the Xarray package. ##### Expected Outcomes -* IRIS MapSequence class -* IRISRaster class -* IRISObservation class - +- IRIS MapSequence class +- IRISRaster class +- IRISObservation class #### Milestones ##### GSOC 2017 CODING STARTS -* Have familiarised yourself with the basics of IRIS data through the -resources below and Python classes nd the Xarray package. -* Have worked with the mentors to get the package repository setup on -GitHub. +- Have familiarised yourself with the basics of IRIS data through the + resources below and Python classes nd the Xarray package. +- Have worked with the mentors to get the package repository setup on + GitHub. ##### GSOC 2017 MIDTERM -* Have developed an IRISMapSequence object and submitted a PR. -* Have started work on an IRISRaster object. +- Have developed an IRISMapSequence object and submitted a PR. +- Have started work on an IRISRaster object. -##### GSOC 2017 FINAL +##### GSOC 2017 FINAL -* Have got IRISMapSequence PR accepted. -* Have completed development of an IRISRaster object and have a PR -ready submitted and ready to be accepted. -* Have completed development of an IRISObservation object and have -opened a PR. +- Have got IRISMapSequence PR accepted. +- Have completed development of an IRISRaster object and have a PR + ready submitted and ready to be accepted. +- Have completed development of an IRISObservation object and have + opened a PR. ##### Additional Resources -* [IRIS website](http://iris.lmsal.com/) -* [IRIS instrument paper](https://www.lmsal.com/iris_science/doc?cmd=dcur&proj_num=IS0196&file_type=pdf) -* [Guide to IRIS data analysis](http://iris.lmsal.com/itn26/itn26.pdf) +- [IRIS website](http://iris.lmsal.com/) +- [IRIS instrument paper](https://www.lmsal.com/iris_science/doc?cmd=dcur&proj_num=IS0196&file_type=pdf) +- [Guide to IRIS data analysis](http://iris.lmsal.com/itn26/itn26.pdf) diff --git a/_projects/2017/sunpy/mag_field.md b/src/content/pages/gsoc/2017/sunpy/mag_field.md similarity index 65% rename from _projects/2017/sunpy/mag_field.md rename to src/content/pages/gsoc/2017/sunpy/mag_field.md index 214ed3e4..72c2a999 100644 --- a/_projects/2017/sunpy/mag_field.md +++ b/src/content/pages/gsoc/2017/sunpy/mag_field.md @@ -3,33 +3,34 @@ name: 3D Map Class for Field Extrapolations in Spherical Coordinates desc: Generalize magnetic field extrapolation to spherical coordinates in `solarbextrapolation` package with a "coordinate-aware" 3D Map-like object. # add a short one line description of your project requirements: -# Student requirements: - - Knowledge of vector calculus and differential equations - - Familiar with numerical methods - - Some familiarity with electromagnetism, MHD, potential/force-free magnetic fields (optional) + # Student requirements: + - Knowledge of vector calculus and differential equations + - Familiar with numerical methods + - Some familiarity with electromagnetism, MHD, potential/force-free magnetic fields (optional) difficulty: intermediate issues: -# Related issues (if any) to this project. - - https://github.com/sunpy/solarbextrapolation/issues/12 + # Related issues (if any) to this project. + - https://github.com/sunpy/solarbextrapolation/issues/12 mentors: -# First person in contact; mentors may change before project starts. - - Alex-Ian-Hamilton - - wtbarnes + # First person in contact; mentors may change before project starts. + - Alex-Ian-Hamilton + - wtbarnes initiatives: - - GSOC - - SOCIS + - GSOC + - SOCIS tags: - - python - - numba - - numpy + - python + - numba + - numpy collaborating_projects: -# suborganisation(s) to which this project belongs. - - sunpy + # suborganization(s) to which this project belongs. + - sunpy --- + #### Description Determining the 3D geometry of the tangled and dynamic coronal magnetic field is an open research problem in solar physics. -A common technique for deriving the 3D vector field from a photospheric magnetogram is to assume a *potential* field such that it can be derived by solving Laplace's equation. +A common technique for deriving the 3D vector field from a photospheric magnetogram is to assume a _potential_ field such that it can be derived by solving Laplace's equation. The SunPy-affiliated [`solarbextrapolation`](https://github.com/sunpy/solarbextrapolation) package solves Laplace's equation using the method of [Sakurai (1982)](http://adsabs.harvard.edu/abs/1982SoPh...76..301S). However, when constructing the 3D field from the magnetogram, the "small-angle" approximation is used such that the curvature of the Sun is ignored, a valid approximation on the scale of an active region. @@ -41,19 +42,22 @@ Currently, the `solarbextrapolation` package uses a Map3D class that is limited It is expected that this new object will serve as a prototype for a first-class data type in the core SunPy package. #### Primary Goals -* Develop a coordinate-aware 3D Map class -* Use 3D Map class for global field extrapolations + +- Develop a coordinate-aware 3D Map class +- Use 3D Map class for global field extrapolations #### Possible Secondary Goals -* Performance improvements -* Improvements to the documentation and examples -* Better visualization methods -* Addition of more advanced extrapolators, e.g. non-linear force-free field + +- Performance improvements +- Improvements to the documentation and examples +- Better visualization methods +- Addition of more advanced extrapolators, e.g. non-linear force-free field #### Additional Resources -* [`solarbextrapolation` package ](https://github.com/sunpy/solarbextrapolation) -* [Maps in SunPy](http://docs.sunpy.org/en/stable/code_ref/map.html) -* [Coordinates in SunPy](http://docs.sunpy.org/en/stable/code_ref/coordinates.html) -* [Coordinates for Solar Image Data -- Thompson (2006)](http://adsabs.harvard.edu/abs/2006A%26A...449..791T) -* [IDL package for global potential field extrapolations](http://www.lmsal.com/~derosa/pfsspack/) -* [Review of Magnetic Field Extrapolation Techniques -- T. Neukirch](http://adsabs.harvard.edu/abs/2005ESASP.596E..12N) + +- [`solarbextrapolation` package](https://github.com/sunpy/solarbextrapolation) +- [Maps in SunPy](http://docs.sunpy.org/en/stable/code_ref/map.html) +- [Coordinates in SunPy](http://docs.sunpy.org/en/stable/code_ref/coordinates.html) +- [Coordinates for Solar Image Data -- Thompson (2006)](http://adsabs.harvard.edu/abs/2006A%26A...449..791T) +- [IDL package for global potential field extrapolations](http://www.lmsal.com/~derosa/pfsspack/) +- [Review of Magnetic Field Extrapolation Techniques -- T. Neukirch](http://adsabs.harvard.edu/abs/2005ESASP.596E..12N) diff --git a/_projects/2017/sunpy/realtimesun.md b/src/content/pages/gsoc/2017/sunpy/realtimesun.md similarity index 72% rename from _projects/2017/sunpy/realtimesun.md rename to src/content/pages/gsoc/2017/sunpy/realtimesun.md index a6ffec36..c0062c15 100644 --- a/_projects/2017/sunpy/realtimesun.md +++ b/src/content/pages/gsoc/2017/sunpy/realtimesun.md @@ -3,32 +3,32 @@ name: Sun, Right now! desc: Build a website to display what the Sun looks like in real time # add a description of your project requirements: - - Familiarity with Python - - Understanding of databases - - Basic web development - - Familiarity with Flask + - Familiarity with Python + - Understanding of databases + - Basic web development + - Familiarity with Flask difficulty: Intermediate issues: - - https://github.com/sunpy/sunpy/issues/1442 - - https://github.com/sunpy/sunpy/pull/1852 -mentors: - - dpshelio - - Cadair + - https://github.com/sunpy/sunpy/issues/1442 + - https://github.com/sunpy/sunpy/pull/1852 +mentors: + - dpshelio + - Cadair initiatives: - - GSOC + - GSOC tags: - - sunpy + - sunpy collaborating_projects: - - sunpy + - sunpy --- #### Description -The project requires the combination of multiple parts of the sunpy +The project requires the combination of multiple parts of the sunpy library to combine them all and together with a flask (or similar) application to visualise real time and past images of the sun on a website. -The project should have three parts: +The project should have three parts: - Add missing data sources like [DISCOVR](http://www.swpc.noaa.gov/products/real-time-solar-wind) - Download, visualise (and probably annotate) and save real time data. diff --git a/_projects/2017/sunpy/roi.md b/src/content/pages/gsoc/2017/sunpy/roi.md similarity index 87% rename from _projects/2017/sunpy/roi.md rename to src/content/pages/gsoc/2017/sunpy/roi.md index 75c0278b..5f81384b 100644 --- a/_projects/2017/sunpy/roi.md +++ b/src/content/pages/gsoc/2017/sunpy/roi.md @@ -3,20 +3,20 @@ name: Region of Interest desc: Meta-Object creation for holding temporal and spatial features. # add a description of your project requirements: - - Familiarity with Python - - Understanding of design patterns + - Familiarity with Python + - Understanding of design patterns difficulty: High issues: - - https://github.com/sunpy/sunpy/issues/164 -mentors: - - dpshelio - - wafels + - https://github.com/sunpy/sunpy/issues/164 +mentors: + - dpshelio + - wafels initiatives: - - GSOC + - GSOC tags: - - sunpy + - sunpy collaborating_projects: - - sunpy + - sunpy --- #### Description @@ -26,7 +26,7 @@ region of interest (ROI) in any physical dimension (such as spatial area, temporal range or spectral window) and interact with the rest of data types used in sunpy. -For example, a region of interest could be a particular area in the Sun +For example, a region of interest could be a particular area in the Sun at a particular moment in time. Therefore, that object should contain the extent of such area, its contour and the time when it was observed. It also needs other information, such as the coordinate system that it @@ -39,6 +39,5 @@ plotting the box containing such region and being aware of difference in time or observational point. So, it needs to be spatial and temporal aware. Additionally, the object needs to understand (be able to parse in) features and -events catalogued in the [HEK](http://www.lmsal.com/hek/hek_isolsearch.html) +events catalogued in the [HEK](http://www.lmsal.com/hek/hek_isolsearch.html) and [HELIO](http://hfc.helio-vo.eu/) databases. - diff --git a/_projects/2017/sunpy/sunkit-image.md b/src/content/pages/gsoc/2017/sunpy/sunkit-image.md similarity index 74% rename from _projects/2017/sunpy/sunkit-image.md rename to src/content/pages/gsoc/2017/sunpy/sunkit-image.md index 4e40579e..d5602b63 100644 --- a/_projects/2017/sunpy/sunkit-image.md +++ b/src/content/pages/gsoc/2017/sunpy/sunkit-image.md @@ -2,24 +2,24 @@ name: Develop sunkit-image desc: Create and develop a package for solar image analysis. requirements: - - Good understanding of Python. - - Enthusiasm to learn solar image processing. + - Good understanding of Python. + - Enthusiasm to learn solar image processing. difficulty: low issues: - - https://github.com/sunpy/sunpy/pull/1899 - - https://github.com/sunpy/sunpy/pull/1876 + - https://github.com/sunpy/sunpy/pull/1899 + - https://github.com/sunpy/sunpy/pull/1876 mentors: - - Cadair - - wafels - - Nabobalis + - Cadair + - wafels + - Nabobalis initiatives: - - GSOC - - SOCIS + - GSOC + - SOCIS tags: - - python - - sunpy + - python + - sunpy collaborating_projects: - - sunpy + - sunpy --- In this project you would create the foundations of the 'sunkit-image' SunPy @@ -45,23 +45,22 @@ the following goals (roughly in this order): optional extras: -6. Refactor and write a Python wrapper for [FLCT](https://arxiv.org/abs/0712.4289) [code](http://solarmuri.ssl.berkeley.edu/overview/publicdownloads/software.html). -8. Implement image alignment using feature detection and tracking. [Example](http://scikit-image.org/docs/dev/auto_examples/features_detection/plot_brief.html) - +1. Refactor and write a Python wrapper for [FLCT](https://arxiv.org/abs/0712.4289) [code](http://solarmuri.ssl.berkeley.edu/overview/publicdownloads/software.html). +2. Implement image alignment using feature detection and tracking. [Example](http://scikit-image.org/docs/dev/auto_examples/features_detection/plot_brief.html) #### Milestones ##### GSOC 2017 CODING STARTS -* Have familiarised yourself with the algorithms and with Python packaging. Have worked with the mentors to get the package repository setup on GitHub and the CI and documentation running. +- Have familiarised yourself with the algorithms and with Python packaging. Have worked with the mentors to get the package repository setup on GitHub and the CI and documentation running. ##### GSOC 2017 MIDTERM -* Have copied in and documented and tested the MGN code. -* Have opened a PR to SunPy to convert the `sunpy.physics` module to use `sunpy.coordinates`. -* Have implemented the Map warping code. +- Have copied in and documented and tested the MGN code. +- Have opened a PR to SunPy to convert the `sunpy.physics` module to use `sunpy.coordinates`. +- Have implemented the Map warping code. -##### GSOC 2017 FINAL +##### GSOC 2017 FINAL -* Have got the SunPy PR for coordinates in `sunpy.physics` merged. -* Have implemented OCCULT-2. +- Have got the SunPy PR for coordinates in `sunpy.physics` merged. +- Have implemented OCCULT-2. diff --git a/_projects/2017/sunpy/theme.md b/src/content/pages/gsoc/2017/sunpy/theme.md similarity index 73% rename from _projects/2017/sunpy/theme.md rename to src/content/pages/gsoc/2017/sunpy/theme.md index 2ae9af13..d3df59c1 100644 --- a/_projects/2017/sunpy/theme.md +++ b/src/content/pages/gsoc/2017/sunpy/theme.md @@ -2,19 +2,19 @@ name: SunPy Website Improvements desc: Improve the SunPy website and documentation with a new look and new features. requirements: - - Experience with CSS and website design. - - Excellent English language writing skills. + - Experience with CSS and website design. + - Excellent English language writing skills. difficulty: low issues: -mentors: - - Cadair - - dpshelio +mentors: + - Cadair + - dpshelio initiatives: - - GSOC + - GSOC tags: - - sunpy + - sunpy collaborating_projects: - - sunpy + - sunpy --- The SunPy [website](http://sunpy.org) and the SunPy [documentation](http://docs.sunpy.org) do @@ -26,7 +26,7 @@ and as a sphinx theme for the documentation. This project will design a new look for the SunPy website, and implement this as a HTML/CSS theme which can be used by the current Jekyll website, and any future -technology used by the website. +technology used by the website. Once this is done a sphinx theme will be developed that has the same design as the SunPy website, and can be used by the main SunPy documentation and any SunPy @@ -34,12 +34,11 @@ affiliated packages. As extensions to this project any of the following things could be implemented: -* Implement a registry of SunPy Affiliated packages on the website. -* Move away from Jekyll to a Python based static site generator. (Sphinx, Nikola, Pelican etc.) -* Write a sphinx extension that maintains an up to date list on the main website +- Implement a registry of SunPy Affiliated packages on the website. +- Move away from Jekyll to a Python based static site generator. (Sphinx, Nikola, Pelican etc.) +- Write a sphinx extension that maintains an up to date list on the main website of the instruments and data products supported by the sunpy library. -* Improve the content of the SunPy website. - +- Improve the content of the SunPy website. As this project is quite open to be customised in any proposal, a good proposal will have taken the time to evaluate what can be achieved within the time frame @@ -52,12 +51,12 @@ undertake the project to a high standard. ##### GSOC 2017 CODING STARTS -* Have evaulated which tools will be used to undertake the project in collaboration with the mentors. +- Have evaulated which tools will be used to undertake the project in collaboration with the mentors. ##### GSOC 2017 MIDTERM -* Have designed and implemented the website theme. +- Have designed and implemented the website theme. ##### GSOC 2017 FINAL -* Have created the sphinx theme and finished any extensions to the base project. +- Have created the sphinx theme and finished any extensions to the base project. diff --git a/src/content/pages/gsoc/2018/astropy/astropy-learn-website.md b/src/content/pages/gsoc/2018/astropy/astropy-learn-website.md new file mode 100644 index 00000000..939ba902 --- /dev/null +++ b/src/content/pages/gsoc/2018/astropy/astropy-learn-website.md @@ -0,0 +1,52 @@ +--- +name: Astropy Learn Website +desc: Design and Implement landing page for Astropy Learn ecosystem. +# add a short one line description of your project +requirements: + # Student requirements: + - Web development knowledge + - User interface design and user experience + - Knowledge of the Sphinx documentation tool is a plus +difficulty: moderate +issues: +# Related issues (if any) to this project. +mentors: + # First person in contact; mentors may change before project starts. + - kelle + - eblur + - adrn + - eteq +initiatives: + - GSOC +tags: + # Different technologies needed + - Web design + - javascript + - python +collaborating_projects: + # suborganization(s) to which this project belongs. + - astropy +--- + +Design and Implement landing page for Astropy Learn ecosystem. + +#### Description + +This project is for the creation of a landing web page for the Astropy Learn ecosystem. The Learn ecosystems includes the Astropy documentation and associated examples, the Astropy tutorials, and guides (e.g., worked out science use cases). Implementing this likely also requires harmonizing the existing tutorials web site with the astropy documentation (which is generated by Sphinx). This project may also include indexing/tagging of the materials and searching for content (this is already possible to some extent, but the current capabilities are inadequate). + +#### Possible Milestones + +##### At start of coding for GSOC 2018 + +- Have a big-picture plan for how the learn landing page, astropy web site, astropy docs, and astropy tutorials link together. +- Have a general sense of what actual web page javascript code and sphinx extension changes might be necessary. + +##### GSOC 2018 Midterm + +- Have a draft design for the new web pages ready to get comment from the community. +- Have Pull Requests open for any changes necessary to the astropy documentation or tutorials page templates. + +##### GSOC 2018 Final + +- Have the completed landing page launched. +- (Stretch goal) Include in the landing page a search that works across all of the learn resources. diff --git a/_projects/2018/astropy/astroquery.md b/src/content/pages/gsoc/2018/astropy/astroquery.md similarity index 80% rename from _projects/2018/astropy/astroquery.md rename to src/content/pages/gsoc/2018/astropy/astroquery.md index 1ba6d2ac..be5ef9d6 100644 --- a/_projects/2018/astropy/astroquery.md +++ b/src/content/pages/gsoc/2018/astropy/astroquery.md @@ -2,26 +2,26 @@ name: Add additional archives to astroquery desc: Implement module(s) to access currently unsupported astronomical archives using astroquery. requirements: - - Python - - Basic understanding of web queries and APIs + - Python + - Basic understanding of web queries and APIs difficulty: low issues: - - https://github.com/astropy/astroquery/issues/226 + - https://github.com/astropy/astroquery/issues/226 mentors: - - keflavich - - bsipocz - - pllim - - migueldvb - - stargaser + - keflavich + - bsipocz + - pllim + - migueldvb + - stargaser initiatives: - - GSOC + - GSOC tags: - - python - - astroquery - - astropy + - python + - astroquery + - astropy collaborating_projects: - - astropy - - astroquery + - astropy + - astroquery --- #### Description @@ -34,8 +34,7 @@ A full list of new services that have been suggested by our users [can be found in these issues](https://github.com/astropy/astroquery/issues?q=is%3Aissue+is%3Aopen+label%3A%22New+Service%22), and a summary [in this issue](https://github.com/astropy/astroquery/issues/226). - -A *possible* set of milestones for any particular one of these modules might be: +A _possible_ set of milestones for any particular one of these modules might be: 1. Research the web API for the archive sufficiently to determine what exactly astroquery should expose. 2. Determine the best interface to access the simplest subset of that archive that would be useful. diff --git a/_projects/2018/astropy/astrowidgets.md b/src/content/pages/gsoc/2018/astropy/astrowidgets.md similarity index 73% rename from _projects/2018/astropy/astrowidgets.md rename to src/content/pages/gsoc/2018/astropy/astrowidgets.md index 97b6d956..52662cd0 100644 --- a/_projects/2018/astropy/astrowidgets.md +++ b/src/content/pages/gsoc/2018/astropy/astrowidgets.md @@ -2,21 +2,21 @@ name: Jupyter widgets for Astropy desc: Create "astrowidgets" - Jupyter widgets for Astropy. requirements: - - Python - - Very basic knowledge of CSS. - - Basic understanding of javascript. + - Python + - Very basic knowledge of CSS. + - Basic understanding of javascript. difficulty: intermediate mentors: - - mwcraig - - astrofrog + - mwcraig + - astrofrog initiatives: - - GSOC + - GSOC tags: - - python - - javascript + - python + - javascript collaborating_projects: - - astropy - - astrowidgets + - astropy + - astrowidgets --- #### Description @@ -27,15 +27,15 @@ The final deliverable for the project will be a new package ready for applicatio Some of the deliverables for this project would be widget interfaces for: -+ A FITS image viewer utilizing the affiliated package [ginga](https://github.com/ejeschke/ginga) to handle the image display. This widget should allow for overlays of sources from catalogs (using [astroquery](https://github.com/astropy/astroquery)), selection of sources in the image using a mouse, and user-configurable key bindings. An initial implementation, using [ipyevents](https://github.com/mwcraig/ipyevents), has been done in [ginga](https://github.com/ejeschke/ginga). -+ Point source detection and photometry using either [photutils](https://github.com/astropy/photutils) or [sep](https://github.com/kbarbary/sep). -+ Observation planning using [astroplan](https://github.com/astropy/astroplan). +- A FITS image viewer utilizing the affiliated package [ginga](https://github.com/ejeschke/ginga) to handle the image display. This widget should allow for overlays of sources from catalogs (using [astroquery](https://github.com/astropy/astroquery)), selection of sources in the image using a mouse, and user-configurable key bindings. An initial implementation, using [ipyevents](https://github.com/mwcraig/ipyevents), has been done in [ginga](https://github.com/ejeschke/ginga). +- Point source detection and photometry using either [photutils](https://github.com/astropy/photutils) or [sep](https://github.com/kbarbary/sep). +- Observation planning using [astroplan](https://github.com/astropy/astroplan). In addition, these Jupyter notebooks will be developed: -+ Sample notebooks demonstrating how to compose the widgets into applications. -+ An image reduction notebook, similar to [reducer](https://github.com/mwcraig/reducer). -+ A photometry notebook for source detection and photometry. -+ A notebook for performing differential photometry on a time series of measurements. +- Sample notebooks demonstrating how to compose the widgets into applications. +- An image reduction notebook, similar to [reducer](https://github.com/mwcraig/reducer). +- A photometry notebook for source detection and photometry. +- A notebook for performing differential photometry on a time series of measurements. Preliminary development of this project is already underway, so some of the specific deliverables might have changed by the beginning of the summer of code. diff --git a/_projects/2018/astropy/casa-regions.md b/src/content/pages/gsoc/2018/astropy/casa-regions.md similarity index 88% rename from _projects/2018/astropy/casa-regions.md rename to src/content/pages/gsoc/2018/astropy/casa-regions.md index c75c1126..ef718e6b 100644 --- a/_projects/2018/astropy/casa-regions.md +++ b/src/content/pages/gsoc/2018/astropy/casa-regions.md @@ -2,22 +2,22 @@ name: CASA CRTF region file handling desc: Implement a parser for CASA CRTF region files requirements: - - Python + - Python difficulty: low issues: - - https://github.com/astropy/regions/issues/119 + - https://github.com/astropy/regions/issues/119 mentors: - - keflavich - - migueldvb + - keflavich + - migueldvb initiatives: - - GSOC + - GSOC tags: - - python - - regions - - astropy + - python + - regions + - astropy collaborating_projects: - - astropy - - regions + - astropy + - regions --- #### Description @@ -28,7 +28,6 @@ CASA is the main package for radio interferometry data reduction and processing. CASA regions are mostly compatible with and translatable to ds9 regions and other formats, but the only parser that presently exists lives within CASA. Details about the CASA region parser are linked from the [associated issue](https://github.com/astropy/regions/issues/119). - Some milestones for this project will be: 1. Implementation of basic region reading without metadata diff --git a/_projects/2018/astropy/ccdproc-optimize.md b/src/content/pages/gsoc/2018/astropy/ccdproc-optimize.md similarity index 59% rename from _projects/2018/astropy/ccdproc-optimize.md rename to src/content/pages/gsoc/2018/astropy/ccdproc-optimize.md index ee717dc7..1fb0b750 100644 --- a/_projects/2018/astropy/ccdproc-optimize.md +++ b/src/content/pages/gsoc/2018/astropy/ccdproc-optimize.md @@ -3,25 +3,26 @@ name: Optimizing performance of ccdproc desc: Optimize speed and memory use of the package ccdproc. # add a short one line description of your project requirements: -# Student requirements: - - Familiar with the basics of astronomical image reduction + # Student requirements: + - Familiar with the basics of astronomical image reduction difficulty: medium mentors: -# First person in contact; mentors may change before project starts. - - mwcraig - - crawfordsm - - bsipocz + # First person in contact; mentors may change before project starts. + - mwcraig + - crawfordsm + - bsipocz initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - python - - Cython (maybe) + # Different technologies needed + - python + - Cython (maybe) collaborating_projects: -# suborganisation(s) to which this project belongs. - - astropy - - ccdproc + # suborganization(s) to which this project belongs. + - astropy + - ccdproc --- + Optimizing performance of ccdproc #### Description @@ -32,14 +33,14 @@ The [ccdproc](https://ccdproc.readthedocs.io) package contains functions for red ##### GSOC 2018 CODING STARTS -* Perform developer install of `ccdproc` -* Install Python profiling tools -* Install and run `asv`. +- Perform developer install of `ccdproc` +- Install Python profiling tools +- Install and run `asv`. ##### GSOC 2018 Milestones -* Profile code to identify targets for performance (speed) optimization. -* Set up regular performance testing of `ccdproc` on CI. -* Propose fixes for each of the problems identified in previous milestone. -* Identify memory bottlenecks. -* Fix memory bottlenecks. +- Profile code to identify targets for performance (speed) optimization. +- Set up regular performance testing of `ccdproc` on CI. +- Propose fixes for each of the problems identified in previous milestone. +- Identify memory bottlenecks. +- Fix memory bottlenecks. diff --git a/_projects/2018/astropy/mcmc.md b/src/content/pages/gsoc/2018/astropy/mcmc.md similarity index 65% rename from _projects/2018/astropy/mcmc.md rename to src/content/pages/gsoc/2018/astropy/mcmc.md index 4fdb84d7..55b2caf2 100644 --- a/_projects/2018/astropy/mcmc.md +++ b/src/content/pages/gsoc/2018/astropy/mcmc.md @@ -2,22 +2,22 @@ name: A compatibility protocol for astropy models and emcee desc: Implement a protocol to enable astropy models to be used in emcee requirements: - - Python - - Solid understanding of probability (likelihood functions, Bayes' theorem, etc) - - Working knowledge on Markov Chain Monte Carlo + - Python + - Solid understanding of probability (likelihood functions, Bayes' theorem, etc) + - Working knowledge on Markov Chain Monte Carlo difficulty: medium mentors: - - mirca - - karllark - - eteq + - mirca + - karllark + - eteq initiatives: - - GSOC + - GSOC tags: - - python - - astropy - - emcee + - python + - astropy + - emcee collaborating_projects: - - astropy + - astropy --- #### Description @@ -30,29 +30,33 @@ on the other hand, offers a myriad of easy-to-use models. The goal of this project is to design and implement a protocol that enables astropy models to be used in emcee. -A *potential* list of milestones might be: +A _potential_ list of milestones might be: 1. Determine the best way to integrate an astropy model with -a posterior distribution. + a posterior distribution. 2. Design and implement classes to represent Likelihood Functions and -Prior distributions. + Prior distributions. 3. Determine the best interface to be exposed to the user. For example, -``` + +```python g = Gaussian1D() posterior = g.sample(likelihood='gaussian', prior='uniform', nwalkers=1000, kwargs) ``` + or -``` + +```python sampler = Sampler() posterior = sampler(model=Gaussian1D(), likelihood='gaussian', prior='uniform', nwalkers=1000, kwargs) ``` -4. Write unit tests and documentation (using the astropy affiliated package template) -to ensure the implementations are operational. -*Notes: a potential good start for any candidates would be to take an -extensive look at* +1. Write unit tests and documentation (using the astropy affiliated package template) + to ensure the implementations are operational. + +_Notes: a potential good start for any candidates would be to take an +extensive look at_ [this](https://github.com/astropy/astropy-model-ideas/blob/master/MCMCWithAstropyModels.ipynb) -*IPython notebook.* +_IPython notebook._ -*Might be worth to look at* [oktopus](https://github.com/KeplerGO/oktopus) -*for inspiration on step 2.* +_Might be worth to look at_ [oktopus](https://github.com/KeplerGO/oktopus) +_for inspiration on step 2._ diff --git a/src/content/pages/gsoc/2018/astropy/sphinx-example-index.md b/src/content/pages/gsoc/2018/astropy/sphinx-example-index.md new file mode 100644 index 00000000..faad1631 --- /dev/null +++ b/src/content/pages/gsoc/2018/astropy/sphinx-example-index.md @@ -0,0 +1,55 @@ +--- +name: Indexing examples in Astropy Sphinx documentation +desc: Write a Sphinx plugin to identify examples in the Astropy documentation, tag/index them, and build an example gallery from them +# add a short one line description of your project +requirements: + # Student requirements: + - Knowledge of [sphinx](http://www.sphinx-doc.org/en/stable/) + - Interest in user training +difficulty: moderate +issues: + # Related issues (if any) to this project. + - https://github.com/astropy/astropy/issues/6589 + - https://github.com/astropy/astropy-helpers/issues/371 +mentors: + # First person in contact; mentors may change before project starts. + - eteq + - adrn + - bsipocz +initiatives: + - GSOC +tags: + # Different technologies needed + - python + - sphinx +collaborating_projects: + # suborganization(s) to which this project belongs. + - astropy +--- + +Write a Sphinx plugin to identify examples in the Astropy documentation, tag/index them, and build an example gallery from them + +#### Description + +The [current astropy example gallery](http://docs.astropy.org/en/stable/generated/examples/) is problematic because it duplicates content from the astropy documentation and it is not clear which examples are "worthy" of the example gallery. It also overlaps with the [astropy tutorials](http://tutorials.astropy.org). Hence, this project is focused on developing the infrastructure to auto-generate the example gallery from examples _in_ the documentation. This will require building a Sphinx plugin to find tagged examples and generating links. It will also require coordinating moving of existing gallery examples to the documentation and tagging them appropriately. + +#### Possible Milestones + +##### At start of coding for GSOC 2018 + +- Identify what labeling technique is best for tagging the examples. +- Solicit authors of gallery examples to determine where they should be moved. Some may belong in the documentations, whil others might be better places as Astropy Tutorials. +- Determine where the plugin will go (either a standalone small package, in the astropy-helpers, or in astropy itself), in consultation with the Astropy documentation maintainers. + +##### GSOC 2018 Midterm + +- Have examples identified and ready to be moved out of the gallery and into their relevant locations in the astropy docs or tutorials. +- Have a first-draft working plugin ready for review by Astropy documentation maintainers. +- Determine how difficult it will be to have an example _gallery_ (as opposed to simply an index/list of the examples). + +##### GSOC 2018 Final + +- Release the plugin, with minimum functionality of generating the example list (or have it merged if it ends up as part of another project). +- (Stretch Goal) have the plugin generate an example gallery instead of a list. +- Complete a Pull Request to activate the (finished) plugin in the Astropy repository. +- Have a Pull Request to tag all the relevant examples which sucessfully generates the example _list_. diff --git a/src/content/pages/gsoc/2018/astropy/table-optimize.md b/src/content/pages/gsoc/2018/astropy/table-optimize.md new file mode 100644 index 00000000..fc6e8b33 --- /dev/null +++ b/src/content/pages/gsoc/2018/astropy/table-optimize.md @@ -0,0 +1,61 @@ +--- +name: Improving astropy Table performance +desc: Improve the speed of common Table operations like slicing +# add a short one line description of your project +requirements: + # Student requirements: + - Familiar with Cython and Python code profiling + - Familiar with Python speed optimization strategies +difficulty: medium +issues: +# Related issues (if any) to this project. +mentors: + # First person in contact; mentors may change before project starts. + - taldcroft +initiatives: + - GSOC +tags: + # Different technologies needed + - python + - Cython +collaborating_projects: + # suborganization(s) to which this project belongs. + - astropy +--- + +Improving astropy Table performance + +#### Description + +The astropy table sub-package defines a core Table class that is +used to store and manipulate tabular data within astropy. This class +was written with an emphasis on functionality, convenience for astronomers, +and code clarity. With the astropy table package now fairly mature +and with a strong set of regression tests in place, it is time to focus +on performance for basic operations like table creation and slicing. +For a simple operation like slicing, astropy Table is currently about +a factor of 10 slower than Pandas. This project will focus on identifying +performance bottlenecks, writing performance tests for astropy-benchmarks, +and then developing code to improve the performance. It is possible that +some fixes + +#### Milestones (if any) + +##### GSOC 2018 CODING STARTS + +- Perform developer install of `astropy`. +- Install Python profiling tools. +- Study astropy and the table package capabilities. + +##### GSOC 2018 MIDTERM + +- Install and run `asv`. +- Examine existing `asv` benchmarks and identify areas for improved benchmarking. +- Profile key parts of table code and identify performance bottlenecks. +- Identify strategies for improved speed performance. +- Implement initial performance improvements. + +##### GSOC 2018 FINAL + +- Continue and finalize implementation of performance improvements. +- Contine and finalize additional `asv` benchmark tests. diff --git a/_projects/2018/astropy/tutorials.md b/src/content/pages/gsoc/2018/astropy/tutorials.md similarity index 53% rename from _projects/2018/astropy/tutorials.md rename to src/content/pages/gsoc/2018/astropy/tutorials.md index 7a65ba20..62e5d61c 100644 --- a/_projects/2018/astropy/tutorials.md +++ b/src/content/pages/gsoc/2018/astropy/tutorials.md @@ -3,39 +3,40 @@ name: Develop Astropy Tutorials and/or Guides desc: Generate content used to demonstrate advanced functionality of Astropy # add a short one line description of your project requirements: -# Student requirements: - - Knowledge of Astropy and affiliated packages functionality. - - Interest in developing educational materials. - - Knowledge of Astronomy sufficient for developing selected tutorials on specific science cases. + # Student requirements: + - Knowledge of Astropy and affiliated packages functionality. + - Interest in developing educational materials. + - Knowledge of Astronomy sufficient for developing selected tutorials on specific science cases. difficulty: High issues: -# Related issues (if any) to this project. - - https://github.com/astropy/astropy-tutorials/issues?q=is%3Aissue+is%3Aopen+label%3Acontent-new + # Related issues (if any) to this project. + - https://github.com/astropy/astropy-tutorials/issues?q=is%3Aissue+is%3Aopen+label%3Acontent-new mentors: -# First person in contact; mentors may change before project starts. - - kelle - - eblur - - adrn - - eteq + # First person in contact; mentors may change before project starts. + - kelle + - eblur + - adrn + - eteq initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - python - - Jupyter notebooks + # Different technologies needed + - python + - Jupyter notebooks collaborating_projects: -# suborganisation(s) to which this project belongs. - - astropy + # suborganization(s) to which this project belongs. + - astropy --- + Generate content used to demonstrate advanced functionality of Astropy #### Description -Create tutorials and/or guides which demonstrate more complex uses of astropy and affiliate package functionality. E.g., use of classes and object-oriented programming for astronomical data analysis with Astropy, usage of astroquery and ccdproc together to download and reduce an image, etc. +Create tutorials and/or guides which demonstrate more complex uses of astropy and affiliate package functionality. E.g., use of classes and object-oriented programming for astronomical data analysis with Astropy, usage of astroquery and ccdproc together to download and reduce an image, etc. Must would work closely with Astropy Tutorial Leads to identify tutorial topics, as well as a tutorial flow/narrative. The student will primarily be mostly responsible for writing the code, but not the pedagogy. #### Possible Milestones -* Have a list of possible tutorials to develop -* Have an outline of selected tutorial(s) for review by the Learn team and/or an astropy package maintainer. -* Complete the tutorial by getting it merged in the [astropy-tutorials repository](https://github.com/astropy/astropy-tutorials). +- Have a list of possible tutorials to develop +- Have an outline of selected tutorial(s) for review by the Learn team and/or an astropy package maintainer. +- Complete the tutorial by getting it merged in the [astropy-tutorials repository](https://github.com/astropy/astropy-tutorials). diff --git a/_projects/2018/glue/widgets.md b/src/content/pages/gsoc/2018/glue/widgets.md similarity index 54% rename from _projects/2018/glue/widgets.md rename to src/content/pages/gsoc/2018/glue/widgets.md index 51ed412c..779f9da5 100644 --- a/_projects/2018/glue/widgets.md +++ b/src/content/pages/gsoc/2018/glue/widgets.md @@ -3,34 +3,35 @@ name: New glue widgets desc: Expand the functionality of glue by developing a range of new widgets, including to better read in and edit data. # add a description of your project requirements: - - Proficiency in Python - - Familiarity with GUI programming, ideally Qt + - Proficiency in Python + - Familiarity with GUI programming, ideally Qt difficulty: medium issues: - - https://github.com/glue-viz/glue/issues/836 - - https://github.com/glue-viz/glue/issues/981 - - https://github.com/glue-viz/glue/issues/1073 + - https://github.com/glue-viz/glue/issues/836 + - https://github.com/glue-viz/glue/issues/981 + - https://github.com/glue-viz/glue/issues/1073 mentors: - - astrofrog + - astrofrog initiatives: - - GSOC + - GSOC tags: - - python + - python collaborating_projects: - - glue + - glue --- + #### Description This project is to develop new widgets/dialogs inside glue. Examples include: -* A dialog that would be useful beyond this project is a dialog for importing +- A dialog that would be useful beyond this project is a dialog for importing ASCII tables into glue, similar to the CSV import functionality in e.g. OpenOffice/LibreOffice or Excel. -* A dialog that allows the user to edit components of a datasets, including +- A dialog that allows the user to edit components of a datasets, including renaming them, sorting them, and changing datatypes. -* A dialog that can be used to re-order categorical components +- A dialog that can be used to re-order categorical components -* A dialog to visually create simple selections (for example that a specific +- A dialog to visually create simple selections (for example that a specific component should be in a certain range) diff --git a/_projects/2018/heliopy/heliopy-units.md b/src/content/pages/gsoc/2018/heliopy/heliopy-units.md similarity index 69% rename from _projects/2018/heliopy/heliopy-units.md rename to src/content/pages/gsoc/2018/heliopy/heliopy-units.md index 1a381771..2eef1c11 100644 --- a/_projects/2018/heliopy/heliopy-units.md +++ b/src/content/pages/gsoc/2018/heliopy/heliopy-units.md @@ -2,23 +2,24 @@ name: Using physical units with HelioPy desc: Convert HelioPy's data import methods to return data that has units attached. requirements: - - Some experience using python - - Some knowledge about different physical units and their use in science - (e.g. time, distance, velocity) + - Some experience using python + - Some knowledge about different physical units and their use in science + (e.g. time, distance, velocity) difficulty: low issues: - - https://github.com/heliopython/heliopy/issues/291 + - https://github.com/heliopython/heliopy/issues/291 mentors: - - dstansby - - dpshelio + - dstansby + - dpshelio initiatives: - - GSOC + - GSOC tags: - - python - - heliopy + - python + - heliopy collaborating_projects: - - heliopy + - heliopy --- + #### Description HelioPy is a relatively new python package, whose aim is to automate the @@ -39,22 +40,22 @@ Find more information about [HelioPy](http://docs.heliopy.org/en/stable/) and ##### GSOC 2018 CODING STARTS -* Have installed HelioPy and used it to download and plot some data to get a +- Have installed HelioPy and used it to download and plot some data to get a feel of how it currently works. -* Have read the documentation on astropy units and know how they work, +- Have read the documentation on astropy units and know how they work, and what their advantages are over using data without units. ##### GSOC 2018 1ST EVALUATION -* Have investigated a way of automatically extracting the correct units from +- Have investigated a way of automatically extracting the correct units from raw data files. ##### GSOC 2018 2ND EVALUATION -* Have written code to make at least one data import function return data +- Have written code to make at least one data import function return data with units attached. ##### GSOC 2018 FINAL EVALUATION -* Have expanded the new code to all of the data import functions, to make +- Have expanded the new code to all of the data import functions, to make HelioPy fully compatible with the astropy units system. diff --git a/src/content/pages/gsoc/2018/index.md b/src/content/pages/gsoc/2018/index.md new file mode 100644 index 00000000..56e38c80 --- /dev/null +++ b/src/content/pages/gsoc/2018/index.md @@ -0,0 +1,5 @@ +--- +title: "Ideas page for Google Summer of Code 2018" +show_main: false +season: 2018 +--- diff --git a/_projects/2018/juliaastro/astronomicaltime.md b/src/content/pages/gsoc/2018/juliaastro/astronomicaltime.md similarity index 83% rename from _projects/2018/juliaastro/astronomicaltime.md rename to src/content/pages/gsoc/2018/juliaastro/astronomicaltime.md index 6b895ae1..65979dff 100644 --- a/_projects/2018/juliaastro/astronomicaltime.md +++ b/src/content/pages/gsoc/2018/juliaastro/astronomicaltime.md @@ -2,26 +2,26 @@ name: Porting ERFA's Time Scale Conversion Functions to Julia desc: Expand the ecosystem of astronomical routines in the Julia language. requirements: - - Julia - - C - - Knowledge of astronomical time systems is beneficial, but not required + - Julia + - C + - Knowledge of astronomical time systems is beneficial, but not required difficulty: low to intermediate mentors: - - helgee - - giordano + - helgee + - giordano initiatives: - - GSOC + - GSOC tags: - - julia + - julia collaborating_projects: - - JuliaAstro + - JuliaAstro --- #### Description [Julia](http://julialang.org/) is a programming language designed for technical computing that combines ease-of-use of dynamical languages and high-performance -of statically-compiled languages like C. Its most notable feature +of statically-compiled languages like C. Its most notable feature is [multiple dispatch](http://en.wikipedia.org/wiki/Multiple_dispatch), which greatly simplifies the definition of complex functions whose behavior depends on the type of the arguments. @@ -41,11 +41,11 @@ packages's interoperability with the rest of the Julia ecosystem and validate the new implementation against ERFA. If you don't know where to start from, have a look at: -* the +- the [AstroTime.jl manual](https://juliaastro.github.io/AstroTime.jl/latest/index.html), -* the [TODO list](https://github.com/JuliaAstro/AstroTime.jl/issues/1) - of the project, with the list of *all* functions not yet ported, -* the [SOFA Time Scale and Calendar Tools](http://www.iausofa.org/2017_0420_C/sofa/sofa_ts_c.pdf) +- the [TODO list](https://github.com/JuliaAstro/AstroTime.jl/issues/1) + of the project, with the list of _all_ functions not yet ported, +- the [SOFA Time Scale and Calendar Tools](http://www.iausofa.org/2017_0420_C/sofa/sofa_ts_c.pdf) manual. While experience with programming in Julia would be helpful, it is not diff --git a/_projects/2018/plasmapy/plasma-object.md b/src/content/pages/gsoc/2018/plasmapy/plasma-object.md similarity index 85% rename from _projects/2018/plasmapy/plasma-object.md rename to src/content/pages/gsoc/2018/plasmapy/plasma-object.md index a0f621fe..9a4a4779 100644 --- a/_projects/2018/plasmapy/plasma-object.md +++ b/src/content/pages/gsoc/2018/plasmapy/plasma-object.md @@ -2,20 +2,20 @@ name: Plasma class desc: Devlop a new Plasma class for loading and storing multiple types of plasma physics data. requirements: - - Good knowledge of Python, including object-oriented programming - - Some background of physics preferred, especially electromagnetism, flulid mechanics and/or plasma physics - - Some experience with scientific data formats, especially plasma physics data formats, is preferred + - Good knowledge of Python, including object-oriented programming + - Some background of physics preferred, especially electromagnetism, flulid mechanics and/or plasma physics + - Some experience with scientific data formats, especially plasma physics data formats, is preferred difficulty: High mentors: - - SolarDrew - - namurphy - - StanczakDominik + - SolarDrew + - namurphy + - StanczakDominik initiatives: - - GSOC + - GSOC tags: - - python + - python collaborating_projects: - - PlasmaPy + - PlasmaPy --- #### Description diff --git a/_projects/2018/poliastro/benchmark-propagators.md b/src/content/pages/gsoc/2018/poliastro/benchmark-propagators.md similarity index 60% rename from _projects/2018/poliastro/benchmark-propagators.md rename to src/content/pages/gsoc/2018/poliastro/benchmark-propagators.md index 0362933a..97965539 100644 --- a/_projects/2018/poliastro/benchmark-propagators.md +++ b/src/content/pages/gsoc/2018/poliastro/benchmark-propagators.md @@ -2,25 +2,25 @@ name: Benchmark orbit propagators desc: Implement several orbit propagation algorithms to improve current error rates and performance requirements: - - Familiar with numerical analysis + - Familiar with numerical analysis difficulty: medium issues: - - https://github.com/poliastro/poliastro/issues/253 - - https://github.com/poliastro/poliastro/issues/265 - - https://github.com/poliastro/poliastro/issues/285 - - https://github.com/poliastro/poliastro/issues/286 - - https://github.com/poliastro/poliastro/issues/294 + - https://github.com/poliastro/poliastro/issues/253 + - https://github.com/poliastro/poliastro/issues/265 + - https://github.com/poliastro/poliastro/issues/285 + - https://github.com/poliastro/poliastro/issues/286 + - https://github.com/poliastro/poliastro/issues/294 mentors: - - astrojuanlu - - aunsiro + - astrojuanlu + - aunsiro initiatives: - - GSOC + - GSOC tags: - - python - - scipy - - numba + - python + - scipy + - numba collaborating_projects: - - poliastro + - poliastro --- #### Description @@ -46,30 +46,30 @@ choose the best that suits their needs. ##### Coding starts -* Engaged with the community and understand the motivation and challenges of +- Engaged with the community and understand the motivation and challenges of the project. -* Have set up a development environment and reproduced the existing propagation +- Have set up a development environment and reproduced the existing propagation issues. ##### 1st evaluation -* Fix [convergence problems (#265)](https://github.com/poliastro/poliastro/issues/265), +- Fix [convergence problems (#265)](https://github.com/poliastro/poliastro/issues/265), either with a new propagator or fixing the current one -* Have all code, tests and documentation in GitHub +- Have all code, tests and documentation in GitHub ##### 2nd evaluation -* Add time and accuracy benchmarks for the propagators that can be easily +- Add time and accuracy benchmarks for the propagators that can be easily reproducible -* Have all code, tests and documentation in GitHub +- Have all code, tests and documentation in GitHub ##### Final -* Have at least two new propagators -* Have all code, tests and documentation in GitHub +- Have at least two new propagators +- Have all code, tests and documentation in GitHub #### Secondary goals -* Fix any bugs that might appear regarding propagation, hyperbolic orbits and so forth -* Review pull requests from other poliastro contributors, including the mentor -* Give a talk about the work at some Python event +- Fix any bugs that might appear regarding propagation, hyperbolic orbits and so forth +- Review pull requests from other poliastro contributors, including the mentor +- Give a talk about the work at some Python event diff --git a/_projects/2019/poliastro/export-czml.md b/src/content/pages/gsoc/2018/poliastro/export-czml.md similarity index 56% rename from _projects/2019/poliastro/export-czml.md rename to src/content/pages/gsoc/2018/poliastro/export-czml.md index 6c2a922f..b3368b5a 100644 --- a/_projects/2019/poliastro/export-czml.md +++ b/src/content/pages/gsoc/2018/poliastro/export-czml.md @@ -2,22 +2,22 @@ name: Export to CZML desc: Implement export of Orbit objects to CZML to visualize in Cesium.js requirements: - - Familiar with the JSON format - - Basic experience with JavaScript or TypeScript + - Familiar with the JSON format + - Basic experience with JavaScript or TypeScript difficulty: medium issues: - - https://github.com/poliastro/poliastro/issues/117 - - https://github.com/poliastro/poliastro/issues/287 + - https://github.com/poliastro/poliastro/issues/117 + - https://github.com/poliastro/poliastro/issues/287 mentors: - - astrojuanlu - - AunSiro + - astrojuanlu + - newlawrence initiatives: - - GSOC + - GSOC tags: - - python - - javascript + - python + - javascript collaborating_projects: - - poliastro + - poliastro --- #### Description @@ -38,33 +38,33 @@ understand our output. ##### Coding starts -* Engaged with the community and understand the motivation and challenges of +- Engaged with the community and understand the motivation and challenges of the project. -* Have set up a development environment and get familiar with the Cesium +- Have set up a development environment and get familiar with the Cesium Sandcastle (see "Additional resources") ##### 1st evaluation -* Have basic export for an orbit around the Earth -* Have all code, tests and documentation in GitHub +- Have basic export for an orbit around the Earth +- Have all code, tests and documentation in GitHub ##### 2nd evaluation -* Have complex export that includes attractors and target bodies, if any -* Have all code, tests and documentation in GitHub +- Have complex export that includes attractors and target bodies, if any +- Have all code, tests and documentation in GitHub ##### Final -* Have created a Cesium application that understand the necessary metadata -* Have all code, tests and documentation in GitHub +- Have created a Cesium application that understand the necessary metadata +- Have all code, tests and documentation in GitHub #### Secondary goals -* Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth -* Review pull requests from other poliastro contributors, including the mentor -* Give a talk about the work at some Python event +- Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth +- Review pull requests from other poliastro contributors, including the mentor +- Give a talk about the work at some Python event #### Additional resources -* [Cesium Sandcastle](https://cesiumjs.org/Cesium/Build/Apps/Sandcastle/index.html?src=CZML.html&label=DataSources) -* [Sample data](https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Apps/SampleData/simple.czml) +- [Cesium Sandcastle](https://cesiumjs.org/Cesium/Build/Apps/Sandcastle/index.html?src=CZML.html&label=DataSources) +- [Sample data](https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Apps/SampleData/simple.czml) diff --git a/_projects/2018/poliastro/reference-frames.md b/src/content/pages/gsoc/2018/poliastro/reference-frames.md similarity index 64% rename from _projects/2018/poliastro/reference-frames.md rename to src/content/pages/gsoc/2018/poliastro/reference-frames.md index b33c6d22..bd7464eb 100644 --- a/_projects/2018/poliastro/reference-frames.md +++ b/src/content/pages/gsoc/2018/poliastro/reference-frames.md @@ -2,23 +2,23 @@ name: Add reference frames to Orbit objects desc: Make Orbit objects completely defined by adding a reference frame as a property requirements: - - Knowledge on kinematics - - A taste for API design + - Knowledge on kinematics + - A taste for API design difficulty: medium issues: - - https://github.com/poliastro/poliastro/issues/109 - - https://github.com/poliastro/poliastro/issues/257 - - https://github.com/poliastro/poliastro/issues/288 + - https://github.com/poliastro/poliastro/issues/109 + - https://github.com/poliastro/poliastro/issues/257 + - https://github.com/poliastro/poliastro/issues/288 mentors: - - astrojuanlu - - newlawrence + - astrojuanlu + - newlawrence initiatives: - - GSOC + - GSOC tags: - - python - - astropy + - python + - astropy collaborating_projects: - - poliastro + - poliastro --- #### Description @@ -47,33 +47,33 @@ for instance using the SPICE toolkit by NASA. Check out ##### Coding starts -* Engaged with the community and understand the motivation and challenges of +- Engaged with the community and understand the motivation and challenges of the project. -* Have set up a development environment and run a basic example using SPICE +- Have set up a development environment and run a basic example using SPICE kernels. ##### 1st evaluation -* Have all the current reference frames conversion validated against SpiceyPy -* Have all code, tests and documentation in GitHub +- Have all the current reference frames conversion validated against SpiceyPy +- Have all code, tests and documentation in GitHub ##### 2nd evaluation -* Have a working prototype on how to add reference frames to `Orbit` objects -* Have all code, tests and documentation in GitHub +- Have a working prototype on how to add reference frames to `Orbit` objects +- Have all code, tests and documentation in GitHub ##### Final -* Have finished the refactoring of `Orbit` objects to allow for reference frames, +- Have finished the refactoring of `Orbit` objects to allow for reference frames, using a default one if appropriate -* Have all code, tests and documentation in GitHub +- Have all code, tests and documentation in GitHub #### Secondary goals -* Fix any bugs that might appear regarding visualization, reference frames and so forth -* Review pull requests from other poliastro contributors, including the mentor -* Give a talk about the work at some Python event +- Fix any bugs that might appear regarding visualization, reference frames and so forth +- Review pull requests from other poliastro contributors, including the mentor +- Give a talk about the work at some Python event #### Additional resources -* [USNO Circular 179](http://aa.usno.navy.mil/publications/docs/Circular_179.pdf) +- [USNO Circular 179](http://aa.usno.navy.mil/publications/docs/Circular_179.pdf) diff --git a/_projects/2018/poliastro/web-app-neos.md b/src/content/pages/gsoc/2018/poliastro/web-app-neos.md similarity index 66% rename from _projects/2018/poliastro/web-app-neos.md rename to src/content/pages/gsoc/2018/poliastro/web-app-neos.md index 84b1133c..3182902e 100644 --- a/_projects/2018/poliastro/web-app-neos.md +++ b/src/content/pages/gsoc/2018/poliastro/web-app-neos.md @@ -2,19 +2,19 @@ name: Web app to visualize asteroid trajectories desc: Create a web application so users can easily visualize Near Earth Object trajectories requirements: - - Experience in web or interface design + - Experience in web or interface design difficulty: medium mentors: - - astrojuanlu - - anhiga + - astrojuanlu + - anhiga initiatives: - - GSOC + - GSOC tags: - - python - - plotly - - dash + - python + - plotly + - dash collaborating_projects: - - poliastro + - poliastro --- #### Description @@ -47,30 +47,30 @@ which recently became a NumFOCUS affiliated project. ##### Coding starts -* Engaged with the community and understand the motivation and challenges of +- Engaged with the community and understand the motivation and challenges of the project. -* Have set up a development environment and tried to build some basic Dash +- Have set up a development environment and tried to build some basic Dash application ##### 1st evaluation -* Have a basic web application to display the 3D trajectory of one NEO of choice -* Have all code, tests and documentation in GitHub +- Have a basic web application to display the 3D trajectory of one NEO of choice +- Have all code, tests and documentation in GitHub ##### 2nd evaluation -* Allow the user to change the epoch and/or select a time period -* Add examples of popular NEOs and showcase some approaches from the news -* Have all code, tests and documentation in GitHub +- Allow the user to change the epoch and/or select a time period +- Add examples of popular NEOs and showcase some approaches from the news +- Have all code, tests and documentation in GitHub ##### Final -* Allow the user to display more than one NEO in the application -* Allow the user to export the result as a Python script -* Have all code, tests and documentation in GitHub +- Allow the user to display more than one NEO in the application +- Allow the user to export the result as a Python script +- Have all code, tests and documentation in GitHub #### Secondary goals -* Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth -* Review pull requests from other poliastro contributors, including the mentor -* Give a talk about the work at some Python event +- Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth +- Review pull requests from other poliastro contributors, including the mentor +- Give a talk about the work at some Python event diff --git a/_projects/2018/sunpy/mag_field.md b/src/content/pages/gsoc/2018/sunpy/mag_field.md similarity index 65% rename from _projects/2018/sunpy/mag_field.md rename to src/content/pages/gsoc/2018/sunpy/mag_field.md index 15599207..7f7f48af 100644 --- a/_projects/2018/sunpy/mag_field.md +++ b/src/content/pages/gsoc/2018/sunpy/mag_field.md @@ -3,32 +3,33 @@ name: 3D Map Class for Field Extrapolations in Spherical Coordinates desc: Generalize magnetic field extrapolation to spherical coordinates. # add a short one line description of your project requirements: -# Student requirements: - - Knowledge of vector calculus and differential equations - - Familiar with numerical methods - - Some familiarity with electromagnetism, MHD, potential/force-free magnetic fields (optional) + # Student requirements: + - Knowledge of vector calculus and differential equations + - Familiar with numerical methods + - Some familiarity with electromagnetism, MHD, potential/force-free magnetic fields (optional) difficulty: intermediate issues: -# Related issues (if any) to this project. - - https://github.com/sunpy/solarbextrapolation/issues/12 + # Related issues (if any) to this project. + - https://github.com/sunpy/solarbextrapolation/issues/12 mentors: -# First person in contact; mentors may change before project starts. - - Alex-Ian-Hamilton - - wtbarnes + # First person in contact; mentors may change before project starts. + - Alex-Ian-Hamilton + - wtbarnes initiatives: - - GSOC + - GSOC tags: - - python - - numba - - numpy + - python + - numba + - numpy collaborating_projects: -# suborganisation(s) to which this project belongs. - - sunpy + # suborganization(s) to which this project belongs. + - sunpy --- + #### Description Determining the 3D geometry of the tangled and dynamic coronal magnetic field is an open research problem in solar physics. -A common technique for deriving the 3D vector field from a photospheric magnetogram is to assume a *potential* field such that it can be derived by solving Laplace's equation. +A common technique for deriving the 3D vector field from a photospheric magnetogram is to assume a _potential_ field such that it can be derived by solving Laplace's equation. The SunPy-affiliated [`solarbextrapolation`](https://github.com/sunpy/solarbextrapolation) package solves Laplace's equation using the method of [Sakurai (1982)](http://adsabs.harvard.edu/abs/1982SoPh...76..301S). However, when constructing the 3D field from the magnetogram, the "small-angle" approximation is used such that the curvature of the Sun is ignored, a valid approximation on the scale of an active region. @@ -40,19 +41,22 @@ Currently, the `solarbextrapolation` package uses a Map3D class that is limited It is expected that this new object will serve as a prototype for a first-class data type in the core SunPy package. #### Primary Goals -* Develop a coordinate-aware 3D Map class -* Use 3D Map class for global field extrapolations + +- Develop a coordinate-aware 3D Map class +- Use 3D Map class for global field extrapolations #### Possible Secondary Goals -* Performance improvements -* Improvements to the documentation and examples -* Better visualization methods -* Addition of more advanced extrapolators, e.g. non-linear force-free field + +- Performance improvements +- Improvements to the documentation and examples +- Better visualization methods +- Addition of more advanced extrapolators, e.g. non-linear force-free field #### Additional Resources -* [`solarbextrapolation` package ](https://github.com/sunpy/solarbextrapolation) -* [Maps in SunPy](http://docs.sunpy.org/en/stable/code_ref/map.html) -* [Coordinates in SunPy](http://docs.sunpy.org/en/stable/code_ref/coordinates.html) -* [Coordinates for Solar Image Data -- Thompson (2006)](http://adsabs.harvard.edu/abs/2006A%26A...449..791T) -* [IDL package for global potential field extrapolations](http://www.lmsal.com/~derosa/pfsspack/) -* [Review of Magnetic Field Extrapolation Techniques -- T. Neukirch](http://adsabs.harvard.edu/abs/2005ESASP.596E..12N) + +- [`solarbextrapolation` package](https://github.com/sunpy/solarbextrapolation) +- [Maps in SunPy](http://docs.sunpy.org/en/stable/code_ref/map.html) +- [Coordinates in SunPy](http://docs.sunpy.org/en/stable/code_ref/coordinates.html) +- [Coordinates for Solar Image Data -- Thompson (2006)](http://adsabs.harvard.edu/abs/2006A%26A...449..791T) +- [IDL package for global potential field extrapolations](http://www.lmsal.com/~derosa/pfsspack/) +- [Review of Magnetic Field Extrapolation Techniques -- T. Neukirch](http://adsabs.harvard.edu/abs/2005ESASP.596E..12N) diff --git a/_projects/2018/sunpy/remote_data.md b/src/content/pages/gsoc/2018/sunpy/remote_data.md similarity index 61% rename from _projects/2018/sunpy/remote_data.md rename to src/content/pages/gsoc/2018/sunpy/remote_data.md index 7e125e6a..47e790b3 100644 --- a/_projects/2018/sunpy/remote_data.md +++ b/src/content/pages/gsoc/2018/sunpy/remote_data.md @@ -2,22 +2,22 @@ name: Remote Data in SunPy desc: Implement support for versioned, validated remote data handling in SunPy. requirements: - - Familiar with HTTP client libraries. - - Familiar with checksumming and caches. + - Familiar with HTTP client libraries. + - Familiar with checksumming and caches. difficulty: low issues: - - https://github.com/sunpy/sunpy/issues/1939 - - https://github.com/sunpy/sunpy/issues/1897 + - https://github.com/sunpy/sunpy/issues/1939 + - https://github.com/sunpy/sunpy/issues/1897 mentors: - - Cadair - - wtbarnes - - dpshelio + - Cadair + - wtbarnes + - dpshelio initiatives: - - GSOC + - GSOC tags: - - Python + - Python collaborating_projects: - - sunpy + - sunpy --- #### Description @@ -40,21 +40,21 @@ See [issue #1939](https://github.com/sunpy/sunpy/issues/1939) for more details. ##### Coding Starts -* Engaged with the community and understand the motivation and challenges of the project. +- Engaged with the community and understand the motivation and challenges of the project. ##### Evaluation 1 -* Have evaluated and chosen the best approach for storing a local cache of data. -* Have implemented a basic cache and download system, including tests and documentation. +- Have evaluated and chosen the best approach for storing a local cache of data. +- Have implemented a basic cache and download system, including tests and documentation. ##### Evaluation 2 -* Have worked with your mentors and the community to design a simple and functional API. -* Have a working prototype of this API, including tests. +- Have worked with your mentors and the community to design a simple and functional API. +- Have a working prototype of this API, including tests. ##### Final -* Have finished implementation, testing and documentation. -* Have written examples for the gallery of how to use the functionality. -* Have written developer documentation. -* Have the Pull Request merged after review and feedback. +- Have finished implementation, testing and documentation. +- Have written examples for the gallery of how to use the functionality. +- Have written developer documentation. +- Have the Pull Request merged after review and feedback. diff --git a/_projects/2018/sunpy/roi.md b/src/content/pages/gsoc/2018/sunpy/roi.md similarity index 87% rename from _projects/2018/sunpy/roi.md rename to src/content/pages/gsoc/2018/sunpy/roi.md index 75c0278b..5f81384b 100644 --- a/_projects/2018/sunpy/roi.md +++ b/src/content/pages/gsoc/2018/sunpy/roi.md @@ -3,20 +3,20 @@ name: Region of Interest desc: Meta-Object creation for holding temporal and spatial features. # add a description of your project requirements: - - Familiarity with Python - - Understanding of design patterns + - Familiarity with Python + - Understanding of design patterns difficulty: High issues: - - https://github.com/sunpy/sunpy/issues/164 -mentors: - - dpshelio - - wafels + - https://github.com/sunpy/sunpy/issues/164 +mentors: + - dpshelio + - wafels initiatives: - - GSOC + - GSOC tags: - - sunpy + - sunpy collaborating_projects: - - sunpy + - sunpy --- #### Description @@ -26,7 +26,7 @@ region of interest (ROI) in any physical dimension (such as spatial area, temporal range or spectral window) and interact with the rest of data types used in sunpy. -For example, a region of interest could be a particular area in the Sun +For example, a region of interest could be a particular area in the Sun at a particular moment in time. Therefore, that object should contain the extent of such area, its contour and the time when it was observed. It also needs other information, such as the coordinate system that it @@ -39,6 +39,5 @@ plotting the box containing such region and being aware of difference in time or observational point. So, it needs to be spatial and temporal aware. Additionally, the object needs to understand (be able to parse in) features and -events catalogued in the [HEK](http://www.lmsal.com/hek/hek_isolsearch.html) +events catalogued in the [HEK](http://www.lmsal.com/hek/hek_isolsearch.html) and [HELIO](http://hfc.helio-vo.eu/) databases. - diff --git a/_projects/2018/sunpy/sunkit-image.md b/src/content/pages/gsoc/2018/sunpy/sunkit-image.md similarity index 62% rename from _projects/2018/sunpy/sunkit-image.md rename to src/content/pages/gsoc/2018/sunpy/sunkit-image.md index cb7329d2..62b96fa0 100644 --- a/_projects/2018/sunpy/sunkit-image.md +++ b/src/content/pages/gsoc/2018/sunpy/sunkit-image.md @@ -2,23 +2,23 @@ name: Develop sunkit-image desc: Create and develop a package for solar image analysis. requirements: - - Good understanding of Python. - - Enthusiasm to learn solar image processing. + - Good understanding of Python. + - Enthusiasm to learn solar image processing. difficulty: medium to low issues: - - https://github.com/sunpy/sunpy/pull/1899 + - https://github.com/sunpy/sunpy/pull/1899 mentors: - - Cadair - - wafels - - nabobalis - - mbobra + - Cadair + - wafels + - nabobalis + - mbobra initiatives: - - GSOC + - GSOC tags: - - python - - sunpy + - python + - sunpy collaborating_projects: - - sunpy + - sunpy --- In this project you would create the foundations of the 'sunkit-image' SunPy @@ -39,32 +39,31 @@ the following goals (roughly in this order): 1. Implement the [normalizing-radial-graded filter (NRGF)](http://adsabs.harvard.edu/abs/2006SoPh..236..263M). 2. Port the Multi-Scale Gaussian Normalisation (MGN) code from [#1899](https://github.com/sunpy/sunpy/pull/1899). 3. Implement the [OCCULT-2 algorithm](http://arxiv.org/abs/1307.5046) for coronal loop tracing. -4. Implement image re-sampling as described [here](https://link.springer.com/content/pdf/10.1023/B:SOLA.0000021743.24248.b0.pdf) through updating [this pull request](https://github.com/astropy/reproject/pull/52) to the Astropy [image resampling](https://reproject.readthedocs.io/en/stable/) repository. +4. Implement image re-sampling as described in [this resampling paper](https://link.springer.com/content/pdf/10.1023/B:SOLA.0000021743.24248.b0.pdf) through updating [this pull request](https://github.com/astropy/reproject/pull/52) to the Astropy [image resampling](https://reproject.readthedocs.io/en/stable/) repository. Optional extras: -5. Implement the [soft morphological filtering of solar images](https://www.aanda.org/articles/aa/pdf/2006/38/aa4852-06.pdf) -6. Refactor and write a Python wrapper for [FLCT](https://arxiv.org/abs/0712.4289) [code](http://solarmuri.ssl.berkeley.edu/overview/publicdownloads/software.html). -7. Implement image alignment using feature detection and tracking. [Example](http://scikit-image.org/docs/dev/auto_examples/features_detection/plot_brief.html) - +1. Implement the [soft morphological filtering of solar images](https://www.aanda.org/articles/aa/pdf/2006/38/aa4852-06.pdf) +2. Refactor and write a Python wrapper for [FLCT](https://arxiv.org/abs/0712.4289) [code](http://solarmuri.ssl.berkeley.edu/overview/publicdownloads/software.html). +3. Implement image alignment using feature detection and tracking. [Example](http://scikit-image.org/docs/dev/auto_examples/features_detection/plot_brief.html) #### Milestones ##### GSOC 2018 Official Coding Start -* Have familiarised yourself with the algorithms and with Python packaging. Have worked with the mentors to get the package repository setup on GitHub and the CI and documentation running. +- Have familiarised yourself with the algorithms and with Python packaging. Have worked with the mentors to get the package repository setup on GitHub and the CI and documentation running. ##### To be completed by the GSOC 2018 Phase 1 Evaluation Deadline -* Have implemented, tested and documented the NRGF code. -* Have implemented, tested and documented the MGN code. +- Have implemented, tested and documented the NRGF code. +- Have implemented, tested and documented the MGN code. ##### To be completed by the GSOC 2018 Phase 2 Evaluation Deadline -* Have successfully merged the NRGF and MGN code. -* Have implemented OCCULT-2. +- Have successfully merged the NRGF and MGN code. +- Have implemented OCCULT-2. -##### To be completed by the end of the GSOC 2018 Final Week +##### To be completed by the end of the GSOC 2018 Final Week -* Have tested, documented and merged the OCCULT-2 code. -* Have developed an outline of the implementation of the image resampling code in the context of the Astropy reproject module. +- Have tested, documented and merged the OCCULT-2 code. +- Have developed an outline of the implementation of the image resampling code in the context of the Astropy reproject module. diff --git a/_projects/2018/sunpy/time_refactor.md b/src/content/pages/gsoc/2018/sunpy/time_refactor.md similarity index 68% rename from _projects/2018/sunpy/time_refactor.md rename to src/content/pages/gsoc/2018/sunpy/time_refactor.md index cb7b854e..c3ba2bd4 100644 --- a/_projects/2018/sunpy/time_refactor.md +++ b/src/content/pages/gsoc/2018/sunpy/time_refactor.md @@ -2,25 +2,25 @@ name: Transition to Astropy Time in SunPy desc: Convert the whole SunPy module to using astropy.time to represent time. requirements: - - Good general Python skills. - - Willingness to learn a little about a lot of SunPy. + - Good general Python skills. + - Willingness to learn a little about a lot of SunPy. difficulty: medium issues: - - https://github.com/sunpy/sunpy/issues/993 - - https://github.com/sunpy/sunpy/issues/994 - - https://github.com/sunpy/sunpy/issues/2383 - - https://github.com/sunpy/sunpy/issues/2155 - - https://github.com/sunpy/sunpy/pull/2260 + - https://github.com/sunpy/sunpy/issues/993 + - https://github.com/sunpy/sunpy/issues/994 + - https://github.com/sunpy/sunpy/issues/2383 + - https://github.com/sunpy/sunpy/issues/2155 + - https://github.com/sunpy/sunpy/pull/2260 mentors: - - Cadair - - nabobalis - - Punyaslok + - Cadair + - nabobalis + - Punyaslok initiatives: - - GSOC + - GSOC tags: - - Python + - Python collaborating_projects: - - sunpy + - sunpy --- #### Description @@ -29,7 +29,7 @@ SunPy currently uses `datetime.datetime` objects as it's internal representation of time. The goal of this project is to transition every part of the SunPy codebase to using `astropy.time.Time` instead. The main motivation for this is that the `Time` object in Astropy supports much higher precision representations -of time as well as supporting time formats *e.g.* TAI time which are commonly +of time as well as supporting time formats _e.g._ TAI time which are commonly used by solar physicists. This transition is a major component of the planned SunPy 1.0 release, and will @@ -46,22 +46,21 @@ project will have done substantial research on the use of `parse_time` in the SunPy code and will appreciate the requirements for changes to this part of SunPy. - #### Milestones (if any) ##### Coding Starts -* Engaged with the community and understand the motivation and challenges of the project, especially the desired changes to `parse_time`. +- Engaged with the community and understand the motivation and challenges of the project, especially the desired changes to `parse_time`. ##### Evaluation 1 -* Have implemented a new version of `parse_time` including, tests and documentation. +- Have implemented a new version of `parse_time` including, tests and documentation. ##### Evaluation 2 -* Have transitioned `sunpy.net` to use `astropy.time.Time` +- Have transitioned `sunpy.net` to use `astropy.time.Time` ##### Final -* Have finished transitioning to `Time`, including increasing test coverage where required. -* Have written some narrative documentation to assist users in making the transition. +- Have finished transitioning to `Time`, including increasing test coverage where required. +- Have written some narrative documentation to assist users in making the transition. diff --git a/_projects/2018/timelab/XSPEC.md b/src/content/pages/gsoc/2018/timelab/XSPEC.md similarity index 66% rename from _projects/2018/timelab/XSPEC.md rename to src/content/pages/gsoc/2018/timelab/XSPEC.md index bddacc67..7da412e7 100644 --- a/_projects/2018/timelab/XSPEC.md +++ b/src/content/pages/gsoc/2018/timelab/XSPEC.md @@ -2,74 +2,75 @@ name: Python API for XSPEC desc: Develop a modular python API to use XSPEC (a popular X-ray astronomy tool) in python workflows requirements: -- Familiar with Fortran and/or C++ + - Familiar with Fortran and/or C++ difficulty: hard issues: -- https://github.com/StingraySoftware/stingray/issues/294 + - https://github.com/StingraySoftware/stingray/issues/294 mentors: - - dhuppenkothen - - abigailStev + - dhuppenkothen + - abigailStev initiatives: - - GSOC + - GSOC tags: - - python - - scipy + - python + - scipy collaborating_projects: - - timelab + - timelab --- #### Description -X-ray spectroscopy (measuring and understanding how the brightness of a black -hole source varies with wavelength of the light) is one of the most important -ways we learn about the physics of black holes and their companion stars. For -the past twenty years ago, the main package for X-ray spectroscopy has been -[XSPEC](https://heasarc.gsfc.nasa.gov/docs/xanadu/xspec/manual/XspecManual.html). -While other options exist (e.g., [Sherpa](https://github.com/sherpa/sherpa)), -all of them have one thing in common: -they provide a convenient, but very rigid user interface. This makes them hard -to modify or extend without having to change a large amount of the underlying -source code, something that few scientists are able or willing to do (especially -since XSPEC is mostly written in C++). However, astronomy is changing, and the -requirements we have for our software are changing, too! The current software -environment makes it extremely difficult to build new models and test new ideas, -and it is very hard to install XSPEC in a shared cluster environment due to a -legacy of complex software dependencies. This is especially important in the -context of [Stingray](https://github.com/StingraySoftware): while we have so -far focused on methods that help us -explore how the brightness of black hole sources changes with time, we would -ideally also want to connect this to how the brightness of black hole sources -changes with energy, and model both at the same time. At the same time, as our -data sets grow, it is becoming increasingly unrealistic that we will be able to -analyse our data on conventional desktop computers. None of the current software -packages allow the user to step outside the few, well-defined commands the user -interface allows, and installing these packages on large computer clusters is -exceptionally difficult. This means that successful completion of this project +X-ray spectroscopy (measuring and understanding how the brightness of a black +hole source varies with wavelength of the light) is one of the most important +ways we learn about the physics of black holes and their companion stars. For +the past twenty years ago, the main package for X-ray spectroscopy has been +[XSPEC](https://heasarc.gsfc.nasa.gov/docs/xanadu/xspec/manual/XspecManual.html). +While other options exist (e.g., [Sherpa](https://github.com/sherpa/sherpa)), +all of them have one thing in common: +they provide a convenient, but very rigid user interface. This makes them hard +to modify or extend without having to change a large amount of the underlying +source code, something that few scientists are able or willing to do (especially +since XSPEC is mostly written in C++). However, astronomy is changing, and the +requirements we have for our software are changing, too! The current software +environment makes it extremely difficult to build new models and test new ideas, +and it is very hard to install XSPEC in a shared cluster environment due to a +legacy of complex software dependencies. This is especially important in the +context of [Stingray](https://github.com/StingraySoftware): while we have so +far focused on methods that help us +explore how the brightness of black hole sources changes with time, we would +ideally also want to connect this to how the brightness of black hole sources +changes with energy, and model both at the same time. At the same time, as our +data sets grow, it is becoming increasingly unrealistic that we will be able to +analyse our data on conventional desktop computers. None of the current software +packages allow the user to step outside the few, well-defined commands the user +interface allows, and installing these packages on large computer clusters is +exceptionally difficult. This means that successful completion of this project would be a big step forward for the entire field of X-ray astrophysics. For a test of this project by one of our Stingray leads, see [(dhuppenkothen/clarsach)](https://github.com/dhuppenkothen/clarsach). #### Deliverables + Deliverables for this project will be: ##### To complete each milestone -+ Working unit tests for each piece of code +- Working unit tests for each piece of code -+ Documentation for each class, method and function implemented +- Documentation for each class, method and function implemented ##### Milestone 1 -+ Python bindings to the XSPEC models and an API for access +- Python bindings to the XSPEC models and an API for access ##### Milestone 2 -+ Installation files for the XSPEC models (fortran/C++) and the Python library +- Installation files for the XSPEC models (fortran/C++) and the Python library ##### Final -+ [Example/tutorial notebooks](https://github.com/StingraySoftware/notebooks) -connecting the models to the -[Stingray modeling API](https://github.com/StingraySoftware/stingray/tree/master/stingray/modeling) -(in progress) +- [Example/tutorial notebooks](https://github.com/StingraySoftware/notebooks) + connecting the models to the + [Stingray modeling API](https://github.com/StingraySoftware/stingray/tree/master/stingray/modeling) + (in progress) diff --git a/_projects/2018/timelab/optimize.md b/src/content/pages/gsoc/2018/timelab/optimize.md similarity index 75% rename from _projects/2018/timelab/optimize.md rename to src/content/pages/gsoc/2018/timelab/optimize.md index a38dfebd..b918f42c 100644 --- a/_projects/2018/timelab/optimize.md +++ b/src/content/pages/gsoc/2018/timelab/optimize.md @@ -2,24 +2,24 @@ name: Optimize Stingray for Large Datasets desc: Optimize tools in the Stingray library for use on large datasets from new X-ray space missions. requirements: -- Familiar with python optimization tools + - Familiar with python optimization tools difficulty: medium issues: -- https://github.com/StingraySoftware/stingray/issues/164 + - https://github.com/StingraySoftware/stingray/issues/164 mentors: - - matteobachetti - - pbalm - - abigailStev + - matteobachetti + - pbalm + - abigailStev initiatives: - - GSOC + - GSOC tags: - - python - - scipy - - numba - - dask - - memmap + - python + - scipy + - numba + - dask + - memmap collaborating_projects: - - timelab + - timelab --- #### Description @@ -34,12 +34,13 @@ practical use cases, make a thorough profiling of the code, single out bottlenecks, and find solutions. #### Deliverables + Deliverables for this project will be profiling and developing solutions for code bottlenecks and other hindrances to using Stingray library tools on large datasets. ##### To complete each milestone -+ Working unit tests for each piece of code +- Working unit tests for each piece of code -+ Documentation for each class, method and function implemented \ No newline at end of file +- Documentation for each class, method and function implemented diff --git a/_projects/2018/timelab/quasiperiodic.md b/src/content/pages/gsoc/2018/timelab/quasiperiodic.md similarity index 61% rename from _projects/2018/timelab/quasiperiodic.md rename to src/content/pages/gsoc/2018/timelab/quasiperiodic.md index bec0a114..7596cca4 100644 --- a/_projects/2018/timelab/quasiperiodic.md +++ b/src/content/pages/gsoc/2018/timelab/quasiperiodic.md @@ -2,64 +2,65 @@ name: Phase-resolved oscillations desc: Implement method to calculate the phase of oscillatory phenomena with non-constant frequency, and calculate phase-resolved spectra. requirements: - - Familiar with numerical analysis + - Familiar with numerical analysis difficulty: medium issues: - - https://github.com/StingraySoftware/stingray/issues/293 + - https://github.com/StingraySoftware/stingray/issues/293 mentors: - - abigailStev - - matteobachetti + - abigailStev + - matteobachetti initiatives: - - GSOC + - GSOC tags: - - python - - scipy - - numba + - python + - scipy + - numba collaborating_projects: - - timelab + - timelab --- #### Description -Quasi-periodic oscillations are the "heart-beat" of black holes and neutron stars: -oscillations with changing phase and frequency, probably due to the complicated motion of matter around these objects. -Besides characterizing how these frequencies evolve in time (accelerate, decelerate, for example, when the luminosity increases), -it is important to understand their exact physical meaning. A few examples in the literature use different approaches -to the problem, and calculate the different spectrum of the light emitted at different phases of these oscillations. -This is highly non-trivial: one cannot follow easily the single "heartbeat", but needs to apply a strong de-noising to -the signal first, and then calculate the average spectrum during the oscillation. +Quasi-periodic oscillations are the "heart-beat" of black holes and neutron stars: +oscillations with changing phase and frequency, probably due to the complicated motion of matter around these objects. +Besides characterizing how these frequencies evolve in time (accelerate, decelerate, for example, when the luminosity increases), +it is important to understand their exact physical meaning. A few examples in the literature use different approaches +to the problem, and calculate the different spectrum of the light emitted at different phases of these oscillations. +This is highly non-trivial: one cannot follow easily the single "heartbeat", but needs to apply a strong de-noising to +the signal first, and then calculate the average spectrum during the oscillation. The reward for this scientific approach can be very high, and people have implemented a few different approaches to the problem, e.g.: -+ [Ingram et al. 2016](http://adsabs.harvard.edu/cgi-bin/nph-data_query?bibcode=2016MNRAS.461.1967I&link_type=EJOURNAL) [open-access preprint](http://adsabs.harvard.edu/cgi-bin/nph-data_query?bibcode=2016MNRAS.461.1967I&link_type=PREPRINT) +- [Ingram et al. 2016](http://adsabs.harvard.edu/cgi-bin/nph-data_query?bibcode=2016MNRAS.461.1967I&link_type=EJOURNAL) [open-access preprint](http://adsabs.harvard.edu/cgi-bin/nph-data_query?bibcode=2016MNRAS.461.1967I&link_type=PREPRINT) -+ [Stevens & Uttley 2016](http://adsabs.harvard.edu/cgi-bin/nph-data_query?bibcode=2016MNRAS.460.2796S&link_type=ARTICLE) [open-access preprint](http://adsabs.harvard.edu/cgi-bin/nph-data_query?bibcode=2016MNRAS.460.2796S&link_type=PREPRINT) +- [Stevens & Uttley 2016](http://adsabs.harvard.edu/cgi-bin/nph-data_query?bibcode=2016MNRAS.460.2796S&link_type=ARTICLE) [open-access preprint](http://adsabs.harvard.edu/cgi-bin/nph-data_query?bibcode=2016MNRAS.460.2796S&link_type=PREPRINT) -In this Project, the student will work with the mentor to implement the full chain of de-noising and +In this Project, the student will work with the mentor to implement the full chain of de-noising and phase-resolved spectroscopy of quasi-periodic oscillations, in such a way that -+ Any user with proper data sets can easily get a result +- Any user with proper data sets can easily get a result -+ If datasets do not allow a solution (e.g., the modulation is not strong enough) warnings have to be sent. +- If datasets do not allow a solution (e.g., the modulation is not strong enough) warnings have to be sent. -+ Both methods can actually be used for pulsars too (it is the trivial case!). +- Both methods can actually be used for pulsars too (it is the trivial case!). #### Deliverables + Deliverables for this project will be ##### To complete each milestone -+ Working unit tests for each piece of code +- Working unit tests for each piece of code -+ Documentation for each class, method and function implemented +- Documentation for each class, method and function implemented ##### Milestone 1 -+ A semi-automated procedure to follow the frequency of oscillations as they vary +- A semi-automated procedure to follow the frequency of oscillations as they vary ##### Milestone 2 -+ The de-noising function that leads to the oscillation average profile ("heartbeat" shape) at different energies +- The de-noising function that leads to the oscillation average profile ("heartbeat" shape) at different energies ##### Final -+ A suite of scripts outlining workflows useful to scientists in practice +- A suite of scripts outlining workflows useful to scientists in practice diff --git a/_projects/2019/astropy/astroquery.md b/src/content/pages/gsoc/2019/astropy/astroquery.md similarity index 81% rename from _projects/2019/astropy/astroquery.md rename to src/content/pages/gsoc/2019/astropy/astroquery.md index 4fc208be..2f0a4231 100644 --- a/_projects/2019/astropy/astroquery.md +++ b/src/content/pages/gsoc/2019/astropy/astroquery.md @@ -2,23 +2,23 @@ name: Add additional archives to astroquery desc: Implement module(s) to access currently unsupported astronomical archives using astroquery. requirements: - - Python - - Basic understanding of web queries and APIs + - Python + - Basic understanding of web queries and APIs difficulty: low issues: - - https://github.com/astropy/astroquery/issues/226 + - https://github.com/astropy/astroquery/issues/226 mentors: - - keflavich - - bsipocz + - keflavich + - bsipocz initiatives: - - GSOC + - GSOC tags: - - python - - astroquery - - astropy + - python + - astroquery + - astropy collaborating_projects: - - astropy - - astroquery + - astropy + - astroquery --- #### Description @@ -31,8 +31,7 @@ A full list of new services that have been suggested by our users [can be found in these issues](https://github.com/astropy/astroquery/issues?q=is%3Aissue+is%3Aopen+label%3A%22New+Service%22), and a summary [in this issue](https://github.com/astropy/astroquery/issues/226). - -A *possible* set of milestones for any particular one of these modules might be: +A _possible_ set of milestones for any particular one of these modules might be: 1. Research the web API for the archive sufficiently to determine what exactly astroquery should expose. 2. Determine the best interface to access the simplest subset of that archive that would be useful. diff --git a/_projects/2019/astropy/astrowidgets.md b/src/content/pages/gsoc/2019/astropy/astrowidgets.md similarity index 70% rename from _projects/2019/astropy/astrowidgets.md rename to src/content/pages/gsoc/2019/astropy/astrowidgets.md index 711681be..ce02adc4 100644 --- a/_projects/2019/astropy/astrowidgets.md +++ b/src/content/pages/gsoc/2019/astropy/astrowidgets.md @@ -2,24 +2,24 @@ name: Jupyter widgets for Astropy desc: Create "astrowidgets" - Jupyter widgets for Astropy. requirements: - - Python - - Very basic knowledge of CSS. - - Basic understanding of javascript. - - Basic knowledge of astronomical images and photometry + - Python + - Very basic knowledge of CSS. + - Basic understanding of javascript. + - Basic knowledge of astronomical images and photometry difficulty: intermediate mentors: - - mwcraig - - astrofrog - - pllim - - eteq + - mwcraig + - astrofrog + - pllim + - eteq initiatives: - - GSOC + - GSOC tags: - - python - - javascript + - python + - javascript collaborating_projects: - - astropy - - astrowidgets + - astropy + - astrowidgets --- #### Description @@ -30,22 +30,22 @@ The final deliverable for the project will be a version of the [astrowidgets](ht Some of the deliverables for this project would be: -+ Development of the remaining unimplemented features in the +- Development of the remaining unimplemented features in the [target API](https://github.com/eteq/nb-astroimage-api) using ginga as the backend. -+ Develop an implementation using [bqplot](https://github.com/bloomberg/bqplot) and +- Develop an implementation using [bqplot](https://github.com/bloomberg/bqplot) and the [ipyastroimage](https://github.com/glue-viz/ipyastroimage) mark for [bqplot](https://github.com/bloomberg/bqplot) as the backend. -+ Explore development of a non-interactive version using matplotlib as the backend. +- Explore development of a non-interactive version using matplotlib as the backend. The non-interactive version would implement as much of the API as possible in a non-interactive format. -+ Develop a method for identifying the nearest point source to a click on an image +- Develop a method for identifying the nearest point source to a click on an image (very preliminary work on this is available) by combining the above with astropy and its affiliated packages (particularly photutils). -+ Documentation for the implemented backends. -+ More extensive test suite. +- Documentation for the implemented backends. +- More extensive test suite. In addition, these Jupyter notebooks will be developed: -+ Sample notebooks demonstrating each of the back ends. +- Sample notebooks demonstrating each of the back ends. Preliminary development of this project is already underway, so some of the specific deliverables might have changed by the beginning of the summer of code. diff --git a/_projects/2019/astropy/n-waymatch.md b/src/content/pages/gsoc/2019/astropy/n-waymatch.md similarity index 86% rename from _projects/2019/astropy/n-waymatch.md rename to src/content/pages/gsoc/2019/astropy/n-waymatch.md index 84f63b2f..162dffff 100644 --- a/_projects/2019/astropy/n-waymatch.md +++ b/src/content/pages/gsoc/2019/astropy/n-waymatch.md @@ -2,21 +2,20 @@ name: Developing an n-way matcher for Astropy desc: Develop an Astropy Table compatible n-way matcher of astronomical catalogues requirements: - - Python + - Python difficulty: medium issues: - - https://groups.google.com/forum/#!topic/astropy-dev/Y8qHC9_I0VI + - https://groups.google.com/forum/#!topic/astropy-dev/Y8qHC9_I0VI mentors: - - manodeep - - parejkoj + - manodeep + - parejkoj initiatives: - - GSOC + - GSOC tags: - - python - - astropy + - python + - astropy collaborating_projects: - - astropy - + - astropy --- #### Description diff --git a/_projects/2019/astropy/stcs_regions.md b/src/content/pages/gsoc/2019/astropy/stcs_regions.md similarity index 77% rename from _projects/2019/astropy/stcs_regions.md rename to src/content/pages/gsoc/2019/astropy/stcs_regions.md index 010f9ec0..44c26c0f 100644 --- a/_projects/2019/astropy/stcs_regions.md +++ b/src/content/pages/gsoc/2019/astropy/stcs_regions.md @@ -3,26 +3,26 @@ name: STC-S regions desc: Implement the STC-S regions standard in astropy/regions # add a short one line description of your project requirements: -# Student requirements: - - Python + # Student requirements: + - Python difficulty: low issues: -# Related issues (if any) to this project. - - https://github.com/astropy/regions/issues/21 + # Related issues (if any) to this project. + - https://github.com/astropy/regions/issues/21 mentors: -# First person in contact; mentors may change before project starts. - - keflavich + # First person in contact; mentors may change before project starts. + - keflavich initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - python - - regions - - astropy + # Different technologies needed + - python + - regions + - astropy collaborating_projects: -# suborganisation(s) to which this project belongs. - - astropy - - regions + # suborganization(s) to which this project belongs. + - astropy + - regions --- #### Description diff --git a/src/content/pages/gsoc/2019/astropy/table-optimize.md b/src/content/pages/gsoc/2019/astropy/table-optimize.md new file mode 100644 index 00000000..e50dac98 --- /dev/null +++ b/src/content/pages/gsoc/2019/astropy/table-optimize.md @@ -0,0 +1,63 @@ +--- +name: Improving astropy Table performance +desc: Improve the speed of common Table operations like slicing +# add a short one line description of your project +requirements: + # Student requirements: + - Familiar with Cython and Python code profiling + - Familiar with Python speed optimization strategies +difficulty: medium +issues: +# Related issues (if any) to this project. +mentors: + # First person in contact; mentors may change before project starts. + - taldcroft + - mhvk +initiatives: + - GSOC +tags: + # Different technologies needed + - python + - Cython +collaborating_projects: + # suborganization(s) to which this project belongs. + - astropy +--- + +Improving astropy Table performance + +#### Description + +The astropy table sub-package defines a core Table class that is +used to store and manipulate tabular data within astropy. This class +was written with an emphasis on functionality, convenience for astronomers, +and code clarity. With the astropy table package now fairly mature +and with a strong set of regression tests in place, it is time to focus +on performance for basic operations like table creation and slicing. +For a simple operation like slicing, astropy Table is currently about +a factor of 10 slower than Pandas. This project will focus on identifying +performance bottlenecks, writing performance tests for astropy-benchmarks, +and then developing code to improve the performance. It is possible that +some fixes will require the use of Cython so previous experience is +desirable though not absolutely required. + +#### Milestones (if any) + +##### GSOC 2019 CODING STARTS + +- Perform developer install of `astropy`. +- Install Python profiling tools. +- Study astropy and the table package capabilities. + +##### GSOC 2019 MIDTERM + +- Install and run `asv`. +- Examine existing `asv` benchmarks and identify areas for improved benchmarking. +- Profile key parts of table code and identify performance bottlenecks. +- Identify strategies for improved speed performance. +- Implement initial performance improvements. + +##### GSOC 2019 FINAL + +- Continue and finalize implementation of performance improvements. +- Contine and finalize additional `asv` benchmark tests. diff --git a/src/content/pages/gsoc/2019/astropy/telescopy.md b/src/content/pages/gsoc/2019/astropy/telescopy.md new file mode 100644 index 00000000..1ad35718 --- /dev/null +++ b/src/content/pages/gsoc/2019/astropy/telescopy.md @@ -0,0 +1,50 @@ +--- +name: telescopy +desc: A generic API for telescope S/N calculations. +requirements: + # Student requirements: + - Observational astronomy +difficulty: medium +mentors: + # First person in contact; mentors may change before project starts. + - bmorris3 + - eteq +initiatives: + - GSOC +tags: + # Different technologies needed + - python +collaborating_projects: + # suborganization(s) to which this project belongs. + - astropy +--- + +Specify some telescope, filter, imager, and target properties, and estimate the photons or counts you’d measure + +#### Description + +The goal of this project is to create a simple API for performing signal-to-noise calculations +for telescopic observations using astropy. Users will specify an input source spectrum (e.g. a blackbody), +properties of the source (e.g. magnitude in one band, or a distance), properties of the telescope +(e.g. aperture, throughput), and properties of the imager (e.g. quantum efficiency, gain) in order to calculate +the expected photon flux and count rate. If time allows, the applicant will also develop a submodule for +signal-to-noise calculations of spectroscopic observations. + +#### Milestones (if any) + +##### GSOC CODING STARTS + +- Get to know the existing API, design strawman API +- Generalize the input spectrum object for objects other than blackbodies +- Work out scaling of magnitudes from one band to another + +##### GSOC MIDTERM + +- Write tests which will validate predictions against real data +- Write documentation which explains how to construct your own S/N calculations + +##### GSOC FINAL + +- Have _passing_ tests which validate the API for real observations +- Handle spectroscopic observations at arbitrary spectral resolution +- Write extensive documentation with examples for widely-used telescopes diff --git a/_projects/2019/ctlearn/3d-reconstruction.md b/src/content/pages/gsoc/2019/ctlearn/3d-reconstruction.md similarity index 69% rename from _projects/2019/ctlearn/3d-reconstruction.md rename to src/content/pages/gsoc/2019/ctlearn/3d-reconstruction.md index 60a8db74..53b9eab9 100644 --- a/_projects/2019/ctlearn/3d-reconstruction.md +++ b/src/content/pages/gsoc/2019/ctlearn/3d-reconstruction.md @@ -3,28 +3,28 @@ name: 3D Reconstruction/Convolutional Neural Networks desc: Implement a pipeline for reconstructing 3D inputs from multiple telescope images and training a 3D CNN on them. # add a short one line description of your project requirements: -# Student requirements: - - Python - - Moderate familiarity with neural networks (specifically 3D CNNs) - - Some familiarity with 3D geometry/linear algebra implementation in Python (optional) + # Student requirements: + - Python + - Moderate familiarity with neural networks (specifically 3D CNNs) + - Some familiarity with 3D geometry/linear algebra implementation in Python (optional) difficulty: hard issues: # Related issues (if any) to this project. mentors: -# First person in contact; mentors may change before project starts. - - aribrill - - bryankim96 - - qi-feng + # First person in contact; mentors may change before project starts. + - aribrill + - bryankim96 + - qi-feng initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - python - - tensorflow - - pyeuclid (optional) + # Different technologies needed + - python + - tensorflow + - pyeuclid (optional) collaborating_projects: -# suborganisation(s) to which this project belongs. - - ctlearn + # suborganization(s) to which this project belongs. + - ctlearn --- #### Description @@ -33,25 +33,25 @@ One of the main goals of CTLearn is developing and implementing methods to perfo When it comes to event reconstruction with convolutional neural networks (CNNs), it likely that in order to improve noticeably on existing reconstruction methods, it will be necessary for CNN-based methods to make full use of this stereo information. The current methods implemented in CTLearn, like the convolutional recurrent neural network (CRNN) model do not take full advantage of this information, as they handle each input image of an event without any explicit reference to the geometrical relationship between all of the images. -The idea behind this project is to implement a pre-processing stage which does a preliminary geometric reconstruction before passing the data to a CNN. A purely geometric method, based on photon back-tracing coupled with information about the telescope positions and pointings, is used to reconstruct a 3D array input representing the shower. In this 3D array, unlike the original images (which is only a projection of the 3D shower onto the camera), locality is preserved, as information about the same part of the shower (in three dimensions) will be combined from all telescopes. Ideally, this should result in the locality and hierarchicality assumptions of CNNs being better satisfied, the CNN being better able to extract and use low-level shower information/features, and a more powerful classifier. - +The idea behind this project is to implement a pre-processing stage which does a preliminary geometric reconstruction before passing the data to a CNN. A purely geometric method, based on photon back-tracing coupled with information about the telescope positions and pointings, is used to reconstruct a 3D array input representing the shower. In this 3D array, unlike the original images (which is only a projection of the 3D shower onto the camera), locality is preserved, as information about the same part of the shower (in three dimensions) will be combined from all telescopes. Ideally, this should result in the locality and hierarchicality assumptions of CNNs being better satisfied, the CNN being better able to extract and use low-level shower information/features, and a more powerful classifier. + #### Milestones ##### GSOC CODING STARTS -* Install CTLearn and DL1 Data Handler and verify that shower images can be loaded and manipulated as numpy arrays. -* Read and understand the 3D geometric reconstruction method laid out in the Event Reconstruction for VERITAS note. -* Make a plan for implementation and a definition for the 3D input structure (how photon tracks will be converted into a voxel volume) +- Install CTLearn and DL1 Data Handler and verify that shower images can be loaded and manipulated as numpy arrays. +- Read and understand the 3D geometric reconstruction method laid out in the Event Reconstruction for VERITAS note. +- Make a plan for implementation and a definition for the 3D input structure (how photon tracks will be converted into a voxel volume) ##### GSOC MIDTERM -* Implement the 3D reconstruction method and present example outputs (w/ visualization so they can be validated). -* Present a design for a minimal 3D convolutional neural network for classification (based on a review of the literature). -* Have all code and documentation in GitHub. +- Implement the 3D reconstruction method and present example outputs (w/ visualization so they can be validated). +- Present a design for a minimal 3D convolutional neural network for classification (based on a review of the literature). +- Have all code and documentation in GitHub. ##### GSOC FINAL -* Preprocess a small dataset using the 3D reconstruction code and write code in TensorFlow to train the 3D model on it (should be based on the existing CTLearn framework and only involve definining a new model + any modifications to data loading code required to load 3D data). -* Further optimize/improve implementation of 3D reconstruction method. -* Prepare a report on method feasibility: training time/speed, dataset size/reduction factors, dataset processing time, GPU memory limitations, preliminary performance/observations about training. -* Have all code, documentation, and final configuration files and plots in GitHub. +- Preprocess a small dataset using the 3D reconstruction code and write code in TensorFlow to train the 3D model on it (should be based on the existing CTLearn framework and only involve definining a new model + any modifications to data loading code required to load 3D data). +- Further optimize/improve implementation of 3D reconstruction method. +- Prepare a report on method feasibility: training time/speed, dataset size/reduction factors, dataset processing time, GPU memory limitations, preliminary performance/observations about training. +- Have all code, documentation, and final configuration files and plots in GitHub. diff --git a/_projects/2019/ctlearn/hexagonal_convolution.md b/src/content/pages/gsoc/2019/ctlearn/hexagonal_convolution.md similarity index 62% rename from _projects/2019/ctlearn/hexagonal_convolution.md rename to src/content/pages/gsoc/2019/ctlearn/hexagonal_convolution.md index 09d368f2..6874fae5 100644 --- a/_projects/2019/ctlearn/hexagonal_convolution.md +++ b/src/content/pages/gsoc/2019/ctlearn/hexagonal_convolution.md @@ -3,28 +3,28 @@ name: Hexagonal convolution desc: Implement hexagonal convolution and pooling methods # add a short one line description of your project requirements: -# Student requirements: -- Python -- Basic familiarity with neural networks + # Student requirements: + - Python + - Basic familiarity with neural networks difficulty: medium issues: -# Related issues (if any) to this project. -- https://github.com/ctlearn-project/ctlearn/issues/88 -- https://github.com/ctlearn-project/ctlearn/issues/56 + # Related issues (if any) to this project. + - https://github.com/ctlearn-project/ctlearn/issues/88 + - https://github.com/ctlearn-project/ctlearn/issues/56 mentors: -# First person in contact; mentors may change before project starts. -- aribrill -- nietootein -- TjarkMiener + # First person in contact; mentors may change before project starts. + - aribrill + - nietootein + - TjarkMiener initiatives: -- GSOC + - GSOC tags: -# Different technologies needed -- python -- tensorflow + # Different technologies needed + - python + - tensorflow collaborating_projects: -# suborganisation(s) to which this project belongs. -- ctlearn + # suborganization(s) to which this project belongs. + - ctlearn --- #### Description @@ -39,18 +39,18 @@ In this project, the student will first study the different packages like [Index ##### GSOC CODING STARTS -* Install CTLearn and train a pre-existing benchmark model to verify that it runs correctly. -* Understand the technical and scientific goals of the project. +- Install CTLearn and train a pre-existing benchmark model to verify that it runs correctly. +- Understand the technical and scientific goals of the project. ##### GSOC MIDTERM -* Implement hexagonal convolution and pooling methods in CTLearn. -* Test/Train CTLearn default models using the new method. -* Have all code and documentation in GitHub. +- Implement hexagonal convolution and pooling methods in CTLearn. +- Test/Train CTLearn default models using the new method. +- Have all code and documentation in GitHub. ##### GSOC FINAL -* Complete the training and optimize the performance of the neural network for hexagonal convolution. -* Compare performance with previous benchmarks. -* Make/Edit configuration files and plots demonstrating the performance of hexagonal convolution. -* Have all code, documentation, and final configuration files and plots in GitHub. +- Complete the training and optimize the performance of the neural network for hexagonal convolution. +- Compare performance with previous benchmarks. +- Make/Edit configuration files and plots demonstrating the performance of hexagonal convolution. +- Have all code, documentation, and final configuration files and plots in GitHub. diff --git a/_projects/2019/ctlearn/optimization.md b/src/content/pages/gsoc/2019/ctlearn/optimization.md similarity index 61% rename from _projects/2019/ctlearn/optimization.md rename to src/content/pages/gsoc/2019/ctlearn/optimization.md index f8fa60de..cd6501a2 100644 --- a/_projects/2019/ctlearn/optimization.md +++ b/src/content/pages/gsoc/2019/ctlearn/optimization.md @@ -3,27 +3,27 @@ name: Optimization # add a short one line description of your project desc: Implement a framework for model optimization requirements: -# Student requirements: - - Python - - Basic familiarity with neural networks + # Student requirements: + - Python + - Basic familiarity with neural networks difficulty: medium issues: -# Related issues (if any) to this project. - - https://github.com/ctlearn-project/ctlearn/issues/89 + # Related issues (if any) to this project. + - https://github.com/ctlearn-project/ctlearn/issues/89 mentors: -# First person in contact; mentors may change before project starts. - - nietootein - - bryankim96 - - rlopezcoto + # First person in contact; mentors may change before project starts. + - nietootein + - bryankim96 + - rlopezcoto initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - python - - tensorflow + # Different technologies needed + - python + - tensorflow collaborating_projects: -# suborganisation(s) to which this project belongs. - - ctlearn + # suborganization(s) to which this project belongs. + - ctlearn --- #### Description @@ -39,7 +39,7 @@ distinguishing gamma-ray induced events from cosmic-ray induced events. The better our deep learning models are in telling these two populations apart the better our reach in the gamma-ray Universe will be. Therefore, optimizing our deep learning models has the potential -to make a difference in our view of the Universe at these energies. +to make a difference in our view of the Universe at these energies. In this project, the student will first learn how to use CTLearn to train classification models that tell gamma-ray images from cosmic-ray @@ -54,18 +54,18 @@ currently implemented models. ##### GSOC CODING STARTS -* Install CTLearn and train a pre-existing benchmark model to verify that it runs correctly. -* Understand the technical and scientific goals of the project. +- Install CTLearn and train a pre-existing benchmark model to verify that it runs correctly. +- Understand the technical and scientific goals of the project. ##### GSOC MIDTERM -* Implement the calculation of useful metrics from a prediction file. -* Implement iterative grid and random searches in (a)the hyperparameter (sub)space. -* Have all code and documentation in GitHub. +- Implement the calculation of useful metrics from a prediction file. +- Implement iterative grid and random searches in (a)the hyperparameter (sub)space. +- Have all code and documentation in GitHub. ##### GSOC FINAL -* Complete coarse iterative grid and random searches for the single_tel model. -* Complete coarse iterative grid and random searches for the cnn_rnn model. -* Implement other optimization searches, e.g., random search, genetic algorithms, Bayesian optimization, etc. (time permitting). -* Have all code, documentation, and plots in GitHub. +- Complete coarse iterative grid and random searches for the single_tel model. +- Complete coarse iterative grid and random searches for the cnn_rnn model. +- Implement other optimization searches, e.g., random search, genetic algorithms, Bayesian optimization, etc. (time permitting). +- Have all code, documentation, and plots in GitHub. diff --git a/_projects/2019/ctlearn/regression.md b/src/content/pages/gsoc/2019/ctlearn/regression.md similarity index 62% rename from _projects/2019/ctlearn/regression.md rename to src/content/pages/gsoc/2019/ctlearn/regression.md index 93dc1330..2a614f33 100644 --- a/_projects/2019/ctlearn/regression.md +++ b/src/content/pages/gsoc/2019/ctlearn/regression.md @@ -3,28 +3,28 @@ name: Regression desc: Implement regression for energy estimation and angular reconstruction # add a short one line description of your project requirements: -# Student requirements: - - Python - - Basic familiarity with neural networks + # Student requirements: + - Python + - Basic familiarity with neural networks difficulty: medium issues: -# Related issues (if any) to this project. - - https://github.com/ctlearn-project/ctlearn/issues/67 - - https://github.com/ctlearn-project/ctlearn/issues/82 + # Related issues (if any) to this project. + - https://github.com/ctlearn-project/ctlearn/issues/67 + - https://github.com/ctlearn-project/ctlearn/issues/82 mentors: -# First person in contact; mentors may change before project starts. - - aribrill - - bryankim96 - - TjarkMiener + # First person in contact; mentors may change before project starts. + - aribrill + - bryankim96 + - TjarkMiener initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - python - - tensorflow + # Different technologies needed + - python + - tensorflow collaborating_projects: -# suborganisation(s) to which this project belongs. - - ctlearn + # suborganization(s) to which this project belongs. + - ctlearn --- #### Description @@ -39,20 +39,20 @@ In this project, the student will first implement the ability to load continuous ##### GSOC CODING STARTS -* Install CTLearn and train a pre-existing benchmark model to verify that it runs correctly. -* Understand the technical and scientific goals of the project. +- Install CTLearn and train a pre-existing benchmark model to verify that it runs correctly. +- Understand the technical and scientific goals of the project. ##### GSOC MIDTERM -* Implement loading continuous variables in CTLearn. -* Make a neural network for energy estimation based on the single telescope model in CTLearn and begin training it. -* Have all code and documentation in GitHub. +- Implement loading continuous variables in CTLearn. +- Make a neural network for energy estimation based on the single telescope model in CTLearn and begin training it. +- Have all code and documentation in GitHub. ##### GSOC FINAL -* Complete the training and optimize the performance of the neural network for energy estimation. -* Add the capability for angular reconstruction to the neural network (time permitting). -* Create and train a neural network for energy estimation using multiple images based on the CNN-RNN model in CTLearn (time permitting). -* Make configuration files and plots demonstrating the performance of the neural network(s). -* Evaluating the energy bias and point spread function with the regression network. -* Have all code, documentation, and final configuration files and plots in GitHub. +- Complete the training and optimize the performance of the neural network for energy estimation. +- Add the capability for angular reconstruction to the neural network (time permitting). +- Create and train a neural network for energy estimation using multiple images based on the CNN-RNN model in CTLearn (time permitting). +- Make configuration files and plots demonstrating the performance of the neural network(s). +- Evaluating the energy bias and point spread function with the regression network. +- Have all code, documentation, and final configuration files and plots in GitHub. diff --git a/_projects/2019/ctlearn/rootinput.md b/src/content/pages/gsoc/2019/ctlearn/rootinput.md similarity index 63% rename from _projects/2019/ctlearn/rootinput.md rename to src/content/pages/gsoc/2019/ctlearn/rootinput.md index 730ee90a..be2f2152 100644 --- a/_projects/2019/ctlearn/rootinput.md +++ b/src/content/pages/gsoc/2019/ctlearn/rootinput.md @@ -1,28 +1,28 @@ --- name: ROOT input -desc: Enable input of data in ROOT format from current-generation imaging atmospheric Cherenkov telescopes +desc: Enable input of data in ROOT format from current-generation imaging atmospheric Cherenkov telescopes # add a short one line description of your project requirements: -# Student requirements - - Python - - Basic familiarity with neural networks + # Student requirements + - Python + - Basic familiarity with neural networks difficulty: medium mentors: -# First person in contact; mentors may change before project starts. - - rlopezcoto - - aribrill - - qi-feng + # First person in contact; mentors may change before project starts. + - rlopezcoto + - aribrill + - qi-feng initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - python - - tensorflow - - uproot - - dl1-data-handler + # Different technologies needed + - python + - tensorflow + - uproot + - dl1-data-handler collaborating_projects: -# suborganisation(s) to which this project belongs. - - ctlearn + # suborganization(s) to which this project belongs. + - ctlearn --- #### Description @@ -54,18 +54,18 @@ from current-generation IACTs. ##### GSOC CODING STARTS -* Install CTLearn and train a pre-existing benchmark model to verify that it runs correctly. -* Understand the technical and scientific goals of the project. +- Install CTLearn and train a pre-existing benchmark model to verify that it runs correctly. +- Understand the technical and scientific goals of the project. ##### GSOC MIDTERM -* Implement input of generic data in ROOT format using the packages uproot and Dl1-data-handler. -* Enable input of data in ROOT format from a specific IACT using the packages uproot and Dl1-data-handler. -* Have all code and documentation in GitHub. +- Implement input of generic data in ROOT format using the packages uproot and Dl1-data-handler. +- Enable input of data in ROOT format from a specific IACT using the packages uproot and Dl1-data-handler. +- Have all code and documentation in GitHub. ##### GSOC FINAL -* Enable input of data in ROOT format from a given collection of IACTs. -* Train single_tel classification model on data from a specific IACT. -* Train cnn_rnn classification model on data from a specific IACT. -* Have all code, documentation, and plots in GitHub. +- Enable input of data in ROOT format from a given collection of IACTs. +- Train single_tel classification model on data from a specific IACT. +- Train cnn_rnn classification model on data from a specific IACT. +- Have all code, documentation, and plots in GitHub. diff --git a/src/content/pages/gsoc/2019/index.md b/src/content/pages/gsoc/2019/index.md new file mode 100644 index 00000000..55dfb44b --- /dev/null +++ b/src/content/pages/gsoc/2019/index.md @@ -0,0 +1,5 @@ +--- +title: "Ideas page for Google Summer of Code 2019" +show_main: false +season: 2019 +--- diff --git a/_projects/2019/juliaastro/astroimages.md b/src/content/pages/gsoc/2019/juliaastro/astroimages.md similarity index 65% rename from _projects/2019/juliaastro/astroimages.md rename to src/content/pages/gsoc/2019/juliaastro/astroimages.md index 547404d3..5c2573b0 100644 --- a/_projects/2019/juliaastro/astroimages.md +++ b/src/content/pages/gsoc/2019/juliaastro/astroimages.md @@ -2,29 +2,29 @@ name: Visualization of astronomical images in Julia desc: Expand the capabilities of the AstroImages.jl package requirements: - - Familiarity with FITS files - - Julia + - Familiarity with FITS files + - Julia difficulty: medium issues: - - https://github.com/JuliaAstro/AstroImages.jl/issues/1 - - https://github.com/JuliaAstro/AstroImages.jl/issues/2 - - https://github.com/JuliaAstro/FITSIO.jl/issues/90 + - https://github.com/JuliaAstro/AstroImages.jl/issues/1 + - https://github.com/JuliaAstro/AstroImages.jl/issues/2 + - https://github.com/JuliaAstro/FITSIO.jl/issues/90 mentors: - - giordano - - dpshelio + - giordano + - dpshelio initiatives: - - GSOC + - GSOC tags: - - julia + - julia collaborating_projects: - - JuliaAstro + - JuliaAstro --- #### Description [Julia](http://julialang.org/) is a programming language designed for technical computing that combines ease-of-use of dynamical languages, like Python, and -high-performance of statically-compiled languages, like C. Its most notable +high-performance of statically-compiled languages, like C. Its most notable feature is [multiple dispatch](https://en.wikipedia.org/wiki/Multiple_dispatch), which greatly simplifies the definition of complex functions whose behavior depends on the type of the arguments. @@ -37,33 +37,33 @@ calculations, time system conversions, and computation of dust extinction laws. One of the latest packages is [`AstroImages.jl`](https://github.com/JuliaAstro/AstroImages.jl), which will allow researchers to visualize astronomical images coming from [FITS -files](https://en.wikipedia.org/wiki/FITS). This package is now in its infancy +files](https://en.wikipedia.org/wiki/FITS). This package is now in its infancy and has very basic features, the goal of this project is to expand it and make -it more useful. `AstroImages.jl` has not been officially registered yet, thus +it more useful. `AstroImages.jl` has not been officially registered yet, thus you will be able to freely make any breaking change. #### Expected Outcomes -* Design and implement the user interface -* Support visualization of multiple extensions (e.g., three extensions combined +- Design and implement the user interface +- Support visualization of multiple extensions (e.g., three extensions combined with RGB) -* Integrate with WCS info (accessible via +- Integrate with WCS info (accessible via [`WCS.jl`](https://github.com/JuliaAstro/WCS.jl)) -* Integrate with common visualization and plotting frameworks in Julia, like +- Integrate with common visualization and plotting frameworks in Julia, like [`Images.jl`](https://github.com/JuliaImages/Images.jl), [`Plots.jl`](https://github.com/JuliaPlots/Plots.jl), and optionally [`Makie.jl`](https://github.com/JuliaPlots/Makie.jl) -* Ensure smooth integration with Jupyter notebooks (basic integration is already +- Ensure smooth integration with Jupyter notebooks (basic integration is already in place) -* Write documentation and tests +- Write documentation and tests #### Additional resources -* [Presentation of +- [Presentation of `AstroImages.jl`](https://giordano.github.io/blog/2018-03-22-astroimages/) -* [Preparing Red‐Green‐Blue Images from CCD +- [Preparing Red‐Green‐Blue Images from CCD Data](http://dx.doi.org/10.1086/382245) -* [Making plots with world coordinates in +- [Making plots with world coordinates in Astropy](http://docs.astropy.org/en/stable/visualization/wcsaxes/) -* [Image reprojection (resampling) in +- [Image reprojection (resampling) in Python](https://reproject.readthedocs.io/en/stable/) diff --git a/_projects/2019/poliastro/earth-specific-capabilities.md b/src/content/pages/gsoc/2019/poliastro/earth-specific-capabilities.md similarity index 54% rename from _projects/2019/poliastro/earth-specific-capabilities.md rename to src/content/pages/gsoc/2019/poliastro/earth-specific-capabilities.md index 5c4ff1e3..936ca3d0 100644 --- a/_projects/2019/poliastro/earth-specific-capabilities.md +++ b/src/content/pages/gsoc/2019/poliastro/earth-specific-capabilities.md @@ -2,18 +2,18 @@ name: Earth-specific capabilities desc: Add more Earth-specific capabilities to poliastro to make it more attractive for non-interplanetary use cases requirements: - - Basic notions of orbital mechanics + - Basic notions of orbital mechanics difficulty: easy mentors: - - astrojuanlu - - AunSiro + - astrojuanlu + - AunSiro initiatives: - - GSOC - - SOCIS + - GSOC + - SOCIS tags: - - python + - python collaborating_projects: - - poliastro + - poliastro --- #### Description @@ -23,21 +23,21 @@ of which are only present in commercial-off-the-shelf alternatives, such as predefined low-thrust guidance laws, flybys analysis, and more. In fact, the scope of poliastro explicitly mentions interplanetary applications, and we started there because -* It is fun -* There were scripts here and there, but some of them didn't work well for attractors other than the Earth -* We were too lazy to learn SPICE +- It is fun +- There were scripts here and there, but some of them didn't work well for attractors other than the Earth +- We were too lazy to learn SPICE However, most potential poliastro users (including commercial companies) are interested in Earth-bound trajectory analysis. This includes: -* Launch windows and orbit injection -* Station-keeping and orbit correction maneuvers -* Precise propagation using high-order gravitational and atmospheric models -* Two-Line Element (TLE) usage -* Orbit determination -* Observation scheduling -* Groundtrack plotting -* And more! +- Launch windows and orbit injection +- Station-keeping and orbit correction maneuvers +- Precise propagation using high-order gravitational and atmospheric models +- Two-Line Element (TLE) usage +- Orbit determination +- Observation scheduling +- Groundtrack plotting +- And more! The goal of the project is open-ended and involves improving poliastro for some or all of the above use cases. @@ -45,29 +45,27 @@ The goal of the project is open-ended and involves improving poliastro for some ##### Coding starts -* Engaged with the community and understand the motivation and challenges of +- Engaged with the community and understand the motivation and challenges of the project. -* Have set up a development environment +- Have set up a development environment ##### 1st evaluation -* TBD -* Have all code, tests and documentation in GitHub +- TBD +- Have all code, tests and documentation in GitHub ##### 2nd evaluation -* TBD -* Have all code, tests and documentation in GitHub +- TBD +- Have all code, tests and documentation in GitHub ##### Final -* TBD -* Have all code, tests and documentation in GitHub +- TBD +- Have all code, tests and documentation in GitHub #### Secondary goals -* Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth -* Review pull requests from other poliastro contributors, including the mentor -* Give a talk about the work at some Python event - - +- Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth +- Review pull requests from other poliastro contributors, including the mentor +- Give a talk about the work at some Python event diff --git a/_projects/2018/poliastro/export-czml.md b/src/content/pages/gsoc/2019/poliastro/export-czml.md similarity index 56% rename from _projects/2018/poliastro/export-czml.md rename to src/content/pages/gsoc/2019/poliastro/export-czml.md index e2ea826e..b209dbd2 100644 --- a/_projects/2018/poliastro/export-czml.md +++ b/src/content/pages/gsoc/2019/poliastro/export-czml.md @@ -2,22 +2,22 @@ name: Export to CZML desc: Implement export of Orbit objects to CZML to visualize in Cesium.js requirements: - - Familiar with the JSON format - - Basic experience with JavaScript or TypeScript + - Familiar with the JSON format + - Basic experience with JavaScript or TypeScript difficulty: medium issues: - - https://github.com/poliastro/poliastro/issues/117 - - https://github.com/poliastro/poliastro/issues/287 + - https://github.com/poliastro/poliastro/issues/117 + - https://github.com/poliastro/poliastro/issues/287 mentors: - - astrojuanlu - - newlawrence + - astrojuanlu + - AunSiro initiatives: - - GSOC + - GSOC tags: - - python - - javascript + - python + - javascript collaborating_projects: - - poliastro + - poliastro --- #### Description @@ -38,33 +38,33 @@ understand our output. ##### Coding starts -* Engaged with the community and understand the motivation and challenges of +- Engaged with the community and understand the motivation and challenges of the project. -* Have set up a development environment and get familiar with the Cesium +- Have set up a development environment and get familiar with the Cesium Sandcastle (see "Additional resources") ##### 1st evaluation -* Have basic export for an orbit around the Earth -* Have all code, tests and documentation in GitHub +- Have basic export for an orbit around the Earth +- Have all code, tests and documentation in GitHub ##### 2nd evaluation -* Have complex export that includes attractors and target bodies, if any -* Have all code, tests and documentation in GitHub +- Have complex export that includes attractors and target bodies, if any +- Have all code, tests and documentation in GitHub ##### Final -* Have created a Cesium application that understand the necessary metadata -* Have all code, tests and documentation in GitHub +- Have created a Cesium application that understand the necessary metadata +- Have all code, tests and documentation in GitHub #### Secondary goals -* Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth -* Review pull requests from other poliastro contributors, including the mentor -* Give a talk about the work at some Python event +- Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth +- Review pull requests from other poliastro contributors, including the mentor +- Give a talk about the work at some Python event #### Additional resources -* [Cesium Sandcastle](https://cesiumjs.org/Cesium/Build/Apps/Sandcastle/index.html?src=CZML.html&label=DataSources) -* [Sample data](https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Apps/SampleData/simple.czml) +- [Cesium Sandcastle](https://cesiumjs.org/Cesium/Build/Apps/Sandcastle/index.html?src=CZML.html&label=DataSources) +- [Sample data](https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Apps/SampleData/simple.czml) diff --git a/_projects/2020/poliastro/poliastro-as-a-service.md b/src/content/pages/gsoc/2019/poliastro/poliastro-as-a-service.md similarity index 61% rename from _projects/2020/poliastro/poliastro-as-a-service.md rename to src/content/pages/gsoc/2019/poliastro/poliastro-as-a-service.md index 127acd6c..0dd09204 100644 --- a/_projects/2020/poliastro/poliastro-as-a-service.md +++ b/src/content/pages/gsoc/2019/poliastro/poliastro-as-a-service.md @@ -2,24 +2,24 @@ name: poliastro-as-a-Service desc: Deploy poliastro in one or more serverless cloud providers requirements: - - Basic experience with cloud, serverless - - Basic experience with Docker + - Basic experience with cloud, serverless + - Basic experience with Docker difficulty: medium issues: - - https://github.com/poliastro/poliastro/issues/168 - - https://github.com/poliastro/poliastro/issues/444 + - https://github.com/poliastro/poliastro/issues/168 + - https://github.com/poliastro/poliastro/issues/444 mentors: - - astrojuanlu - - jorgepiloto + - astrojuanlu + - AunSiro initiatives: - - GSOC - - SOCIS + - GSOC + - SOCIS tags: - - python - - javascript - - docker + - python + - javascript + - docker collaborating_projects: - - poliastro + - poliastro --- #### Description @@ -43,29 +43,29 @@ and if time permits create a demo REST API. ##### Coding starts -* Engaged with the community and understand the motivation and challenges of +- Engaged with the community and understand the motivation and challenges of the project. -* Have set up a development environment and get familiar with poliastro dependencies and usage of external data +- Have set up a development environment and get familiar with poliastro dependencies and usage of external data ##### 1st evaluation -* Identified poliastro heaviest dependencies (probably SciPy) and implemented proper alternatives, warnings and error messages when they are not installed -* Have all code, tests and documentation in GitHub +- Identified poliastro heaviest dependencies (probably SciPy) and implemented proper alternatives, warnings and error messages when they are not installed +- Have all code, tests and documentation in GitHub ##### 2nd evaluation -* Created a Dockerfile for poliastro -* Deployed poliastro in Amazon Web Services Lambda -* Have all code, tests and documentation in GitHub +- Created a Dockerfile for poliastro +- Deployed poliastro in Amazon Web Services Lambda +- Have all code, tests and documentation in GitHub ##### Final -* Deployed poliastro in a second cloud or PaaS -* Created a demo REST API covering some basic functionality -* Have all code, tests and documentation in GitHub +- Deployed poliastro in a second cloud or PaaS +- Created a demo REST API covering some basic functionality +- Have all code, tests and documentation in GitHub #### Secondary goals -* Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth -* Review pull requests from other poliastro contributors, including the mentor -* Give a talk about the work at some Python event +- Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth +- Review pull requests from other poliastro contributors, including the mentor +- Give a talk about the work at some Python event diff --git a/_projects/2019/poliastro/validation-framework.md b/src/content/pages/gsoc/2019/poliastro/validation-framework.md similarity index 54% rename from _projects/2019/poliastro/validation-framework.md rename to src/content/pages/gsoc/2019/poliastro/validation-framework.md index 31375fa3..67abd9e1 100644 --- a/_projects/2019/poliastro/validation-framework.md +++ b/src/content/pages/gsoc/2019/poliastro/validation-framework.md @@ -2,21 +2,21 @@ name: Validation framework desc: Create a validation framework that compares poliastro with other similar software requirements: - - Experience automating processes with Python - - Basic notions of numerical analysis + - Experience automating processes with Python + - Basic notions of numerical analysis difficulty: medium issues: - - https://github.com/poliastro/poliastro/issues/109 + - https://github.com/poliastro/poliastro/issues/109 mentors: - - astrojuanlu - - AunSiro + - astrojuanlu + - AunSiro initiatives: - - GSOC - - SOCIS + - GSOC + - SOCIS tags: - - python + - python collaborating_projects: - - poliastro + - poliastro --- #### Description @@ -26,8 +26,8 @@ _Validation is hard._ The current approach in poliastro is to add unit tests tha However, poliastro is now a mature project and validating against textbook examples is not enough anymore, for several reasons: -* It is being used more and more in companies and professional settings, which cannot afford failure -* It has grown in feature set and can do more complicated things, which are out of the scope of undergraduate textbooks +- It is being used more and more in companies and professional settings, which cannot afford failure +- It has grown in feature set and can do more complicated things, which are out of the scope of undergraduate textbooks One example of this is the tests covering perturbations and low-thrust guidance laws (see [last year results](https://blog.poliastro.space/2018/08/05/2018-08-05-google-summer-of-code-2018/) @@ -44,40 +44,39 @@ much further than that. ##### Coding starts -* Engaged with the community and understand the motivation and challenges of +- Engaged with the community and understand the motivation and challenges of the project. -* Have set up a development environment and get familiar with either SPICE, GMAT, STK, or all of them +- Have set up a development environment and get familiar with either SPICE, GMAT, STK, or all of them ##### 1st evaluation -* Have settled on one of the tools for reference frame validation -* Have a basic understanding of reference frames -* Have converted the `Body` rotational elements to proper reference frames -* Have all code, tests and documentation in GitHub +- Have settled on one of the tools for reference frame validation +- Have a basic understanding of reference frames +- Have converted the `Body` rotational elements to proper reference frames +- Have all code, tests and documentation in GitHub ##### 2nd evaluation -* Have produced a table similar to [astropy's](http://www.astropy.org/coordinates-benchmark/summary.html) for our planetary reference frames -* Have all code, tests and documentation in GitHub +- Have produced a table similar to [astropy's](http://www.astropy.org/coordinates-benchmark/summary.html) for our planetary reference frames +- Have all code, tests and documentation in GitHub ##### Final -* Have used a second method to validate the reference frames -* Have started a conversation in Astropy to integrate our code upstream -* Have all code, tests and documentation in GitHub +- Have used a second method to validate the reference frames +- Have started a conversation in Astropy to integrate our code upstream +- Have all code, tests and documentation in GitHub #### Secondary goals -* Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth -* Review pull requests from other poliastro contributors, including the mentor -* Maintain [poliastro benchmarks](https://blog.poliastro.space/poliastro-benchmarks/) -* Give a talk about the work at some Python event +- Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth +- Review pull requests from other poliastro contributors, including the mentor +- Maintain [poliastro benchmarks](https://blog.poliastro.space/poliastro-benchmarks/) +- Give a talk about the work at some Python event #### Additional resources -* [Wiki page on Validation](https://github.com/poliastro/poliastro/wiki/Validation) -* [SpiceyPy](http://spiceypy.readthedocs.io/) (Python wrappers for SPICE) -* [GMAT](http://www.gmatcentral.org/) -* [STK](https://agi.com/products/engineering-tools) -* [Discussion about ecliptic reference frames in Astropy](https://github.com/astropy/astropy/pull/6508) - +- [Wiki page on Validation](https://github.com/poliastro/poliastro/wiki/Validation) +- [SpiceyPy](http://spiceypy.readthedocs.io/) (Python wrappers for SPICE) +- [GMAT](http://www.gmatcentral.org/) +- [STK](https://agi.com/products/engineering-tools) +- [Discussion about ecliptic reference frames in Astropy](https://github.com/astropy/astropy/pull/6508) diff --git a/src/content/pages/gsoc/2019/sunpy/featuresevents.md b/src/content/pages/gsoc/2019/sunpy/featuresevents.md new file mode 100644 index 00000000..a61dfbb5 --- /dev/null +++ b/src/content/pages/gsoc/2019/sunpy/featuresevents.md @@ -0,0 +1,74 @@ +--- +name: Feature and Event Objects in SunPy +desc: Implements a feature/event object in SunPy. +requirements: + - Familiar with methods for creating classes, objects and subclasses. +difficulty: medium +issues: + - https://github.com/sunpy/sunpy/pull/2759 + - https://github.com/sunpy/sunpy/issues/1792 + - https://github.com/sunpy/sunpy/issues/1398 + - https://github.com/sunpy/sunpy/issues/164 +mentors: + - wafels + - Cadair + - dpshelio +initiatives: + - GSOC +tags: + - Python +collaborating_projects: + - SunPy +--- + +#### Description + +The Sun displays many different features and events (FEs). These are +detected and described either automatically by algorithm, or by visual +inspection by human, or by a combination of both. There are many +different repositories of these FEs online. SunPy provides access to +two large FE repositories, the Heliophysics Event Knowledgebase (HEK) and +the Helio Event Catalogue (HEC). + +The aim of this project is to create a SunPy object that normalizes +input from both the HEK and HEC and creates a SunPy FE object. The +SunPy FE object should take advantage of existing SunPy capabilities +such as SunPy spatial co-ordinates and SunPy time. This will make FE +data much more useful to SunPy users. + +The SunPy FE object should interact intuitively with existing SunPy +objects such as the SunPy maps and timeseries. For example, it should +be simple for a FE with a spatial extent property to be overplotted +on SunPy map; similarly, it should be simple for a FE with a temporal +duration to be overplotted on a SunPy timeseries. + +#### Milestones + +##### Coding Starts + +- Engaged with the community and understand the motivation and + challenges of the project. + +##### Evaluation 1 + +- Have understood what a FE is in the context of solar physics + research and why their interaction with existing SunPy objects is + important. +- Have evaluated and chosen an approach to the design of a SunPy FE + object. +- Have implemented a basic SunPy FE object. + +##### Evaluation 2 + +- Have worked with your mentors and the community to design a simple + and functional API. +- Have a working prototype of the SunPy FE object that normalizes + input from both the HEK and HEC. +- Have tests for the working prototype. + +##### Final + +- Have finished implementation, testing and documentation. +- Have written examples for the gallery of how to use the functionality. +- Have written developer documentation. +- Have the Pull Request merged after review and feedback. diff --git a/_projects/2019/sunpy/helioviewer.md b/src/content/pages/gsoc/2019/sunpy/helioviewer.md similarity index 58% rename from _projects/2019/sunpy/helioviewer.md rename to src/content/pages/gsoc/2019/sunpy/helioviewer.md index 53ae2828..733338c8 100644 --- a/_projects/2019/sunpy/helioviewer.md +++ b/src/content/pages/gsoc/2019/sunpy/helioviewer.md @@ -2,23 +2,23 @@ name: HelioViewer Python API Wrapper desc: Creating a full Python wrapper for the Unirest Helioviewer API requirements: - - Familiarity with Python - - Some familiarity with Unirest/HTTP requests (ideally) + - Familiarity with Python + - Some familiarity with Unirest/HTTP requests (ideally) difficulty: medium issues: - - https://github.com/sunpy/sunpy/issues/2860 - - https://github.com/sunpy/sunpy/issues/2762 - - https://github.com/sunpy/sunpy/issues/2878 + - https://github.com/sunpy/sunpy/issues/2860 + - https://github.com/sunpy/sunpy/issues/2762 + - https://github.com/sunpy/sunpy/issues/2878 mentors: - - wafels - - Cadair - - Helioviewer-Kirill + - wafels + - Cadair + - Helioviewer-Kirill initiatives: - - GSOC + - GSOC tags: - - python + - python collaborating_projects: - - sunpy + - sunpy --- #### Description @@ -26,7 +26,7 @@ collaborating_projects: This project aims to design and implement a low level Python wrapper around the unirest API provided by the HelioViewer Project. This would create a new affiliated SunPy package (name up for suggestions). Currently SunPy has a `HelioviewerClient` that implements only a handful of the available API. -They are `getClosestImage`, `getJP2Image`, `getJP2Header (in an open pull request as of writing)` and `takeScreenshot` from the Helioviewer API and you can see our code [here.](https://github.com/sunpy/sunpy/blob/master/sunpy/net/helioviewer.py) +They are `getClosestImage`, `getJP2Image`, `getJP2Header (in an open pull request as of writing)` and `takeScreenshot` from the Helioviewer API and you can see our code in [the current SunPy client implementation](https://github.com/sunpy/sunpy/blob/master/sunpy/net/helioviewer.py). What we want to do is to create a new Python package that will lightly wrap every aspect of the HelioViewer API allowing anyone to create their own helioviewer.org like GUI in Python (this could be part of the project but will depend on the progress). To facilitate this, we will need to remove the current code from SunPy and move it to the new affiliated package. @@ -34,25 +34,25 @@ What we want to do is to create a new Python package that will lightly wrap ever ##### Coding starts -* Engaged with the community and understand the motivation and challenges of the project. -* Have set up a development environment. -* Helped to setup the new package. +- Engaged with the community and understand the motivation and challenges of the project. +- Have set up a development environment. +- Helped to setup the new package. ##### To be completed by the Phase 1 Evaluation Deadline -* Have 33% of the API wrapped. -* Have all code, tests and documentation in GitHub. +- Have 33% of the API wrapped. +- Have all code, tests and documentation in GitHub. ##### To be completed by the Phase 2 Evaluation Deadline -* Have 66% of the API wrapped. -* Have all code, tests and documentation in GitHub. +- Have 66% of the API wrapped. +- Have all code, tests and documentation in GitHub. ##### To be completed by the end of GSoC -* All of the API is wrapped within the package. -* Have all code, tests and documentation in GitHub. +- All of the API is wrapped within the package. +- Have all code, tests and documentation in GitHub. ##### Additional Aims (time permitting) -* Start on a GUI-like interface for the new package, if time permits. +- Start on a GUI-like interface for the new package, if time permits. diff --git a/_projects/2019/sunpy/irispy_response.md b/src/content/pages/gsoc/2019/sunpy/irispy_response.md similarity index 59% rename from _projects/2019/sunpy/irispy_response.md rename to src/content/pages/gsoc/2019/sunpy/irispy_response.md index 64d25ccc..805c5482 100644 --- a/_projects/2019/sunpy/irispy_response.md +++ b/src/content/pages/gsoc/2019/sunpy/irispy_response.md @@ -3,25 +3,25 @@ name: Add Time-dependent Instrument Response Function to IRISpy desc: Enable IRISpy users to derive the relationship between instrument and physical intensity unitsbased in the time at which observations were taken. # add a short one line description of your project requirements: -# Student requirements: - - Python + # Student requirements: + - Python difficulty: beginner issues: -# Related issues (if any) to this project. - - https://github.com/sunpy/irispy/issues/27 - - https://github.com/sunpy/irispy/pull/102 + # Related issues (if any) to this project. + - https://github.com/sunpy/irispy/issues/27 + - https://github.com/sunpy/irispy/pull/102 mentors: -# First person in contact; mentors may change before project starts. - - DanRyanIrish - - asainz-solarphysics + # First person in contact; mentors may change before project starts. + - DanRyanIrish + - asainz-solarphysics initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - python + # Different technologies needed + - python collaborating_projects: -# suborganisation(s) to which this project belongs. - - SunPy + # suborganization(s) to which this project belongs. + - SunPy --- #### Description @@ -30,31 +30,31 @@ The Interface Region Imaging Spectrograph (IRIS) is a NASA Small Explorer satell to make spectroscopic and imaging observations of the solar chromosphere and transition region. An important tool in interpreting these observations is the instrument response function which expresses the relationship between the physical intensity of light entering the instrument and -the data number (DN) recorded by the CCD detectors. The response function was carefully measured +the data number (DN) recorded by the CCD detectors. The response function was carefully measured by the IRIS team before launch and this is currently available to IRISpy users for their analysis. -However, due to time-dependent factors like degradation, it is known that the response function -evolves with time in orbit. For this reason the IRIS team has developed a fitting algorithm based on -calibration flights that predicts the response function as a function of time. A direct translation +However, due to time-dependent factors like degradation, it is known that the response function +evolves with time in orbit. For this reason the IRIS team has developed a fitting algorithm based on +calibration flights that predicts the response function as a function of time. A direct translation of this algorithm from its original language, IDL (Interactive Data Langauage), into Python has already been performed but requires more work before it can be merged into IRISpy. In this project, the following tasks must be performed: -* The time-dependent instrument function response code must be rewritten to be more efficient and Python-friendly; -* Formal benchmarking between the results it produces and those found using the original IDL code must be performed; -* Tests for the Python version must be written; -* This software must be incoporated into methods and functions in IRISpy that depend on the instrument response function. + +- The time-dependent instrument function response code must be rewritten to be more efficient and Python-friendly; +- Formal benchmarking between the results it produces and those found using the original IDL code must be performed; +- Tests for the Python version must be written; +- This software must be incoporated into methods and functions in IRISpy that depend on the instrument response function. These new feaures will give scientists far greater power and abilty to perform IRIS data analysis in Python and make new discoveries regarding the energetics and dynamics of the solar chromosphere and transition region. #### Expected Outcomes -* A function for deriving the time-dependent IRIS reponse function. -* Benchmarking and unit tests so this new software can be reliably maintained. -* Updated intensity conversion methods between intrument and physical units that correct for -the time observations were taken. - +- A function for deriving the time-dependent IRIS reponse function. +- Benchmarking and unit tests so this new software can be reliably maintained. +- Updated intensity conversion methods between intrument and physical units that correct for + the time observations were taken. #### Milestones (if any) diff --git a/_projects/2019/sunpy/mag_field.md b/src/content/pages/gsoc/2019/sunpy/mag_field.md similarity index 67% rename from _projects/2019/sunpy/mag_field.md rename to src/content/pages/gsoc/2019/sunpy/mag_field.md index b8f6eb0a..8d696310 100644 --- a/_projects/2019/sunpy/mag_field.md +++ b/src/content/pages/gsoc/2019/sunpy/mag_field.md @@ -2,25 +2,25 @@ name: Expand the scope of solarbextrapolation. desc: Add more numerical models and generalize magnetic field extrapolation to spherical coordinates. requirements: - - Knowledge of vector calculus and differential equations - - Familiar with numerical methods - - Some familiarity with electromagnetism, MHD, potential/force-free magnetic fields (optional) + - Knowledge of vector calculus and differential equations + - Familiar with numerical methods + - Some familiarity with electromagnetism, MHD, potential/force-free magnetic fields (optional) difficulty: intermediate issues: - - https://groups.google.com/forum/#!topic/sunpy/ZLu_HoX_lbc - - https://github.com/sunpy/solarbextrapolation/issues/12 + - https://groups.google.com/forum/#!topic/sunpy/ZLu_HoX_lbc + - https://github.com/sunpy/solarbextrapolation/issues/12 mentors: - - Alex-Ian-Hamilton - - Cadair + - Alex-Ian-Hamilton + - Cadair initiatives: - - GSOC - - SOCIS + - GSOC + - SOCIS tags: - - python - - cython - - numpy + - python + - cython + - numpy collaborating_projects: - - sunpy + - sunpy --- #### Description @@ -41,28 +41,28 @@ Though this idea is for SOCIS, [same GSOC rules apply](https://github.com/sunpy/ ##### Coding starts -* Engaged with the community and understand the motivation and challenges of the project. -* Have set up a development environment. -* Some understanding of what `solarbextrapolation` does and how. +- Engaged with the community and understand the motivation and challenges of the project. +- Have set up a development environment. +- Some understanding of what `solarbextrapolation` does and how. ##### To be completed by the Phase 1 Evaluation Deadline -* Add PFSS modelling to the package. -* Have all code, tests and documentation in GitHub. +- Add PFSS modelling to the package. +- Have all code, tests and documentation in GitHub. ##### To be completed by the Phase 2 Evaluation Deadline -* Develop a coordinate-aware 3D Map class -* Have all code, tests and documentation in GitHub. +- Develop a coordinate-aware 3D Map class +- Have all code, tests and documentation in GitHub. ##### To be completed by the end of GSoC -* Use 3D Map class for global field extrapolations -* Have all code, tests and documentation in GitHub. -* Improvements to the documentation and examples +- Use 3D Map class for global field extrapolations +- Have all code, tests and documentation in GitHub. +- Improvements to the documentation and examples ##### Additional Aims (time permitting) -* Performance improvements -* Better visualization methods -* Addition of more advanced extrapolators, e.g. non-linear force-free field +- Performance improvements +- Better visualization methods +- Addition of more advanced extrapolators, e.g. non-linear force-free field diff --git a/_projects/2019/sunpy/ndcube_ape14.md b/src/content/pages/gsoc/2019/sunpy/ndcube_ape14.md similarity index 56% rename from _projects/2019/sunpy/ndcube_ape14.md rename to src/content/pages/gsoc/2019/sunpy/ndcube_ape14.md index 499ca658..5e36ed6d 100644 --- a/_projects/2019/sunpy/ndcube_ape14.md +++ b/src/content/pages/gsoc/2019/sunpy/ndcube_ape14.md @@ -3,31 +3,31 @@ name: Incorporate Powerful New WCS API into ndcube desc: Incorporating the AstroPy APE 14 API into ndcube. # add a short one line description of your project requirements: -# Student requirements: - - Python + # Student requirements: + - Python difficulty: intermediate issues: -# Related issues (if any) to this project. - - https://github.com/sunpy/ndcube/projects/1 - - https://zenodo.org/record/1188875#.XBE3S1JRcWo + # Related issues (if any) to this project. + - https://github.com/sunpy/ndcube/projects/1 + - https://zenodo.org/record/1188875#.XBE3S1JRcWo mentors: -# First person in contact; mentors may change before project starts. - - DanRyanIrish - - Cadair + # First person in contact; mentors may change before project starts. + - DanRyanIrish + - Cadair initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - python + # Different technologies needed + - python collaborating_projects: -# suborganisation(s) to which this project belongs. - - SunPy + # suborganization(s) to which this project belongs. + - SunPy --- #### Description ndcube is a SunPy-affiliated package for generalized handling, -manipulating and visualizing N-dimensional astronomical data. The +manipulating and visualizing N-dimensional astronomical data. The translations between the array indices and the real world coordinates is described by the FITS-standard World Coordinate System (FITS-WCS). However, other WCS frameworks exist such as generalized WCS (gWCS) @@ -36,24 +36,23 @@ JWST. In order to support both FITS-WCS and gWCS and hence support more future and current missions, this project aims to convert the ndcube -package to a common WCS API. The new API has already been outlined by +package to a common WCS API. The new API has already been outlined by astropy's [APE 14](https://zenodo.org/record/1188875#.XBE3S1JRcWo). Implementing support for APE 14 will enable ndcube to use FITS-WCS and gWCS agnostically -and hence increase the power and scope of the ndcube package. With +and hence increase the power and scope of the ndcube package. With this new feature ndcube will become better placed to serve a wider array of n-dimensional data analysis needs from multiple astronomical communities. #### Expected Outcomes -* Replace usage in NDCube of `.wcs`, `.pixel_to_world` and `.world_to_pixel` -methods with APE 14 API. -* Replace implementation `NDCube.world_axis_physical_types` with that -of APE 14 -* Generalize slicing of the `NDCube.wcs` attribute so that it works -for both FITS-WCS and gWCS. -* Reimplement the ndcube visualization mixins to use APE 14. - +- Replace usage in NDCube of `.wcs`, `.pixel_to_world` and `.world_to_pixel` + methods with APE 14 API. +- Replace implementation `NDCube.world_axis_physical_types` with that + of APE 14 +- Generalize slicing of the `NDCube.wcs` attribute so that it works + for both FITS-WCS and gWCS. +- Reimplement the ndcube visualization mixins to use APE 14. #### Milestones (if any) diff --git a/_projects/2019/sunpy/remote_data.md b/src/content/pages/gsoc/2019/sunpy/remote_data.md similarity index 62% rename from _projects/2019/sunpy/remote_data.md rename to src/content/pages/gsoc/2019/sunpy/remote_data.md index 92fea3cb..878f8b6c 100644 --- a/_projects/2019/sunpy/remote_data.md +++ b/src/content/pages/gsoc/2019/sunpy/remote_data.md @@ -2,21 +2,21 @@ name: Remote Data in SunPy desc: Implement support for versioned, validated remote data handling in SunPy. requirements: - - Familiar with HTTP client libraries. - - Familiar with checksumming and caches. + - Familiar with HTTP client libraries. + - Familiar with checksumming and caches. difficulty: low issues: - - https://github.com/sunpy/sunpy/issues/1939 - - https://github.com/sunpy/sunpy/issues/1897 + - https://github.com/sunpy/sunpy/issues/1939 + - https://github.com/sunpy/sunpy/issues/1897 mentors: - - Cadair - - dpshelio + - Cadair + - dpshelio initiatives: - - GSOC + - GSOC tags: - - Python + - Python collaborating_projects: - - SunPy + - SunPy --- #### Description @@ -39,22 +39,22 @@ See [issue #1939](https://github.com/sunpy/sunpy/issues/1939) for more details. ##### Coding Starts -* Engaged with the community and understand the motivation and challenges of the project. -* Have set up a development environment. +- Engaged with the community and understand the motivation and challenges of the project. +- Have set up a development environment. ##### To be completed by the Phase 1 Evaluation Deadline -* Have evaluated and chosen the best approach for storing a local cache of data. -* Have implemented a basic cache and download system, including tests and documentation. +- Have evaluated and chosen the best approach for storing a local cache of data. +- Have implemented a basic cache and download system, including tests and documentation. ##### To be completed by the Phase 2 Evaluation Deadline -* Have worked with your mentors and the community to design a simple and functional API. -* Have a working prototype of this API, including tests. +- Have worked with your mentors and the community to design a simple and functional API. +- Have a working prototype of this API, including tests. ##### To be completed by the end of GSoC -* Have finished implementation, testing and documentation. -* Have written examples for the gallery of how to use the functionality. -* Have written developer documentation. -* Have the Pull Request merged after review and feedback. +- Have finished implementation, testing and documentation. +- Have written examples for the gallery of how to use the functionality. +- Have written developer documentation. +- Have the Pull Request merged after review and feedback. diff --git a/_projects/2019/sunpy/sunkit_image.md b/src/content/pages/gsoc/2019/sunpy/sunkit_image.md similarity index 53% rename from _projects/2019/sunpy/sunkit_image.md rename to src/content/pages/gsoc/2019/sunpy/sunkit_image.md index 2e2cc07d..81da82db 100644 --- a/_projects/2019/sunpy/sunkit_image.md +++ b/src/content/pages/gsoc/2019/sunpy/sunkit_image.md @@ -2,30 +2,30 @@ name: Develop sunkit-image desc: Add features to a new package for solar image analysis. requirements: - - Good understanding of Python. - - Some understanding of mathematics. - - Enthusiasm to learn image processing. + - Good understanding of Python. + - Some understanding of mathematics. + - Enthusiasm to learn image processing. difficulty: medium issues: - - https://github.com/sunpy/sunkit-image/issues/1 - - https://github.com/sunpy/sunkit-image/issues/3 - - https://github.com/sunpy/sunkit-image/issues/5 - - https://github.com/sunpy/sunkit-image/issues/6 - - https://github.com/sunpy/sunkit-image/issues/7 - - https://github.com/sunpy/sunkit-image/issues/9 - - https://github.com/sunpy/sunkit-image/issues/10 - - https://github.com/sunpy/sunkit-image/issues/13 + - https://github.com/sunpy/sunkit-image/issues/1 + - https://github.com/sunpy/sunkit-image/issues/3 + - https://github.com/sunpy/sunkit-image/issues/5 + - https://github.com/sunpy/sunkit-image/issues/6 + - https://github.com/sunpy/sunkit-image/issues/7 + - https://github.com/sunpy/sunkit-image/issues/9 + - https://github.com/sunpy/sunkit-image/issues/10 + - https://github.com/sunpy/sunkit-image/issues/13 mentors: - - nabobalis - - wafels + - nabobalis + - wafels initiatives: - - GSOC + - GSOC tags: - - python - - numpy - - cython + - python + - numpy + - cython collaborating_projects: - - sunpy + - sunpy --- #### Description @@ -45,29 +45,29 @@ This project should achieve most or all of the following goals (roughly in this There are more complex features we would like but will only be looked at once the previous features have been implemented. -5. Refactor and write a Python wrapper for [FLCT](https://arxiv.org/abs/0712.4289) [code](http://solarmuri.ssl.berkeley.edu/overview/publicdownloads/software.html). -6. Implement image alignment using feature detection and tracking. [Example](http://scikit-image.org/docs/dev/auto_examples/features_detection/plot_brief.html) -7. Implement image re-sampling as described [here](https://link.springer.com/content/pdf/10.1023/B:SOLA.0000021743.24248.b0.pdf) through updating [this pull request](https://github.com/astropy/reproject/pull/52) to the Astropy [image resampling](https://reproject.readthedocs.io/en/stable/) repository. +1. Refactor and write a Python wrapper for [FLCT](https://arxiv.org/abs/0712.4289) [code](http://solarmuri.ssl.berkeley.edu/overview/publicdownloads/software.html). +2. Implement image alignment using feature detection and tracking. [Example](http://scikit-image.org/docs/dev/auto_examples/features_detection/plot_brief.html) +3. Implement image re-sampling as described in [this resampling paper](https://link.springer.com/content/pdf/10.1023/B:SOLA.0000021743.24248.b0.pdf) through updating [this pull request](https://github.com/astropy/reproject/pull/52) to the Astropy [image resampling](https://reproject.readthedocs.io/en/stable/) repository. #### Milestones ##### Coding starts -* Have familiarized yourself with the algorithms. -* Have set up a development environment. -* Understand of what is currently in `sunkit-image`. +- Have familiarized yourself with the algorithms. +- Have set up a development environment. +- Understand of what is currently in `sunkit-image`. ##### To be completed by the Phase 1 Evaluation Deadline -* Have implemented, tested and documented the NRGF code. -* Have implemented, tested and documented the MGN code. +- Have implemented, tested and documented the NRGF code. +- Have implemented, tested and documented the MGN code. ##### To be completed by the Phase 2 Evaluation Deadline -* Have successfully merged the NRGF and MGN code. -* Have implemented OCCULT-2. +- Have successfully merged the NRGF and MGN code. +- Have implemented OCCULT-2. ##### To be completed by the end of GSoC -* Have implemented, tested and documented soft morphological filtering code. -* Have tested, documented and merged the OCCULT-2 code. +- Have implemented, tested and documented soft morphological filtering code. +- Have tested, documented and merged the OCCULT-2 code. diff --git a/_projects/2019/sunpy/sunspotter.md b/src/content/pages/gsoc/2019/sunpy/sunspotter.md similarity index 68% rename from _projects/2019/sunpy/sunspotter.md rename to src/content/pages/gsoc/2019/sunpy/sunspotter.md index 6d102c0c..27556af2 100644 --- a/_projects/2019/sunpy/sunspotter.md +++ b/src/content/pages/gsoc/2019/sunpy/sunspotter.md @@ -2,21 +2,21 @@ name: Space Weather forecasting using machine learning desc: Create a model to forecast solar flare events of new solar active regions images. requirements: - - Familiar with methods for creating classes, objects and subclasses. - - Confident with machine learning methods. + - Familiar with methods for creating classes, objects and subclasses. + - Confident with machine learning methods. difficulty: medium issues: mentors: - - dpshelio - - drsophiemurray - - samaloney - - mbobra + - dpshelio + - drsophiemurray + - samaloney + - mbobra initiatives: - - SOCIS + - SOCIS tags: - - Python + - Python collaborating_projects: - - SunPy + - SunPy --- #### Description @@ -45,33 +45,32 @@ Though this idea is for SOCIS, [same GSOC rules apply](https://github.com/sunpy/ ##### 1st Month -* Familiarisation with the dataset. Read and visualise the different type of +- Familiarisation with the dataset. Read and visualise the different type of data (images, classifications, …) -* Have evaluated and chosen an approach to the design of a SunPy search events +- Have evaluated and chosen an approach to the design of a SunPy search events object based on the images using [HEK or HELIO](https://docs.sunpy.org/en/latest/guide/acquiring_data/hek.html). -* Implementation of a basic machine learning model to understand the steps +- Implementation of a basic machine learning model to understand the steps needed for this problem -* Write up notebook for the sunpy gallery that exemplifies an analysis of this +- Write up notebook for the sunpy gallery that exemplifies an analysis of this dataset ##### 2nd Month -* Experiment with different machine learning methods to find the best model. -* Write up as blog posts the different attempts tried. +- Experiment with different machine learning methods to find the best model. +- Write up as blog posts the different attempts tried. ##### 3rd Month -* Check the accuracy of the model with SDO/HMI images from HEK -* Create notebook for the sunpy gallery explaining how to use the model +- Check the accuracy of the model with SDO/HMI images from HEK +- Create notebook for the sunpy gallery explaining how to use the model #### Resources -* [Predicting Coronal Mass Ejections Using Machine Learning Methods]( -https://doi.org/10.3847/0004-637X/821/2/127) -* [Sunspotter: Using Citizen Science to Determine the Complexity of +- [Predicting Coronal Mass Ejections Using Machine Learning Methods](https://doi.org/10.3847/0004-637X/821/2/127) +- [Sunspotter: Using Citizen Science to Determine the Complexity of Sunspots](https://doi.org/10.6084/m9.figshare.1050569.v1) -* [Machine Learning, Statistics, and Data Mining for +- [Machine Learning, Statistics, and Data Mining for Heliophysics](https://helioml.github.io/HelioML/title.html) -* [A Comparison of Flare Forecasting Methods. I. Results from the "All-Clear" +- [A Comparison of Flare Forecasting Methods. I. Results from the "All-Clear" Workshop](https://doi.org/10.3847/0004-637X/829/2/89) diff --git a/_projects/2020/astronomy-commons/spark-jupyter-widget.md b/src/content/pages/gsoc/2020/astronomy-commons/spark-jupyter-widget.md similarity index 67% rename from _projects/2020/astronomy-commons/spark-jupyter-widget.md rename to src/content/pages/gsoc/2020/astronomy-commons/spark-jupyter-widget.md index fb5d8fa5..7d562903 100644 --- a/_projects/2020/astronomy-commons/spark-jupyter-widget.md +++ b/src/content/pages/gsoc/2020/astronomy-commons/spark-jupyter-widget.md @@ -2,22 +2,22 @@ name: Jupyter Widgets for Spark desc: Create Jupyter notebook extensions and lab widgets to interface with Apache Spark clusters requirements: - - Python - - JavaScript + - Python + - JavaScript difficulty: medium mentors: - - stevenstetzler - - mjuric + - stevenstetzler + - mjuric initiatives: - - GSOC + - GSOC tags: - - python - - javascript - - jupyter - - spark - - UI / UX + - python + - javascript + - jupyter + - spark + - UI / UX collaborating_projects: - - astronomy-commons + - astronomy-commons --- #### Description @@ -28,19 +28,19 @@ Within the Astronomy Data Commons group, we use Apache Spark for distributed com ##### GSOC CODING STARTS -* Work with users in the Astronomy Commons community to understand User Interface and User Experience constraints for this project -* Investigate how Jupyter notebooks and the Jupyter lab system work, if required -* Obtain access to local and remote computing resources and development environments as needed +- Work with users in the Astronomy Commons community to understand User Interface and User Experience constraints for this project +- Investigate how Jupyter notebooks and the Jupyter lab system work, if required +- Obtain access to local and remote computing resources and development environments as needed ##### GSOC MIDTERM -* A sketch interface is made of the final product that incorporates feedback from community and guidance from mentors -* Progress has been made toward a working prototype -* The working prototype interface contains several browser element and the layout resembles the final interface -* The working prototype back-end links at least one interaction with a browser element to the Spark API +- A sketch interface is made of the final product that incorporates feedback from community and guidance from mentors +- Progress has been made toward a working prototype +- The working prototype interface contains several browser element and the layout resembles the final interface +- The working prototype back-end links at least one interaction with a browser element to the Spark API ##### GSOC FINAL -* A user is able to launch and connect to a local Spark cluster using just browser interactions -* A user is able to launch and connect to a remote Spark cluster using just browser interactions -* Code is documented and exists on a GitHub repository under the Astronomy Data Commons organization +- A user is able to launch and connect to a local Spark cluster using just browser interactions +- A user is able to launch and connect to a remote Spark cluster using just browser interactions +- Code is documented and exists on a GitHub repository under the Astronomy Data Commons organization diff --git a/_projects/2020/ctlearn/rootinput.md b/src/content/pages/gsoc/2020/ctlearn/rootinput.md similarity index 63% rename from _projects/2020/ctlearn/rootinput.md rename to src/content/pages/gsoc/2020/ctlearn/rootinput.md index 2fcc1f6e..df325333 100644 --- a/_projects/2020/ctlearn/rootinput.md +++ b/src/content/pages/gsoc/2020/ctlearn/rootinput.md @@ -1,28 +1,28 @@ --- name: ROOT input -desc: Enable input of data in ROOT format from current-generation imaging atmospheric Cherenkov telescopes +desc: Enable input of data in ROOT format from current-generation imaging atmospheric Cherenkov telescopes # add a short one line description of your project requirements: -# Student requirements - - Python - - Basic familiarity with neural networks + # Student requirements + - Python + - Basic familiarity with neural networks difficulty: medium mentors: -# First person in contact; mentors may change before project starts. - - nietootein - - TjarkMiener - - aribrill + # First person in contact; mentors may change before project starts. + - nietootein + - TjarkMiener + - aribrill initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - python - - tensorflow - - uproot - - dl1-data-handler + # Different technologies needed + - python + - tensorflow + - uproot + - dl1-data-handler collaborating_projects: -# suborganisation(s) to which this project belongs. - - ctlearn + # suborganization(s) to which this project belongs. + - ctlearn --- #### Description @@ -54,18 +54,18 @@ from current-generation IACTs. ##### GSOC CODING STARTS -* Install CTLearn and train a pre-existing benchmark model to verify that it runs correctly. -* Understand the technical and scientific goals of the project. +- Install CTLearn and train a pre-existing benchmark model to verify that it runs correctly. +- Understand the technical and scientific goals of the project. ##### GSOC MIDTERM -* Implement input of generic data in ROOT format using the packages uproot and Dl1-data-handler. -* Enable input of data in ROOT format from a specific IACT using the packages uproot and Dl1-data-handler. -* Have all code and documentation in GitHub. +- Implement input of generic data in ROOT format using the packages uproot and Dl1-data-handler. +- Enable input of data in ROOT format from a specific IACT using the packages uproot and Dl1-data-handler. +- Have all code and documentation in GitHub. ##### GSOC FINAL -* Enable input of data in ROOT format from a given collection of IACTs. -* Train single_tel classification model on data from a specific IACT. -* Train cnn_rnn classification model on data from a specific IACT. -* Have all code, documentation, and plots in GitHub. +- Enable input of data in ROOT format from a given collection of IACTs. +- Train single_tel classification model on data from a specific IACT. +- Train cnn_rnn classification model on data from a specific IACT. +- Have all code, documentation, and plots in GitHub. diff --git a/src/content/pages/gsoc/2020/einsteinpy/Null-geodesics-for-Schwarzschild-and-Kerr-Geometries..md b/src/content/pages/gsoc/2020/einsteinpy/Null-geodesics-for-Schwarzschild-and-Kerr-Geometries..md new file mode 100644 index 00000000..2e9da94f --- /dev/null +++ b/src/content/pages/gsoc/2020/einsteinpy/Null-geodesics-for-Schwarzschild-and-Kerr-Geometries..md @@ -0,0 +1,98 @@ +--- +name: Null geodesics for Schwarzschild and Kerr Geometries +desc: The project aims at adding functionality of ray-tracing to EinsteinPy +# add a short one line description of your project +requirements: + # Student requirements: + - Knowledge on ODEs, basic mathematics + - Some Familiarity with General Relativity, or the will to read about it. + - Basic knowledge of differential geometry +difficulty: medium +issues: + # Related issues (if any) to this project. + - https://github.com/einsteinpy/einsteinpy/issues/105 + - https://github.com/einsteinpy/einsteinpy/issues/106 + - https://github.com/einsteinpy/einsteinpy/issues/275 + - https://github.com/einsteinpy/einsteinpy/issues/144 + - https://github.com/einsteinpy/einsteinpy/issues/145 +mentors: + # First person in contact; mentors may change before project starts. + # GitHub handles + - ritzvik + - OVSofia + - rishi-s8 +initiatives: + - GSOC + - SOCIS +tags: + # Different technologies needed + - python + - C++ +collaborating_projects: + # suborganization(s) to which this project belongs. + - einsteinpy +--- + +#### Description + +Null-geodesics is the path traced by light rays in 4-D space-time. We aim to calculate null geodesics around non-rotating (Schwarzschild) and rotating (Kerr) massive bodies given the initial conditions. + +The project has roughly the following objectives : + +- Calculating null trajectories around a rotating/non-rotating black hole. +- Use those trajectories to raytrace a bundle of photon rays, to visualize how space-time gets distorted in presence of black holes. +- Calculate redshifts in photon rays due to space-time curvature. +- Visualization of Keplerian disc/shell in around it. +- In short, we aim to replicate one of the few papers available with proper coding paradigms like OOPs, good documentation and unit tests. +- If required due to performance issues, python wrappers over native C/C++ have to be written. + +This project also aims at fixing the problem of natural units introduced due to the research papers and books and to give native support to MKS units. + +##### Papers we intend to replicate + +- Odyssey: +- YNOGK: + +##### Links to other relevant papers + +- +- +- + +#### Milestones (if any) + +##### Coding starts + +- Engaged with the community and understand the motivation and challenges of + the project. +- Have set up a development environment and get familiar with einsteinpy dependencies. +- Have read relevant literature/codes required for the project. + +##### 1st evaluation + +- Null geodesic in Kerr space-time +- Null geodesic in Schwarzschild space-time (It can be implemented by creating a class inheriting from Kerr null geodesics and setting a=0. However, it would lead to unnecessary calculation and therefore, seperate Schwarzschild-Null class is necessary.) +- If possible, basic raytracing using the newly created classes. +- Have all code, tests and documentation in GitHub. + +##### 2nd evaluation + +- Plotting class for both Kerr and Schwarzschild null geodesics. +- Improvement in raytracing, along with simulation of a photon sheet around a black hole. +- Calculation of redshifts along the null trajectory. +- Have all code, tests and documentation in GitHub. + +##### Final + +- Good-enough implementation of any of the relavent papers. +- Complete any chores left out during the 1st and 2nd phase. +- Fix the Natural Units Problem in Kerr-Newman time-like geodesics. +- Fix the Natural Units Problem in Hypersurface Module. +- Have all code, tests and documentation in GitHub. + +#### Secondary goals + +- Fix any bugs that might appear regarding visualization, symbolic module and so forth. +- Review pull requests from other einsteinpy contributors, including the mentor. +- Give a talk about the work at some Python event. +- EinsteinPy is nothing without its community. Therefore, getting integrated deeply within the community and oversee future development of EinsteinPy. diff --git a/_projects/2020/einsteinpy/Performance-Improvements-in-EinsteinPy.md b/src/content/pages/gsoc/2020/einsteinpy/Performance-Improvements-in-EinsteinPy.md similarity index 60% rename from _projects/2020/einsteinpy/Performance-Improvements-in-EinsteinPy.md rename to src/content/pages/gsoc/2020/einsteinpy/Performance-Improvements-in-EinsteinPy.md index f8fde1c4..d7f065d4 100644 --- a/_projects/2020/einsteinpy/Performance-Improvements-in-EinsteinPy.md +++ b/src/content/pages/gsoc/2020/einsteinpy/Performance-Improvements-in-EinsteinPy.md @@ -3,35 +3,35 @@ name: Performance Improvements in EinsteinPy desc: The project aims at making EinsteinPy high-performace computation ready. # add a short one line description of your project requirements: -# Student requirements: - - Knowledge on ODEs, basic mathematics - - Familiarity with multithreading, Rust or C++ - - Some experience with CUDA + # Student requirements: + - Knowledge on ODEs, basic mathematics + - Familiarity with multithreading, Rust or C++ + - Some experience with CUDA difficulty: medium issues: -# Related issues (if any) to this project. - - https://github.com/einsteinpy/einsteinpy/issues/316 - - https://github.com/einsteinpy/einsteinpy/issues/233 - - https://github.com/einsteinpy/einsteinpy/issues/223 - - https://github.com/einsteinpy/einsteinpy/issues/164 + # Related issues (if any) to this project. + - https://github.com/einsteinpy/einsteinpy/issues/316 + - https://github.com/einsteinpy/einsteinpy/issues/233 + - https://github.com/einsteinpy/einsteinpy/issues/223 + - https://github.com/einsteinpy/einsteinpy/issues/164 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - shreyasbapat - - shilpi1958 - - spino17 + # First person in contact; mentors may change before project starts. + # GitHub handles + - shreyasbapat + - shilpi1958 + - spino17 initiatives: - - GSOC - - SOCIS + - GSOC + - SOCIS tags: -# Different technologies needed - - python - - CUDA - - Rust - - C++ + # Different technologies needed + - python + - CUDA + - Rust + - C++ collaborating_projects: -# suborganisation(s) to which this project belongs. - - einsteinpy + # suborganization(s) to which this project belongs. + - einsteinpy --- #### Description @@ -42,7 +42,7 @@ There are multiple ways of accelerating the codebase. We would like to slowly tr After profiling is done, we can have two backend type model (like tensorflow). For the low performance codebase too, we will need to replace certain Python snippets with either less complex pyton code snippets (accelerated with numba) wherever possible, or with some sort of compiled fast language (C++ / Rust). -However the GPU backend is not a hard and fast requirement from this project as per the current state of the codebase. The coordinate conversions in EinsteinPy are not the best in the industry right now. We aim to fix the problem of coordinate conversion. This fix can give a significance boost to the computation speed. +However the GPU backend is not a hard and fast requirement from this project as per the current state of the codebase. The coordinate conversions in EinsteinPy are not the best in the industry right now. We aim to fix the problem of coordinate conversion. This fix can give a significance boost to the computation speed. Some modules like, shadow do not scale well. Also there are some theoretical issues which make the whole module slow. We would like to simulate black hole shadows of real sized black holes rather than M=1 Black holes which have no practical significance. @@ -50,34 +50,32 @@ Some modules like, shadow do not scale well. Also there are some theoretical iss ##### Coding starts -* Engaged with the community and understand the motivation and challenges of +- Engaged with the community and understand the motivation and challenges of the project. -* Have set up a development environment and get familiar with einsteinpy dependencies. - +- Have set up a development environment and get familiar with einsteinpy dependencies. ##### 1st evaluation -* Have done the profiling of the codebase, found the bottlenecks. -* Fixed the ODE Solver as it is too slow. -* Fixed the coordinate conversions. -* Have all code, tests and documentation in GitHub. +- Have done the profiling of the codebase, found the bottlenecks. +- Fixed the ODE Solver as it is too slow. +- Fixed the coordinate conversions. +- Have all code, tests and documentation in GitHub. ##### 2nd evaluation -* Work on shadow and hypersurface modules, find the reason why they do not scale well (possibly because of the integrator) -* Publish the performance comparisons. -* Have all code, tests and documentation in GitHub. +- Work on shadow and hypersurface modules, find the reason why they do not scale well (possibly because of the integrator) +- Publish the performance comparisons. +- Have all code, tests and documentation in GitHub. ##### Final -* Complete the Rust/C++ backend for the project and publish it on GitHub. -* Complete the coordinate conversion issue and add an easy way to introduce new coordinate systems. -* Have all code, tests and documentation in GitHub. +- Complete the Rust/C++ backend for the project and publish it on GitHub. +- Complete the coordinate conversion issue and add an easy way to introduce new coordinate systems. +- Have all code, tests and documentation in GitHub. #### Secondary goals -* Fix any bugs that might appear regarding visualization, symbolic module and so forth -* Make the code work on GPU too. -* Review pull requests from other einsteinpy contributors, including the mentor -* Give a talk about the work at some Python event. - +- Fix any bugs that might appear regarding visualization, symbolic module and so forth +- Make the code work on GPU too. +- Review pull requests from other einsteinpy contributors, including the mentor +- Give a talk about the work at some Python event. diff --git a/src/content/pages/gsoc/2020/index.md b/src/content/pages/gsoc/2020/index.md new file mode 100644 index 00000000..4427c371 --- /dev/null +++ b/src/content/pages/gsoc/2020/index.md @@ -0,0 +1,5 @@ +--- +title: "Ideas page for Google Summer of Code 2020" +show_main: false +season: 2020 +--- diff --git a/_projects/2020/juliaastro/ccd_data_reduction.md b/src/content/pages/gsoc/2020/juliaastro/ccd_data_reduction.md similarity index 71% rename from _projects/2020/juliaastro/ccd_data_reduction.md rename to src/content/pages/gsoc/2020/juliaastro/ccd_data_reduction.md index c2bcf577..55bff7eb 100644 --- a/_projects/2020/juliaastro/ccd_data_reduction.md +++ b/src/content/pages/gsoc/2020/juliaastro/ccd_data_reduction.md @@ -3,29 +3,29 @@ name: CCD Processing Package desc: Develop a CCD data reduction package in Julia # add a short one line description of your project requirements: -# Student requirements: - - Basic knowledge of CCD data - - Familiarity with Julia and Julia packaging + # Student requirements: + - Basic knowledge of CCD data + - Familiarity with Julia and Julia packaging difficulty: low issues: # Related issues (if any) to this project. mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - mileslucas - - giordano - - yashrsharma44 + # First person in contact; mentors may change before project starts. + # GitHub handles + - mileslucas + - giordano + - yashrsharma44 initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - Julia + # Different technologies needed + - Julia collaborating_projects: -# suborganisation(s) to which this project belongs. - - JuliaAstro + # suborganization(s) to which this project belongs. + - JuliaAstro --- -For a good background on astronomical data, check out [this paper](https://arxiv.org/abs/1905.13189). +For a good background on astronomical data, check out [this paper](https://arxiv.org/abs/1905.13189). #### Description diff --git a/_projects/2020/poliastro/earth-specific-capabilities.md b/src/content/pages/gsoc/2020/poliastro/earth-specific-capabilities.md similarity index 54% rename from _projects/2020/poliastro/earth-specific-capabilities.md rename to src/content/pages/gsoc/2020/poliastro/earth-specific-capabilities.md index e213afba..57e29d3b 100644 --- a/_projects/2020/poliastro/earth-specific-capabilities.md +++ b/src/content/pages/gsoc/2020/poliastro/earth-specific-capabilities.md @@ -2,18 +2,18 @@ name: Earth-specific capabilities desc: Add more Earth-specific capabilities to poliastro to make it more attractive for non-interplanetary use cases requirements: - - Basic notions of orbital mechanics + - Basic notions of orbital mechanics difficulty: medium mentors: - - astrojuanlu - - jorgepiloto + - astrojuanlu + - jorgepiloto initiatives: - - GSOC - - SOCIS + - GSOC + - SOCIS tags: - - python + - python collaborating_projects: - - poliastro + - poliastro --- #### Description @@ -23,21 +23,21 @@ of which are only present in commercial-off-the-shelf alternatives, such as predefined low-thrust guidance laws, flybys analysis, and more. In fact, the scope of poliastro explicitly mentions interplanetary applications, and we started there because -* It is fun -* There were scripts here and there, but some of them didn't work well for attractors other than the Earth -* We were too lazy to learn SPICE +- It is fun +- There were scripts here and there, but some of them didn't work well for attractors other than the Earth +- We were too lazy to learn SPICE However, most potential poliastro users (including commercial companies) are interested in Earth-bound trajectory analysis. This includes: -* Launch windows and orbit injection -* Station-keeping and orbit correction maneuvers -* Precise propagation using high-order gravitational and atmospheric models -* Two-Line Element (TLE) usage -* Orbit determination -* Observation scheduling -* Groundtrack plotting -* And more! +- Launch windows and orbit injection +- Station-keeping and orbit correction maneuvers +- Precise propagation using high-order gravitational and atmospheric models +- Two-Line Element (TLE) usage +- Orbit determination +- Observation scheduling +- Groundtrack plotting +- And more! The goal of the project is open-ended and involves improving poliastro for some or all of the above use cases. @@ -45,27 +45,27 @@ The goal of the project is open-ended and involves improving poliastro for some ##### Coding starts -* Engaged with the community and understand the motivation and challenges of +- Engaged with the community and understand the motivation and challenges of the project. -* Have set up a development environment +- Have set up a development environment ##### 1st evaluation -* TBD -* Have all code, tests and documentation in GitHub +- TBD +- Have all code, tests and documentation in GitHub ##### 2nd evaluation -* TBD -* Have all code, tests and documentation in GitHub +- TBD +- Have all code, tests and documentation in GitHub ##### Final -* TBD -* Have all code, tests and documentation in GitHub +- TBD +- Have all code, tests and documentation in GitHub #### Secondary goals -* Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth -* Review pull requests from other poliastro contributors, including the mentor -* Give a talk about the work at some Python event +- Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth +- Review pull requests from other poliastro contributors, including the mentor +- Give a talk about the work at some Python event diff --git a/_projects/2019/poliastro/poliastro-as-a-service.md b/src/content/pages/gsoc/2020/poliastro/poliastro-as-a-service.md similarity index 61% rename from _projects/2019/poliastro/poliastro-as-a-service.md rename to src/content/pages/gsoc/2020/poliastro/poliastro-as-a-service.md index 874ce5d6..b240abfe 100644 --- a/_projects/2019/poliastro/poliastro-as-a-service.md +++ b/src/content/pages/gsoc/2020/poliastro/poliastro-as-a-service.md @@ -2,24 +2,24 @@ name: poliastro-as-a-Service desc: Deploy poliastro in one or more serverless cloud providers requirements: - - Basic experience with cloud, serverless - - Basic experience with Docker + - Basic experience with cloud, serverless + - Basic experience with Docker difficulty: medium issues: - - https://github.com/poliastro/poliastro/issues/168 - - https://github.com/poliastro/poliastro/issues/444 + - https://github.com/poliastro/poliastro/issues/168 + - https://github.com/poliastro/poliastro/issues/444 mentors: - - astrojuanlu - - AunSiro + - astrojuanlu + - jorgepiloto initiatives: - - GSOC - - SOCIS + - GSOC + - SOCIS tags: - - python - - javascript - - docker + - python + - javascript + - docker collaborating_projects: - - poliastro + - poliastro --- #### Description @@ -43,30 +43,29 @@ and if time permits create a demo REST API. ##### Coding starts -* Engaged with the community and understand the motivation and challenges of +- Engaged with the community and understand the motivation and challenges of the project. -* Have set up a development environment and get familiar with poliastro dependencies and usage of external data +- Have set up a development environment and get familiar with poliastro dependencies and usage of external data ##### 1st evaluation -* Identified poliastro heaviest dependencies (probably SciPy) and implemented proper alternatives, warnings and error messages when they are not installed -* Have all code, tests and documentation in GitHub +- Identified poliastro heaviest dependencies (probably SciPy) and implemented proper alternatives, warnings and error messages when they are not installed +- Have all code, tests and documentation in GitHub ##### 2nd evaluation -* Created a Dockerfile for poliastro -* Deployed poliastro in Amazon Web Services Lambda -* Have all code, tests and documentation in GitHub +- Created a Dockerfile for poliastro +- Deployed poliastro in Amazon Web Services Lambda +- Have all code, tests and documentation in GitHub ##### Final -* Deployed poliastro in a second cloud or PaaS -* Created a demo REST API covering some basic functionality -* Have all code, tests and documentation in GitHub +- Deployed poliastro in a second cloud or PaaS +- Created a demo REST API covering some basic functionality +- Have all code, tests and documentation in GitHub #### Secondary goals -* Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth -* Review pull requests from other poliastro contributors, including the mentor -* Give a talk about the work at some Python event - +- Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth +- Review pull requests from other poliastro contributors, including the mentor +- Give a talk about the work at some Python event diff --git a/_projects/2020/poliastro/validation-framework.md b/src/content/pages/gsoc/2020/poliastro/validation-framework.md similarity index 56% rename from _projects/2020/poliastro/validation-framework.md rename to src/content/pages/gsoc/2020/poliastro/validation-framework.md index cb72d850..2e396c9a 100644 --- a/_projects/2020/poliastro/validation-framework.md +++ b/src/content/pages/gsoc/2020/poliastro/validation-framework.md @@ -2,21 +2,21 @@ name: Validation framework desc: Create a validation framework that compares poliastro with other similar software requirements: - - Experience automating processes with Python - - Basic notions of numerical analysis + - Experience automating processes with Python + - Basic notions of numerical analysis difficulty: medium issues: - - https://github.com/poliastro/poliastro/issues/109 + - https://github.com/poliastro/poliastro/issues/109 mentors: - - astrojuanlu - - jorgepiloto + - astrojuanlu + - jorgepiloto initiatives: - - GSOC - - SOCIS + - GSOC + - SOCIS tags: - - python + - python collaborating_projects: - - poliastro + - poliastro --- #### Description @@ -26,8 +26,8 @@ _Validation is hard._ The current approach in poliastro is to add unit tests tha However, poliastro is now a mature project and validating against textbook examples is not enough anymore, for several reasons: -* It is being used more and more in companies and professional settings, which cannot afford failure -* It has grown in feature set and can do more complicated things, which are out of the scope of undergraduate textbooks +- It is being used more and more in companies and professional settings, which cannot afford failure +- It has grown in feature set and can do more complicated things, which are out of the scope of undergraduate textbooks One example of this is the tests covering perturbations and low-thrust guidance laws (see [GSOC 2018 results](https://blog.poliastro.space/2018/08/05/2018-08-05-google-summer-of-code-2018/) @@ -46,39 +46,39 @@ with a basic structure and a simple test case, but we want to expand it much fur ##### Coding starts -* Engaged with the community and understand the motivation and challenges of +- Engaged with the community and understand the motivation and challenges of the project. -* Have set up a development environment and get familiar with either SPICE, GMAT, STK, or all of them +- Have set up a development environment and get familiar with either SPICE, GMAT, STK, or all of them ##### 1st evaluation -* Have settled on one of the tools for reference frame validation -* Have a basic understanding of reference frames -* Have converted the `Body` rotational elements to proper reference frames -* Have all code, tests and documentation in GitHub +- Have settled on one of the tools for reference frame validation +- Have a basic understanding of reference frames +- Have converted the `Body` rotational elements to proper reference frames +- Have all code, tests and documentation in GitHub ##### 2nd evaluation -* Have produced a table similar to [astropy's](http://www.astropy.org/coordinates-benchmark/summary.html) for our planetary reference frames -* Have all code, tests and documentation in GitHub +- Have produced a table similar to [astropy's](http://www.astropy.org/coordinates-benchmark/summary.html) for our planetary reference frames +- Have all code, tests and documentation in GitHub ##### Final -* Have used a second method to validate the reference frames -* Have started a conversation in Astropy to integrate our code upstream -* Have all code, tests and documentation in GitHub +- Have used a second method to validate the reference frames +- Have started a conversation in Astropy to integrate our code upstream +- Have all code, tests and documentation in GitHub #### Secondary goals -* Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth -* Review pull requests from other poliastro contributors, including the mentor -* Maintain [poliastro benchmarks](https://benchmarks.poliastro.space/) -* Give a talk about the work at some Python event +- Fix any bugs that might appear regarding visualization, hyperbolic orbits and so forth +- Review pull requests from other poliastro contributors, including the mentor +- Maintain [poliastro benchmarks](https://benchmarks.poliastro.space/) +- Give a talk about the work at some Python event #### Additional resources -* [Wiki page on Validation](https://github.com/poliastro/poliastro/wiki/Validation) -* [SpiceyPy](http://spiceypy.readthedocs.io/) (Python wrappers for SPICE) -* [GMAT](http://www.gmatcentral.org/) -* [STK](https://agi.com/products/engineering-tools) -* [Discussion about ecliptic reference frames in Astropy](https://github.com/astropy/astropy/pull/6508) +- [Wiki page on Validation](https://github.com/poliastro/poliastro/wiki/Validation) +- [SpiceyPy](http://spiceypy.readthedocs.io/) (Python wrappers for SPICE) +- [GMAT](http://www.gmatcentral.org/) +- [STK](https://agi.com/products/engineering-tools) +- [Discussion about ecliptic reference frames in Astropy](https://github.com/astropy/astropy/pull/6508) diff --git a/_projects/2020/radis/accelerate_synthetic_spectra_calculations.md b/src/content/pages/gsoc/2020/radis/accelerate_synthetic_spectra_calculations.md similarity index 58% rename from _projects/2020/radis/accelerate_synthetic_spectra_calculations.md rename to src/content/pages/gsoc/2020/radis/accelerate_synthetic_spectra_calculations.md index d2e0aef5..2e5fc57c 100644 --- a/_projects/2020/radis/accelerate_synthetic_spectra_calculations.md +++ b/src/content/pages/gsoc/2020/radis/accelerate_synthetic_spectra_calculations.md @@ -2,34 +2,35 @@ name: Accelerate Synthetic Spectra Calculations desc: Implement GPU acceleration and new state-of-the-art methods to compute synthetic emission and absorption spectra requirements: - - Basic notions of spectroscopy - - Some experience with CUDA + - Basic notions of spectroscopy + - Some experience with CUDA difficulty: medium mentors: -# GitHub handles - - erwanp - - dcmvdbekerom - - minouHub + # GitHub handles + - erwanp + - dcmvdbekerom + - minouHub initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - python - - CUDA + # Different technologies needed + - python + - CUDA collaborating_projects: - - radis + - radis issues: -# Related issues (if any) to this project. - - https://github.com/radis/radis/issues/46 + # Related issues (if any) to this project. + - https://github.com/radis/radis/issues/46 --- #### Description -The presence and concentration of molecules in a gas can be measured by comparing absorption and emission experimental spectra to synthetic spectra. However, under high-temperature conditions, the synthetic spectra contain dozens of millions of lines. In any line-by-line code the bottleneck is the calculation of the lineshapes, which can require long computational times (up to several minutes). - +The presence and concentration of molecules in a gas can be measured by comparing absorption and emission experimental spectra to synthetic spectra. However, under high-temperature conditions, the synthetic spectra contain dozens of millions of lines. In any line-by-line code the bottleneck is the calculation of the lineshapes, which can require long computational times (up to several minutes). + The RADIS code was recently developed for the characterization of high-temperature infrared spectra in plasmas and flames. It uses a new approach to quickly calculate lineshapes of synthetic spectra. The latest developments already make it one the fastest spectral codes in the world. The goal of this project is to push further and implement two new techniques to gain another orders of magnitude, by two means: + - Implementing GPU acceleration for lineshape calculation (proof-of-concept example has shown we can compute 250 millions lines in 150 ms!) -- Implementing a new vectorization technique to quickly compute lineshapes in line-of-sight spectra (i.e., a column of heterogeneous gas) +- Implementing a new vectorization technique to quickly compute lineshapes in line-of-sight spectra (i.e., a column of heterogeneous gas) This performance would be beneficial for new applications such as exoplanet characterization. @@ -37,36 +38,32 @@ This performance would be beneficial for new applications such as exoplanet char ##### Coding starts -* Engage with the community and understand the motivation of spectroscopy users -* Training on emission & absorption spectroscopy -* Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) -* Get used with RADIS architecture: review the interface change to calculate multiple molecules at the same time ([#74](https://github.com/radis/radis/pull/74#issuecomment-585773087)) -* Learn about the details of the vectorized calculation of lineshapes in line-of-sight spectra. - +- Engage with the community and understand the motivation of spectroscopy users +- Training on emission & absorption spectroscopy +- Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) +- Get used with RADIS architecture: review the interface change to calculate multiple molecules at the same time ([#74](https://github.com/radis/radis/pull/74#issuecomment-585773087)) +- Learn about the details of the vectorized calculation of lineshapes in line-of-sight spectra. ##### 1st evaluation -* Proof of concept GPU implementation example has been reproduced -* GPU acceleration is implemented and working on your own Fork for at least one combination of lineshape broadening parameters. +- Proof of concept GPU implementation example has been reproduced +- GPU acceleration is implemented and working on your own Fork for at least one combination of lineshape broadening parameters. ##### 2nd evaluation -* GPU acceleration is implemented in the main project for all combinations of lineshape broadening parameters -* Have all code, tests and documentation in GitHub. +- GPU acceleration is implemented in the main project for all combinations of lineshape broadening parameters +- Have all code, tests and documentation in GitHub. ##### Final -* GPU acceleration is implemented in the main project and tested on many architectures -* Write an iPython notebook to document the performance benchmark on [radis-benchmark](https://github.com/radis/radis-benchmark) -* Have all code, tests and documentation in GitHub. -* Proof of concept of the vectorized calculation of lineshapes in line-of-sight spectra is implemented +- GPU acceleration is implemented in the main project and tested on many architectures +- Write an iPython notebook to document the performance benchmark on [radis-benchmark](https://github.com/radis/radis-benchmark) +- Have all code, tests and documentation in GitHub. +- Proof of concept of the vectorized calculation of lineshapes in line-of-sight spectra is implemented #### Secondary goals -* Direct line-of-sight spectra technique is implemented in main project -* Document architecture and developer guide when facing unclear points that may appear. -* Review pull requests from other RADIS contributors -* Interface to atmosphere calculations (merge results with project [RADIS Atmosphere Calculation Interface](https://openastronomy.org/gsoc/gsoc2020/#/projects?project=radis_atmosphere_calculation_interface) ) - - - +- Direct line-of-sight spectra technique is implemented in main project +- Document architecture and developer guide when facing unclear points that may appear. +- Review pull requests from other RADIS contributors +- Interface to atmosphere calculations (merge results with project [RADIS Atmosphere Calculation Interface](https://openastronomy.org/gsoc/2020/#/projects?project=radis_atmosphere_calculation_interface) ) diff --git a/src/content/pages/gsoc/2020/radis/radis_atmosphere_calculation_interface.md b/src/content/pages/gsoc/2020/radis/radis_atmosphere_calculation_interface.md new file mode 100644 index 00000000..d7ed1bde --- /dev/null +++ b/src/content/pages/gsoc/2020/radis/radis_atmosphere_calculation_interface.md @@ -0,0 +1,60 @@ +--- +name: RADIS Atmosphere Calculation Interface +desc: Adapt a spectroscopy open-source code to characterize exoplanet atmospheres. +requirements: + - Basic notions of spectroscopy +difficulty: easy +mentors: + # GitHub handles + - erwanp + - minouHub + - dcmvdbekerom +initiatives: + - GSOC +tags: + # Different technologies needed + - python + - CUDA +collaborating_projects: + - radis +issues: + # Related issues (if any) to this project. + - https://github.com/radis/radis/issues/74 +--- + +#### Description + +The presence and concentration of molecules in exoplanet atmospheres are measured by comparing absorption and emission spectra to synthetic spectra. However, under high-temperature conditions, the synthetic spectra contain dozens of millions of lines, which require long computational times . + +The RADIS code was recently developed for the characterization of plasmas and flames. It uses a new approach to quickly calculate high-temperature infrared spectra. New developments are in progress (see our [other project](https://openastronomy.org/gsoc/2020/#/projects?project=accelerate_synthetic_spectra_calculations) on further accelerating the code), but it is already one of the fastest spectral codes in the world. This performance would be beneficial for exoplanet characterization, and this is the goal of this project: adapt the RADIS code to the calculation of exoplanet atmospheres! + +#### Milestones + +##### Coding starts + +- Engage with the community and understand the motivation of spectroscopy users +- Training on emission & absorption spectroscopy +- Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) +- Get used with RADIS architecture: review the interface change to calculate multiple molecules at the same time ([#74](https://github.com/radis/radis/pull/74#issuecomment-585773087)) + +##### 1st evaluation + +- Indirect integration of databases from the Exoplanet atmosphere community (ExoMol), using a converter to the HITRAN format supported by RADIS +- 1st calculation of an atmosphere line-of-sight spectrum with Python hardcoded inputs + +##### 2nd evaluation + +- Direct integration of ExoMol, and memory optimization +- Calculation of atmosphere with standard atmosphere input files (mole fractions, temperature profile, pressure profile) + +##### Final + +- Write an iPython notebook to document the atmosphere module on [radis-examples](https://github.com/radis/radis-examples) +- Have all code, tests and documentation in GitHub. + +#### Secondary goals + +- Document architecture and developer guide when facing unclear points that may appear. +- Review pull requests from other RADIS contributors +- Optimized calculation of atmospheres in optically thin configurations (merge results with project [Accelerate Synthetic Spectra Calculations](https://openastronomy.org/gsoc/2020/#/projects?project=accelerate_synthetic_spectra_calculations) ) + ) diff --git a/_projects/2020/stingray/multitaper.md b/src/content/pages/gsoc/2020/stingray/multitaper.md similarity index 71% rename from _projects/2020/stingray/multitaper.md rename to src/content/pages/gsoc/2020/stingray/multitaper.md index 34811fdc..4fb21662 100644 --- a/_projects/2020/stingray/multitaper.md +++ b/src/content/pages/gsoc/2020/stingray/multitaper.md @@ -1,52 +1,50 @@ --- name: Multitaper-Periodograms in Stingray. -desc: Add a new algorithm for building periodograms to Stingray. The multitaper periodogram is a method that's fairly well-known in signal processing, but virtually unknown in (X-ray) astronomy. +desc: Add a new algorithm for building periodograms to Stingray. The multitaper periodogram is a method that's fairly well-known in signal processing, but virtually unknown in (X-ray) astronomy. requirements: - - Proficiency in Python - - Knowledge of signal processing and Fourier methods would be ideal + - Proficiency in Python + - Knowledge of signal processing and Fourier methods would be ideal difficulty: medium issues: - - https://github.com/StingraySoftware/stingray/issues/361 + - https://github.com/StingraySoftware/stingray/issues/361 mentors: - - dhuppenkothen - - matteobachetti + - dhuppenkothen + - matteobachetti initiatives: - - GSOC + - GSOC tags: - - python - - signal processing - - time series analysis - - Fourier analysis - - astronomy + - python + - signal processing + - time series analysis + - Fourier analysis + - astronomy collaborating_projects: - - stingray + - stingray --- #### Description + Generating periodograms for astronomical data is the core task of Stingray. Because periodograms are often noisy, several methods to denoise periodograms exist in the literature, among them the multi-taper periodogram Stingray aims to provide a comprehensive library of reliable, well-tested implementations of common algorithms for time series analysis in Astronomy. In this project, the student will add the multi-taper periodogram to the existing code base in order to allow astronomers build periodograms with better noise properties. - #### Milestones (if any) 1. Proof-of-concept implementation of the multi-taper algorithm 2. Full implementation of the algorithm in the Stingray framework, including tests and relevant documentation - ##### Coding starts -* Understand algorithm and have an overview of the individual components that need to be implemented. +- Understand algorithm and have an overview of the individual components that need to be implemented. ##### 1st evaluation -* Proof-of-concept implementation is complete. +- Proof-of-concept implementation is complete. ##### 2nd evaluation -* Full implementation is complete +- Full implementation is complete ##### Final -* Wrap up connecting the new implementation to existing Stingray classes, finish documentation and associated tutorial in a Jupyter notebook. - +- Wrap up connecting the new implementation to existing Stingray classes, finish documentation and associated tutorial in a Jupyter notebook. diff --git a/_projects/2020/stingray/optimize.md b/src/content/pages/gsoc/2020/stingray/optimize.md similarity index 71% rename from _projects/2020/stingray/optimize.md rename to src/content/pages/gsoc/2020/stingray/optimize.md index 333d94ce..47650484 100644 --- a/_projects/2020/stingray/optimize.md +++ b/src/content/pages/gsoc/2020/stingray/optimize.md @@ -2,26 +2,27 @@ name: A lightning-fast stingray. desc: Improve how the X-ray spectral timing library Stingray deals with large input datasets requirements: - - Familiarity with code optimization - - Proficiency in Python + - Familiarity with code optimization + - Proficiency in Python difficulty: medium issues: - - https://github.com/StingraySoftware/stingray/issues/451 + - https://github.com/StingraySoftware/stingray/issues/451 mentors: - - matteobachetti - - dhuppenkothen + - matteobachetti + - dhuppenkothen initiatives: - - GSOC + - GSOC tags: - - python - - memory mapping - - parallel processing - - llvm (numba) + - python + - memory mapping + - parallel processing + - llvm (numba) collaborating_projects: - - stingray + - stingray --- #### Description + This project is about making the [Stingray spectral timing library](https://stingray.readthedocs.io) ready for the data coming from high-sensitivity X-ray detectors like NICER (and, in the future, eXTP and/or Strobe-X), or other kinds of high-throughput photon counters (i.e. in the optical). The student will start by benchmarking the code through simulated data, address a few known bottlenecks of the code (for example, the need for loading full dataset into the RAM), and explore alternative technologies (memory mapping, parallel computing) to speed up the computation and the data retrieval for larger-than-memory datasets. @@ -35,16 +36,16 @@ The student will start by benchmarking the code through simulated data, address ##### Coding starts -* Setup benchmarks to test the performance of different parts of the code with larger and larger simulated datasets. +- Setup benchmarks to test the performance of different parts of the code with larger and larger simulated datasets. ##### 1st evaluation -* A thorough report on the scalability of the various parts of the library. Draft memory mapping to allow larger-than-memory datasets in the `EventList` and `Lightcurve` classes. +- A thorough report on the scalability of the various parts of the library. Draft memory mapping to allow larger-than-memory datasets in the `EventList` and `Lightcurve` classes. ##### 2nd evaluation -* Memory mapping completed and tested. Speed up computation in `AveragedCrossspectrum`. +- Memory mapping completed and tested. Speed up computation in `AveragedCrossspectrum`. ##### Final -* Wrap up all optimizations, described in the `restructuredText` documentation and in Jupyter notebooks. +- Wrap up all optimizations, described in the `restructuredText` documentation and in Jupyter notebooks. diff --git a/_projects/2020/sunpy/fido.md b/src/content/pages/gsoc/2020/sunpy/fido.md similarity index 83% rename from _projects/2020/sunpy/fido.md rename to src/content/pages/gsoc/2020/sunpy/fido.md index dd02f03f..39d4768f 100644 --- a/_projects/2020/sunpy/fido.md +++ b/src/content/pages/gsoc/2020/sunpy/fido.md @@ -2,30 +2,29 @@ name: Fido desc: Towards metadata only searches with Fido requirements: - - Quite familiar with Python. + - Quite familiar with Python. difficulty: Medium issues: -- https://github.com/sunpy/sunpy/pulls?q=is%3Apr+label%3A%22Needs+Adoption%22+is%3Aclosed+label%3Aunidown -- https://github.com/sunpy/sunpy/issues/3336 -- https://github.com/sunpy/sunpy/issues/3735 -- https://github.com/sunpy/sunpy/issues/3733 -- https://github.com/sunpy/sunpy/issues/3734 -- https://github.com/sunpy/sunpy/issues/2744 -- https://github.com/sunpy/sunpy/issues/2631 + - https://github.com/sunpy/sunpy/pulls?q=is%3Apr+label%3A%22Needs+Adoption%22+is%3Aclosed+label%3Aunidown + - https://github.com/sunpy/sunpy/issues/3336 + - https://github.com/sunpy/sunpy/issues/3735 + - https://github.com/sunpy/sunpy/issues/3733 + - https://github.com/sunpy/sunpy/issues/3734 + - https://github.com/sunpy/sunpy/issues/2744 + - https://github.com/sunpy/sunpy/issues/2631 mentors: - - Cadair - - nabobalis + - Cadair + - nabobalis initiatives: - - GSOC + - GSOC tags: - - python + - python collaborating_projects: - - SunPy + - SunPy --- #### Description - SunPy provides a Python interface to many different sources of solar data. These data are generally of two forms, file based downloads where observations are downloaded as FITS files or other files, and metadata only searches such as event lists or spatial location of features. Currently in sunpy the file based downloads are all accessible in one single search interface called "Fido", this project would provide the foundations needed to extend Fido to include metadata only searches. diff --git a/_projects/2020/sunpy/solarglue.md b/src/content/pages/gsoc/2020/sunpy/solarglue.md similarity index 73% rename from _projects/2020/sunpy/solarglue.md rename to src/content/pages/gsoc/2020/sunpy/solarglue.md index 86eb8b52..7ff88c7d 100644 --- a/_projects/2020/sunpy/solarglue.md +++ b/src/content/pages/gsoc/2020/sunpy/solarglue.md @@ -2,23 +2,23 @@ name: glue-solar desc: Making Glue work for Solar Physics datasets requirements: - - Quite familiar with Python. - - Previous QT or GUI experience would be nice + - Quite familiar with Python. + - Previous QT or GUI experience would be nice difficulty: Medium to High issues: -- None + - None mentors: - - Cadair - - nabobalis - - astrofrog + - Cadair + - nabobalis + - astrofrog initiatives: - - GSOC + - GSOC tags: - - python - - GUI (qtpy) + - python + - GUI (qtpy) collaborating_projects: - - SunPy - - Glue + - SunPy + - Glue --- #### Description @@ -31,12 +31,13 @@ The objective of this project is to provide a foundation for these types of proj While a fully featured GUI toolkit for solar data can not be built in one summer, the goal is to provide the technical building blocks, but more importantly to demonstrate, and document, how this framework can be used by instrument teams to build custom solutions for their data. The sort of features that exist in other interactive exploration tools are: - - Able to open the files and understand the metadata. - - Creating movies or PNGs of different frames and wavelengths. - - Basic slit analysis of images through several dimensions. - - Basic Doppler and magnetic field support. - - Re-scaling images. - - Line profile fitting. + +- Able to open the files and understand the metadata. +- Creating movies or PNGs of different frames and wavelengths. +- Basic slit analysis of images through several dimensions. +- Basic Doppler and magnetic field support. +- Re-scaling images. +- Line profile fitting. This project will use [Glue](https://glueviz.org/) **"A python project to link visualizations of scientific datasets across many files."** Glue is a very powerful and extensible tool which already has support for many solar physics data through use of the WCS and coordinate frames implemented in Astropy and SunPy. @@ -49,12 +50,11 @@ Previous (and on-going) work for supporting astronomy and solar datasets is occu The primary development and documentation effort for this project would take place in the glue-solar repository. - This project would be considered successful if many of the following goals were achieved (in descending order of priority): -* Glue-solar is an installable package, with a first official release. -* Glue-solar is well documented, both for users and future developers, with screenshots and screencasts as appropriate. -* Glue-solar can load many different complex datasets such as SST cubes, IRIS data, DKIST data as well as AIA, HMI etc. -* Glue-solar demonstrates how to implement custom data loaders (i.e. for IRIS data). -* Glue-solar demonstrates how to implement custom linked layouts (i.e. SJI + Raster iris data). -* Glue-solar includes a custom splash screen with the SunPy logo. +- Glue-solar is an installable package, with a first official release. +- Glue-solar is well documented, both for users and future developers, with screenshots and screencasts as appropriate. +- Glue-solar can load many different complex datasets such as SST cubes, IRIS data, DKIST data as well as AIA, HMI etc. +- Glue-solar demonstrates how to implement custom data loaders (i.e. for IRIS data). +- Glue-solar demonstrates how to implement custom linked layouts (i.e. SJI + Raster iris data). +- Glue-solar includes a custom splash screen with the SunPy logo. diff --git a/_projects/2020/sunpy/sunspotter.md b/src/content/pages/gsoc/2020/sunpy/sunspotter.md similarity index 68% rename from _projects/2020/sunpy/sunspotter.md rename to src/content/pages/gsoc/2020/sunpy/sunspotter.md index 0bf6fa8c..47b1b138 100644 --- a/_projects/2020/sunpy/sunspotter.md +++ b/src/content/pages/gsoc/2020/sunpy/sunspotter.md @@ -2,22 +2,22 @@ name: Space Weather forecasting using linear algebra desc: Create a model to forecast solar flare events of new solar active regions images. requirements: - - Familiar with methods for creating classes, objects and subclasses. - - Confident with linear algebra methods. + - Familiar with methods for creating classes, objects and subclasses. + - Confident with linear algebra methods. difficulty: medium issues: mentors: - - dpshelio - - drsophiemurray - - samaloney - - mbobra + - dpshelio + - drsophiemurray + - samaloney + - mbobra initiatives: - - SOCIS - - GSOC + - SOCIS + - GSOC tags: - - Python + - Python collaborating_projects: - - SunPy + - SunPy --- #### Description @@ -46,33 +46,32 @@ Though this idea is for SOCIS, [same GSOC rules apply](https://github.com/sunpy/ ##### 1st Month -* Familiarisation with the dataset. Read and visualise the different type of +- Familiarisation with the dataset. Read and visualise the different type of data (images, classifications, …) -* Have evaluated and chosen an approach to the design of a SunPy search events +- Have evaluated and chosen an approach to the design of a SunPy search events object based on the images using [HEK or HELIO](https://docs.sunpy.org/en/latest/guide/acquiring_data/hek.html). -* Implementation of a basic linear algebra model to understand the steps +- Implementation of a basic linear algebra model to understand the steps needed for this problem -* Write up notebook for the sunpy gallery that exemplifies an analysis of this +- Write up notebook for the sunpy gallery that exemplifies an analysis of this dataset ##### 2nd Month -* Experiment with different linear algebra methods to find the best model. -* Write up as blog posts the different attempts tried. +- Experiment with different linear algebra methods to find the best model. +- Write up as blog posts the different attempts tried. ##### 3rd Month -* Check the accuracy of the model with SDO/HMI images from HEK -* Create notebook for the sunpy gallery explaining how to use the model +- Check the accuracy of the model with SDO/HMI images from HEK +- Create notebook for the sunpy gallery explaining how to use the model #### Resources -* [Predicting Coronal Mass Ejections Using Machine Learning Methods]( -https://doi.org/10.3847/0004-637X/821/2/127) -* [Sunspotter: Using Citizen Science to Determine the Complexity of +- [Predicting Coronal Mass Ejections Using Machine Learning Methods](https://doi.org/10.3847/0004-637X/821/2/127) +- [Sunspotter: Using Citizen Science to Determine the Complexity of Sunspots](https://doi.org/10.6084/m9.figshare.1050569.v1) -* [Machine Learning, Statistics, and Data Mining for +- [Machine Learning, Statistics, and Data Mining for Heliophysics](https://helioml.github.io/HelioML/title.html) -* [A Comparison of Flare Forecasting Methods. I. Results from the "All-Clear" +- [A Comparison of Flare Forecasting Methods. I. Results from the "All-Clear" Workshop](https://doi.org/10.3847/0004-637X/829/2/89) diff --git a/src/content/pages/gsoc/2021/astropy/astropyCDS.md b/src/content/pages/gsoc/2021/astropy/astropyCDS.md new file mode 100644 index 00000000..0396f60b --- /dev/null +++ b/src/content/pages/gsoc/2021/astropy/astropyCDS.md @@ -0,0 +1,48 @@ +--- +name: Add a CDS-ASCII writer to astropy +desc: Allow writing an astropy Table to CDS format +requirements: + # Student requirements: + - Python + - Some familiarity with ASCII files is preferred +difficulty: low +issues: + # Related issues (if any) to this project. + - https://github.com/astropy/astropy/issues/11257 + - https://github.com/astropy/astropy/issues/11239 + - https://github.com/astropy/astropy/issues/9291 +mentors: + # GitHub handles + - hamogu + - aaryapatil +initiatives: + - GSOC +tags: + # Different technologies needed + - python + - astropy core +collaborating_projects: + # suborganization(s) to which this project belongs. + - astropy +--- + +#### Description + +Astropy is a core python package for astronomy that provides several modules for the analysis of observational data. A common problem is storing and retrieving tabular data in standard formats which include metadata to fully describe the contents of a table. One such ASCII format is CDS () that is used for publishing catalogues accompanying papers to astronomical databases like Vizier. Astropy has the capability of reading a CDS file to an astropy Table but not writing a Table to CDS. In this project, the student will create a CDS writer in astropy.io.ascii. A python module from CDS () uses astropy to write CDS files, and the astropy writer can be based on that. + +#### Milestones (if any) + +##### Coding starts + +- Understand the CDS format, and write an example astropy Table to this format using python +- Get familiar with the astropy.io.ascii framework + +##### 1st evaluation + +- Add the writer to astropy.io.ascii (PR open and tests pass) +- Add documentation for the writer + +##### Final + +- Finish testing and documentation +- Fix any bugs (if found or reported) diff --git a/_projects/2021/gnuastro/astrometry.md b/src/content/pages/gsoc/2021/gnuastro/astrometry.md similarity index 59% rename from _projects/2021/gnuastro/astrometry.md rename to src/content/pages/gsoc/2021/gnuastro/astrometry.md index c61a2f22..47fe7569 100644 --- a/_projects/2021/gnuastro/astrometry.md +++ b/src/content/pages/gsoc/2021/gnuastro/astrometry.md @@ -3,31 +3,30 @@ name: Astrometry desc: Astrometry library in Gnuastro # add a short one line description of your project requirements: -# Student requirements: - - Knoweledge of C programming language. + # Student requirements: + - Knoweledge of C programming language. difficulty: medium issues: -# Related issues (if any) to this project. - - https://savannah.gnu.org/task/?15747 - - https://savannah.gnu.org/task/?15636 + # Related issues (if any) to this project. + - https://savannah.gnu.org/task/?15747 + - https://savannah.gnu.org/task/?15636 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - mohammad-akhlaghi - - sachinkumarsingh092 + # First person in contact; mentors may change before project starts. + # GitHub handles + - mohammad-akhlaghi + - sachinkumarsingh092 initiatives: - - GSOC - - SOCIS + - GSOC + - SOCIS tags: -# Different technologies needed - - C - - Git + # Different technologies needed + - C + - Git collaborating_projects: -# suborganisation(s) to which this project belongs. - - Gnuastro + # suborganization(s) to which this project belongs. + - Gnuastro --- - #### Description Astrometry is a critical component in the processing of astronomical data. @@ -39,26 +38,26 @@ To get started, check [our checklist](http://savannah.gnu.org/support/?110457#co #### Milestones (if any) - * Learning basic concepts of Astrometry and existing functions. +- Learning basic concepts of Astrometry and existing functions. - * Fixing bugs in existing components (for example bugs #59324, #58773). +- Fixing bugs in existing components (for example bugs #59324, #58773). - * Adding the remaining high-level components to complete astrometry. +- Adding the remaining high-level components to complete astrometry. ##### Coding starts -* Actively start fixing/adding some minor bugs/tasks in Gnuastro to get a good feeling of the coding style and logic within Gnuastro (this can be independent of astrometry). +- Actively start fixing/adding some minor bugs/tasks in Gnuastro to get a good feeling of the coding style and logic within Gnuastro (this can be independent of astrometry). -* Study the basic concepts of Astrometry and learning/testing the existing low-level features that have already been written. +- Study the basic concepts of Astrometry and learning/testing the existing low-level features that have already been written. ##### 1st evaluation -* Fixing bugs in existing components. +- Fixing bugs in existing components. ##### 2nd evaluation -* Adding the remaining higher-level functions. +- Adding the remaining higher-level functions. ##### Final -* Writing robust tests for the library, using data from several space-based and ground-based imaging surveys. +- Writing robust tests for the library, using data from several space-based and ground-based imaging surveys. diff --git a/_projects/2021/gnuastro/python-wrapper.md b/src/content/pages/gsoc/2021/gnuastro/python-wrapper.md similarity index 62% rename from _projects/2021/gnuastro/python-wrapper.md rename to src/content/pages/gsoc/2021/gnuastro/python-wrapper.md index 6b7ab1c0..a4c9f075 100644 --- a/_projects/2021/gnuastro/python-wrapper.md +++ b/src/content/pages/gsoc/2021/gnuastro/python-wrapper.md @@ -3,31 +3,30 @@ name: Gnuastro library in Python desc: Wrappers over the Gnuastro C library to allow usage in Python. # add a short one line description of your project requirements: -# Student requirements: - - The Python and Numpy core C library. - - C programming language. + # Student requirements: + - The Python and Numpy core C library. + - C programming language. difficulty: medium issues: -# Related issues (if any) to this project. - - https://savannah.gnu.org/task/?13786 + # Related issues (if any) to this project. + - https://savannah.gnu.org/task/?13786 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - mohammad-akhlaghi + # First person in contact; mentors may change before project starts. + # GitHub handles + - mohammad-akhlaghi initiatives: - - GSOC - - SOCIS + - GSOC + - SOCIS tags: -# Different technologies needed - - Python - - C - - Git + # Different technologies needed + - Python + - C + - Git collaborating_projects: -# suborganisation(s) to which this project belongs. - - Gnuastro + # suborganization(s) to which this project belongs. + - Gnuastro --- - #### Description Gnuastro is primarily written in C because astronomical datasets are large and thus need to be efficient with few dependencies. @@ -36,33 +35,33 @@ However, Gnuastro's also has an extensive set of installed, dynamic C/C++ librar However, many projects today are done in Python, almost excuslively using Numpy for their numerical operations (like data arrays). Python and Numpy are actually written in C, therefore they have very well-defined interfaces for communicating with installed C libraries. Gnuastro therefore plans on adding a low-level wrapper infra-structure which will allow easy usage of Gnuastro's powerful libraries in Python. -Note that this won't involve intermediate wrapper languages SWIG, we will directly link with the core C library of Numpy: https://docs.scipy.org/doc/numpy-1.10.0/reference/c-api.html +Note that this won't involve intermediate wrapper languages SWIG, we will directly link with the core C library of Numpy: This will be a wonderful chance to master Python and Scipy/Numpy at a very fundamental level, giving you a great experience to expand what you have learnt afterwards into many other functionalities. Of course, in the meantime you will also working on many real-world astronomical data and science scenarios using ground-based and space-based data. To get started, check [our checklist](http://savannah.gnu.org/support/?110457#comment0). #### Milestones (if any) - * Mastering the C interface of Numpy and Gnuastro. +- Mastering the C interface of Numpy and Gnuastro. - * Writing functions to convert Numpy's core data structure to Gnuastro's core data structure and vice-versa. +- Writing functions to convert Numpy's core data structure to Gnuastro's core data structure and vice-versa. - * Build and install the Python components as part of the Gnuastro's build. +- Build and install the Python components as part of the Gnuastro's build. ##### Coding starts -* Learning the numpy C interface and writing small test usages on some basic operations (not necessarily involving Gnuastro). +- Learning the numpy C interface and writing small test usages on some basic operations (not necessarily involving Gnuastro). -* Fixing small bugs in Gnuastro's library (as an excuse to learn the programming style and usage of Gnuastro's libraries). +- Fixing small bugs in Gnuastro's library (as an excuse to learn the programming style and usage of Gnuastro's libraries). ##### 1st evaluation -* Having a working converter between Numpy's data structure and Gnuastro's data structure. +- Having a working converter between Numpy's data structure and Gnuastro's data structure. ##### 2nd evaluation -* Adding wrappers to the core lower-level Gnuastro libraries. +- Adding wrappers to the core lower-level Gnuastro libraries. ##### Final -* Writing tests and build/install steps of the Python wrappers in Gnuastro's build system. +- Writing tests and build/install steps of the Python wrappers in Gnuastro's build system. diff --git a/src/content/pages/gsoc/2021/index.md b/src/content/pages/gsoc/2021/index.md new file mode 100644 index 00000000..c69b0087 --- /dev/null +++ b/src/content/pages/gsoc/2021/index.md @@ -0,0 +1,5 @@ +--- +title: "Ideas page for Google Summer of Code 2021" +show_main: false +season: 2021 +--- diff --git a/_projects/2021/juliaastro/NOVAS.md b/src/content/pages/gsoc/2021/juliaastro/NOVAS.md similarity index 58% rename from _projects/2021/juliaastro/NOVAS.md rename to src/content/pages/gsoc/2021/juliaastro/NOVAS.md index aa74d2b4..7734c1be 100644 --- a/_projects/2021/juliaastro/NOVAS.md +++ b/src/content/pages/gsoc/2021/juliaastro/NOVAS.md @@ -2,32 +2,33 @@ name: NOVAS desc: Implement a Julia vectorized version of the NOVAS library # add a short one line description of your project -requirements: -# Student requirements: - - Familiarity with the Julia programming language. - - Familiarity with linear algebra/numerical methods. - - Familiarity with astronomy/astrometry. +requirements: + # Student requirements: + - Familiarity with the Julia programming language. + - Familiarity with linear algebra/numerical methods. + - Familiarity with astronomy/astrometry. difficulty: medium issues: # Related issues (if any) to this project. mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - barrettp - - giordano + # First person in contact; mentors may change before project starts. + # GitHub handles + - barrettp + - giordano initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - Julia - - linear algebra - - astronomy/astrometry - - JPL ephemeris library + # Different technologies needed + - Julia + - linear algebra + - astronomy/astrometry + - JPL ephemeris library collaborating_projects: -# suborganisation(s) to which this project belongs. - - juliaAstro + # suborganization(s) to which this project belongs. + - juliaAstro --- -Implement a Julia version of the U.S. Naval Observatory Vector Astrometry + +Implement a Julia version of the U.S. Naval Observatory Vector Astrometry Software (NOVAS) library and vectorize it to improve performance. #### Description @@ -46,24 +47,24 @@ stars. The current C and FORTRAN versions do not have this feature. #### Milestones (if any) -* Initial implementation of the basic algorithms/functions. +- Initial implementation of the basic algorithms/functions. -* Vectorize the basic algorithms/functions +- Vectorize the basic algorithms/functions -* Modifications to the design to improve ease-of-use. +- Modifications to the design to improve ease-of-use. ##### Coding starts -* Understand the astrometrc algorithms and the related functions. +- Understand the astrometrc algorithms and the related functions. ##### 1st evaluation -* Initial implementation of basic algorithms/functions +- Initial implementation of basic algorithms/functions ##### 2nd evaluation -* Vectorize the basis algorithms/functions. +- Vectorize the basis algorithms/functions. ##### Final -* Submit final implementation with improvements for ease-of-use. +- Submit final implementation with improvements for ease-of-use. diff --git a/_projects/2021/radis/atmosphere_interface.md b/src/content/pages/gsoc/2021/radis/atmosphere_interface.md similarity index 56% rename from _projects/2021/radis/atmosphere_interface.md rename to src/content/pages/gsoc/2021/radis/atmosphere_interface.md index 48d05d52..1196fe6c 100644 --- a/_projects/2021/radis/atmosphere_interface.md +++ b/src/content/pages/gsoc/2021/radis/atmosphere_interface.md @@ -3,30 +3,29 @@ name: Atmosphere Calculations desc: Model atmospheres in the RADIS spectral code with a simplified frontend and more line databases # add a short one line description of your project requirements: -# Student requirements: - - Ideally : familiar with radiative transfer equations. + # Student requirements: + - Ideally: familiar with radiative transfer equations. difficulty: easy issues: -# Related issues (if any) to this project. - - https://github.com/radis/radis/issues/34 - - https://github.com/radis/radis/issues/189 + # Related issues (if any) to this project. + - https://github.com/radis/radis/issues/34 + - https://github.com/radis/radis/issues/189 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - erwanp - - ulyssed + # First person in contact; mentors may change before project starts. + # GitHub handles + - erwanp + - ulyssed initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - Python - - Git + # Different technologies needed + - Python + - Git collaborating_projects: -# suborganisation(s) to which this project belongs. - - radis + # suborganization(s) to which this project belongs. + - radis --- - #### Description The RADIS code was developed to characterize the radiation of plasmas, flames and atmospheres. It calculates high-temperature infrared spectra from databases of tens of millions of lines, with a new algorithm that already makes it one of the fastest line-by-line spectral codes available. This performance makes it very suitable to compute high-temperature atmospheres. @@ -37,40 +36,36 @@ The goal of this project is to simplify the user interface to compute atmosphere - make RADIS compatible with more line databases (ExoMol, GEISA, etc.) -- if interested in the radiative transfer-physics, add a plane-parallel model for multiple-layers-atmospheres. - +- if interested in the radiative transfer-physics, add a plane-parallel model for multiple-layers-atmospheres. #### Milestones - ##### Coding starts -* Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) +- Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) -* Training on emission & absorption spectroscopy +- Training on emission & absorption spectroscopy -* Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) +- Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) -* Get familiar with [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) : in particular, review the interface change to calculate multiple molecules at the same time ([#74](https://github.com/radis/radis/pull/74)) +- Get familiar with [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) : in particular, review the interface change to calculate multiple molecules at the same time ([#74](https://github.com/radis/radis/pull/74)) ##### 1st evaluation -* Write interface to read standard atmosphere input files (mole fractions, temperature profile, pressure profile) +- Write interface to read standard atmosphere input files (mole fractions, temperature profile, pressure profile) -* Add a detailed Notebook example in the documentation - -* Add integration to more line databases, like ExoMol or GEISA ([#34](https://github.com/radis/radis/issues/34)) +- Add a detailed Notebook example in the documentation +- Add integration to more line databases, like ExoMol or GEISA ([#34](https://github.com/radis/radis/issues/34)) ##### Final -* Improve how these databases are downloaded automatically and converted to RADIS standard format (see [#210](https://github.com/radis/radis/issues/210)) - -* Add a Gallery Example in RADIS documentation +- Improve how these databases are downloaded automatically and converted to RADIS standard format (see [#210](https://github.com/radis/radis/issues/210)) -* Have all code, tests and documentation in GitHub. +- Add a Gallery Example in RADIS documentation +- Have all code, tests and documentation in GitHub. ##### Secondary Goals -* If the student is interested in the radiative-transfer physics, set-up a plane-parallel model to compute multiple-layers atmospheres ([#189](https://github.com/radis/radis/issues/189)) \ No newline at end of file +- If the student is interested in the radiative-transfer physics, set-up a plane-parallel model to compute multiple-layers atmospheres ([#189](https://github.com/radis/radis/issues/189)) diff --git a/_projects/2021/radis/auto_engine.md b/src/content/pages/gsoc/2021/radis/auto_engine.md similarity index 56% rename from _projects/2021/radis/auto_engine.md rename to src/content/pages/gsoc/2021/radis/auto_engine.md index d27a3965..032daecf 100644 --- a/_projects/2021/radis/auto_engine.md +++ b/src/content/pages/gsoc/2021/radis/auto_engine.md @@ -6,74 +6,71 @@ requirements: # Student requirements: difficulty: medium issues: -# Related issues (if any) to this project. - - https://github.com/radis/radis-benchmark/issues/5 + # Related issues (if any) to this project. + - https://github.com/radis/radis-benchmark/issues/5 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - erwanp - - pkj-m + # First person in contact; mentors may change before project starts. + # GitHub handles + - erwanp + - pkj-m initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - Python - - Git + # Different technologies needed + - Python + - Git collaborating_projects: -# suborganisation(s) to which this project belongs. - - radis + # suborganization(s) to which this project belongs. + - radis --- - #### Description -The RADIS code was developed to characterize the radiation of plasmas, flames and atmospheres. It calculates high-temperature infrared spectra from databases of tens of millions of lines, with a new algorithm that already makes it one of the fastest line-by-line spectral codes available. +The RADIS code was developed to characterize the radiation of plasmas, flames and atmospheres. It calculates high-temperature infrared spectra from databases of tens of millions of lines, with a new algorithm that already makes it one of the fastest line-by-line spectral codes available. -The new algorithm is very efficient for large number of lines. However, for very widespread spectra with low number of lines, the legacy algorithm performs better. It was suggested that a scaling number would of the form : +The new algorithm is very efficient for large number of lines. However, for very widespread spectra with low number of lines, the legacy algorithm performs better. It was suggested that a scaling number would of the form : -$$ Rc = broadening_cutoff / wstep * N_lines / log(spectral range / wstep) $$ +$$ Rc = broadening_cutoff / wstep \* N_lines / log(spectral range / wstep) $$ -For low values of Rc, the legacy method would perform better. For large values of R, the new algorithm would perform better. +For low values of Rc, the legacy method would perform better. For large values of R, the new algorithm would perform better. -The first goal of the project is to confirm or adjust this number, by setting up benchmark cases under various simulation conditions. +The first goal of the project is to confirm or adjust this number, by setting up benchmark cases under various simulation conditions. The second goal of the project is to automatically switch the lineshape algorithm used at runtime based on the value of the number. - #### Milestones ##### Coding starts -* Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) +- Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) -* Training on emission & absorption spectroscopy +- Training on emission & absorption spectroscopy -* Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) +- Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) ##### 1st Evaluation -The goal is to confirm or adjust the critical number above. We only use RADIS and do not edit the codebase yet : - -* Run at least 100 benchmark cases, for various HITRAN (see [HITRAN spectra](https://radis.readthedocs.io/en/latest/examples/hitran-spectra.html#) ) and larger databases (HITEMP, CDSD-4000). +The goal is to confirm or adjust the critical number above. We only use RADIS and do not edit the codebase yet : -* Compare the results for the two lineshape engines of [calc_spectrum](https://radis.readthedocs.io/en/latest/source/radis.lbl.calc.html#radis.lbl.calc.calc_spectrum) (`optimization="None"` and `optimization="simple"`), and plot them against the R number. +- Run at least 100 benchmark cases, for various HITRAN (see [HITRAN spectra](https://radis.readthedocs.io/en/latest/examples/hitran-spectra.html#) ) and larger databases (HITEMP, CDSD-4000). -* Write a Jupyter Notebook to discuss the changes made to the R number formula, and the critical value obtained. +- Compare the results for the two lineshape engines of [calc_spectrum](https://radis.readthedocs.io/en/latest/source/radis.lbl.calc.html#radis.lbl.calc.calc_spectrum) (`optimization="None"` and `optimization="simple"`), and plot them against the R number. +- Write a Jupyter Notebook to discuss the changes made to the R number formula, and the critical value obtained. ##### Final We now update the RADIS codebase to implement the automatic engine choice : -* Add some of the benchmarks above in the [cpu-performance benchmark](https://github.com/radis/radis-benchmark/tree/master/manual_benchmarks) to track the changes. +- Add some of the benchmarks above in the [cpu-performance benchmark](https://github.com/radis/radis-benchmark/tree/master/manual_benchmarks) to track the changes. -* Compute the `Rc` number in [calc_spectrum](https://radis.readthedocs.io/en/latest/source/radis.lbl.calc.html#radis.lbl.calc.calc_spectrum) and automatically choose the optimization mode accordingly. +- Compute the `Rc` number in [calc_spectrum](https://radis.readthedocs.io/en/latest/source/radis.lbl.calc.html#radis.lbl.calc.calc_spectrum) and automatically choose the optimization mode accordingly. -* Choose what lineshape-broadening-cutoff to use by default in the legacy algorithm. +- Choose what lineshape-broadening-cutoff to use by default in the legacy algorithm. -* Re-run the benchmarks and ensure the fastest option is always chosen. +- Re-run the benchmarks and ensure the fastest option is always chosen. -* Have all code, tests and documentation in GitHub. +- Have all code, tests and documentation in GitHub. -##### Secondary Goals +##### Secondary Goals -* For the math/algorithm-oriented student : set-up the code architecture to deal with large spectra composed of multiple spectral regions, some of which would have different `Rc` numbers, and use the appropriate algorithm for each spectral region before merging the spectra. \ No newline at end of file +- For the math/algorithm-oriented student : set-up the code architecture to deal with large spectra composed of multiple spectral regions, some of which would have different `Rc` numbers, and use the appropriate algorithm for each spectral region before merging the spectra. diff --git a/_projects/2021/radis/non_air_diluent.md b/src/content/pages/gsoc/2021/radis/non_air_diluent.md similarity index 62% rename from _projects/2021/radis/non_air_diluent.md rename to src/content/pages/gsoc/2021/radis/non_air_diluent.md index 78b6dcd3..a1937334 100644 --- a/_projects/2021/radis/non_air_diluent.md +++ b/src/content/pages/gsoc/2021/radis/non_air_diluent.md @@ -3,32 +3,31 @@ name: Non-air diluent desc: Add non-air diluent and custom collisional broadening in RADIS spectra # add a short one line description of your project requirements: -# Student requirements: - - familiar with pandas + # Student requirements: + - familiar with pandas difficulty: hard issues: -# Related issues (if any) to this project. - - https://github.com/radis/radis/issues/213 + # Related issues (if any) to this project. + - https://github.com/radis/radis/issues/213 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - erwanp - - minouHub + # First person in contact; mentors may change before project starts. + # GitHub handles + - erwanp + - minouHub initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - Python - - Git + # Different technologies needed + - Python + - Git collaborating_projects: -# suborganisation(s) to which this project belongs. - - radis + # suborganization(s) to which this project belongs. + - radis --- - #### Description -The RADIS code was developed to characterize the radiation of plasmas, flames and atmospheres. It calculates high-temperature infrared spectra from databases of tens of millions of lines, with a new algorithm that makes it one of the fastest line-by-line spectral codes available. +The RADIS code was developed to characterize the radiation of plasmas, flames and atmospheres. It calculates high-temperature infrared spectra from databases of tens of millions of lines, with a new algorithm that makes it one of the fastest line-by-line spectral codes available. Currently RADIS supports calculation of about every possible molecule, but assumes that it is diluted in air by default. It is possible to manually adjust it to replace air by one other diulter (for instance : compute CO diluted in CO2). The goal of the current project is to make it automatic, and extend it to multiple diluents (for instance: CO diluted in CO2 and H2O). @@ -36,42 +35,40 @@ No background in spectroscopy and collisional broadening is required, but the st #### Milestones - ##### Coding starts -* Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) +- Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) -* Training on emission & absorption spectroscopy, with a focus on collisional broadening. +- Training on emission & absorption spectroscopy, with a focus on collisional broadening. -* Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and get familiar with [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) +- Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and get familiar with [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) ##### 1st evaluation -Learn the physics : +Learn the physics : -* With the help of the mentors, write a Tutorial notebook about collisional broadening and the effect of diluent (for instance using the existing implementation in the very good [HAPI](https://github.com/hitranonline/hapi) code) +- With the help of the mentors, write a Tutorial notebook about collisional broadening and the effect of diluent (for instance using the existing implementation in the very good [HAPI](https://github.com/hitranonline/hapi) code) -* Add tutorial to show how to manually replace the broadening coefficients in RADIS (with Pandas). +- Add tutorial to show how to manually replace the broadening coefficients in RADIS (with Pandas). -Implement : +Implement : -* write a method in [SpectrumFactory](https://github.com/radis/radis/blob/develop/radis/lbl/factory.py#L109) to set-up the dilution gas, and read the corresponding coefficients from the loaded database. +- write a method in [SpectrumFactory](https://github.com/radis/radis/blob/develop/radis/lbl/factory.py#L109) to set-up the dilution gas, and read the corresponding coefficients from the loaded database. -* Update the [pressure_broadening_HWMH](https://github.com/radis/radis/blob/develop/radis/lbl/broadening.py#L249) function to compute more than one diluent. +- Update the [pressure_broadening_HWMH](https://github.com/radis/radis/blob/develop/radis/lbl/broadening.py#L249) function to compute more than one diluent. ##### Final -Make it user friendly : - -* Add a `diluent` parameter in the high-level [calc_spectrum](https://github.com/radis/radis/blob/develop/radis/lbl/calc.py#L29) function +Make it user friendly : -* automatically retrieve non-air broadening coefficients from the HITRAN database and convert it to the RADIS database format (see [#213](https://github.com/radis/radis/issues/213) ). +- Add a `diluent` parameter in the high-level [calc_spectrum](https://github.com/radis/radis/blob/develop/radis/lbl/calc.py#L29) function -* Add a Gallery Example +- automatically retrieve non-air broadening coefficients from the HITRAN database and convert it to the RADIS database format (see [#213](https://github.com/radis/radis/issues/213) ). -* Have all code, tests and documentation in GitHub. +- Add a Gallery Example +- Have all code, tests and documentation in GitHub. ##### Secondary goals -* allow user to specify their own collisional broadening formula. +- allow user to specify their own collisional broadening formula. diff --git a/_projects/2021/radis/reduce_memory_usage.md b/src/content/pages/gsoc/2021/radis/reduce_memory_usage.md similarity index 56% rename from _projects/2021/radis/reduce_memory_usage.md rename to src/content/pages/gsoc/2021/radis/reduce_memory_usage.md index f29af32e..c386ebc0 100644 --- a/_projects/2021/radis/reduce_memory_usage.md +++ b/src/content/pages/gsoc/2021/radis/reduce_memory_usage.md @@ -3,59 +3,56 @@ name: Memory Usage desc: Reduce Memory usage in RADIS to be able to compute terabyte-scale databases # add a short one line description of your project requirements: -# Student requirements: - - Knowledge of Pandas or other DataFrame libraries + # Student requirements: + - Knowledge of Pandas or other DataFrame libraries difficulty: medium issues: -# Related issues (if any) to this project. - - https://github.com/radis/radis/issues/118 + # Related issues (if any) to this project. + - https://github.com/radis/radis/issues/118 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - erwanp - - dcmvdbekerom + # First person in contact; mentors may change before project starts. + # GitHub handles + - erwanp + - dcmvdbekerom initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - Python - - Git + # Different technologies needed + - Python + - Git collaborating_projects: -# suborganisation(s) to which this project belongs. - - radis + # suborganization(s) to which this project belongs. + - radis --- - #### Description -The RADIS code was developed to characterize the radiation of plasmas, flames and atmospheres. It calculates high-temperature infrared spectra from databases of tens of millions of lines, with a new algorithm that already makes it one of the fastest line-by-line spectral codes available. - -However, although the algorithm is very CPU/GPU efficient, the RADIS code is still memory-hungry. The first goal of the current project is to reduce the memory usage of current calculations. Then, it is to replace the current core with libraries better suited to process larger-than-memory-data, which would make it possible to compute spectral databases of up to billions of lines (hundred of GB or terabyte-scale). +The RADIS code was developed to characterize the radiation of plasmas, flames and atmospheres. It calculates high-temperature infrared spectra from databases of tens of millions of lines, with a new algorithm that already makes it one of the fastest line-by-line spectral codes available. +However, although the algorithm is very CPU/GPU efficient, the RADIS code is still memory-hungry. The first goal of the current project is to reduce the memory usage of current calculations. Then, it is to replace the current core with libraries better suited to process larger-than-memory-data, which would make it possible to compute spectral databases of up to billions of lines (hundred of GB or terabyte-scale). #### Milestones ##### Coding starts -* Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) +- Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) -* Training on emission & absorption spectroscopy +- Training on emission & absorption spectroscopy -* Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) +- Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) ##### 1st Evaluation -* Work on the current memory bottlenecks (#118) - -* Setup [memory-performance benchmark](https://github.com/radis/radis-benchmark/tree/master/manual_benchmarks) to track the changes +- Work on the current memory bottlenecks (#118) -* Merge the changes +- Setup [memory-performance benchmark](https://github.com/radis/radis-benchmark/tree/master/manual_benchmarks) to track the changes +- Merge the changes ##### Final -* Setup a proof-of-concept with Vaex / Dask or alternative libraries with lazy-loading features, to be able to compute larger-than-memory-databases (> tens of GB - terabyte-scale ) +- Setup a proof-of-concept with Vaex / Dask or alternative libraries with lazy-loading features, to be able to compute larger-than-memory-databases (> tens of GB - terabyte-scale ) -* Based on results, decide whether to integrate Vaex, Dask or alternative library in the code. +- Based on results, decide whether to integrate Vaex, Dask or alternative library in the code. -* Have all code, tests and documentation in GitHub. +- Have all code, tests and documentation in GitHub. diff --git a/_projects/2021/stingray/daveupdate.md b/src/content/pages/gsoc/2021/stingray/daveupdate.md similarity index 72% rename from _projects/2021/stingray/daveupdate.md rename to src/content/pages/gsoc/2021/stingray/daveupdate.md index 8a4c8a89..1deddeb2 100644 --- a/_projects/2021/stingray/daveupdate.md +++ b/src/content/pages/gsoc/2021/stingray/daveupdate.md @@ -2,53 +2,52 @@ name: Stingray GUI update desc: Update Stingray's GUI, DAVE, to use the most recent Javascript dependencies and Stingray API (including faster pulsar searches, faster processing, large data handling) and infrastructure (e.g. the modifications introduced by [APE 17](https://docs.astropy.org/projects/package-template/en/latest/ape17.html)) requirements: - - Good knowledge of Python and Javascript - - Knowledge of signal processing and Fourier methods would be ideal + - Good knowledge of Python and Javascript + - Knowledge of signal processing and Fourier methods would be ideal difficulty: medium issues: - - https://github.com/StingraySoftware/dave/pull/74 + - https://github.com/StingraySoftware/dave/pull/74 mentors: - - matteobachetti - - smigliari + - matteobachetti + - smigliari initiatives: - - GSOC + - GSOC tags: - - python - - signal processing - - time series analysis - - Fourier analysis - - astronomy - - javascript + - python + - signal processing + - time series analysis + - Fourier analysis + - astronomy + - javascript collaborating_projects: - - stingray + - stingray --- #### Description + Generating periodograms for astronomical data is the core task of Stingray. Because periodograms are often noisy, several methods to denoise periodograms exist in the literature, among them the multi-taper periodogram -Stingray aims to provide a comprehensive library of reliable, well-tested implementations of common algorithms for time series analysis in Astronomy. -DAVE is an elegant GUI to the library, developed during a previous GSoC. +Stingray aims to provide a comprehensive library of reliable, well-tested implementations of common algorithms for time series analysis in Astronomy. +DAVE is an elegant GUI to the library, developed during a previous GSoC. Due to the fast evolving Python and Javascript landscape, this GUI is not compatible with the current versions of the dependencies. Also, Stingray has now new features that were not implemented in the original GUI. In this project, the student will refresh the GUI dependencies, update the package building infrastructure, and add the new functionality introduced in recent versions of Stingray. - #### Milestones (if any) 1. Package build working again 2. New Stingray features introduced as proof-of-concept -2. Fully working interface - +3. Fully working interface ##### Coding starts -* Understand GUI functionality and have an overview of the individual components that need to be implemented. +- Understand GUI functionality and have an overview of the individual components that need to be implemented. ##### 1st evaluation -* Proof-of-concept implementation is complete (M1 and M2). +- Proof-of-concept implementation is complete (M1 and M2). ##### Final -* Full implementation is complete (M3) +- Full implementation is complete (M3) diff --git a/_projects/2021/stingray/modeling_improvements.md b/src/content/pages/gsoc/2021/stingray/modeling_improvements.md similarity index 69% rename from _projects/2021/stingray/modeling_improvements.md rename to src/content/pages/gsoc/2021/stingray/modeling_improvements.md index 8895c123..0993e627 100644 --- a/_projects/2021/stingray/modeling_improvements.md +++ b/src/content/pages/gsoc/2021/stingray/modeling_improvements.md @@ -1,34 +1,34 @@ --- name: Modern Statistical Modeling in Stingray. -desc: Make the statistical modeling infrastructure in stingray more robust by using algorithms and implementations developed for machine learning, such as TensorFlow Probability, PyMC3 and JAX. +desc: Make the statistical modeling infrastructure in stingray more robust by using algorithms and implementations developed for machine learning, such as TensorFlow Probability, PyMC3 and JAX. requirements: - - Proficiency in Python - - Knowledge of automatic differentiation or probabilistic programming helpful, but not essential + - Proficiency in Python + - Knowledge of automatic differentiation or probabilistic programming helpful, but not essential difficulty: medium issues: - - https://github.com/StingraySoftware/stingray/issues/520 + - https://github.com/StingraySoftware/stingray/issues/520 mentors: - - dhuppenkothen - - matteobachetti + - dhuppenkothen + - matteobachetti initiatives: - - GSOC + - GSOC tags: - - python - - signal processing - - time series analysis - - statistics - - Bayesian inference - - astronomy + - python + - signal processing + - time series analysis + - statistics + - Bayesian inference + - astronomy collaborating_projects: - - stingray + - stingray --- #### Description -Stingray aims to provide a comprehensive library of reliable, well-tested implementations of common algorithms for time series analysis in Astronomy. Often, the ultimate goal of a researcher is statistical inference of some properties of an astronomical object. While stingray currently has an infrastructure for parametric modelling of Fourier products and light curves (based primarily on numpy and scipy), the existing infrastructure and algorithms are relatively fragile and tend to fail often. -In this project, the student will add automatic differentiation and modern optimization algorithms to make the existing infrastructure more robust. In a second step, the student will extend the existing infrastructure to facilitate building fully probabilistic models in TensorFlow Probability or PyMC3. +Stingray aims to provide a comprehensive library of reliable, well-tested implementations of common algorithms for time series analysis in Astronomy. Often, the ultimate goal of a researcher is statistical inference of some properties of an astronomical object. While stingray currently has an infrastructure for parametric modelling of Fourier products and light curves (based primarily on numpy and scipy), the existing infrastructure and algorithms are relatively fragile and tend to fail often. +In this project, the student will add automatic differentiation and modern optimization algorithms to make the existing infrastructure more robust. In a second step, the student will extend the existing infrastructure to facilitate building fully probabilistic models in TensorFlow Probability or PyMC3. #### Milestones (if any) @@ -37,13 +37,13 @@ In this project, the student will add automatic differentiation and modern optim ##### Coding starts -* Understand basics of automatic differentiation and have an overview of the individual components that need to be implemented/modified. +- Understand basics of automatic differentiation and have an overview of the individual components that need to be implemented/modified. ##### 1st evaluation -* Implementation of automatic differentiation is complete.. +- Implementation of automatic differentiation is complete.. ##### Final -* Implementation of automatic differentiation in combination with a probabilistic model. -* Wrap up connecting the new implementation to existing Stingray classes, finish documentation and associated tutorial in a Jupyter notebook. +- Implementation of automatic differentiation in combination with a probabilistic model. +- Wrap up connecting the new implementation to existing Stingray classes, finish documentation and associated tutorial in a Jupyter notebook. diff --git a/_projects/2021/stingray/multitaper.md b/src/content/pages/gsoc/2021/stingray/multitaper.md similarity index 71% rename from _projects/2021/stingray/multitaper.md rename to src/content/pages/gsoc/2021/stingray/multitaper.md index aa76b336..f1520f67 100644 --- a/_projects/2021/stingray/multitaper.md +++ b/src/content/pages/gsoc/2021/stingray/multitaper.md @@ -2,47 +2,46 @@ name: Multitaper-Periodograms in Stingray. desc: Add a new algorithm for building periodograms to Stingray. The multitaper periodogram is a method that's fairly well-known in signal processing, but virtually unknown in (X-ray) astronomy. requirements: - - Proficiency in Python - - Knowledge of signal processing and Fourier methods would be ideal + - Proficiency in Python + - Knowledge of signal processing and Fourier methods would be ideal difficulty: medium issues: - - https://github.com/StingraySoftware/stingray/issues/361 + - https://github.com/StingraySoftware/stingray/issues/361 mentors: - - dhuppenkothen - - matteobachetti + - dhuppenkothen + - matteobachetti initiatives: - - GSOC + - GSOC tags: - - python - - signal processing - - time series analysis - - Fourier analysis - - astronomy + - python + - signal processing + - time series analysis + - Fourier analysis + - astronomy collaborating_projects: - - stingray + - stingray --- #### Description + Generating periodograms for astronomical data is the core task of Stingray. Because periodograms are often noisy, several methods to denoise periodograms exist in the literature, among them the multi-taper periodogram Stingray aims to provide a comprehensive library of reliable, well-tested implementations of common algorithms for time series analysis in Astronomy. In this project, the student will add the multi-taper periodogram to the existing code base in order to allow astronomers build periodograms with better noise properties. - #### Milestones (if any) 1. Proof-of-concept implementation of the multi-taper algorithm 2. Full implementation of the algorithm in the Stingray framework, including tests and relevant documentation - ##### Coding starts -* Understand algorithm and have an overview of the individual components that need to be implemented. +- Understand algorithm and have an overview of the individual components that need to be implemented. ##### 1st evaluation -* Proof-of-concept implementation is complete. +- Proof-of-concept implementation is complete. ##### Final -* Full implementation is complete -* Wrap up connecting the new implementation to existing Stingray classes, finish documentation and associated tutorial in a Jupyter notebook. +- Full implementation is complete +- Wrap up connecting the new implementation to existing Stingray classes, finish documentation and associated tutorial in a Jupyter notebook. diff --git a/_projects/2021/stingray/typing.md b/src/content/pages/gsoc/2021/stingray/typing.md similarity index 67% rename from _projects/2021/stingray/typing.md rename to src/content/pages/gsoc/2021/stingray/typing.md index e8fcae84..e77daee2 100644 --- a/_projects/2021/stingray/typing.md +++ b/src/content/pages/gsoc/2021/stingray/typing.md @@ -2,47 +2,46 @@ name: Use type hints in Stingray desc: Introduce and enforce type hints throughout the Stingray library requirements: - - Basic knowledge of Python - - Knowledge of signal processing and Fourier methods would be ideal + - Basic knowledge of Python + - Knowledge of signal processing and Fourier methods would be ideal difficulty: easy issues: - - https://github.com/StingraySoftware/stingray/issues/544 + - https://github.com/StingraySoftware/stingray/issues/544 mentors: - - matteobachetti - - dhuppenkothen + - matteobachetti + - dhuppenkothen initiatives: - - GSOC + - GSOC tags: - - python - - signal processing - - time series analysis - - Fourier analysis - - astronomy + - python + - signal processing + - time series analysis + - Fourier analysis + - astronomy collaborating_projects: - - stingray + - stingray --- #### Description + Generating periodograms for astronomical data is the core task of Stingray. Because periodograms are often noisy, several methods to denoise periodograms exist in the literature, among them the multi-taper periodogram -Stingray aims to provide a comprehensive library of reliable, well-tested implementations of common algorithms for time series analysis in Astronomy. +Stingray aims to provide a comprehensive library of reliable, well-tested implementations of common algorithms for time series analysis in Astronomy. In this project, the student will introduce type hints in the code, in order to make debugging easier and, possibly, use runtime checks to ensure the consistency of results. - #### Milestones (if any) 1. Introduction of type hints everywhere in the code 2. Thorough testing of the consistency of type hints in typical use cases - ##### Coding starts -* Understand the general structure of Stingray, the testing environment, the notebooks used to document the library +- Understand the general structure of Stingray, the testing environment, the notebooks used to document the library ##### 1st evaluation -* Type hints implementation is complete. +- Type hints implementation is complete. ##### Final -* Through tests through external libraries such as [enforce-typing](https://pypi.org/project/enforce-typing/). +- Through tests through external libraries such as [enforce-typing](https://pypi.org/project/enforce-typing/). diff --git a/_projects/2021/sunpy/3dplotting.md b/src/content/pages/gsoc/2021/sunpy/3dplotting.md similarity index 61% rename from _projects/2021/sunpy/3dplotting.md rename to src/content/pages/gsoc/2021/sunpy/3dplotting.md index 9852b587..84ef0314 100644 --- a/_projects/2021/sunpy/3dplotting.md +++ b/src/content/pages/gsoc/2021/sunpy/3dplotting.md @@ -3,37 +3,38 @@ name: 3D plotting desc: Provide 3D plotting capabilities to SunPy # add a short one line description of your project requirements: -# Student requirements: - - Familiarity with Python - - Familiarity with some plotting tools (e.g. Matplotlib) + # Student requirements: + - Familiarity with Python + - Familiarity with some plotting tools (e.g. Matplotlib) difficulty: medium issues: -# Related issues (if any) to this project. - - https://github.com/sunpy/sunpy/pull/4591 + # Related issues (if any) to this project. + - https://github.com/sunpy/sunpy/pull/4591 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - dstansby - - Cadair - - nabobalis + # First person in contact; mentors may change before project starts. + # GitHub handles + - dstansby + - Cadair + - nabobalis initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - python - - plotting - - 3D + # Different technologies needed + - python + - plotting + - 3D collaborating_projects: -# suborganisation(s) to which this project belongs. - - sunpy + # suborganization(s) to which this project belongs. + - sunpy --- + The SunPy ecosystem currently has well developed support for making 2D plots (primarily with Matplotlib), but currently no interface for making 3D plots. #### Description In this project the student will code new tools for taking common datasets used in the SunPy ecosystem (e.g. images of the Sun, maps of the Sun, magnetic field lines from models of the Sun), and plotting them in 3D. This will initially be done using the pyvista plotting toolkit, but we would like to make the tools general enough that other plotting toolkits (e.g. plotly) can be used too. -We have already trialled this, with some demo code at https://github.com/sunpy/sunpy/pull/4591. The goal of this project is to take this demo code, and put it in a new Python package to allow rapid development, independent of the sunpy core package. The work will be evenly split between writing new code, and learning how to write documentation and tests for the code within a package. +We have already trialled this, with some demo code at . The goal of this project is to take this demo code, and put it in a new Python package to allow rapid development, independent of the sunpy core package. The work will be evenly split between writing new code, and learning how to write documentation and tests for the code within a package. #### Milestones (if any) diff --git a/_projects/2021/sunpy/ndcube_resampling.md b/src/content/pages/gsoc/2021/sunpy/ndcube_resampling.md similarity index 67% rename from _projects/2021/sunpy/ndcube_resampling.md rename to src/content/pages/gsoc/2021/sunpy/ndcube_resampling.md index e4e72d18..cdd8fb72 100644 --- a/_projects/2021/sunpy/ndcube_resampling.md +++ b/src/content/pages/gsoc/2021/sunpy/ndcube_resampling.md @@ -3,40 +3,39 @@ name: Supporting Resampling in NDCube desc: Enable users to resample their data using NDCube. # add a short one line description of your project requirements: -# Student requirements: - - Knowledge on python + # Student requirements: + - Knowledge on python difficulty: hard issues: -# Related issues (if any) to this project. - - https://github.com/sunpy/ndcube/issues/155 + # Related issues (if any) to this project. + - https://github.com/sunpy/ndcube/issues/155 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - DanRyanIrish - - Cadair + # First person in contact; mentors may change before project starts. + # GitHub handles + - DanRyanIrish + - Cadair initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - python + # Different technologies needed + - python collaborating_projects: -# suborganisation(s) to which this project belongs. - - sunpy + # suborganization(s) to which this project belongs. + - sunpy --- - #### Description This project will provide a new functionality to the ndcube package, -namely resampling data using the NDCube data class. The NDCube class +namely resampling data using the NDCube data class. The NDCube class enables users to manipulate and visualize n-dimensional astronomical data. NDCube's big advantage over arrays and other high-level data containers -is its support for functional coordinate transformations +is its support for functional coordinate transformations (World Coordinate System, or WCS) that enable users to easily track what real world coordinates their data values correspond to. For example, what point on the sky a pixel is pointing at. NDCube has made coupling astronomical data and coordinate systems far more -user-friendly. However the greatest outstanding functionality is +user-friendly. However the greatest outstanding functionality is NDCube's inability to resample its data onto a different pixel grid. This would have many potenital benefits to users. It would enable them to align data from different imagers onto the same @@ -48,7 +47,7 @@ the requirement of altering the WCS transformations. However, if users are able to resample their data with a single command and have their coordinate transformations automatically update accordingly, it would greatly speed up data analysis workflows and make such -analysis less prone to errors. +analysis less prone to errors. Therefore this project will be of great benefit to the wider astronomical community. @@ -56,14 +55,14 @@ community. ##### Coding starts -* Become familiar with ndcube and astropy WCS codebase. -* Begin work on a resampling framework +- Become familiar with ndcube and astropy WCS codebase. +- Begin work on a resampling framework ##### 1st evaluation -* Complete working draft prototype of resampling framework. -* Seek feedback from the ndcube-using community. +- Complete working draft prototype of resampling framework. +- Seek feedback from the ndcube-using community. ##### Final -* Release new version of ndcube including resampling capability +- Release new version of ndcube including resampling capability diff --git a/_projects/2021/sunpy/scraper.md b/src/content/pages/gsoc/2021/sunpy/scraper.md similarity index 63% rename from _projects/2021/sunpy/scraper.md rename to src/content/pages/gsoc/2021/sunpy/scraper.md index 591a6195..709dd4ee 100644 --- a/_projects/2021/sunpy/scraper.md +++ b/src/content/pages/gsoc/2021/sunpy/scraper.md @@ -3,30 +3,30 @@ name: Scraper rewrite desc: Improve the current scraper to download data # add a short one line description of your project requirements: -# Student requirements: - - Familiarity with Python - - Knowledge of Python regex - - Familiar with web protocols + # Student requirements: + - Familiarity with Python + - Knowledge of Python regex + - Familiar with web protocols difficulty: medium issues: -# Related issues (if any) to this project. - - https://github.com/sunpy/sunpy/issues/4888 + # Related issues (if any) to this project. + - https://github.com/sunpy/sunpy/issues/4888 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - nabobalis - - samaloney - - hayesla - - dpshelio + # First person in contact; mentors may change before project starts. + # GitHub handles + - nabobalis + - samaloney + - hayesla + - dpshelio initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - python - - web + # Different technologies needed + - python + - web collaborating_projects: -# suborganisation(s) to which this project belongs. - - sunpy + # suborganization(s) to which this project belongs. + - sunpy --- This project will provide the ability to parse URL information in a programmatic way. @@ -34,16 +34,15 @@ This project will provide the ability to parse URL information in a programmatic #### Description sunpy provides a way for users to access data using Fido and its many internal clients. -Many of these simpler clients do URL scraping to return metadata and data files to a user. +Many of these simpler clients do URL scraping to return metadata and data files to a user. -This scraping is done by the `scraper class `__. +This scraping is done by the `scraper class `\_\_. Over the years, the scale of what this class has to do has expanded to a point where it has become unmaintainable. -The goal of this project is to create a new scraper with a predefined API and class structure. +The goal of this project is to create a new scraper with a predefined API and class structure. Please be aware that this project is not a design project, the API and the scope of scrapper has been (link to come) predetermined and laid out by the GSoC mentors. So the primary focus of this project will be to write the class and its methods to follow this specification (obviously leaving the implementation details mainly up to you). - #### Milestones (if any) 1. Partial scraper written @@ -53,13 +52,13 @@ So the primary focus of this project will be to write the class and its methods ##### Coding starts -* Already have a development environment setup -* Understand the project and the API design. Having asked questions if you do not. +- Already have a development environment setup +- Understand the project and the API design. Having asked questions if you do not. ##### 1st evaluation -* Partial skeleton of scraper written. +- Partial skeleton of scraper written. ##### Final -* Functional replacement ready for review and merging into sunpy. +- Functional replacement ready for review and merging into sunpy. diff --git a/_projects/2021/sunpy/sunraster.md b/src/content/pages/gsoc/2021/sunpy/sunraster.md similarity index 64% rename from _projects/2021/sunpy/sunraster.md rename to src/content/pages/gsoc/2021/sunpy/sunraster.md index c183fd49..ff71b952 100644 --- a/_projects/2021/sunpy/sunraster.md +++ b/src/content/pages/gsoc/2021/sunpy/sunraster.md @@ -3,27 +3,27 @@ name: Update sunraster to ndcube 2.0 desc: Updates the sunraster code-base to use the powerful new version of ndcube. # add a short one line description of your project requirements: -# Student requirements: - - Knowledge of Python - - Ideally some familiarity with ndcube 2.0 and sunraster. + # Student requirements: + - Knowledge of Python + - Ideally some familiarity with ndcube 2.0 and sunraster. difficulty: medium issues: -# Related issues (if any) to this project. - - https://github.com/sunpy/sunraster/issues/177 + # Related issues (if any) to this project. + - https://github.com/sunpy/sunraster/issues/177 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - DanRyanIrish - - Cadair - - nabobalis + # First person in contact; mentors may change before project starts. + # GitHub handles + - DanRyanIrish + - Cadair + - nabobalis initiatives: - - GSOC + - GSOC tags: -# Different technologies needed - - python + # Different technologies needed + - python collaborating_projects: -# suborganisation(s) to which this project belongs. - - sunpy + # suborganization(s) to which this project belongs. + - sunpy --- This project will update the sunraster package to use the ndcube 2.0, a much more powerful version and lead to the next release of the sunraster package. @@ -46,23 +46,22 @@ This API is not backwards compatible and so requires upgrades to the sunraster so users of solar spectrograph observations can more easily perform their data analysis. - #### Milestones (if any) -* sunraster code has been updated. -* sunraster tests all pass. -* sunraster has been released. +- sunraster code has been updated. +- sunraster tests all pass. +- sunraster has been released. ##### Coding starts -* Become familiar with ndcube and sunraster codebases. -* Create a test environment for sunraster that uses ndcube 2.0. -* List out parts of sunraster API that need updating. +- Become familiar with ndcube and sunraster codebases. +- Create a test environment for sunraster that uses ndcube 2.0. +- List out parts of sunraster API that need updating. ##### 1st evaluation -* Update sunraster code base to get all ndcube-2.0-base tests passing. +- Update sunraster code base to get all ndcube-2.0-base tests passing. ##### Final -* sunraster is ready to be released to users. +- sunraster is ready to be released to users. diff --git a/_projects/2022/gnuastro/astrometry_distortions.md b/src/content/pages/gsoc/2022/gnuastro/astrometry_distortions.md similarity index 57% rename from _projects/2022/gnuastro/astrometry_distortions.md rename to src/content/pages/gsoc/2022/gnuastro/astrometry_distortions.md index f69ee097..3241da60 100644 --- a/_projects/2022/gnuastro/astrometry_distortions.md +++ b/src/content/pages/gsoc/2022/gnuastro/astrometry_distortions.md @@ -3,34 +3,33 @@ name: Distortion coefficients in astrometry desc: Thanks to GSoC 2021 linear parameters can be found, we now need distortion. # add a short one line description of your project requirements: -# Student requirements: - - C programming language. - - GNU Scientific Library and FITS World Coordinate System (WCS) standrads. + # Student requirements: + - C programming language. + - GNU Scientific Library and FITS World Coordinate System (WCS) standrads. difficulty: medium issues: -# Related issues (if any) to this project. - - https://savannah.gnu.org/task/?15747 + # Related issues (if any) to this project. + - https://savannah.gnu.org/task/?15747 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - mohammad-akhlaghi + # First person in contact; mentors may change before project starts. + # GitHub handles + - mohammad-akhlaghi initiatives: -# The programme under this project wish to run. - - GSOC + # The programme under this project wish to run. + - GSOC project_size: - - 175 h + - 175 h tags: -# Different technologies needed - - C - - Gnuastro - - WCSLIB - - GNU Scientific Library + # Different technologies needed + - C + - Gnuastro + - WCSLIB + - GNU Scientific Library collaborating_projects: -# suborganisation(s) to which this project belongs. - - Gnuastro + # suborganization(s) to which this project belongs. + - Gnuastro --- - #### Description Astrometry is a critical component in the processing of astronomical data. @@ -44,24 +43,24 @@ To get started, check [our GSoC 2022 checklist](https://savannah.gnu.org/support #### Milestones (if any) - * Completing [our GSoC 2022 checklist](https://savannah.gnu.org/support/index.php?110613#comment0) +- Completing [our GSoC 2022 checklist](https://savannah.gnu.org/support/index.php?110613#comment0) - * Learning basic concepts of Astrometry and existing functions. +- Learning basic concepts of Astrometry and existing functions. - * Fixing bugs in existing components. +- Fixing bugs in existing components. - * Adding the remaining high-level components to complete astrometry. +- Adding the remaining high-level components to complete astrometry. ##### Coding starts -* Actively start fixing/adding some minor bugs/tasks in Gnuastro to get a good feeling of the coding style and logic within Gnuastro (this can be independent of astrometry). +- Actively start fixing/adding some minor bugs/tasks in Gnuastro to get a good feeling of the coding style and logic within Gnuastro (this can be independent of astrometry). -* Study the basic concepts of Astrometry and learning/testing the existing low-level features that have already been written. +- Study the basic concepts of Astrometry and learning/testing the existing low-level features that have already been written. ##### 1st evaluation -* Adding tests to existing steps and start working on finding distortions. +- Adding tests to existing steps and start working on finding distortions. ##### Final evaluation -* Library and program for writing the full WCS (including distortions) in the FITS format. +- Library and program for writing the full WCS (including distortions) in the FITS format. diff --git a/_projects/2022/gnuastro/python_wrappers.md b/src/content/pages/gsoc/2022/gnuastro/python_wrappers.md similarity index 64% rename from _projects/2022/gnuastro/python_wrappers.md rename to src/content/pages/gsoc/2022/gnuastro/python_wrappers.md index 76afc682..88e7fdff 100644 --- a/_projects/2022/gnuastro/python_wrappers.md +++ b/src/content/pages/gsoc/2022/gnuastro/python_wrappers.md @@ -3,31 +3,30 @@ name: Gnuastro library in Python desc: Wrappers over the Gnuastro C library to allow usage in Python. # add a short one line description of your project requirements: -# Student requirements: - - Low-level Python and Numpy (their C library). + # Student requirements: + - Low-level Python and Numpy (their C library). difficulty: low issues: -# Related issues (if any) to this project. - - https://savannah.gnu.org/task/?13786 + # Related issues (if any) to this project. + - https://savannah.gnu.org/task/?13786 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - mohammad-akhlaghi + # First person in contact; mentors may change before project starts. + # GitHub handles + - mohammad-akhlaghi initiatives: -# The programme under this project wish to run. - - GSOC + # The programme under this project wish to run. + - GSOC project_size: - - 350 h + - 350 h tags: -# Different technologies needed - - python - - C + # Different technologies needed + - python + - C collaborating_projects: -# suborganisation(s) to which this project belongs. - - Gnuastro + # suborganization(s) to which this project belongs. + - Gnuastro --- - #### Description Gnuastro is primarily written in C because astronomical datasets are large and thus need to be efficient with few dependencies. @@ -45,26 +44,26 @@ To get started, check [our GSoC 2022 checklist](https://savannah.gnu.org/support #### Milestones (if any) - * Completing [our GSoC 2022 checklist](https://savannah.gnu.org/support/index.php?110613#comment0) +- Completing [our GSoC 2022 checklist](https://savannah.gnu.org/support/index.php?110613#comment0) - * Mastering the C interface of Python/Numpy and Gnuastro. +- Mastering the C interface of Python/Numpy and Gnuastro. - * Writing functions to convert Numpy's core data structure to Gnuastro's core data structure and vice-versa. +- Writing functions to convert Numpy's core data structure to Gnuastro's core data structure and vice-versa. - * Build and install the Python components as part of the Gnuastro's build. +- Build and install the Python components as part of the Gnuastro's build. ##### Coding starts -* Learning the numpy C interface and writing small test usages on some basic operations (not necessarily involving Gnuastro). +- Learning the numpy C interface and writing small test usages on some basic operations (not necessarily involving Gnuastro). -* Fixing small bugs in Gnuastro's library (as an excuse to learn the programming style and usage of Gnuastro's libraries). +- Fixing small bugs in Gnuastro's library (as an excuse to learn the programming style and usage of Gnuastro's libraries). ##### 1st evaluation -* Having a working converter between Numpy's data structure and Gnuastro's data structure. +- Having a working converter between Numpy's data structure and Gnuastro's data structure. ##### Final evaluation -* Adding wrappers to the core lower-level Gnuastro libraries. +- Adding wrappers to the core lower-level Gnuastro libraries. -* Writing tests and build/install steps of the Python wrappers in Gnuastro's build system. +- Writing tests and build/install steps of the Python wrappers in Gnuastro's build system. diff --git a/src/content/pages/gsoc/2022/index.md b/src/content/pages/gsoc/2022/index.md new file mode 100644 index 00000000..d190eaed --- /dev/null +++ b/src/content/pages/gsoc/2022/index.md @@ -0,0 +1,5 @@ +--- +title: "Ideas page for Google Summer of Code 2022" +show_main: false +season: 2022 +--- diff --git a/_projects/2022/juliaastro/stingray_porting.md b/src/content/pages/gsoc/2022/juliaastro/stingray_porting.md similarity index 58% rename from _projects/2022/juliaastro/stingray_porting.md rename to src/content/pages/gsoc/2022/juliaastro/stingray_porting.md index dcf86b13..bc87ebcc 100644 --- a/_projects/2022/juliaastro/stingray_porting.md +++ b/src/content/pages/gsoc/2022/juliaastro/stingray_porting.md @@ -3,60 +3,62 @@ name: Spectral timing in Julia desc: Create a set of timing and spectral timing methods in Julia. # add a short one line description of your project requirements: -# Student requirements: - - Understanding Python code - - Julia knowledge + # Student requirements: + - Understanding Python code + - Julia knowledge difficulty: medium issues: # Related issues (if any) to this project. mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - matteobachetti - - giordano + # First person in contact; mentors may change before project starts. + # GitHub handles + - matteobachetti + - giordano initiatives: -# The programme under this project wish to run. - - GSOC + # The programme under this project wish to run. + - GSOC project_size: - - 350 h + - 350 h tags: -# Different technologies needed - - python - - Julia - - time series analysis + # Different technologies needed + - python + - Julia + - time series analysis collaborating_projects: -# suborganisation(s) to which this project belongs. - - stingray - - juliaAstro + # suborganization(s) to which this project belongs. + - stingray + - juliaAstro --- + Spectral timing in Julia #### Description -The analysis of time series from astronomical observations in the X-rays is an + +The analysis of time series from astronomical observations in the X-rays is an excellent tool to test advanced physical theories. -Of particular interest are the periodicities that are often observed in the +Of particular interest are the periodicities that are often observed in the X-ray signals coming from the surroundings of accreting black holes, and the evolution of the rotation period of neutron stars. -The essential toolbox for X-ray timing analysis includes different kinds of +The essential toolbox for X-ray timing analysis includes different kinds of periodograms, cross spectra, and a number of "variability vs energy spectra", that allow to understand the variability at different energies. -This project is about the implementation of a basic set of X-ray timing analysis +This project is about the implementation of a basic set of X-ray timing analysis operations in Julia, starting from the porting of the core operations from the -`stingray` Python package. +`stingray` Python package. #### Milestones (if any) ##### Coding starts -* Implement a series of tests in Julia that the new code will have to pass -* Start the porting +- Implement a series of tests in Julia that the new code will have to pass +- Start the porting ##### 1st evaluation -* Basic operations (periodograms and cross spectra) implemented for at least +- Basic operations (periodograms and cross spectra) implemented for at least one kind of input data ##### Final evaluation -* Properly tested periodogram, cross spectra, time lags, and coherence -* Optional: a working framework for variability vs energy spectra +- Properly tested periodogram, cross spectra, time lags, and coherence +- Optional: a working framework for variability vs energy spectra diff --git a/_projects/2022/radis/atmosphere_interface.md b/src/content/pages/gsoc/2022/radis/atmosphere_interface.md similarity index 56% rename from _projects/2022/radis/atmosphere_interface.md rename to src/content/pages/gsoc/2022/radis/atmosphere_interface.md index 88e5a8d3..0a8827b8 100644 --- a/_projects/2022/radis/atmosphere_interface.md +++ b/src/content/pages/gsoc/2022/radis/atmosphere_interface.md @@ -3,33 +3,32 @@ name: Atmosphere Calculations desc: Model atmospheres in the RADIS spectral code with a simplified frontend and more line databases # add a short one line description of your project requirements: -# Student requirements: - - Familiar with radiative transfer equations + # Student requirements: + - Familiar with radiative transfer equations difficulty: easy issues: -# Related issues (if any) to this project. - - https://github.com/radis/radis/issues/34 - - https://github.com/radis/radis/issues/189 + # Related issues (if any) to this project. + - https://github.com/radis/radis/issues/34 + - https://github.com/radis/radis/issues/189 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - anandxkumar - - gagan-aryan - - erwanp + # First person in contact; mentors may change before project starts. + # GitHub handles + - anandxkumar + - gagan-aryan + - erwanp initiatives: - - GSOC + - GSOC project_size: - - 175 h + - 175 h tags: -# Different technologies needed - - Python - - Git + # Different technologies needed + - Python + - Git collaborating_projects: -# suborganisation(s) to which this project belongs. - - radis + # suborganization(s) to which this project belongs. + - radis --- - #### Description The RADIS code was developed to characterize the radiation of plasmas, flames and atmospheres. It calculates high-temperature infrared spectra from databases of tens of millions of lines, with a new algorithm that already makes it one of the fastest line-by-line spectral codes available. This performance makes it very suitable to compute high-temperature atmospheres. @@ -40,40 +39,36 @@ The goal of this project is to simplify the user interface to compute atmosphere - make RADIS compatible with more line databases (ExoMol, GEISA, etc) -- if interested in the radiative transfer-physics, add a plane-parallel model for multiple-layers-atmospheres - +- if interested in the radiative transfer-physics, add a plane-parallel model for multiple-layers-atmospheres #### Milestones - ##### Coding starts -* Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) +- Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) -* Training on emission & absorption spectroscopy +- Training on emission & absorption spectroscopy -* Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) +- Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) -* Get familiar with [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) : in particular, review the interface change to calculate multiple molecules at the same time ([#74](https://github.com/radis/radis/pull/74)) +- Get familiar with [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) : in particular, review the interface change to calculate multiple molecules at the same time ([#74](https://github.com/radis/radis/pull/74)) ##### 1st evaluation -* Write interface to read standard atmosphere input files (mole fractions, temperature profile, pressure profile) +- Write interface to read standard atmosphere input files (mole fractions, temperature profile, pressure profile) -* Add a detailed Notebook example in the documentation - -* Add integration to more line databases, like ExoMol or GEISA ([#34](https://github.com/radis/radis/issues/34)) +- Add a detailed Notebook example in the documentation +- Add integration to more line databases, like ExoMol or GEISA ([#34](https://github.com/radis/radis/issues/34)) ##### Final evaluation -* Improve how these databases are downloaded automatically and converted to RADIS standard format (see [#210](https://github.com/radis/radis/issues/210)) - -* Add a Gallery Example in RADIS documentation +- Improve how these databases are downloaded automatically and converted to RADIS standard format (see [#210](https://github.com/radis/radis/issues/210)) -* Have all code, tests and documentation in GitHub. +- Add a Gallery Example in RADIS documentation +- Have all code, tests and documentation in GitHub. ##### Secondary Goals -* If the student is interested in the radiative-transfer physics, set-up a plane-parallel model to compute multiple-layers atmospheres ([#189](https://github.com/radis/radis/issues/189)) \ No newline at end of file +- If the student is interested in the radiative-transfer physics, set-up a plane-parallel model to compute multiple-layers atmospheres ([#189](https://github.com/radis/radis/issues/189)) diff --git a/_projects/2022/radis/non_air_diluent.md b/src/content/pages/gsoc/2022/radis/non_air_diluent.md similarity index 62% rename from _projects/2022/radis/non_air_diluent.md rename to src/content/pages/gsoc/2022/radis/non_air_diluent.md index ea49e5ca..1ff15b35 100644 --- a/_projects/2022/radis/non_air_diluent.md +++ b/src/content/pages/gsoc/2022/radis/non_air_diluent.md @@ -3,37 +3,36 @@ name: Non-air diluent desc: Add non-air diluent and custom collisional broadening in RADIS spectra # add a short one line description of your project requirements: -# Student requirements: - - Familiar with pandas + # Student requirements: + - Familiar with pandas difficulty: hard issues: -# Related issues (if any) to this project. - - https://github.com/radis/radis/issues/213 + # Related issues (if any) to this project. + - https://github.com/radis/radis/issues/213 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - erwanp - - minouHub - - gagan-aryan - - anandxkumar + # First person in contact; mentors may change before project starts. + # GitHub handles + - erwanp + - minouHub + - gagan-aryan + - anandxkumar initiatives: - - GSOC + - GSOC project_size: - - 175 h - - 350 h + - 175 h + - 350 h tags: -# Different technologies needed - - Python - - Git + # Different technologies needed + - Python + - Git collaborating_projects: -# suborganisation(s) to which this project belongs. - - radis + # suborganization(s) to which this project belongs. + - radis --- - #### Description -The RADIS code was developed to characterize the radiation of plasmas, flames and atmospheres. It calculates high-temperature infrared spectra from databases of tens of millions of lines, with a new algorithm that makes it one of the fastest line-by-line spectral codes available. +The RADIS code was developed to characterize the radiation of plasmas, flames and atmospheres. It calculates high-temperature infrared spectra from databases of tens of millions of lines, with a new algorithm that makes it one of the fastest line-by-line spectral codes available. Currently RADIS supports calculation of about every possible molecule, but assumes that it is diluted in air by default. It is possible to manually adjust it to replace air by one other diulter (for instance : compute CO diluted in CO2). The goal of the current project is to make it automatic, and extend it to multiple diluents (for instance: CO diluted in CO2 and H2O). @@ -41,42 +40,40 @@ No background in spectroscopy and collisional broadening is required, but the st #### Milestones - ##### Coding starts -* Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) +- Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) -* Training on emission & absorption spectroscopy, with a focus on collisional broadening. +- Training on emission & absorption spectroscopy, with a focus on collisional broadening. -* Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and get familiar with [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) +- Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and get familiar with [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) ##### 1st evaluation -Learn the physics : +Learn the physics : -* With the help of the mentors, write a Tutorial notebook about collisional broadening and the effect of diluent (for instance using the existing implementation in the very good [HAPI](https://github.com/hitranonline/hapi) code) +- With the help of the mentors, write a Tutorial notebook about collisional broadening and the effect of diluent (for instance using the existing implementation in the very good [HAPI](https://github.com/hitranonline/hapi) code) -* Add tutorial to show how to manually replace the broadening coefficients in RADIS (with Pandas) +- Add tutorial to show how to manually replace the broadening coefficients in RADIS (with Pandas) -Implement : +Implement : -* write a method in [SpectrumFactory](https://github.com/radis/radis/blob/develop/radis/lbl/factory.py#L109) to set-up the dilution gas, and read the corresponding coefficients from the loaded database +- write a method in [SpectrumFactory](https://github.com/radis/radis/blob/develop/radis/lbl/factory.py#L109) to set-up the dilution gas, and read the corresponding coefficients from the loaded database -* Update the [pressure_broadening_HWMH](https://github.com/radis/radis/blob/develop/radis/lbl/broadening.py#L249) function to compute more than one diluent +- Update the [pressure_broadening_HWMH](https://github.com/radis/radis/blob/develop/radis/lbl/broadening.py#L249) function to compute more than one diluent ##### Final evaluation -Make it user friendly : - -* Add a `diluent` parameter in the high-level [calc_spectrum](https://github.com/radis/radis/blob/develop/radis/lbl/calc.py#L29) function +Make it user friendly : -* automatically retrieve non-air broadening coefficients from the HITRAN database and convert it to the RADIS database format (see [#213](https://github.com/radis/radis/issues/213) ) +- Add a `diluent` parameter in the high-level [calc_spectrum](https://github.com/radis/radis/blob/develop/radis/lbl/calc.py#L29) function -* Add a Gallery Example +- automatically retrieve non-air broadening coefficients from the HITRAN database and convert it to the RADIS database format (see [#213](https://github.com/radis/radis/issues/213) ) -* Have all code, tests and documentation in GitHub +- Add a Gallery Example +- Have all code, tests and documentation in GitHub ##### Secondary Goals -* allow user to specify their own collisional broadening formula +- allow user to specify their own collisional broadening formula diff --git a/src/content/pages/gsoc/2022/radis/performance_tweaks.md b/src/content/pages/gsoc/2022/radis/performance_tweaks.md new file mode 100644 index 00000000..ed3a1b82 --- /dev/null +++ b/src/content/pages/gsoc/2022/radis/performance_tweaks.md @@ -0,0 +1,73 @@ +--- +name: Performance Tweaks for RADIS +desc: Reduce Memory usage and improve performance in RADIS to be able to compute terabyte-scale databases +# add a short one line description of your project +requirements: + # Student requirements: + - Knowledge of Pandas or other DataFrame libraries + - Prior working knowledge with big data handling databases like Vaex +difficulty: medium +issues: + # Related issues (if any) to this project. + - https://github.com/radis/radis/issues/118 + - https://github.com/radis/radis/issues/176 +mentors: + # First person in contact; mentors may change before project starts. + # GitHub handles + - gagan-aryan + - anandxkumar + - erwanp +initiatives: + - GSOC +project_size: + - 175 h +tags: + # Different technologies needed + - Python + - Vaex + - Pandas + - Git +collaborating_projects: + # suborganization(s) to which this project belongs. + - radis +--- + +#### Description + +The RADIS code was developed to characterize the radiation of plasmas, flames and atmospheres. It calculates high-temperature infrared spectra from databases of tens of millions of lines, with a new algorithm that already makes it one of the fastest line-by-line spectral codes available. + +However, although the algorithm is very CPU/GPU efficient, the RADIS code is still memory-hungry. The first goal of the current project is to reduce the memory usage of current calculations. Then, it is to replace the current core with libraries better suited to process larger-than-memory-data, which would make it possible to compute spectral databases of up to billions of lines (hundred of GB or terabyte-scale). + +#### Milestones + +##### Coding starts + +- Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) + +- Training on emission & absorption spectroscopy + +- Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) + +##### 1st Evaluation + +- Work on the existing [memory bottlenecks](https://github.com/radis/radis/issues/118) + +- Work on [crunching datatypes](https://github.com/radis/radis-benchmark/pull/11) of various columns to optimise dataframe memory usage + +- Setup [memory-performance benchmark](https://github.com/radis/radis-benchmark/tree/master/manual_benchmarks) to track the changes + +- Automatically [cache non equilibrium parameters](https://github.com/radis/radis/issues/176) to line database cache + +- Merge the changes + +##### Final evaluation + +- Write the Proof-Of-Concept to do out of the core calculations i.e., use Vaex for computations instead of pandas. + +- Merge the idea of the Proof-Of-Concept to the codebase. + +- Add [automatic linestrength cutoff](https://github.com/radis/radis/issues/268) + +- Add [.h5 loading benchmark](https://github.com/radis/radis-benchmark/issues/4) + +- Have all code, tests and documentation in GitHub diff --git a/_projects/2022/radis/radis_app_improvement.md b/src/content/pages/gsoc/2022/radis/radis_app_improvement.md similarity index 52% rename from _projects/2022/radis/radis_app_improvement.md rename to src/content/pages/gsoc/2022/radis/radis_app_improvement.md index d6fe1371..cde2ed3a 100644 --- a/_projects/2022/radis/radis_app_improvement.md +++ b/src/content/pages/gsoc/2022/radis/radis_app_improvement.md @@ -3,80 +3,75 @@ name: Radis App Improvement desc: Improve the current Radis Web App involving various features enhancement and bugs fixes # add a short one line description of your project requirements: -# Student requirements: - - Familiar with typescript and python + # Student requirements: + - Familiar with typescript and python difficulty: medium issues: -# Related issues (if any) to this project. - - https://github.com/suzil/radis-app/issues/147 - - https://github.com/suzil/radis-app/issues/527 - - https://github.com/suzil/radis-app/issues/211 + # Related issues (if any) to this project. + - https://github.com/suzil/radis-app/issues/147 + - https://github.com/suzil/radis-app/issues/527 + - https://github.com/suzil/radis-app/issues/211 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - anandxkumar - - gagan-aryan - - erwanp - - suzil + # First person in contact; mentors may change before project starts. + # GitHub handles + - anandxkumar + - gagan-aryan + - erwanp + - suzil initiatives: - - GSOC + - GSOC project_size: - - 175 h - - 350 h + - 175 h + - 350 h tags: -# Different technologies needed - - TypeScript - - Python - - HTML/CSS - - Git + # Different technologies needed + - TypeScript + - Python + - HTML/CSS + - Git collaborating_projects: -# suborganisation(s) to which this project belongs. - - radis + # suborganization(s) to which this project belongs. + - radis --- - #### Description -RADIS app is a web app for high-resolution infrared molecular spectra using RADIS. The goal of this project is to provide an easy-to-use UI instead of writing code. Currently, the [RADIS app](https://www.radis.app/) has a simple interface with basic functionalities that helps create a nice spectral graph using certain parameters but there is a lot of scope for improvements. - -The goal of this project is to create a more responsive app while improving and implementing new features and fixing various issues. +RADIS app is a web app for high-resolution infrared molecular spectra using RADIS. The goal of this project is to provide an easy-to-use UI instead of writing code. Currently, the [RADIS app](https://www.radis.app/) has a simple interface with basic functionalities that helps create a nice spectral graph using certain parameters but there is a lot of scope for improvements. +The goal of this project is to create a more responsive app while improving and implementing new features and fixing various issues. #### Milestones - ##### Coding starts -* Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) +- Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) -* Training on emission & absorption spectroscopy +- Training on emission & absorption spectroscopy -* Have set up a development environment for both [RADIS app](https://github.com/suzil/radis-app) and [RADIS](https://github.com/radis/radis), be familiar with open-source tools (GitHub / Git / Tests) +- Have set up a development environment for both [RADIS app](https://github.com/suzil/radis-app) and [RADIS](https://github.com/radis/radis), be familiar with open-source tools (GitHub / Git / Tests) -* Get familiar with [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) and [RADIS app Architecture](https://github.com/suzil/radis-app#architecture) +- Get familiar with [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) and [RADIS app Architecture](https://github.com/suzil/radis-app#architecture) ##### 1st evaluation -* Add an option to change the units of [spectral range](https://github.com/suzil/radis-app/issues/147) on the go, and generate an output similar to [Link](https://github.com/suzil/radis-app/issues/147#issuecomment-1072872386) +- Add an option to change the units of [spectral range](https://github.com/suzil/radis-app/issues/147) on the go, and generate an output similar to the [example output](https://github.com/suzil/radis-app/issues/147#issuecomment-1072872386) -* Add an advance tab option to add more parameters like `medium`, `wstep`, `optimization`, `truncation`, `broadening_method`, etc to add more command to the users and make the calculations more transparent by displaying important parameters using [hover tooltips](https://github.com/suzil/radis-app/issues/184) - -* Migrate from native React to [react-hook-form](https://github.com/suzil/radis-app/issues/347) or any other library to simplify the codebase +- Add an advance tab option to add more parameters like `medium`, `wstep`, `optimization`, `truncation`, `broadening_method`, etc to add more command to the users and make the calculations more transparent by displaying important parameters using [hover tooltips](https://github.com/suzil/radis-app/issues/184) +- Migrate from native React to [react-hook-form](https://github.com/suzil/radis-app/issues/347) or any other library to simplify the codebase ##### Final evaluation -* [Cache Hitran dataset](https://github.com/suzil/radis-app/issues/527) to remove download time to generate spectrum of any new molecule and possibly add Hitemp dataset also (molecules can be hardcoded). Data may be to attach to a persistent network file system like Amazon EFS or on a more available database like DynamoDB - -* Add ability to download `.spec` file for the spectrum generated and add an option to upload `.spec` file to the load spectrum +- [Cache Hitran dataset](https://github.com/suzil/radis-app/issues/527) to remove download time to generate spectrum of any new molecule and possibly add Hitemp dataset also (molecules can be hardcoded). Data may be to attach to a persistent network file system like Amazon EFS or on a more available database like DynamoDB -* Create a detailed documentation of architecture and workflow of RADIS app +- Add ability to download `.spec` file for the spectrum generated and add an option to upload `.spec` file to the load spectrum -* Have all code, tests and documentation in GitHub +- Create a detailed documentation of architecture and workflow of RADIS app +- Have all code, tests and documentation in GitHub ##### Secondary Goals -* Upload your experimental spectrum and be able to fit it (to infer temperature or species) +- Upload your experimental spectrum and be able to fit it (to infer temperature or species) -* Add a counter to track the use of app (for eg- how many spectrums are generated over time) \ No newline at end of file +- Add a counter to track the use of app (for eg- how many spectrums are generated over time) diff --git a/_projects/2022/radis/spectrum_fitting.md b/src/content/pages/gsoc/2022/radis/spectrum_fitting.md similarity index 53% rename from _projects/2022/radis/spectrum_fitting.md rename to src/content/pages/gsoc/2022/radis/spectrum_fitting.md index 4464eb01..69f11c8b 100644 --- a/_projects/2022/radis/spectrum_fitting.md +++ b/src/content/pages/gsoc/2022/radis/spectrum_fitting.md @@ -3,66 +3,62 @@ name: Spectrum Fitting desc: Build a function to automatically fit an experimental spectrum with the output of RADIS, with the best performance possible # add a short one line description of your project requirements: -# Student requirements: - - Familiar with python + # Student requirements: + - Familiar with python difficulty: medium issues: -# Related issues (if any) to this project. - - https://github.com/radis/radis/issues/377 + # Related issues (if any) to this project. + - https://github.com/radis/radis/issues/377 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - anandxkumar - - gagan-aryan - - erwanp - - minouHub + # First person in contact; mentors may change before project starts. + # GitHub handles + - anandxkumar + - gagan-aryan + - erwanp + - minouHub initiatives: - - GSOC + - GSOC project_size: - - 175 h - - 350 h + - 175 h + - 350 h tags: -# Different technologies needed - - Python - - Git + # Different technologies needed + - Python + - Git collaborating_projects: -# suborganisation(s) to which this project belongs. - - radis + # suborganization(s) to which this project belongs. + - radis --- - #### Description +The RADIS code was developed to characterize the radiation of plasmas, flames and atmospheres. It calculates high-temperature infrared spectra from databases of tens of millions of lines, with a new algorithm that already makes it one of the fastest line-by-line spectral codes available. -The RADIS code was developed to characterize the radiation of plasmas, flames and atmospheres. It calculates high-temperature infrared spectra from databases of tens of millions of lines, with a new algorithm that already makes it one of the fastest line-by-line spectral codes available. - -An experimental spectrum is compared to calculated spectra until a good match is obtained : then, the experimental temperature is known. -The efficiency of the fitting process depends on the RADIS calculation times as well as the fitting algorithm used. - -The goal of this project is to compare and improve fitting algorithms to reduce the fitting time. +An experimental spectrum is compared to calculated spectra until a good match is obtained : then, the experimental temperature is known. +The efficiency of the fitting process depends on the RADIS calculation times as well as the fitting algorithm used. +The goal of this project is to compare and improve fitting algorithms to reduce the fitting time. #### Milestones - ##### Coding starts -* Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) +- Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) -* Training on emission & absorption spectroscopy +- Training on emission & absorption spectroscopy -* Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) +- Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) ##### 1st evaluation -* Build many reference cases for fitting, under various conditions (narrow spectra, large spectra, one parameter, multiple parameters, etc.) +- Build many reference cases for fitting, under various conditions (narrow spectra, large spectra, one parameter, multiple parameters, etc.) -* Select the best fitting algorithm to improve performances +- Select the best fitting algorithm to improve performances ##### Final evaluation -* Use RADIS's special features (such as caching spectra & creating databases) to improve fitting times further +- Use RADIS's special features (such as caching spectra & creating databases) to improve fitting times further -* Create a detailed documentation of architecture and workflow of the fitting process +- Create a detailed documentation of architecture and workflow of the fitting process -* Have all code, tests and documentation in GitHub \ No newline at end of file +- Have all code, tests and documentation in GitHub diff --git a/_projects/2022/stingray/bexvar.md b/src/content/pages/gsoc/2022/stingray/bexvar.md similarity index 61% rename from _projects/2022/stingray/bexvar.md rename to src/content/pages/gsoc/2022/stingray/bexvar.md index 77a26326..7c5248a2 100644 --- a/_projects/2022/stingray/bexvar.md +++ b/src/content/pages/gsoc/2022/stingray/bexvar.md @@ -3,45 +3,46 @@ name: Bexvar in Stingray desc: Implement the Bayesian Excess variance in Stingray # add a short one line description of your project requirements: -# Contributor requirements: - - Knowledge of Python - - Familiar with time series methods + # Contributor requirements: + - Knowledge of Python + - Familiar with time series methods difficulty: medium issues: -# Related issues (if any) to this project. - - https://github.com/StingraySoftware/stingray/issues/582 + # Related issues (if any) to this project. + - https://github.com/StingraySoftware/stingray/issues/582 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - matteobachetti - - dhuppenkothen + # First person in contact; mentors may change before project starts. + # GitHub handles + - matteobachetti + - dhuppenkothen initiatives: -# The programme under this project wish to run. - - GSOC + # The programme under this project wish to run. + - GSOC project_size: - - 350 h + - 350 h tags: -# Different technologies needed - - python + # Different technologies needed + - python collaborating_projects: -# suborganisation(s) to which this project belongs. - - stingray + # suborganization(s) to which this project belongs. + - stingray --- + Bayesian Excess Variance (bexvar) in Stingray #### Description -The Bayesian Excess Variance is a statistical measurement of variability +The Bayesian Excess Variance is a statistical measurement of variability in Poisson-distributed (e.g. X-ray or gamma-ray) data. -The time series from most astronomical facilities, and in particular from -low-Earth orbit satellites, can only be recorded when the source is visible, -most of all when it is not below the horizon (or in "Earth occultation" in the +The time series from most astronomical facilities, and in particular from +low-Earth orbit satellites, can only be recorded when the source is visible, +most of all when it is not below the horizon (or in "Earth occultation" in the case of satellites). The missing data from the occultation periods can result in spurious variability if not properly accounted for. -Another possible source of spurious variability is the presence of variable +Another possible source of spurious variability is the presence of variable background signals. -The Bayesian Excess Variance method is suitable for finding variability in +The Bayesian Excess Variance method is suitable for finding variability in gappy X-ray light curves with variable background. The contributor will work to implement this method in Stingray, a Python library for the analysis of astronomical time series. @@ -51,13 +52,13 @@ See [Buchner et al. 2021](https://arxiv.org/abs/2106.14529) ##### Coding starts -* Take confidence with the Stingray infrastructure. -* Creation of test cases for the Bexvar method, based on real observations. +- Take confidence with the Stingray infrastructure. +- Creation of test cases for the Bexvar method, based on real observations. ##### 1st evaluation -* Draft implementation of bexvar +- Draft implementation of bexvar ##### Final evaluation -* Polished implementation, working tests, documentation +- Polished implementation, working tests, documentation diff --git a/src/content/pages/gsoc/2022/stingray/type_hints_stingray.md b/src/content/pages/gsoc/2022/stingray/type_hints_stingray.md new file mode 100644 index 00000000..e9d39da0 --- /dev/null +++ b/src/content/pages/gsoc/2022/stingray/type_hints_stingray.md @@ -0,0 +1,53 @@ +--- +name: Type hints in Stingray +desc: Using type hints throughout the Stingray library +# add a short one line description of your project +requirements: + # Student requirements: + - Knowledge of Python +difficulty: easy +issues: + # Related issues (if any) to this project. + - https://github.com/StingraySoftware/stingray/issues/544 +mentors: + # First person in contact; mentors may change before project starts. + # GitHub handles + - matteobachetti + - dhuppenkothen +initiatives: + # The programme under this project wish to run. + - GSOC +project_size: + - 175 h +tags: + # Different technologies needed + - python +collaborating_projects: + # suborganization(s) to which this project belongs. + - stingray +--- + +Implementing type hints in the Stingray library + +#### Description + +Despite being and remaining a dynamically-typed language, Python has +now a [working infrastructure for type hints](https://www.python.org/dev/peps/pep-0484/). +For a data analysis library, type hinting can be very useful to avoid explicit testing +for data types and to facilitate debugging. + +#### Milestones (if any) + +##### Coding starts + +- Take confidence with the Stingray infrastructure. +- Start implementing type hints in the core modules of Stingray + +##### 1st evaluation + +- Create tests to enforce type checking in selected methods +- Extend the type hints infrastructure to most of the code base + +##### Final evaluation + +- Finish up, polish, and document properly diff --git a/_projects/2022/sunpy/database.md b/src/content/pages/gsoc/2022/sunpy/database.md similarity index 77% rename from _projects/2022/sunpy/database.md rename to src/content/pages/gsoc/2022/sunpy/database.md index a79ac05b..8ff8ea1d 100644 --- a/_projects/2022/sunpy/database.md +++ b/src/content/pages/gsoc/2022/sunpy/database.md @@ -2,24 +2,24 @@ name: Database as a data client desc: Creating a new database module requirements: - - Familiarity with Python - - Familiarity with SQLAlchemy + - Familiarity with Python + - Familiarity with SQLAlchemy difficulty: high issues: -- https://github.com/sunpy/sunpy/issues/5880 + - https://github.com/sunpy/sunpy/issues/5880 mentors: - - cadair - - wtbarnes - - nabobalis + - cadair + - wtbarnes + - nabobalis initiatives: - - GSOC + - GSOC project_size: - - 350 h + - 350 h tags: - - python + - python collaborating_projects: - - sunpy - - parfive + - sunpy + - parfive --- #### Description @@ -31,6 +31,7 @@ Over the years, this module has seen little development and has not been linked For an overview of the current database, you can read [our user guide to acquire data](https://docs.sunpy.org/en/stable/guide/acquiring_data/database.html) and [our tour introduction to the database](https://docs.sunpy.org/en/stable/guide/tour.html#database-package). The project has several aims: + - A creation of a new sub-package, `sunpy.net.database`. - When a user does a data search and download, the search and file information will be saved to a local database. - The user can then do the same search and will be informed that the files already exist locally avoiding doing the original download again. @@ -44,16 +45,16 @@ More technical details can be found on the linked issue. ##### Coding starts -* Engaged with the community and understand the motivation and challenges of the project. -* Have set up a development environment. -* Familiar with the database module +- Engaged with the community and understand the motivation and challenges of the project. +- Have set up a development environment. +- Familiar with the database module ##### 1st evaluation -* Working prototype of a database "client" -* Have all code, tests and documentation in GitHub. +- Working prototype of a database "client" +- Have all code, tests and documentation in GitHub. ##### Final evaluation -* Finished database "client" -* Have all code, tests and documentation in GitHub. +- Finished database "client" +- Have all code, tests and documentation in GitHub. diff --git a/_projects/2022/sunpy/helioviewer.md b/src/content/pages/gsoc/2022/sunpy/helioviewer.md similarity index 69% rename from _projects/2022/sunpy/helioviewer.md rename to src/content/pages/gsoc/2022/sunpy/helioviewer.md index 6f0f815a..5e0c45d1 100644 --- a/_projects/2022/sunpy/helioviewer.md +++ b/src/content/pages/gsoc/2022/sunpy/helioviewer.md @@ -2,25 +2,25 @@ name: HelioViewer Python API Wrapper desc: Creating a full Python wrapper for the Unirest Helioviewer API requirements: - - Familiarity with Python - - Some familiarity with Unirest/HTTP requests (ideally) + - Familiarity with Python + - Some familiarity with Unirest/HTTP requests (ideally) difficulty: medium issues: - - https://github.com/sunpy/sunpy/issues/2860 - - https://github.com/sunpy/sunpy/issues/2762 - - https://github.com/sunpy/sunpy/issues/2878 + - https://github.com/sunpy/sunpy/issues/2860 + - https://github.com/sunpy/sunpy/issues/2762 + - https://github.com/sunpy/sunpy/issues/2878 mentors: - - wafels - - nabobalis - - dgarciabriseno + - wafels + - nabobalis + - dgarciabriseno initiatives: - - GSOC + - GSOC project_size: - - 175 h + - 175 h tags: - - python + - python collaborating_projects: - - sunpy + - sunpy --- #### Description @@ -43,17 +43,17 @@ Finally, we will then create a new client that interfaces with the `sunpy` downl ##### Coding starts -* Engaged with the community and understand the motivation and challenges of the project. -* Have set up a development environment. -* Helped to setup the new package. +- Engaged with the community and understand the motivation and challenges of the project. +- Have set up a development environment. +- Helped to setup the new package. ##### 1st evaluation -* Have 45% of the Helioviewer API wrapped. -* Have all code, tests and documentation in GitHub. +- Have 45% of the Helioviewer API wrapped. +- Have all code, tests and documentation in GitHub. ##### Final evaluation -* All of the Helioviewer API is wrapped within the package. -* Fido Client created for Helioviewer. -* Have all code, tests and documentation in GitHub. +- All of the Helioviewer API is wrapped within the package. +- Fido Client created for Helioviewer. +- Have all code, tests and documentation in GitHub. diff --git a/_projects/2022/sunpy/scraper.md b/src/content/pages/gsoc/2022/sunpy/scraper.md similarity index 76% rename from _projects/2022/sunpy/scraper.md rename to src/content/pages/gsoc/2022/sunpy/scraper.md index 26ac4529..0bc30e8c 100644 --- a/_projects/2022/sunpy/scraper.md +++ b/src/content/pages/gsoc/2022/sunpy/scraper.md @@ -2,25 +2,25 @@ name: Scraper rewrite desc: Improve the current scraper to download data requirements: - - Familiarity with Python - - Knowledge of Python regex - - Familiar with web protocols + - Familiarity with Python + - Knowledge of Python regex + - Familiar with web protocols difficulty: medium issues: - - https://github.com/sunpy/sunpy/issues/4888 + - https://github.com/sunpy/sunpy/issues/4888 mentors: - - nabobalis - - samaloney - - hayesla + - nabobalis + - samaloney + - hayesla initiatives: - - GSOC + - GSOC project_size: - - 175 h + - 175 h tags: - - python - - web + - python + - web collaborating_projects: - - sunpy + - sunpy --- This project will provide the ability to parse URL information in a programmatic way. @@ -48,13 +48,13 @@ There are more technical details on the linked issue. ##### Coding starts -* Already have a development environment setup -* Understand the project and the API design. Having asked questions if you do not. +- Already have a development environment setup +- Understand the project and the API design. Having asked questions if you do not. ##### 1st evaluation -* Partial skeleton of scraper written. +- Partial skeleton of scraper written. ##### Final evaluation -* Functional replacement ready for review and merging into sunpy. +- Functional replacement ready for review and merging into sunpy. diff --git a/_projects/2022/sunpy/theme.md b/src/content/pages/gsoc/2022/sunpy/theme.md similarity index 64% rename from _projects/2022/sunpy/theme.md rename to src/content/pages/gsoc/2022/sunpy/theme.md index dd3bb311..01797c6b 100644 --- a/_projects/2022/sunpy/theme.md +++ b/src/content/pages/gsoc/2022/sunpy/theme.md @@ -2,25 +2,25 @@ name: SunPy Website and Theme Rewrite desc: Replace the sphinx base theme with a newer version. requirements: - - Experience with Sphinx and themes ideally. - - Experience with Jinja templates ideally. + - Experience with Sphinx and themes ideally. + - Experience with Jinja templates ideally. difficulty: high issues: - - https://github.com/sunpy/sunpy-sphinx-theme/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc + - https://github.com/sunpy/sunpy-sphinx-theme/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc mentors: - - cadair - - nabobalis + - cadair + - nabobalis initiatives: - - GSOC + - GSOC project_size: - - 175 h - - 350 h + - 175 h + - 350 h tags: - - sunpy - - sphinx - - web + - sunpy + - sphinx + - web collaborating_projects: - - sunpy + - sunpy --- #### Description @@ -31,11 +31,11 @@ This theme is based upon [Sphinx Bootstrap theme](https://github.com/ryan-roemer The main aim is to move our theme to use a new [Pydata's base theme](https://pydata-sphinx-theme.readthedocs.io/en/latest/). This gives us a new layout and more modern bootstrap versions. The issue is that the way we have been using our theme has a few incompatibilities that either need patching to the pydata theme or overridden in our version. - -1. A method to create the header bar to match how we currently do, see sunpy.org for an example. - - We really like our dropdowns -2. A method to anchor the footer bar instead of having it scroll. - - Pydata's will only show it when you scroll to the very bottom. + +1. A method to create the header bar to match how we currently do, see sunpy.org for an example. + - We really like our dropdowns +2. A method to anchor the footer bar instead of having it scroll. + - Pydata's will only show it when you scroll to the very bottom. If there is time left over, we will then work through the remaining issues we have in our theme repository once the groundwork has been finished. @@ -43,14 +43,14 @@ If there is time left over, we will then work through the remaining issues we ha ##### Coding starts -* Already have a development environment setup -* Understand the project and sphinx build system. -* Tried to build and modify the pydata-sphinx-theme with our website/documentation +- Already have a development environment setup +- Understand the project and sphinx build system. +- Tried to build and modify the pydata-sphinx-theme with our website/documentation ##### 1st evaluation -* Have a working header and footer bars. +- Have a working header and footer bars. ##### Final evaluation -* Have finished updating the sphinx theme and finished any extensions to the base project. +- Have finished updating the sphinx theme and finished any extensions to the base project. diff --git a/_projects/2023/gnuastro/python_wrappers.md b/src/content/pages/gsoc/2023/gnuastro/python_wrappers.md similarity index 69% rename from _projects/2023/gnuastro/python_wrappers.md rename to src/content/pages/gsoc/2023/gnuastro/python_wrappers.md index 3fa2a088..c35b9a95 100644 --- a/_projects/2023/gnuastro/python_wrappers.md +++ b/src/content/pages/gsoc/2023/gnuastro/python_wrappers.md @@ -2,31 +2,30 @@ name: Gnuastro library in Python desc: Python wrappers over the Gnuastro C library. requirements: -# Student requirements: - - Low-level Python and Numpy (their C library). + # Student requirements: + - Low-level Python and Numpy (their C library). difficulty: low issues: -# Related issues (if any) to this project. - - https://github.com/Jash-Shah/pyGnuastro + # Related issues (if any) to this project. + - https://github.com/Jash-Shah/pyGnuastro mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - mohammad-akhlaghi + # First person in contact; mentors may change before project starts. + # GitHub handles + - mohammad-akhlaghi initiatives: -# The programme under this project wish to run. - - GSOC + # The programme under this project wish to run. + - GSOC project_size: - - 350 h + - 350 h tags: -# Different technologies needed - - python - - C + # Different technologies needed + - python + - C collaborating_projects: -# suborganisation(s) to which this project belongs. - - Gnuastro + # suborganization(s) to which this project belongs. + - Gnuastro --- - #### Description Gnuastro is primarily written in C because astronomical datasets are large and thus need to be efficient with few dependencies. @@ -36,7 +35,7 @@ On the other hand, many projects today are done in Python, almost excuslively us Python and Numpy are actually written in C, therefore they have very well-defined interfaces for communicating with installed C libraries. For example see [the core C library of Numpy](https://numpy.org/doc/stable/reference/c-api/index.html). -As part of GSoC 2022, Jash Shah completed a first implementation of pyGnuastro, see https://github.com/Jash-Shah/pyGnuastro and https://test.pypi.org/project/pygnuastro. +As part of GSoC 2022, Jash Shah completed a first implementation of pyGnuastro, see and . This was mostly focused on the low-level build system (for example to be integrated nicely with PyPi). With the inclusion of more libraries we discovered that Gnuastro's error reporting also [needs modification](https://savannah.gnu.org/task/?16263) for blending into Python. Jash also progressed nicely on this front in GSoC 2022, but it is not yet finished. @@ -49,22 +48,22 @@ To get started, check [our GSoC 2023 checklist](https://savannah.gnu.org/support #### Milestones (if any) - * Completing [our GSoC 2022 checklist](https://savannah.gnu.org/support/index.php?110827#comment0) +- Completing [our GSoC 2022 checklist](https://savannah.gnu.org/support/index.php?110827#comment0) - * Completing the re-design of Gnuastro's error functionality. +- Completing the re-design of Gnuastro's error functionality. - * Adding wrappers for Gnuastro library functions in pyGnuastro. +- Adding wrappers for Gnuastro library functions in pyGnuastro. ##### Coding starts -* Learning the new error reporting functionality. +- Learning the new error reporting functionality. -* Implementing the error reporting function in some basic functions. +- Implementing the error reporting function in some basic functions. ##### 1st evaluation -* Implementing some of Gnuastro's basic libraries in pyGnuastro (with new error reporting feature). +- Implementing some of Gnuastro's basic libraries in pyGnuastro (with new error reporting feature). ##### Final evaluation -* Implementing all the necessary library functions in pyGnuastro, and adding high-level functionality to pyGnuastro like Gnuastro's programs. +- Implementing all the necessary library functions in pyGnuastro, and adding high-level functionality to pyGnuastro like Gnuastro's programs. diff --git a/src/content/pages/gsoc/2023/index.md b/src/content/pages/gsoc/2023/index.md new file mode 100644 index 00000000..3706f5fa --- /dev/null +++ b/src/content/pages/gsoc/2023/index.md @@ -0,0 +1,5 @@ +--- +title: "Ideas page for Google Summer of Code 2023" +show_main: false +season: 2023 +--- diff --git a/_projects/2023/radis/common_api.md b/src/content/pages/gsoc/2023/radis/common_api.md similarity index 63% rename from _projects/2023/radis/common_api.md rename to src/content/pages/gsoc/2023/radis/common_api.md index e393b9fc..daac5200 100644 --- a/_projects/2023/radis/common_api.md +++ b/src/content/pages/gsoc/2023/radis/common_api.md @@ -2,83 +2,77 @@ name: Common API for large molecular databases desc: The project aims at improving a common API currently used by RADIS and Exojax to retrieve large spectroscopy databases, by adding new databases, making it more user-friendly, and eventually stand-alone. - # add a short one line description of your project requirements: -# Student requirements: - - Knowledge of Pandas or other DataFrame libraries + # Student requirements: + - Knowledge of Pandas or other DataFrame libraries difficulty: medium issues: -- https://github.com/HajimeKawahara/exojax/discussions/257 -- https://github.com/radis/radis/issues/474 + - https://github.com/HajimeKawahara/exojax/discussions/257 + - https://github.com/radis/radis/issues/474 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - minouHub - - HajimeKawahara - - erwanp + # First person in contact; mentors may change before project starts. + # GitHub handles + - minouHub + - HajimeKawahara + - erwanp initiatives: - - GSOC + - GSOC project_size: - - 350 h + - 350 h tags: -# Different technologies needed - - Python - - Vaex - - Pandas - - Git + # Different technologies needed + - Python + - Vaex + - Pandas + - Git collaborating_projects: -# suborganisation(s) to which this project belongs. - - radis + # suborganization(s) to which this project belongs. + - radis --- - #### Description - The RADIS code was developed for the characterization of plasmas, flames and atmospheres. High-temperature spectral calculations require to resolve the shape of tens of millions of lines, which is the usual performance bottleneck. RADIS implements a new algorithm to compute these lineshapes, and is already one of the fastest line-by-line spectral codes available. It can also compute many different types of spectra (absorption / emission / equilibrium / nonequilibrium). In a typical calculation, a database of coefficients is loaded and these coefficients are multiplied according to physics laws to generate a set of linestrength in a spectrum. RADIS can handle different databases such as HITRAN, HITEMP, EXOMOL, GEISA, etc. Another open-source code, called EXOJAX, exchanged portions of code with RADIS until some parts of both codes became very similar. Currently, a database API is written in the RADIS code. The main goal of the current project is to improve this common API to download and manage databases. The mentee will not start from scratch because the community already worked on the problem and set up a frame for this big merge of code built around a [DatabaseManager](https://github.com/radis/radis/blob/develop/radis/api/dbmanager.py#L51) class. - #### Milestones ##### Coding starts -* Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) +- Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) -* Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) +- Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) -* Get familiar with RADIS architecture, the [DatabaseManager](https://github.com/radis/radis/blob/develop/radis/api/dbmanager.py#L51) class, and what was already implemented. +- Get familiar with RADIS architecture, the [DatabaseManager](https://github.com/radis/radis/blob/develop/radis/api/dbmanager.py#L51) class, and what was already implemented. ##### 1st Evaluation -* Add new molecular databases: Kurucz, TheoReTS +- Add new molecular databases: Kurucz, TheoReTS -* Add documentation - -* Gather feedbacks from current users of ExoJax and RADIS +- Add documentation +- Gather feedbacks from current users of ExoJax and RADIS ##### 2nd Evaluation -* Add atomic database: NIST +- Add atomic database: NIST -* Based on the user feebacks and the hands-on experience acquired in the 1st round, refactor the Common API as required to make it more user-friendly. It might require major architectural changes. +- Based on the user feebacks and the hands-on experience acquired in the 1st round, refactor the Common API as required to make it more user-friendly. It might require major architectural changes. -* Set up documentation of a stand-alone version of the Database API +- Set up documentation of a stand-alone version of the Database API ##### Final evaluation -* Add collisional-induced-absorption (CIA) databases which are a different type of databases than line databases - -* If ready and, make the Common API stand-alone. +- Add collisional-induced-absorption (CIA) databases which are a different type of databases than line databases -* Have all code, tests, and documentation in GitHub. +- If ready and, make the Common API stand-alone. +- Have all code, tests, and documentation in GitHub. #### Secondary Goals -* Document architecture and developer guide when facing unclear points that may appear. +- Document architecture and developer guide when facing unclear points that may appear. -* Review pull requests from other RADIS contributors, especially parallel GSoC mentee \ No newline at end of file +- Review pull requests from other RADIS contributors, especially parallel GSoC mentee diff --git a/_projects/2023/radis/optimizing_radis_app.md b/src/content/pages/gsoc/2023/radis/optimizing_radis_app.md similarity index 72% rename from _projects/2023/radis/optimizing_radis_app.md rename to src/content/pages/gsoc/2023/radis/optimizing_radis_app.md index 7be853b2..946e318e 100644 --- a/_projects/2023/radis/optimizing_radis_app.md +++ b/src/content/pages/gsoc/2023/radis/optimizing_radis_app.md @@ -4,51 +4,50 @@ desc: Our project is all about enhancing user experience to the next level! We'r # add a short one line description of your project requirements: -# Student requirements - - TypeScript - - React - - FastApi - - Testing (pytest && vitest) + # Student requirements + - TypeScript + - React + - FastApi + - Testing (pytest && vitest) difficulty: medium issues: - - - - - - + - https://github.com/suzil/radis-app/issues/669 + - https://github.com/suzil/radis-app/issues/85 + - https://github.com/suzil/radis-app/issues/674 mentors: -# First person in contact; mentors may change before project starts -# GitHub handles - - erwanp - - arunavabasu-03 + # First person in contact; mentors may change before project starts + # GitHub handles + - erwanp + - arunavabasu-03 initiatives: - - GSOC + - GSOC project_size: - - 350 h - + - 350 h + tags: -# Different technologies needed - - Python - - TypeScript - - JavaScript - - React - - Fastapi - - Pandas - - Git + # Different technologies needed + - Python + - TypeScript + - JavaScript + - React + - Fastapi + - Pandas + - Git collaborating_projects: -# suborganisation(s) to which this project belongs - - radis - + # suborganization(s) to which this project belongs + - radis --- #### Description RADIS app is a web application for Radis high-resolution infrared molecular spectra. Instead of writing code, this project aims to create an intuitive user interface (UI).It use radis internally to produce spectrum, and the updated version and radis algorithm make it incredibly efficient to compute the millions of lines in only a few minutes.Radis app leverages React 18 to offer the user interface, and FastApi on the backend. We are using react-hook-form for the fastest user experience and to maintain performance on the client slide. In the backend, we use FastApi to offer the fastest response.We created this app with the intention of giving both researchers and non-researchers access to the most valuable elements of Radis via a straightforward online application. Our team and contributors are always trying to make the app better. The app has additional features and capabilities in newer versions. -Our project is all about enhancing user experience to the next level! We're committed to bringing you cutting-edge features and fine-tuning these features for maximum performance and efficiency, and rigorous testing to ensure they meet the needs of our highly valued end users. +Our project is all about enhancing user experience to the next level! We're committed to bringing you cutting-edge features and fine-tuning these features for maximum performance and efficiency, and rigorous testing to ensure they meet the needs of our highly valued end users. #### Milestones @@ -58,11 +57,11 @@ Our project is all about enhancing user experience to the next level! We're comm - Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS App](https://github.com/suzil/radis-app) -- Get familiar with RADIS App's Frontend (how radis app interface works and simulates spectrum )and Backend System (how the app integrated with radis to produce spectrum) +- Get familiar with RADIS App's Frontend (how radis app interface works and simulates spectrum )and Backend System (how the app integrated with radis to produce spectrum) ##### 1st Evaluation -- Implement exomol database in radis app api +- Implement exomol database in radis app api - Fitting feature (user imports its experimental spectrum) @@ -78,7 +77,7 @@ Our project is all about enhancing user experience to the next level! We're comm - Improving code coverage and test all the basic features using vitetest && migrating old test too. -- Fix the feedback loop for user side(user can submit feedbacks in app !) +- Fix the feedback loop for user side(user can submit feedbacks in app !) - Have all code, tests, and documentation in GitHub. diff --git a/src/content/pages/gsoc/2023/radis/out_of_core_calculations.md b/src/content/pages/gsoc/2023/radis/out_of_core_calculations.md new file mode 100644 index 00000000..339b7907 --- /dev/null +++ b/src/content/pages/gsoc/2023/radis/out_of_core_calculations.md @@ -0,0 +1,76 @@ +--- +name: Out-of-core calculations to reduce memory usage +desc: The project aims at reducing RADIS memory usage, and make it possible to compute very-large spectral databases of tens of gigabytes that do not fit in RAM memory. + +# add a short one line description of your project +requirements: + # Student requirements: + - Knowledge of Pandas or other DataFrame libraries + - Prior working knowledge with big data handling databases like Vaex +difficulty: medium +issues: + +mentors: + # First person in contact; mentors may change before project starts. + # GitHub handles + - minouHub + - anandxkumar + - erwanp +initiatives: + - GSOC +project_size: + - 350 h +tags: + # Different technologies needed + - Python + - Vaex + - Pandas + - Git +collaborating_projects: + # suborganization(s) to which this project belongs. + - radis +--- + +#### Description + +The RADIS code was developed for the characterization of plasmas, flames and atmospheres. High-temperature spectral calculations require to resolve the shape of tens of millions of lines, which is the usual performance bottleneck. RADIS implements a new algorithm to compute these lineshapes, and is already one of the fastest line-by-line spectral codes available. It can also compute many different types of spectra (absorption / emission / equilibrium / nonequilibrium). + +However, although the algorithm is very CPU/GPU efficient, the RADIS code is still memory-hungry. Databases are currently loaded in RADIS using the VAEX package, but the operations to calculate the spectra are performed using the PANDAS library. VAEX is a similar table management tool than PANDAS but uses memory mapping, a zero memory copy policy, and lazy computations for the best performance. **The main goal of the current project is to refactor RADIS so that dataframes are only manipulated via the VAEX format**. Potentially, this work would make it possible to compute spectral databases of up to billions of lines (hundred of GB or terabyte-scale databases). + +#### Milestones + +##### Coding starts + +- Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) + +- Training on emission & absorption spectroscopy + +- Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) + +- Get familiar with RADIS architecture + +##### 1st Evaluation + +- Create a standalone spectroscopy code working with Out-of-core Vaex calculations (with minimum features: absorption code under equilibrium) + +##### 2nd Evaluation + +- Create a standalone spectroscopy code working with Out-of-core Vaex calculations (with minimum features: absorption code under equilibrium) + +- Implement VAEX out-of-core calculations directly in a single RADIS calculation path (e.g. equilibrium, one lineshape calculation routine), replacing PANDAS + +- Implement tests to verify that the implementation of VAEX will not have different output than the current PANDAS implementation + +##### Final evaluation + +- Implement VAEX out-of-core calculations directly in all othe other RADIS calculation paths (nonequilibrium, all lineshape calculations routine), replacing PANDAS + +- Have all code, tests, and documentation in GitHub. + +#### Secondary Goals + +- Document architecture and developer guide when facing unclear points that may appear. + +- Review pull requests from other RADIS contributors, especially parallel GSoC mentee + +- List and explore consequences for GPU calculations already implemented in RADIS diff --git a/_projects/2023/stingray/gaussianprocesses.md b/src/content/pages/gsoc/2023/stingray/gaussianprocesses.md similarity index 56% rename from _projects/2023/stingray/gaussianprocesses.md rename to src/content/pages/gsoc/2023/stingray/gaussianprocesses.md index 452e06db..1341fbda 100644 --- a/_projects/2023/stingray/gaussianprocesses.md +++ b/src/content/pages/gsoc/2023/stingray/gaussianprocesses.md @@ -3,71 +3,70 @@ name: Searching for Quasi-Periodic Oscillations with Gaussian Processes desc: This project implements a new submodule into the time series analysis package stingray to help us search astronomical data for periodic variations in brightness using Gaussian Process regression. # add a short one line description of your project requirements: -# Student requirements: -- experience with Python and the scientific stack -- experience with Gaussian Processes and/or JAX welcome + # Student requirements: + - experience with Python and the scientific stack + - experience with Gaussian Processes and/or JAX welcome difficulty: high issues: -# Related issues (if any) to this project. -- https://github.com/StingraySoftware/stingray/issues/660 + # Related issues (if any) to this project. + - https://github.com/StingraySoftware/stingray/issues/660 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - dhuppenkothen + # First person in contact; mentors may change before project starts. + # GitHub handles + - dhuppenkothen initiatives: -# The programme under this project wish to run. - - GSOC + # The programme under this project wish to run. + - GSOC project_size: - - 350 h + - 350 h tags: -# Different technologies needed - - python - - time series - - stingray - - Gaussian Processes + # Different technologies needed + - python + - time series + - stingray + - Gaussian Processes collaborating_projects: -# suborganisation(s) to which this project belongs. -- stingray + # suborganization(s) to which this project belongs. + - stingray --- #### Description -Stingray provides methods for analysing astronomical time series, -in particular data from space telescopes observing some of the most -extreme sources in the universe: violent stellar explosions, matter -falling into black holes, and rapidly spinning neutron stars. Among -all the variations of brightness we can study in these sources, -periodic and quasi-periodic oscillations are among the most interesting, -because they can often be directly tied to astrophysical processes in -the object. Finding them in practice can be difficult, and the methods -currently implemented in stingray have serious limitations that are -often not met by the data we observe. Recently, Huebner et al -(2022, arXiv:2205.12716) proposed a new method for searching for -quasi-periodic oscillations, including an associated software tool -(https://github.com/MoritzThomasHuebner/QPOEstimation). While it -works, it is somewhat unwieldy, not well documented, and not well -integrated with existing functionality in stingray. In this project, -we will simplify the existing code, port it to the tinygp library, -integrate it with stingray in a new submodule, and release it together +Stingray provides methods for analysing astronomical time series, +in particular data from space telescopes observing some of the most +extreme sources in the universe: violent stellar explosions, matter +falling into black holes, and rapidly spinning neutron stars. Among +all the variations of brightness we can study in these sources, +periodic and quasi-periodic oscillations are among the most interesting, +because they can often be directly tied to astrophysical processes in +the object. Finding them in practice can be difficult, and the methods +currently implemented in stingray have serious limitations that are +often not met by the data we observe. Recently, Huebner et al +(2022, arXiv:2205.12716) proposed a new method for searching for +quasi-periodic oscillations, including an associated software tool +(). While it +works, it is somewhat unwieldy, not well documented, and not well +integrated with existing functionality in stingray. In this project, +we will simplify the existing code, port it to the tinygp library, +integrate it with stingray in a new submodule, and release it together with a tutorial. - #### Milestones (if any) #### Community Bonding Period -* Familiarize with the QPOEstimation code from Huebner et al (2022) and stingray -* Formulate design plan for the stingray submodule -* Set up development environment + +- Familiarize with the QPOEstimation code from Huebner et al (2022) and stingray +- Formulate design plan for the stingray submodule +- Set up development environment ##### Coding starts -* Start implementation of QPOEstimation using tinygp as a stingray submodule +- Start implementation of QPOEstimation using tinygp as a stingray submodule ##### 1st evaluation -* Basic functionality implemented, docstrings and tests exist +- Basic functionality implemented, docstrings and tests exist ##### Final evaluation -* QPO search tool is fully functional, including a case study and a tutorial - +- QPO search tool is fully functional, including a case study and a tutorial diff --git a/_projects/2023/stingray/lombscargle.md b/src/content/pages/gsoc/2023/stingray/lombscargle.md similarity index 58% rename from _projects/2023/stingray/lombscargle.md rename to src/content/pages/gsoc/2023/stingray/lombscargle.md index ad38c2e2..3ff53a39 100644 --- a/_projects/2023/stingray/lombscargle.md +++ b/src/content/pages/gsoc/2023/stingray/lombscargle.md @@ -1,30 +1,30 @@ --- name: Astronomy with Unevenly Sampled Data -desc: Implementing time series analysis methods for unevenly sampled data for X-ray astronomy data +desc: Implementing time series analysis methods for unevenly sampled data for X-ray astronomy data requirements: - - Python - - Experience with time series methods and/or Fourier analysis welcome + - Python + - Experience with time series methods and/or Fourier analysis welcome difficulty: medium issues: -# Related issues (if any) to this project. -- https://github.com/StingraySoftware/stingray/issues/689 + # Related issues (if any) to this project. + - https://github.com/StingraySoftware/stingray/issues/689 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - dhuppenkothen + # First person in contact; mentors may change before project starts. + # GitHub handles + - dhuppenkothen initiatives: -# The programme under this project wish to run. - - GSOC + # The programme under this project wish to run. + - GSOC project_size: - - 175 h + - 175 h tags: -# Different technologies needed - - python - - + # Different technologies needed + - python + - collaborating_projects: -# suborganisation(s) to which this project belongs. - - stingray + # suborganization(s) to which this project belongs. + - stingray --- #### Description @@ -34,18 +34,20 @@ Stingray provides methods for analysing astronomical time series, in particular #### Milestones (if any) ##### Community Bonding + Community Bonding -* Scope out which spectral timing methods can be adapted to uneven sampling, and which functionality to adapt from astropy -* Set up development environment and become familiar with stingray core functionality + +- Scope out which spectral timing methods can be adapted to uneven sampling, and which functionality to adapt from astropy +- Set up development environment and become familiar with stingray core functionality ##### Coding starts -* Start working on implementation of Lomb-Scargle periodogram as a stingray class +- Start working on implementation of Lomb-Scargle periodogram as a stingray class ##### 1st evaluation -* Lomb-Scargle periodogram class implemented +- Lomb-Scargle periodogram class implemented ##### Final evaluation -* Implementation of unevenly sampled time lags, and potential other functionality +- Implementation of unevenly sampled time lags, and potential other functionality diff --git a/_projects/2023/sunpy/hek.md b/src/content/pages/gsoc/2023/sunpy/hek.md similarity index 76% rename from _projects/2023/sunpy/hek.md rename to src/content/pages/gsoc/2023/sunpy/hek.md index 516ed031..b841232c 100644 --- a/_projects/2023/sunpy/hek.md +++ b/src/content/pages/gsoc/2023/sunpy/hek.md @@ -2,28 +2,28 @@ name: Improved solar feature and event representation desc: Improve the current representation of solar features and events requirements: - - Familiarity with Python + - Familiarity with Python difficulty: medium to high issues: - - https://github.com/sunpy/sunpy/issues?q=is%3Aissue+is%3Aopen+HEK + - https://github.com/sunpy/sunpy/issues?q=is%3Aissue+is%3Aopen+HEK mentors: - - wafels - - nabobalis + - wafels + - nabobalis initiatives: - - GSOC + - GSOC project_size: - - 175 h - - 350 h + - 175 h + - 350 h tags: - - python + - python collaborating_projects: - - sunpy + - sunpy --- #### Description `sunpy` provides access to solar feature and event data held by the [Heliophysics Event Knowledgebase](https://www.lmsal.com/hek/). -Descriptions of the properties of each feature and event are given [here](https://www.lmsal.com/hek/VOEvent_Spec.html). +Descriptions of the properties of each feature and event are given in the [HEK VOEvent specification](https://www.lmsal.com/hek/VOEvent_Spec.html). Feature and event properties include their type, physical extent, location, lifetime, and other feature/event properties that are specific to a given feature/event. For example, the time at which the energy flux of a solar flare is at a maximum is relevant for flares, but is not relevant to the description of a coronal hole. @@ -45,18 +45,18 @@ More information is found on the linked issues. ##### Community Bonding Period -* Understand the project and the API design. -* Setup a development environment. +- Understand the project and the API design. +- Setup a development environment. ##### Coding starts -* Experimenting with the current representation of HEK feature and event data. -* Consider parsing the html page for the specification. +- Experimenting with the current representation of HEK feature and event data. +- Consider parsing the html page for the specification. ##### 1st evaluation -* Partial skeleton of the new HEK feature/event object written. +- Partial skeleton of the new HEK feature/event object written. ##### Final evaluation -* Functional replacement ready for review and merging into `sunpy`. +- Functional replacement ready for review and merging into `sunpy`. diff --git a/_projects/2023/sunpy/scraper.md b/src/content/pages/gsoc/2023/sunpy/scraper.md similarity index 73% rename from _projects/2023/sunpy/scraper.md rename to src/content/pages/gsoc/2023/sunpy/scraper.md index d95616f8..1a18dfd9 100644 --- a/_projects/2023/sunpy/scraper.md +++ b/src/content/pages/gsoc/2023/sunpy/scraper.md @@ -2,26 +2,26 @@ name: Scraper rewrite desc: Improve the current scraper to download data requirements: - - Familiarity with Python - - Knowledge of Python regex - - Familiar with web protocols + - Familiarity with Python + - Knowledge of Python regex + - Familiar with web protocols difficulty: high issues: - - https://github.com/sunpy/sunpy/issues/4888 + - https://github.com/sunpy/sunpy/issues/4888 mentors: - - nabobalis - - samaloney - - hayesla + - nabobalis + - samaloney + - hayesla initiatives: - - GSOC + - GSOC project_size: - - 175 h - - 350 h + - 175 h + - 350 h tags: - - python - - web + - python + - web collaborating_projects: - - sunpy + - sunpy --- #### Description @@ -47,17 +47,17 @@ More information is found on the linked issue. ##### Community Bonding Period -* Understand the project and the API design. -* Setup a development environment. +- Understand the project and the API design. +- Setup a development environment. ##### Coding starts -* Experimenting with the current Scrapper and reviewing the current Class. +- Experimenting with the current Scrapper and reviewing the current Class. ##### 1st evaluation -* Partial skeleton of scraper written. +- Partial skeleton of scraper written. ##### Final evaluation -* Functional replacement ready for review and merging into `sunpy`. +- Functional replacement ready for review and merging into `sunpy`. diff --git a/_projects/2023/sunpy/sunkit_image.md b/src/content/pages/gsoc/2023/sunpy/sunkit_image.md similarity index 77% rename from _projects/2023/sunpy/sunkit_image.md rename to src/content/pages/gsoc/2023/sunpy/sunkit_image.md index 27731735..cbc26490 100644 --- a/_projects/2023/sunpy/sunkit_image.md +++ b/src/content/pages/gsoc/2023/sunpy/sunkit_image.md @@ -2,25 +2,25 @@ name: sunkit-image and integration with sunpy desc: Improve the integration of sunkit-image to work with SunPy data structures requirements: - - Experience with Python. - - Experience with sunpy Map. - - Experience with NDcube. + - Experience with Python. + - Experience with sunpy Map. + - Experience with NDcube. difficulty: medium to low issues: - - https://github.com/sunpy/sunpy-sphinx-theme/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc + - https://github.com/sunpy/sunpy-sphinx-theme/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc mentors: - - nabobalis - - wtbarnes + - nabobalis + - wtbarnes initiatives: - - GSOC + - GSOC project_size: - - 175 h + - 175 h tags: - - sunpy - - Python - - refactoring + - sunpy + - Python + - refactoring collaborating_projects: - - sunpy + - sunpy --- #### Description @@ -47,16 +47,17 @@ If there is some time left over: ##### Community Bonding Period -* Scope out what functions need changing and get familiar with the library. -* Setup a development environment. +- Scope out what functions need changing and get familiar with the library. +- Setup a development environment. + ##### Coding starts -* Start working on the first function. +- Start working on the first function. ##### 1st evaluation -* Have around ~50% of the functions taken care of. +- Have around ~50% of the functions taken care of. ##### Final evaluation -* Finish updating each function in sunkit-image. +- Finish updating each function in sunkit-image. diff --git a/_projects/2024/gnuastro/opencl_integration.md b/src/content/pages/gsoc/2024/gnuastro/opencl_integration.md similarity index 64% rename from _projects/2024/gnuastro/opencl_integration.md rename to src/content/pages/gsoc/2024/gnuastro/opencl_integration.md index 9a37a278..ac4c26d0 100644 --- a/_projects/2024/gnuastro/opencl_integration.md +++ b/src/content/pages/gsoc/2024/gnuastro/opencl_integration.md @@ -2,33 +2,32 @@ name: OpenCL integration with Gnuastro desc: GPU support inside Gnuastro C library. requirements: -# Student requirements: - - C - - GNU Autotools (build system) + # Student requirements: + - C + - GNU Autotools (build system) difficulty: medium issues: -# Related issues (if any) to this project. - - https://labeeb-7z.github.io/Blogs/2023/08/12/Integrating-OpenCL.html + # Related issues (if any) to this project. + - https://labeeb-7z.github.io/Blogs/2023/08/12/Integrating-OpenCL.html mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - labeeb-7z - - mohammad-akhlaghi + # First person in contact; mentors may change before project starts. + # GitHub handles + - labeeb-7z + - mohammad-akhlaghi initiatives: -# The programme under this project wish to run. - - GSOC + # The programme under this project wish to run. + - GSOC project_size: - - 350 h + - 350 h tags: -# Different technologies needed - - C - - OpenCL + # Different technologies needed + - C + - OpenCL collaborating_projects: -# suborganisation(s) to which this project belongs. - - Gnuastro + # suborganization(s) to which this project belongs. + - Gnuastro --- - #### Description GNU Astronomy Utilities (Gnuastro) is an astronomical data processing package containing a dynamically linked library as well as command-line programs for high-level access. Astronomical data can be large and most operations highly parallelizable. Until now, only CPU parallelization has been implemented in Gnuastro, but not yet on GPUs. GPUs are special hardware which are specifically designed for such operations and can significantly reduce the overall execution time significantly for specific tasks. @@ -36,35 +35,34 @@ GNU Astronomy Utilities (Gnuastro) is an astronomical data processing package co In GSoC 2023, the idea of allowing Gnuastro to leverage GPUs for several parallel subroutines kicked off by integrating the Gnuastro C library with CUDA. However CUDA is a high-level interface, is not free software, and is limited to NVIDIA devices. Therefore it was decided to use the low-level and free standard OpenCL (Open Computing Language). OpenCL is an open, cross-platform framework for programming diverse accelerators at a very low level. Integration with OpenCL will allow users of Gnuastro to run parallel subroutines on specialised hardware (like GPU) regardless of its manufacturer. At the conclusion of GSoC 2023, a first draft of OpenCL was integrated in Gnuastro. For more see the [report of GSoC 2023](https://labeeb-7z.github.io/Blogs/2023/08/22/Final-Report.html) -The goal for this summer is to solidify a mature and generic interface to that implementation, such that a Gnuastro user that has a GPU device can use that while a user without a GPU can do exactly the same operation on a CPU. This will be tested by gradually implementing the interface to parallelizable operations (that are currently only using the CPU). Finally, we need to perform extensive testing of the OpenCL-accelerated subroutines on various hardware configurations to ensure robustness and compatibility. +The goal for this summer is to solidify a mature and generic interface to that implementation, such that a Gnuastro user that has a GPU device can use that while a user without a GPU can do exactly the same operation on a CPU. This will be tested by gradually implementing the interface to parallelizable operations (that are currently only using the CPU). Finally, we need to perform extensive testing of the OpenCL-accelerated subroutines on various hardware configurations to ensure robustness and compatibility. To get started, check our [GSoC 2024 checklist](https://savannah.gnu.org/support/index.php?110827#comment0). - #### Milestones (if any) - * Setting up the low-level wrapper infrastructure for calling OpenCL kernels from Gnuastro for parallel subroutines (with minimal requirements on the developer to know OpenCL; allowing them to focus on the algorithm and even test without having a GPU, not the OpenCL details). +- Setting up the low-level wrapper infrastructure for calling OpenCL kernels from Gnuastro for parallel subroutines (with minimal requirements on the developer to know OpenCL; allowing them to focus on the algorithm and even test without having a GPU, not the OpenCL details). - * Migrating the existing pthreads-based (CPU) wrappers in Gnuastro to the new wrappers. +- Migrating the existing pthreads-based (CPU) wrappers in Gnuastro to the new wrappers. - * Allowing users to choose GPU execution from the Command line interface and user documentation. +- Allowing users to choose GPU execution from the Command line interface and user documentation. ##### Coding starts -* Reviewing the work in GSoC 2023 and understand the work that was done before to understand all its details. +- Reviewing the work in GSoC 2023 and understand the work that was done before to understand all its details. -* Learning OpenCL's API and C interface +- Learning OpenCL's API and C interface -* Testing and debugging the work in various scenarios. +- Testing and debugging the work in various scenarios. ##### 1st evaluation -* A robust and smooth low level integration of OpenCL with Gnuastro which allows developers to write high level kernels easily compatible and usable inside Gnuastro. +- A robust and smooth low level integration of OpenCL with Gnuastro which allows developers to write high level kernels easily compatible and usable inside Gnuastro. -* Have at least a few OpenCL optimised subroutines merged into the main branch of Gnuastro. +- Have at least a few OpenCL optimised subroutines merged into the main branch of Gnuastro. ##### Final evaluation -* Completing all the required OpenCL kernels alongside their testing, merged with the main branch of Gnuastro. +- Completing all the required OpenCL kernels alongside their testing, merged with the main branch of Gnuastro. -* User documentation and Command line wrappers for using the newly available GPU functionality. +- User documentation and Command line wrappers for using the newly available GPU functionality. diff --git a/src/content/pages/gsoc/2024/index.md b/src/content/pages/gsoc/2024/index.md new file mode 100644 index 00000000..79a546a9 --- /dev/null +++ b/src/content/pages/gsoc/2024/index.md @@ -0,0 +1,5 @@ +--- +title: "Ideas page for Google Summer of Code 2024" +show_main: false +season: 2024 +--- diff --git a/_projects/2024/irsa-fornax/astrodata_DL.md b/src/content/pages/gsoc/2024/irsa-fornax/astrodata_DL.md similarity index 70% rename from _projects/2024/irsa-fornax/astrodata_DL.md rename to src/content/pages/gsoc/2024/irsa-fornax/astrodata_DL.md index c91052d8..33a53592 100644 --- a/_projects/2024/irsa-fornax/astrodata_DL.md +++ b/src/content/pages/gsoc/2024/irsa-fornax/astrodata_DL.md @@ -2,25 +2,25 @@ name: Astronomical data enhancement with DL desc: Improve usability of incomplete archival datasets requirements: - - Experience with data processing, AI, and machine learning - - Experience with Python - - Experience with AI/ML libraries such as TensorFlor and PyTorch + - Experience with data processing, AI, and machine learning + - Experience with Python + - Experience with AI/ML libraries such as TensorFlor and PyTorch difficulty: very high issues: - - https://github.com/nasa-fornax/fornax-demo-notebooks/issues/243 + - https://github.com/nasa-fornax/fornax-demo-notebooks/issues/243 mentors: - - xoubish - - jkrick + - xoubish + - jkrick initiatives: - - GSOC + - GSOC project_size: - - 350 h / large + - 350 h / large tags: - - irsa - - fornax - - Python + - irsa + - fornax + - Python collaborating_projects: - - irsa-fornax + - irsa-fornax --- # Description @@ -41,36 +41,32 @@ contribute meaningfully to scientific advancements. A crucial part of our method involves the development and testing of a data unification schema on large samples of Active Galactic Nuclei (AGNs), serving as a robust testbed for our algorithms. - This effort will not only validate the algorithms' ability to address complex data challenges but also highlight their applicability across astronomical research. - ## Goals -* Design and optimize a deep learning architecture tailored for the enhancement and unification of astronomical archival data. -* Conduct comprehensive testing of the data unification schema on large samples of AGNs - +- Design and optimize a deep learning architecture tailored for the enhancement and unification of astronomical archival data. +- Conduct comprehensive testing of the data unification schema on large samples of AGNs ## Project requirements -* Strong foundation in computer science, with a specialization in data processing, AI, and machine learning (ML) -* Proficiency in programming, particularly Python, and familiarity with AI/ML libraries and frameworks such as TensorFlow and PyTorch -* Expertise in data analysis, capable of assessing the impact of different augmentation techniques on the informational content and practical utility of datasets. -* Collaborative spirit, prepared to work within the NASA science platform group and engage with astronomers, ensuring that the project's technical solutions are aligned with scientific objectives and effectively contribute to the field. - +- Strong foundation in computer science, with a specialization in data processing, AI, and machine learning (ML) +- Proficiency in programming, particularly Python, and familiarity with AI/ML libraries and frameworks such as TensorFlow and PyTorch +- Expertise in data analysis, capable of assessing the impact of different augmentation techniques on the informational content and practical utility of datasets. +- Collaborative spirit, prepared to work within the NASA science platform group and engage with astronomers, ensuring that the project's technical solutions are aligned with scientific objectives and effectively contribute to the field. ### Community Bonding Period -* Familiarize yourself with the current code and the challenges. -* Setup a development environment. +- Familiarize yourself with the current code and the challenges. +- Setup a development environment. ### Coding starts #### 1st evaluation -* Have developed an initial DL architecture for gap filling in archival AGN data. +- Have developed an initial DL architecture for gap filling in archival AGN data. #### Final evaluation -* Have optimized the DL architecture for data unification from multiple archives, with quantified improvement metrics. +- Have optimized the DL architecture for data unification from multiple archives, with quantified improvement metrics. diff --git a/_projects/2024/irsa-fornax/light_curve_dask.md b/src/content/pages/gsoc/2024/irsa-fornax/light_curve_dask.md similarity index 80% rename from _projects/2024/irsa-fornax/light_curve_dask.md rename to src/content/pages/gsoc/2024/irsa-fornax/light_curve_dask.md index 25a916d1..4e99cc1c 100644 --- a/_projects/2024/irsa-fornax/light_curve_dask.md +++ b/src/content/pages/gsoc/2024/irsa-fornax/light_curve_dask.md @@ -2,25 +2,25 @@ name: Enable Dask execution of NASA time-domain analysis desc: Improve scalability of time-domain analysis requirements: - - Experience with Python - - Experience with Dask - - Background with astronomy is desired but not required. + - Experience with Python + - Experience with Dask + - Background with astronomy is desired but not required. difficulty: high issues: - - https://github.com/nasa-fornax/fornax-demo-notebooks/issues/240 + - https://github.com/nasa-fornax/fornax-demo-notebooks/issues/240 mentors: - - jkrick - - troyraen + - jkrick + - troyraen initiatives: - - GSOC + - GSOC project_size: - - 350 h / large + - 350 h / large tags: - - irsa - - fornax - - python + - irsa + - fornax + - python collaborating_projects: - - irsa-fornax + - irsa-fornax --- # Description @@ -31,7 +31,6 @@ development of that console by trying out novel, big-data science projects and t for use by the astrophysical community. We seek a contributor who can enable our code to be executed efficiently at scale on a Dask cluster provided by the science console. - This project will focus on a science use case that is based on the idea of collecting data from all of NASA's archival time domain datasets for a user-defined set of targets. This produces "light curves" -- roughly, brightness as a function of time -- in multiple wavelengths for each target. The science that can result from @@ -50,16 +49,16 @@ different challenges to running at scale on a Dask cluster. ### Community Bonding Period -* Familiarize yourself with the current code and the challenges to running at scale. -* Setup a development environment. +- Familiarize yourself with the current code and the challenges to running at scale. +- Setup a development environment. ### Coding starts #### 1st evaluation -* Have written new code that executes the light curve collection code on a Dask cluster. +- Have written new code that executes the light curve collection code on a Dask cluster. #### Final evaluation -* Have implemented a solution that runs smoothly on a Dask cluster and finishes in less time than the current -code takes. +- Have implemented a solution that runs smoothly on a Dask cluster and finishes in less time than the current + code takes. diff --git a/_projects/2024/radis/Kurucz_and_commonAPI.md b/src/content/pages/gsoc/2024/radis/Kurucz_and_commonAPI.md similarity index 66% rename from _projects/2024/radis/Kurucz_and_commonAPI.md rename to src/content/pages/gsoc/2024/radis/Kurucz_and_commonAPI.md index 0c0b54cb..dec7582c 100644 --- a/_projects/2024/radis/Kurucz_and_commonAPI.md +++ b/src/content/pages/gsoc/2024/radis/Kurucz_and_commonAPI.md @@ -2,81 +2,76 @@ name: Common API for large molecular databases desc: The project aims at improving a adding new databases, Kurucz atomic database, and eventually develop a common API currently used by RADIS and Exojax to retrieve large spectroscopy databases. - # add a short one line description of your project requirements: -# Student requirements: - - Knowledge of Pandas or other DataFrame libraries + # Student requirements: + - Knowledge of Pandas or other DataFrame libraries difficulty: medium issues: -- https://github.com/HajimeKawahara/exojax/discussions/257 -- https://github.com/radis/radis/issues/474 + - https://github.com/HajimeKawahara/exojax/discussions/257 + - https://github.com/radis/radis/issues/474 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - minouHub - - erwanp + # First person in contact; mentors may change before project starts. + # GitHub handles + - minouHub + - erwanp initiatives: - - GSOC + - GSOC project_size: - - 350 h + - 350 h tags: -# Different technologies needed - - Python - - Vaex - - Pandas - - Git + # Different technologies needed + - Python + - Vaex + - Pandas + - Git collaborating_projects: -# suborganisation(s) to which this project belongs. - - radis + # suborganization(s) to which this project belongs. + - radis --- - #### Description - The RADIS code was developed for the characterization of plasmas, flames and atmospheres. High-temperature spectral calculations require to resolve the shape of tens of millions of lines, which is the usual performance bottleneck. RADIS implements a new algorithm to compute these lineshapes, and is already one of the fastest line-by-line spectral codes available. It can also compute many different types of spectra (absorption / emission / equilibrium / nonequilibrium). In a typical calculation, a database of coefficients is loaded and these coefficients are multiplied according to physics laws to generate a set of linestrength in a spectrum. RADIS can handle different databases such as HITRAN, HITEMP, EXOMOL, GEISA, etc. Another open-source code, called EXOJAX, exchanged portions of code with RADIS until some parts of both codes became very similar. Currently, a database API is written in the RADIS code. The main goal of the current project is to add the atomic Kurucz database to RADIS. The second objective is to improve the aformentioned common API to download and manage all databases. The mentee will not start from scratch because the community already worked on the problem and set up a frame for this big merge of code built around a [DatabaseManager](https://github.com/radis/radis/blob/develop/radis/api/dbmanager.py#L51) class. Previous work on the Kurucz database can be found in [this PR](https://github.com/radis/radis/pull/601). - #### Milestones ##### Coding starts -* Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) +- Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) -* Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) +- Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) -* Get familiar with RADIS architecture, the [DatabaseManager](https://github.com/radis/radis/blob/develop/radis/api/dbmanager.py#L51) class, and what was already implemented. +- Get familiar with RADIS architecture, the [DatabaseManager](https://github.com/radis/radis/blob/develop/radis/api/dbmanager.py#L51) class, and what was already implemented. ##### 1st Evaluation -* Add new molecular databases: Kurucz - -* Add documentation +- Add new molecular databases: Kurucz -* Gather feedbacks from current users of ExoJax and RADIS +- Add documentation +- Gather feedbacks from current users of ExoJax and RADIS ##### 2nd Evaluation -* Add atomic database: NIST +- Add atomic database: NIST -* Based on the user feebacks and the hands-on experience acquired in the 1st round, refactor the Common API as required to make it more user-friendly. It might require major architectural changes. +- Based on the user feebacks and the hands-on experience acquired in the 1st round, refactor the Common API as required to make it more user-friendly. It might require major architectural changes. -* Set up documentation of a stand-alone version of the Database API +- Set up documentation of a stand-alone version of the Database API ##### Final evaluation -* Have all code, tests, and documentation in GitHub. +- Have all code, tests, and documentation in GitHub. -* If ready and, make the Common API stand-alone. +- If ready and, make the Common API stand-alone. #### Secondary Goals -* Add collisional-induced-absorption (CIA) databases which are a different type of databases than line databases +- Add collisional-induced-absorption (CIA) databases which are a different type of databases than line databases -* Document architecture and developer guide when facing unclear points that may appear. +- Document architecture and developer guide when facing unclear points that may appear. -* Review pull requests from other RADIS contributors +- Review pull requests from other RADIS contributors diff --git a/_projects/2024/stingray/dashboard.md b/src/content/pages/gsoc/2024/stingray/dashboard.md similarity index 71% rename from _projects/2024/stingray/dashboard.md rename to src/content/pages/gsoc/2024/stingray/dashboard.md index fdbd5612..3cb1f27d 100644 --- a/_projects/2024/stingray/dashboard.md +++ b/src/content/pages/gsoc/2024/stingray/dashboard.md @@ -2,49 +2,49 @@ name: A quicklook dashboard for X-ray astronomy with Stingray desc: Create a dashboard that displays some quicklook analysis of astronomical X-ray observations. requirements: - - Experience with Python + - Experience with Python difficulty: medium issues: - - https://github.com/StingraySoftware/stingray/issues/794 + - https://github.com/StingraySoftware/stingray/issues/794 mentors: - - matteobachetti - - mgullik + - matteobachetti + - mgullik initiatives: - - GSOC + - GSOC project_size: - - 350 h / large + - 350 h / large tags: - - python + - python collaborating_projects: - - stingray + - stingray --- # Description -Stingray is a Python library designed to perform times series analysis and -related tasks on astronomical light curves. It supports a range of commonly-used -Fourier analysis techniques, as well as extensions for analyzing pulsar data, -simulating data sets, and statistical modelling. Stingray is designed to be easy +Stingray is a Python library designed to perform times series analysis and +related tasks on astronomical light curves. It supports a range of commonly-used +Fourier analysis techniques, as well as extensions for analyzing pulsar data, +simulating data sets, and statistical modelling. Stingray is designed to be easy to extend, and easy to incorporate into data analysis workflows and pipelines. -When analyzing a new astronomical dataset, it is often convenient to have some quicklook +When analyzing a new astronomical dataset, it is often convenient to have some quicklook visualization with basic information. For X-ray astronomy, the usual information is a -light curve (a time series showing the flux of the source), a periodogram, spectral -colors (the ratio of fluxes in different energy bands of the X-rays). +light curve (a time series showing the flux of the source), a periodogram, spectral +colors (the ratio of fluxes in different energy bands of the X-rays). This project leverages Stingray's flexibility to create a quicklook dashboard with basic -interactivity. The principle is simple: given an event list, one calculates a light curve, -a power spectrum with default options, maybe a Lomb-Scargle periodogram, color-color or -HID diagrams, maybe power-color and color hue-rms diagrams. It should be somewhat +interactivity. The principle is simple: given an event list, one calculates a light curve, +a power spectrum with default options, maybe a Lomb-Scargle periodogram, color-color or +HID diagrams, maybe power-color and color hue-rms diagrams. It should be somewhat configurable, so that one can apply a set of custom options to a series of observations with ease. Each plot kind should be a separate plugin, with configurable options. The dashboard should display the plugins that the user requests with a custom JSON configuration file. -The dashboard could work as an interactive visualization web page (just for zooming in and out), +The dashboard could work as an interactive visualization web page (just for zooming in and out), or just make a PDF or image with the plots. -A bonus could be making it the start for an interactive *analysis* interface (not just +A bonus could be making it the start for an interactive _analysis_ interface (not just plotting, but also recalculate the quantities with different parameters and refresh the plots) ## Milestones @@ -56,18 +56,18 @@ plotting, but also recalculate the quantities with different parameters and refr ### Community Bonding Period -* Understand Stingray scientific case. -* Setup a development environment. +- Understand Stingray scientific case. +- Setup a development environment. ### Coding starts -* Design the general structure of the dashboard and the plugins. -* Use Stingray's tutorials to set up the basic plugins for quicklook +- Design the general structure of the dashboard and the plugins. +- Use Stingray's tutorials to set up the basic plugins for quicklook ### 1st evaluation -* Partial skeleton of the dashboard complete. +- Partial skeleton of the dashboard complete. ### Final evaluation -* Dashboard ready for deployment and properly documented. +- Dashboard ready for deployment and properly documented. diff --git a/_projects/2024/sunpy/_3dplotting.md b/src/content/pages/gsoc/2024/sunpy/_3dplotting.md similarity index 57% rename from _projects/2024/sunpy/_3dplotting.md rename to src/content/pages/gsoc/2024/sunpy/_3dplotting.md index 80fe43e9..0e3e5ed8 100644 --- a/_projects/2024/sunpy/_3dplotting.md +++ b/src/content/pages/gsoc/2024/sunpy/_3dplotting.md @@ -2,31 +2,31 @@ name: Improve sunkit-pyvista desc: Improve the 3D plotting capabilities within the SunPy Ecosystem requirements: - - Familiarity with Python - - Familiarity with pyvista + - Familiarity with Python + - Familiarity with pyvista difficulty: medium to high issues: - - https://github.com/sunpy/sunkit-pyvista/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc - - https://github.com/sunpy/sunkit-pyvista/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc + - https://github.com/sunpy/sunkit-pyvista/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc + - https://github.com/sunpy/sunkit-pyvista/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc mentors: - - - - nabobalis + - + - nabobalis project_size: - - 175 h / medium + - 175 h / medium tags: - - python - - plotting - - 3D + - python + - plotting + - 3D collaborating_projects: - - sunpy + - sunpy --- # Description The SunPy Ecosystem currently has well developed support for making 2D plots (with Matplotlib), but currently a simpler interface for making 3D plots. -[sunkit-pyvista](https://github.com/sunpy/sunkit-pyvista) came out of a previous GSoC project and enables 3D plotting of sunpy Maps. -This is achieved by wrapping [pyvista](https://github.com/pyvista/pyvista) and adding a "solar-spin" on their API. +[sunkit-pyvista](https://github.com/sunpy/sunkit-pyvista) came out of a previous GSoC project and enables 3D plotting of sunpy Maps. +This is achieved by wrapping [pyvista](https://github.com/pyvista/pyvista) and adding a "solar-spin" on their API. However, after this GSoC, progress was much slower and issues have cropped up with time, the main one being the the API currently has a `plotter.plotter` to access the underlying pyvista API. It also lacks some useful features such as plotting current sheets and animations. @@ -37,18 +37,18 @@ This project will be addressing these issues, in part by taking over existing pu ### Community Bonding Period -* Get familiar with sunkit-pyvista. -* Get familiar with pyvista. -* Setup a development environment. +- Get familiar with sunkit-pyvista. +- Get familiar with pyvista. +- Setup a development environment. ### Coding starts -* Start working on the first issue. +- Start working on the first issue. #### 1st evaluation -* Have around ~50% of the issues and pull requests taken care of. +- Have around ~50% of the issues and pull requests taken care of. #### Final evaluation -* Ideally have 100% of the issues and pull requests finished. +- Ideally have 100% of the issues and pull requests finished. diff --git a/_projects/2024/sunpy/eclipse.md b/src/content/pages/gsoc/2024/sunpy/eclipse.md similarity index 70% rename from _projects/2024/sunpy/eclipse.md rename to src/content/pages/gsoc/2024/sunpy/eclipse.md index 76bfbbde..ed43d222 100644 --- a/_projects/2024/sunpy/eclipse.md +++ b/src/content/pages/gsoc/2024/sunpy/eclipse.md @@ -2,24 +2,24 @@ name: Solar Eclipse analysis with sunpy desc: Process and analysis photographs taken of the total solar eclipse that crosses the US in 2024 requirements: - - Experience with Python - - Background with Physics or Astronomy + - Experience with Python + - Background with Physics or Astronomy difficulty: very high issues: - - https://github.com/sunpy/sunpy/issues/7387 + - https://github.com/sunpy/sunpy/issues/7387 mentors: - - nabobalis - - ehsteve - - ayshih + - nabobalis + - ehsteve + - ayshih initiatives: - - GSOC + - GSOC project_size: - - 350 h / large + - 350 h / large tags: - - sunpy - - Python + - sunpy + - Python collaborating_projects: - - sunpy + - sunpy --- # Description @@ -27,11 +27,11 @@ collaborating_projects: On April 8 2024, a total solar eclipse will will cross North America, passing over Mexico, the United States, and Canada. It is expected that more than 20 million people will be able to witness it and we can expect a large number of amateur photographers to record the event. -Thus the purpose of this project is to develop tools to enable ground-based amateur photographs of the solar corona taken during the eclipse to be imported into ``sunpy`` and processed to enable comparison with space-based data sets already available in ``sunpy`` such as SDO/AIA. +Thus the purpose of this project is to develop tools to enable ground-based amateur photographs of the solar corona taken during the eclipse to be imported into `sunpy` and processed to enable comparison with space-based data sets already available in `sunpy` such as SDO/AIA. Eclipse photographs also frequently require processing steps such as stacking and aligning of multiple exposures, sharpening, and flat-fielding. -This may require new algorithms to be developed or existing tools in SciPy or other libraries to be identified and applied. +This may require new algorithms to be developed or existing tools in SciPy or other libraries to be identified and applied. -This project will need to create the components within ``sunpy`` but also other libraries such as ``sunkit-image``. +This project will need to create the components within `sunpy` but also other libraries such as `sunkit-image`. There are several steps: @@ -52,17 +52,17 @@ A background in Physics or Astronomy with experience of astropy or sunpy coordin ### Community Bonding Period -* Get familiar wih solar coordinates and solar eclipse data. -* Setup a development environment. +- Get familiar wih solar coordinates and solar eclipse data. +- Setup a development environment. ### Coding starts -* Start by recreating the eclipse path image. +- Start by recreating the eclipse path image. #### 1st evaluation -* Have updated the old notebook code to work with newer data. +- Have updated the old notebook code to work with newer data. #### Final evaluation -* Ideally finished each bullet pointed task. +- Ideally finished each bullet pointed task. diff --git a/_projects/2024/sunpy/hek.md b/src/content/pages/gsoc/2024/sunpy/hek.md similarity index 79% rename from _projects/2024/sunpy/hek.md rename to src/content/pages/gsoc/2024/sunpy/hek.md index c4779736..c9e64321 100644 --- a/_projects/2024/sunpy/hek.md +++ b/src/content/pages/gsoc/2024/sunpy/hek.md @@ -2,27 +2,27 @@ name: Improved solar feature and event representation desc: Improve the current representation of solar features and events requirements: - - Experience with Python + - Experience with Python difficulty: low to medium issues: - - https://github.com/sunpy/sunpy/issues?q=is%3Aissue+is%3Aopen+HEK + - https://github.com/sunpy/sunpy/issues?q=is%3Aissue+is%3Aopen+HEK mentors: - - wafels - - nabobalis + - wafels + - nabobalis initiatives: - - GSOC + - GSOC project_size: - - 90h / small + - 90h / small tags: - - python + - python collaborating_projects: - - sunpy + - sunpy --- # Description `sunpy` provides access to solar feature and event data held by the [Heliophysics Event Knowledgebase](https://www.lmsal.com/hek/). -Descriptions of the properties of each feature and event are given [here](https://www.lmsal.com/hek/VOEvent_Spec.html). +Descriptions of the properties of each feature and event are given in the [HEK VOEvent specification](https://www.lmsal.com/hek/VOEvent_Spec.html). Feature and event properties include their type, physical extent, location, lifetime, and other feature/event properties that are specific to a given feature/event. For example, the time at which the energy flux of a solar flare is at a maximum is relevant for flares, but is not relevant to the description of a coronal hole. @@ -47,18 +47,18 @@ For this project, being familiar with astropy regions and some solar coordinate ### Community Bonding Period -* Understand the project and the API design. -* Setup a development environment. +- Understand the project and the API design. +- Setup a development environment. ### Coding starts -* Experimenting with the current representation of HEK feature and event data. -* Consider parsing the html page for the specification. +- Experimenting with the current representation of HEK feature and event data. +- Consider parsing the html page for the specification. ### 1st evaluation -* Partial skeleton of the new HEK feature/event object written. +- Partial skeleton of the new HEK feature/event object written. ### Final evaluation -* Functional replacement ready for review and merging into `sunpy`. +- Functional replacement ready for review and merging into `sunpy`. diff --git a/_projects/2024/sunpy/ndcube_io.md b/src/content/pages/gsoc/2024/sunpy/ndcube_io.md similarity index 78% rename from _projects/2024/sunpy/ndcube_io.md rename to src/content/pages/gsoc/2024/sunpy/ndcube_io.md index cba2291c..eb0696f9 100644 --- a/_projects/2024/sunpy/ndcube_io.md +++ b/src/content/pages/gsoc/2024/sunpy/ndcube_io.md @@ -2,23 +2,23 @@ name: Serialisation of NDCube classes to ASDF desc: This project will add functionality to `ndcube` and other relevant packages to save all the ndcube classes to ASDF files. requirements: - - Experience with Python + - Experience with Python difficulty: medium to high issues: - - https://github.com/sunpy/ndcube/issues/111 + - https://github.com/sunpy/ndcube/issues/111 mentors: - - Cadair - - DanRyanIrish - - braingram + - Cadair + - DanRyanIrish + - braingram initiatives: - - GSOC + - GSOC project_size: - - 175 h / medium + - 175 h / medium tags: - - sunpy - - Python + - sunpy + - Python collaborating_projects: - - sunpy + - sunpy --- # Description @@ -35,45 +35,45 @@ Since `ndcube` currently does not support ASDF at all, the additional steps of a The first phase of this project will be to enable serializing a `ndcube.NDCube` object when `.data` is a numpy array and `.wcs` is a [`gwcs.WCS`](https://gwcs.readthedocs.io/) object. To do this the following classes will need to have `Converters` written for them in `ndcube`: -* `NDCube` -* `GlobalCoords` -* `ExtraCoords` +- `NDCube` +- `GlobalCoords` +- `ExtraCoords` The next step will be to extend this basic support with support for `astropy.wcs.WCS` classes as the `NDCube.wcs` property. To do this a `Converter` for `astropy.wcs.WCS` will need to be added to the [`asdf_astropy`](https://github.com/astropy/asdf-astropy/) package. Then to add support for all the WCS wrapper classes implemented in [ndcube](https://github.com/sunpy/ndcube/tree/main/ndcube/wcs/wrappers) and [astropy](https://github.com/astropy/astropy/blob/main/astropy/wcs/wcsapi/wrappers/sliced_wcs.py#L105) so that `NDCube` object which have been manipulated can also be saved to ASDF. So by the end of this step the following classes will have converters written: -* `astropy.wcs.WCS` -* `SlicedLowLevelWCS` -* `ResampledLowLevelWCS` -* `CompoundLowLevelWCS` -* `ReorderedLowLevelWCS` +- `astropy.wcs.WCS` +- `SlicedLowLevelWCS` +- `ResampledLowLevelWCS` +- `CompoundLowLevelWCS` +- `ReorderedLowLevelWCS` The final stage for the `ndcube.NDCube` object will be to ensure that a `NDCube` object with all optional properties set, such as `mask`, `uncertainty` and `psf` is able to be saved to ASDF. This will at minimum require writing a `Converter` and schema for the `astropy.nddata.NDUncertainty` class in `asdf_astropy`. The next phase of the project will be to add support for the other `ndcube` data types: -* `NDCubeSequence` -* `NDCollection` +- `NDCubeSequence` +- `NDCollection` ## Goals ### Community Bonding Period -* Setup a development environment. -* Familiarize yourself with `asdf` extensions, `Converters` and schemas. +- Setup a development environment. +- Familiarize yourself with `asdf` extensions, `Converters` and schemas. ### Before 1st Evaluation -* Add the `asdf` extension infrastructure to `ndcube`. -* Write Converters and schemas for `GlobalCoords` and `ExtraCoords` (with tests). -* Write Converter and schema for `NDCube` (with tests). -* Extend test suite with other examples of saving and loading `NDCube` objects backed by different `gwcs.WCS` objects etc which can be reused as test cases later. +- Add the `asdf` extension infrastructure to `ndcube`. +- Write Converters and schemas for `GlobalCoords` and `ExtraCoords` (with tests). +- Write Converter and schema for `NDCube` (with tests). +- Extend test suite with other examples of saving and loading `NDCube` objects backed by different `gwcs.WCS` objects etc which can be reused as test cases later. #### Before Final evaluation -* Have opened PRs to `asdf_astropy` for `astropy.wcs.WCS` and `astropy.nddata.NDUncertainty` classes. -* Have written tests in `ndcube` of serializing `NDCube` objects of higher complexity (`.uncertainty`, `.mask` etc) and with `astropy.wcs.WCS` objects. -* Add `Converters` and schemas for `NDCubeSequence` and `NDCollection` classes to `ndcube`. +- Have opened PRs to `asdf_astropy` for `astropy.wcs.WCS` and `astropy.nddata.NDUncertainty` classes. +- Have written tests in `ndcube` of serializing `NDCube` objects of higher complexity (`.uncertainty`, `.mask` etc) and with `astropy.wcs.WCS` objects. +- Add `Converters` and schemas for `NDCubeSequence` and `NDCollection` classes to `ndcube`. diff --git a/_projects/2024/sunpy/sunkit_image.md b/src/content/pages/gsoc/2024/sunpy/sunkit_image.md similarity index 79% rename from _projects/2024/sunpy/sunkit_image.md rename to src/content/pages/gsoc/2024/sunpy/sunkit_image.md index 0803afd8..588b6791 100644 --- a/_projects/2024/sunpy/sunkit_image.md +++ b/src/content/pages/gsoc/2024/sunpy/sunkit_image.md @@ -2,22 +2,22 @@ name: Improve sunkit-image desc: Improve the features of sunkit-image requirements: - - Experience with Python + - Experience with Python difficulty: low to medium issues: - - https://github.com/sunpy/sunkit-image/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc + - https://github.com/sunpy/sunkit-image/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc mentors: - - wtbarnes - - nabobalis + - wtbarnes + - nabobalis initiatives: - - GSOC + - GSOC project_size: - - 175 h / medium + - 175 h / medium tags: - - sunpy - - Python + - sunpy + - Python collaborating_projects: - - sunpy + - sunpy --- # Description @@ -44,17 +44,17 @@ If there is some time left over: ### Community Bonding Period -* Get familiar with the library. -* Setup a development environment. +- Get familiar with the library. +- Setup a development environment. ### Coding starts -* Start working on the first issue. +- Start working on the first issue. #### 1st evaluation -* Have around ~50% of the issues taken care of. +- Have around ~50% of the issues taken care of. #### Final evaluation -* Ideally have 100% of the issues finished. +- Ideally have 100% of the issues finished. diff --git a/_projects/2024/sunpy/sunpy-soar.md b/src/content/pages/gsoc/2024/sunpy/sunpy-soar.md similarity index 82% rename from _projects/2024/sunpy/sunpy-soar.md rename to src/content/pages/gsoc/2024/sunpy/sunpy-soar.md index 17593c0e..5401a230 100644 --- a/_projects/2024/sunpy/sunpy-soar.md +++ b/src/content/pages/gsoc/2024/sunpy/sunpy-soar.md @@ -2,24 +2,24 @@ name: Querying SOAR Metdata desc: Adding proper metadata handling to sunpy-soar requirements: - - Experience with Python + - Experience with Python difficulty: medium to high issues: - - https://github.com/sunpy/sunpy-soar/issues/46 - - https://github.com/sunpy/sunpy-soar/issues/66 + - https://github.com/sunpy/sunpy-soar/issues/46 + - https://github.com/sunpy/sunpy-soar/issues/66 mentors: - - hayesla - - nabobalis - - ebuchlin + - hayesla + - nabobalis + - ebuchlin initiatives: - - GSOC + - GSOC project_size: - - 175 h / medium + - 175 h / medium tags: - - sunpy - - Python + - sunpy + - Python collaborating_projects: - - sunpy + - sunpy --- # Description @@ -37,7 +37,7 @@ This translates Python code into the correct values required to do any query and As we are not planning to add every metadata as a new attribute, we will make use of more generic ones to enable filtering, similar to how it is done for another data provider, the [JSOC](https://docs.sunpy.org/en/latest/generated/api/sunpy.net.jsoc.Keyword.html#sunpy.net.jsoc.Keyword). If we do need to add new ones, they should have a very specific reason to exist, or we might need to add support for them within sunpy for other data -For example, there are existing attributes like that can be mapped like ``Wavelength`` which would take values from the following table ``v___fits`` with its column `wavelength`. +For example, there are existing attributes like that can be mapped like `Wavelength` which would take values from the following table `v___fits` with its column `wavelength`. [More examples are here.](https://github.com/sunpy/sunpy-soar/issues/46#issuecomment-1557936562) This will project will partly be working out all of the connections for each table to enable these "translations". @@ -52,17 +52,17 @@ We do have one stretch goal and that would be to look into using [astroquery TAP ### Community Bonding Period -* Get familiar with the SOAR and TAP protocols. -* Setup a development environment. +- Get familiar with the SOAR and TAP protocols. +- Setup a development environment. ### Coding starts -* Start working on adding support for additional attributes. +- Start working on adding support for additional attributes. #### 1st evaluation -* Have the additional attributes implemented. +- Have the additional attributes implemented. #### Final evaluation -* Enable filters on the additional attributes. +- Enable filters on the additional attributes. diff --git a/src/content/pages/gsoc/2025/index.md b/src/content/pages/gsoc/2025/index.md new file mode 100644 index 00000000..6211d718 --- /dev/null +++ b/src/content/pages/gsoc/2025/index.md @@ -0,0 +1,5 @@ +--- +title: "Ideas page for Google Summer of Code 2025" +show_main: false +season: 2025 +--- diff --git a/_projects/2025/juliaastro/stingray_porting.md b/src/content/pages/gsoc/2025/juliaastro/stingray_porting.md similarity index 53% rename from _projects/2025/juliaastro/stingray_porting.md rename to src/content/pages/gsoc/2025/juliaastro/stingray_porting.md index 32d81990..170b0757 100644 --- a/_projects/2025/juliaastro/stingray_porting.md +++ b/src/content/pages/gsoc/2025/juliaastro/stingray_porting.md @@ -3,63 +3,65 @@ name: Spectral timing in Julia desc: Create a set of timing and spectral timing methods in Julia. # add a short one line description of your project requirements: -# Student requirements: - - Understanding Python code - - Julia knowledge + # Student requirements: + - Understanding Python code + - Julia knowledge difficulty: medium issues: # Related issues (if any) to this project. mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - matteobachetti - - stefanocovino - - fjebaker + # First person in contact; mentors may change before project starts. + # GitHub handles + - matteobachetti + - stefanocovino + - fjebaker initiatives: -# The programme under this project wish to run. - - GSOC + # The programme under this project wish to run. + - GSOC project_size: - - 350 h + - 350 h tags: -# Different technologies needed - - python - - Julia - - time series analysis + # Different technologies needed + - python + - Julia + - time series analysis collaborating_projects: -# suborganisation(s) to which this project belongs. - - stingray - - juliaAstro + # suborganization(s) to which this project belongs. + - stingray + - juliaAstro --- + ## Spectral timing in Julia -#### Description -The analysis of time series from astronomical observations in the X-rays is an +### Description + +The analysis of time series from astronomical observations in the X-rays is an excellent tool to test advanced physical theories. -Of particular interest are the periodicities that are often observed in the +Of particular interest are the periodicities that are often observed in the X-ray signals coming from the surroundings of accreting black holes, and the evolution of the rotation period of neutron stars. -The essential toolbox for X-ray timing analysis includes different kinds of +The essential toolbox for X-ray timing analysis includes different kinds of periodograms, cross spectra, and a number of "variability vs energy spectra", that allow to understand the variability at different energies. -This project is about the implementation of a basic set of X-ray timing analysis +This project is about the implementation of a basic set of X-ray timing analysis operations in Julia, continuing the porting of the core operations from the `stingray` Python package [initiated during Google Summer of Code 2022] -(https://github.com/StingraySoftware/Stingray.jl) +() -#### Milestones +### Milestones -##### Coding starts +#### Coding starts -* Gain familiarity with the codebase -* Apply existing analysis to simulated datasets -* Implement I/O operation on FITS files +- Gain familiarity with the codebase +- Apply existing analysis to simulated datasets +- Implement I/O operation on FITS files -##### 1st evaluation +#### 1st evaluation -* Implement a series of tests in Julia that the new code will have to pass -* Extend basic operations (periodograms and cross spectra) to event lists and light curves -* Time lags and coherence spectra +- Implement a series of tests in Julia that the new code will have to pass +- Extend basic operations (periodograms and cross spectra) to event lists and light curves +- Time lags and coherence spectra -##### Final evaluation +#### Final evaluation -* A working framework for variability vs energy spectra (covariance spectra, time lags) +- A working framework for variability vs energy spectra (covariance spectra, time lags) diff --git a/_projects/2025/radis/Exomol_electronic_spectra.md b/src/content/pages/gsoc/2025/radis/Exomol_electronic_spectra.md similarity index 56% rename from _projects/2025/radis/Exomol_electronic_spectra.md rename to src/content/pages/gsoc/2025/radis/Exomol_electronic_spectra.md index a43a1df8..b0aad192 100644 --- a/_projects/2025/radis/Exomol_electronic_spectra.md +++ b/src/content/pages/gsoc/2025/radis/Exomol_electronic_spectra.md @@ -3,34 +3,33 @@ name: Electronic spectra for RADIS # add a short one line description of your project desc: The project aims at adding the possibility to calculated electronic spectra with RADIS, mainly using the newly available molecules in ExoMol requirements: -# Student requirements: - - Knowledge of Pandas or other DataFrame libraries + # Student requirements: + - Knowledge of Pandas or other DataFrame libraries difficulty: medium issues: -- https://github.com/radis/radis/issues/724 + - https://github.com/radis/radis/issues/724 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - minouHub - - erwanp + # First person in contact; mentors may change before project starts. + # GitHub handles + - minouHub + - erwanp initiatives: - - GSOC + - GSOC project_size: - - 350 h + - 350 h tags: -# Different technologies needed - - Python - - Vaex - - Pandas - - Git + # Different technologies needed + - Python + - Vaex + - Pandas + - Git collaborating_projects: -# suborganisation(s) to which this project belongs. - - radis + # suborganization(s) to which this project belongs. + - radis --- #### Description - The RADIS code was developed for the characterization of plasmas, flames and atmospheres. High-temperature spectral calculations require to resolve the shape of tens of millions of lines, which is the usual performance bottleneck. RADIS implements a new algorithm to compute these lineshapes, and is already one of the fastest line-by-line spectral codes available. @@ -43,42 +42,42 @@ Currently, it supports the computation of rovibrational spectra, which correspon Other codes allow to compute electronic spectra of diatomic molecules and can be used as a reference or comparison point: -* Moose - https://github.com/AntoineTUE/Moose -* MassiveOES - https://bitbucket.org/OES_muni/massiveoes (with Radis/MassiveOES example in https://github.com/radis/massiveOES-examples) -* ExoMol list - https://www.exomol.com/software/ +- Moose - +- MassiveOES - (with Radis/MassiveOES example in ) +- ExoMol list - #### Milestones ##### Coding starts -* Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) +- Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) -* Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) +- Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) ##### 1st Evaluation -* Adapt how the EXOMOL database is currently employed to allow the computation of electronic spectra at **thermal equilibrium** (single temperature) +- Adapt how the EXOMOL database is currently employed to allow the computation of electronic spectra at **thermal equilibrium** (single temperature) -* Add documentation and example. Add tests against other spectral codes. +- Add documentation and example. Add tests against other spectral codes. -* To ease the understand of the physics behind the code, the contributor could start with non-equilibrium spectra of atomic species (see Secondary goals). This is entirely optional and up to the contributor. +- To ease the understand of the physics behind the code, the contributor could start with non-equilibrium spectra of atomic species (see Secondary goals). This is entirely optional and up to the contributor. ##### 2nd Evaluation -* Add the possibility to compute electronic spectra at **thermal non-equilibrium** (electronic temperature != translational temperature) +- Add the possibility to compute electronic spectra at **thermal non-equilibrium** (electronic temperature != translational temperature) -* Add documentation and example. Add tests against other spectral codes. +- Add documentation and example. Add tests against other spectral codes. -* For diatomic species, start a new database based on MassiveOES sources. +- For diatomic species, start a new database based on MassiveOES sources. ##### Final evaluation -* Have all code, tests, and documentation in GitHub. +- Have all code, tests, and documentation in GitHub. #### Secondary Goals -* RADIS can compute atomic spectra thanks to the hard work of GSOC 2023 and 2024 contributors, see https://github.com/radis/radis/pull/689. An interesting approach would be to start with non-equilibrium spectra of atomic species as the physics is slighly easier than for molecule. +- RADIS can compute atomic spectra thanks to the hard work of GSOC 2023 and 2024 contributors, see . An interesting approach would be to start with non-equilibrium spectra of atomic species as the physics is slighly easier than for molecule. -* Document architecture and developer guide when facing unclear points that may appear. +- Document architecture and developer guide when facing unclear points that may appear. -* Review pull requests from other RADIS contributors +- Review pull requests from other RADIS contributors diff --git a/_projects/2025/radis/Fast_Parsing.md b/src/content/pages/gsoc/2025/radis/Fast_Parsing.md similarity index 62% rename from _projects/2025/radis/Fast_Parsing.md rename to src/content/pages/gsoc/2025/radis/Fast_Parsing.md index 9e23d5a7..e305787f 100644 --- a/_projects/2025/radis/Fast_Parsing.md +++ b/src/content/pages/gsoc/2025/radis/Fast_Parsing.md @@ -3,30 +3,30 @@ name: Fast parsing of large databases and execution bottlenecks # add a short one line description of your project desc: The conversion of large files from a compressed format to hdf5 should be accelerated. requirements: -# Student requirements: - - Knowledge of Pandas or other DataFrame libraries + # Student requirements: + - Knowledge of Pandas or other DataFrame libraries difficulty: medium issues: -- https://github.com/radis/radis/issues/510 + - https://github.com/radis/radis/issues/510 mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - minouHub - - TranHuuNhatHuy - - dcmvdbekerom + # First person in contact; mentors may change before project starts. + # GitHub handles + - minouHub + - TranHuuNhatHuy + - dcmvdbekerom initiatives: - - GSOC + - GSOC project_size: - - 175 h + - 175 h tags: -# Different technologies needed - - Python - - Vaex - - Pandas - - Git + # Different technologies needed + - Python + - Vaex + - Pandas + - Git collaborating_projects: -# suborganisation(s) to which this project belongs. - - radis + # suborganization(s) to which this project belongs. + - radis --- #### Description @@ -47,32 +47,32 @@ The objective of this project is to accelerate the parsing to HDF5 files. ##### Coding starts -* Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) +- Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) -* Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) +- Have set up a development environment, be familiar with open-source tools (GitHub / Git / Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) ##### 1st Evaluation -* Based on the demonstration of @dcmvdbekerom, implement a C++ new parsing algorithm in RADIS. The demonstration can be found [here](https://github.com/radis/radis/issues/510#issuecomment-2037688815), which includes a detailed explanation and code examples. +- Based on the demonstration of @dcmvdbekerom, implement a C++ new parsing algorithm in RADIS. The demonstration can be found in the [RADIS issue comment](https://github.com/radis/radis/issues/510#issuecomment-2037688815), which includes a detailed explanation and code examples. -* Add documentation and example. Add tests against other spectral codes. +- Add documentation and example. Add tests against other spectral codes. ##### 2nd Evaluation -* Propose a solution to save several HDF5 files instead of a large one in `.radisdb`. For example, save 10 files of 7 GB each instead of a single 70-GB file for HITEMP CO2 +- Propose a solution to save several HDF5 files instead of a large one in `.radisdb`. For example, save 10 files of 7 GB each instead of a single 70-GB file for HITEMP CO2 -* Write a review of current bottleneck in 1/ the **parsing** and 2/ the **computation** of spectra. This bottleneck review should be uploaded on the documentation, with working examples for small (~1 cm-1) and large (~100 cm-1) spectra. See this example: https://github.com/radis/radis/issues/685 +- Write a review of current bottleneck in 1/ the **parsing** and 2/ the **computation** of spectra. This bottleneck review should be uploaded on the documentation, with working examples for small (~1 cm-1) and large (~100 cm-1) spectra. See this example: -* Tackle some of the bottleneck by either modifying the code, leveraging numba, or writing a C++ code. +- Tackle some of the bottleneck by either modifying the code, leveraging numba, or writing a C++ code. ##### Final evaluation -* Have all code, tests, and documentation in GitHub. +- Have all code, tests, and documentation in GitHub. #### Secondary Goals -* Document architecture and developer guide when facing unclear points that may appear. +- Document architecture and developer guide when facing unclear points that may appear. -* Review pull requests from other RADIS contributors +- Review pull requests from other RADIS contributors -* Although this project is devoted to CPU computation, the interested contributor can also contribute to the resolution of GPU bottlenecks. For instance: in a GPU computation, the database first needs to be copied to a host buffer (i.e. CPU side), a so called 'staging buffer'. After that, the database can be copied to the GPU. For integrated GPU's, i.e. when the GPU is part of the CPU chip (like most Intel and AMD processors), the CPU and GPU memory is shared. Ideally, the database would directly be loaded into the staging buffer to prevent copying the same database 3 times (1: regular load, 2: staging buffer, 3: GPU buffer). +- Although this project is devoted to CPU computation, the interested contributor can also contribute to the resolution of GPU bottlenecks. For instance: in a GPU computation, the database first needs to be copied to a host buffer (i.e. CPU side), a so called 'staging buffer'. After that, the database can be copied to the GPU. For integrated GPU's, i.e. when the GPU is part of the CPU chip (like most Intel and AMD processors), the CPU and GPU memory is shared. Ideally, the database would directly be loaded into the staging buffer to prevent copying the same database 3 times (1: regular load, 2: staging buffer, 3: GPU buffer). diff --git a/_projects/2025/radis/Optimizing_Radis_app.md b/src/content/pages/gsoc/2025/radis/Optimizing_Radis_app.md similarity index 84% rename from _projects/2025/radis/Optimizing_Radis_app.md rename to src/content/pages/gsoc/2025/radis/Optimizing_Radis_app.md index 72d0ad0a..f1bbd725 100644 --- a/_projects/2025/radis/Optimizing_Radis_app.md +++ b/src/content/pages/gsoc/2025/radis/Optimizing_Radis_app.md @@ -3,36 +3,36 @@ name: Optimizing Radis app desc: Our project is all about enhancing user experience to the next level! We're committed to bringing you cutting-edge features and fine-tuning these features for maximum performance and efficiency, and rigorous testing to ensure they meet the needs of our highly valued end users. # add a short one line description of your project requirements: -# Student requirements - - TypeScript - - React - - FastApi - - Testing (pytest && vitest) + # Student requirements + - TypeScript + - React + - FastApi + - Testing (pytest && vitest) difficulty: medium issues: - - https://github.com/arunavabasucom/radis-app/issues/85 - - https://github.com/arunavabasucom/radis-app/issues/674 + - https://github.com/arunavabasucom/radis-app/issues/85 + - https://github.com/arunavabasucom/radis-app/issues/674 mentors: -# First person in contact; mentors may change before project starts -# GitHub handles - - erwanp - - arunavabasucom + # First person in contact; mentors may change before project starts + # GitHub handles + - erwanp + - arunavabasucom initiatives: - - GSOC + - GSOC project_size: - - 350 h + - 350 h tags: -# Different technologies needed - - Python - - TypeScript - - JavaScript - - React - - Fastapi - - Pandas - - Git + # Different technologies needed + - Python + - TypeScript + - JavaScript + - React + - Fastapi + - Pandas + - Git collaborating_projects: -# suborganisation(s) to which this project belongs - - radis + # suborganization(s) to which this project belongs + - radis --- #### Description diff --git a/_projects/2025/stingray/interactive_database.md b/src/content/pages/gsoc/2025/stingray/interactive_database.md similarity index 78% rename from _projects/2025/stingray/interactive_database.md rename to src/content/pages/gsoc/2025/stingray/interactive_database.md index 2146ba53..fc7b3d79 100644 --- a/_projects/2025/stingray/interactive_database.md +++ b/src/content/pages/gsoc/2025/stingray/interactive_database.md @@ -1,57 +1,57 @@ --- -name: Interactive Database for X-ray observations +name: Interactive Database for X-ray observations # add a short one line description of your project desc: Create an interactive database for analyzing, storing, and classifying X-ray observations of accreting black holes # Student requirements: requirements: - - Understanding Python code - - Manages database + - Understanding Python code + - Manages database difficulty: medium issues: # Related issues (if any) to this project. # First person in contact; mentors may change before project starts. # GitHub handles mentors: -- mgullik -- matteobachetti + - mgullik + - matteobachetti # The programme under this project wish to run. initiatives: - - GSOC + - GSOC project_size: - - 350 h + - 350 h # Different technologies needed tags: - - python - - database - - time series analysis - - machine learning -# suborganisation(s) to which this project belongs. + - python + - database + - time series analysis + - machine learning +# suborganization(s) to which this project belongs. collaborating_projects: - - stingray + - stingray --- -# Interactive Database for X-ray observations +# Interactive Database for X-ray observations ## Description -The increasing number of X-ray telescopes observing accreting black hole sources -has led to an incredibly large amount of available observational data. -To build a comprehensive understanding of stellar-mass black hole phenomenology, +The increasing number of X-ray telescopes observing accreting black hole sources +has led to an incredibly large amount of available observational data. +To build a comprehensive understanding of stellar-mass black hole phenomenology, it is essential to access and analyze this information in an intuitive and structured manner. -This project aims at developing a tool that analyzes, stores, and organizes -key data products of multiple observations in a database. Users will be able to interactively explore -the database and classify individual observations based on data products -retrieved with Stingray, potentially leveraging innovative machine learning techniques. -Beyond enabling large-scale classification and the discovery of general trends -in accreting black hole binaries, the tool will allow astronomers to identify +This project aims at developing a tool that analyzes, stores, and organizes +key data products of multiple observations in a database. Users will be able to interactively explore +the database and classify individual observations based on data products +retrieved with Stingray, potentially leveraging innovative machine learning techniques. +Beyond enabling large-scale classification and the discovery of general trends +in accreting black hole binaries, the tool will allow astronomers to identify peculiar features hidden within the vast dataset. -Challenges: Efficient storage and fast retrieval of data products, +Challenges: Efficient storage and fast retrieval of data products, ensuring interactivity of the tool, and enabling comparisons across different X-ray instruments. ### Milestones - + #### Coding starts - Gain familiarity with the observations (different type of X-ray telescopes) and with the products diff --git a/_projects/2026/astropy/astropy_core_improvements.md b/src/content/pages/gsoc/2026/astropy/astropy_core_improvements.md similarity index 71% rename from _projects/2026/astropy/astropy_core_improvements.md rename to src/content/pages/gsoc/2026/astropy/astropy_core_improvements.md index db5306a0..bf3893d2 100644 --- a/_projects/2026/astropy/astropy_core_improvements.md +++ b/src/content/pages/gsoc/2026/astropy/astropy_core_improvements.md @@ -4,51 +4,49 @@ name: Hardening astropy's core stability desc: Improvements to astropy low level extension modules (C/C++/Cython) # Student requirements: requirements: - - at least one low level language (C or C++ prefered) - - testing in Python + - at least one low level language (C or C++ prefered) + - testing in Python # How difficult would you consider the project to be: low, medium, high difficulty: medium to high, depending on candidate # Related issues (if any) to this project. # Ideally you want at least one that describes the problem it is trying to solve issues: - - https://github.com/neutrinoceros/astropy-APEs/pull/1 - - https://github.com/astropy/astropy/issues/17760 - - https://github.com/astropy/astropy/issues/19249 + - https://github.com/neutrinoceros/astropy-APEs/pull/1 + - https://github.com/astropy/astropy/issues/17760 + - https://github.com/astropy/astropy/issues/19249 # First person in contact; mentors may change before project starts. # GitHub or GitLab handles mentors: - - neutrinoceros - - astrofrog - - nstarkman + - neutrinoceros + - astrofrog + - nstarkman # The programme under this project wish to run. At the moment only GSOC is available initiatives: - - GSOC + - GSOC project_size: - - 175 h + - 175 h # Different technologies needed tags: - - python - - meson-python - - C - - C++ - - Cython - - pytest -# suborganisation(s) to which this project belongs. + - python + - meson-python + - C + - C++ + - Cython + - pytest +# suborganization(s) to which this project belongs. collaborating_projects: - - astropy + - astropy --- # Hardening astropy's core stability -## Description - Astropy is a mixed-language code base. Most of it is pure Python, but many hotpaths are written in lower level languages (Cython, C and C++). The former is where the vast majority of past and current development is conducted, while the latter in much more slowly paced. Meanwhile, the low-level layer overwhemingly dominates other important -aspects like complexity of *building* and distributing astropy releases, and takes an -estimated 20 to 50% share of astropy CI time for recompilation *of code that almost never changes*. +aspects like complexity of _building_ and distributing astropy releases, and takes an +estimated 20 to 50% share of astropy CI time for recompilation _of code that almost never changes_. It would be possible to decouple the bulk of the code base from its low level layer, for instance by splitting the latter into a separate package, but this new package would @@ -62,6 +60,7 @@ This project would be highly related to (although separable from) the [following APE](https://github.com/neutrinoceros/astropy-APEs/pull/1), which also contains more details on why the separation is desirable As such, it would also provide opportunities for exploratory works like + - migrating to a modern, externally maintained build system like Meson - rewritting, or incorporating `rust`-based extensions - exploring PEP 803/809 Limited API for Python 3.15 @@ -73,15 +72,15 @@ interests and time allocated. ### Coding starts -* set up dev env and tooling -* define a subset of astropy's extension modules to test, and testing strategy(ies) +- set up dev env and tooling +- define a subset of astropy's extension modules to test, and testing strategy(ies) ### 1st evaluation -* Write a test suite for a single subpackage's extensions -* Report on any difficulties met along the way, and identify (general ?) solutions +- Write a test suite for a single subpackage's extensions +- Report on any difficulties met along the way, and identify (general ?) solutions ### Final evaluation -* Complete test coverage for as many subpackages as possible -* Report on what (if anything) is still missing and identify a path forward +- Complete test coverage for as many subpackages as possible +- Report on what (if anything) is still missing and identify a path forward diff --git a/src/content/pages/gsoc/2026/index.md b/src/content/pages/gsoc/2026/index.md new file mode 100644 index 00000000..fa7dc964 --- /dev/null +++ b/src/content/pages/gsoc/2026/index.md @@ -0,0 +1,5 @@ +--- +title: "Ideas page for Google Summer of Code 2026" +show_main: false +season: 2026 +--- diff --git a/_projects/2026/juliaastro/spectra.md b/src/content/pages/gsoc/2026/juliaastro/spectra.md similarity index 79% rename from _projects/2026/juliaastro/spectra.md rename to src/content/pages/gsoc/2026/juliaastro/spectra.md index 87f56c3a..4c3e06d2 100644 --- a/_projects/2026/juliaastro/spectra.md +++ b/src/content/pages/gsoc/2026/juliaastro/spectra.md @@ -2,33 +2,31 @@ name: Spectra.jl across the electromagnetic spectrum desc: Help develop Spectrajl and friends with JuliaAstro! requirements: - - Familiarity with Julia + - Familiarity with Julia difficulty: medium # Related issues (if any) to this project. # Ideally you want at least one that describes the problem it is trying to solve issues: - - https://github.com/JuliaAstro/Spectra.jl/issues/41 + - https://github.com/JuliaAstro/Spectra.jl/issues/41 # First person in contact; mentors may change before project starts. # GitHub or GitLab handles mentors: - - fjebaker - - icweaver - - cgarling - - barrettp + - fjebaker + - icweaver + - cgarling + - barrettp initiatives: - - GSOC + - GSOC project_size: - - 175 h (Medium) + - 175 h (Medium) # Different technologies needed tags: - - Julia -# suborganisation(s) to which this project belongs. + - Julia +# suborganization(s) to which this project belongs. collaborating_projects: - - juliaAstro + - juliaAstro --- -## Spectra.jl across the electromagnetic spectrum - #### Description When we observe a star, we can filter particular colours to learn about the @@ -59,40 +57,41 @@ uniform interface in Spectra.jl for loading datasets and their associated metadata, and for performing basic manipulations and first-look analyses. For some further discussion, see: -- https://github.com/JuliaAstro/Spectra.jl/pull/24 + +- #### Project Milestones ##### Coding starts -* Learn about the different spectral data types and what makes, e.g. radio or +- Learn about the different spectral data types and what makes, e.g. radio or X-ray, spectra unusual. -* Learn about [FITS](https://en.wikipedia.org/wiki/FITS) tables and other common +- Learn about [FITS](https://en.wikipedia.org/wiki/FITS) tables and other common astronomical data formats for spectra. -* Learn about [Test Driven Development +- Learn about [Test Driven Development (TDD)](https://en.wikipedia.org/wiki/Test-driven_development), and techniques for writing robust and reliable software. We are curating a library of spectral data that Spectra.jl needs to be compatible with, and so TDD will be our guide in staying focused. -* Familiarise yourself with the existing routines in Spectra.jl, and the +- Familiarise yourself with the existing routines in Spectra.jl, and the [OGIP](https://heasarc.gsfc.nasa.gov/docs/heasarc/ofwg/docs/spectra/ogip_92_007.pdf) parser in SpectralFitting.jl. ##### 1st evaluation -* To have moved and integrated the OGIP parser from SpectralFitting.jl to +- To have moved and integrated the OGIP parser from SpectralFitting.jl to Spectra.jl. This should be a relatively easy and informative way to start, as all the code and tests have been written, and you will learn about the internals of Spectra.jl in the process. -* To have implemented data loading for (at least) one spectral datatype of your +- To have implemented data loading for (at least) one spectral datatype of your choice. In choosing which to implement, you can pick the difficulty that you feel is appropriate. ##### Final evaluation -* A revamped Spectra.jl; that is: -* To have implemented data loading for a significant portion of our library of +- A revamped Spectra.jl; that is: +- To have implemented data loading for a significant portion of our library of example spectra (ideally, for at least three different file formats). -* To provide some common routines, such as rebinning according to different +- To provide some common routines, such as rebinning according to different heuristics (e.g. minimum flux, signal to noise, count rates, ...), adjusting the wavelength or energy shifts, or converting between common units. diff --git a/_projects/2026/juliaastro/stingray_porting.md b/src/content/pages/gsoc/2026/juliaastro/stingray_porting.md similarity index 57% rename from _projects/2026/juliaastro/stingray_porting.md rename to src/content/pages/gsoc/2026/juliaastro/stingray_porting.md index 0a5bc58d..6b18c494 100644 --- a/_projects/2026/juliaastro/stingray_porting.md +++ b/src/content/pages/gsoc/2026/juliaastro/stingray_porting.md @@ -3,62 +3,62 @@ name: Spectral timing in Julia desc: Create a set of timing and spectral timing methods in Julia. # add a short one line description of your project requirements: -# Student requirements: - - Understanding Python code - - Julia knowledge + # Student requirements: + - Understanding Python code + - Julia knowledge difficulty: medium issues: # Related issues (if any) to this project. mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - fjebaker - - matteobachetti + # First person in contact; mentors may change before project starts. + # GitHub handles + - fjebaker + - matteobachetti initiatives: -# The programme under this project wish to run. - - GSOC + # The programme under this project wish to run. + - GSOC project_size: - - 350 h + - 350 h tags: -# Different technologies needed - - python - - Julia - - time series analysis + # Different technologies needed + - python + - Julia + - time series analysis collaborating_projects: -# suborganisation(s) to which this project belongs. - - stingray - - juliaAstro + # suborganization(s) to which this project belongs. + - stingray + - juliaAstro --- -## Spectral timing in Julia #### Description -The analysis of time series from astronomical observations in the X-rays is an + +The analysis of time series from astronomical observations in the X-rays is an excellent tool to test advanced physical theories. -Of particular interest are the periodicities that are often observed in the +Of particular interest are the periodicities that are often observed in the X-ray signals coming from the surroundings of accreting black holes, and the evolution of the rotation period of neutron stars. -The essential toolbox for X-ray timing analysis includes different kinds of +The essential toolbox for X-ray timing analysis includes different kinds of periodograms, cross spectra, and a number of "variability vs energy spectra", that allow to understand the variability at different energies. -This project is about the implementation of a basic set of X-ray timing analysis +This project is about the implementation of a basic set of X-ray timing analysis operations in Julia, continuing the porting of the core operations from the `stingray` Python package [initiated during Google Summer of Code 2022 and 2025] -(https://github.com/StingraySoftware/Stingray.jl) +() #### Milestones ##### Coding starts -* Gain familiarity with the codebase -* Apply existing analysis to simulated datasets -* Implement I/O operation on FITS files +- Gain familiarity with the codebase +- Apply existing analysis to simulated datasets +- Implement I/O operation on FITS files ##### 1st evaluation -* Implement a series of tests in Julia that the new code will have to pass -* Extend basic operations (periodograms and cross spectra) to event lists and light curves -* Time lags and coherence spectra +- Implement a series of tests in Julia that the new code will have to pass +- Extend basic operations (periodograms and cross spectra) to event lists and light curves +- Time lags and coherence spectra ##### Final evaluation -* A working framework for variability vs energy spectra (covariance spectra, time lags) +- A working framework for variability vs energy spectra (covariance spectra, time lags) diff --git a/_projects/2026/lincc-fw/pyarrow4astro.md b/src/content/pages/gsoc/2026/lincc-fw/pyarrow4astro.md similarity index 71% rename from _projects/2026/lincc-fw/pyarrow4astro.md rename to src/content/pages/gsoc/2026/lincc-fw/pyarrow4astro.md index 43e273ed..82b4f395 100644 --- a/_projects/2026/lincc-fw/pyarrow4astro.md +++ b/src/content/pages/gsoc/2026/lincc-fw/pyarrow4astro.md @@ -4,43 +4,41 @@ name: PyArrow improvements for astronomy desc: Improve and speed up PyArrow for nested arrays to enable on-scale time-domain analysis in astronomy. # Student requirements: requirements: - - Be familiar with C++ - - Basic Python - - Basic Git + - Be familiar with C++ + - Basic Python + - Basic Git # How difficult would you consider the project to be: low, medium, high difficulty: medium # Related issues (if any) to this project. # Ideally you want at least one that describes the problem it is trying to solve issues: - - https://github.com/apache/arrow/issues/48636 - - https://github.com/apache/arrow/issues/44544 - - https://github.com/apache/arrow/issues/46329 - - https://github.com/apache/arrow/issues/29558 - - https://github.com/lincc-frameworks/nested-pandas/issues/52 - - https://github.com/lincc-frameworks/nested-pandas/issues/421 - - https://github.com/pandas-dev/pandas/issues/60073 + - https://github.com/apache/arrow/issues/48636 + - https://github.com/apache/arrow/issues/44544 + - https://github.com/apache/arrow/issues/46329 + - https://github.com/apache/arrow/issues/29558 + - https://github.com/lincc-frameworks/nested-pandas/issues/52 + - https://github.com/lincc-frameworks/nested-pandas/issues/421 + - https://github.com/pandas-dev/pandas/issues/60073 # First person in contact; mentors may change before project starts. # GitHub or GitLab handles mentors: - - hombit - - delucchi-cmu - - nevencaplar + - hombit + - delucchi-cmu + - nevencaplar # The programme under this project wish to run. At the moment only GSOC is available initiatives: - - GSOC + - GSOC project_size: - - 350 h (Large) + - 350 h (Large) # Different technologies needed tags: - - c++ - - python -# suborganisation(s) to which this project belongs. + - c++ + - python +# suborganization(s) to which this project belongs. collaborating_projects: - - lincc-frameworks + - lincc-frameworks --- -## pyarrow Improvements for Astronomy - #### Description Modern astronomical surveys produce catalogs containing billions of objects, each with associated time-series (light curves) and spectral measurements. Tools like [HATS (Hierarchical Adaptive Tiling Scheme)](https://hats.readthedocs.io/en/latest/), [LSDB](https://lsdb.io), and [nested-pandas](https://github.com/lincc-frameworks/nested-pandas) enable scalable analysis of these catalogs by storing variable-length nested data (light curves, spectra) directly in Parquet files using [pyarrow](https://github.com/apache/arrow)'s nested array types. @@ -65,18 +63,18 @@ This project will contribute improvements directly to Apache Arrow, benefiting b ##### Coding starts -* Set up Arrow development environment and build from source -* Familiarize with Arrow's C++ codebase, compute kernel architecture, and Parquet reader -* Review linked issues and create detailed implementation plan +- Set up Arrow development environment and build from source +- Familiarize with Arrow's C++ codebase, compute kernel architecture, and Parquet reader +- Review linked issues and create detailed implementation plan ##### 1st evaluation -* Implement at least one new compute kernel or Parquet reader improvement -* Write unit tests and benchmarks for new functionality -* Submit initial PR to Apache Arrow +- Implement at least one new compute kernel or Parquet reader improvement +- Write unit tests and benchmarks for new functionality +- Submit initial PR to Apache Arrow ##### Final evaluation -* Complete implementation of planned improvements -* Address code review feedback and get PRs merged -* Document new functionality with examples relevant to astronomy use cases +- Complete implementation of planned improvements +- Address code review feedback and get PRs merged +- Document new functionality with examples relevant to astronomy use cases diff --git a/_projects/2026/radis/vaex_alternatives.md b/src/content/pages/gsoc/2026/radis/vaex_alternatives.md similarity index 65% rename from _projects/2026/radis/vaex_alternatives.md rename to src/content/pages/gsoc/2026/radis/vaex_alternatives.md index b92f487a..d300241d 100644 --- a/_projects/2026/radis/vaex_alternatives.md +++ b/src/content/pages/gsoc/2026/radis/vaex_alternatives.md @@ -3,39 +3,37 @@ name: Integrate a modern lazy-loading alternative for large-scale spectroscopic # add a short one line description of your project desc: Replace the unmaintained Vaex library with an actively-maintained alternative (Polars, DuckDB, or Dask) to efficiently handle large spectroscopic databases (50GB+) through lazy loading, memory mapping, and optimized I/O operations. requirements: -# Student requirements: - - Proficiency in Python and DataFrame libraries (Pandas, Polars, or similar) - - Familiarity with benchmarking and performance profiling - - Understanding of memory-efficient data processing techniques - - Experience with HDF5 or Parquet file formats is a plus + # Student requirements: + - Proficiency in Python and DataFrame libraries (Pandas, Polars, or similar) + - Familiarity with benchmarking and performance profiling + - Understanding of memory-efficient data processing techniques + - Experience with HDF5 or Parquet file formats is a plus difficulty: medium to high mentors: -# First person in contact; mentors may change before project starts. -# GitHub handles - - Prtm2110 - - minouHub + # First person in contact; mentors may change before project starts. + # GitHub handles + - Prtm2110 + - minouHub initiatives: - - GSOC + - GSOC project_size: - - 350 h (Large) + - 350 h (Large) tags: -# Different technologies needed - - Python - - Polars - - DuckDB - - Dask - - Pandas - - HDF5 - - Parquet - - Benchmarking - - Git + # Different technologies needed + - Python + - Polars + - DuckDB + - Dask + - Pandas + - HDF5 + - Parquet + - Benchmarking + - Git collaborating_projects: -# suborganisation(s) to which this project belongs. - - radis + # suborganization(s) to which this project belongs. + - radis --- -## Integrate a modern lazy-loading alternative for large-scale spectroscopic database processing - #### Description The RADIS code was developed for the characterization of plasmas, flames, and atmospheres. @@ -54,56 +52,56 @@ The selected solution should maintain or improve upon Vaex's memory efficiency w ##### Coding starts -* Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) +- Engage with the community on [💬 RADIS Slack](https://github.com/radis/slack-invite) -* Set up a development environment, become familiar with open-source tools (GitHub/Git/Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) +- Set up a development environment, become familiar with open-source tools (GitHub/Git/Tests) and [RADIS architecture](https://radis.readthedocs.io/en/latest/dev/developer.html#architecture) ##### 1st Evaluation -* Research and benchmark alternatives: Conduct systematic performance evaluation comparing Polars, DuckDB, and Dask against current Vaex implementation +- Research and benchmark alternatives: Conduct systematic performance evaluation comparing Polars, DuckDB, and Dask against current Vaex implementation -* Generate comprehensive benchmark report covering: +- Generate comprehensive benchmark report covering: - Memory usage patterns (peak memory, memory mapping efficiency) - Lazy evaluation capabilities - Integration complexity with existing RADIS codebase -* Select the optimal alternative based on benchmarking results and present findings to mentors +- Select the optimal alternative based on benchmarking results and present findings to mentors -* Begin implementation of the selected alternative in RADIS codebase: +- Begin implementation of the selected alternative in RADIS codebase: - Refactor database loading functions to use the new library - Ensure backward compatibility with existing HDF5 files - Implement lazy loading for HITEMP CO2 and H2O databases ##### 2nd Evaluation -* Implement configurable size limits and an LRU cache system for HITEMP CO2 caches using parameters in `radis.json` to control cache persistence +- Implement configurable size limits and an LRU cache system for HITEMP CO2 caches using parameters in `radis.json` to control cache persistence -* Develop comprehensive unit tests and integration tests +- Develop comprehensive unit tests and integration tests -* Profile and optimize memory usage for 50GB+ files to ensure they remain under memory limits +- Profile and optimize memory usage for 50GB+ files to ensure they remain under memory limits -* Document migration strategy and API changes +- Document migration strategy and API changes ##### Final Evaluation -* Complete integration with production-ready code: +- Complete integration with production-ready code: - Add new package to fully replace Vaex dependencies with user-selectable backend via `DATAFRAME_ENGINE` parameter in `radis.json` - Performance validation showing maintained or improved speed -* Comprehensive documentation: +- Comprehensive documentation: - User guide for database operations with the new system - Performance comparison report (before/after metrics), see `vaex_vs_pandas_performance.py` -* Identify and document additional I/O bottlenecks discovered during implementation +- Identify and document additional I/O bottlenecks discovered during implementation -* All code merged to main branch with passing CI/CD tests +- All code merged to main branch with passing CI/CD tests #### Secondary Goals -* Explore file format alternatives to HDF5 (e.g., Parquet with better compression ratios and faster I/O) +- Explore file format alternatives to HDF5 (e.g., Parquet with better compression ratios and faster I/O) -* Profile GPU acceleration opportunities for data processing operations if time permits +- Profile GPU acceleration opportunities for data processing operations if time permits -* Document architecture and developer guide for future maintainers +- Document architecture and developer guide for future maintainers -* Review pull requests from other RADIS contributors +- Review pull requests from other RADIS contributors diff --git a/_projects/2026/reltrans/profiling_reltrans.md b/src/content/pages/gsoc/2026/reltrans/profiling_reltrans.md similarity index 63% rename from _projects/2026/reltrans/profiling_reltrans.md rename to src/content/pages/gsoc/2026/reltrans/profiling_reltrans.md index 51f5f1fc..a121ef1f 100644 --- a/_projects/2026/reltrans/profiling_reltrans.md +++ b/src/content/pages/gsoc/2026/reltrans/profiling_reltrans.md @@ -3,34 +3,33 @@ name: Profiling and Performance Optimization of Reltrans desc: Code profiling to identify performance bottlenecks and implement targeted optimizations # add a short one line description of your project requirements: -# Student requirements: - - Fortran knowledge - - Use of code profiling tools + # Student requirements: + - Fortran knowledge + - Use of code profiling tools difficulty: medium # How difficult would you consider the project to be: low, medium, high issues: -# Related issues (if any) to this project. -# Ideally you want at least one that describes the problem it is trying to solve -- https://github.com/reltrans/reltrans/issues/61 + # Related issues (if any) to this project. + # Ideally you want at least one that describes the problem it is trying to solve + - https://github.com/reltrans/reltrans/issues/61 mentors: -# First person in contact; mentors may change before project starts. -# GitHub or GitLab handles - - mgullik - - matteolucchini1 + # First person in contact; mentors may change before project starts. + # GitHub or GitLab handles + - mgullik + - matteolucchini1 initiatives: -# The programme under this project wish to run. At the moment only GSOC is available - - GSOC + # The programme under this project wish to run. At the moment only GSOC is available + - GSOC project_size: - - 175 h (Medium) + - 175 h (Medium) tags: -# Different technologies needed - - fortran - - code profiling tools + # Different technologies needed + - fortran + - code profiling tools collaborating_projects: -# suborganisation(s) to which this project belongs. - - reltrans + # suborganization(s) to which this project belongs. + - reltrans --- -## Profiling and Performance Optimization of Reltrans #### Description @@ -52,20 +51,19 @@ will be implemented to reduce runtime while preserving numerical accuracy and sc The outcome will be faster model evaluations, improved scalability, and a more sustainable codebase for future development. - #### Project Milestones ##### Coding starts -* Familiarization with the code -* Setup of profiling tools and baseline performance measurements +- Familiarization with the code +- Setup of profiling tools and baseline performance measurements ##### 1st evaluation -* Identification of main performance bottlenecks -* Initial optimization and benchmarking of the most critical portion of the code +- Identification of main performance bottlenecks +- Initial optimization and benchmarking of the most critical portion of the code ##### Final evaluation -* Implementation of further targeted optimizations -* Documentation of profiling methods and optimization results \ No newline at end of file +- Implementation of further targeted optimizations +- Documentation of profiling methods and optimization results diff --git a/_projects/2026/reltrans/tutorial_and_unit-testing.md b/src/content/pages/gsoc/2026/reltrans/tutorial_and_unit-testing.md similarity index 64% rename from _projects/2026/reltrans/tutorial_and_unit-testing.md rename to src/content/pages/gsoc/2026/reltrans/tutorial_and_unit-testing.md index 26eb5482..a626f51a 100644 --- a/_projects/2026/reltrans/tutorial_and_unit-testing.md +++ b/src/content/pages/gsoc/2026/reltrans/tutorial_and_unit-testing.md @@ -3,37 +3,36 @@ name: Interactive Tutorials and Automated Testing for the Reltrans Code desc: Create a series of tutorials on how to use the reltrans code and a suite of unit tests # add a short one line description of your project requirements: -# Student requirements: - - Basic Fortran knowledge - - Implementation of Python code - - Use of python notebook + # Student requirements: + - Basic Fortran knowledge + - Implementation of Python code + - Use of python notebook difficulty: medium # How difficult would you consider the project to be: low, medium, high issues: -# Related issues (if any) to this project. -# Ideally you want at least one that describes the problem it is trying to solve -- https://github.com/reltrans/reltrans/issues/59 -- https://github.com/reltrans/reltrans/issues/60 -- https://github.com/reltrans/reltrans/issues/13 + # Related issues (if any) to this project. + # Ideally you want at least one that describes the problem it is trying to solve + - https://github.com/reltrans/reltrans/issues/59 + - https://github.com/reltrans/reltrans/issues/60 + - https://github.com/reltrans/reltrans/issues/13 mentors: -# First person in contact; mentors may change before project starts. -# GitHub or GitLab handles - - mgullik - - fjebaker + # First person in contact; mentors may change before project starts. + # GitHub or GitLab handles + - mgullik + - fjebaker initiatives: -# The programme under this project wish to run. At the moment only GSOC is available - - GSOC + # The programme under this project wish to run. At the moment only GSOC is available + - GSOC project_size: - - 350 h (Large) + - 350 h (Large) tags: -# Different technologies needed - - python - - fortran + # Different technologies needed + - python + - fortran collaborating_projects: -# suborganisation(s) to which this project belongs. - - reltrans + # suborganization(s) to which this project belongs. + - reltrans --- -## Interactive Tutorials and Automated Testing for the Reltrans Code #### Description @@ -70,25 +69,23 @@ Reltrans as a community-driven scientific software package. ##### Coding starts -* Familiarization with the Reltrans codebase, including the Fortran core and existing Python wrappers -* Review of current documentation and identification of key user workflows -* Design of the tutorial structure and outline of individual Python notebooks -* Setup of the testing framework and definition of testing standards and conventions - +- Familiarization with the Reltrans codebase, including the Fortran core and existing Python wrappers +- Review of current documentation and identification of key user workflows +- Design of the tutorial structure and outline of individual Python notebooks +- Setup of the testing framework and definition of testing standards and conventions ##### 1st evaluation -* Delivery of initial Python notebook tutorials covering: +- Delivery of initial Python notebook tutorials covering: - Installation and environment setup - Basic usage of the Python interface - Core functionality and typical analysis workflows -* Implementation of unit tests for the most critical components of the Python wrappers -* Initial integration of tests into the existing development workflow - +- Implementation of unit tests for the most critical components of the Python wrappers +- Initial integration of tests into the existing development workflow ##### Final evaluation -* Completion of the full tutorial series, including advanced usage examples and best practices -* Expanded unit test coverage, including edge cases and regression tests -* Documentation for contributors explaining how to extend both the tutorials and the test suite -* Final code cleanup and preparation for long-term maintenance +- Completion of the full tutorial series, including advanced usage examples and best practices +- Expanded unit test coverage, including edge cases and regression tests +- Documentation for contributors explaining how to extend both the tutorials and the test suite +- Final code cleanup and preparation for long-term maintenance diff --git a/_projects/2026/sunpy/radiospectra.md b/src/content/pages/gsoc/2026/sunpy/radiospectra.md similarity index 88% rename from _projects/2026/sunpy/radiospectra.md rename to src/content/pages/gsoc/2026/sunpy/radiospectra.md index 7dd6bde3..867861aa 100644 --- a/_projects/2026/sunpy/radiospectra.md +++ b/src/content/pages/gsoc/2026/sunpy/radiospectra.md @@ -4,38 +4,36 @@ name: Improving radiospectra’s Functionality and Interoperability desc: Improving radiospectra’s interoperability by redesining the spectral data container and adding commonly requested usability features # Student requirements: requirements: - - python + - python # How difficult would you consider the project to be: low, medium, high difficulty: high # Related issues (if any) to this project. # Ideally you want at least one that describes the problem it is trying to solve issues: -- https://github.com/sunpy/radiospectra/issues/82 -- https://github.com/sunpy/radiospectra/issues/85 -- https://github.com/sunpy/radiospectra/issues/129 -- https://github.com/sunpy/radiospectra/issues/53 + - https://github.com/sunpy/radiospectra/issues/82 + - https://github.com/sunpy/radiospectra/issues/85 + - https://github.com/sunpy/radiospectra/issues/129 + - https://github.com/sunpy/radiospectra/issues/53 # First person in contact; mentors may change before project starts. # GitHub or GitLab handles mentors: - - samaloney - - hayesla + - samaloney + - hayesla # The programme under this project wish to run. At the moment only GSOC is available initiatives: - - GSOC + - GSOC project_size: - - 350 h (Large) + - 350 h (Large) # Different technologies needed tags: - - python + - python -# suborganisation(s) to which this project belongs. +# suborganization(s) to which this project belongs. collaborating_projects: - - sunpy + - sunpy --- -## Improving radiospectra's functionality and interoperability - #### Description Solar radio spectrograms are a fundamental data product for studying energetic and transient processes in the solar atmosphere. The `sunpy/radiospectra` package provides foundational support for working with such data, but its current capabilities are limited and not well aligned with modern SunPy and scientific Python data models. @@ -47,6 +45,7 @@ The result will be a modern, extensible, and user-friendly foundation for radio ##### Expected Outcomes By the end of the project the contributor will deliver: + - A redesigned, coordinate-aware Spectra object with a clear external API that: - Provides a WCS-like mapping from physical coordinates (time, frequency) to array indices - Supports axis-aware operations (e.g., slicing, scaling, statistics) by index or coordinate @@ -59,13 +58,13 @@ By the end of the project the contributor will deliver: - Coordinate slicing and analysis workflows - Background subtraction use cases - Improved plotting of gappy spectral data - - Updated documentation and test coverage to support new functionality +- Updated documentation and test coverage to support new functionality #### Project Milestones ##### Coding starts -- Get familiar with the SunPy organisation and the radiospectra codebase +- Get familiar with the SunPy organization and the radiospectra codebase - Review existing radiospectra functionality and open issues - Discuss and refine design choices for the Spectra data model with mentors - Survey existing approaches (NDCube, xarray, Astropy WCS) and agree on an implementation plan diff --git a/_projects/_template.md b/src/content/pages/gsoc/_project_template.md similarity index 74% rename from _projects/_template.md rename to src/content/pages/gsoc/_project_template.md index 9b42ab51..db3c3315 100644 --- a/_projects/_template.md +++ b/src/content/pages/gsoc/_project_template.md @@ -1,40 +1,41 @@ --- name: Example project # Add a short one line description of your project -desc: This is the first idea for suborg +desc: This is the first idea for sub-org # Student requirements: requirements: - - Knowledge on pythonic physics. - - Familiar with numerical methods + - Knowledge on pythonic physics. + - Familiar with numerical methods # How difficult would you consider the project to be: low, medium, high difficulty: low # Related issues (if any) to this project. # Ideally you want at least one that describes the problem it is trying to solve issues: - - https://github.com/org/org_repo/issues/4444 - - https://github.com/org/org_repo/issues/5555 + - https://github.com/org/org_repo/issues/4444 + - https://github.com/org/org_repo/issues/5555 # First person in contact; mentors may change before project starts. # GitHub or GitLab handles mentors: - - astrorobot + - astrorobot # The programme under this project wish to run. At the moment only GSOC is available initiatives: - - GSOC + - GSOC +# Pick one size. project_size: - - 90 h (Small) - - 175 h (Medium) - - 350 h (Large) + - 90 h (Small) + - 175 h (Medium) + - 350 h (Large) # Different technologies needed tags: - - python - - postgres -# suborganisation(s) to which this project belongs. + - python + - postgres +# Sub-organization(s) to which this project belongs. collaborating_projects: - - astropy - - juliaAstro + - astropy + - juliaAstro --- -# This is an awesome project idea for suborg. +# This is an awesome project idea for suborg ## Description @@ -54,12 +55,12 @@ quam. ### Coding starts -* Be awesome +- Be awesome ### 1st evaluation -* Have done awesome stuff. +- Have done awesome stuff. ### Final evaluation -* Finished the awesome stuff. +- Finished the awesome stuff. diff --git a/src/content/pages/gsoc/background.md b/src/content/pages/gsoc/background.md new file mode 100644 index 00000000..aea7dfc4 --- /dev/null +++ b/src/content/pages/gsoc/background.md @@ -0,0 +1,86 @@ +--- +title: "Background on GSoC: Start Here!" +show_main: false +--- + +# Background on GSoC: Start Here + +## What is Google Summer of Code (GSoC)? + +Google Summer of Code is a remote summer coding program funded by Google. +Google distributes funds to open software development organizations to recruit new developers and mentors for summer mentorships. +You will get paid to write software at home (or wherever you like), with guidance from expert mentors distributed around the globe. + +To apply to be a GSoC contributor, you must write an application to [GSoC] for one or more OpenAstronomy project ideas. +Each summer, [several projects][oa projects] are offered by [OpenAstronomy mentors][oa mentors], with well-defined scope and pre-requisite experience. +If you are selected by OpenAstronomy, you will become a GSoC contributor. + +## What is OpenAstronomy (OA)? + +OpenAstronomy is an umbrella organization which acts as an interface between the Google Summer of Code and several open source, open development projects in the astronomical community, including [astropy], [sunpy], and [many other astronomy projects][oa members]. +It coordinates mentors and projects for Google Summer of Code mentorships related to astronomy. + +## What is the application process? + +You must submit your application to the [Google Summer of Code][GSoC], but it is very important that you also share it well before the deadline with your potential project mentors and the rest of the community. +They will be able to give you feedback before officially submitting it, but this is difficult to do if a propsoal draft is shared with less than 7 days before the deadline. + +The [application] process is currently described by our [gsoc-proposals repository](https://github.com/OpenAstronomy/gsoc-proposals) and is required to be accepted. +It is very possible that the project has its own template and you can use that when submitting to GSOC but for the gsoc-proposals repository, you must follow that template. + +You can also find applications from previous years in the GitHub wiki pages of some of the OpenAstronomy members. +The more details on applying are in the [GSoC Contributor Guide]. + +## Who is eligible to apply to GSoC? + +Until 2021, GSoC was a programme eligible exclusively to university students. +The ultimate goal of GSoC has always been to attract and retain new open source contributors. +Hence, as of its 2022 edition, the student status is no longer required, and one is eligible to take part in GSoC as long as they are an "open source beginner". + +On the OpenAstronomy side, we actively seek self-motivated applicants with _some_ experience developing software regardless of programming language. +We are especially looking for individuals who are genuinely interested in developing open source software. +You don't need to be a Python guru or an astronomical coordinate system expert to be eligible -- projects are available that cover a range of previous experience in Python and astronomy. +Individuals from any background from anywhere around the world are encouraged to apply. + +## Testimonials + +> In the summer after my second year of graudate school, I didn't have funding +> to work on any projects in my home department. I applied and was selected for +> GSoC 2015, and I worked with another student and several encouraging mentors on +> developing a new astropy affiliated package, called +> [astroplan](http://astroplan.readthedocs.io/). The program greatly improved +> my coding style, taught me loads about managing large projects, version control, +> testing, and packaging. Do you have a summer without research funding? Apply! + +[Brett Morris][bmorris3], Astro PhD student, GSoC 2015 + +> After spending the summer of 2015 as an intern at NIST, I got really +> fascinated by how much Python aided scientists get the best out their data. +> Then, while looking for Python projects to perform data fitting and modeling, +> I found AstroPy. I got really surprised by how easy and intuitive data fitting +> can be done with the astropy API. That motivated me to start learning git and +> later contributing code and documentation for the project. Then in the summer +> of 2016 I applied to the GSoC to work on PSF photometry for +> [photutils](https://www.github.com/astropy/photutils) and got selected! :) +> One of the best parts of the GSoC was the amount of learning I got by being +> mentored by experts in software development and astronomy! If you want to know +> more about my journey during the GSoC 2016 see my +> [blog posts](https://openastronomy.org/Universe_OA/authors/ze-vinicius/). + +[Zé Vinícius][mirca], EE undergraduate student, GSoC 2016 + +## Apply + +Now that you know you're a good candidate, check out the [GSoC Contributor Guide] to learn how to apply. +Also check out [the OpenAstronomy Contributor Guidelines.](../contributor_guidelines/) + +[GSoC]: https://summerofcode.withgoogle.com/ +[oa projects]: ../2026/ +[oa mentors]: ../2026/#mentors +[astropy]: http://www.astropy.org +[sunpy]: http://sunpy.org +[oa members]: ../../members/ +[application]: https://github.com/OpenAstronomy/gsoc-proposals/blob/main/template.md +[GSoC Contributor Guide]: https://google.github.io/gsocguides/student/ +[bmorris3]: https://github.com/bmorris3 +[mirca]: https://github.com/mirca diff --git a/src/content/pages/gsoc/contributor_guidelines.md b/src/content/pages/gsoc/contributor_guidelines.md new file mode 100644 index 00000000..e594f558 --- /dev/null +++ b/src/content/pages/gsoc/contributor_guidelines.md @@ -0,0 +1,107 @@ +--- +title: "GSoC Contributor Application Guidelines" +show_main: false +--- + +# GSoC Contributor Application Guidelines + +## What are the requirements to be accepted for GSoC? + +[These are the formal requirements from Google](https://developers.google.com/open-source/gsoc/faq#what_are_the_eligibility_requirements_for_participation). +There are OpenAstronomy requirements below which you have to also follow. + +## Communication Channels + +OpenAstronomy is a collaboration between open source astronomy and astrophysics projects and as such, to get help you need to find the specific project you are interested in: + +1. Browse the **[Project Ideas Page](../)** to find a project that interests you. +2. Check the **[Members Page](../../members/)** to find the chat links for that specific organization. +3. Join _that_ organization's chat to talk to the mentors! + +--- + +If you want to apply to OpenAstronomy to participate in GSoC there are many things you can do to improve your application. +Many of OpenAstronomy's admins and mentors have participated in previous editions of GSoC with their projects, so will be able to answer any questions you might have, come talk to us on the [OpenAstronomy discourse](https://community.openastronomy.org). + +There are many guidelines on writing a good application and how to increase your chances, this guide covers the most important things to OpenAstronomy. +However, you should also checkout the [GSoC Contributor Guide], the [Python Software Foundation] guide, the [Astropy GSoC guidelines] and the [SymPy Guidelines] to name but a few. +It is also possible each OA member has their own guidelines, and you should ask when you interact with them. + +Some general pointers to follow are: + +- **The better we know you, the better we can judge your application.** + There are many ways to get yourself known by the community, you can introduce yourself through the [OpenAstronomy discourse](https://community.openastronomy.org) and if required contact the mentors to know more about certain project. + However, contacting mentors through email or direct messages is discouraged, and contacting them in public channels is the preferred way to provide answers to multiple people at once. + Also, when you have a particular idea in mind, get in touch with that project and introduce yourself. + For example, `astropy` projects, follow the contact guidance in the [Astropy GSoC guidelines] and do not send an email to the `astropy-dev` list. + It is important that you follow the guidance for any OA member. + +- **Become a user!** + Download one or more of the OpenAstronomy projects and start experimenting with the code. + Look at the [latest pictures of the million degree Sun] with [SunPy](http://sunpy.org/), [volume render a simulation of the galaxy] with [yt](http://yt-project.org/), or [plan some astronomical observations] with [Astropy](http://www.astropy.org) + There are loads of things to do with all the projects involved with OpenAstronomy, get involved! + +- **Set yourself up as a developer.** + Create an account on [GitHub](http://github.com) or the code hosting platform the organization is using. + Don't know how to use [git](http://www.git-scm.com/)? + Don't worry, there are lots of git [tutorials](https://docs.github.com/en/get-started/getting-started-with-git/set-up-git) [online](http://gitimmersion.com/) that will help you to get quite confident with it in a short time. + Also both the [Astropy](http://docs.astropy.org/en/stable/index.html#developer-documentation) + and [yt](http://yt-project.org/docs/dev/developing/developing.html) developer guides are great reads no matter what project you are thinking of working on. + +
    + +**If you get stuck ask on the forum or chat rooms for help and volunteers will support you.** + +
    + +0. **Respect the AI policies.** + Much of the [open source ecosystem is suffering due to AI slop][ai-slop-summary]. + Do not contribute low-quality AI-generated content; doing so can lead to being banned from the organization. + This is not to say that you cannot use AI tools to support learning. + You can, while following each sub-org policy. + If you do not find an AI policy for a sub-org, assume AI-generated contributions are not allowed. + +1. **Start to be a developer.** + Checkout the issue lists of the projects to see if there is something that you could do. + **You will be expected to submit a pull request to one of the OpenAstronomy projects before you submit your application (it does not have to be accepted, but it has to be something that shows your code abilities!).** + This requirement is to show that you know how git, github, pull requests and reviews work and allows mentors to evaluate all applications based on a real code contribution, instead of e.g., the name of a specific school. + GSoC is a short program and we want to make sure you are ready to start immediately. + If you have previously contributed to OpenAstronomy projects, you can point to those pull requests, too. + +2. **Plan your application.** + Think which is your favorite project from the [ideas page](../) or think of a new one that will help out one of the OpenAstronomy members. + Prepare a plan on how you will tackle that project and the time it will take you to solve it. + Do not worry much in providing exact dates, but plan it as best as you can (if you are planing to have some holidays during the GSoC programme, then you should mention it too). + Use [our application template][gsoc-proposal-template] to describe how you plan to do the work during the programme. + Add your draft to the [gsoc-proposals](https://github.com/OpenAstronomy/gsoc-proposals) repository. + This is where to receive feedback. + Follow the instructions in that repository to submit your proposal. + Also, don't be afraid to ask your potential mentors for help. + Don't be shy when describing yourself! + +3. **Submit your application.** + Besides adding your proposal to the gsoc-proposals repository, you also need to [submit your application](https://summerofcode.withgoogle.com/) before the deadline. + **You must submit it there.** + Please include the sub-org name at the start of your proposal title as `[] `, + where `` should be the name of the sub-org in lower case (e.g., `sunpy`, `stingray`, `radis`), + or the combination of two if it's the case (e.g., `astropy|sunpy`). + Only proposals present in both the gsoc-proposals repository and the GSoC platform will be considered. + +### What are my obligations as a contributor during GSoC? + +We expect you to: + +- Be online and active during your working hours in your sub-organization chat. +- Publish a blog post at least once every two weeks. +- Participate in weekly meetings with your mentors. +- Contact your mentors or OpenAstronomy admins early if any issues arise. + +[SymPy Guidelines]: https://github.com/sympy/sympy/wiki/GSoC-2017-Application-Template +[Python Software Foundation]: http://python-gsoc.org/ +[GSoC Contributor Guide]: https://google.github.io/gsocguides/student/ +[Astropy GSoC guidelines]: https://github.com/astropy/astropy/wiki/GSoC-Guidelines +[latest pictures of the million degree Sun]: https://docs.sunpy.org/en/stable/generated/gallery/map/composite_map_AIA_HMI.html +[volume render a simulation of the galaxy]: http://yt-project.org/docs/dev/quickstart/volume_rendering.html +[plan some astronomical observations]: https://learn.astropy.org +[gsoc-proposal-template]: https://github.com/OpenAstronomy/gsoc-proposals/blob/main/template.md +[ai-slop-summary]: https://redmonk.com/kholterhoff/2026/02/03/ai-slopageddon-and-the-oss-maintainers/ diff --git a/src/content/pages/gsoc/index.md b/src/content/pages/gsoc/index.md new file mode 100644 index 00000000..d28ea217 --- /dev/null +++ b/src/content/pages/gsoc/index.md @@ -0,0 +1,66 @@ +--- +title: Google Summer of Code +--- + +## New to Google Summer of Code (GSoC)? + +[We provide some background on GSoC right here!](./background/) + +## GSoC & OpenAstronomy + +OpenAstronomy is an umbrella organization which collects project ideas from any of its members and has been a mentoring organization since 2016. + +Contributor applications to OpenAstronomy projects follows the same rules as the [Python Software Foundation] and the [GSoC Contributor Guide]. +[We have also our own guide on what we consider a good application for OpenAstronomy.][OpenAstronomy Contributor Guide] + +All contributors blogs are collected on the [OpenAstronomy Universe] site. + +## Quick Links + +- [OpenAstronomy Contributor Guide] +- [GSoC Contributor Guide] +- [Now You Know It!: Getting selected in Outreachy by Kriti Singh] + +

    Current Project ideas for GSoC 2026

    + +- [2026](./2026/) + +
    + +
    +Previous editions + +
    + +## Info for sub-organizations' admins + +Whether you have been participating for years or this is your first time [read our guide for sub-org admins.](./suborg_guidelines/) + +## Related Organizations + +OpenAstronomy is closely related to other organizations that support open-source scientific computing: + +- [NumFOCUS](https://numfocus.org/) - Supports open-source scientific computing projects, including many under OpenAstronomy [and also participates in GSoC.](https://numfocus.org/community/google-summer-of-code) +- [Python Software Foundation](https://www.python.org/) - Oversees GSoC projects for the broader Python ecosystem [and also participates in GSoC.](http://python-gsoc.org/) +- [TARDIS](https://tardis-sn.github.io/) - A radiative transfer code for supernovae, [also participating in GSoC](https://tardis-sn.github.io/summer_of_code/gsoc_start/) + +These organizations collaborate on various scientific computing initiatives and GSoC at times. + +[OpenAstronomy Contributor Guide]: ./contributor_guidelines/ +[Python Software Foundation]: http://python-gsoc.org/ +[GSoC Contributor Guide]: https://google.github.io/gsocguides/student/ +[OpenAstronomy Universe]: http://openastronomy.org/Universe_OA/ +[Now You Know It!: Getting selected in Outreachy by Kriti Singh]: https://github.com/kritisingh1/numpy/wiki/Now-You-Know-It!-:-Getting-selected-in-Outreachy diff --git a/src/content/pages/gsoc/suborg_guidelines.md b/src/content/pages/gsoc/suborg_guidelines.md new file mode 100644 index 00000000..1581946b --- /dev/null +++ b/src/content/pages/gsoc/suborg_guidelines.md @@ -0,0 +1,159 @@ +--- +title: "GSoC Sub-organizations Guidelines" +show_main: false +--- + +# GSoC Sub-organizations Guidelines + +OpenAstronomy has been accepted as an umbrella organization since 2016. +We will keep applying every year, but that doesn't mean we will always be selected. +If selected, we don't know the number of slots we will get till the contributor selection process ends. +However, it's our intention to keep the process fair for the sub-organizations and contributors. + +## I want to propose a new sub-org, what do I do? + +First, we recommend you to carefully read [Google's notes for first year organizations][Google-notes] and [the PSF guidelines for sub orgs][PSF-sub-orgs], which provide a general idea about the goals and concepts underpinning the Google Summer of Code program. +Then, you need to be a member of the OpenAstronomy team. +That process is simple (and free!). +You need to be an open-development organization and be related with astronomy. +Then make a pull-request to [our repository][OA repository] adding a logo, a short description, etc. +Follow the instructions in the example at the bottom of [the `members.json` file][members PR]. +The steering council will review your application and give you feedback. + +Once a member, you can start the path to participate on GSoC! +First you should get familiarized with the program, [Google's mentor guide] is a wonderful resource with detailed information of every aspect of it. +You need the following: + +- Time! How much? a fair bit. +- Ideas! How many? One is enough. How good? more about this below. +- Helpers! You need mentors, at least two mentors per idea. + +Let's look into that in more detail: + +### Time + +The program has a few deadlines, and Google won't extend them even if their system is down closer to the end. +They always allow a fair amount of time to submit whatever is needed. +To be on the safe side of this, OpenAstronomy imposes a deadline of one day before Google's. +You (and the contributors) will receive a reminder from the OpenAstronomy admins before such deadline. +If you fail to meet these deadlines, your sub-org and contributors may be affected. + +Besides these deadlines, as a sub-org admin, you will have to keep track of all your contributors and mentors, following how they are doing with their projects and making sure they communicate regularly. + +### Ideas + +Normally organizations provide a list of ideas that can be done by a contributor in approximately three months (working full-time). +Take a look at what [Google says on how to define a project](https://google.github.io/gsocguides/mentor/defining-a-project-ideas-list), then look at [other ideas OpenAstronomy's members have proposed this or previous years.](../#current-projects). + +To add your own, you will have to create a pull-request to [our repository][OA repository] following the [template](../_project_template/). +Take a look at [how others have done it before](https://github.com/OpenAstronomy/openastronomy.github.io/pull/182). +The admins and other members will review your ideas and provide feedback. +Once done, they will be merged and displayed on our website. + +It's also possible that a contributor comes up with their own ideas! +That's OK, the only limitation is that either the contributor or the admin will have to find a mentor for that idea who is familiar with the programming language, the repository, and the idea in itself. + +#### What do I need for my project idea? + +Everything you need is a title and description of the project idea, a set of requirements for potential contributors (_e.g._, proficiency with `astropy.tables` and `astropy.units`), and a list of potential mentors. +In addition, please link any related issues or tickets to the project idea, if any. +Lastly, make sure to indicate the level of difficulty of the project. + +In case your project idea already has specific milestones, please add them so as to make contributors aware when they start writing their applications. +If the project milestones are open ended and you would like to hear input from other members of the community, that is fine too! + +### Mentors + +For each project idea you need to have at least **two** mentors that are committed to participate in the programme. +The mentors need most importantly be familiar with the repository, normally they are real core-contributors, they need to be familiar with the idea and have some idea on how that could be implemented. + +The mentors also need to have time for the project. +We expect around 10 hours per week (not only to mentoring, but to the organization in itself). +That time varies depending from project to project. +But a minimum they should have a hour per week to discuss with the contributor their progress. +This can be done as a 10 minutes per day, or as 1 hour video-call. +Additionally, they will need to review the contributor code, discuss with other core-members to tell how the project is evolving, etc. + +Why two mentors? +Mentors do also need a break. +They may have a conference to attend or simply they could disappear from the project. +Having two mentors will help to keep continuity to the contributor project and brings more knowledge to the table. + +Though we are not too strict about the availability of the mentors, we suggest they are at least one hour per day - in a non-crazy hour for contributor and mentor - at the chat room of the organization. +So the contributor can ask the questions needed on the organization room. +This can also be done via e-mail, but we believe the contributors need to familiarize with the rest of the community. +(Plus others can help if the mentors are unavailable). + +Oh, and yes, **you** as an admin can also be a mentor and don't forget to tell them to read [Google's mentor guide]. + +## GSoC starts + +If we are accepted... what happens next? +First, have you read the [mentor guide][Google's mentor guide]? +If so, take a look at it again as a refresher! + +The application period for contributors is open just for two weeks. +However, they will know for more than a month which organizations are participating. +Even some contributors start to show interest from way before that!! +The main purpose of the programme is to bring new contributors to the organization, so the more they engage the better for your organization. +The dream contributor is that one that becomes mentor in the following years. + +### Contributor application + +Contributors will apply via the [GSoC portal][GSOC]. +If it's not there, their application doesn't count. +OpenAstronomy offers [a template for the contributors to apply][template-application-wiki]. +Some sub-orgs require they post publicly their application on their wiki ([see for example SunPy's](https://github.com/sunpy/sunpy/wiki/GSoC)), others don't. +In any case, it's good to encourage the contributors to share the draft of their applications with the mentors, so they can improve it before the deadline. + +OpenAstronomy has [certain rules for an application to be considered][contributor guidelines]. +Familiarize with them to be able to inform your mentors and candidates. + +### Applications evaluation + +Each sub-org will have to evaluate the contributor application using a shared document within all the mentors. +The OpenAstronomy administrators will share them with you. +There you will grade the application, the engagement of the contributor shown so far, the quality of the pull request to the organization, any notes from an interview you may do, etc. + +### Slots allocation + +Based on the numbers of mentors and outstanding applications your sub-org has, you will ask for a number of slots to the Open Astronomy administrators. +They will collect these numbers from all the other sub-org and request them to Google. + +Google will then, after a few days, tell us how many slots we get. +Nobody knows them _a priori_, and they vary considerably year after year. + +If the number of slots obtained is smaller than the requested, then the steering council will decide the distribution of the slots using the following points as guidelines: + +- The quality of the contributor proposal. + A well-structured and described project will be favored, not simply a copy/paste from the ideas page. +- What's the likelihood of that candidate contributor to become a long-term contributor? + How has the contributor engaged till now? +- Commitment of the mentors for the project. + The mentors need to show they have committed to the sub-org and OpenAstronomy, and evidence of this will make the slot more likely to be allocated. + For example, it is best to have mentors that have contributed to the organization's codebase and are familiar with the language and topic. +- A project that enables cooperation with other sub-organizations of OpenAstronomy will generally be favored over those that do not. + +The process will be as open as possible including only the admins and mentors involved in the selection. +Remember, we cannot disclose any information on contributor selection to the contributors before Google announces the selected contributors + +Note that OpenAstronomy usually assigns one slot for first year sub-orgs. +That may change in a case-by-case basis, e.g., the sub-organization already participated in previous editions of the GSoC (either by itself or with another umbrella organization), or has experience with similar coding outreach programmes, such as [ESA-SOCIS][ESA-SOCIS]. + +### Evaluations + +Once the programme starts each contributor has to pass an evaluation per month. +If one of them is failed (or not provided on time), the contributor cannot continue in the programme and therefore, not get paid. + +OpenAstronomy has also set a set of obligations for the contributors to do during the programme (e.g., a blog post every two weeks describing their progress, telecommuting with mentors weekly). +If they are not followed the administrators will fail the contributors. + +[OA repository]: https://github.com/OpenAstronomy/openastronomy.github.io +[contributor guidelines]: ../contributor_guidelines/ +[Google's mentor guide]: https://google.github.io/gsocguides/mentor/ +[GSOC]: https://summerofcode.withgoogle.com/ +[members PR]: https://github.com/OpenAstronomy/openastronomy.github.io/blob/master/_data/members.yaml +[ESA-SOCIS]: https://www.esa.int/Enabling_Support/Space_Engineering_Technology/SOCIS_The_ESA_Summer_of_Code_in_Space +[Google-notes]: https://google.github.io/gsocguides/mentor/notes-for-first-year-organizations +[PSF-sub-orgs]: https://python-gsoc.org/mentors.html#sub-orgs +[template-application-wiki]: https://github.com/OpenAstronomy/openastronomy.github.io/wiki/Contributor-Application-template diff --git a/_posts/2016-01-15-Workshop.md b/src/content/posts/2016-01-15-Workshop.md similarity index 93% rename from _posts/2016-01-15-Workshop.md rename to src/content/posts/2016-01-15-Workshop.md index bfcb58ff..22da21ae 100644 --- a/_posts/2016-01-15-Workshop.md +++ b/src/content/posts/2016-01-15-Workshop.md @@ -1,5 +1,4 @@ --- -layout: post title: First OpenAstronomy - Software Carpentry Workshop date: 2016-01-15 @@ -12,13 +11,13 @@ We all brought different expertise and shared the teaching out to keep the works We used the red-green post-it technique suggested by software carpentry as a way to know how people were getting on during the sessions, also, for every session the learners were asked to use these post-it notes to give us feedback on the session (green for something good you've learnt, red for something that can be improved). This not just helped us for the next workshop, but it also helped to the next instructor that day! -David teaching bash +David teaching bash As usual there were some software setup issues at the beginning of the week, however we were very close! Only one person from the whole class has troubles with the Jupyter notebook - it simply was not able to execute any command within. We didn't manage to fix the problem, but probably it was the oldest laptop (running Windows 7) in the class. Beside that case, we come across a couple of other problems with other windows machines, in one of them `git log` was blocking the screen and the other could not open the text editor (Notepad++ in this case) when executing `commit` (or `merge` with the default message). -Each day we updated the [official repository](https://github.com/OpenAstronomy/2016-01-11_Sheffield_Notes) with lesson templates in Jupyter notebook format, where an outline of the class was available, and the code cells were empty to be filled in while following the lecture. Once we completed a session, the notes can be browsed [here](http://nbviewer.jupyter.org/github/OpenAstronomy/2016-01-11_Sheffield_Notes/blob/master/index.ipynb). +Each day we updated the [official repository](https://github.com/OpenAstronomy/2016-01-11_Sheffield_Notes) with lesson templates in Jupyter notebook format, where an outline of the class was available, and the code cells were empty to be filled in while following the lecture. Once we completed a session, the notes can be browsed in [the workshop notes](http://nbviewer.jupyter.org/github/OpenAstronomy/2016-01-11_Sheffield_Notes/blob/master/index.ipynb). In this way everyone had to `fork` our repository on github, then `pull` at the start of every session from `upstream` and `push` at the end to their `origin`. This cemented the work at the start of the week on git+GitHub, while making sure everyone had a backup of all the work they had completed during the week and learning the usual git workflow of contributing to a larger project on GitHub. Thanks to the visualisations on GitHub we can see how all [these forks evolved](https://github.com/OpenAstronomy/2016-01-11_Sheffield_Notes/network), and see if the participants keep using GitHub!! diff --git a/_posts/2018-09-24-dotastro.md b/src/content/posts/2018-09-24-dotastro.md similarity index 94% rename from _posts/2018-09-24-dotastro.md rename to src/content/posts/2018-09-24-dotastro.md index 2fe46f80..22889568 100644 --- a/_posts/2018-09-24-dotastro.md +++ b/src/content/posts/2018-09-24-dotastro.md @@ -1,5 +1,4 @@ --- -layout: post title: 2018 September 24-27 - .Astronomy X date: 2018-09-24 diff --git a/_posts/2019-07-29-pyastro.md b/src/content/posts/2019-07-29-pyastro.md similarity index 95% rename from _posts/2019-07-29-pyastro.md rename to src/content/posts/2019-07-29-pyastro.md index 5b306737..d3a7a077 100644 --- a/_posts/2019-07-29-pyastro.md +++ b/src/content/posts/2019-07-29-pyastro.md @@ -1,5 +1,4 @@ --- -layout: post title: 2019 Jul 29 - Aug 2 - Python in Astronomy date: 2019-07-29 @@ -8,4 +7,3 @@ date: 2019-07-29 The Python in Astronomy conference will be held at the Space Telescope Science Institute in Baltimore during July 29th - August 2nd. Check out the [conference website](http://openastronomy.org/pyastro/2019/) for more information. - diff --git a/src/data/gsoc-admins.json b/src/data/gsoc-admins.json new file mode 100644 index 00000000..e275dc2c --- /dev/null +++ b/src/data/gsoc-admins.json @@ -0,0 +1,12 @@ +{ + "2017": ["dpshelio", "Cadair", "taldcroft", "eteq"], + "2018": ["dpshelio", "bsipocz"], + "2019": ["dpshelio", "bsipocz", "mirca"], + "2020": ["dpshelio", "bsipocz", "mirca"], + "2021": ["dpshelio", "bsipocz", "mirca"], + "2022": ["dpshelio", "bsipocz", "mirca"], + "2023": ["dpshelio", "bsipocz", "mirca"], + "2024": ["dpshelio", "bsipocz", "mirca"], + "2025": ["dpshelio", "bsipocz", "mirca", "nabobalis"], + "2026": ["dpshelio", "bsipocz", "mirca", "nabobalis"] +} diff --git a/src/data/icons.json b/src/data/icons.json new file mode 100644 index 00000000..a250869d --- /dev/null +++ b/src/data/icons.json @@ -0,0 +1,8 @@ +{ + "gh_logo": "M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z", + "bb_logo": "M29.208,3.519c-0.203-0.285-0.451-0.525-0.729-0.738c-0.61-0.475-1.297-0.814-2.01-1.102c-1.516-0.611-3.097-0.971-4.701-1.229C19.81,0.137,17.836,0.012,15.762,0c-1.854,0.016-3.797,0.133-5.725,0.434C8.668,0.649,7.316,0.94,6.002,1.385c-0.869,0.297-1.71,0.649-2.477,1.164C3.16,2.793,2.824,3.07,2.549,3.418C2.205,3.856,2.058,4.344,2.147,4.897C2.32,5.989,2.48,7.082,2.66,8.169c0.264,1.611,0.537,3.222,0.811,4.828c0.306,1.787,0.62,3.573,0.918,5.36c0.07,0.416,0.246,0.769,0.526,1.07c0.179,0.193,0.37,0.377,0.574,0.543c0.73,0.59,1.562,1.01,2.432,1.354c2.082,0.83,4.259,1.205,6.485,1.328c1.616,0.09,3.23,0.033,4.838-0.187c1.369-0.185,2.709-0.479,4.011-0.948c0.965-0.349,1.891-0.775,2.725-1.382c0.355-0.26,0.683-0.547,0.945-0.901c0.181-0.238,0.305-0.504,0.354-0.805c0.397-2.341,0.809-4.679,1.196-7.021c0.362-2.172,0.701-4.346,1.058-6.518C29.617,4.388,29.502,3.935,29.208,3.519z M15.82,19.64c-2.4-0.008-4.341-1.971-4.333-4.383c0.006-2.41,1.958-4.347,4.369-4.338c2.425,0.008,4.359,1.961,4.35,4.387C20.195,17.704,18.227,19.648,15.82,19.64z M24.522,4.394c-0.124,0.139-0.274,0.262-0.436,0.357c-0.45,0.268-0.951,0.409-1.454,0.541c-0.952,0.243-1.923,0.383-2.896,0.485c-1.281,0.136-2.565,0.183-3.791,0.188c-1.49-0.008-2.914-0.068-4.332-0.238c-1.064-0.129-2.124-0.291-3.146-0.633C8.164,4.99,7.869,4.858,7.584,4.713C7.438,4.641,7.309,4.528,7.198,4.409c-0.197-0.215-0.196-0.45,0.005-0.663C7.32,3.621,7.463,3.514,7.61,3.43C8.034,3.184,8.5,3.041,8.969,2.918c0.983-0.256,1.985-0.402,2.994-0.509c1.652-0.17,3.308-0.221,4.967-0.172c1.524,0.045,3.045,0.158,4.55,0.431c0.706,0.127,1.407,0.274,2.075,0.545c0.236,0.096,0.463,0.217,0.683,0.346c0.109,0.064,0.208,0.164,0.288,0.266C24.668,4.007,24.674,4.222,24.522,4.394z M26.186,22.761c0.009,0.088-0.004,0.183-0.021,0.271c-0.305,1.604-0.614,3.205-0.911,4.811c-0.101,0.539-0.344,0.99-0.724,1.377c-0.422,0.432-0.918,0.752-1.448,1.023c-0.979,0.498-2.018,0.811-3.085,1.031c-1.377,0.286-2.771,0.414-3.563,0.407c-2.41-0.006-4.184-0.198-5.917-0.698c-0.802-0.23-1.577-0.529-2.3-0.953c-0.379-0.222-0.732-0.478-1.042-0.789c-0.388-0.392-0.64-0.846-0.741-1.396c-0.296-1.604-0.609-3.207-0.915-4.81c-0.016-0.081-0.021-0.163-0.019-0.245c0.019-0.394,0.37-0.597,0.724-0.423c0.036,0.021,0.072,0.041,0.105,0.063c1.174,0.853,2.484,1.423,3.858,1.856c1.262,0.4,2.556,0.641,3.873,0.758c1.52,0.138,3.031,0.104,4.54-0.11c2-0.28,3.91-0.851,5.687-1.827c0.354-0.194,0.686-0.43,1.025-0.646c0.056-0.035,0.108-0.076,0.167-0.104C25.819,22.206,26.153,22.395,26.186,22.761z M18.027,15.284c-0.005,1.203-0.992,2.184-2.197,2.178c-1.205-0.004-2.178-0.987-2.172-2.196c0.004-1.212,0.98-2.181,2.192-2.175C17.059,13.097,18.03,14.073,18.027,15.284z", + "sf_logo": "m0.10973,10.304c-0.063715-0.064-0.10973-0.3695-0.10973-0.7287,0-0.518,0.028754-0.6339,0.17686-0.7132,0.10645-0.056966,0.97285-0.094654,2.1762-0.094654,1.4331,0,2.0304-0.031075,2.109-0.10973,0.14226-0.14226,0.14226-0.9184,0-1.0607-0.077134-0.077135-0.59397-0.10973-1.7402-0.10973-1.7693,0-2.0378-0.054672-2.4475-0.49821-0.22016-0.2382-0.22973-0.2998-0.25796-1.6592-0.027012-1.3006-0.014301-1.4361,0.16145-1.7204,0.37101-0.6003,0.58673-0.6448,3.2814-0.6767,2.9042-0.034316,2.8498-0.050242,2.8498,0.83519,0,0.32448-0.047689,0.62163-0.10972,0.68366-0.078762,0.078762-0.69147,0.11012-2.1716,0.11112-1.134,0.0007216-2.1155,0.035443-2.1812,0.077064-0.081755,0.051857-0.11052,0.24557-0.091435,0.61579l0.027855,0.54013,1.7373,0.045718c1.9027,0.0502,2.1341,0.1109,2.5506,0.6697,0.1761,0.2362,0.1924,0.3777,0.1924,1.662,0,1.5713-0.052879,1.7306-0.68728,2.0709-0.28534,0.15303-0.55769,0.16929-2.8361,0.16929-1.8385,0-2.5502-0.02969-2.6302-0.10973zm9.1862-1.0489c-0.0335-0.0335-0.0609-1.1033-0.0609-2.3773v-2.3164h-0.66748c-0.39724,0-0.7119-0.044425-0.7772-0.10973-0.061907-0.061907-0.10973-0.35849-0.10973-0.68058,0-0.72446,0.15021-0.85554,0.98042-0.85554h0.57399v-0.8472c0-1.0337,0.14644-1.3641,0.77936-1.7587,0.43617-0.27191,0.45323-0.27457,1.9562-0.30408,0.915-0.017969,1.6159,0.008315,1.7676,0.066314,0.24036,0.091851,0.25145,0.12361,0.25145,0.72011,0,0.36344-0.04582,0.66984-0.10972,0.73375-0.07578,0.075781-0.54252,0.10973-1.5087,0.10973h-1.399v0.64005,0.64005h1.3318c0.7432,0,1.41,0.041832,1.5087,0.094655,0.1481,0.079261,0.17686,0.19524,0.17686,0.7132,0,0.35918-0.04601,0.66455-0.10972,0.72827-0.07578,0.075781-0.54252,0.10973-1.5087,0.10973h-1.399v1.8998c0,2.1681,0.0081,2.1405-0.76082,2.5815-0.457,0.2624-0.7882,0.3393-0.9151,0.2124z", + "irc_logo": "M30,12V8h-5.004l1-8h-4l-1,8h-7.998l1-8h-4l-1,8H2v4h6.498L7.5,20H2v4h5l-1,8h4l1-8h8l-1.002,8H22l1-8h7v-4h-6.5l0.996-8H30z M19.5,20h-8l0.998-8h7.998L19.5,20z", + "mastodon_logo": "M11.19 12.195c2.016-.24 3.77-1.475 3.99-2.603.348-1.778.32-4.339.32-4.339 0-3.47-2.286-4.488-2.286-4.488C12.062.238 10.083.017 8.027 0h-.05C5.92.017 3.942.238 2.79.765c0 0-2.285 1.017-2.285 4.488l-.002.662c-.004.64-.007 1.35.011 2.091.083 3.394.626 6.74 3.78 7.57 1.454.383 2.703.463 3.709.408 1.823-.1 2.847-.647 2.847-.647l-.06-1.317s-1.303.41-2.767.36c-1.45-.05-2.98-.156-3.215-1.928a3.614 3.614 0 0 1-.033-.496s1.424.346 3.228.428c1.103.05 2.137-.064 3.188-.189zm1.613-2.47H11.13v-4.08c0-.859-.364-1.295-1.091-1.295-.804 0-1.207.517-1.207 1.541v2.233H7.168V5.89c0-1.024-.403-1.541-1.207-1.541-.727 0-1.091.436-1.091 1.296v4.079H3.197V5.522c0-.859.22-1.541.66-2.046.456-.505 1.052-.764 1.793-.764.856 0 1.504.328 1.933.983L8 4.39l.417-.695c.429-.655 1.077-.983 1.934-.983.74 0 1.336.259 1.791.764.442.505.661 1.187.661 2.046v4.203z", + "x_logo": "M5.026 15c6.038 0 9.341-5.003 9.341-9.334 0-.14 0-.282-.006-.422A6.685 6.685 0 0 0 16 3.542a6.658 6.658 0 0 1-1.889.518 3.301 3.301 0 0 0 1.447-1.817 6.533 6.533 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.325 9.325 0 0 1-6.767-3.429 3.289 3.289 0 0 0 1.018 4.382A3.323 3.323 0 0 1 .64 6.575v.045a3.288 3.288 0 0 0 2.632 3.218 3.203 3.203 0 0 1-.865.115 3.23 3.23 0 0 1-.614-.057 3.283 3.283 0 0 0 3.067 2.277A6.588 6.588 0 0 1 .78 13.58a6.32 6.32 0 0 1-.78-.045A9.344 9.344 0 0 0 5.026 15z" +} diff --git a/src/data/members.json b/src/data/members.json new file mode 100644 index 00000000..1042d03a --- /dev/null +++ b/src/data/members.json @@ -0,0 +1,297 @@ +{ + "astropy": { + "name": "Astropy", + "logo": "astropy.png", + "url": "http://www.astropy.org/", + "repositories": { + "github": "astropy/astropy" + }, + "mailinglist": { + "users": "http://mail.python.org/mailman/listinfo/astropy", + "devs": "http://groups.google.com/group/astropy-dev" + }, + "chat": { + "slack": "http://joinslack.astropy.org/" + }, + "microblogging": { + "x": "astropy" + }, + "description": "is a community-driven package intended to contain much of the core functionality and some common tools needed for performing astronomy and astrophysics with Python." + }, + "astronomy-commons": { + "name": "Astronomy Data Commons", + "logo": "astronomy-commons.png", + "url": "https://dirac.astro.washington.edu/data-engineering/", + "repositories": { + "github": "astronomy-commons/" + }, + "mailinglist": { + "devs": "https://groups.google.com/forum/#!forum/astronomy-commons" + }, + "chat": { + "matrix": "https://app.element.io/#/room/#astronomy-commons:matrix.org" + }, + "description": "is an initiative for software infrastructure for science platforms and scalable astronomy on cloud resources. Astronomy Data Commons is lead by researchers at the DiRAC Institute at the University of Washington." + }, + "ctlearn": { + "name": "CTLearn", + "logo": "ctlearn.png", + "url": "https://github.com/ctlearn-project", + "repositories": { + "github": "ctlearn-project/ctlearn" + }, + "chat": { + "matrix": "https://app.element.io/#/room/#ctlearn:matrix.org" + }, + "description": "is a package under active development that pursues the application of deep-learning based methods to the analysis of data from imaging atmospheric Cherenkov telescopes (IACTs). CTLearn includes modules for loading and manipulating IACT data and for running machine learning models using pixel-wise camera data as input. Its high-level interface provides a configuration-file-based workflow to drive reproducible training and prediction." + }, + "einsteinpy": { + "name": "EinsteinPy", + "logo": "einsteinpy.png", + "url": "https://einsteinpy.org", + "repositories": { + "github": "einsteinpy/einsteinpy" + }, + "mailinglist": { + "devs": "https://groups.io/g/einsteinpy-dev" + }, + "chat": { + "matrix": "https://app.element.io/#/room/#einsteinpy:matrix.org" + }, + "microblogging": { + "x": "EinsteinPy" + }, + "description": "is a python package for solving problems in general relativity. Computations can be done for Schwarzschild, Kerr and Kerr-Newman geometries. Visualising relativistic orbits, advancement of perihelion can be simulated in seconds. See documentation for more information." + }, + "glue": { + "name": "Glue", + "logo": "glue.png", + "url": "http://www.glueviz.org/", + "repositories": { + "github": "glue-viz/glue" + }, + "mailinglist": { + "users": "https://groups.google.com/group/glue-viz", + "devs": "https://groups.google.com/group/glue-viz-dev" + }, + "microblogging": { + "x": "glueviz" + }, + "description": "is a data visualization application and library to explore relationships within and among related datasets. Its main features include linked statistical graphs, flexible linking across data, and full Python scripting capability." + }, + "juliaastro": { + "name": "JuliaAstro", + "logo": "juliaastro.png", + "url": "https://juliaastro.github.io/", + "repositories": { + "github": "JuliaAstro" + }, + "mailinglist": { + "users": "https://discourse.julialang.org/c/domain/astro" + }, + "chat": { + "slack": "https://app.slack.com/client/T68168MUP/CMXU6SD7V", + "zulip": "https://julialang.zulipchat.com/#narrow/channel/astronomy" + }, + "description": "is an organization that shepherds the development of community astronomy and astrophysics packages for Julia. These include packages for widely used functionality such as FITS file I/O, world coordinate systems and cosmological distance calculations." + }, + "poliastro": { + "name": "poliastro", + "logo": "poliastro.png", + "url": "https://poliastro.readthedocs.io/", + "repositories": { + "github": "poliastro/poliastro" + }, + "mailinglist": { + "devs": "https://groups.io/g/poliastro-dev" + }, + "chat": { + "matrix": "https://app.element.io/#/room/#poliastro:matrix.org" + }, + "microblogging": { + "x": "poliastro_py", + "mastodon": "@poliastro@fosstodon.org" + }, + "description": "is a python package for Astrodynamics and Orbital Mechanics problems, such as orbital elements conversion, orbital propagation, plotting, planetary ephemerides computation, and more." + }, + "sunpy": { + "name": "SunPy", + "logo": "sunpy.png", + "url": "http://sunpy.org", + "repositories": { + "github": "sunpy/sunpy" + }, + "mailinglist": { + "users": "http://groups.google.com/group/sunpy", + "devs": "http://groups.google.com/group/sunpy-dev" + }, + "chat": { + "matrix": "https://app.element.io/#/room/#sunpy:openastronomy.org" + }, + "microblogging": { + "x": "SunPyProject" + }, + "description": "is a community-developed free and open-source software package for solar physics. SunPy is meant to be a free alternative to the SolarSoft and its aim is to provide the software tools necessary so that anyone can analyze solar data." + }, + "stingray": { + "name": "Stingray", + "logo": "stingray_logo.png", + "url": "http://stingray.science", + "repositories": { + "github": "StingraySoftware" + }, + "chat": { + "slack": "https://join.slack.com/t/stingraysoftware/shared_invite/zt-49kv4kba-mD1Y~s~rlrOOmvqM7mZugQ" + }, + "description": ": we are a team of astrophysicists and software developers working together to build a variability analysis software to study black holes and fundamental physics under extreme conditions." + }, + "casacore": { + "name": "Casacore", + "logo": "casacore.png", + "url": "https://www.github.com/casacore/casacore/", + "repositories": { + "github": "casacore" + }, + "description": "is a suite of C++ libraries for radio astronomy data processing. Casacore underlies CASA, the Common Astronomy Software Applications developed by an international consortium of scientists at various institutes. Python bindings exist in Python-casacore. Casacore also underlies other radio astronomy software such as WSClean, and LOFAR tools. Casacore is developed by the radio astro organizations around the world. It is open source and will happily merge any (good) pull requests." + }, + "chiantipy": { + "name": "ChiantiPy", + "logo": "chiantipy.png", + "url": "http://chiantipy.sourceforge.net/welcome.html", + "repositories": { + "github": "chianti-atomic/ChiantiPy" + }, + "mailinglist": { + "users": "https://lists.sourceforge.net/lists/listinfo/chiantipy-users" + }, + "description": "is a Python interface to the CHIANTI atomic database for astrophysical spectroscopy. CHIANTI consists of a database of atomic data that can be used to interpret spectral lines and continua emitted from high-temperature, optically-thin astrophysical sources." + }, + "coin": { + "name": "COIN", + "logo": "coin.png", + "url": "https://cosmostatistics-initiative.org/", + "repositories": { + "github": "COINtoolbox" + }, + "mailinglist": { + "admin (Rafael S. de Souza)": "mailto:rafael.2706@gmail.com" + }, + "description": "(COsmostatistics INitiative) is an international working group built under the auspices of the International Astrostatistics Association (IAA). It aims to create an interdisciplinary environment where collaborations between astronomers, statisticians and machine learning experts can flourish. COIN is designed to promote the development of a new family of tools for data exploration in astrophysics and cosmology." + }, + "gnuastro": { + "name": "GNU Astronomy Utilities", + "logo": "gnuastro.png", + "url": "https://www.gnu.org/software/gnuastro/", + "repositories": { + "savannah": "https://git.savannah.gnu.org/cgit/gnuastro.git" + }, + "mailinglist": { + "users": "https://lists.gnu.org/mailman/listinfo/help-gnuastro", + "devs": "https://lists.gnu.org/mailman/listinfo/gnuastro-devel" + }, + "description": "(Gnuastro) is an official GNU package consisting of many command-line programs and library functions for the manipulation and analysis of astronomical data. All the programs share the same basic and familiar (GNU style) command-line user interface for the comfort of both the users and developers. Gnuastro is written to comply fully with the GNU coding standards so it blends nicely with all Unix-like operating systems. This also enables astronomers to expect a fully familiar experience in the source code, building, installing and command-line user interaction. Gnuastro also has a very complete book/manual, the tutorials is the best place to start using it." + }, + "ims": { + "name": "The Italian Mars Society", + "logo": "ims.png", + "url": "http://www.marssociety.it/?lang=en", + "repositories": { + "bitbucket": "italianmarssociety/" + }, + "mailinglist": { + "admin": "mailto:gsoc@marssociety.it" + }, + "microblogging": { + "x": "marssociety" + }, + "description": "(IMS) is a non-profit organization, existing from 2004, as Italian branch of the International Mars Society, created in the USA by Robert Zubrin. IMS is a member of the Mars Society European network. The foundation scope of the Italian Mars Society is to promote research projects devoted to Mars Exploration and the involvement of SMEs and large enterprises in the new economy related to space exploration.
    IMS is currently spearheading the MARS CITY project. The project aims to address the major issues that could jeopardize a crewed mission to Mars and are not adequately being addressed at existing terrestrial Mars analogs." + }, + "plasmapy": { + "name": "PlasmaPy", + "logo": "plasmapy.png", + "url": "http://www.plasmapy.org", + "repositories": { + "github": "plasmapy/plasmapy" + }, + "mailinglist": { + "users": "https://groups.google.com/group/plasmapy" + }, + "chat": { + "matrix": "https://app.element.io/#/room/#plasmapy:matrix.org" + }, + "microblogging": { + "x": "plasmapy" + }, + "description": "aims to be a collection of functionality commonly used and shared between plasma physicists and researchers globally, running within and leveraging the open source scientific Python ecosystem." + }, + "radis": { + "name": "radis", + "logo": "radis_ico.png", + "url": "https://radis.readthedocs.io/", + "repositories": { + "github": "radis/radis" + }, + "mailinglist": { + "users": "https://groups.google.com/forum/#!forum/radis-radiation" + }, + "chat": { + "gitter": "https://gitter.im/radis-radiation/community" + }, + "microblogging": { + "x": "radis_radiation" + }, + "description": "A fast line-by-line code for high-resolution infrared molecular spectra. RADIS can compute spectra of millions of lines within seconds. Also includes a post-processing tools to compare experimental spectra with spectra calculated in RADIS or other spectral codes." + }, + "sherpa": { + "name": "Sherpa", + "logo": "sherpa_logo.png", + "url": "http://cxc.cfa.harvard.edu/contrib/sherpa/", + "repositories": { + "github": "sherpa/sherpa/" + }, + "description": "is a modeling and fitting application for Python. It contains a powerful language for combining simple models into complex expressions that can be fit to the data using a variety of statistics and optimization methods. It is easily extensible to include user models, statistics and optimization methods." + }, + "yt": { + "name": "yt", + "logo": "yt.png", + "url": "https://yt-project.org/", + "repositories": { + "github": "yt-project/yt" + }, + "mailinglist": { + "users": "https://mail.python.org/archives/list/yt-users@python.org/", + "devs": "https://mail.python.org/archives/list/yt-dev@python.org/" + }, + "chat": { + "slack": "https://yt-project.slack.com/" + }, + "microblogging": { + "x": "yt_astro" + }, + "description": "is a python package for analyzing and visualizing volumetric, multi-resolution data from astrophysical simulations, radio telescopes, and a burgeoning interdisciplinary community." + }, + "lincc-frameworks": { + "name": "LINCC Frameworks", + "logo": "lincc-frameworks.png", + "url": "https://lsstdiscoveryalliance.org/lsst-discovery-alliance-programs/lincc-frameworks/", + "repositories": { + "github": "lincc-frameworks" + }, + "chat": { + "slack": "https://join.slack.com/t/gsoc26arrowforastro/shared_invite/zt-3qpirqhkg-qTHUg4R0iMewhIprewR1eg" + }, + "description": "builds open-source tools for scalable data analysis in astronomy, aimed at enabling scientific discovery with large datasets." + }, + "reltrans": { + "name": "Reltrans", + "logo": "reltrans_logo.png", + "url": "https://reltrans.github.io/reltrans_website/Home.html", + "repositories": { + "github": "reltrans" + }, + "chat": { + "slack": "https://join.slack.com/t/reltrans-workspace/shared_invite/zt-3p234fciq-lD12LDPTCCPf0DTT1ZocmQ" + }, + "description": "Reltrans (Relativistic transfer functions) is a publicly available, semi-analytical model for X-ray reverberation mapping of accreting black holes in both AGN and X-ray binaries. It can be used to compute both time-averaged spectra and energy-dependent, Fourier domain cross spectra." + } +} diff --git a/src/data/site.json b/src/data/site.json new file mode 100644 index 00000000..e5ecffe1 --- /dev/null +++ b/src/data/site.json @@ -0,0 +1,18 @@ +{ + "title": "OpenAstronomy", + "email": "", + "description": "Where all about the combined force of different open source projects in astronomy and astrophysics takes place.", + "url": "https://openastronomy.org", + "x_username": "Open_Astronomy", + "github_username": "openastronomy", + "irc_channel": "openastronomy", + "discussiongroup_url": "https://community.openastronomy.org", + "nav_links": { + "Contributor Blogs": "http://openastronomy.org/Universe_OA" + }, + "page_links": [ + { "title": "Members", "href": "/members/" }, + { "title": "News and Events", "href": "/news/" }, + { "title": "Google Summer of Code", "href": "/gsoc/" } + ] +} diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro new file mode 100644 index 00000000..4e1dd320 --- /dev/null +++ b/src/layouts/BaseLayout.astro @@ -0,0 +1,23 @@ +--- +import Head from "../components/Head.astro"; +import Header from "../components/Header.astro"; +import Footer from "../components/Footer.astro"; + +const { title, description } = Astro.props; +--- + + + + + +
    +
    +
    +
    + +
    +
    +
    +