diff --git a/.github/workflows/build_deploy.yml b/.github/workflows/build_deploy.yml index fa411c3..0095d66 100644 --- a/.github/workflows/build_deploy.yml +++ b/.github/workflows/build_deploy.yml @@ -3,20 +3,15 @@ name: build_deploy on: push: branches: - - main - # - staging + - main pull_request: - repository_dispatch: workflow_dispatch: -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages permissions: contents: read pages: write id-token: write -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: false @@ -25,53 +20,44 @@ jobs: build: runs-on: ubuntu-latest steps: - - name: Setup prerequisites - run: | - sudo apt-get update - sudo apt-get install -y curl make libxml2-dev libxslt-dev libnode-dev node-gyp npm openssl xsltproc - - - name: Setup snaps - run: | - sudo snap install aws-cli --classic - - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: true - name: Setup Ruby uses: ruby/setup-ruby@v1 with: - ruby-version: '2.7' + ruby-version: '3.3' bundler-cache: true - cache-version: 0 # Increment this number if you need to re-download cached gems + cache-version: 3 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: '20' - name: Update submodules - run: | - make update-init update-modules + run: make update-init update-modules - - name: Use Node - uses: actions/setup-node@v1 - with: - node-version: '14.x' + - name: Install frontend deps + run: cd frontend && npm install - - name: Setup npm - run: | - npm install + - name: Build lutaml-xsd frontend + run: cd "$(bundle show lutaml-xsd)/frontend" && npm install && npm run build - name: Setup Pages id: pages - uses: actions/configure-pages@v3 + uses: actions/configure-pages@v5 - name: Build site - run: | - make _site + run: make all - name: Upload artifact - # Automatically uploads an artifact from the './_site' directory by default - uses: actions/upload-pages-artifact@v2 + uses: actions/upload-pages-artifact@v3 + with: + path: site - # Deployment job deploy: environment: name: github-pages @@ -82,4 +68,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v2 + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/links.yml b/.github/workflows/links.yml index 684d017..dd55b5e 100644 --- a/.github/workflows/links.yml +++ b/.github/workflows/links.yml @@ -3,68 +3,50 @@ name: links on: push: branches: - - main - - staging + - main pull_request: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: link_checker: runs-on: ubuntu-latest steps: - - name: Setup prerequisites - run: | - sudo apt-get update - sudo apt-get install -y curl make libxml2-dev libxslt-dev libnode-dev node-gyp npm openssl xsltproc - - - name: Setup snaps - run: | - sudo snap install aws-cli --classic - - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: true - name: Setup Ruby uses: ruby/setup-ruby@v1 with: - ruby-version: '2.7' + ruby-version: '3.3' bundler-cache: true - cache-version: 0 # Increment this number if you need to re-download cached gems - - - name: Update submodules - run: | - make update-init update-modules + cache-version: 3 - - name: Use Node - uses: actions/setup-node@v1 + - name: Setup Node + uses: actions/setup-node@v4 with: - node-version: '14.x' + node-version: '20' - - name: Setup npm - run: | - npm install + - name: Update submodules + run: make update-init update-modules + + - name: Install frontend deps + run: cd frontend && npm install - - name: Setup Pages - id: pages - uses: actions/configure-pages@v3 + - name: Build lutaml-xsd frontend + run: cd "$(bundle show lutaml-xsd)/frontend" && npm install && npm run build - name: Build site - run: | - make _site + run: make all - name: Link Checker - uses: lycheeverse/lychee-action@v1.2.0 + uses: lycheeverse/lychee-action@v2 with: - args: --verbose --no-progress --exclude-file .lycheeignore -- _site/**/*.html + args: --verbose --no-progress --exclude-file .lycheeignore --root-dir site -- site/**/*.html fail: true env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - - # - name: Create Issue From File - # uses: peter-evans/create-issue-from-file@v2 - # with: - # title: Link Checker Report - # content-filepath: ./lychee/out.md - # labels: report, automated issue + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index e9a00ab..538782e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,8 @@ -_site .DS_Store -build_source Gemfile.lock +build/ +site/ +node_modules/ +frontend/node_modules/ +schemas_index.json +unitsml.lxr diff --git a/.lycheeignore b/.lycheeignore new file mode 100644 index 0000000..253ba32 --- /dev/null +++ b/.lycheeignore @@ -0,0 +1 @@ +# Patterns to exclude from link checking diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..3c09213 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,68 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +**schema.unitsml.org** — an interactive schema browser site for UnitsML XML schemas (OASIS standard for units of measure in XML). The site consists of: +- A custom **index page** (Vite + Tailwind CSS) listing all available schema versions +- Per-schema **interactive SPA browsers** generated by lutaml-xsd + +Architecture: **1 schema → 1 LXR package → 1 SPA HTML file**, all listed on the index page. + +## Build Commands + +```bash +# Full build (index page + all schema SPAs) +make all + +# Build just the index page +make site/index.html + +# Build a single schema SPA +make site/unitsml-v1.0.html + +# Local dev server on http://localhost:4000 +make serve + +# Clean all build artifacts +make clean + +# Initialize/update git submodules (schemas) +make update-init update-modules +``` + +## Architecture + +``` +schemas/ → Git submodule (unitsml/schemas), contains XSD files + unitsml/*.xsd → UnitsML schema versions (v0.9 through v1.0) + unitsmllite/*.xsd → UnitsML-Lite schema + +configs/ → Auto-generated per-schema lutaml-xsd configs (from generate_configs.rb) +build/ → Intermediate LXR packages +site/ → Final deployable output + index.html → Custom index page (Vite + Tailwind) + assets/ → JS/CSS for index page + logo-unitsml.svg → UnitsML logo + unitsml-*.html → Per-schema SPA browsers (self-contained) + unitsmllite-*.html + +frontend/ → Vite + Tailwind CSS project for the index page + src/main.js → Schema data + card rendering + src/style.css → Tailwind config + custom animations + vite.config.js → Builds to ../site/ + +generate_configs.rb → Generates per-schema config YAML files + schemas_index.json +Gemfile → Ruby deps (lutaml-xsd, lutaml-model from GitHub main, moxml, canon) +Makefile → Build orchestration +``` + +## Key Details + +- **lutaml-xsd** generates interactive Vue SPAs from XSD files via LXR packages +- The lutaml-xsd frontend must be pre-built (`frontend/dist/` in the gem) — the published gem may not include it; build manually if needed: `cd $(bundle show lutaml-xsd)/frontend && npm install && npm run build` +- **xsdvi** gem generates SVG diagrams for the SPA (may show "SVG is empty!" warnings — non-blocking) +- The `schemas` git submodule must be initialized before building +- lutaml-xsd depends on `lutaml-model` from GitHub main (not compatible with Jekyll's liquid ~> 4.0) +- Brand colors: navy `#2d2c69`, teal `#30dfc0`, light blue `#57a0fe` diff --git a/Gemfile b/Gemfile index e927679..d0d53f3 100644 --- a/Gemfile +++ b/Gemfile @@ -1,44 +1,6 @@ source "https://rubygems.org" -# gem "metanorma-cli" -# gem "metanorma-csd", path: "~/src/relaton-cli" -# gem "metanorma-cli", path: "~/src/metanorma-cli" -# gem "relaton-cli", git: "https://github.com/riboseinc/relaton-cli" -# gem "relaton-cli", path: "~/src/relaton-cli" - -# __________________ JEKYLL BELOW __________________ - -# Hello! This is where you manage which Jekyll version is used to run. -# When you want to use a different version, change it below, save the -# file and run `bundle install`. Run Jekyll with `bundle exec`, like so: -# -# bundle exec jekyll serve -# -# This will help ensure the proper Jekyll version is running. -# Happy Jekylling! -gem "jekyll", "~> 4.1" - -# This is the default theme for new Jekyll sites. You may change this to anything you like. -gem "jekyll-theme-isotc211" - -# If you want to use GitHub Pages, remove the "gem "jekyll"" above and -# uncomment the line below. To upgrade, run `bundle update github-pages`. -# gem "github-pages", group: :jekyll_plugins - -# If you have any plugins, put them here! -group :jekyll_plugins do - gem "jekyll-feed" - gem "jekyll-data" - gem "jekyll-plugin-frontend-build" - gem "jekyll-theme-isotc211-helpers" - gem "jekyll-asciidoc" -end - -# Windows does not include zoneinfo files, so bundle the tzinfo-data gem -gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby] - -# Performance-booster for watching directories on Windows -gem "wdm", "~> 0.1.0" if Gem.win_platform? - -gem "webrick" - +gem "lutaml-xsd", "~> 1.1" +gem "lutaml-model", github: "lutaml/lutaml-model", branch: "main" +gem "moxml" +gem "canon" diff --git a/Makefile b/Makefile index 26a481f..4c926ad 100644 --- a/Makefile +++ b/Makefile @@ -1,26 +1,48 @@ SHELL := /bin/bash -all: _site +CONFIGS := $(wildcard configs/*.yml) +LXR_FILES := $(patsubst configs/%.yml,build/%.lxr,$(CONFIGS)) +SPA_FILES := $(patsubst configs/%.yml,site/%.html,$(CONFIGS)) -clean: - rm -rf _site build_source +all: site/index.html site/logo-unitsml.svg $(SPA_FILES) + +# Generate per-schema config files and index JSON +configs: generate_configs.rb + ruby generate_configs.rb + +# Build a single LXR package from a config +build/%.lxr: configs/%.yml + mkdir -p build + bundle exec lutaml-xsd build from-config $< \ + --output $@ -distclean: clean - $(MAKE) -C schemas distclean +# Generate a single SPA HTML from an LXR package +site/%.html: build/%.lxr + mkdir -p site + bundle exec lutaml-xsd spa $< \ + --mode inlined \ + --output $@ -docs/unitsml/unitsml-v1.0/index.html: - $(MAKE) -C schemas +# Build the custom index page (Vite + Tailwind) +site/index.html: frontend/src/main.js frontend/src/style.css frontend/index.html frontend/package.json + cd frontend && npm install --silent && npm run build -build_source: docs/unitsml/unitsml-v1.0/index.html - mkdir -p $@; \ - cp -a source/* build_source; \ - cp -a schemas/* build_source; +# Copy logo to site +site/logo-unitsml.svg: source/assets/logo-unitsml-noninverted.svg + mkdir -p site + cp $< $@ -_site: build_source - bundle exec jekyll build +serve: all + cd site && python3 -m http.server 4000 + +stop: + lsof -ti:4000 | xargs kill -9 2>/dev/null || true + +clean: + rm -rf build site schemas_index.json -serve: _site - bundle exec jekyll serve --trace +clean-spa: + rm -f site/unitsml-*.html site/unitsmllite-*.html update-init: git submodule update --init @@ -29,4 +51,4 @@ update-modules: git submodule foreach git checkout main; \ git submodule foreach git pull origin main -.PHONY: all clean distclean serve update-init update-modules +.PHONY: all configs clean clean-spa serve stop update-init update-modules diff --git a/_config.yml b/_config.yml deleted file mode 100644 index f561a8d..0000000 --- a/_config.yml +++ /dev/null @@ -1,71 +0,0 @@ -title: UnitsML XML schemas -title_html: UnitsML XML schemas - -committee: - id: UnitsML - name: UnitsML - home: https://www.unitsml.org - -footer_nav: - - url: https://www.unitsml.org - title: Main Site - -font_awesome_kit_url: https://kit.fontawesome.com/77a8a07e0a.js - -collections: - pages: - output: true - permalink: /:path/ - -resource_listings: - schemas: - index_url: 'schemas' - index_title: "Schemas" - resource_root: 'schemas' - resource_label: "schema" - -description: >- - The UnitsML XML schema repository. - -tagline: >- - UnitsML XML schemas for semantic units - -author: "UnitsML" -email: pending@unitsml.org - -theme: jekyll-theme-isotc211 - -social: - links: - - url: https://github.com/unitsml - -powered_by: - url: https://open.ribose.com - title: Ribose - logo_path: /assets/logo-ribose.svg - -markdown: kramdown - -source: build_source -include: - - build_source - -exclude: - - Gemfile - - Gemfile.lock - - Makefile - - node_modules - - vendor/bundle/ - - vendor/cache/ - - vendor/gems/ - - vendor/ruby/ - - .sass-cache/ - -org: - name: UnitsML - website: - url: https://www.unitsml.org/ - title: www.unitsml.org - email: info@unitsml.org - address: |- - info@unitsml.org diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index 3569f75..0000000 --- a/babel.config.js +++ /dev/null @@ -1,16 +0,0 @@ -const presets = [ - [ - "@babel/env", - { - targets: { - ie: "10", - edge: "17", - firefox: "60", - chrome: "67", - safari: "11.1", - }, - }, - ], -]; - -module.exports = { presets }; diff --git a/configs/unitsml-v0.9.10.yml b/configs/unitsml-v0.9.10.yml new file mode 100644 index 0000000..641b94a --- /dev/null +++ b/configs/unitsml-v0.9.10.yml @@ -0,0 +1,38 @@ +# UnitsML 0.9.10 +--- +metadata: + name: UnitsML 0.9.10 + version: 0.9.10 + title: UnitsML 0.9.10 Schema Browser + description: Interactive documentation for the UnitsML 0.9.10 XML schema. + license: OASIS +build: + xsd_mode: include_all + resolution_mode: resolved + serialization_format: marshal +files: +- "../schemas/unitsml/unitsml-v0.9.10.xsd" +namespace_mappings: +- prefix: xs + uri: http://www.w3.org/2001/XMLSchema +- prefix: unitsml-0910 + uri: urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.10 +appearance: + logos: + long: + light: + path: "logo-unitsml.svg" + dark: + path: "logo-unitsml.svg" + lutaml_logo: + light: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg + dark: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg + colors: + primary: "#2d2c69" + primary_light: "#57a0fe" + primary_dark: "#1a1950" + accent: "#30dfc0" + background_primary: "#ffffff" + background_secondary: "#f8fafc" diff --git a/configs/unitsml-v0.9.12.yml b/configs/unitsml-v0.9.12.yml new file mode 100644 index 0000000..4837ecc --- /dev/null +++ b/configs/unitsml-v0.9.12.yml @@ -0,0 +1,38 @@ +# UnitsML 0.9.12 +--- +metadata: + name: UnitsML 0.9.12 + version: 0.9.12 + title: UnitsML 0.9.12 Schema Browser + description: Interactive documentation for the UnitsML 0.9.12 XML schema. + license: OASIS +build: + xsd_mode: include_all + resolution_mode: resolved + serialization_format: marshal +files: +- "../schemas/unitsml/unitsml-v0.9.12.xsd" +namespace_mappings: +- prefix: xs + uri: http://www.w3.org/2001/XMLSchema +- prefix: unitsml-0912 + uri: urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.12 +appearance: + logos: + long: + light: + path: "logo-unitsml.svg" + dark: + path: "logo-unitsml.svg" + lutaml_logo: + light: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg + dark: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg + colors: + primary: "#2d2c69" + primary_light: "#57a0fe" + primary_dark: "#1a1950" + accent: "#30dfc0" + background_primary: "#ffffff" + background_secondary: "#f8fafc" diff --git a/configs/unitsml-v0.9.19.yml b/configs/unitsml-v0.9.19.yml new file mode 100644 index 0000000..d6e8c6f --- /dev/null +++ b/configs/unitsml-v0.9.19.yml @@ -0,0 +1,38 @@ +# UnitsML 0.9.19 +--- +metadata: + name: UnitsML 0.9.19 + version: 0.9.19 + title: UnitsML 0.9.19 Schema Browser + description: Interactive documentation for the UnitsML 0.9.19 XML schema. + license: OASIS +build: + xsd_mode: include_all + resolution_mode: resolved + serialization_format: marshal +files: +- "../schemas/unitsml/unitsml-v0.9.19.xsd" +namespace_mappings: +- prefix: xs + uri: http://www.w3.org/2001/XMLSchema +- prefix: unitsml-0919 + uri: urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.19 +appearance: + logos: + long: + light: + path: "logo-unitsml.svg" + dark: + path: "logo-unitsml.svg" + lutaml_logo: + light: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg + dark: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg + colors: + primary: "#2d2c69" + primary_light: "#57a0fe" + primary_dark: "#1a1950" + accent: "#30dfc0" + background_primary: "#ffffff" + background_secondary: "#f8fafc" diff --git a/configs/unitsml-v0.9.2.yml b/configs/unitsml-v0.9.2.yml new file mode 100644 index 0000000..3a1753b --- /dev/null +++ b/configs/unitsml-v0.9.2.yml @@ -0,0 +1,38 @@ +# UnitsML 0.9.2 +--- +metadata: + name: UnitsML 0.9.2 + version: 0.9.2 + title: UnitsML 0.9.2 Schema Browser + description: Interactive documentation for the UnitsML 0.9.2 XML schema. + license: OASIS +build: + xsd_mode: include_all + resolution_mode: resolved + serialization_format: marshal +files: +- "../schemas/unitsml/unitsml-v0.9.2.xsd" +namespace_mappings: +- prefix: xs + uri: http://www.w3.org/2001/XMLSchema +- prefix: unitsml-092 + uri: urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.2 +appearance: + logos: + long: + light: + path: "logo-unitsml.svg" + dark: + path: "logo-unitsml.svg" + lutaml_logo: + light: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg + dark: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg + colors: + primary: "#2d2c69" + primary_light: "#57a0fe" + primary_dark: "#1a1950" + accent: "#30dfc0" + background_primary: "#ffffff" + background_secondary: "#f8fafc" diff --git a/configs/unitsml-v0.9.7.yml b/configs/unitsml-v0.9.7.yml new file mode 100644 index 0000000..b2800e9 --- /dev/null +++ b/configs/unitsml-v0.9.7.yml @@ -0,0 +1,38 @@ +# UnitsML 0.9.7 +--- +metadata: + name: UnitsML 0.9.7 + version: 0.9.7 + title: UnitsML 0.9.7 Schema Browser + description: Interactive documentation for the UnitsML 0.9.7 XML schema. + license: OASIS +build: + xsd_mode: include_all + resolution_mode: resolved + serialization_format: marshal +files: +- "../schemas/unitsml/unitsml-v0.9.7.xsd" +namespace_mappings: +- prefix: xs + uri: http://www.w3.org/2001/XMLSchema +- prefix: unitsml-097 + uri: urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.7 +appearance: + logos: + long: + light: + path: "logo-unitsml.svg" + dark: + path: "logo-unitsml.svg" + lutaml_logo: + light: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg + dark: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg + colors: + primary: "#2d2c69" + primary_light: "#57a0fe" + primary_dark: "#1a1950" + accent: "#30dfc0" + background_primary: "#ffffff" + background_secondary: "#f8fafc" diff --git a/configs/unitsml-v0.9.yml b/configs/unitsml-v0.9.yml new file mode 100644 index 0000000..86bd9ab --- /dev/null +++ b/configs/unitsml-v0.9.yml @@ -0,0 +1,38 @@ +# UnitsML 0.9 +--- +metadata: + name: UnitsML 0.9 + version: '0.9' + title: UnitsML 0.9 Schema Browser + description: Interactive documentation for the UnitsML 0.9 XML schema. + license: OASIS +build: + xsd_mode: include_all + resolution_mode: resolved + serialization_format: marshal +files: +- "../schemas/unitsml/unitsml-v0.9.xsd" +namespace_mappings: +- prefix: xs + uri: http://www.w3.org/2001/XMLSchema +- prefix: unitsml-09 + uri: urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9 +appearance: + logos: + long: + light: + path: "logo-unitsml.svg" + dark: + path: "logo-unitsml.svg" + lutaml_logo: + light: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg + dark: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg + colors: + primary: "#2d2c69" + primary_light: "#57a0fe" + primary_dark: "#1a1950" + accent: "#30dfc0" + background_primary: "#ffffff" + background_secondary: "#f8fafc" diff --git a/configs/unitsml-v1.0-csd04.yml b/configs/unitsml-v1.0-csd04.yml new file mode 100644 index 0000000..f2a17ce --- /dev/null +++ b/configs/unitsml-v1.0-csd04.yml @@ -0,0 +1,38 @@ +# UnitsML 1.0 CSD04 +--- +metadata: + name: UnitsML 1.0 CSD04 + version: 1.0-csd04 + title: UnitsML 1.0 CSD04 Schema Browser + description: Interactive documentation for the UnitsML 1.0 CSD04 XML schema. + license: OASIS +build: + xsd_mode: include_all + resolution_mode: resolved + serialization_format: marshal +files: +- "../schemas/unitsml/unitsml-v1.0-csd04.xsd" +namespace_mappings: +- prefix: xs + uri: http://www.w3.org/2001/XMLSchema +- prefix: unitsml-csd + uri: urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-1.0 +appearance: + logos: + long: + light: + path: "logo-unitsml.svg" + dark: + path: "logo-unitsml.svg" + lutaml_logo: + light: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg + dark: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg + colors: + primary: "#2d2c69" + primary_light: "#57a0fe" + primary_dark: "#1a1950" + accent: "#30dfc0" + background_primary: "#ffffff" + background_secondary: "#f8fafc" diff --git a/configs/unitsml-v1.0.yml b/configs/unitsml-v1.0.yml new file mode 100644 index 0000000..1e1597f --- /dev/null +++ b/configs/unitsml-v1.0.yml @@ -0,0 +1,41 @@ +# UnitsML 1.0 +--- +metadata: + name: UnitsML 1.0 + version: '1.0' + title: UnitsML 1.0 Schema Browser + description: Interactive documentation for the UnitsML 1.0 XML schema. + license: OASIS +build: + xsd_mode: include_all + resolution_mode: resolved + serialization_format: marshal +files: +- "../schemas/unitsml/unitsml-v1.0.xsd" +schema_location_mappings: +- from: "http://www.w3.org/2009/01/xml.xsd" + to: "../schemas/unitsml/xml.xsd" +namespace_mappings: +- prefix: xs + uri: http://www.w3.org/2001/XMLSchema +- prefix: unitsml + uri: https://schema.unitsml.org/unitsml/1.0 +appearance: + logos: + long: + light: + path: "logo-unitsml.svg" + dark: + path: "logo-unitsml.svg" + lutaml_logo: + light: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg + dark: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg + colors: + primary: "#2d2c69" + primary_light: "#57a0fe" + primary_dark: "#1a1950" + accent: "#30dfc0" + background_primary: "#ffffff" + background_secondary: "#f8fafc" diff --git a/configs/unitsmllite-v0.9.18.yml b/configs/unitsmllite-v0.9.18.yml new file mode 100644 index 0000000..ceca62a --- /dev/null +++ b/configs/unitsmllite-v0.9.18.yml @@ -0,0 +1,38 @@ +# UnitsML-Lite 0.9.18 +--- +metadata: + name: UnitsML-Lite 0.9.18 + version: 0.9.18 + title: UnitsML-Lite 0.9.18 Schema Browser + description: Interactive documentation for the UnitsML-Lite 0.9.18 XML schema. + license: OASIS +build: + xsd_mode: include_all + resolution_mode: resolved + serialization_format: marshal +files: +- "../schemas/unitsmllite/unitsmllite-v0.9.18.xsd" +namespace_mappings: +- prefix: xs + uri: http://www.w3.org/2001/XMLSchema +- prefix: unitsml-lite + uri: urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema_lite-0.9.18 +appearance: + logos: + long: + light: + path: "logo-unitsml.svg" + dark: + path: "logo-unitsml.svg" + lutaml_logo: + light: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg + dark: + url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg + colors: + primary: "#2d2c69" + primary_light: "#57a0fe" + primary_dark: "#1a1950" + accent: "#30dfc0" + background_primary: "#ffffff" + background_secondary: "#f8fafc" diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..f21ed20 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,17 @@ + + + + + + UnitsML XML Schemas — schema.unitsml.org + + + + + + + +
+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..a87cb2f --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,1761 @@ +{ + "name": "unitsml-schema-index", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "unitsml-schema-index", + "version": "1.0.0", + "devDependencies": { + "@tailwindcss/vite": "^4.1.0", + "tailwindcss": "^4.1.0", + "vite": "^6.3.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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.2.tgz", + "integrity": "sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.2.tgz", + "integrity": "sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.2.tgz", + "integrity": "sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.2.tgz", + "integrity": "sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.2.tgz", + "integrity": "sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.2.tgz", + "integrity": "sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.2.tgz", + "integrity": "sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.2.tgz", + "integrity": "sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.2.tgz", + "integrity": "sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.2.tgz", + "integrity": "sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.2.tgz", + "integrity": "sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.2.tgz", + "integrity": "sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.2.tgz", + "integrity": "sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.2.tgz", + "integrity": "sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.2.tgz", + "integrity": "sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.2.tgz", + "integrity": "sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.2.tgz", + "integrity": "sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.2.tgz", + "integrity": "sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.2.tgz", + "integrity": "sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.2.tgz", + "integrity": "sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.2.tgz", + "integrity": "sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.2.tgz", + "integrity": "sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.2.tgz", + "integrity": "sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.2.tgz", + "integrity": "sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.2.tgz", + "integrity": "sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tailwindcss/node": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.4.tgz", + "integrity": "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.4" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.4.tgz", + "integrity": "sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.2.4", + "@tailwindcss/oxide-darwin-arm64": "4.2.4", + "@tailwindcss/oxide-darwin-x64": "4.2.4", + "@tailwindcss/oxide-freebsd-x64": "4.2.4", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.4", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.4", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.4", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.4", + "@tailwindcss/oxide-linux-x64-musl": "4.2.4", + "@tailwindcss/oxide-wasm32-wasi": "4.2.4", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.4", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.4" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.4.tgz", + "integrity": "sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.4.tgz", + "integrity": "sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.4.tgz", + "integrity": "sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.4.tgz", + "integrity": "sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.4.tgz", + "integrity": "sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.4.tgz", + "integrity": "sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.4.tgz", + "integrity": "sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.4.tgz", + "integrity": "sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.4.tgz", + "integrity": "sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.4.tgz", + "integrity": "sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.8.1", + "@emnapi/runtime": "^1.8.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.1", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.4.tgz", + "integrity": "sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.4.tgz", + "integrity": "sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.4.tgz", + "integrity": "sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.2.4", + "@tailwindcss/oxide": "4.2.4", + "tailwindcss": "4.2.4" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz", + "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "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/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "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/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.12.tgz", + "integrity": "sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==", + "dev": true, + "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/rollup": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz", + "integrity": "sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==", + "dev": true, + "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.60.2", + "@rollup/rollup-android-arm64": "4.60.2", + "@rollup/rollup-darwin-arm64": "4.60.2", + "@rollup/rollup-darwin-x64": "4.60.2", + "@rollup/rollup-freebsd-arm64": "4.60.2", + "@rollup/rollup-freebsd-x64": "4.60.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.2", + "@rollup/rollup-linux-arm-musleabihf": "4.60.2", + "@rollup/rollup-linux-arm64-gnu": "4.60.2", + "@rollup/rollup-linux-arm64-musl": "4.60.2", + "@rollup/rollup-linux-loong64-gnu": "4.60.2", + "@rollup/rollup-linux-loong64-musl": "4.60.2", + "@rollup/rollup-linux-ppc64-gnu": "4.60.2", + "@rollup/rollup-linux-ppc64-musl": "4.60.2", + "@rollup/rollup-linux-riscv64-gnu": "4.60.2", + "@rollup/rollup-linux-riscv64-musl": "4.60.2", + "@rollup/rollup-linux-s390x-gnu": "4.60.2", + "@rollup/rollup-linux-x64-gnu": "4.60.2", + "@rollup/rollup-linux-x64-musl": "4.60.2", + "@rollup/rollup-openbsd-x64": "4.60.2", + "@rollup/rollup-openharmony-arm64": "4.60.2", + "@rollup/rollup-win32-arm64-msvc": "4.60.2", + "@rollup/rollup-win32-ia32-msvc": "4.60.2", + "@rollup/rollup-win32-x64-gnu": "4.60.2", + "@rollup/rollup-win32-x64-msvc": "4.60.2", + "fsevents": "~2.3.2" + } + }, + "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==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tailwindcss": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.4.tgz", + "integrity": "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "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==", + "dev": true, + "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 + } + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..ad24039 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,16 @@ +{ + "name": "unitsml-schema-index", + "private": true, + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "vite": "^6.3.0", + "@tailwindcss/vite": "^4.1.0", + "tailwindcss": "^4.1.0" + } +} diff --git a/frontend/src/main.js b/frontend/src/main.js new file mode 100644 index 0000000..b3f2789 --- /dev/null +++ b/frontend/src/main.js @@ -0,0 +1,246 @@ +import './style.css' + +const schemas = [ + { + name: "UnitsML 1.0", + version: "1.0", + status: "current", + namespace: "https://schema.unitsml.org/unitsml/1.0", + xsd_url: "https://schema.unitsml.org/unitsml/unitsml-v1.0.xsd", + browser_path: "unitsml-v1.0.html", + description: "Current release of the UnitsML schema for representing units of measure, dimensions, and quantities in XML." + }, + { + name: "UnitsML 1.0 CSD04", + version: "1.0-csd04", + status: "draft", + namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-1.0", + xsd_url: "https://schema.unitsml.org/unitsml/unitsml-v1.0-csd04.xsd", + browser_path: "unitsml-v1.0-csd04.html", + description: "Committee Specification Draft 04 — a pre-release draft of UnitsML 1.0." + }, + { + name: "UnitsML 0.9.19", + version: "0.9.19", + status: "historical", + namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.19", + xsd_url: "https://schema.unitsml.org/unitsml/unitsml-v0.9.19.xsd", + browser_path: "unitsml-v0.9.19.html", + description: "Historical release of the UnitsML 0.9.x schema series." + }, + { + name: "UnitsML 0.9.12", + version: "0.9.12", + status: "historical", + namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.12", + xsd_url: "https://schema.unitsml.org/unitsml/unitsml-v0.9.12.xsd", + browser_path: "unitsml-v0.9.12.html", + description: "Historical release of the UnitsML 0.9.x schema series." + }, + { + name: "UnitsML 0.9.10", + version: "0.9.10", + status: "historical", + namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.10", + xsd_url: "https://schema.unitsml.org/unitsml/unitsml-v0.9.10.xsd", + browser_path: "unitsml-v0.9.10.html", + description: "Historical release of the UnitsML 0.9.x schema series." + }, + { + name: "UnitsML 0.9.7", + version: "0.9.7", + status: "historical", + namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.7", + xsd_url: "https://schema.unitsml.org/unitsml/unitsml-v0.9.7.xsd", + browser_path: "unitsml-v0.9.7.html", + description: "Historical release of the UnitsML 0.9.x schema series." + }, + { + name: "UnitsML 0.9.2", + version: "0.9.2", + status: "historical", + namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.2", + xsd_url: "https://schema.unitsml.org/unitsml/unitsml-v0.9.2.xsd", + browser_path: "unitsml-v0.9.2.html", + description: "Historical release of the UnitsML 0.9.x schema series." + }, + { + name: "UnitsML 0.9", + version: "0.9", + status: "historical", + namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9", + xsd_url: "https://schema.unitsml.org/unitsml/unitsml-v0.9.xsd", + browser_path: "unitsml-v0.9.html", + description: "Original 0.9 release of the UnitsML schema." + }, + { + name: "UnitsML-Lite 0.9.18", + version: "0.9.18", + status: "deprecated", + namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema_lite-0.9.18", + xsd_url: "https://schema.unitsml.org/unitsmllite/unitsmllite-v0.9.18.xsd", + browser_path: "unitsmllite-v0.9.18.html", + description: "Deprecated lightweight variant of the UnitsML schema. Use UnitsML 1.0 instead." + } +] + +const statusConfig = { + current: { label: 'Current', badge: 'bg-emerald-50 text-emerald-700 border border-emerald-200' }, + draft: { label: 'Draft', badge: 'bg-amber-50 text-amber-700 border border-amber-200' }, + historical: { label: 'Historical', badge: 'bg-slate-100 text-slate-600 border border-slate-200' }, + deprecated: { label: 'Deprecated', badge: 'bg-red-50 text-red-600 border border-red-200' }, +} + +function renderCard(schema, index) { + const s = statusConfig[schema.status] + const isCurrent = schema.status === 'current' + const isDeprecated = schema.status === 'deprecated' + + const cardClass = [ + 'group block relative rounded-xl border transition-all duration-300 animate-fade-in-up', + isCurrent + ? 'border-navy-200 bg-white shadow-lg hover:shadow-xl hover:border-navy-300' + : isDeprecated + ? 'border-slate-200 bg-slate-50 opacity-70 hover:opacity-100 hover:shadow-md hover:border-slate-300' + : 'border-slate-200 bg-white hover:shadow-md hover:border-slate-300', + ].join(' ') + + return ` +
+ ${isCurrent ? '
' : ''} +
+
+

${schema.name}

+ + ${s.label} + +
+

${schema.description}

+
+
+ Version + ${schema.version} +
+
+ Namespace + ${schema.namespace} +
+
+
+ + Browse schema + + + + + + + + + + XSD + + +
+
+
+ ` +} + +const app = document.getElementById('app') +app.innerHTML = ` +
+
+
+ +
+
+
+
+ + UnitsML + + + +
+ +
+
+
+ +
+
+
+

UnitsML Standard

+

+ UnitsML XML Schemas +

+

+ This site provides the authoritative schema repository for the + UnitsML standard + — machine-readable representations of units of measure, quantities, and dimensions in XML. + Browse each schema's interactive documentation, or download the XSD files directly. +

+
+ +
+
+

Schema location URL pattern

+ https://schema.unitsml.org/{schema}/{version}.xsd +
+
+

UnitsML 1.0 — schemaLocation

+ https://schema.unitsml.org/unitsml/unitsml-v1.0.xsd +

Use this value in your xsi:schemaLocation attribute when validating UnitsML 1.0 documents.

+
+
+
+
+ +
+
+
+

Available Schemas

+ ${schemas.length} versions +
+ +
+ ${renderCard(schemas[0], 0)} +
+ +
+ ${schemas.slice(1).map((s, i) => renderCard(s, i + 1)).join('')} +
+
+
+ + +
+` diff --git a/frontend/src/style.css b/frontend/src/style.css new file mode 100644 index 0000000..bfd002a --- /dev/null +++ b/frontend/src/style.css @@ -0,0 +1,72 @@ +@import "tailwindcss"; + +@theme { + --color-navy-50: #f0f0f8; + --color-navy-100: #dddde8; + --color-navy-200: #c4c4d8; + --color-navy-300: #9e9ebe; + --color-navy-400: #7474a0; + --color-navy-500: #57578a; + --color-navy-600: #464672; + --color-navy-700: #2d2c69; + --color-navy-800: #1f1e4a; + --color-navy-900: #16153d; + --color-teal-300: #5eead4; + --color-teal-400: #2dd4bf; + --color-teal-500: #30dfc0; + --color-teal-600: #14b8a6; + --color-teal-700: #0d9488; +} + +@keyframes fade-in-up { + from { + opacity: 0; + transform: translateY(16px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes fade-in { + from { opacity: 0; } + to { opacity: 1; } +} + +.animate-fade-in-up { + opacity: 0; + animation: fade-in-up 0.5s ease-out forwards; +} + +.animate-fade-in { + opacity: 0; + animation: fade-in 0.6s ease-out forwards; +} + +/* Reduce motion for users who prefer it */ +@media (prefers-reduced-motion: reduce) { + .animate-fade-in-up, + .animate-fade-in { + animation: none; + opacity: 1; + } +} + +/* Monospace code elements */ +code { + font-family: 'JetBrains Mono', 'SF Mono', 'Fira Code', 'Consolas', monospace; +} + +/* Smooth transitions for all interactive elements */ +a, button { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +body { + font-family: 'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/frontend/vite.config.js b/frontend/vite.config.js new file mode 100644 index 0000000..20d19e9 --- /dev/null +++ b/frontend/vite.config.js @@ -0,0 +1,13 @@ +import { defineConfig } from 'vite' +import tailwindcss from '@tailwindcss/vite' + +export default defineConfig({ + plugins: [tailwindcss()], + build: { + outDir: '../site', + emptyOutDir: false, + rollupOptions: { + input: 'index.html', + }, + }, +}) diff --git a/generate_configs.rb b/generate_configs.rb new file mode 100644 index 0000000..6798961 --- /dev/null +++ b/generate_configs.rb @@ -0,0 +1,132 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# Generate per-schema lutaml-xsd config files for each UnitsML XSD schema + +require "yaml" +require "json" + +SCHEMAS = [ + { file: "schemas/unitsml/unitsml-v1.0.xsd", + name: "UnitsML 1.0", + version: "1.0", + status: "current", + prefix: "unitsml", + namespace: "https://schema.unitsml.org/unitsml/1.0" }, + { file: "schemas/unitsml/unitsml-v1.0-csd04.xsd", + name: "UnitsML 1.0 CSD04", + version: "1.0-csd04", + status: "draft", + prefix: "unitsml-csd", + namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-1.0" }, + { file: "schemas/unitsml/unitsml-v0.9.19.xsd", + name: "UnitsML 0.9.19", + version: "0.9.19", + status: "historical", + prefix: "unitsml-0919", + namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.19" }, + { file: "schemas/unitsml/unitsml-v0.9.12.xsd", + name: "UnitsML 0.9.12", + version: "0.9.12", + status: "historical", + prefix: "unitsml-0912", + namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.12" }, + { file: "schemas/unitsml/unitsml-v0.9.10.xsd", + name: "UnitsML 0.9.10", + version: "0.9.10", + status: "historical", + prefix: "unitsml-0910", + namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.10" }, + { file: "schemas/unitsml/unitsml-v0.9.7.xsd", + name: "UnitsML 0.9.7", + version: "0.9.7", + status: "historical", + prefix: "unitsml-097", + namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.7" }, + { file: "schemas/unitsml/unitsml-v0.9.2.xsd", + name: "UnitsML 0.9.2", + version: "0.9.2", + status: "historical", + prefix: "unitsml-092", + namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.2" }, + { file: "schemas/unitsml/unitsml-v0.9.xsd", + name: "UnitsML 0.9", + version: "0.9", + status: "historical", + prefix: "unitsml-09", + namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9" }, + { file: "schemas/unitsmllite/unitsmllite-v0.9.18.xsd", + name: "UnitsML-Lite 0.9.18", + version: "0.9.18", + status: "deprecated", + prefix: "unitsml-lite", + namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema_lite-0.9.18" }, +].freeze + +config_dir = File.join(__dir__, "configs") +Dir.mkdir(config_dir) unless Dir.exist?(config_dir) + +# Generate per-schema config YAML files +SCHEMAS.each do |schema| + slug = File.basename(schema[:file], ".xsd") + config = { + "metadata" => { + "name" => schema[:name], + "version" => schema[:version], + "title" => "#{schema[:name]} Schema Browser", + "description" => "Interactive documentation for the #{schema[:name]} XML schema.", + "license" => "OASIS", + }, + "build" => { + "xsd_mode" => "include_all", + "resolution_mode" => "resolved", + "serialization_format" => "marshal", + }, + "files" => ["../#{schema[:file]}"], + "namespace_mappings" => [ + { "prefix" => "xs", "uri" => "http://www.w3.org/2001/XMLSchema" }, + { "prefix" => schema[:prefix], "uri" => schema[:namespace] }, + ], + "appearance" => { + "logos" => { + "long" => { + "light" => { "path" => "../images/logo-unitsml.svg" }, + "dark" => { "path" => "../images/logo-unitsml.svg" }, + }, + "lutaml_logo" => { + "light" => { "url" => "https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg" }, + "dark" => { "url" => "https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg" }, + }, + }, + "colors" => { + "primary" => "#2d2c69", + "primary_light" => "#57a0fe", + "primary_dark" => "#1a1950", + "accent" => "#30dfc0", + "background_primary" => "#ffffff", + "background_secondary" => "#f8fafc", + }, + }, + } + + path = File.join(config_dir, "#{slug}.yml") + File.write(path, YAML.dump(config).gsub("---", "# #{schema[:name]}\n---")) + puts "Generated: #{path}" +end + +# Generate schema index JSON for the index page +index = SCHEMAS.map do |schema| + slug = File.basename(schema[:file], ".xsd") + { + "name" => schema[:name], + "version" => schema[:version], + "status" => schema[:status], + "namespace" => schema[:namespace], + "xsd_path" => schema[:file], + "browser_path" => "#{slug}.html", + } +end + +index_path = File.join(__dir__, "schemas_index.json") +File.write(index_path, JSON.pretty_generate(index)) +puts "Generated: #{index_path}" diff --git a/images/logo-unitsml.svg b/images/logo-unitsml.svg new file mode 100644 index 0000000..1acb44e --- /dev/null +++ b/images/logo-unitsml.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/schemas b/schemas index de01658..f1a6e42 160000 --- a/schemas +++ b/schemas @@ -1 +1 @@ -Subproject commit de016581e4ab886550608ae26fd457f669b0938f +Subproject commit f1a6e42d99344985704f162099d4e7b46f47f694